mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-01-18 17:47:37 +01:00
43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import { InternalEvent } from '@yaakapp/api';
|
|
import path from 'node:path';
|
|
import { Worker } from 'node:worker_threads';
|
|
import { EventChannel } from './EventChannel';
|
|
|
|
export class PluginHandle {
|
|
readonly #worker: Worker;
|
|
|
|
constructor(
|
|
readonly pluginDir: string,
|
|
readonly pluginRefId: string,
|
|
readonly events: EventChannel,
|
|
) {
|
|
const workerPath = process.env.YAAK_WORKER_PATH ?? path.join(__dirname, 'index.worker.cjs');
|
|
this.#worker = new Worker(workerPath, {
|
|
workerData: {
|
|
pluginDir,
|
|
pluginRefId,
|
|
},
|
|
});
|
|
|
|
this.#worker.on('message', (e) => this.events.emit(e));
|
|
this.#worker.on('error', this.#handleError.bind(this));
|
|
this.#worker.on('exit', this.#handleExit.bind(this));
|
|
}
|
|
|
|
sendToWorker(event: InternalEvent) {
|
|
this.#worker.postMessage(event);
|
|
}
|
|
|
|
async #handleError(err: Error) {
|
|
console.error('Plugin errored', this.pluginDir, err);
|
|
}
|
|
|
|
async #handleExit(code: number) {
|
|
if (code === 0) {
|
|
console.log('Plugin exited successfully', this.pluginDir);
|
|
} else {
|
|
console.log('Plugin exited with error', code, this.pluginDir);
|
|
}
|
|
}
|
|
}
|