Merge pull request #40 from ravescovi/fix/sequential-grammar-loading
fix: load WASM grammars sequentially to avoid Node 20+ race condition
This commit is contained in:
+13
-14
@@ -86,21 +86,20 @@ export async function initGrammars(): Promise<void> {
|
|||||||
|
|
||||||
await Parser.init();
|
await Parser.init();
|
||||||
|
|
||||||
// Load all grammars in parallel
|
// Load grammars sequentially to avoid web-tree-sitter WASM race condition on Node 20+
|
||||||
|
// See: https://github.com/tree-sitter/tree-sitter/issues/2338
|
||||||
const entries = Object.entries(WASM_GRAMMAR_FILES) as [GrammarLanguage, string][];
|
const entries = Object.entries(WASM_GRAMMAR_FILES) as [GrammarLanguage, string][];
|
||||||
await Promise.allSettled(
|
for (const [lang, wasmFile] of entries) {
|
||||||
entries.map(async ([lang, wasmFile]) => {
|
try {
|
||||||
try {
|
const wasmPath = require.resolve(`tree-sitter-wasms/out/${wasmFile}`);
|
||||||
const wasmPath = require.resolve(`tree-sitter-wasms/out/${wasmFile}`);
|
const language = await WasmLanguage.load(wasmPath);
|
||||||
const language = await WasmLanguage.load(wasmPath);
|
languageCache.set(lang, language);
|
||||||
languageCache.set(lang, language);
|
} catch (error) {
|
||||||
} catch (error) {
|
const message = error instanceof Error ? error.message : String(error);
|
||||||
const message = error instanceof Error ? error.message : String(error);
|
console.warn(`[CodeGraph] Failed to load ${lang} grammar — parsing will be unavailable: ${message}`);
|
||||||
console.warn(`[CodeGraph] Failed to load ${lang} grammar — parsing will be unavailable: ${message}`);
|
unavailableGrammarErrors.set(lang, message);
|
||||||
unavailableGrammarErrors.set(lang, message);
|
}
|
||||||
}
|
}
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
grammarsInitialized = true;
|
grammarsInitialized = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user