mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-22 04:26:23 +08:00
feat: isolated plugin system (#2742)
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
import type { MessagePort, Worker } from 'node:worker_threads';
|
||||
|
||||
import type { EventBasedChannel } from 'async-call-rpc';
|
||||
|
||||
export function getTime() {
|
||||
return new Date().getTime();
|
||||
}
|
||||
@@ -9,3 +13,33 @@ export const isMacOS = () => {
|
||||
export const isWindows = () => {
|
||||
return process.platform === 'win32';
|
||||
};
|
||||
|
||||
export class ThreadWorkerChannel implements EventBasedChannel {
|
||||
constructor(private worker: Worker) {}
|
||||
|
||||
on(listener: (data: unknown) => void) {
|
||||
this.worker.addListener('message', listener);
|
||||
return () => {
|
||||
this.worker.removeListener('message', listener);
|
||||
};
|
||||
}
|
||||
|
||||
send(data: unknown) {
|
||||
this.worker.postMessage(data);
|
||||
}
|
||||
}
|
||||
|
||||
export class MessagePortChannel implements EventBasedChannel {
|
||||
constructor(private port: MessagePort) {}
|
||||
|
||||
on(listener: (data: unknown) => void) {
|
||||
this.port.addListener('message', listener);
|
||||
return () => {
|
||||
this.port.removeListener('message', listener);
|
||||
};
|
||||
}
|
||||
|
||||
send(data: unknown) {
|
||||
this.port.postMessage(data);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user