Commit 99e7ceb
committed
fix: sequential WASM grammar loading to fix crash on Node.js v20
web-tree-sitter ≤0.24.x has a race condition when loading multiple WASM
grammars concurrently via Promise.all(). The Emscripten glue code shares
global state during instantiation, causing cross-language symbol
contamination (e.g., 'bad export type for
tree_sitter_javascript_external_scanner_create: undefined').
This manifests on Node.js ≤20 but not ≥22 due to differences in V8's
WebAssembly.instantiate isolation behavior.
Fix: load grammars sequentially with a for..of loop instead of
Promise.all(). Also add graceful per-grammar error handling so one
failed grammar doesn't crash the entire scanner.
Also switch CLI and MCP server to workspace:* for @opencodereview/core
to ensure they always use the local build during development.
Closes: warden-core#4991 parent 653b50e commit 99e7ceb
4 files changed
Lines changed: 33 additions & 28 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
| 94 | + | |
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
127 | 127 | | |
128 | 128 | | |
129 | 129 | | |
130 | | - | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
131 | 139 | | |
132 | | - | |
| 140 | + | |
| 141 | + | |
133 | 142 | | |
134 | | - | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
140 | 158 | | |
141 | 159 | | |
142 | 160 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
| 44 | + | |
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
0 commit comments