diff --git a/gitnexus/scripts/build-tree-sitter-dart.cjs b/gitnexus/scripts/build-tree-sitter-dart.cjs index 60da9a751..7a32c045a 100644 --- a/gitnexus/scripts/build-tree-sitter-dart.cjs +++ b/gitnexus/scripts/build-tree-sitter-dart.cjs @@ -26,6 +26,94 @@ try { process.exit(0); } + // ── Patch NAN → NAPI bindings ────────────────────────────────────────── + // tree-sitter-dart@1.0.0 ships old NAN-style bindings that are + // incompatible with the tree-sitter@0.21.x runtime bundled by GitNexus. + // Rewrite binding.cc, binding.gyp, and index.js to NAPI style (same + // pattern used by tree-sitter-go, tree-sitter-python, etc.). + const bindingCc = path.join(dartDir, 'bindings', 'node', 'binding.cc'); + const indexJs = path.join(dartDir, 'bindings', 'node', 'index.js'); + + if (fs.existsSync(bindingCc)) { + const currentCc = fs.readFileSync(bindingCc, 'utf8'); + if (currentCc.includes('Nan::') || !currentCc.includes('Napi::')) { + console.log('[tree-sitter-dart] Patching binding.cc (NAN → NAPI)...'); + fs.writeFileSync( + bindingCc, + [ + '#include ', + '', + 'typedef struct TSLanguage TSLanguage;', + '', + 'extern "C" TSLanguage *tree_sitter_dart();', + '', + '// "tree-sitter", "language" is a convention that lets the', + '// temporary `node-tree-sitter` binding find the language.', + 'Napi::Object Init(Napi::Env env, Napi::Object exports) {', + ' exports["name"] = Napi::String::New(env, "dart");', + ' auto language = Napi::External::New(env, tree_sitter_dart());', + ' language.TypeTag(&language);', + ' exports["language"] = language;', + ' return exports;', + '}', + '', + 'NODE_API_MODULE(tree_sitter_dart_binding, Init)', + '', + ].join('\n'), + ); + } + } + + if (fs.existsSync(bindingGyp)) { + const currentGyp = fs.readFileSync(bindingGyp, 'utf8'); + if (currentGyp.includes('nan') || !currentGyp.includes('node-addon-api')) { + console.log('[tree-sitter-dart] Patching binding.gyp (NAN → NAPI)...'); + fs.writeFileSync( + bindingGyp, + JSON.stringify( + { + targets: [ + { + target_name: 'tree_sitter_dart_binding', + dependencies: ['