synckit 0.10.2 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs CHANGED
@@ -1,63 +1,36 @@
1
1
  'use strict';
2
2
 
3
- var node_crypto = require('node:crypto');
4
- var fs = require('node:fs');
5
3
  var module$1 = require('node:module');
6
4
  var path = require('node:path');
7
5
  var node_url = require('node:url');
8
6
  var node_worker_threads = require('node:worker_threads');
7
+ var node_crypto = require('node:crypto');
8
+ var fs = require('node:fs');
9
9
  var core = require('@pkgr/core');
10
10
 
11
- var __defProp = Object.defineProperty;
12
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
13
- var __hasOwnProp = Object.prototype.hasOwnProperty;
14
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
15
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
16
- var __spreadValues = (a, b) => {
17
- for (var prop in b || (b = {}))
18
- if (__hasOwnProp.call(b, prop))
19
- __defNormalProp(a, prop, b[prop]);
20
- if (__getOwnPropSymbols)
21
- for (var prop of __getOwnPropSymbols(b)) {
22
- if (__propIsEnum.call(b, prop))
23
- __defNormalProp(a, prop, b[prop]);
11
+ var _a;
12
+ const NODE_OPTIONS$1 = (_a = process.env.NODE_OPTIONS) == null ? void 0 : _a.split(/\s+/);
13
+ const hasFlag = (flag) => (NODE_OPTIONS$1 == null ? void 0 : NODE_OPTIONS$1.includes(flag)) || process.argv.includes(flag);
14
+ const parseVersion = (version) => version.split(".").map(Number.parseFloat);
15
+ const compareVersion = (version1, version2) => {
16
+ const versions1 = parseVersion(version1);
17
+ const versions2 = parseVersion(version2);
18
+ const length = Math.max(versions1.length, versions2.length);
19
+ for (let i = 0; i < length; i++) {
20
+ const v1 = versions1[i] || 0;
21
+ const v2 = versions2[i] || 0;
22
+ if (v1 > v2) {
23
+ return 1;
24
24
  }
25
- return a;
26
- };
27
- var __objRest = (source, exclude) => {
28
- var target = {};
29
- for (var prop in source)
30
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
31
- target[prop] = source[prop];
32
- if (source != null && __getOwnPropSymbols)
33
- for (var prop of __getOwnPropSymbols(source)) {
34
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
35
- target[prop] = source[prop];
25
+ if (v1 < v2) {
26
+ return -1;
36
27
  }
37
- return target;
38
- };
39
- var __async = (__this, __arguments, generator) => {
40
- return new Promise((resolve, reject) => {
41
- var fulfilled = (value) => {
42
- try {
43
- step(generator.next(value));
44
- } catch (e) {
45
- reject(e);
46
- }
47
- };
48
- var rejected = (value) => {
49
- try {
50
- step(generator.throw(value));
51
- } catch (e) {
52
- reject(e);
53
- }
54
- };
55
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
56
- step((generator = generator.apply(__this, __arguments)).next());
57
- });
28
+ }
29
+ return 0;
58
30
  };
59
- const import_meta = {};
60
- const INT32_BYTES = 4;
31
+ const NODE_VERSION = process.versions.node;
32
+ const compareNodeVersion = (version) => compareVersion(NODE_VERSION, version);
33
+
61
34
  const TsRunner = {
62
35
  // https://nodejs.org/docs/latest/api/typescript.html#type-stripping
63
36
  Node: "node",
@@ -69,6 +42,8 @@ const TsRunner = {
69
42
  EsbuildRegister: "esbuild-register",
70
43
  // https://github.com/folke/esbuild-runner
71
44
  EsbuildRunner: "esbuild-runner",
45
+ // https://github.com/oxc-project/oxc-node
46
+ OXC: "oxc",
72
47
  // https://github.com/swc-project/swc-node/tree/master/packages/register
73
48
  SWC: "swc",
74
49
  // https://github.com/esbuild-kit/tsx
@@ -81,8 +56,14 @@ const {
81
56
  SYNCKIT_TIMEOUT,
82
57
  SYNCKIT_TS_RUNNER
83
58
  } = process.env;
84
- const MTS_SUPPORTED_NODE_VERSION = "16";
85
- const LOADER_SUPPORTED_NODE_VERSION = "20";
59
+ const TS_ESM_PARTIAL_SUPPORTED = (
60
+ // >=
61
+ compareNodeVersion("16") >= 0 && // <
62
+ compareNodeVersion("18.19") < 0
63
+ );
64
+ const MTS_SUPPORTED = compareNodeVersion("20.8") >= 0;
65
+ const MODULE_REGISTER_SUPPORTED = MTS_SUPPORTED || // >=
66
+ compareNodeVersion("18.19") >= 0;
86
67
  const STRIP_TYPES_NODE_VERSION = "22.6";
87
68
  const TRANSFORM_TYPES_NODE_VERSION = "22.7";
88
69
  const FEATURE_TYPESCRIPT_NODE_VERSION = "22.10";
@@ -91,28 +72,10 @@ const STRIP_TYPES_FLAG = "--experimental-strip-types";
91
72
  const TRANSFORM_TYPES_FLAG = "--experimental-transform-types";
92
73
  const NO_STRIP_TYPES_FLAG = "--no-experimental-strip-types";
93
74
  const NODE_OPTIONS = NODE_OPTIONS_.split(/\s+/);
94
- const hasFlag = (flag) => NODE_OPTIONS.includes(flag) || process.argv.includes(flag);
95
- const parseVersion = (version) => version.split(".").map(Number.parseFloat);
96
- const compareVersion = (version1, version2) => {
97
- const versions1 = parseVersion(version1);
98
- const versions2 = parseVersion(version2);
99
- const length = Math.max(versions1.length, versions2.length);
100
- for (let i = 0; i < length; i++) {
101
- const v1 = versions1[i] || 0;
102
- const v2 = versions2[i] || 0;
103
- if (v1 > v2) {
104
- return 1;
105
- }
106
- if (v1 < v2) {
107
- return -1;
108
- }
109
- }
110
- return 0;
111
- };
112
- const NODE_VERSION = process.versions.node;
113
75
  const NO_STRIP_TYPES = (
114
- // >=
115
- compareVersion(NODE_VERSION, FEATURE_TYPESCRIPT_NODE_VERSION) >= 0 ? process.features.typescript === false : hasFlag(NO_STRIP_TYPES_FLAG) && !hasFlag(STRIP_TYPES_FLAG) && !hasFlag(TRANSFORM_TYPES_FLAG)
76
+ // only consider `process.features.typescript` when `--no-experimental-strip-types` flag enabled
77
+ hasFlag(NO_STRIP_TYPES_FLAG) && // >=
78
+ (compareNodeVersion(FEATURE_TYPESCRIPT_NODE_VERSION) >= 0 ? process.features.typescript === false : !hasFlag(STRIP_TYPES_FLAG) && !hasFlag(TRANSFORM_TYPES_FLAG))
116
79
  );
117
80
  const DEFAULT_TIMEOUT = SYNCKIT_TIMEOUT ? +SYNCKIT_TIMEOUT : void 0;
118
81
  const DEFAULT_EXEC_ARGV = SYNCKIT_EXEC_ARGV.split(",");
@@ -131,37 +94,45 @@ const DEFAULT_GLOBAL_SHIMS_PRESET = [
131
94
  named: "performance"
132
95
  }
133
96
  ];
134
- let syncFnCache;
135
- function extractProperties(object) {
136
- if (object && typeof object === "object") {
137
- const properties = {};
138
- for (const key in object) {
139
- properties[key] = object[key];
97
+ const IMPORT_FLAG = "--import";
98
+ const REQUIRE_FLAG = "--require";
99
+ const REQUIRE_ABBR_FLAG = "-r";
100
+ const REQUIRE_FLAGS = /* @__PURE__ */ new Set([REQUIRE_FLAG, REQUIRE_ABBR_FLAG]);
101
+ const LOADER_FLAG = "--loader";
102
+ const EXPERIMENTAL_LOADER_FLAG = "--experimental-loader";
103
+ const LOADER_FLAGS = /* @__PURE__ */ new Set([LOADER_FLAG, EXPERIMENTAL_LOADER_FLAG]);
104
+ const IMPORT_FLAG_SUPPORTED = compareNodeVersion("20.6") >= 0;
105
+ const INT32_BYTES = 4;
106
+
107
+ var __defProp = Object.defineProperty;
108
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
109
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
110
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
111
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
112
+ var __spreadValues = (a, b) => {
113
+ for (var prop in b || (b = {}))
114
+ if (__hasOwnProp.call(b, prop))
115
+ __defNormalProp(a, prop, b[prop]);
116
+ if (__getOwnPropSymbols)
117
+ for (var prop of __getOwnPropSymbols(b)) {
118
+ if (__propIsEnum.call(b, prop))
119
+ __defNormalProp(a, prop, b[prop]);
140
120
  }
141
- return properties;
142
- }
143
- }
144
- function createSyncFn(workerPath, timeoutOrOptions) {
145
- syncFnCache != null ? syncFnCache : syncFnCache = /* @__PURE__ */ new Map();
146
- if (typeof workerPath !== "string" || workerPath.startsWith("file://")) {
147
- workerPath = node_url.fileURLToPath(workerPath);
148
- }
149
- const cachedSyncFn = syncFnCache.get(workerPath);
150
- if (cachedSyncFn) {
151
- return cachedSyncFn;
152
- }
153
- if (!path.isAbsolute(workerPath)) {
154
- throw new Error("`workerPath` must be absolute");
155
- }
156
- const syncFn = startWorkerThread(
157
- workerPath,
158
- /* istanbul ignore next */
159
- typeof timeoutOrOptions === "number" ? { timeout: timeoutOrOptions } : timeoutOrOptions
160
- );
161
- syncFnCache.set(workerPath, syncFn);
162
- return syncFn;
163
- }
164
- const dataUrl = (code) => new URL(`data:text/javascript,${encodeURIComponent(code)}`);
121
+ return a;
122
+ };
123
+ var __objRest = (source, exclude) => {
124
+ var target = {};
125
+ for (var prop in source)
126
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
127
+ target[prop] = source[prop];
128
+ if (source != null && __getOwnPropSymbols)
129
+ for (var prop of __getOwnPropSymbols(source)) {
130
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
131
+ target[prop] = source[prop];
132
+ }
133
+ return target;
134
+ };
135
+ const import_meta = {};
165
136
  const isFile = (path2) => {
166
137
  var _a;
167
138
  try {
@@ -170,7 +141,14 @@ const isFile = (path2) => {
170
141
  return false;
171
142
  }
172
143
  };
173
- const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
144
+ const dataUrl = (code) => new URL(`data:text/javascript,${encodeURIComponent(code)}`);
145
+ const hasRequireFlag = (execArgv) => execArgv.some((execArg) => REQUIRE_FLAGS.has(execArg));
146
+ const hasImportFlag = (execArgv) => execArgv.includes(IMPORT_FLAG);
147
+ const hasLoaderFlag = (execArgv) => execArgv.some((execArg) => LOADER_FLAGS.has(execArg));
148
+ const setupTsRunner = (workerPath, {
149
+ execArgv = DEFAULT_EXEC_ARGV,
150
+ tsRunner
151
+ } = {}) => {
174
152
  let ext = path.extname(workerPath);
175
153
  if (!/([/\\])node_modules\1/.test(workerPath) && (!ext || /^\.[cm]?js$/.test(ext))) {
176
154
  const workPathWithoutExt = ext ? workerPath.slice(0, -ext.length) : workerPath;
@@ -217,7 +195,7 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
217
195
  if (process.versions.bun) {
218
196
  tsRunner = TsRunner.Bun;
219
197
  } else if (!noStripTypes && // >=
220
- compareVersion(NODE_VERSION, STRIP_TYPES_NODE_VERSION) >= 0) {
198
+ compareNodeVersion(STRIP_TYPES_NODE_VERSION) >= 0) {
221
199
  tsRunner = TsRunner.Node;
222
200
  } else if (core.isPkgAvailable(TsRunner.TsNode)) {
223
201
  tsRunner = TsRunner.TsNode;
@@ -228,7 +206,7 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
228
206
  break;
229
207
  }
230
208
  case TsRunner.Node: {
231
- if (compareVersion(NODE_VERSION, STRIP_TYPES_NODE_VERSION) < 0) {
209
+ if (compareNodeVersion(STRIP_TYPES_NODE_VERSION) < 0) {
232
210
  throw new Error(
233
211
  "type stripping is not supported in this node version"
234
212
  );
@@ -236,53 +214,109 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
236
214
  if (noStripTypes) {
237
215
  throw new Error("type stripping is disabled explicitly");
238
216
  }
239
- if (compareVersion(NODE_VERSION, DEFAULT_TYPES_NODE_VERSION) >= 0) {
217
+ if (compareNodeVersion(DEFAULT_TYPES_NODE_VERSION) >= 0) {
240
218
  break;
241
219
  }
242
220
  if (
243
221
  // >=
244
- compareVersion(NODE_VERSION, TRANSFORM_TYPES_NODE_VERSION) >= 0 && !execArgv.includes(TRANSFORM_TYPES_FLAG)
222
+ compareNodeVersion(TRANSFORM_TYPES_NODE_VERSION) >= 0 && !execArgv.includes(TRANSFORM_TYPES_FLAG)
245
223
  ) {
246
224
  execArgv = [TRANSFORM_TYPES_FLAG, ...execArgv];
247
225
  } else if (
248
226
  // >=
249
- compareVersion(NODE_VERSION, STRIP_TYPES_NODE_VERSION) >= 0 && !execArgv.includes(STRIP_TYPES_FLAG)
227
+ compareNodeVersion(STRIP_TYPES_NODE_VERSION) >= 0 && !execArgv.includes(STRIP_TYPES_FLAG)
250
228
  ) {
251
229
  execArgv = [STRIP_TYPES_FLAG, ...execArgv];
252
230
  }
253
231
  break;
254
232
  }
233
+ // https://github.com/TypeStrong/ts-node#node-flags-and-other-tools
255
234
  case TsRunner.TsNode: {
256
235
  if (tsUseEsm) {
257
- if (!execArgv.includes("--loader")) {
258
- execArgv = ["--loader", `${TsRunner.TsNode}/esm`, ...execArgv];
236
+ if (!execArgv.includes(LOADER_FLAG)) {
237
+ execArgv = [LOADER_FLAG, `${TsRunner.TsNode}/esm`, ...execArgv];
259
238
  }
260
- } else if (!execArgv.includes("-r")) {
261
- execArgv = ["-r", `${TsRunner.TsNode}/register`, ...execArgv];
239
+ } else if (!hasRequireFlag(execArgv)) {
240
+ execArgv = [
241
+ REQUIRE_ABBR_FLAG,
242
+ `${TsRunner.TsNode}/register`,
243
+ ...execArgv
244
+ ];
262
245
  }
263
246
  break;
264
247
  }
248
+ // https://github.com/egoist/esbuild-register#usage
265
249
  case TsRunner.EsbuildRegister: {
266
- if (!execArgv.includes("-r")) {
267
- execArgv = ["-r", TsRunner.EsbuildRegister, ...execArgv];
250
+ if (tsUseEsm) {
251
+ if (!hasLoaderFlag(execArgv)) {
252
+ execArgv = [
253
+ LOADER_FLAG,
254
+ `${TsRunner.EsbuildRegister}/loader`,
255
+ ...execArgv
256
+ ];
257
+ }
258
+ } else if (!hasRequireFlag(execArgv)) {
259
+ execArgv = [REQUIRE_ABBR_FLAG, TsRunner.EsbuildRegister, ...execArgv];
268
260
  }
269
261
  break;
270
262
  }
263
+ // https://github.com/folke/esbuild-runner#-usage
271
264
  case TsRunner.EsbuildRunner: {
272
- if (!execArgv.includes("-r")) {
273
- execArgv = ["-r", `${TsRunner.EsbuildRunner}/register`, ...execArgv];
265
+ if (!hasRequireFlag(execArgv)) {
266
+ execArgv = [
267
+ REQUIRE_ABBR_FLAG,
268
+ `${TsRunner.EsbuildRunner}/register`,
269
+ ...execArgv
270
+ ];
274
271
  }
275
272
  break;
276
273
  }
274
+ // https://github.com/oxc-project/oxc-node#usage
275
+ case TsRunner.OXC: {
276
+ if (!execArgv.includes(IMPORT_FLAG)) {
277
+ execArgv = [
278
+ IMPORT_FLAG,
279
+ `@${TsRunner.OXC}-node/core/register`,
280
+ ...execArgv
281
+ ];
282
+ }
283
+ break;
284
+ }
285
+ // https://github.com/swc-project/swc-node#usage
277
286
  case TsRunner.SWC: {
278
- if (!execArgv.includes("-r")) {
279
- execArgv = ["-r", `@${TsRunner.SWC}-node/register`, ...execArgv];
287
+ if (tsUseEsm) {
288
+ if (IMPORT_FLAG_SUPPORTED) {
289
+ if (!hasImportFlag(execArgv)) {
290
+ execArgv = [
291
+ IMPORT_FLAG,
292
+ `@${TsRunner.SWC}-node/register/esm-register`,
293
+ ...execArgv
294
+ ];
295
+ }
296
+ } else if (!hasLoaderFlag(execArgv)) {
297
+ execArgv = [
298
+ LOADER_FLAG,
299
+ `@${TsRunner.SWC}-node/register/esm`,
300
+ ...execArgv
301
+ ];
302
+ }
303
+ } else if (!hasRequireFlag(execArgv)) {
304
+ execArgv = [
305
+ REQUIRE_ABBR_FLAG,
306
+ `@${TsRunner.SWC}-node/register`,
307
+ ...execArgv
308
+ ];
280
309
  }
281
310
  break;
282
311
  }
312
+ // https://tsx.is/dev-api/node-cli#node-js-cli
283
313
  case TsRunner.TSX: {
284
- if (!execArgv.includes("--loader")) {
285
- execArgv = ["--loader", TsRunner.TSX, ...execArgv];
314
+ if (IMPORT_FLAG_SUPPORTED) {
315
+ if (!execArgv.includes(IMPORT_FLAG)) {
316
+ execArgv = [IMPORT_FLAG, TsRunner.TSX, ...execArgv];
317
+ }
318
+ } else if (!execArgv.includes(LOADER_FLAG)) {
319
+ execArgv = [LOADER_FLAG, TsRunner.TSX, ...execArgv];
286
320
  }
287
321
  break;
288
322
  }
@@ -290,7 +324,7 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
290
324
  throw new Error(`Unknown ts runner: ${String(tsRunner)}`);
291
325
  }
292
326
  }
293
- } else if (!jsUseEsm) {
327
+ } else if (!jsUseEsm && !workerPath.endsWith(".cjs")) {
294
328
  const pkg = core.findUp(workerPath);
295
329
  if (pkg) {
296
330
  jsUseEsm = core.cjsRequire(pkg).type === "module";
@@ -304,18 +338,14 @@ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
304
338
  } catch (e) {
305
339
  }
306
340
  if (pnpApiPath && !NODE_OPTIONS.some(
307
- (option, index) => ["-r", "--require"].includes(option) && pnpApiPath === core.cjsRequire.resolve(NODE_OPTIONS[index + 1])
341
+ (option, index) => REQUIRE_FLAGS.has(option) && pnpApiPath === core.cjsRequire.resolve(NODE_OPTIONS[index + 1])
308
342
  ) && !execArgv.includes(pnpApiPath)) {
309
- execArgv = ["-r", pnpApiPath, ...execArgv];
343
+ execArgv = [REQUIRE_ABBR_FLAG, pnpApiPath, ...execArgv];
310
344
  const pnpLoaderPath = path.resolve(pnpApiPath, "../.pnp.loader.mjs");
311
345
  if (isFile(pnpLoaderPath)) {
312
- resolvedPnpLoaderPath = node_url.pathToFileURL(pnpLoaderPath).toString();
313
- if (compareVersion(NODE_VERSION, LOADER_SUPPORTED_NODE_VERSION) < 0) {
314
- execArgv = [
315
- "--experimental-loader",
316
- resolvedPnpLoaderPath,
317
- ...execArgv
318
- ];
346
+ resolvedPnpLoaderPath = node_url.pathToFileURL(pnpLoaderPath).href;
347
+ if (!MODULE_REGISTER_SUPPORTED) {
348
+ execArgv = [LOADER_FLAG, resolvedPnpLoaderPath, ...execArgv];
319
349
  }
320
350
  }
321
351
  }
@@ -354,8 +384,6 @@ const _dirname = typeof __dirname === "undefined" ? path.dirname(node_url.fileUR
354
384
  /* istanbul ignore next */
355
385
  __dirname
356
386
  );
357
- let sharedBuffer;
358
- let sharedBufferView;
359
387
  const generateGlobals = (workerPath, globalShims, type = "import") => {
360
388
  if (globalShims.length === 0) {
361
389
  return "";
@@ -383,6 +411,17 @@ const generateGlobals = (workerPath, globalShims, type = "import") => {
383
411
  globalsCache.set(workerPath, [content, filepath]);
384
412
  return content;
385
413
  };
414
+ function extractProperties(object) {
415
+ if (object && typeof object === "object") {
416
+ const properties = {};
417
+ for (const key in object) {
418
+ properties[key] = object[key];
419
+ }
420
+ return properties;
421
+ }
422
+ }
423
+ let sharedBuffer;
424
+ let sharedBufferView;
386
425
  function startWorkerThread(workerPath, {
387
426
  timeout = DEFAULT_TIMEOUT,
388
427
  execArgv = DEFAULT_EXEC_ARGV,
@@ -390,7 +429,7 @@ function startWorkerThread(workerPath, {
390
429
  transferList = [],
391
430
  globalShims = DEFAULT_GLOBAL_SHIMS
392
431
  } = {}) {
393
- const { port1: mainPort, port2: workerPort } = new node_worker_threads.MessageChannel();
432
+ const { port1: mainPort, port2: workerPort } = new MessageChannel();
394
433
  const {
395
434
  isTs,
396
435
  ext,
@@ -403,23 +442,25 @@ function startWorkerThread(workerPath, {
403
442
  } = setupTsRunner(workerPath, { execArgv, tsRunner });
404
443
  const workerPathUrl = node_url.pathToFileURL(finalWorkerPath);
405
444
  if (/\.[cm]ts$/.test(finalWorkerPath)) {
406
- const isTsxSupported = !tsUseEsm || // >=
407
- compareVersion(NODE_VERSION, MTS_SUPPORTED_NODE_VERSION) >= 0;
445
+ const isTsxSupported = !tsUseEsm || TS_ESM_PARTIAL_SUPPORTED;
408
446
  if (!finalTsRunner) {
409
447
  throw new Error("No ts runner specified, ts worker path is not supported");
410
448
  } else if ([
411
- // https://github.com/egoist/esbuild-register/issues/79
449
+ // https://github.com/egoist/esbuild-register/issues/96
412
450
  TsRunner.EsbuildRegister,
413
451
  // https://github.com/folke/esbuild-runner/issues/67
414
452
  TsRunner.EsbuildRunner,
415
- // https://github.com/swc-project/swc-node/issues/667
416
- TsRunner.SWC,
453
+ ...TS_ESM_PARTIAL_SUPPORTED ? [
454
+ TsRunner.OXC,
455
+ // https://github.com/swc-project/swc-node/issues/667
456
+ TsRunner.SWC
457
+ ] : [],
417
458
  .../* istanbul ignore next */
418
459
  isTsxSupported ? [] : [TsRunner.TSX]
419
460
  ].includes(finalTsRunner)) {
420
461
  throw new Error(
421
462
  `${finalTsRunner} is not supported for ${ext} files yet` + /* istanbul ignore next */
422
- (isTsxSupported ? ", you can try [tsx](https://github.com/esbuild-kit/tsx) instead" : "")
463
+ (isTsxSupported ? ", you can try [tsx](https://github.com/esbuild-kit/tsx) instead" : MTS_SUPPORTED ? ", you can try [oxc](https://github.com/oxc-project/oxc-node) or [swc](https://github.com/swc-project/swc-node/tree/master/packages/register) instead" : "")
423
464
  );
424
465
  }
425
466
  }
@@ -447,7 +488,7 @@ function startWorkerThread(workerPath, {
447
488
  )};${encodeImportModule(finalWorkerPath, "require")}` : workerPathUrl,
448
489
  {
449
490
  eval: useEval,
450
- workerData: { sharedBuffer, workerPort, pnpLoaderPath },
491
+ workerData: { sharedBufferView, workerPort, pnpLoaderPath },
451
492
  transferList: [workerPort, ...transferList],
452
493
  execArgv: finalExecArgv
453
494
  }
@@ -501,11 +542,7 @@ function startWorkerThread(workerPath, {
501
542
  worker.unref();
502
543
  return syncFn;
503
544
  }
504
- function runAsWorker(fn) {
505
- if (!node_worker_threads.workerData) {
506
- return;
507
- }
508
- const stdio = [];
545
+ const overrideStdio = (stdio) => {
509
546
  for (const type of ["stdout", "stderr"]) {
510
547
  process[type]._writev = (chunks, callback) => {
511
548
  for (const {
@@ -523,12 +560,59 @@ function runAsWorker(fn) {
523
560
  callback();
524
561
  };
525
562
  }
526
- const { workerPort, sharedBuffer: sharedBuffer2, pnpLoaderPath } = node_worker_threads.workerData;
527
- if (pnpLoaderPath && // >=
528
- compareVersion(NODE_VERSION, LOADER_SUPPORTED_NODE_VERSION) >= 0) {
563
+ };
564
+
565
+ var __async = (__this, __arguments, generator) => {
566
+ return new Promise((resolve, reject) => {
567
+ var fulfilled = (value) => {
568
+ try {
569
+ step(generator.next(value));
570
+ } catch (e) {
571
+ reject(e);
572
+ }
573
+ };
574
+ var rejected = (value) => {
575
+ try {
576
+ step(generator.throw(value));
577
+ } catch (e) {
578
+ reject(e);
579
+ }
580
+ };
581
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
582
+ step((generator = generator.apply(__this, __arguments)).next());
583
+ });
584
+ };
585
+ let syncFnCache;
586
+ function createSyncFn(workerPath, timeoutOrOptions) {
587
+ syncFnCache != null ? syncFnCache : syncFnCache = /* @__PURE__ */ new Map();
588
+ if (typeof workerPath !== "string" || workerPath.startsWith("file://")) {
589
+ workerPath = node_url.fileURLToPath(workerPath);
590
+ }
591
+ const cachedSyncFn = syncFnCache.get(workerPath);
592
+ if (cachedSyncFn) {
593
+ return cachedSyncFn;
594
+ }
595
+ if (!path.isAbsolute(workerPath)) {
596
+ throw new Error("`workerPath` must be absolute");
597
+ }
598
+ const syncFn = startWorkerThread(
599
+ workerPath,
600
+ /* istanbul ignore next */
601
+ typeof timeoutOrOptions === "number" ? { timeout: timeoutOrOptions } : timeoutOrOptions
602
+ );
603
+ syncFnCache.set(workerPath, syncFn);
604
+ return syncFn;
605
+ }
606
+ function runAsWorker(fn) {
607
+ if (!node_worker_threads.workerData) {
608
+ return;
609
+ }
610
+ const stdio = [];
611
+ overrideStdio(stdio);
612
+ const { workerPort, sharedBufferView, pnpLoaderPath } = node_worker_threads.workerData;
613
+ if (pnpLoaderPath && MODULE_REGISTER_SUPPORTED) {
529
614
  module$1.register(pnpLoaderPath);
530
615
  }
531
- const sharedBufferView2 = new Int32Array(sharedBuffer2, 0, 1);
532
616
  node_worker_threads.parentPort.on(
533
617
  "message",
534
618
  ({ id, args }) => {
@@ -553,8 +637,8 @@ function runAsWorker(fn) {
553
637
  }
554
638
  try {
555
639
  workerPort.postMessage(msg);
556
- Atomics.add(sharedBufferView2, 0, 1);
557
- Atomics.notify(sharedBufferView2, 0);
640
+ Atomics.add(sharedBufferView, 0, 1);
641
+ Atomics.notify(sharedBufferView, 0);
558
642
  } finally {
559
643
  stdio.length = 0;
560
644
  }
@@ -569,21 +653,44 @@ exports.DEFAULT_GLOBAL_SHIMS_PRESET = DEFAULT_GLOBAL_SHIMS_PRESET;
569
653
  exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
570
654
  exports.DEFAULT_TS_RUNNER = DEFAULT_TS_RUNNER;
571
655
  exports.DEFAULT_TYPES_NODE_VERSION = DEFAULT_TYPES_NODE_VERSION;
656
+ exports.EXPERIMENTAL_LOADER_FLAG = EXPERIMENTAL_LOADER_FLAG;
572
657
  exports.FEATURE_TYPESCRIPT_NODE_VERSION = FEATURE_TYPESCRIPT_NODE_VERSION;
573
- exports.LOADER_SUPPORTED_NODE_VERSION = LOADER_SUPPORTED_NODE_VERSION;
574
- exports.MTS_SUPPORTED_NODE_VERSION = MTS_SUPPORTED_NODE_VERSION;
658
+ exports.IMPORT_FLAG = IMPORT_FLAG;
659
+ exports.IMPORT_FLAG_SUPPORTED = IMPORT_FLAG_SUPPORTED;
660
+ exports.INT32_BYTES = INT32_BYTES;
661
+ exports.LOADER_FLAG = LOADER_FLAG;
662
+ exports.LOADER_FLAGS = LOADER_FLAGS;
663
+ exports.MODULE_REGISTER_SUPPORTED = MODULE_REGISTER_SUPPORTED;
664
+ exports.MTS_SUPPORTED = MTS_SUPPORTED;
665
+ exports.NODE_OPTIONS = NODE_OPTIONS;
575
666
  exports.NODE_VERSION = NODE_VERSION;
667
+ exports.NO_STRIP_TYPES = NO_STRIP_TYPES;
576
668
  exports.NO_STRIP_TYPES_FLAG = NO_STRIP_TYPES_FLAG;
669
+ exports.REQUIRE_ABBR_FLAG = REQUIRE_ABBR_FLAG;
670
+ exports.REQUIRE_FLAG = REQUIRE_FLAG;
671
+ exports.REQUIRE_FLAGS = REQUIRE_FLAGS;
577
672
  exports.STRIP_TYPES_FLAG = STRIP_TYPES_FLAG;
578
673
  exports.STRIP_TYPES_NODE_VERSION = STRIP_TYPES_NODE_VERSION;
579
674
  exports.TRANSFORM_TYPES_FLAG = TRANSFORM_TYPES_FLAG;
580
675
  exports.TRANSFORM_TYPES_NODE_VERSION = TRANSFORM_TYPES_NODE_VERSION;
676
+ exports.TS_ESM_PARTIAL_SUPPORTED = TS_ESM_PARTIAL_SUPPORTED;
581
677
  exports.TsRunner = TsRunner;
582
678
  exports._generateGlobals = _generateGlobals;
679
+ exports.compareNodeVersion = compareNodeVersion;
583
680
  exports.compareVersion = compareVersion;
584
681
  exports.createSyncFn = createSyncFn;
682
+ exports.dataUrl = dataUrl;
585
683
  exports.encodeImportModule = encodeImportModule;
586
684
  exports.extractProperties = extractProperties;
587
685
  exports.generateGlobals = generateGlobals;
686
+ exports.hasFlag = hasFlag;
687
+ exports.hasImportFlag = hasImportFlag;
688
+ exports.hasLoaderFlag = hasLoaderFlag;
689
+ exports.hasRequireFlag = hasRequireFlag;
588
690
  exports.isFile = isFile;
691
+ exports.md5Hash = md5Hash;
692
+ exports.overrideStdio = overrideStdio;
693
+ exports.parseVersion = parseVersion;
589
694
  exports.runAsWorker = runAsWorker;
695
+ exports.setupTsRunner = setupTsRunner;
696
+ exports.startWorkerThread = startWorkerThread;
package/lib/index.d.ts CHANGED
@@ -1,43 +1,7 @@
1
- import { type TransferListItem } from 'node:worker_threads';
2
- import type { AnyFn, GlobalShim, Syncify, ValueOf } from './types.js';
1
+ import type { AnyFn, Syncify, SynckitOptions } from './types.js';
2
+ export * from './common.js';
3
+ export * from './constants.js';
4
+ export * from './helpers.js';
3
5
  export * from './types.js';
4
- export declare const TsRunner: {
5
- readonly Node: "node";
6
- readonly Bun: "bun";
7
- readonly TsNode: "ts-node";
8
- readonly EsbuildRegister: "esbuild-register";
9
- readonly EsbuildRunner: "esbuild-runner";
10
- readonly SWC: "swc";
11
- readonly TSX: "tsx";
12
- };
13
- export type TsRunner = ValueOf<typeof TsRunner>;
14
- export declare const MTS_SUPPORTED_NODE_VERSION = "16";
15
- export declare const LOADER_SUPPORTED_NODE_VERSION = "20";
16
- export declare const STRIP_TYPES_NODE_VERSION = "22.6";
17
- export declare const TRANSFORM_TYPES_NODE_VERSION = "22.7";
18
- export declare const FEATURE_TYPESCRIPT_NODE_VERSION = "22.10";
19
- export declare const DEFAULT_TYPES_NODE_VERSION = "23.6";
20
- export declare const STRIP_TYPES_FLAG = "--experimental-strip-types";
21
- export declare const TRANSFORM_TYPES_FLAG = "--experimental-transform-types";
22
- export declare const NO_STRIP_TYPES_FLAG = "--no-experimental-strip-types";
23
- export declare const compareVersion: (version1: string, version2: string) => 1 | -1 | 0;
24
- export declare const NODE_VERSION: string;
25
- export declare const DEFAULT_TIMEOUT: number | undefined;
26
- export declare const DEFAULT_EXEC_ARGV: string[];
27
- export declare const DEFAULT_TS_RUNNER: TsRunner | undefined;
28
- export declare const DEFAULT_GLOBAL_SHIMS: boolean;
29
- export declare const DEFAULT_GLOBAL_SHIMS_PRESET: GlobalShim[];
30
- export interface SynckitOptions {
31
- execArgv?: string[];
32
- globalShims?: GlobalShim[] | boolean;
33
- timeout?: number;
34
- transferList?: TransferListItem[];
35
- tsRunner?: TsRunner;
36
- }
37
- export declare function extractProperties<T extends object>(object: T): T;
38
- export declare function extractProperties<T>(object?: T): T | undefined;
39
6
  export declare function createSyncFn<T extends AnyFn>(workerPath: URL | string, timeoutOrOptions?: SynckitOptions | number): Syncify<T>;
40
- export declare const isFile: (path: string) => boolean;
41
- export declare const encodeImportModule: (moduleNameOrGlobalShim: GlobalShim | string, type?: "import" | "require") => string;
42
- export declare const generateGlobals: (workerPath: string, globalShims: GlobalShim[], type?: "import" | "require") => string;
43
7
  export declare function runAsWorker<T extends AnyFn<Promise<R> | R>, R = ReturnType<T>>(fn: T): void;