Commit 8cdc2f1
committed
fix: ts-node --esm on Node v20
When running `ts-node --esm`, a child process is spawned with the
`child-loader.mjs` loader, `dist/child/child-entrypoint.js` main,
and `argv[2]` set to the base64 encoded compressed configuration
payload.
`child-loader.mjs` imports and re-exports the functions defined
in `src/child/child-loader.ts`. These are initially set to empty
loader hooks which call the next hook in line until they are
defined by calling `lateBindHooks()`.
`child-entrypoint.ts` reads the config payload from argv, and
bootstraps the registration process, which then calls
`lateBindHooks()`.
Presumably, the reason for this hand-off is because `--loader`
hooks do not have access to `process.argv`. Unfortunately, in
node 20, they don't have access to anything else, either, so
calling `lateBindHooks` is effectively a no-op; the
`child-loader.ts` where the hooks end up getting bound is not the
same one that is being used as the actual loader.
To solve this, the following changes are added:
1. An `isLoaderThread` flag is added to the BootstrapState. If
this flag is set, then no further processing is performed
beyond binding the loader hooks.
2. `callInChild` adds the config payload to _both_ the argv and
the loader URL as a query param.
3. In the `child-loader.mjs` loader, only on node v20 and higher,
the config payload is read from `import.meta.url`, and
`bootstrap` is called, setting the `isLoaderThread` flag.
I'm not super enthusiastic about this implementation. It
definitely feels like there's a refactoring opportunity to clean
it up, as it adds some copypasta between child-entrypoint.ts and
child-loader.mjs. A further improvement would be to remove the
late-binding handoff complexity entirely, and _always_ pass the
config payload on the loader URL rather than on process.argv.1 parent cffb0b9 commit 8cdc2f1
File tree
6 files changed
+50
-22
lines changed- src
- child
6 files changed
+50
-22
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | 1 | | |
| 2 | + | |
| 3 | + | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
8 | | - | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | 3 | | |
5 | 4 | | |
6 | 5 | | |
7 | 6 | | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
| 7 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
71 | 71 | | |
72 | 72 | | |
73 | 73 | | |
| 74 | + | |
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
| |||
441 | 442 | | |
442 | 443 | | |
443 | 444 | | |
444 | | - | |
| 445 | + | |
445 | 446 | | |
446 | 447 | | |
447 | 448 | | |
| |||
522 | 523 | | |
523 | 524 | | |
524 | 525 | | |
525 | | - | |
| 526 | + | |
526 | 527 | | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
527 | 532 | | |
528 | 533 | | |
529 | 534 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
3 | 22 | | |
4 | 23 | | |
5 | 24 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
13 | 17 | | |
14 | 18 | | |
15 | 19 | | |
16 | 20 | | |
17 | 21 | | |
18 | 22 | | |
19 | 23 | | |
20 | | - | |
| 24 | + | |
21 | 25 | | |
22 | | - | |
| 26 | + | |
23 | 27 | | |
24 | 28 | | |
25 | 29 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
| 46 | + | |
46 | 47 | | |
47 | 48 | | |
48 | 49 | | |
| |||
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
| 78 | + | |
77 | 79 | | |
78 | 80 | | |
79 | 81 | | |
| |||
111 | 113 | | |
112 | 114 | | |
113 | 115 | | |
| 116 | + | |
114 | 117 | | |
115 | 118 | | |
116 | 119 | | |
117 | 120 | | |
118 | 121 | | |
119 | 122 | | |
| 123 | + | |
120 | 124 | | |
121 | 125 | | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
122 | 134 | | |
123 | 135 | | |
124 | 136 | | |
| |||
0 commit comments