From dc5c4280cd87bf15666d2cbe9dda10975d05e5ef Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Apr 2026 08:57:29 +0100 Subject: [PATCH] Fix npm arborist crash caused by tree-sitter-dart tarball URL format (#820) * Initial plan * fix: change tree-sitter-dart from tarball URL to git URL to fix npm arborist crash, add error handling and troubleshooting docs Agent-Logs-Url: https://github.com/abhigyanpatwari/GitNexus/sessions/382c76c6-89c3-463a-8631-2a5d6510be4c Co-authored-by: magyargergo <11230420+magyargergo@users.noreply.github.com> * refine error handler patterns and troubleshooting docs for arborist crash Agent-Logs-Url: https://github.com/abhigyanpatwari/GitNexus/sessions/909b319b-c367-40aa-8033-32dfb6231d4e Co-authored-by: magyargergo <11230420+magyargergo@users.noreply.github.com> * style: run prettier on changed files Agent-Logs-Url: https://github.com/abhigyanpatwari/GitNexus/sessions/50eb6b94-9300-4bf2-9b61-c2d78f637fc6 * fix: use github: shorthand for tree-sitter-dart to avoid SSH in CI Agent-Logs-Url: https://github.com/abhigyanpatwari/GitNexus/sessions/2ce3f4b3-4c1e-4c39-b824-c25cfe145529 Co-authored-by: magyargergo <11230420+magyargergo@users.noreply.github.com> * revert: use git+https:// for tree-sitter-dart instead of github: shorthand (fixes arborist crash from PR #811) Agent-Logs-Url: https://github.com/abhigyanpatwari/GitNexus/sessions/b786b68d-6c76-4054-88eb-ad46ea9f5b81 Co-authored-by: magyargergo <11230420+magyargergo@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: magyargergo <11230420+magyargergo@users.noreply.github.com> --- gitnexus/README.md | 50 +++++++++++++++++++++++++++++++++++++ gitnexus/package-lock.json | 6 ++--- gitnexus/package.json | 2 +- gitnexus/src/cli/analyze.ts | 24 +++++++++++++++++- 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/gitnexus/README.md b/gitnexus/README.md index 7e87c93b42..8c7888d661 100644 --- a/gitnexus/README.md +++ b/gitnexus/README.md @@ -234,6 +234,56 @@ Installed automatically by both `gitnexus analyze` (per-repo) and `gitnexus setu - Node.js >= 18 - Git repository (uses git for commit tracking) +## Troubleshooting + +### `Cannot destructure property 'package' of 'node.target' as it is null` + +This crash was caused by a dependency URL format that is incompatible with +certain npm/arborist versions ([npm/cli#8126](https://github.com/npm/cli/issues/8126)). +It is fixed in **gitnexus v1.6.2+**. Upgrade to the latest version: + +```bash +npx gitnexus@latest analyze # always uses the newest release +# — or — +npm install -g gitnexus@latest # upgrade a global install +``` + +If you still hit npm install issues after upgrading, these generic workarounds +may help: + +```bash +npm install -g npm@latest # update npm itself +npm cache clean --force # clear a possibly corrupt cache +``` + +### Installation fails with native module errors + +Some optional language grammars (Dart, Kotlin, Swift) require native compilation. If they fail, GitNexus still works — those languages will be skipped. + +If `npm install -g gitnexus` fails on native modules: + +```bash +# Ensure build tools are available (Linux/macOS) +# Ubuntu/Debian: sudo apt install python3 make g++ +# macOS: xcode-select --install + +# Retry installation +npm install -g gitnexus +``` + +### Analysis runs out of memory + +For very large repositories: + +```bash +# Increase Node.js heap size +NODE_OPTIONS="--max-old-space-size=16384" npx gitnexus analyze + +# Exclude large directories +echo "vendor/" >> .gitnexusignore +echo "dist/" >> .gitnexusignore +``` + ## Privacy - All processing happens locally on your machine diff --git a/gitnexus/package-lock.json b/gitnexus/package-lock.json index c9ca9017ff..bc4fc7b200 100644 --- a/gitnexus/package-lock.json +++ b/gitnexus/package-lock.json @@ -62,7 +62,7 @@ "node": ">=20.0.0" }, "optionalDependencies": { - "tree-sitter-dart": "https://github.com/UserNobody14/tree-sitter-dart/archive/80e23c07b64494f7e21090bb3450223ef0b192f4.tar.gz", + "tree-sitter-dart": "git+https://github.com/UserNobody14/tree-sitter-dart.git#80e23c07b64494f7e21090bb3450223ef0b192f4", "tree-sitter-kotlin": "^0.3.8", "tree-sitter-proto": "file:./vendor/tree-sitter-proto", "tree-sitter-swift": "^0.6.0" @@ -5132,8 +5132,8 @@ }, "node_modules/tree-sitter-dart": { "version": "1.0.0", - "resolved": "https://github.com/UserNobody14/tree-sitter-dart/archive/80e23c07b64494f7e21090bb3450223ef0b192f4.tar.gz", - "integrity": "sha512-aqLZTEji2vAZPdbaCSjR0SXJGzFRKD//7VtrSV3st9bgrCM2tsXxXAHZlMlQLOCt7K2yKxM5K3gNXYph8TCjCQ==", + "resolved": "git+https://github.com/UserNobody14/tree-sitter-dart.git#80e23c07b64494f7e21090bb3450223ef0b192f4", + "integrity": "sha512-Bs/1wAOIJ2akPEXlE/XVpuES19Oo3NqoSJRJ/0N2r38qAd9nTXdqmaGHQ44/JXnA6QHcbgD2YzCCc4wUc98cyQ==", "hasInstallScript": true, "license": "ISC", "optional": true, diff --git a/gitnexus/package.json b/gitnexus/package.json index d0d0704f54..571a341c5c 100644 --- a/gitnexus/package.json +++ b/gitnexus/package.json @@ -84,7 +84,7 @@ "uuid": "^13.0.0" }, "optionalDependencies": { - "tree-sitter-dart": "https://github.com/UserNobody14/tree-sitter-dart/archive/80e23c07b64494f7e21090bb3450223ef0b192f4.tar.gz", + "tree-sitter-dart": "git+https://github.com/UserNobody14/tree-sitter-dart.git#80e23c07b64494f7e21090bb3450223ef0b192f4", "tree-sitter-kotlin": "^0.3.8", "tree-sitter-proto": "file:./vendor/tree-sitter-proto", "tree-sitter-swift": "^0.6.0" diff --git a/gitnexus/src/cli/analyze.ts b/gitnexus/src/cli/analyze.ts index dc8fd87a98..26d1ae8c60 100644 --- a/gitnexus/src/cli/analyze.ts +++ b/gitnexus/src/cli/analyze.ts @@ -297,7 +297,7 @@ export const analyzeCommand = async (inputPath?: string, options?: AnalyzeOption const msg = err.message || String(err); console.error(`\n Analysis failed: ${msg}\n`); - // Provide helpful guidance for known large-repo failure modes + // Provide helpful guidance for known failure modes if ( msg.includes('Maximum call stack size exceeded') || msg.includes('call stack') || @@ -314,6 +314,28 @@ export const analyzeCommand = async (inputPath?: string, options?: AnalyzeOption console.error(' 2. Increase Node.js heap: NODE_OPTIONS="--max-old-space-size=16384"'); console.error(' 3. Increase stack size: NODE_OPTIONS="--stack-size=4096"'); console.error(''); + } else if (msg.includes('ERESOLVE') || msg.includes('Could not resolve dependency')) { + // Note: the original arborist "Cannot destructure property 'package' of + // 'node.target'" crash happens inside npm *before* gitnexus code runs, + // so it can't be caught here. This branch handles dependency-resolution + // errors that surface at runtime (e.g. dynamic require failures). + console.error(' This looks like an npm dependency resolution issue.'); + console.error(' Suggestions:'); + console.error(' 1. Clear the npm cache: npm cache clean --force'); + console.error(' 2. Update npm: npm install -g npm@latest'); + console.error(' 3. Reinstall gitnexus: npm install -g gitnexus@latest'); + console.error(' 4. Or try npx directly: npx gitnexus@latest analyze'); + console.error(''); + } else if ( + msg.includes('MODULE_NOT_FOUND') || + msg.includes('Cannot find module') || + msg.includes('ERR_MODULE_NOT_FOUND') + ) { + console.error(' A required module could not be loaded. The installation may be corrupt.'); + console.error(' Suggestions:'); + console.error(' 1. Reinstall: npm install -g gitnexus@latest'); + console.error(' 2. Clear cache: npm cache clean --force && npx gitnexus@latest analyze'); + console.error(''); } process.exitCode = 1;