@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.
Files changed (73) hide show
  1. package/README.md +80 -24
  2. package/dist/cjs/index.js +5 -81
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/node/builder/constants.js +19 -0
  5. package/dist/cjs/node/builder/constants.js.map +1 -0
  6. package/dist/cjs/node/builder/helpers.js +158 -0
  7. package/dist/cjs/node/builder/helpers.js.map +1 -0
  8. package/dist/cjs/node/builder/index.js +25 -0
  9. package/dist/cjs/node/builder/index.js.map +1 -0
  10. package/dist/cjs/{builder → node/builder}/node.js +6 -32
  11. package/dist/cjs/node/builder/node.js.map +1 -0
  12. package/dist/cjs/node/index.js +66 -0
  13. package/dist/cjs/node/index.js.map +1 -0
  14. package/dist/cjs/node/pool.js +86 -0
  15. package/dist/cjs/node/pool.js.map +1 -0
  16. package/dist/mjs/index.js +2 -43
  17. package/dist/mjs/index.js.map +1 -1
  18. package/dist/mjs/node/builder/constants.js +13 -0
  19. package/dist/mjs/node/builder/constants.js.map +1 -0
  20. package/dist/mjs/node/builder/helpers.js +151 -0
  21. package/dist/mjs/node/builder/helpers.js.map +1 -0
  22. package/dist/mjs/node/builder/index.js +17 -0
  23. package/dist/mjs/node/builder/index.js.map +1 -0
  24. package/dist/mjs/node/builder/node.js +14 -0
  25. package/dist/mjs/node/builder/node.js.map +1 -0
  26. package/dist/mjs/node/index.js +59 -0
  27. package/dist/mjs/node/index.js.map +1 -0
  28. package/dist/mjs/node/pool.js +82 -0
  29. package/dist/mjs/node/pool.js.map +1 -0
  30. package/dist/types/index.d.ts +3 -25
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/types/node/builder/constants.d.ts +5 -0
  33. package/dist/types/node/builder/constants.d.ts.map +1 -0
  34. package/dist/types/node/builder/helpers.d.ts +3 -0
  35. package/dist/types/node/builder/helpers.d.ts.map +1 -0
  36. package/dist/types/node/builder/index.d.ts +8 -0
  37. package/dist/types/node/builder/index.d.ts.map +1 -0
  38. package/dist/types/node/builder/node.d.ts +7 -0
  39. package/dist/types/node/builder/node.d.ts.map +1 -0
  40. package/dist/types/node/index.d.ts +30 -0
  41. package/dist/types/node/index.d.ts.map +1 -0
  42. package/dist/types/node/pool.d.ts +30 -0
  43. package/dist/types/node/pool.d.ts.map +1 -0
  44. package/package.json +16 -9
  45. package/dist/cjs/builder/helpers.js +0 -22
  46. package/dist/cjs/builder/helpers.js.map +0 -1
  47. package/dist/cjs/builder/node.js.map +0 -1
  48. package/dist/cjs/builder/plugins/external-imports.js +0 -44
  49. package/dist/cjs/builder/plugins/external-imports.js.map +0 -1
  50. package/dist/cjs/builder/plugins/native-module.js +0 -18
  51. package/dist/cjs/builder/plugins/native-module.js.map +0 -1
  52. package/dist/cjs/types/omni-worker.js +0 -3
  53. package/dist/cjs/types/omni-worker.js.map +0 -1
  54. package/dist/mjs/builder/helpers.js +0 -16
  55. package/dist/mjs/builder/helpers.js.map +0 -1
  56. package/dist/mjs/builder/node.js +0 -40
  57. package/dist/mjs/builder/node.js.map +0 -1
  58. package/dist/mjs/builder/plugins/external-imports.js +0 -39
  59. package/dist/mjs/builder/plugins/external-imports.js.map +0 -1
  60. package/dist/mjs/builder/plugins/native-module.js +0 -15
  61. package/dist/mjs/builder/plugins/native-module.js.map +0 -1
  62. package/dist/mjs/types/omni-worker.js +0 -2
  63. package/dist/mjs/types/omni-worker.js.map +0 -1
  64. package/dist/types/builder/helpers.d.ts +0 -2
  65. package/dist/types/builder/helpers.d.ts.map +0 -1
  66. package/dist/types/builder/node.d.ts +0 -3
  67. package/dist/types/builder/node.d.ts.map +0 -1
  68. package/dist/types/builder/plugins/external-imports.d.ts +0 -4
  69. package/dist/types/builder/plugins/external-imports.d.ts.map +0 -1
  70. package/dist/types/builder/plugins/native-module.d.ts +0 -3
  71. package/dist/types/builder/plugins/native-module.d.ts.map +0 -1
  72. package/dist/types/types/omni-worker.d.ts +0 -21
  73. 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
- import { parentPort } from 'worker_threads';
2
- import * as Comlink from 'comlink';
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,OAAO,cAAc;IAGzB,YAAoB,GAAsB;QAgCnC,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;QA1CC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAcD;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAAC,KAAK,CACvB,IAAY;QAEZ,MAAM,GAAG,GAAG,MAAM,YAAY,CAAI,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,cAAc,CAAI,GAAG,CAAC,CAAC;IACpC,CAAC;;AAzBD;;;;;GAKG;AACW,qBAAM,GAAG,CAAI,SAAY,EAAE,EAAE;IACzC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC,AAJmB,CAInB"}
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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"}
@@ -1,26 +1,4 @@
1
- import { IOmniWorker } from './types/omni-worker';
2
- export { IOmniWorker } from './types/omni-worker';
3
- import * as Comlink from 'comlink';
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,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,qBAAa,cAAc,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAoB;IAEhC,OAAO;IAKP;;;;;OAKG;IACH,OAAc,MAAM,mBAAkB,GAAC,UAItC;IAED;;;;;;;OAOG;WACiB,KAAK,CAAC,CAAC,SAAS,MAAM,EACxC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAKtB,aAAa,QAAO,OAAO,CAEhC;IAEK,GAAG,0BAOT;CACF"}
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,5 @@
1
+ import { TsConfigOptions } from "ts-node";
2
+ import ts from "typescript";
3
+ export declare const tsCompilerOptions: ts.CompilerOptions;
4
+ export declare const tsNodeCompilerOptions: TsConfigOptions;
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -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,3 @@
1
+ export declare function getCallerDir(): string;
2
+ export declare function buildWorkerCode(entryFile: string): Promise<string>;
3
+ //# sourceMappingURL=helpers.d.ts.map
@@ -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,7 @@
1
+ import * as Comlink from 'comlink';
2
+ import { Worker } from 'worker_threads';
3
+ export declare const buildApiNode: <T>(workerPath: string) => Promise<{
4
+ api: Comlink.Remote<T>;
5
+ worker: Worker;
6
+ }>;
7
+ //# sourceMappingURL=node.d.ts.map
@@ -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"}