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/README.md +8 -7
- package/lib/common.d.ts +5 -0
- package/lib/common.js +23 -0
- package/lib/common.js.map +1 -0
- package/lib/constants.d.ts +38 -0
- package/lib/constants.js +54 -0
- package/lib/constants.js.map +1 -0
- package/lib/helpers.d.ts +27 -0
- package/lib/helpers.js +413 -0
- package/lib/helpers.js.map +1 -0
- package/lib/index.cjs +260 -153
- package/lib/index.d.ts +4 -40
- package/lib/index.js +11 -412
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +10 -2
- package/package.json +8 -4
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
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
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
|
-
|
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
|
60
|
-
const
|
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
|
85
|
-
|
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
|
-
|
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
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
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
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
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
|
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
|
-
|
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 (
|
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 (
|
217
|
+
if (compareNodeVersion(DEFAULT_TYPES_NODE_VERSION) >= 0) {
|
240
218
|
break;
|
241
219
|
}
|
242
220
|
if (
|
243
221
|
// >=
|
244
|
-
|
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
|
-
|
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(
|
258
|
-
execArgv = [
|
236
|
+
if (!execArgv.includes(LOADER_FLAG)) {
|
237
|
+
execArgv = [LOADER_FLAG, `${TsRunner.TsNode}/esm`, ...execArgv];
|
259
238
|
}
|
260
|
-
} else if (!execArgv
|
261
|
-
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 (
|
267
|
-
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
|
273
|
-
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 (
|
279
|
-
|
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 (
|
285
|
-
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) =>
|
341
|
+
(option, index) => REQUIRE_FLAGS.has(option) && pnpApiPath === core.cjsRequire.resolve(NODE_OPTIONS[index + 1])
|
308
342
|
) && !execArgv.includes(pnpApiPath)) {
|
309
|
-
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).
|
313
|
-
if (
|
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
|
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/
|
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
|
-
|
416
|
-
|
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: {
|
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
|
-
|
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
|
-
|
527
|
-
|
528
|
-
|
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(
|
557
|
-
Atomics.notify(
|
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.
|
574
|
-
exports.
|
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 {
|
2
|
-
|
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;
|