synckit 0.7.3 → 0.8.2
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 +31 -2
- package/lib/index.cjs +124 -44
- package/lib/index.d.ts +11 -1
- package/lib/index.js +147 -54
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +1 -0
- package/package.json +89 -3
package/README.md
CHANGED
@@ -19,8 +19,13 @@ Perform async work synchronously in Node.js using `worker_threads` with first-cl
|
|
19
19
|
- [Usage](#usage)
|
20
20
|
- [Install](#install)
|
21
21
|
- [API](#api)
|
22
|
+
- [Options](#options)
|
22
23
|
- [Envs](#envs)
|
23
24
|
- [TypeScript](#typescript)
|
25
|
+
- [`ts-node`](#ts-node)
|
26
|
+
- [`esbuild-register`](#esbuild-register)
|
27
|
+
- [`esbuild-runner`](#esbuild-runner)
|
28
|
+
- [`tsx`](#tsx)
|
24
29
|
- [Benchmark](#benchmark)
|
25
30
|
- [Sponsors](#sponsors)
|
26
31
|
- [Backers](#backers)
|
@@ -46,7 +51,9 @@ npm i synckit
|
|
46
51
|
import { createSyncFn } from 'synckit'
|
47
52
|
|
48
53
|
// the worker path must be absolute
|
49
|
-
const syncFn = createSyncFn(require.resolve('./worker')
|
54
|
+
const syncFn = createSyncFn(require.resolve('./worker'), {
|
55
|
+
tsRunner: 'tsx', // optional, can be `'ts-node' | 'esbuild-register' | 'esbuild-runner' | 'tsx'`
|
56
|
+
})
|
50
57
|
|
51
58
|
// do whatever you want, you will get the result synchronously!
|
52
59
|
const result = syncFn(...args)
|
@@ -64,20 +71,42 @@ runAsWorker(async (...args) => {
|
|
64
71
|
|
65
72
|
You must make sure, the `result` is serializable by [`Structured Clone Algorithm`](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)
|
66
73
|
|
74
|
+
### Options
|
75
|
+
|
76
|
+
1. `bufferSize` same as env `SYNCKIT_BUFFER_SIZE`
|
77
|
+
2. `timeout` same as env `SYNCKIT_TIMEOUT`
|
78
|
+
3. `execArgv` same as env `SYNCKIT_EXEC_ARGV`
|
79
|
+
4. `tsRunner` same as env `SYNCKIT_TS_RUNNER`
|
80
|
+
|
67
81
|
### Envs
|
68
82
|
|
69
83
|
1. `SYNCKIT_BUFFER_SIZE`: `bufferSize` to create `SharedArrayBuffer` for `worker_threads` (default as `1024`)
|
70
84
|
2. `SYNCKIT_TIMEOUT`: `timeout` for performing the async job (no default)
|
71
85
|
3. `SYNCKIT_EXEC_ARGV`: List of node CLI options passed to the worker, split with comma `,`. (default as `[]`), see also [`node` docs](https://nodejs.org/api/worker_threads.html)
|
86
|
+
4. `SYNCKIT_TS_RUNNER`: Which TypeScript runner to be used, it could be very useful for development, could be `'ts-node' | 'esbuild-register' | 'esbuild-runner' | 'tsx'`, `'ts-node'` is used by default, make sure you have installed them already
|
72
87
|
|
73
88
|
### TypeScript
|
74
89
|
|
90
|
+
#### `ts-node`
|
91
|
+
|
75
92
|
If you want to use `ts-node` for worker file (a `.ts` file), it is supported out of box!
|
76
93
|
|
77
94
|
If you want to use a custom tsconfig as project instead of default `tsconfig.json`, use `TS_NODE_PROJECT` env. Please view [ts-node](https://github.com/TypeStrong/ts-node#tsconfig) for more details.
|
78
95
|
|
79
96
|
If you want to integrate with [tsconfig-paths](https://www.npmjs.com/package/tsconfig-paths), please view [ts-node](https://github.com/TypeStrong/ts-node#paths-and-baseurl) for more details.
|
80
97
|
|
98
|
+
#### `esbuild-register`
|
99
|
+
|
100
|
+
Please view <https://github.com/egoist/esbuild-register> for its document
|
101
|
+
|
102
|
+
#### `esbuild-runner`
|
103
|
+
|
104
|
+
Please view <https://github.com/folke/esbuild-runner> for its document
|
105
|
+
|
106
|
+
#### `tsx`
|
107
|
+
|
108
|
+
Please view <https://github.com/esbuild-kit/tsx> for its document
|
109
|
+
|
81
110
|
## Benchmark
|
82
111
|
|
83
112
|
It is about 20x faster than [`sync-threads`](https://github.com/lambci/sync-threads) but 3x slower than native for reading the file content itself 1000 times during runtime, and 18x faster than `sync-threads` but 4x slower than native for total time.
|
@@ -98,7 +127,7 @@ You can try it with running `yarn benchmark` by yourself. [Here](./benchmarks/be
|
|
98
127
|
|
99
128
|
| 1stG | RxTS | UnTS |
|
100
129
|
| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
101
|
-
| [](https://opencollective.com/1stG) | [](https://opencollective.com/1stG) | [](https://opencollective.com/rxts) | [](https://opencollective.com/unts) |
|
102
131
|
|
103
132
|
## Changelog
|
104
133
|
|
package/lib/index.cjs
CHANGED
@@ -33,12 +33,25 @@ var __async = (__this, __arguments, generator) => {
|
|
33
33
|
});
|
34
34
|
};
|
35
35
|
const import_meta = {};
|
36
|
-
|
37
|
-
|
36
|
+
const TsRunner = {
|
37
|
+
TsNode: "ts-node",
|
38
|
+
EsbuildRegister: "esbuild-register",
|
39
|
+
EsbuildRunner: "esbuild-runner",
|
40
|
+
TSX: "tsx"
|
41
|
+
};
|
42
|
+
const {
|
43
|
+
SYNCKIT_BUFFER_SIZE,
|
44
|
+
SYNCKIT_TIMEOUT,
|
45
|
+
SYNCKIT_EXEC_ARGV,
|
46
|
+
SYNCKIT_TS_RUNNER,
|
47
|
+
NODE_OPTIONS
|
48
|
+
} = process.env;
|
38
49
|
const DEFAULT_BUFFER_SIZE = SYNCKIT_BUFFER_SIZE ? +SYNCKIT_BUFFER_SIZE : void 0;
|
39
50
|
const DEFAULT_TIMEOUT = SYNCKIT_TIMEOUT ? +SYNCKIT_TIMEOUT : void 0;
|
40
51
|
const DEFAULT_WORKER_BUFFER_SIZE = DEFAULT_BUFFER_SIZE || 1024;
|
41
|
-
const DEFAULT_EXEC_ARGV = (
|
52
|
+
const DEFAULT_EXEC_ARGV = (SYNCKIT_EXEC_ARGV == null ? void 0 : SYNCKIT_EXEC_ARGV.split(",")) || [];
|
53
|
+
const DEFAULT_TS_RUNNER = SYNCKIT_TS_RUNNER || TsRunner.TsNode;
|
54
|
+
const MTS_SUPPORTED_NODE_VERSION = 16;
|
42
55
|
const syncFnCache = /* @__PURE__ */ new Map();
|
43
56
|
const extractProperties = (object) => {
|
44
57
|
if (object && typeof object === "object") {
|
@@ -63,26 +76,28 @@ function createSyncFn(workerPath, bufferSizeOrOptions, timeout) {
|
|
63
76
|
}
|
64
77
|
const cjsRequire = typeof require === "undefined" ? node_module.createRequire(import_meta.url) : require;
|
65
78
|
const dataUrl = (code) => new URL(`data:text/javascript,${encodeURIComponent(code)}`);
|
66
|
-
const
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
79
|
+
const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
|
80
|
+
let ext = path__default["default"].extname(workerPath);
|
81
|
+
if (!/[/\\]node_modules[/\\]/.test(workerPath) && (!ext || /^\.[cm]?js$/.test(ext))) {
|
82
|
+
const workPathWithoutExt = ext ? workerPath.slice(0, -ext.length) : workerPath;
|
83
|
+
let extensions;
|
84
|
+
switch (ext) {
|
85
|
+
case ".cjs":
|
86
|
+
extensions = [".cts", ".cjs"];
|
87
|
+
break;
|
88
|
+
case ".mjs":
|
89
|
+
extensions = [".mts", ".mjs"];
|
90
|
+
break;
|
91
|
+
default:
|
92
|
+
extensions = [".ts", ".js"];
|
93
|
+
break;
|
94
|
+
}
|
95
|
+
const found = utils.tryExtensions(workPathWithoutExt, extensions);
|
96
|
+
let differentExt;
|
97
|
+
if (found && (!ext || (differentExt = found !== workPathWithoutExt))) {
|
98
|
+
workerPath = found;
|
99
|
+
if (differentExt) {
|
100
|
+
ext = path__default["default"].extname(workerPath);
|
86
101
|
}
|
87
102
|
}
|
88
103
|
}
|
@@ -95,11 +110,49 @@ const setupTsNode = (workerPath, execArgv) => {
|
|
95
110
|
tsUseEsm = cjsRequire(pkg).type === "module";
|
96
111
|
}
|
97
112
|
}
|
98
|
-
|
99
|
-
|
113
|
+
switch (tsRunner) {
|
114
|
+
case TsRunner.TsNode: {
|
115
|
+
if (tsUseEsm) {
|
116
|
+
if (!execArgv.includes("--loader")) {
|
117
|
+
execArgv = ["--loader", `${TsRunner.TsNode}/esm`, ...execArgv];
|
118
|
+
}
|
119
|
+
} else if (!execArgv.includes("-r")) {
|
120
|
+
execArgv = ["-r", `${TsRunner.TsNode}/register`, ...execArgv];
|
121
|
+
}
|
122
|
+
break;
|
123
|
+
}
|
124
|
+
case TsRunner.EsbuildRegister: {
|
125
|
+
if (!execArgv.includes("-r")) {
|
126
|
+
execArgv = ["-r", TsRunner.EsbuildRegister, ...execArgv];
|
127
|
+
}
|
128
|
+
break;
|
129
|
+
}
|
130
|
+
case TsRunner.EsbuildRunner: {
|
131
|
+
if (!execArgv.includes("-r")) {
|
132
|
+
execArgv = ["-r", `${TsRunner.EsbuildRunner}/register`, ...execArgv];
|
133
|
+
}
|
134
|
+
break;
|
135
|
+
}
|
136
|
+
case TsRunner.TSX: {
|
137
|
+
if (!execArgv.includes("--loader")) {
|
138
|
+
execArgv = ["--loader", TsRunner.TSX, ...execArgv];
|
139
|
+
}
|
140
|
+
break;
|
141
|
+
}
|
142
|
+
default: {
|
143
|
+
throw new Error(`Unknown ts runner: ${String(tsRunner)}`);
|
144
|
+
}
|
145
|
+
}
|
146
|
+
}
|
147
|
+
if (process.versions.pnp) {
|
148
|
+
const nodeOptions = NODE_OPTIONS == null ? void 0 : NODE_OPTIONS.split(/\s+/);
|
149
|
+
const pnpApiPath = cjsRequire.resolve("pnpapi");
|
150
|
+
if (!(nodeOptions == null ? void 0 : nodeOptions.some((option, index) => ["-r", "--require"].includes(option) && pnpApiPath === cjsRequire.resolve(nodeOptions[index + 1]))) && !execArgv.includes(pnpApiPath)) {
|
151
|
+
execArgv = ["-r", pnpApiPath, ...execArgv];
|
100
152
|
}
|
101
153
|
}
|
102
154
|
return {
|
155
|
+
ext,
|
103
156
|
isTs,
|
104
157
|
tsUseEsm,
|
105
158
|
workerPath,
|
@@ -109,17 +162,31 @@ const setupTsNode = (workerPath, execArgv) => {
|
|
109
162
|
function startWorkerThread(workerPath, {
|
110
163
|
bufferSize = DEFAULT_WORKER_BUFFER_SIZE,
|
111
164
|
timeout = DEFAULT_TIMEOUT,
|
112
|
-
execArgv = DEFAULT_EXEC_ARGV
|
165
|
+
execArgv = DEFAULT_EXEC_ARGV,
|
166
|
+
tsRunner = DEFAULT_TS_RUNNER
|
113
167
|
} = {}) {
|
114
168
|
const { port1: mainPort, port2: workerPort } = new node_worker_threads.MessageChannel();
|
115
169
|
const {
|
116
170
|
isTs,
|
171
|
+
ext,
|
117
172
|
tsUseEsm,
|
118
173
|
workerPath: finalWorkerPath,
|
119
174
|
execArgv: finalExecArgv
|
120
|
-
} =
|
121
|
-
const
|
122
|
-
|
175
|
+
} = setupTsRunner(workerPath, { execArgv, tsRunner });
|
176
|
+
const workerPathUrl = node_url.pathToFileURL(finalWorkerPath);
|
177
|
+
if (/\.[cm]ts$/.test(finalWorkerPath)) {
|
178
|
+
const isTsxSupported = !tsUseEsm || Number.parseFloat(process.versions.node) >= MTS_SUPPORTED_NODE_VERSION;
|
179
|
+
if ([
|
180
|
+
TsRunner.EsbuildRegister,
|
181
|
+
TsRunner.EsbuildRunner,
|
182
|
+
...isTsxSupported ? [] : [TsRunner.TSX]
|
183
|
+
].includes(tsRunner)) {
|
184
|
+
throw new Error(`${tsRunner} is not supported for ${ext} files yet` + (isTsxSupported ? ", you can try [tsx](https://github.com/esbuild-kit/tsx) instead" : ""));
|
185
|
+
}
|
186
|
+
}
|
187
|
+
const useEval = isTs && !tsUseEsm;
|
188
|
+
const worker = new node_worker_threads.Worker(tsUseEsm && tsRunner === TsRunner.TsNode ? dataUrl(`import '${String(workerPathUrl)}'`) : useEval ? `require('${finalWorkerPath.replace(/\\/g, "\\\\")}')` : workerPathUrl, {
|
189
|
+
eval: useEval,
|
123
190
|
workerData: { workerPort },
|
124
191
|
transferList: [workerPort],
|
125
192
|
execArgv: finalExecArgv
|
@@ -157,30 +224,43 @@ function runAsWorker(fn) {
|
|
157
224
|
return;
|
158
225
|
}
|
159
226
|
const { workerPort } = node_worker_threads.workerData;
|
160
|
-
|
161
|
-
((
|
227
|
+
try {
|
228
|
+
node_worker_threads.parentPort.on("message", ({ sharedBuffer, id, args }) => {
|
229
|
+
;
|
230
|
+
(() => __async(this, null, function* () {
|
231
|
+
const sharedBufferView = new Int32Array(sharedBuffer);
|
232
|
+
let msg;
|
233
|
+
try {
|
234
|
+
msg = { id, result: yield fn(...args) };
|
235
|
+
} catch (error) {
|
236
|
+
msg = { id, error, properties: extractProperties(error) };
|
237
|
+
}
|
238
|
+
workerPort.postMessage(msg);
|
239
|
+
Atomics.add(sharedBufferView, 0, 1);
|
240
|
+
Atomics.notify(sharedBufferView, 0);
|
241
|
+
}))();
|
242
|
+
});
|
243
|
+
} catch (error) {
|
244
|
+
node_worker_threads.parentPort.on("message", ({ sharedBuffer, id }) => {
|
162
245
|
const sharedBufferView = new Int32Array(sharedBuffer);
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
id,
|
169
|
-
error,
|
170
|
-
properties: extractProperties(error)
|
171
|
-
};
|
172
|
-
}
|
173
|
-
workerPort.postMessage(msg);
|
246
|
+
workerPort.postMessage({
|
247
|
+
id,
|
248
|
+
error,
|
249
|
+
properties: extractProperties(error)
|
250
|
+
});
|
174
251
|
Atomics.add(sharedBufferView, 0, 1);
|
175
252
|
Atomics.notify(sharedBufferView, 0);
|
176
|
-
})
|
177
|
-
}
|
253
|
+
});
|
254
|
+
}
|
178
255
|
}
|
179
256
|
|
180
257
|
exports.DEFAULT_BUFFER_SIZE = DEFAULT_BUFFER_SIZE;
|
181
258
|
exports.DEFAULT_EXEC_ARGV = DEFAULT_EXEC_ARGV;
|
182
259
|
exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
|
260
|
+
exports.DEFAULT_TS_RUNNER = DEFAULT_TS_RUNNER;
|
183
261
|
exports.DEFAULT_WORKER_BUFFER_SIZE = DEFAULT_WORKER_BUFFER_SIZE;
|
262
|
+
exports.MTS_SUPPORTED_NODE_VERSION = MTS_SUPPORTED_NODE_VERSION;
|
263
|
+
exports.TsRunner = TsRunner;
|
184
264
|
exports.createSyncFn = createSyncFn;
|
185
265
|
exports.extractProperties = extractProperties;
|
186
266
|
exports.runAsWorker = runAsWorker;
|
package/lib/index.d.ts
CHANGED
@@ -1,13 +1,23 @@
|
|
1
|
-
import { AnyAsyncFn, Syncify } from './types.js';
|
1
|
+
import { AnyAsyncFn, Syncify, ValueOf } from './types.js';
|
2
2
|
export * from './types.js';
|
3
|
+
export declare const TsRunner: {
|
4
|
+
readonly TsNode: "ts-node";
|
5
|
+
readonly EsbuildRegister: "esbuild-register";
|
6
|
+
readonly EsbuildRunner: "esbuild-runner";
|
7
|
+
readonly TSX: "tsx";
|
8
|
+
};
|
9
|
+
export declare type TsRunner = ValueOf<typeof TsRunner>;
|
3
10
|
export declare const DEFAULT_BUFFER_SIZE: number | undefined;
|
4
11
|
export declare const DEFAULT_TIMEOUT: number | undefined;
|
5
12
|
export declare const DEFAULT_WORKER_BUFFER_SIZE: number;
|
6
13
|
export declare const DEFAULT_EXEC_ARGV: string[];
|
14
|
+
export declare const DEFAULT_TS_RUNNER: TsRunner;
|
15
|
+
export declare const MTS_SUPPORTED_NODE_VERSION = 16;
|
7
16
|
export interface SynckitOptions {
|
8
17
|
bufferSize?: number;
|
9
18
|
timeout?: number;
|
10
19
|
execArgv?: string[];
|
20
|
+
tsRunner?: TsRunner;
|
11
21
|
}
|
12
22
|
export declare const extractProperties: <T>(object?: T | undefined) => T | undefined;
|
13
23
|
export declare function createSyncFn<T extends AnyAsyncFn>(workerPath: string, bufferSize?: number, timeout?: number): Syncify<T>;
|
package/lib/index.js
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
var _a;
|
2
1
|
import { __awaiter } from "tslib";
|
3
2
|
import { createRequire } from 'node:module';
|
4
3
|
import path from 'node:path';
|
@@ -8,14 +7,27 @@ import { MessageChannel, Worker, receiveMessageOnPort,
|
|
8
7
|
workerData, parentPort, } from 'node:worker_threads';
|
9
8
|
import { findUp, tryExtensions } from '@pkgr/utils';
|
10
9
|
export * from './types.js';
|
11
|
-
const
|
10
|
+
export const TsRunner = {
|
11
|
+
// https://github.com/TypeStrong/ts-node
|
12
|
+
TsNode: 'ts-node',
|
13
|
+
// https://github.com/egoist/esbuild-register
|
14
|
+
EsbuildRegister: 'esbuild-register',
|
15
|
+
// https://github.com/folke/esbuild-runner
|
16
|
+
EsbuildRunner: 'esbuild-runner',
|
17
|
+
// https://github.com/esbuild-kit/tsx
|
18
|
+
TSX: 'tsx',
|
19
|
+
};
|
20
|
+
const { SYNCKIT_BUFFER_SIZE, SYNCKIT_TIMEOUT, SYNCKIT_EXEC_ARGV, SYNCKIT_TS_RUNNER, NODE_OPTIONS, } = process.env;
|
12
21
|
export const DEFAULT_BUFFER_SIZE = SYNCKIT_BUFFER_SIZE
|
13
22
|
? +SYNCKIT_BUFFER_SIZE
|
14
23
|
: undefined;
|
15
24
|
export const DEFAULT_TIMEOUT = SYNCKIT_TIMEOUT ? +SYNCKIT_TIMEOUT : undefined;
|
16
25
|
export const DEFAULT_WORKER_BUFFER_SIZE = DEFAULT_BUFFER_SIZE || 1024;
|
17
26
|
/* istanbul ignore next */
|
18
|
-
export const DEFAULT_EXEC_ARGV = (
|
27
|
+
export const DEFAULT_EXEC_ARGV = (SYNCKIT_EXEC_ARGV === null || SYNCKIT_EXEC_ARGV === void 0 ? void 0 : SYNCKIT_EXEC_ARGV.split(',')) || [];
|
28
|
+
export const DEFAULT_TS_RUNNER = (SYNCKIT_TS_RUNNER ||
|
29
|
+
TsRunner.TsNode);
|
30
|
+
export const MTS_SUPPORTED_NODE_VERSION = 16;
|
19
31
|
const syncFnCache = new Map();
|
20
32
|
// MessagePort doesn't copy the properties of Error objects. We still want
|
21
33
|
// error objects to have extra properties such as "warnings" so implement the
|
@@ -48,29 +60,31 @@ const cjsRequire = typeof require === 'undefined'
|
|
48
60
|
? createRequire(import.meta.url)
|
49
61
|
: /* istanbul ignore next */ require;
|
50
62
|
const dataUrl = (code) => new URL(`data:text/javascript,${encodeURIComponent(code)}`);
|
51
|
-
|
52
|
-
|
53
|
-
if (!/[/\\]node_modules[/\\]/.test(workerPath)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
63
|
+
const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
|
64
|
+
let ext = path.extname(workerPath);
|
65
|
+
if (!/[/\\]node_modules[/\\]/.test(workerPath) &&
|
66
|
+
(!ext || /^\.[cm]?js$/.test(ext))) {
|
67
|
+
const workPathWithoutExt = ext
|
68
|
+
? workerPath.slice(0, -ext.length)
|
69
|
+
: workerPath;
|
70
|
+
let extensions;
|
71
|
+
switch (ext) {
|
72
|
+
case '.cjs':
|
73
|
+
extensions = ['.cts', '.cjs'];
|
74
|
+
break;
|
75
|
+
case '.mjs':
|
76
|
+
extensions = ['.mts', '.mjs'];
|
77
|
+
break;
|
78
|
+
default:
|
79
|
+
extensions = ['.ts', '.js'];
|
80
|
+
break;
|
81
|
+
}
|
82
|
+
const found = tryExtensions(workPathWithoutExt, extensions);
|
83
|
+
let differentExt;
|
84
|
+
if (found && (!ext || (differentExt = found !== workPathWithoutExt))) {
|
85
|
+
workerPath = found;
|
86
|
+
if (differentExt) {
|
87
|
+
ext = path.extname(workerPath);
|
74
88
|
}
|
75
89
|
}
|
76
90
|
}
|
@@ -85,26 +99,88 @@ const setupTsNode = (workerPath, execArgv) => {
|
|
85
99
|
'module';
|
86
100
|
}
|
87
101
|
}
|
88
|
-
|
89
|
-
|
102
|
+
switch (tsRunner) {
|
103
|
+
case TsRunner.TsNode: {
|
104
|
+
if (tsUseEsm) {
|
105
|
+
if (!execArgv.includes('--loader')) {
|
106
|
+
execArgv = ['--loader', `${TsRunner.TsNode}/esm`, ...execArgv];
|
107
|
+
}
|
108
|
+
}
|
109
|
+
else if (!execArgv.includes('-r')) {
|
110
|
+
execArgv = ['-r', `${TsRunner.TsNode}/register`, ...execArgv];
|
111
|
+
}
|
112
|
+
break;
|
113
|
+
}
|
114
|
+
case TsRunner.EsbuildRegister: {
|
115
|
+
if (!execArgv.includes('-r')) {
|
116
|
+
execArgv = ['-r', TsRunner.EsbuildRegister, ...execArgv];
|
117
|
+
}
|
118
|
+
break;
|
119
|
+
}
|
120
|
+
case TsRunner.EsbuildRunner: {
|
121
|
+
if (!execArgv.includes('-r')) {
|
122
|
+
execArgv = ['-r', `${TsRunner.EsbuildRunner}/register`, ...execArgv];
|
123
|
+
}
|
124
|
+
break;
|
125
|
+
}
|
126
|
+
case TsRunner.TSX: {
|
127
|
+
if (!execArgv.includes('--loader')) {
|
128
|
+
execArgv = ['--loader', TsRunner.TSX, ...execArgv];
|
129
|
+
}
|
130
|
+
break;
|
131
|
+
}
|
132
|
+
default: {
|
133
|
+
throw new Error(`Unknown ts runner: ${String(tsRunner)}`);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
}
|
137
|
+
/* istanbul ignore if -- https://github.com/facebook/jest/issues/5274 */
|
138
|
+
if (process.versions.pnp) {
|
139
|
+
const nodeOptions = NODE_OPTIONS === null || NODE_OPTIONS === void 0 ? void 0 : NODE_OPTIONS.split(/\s+/);
|
140
|
+
const pnpApiPath = cjsRequire.resolve('pnpapi');
|
141
|
+
if (!(nodeOptions === null || nodeOptions === void 0 ? void 0 : nodeOptions.some((option, index) => ['-r', '--require'].includes(option) &&
|
142
|
+
pnpApiPath === cjsRequire.resolve(nodeOptions[index + 1]))) &&
|
143
|
+
!execArgv.includes(pnpApiPath)) {
|
144
|
+
execArgv = ['-r', pnpApiPath, ...execArgv];
|
90
145
|
}
|
91
146
|
}
|
92
147
|
return {
|
148
|
+
ext,
|
93
149
|
isTs,
|
94
150
|
tsUseEsm,
|
95
151
|
workerPath,
|
96
152
|
execArgv,
|
97
153
|
};
|
98
154
|
};
|
99
|
-
|
155
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity
|
156
|
+
function startWorkerThread(workerPath, { bufferSize = DEFAULT_WORKER_BUFFER_SIZE, timeout = DEFAULT_TIMEOUT, execArgv = DEFAULT_EXEC_ARGV, tsRunner = DEFAULT_TS_RUNNER, } = {}) {
|
100
157
|
const { port1: mainPort, port2: workerPort } = new MessageChannel();
|
101
|
-
const { isTs, tsUseEsm, workerPath: finalWorkerPath, execArgv: finalExecArgv, } =
|
102
|
-
const
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
158
|
+
const { isTs, ext, tsUseEsm, workerPath: finalWorkerPath, execArgv: finalExecArgv, } = setupTsRunner(workerPath, { execArgv, tsRunner });
|
159
|
+
const workerPathUrl = pathToFileURL(finalWorkerPath);
|
160
|
+
if (/\.[cm]ts$/.test(finalWorkerPath)) {
|
161
|
+
const isTsxSupported = !tsUseEsm ||
|
162
|
+
Number.parseFloat(process.versions.node) >= MTS_SUPPORTED_NODE_VERSION;
|
163
|
+
/* istanbul ignore if */
|
164
|
+
if ([
|
165
|
+
// https://github.com/egoist/esbuild-register/issues/79
|
166
|
+
TsRunner.EsbuildRegister,
|
167
|
+
// https://github.com/folke/esbuild-runner/issues/67
|
168
|
+
TsRunner.EsbuildRunner,
|
169
|
+
... /* istanbul ignore next */(isTsxSupported ? [] : [TsRunner.TSX]),
|
170
|
+
].includes(tsRunner)) {
|
171
|
+
throw new Error(`${tsRunner} is not supported for ${ext} files yet` +
|
172
|
+
(isTsxSupported
|
173
|
+
? ', you can try [tsx](https://github.com/esbuild-kit/tsx) instead'
|
174
|
+
: ''));
|
175
|
+
}
|
176
|
+
}
|
177
|
+
const useEval = isTs && !tsUseEsm;
|
178
|
+
const worker = new Worker(tsUseEsm && tsRunner === TsRunner.TsNode
|
179
|
+
? dataUrl(`import '${String(workerPathUrl)}'`)
|
180
|
+
: useEval
|
181
|
+
? `require('${finalWorkerPath.replace(/\\/g, '\\\\')}')`
|
182
|
+
: workerPathUrl, {
|
183
|
+
eval: useEval,
|
108
184
|
workerData: { workerPort },
|
109
185
|
transferList: [workerPort],
|
110
186
|
execArgv: finalExecArgv,
|
@@ -142,26 +218,43 @@ export function runAsWorker(fn) {
|
|
142
218
|
return;
|
143
219
|
}
|
144
220
|
const { workerPort } = workerData;
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
221
|
+
try {
|
222
|
+
parentPort.on('message', ({ sharedBuffer, id, args }) => {
|
223
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
224
|
+
;
|
225
|
+
(() => __awaiter(this, void 0, void 0, function* () {
|
226
|
+
const sharedBufferView = new Int32Array(sharedBuffer);
|
227
|
+
let msg;
|
228
|
+
try {
|
229
|
+
msg = { id, result: yield fn(...args) };
|
230
|
+
}
|
231
|
+
catch (error) {
|
232
|
+
msg = { id, error, properties: extractProperties(error) };
|
233
|
+
}
|
234
|
+
workerPort.postMessage(msg);
|
235
|
+
Atomics.add(sharedBufferView, 0, 1);
|
236
|
+
Atomics.notify(sharedBufferView, 0);
|
237
|
+
}))();
|
238
|
+
});
|
239
|
+
/**
|
240
|
+
* @see https://github.com/un-ts/synckit/issues/94
|
241
|
+
*
|
242
|
+
* Starting the worker can fail, due to syntax error, for example. In that case
|
243
|
+
* we just fail all incoming messages with whatever error message we got.
|
244
|
+
* Otherwise incoming messages will hang forever waiting for a reply.
|
245
|
+
*/
|
246
|
+
}
|
247
|
+
catch (error) {
|
248
|
+
parentPort.on('message', ({ sharedBuffer, id }) => {
|
149
249
|
const sharedBufferView = new Int32Array(sharedBuffer);
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
msg = {
|
156
|
-
id,
|
157
|
-
error,
|
158
|
-
properties: extractProperties(error),
|
159
|
-
};
|
160
|
-
}
|
161
|
-
workerPort.postMessage(msg);
|
250
|
+
workerPort.postMessage({
|
251
|
+
id,
|
252
|
+
error,
|
253
|
+
properties: extractProperties(error),
|
254
|
+
});
|
162
255
|
Atomics.add(sharedBufferView, 0, 1);
|
163
256
|
Atomics.notify(sharedBufferView, 0);
|
164
|
-
})
|
165
|
-
}
|
257
|
+
});
|
258
|
+
}
|
166
259
|
}
|
167
260
|
//# sourceMappingURL=index.js.map
|
package/lib/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":"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"}
|
package/lib/types.d.ts
CHANGED
@@ -5,6 +5,7 @@ export declare type AnyPromise<T = any> = Promise<T>;
|
|
5
5
|
export declare type AnyAsyncFn<T = any> = AnyFn<Promise<T>>;
|
6
6
|
export declare type Syncify<T extends AnyAsyncFn> = T extends (...args: infer Args) => Promise<infer R> ? (...args: Args) => R : never;
|
7
7
|
export declare type PromiseType<T extends AnyPromise> = T extends Promise<infer R> ? R : never;
|
8
|
+
export declare type ValueOf<T> = T[keyof T];
|
8
9
|
export interface MainToWorkerMessage<T extends unknown[]> {
|
9
10
|
sharedBuffer: SharedArrayBuffer;
|
10
11
|
id: number;
|
package/package.json
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
{
|
2
2
|
"name": "synckit",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.8.2",
|
4
4
|
"type": "module",
|
5
5
|
"description": "Perform async work synchronously in Node.js using `worker_threads` with first-class TypeScript support.",
|
6
|
-
"repository": "git+https://github.com/
|
6
|
+
"repository": "git+https://github.com/un-ts/synckit.git",
|
7
7
|
"author": "JounQin (https://www.1stG.me) <admin@1stg.me>",
|
8
8
|
"donate": {
|
9
9
|
"recipients": [
|
@@ -38,8 +38,9 @@
|
|
38
38
|
},
|
39
39
|
"funding": "https://opencollective.com/unts",
|
40
40
|
"license": "MIT",
|
41
|
+
"packageManager": "yarn@1.22.19",
|
41
42
|
"engines": {
|
42
|
-
"node": "^
|
43
|
+
"node": "^14.18.0 || >=16.0.0"
|
43
44
|
},
|
44
45
|
"main": "./lib/index.cjs",
|
45
46
|
"module": "./lib/index.js",
|
@@ -63,8 +64,93 @@
|
|
63
64
|
"synchronize",
|
64
65
|
"synckit"
|
65
66
|
],
|
67
|
+
"scripts": {
|
68
|
+
"benchmark": "run-s benchmark:*",
|
69
|
+
"benchmark-export": "run-s benchmark-export:*",
|
70
|
+
"benchmark-export:cjs": "yarn benchmark:cjs > benchmarks/benchmark.cjs.txt",
|
71
|
+
"benchmark-export:esm": "yarn benchmark:esm> benchmarks/benchmark.esm.txt",
|
72
|
+
"benchmark:cjs": "node benchmarks/benchmark.cjs",
|
73
|
+
"benchmark:esm": "node benchmarks/benchmark.js",
|
74
|
+
"build": "run-p build:*",
|
75
|
+
"build:r": "r -f cjs",
|
76
|
+
"build:ts": "tsc -p src",
|
77
|
+
"lint": "run-p lint:*",
|
78
|
+
"lint:es": "eslint . --cache -f friendly --max-warnings 10",
|
79
|
+
"lint:tsc": "tsc --noEmit",
|
80
|
+
"prepare": "patch-package && simple-git-hooks && yarn-deduplicate --strategy fewer || exit 0",
|
81
|
+
"prerelease": "yarn build",
|
82
|
+
"release": "changeset publish",
|
83
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
84
|
+
"typecov": "type-coverage"
|
85
|
+
},
|
66
86
|
"dependencies": {
|
67
87
|
"@pkgr/utils": "^2.3.0",
|
68
88
|
"tslib": "^2.4.0"
|
89
|
+
},
|
90
|
+
"devDependencies": {
|
91
|
+
"@1stg/lib-config": "^9.0.2",
|
92
|
+
"@changesets/changelog-github": "^0.4.6",
|
93
|
+
"@changesets/cli": "^2.23.2",
|
94
|
+
"@types/jest": "^28.1.5",
|
95
|
+
"@types/node": "^18.0.4",
|
96
|
+
"deasync": "^0.1.27",
|
97
|
+
"esbuild-register": "^3.3.3",
|
98
|
+
"esbuild-runner": "^2.2.1",
|
99
|
+
"execa": "^6.1.0",
|
100
|
+
"jest": "^28.1.3",
|
101
|
+
"patch-package": "^6.4.7",
|
102
|
+
"sync-threads": "^1.0.1",
|
103
|
+
"ts-expect": "^1.3.0",
|
104
|
+
"ts-jest": "^28.0.6",
|
105
|
+
"ts-node": "^10.9.1",
|
106
|
+
"tsx": "^3.8.0",
|
107
|
+
"type-coverage": "^2.22.0",
|
108
|
+
"typescript": "^4.7.4",
|
109
|
+
"yarn-deduplicate": "^5.0.0"
|
110
|
+
},
|
111
|
+
"resolutions": {
|
112
|
+
"prettier": "^2.7.1"
|
113
|
+
},
|
114
|
+
"commitlint": {
|
115
|
+
"extends": "@1stg"
|
116
|
+
},
|
117
|
+
"jest": {
|
118
|
+
"preset": "ts-jest",
|
119
|
+
"testEnvironment": "node",
|
120
|
+
"collectCoverage": true,
|
121
|
+
"extensionsToTreatAsEsm": [
|
122
|
+
".ts"
|
123
|
+
],
|
124
|
+
"moduleNameMapper": {
|
125
|
+
"^(\\.{1,2}/.*)\\.js$": "$1",
|
126
|
+
"^synckit$": "<rootDir>/src"
|
127
|
+
},
|
128
|
+
"globals": {
|
129
|
+
"ts-jest": {
|
130
|
+
"useESM": true,
|
131
|
+
"tsconfig": {
|
132
|
+
"importHelpers": false
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
},
|
137
|
+
"prettier": "@1stg/prettier-config",
|
138
|
+
"renovate": {
|
139
|
+
"extends": [
|
140
|
+
"@1stg"
|
141
|
+
]
|
142
|
+
},
|
143
|
+
"typeCoverage": {
|
144
|
+
"atLeast": 100,
|
145
|
+
"cache": true,
|
146
|
+
"detail": true,
|
147
|
+
"ignoreAsAssertion": true,
|
148
|
+
"ignoreFiles": [
|
149
|
+
"**/*.d.ts"
|
150
|
+
],
|
151
|
+
"ignoreNonNullAssertion": true,
|
152
|
+
"showRelativePath": true,
|
153
|
+
"strict": true,
|
154
|
+
"update": true
|
69
155
|
}
|
70
156
|
}
|