This commit is contained in:
Morten Olsen
2024-01-12 12:43:51 +01:00
commit 6d8e5bf955
109 changed files with 9246 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
import { Worker } from 'worker_threads';
import { EventEmitter } from 'eventemitter3';
import { Event } from '@morten-olsen/mini-loader';
type RunEvents = {
message: (event: Event) => void;
error: (error: Error) => void;
exit: () => void;
};
type RunOptions = {
script: string;
input?: unknown;
secrets?: Record<string, string>;
};
const run = async ({ script, input, secrets }: RunOptions) => {
const emitter = new EventEmitter<RunEvents>();
const worker = new Worker(script, {
eval: true,
env: secrets,
workerData: {
input,
secrets,
},
});
const promise = new Promise<void>((resolve, reject) => {
worker.on('message', (message: Event) => {
emitter.emit('message', message);
});
worker.on('exit', () => {
resolve();
});
worker.on('error', (error) => {
reject(error);
});
});
return {
emitter,
promise,
};
};
export { run };