synckit 0.7.2 → 0.8.1

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 RxTS
3
+ Copyright (c) 2021 UnTS
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # synckit
2
2
 
3
- [![GitHub Actions](https://github.com/rx-ts/synckit/workflows/CI/badge.svg)](https://github.com/rx-ts/synckit/actions/workflows/ci.yml)
4
- [![Codecov](https://img.shields.io/codecov/c/github/rx-ts/synckit.svg)](https://codecov.io/gh/rx-ts/synckit)
5
- [![Codacy Grade](https://img.shields.io/codacy/grade/3eaf9a96ad12491493b712a6a99028c5)](https://www.codacy.com/gh/rx-ts/synckit)
6
- [![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%2Frx-ts%2Fsynckit%2Fmain%2Fpackage.json)](https://github.com/plantain-00/type-coverage)
3
+ [![GitHub Actions](https://github.com/un-ts/synckit/workflows/CI/badge.svg)](https://github.com/un-ts/synckit/actions/workflows/ci.yml)
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
+ [![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
7
  [![npm](https://img.shields.io/npm/v/synckit.svg)](https://www.npmjs.com/package/synckit)
8
- [![GitHub Release](https://img.shields.io/github/release/rx-ts/synckit)](https://github.com/rx-ts/synckit/releases)
8
+ [![GitHub Release](https://img.shields.io/github/release/un-ts/synckit)](https://github.com/un-ts/synckit/releases)
9
9
 
10
10
  [![Conventional Commits](https://img.shields.io/badge/conventional%20commits-1.0.0-yellow.svg)](https://conventionalcommits.org)
11
11
  [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com)
@@ -21,6 +21,10 @@ Perform async work synchronously in Node.js using `worker_threads` with first-cl
21
21
  - [API](#api)
22
22
  - [Envs](#envs)
23
23
  - [TypeScript](#typescript)
24
+ - [`ts-node`](#ts-node)
25
+ - [`esbuild-register`](#esbuild-register)
26
+ - [`esbuild-runner`](#esbuild-runner)
27
+ - [`tsx`](#tsx)
24
28
  - [Benchmark](#benchmark)
25
29
  - [Sponsors](#sponsors)
26
30
  - [Backers](#backers)
@@ -62,22 +66,37 @@ runAsWorker(async (...args) => {
62
66
  })
63
67
  ```
64
68
 
65
- You must make sure, the `result` is serialized by [`Structured Clone Algorithm`](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm)
69
+ 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
70
 
67
71
  ### Envs
68
72
 
69
73
  1. `SYNCKIT_BUFFER_SIZE`: `bufferSize` to create `SharedArrayBuffer` for `worker_threads` (default as `1024`)
70
74
  2. `SYNCKIT_TIMEOUT`: `timeout` for performing the async job (no default)
71
75
  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)
76
+ 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
77
 
73
78
  ### TypeScript
74
79
 
80
+ #### `ts-node`
81
+
75
82
  If you want to use `ts-node` for worker file (a `.ts` file), it is supported out of box!
76
83
 
77
84
  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
85
 
79
86
  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
87
 
88
+ #### `esbuild-register`
89
+
90
+ Please view <https://github.com/egoist/esbuild-register> for its document
91
+
92
+ #### `esbuild-runner`
93
+
94
+ Please view <https://github.com/folke/esbuild-runner> for its document
95
+
96
+ #### `tsx`
97
+
98
+ Please view <https://github.com/esbuild-kit/tsx> for its document
99
+
81
100
  ## Benchmark
82
101
 
83
102
  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 +117,7 @@ You can try it with running `yarn benchmark` by yourself. [Here](./benchmarks/be
98
117
 
99
118
  | 1stG | RxTS | UnTS |
100
119
  | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
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/rxts/individuals.svg)](https://opencollective.com/rxts) | [![UnTS Open Collective backers and sponsors](https://opencollective.com/unts/individuals.svg)](https://opencollective.com/unts) |
120
+ | [![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) |
102
121
 
103
122
  ## Changelog
104
123
 
package/lib/index.cjs CHANGED
@@ -33,12 +33,24 @@ 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_ARV,
46
+ SYNCKIT_TS_RUNNER
47
+ } = process.env;
38
48
  const DEFAULT_BUFFER_SIZE = SYNCKIT_BUFFER_SIZE ? +SYNCKIT_BUFFER_SIZE : void 0;
39
49
  const DEFAULT_TIMEOUT = SYNCKIT_TIMEOUT ? +SYNCKIT_TIMEOUT : void 0;
40
50
  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 : [];
51
+ const DEFAULT_EXEC_ARGV = (SYNCKIT_EXEC_ARV == null ? void 0 : SYNCKIT_EXEC_ARV.split(",")) || [];
52
+ const DEFAULT_TS_RUNNER = SYNCKIT_TS_RUNNER || TsRunner.TsNode;
53
+ const MTS_SUPPORTED_NODE_VERSION = 16;
42
54
  const syncFnCache = /* @__PURE__ */ new Map();
43
55
  const extractProperties = (object) => {
44
56
  if (object && typeof object === "object") {
@@ -63,13 +75,28 @@ function createSyncFn(workerPath, bufferSizeOrOptions, timeout) {
63
75
  }
64
76
  const cjsRequire = typeof require === "undefined" ? node_module.createRequire(import_meta.url) : require;
65
77
  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 || ext === ".js") {
70
- const found = utils.tryExtensions(ext ? workerPath.replace(/\.js$/, "") : workerPath, [".ts", ".js"]);
71
- if (found) {
72
- workerPath = found;
78
+ const setupTsRunner = (workerPath, { execArgv, tsRunner }) => {
79
+ let ext = path__default["default"].extname(workerPath);
80
+ if (!/[/\\]node_modules[/\\]/.test(workerPath) && (!ext || /^\.[cm]?js$/.test(ext))) {
81
+ const workPathWithoutExt = ext ? workerPath.slice(0, -ext.length) : workerPath;
82
+ let extensions;
83
+ switch (ext) {
84
+ case ".cjs":
85
+ extensions = [".cts", ".cjs"];
86
+ break;
87
+ case ".mjs":
88
+ extensions = [".mts", ".mjs"];
89
+ break;
90
+ default:
91
+ extensions = [".ts", ".js"];
92
+ break;
93
+ }
94
+ const found = utils.tryExtensions(workPathWithoutExt, extensions);
95
+ let differentExt;
96
+ if (found && (!ext || (differentExt = found !== workPathWithoutExt))) {
97
+ workerPath = found;
98
+ if (differentExt) {
99
+ ext = path__default["default"].extname(workerPath);
73
100
  }
74
101
  }
75
102
  }
@@ -82,11 +109,42 @@ const setupTsNode = (workerPath, execArgv) => {
82
109
  tsUseEsm = cjsRequire(pkg).type === "module";
83
110
  }
84
111
  }
85
- if (tsUseEsm && !execArgv.includes("--loader")) {
86
- execArgv = ["--loader", "ts-node/esm", ...execArgv];
112
+ switch (tsRunner) {
113
+ case TsRunner.TsNode: {
114
+ if (tsUseEsm) {
115
+ if (!execArgv.includes("--loader")) {
116
+ execArgv = ["--loader", `${TsRunner.TsNode}/esm`, ...execArgv];
117
+ }
118
+ } else if (!execArgv.includes("-r")) {
119
+ execArgv = ["-r", `${TsRunner.TsNode}/register`, ...execArgv];
120
+ }
121
+ break;
122
+ }
123
+ case TsRunner.EsbuildRegister: {
124
+ if (!execArgv.includes("-r")) {
125
+ execArgv = ["-r", TsRunner.EsbuildRegister, ...execArgv];
126
+ }
127
+ break;
128
+ }
129
+ case TsRunner.EsbuildRunner: {
130
+ if (!execArgv.includes("-r")) {
131
+ execArgv = ["-r", `${TsRunner.EsbuildRunner}/register`, ...execArgv];
132
+ }
133
+ break;
134
+ }
135
+ case TsRunner.TSX: {
136
+ if (!execArgv.includes("--loader")) {
137
+ execArgv = ["--loader", TsRunner.TSX, ...execArgv];
138
+ }
139
+ break;
140
+ }
141
+ default: {
142
+ throw new Error(`Unknown ts runner: ${String(tsRunner)}`);
143
+ }
87
144
  }
88
145
  }
89
146
  return {
147
+ ext,
90
148
  isTs,
91
149
  tsUseEsm,
92
150
  workerPath,
@@ -96,17 +154,31 @@ const setupTsNode = (workerPath, execArgv) => {
96
154
  function startWorkerThread(workerPath, {
97
155
  bufferSize = DEFAULT_WORKER_BUFFER_SIZE,
98
156
  timeout = DEFAULT_TIMEOUT,
99
- execArgv = DEFAULT_EXEC_ARGV
157
+ execArgv = DEFAULT_EXEC_ARGV,
158
+ tsRunner = DEFAULT_TS_RUNNER
100
159
  } = {}) {
101
160
  const { port1: mainPort, port2: workerPort } = new node_worker_threads.MessageChannel();
102
161
  const {
103
162
  isTs,
163
+ ext,
104
164
  tsUseEsm,
105
165
  workerPath: finalWorkerPath,
106
166
  execArgv: finalExecArgv
107
- } = setupTsNode(workerPath, execArgv);
108
- 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), {
109
- eval: isTs && !tsUseEsm,
167
+ } = setupTsRunner(workerPath, { execArgv, tsRunner });
168
+ const workerPathUrl = node_url.pathToFileURL(finalWorkerPath);
169
+ if (/\.[cm]ts$/.test(finalWorkerPath)) {
170
+ const isTsxSupported = !tsUseEsm || Number.parseFloat(process.versions.node) >= MTS_SUPPORTED_NODE_VERSION;
171
+ if ([
172
+ TsRunner.EsbuildRegister,
173
+ TsRunner.EsbuildRunner,
174
+ ...isTsxSupported ? [] : [TsRunner.TSX]
175
+ ].includes(tsRunner)) {
176
+ throw new Error(`${tsRunner} is not supported for ${ext} files yet` + (isTsxSupported ? ", you can try [tsx](https://github.com/esbuild-kit/tsx) instead" : ""));
177
+ }
178
+ }
179
+ const useEval = isTs && !tsUseEsm;
180
+ const worker = new node_worker_threads.Worker(tsUseEsm && tsRunner === TsRunner.TsNode ? dataUrl(`import '${String(workerPathUrl)}'`) : useEval ? `require('${finalWorkerPath.replace(/\\/g, "\\\\")}')` : workerPathUrl, {
181
+ eval: useEval,
110
182
  workerData: { workerPort },
111
183
  transferList: [workerPort],
112
184
  execArgv: finalExecArgv
@@ -167,7 +239,10 @@ function runAsWorker(fn) {
167
239
  exports.DEFAULT_BUFFER_SIZE = DEFAULT_BUFFER_SIZE;
168
240
  exports.DEFAULT_EXEC_ARGV = DEFAULT_EXEC_ARGV;
169
241
  exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
242
+ exports.DEFAULT_TS_RUNNER = DEFAULT_TS_RUNNER;
170
243
  exports.DEFAULT_WORKER_BUFFER_SIZE = DEFAULT_WORKER_BUFFER_SIZE;
244
+ exports.MTS_SUPPORTED_NODE_VERSION = MTS_SUPPORTED_NODE_VERSION;
245
+ exports.TsRunner = TsRunner;
171
246
  exports.createSyncFn = createSyncFn;
172
247
  exports.extractProperties = extractProperties;
173
248
  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_ARV, SYNCKIT_TS_RUNNER, } = 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_ARV === null || SYNCKIT_EXEC_ARV === void 0 ? void 0 : SYNCKIT_EXEC_ARV.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,20 +60,35 @@ 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
- // TODO: support `.cts` and `.mts` automatically
56
- if (!ext || ext === '.js') {
57
- const found = tryExtensions(ext ? workerPath.replace(/\.js$/, '') : workerPath, ['.ts', '.js']);
58
- if (found) {
59
- 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);
60
88
  }
61
89
  }
62
90
  }
63
91
  const isTs = /\.[cm]?ts$/.test(workerPath);
64
- // TODO: it does not work for `ts-node` for now
65
92
  let tsUseEsm = workerPath.endsWith('.mts');
66
93
  if (isTs) {
67
94
  if (!tsUseEsm) {
@@ -72,26 +99,78 @@ const setupTsNode = (workerPath, execArgv) => {
72
99
  'module';
73
100
  }
74
101
  }
75
- if (tsUseEsm && !execArgv.includes('--loader')) {
76
- 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
+ }
77
135
  }
78
136
  }
79
137
  return {
138
+ ext,
80
139
  isTs,
81
140
  tsUseEsm,
82
141
  workerPath,
83
142
  execArgv,
84
143
  };
85
144
  };
86
- function startWorkerThread(workerPath, { bufferSize = DEFAULT_WORKER_BUFFER_SIZE, timeout = DEFAULT_TIMEOUT, execArgv = DEFAULT_EXEC_ARGV, } = {}) {
145
+ // eslint-disable-next-line sonarjs/cognitive-complexity
146
+ function startWorkerThread(workerPath, { bufferSize = DEFAULT_WORKER_BUFFER_SIZE, timeout = DEFAULT_TIMEOUT, execArgv = DEFAULT_EXEC_ARGV, tsRunner = DEFAULT_TS_RUNNER, } = {}) {
87
147
  const { port1: mainPort, port2: workerPort } = new MessageChannel();
88
- const { isTs, tsUseEsm, workerPath: finalWorkerPath, execArgv: finalExecArgv, } = setupTsNode(workerPath, execArgv);
89
- const worker = new Worker(isTs
90
- ? tsUseEsm
91
- ? dataUrl(`import '${String(pathToFileURL(finalWorkerPath))}'`)
92
- : `require('ts-node/register');require('${finalWorkerPath.replace(/\\/g, '\\\\')}')`
93
- : pathToFileURL(finalWorkerPath), {
94
- eval: isTs && !tsUseEsm,
148
+ const { isTs, ext, tsUseEsm, workerPath: finalWorkerPath, execArgv: finalExecArgv, } = setupTsRunner(workerPath, { execArgv, tsRunner });
149
+ const workerPathUrl = pathToFileURL(finalWorkerPath);
150
+ if (/\.[cm]ts$/.test(finalWorkerPath)) {
151
+ const isTsxSupported = !tsUseEsm ||
152
+ Number.parseFloat(process.versions.node) >= MTS_SUPPORTED_NODE_VERSION;
153
+ /* istanbul ignore if */
154
+ if ([
155
+ // https://github.com/egoist/esbuild-register/issues/79
156
+ TsRunner.EsbuildRegister,
157
+ // https://github.com/folke/esbuild-runner/issues/67
158
+ TsRunner.EsbuildRunner,
159
+ ... /* istanbul ignore next */(isTsxSupported ? [] : [TsRunner.TSX]),
160
+ ].includes(tsRunner)) {
161
+ throw new Error(`${tsRunner} is not supported for ${ext} files yet` +
162
+ (isTsxSupported
163
+ ? ', you can try [tsx](https://github.com/esbuild-kit/tsx) instead'
164
+ : ''));
165
+ }
166
+ }
167
+ const useEval = isTs && !tsUseEsm;
168
+ const worker = new Worker(tsUseEsm && tsRunner === TsRunner.TsNode
169
+ ? dataUrl(`import '${String(workerPathUrl)}'`)
170
+ : useEval
171
+ ? `require('${finalWorkerPath.replace(/\\/g, '\\\\')}')`
172
+ : workerPathUrl, {
173
+ eval: useEval,
95
174
  workerData: { workerPort },
96
175
  transferList: [workerPort],
97
176
  execArgv: finalExecArgv,
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EACL,cAAc,EACd,MAAM,EACN,oBAAoB;AACpB,qDAAqD;AACrD,UAAU,EACV,UAAU,GACX,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAWnD,cAAc,YAAY,CAAA;AAE1B,MAAM,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB;IACpD,CAAC,CAAC,CAAC,mBAAmB;IACtB,CAAC,CAAC,SAAS,CAAA;AAEb,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAA;AAE7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,mBAAmB,IAAI,IAAI,CAAA;AAErE,0BAA0B;AAC1B,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAA;AAEnE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiB,CAAA;AAQ5C,0EAA0E;AAC1E,6EAA6E;AAC7E,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAI,MAAU,EAAiB,EAAE;IAChE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QACxC,MAAM,UAAU,GAAG,EAAkB,CAAA;QACrC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,UAAU,CAAC,GAAc,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;SACzC;QACD,OAAO,UAAU,CAAA;KAClB;AACH,CAAC,CAAA;AAWD,MAAM,UAAU,YAAY,CAC1B,UAAkB,EAClB,mBAA6C,EAC7C,OAAgB;IAEhB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;KACjD;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAEhD,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAA;KACpB;IAED,MAAM,MAAM,GAAG,iBAAiB,CAC9B,UAAU;IACV,0BAA0B,CAAC,OAAO,mBAAmB,KAAK,QAAQ;QAChE,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE;QAC9C,CAAC,CAAC,mBAAmB,CACxB,CAAA;IAED,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAEnC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,GACd,OAAO,OAAO,KAAK,WAAW;IAC5B,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAA;AAExC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/B,IAAI,GAAG,CAAC,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAE7D,wDAAwD;AACxD,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,QAAkB,EAAE,EAAE;IAC7D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACpC,gDAAgD;QAChD,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,KAAK,EAAE;YACzB,MAAM,KAAK,GAAG,aAAa,CACzB,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAClD,CAAC,KAAK,EAAE,KAAK,CAAC,CACf,CAAA;YACD,IAAI,KAAK,EAAE;gBACT,UAAU,GAAG,KAAK,CAAA;aACnB;SACF;KACF;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAE1C,+CAA+C;IAC/C,IAAI,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAE1C,IAAI,IAAI,EAAE;QACR,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;YAC9B,IAAI,GAAG,EAAE;gBACP,QAAQ;oBACL,UAAU,CAAC,GAAG,CAAsC,CAAC,IAAI;wBAC1D,QAAQ,CAAA;aACX;SACF;QACD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAC9C,QAAQ,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC,CAAA;SACpD;KACF;IAED,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,UAAU;QACV,QAAQ;KACT,CAAA;AACH,CAAC,CAAA;AAED,SAAS,iBAAiB,CACxB,UAAkB,EAClB,EACE,UAAU,GAAG,0BAA0B,EACvC,OAAO,GAAG,eAAe,EACzB,QAAQ,GAAG,iBAAiB,MACV,EAAE;IAEtB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,cAAc,EAAE,CAAA;IAEnE,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,EAAE,eAAe,EAC3B,QAAQ,EAAE,aAAa,GACxB,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAErC,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,IAAI;QACF,CAAC,CAAC,QAAQ;YACR,CAAC,CAAC,OAAO,CAAC,WAAW,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC;YAC/D,CAAC,CAAC,wCAAwC,eAAe,CAAC,OAAO,CAC7D,KAAK,EACL,MAAM,CACP,IAAI;QACT,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,EAClC;QACE,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,EAAE,UAAU,EAAE;QAC1B,YAAY,EAAE,CAAC,UAAU,CAAC;QAC1B,QAAQ,EAAE,aAAa;KACxB,CACF,CAAA;IAED,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,MAAM,MAAM,GAAG,CAAC,GAAG,IAAmB,EAAK,EAAE;QAC3C,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;QAEnB,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAA;QACtD,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAA;QAErD,MAAM,GAAG,GAAuC,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;QAC1E,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAEvB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;QAE5D,wBAAwB;QACxB,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,MAAM,CAAC,CAAA;SACpE;QAED,MAAM,EACJ,EAAE,EAAE,GAAG,EACP,MAAM,EACN,KAAK,EACL,UAAU,GACX,GAAI,oBAAoB,CAAC,QAAQ,CAAyC;aACxE,OAAO,CAAA;QAEV,wBAAwB;QACxB,IAAI,EAAE,KAAK,GAAG,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,+BAA+B,EAAE,eAAe,GAAG,EAAE,CAAC,CAAA;SACvE;QAED,IAAI,KAAK,EAAE;YACT,MAAM,MAAM,CAAC,MAAM,CAAC,KAAe,EAAE,UAAU,CAAC,CAAA;SACjD;QAED,OAAO,MAAO,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,CAAC,KAAK,EAAE,CAAA;IAEd,OAAO,MAAM,CAAA;AACf,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,WAAW,CAGzB,EAAK;IACL,qDAAqD;IACrD,IAAI,CAAC,UAAU,EAAE;QACf,OAAM;KACP;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,UAAwB,CAAA;IAC/C,UAAW,CAAC,EAAE,CACZ,SAAS,EACT,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAsC,EAAE,EAAE;QACjE,mEAAmE;QACnE,CAAC;QAAA,CAAC,GAAS,EAAE;YACX,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAA;YACrD,IAAI,GAA2B,CAAA;YAC/B,IAAI;gBACF,GAAG,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;aACxC;YAAC,OAAO,KAAc,EAAE;gBACvB,GAAG,GAAG;oBACJ,EAAE;oBACF,KAAK;oBACL,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC;iBACrC,CAAA;aACF;YACD,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YACnC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC,CAAA,CAAC,EAAE,CAAA;IACN,CAAC,CACF,CAAA;AACH,CAAC"}
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,8 +1,8 @@
1
1
  {
2
2
  "name": "synckit",
3
- "version": "0.7.2",
3
+ "version": "0.8.1",
4
4
  "type": "module",
5
- "description": "Perform async work synchronously in Node.js using `worker_threads`, or `child_process` as fallback, with first-class TypeScript support.",
5
+ "description": "Perform async work synchronously in Node.js using `worker_threads` with first-class TypeScript support.",
6
6
  "repository": "git+https://github.com/rx-ts/synckit.git",
7
7
  "author": "JounQin (https://www.1stG.me) <admin@1stg.me>",
8
8
  "donate": {
@@ -39,7 +39,7 @@
39
39
  "funding": "https://opencollective.com/unts",
40
40
  "license": "MIT",
41
41
  "engines": {
42
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
42
+ "node": "^14.18.0 || >=16.0.0"
43
43
  },
44
44
  "main": "./lib/index.cjs",
45
45
  "module": "./lib/index.js",
@@ -63,8 +63,92 @@
63
63
  "synchronize",
64
64
  "synckit"
65
65
  ],
66
+ "scripts": {
67
+ "benchmark": "run-s benchmark:*",
68
+ "benchmark-export": "run-s benchmark-export:*",
69
+ "benchmark-export:cjs": "yarn benchmark:cjs > benchmarks/benchmark.cjs.txt",
70
+ "benchmark-export:esm": "yarn benchmark:esm> benchmarks/benchmark.esm.txt",
71
+ "benchmark:cjs": "node benchmarks/benchmark.cjs",
72
+ "benchmark:esm": "node benchmarks/benchmark.js",
73
+ "build": "run-p build:*",
74
+ "build:r": "r -f cjs",
75
+ "build:ts": "tsc -p src",
76
+ "lint": "run-p lint:*",
77
+ "lint:es": "eslint . --cache -f friendly --max-warnings 10",
78
+ "lint:tsc": "tsc --noEmit",
79
+ "prepare": "patch-package && simple-git-hooks && yarn-deduplicate --strategy fewer || exit 0",
80
+ "prerelease": "yarn build",
81
+ "release": "changeset publish",
82
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
83
+ "typecov": "type-coverage"
84
+ },
66
85
  "dependencies": {
67
- "@pkgr/utils": "^2.2.0",
86
+ "@pkgr/utils": "^2.3.0",
68
87
  "tslib": "^2.4.0"
88
+ },
89
+ "devDependencies": {
90
+ "@1stg/lib-config": "^9.0.0",
91
+ "@changesets/changelog-github": "^0.4.5",
92
+ "@changesets/cli": "^2.23.2",
93
+ "@types/jest": "^28.1.5",
94
+ "@types/node": "^18.0.4",
95
+ "deasync": "^0.1.27",
96
+ "esbuild-register": "^3.3.3",
97
+ "esbuild-runner": "^2.2.1",
98
+ "jest": "^28.1.3",
99
+ "patch-package": "^6.4.7",
100
+ "sync-threads": "^1.0.1",
101
+ "ts-expect": "^1.3.0",
102
+ "ts-jest": "^28.0.6",
103
+ "ts-node": "^10.9.1",
104
+ "tsx": "^3.8.0",
105
+ "type-coverage": "^2.22.0",
106
+ "typescript": "^4.7.4",
107
+ "yarn-deduplicate": "^5.0.0"
108
+ },
109
+ "resolutions": {
110
+ "prettier": "^2.7.1"
111
+ },
112
+ "commitlint": {
113
+ "extends": "@1stg"
114
+ },
115
+ "jest": {
116
+ "preset": "ts-jest",
117
+ "testEnvironment": "node",
118
+ "collectCoverage": true,
119
+ "extensionsToTreatAsEsm": [
120
+ ".ts"
121
+ ],
122
+ "moduleNameMapper": {
123
+ "^(\\.{1,2}/.*)\\.js$": "$1",
124
+ "^synckit$": "<rootDir>/src"
125
+ },
126
+ "globals": {
127
+ "ts-jest": {
128
+ "useESM": true,
129
+ "tsconfig": {
130
+ "importHelpers": false
131
+ }
132
+ }
133
+ }
134
+ },
135
+ "prettier": "@1stg/prettier-config",
136
+ "renovate": {
137
+ "extends": [
138
+ "@1stg"
139
+ ]
140
+ },
141
+ "typeCoverage": {
142
+ "atLeast": 100,
143
+ "cache": true,
144
+ "detail": true,
145
+ "ignoreAsAssertion": true,
146
+ "ignoreFiles": [
147
+ "**/*.d.ts"
148
+ ],
149
+ "ignoreNonNullAssertion": true,
150
+ "showRelativePath": true,
151
+ "strict": true,
152
+ "update": true
69
153
  }
70
154
  }