This commit is contained in:
Morten Olsen
2024-01-11 09:03:14 +01:00
commit bf980bd159
90 changed files with 7318 additions and 0 deletions

3
packages/runner/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
/dist/
/node_modules/
/coverage/

View File

@@ -0,0 +1,27 @@
{
"name": "@morten-olsen/mini-loader-runner",
"version": "1.0.0",
"main": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts",
"scripts": {
"build": "tsc --build"
},
"type": "module",
"files": [
"./dist"
],
"exports": {
".": {
"import": "./dist/esm/index.js"
}
},
"devDependencies": {
"@morten-olsen/mini-loader-configs": "workspace:^",
"@morten-olsen/mini-loader": "workspace:^",
"@types/node": "^20.10.8",
"typescript": "^5.3.3"
},
"dependencies": {
"eventemitter3": "^5.0.1"
}
}

View File

@@ -0,0 +1,45 @@
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,
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 };

View File

@@ -0,0 +1,9 @@
{
"extends": "@morten-olsen/mini-loader-configs/tsconfig.esm.json",
"compilerOptions": {
"outDir": "dist/esm",
},
"include": [
"src"
],
}