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 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
- | [![1stG Open Collective backers and sponsors](https://opencollective.com/1stG/individuals.svg)](https://opencollective.com/1stG) | [![RxTS Open Collective backers and sponsors](https://opencollective.com/unts/individuals.svg)](https://opencollective.com/unts) | [![UnTS Open Collective backers and sponsors](https://opencollective.com/unts/individuals.svg)](https://opencollective.com/unts) |
130
+ | [![1stG Open Collective backers and sponsors](https://opencollective.com/1stG/individuals.svg)](https://opencollective.com/1stG) | [![RxTS Open Collective backers and sponsors](https://opencollective.com/rxts/individuals.svg)](https://opencollective.com/rxts) | [![UnTS Open Collective backers and sponsors](https://opencollective.com/unts/individuals.svg)](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
- var _a;
37
- const { SYNCKIT_BUFFER_SIZE, SYNCKIT_TIMEOUT, SYNCKIT_EXEC_ARV } = process.env;
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 = (_a = SYNCKIT_EXEC_ARV == null ? void 0 : SYNCKIT_EXEC_ARV.split(",")) != null ? _a : [];
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 setupTsNode = (workerPath, execArgv) => {
67
- if (!/[/\\]node_modules[/\\]/.test(workerPath)) {
68
- const ext = path__default["default"].extname(workerPath);
69
- if (!ext || /\.[cm]?js$/.test(ext)) {
70
- const workPathWithoutExt = ext ? workerPath.slice(0, -ext.length) : workerPath;
71
- let extensions;
72
- switch (ext) {
73
- case ".cjs":
74
- extensions = ["cts", "cjs"];
75
- break;
76
- case ".mjs":
77
- extensions = ["mts", "mjs"];
78
- break;
79
- default:
80
- extensions = [".ts", ".js"];
81
- break;
82
- }
83
- const found = utils.tryExtensions(workPathWithoutExt, extensions);
84
- if (found && (!ext || found !== workPathWithoutExt)) {
85
- workerPath = found;
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
- if (tsUseEsm && !execArgv.includes("--loader")) {
99
- execArgv = ["--loader", "ts-node/esm", ...execArgv];
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
- } = setupTsNode(workerPath, execArgv);
121
- const worker = new node_worker_threads.Worker(isTs ? tsUseEsm ? dataUrl(`import '${String(node_url.pathToFileURL(finalWorkerPath))}'`) : `require('ts-node/register');require('${finalWorkerPath.replace(/\\/g, "\\\\")}')` : node_url.pathToFileURL(finalWorkerPath), {
122
- eval: isTs && !tsUseEsm,
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
- node_worker_threads.parentPort.on("message", ({ sharedBuffer, id, args }) => {
161
- (() => __async(this, null, function* () {
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
- let msg;
164
- try {
165
- msg = { id, result: yield fn(...args) };
166
- } catch (error) {
167
- msg = {
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 { SYNCKIT_BUFFER_SIZE, SYNCKIT_TIMEOUT, SYNCKIT_EXEC_ARV } = process.env;
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 = (_a = SYNCKIT_EXEC_ARV === null || SYNCKIT_EXEC_ARV === void 0 ? void 0 : SYNCKIT_EXEC_ARV.split(',')) !== null && _a !== void 0 ? _a : [];
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
- // eslint-disable-next-line sonarjs/cognitive-complexity
52
- const setupTsNode = (workerPath, execArgv) => {
53
- if (!/[/\\]node_modules[/\\]/.test(workerPath)) {
54
- const ext = path.extname(workerPath);
55
- if (!ext || /\.[cm]?js$/.test(ext)) {
56
- const workPathWithoutExt = ext
57
- ? workerPath.slice(0, -ext.length)
58
- : workerPath;
59
- let extensions;
60
- switch (ext) {
61
- case '.cjs':
62
- extensions = ['cts', 'cjs'];
63
- break;
64
- case '.mjs':
65
- extensions = ['mts', 'mjs'];
66
- break;
67
- default:
68
- extensions = ['.ts', '.js'];
69
- break;
70
- }
71
- const found = tryExtensions(workPathWithoutExt, extensions);
72
- if (found && (!ext || found !== workPathWithoutExt)) {
73
- workerPath = found;
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
- if (tsUseEsm && !execArgv.includes('--loader')) {
89
- execArgv = ['--loader', 'ts-node/esm', ...execArgv];
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
- function startWorkerThread(workerPath, { bufferSize = DEFAULT_WORKER_BUFFER_SIZE, timeout = DEFAULT_TIMEOUT, execArgv = DEFAULT_EXEC_ARGV, } = {}) {
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, } = setupTsNode(workerPath, execArgv);
102
- const worker = new Worker(isTs
103
- ? tsUseEsm
104
- ? dataUrl(`import '${String(pathToFileURL(finalWorkerPath))}'`)
105
- : `require('ts-node/register');require('${finalWorkerPath.replace(/\\/g, '\\\\')}')`
106
- : pathToFileURL(finalWorkerPath), {
107
- eval: isTs && !tsUseEsm,
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
- parentPort.on('message', ({ sharedBuffer, id, args }) => {
146
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
147
- ;
148
- (() => __awaiter(this, void 0, void 0, function* () {
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
- let msg;
151
- try {
152
- msg = { id, result: yield fn(...args) };
153
- }
154
- catch (error) {
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":"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"}
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.7.3",
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/rx-ts/synckit.git",
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": "^12.20.0 || ^14.18.0 || >=16.0.0"
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
  }