From 2eca3e0da3f9b4ea6e43b5f261a1fc79578c5cfa Mon Sep 17 00:00:00 2001 From: abhigyanpatwari Date: Sat, 28 Feb 2026 18:14:42 +0530 Subject: [PATCH] fix(swift): move tree-sitter-swift to optionalDependencies and use conditional imports The PR merge reverted the Swift install fix. tree-sitter-swift must be in optionalDependencies with conditional createRequire imports, otherwise npm install fails on systems where the native build can't succeed. Co-Authored-By: Claude Opus 4.6 --- gitnexus/package-lock.json | 4 ++-- gitnexus/package.json | 6 ++++-- gitnexus/src/core/ingestion/workers/parse-worker.ts | 9 +++++++-- gitnexus/src/core/tree-sitter/parser-loader.ts | 9 +++++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/gitnexus/package-lock.json b/gitnexus/package-lock.json index 6a95e5dea..cb71624ad 100644 --- a/gitnexus/package-lock.json +++ b/gitnexus/package-lock.json @@ -1,12 +1,12 @@ { "name": "gitnexus", - "version": "1.3.5", + "version": "1.3.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gitnexus", - "version": "1.3.5", + "version": "1.3.6", "license": "PolyForm-Noncommercial-1.0.0", "dependencies": { "@huggingface/transformers": "^3.0.0", diff --git a/gitnexus/package.json b/gitnexus/package.json index 915ebf8b9..8623172bf 100644 --- a/gitnexus/package.json +++ b/gitnexus/package.json @@ -1,6 +1,6 @@ { "name": "gitnexus", - "version": "1.3.5", + "version": "1.3.6", "description": "Graph-powered code intelligence for AI agents. Index any codebase, query via MCP or CLI.", "author": "Abhigyan Patwari", "license": "PolyForm-Noncommercial-1.0.0", @@ -65,13 +65,15 @@ "tree-sitter-java": "^0.21.0", "tree-sitter-javascript": "^0.21.0", "tree-sitter-php": "^0.23.12", - "tree-sitter-swift": "^0.6.0", "tree-sitter-python": "^0.21.0", "tree-sitter-rust": "^0.21.0", "tree-sitter-typescript": "^0.21.0", "typescript": "^5.4.5", "uuid": "^13.0.0" }, + "optionalDependencies": { + "tree-sitter-swift": "^0.6.0" + }, "devDependencies": { "@types/cli-progress": "^3.11.6", "@types/cors": "^2.8.17", diff --git a/gitnexus/src/core/ingestion/workers/parse-worker.ts b/gitnexus/src/core/ingestion/workers/parse-worker.ts index c700bcee2..fc6e6854e 100644 --- a/gitnexus/src/core/ingestion/workers/parse-worker.ts +++ b/gitnexus/src/core/ingestion/workers/parse-worker.ts @@ -10,8 +10,13 @@ import CSharp from 'tree-sitter-c-sharp'; import Go from 'tree-sitter-go'; import Rust from 'tree-sitter-rust'; import PHP from 'tree-sitter-php'; -import Swift from 'tree-sitter-swift'; +import { createRequire } from 'node:module'; import { SupportedLanguages } from '../../../config/supported-languages.js'; + +// tree-sitter-swift is an optionalDependency — may not be installed +const _require = createRequire(import.meta.url); +let Swift: any = null; +try { Swift = _require('tree-sitter-swift'); } catch {} import { LANGUAGE_QUERIES } from '../tree-sitter-queries.js'; import { getLanguageFromFilename } from '../utils.js'; import { detectFrameworkFromAST } from '../framework-detection.js'; @@ -107,7 +112,7 @@ const languageMap: Record = { [SupportedLanguages.Go]: Go, [SupportedLanguages.Rust]: Rust, [SupportedLanguages.PHP]: PHP.php_only, - [SupportedLanguages.Swift]: Swift, + ...(Swift ? { [SupportedLanguages.Swift]: Swift } : {}), }; const setLanguage = (language: SupportedLanguages, filePath: string): void => { diff --git a/gitnexus/src/core/tree-sitter/parser-loader.ts b/gitnexus/src/core/tree-sitter/parser-loader.ts index 8c02ecc35..706bb0aa1 100644 --- a/gitnexus/src/core/tree-sitter/parser-loader.ts +++ b/gitnexus/src/core/tree-sitter/parser-loader.ts @@ -9,9 +9,14 @@ import CSharp from 'tree-sitter-c-sharp'; import Go from 'tree-sitter-go'; import Rust from 'tree-sitter-rust'; import PHP from 'tree-sitter-php'; -import Swift from 'tree-sitter-swift'; +import { createRequire } from 'node:module'; import { SupportedLanguages } from '../../config/supported-languages.js'; +// tree-sitter-swift is an optionalDependency — may not be installed +const _require = createRequire(import.meta.url); +let Swift: any = null; +try { Swift = _require('tree-sitter-swift'); } catch {} + let parser: Parser | null = null; const languageMap: Record = { @@ -26,7 +31,7 @@ const languageMap: Record = { [SupportedLanguages.Go]: Go, [SupportedLanguages.Rust]: Rust, [SupportedLanguages.PHP]: PHP.php_only, - [SupportedLanguages.Swift]: Swift, + ...(Swift ? { [SupportedLanguages.Swift]: Swift } : {}), }; export const loadParser = async (): Promise => {