@anonaddy/omni-worker 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -24
- package/dist/cjs/index.js +5 -81
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/node/builder/constants.js +19 -0
- package/dist/cjs/node/builder/constants.js.map +1 -0
- package/dist/cjs/node/builder/helpers.js +158 -0
- package/dist/cjs/node/builder/helpers.js.map +1 -0
- package/dist/cjs/node/builder/index.js +25 -0
- package/dist/cjs/node/builder/index.js.map +1 -0
- package/dist/cjs/{builder → node/builder}/node.js +6 -32
- package/dist/cjs/node/builder/node.js.map +1 -0
- package/dist/cjs/node/index.js +66 -0
- package/dist/cjs/node/index.js.map +1 -0
- package/dist/cjs/node/pool.js +86 -0
- package/dist/cjs/node/pool.js.map +1 -0
- package/dist/mjs/index.js +2 -43
- package/dist/mjs/index.js.map +1 -1
- package/dist/mjs/node/builder/constants.js +13 -0
- package/dist/mjs/node/builder/constants.js.map +1 -0
- package/dist/mjs/node/builder/helpers.js +151 -0
- package/dist/mjs/node/builder/helpers.js.map +1 -0
- package/dist/mjs/node/builder/index.js +17 -0
- package/dist/mjs/node/builder/index.js.map +1 -0
- package/dist/mjs/node/builder/node.js +14 -0
- package/dist/mjs/node/builder/node.js.map +1 -0
- package/dist/mjs/node/index.js +59 -0
- package/dist/mjs/node/index.js.map +1 -0
- package/dist/mjs/node/pool.js +82 -0
- package/dist/mjs/node/pool.js.map +1 -0
- package/dist/types/index.d.ts +3 -25
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/node/builder/constants.d.ts +5 -0
- package/dist/types/node/builder/constants.d.ts.map +1 -0
- package/dist/types/node/builder/helpers.d.ts +3 -0
- package/dist/types/node/builder/helpers.d.ts.map +1 -0
- package/dist/types/node/builder/index.d.ts +8 -0
- package/dist/types/node/builder/index.d.ts.map +1 -0
- package/dist/types/node/builder/node.d.ts +7 -0
- package/dist/types/node/builder/node.d.ts.map +1 -0
- package/dist/types/node/index.d.ts +30 -0
- package/dist/types/node/index.d.ts.map +1 -0
- package/dist/types/node/pool.d.ts +30 -0
- package/dist/types/node/pool.d.ts.map +1 -0
- package/package.json +16 -9
- package/dist/cjs/builder/helpers.js +0 -22
- package/dist/cjs/builder/helpers.js.map +0 -1
- package/dist/cjs/builder/node.js.map +0 -1
- package/dist/cjs/builder/plugins/external-imports.js +0 -44
- package/dist/cjs/builder/plugins/external-imports.js.map +0 -1
- package/dist/cjs/builder/plugins/native-module.js +0 -18
- package/dist/cjs/builder/plugins/native-module.js.map +0 -1
- package/dist/cjs/types/omni-worker.js +0 -3
- package/dist/cjs/types/omni-worker.js.map +0 -1
- package/dist/mjs/builder/helpers.js +0 -16
- package/dist/mjs/builder/helpers.js.map +0 -1
- package/dist/mjs/builder/node.js +0 -40
- package/dist/mjs/builder/node.js.map +0 -1
- package/dist/mjs/builder/plugins/external-imports.js +0 -39
- package/dist/mjs/builder/plugins/external-imports.js.map +0 -1
- package/dist/mjs/builder/plugins/native-module.js +0 -15
- package/dist/mjs/builder/plugins/native-module.js.map +0 -1
- package/dist/mjs/types/omni-worker.js +0 -2
- package/dist/mjs/types/omni-worker.js.map +0 -1
- package/dist/types/builder/helpers.d.ts +0 -2
- package/dist/types/builder/helpers.d.ts.map +0 -1
- package/dist/types/builder/node.d.ts +0 -3
- package/dist/types/builder/node.d.ts.map +0 -1
- package/dist/types/builder/plugins/external-imports.d.ts +0 -4
- package/dist/types/builder/plugins/external-imports.d.ts.map +0 -1
- package/dist/types/builder/plugins/native-module.d.ts +0 -3
- package/dist/types/builder/plugins/native-module.d.ts.map +0 -1
- package/dist/types/types/omni-worker.d.ts +0 -21
- package/dist/types/types/omni-worker.d.ts.map +0 -1
@@ -0,0 +1,86 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.NodeOmniWorkerPool = void 0;
|
4
|
+
const _1 = require(".");
|
5
|
+
class NodeOmniWorkerPool {
|
6
|
+
constructor(from, options) {
|
7
|
+
this._pool = [];
|
8
|
+
this._count = 0;
|
9
|
+
this._lastUseIdx = -1;
|
10
|
+
this.isInitialized = () => this._count > 0;
|
11
|
+
this.getNumOfWorkers = () => this._count;
|
12
|
+
this.use = () => {
|
13
|
+
if (!this.isInitialized()) {
|
14
|
+
return this._from.use();
|
15
|
+
}
|
16
|
+
else {
|
17
|
+
const lastIdx = this._lastUseIdx;
|
18
|
+
// first run or maxed out
|
19
|
+
if (lastIdx === this._count - 1 ||
|
20
|
+
lastIdx === -1) {
|
21
|
+
this._lastUseIdx = 0;
|
22
|
+
return this._pool[0].use();
|
23
|
+
// any other run
|
24
|
+
}
|
25
|
+
else {
|
26
|
+
this._lastUseIdx = lastIdx + 1;
|
27
|
+
return this._pool[lastIdx + 1].use();
|
28
|
+
}
|
29
|
+
}
|
30
|
+
};
|
31
|
+
this.destroy = async () => {
|
32
|
+
const fns = [];
|
33
|
+
this._pool.forEach(w => {
|
34
|
+
const fn = async () => {
|
35
|
+
await w.destroy();
|
36
|
+
};
|
37
|
+
fns.push(fn);
|
38
|
+
});
|
39
|
+
await Promise.all(fns.map(fn => fn()));
|
40
|
+
};
|
41
|
+
this._from = from;
|
42
|
+
this._options = options || { numOfWorkers: 1 };
|
43
|
+
this.applyOptions();
|
44
|
+
}
|
45
|
+
/**
|
46
|
+
* First builds the OmniWorkers and then launches a new NodeOmniWorker pool
|
47
|
+
* @param from The (relative) file path from your project's root to the worker .ts file
|
48
|
+
* @param options (Optional) Options object for launching the pool
|
49
|
+
*/
|
50
|
+
static async buildAndLaunch(from, options) {
|
51
|
+
const worker = await _1.NodeOmniWorker.build(from);
|
52
|
+
const pool = NodeOmniWorkerPool.launch(worker, options);
|
53
|
+
return pool;
|
54
|
+
}
|
55
|
+
/**
|
56
|
+
* Launches a new NodeOmniWorker pool according to the options provided
|
57
|
+
* @param worker An already built NodeOmniWorker
|
58
|
+
* @returns A newly created pool
|
59
|
+
*/
|
60
|
+
static launch(worker, options) {
|
61
|
+
const pool = new NodeOmniWorkerPool(worker, options);
|
62
|
+
return pool;
|
63
|
+
}
|
64
|
+
/**
|
65
|
+
* Applies the options provided
|
66
|
+
*/
|
67
|
+
applyOptions() {
|
68
|
+
const { numOfWorkers } = this._options;
|
69
|
+
let count = 0;
|
70
|
+
if (numOfWorkers === undefined) {
|
71
|
+
count = 1;
|
72
|
+
}
|
73
|
+
else {
|
74
|
+
count = numOfWorkers;
|
75
|
+
}
|
76
|
+
if (count < 1) {
|
77
|
+
throw Error(`number of workers must be at least 1`);
|
78
|
+
}
|
79
|
+
this._count = count;
|
80
|
+
for (let i = 0; i <= count; i++) {
|
81
|
+
this._pool = this._from.clone(count);
|
82
|
+
}
|
83
|
+
}
|
84
|
+
}
|
85
|
+
exports.NodeOmniWorkerPool = NodeOmniWorkerPool;
|
86
|
+
//# sourceMappingURL=pool.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/node/pool.ts"],"names":[],"mappings":"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"}
|
package/dist/mjs/index.js
CHANGED
@@ -1,44 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
import nodeEndpoint from 'comlink/dist/umd/node-adapter.js';
|
4
|
-
import { buildApiNode } from './builder/node';
|
5
|
-
export class NodeOmniWorker {
|
6
|
-
constructor(api) {
|
7
|
-
this.isInitialized = () => (this._api !== undefined);
|
8
|
-
this.use = () => {
|
9
|
-
const isInitialized = this.isInitialized();
|
10
|
-
if (isInitialized) {
|
11
|
-
return this._api;
|
12
|
-
}
|
13
|
-
else {
|
14
|
-
throw Error('worker is not yet initialized. make sure to call the .set() function, first');
|
15
|
-
}
|
16
|
-
};
|
17
|
-
this._api = api;
|
18
|
-
return this;
|
19
|
-
}
|
20
|
-
/**
|
21
|
-
* Build the OmniWorker from a worker file. Please note that the functions
|
22
|
-
* on the worker file need to first be exposed using the expose({ <functions> })
|
23
|
-
* functions, in order to start this build step.
|
24
|
-
*
|
25
|
-
* @param path The relative path to where the worker module is located
|
26
|
-
* @returns A new Node OmniWorker
|
27
|
-
*/
|
28
|
-
static async build(path) {
|
29
|
-
const api = await buildApiNode(path);
|
30
|
-
return new NodeOmniWorker(api);
|
31
|
-
}
|
32
|
-
}
|
33
|
-
/**
|
34
|
-
* Expose the functions inside the worker to the rest of the application.
|
35
|
-
* After having exposed the functions, the build step can be initiated.
|
36
|
-
* @param functions An object with functions inside the worker to be exposed to
|
37
|
-
* the rest of the application.
|
38
|
-
*/
|
39
|
-
NodeOmniWorker.expose = (functions) => {
|
40
|
-
if (parentPort) {
|
41
|
-
Comlink.expose(functions, nodeEndpoint(parentPort));
|
42
|
-
}
|
43
|
-
};
|
1
|
+
export { NodeOmniWorker } from './node';
|
2
|
+
export { NodeOmniWorkerPool } from './node/pool';
|
44
3
|
//# sourceMappingURL=index.js.map
|
package/dist/mjs/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,cAAc,EACf,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,kBAAkB,EACnB,MAAM,aAAa,CAAC"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import ts from "typescript";
|
2
|
+
export const tsCompilerOptions = {
|
3
|
+
module: ts.ModuleKind.CommonJS,
|
4
|
+
target: ts.ScriptTarget.ES2018,
|
5
|
+
};
|
6
|
+
export const tsNodeCompilerOptions = {
|
7
|
+
transpileOnly: true,
|
8
|
+
compilerOptions: {
|
9
|
+
module: 'CommonJS',
|
10
|
+
target: 'ES5'
|
11
|
+
}
|
12
|
+
};
|
13
|
+
//# sourceMappingURL=constants.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/node/builder/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAO,YAAY,CAAC;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ;IAC9B,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;CAC/B,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE;QACf,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,KAAK;KACd;CACF,CAAA"}
|
@@ -0,0 +1,151 @@
|
|
1
|
+
import nodeExternals from 'webpack-node-externals';
|
2
|
+
import path from 'path';
|
3
|
+
import fs from 'fs';
|
4
|
+
import { webpack } from 'webpack';
|
5
|
+
import TerserPlugin from 'terser-webpack-plugin';
|
6
|
+
const BUILD_PATH = path.join(__dirname, '.out');
|
7
|
+
const BUILD_FILENAME = 'bundle.js';
|
8
|
+
const BUILD_FILE_PATH = path.join(BUILD_PATH, BUILD_FILENAME);
|
9
|
+
export function getCallerDir() {
|
10
|
+
try {
|
11
|
+
const stack = new Error().stack;
|
12
|
+
const line = stack.split('\n')[1].trim();
|
13
|
+
const segment = line.split(' ')[1];
|
14
|
+
const part = segment.split(':')[0];
|
15
|
+
const dirName = path.dirname(part);
|
16
|
+
return dirName;
|
17
|
+
}
|
18
|
+
catch (e) {
|
19
|
+
// console.error('building caller path failed', e);
|
20
|
+
return './';
|
21
|
+
}
|
22
|
+
}
|
23
|
+
export function buildWorkerCode(entryFile) {
|
24
|
+
return new Promise((resolve, reject) => {
|
25
|
+
if (!fs.existsSync(BUILD_PATH)) {
|
26
|
+
fs.mkdirSync(BUILD_PATH, { recursive: true });
|
27
|
+
}
|
28
|
+
const config = getWebpackConfig(entryFile);
|
29
|
+
const compiler = webpack(config);
|
30
|
+
compiler.run((err, stats) => {
|
31
|
+
if (err) {
|
32
|
+
reject(err);
|
33
|
+
return;
|
34
|
+
}
|
35
|
+
/*
|
36
|
+
console.log(stats?.toString({
|
37
|
+
chunks: false,
|
38
|
+
colors: true
|
39
|
+
}));
|
40
|
+
*/
|
41
|
+
const bundledCode = fs
|
42
|
+
.readFileSync(BUILD_FILE_PATH, 'utf8');
|
43
|
+
resolve(bundledCode);
|
44
|
+
// clean up the build folder
|
45
|
+
fs.rm(BUILD_PATH, { recursive: true, force: true }, (err) => {
|
46
|
+
if (err) {
|
47
|
+
reject(err);
|
48
|
+
}
|
49
|
+
});
|
50
|
+
});
|
51
|
+
});
|
52
|
+
}
|
53
|
+
const resolveNodeModules = (packageName) => require.resolve(packageName, {
|
54
|
+
paths: [
|
55
|
+
path.resolve(__dirname, 'node_modules')
|
56
|
+
]
|
57
|
+
});
|
58
|
+
const getWebpackConfig = (entry) => ({
|
59
|
+
entry,
|
60
|
+
output: {
|
61
|
+
filename: BUILD_FILENAME,
|
62
|
+
path: BUILD_PATH,
|
63
|
+
libraryTarget: 'commonjs2',
|
64
|
+
module: false,
|
65
|
+
iife: false,
|
66
|
+
umdNamedDefine: true,
|
67
|
+
},
|
68
|
+
resolve: {
|
69
|
+
extensions: ['.ts', '.js'],
|
70
|
+
fallback: {
|
71
|
+
assert: false,
|
72
|
+
buffer: false,
|
73
|
+
console: false,
|
74
|
+
constants: false,
|
75
|
+
crypto: false,
|
76
|
+
domain: false,
|
77
|
+
events: false,
|
78
|
+
fs: false,
|
79
|
+
http: false,
|
80
|
+
https: false,
|
81
|
+
module: false,
|
82
|
+
net: false,
|
83
|
+
os: false,
|
84
|
+
path: false,
|
85
|
+
process: false,
|
86
|
+
punycode: false,
|
87
|
+
querystring: false,
|
88
|
+
readline: false,
|
89
|
+
stream: false,
|
90
|
+
string_decoder: false,
|
91
|
+
sys: false,
|
92
|
+
timers: false,
|
93
|
+
tls: false,
|
94
|
+
tty: false,
|
95
|
+
url: false,
|
96
|
+
util: false,
|
97
|
+
vm: false,
|
98
|
+
worker_threads: false,
|
99
|
+
zlib: false,
|
100
|
+
},
|
101
|
+
},
|
102
|
+
resolveLoader: {
|
103
|
+
modules: [
|
104
|
+
path.resolve(process.cwd(), 'node_modules')
|
105
|
+
]
|
106
|
+
},
|
107
|
+
mode: 'production',
|
108
|
+
optimization: {
|
109
|
+
minimize: true,
|
110
|
+
minimizer: [
|
111
|
+
new TerserPlugin({
|
112
|
+
terserOptions: {
|
113
|
+
compress: {
|
114
|
+
drop_console: true,
|
115
|
+
drop_debugger: true
|
116
|
+
},
|
117
|
+
}
|
118
|
+
})
|
119
|
+
]
|
120
|
+
},
|
121
|
+
target: 'node',
|
122
|
+
module: {
|
123
|
+
rules: [
|
124
|
+
{
|
125
|
+
test: /\.ts$/,
|
126
|
+
use: [
|
127
|
+
{
|
128
|
+
loader: resolveNodeModules('babel-loader'),
|
129
|
+
options: {
|
130
|
+
presets: [
|
131
|
+
resolveNodeModules('@babel/preset-env'),
|
132
|
+
resolveNodeModules('@babel/preset-typescript')
|
133
|
+
],
|
134
|
+
plugins: [
|
135
|
+
resolveNodeModules('@babel/plugin-transform-modules-commonjs')
|
136
|
+
]
|
137
|
+
},
|
138
|
+
}
|
139
|
+
],
|
140
|
+
exclude: /node_modules/
|
141
|
+
}
|
142
|
+
],
|
143
|
+
},
|
144
|
+
devtool: 'source-map',
|
145
|
+
stats: 'verbose',
|
146
|
+
externals: [nodeExternals({
|
147
|
+
importType: 'commonjs',
|
148
|
+
})],
|
149
|
+
cache: false
|
150
|
+
});
|
151
|
+
//# sourceMappingURL=helpers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/node/builder/helpers.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import Comlink from 'comlink';
|
2
|
+
import { Worker } from 'worker_threads';
|
3
|
+
import nodeEndpoint from 'comlink/dist/umd/node-adapter.js';
|
4
|
+
import { buildWorkerCode, getCallerDir } from './helpers';
|
5
|
+
import path from 'path';
|
6
|
+
export const genWorkerCodeFromFile = async (workerPath) => {
|
7
|
+
const callerDir = getCallerDir();
|
8
|
+
const resolvedPath = path.resolve(callerDir, workerPath);
|
9
|
+
const code = await buildWorkerCode(resolvedPath);
|
10
|
+
return code;
|
11
|
+
};
|
12
|
+
export const buildNodeApiAndWorkerFromCode = (code) => {
|
13
|
+
const worker = new Worker(code, { eval: true });
|
14
|
+
const api = Comlink.wrap(nodeEndpoint(worker));
|
15
|
+
return { worker, api };
|
16
|
+
};
|
17
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/node/builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,UAAkB,EACD,EAAE;IACnB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,IAAY,EACsC,EAAE;IAEpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAElD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC,CAAA"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import * as Comlink from 'comlink';
|
2
|
+
import { Worker } from 'worker_threads';
|
3
|
+
import nodeEndpoint from 'comlink/dist/umd/node-adapter.js';
|
4
|
+
import { buildWorkerCode, getCallerDir } from './helpers';
|
5
|
+
import path from 'path';
|
6
|
+
export const buildApiNode = async (workerPath) => {
|
7
|
+
const callerDir = getCallerDir();
|
8
|
+
const resolvedPath = path.resolve(callerDir, workerPath);
|
9
|
+
const js = await buildWorkerCode(resolvedPath);
|
10
|
+
const worker = new Worker(js, { eval: true });
|
11
|
+
const api = Comlink.wrap(nodeEndpoint(worker));
|
12
|
+
return { api, worker };
|
13
|
+
};
|
14
|
+
//# sourceMappingURL=node.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../src/node/builder/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,UAAkB,EACkC,EAAE;IAEtD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEzD,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAElD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC,CAAA"}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import { parentPort } from 'worker_threads';
|
2
|
+
import Comlink from 'comlink';
|
3
|
+
import nodeEndpoint from 'comlink/dist/umd/node-adapter';
|
4
|
+
import { buildNodeApiAndWorkerFromCode, genWorkerCodeFromFile } from './builder';
|
5
|
+
export class NodeOmniWorker {
|
6
|
+
constructor(code, worker, api) {
|
7
|
+
this.isInitialized = () => (this._api !== undefined);
|
8
|
+
this.use = () => {
|
9
|
+
const isInitialized = this.isInitialized();
|
10
|
+
if (isInitialized) {
|
11
|
+
return this._api;
|
12
|
+
}
|
13
|
+
else {
|
14
|
+
throw Error('worker is not yet initialized. make sure to call the .set() function, first');
|
15
|
+
}
|
16
|
+
};
|
17
|
+
this.clone = (numOfTimes) => {
|
18
|
+
const workers = [];
|
19
|
+
for (let i = 0; i <= numOfTimes; i++) {
|
20
|
+
const code = this._code;
|
21
|
+
const { worker, api } = buildNodeApiAndWorkerFromCode(code);
|
22
|
+
workers.push(new NodeOmniWorker(code, worker, api));
|
23
|
+
}
|
24
|
+
return workers;
|
25
|
+
};
|
26
|
+
this.destroy = async () => {
|
27
|
+
await this._worker.terminate();
|
28
|
+
};
|
29
|
+
this._code = code;
|
30
|
+
this._worker = worker;
|
31
|
+
this._api = api;
|
32
|
+
return this;
|
33
|
+
}
|
34
|
+
/**
|
35
|
+
* Build the OmniWorker from a worker file. Please note that the functions
|
36
|
+
* on the worker file need to first be exposed using the expose({ <functions> })
|
37
|
+
* functions, in order to start this build step.
|
38
|
+
*
|
39
|
+
* @param path The relative path to where the worker module is located
|
40
|
+
* @returns A new Node OmniWorker
|
41
|
+
*/
|
42
|
+
static async build(path) {
|
43
|
+
const code = await genWorkerCodeFromFile(path);
|
44
|
+
const { worker, api } = buildNodeApiAndWorkerFromCode(code);
|
45
|
+
return new NodeOmniWorker(code, worker, api);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
/**
|
49
|
+
* Expose the functions inside the worker to the rest of the application.
|
50
|
+
* After having exposed the functions, the build step can be initiated.
|
51
|
+
* @param functions An object with functions inside the worker to be exposed to
|
52
|
+
* the rest of the application.
|
53
|
+
*/
|
54
|
+
NodeOmniWorker.expose = (functions) => {
|
55
|
+
if (parentPort) {
|
56
|
+
Comlink.expose(functions, nodeEndpoint(parentPort));
|
57
|
+
}
|
58
|
+
};
|
59
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAU,MAAM,gBAAgB,CAAC;AACpD,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAGjF,MAAM,OAAO,cAAc;IAKzB,YACE,IAAY,EACZ,MAAc,EACd,GAA4B;QAoCvB,kBAAa,GAAG,GAAY,EAAE,CAAC,CACpC,IAAI,CAAC,IAAI,KAAK,SAAS,CACxB,CAAC;QAEK,QAAG,GAAG,GAAG,EAAE;YAChB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC,IAAK,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC,CAAA;QAEM,UAAK,GAAG,CAAC,UAAkB,EAAE,EAAE;YACpC,MAAM,OAAO,GAAwB,EAAE,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;gBACxB,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,6BAA6B,CAAI,IAAI,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAI,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAA;QAEM,YAAO,GAAG,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACjC,CAAC,CAAA;QA3DC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAcD;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAAC,KAAK,CACvB,IAAY;QAEZ,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,6BAA6B,CAAI,IAAI,CAAC,CAAC;QAC/D,OAAO,IAAI,cAAc,CAAI,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;;AA1BD;;;;;GAKG;AACW,qBAAM,GAAG,CAAmB,SAAY,EAAE,EAAE;IACxD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,AAJmB,CAInB"}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import { NodeOmniWorker } from ".";
|
2
|
+
export class NodeOmniWorkerPool {
|
3
|
+
constructor(from, options) {
|
4
|
+
this._pool = [];
|
5
|
+
this._count = 0;
|
6
|
+
this._lastUseIdx = -1;
|
7
|
+
this.isInitialized = () => this._count > 0;
|
8
|
+
this.getNumOfWorkers = () => this._count;
|
9
|
+
this.use = () => {
|
10
|
+
if (!this.isInitialized()) {
|
11
|
+
return this._from.use();
|
12
|
+
}
|
13
|
+
else {
|
14
|
+
const lastIdx = this._lastUseIdx;
|
15
|
+
// first run or maxed out
|
16
|
+
if (lastIdx === this._count - 1 ||
|
17
|
+
lastIdx === -1) {
|
18
|
+
this._lastUseIdx = 0;
|
19
|
+
return this._pool[0].use();
|
20
|
+
// any other run
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
this._lastUseIdx = lastIdx + 1;
|
24
|
+
return this._pool[lastIdx + 1].use();
|
25
|
+
}
|
26
|
+
}
|
27
|
+
};
|
28
|
+
this.destroy = async () => {
|
29
|
+
const fns = [];
|
30
|
+
this._pool.forEach(w => {
|
31
|
+
const fn = async () => {
|
32
|
+
await w.destroy();
|
33
|
+
};
|
34
|
+
fns.push(fn);
|
35
|
+
});
|
36
|
+
await Promise.all(fns.map(fn => fn()));
|
37
|
+
};
|
38
|
+
this._from = from;
|
39
|
+
this._options = options || { numOfWorkers: 1 };
|
40
|
+
this.applyOptions();
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* First builds the OmniWorkers and then launches a new NodeOmniWorker pool
|
44
|
+
* @param from The (relative) file path from your project's root to the worker .ts file
|
45
|
+
* @param options (Optional) Options object for launching the pool
|
46
|
+
*/
|
47
|
+
static async buildAndLaunch(from, options) {
|
48
|
+
const worker = await NodeOmniWorker.build(from);
|
49
|
+
const pool = NodeOmniWorkerPool.launch(worker, options);
|
50
|
+
return pool;
|
51
|
+
}
|
52
|
+
/**
|
53
|
+
* Launches a new NodeOmniWorker pool according to the options provided
|
54
|
+
* @param worker An already built NodeOmniWorker
|
55
|
+
* @returns A newly created pool
|
56
|
+
*/
|
57
|
+
static launch(worker, options) {
|
58
|
+
const pool = new NodeOmniWorkerPool(worker, options);
|
59
|
+
return pool;
|
60
|
+
}
|
61
|
+
/**
|
62
|
+
* Applies the options provided
|
63
|
+
*/
|
64
|
+
applyOptions() {
|
65
|
+
const { numOfWorkers } = this._options;
|
66
|
+
let count = 0;
|
67
|
+
if (numOfWorkers === undefined) {
|
68
|
+
count = 1;
|
69
|
+
}
|
70
|
+
else {
|
71
|
+
count = numOfWorkers;
|
72
|
+
}
|
73
|
+
if (count < 1) {
|
74
|
+
throw Error(`number of workers must be at least 1`);
|
75
|
+
}
|
76
|
+
this._count = count;
|
77
|
+
for (let i = 0; i <= count; i++) {
|
78
|
+
this._pool = this._from.clone(count);
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
//# sourceMappingURL=pool.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/node/pool.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
@@ -1,26 +1,4 @@
|
|
1
|
-
|
2
|
-
export {
|
3
|
-
|
4
|
-
export declare class NodeOmniWorker<T> implements IOmniWorker<T> {
|
5
|
-
private _api;
|
6
|
-
private constructor();
|
7
|
-
/**
|
8
|
-
* Expose the functions inside the worker to the rest of the application.
|
9
|
-
* After having exposed the functions, the build step can be initiated.
|
10
|
-
* @param functions An object with functions inside the worker to be exposed to
|
11
|
-
* the rest of the application.
|
12
|
-
*/
|
13
|
-
static expose: <T_1>(functions: T_1) => void;
|
14
|
-
/**
|
15
|
-
* Build the OmniWorker from a worker file. Please note that the functions
|
16
|
-
* on the worker file need to first be exposed using the expose({ <functions> })
|
17
|
-
* functions, in order to start this build step.
|
18
|
-
*
|
19
|
-
* @param path The relative path to where the worker module is located
|
20
|
-
* @returns A new Node OmniWorker
|
21
|
-
*/
|
22
|
-
static build<T extends object>(path: string): Promise<NodeOmniWorker<T>>;
|
23
|
-
isInitialized: () => boolean;
|
24
|
-
use: () => Comlink.Remote<T>;
|
25
|
-
}
|
1
|
+
export { IOmniWorker, IOmniWorkerPoolOptions, } from './types/index.d';
|
2
|
+
export { NodeOmniWorker } from './node';
|
3
|
+
export { NodeOmniWorkerPool } from './node/pool';
|
26
4
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,cAAc,EACf,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,kBAAkB,EACnB,MAAM,aAAa,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/node/builder/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,MAAO,YAAY,CAAC;AAE7B,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,eAGlC,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,eAMnC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/node/builder/helpers.ts"],"names":[],"mappings":"AAWA,wBAAgB,YAAY,WAa3B;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,mBAoChD"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import Comlink from 'comlink';
|
2
|
+
import { Worker } from 'worker_threads';
|
3
|
+
export declare const genWorkerCodeFromFile: (workerPath: string) => Promise<string>;
|
4
|
+
export declare const buildNodeApiAndWorkerFromCode: <T>(code: string) => {
|
5
|
+
worker: Worker;
|
6
|
+
api: Comlink.RemoteObject<T>;
|
7
|
+
};
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/node/builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxC,eAAO,MAAM,qBAAqB,eACpB,MAAM,KACjB,OAAO,CAAC,MAAM,CAKhB,CAAA;AAED,eAAO,MAAM,6BAA6B,GAAI,CAAC,QACvC,MAAM,KACX;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;CAMhD,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/node/builder/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxC,eAAO,MAAM,YAAY,GAAU,CAAC,cACtB,MAAM,KACjB,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAWnD,CAAA"}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { IOmniWorker } from '../types/index.d';
|
2
|
+
import Comlink from 'comlink';
|
3
|
+
import { IPoolable } from '../types/pool.d';
|
4
|
+
export declare class NodeOmniWorker<T> implements IOmniWorker<T>, IPoolable<T> {
|
5
|
+
private _api;
|
6
|
+
private _worker;
|
7
|
+
private _code;
|
8
|
+
private constructor();
|
9
|
+
/**
|
10
|
+
* Expose the functions inside the worker to the rest of the application.
|
11
|
+
* After having exposed the functions, the build step can be initiated.
|
12
|
+
* @param functions An object with functions inside the worker to be exposed to
|
13
|
+
* the rest of the application.
|
14
|
+
*/
|
15
|
+
static expose: <T_1 extends object>(functions: T_1) => void;
|
16
|
+
/**
|
17
|
+
* Build the OmniWorker from a worker file. Please note that the functions
|
18
|
+
* on the worker file need to first be exposed using the expose({ <functions> })
|
19
|
+
* functions, in order to start this build step.
|
20
|
+
*
|
21
|
+
* @param path The relative path to where the worker module is located
|
22
|
+
* @returns A new Node OmniWorker
|
23
|
+
*/
|
24
|
+
static build<T extends object>(path: string): Promise<NodeOmniWorker<T>>;
|
25
|
+
isInitialized: () => boolean;
|
26
|
+
use: () => Comlink.RemoteObject<T>;
|
27
|
+
clone: (numOfTimes: number) => NodeOmniWorker<T>[];
|
28
|
+
destroy: () => Promise<void>;
|
29
|
+
}
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,cAAc,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO;IAWP;;;;;OAKG;IACH,OAAc,MAAM,eAAc,MAAM,aAAa,GAAC,UAIrD;IAED;;;;;;;OAOG;WACiB,KAAK,CAAC,CAAC,SAAS,MAAM,EACxC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAMtB,aAAa,QAAO,OAAO,CAEhC;IAEK,GAAG,gCAOT;IAEM,KAAK,eAAgB,MAAM,yBAQjC;IAEM,OAAO,sBAEb;CACF"}
|