diff --git a/gitnexus/package-lock.json b/gitnexus/package-lock.json index e57dfbf3f..ea7f90487 100644 --- a/gitnexus/package-lock.json +++ b/gitnexus/package-lock.json @@ -39,7 +39,7 @@ "tree-sitter-go": "^0.23.0", "tree-sitter-java": "^0.23.5", "tree-sitter-javascript": "^0.23.0", - "tree-sitter-objc": "^2.1.0", + "tree-sitter-objc": "^3.0.2", "tree-sitter-php": "^0.23.0", "tree-sitter-python": "0.23.4", "tree-sitter-ruby": "^0.23.1", @@ -59,6 +59,7 @@ "@types/uuid": "^11.0.0", "@vitest/coverage-v8": "^4.0.18", "gitnexus-shared": "file:../gitnexus-shared", + "graphology-types": "^0.24.8", "tsx": "^4.0.0", "typescript": "^5.4.5", "vitest": "^4.0.18" @@ -3036,8 +3037,8 @@ "version": "0.24.8", "resolved": "https://registry.npmjs.org/graphology-types/-/graphology-types-0.24.8.tgz", "integrity": "sha512-hDRKYXa8TsoZHjgEaysSRyPdT6uB78Ci8WnjgbStlQysz7xR52PInxNsmnB7IBOM1BhikxkNyCVEFgmPKnpx3Q==", - "license": "MIT", - "peer": true + "dev": true, + "license": "MIT" }, "node_modules/graphology-utils": { "version": "2.5.2", @@ -3771,12 +3772,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/nan": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.27.0.tgz", - "integrity": "sha512-hC+0LidcL3XE4rp1C4H54KujgXKzbfyTngZTwBByQxsOxCEKZT0MPQ4hOKUH2jU1OYstqdDH4onyHPDzcV0XdQ==", - "license": "MIT" - }, "node_modules/nanoid": { "version": "3.3.12", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", @@ -4943,13 +4938,42 @@ "optional": true }, "node_modules/tree-sitter-objc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tree-sitter-objc/-/tree-sitter-objc-2.1.0.tgz", - "integrity": "sha512-qAeeaZS5sYSB8JYoKpE8GbvtUQFZqDckegU4ntVtpdQPLffjF/6ANgzqbXPWl9YaK2WBZtBFeRF7OPvh7nIErA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tree-sitter-objc/-/tree-sitter-objc-3.0.2.tgz", + "integrity": "sha512-Hs0ohmx1u5M+0K7efoW+dv/corhBsfjftfIYLtp7dSGeJ+Zj4c33tDIboBYLs6qijRlz6wtHFxa0YX+FibLulA==", "hasInstallScript": true, "license": "MIT", "dependencies": { - "nan": "^2.17.0" + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4", + "tree-sitter-c": "^0.23.4" + }, + "peerDependencies": { + "tree-sitter": "^0.22.1" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true + } + } + }, + "node_modules/tree-sitter-objc/node_modules/tree-sitter-c": { + "version": "0.23.6", + "resolved": "https://registry.npmjs.org/tree-sitter-c/-/tree-sitter-c-0.23.6.tgz", + "integrity": "sha512-0dxXKznVyUA0s6PjNolJNs2yF87O5aL538A/eR6njA5oqX3C3vH4vnx3QdOKwuUdpKEcFdHuiDpRKLLCA/tjvQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" + }, + "peerDependencies": { + "tree-sitter": "^0.22.1" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true + } } }, "node_modules/tree-sitter-php": { diff --git a/gitnexus/package.json b/gitnexus/package.json index 16c12ca0b..3b8ea6766 100644 --- a/gitnexus/package.json +++ b/gitnexus/package.json @@ -84,7 +84,7 @@ "tree-sitter-go": "^0.23.0", "tree-sitter-java": "^0.23.5", "tree-sitter-javascript": "^0.23.0", - "tree-sitter-objc": "^2.1.0", + "tree-sitter-objc": "^3.0.2", "tree-sitter-php": "^0.23.0", "tree-sitter-python": "0.23.4", "tree-sitter-ruby": "^0.23.1", @@ -106,6 +106,7 @@ "@types/uuid": "^11.0.0", "@vitest/coverage-v8": "^4.0.18", "gitnexus-shared": "file:../gitnexus-shared", + "graphology-types": "^0.24.8", "tsx": "^4.0.0", "typescript": "^5.4.5", "vitest": "^4.0.18" diff --git a/gitnexus/src/core/ingestion/workers/parse-worker.ts b/gitnexus/src/core/ingestion/workers/parse-worker.ts index f092d4a1a..7f7e9b610 100644 --- a/gitnexus/src/core/ingestion/workers/parse-worker.ts +++ b/gitnexus/src/core/ingestion/workers/parse-worker.ts @@ -12,6 +12,7 @@ import Go from 'tree-sitter-go'; import Rust from 'tree-sitter-rust'; import PHP from 'tree-sitter-php'; import Ruby from 'tree-sitter-ruby'; +import ObjectiveC from 'tree-sitter-objc'; import { createRequire } from 'node:module'; import { SupportedLanguages } from 'gitnexus-shared'; import { getProvider } from '../languages/index.js'; @@ -319,6 +320,7 @@ const languageMap: Record = { ...(Kotlin ? { [SupportedLanguages.Kotlin]: Kotlin } : {}), [SupportedLanguages.PHP]: PHP.php_only, [SupportedLanguages.Ruby]: Ruby, + [SupportedLanguages.ObjectiveC]: ObjectiveC, [SupportedLanguages.Vue]: TypeScript.typescript, ...(Dart ? { [SupportedLanguages.Dart]: Dart } : {}), ...(Swift ? { [SupportedLanguages.Swift]: Swift } : {}), diff --git a/gitnexus/test/integration/worker-pool.test.ts b/gitnexus/test/integration/worker-pool.test.ts index b8740957b..cf8598ba2 100644 --- a/gitnexus/test/integration/worker-pool.test.ts +++ b/gitnexus/test/integration/worker-pool.test.ts @@ -135,6 +135,24 @@ describe('worker pool integration', () => { expect(names).toContain('validateInput'); }); + it.skipIf(!hasDistWorker)('parses Objective-C file through worker', async () => { + const workerUrl = pathToFileURL(DIST_WORKER) as URL; + pool = createWorkerPool(workerUrl, 1); + + const fixtureFile = path.resolve(__dirname, '..', 'fixtures', 'sample-code', 'simple.m'); + const content = fs.readFileSync(fixtureFile, 'utf-8'); + + const results = await pool.dispatch([{ path: 'sample-code/simple.m', content }]); + + expect(results).toHaveLength(1); + const result = results[0]; + expect(result.fileCount).toBe(1); + + const names = result.nodes.map((n: any) => n.properties.name); + expect(names).toContain('Calculator'); + expect(names).toContain('sharedCalculator'); + }); + it.skipIf(!hasDistWorker)('parses multiple files across workers', async () => { const workerUrl = pathToFileURL(DIST_WORKER) as URL; pool = createWorkerPool(workerUrl, 2);