1
1
import { createHash } from 'node:crypto'
2
2
import fs from 'node:fs'
3
- import { createRequire } from 'node:module'
3
+ import module from 'node:module'
4
4
import path from 'node:path'
5
5
import { fileURLToPath , pathToFileURL } from 'node:url'
6
6
import {
@@ -53,6 +53,8 @@ const {
53
53
SYNCKIT_TS_RUNNER ,
54
54
} = process . env
55
55
56
+ const IS_NODE_20 = Number ( process . versions . node . split ( '.' ) [ 0 ] ) >= 20
57
+
56
58
export const DEFAULT_TIMEOUT = SYNCKIT_TIMEOUT ? + SYNCKIT_TIMEOUT : undefined
57
59
58
60
/* istanbul ignore next */
@@ -133,7 +135,7 @@ export function createSyncFn<T extends AnyAsyncFn<R>, R = unknown>(
133
135
134
136
const cjsRequire =
135
137
typeof require === 'undefined'
136
- ? createRequire ( import . meta. url )
138
+ ? module . createRequire ( import . meta. url )
137
139
: /* istanbul ignore next */ require
138
140
139
141
const dataUrl = ( code : string ) =>
@@ -252,6 +254,8 @@ const setupTsRunner = (
252
254
}
253
255
}
254
256
257
+ let resolvedPnpLoaderPath : string | undefined
258
+
255
259
/* istanbul ignore if -- https://github.com/facebook/jest/issues/5274 */
256
260
if ( process . versions . pnp ) {
257
261
const nodeOptions = NODE_OPTIONS ?. split ( / \s + / )
@@ -275,8 +279,15 @@ const setupTsRunner = (
275
279
// Transform path to file URL because nodejs does not accept
276
280
// absolute Windows paths in the --experimental-loader option.
277
281
// https://github.com/un-ts/synckit/issues/123
278
- const experimentalLoader = pathToFileURL ( pnpLoaderPath ) . toString ( )
279
- execArgv = [ '--experimental-loader' , experimentalLoader , ...execArgv ]
282
+ resolvedPnpLoaderPath = pathToFileURL ( pnpLoaderPath ) . toString ( )
283
+
284
+ if ( ! IS_NODE_20 ) {
285
+ execArgv = [
286
+ '--experimental-loader' ,
287
+ resolvedPnpLoaderPath ,
288
+ ...execArgv ,
289
+ ]
290
+ }
280
291
}
281
292
}
282
293
}
@@ -288,6 +299,7 @@ const setupTsRunner = (
288
299
tsRunner,
289
300
tsUseEsm,
290
301
workerPath,
302
+ pnpLoaderPath : resolvedPnpLoaderPath ,
291
303
execArgv,
292
304
}
293
305
}
@@ -428,6 +440,7 @@ function startWorkerThread<R, T extends AnyAsyncFn<R>>(
428
440
tsUseEsm,
429
441
tsRunner : finalTsRunner ,
430
442
workerPath : finalWorkerPath ,
443
+ pnpLoaderPath,
431
444
execArgv : finalExecArgv ,
432
445
} = setupTsRunner ( workerPath , { execArgv, tsRunner } )
433
446
@@ -501,7 +514,7 @@ function startWorkerThread<R, T extends AnyAsyncFn<R>>(
501
514
: workerPathUrl ,
502
515
{
503
516
eval : useEval ,
504
- workerData : { sharedBuffer, workerPort } ,
517
+ workerData : { sharedBuffer, workerPort, pnpLoaderPath } ,
505
518
transferList : [ workerPort , ...transferList ] ,
506
519
execArgv : finalExecArgv ,
507
520
} ,
@@ -561,7 +574,11 @@ export function runAsWorker<
561
574
return
562
575
}
563
576
564
- const { workerPort, sharedBuffer } = workerData as WorkerData
577
+ const { workerPort, sharedBuffer, pnpLoaderPath } = workerData as WorkerData
578
+
579
+ if ( pnpLoaderPath && IS_NODE_20 ) {
580
+ module . register ( pnpLoaderPath )
581
+ }
565
582
566
583
const sharedBufferView = new Int32Array ( sharedBuffer , 0 , 1 )
567
584
0 commit comments