|
| 1 | +import*asfixturesfrom'../../common/fixtures.mjs'; |
| 2 | +import{register}from'node:module'; |
| 3 | +import{MessageChannel}from'node:worker_threads'; |
| 4 | + |
1 | 5 | letimportedESM=0; |
2 | 6 | letimportedCJS=0; |
| 7 | +exportfunctiongetModuleTypeStats(){ |
| 8 | +return{ importedESM, importedCJS }; |
| 9 | +}; |
3 | 10 |
|
4 | | -exportfunctionglobalPreload({ port }){ |
5 | | -port.on('message',(int32)=>{ |
6 | | -port.postMessage({ importedESM, importedCJS }); |
7 | | -Atomics.store(int32,0,1); |
8 | | -Atomics.notify(int32,0); |
9 | | -}); |
10 | | -port.unref(); |
11 | | -return` |
12 | | - const { receiveMessageOnPort } = getBuiltin('worker_threads'); |
13 | | - global.getModuleTypeStats = async function getModuleTypeStats() { |
14 | | - const sab = new SharedArrayBuffer(4); |
15 | | - const int32 = new Int32Array(sab); |
16 | | - port.postMessage(int32); |
17 | | - // Artificial timeout to keep the event loop alive. |
18 | | - // https://bugs.chromium.org/p/v8/issues/detail?id=13238 |
19 | | - // TODO(targos) Remove when V8 issue is resolved. |
20 | | - const timeout = setTimeout(() => { throw new Error('timeout'); }, 1_000); |
21 | | - await Atomics.waitAsync(int32, 0, 0).value; |
22 | | - clearTimeout(timeout); |
23 | | - return receiveMessageOnPort(port).message; |
24 | | - }; |
25 | | - `; |
26 | | -} |
27 | | - |
28 | | -exportasyncfunctionload(url,context,next){ |
29 | | -returnnext(url); |
30 | | -} |
| 11 | +const{ port1, port2 }=newMessageChannel(); |
31 | 12 |
|
32 | | -exportasyncfunctionresolve(specifier,context,next){ |
33 | | -constnextResult=awaitnext(specifier,context); |
34 | | -const{ format }=nextResult; |
| 13 | +register(fixtures.fileURL('es-module-loaders/hook-resolve-type-loader.mjs'),{ |
| 14 | +data: {port: port2}, |
| 15 | +transferList: [port2], |
| 16 | +}); |
35 | 17 |
|
36 | | -if(format==='module'||specifier.endsWith('.mjs')){ |
37 | | -importedESM++; |
38 | | -}elseif(format==null||format==='commonjs'){ |
39 | | -importedCJS++; |
| 18 | +port1.on('message',({ type })=>{ |
| 19 | +switch(type){ |
| 20 | +case'module': |
| 21 | +importedESM++; |
| 22 | +break; |
| 23 | +case'commonjs': |
| 24 | +importedCJS++; |
| 25 | +break; |
40 | 26 | } |
| 27 | +}); |
41 | 28 |
|
42 | | -returnnextResult; |
43 | | -} |
44 | | - |
| 29 | +port1.unref(); |
| 30 | +port2.unref(); |
0 commit comments