synckit 0.8.5 → 0.8.7

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
@@ -2,7 +2,6 @@
2
2
 
3
3
  [![GitHub Actions](https://github.com/un-ts/synckit/workflows/CI/badge.svg)](https://github.com/un-ts/synckit/actions/workflows/ci.yml)
4
4
  [![Codecov](https://img.shields.io/codecov/c/github/un-ts/synckit.svg)](https://codecov.io/gh/un-ts/synckit)
5
- [![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/un-ts/synckit.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/un-ts/synckit/context:javascript)
6
5
  [![type-coverage](https://img.shields.io/badge/dynamic/json.svg?label=type-coverage&prefix=%E2%89%A5&suffix=%&query=$.typeCoverage.atLeast&uri=https%3A%2F%2Fraw.githubusercontent.com%2Fun-ts%2Fsynckit%2Fmain%2Fpackage.json)](https://github.com/plantain-00/type-coverage)
7
6
  [![npm](https://img.shields.io/npm/v/synckit.svg)](https://www.npmjs.com/package/synckit)
8
7
  [![GitHub Release](https://img.shields.io/github/release/un-ts/synckit)](https://github.com/un-ts/synckit/releases)
@@ -19,6 +18,7 @@ Perform async work synchronously in Node.js using `worker_threads` with first-cl
19
18
  - [Usage](#usage)
20
19
  - [Install](#install)
21
20
  - [API](#api)
21
+ - [Types](#types)
22
22
  - [Options](#options)
23
23
  - [Envs](#envs)
24
24
  - [TypeScript](#typescript)
@@ -72,12 +72,51 @@ runAsWorker(async (...args) => {
72
72
 
73
73
  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)
74
74
 
75
+ ### Types
76
+
77
+ ````ts
78
+ export interface GlobalShim {
79
+ moduleName: string
80
+ /**
81
+ * `undefined` means side effect only
82
+ */
83
+ globalName?: string
84
+ /**
85
+ * 1. `undefined` or empty string means `default`, for example:
86
+ * ```js
87
+ * import globalName from 'module-name'
88
+ * ```
89
+ *
90
+ * 2. `null` means namespaced, for example:
91
+ * ```js
92
+ * import * as globalName from 'module-name'
93
+ * ```
94
+ *
95
+ */
96
+ named?: string | null
97
+ /**
98
+ * If not `false`, the shim will only be applied when the original `globalName` unavailable,
99
+ * for example you may only want polyfill `globalThis.fetch` when it's unavailable natively:
100
+ * ```js
101
+ * import fetch from 'node-fetch'
102
+ *
103
+ * if (!globalThis.fetch) {
104
+ * globalThis.fetch = fetch
105
+ * }
106
+ * ```
107
+ */
108
+ conditional?: boolean
109
+ }
110
+ ````
111
+
75
112
  ### Options
76
113
 
77
114
  1. `bufferSize` same as env `SYNCKIT_BUFFER_SIZE`
78
115
  2. `timeout` same as env `SYNCKIT_TIMEOUT`
79
116
  3. `execArgv` same as env `SYNCKIT_EXEC_ARGV`
80
117
  4. `tsRunner` same as env `SYNCKIT_TS_RUNNER`
118
+ 5. `transferList`: Please refer Node.js [`worker_threads`](https://nodejs.org/api/worker_threads.html#:~:text=Default%3A%20true.-,transferList,-%3CObject%5B%5D%3E%20If) documentation
119
+ 6. `globalShims`: Similar like env `SYNCKIT_GLOBAL_SHIMS` but much more flexible which can be a `GlobalShim` `Array`, see `GlobalShim`'s [definition](#types) for more details
81
120
 
82
121
  ### Envs
83
122
 
@@ -85,6 +124,7 @@ You must make sure, the `result` is serializable by [`Structured Clone Algorithm
85
124
  2. `SYNCKIT_TIMEOUT`: `timeout` for performing the async job (no default)
86
125
  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)
87
126
  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' | 'swc' | 'tsx'`, `'ts-node'` is used by default, make sure you have installed them already
127
+ 5. `SYNCKIT_GLOBAL_SHIMS`: Whether to enable the default `DEFAULT_GLOBAL_SHIMS_PRESET` as `globalShims`
88
128
 
89
129
  ### TypeScript
90
130
 
package/lib/index.cjs CHANGED
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
3
+ var node_crypto = require('node:crypto');
5
4
  var fs = require('node:fs');
6
5
  var node_module = require('node:module');
7
6
  var path = require('node:path');
@@ -9,11 +8,6 @@ var node_url = require('node:url');
9
8
  var node_worker_threads = require('node:worker_threads');
10
9
  var utils = require('@pkgr/utils');
11
10
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
-
14
- var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
15
- var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
16
-
17
11
  var __async = (__this, __arguments, generator) => {
18
12
  return new Promise((resolve, reject) => {
19
13
  var fulfilled = (value) => {
@@ -36,10 +30,15 @@ var __async = (__this, __arguments, generator) => {
36
30
  };
37
31
  const import_meta = {};
38
32
  const TsRunner = {
33
+ // https://github.com/TypeStrong/ts-node
39
34
  TsNode: "ts-node",
35
+ // https://github.com/egoist/esbuild-register
40
36
  EsbuildRegister: "esbuild-register",
37
+ // https://github.com/folke/esbuild-runner
41
38
  EsbuildRunner: "esbuild-runner",
39
+ // https://github.com/swc-project/swc-node/tree/master/packages/register
42
40
  SWC: "swc",
41
+ // https://github.com/esbuild-kit/tsx
43
42
  TSX: "tsx"
44
43
  };
45
44
  const {
@@ -47,13 +46,28 @@ const {
47
46
  SYNCKIT_TIMEOUT,
48
47
  SYNCKIT_EXEC_ARGV,
49
48
  SYNCKIT_TS_RUNNER,
49
+ SYNCKIT_GLOBAL_SHIMS,
50
50
  NODE_OPTIONS
51
51
  } = process.env;
52
52
  const DEFAULT_BUFFER_SIZE = SYNCKIT_BUFFER_SIZE ? +SYNCKIT_BUFFER_SIZE : void 0;
53
53
  const DEFAULT_TIMEOUT = SYNCKIT_TIMEOUT ? +SYNCKIT_TIMEOUT : void 0;
54
54
  const DEFAULT_WORKER_BUFFER_SIZE = DEFAULT_BUFFER_SIZE || 1024;
55
55
  const DEFAULT_EXEC_ARGV = (SYNCKIT_EXEC_ARGV == null ? void 0 : SYNCKIT_EXEC_ARGV.split(",")) || [];
56
- const DEFAULT_TS_RUNNER = SYNCKIT_TS_RUNNER || TsRunner.TsNode;
56
+ const DEFAULT_TS_RUNNER = SYNCKIT_TS_RUNNER;
57
+ const DEFAULT_GLOBAL_SHIMS = ["1", "true"].includes(
58
+ SYNCKIT_GLOBAL_SHIMS
59
+ );
60
+ const DEFAULT_GLOBAL_SHIMS_PRESET = [
61
+ {
62
+ moduleName: "node-fetch",
63
+ globalName: "fetch"
64
+ },
65
+ {
66
+ moduleName: "node:perf_hooks",
67
+ globalName: "performance",
68
+ named: "performance"
69
+ }
70
+ ];
57
71
  const MTS_SUPPORTED_NODE_VERSION = 16;
58
72
  const syncFnCache = /* @__PURE__ */ new Map();
59
73
  function extractProperties(object) {
@@ -66,7 +80,7 @@ function extractProperties(object) {
66
80
  }
67
81
  }
68
82
  function createSyncFn(workerPath, bufferSizeOrOptions, timeout) {
69
- if (!path__default["default"].isAbsolute(workerPath)) {
83
+ if (!path.isAbsolute(workerPath)) {
70
84
  throw new Error("`workerPath` must be absolute");
71
85
  }
72
86
  const cachedSyncFn = syncFnCache.get(workerPath);
@@ -75,46 +89,55 @@ function createSyncFn(workerPath, bufferSizeOrOptions, timeout) {
75
89
  }
76
90
  const syncFn = startWorkerThread(
77
91
  workerPath,
92
+ /* istanbul ignore next */
78
93
  typeof bufferSizeOrOptions === "number" ? { bufferSize: bufferSizeOrOptions, timeout } : bufferSizeOrOptions
79
94
  );
80
95
  syncFnCache.set(workerPath, syncFn);
81
96
  return syncFn;
82
97
  }
83
- const cjsRequire = typeof require === "undefined" ? node_module.createRequire(import_meta.url) : require;
98
+ const cjsRequire = typeof require === "undefined" ? node_module.createRequire(import_meta.url) : (
99
+ /* istanbul ignore next */
100
+ require
101
+ );
84
102
  const dataUrl = (code) => new URL(`data:text/javascript,${encodeURIComponent(code)}`);
85
103
  const isFile = (path2) => {
104
+ var _a;
86
105
  try {
87
- return fs__default["default"].statSync(path2).isFile();
106
+ return !!((_a = fs.statSync(path2, { throwIfNoEntry: false })) == null ? void 0 : _a.isFile());
88
107
  } catch (e) {
89
108
  return false;
90
109
  }
91
110
  };
92
111
  const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
93
- let ext = path__default["default"].extname(workerPath);
112
+ let ext = path.extname(workerPath);
94
113
  if (!/[/\\]node_modules[/\\]/.test(workerPath) && (!ext || /^\.[cm]?js$/.test(ext))) {
95
114
  const workPathWithoutExt = ext ? workerPath.slice(0, -ext.length) : workerPath;
96
115
  let extensions;
97
116
  switch (ext) {
98
- case ".cjs":
117
+ case ".cjs": {
99
118
  extensions = [".cts", ".cjs"];
100
119
  break;
101
- case ".mjs":
120
+ }
121
+ case ".mjs": {
102
122
  extensions = [".mts", ".mjs"];
103
123
  break;
104
- default:
124
+ }
125
+ default: {
105
126
  extensions = [".ts", ".js"];
106
127
  break;
128
+ }
107
129
  }
108
130
  const found = utils.tryExtensions(workPathWithoutExt, extensions);
109
131
  let differentExt;
110
132
  if (found && (!ext || (differentExt = found !== workPathWithoutExt))) {
111
133
  workerPath = found;
112
134
  if (differentExt) {
113
- ext = path__default["default"].extname(workerPath);
135
+ ext = path.extname(workerPath);
114
136
  }
115
137
  }
116
138
  }
117
139
  const isTs = /\.[cm]?ts$/.test(workerPath);
140
+ let jsUseEsm = workerPath.endsWith(".mjs");
118
141
  let tsUseEsm = workerPath.endsWith(".mts");
119
142
  if (isTs) {
120
143
  if (!tsUseEsm) {
@@ -123,6 +146,9 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
123
146
  tsUseEsm = cjsRequire(pkg).type === "module";
124
147
  }
125
148
  }
149
+ if (tsRunner == null && utils.isPkgAvailable(TsRunner.TsNode)) {
150
+ tsRunner = TsRunner.TsNode;
151
+ }
126
152
  switch (tsRunner) {
127
153
  case TsRunner.TsNode: {
128
154
  if (tsUseEsm) {
@@ -162,6 +188,11 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
162
188
  throw new Error(`Unknown ts runner: ${String(tsRunner)}`);
163
189
  }
164
190
  }
191
+ } else if (!jsUseEsm) {
192
+ const pkg = utils.findUp(workerPath);
193
+ if (pkg) {
194
+ jsUseEsm = cjsRequire(pkg).type === "module";
195
+ }
165
196
  }
166
197
  if (process.versions.pnp) {
167
198
  const nodeOptions = NODE_OPTIONS == null ? void 0 : NODE_OPTIONS.split(/\s+/);
@@ -174,7 +205,7 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
174
205
  (option, index) => ["-r", "--require"].includes(option) && pnpApiPath === cjsRequire.resolve(nodeOptions[index + 1])
175
206
  )) && !execArgv.includes(pnpApiPath)) {
176
207
  execArgv = ["-r", pnpApiPath, ...execArgv];
177
- const pnpLoaderPath = path__default["default"].resolve(pnpApiPath, "../.pnp.loader.mjs");
208
+ const pnpLoaderPath = path.resolve(pnpApiPath, "../.pnp.loader.mjs");
178
209
  if (isFile(pnpLoaderPath)) {
179
210
  const experimentalLoader = node_url.pathToFileURL(pnpLoaderPath).toString();
180
211
  execArgv = ["--experimental-loader", experimentalLoader, ...execArgv];
@@ -184,46 +215,113 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
184
215
  return {
185
216
  ext,
186
217
  isTs,
218
+ jsUseEsm,
219
+ tsRunner,
187
220
  tsUseEsm,
188
221
  workerPath,
189
222
  execArgv
190
223
  };
191
224
  };
225
+ const md5Hash = (text) => node_crypto.createHash("md5").update(text).digest("hex");
226
+ const encodeImportModule = (moduleNameOrGlobalShim, type = "import") => {
227
+ const { moduleName, globalName, named, conditional } = typeof moduleNameOrGlobalShim === "string" ? { moduleName: moduleNameOrGlobalShim } : moduleNameOrGlobalShim;
228
+ const importStatement = type === "import" ? `import${globalName ? " " + (named === null ? "* as " + globalName : (named == null ? void 0 : named.trim()) ? `{${named}}` : globalName) + " from" : ""} '${path.isAbsolute(moduleName) ? String(node_url.pathToFileURL(moduleName)) : moduleName}'` : `${globalName ? "const " + ((named == null ? void 0 : named.trim()) ? `{${named}}` : globalName) + "=" : ""}require('${moduleName.replace(/\\/g, "\\\\")}')`;
229
+ if (!globalName) {
230
+ return importStatement;
231
+ }
232
+ const overrideStatement = `globalThis.${globalName}=${(named == null ? void 0 : named.trim()) ? named : globalName}`;
233
+ return importStatement + (conditional === false ? `;${overrideStatement}` : `;if(!globalThis.${globalName})${overrideStatement}`);
234
+ };
235
+ const _generateGlobals = (globalShims, type) => globalShims.reduce(
236
+ (acc, shim) => `${acc}${acc ? ";" : ""}${encodeImportModule(shim, type)}`,
237
+ ""
238
+ );
239
+ const globalsCache = /* @__PURE__ */ new Map();
240
+ let tmpdir;
241
+ const _dirname = typeof __dirname === "undefined" ? path.dirname(node_url.fileURLToPath(import_meta.url)) : (
242
+ /* istanbul ignore next */
243
+ __dirname
244
+ );
245
+ const generateGlobals = (workerPath, globalShims, type = "import") => {
246
+ const cached = globalsCache.get(workerPath);
247
+ if (cached) {
248
+ const [content2, filepath2] = cached;
249
+ if (type === "require" && !filepath2 || type === "import" && filepath2 && isFile(filepath2)) {
250
+ return content2;
251
+ }
252
+ }
253
+ const globals = _generateGlobals(globalShims, type);
254
+ let content = globals;
255
+ let filepath;
256
+ if (type === "import") {
257
+ if (!tmpdir) {
258
+ tmpdir = path.resolve(utils.findUp(_dirname), "../node_modules/.synckit");
259
+ }
260
+ fs.mkdirSync(tmpdir, { recursive: true });
261
+ filepath = path.resolve(tmpdir, md5Hash(workerPath) + ".mjs");
262
+ content = encodeImportModule(filepath);
263
+ fs.writeFileSync(filepath, globals);
264
+ }
265
+ globalsCache.set(workerPath, [content, filepath]);
266
+ return content;
267
+ };
192
268
  function startWorkerThread(workerPath, {
193
269
  bufferSize = DEFAULT_WORKER_BUFFER_SIZE,
194
270
  timeout = DEFAULT_TIMEOUT,
195
271
  execArgv = DEFAULT_EXEC_ARGV,
196
- tsRunner = DEFAULT_TS_RUNNER
272
+ tsRunner = DEFAULT_TS_RUNNER,
273
+ transferList = [],
274
+ globalShims = DEFAULT_GLOBAL_SHIMS
197
275
  } = {}) {
198
276
  const { port1: mainPort, port2: workerPort } = new node_worker_threads.MessageChannel();
199
277
  const {
200
278
  isTs,
201
279
  ext,
280
+ jsUseEsm,
202
281
  tsUseEsm,
282
+ tsRunner: finalTsRunner,
203
283
  workerPath: finalWorkerPath,
204
284
  execArgv: finalExecArgv
205
285
  } = setupTsRunner(workerPath, { execArgv, tsRunner });
206
286
  const workerPathUrl = node_url.pathToFileURL(finalWorkerPath);
207
287
  if (/\.[cm]ts$/.test(finalWorkerPath)) {
208
288
  const isTsxSupported = !tsUseEsm || Number.parseFloat(process.versions.node) >= MTS_SUPPORTED_NODE_VERSION;
209
- if ([
289
+ if (!finalTsRunner) {
290
+ throw new Error("No ts runner specified, ts worker path is not supported");
291
+ } else if ([
292
+ // https://github.com/egoist/esbuild-register/issues/79
210
293
  TsRunner.EsbuildRegister,
294
+ // https://github.com/folke/esbuild-runner/issues/67
211
295
  TsRunner.EsbuildRunner,
296
+ // https://github.com/swc-project/swc-node/issues/667
212
297
  TsRunner.SWC,
213
- ...isTsxSupported ? [] : [TsRunner.TSX]
214
- ].includes(tsRunner)) {
298
+ .../* istanbul ignore next */
299
+ isTsxSupported ? [] : [TsRunner.TSX]
300
+ ].includes(finalTsRunner)) {
215
301
  throw new Error(
216
- `${tsRunner} is not supported for ${ext} files yet` + (isTsxSupported ? ", you can try [tsx](https://github.com/esbuild-kit/tsx) instead" : "")
302
+ `${finalTsRunner} is not supported for ${ext} files yet` + /* istanbul ignore next */
303
+ (isTsxSupported ? ", you can try [tsx](https://github.com/esbuild-kit/tsx) instead" : "")
217
304
  );
218
305
  }
219
306
  }
220
- const useEval = isTs && !tsUseEsm;
307
+ const finalGlobalShims = (globalShims === true ? DEFAULT_GLOBAL_SHIMS_PRESET : Array.isArray(globalShims) ? globalShims : []).filter(({ moduleName }) => utils.isPkgAvailable(moduleName));
308
+ const useGlobals = finalGlobalShims.length > 0;
309
+ const useEval = isTs ? !tsUseEsm : !jsUseEsm && useGlobals;
221
310
  const worker = new node_worker_threads.Worker(
222
- tsUseEsm && tsRunner === TsRunner.TsNode ? dataUrl(`import '${String(workerPathUrl)}'`) : useEval ? `require('${finalWorkerPath.replace(/\\/g, "\\\\")}')` : workerPathUrl,
311
+ jsUseEsm && useGlobals || tsUseEsm && finalTsRunner === TsRunner.TsNode ? dataUrl(
312
+ `${generateGlobals(
313
+ finalWorkerPath,
314
+ finalGlobalShims
315
+ )};import '${String(workerPathUrl)}'`
316
+ ) : useEval ? `${generateGlobals(
317
+ finalWorkerPath,
318
+ finalGlobalShims,
319
+ "require"
320
+ )};${encodeImportModule(finalWorkerPath, "require")}` : workerPathUrl,
223
321
  {
224
322
  eval: useEval,
225
323
  workerData: { workerPort },
226
- transferList: [workerPort],
324
+ transferList: [workerPort, ...transferList],
227
325
  execArgv: finalExecArgv
228
326
  }
229
327
  );
@@ -260,50 +358,38 @@ function runAsWorker(fn) {
260
358
  return;
261
359
  }
262
360
  const { workerPort } = node_worker_threads.workerData;
263
- try {
264
- node_worker_threads.parentPort.on(
265
- "message",
266
- ({ sharedBuffer, id, args }) => {
267
- ;
268
- (() => __async(this, null, function* () {
269
- const sharedBufferView = new Int32Array(sharedBuffer);
270
- let msg;
271
- try {
272
- msg = { id, result: yield fn(...args) };
273
- } catch (error) {
274
- msg = { id, error, properties: extractProperties(error) };
275
- }
276
- workerPort.postMessage(msg);
277
- Atomics.add(sharedBufferView, 0, 1);
278
- Atomics.notify(sharedBufferView, 0);
279
- }))();
280
- }
281
- );
282
- } catch (error) {
283
- node_worker_threads.parentPort.on(
284
- "message",
285
- ({ sharedBuffer, id }) => {
361
+ node_worker_threads.parentPort.on(
362
+ "message",
363
+ ({ sharedBuffer, id, args }) => {
364
+ (() => __async(this, null, function* () {
286
365
  const sharedBufferView = new Int32Array(sharedBuffer);
287
- workerPort.postMessage({
288
- id,
289
- error,
290
- properties: extractProperties(error)
291
- });
366
+ let msg;
367
+ try {
368
+ msg = { id, result: yield fn(...args) };
369
+ } catch (error) {
370
+ msg = { id, error, properties: extractProperties(error) };
371
+ }
372
+ workerPort.postMessage(msg);
292
373
  Atomics.add(sharedBufferView, 0, 1);
293
374
  Atomics.notify(sharedBufferView, 0);
294
- }
295
- );
296
- }
375
+ }))();
376
+ }
377
+ );
297
378
  }
298
379
 
299
380
  exports.DEFAULT_BUFFER_SIZE = DEFAULT_BUFFER_SIZE;
300
381
  exports.DEFAULT_EXEC_ARGV = DEFAULT_EXEC_ARGV;
382
+ exports.DEFAULT_GLOBAL_SHIMS = DEFAULT_GLOBAL_SHIMS;
383
+ exports.DEFAULT_GLOBAL_SHIMS_PRESET = DEFAULT_GLOBAL_SHIMS_PRESET;
301
384
  exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
302
385
  exports.DEFAULT_TS_RUNNER = DEFAULT_TS_RUNNER;
303
386
  exports.DEFAULT_WORKER_BUFFER_SIZE = DEFAULT_WORKER_BUFFER_SIZE;
304
387
  exports.MTS_SUPPORTED_NODE_VERSION = MTS_SUPPORTED_NODE_VERSION;
305
388
  exports.TsRunner = TsRunner;
389
+ exports._generateGlobals = _generateGlobals;
306
390
  exports.createSyncFn = createSyncFn;
391
+ exports.encodeImportModule = encodeImportModule;
307
392
  exports.extractProperties = extractProperties;
393
+ exports.generateGlobals = generateGlobals;
308
394
  exports.isFile = isFile;
309
395
  exports.runAsWorker = runAsWorker;
package/lib/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- import { AnyAsyncFn, Syncify, ValueOf } from './types.js';
1
+ /// <reference types="node" />
2
+ import { type TransferListItem } from 'node:worker_threads';
3
+ import type { AnyAsyncFn, GlobalShim, Syncify, ValueOf } from './types.js';
2
4
  export * from './types.js';
3
5
  export declare const TsRunner: {
4
6
  readonly TsNode: "ts-node";
@@ -12,17 +14,23 @@ export declare const DEFAULT_BUFFER_SIZE: number | undefined;
12
14
  export declare const DEFAULT_TIMEOUT: number | undefined;
13
15
  export declare const DEFAULT_WORKER_BUFFER_SIZE: number;
14
16
  export declare const DEFAULT_EXEC_ARGV: string[];
15
- export declare const DEFAULT_TS_RUNNER: TsRunner;
17
+ export declare const DEFAULT_TS_RUNNER: TsRunner | undefined;
18
+ export declare const DEFAULT_GLOBAL_SHIMS: boolean;
19
+ export declare const DEFAULT_GLOBAL_SHIMS_PRESET: GlobalShim[];
16
20
  export declare const MTS_SUPPORTED_NODE_VERSION = 16;
17
21
  export interface SynckitOptions {
18
22
  bufferSize?: number;
19
23
  timeout?: number;
20
24
  execArgv?: string[];
21
25
  tsRunner?: TsRunner;
26
+ transferList?: TransferListItem[];
27
+ globalShims?: GlobalShim[] | boolean;
22
28
  }
23
29
  export declare function extractProperties<T extends object>(object: T): T;
24
30
  export declare function extractProperties<T>(object?: T): T | undefined;
25
31
  export declare function createSyncFn<T extends AnyAsyncFn>(workerPath: string, bufferSize?: number, timeout?: number): Syncify<T>;
26
32
  export declare function createSyncFn<T extends AnyAsyncFn>(workerPath: string, options?: SynckitOptions): Syncify<T>;
27
33
  export declare const isFile: (path: string) => boolean;
34
+ export declare const encodeImportModule: (moduleNameOrGlobalShim: GlobalShim | string, type?: 'import' | 'require') => string;
35
+ export declare const generateGlobals: (workerPath: string, globalShims: GlobalShim[], type?: 'import' | 'require') => string;
28
36
  export declare function runAsWorker<R = unknown, T extends AnyAsyncFn<R> = AnyAsyncFn<R>>(fn: T): void;
package/lib/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { __awaiter } from "tslib";
2
+ import { createHash } from 'node:crypto';
2
3
  import fs from 'node:fs';
3
4
  import { createRequire } from 'node:module';
4
5
  import path from 'node:path';
5
- import { pathToFileURL } from 'node:url';
6
- import { MessageChannel, Worker, receiveMessageOnPort, workerData, parentPort, } from 'node:worker_threads';
7
- import { findUp, tryExtensions } from '@pkgr/utils';
6
+ import { fileURLToPath, pathToFileURL } from 'node:url';
7
+ import { MessageChannel, Worker, parentPort, receiveMessageOnPort, workerData, } from 'node:worker_threads';
8
+ import { findUp, isPkgAvailable, tryExtensions } from '@pkgr/utils';
8
9
  export * from './types.js';
9
10
  export const TsRunner = {
10
11
  TsNode: 'ts-node',
@@ -13,15 +14,26 @@ export const TsRunner = {
13
14
  SWC: 'swc',
14
15
  TSX: 'tsx',
15
16
  };
16
- const { SYNCKIT_BUFFER_SIZE, SYNCKIT_TIMEOUT, SYNCKIT_EXEC_ARGV, SYNCKIT_TS_RUNNER, NODE_OPTIONS, } = process.env;
17
+ const { SYNCKIT_BUFFER_SIZE, SYNCKIT_TIMEOUT, SYNCKIT_EXEC_ARGV, SYNCKIT_TS_RUNNER, SYNCKIT_GLOBAL_SHIMS, NODE_OPTIONS, } = process.env;
17
18
  export const DEFAULT_BUFFER_SIZE = SYNCKIT_BUFFER_SIZE
18
19
  ? +SYNCKIT_BUFFER_SIZE
19
20
  : undefined;
20
21
  export const DEFAULT_TIMEOUT = SYNCKIT_TIMEOUT ? +SYNCKIT_TIMEOUT : undefined;
21
22
  export const DEFAULT_WORKER_BUFFER_SIZE = DEFAULT_BUFFER_SIZE || 1024;
22
23
  export const DEFAULT_EXEC_ARGV = (SYNCKIT_EXEC_ARGV === null || SYNCKIT_EXEC_ARGV === void 0 ? void 0 : SYNCKIT_EXEC_ARGV.split(',')) || [];
23
- export const DEFAULT_TS_RUNNER = (SYNCKIT_TS_RUNNER ||
24
- TsRunner.TsNode);
24
+ export const DEFAULT_TS_RUNNER = SYNCKIT_TS_RUNNER;
25
+ export const DEFAULT_GLOBAL_SHIMS = ['1', 'true'].includes(SYNCKIT_GLOBAL_SHIMS);
26
+ export const DEFAULT_GLOBAL_SHIMS_PRESET = [
27
+ {
28
+ moduleName: 'node-fetch',
29
+ globalName: 'fetch',
30
+ },
31
+ {
32
+ moduleName: 'node:perf_hooks',
33
+ globalName: 'performance',
34
+ named: 'performance',
35
+ },
36
+ ];
25
37
  export const MTS_SUPPORTED_NODE_VERSION = 16;
26
38
  const syncFnCache = new Map();
27
39
  export function extractProperties(object) {
@@ -52,10 +64,11 @@ const cjsRequire = typeof require === 'undefined'
52
64
  : require;
53
65
  const dataUrl = (code) => new URL(`data:text/javascript,${encodeURIComponent(code)}`);
54
66
  export const isFile = (path) => {
67
+ var _a;
55
68
  try {
56
- return fs.statSync(path).isFile();
69
+ return !!((_a = fs.statSync(path, { throwIfNoEntry: false })) === null || _a === void 0 ? void 0 : _a.isFile());
57
70
  }
58
- catch (_a) {
71
+ catch (_b) {
59
72
  return false;
60
73
  }
61
74
  };
@@ -68,15 +81,18 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
68
81
  : workerPath;
69
82
  let extensions;
70
83
  switch (ext) {
71
- case '.cjs':
84
+ case '.cjs': {
72
85
  extensions = ['.cts', '.cjs'];
73
86
  break;
74
- case '.mjs':
87
+ }
88
+ case '.mjs': {
75
89
  extensions = ['.mts', '.mjs'];
76
90
  break;
77
- default:
91
+ }
92
+ default: {
78
93
  extensions = ['.ts', '.js'];
79
94
  break;
95
+ }
80
96
  }
81
97
  const found = tryExtensions(workPathWithoutExt, extensions);
82
98
  let differentExt;
@@ -88,6 +104,7 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
88
104
  }
89
105
  }
90
106
  const isTs = /\.[cm]?ts$/.test(workerPath);
107
+ let jsUseEsm = workerPath.endsWith('.mjs');
91
108
  let tsUseEsm = workerPath.endsWith('.mts');
92
109
  if (isTs) {
93
110
  if (!tsUseEsm) {
@@ -98,6 +115,9 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
98
115
  'module';
99
116
  }
100
117
  }
118
+ if (tsRunner == null && isPkgAvailable(TsRunner.TsNode)) {
119
+ tsRunner = TsRunner.TsNode;
120
+ }
101
121
  switch (tsRunner) {
102
122
  case TsRunner.TsNode: {
103
123
  if (tsUseEsm) {
@@ -139,6 +159,13 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
139
159
  }
140
160
  }
141
161
  }
162
+ else if (!jsUseEsm) {
163
+ const pkg = findUp(workerPath);
164
+ if (pkg) {
165
+ jsUseEsm =
166
+ cjsRequire(pkg).type === 'module';
167
+ }
168
+ }
142
169
  if (process.versions.pnp) {
143
170
  const nodeOptions = NODE_OPTIONS === null || NODE_OPTIONS === void 0 ? void 0 : NODE_OPTIONS.split(/\s+/);
144
171
  let pnpApiPath;
@@ -161,39 +188,110 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
161
188
  return {
162
189
  ext,
163
190
  isTs,
191
+ jsUseEsm,
192
+ tsRunner,
164
193
  tsUseEsm,
165
194
  workerPath,
166
195
  execArgv,
167
196
  };
168
197
  };
169
- function startWorkerThread(workerPath, { bufferSize = DEFAULT_WORKER_BUFFER_SIZE, timeout = DEFAULT_TIMEOUT, execArgv = DEFAULT_EXEC_ARGV, tsRunner = DEFAULT_TS_RUNNER, } = {}) {
198
+ const md5Hash = (text) => createHash('md5').update(text).digest('hex');
199
+ export const encodeImportModule = (moduleNameOrGlobalShim, type = 'import') => {
200
+ const { moduleName, globalName, named, conditional } = typeof moduleNameOrGlobalShim === 'string'
201
+ ? { moduleName: moduleNameOrGlobalShim }
202
+ : moduleNameOrGlobalShim;
203
+ const importStatement = type === 'import'
204
+ ? `import${globalName
205
+ ? ' ' +
206
+ (named === null
207
+ ? '* as ' + globalName
208
+ : (named === null || named === void 0 ? void 0 : named.trim())
209
+ ? `{${named}}`
210
+ : globalName) +
211
+ ' from'
212
+ : ''} '${path.isAbsolute(moduleName)
213
+ ? String(pathToFileURL(moduleName))
214
+ : moduleName}'`
215
+ : `${globalName
216
+ ? 'const ' + ((named === null || named === void 0 ? void 0 : named.trim()) ? `{${named}}` : globalName) + '='
217
+ : ''}require('${moduleName
218
+ .replace(/\\/g, '\\\\')}')`;
219
+ if (!globalName) {
220
+ return importStatement;
221
+ }
222
+ const overrideStatement = `globalThis.${globalName}=${(named === null || named === void 0 ? void 0 : named.trim()) ? named : globalName}`;
223
+ return (importStatement +
224
+ (conditional === false
225
+ ? `;${overrideStatement}`
226
+ : `;if(!globalThis.${globalName})${overrideStatement}`));
227
+ };
228
+ export const _generateGlobals = (globalShims, type) => globalShims.reduce((acc, shim) => `${acc}${acc ? ';' : ''}${encodeImportModule(shim, type)}`, '');
229
+ const globalsCache = new Map();
230
+ let tmpdir;
231
+ const _dirname = typeof __dirname === 'undefined'
232
+ ? path.dirname(fileURLToPath(import.meta.url))
233
+ : __dirname;
234
+ export const generateGlobals = (workerPath, globalShims, type = 'import') => {
235
+ const cached = globalsCache.get(workerPath);
236
+ if (cached) {
237
+ const [content, filepath] = cached;
238
+ if ((type === 'require' && !filepath) ||
239
+ (type === 'import' && filepath && isFile(filepath))) {
240
+ return content;
241
+ }
242
+ }
243
+ const globals = _generateGlobals(globalShims, type);
244
+ let content = globals;
245
+ let filepath;
246
+ if (type === 'import') {
247
+ if (!tmpdir) {
248
+ tmpdir = path.resolve(findUp(_dirname), '../node_modules/.synckit');
249
+ }
250
+ fs.mkdirSync(tmpdir, { recursive: true });
251
+ filepath = path.resolve(tmpdir, md5Hash(workerPath) + '.mjs');
252
+ content = encodeImportModule(filepath);
253
+ fs.writeFileSync(filepath, globals);
254
+ }
255
+ globalsCache.set(workerPath, [content, filepath]);
256
+ return content;
257
+ };
258
+ function startWorkerThread(workerPath, { bufferSize = DEFAULT_WORKER_BUFFER_SIZE, timeout = DEFAULT_TIMEOUT, execArgv = DEFAULT_EXEC_ARGV, tsRunner = DEFAULT_TS_RUNNER, transferList = [], globalShims = DEFAULT_GLOBAL_SHIMS, } = {}) {
170
259
  const { port1: mainPort, port2: workerPort } = new MessageChannel();
171
- const { isTs, ext, tsUseEsm, workerPath: finalWorkerPath, execArgv: finalExecArgv, } = setupTsRunner(workerPath, { execArgv, tsRunner });
260
+ const { isTs, ext, jsUseEsm, tsUseEsm, tsRunner: finalTsRunner, workerPath: finalWorkerPath, execArgv: finalExecArgv, } = setupTsRunner(workerPath, { execArgv, tsRunner });
172
261
  const workerPathUrl = pathToFileURL(finalWorkerPath);
173
262
  if (/\.[cm]ts$/.test(finalWorkerPath)) {
174
263
  const isTsxSupported = !tsUseEsm ||
175
264
  Number.parseFloat(process.versions.node) >= MTS_SUPPORTED_NODE_VERSION;
176
- if ([
265
+ if (!finalTsRunner) {
266
+ throw new Error('No ts runner specified, ts worker path is not supported');
267
+ }
268
+ else if ([
177
269
  TsRunner.EsbuildRegister,
178
270
  TsRunner.EsbuildRunner,
179
271
  TsRunner.SWC,
180
272
  ...(isTsxSupported ? [] : [TsRunner.TSX]),
181
- ].includes(tsRunner)) {
182
- throw new Error(`${tsRunner} is not supported for ${ext} files yet` +
273
+ ].includes(finalTsRunner)) {
274
+ throw new Error(`${finalTsRunner} is not supported for ${ext} files yet` +
183
275
  (isTsxSupported
184
276
  ? ', you can try [tsx](https://github.com/esbuild-kit/tsx) instead'
185
277
  : ''));
186
278
  }
187
279
  }
188
- const useEval = isTs && !tsUseEsm;
189
- const worker = new Worker(tsUseEsm && tsRunner === TsRunner.TsNode
190
- ? dataUrl(`import '${String(workerPathUrl)}'`)
280
+ const finalGlobalShims = (globalShims === true
281
+ ? DEFAULT_GLOBAL_SHIMS_PRESET
282
+ : Array.isArray(globalShims)
283
+ ? globalShims
284
+ : []).filter(({ moduleName }) => isPkgAvailable(moduleName));
285
+ const useGlobals = finalGlobalShims.length > 0;
286
+ const useEval = isTs ? !tsUseEsm : !jsUseEsm && useGlobals;
287
+ const worker = new Worker((jsUseEsm && useGlobals) || (tsUseEsm && finalTsRunner === TsRunner.TsNode)
288
+ ? dataUrl(`${generateGlobals(finalWorkerPath, finalGlobalShims)};import '${String(workerPathUrl)}'`)
191
289
  : useEval
192
- ? `require('${finalWorkerPath.replace(/\\/g, '\\\\')}')`
290
+ ? `${generateGlobals(finalWorkerPath, finalGlobalShims, 'require')};${encodeImportModule(finalWorkerPath, 'require')}`
193
291
  : workerPathUrl, {
194
292
  eval: useEval,
195
293
  workerData: { workerPort },
196
- transferList: [workerPort],
294
+ transferList: [workerPort, ...transferList],
197
295
  execArgv: finalExecArgv,
198
296
  });
199
297
  let nextID = 0;
@@ -225,35 +323,21 @@ export function runAsWorker(fn) {
225
323
  return;
226
324
  }
227
325
  const { workerPort } = workerData;
228
- try {
229
- parentPort.on('message', ({ sharedBuffer, id, args }) => {
230
- ;
231
- (() => __awaiter(this, void 0, void 0, function* () {
232
- const sharedBufferView = new Int32Array(sharedBuffer);
233
- let msg;
234
- try {
235
- msg = { id, result: yield fn(...args) };
236
- }
237
- catch (error) {
238
- msg = { id, error, properties: extractProperties(error) };
239
- }
240
- workerPort.postMessage(msg);
241
- Atomics.add(sharedBufferView, 0, 1);
242
- Atomics.notify(sharedBufferView, 0);
243
- }))();
244
- });
245
- }
246
- catch (error) {
247
- parentPort.on('message', ({ sharedBuffer, id }) => {
326
+ parentPort.on('message', ({ sharedBuffer, id, args }) => {
327
+ ;
328
+ (() => __awaiter(this, void 0, void 0, function* () {
248
329
  const sharedBufferView = new Int32Array(sharedBuffer);
249
- workerPort.postMessage({
250
- id,
251
- error,
252
- properties: extractProperties(error),
253
- });
330
+ let msg;
331
+ try {
332
+ msg = { id, result: yield fn(...args) };
333
+ }
334
+ catch (error) {
335
+ msg = { id, error, properties: extractProperties(error) };
336
+ }
337
+ workerPort.postMessage(msg);
254
338
  Atomics.add(sharedBufferView, 0, 1);
255
339
  Atomics.notify(sharedBufferView, 0);
256
- });
257
- }
340
+ }))();
341
+ });
258
342
  }
259
343
  //# 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
@@ -22,3 +22,9 @@ export interface DataMessage<T> {
22
22
  export interface WorkerToMainMessage<T = unknown> extends DataMessage<T> {
23
23
  id: number;
24
24
  }
25
+ export interface GlobalShim {
26
+ moduleName: string;
27
+ globalName?: string;
28
+ named?: string | null;
29
+ conditional?: boolean;
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synckit",
3
- "version": "0.8.5",
3
+ "version": "0.8.7",
4
4
  "type": "module",
5
5
  "description": "Perform async work synchronously in Node.js using `worker_threads` with first-class TypeScript support.",
6
6
  "repository": "git+https://github.com/un-ts/synckit.git",
@@ -33,7 +33,7 @@
33
33
  "synckit"
34
34
  ],
35
35
  "dependencies": {
36
- "@pkgr/utils": "^2.3.1",
37
- "tslib": "^2.5.0"
36
+ "@pkgr/utils": "^2.4.2",
37
+ "tslib": "^2.6.2"
38
38
  }
39
39
  }