gitnexus 1.6.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/analyze.js +28 -3
- package/dist/core/group/extractors/fs-utils.d.ts +10 -0
- package/dist/core/group/extractors/fs-utils.js +24 -0
- package/dist/core/group/extractors/grpc-extractor.d.ts +17 -8
- package/dist/core/group/extractors/grpc-extractor.js +313 -191
- package/dist/core/group/extractors/grpc-patterns/go.d.ts +2 -0
- package/dist/core/group/extractors/grpc-patterns/go.js +97 -0
- package/dist/core/group/extractors/grpc-patterns/index.d.ts +19 -0
- package/dist/core/group/extractors/grpc-patterns/index.js +46 -0
- package/dist/core/group/extractors/grpc-patterns/java.d.ts +2 -0
- package/dist/core/group/extractors/grpc-patterns/java.js +173 -0
- package/dist/core/group/extractors/grpc-patterns/node.d.ts +4 -0
- package/dist/core/group/extractors/grpc-patterns/node.js +290 -0
- package/dist/core/group/extractors/grpc-patterns/proto.d.ts +9 -0
- package/dist/core/group/extractors/grpc-patterns/proto.js +134 -0
- package/dist/core/group/extractors/grpc-patterns/python.d.ts +2 -0
- package/dist/core/group/extractors/grpc-patterns/python.js +67 -0
- package/dist/core/group/extractors/grpc-patterns/types.d.ts +50 -0
- package/dist/core/group/extractors/grpc-patterns/types.js +1 -0
- package/dist/core/group/extractors/http-patterns/go.d.ts +2 -0
- package/dist/core/group/extractors/http-patterns/go.js +215 -0
- package/dist/core/group/extractors/http-patterns/index.d.ts +17 -0
- package/dist/core/group/extractors/http-patterns/index.js +44 -0
- package/dist/core/group/extractors/http-patterns/java.d.ts +2 -0
- package/dist/core/group/extractors/http-patterns/java.js +253 -0
- package/dist/core/group/extractors/http-patterns/node.d.ts +4 -0
- package/dist/core/group/extractors/http-patterns/node.js +354 -0
- package/dist/core/group/extractors/http-patterns/php.d.ts +2 -0
- package/dist/core/group/extractors/http-patterns/php.js +70 -0
- package/dist/core/group/extractors/http-patterns/python.d.ts +2 -0
- package/dist/core/group/extractors/http-patterns/python.js +133 -0
- package/dist/core/group/extractors/http-patterns/types.d.ts +61 -0
- package/dist/core/group/extractors/http-patterns/types.js +1 -0
- package/dist/core/group/extractors/http-route-extractor.d.ts +10 -13
- package/dist/core/group/extractors/http-route-extractor.js +201 -238
- package/dist/core/group/extractors/manifest-extractor.d.ts +54 -0
- package/dist/core/group/extractors/manifest-extractor.js +235 -0
- package/dist/core/group/extractors/topic-extractor.d.ts +0 -1
- package/dist/core/group/extractors/topic-extractor.js +55 -192
- package/dist/core/group/extractors/topic-patterns/go.d.ts +2 -0
- package/dist/core/group/extractors/topic-patterns/go.js +120 -0
- package/dist/core/group/extractors/topic-patterns/index.d.ts +14 -0
- package/dist/core/group/extractors/topic-patterns/index.js +38 -0
- package/dist/core/group/extractors/topic-patterns/java.d.ts +2 -0
- package/dist/core/group/extractors/topic-patterns/java.js +80 -0
- package/dist/core/group/extractors/topic-patterns/node.d.ts +4 -0
- package/dist/core/group/extractors/topic-patterns/node.js +155 -0
- package/dist/core/group/extractors/topic-patterns/python.d.ts +2 -0
- package/dist/core/group/extractors/topic-patterns/python.js +116 -0
- package/dist/core/group/extractors/topic-patterns/types.d.ts +25 -0
- package/dist/core/group/extractors/topic-patterns/types.js +10 -0
- package/dist/core/group/extractors/tree-sitter-scanner.d.ts +113 -0
- package/dist/core/group/extractors/tree-sitter-scanner.js +94 -0
- package/dist/core/ingestion/binding-accumulator.d.ts +22 -17
- package/dist/core/ingestion/binding-accumulator.js +29 -25
- package/dist/core/ingestion/cobol-processor.d.ts +1 -1
- package/dist/core/ingestion/import-processor.js +1 -1
- package/dist/core/ingestion/language-config.js +1 -1
- package/dist/core/ingestion/language-provider.d.ts +8 -0
- package/dist/core/ingestion/languages/ruby.js +15 -0
- package/dist/core/ingestion/markdown-processor.d.ts +1 -1
- package/dist/core/ingestion/method-extractors/configs/jvm.js +1 -0
- package/dist/core/ingestion/method-extractors/configs/ruby.js +1 -0
- package/dist/core/ingestion/method-extractors/generic.d.ts +6 -0
- package/dist/core/ingestion/method-extractors/generic.js +48 -4
- package/dist/core/ingestion/method-types.d.ts +4 -0
- package/dist/core/ingestion/model/resolve.js +103 -48
- package/dist/core/ingestion/model/semantic-model.d.ts +1 -1
- package/dist/core/ingestion/model/semantic-model.js +1 -1
- package/dist/core/ingestion/model/symbol-table.d.ts +7 -7
- package/dist/core/ingestion/model/symbol-table.js +7 -7
- package/dist/core/ingestion/mro-processor.d.ts +1 -1
- package/dist/core/ingestion/mro-processor.js +1 -1
- package/dist/core/ingestion/parsing-processor.js +54 -42
- package/dist/core/ingestion/pipeline-phases/cobol.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/cobol.js +45 -0
- package/dist/core/ingestion/pipeline-phases/communities.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/communities.js +62 -0
- package/dist/core/ingestion/pipeline-phases/cross-file-impl.d.ts +17 -0
- package/dist/core/ingestion/pipeline-phases/cross-file-impl.js +156 -0
- package/dist/core/ingestion/pipeline-phases/cross-file.d.ts +37 -0
- package/dist/core/ingestion/pipeline-phases/cross-file.js +63 -0
- package/dist/core/ingestion/pipeline-phases/index.d.ts +21 -0
- package/dist/core/ingestion/pipeline-phases/index.js +22 -0
- package/dist/core/ingestion/pipeline-phases/markdown.d.ts +17 -0
- package/dist/core/ingestion/pipeline-phases/markdown.js +33 -0
- package/dist/core/ingestion/pipeline-phases/mro.d.ts +18 -0
- package/dist/core/ingestion/pipeline-phases/mro.js +36 -0
- package/dist/core/ingestion/pipeline-phases/orm-extraction.d.ts +22 -0
- package/dist/core/ingestion/pipeline-phases/orm-extraction.js +92 -0
- package/dist/core/ingestion/pipeline-phases/orm.d.ts +15 -0
- package/dist/core/ingestion/pipeline-phases/orm.js +74 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +47 -0
- package/dist/core/ingestion/pipeline-phases/parse-impl.js +437 -0
- package/dist/core/ingestion/pipeline-phases/parse.d.ts +49 -0
- package/dist/core/ingestion/pipeline-phases/parse.js +33 -0
- package/dist/core/ingestion/pipeline-phases/processes.d.ts +16 -0
- package/dist/core/ingestion/pipeline-phases/processes.js +143 -0
- package/dist/core/ingestion/pipeline-phases/routes.d.ts +21 -0
- package/dist/core/ingestion/pipeline-phases/routes.js +243 -0
- package/dist/core/ingestion/pipeline-phases/runner.d.ts +22 -0
- package/dist/core/ingestion/pipeline-phases/runner.js +203 -0
- package/dist/core/ingestion/pipeline-phases/scan.d.ts +21 -0
- package/dist/core/ingestion/pipeline-phases/scan.js +46 -0
- package/dist/core/ingestion/pipeline-phases/structure.d.ts +27 -0
- package/dist/core/ingestion/pipeline-phases/structure.js +35 -0
- package/dist/core/ingestion/pipeline-phases/tools.d.ts +20 -0
- package/dist/core/ingestion/pipeline-phases/tools.js +79 -0
- package/dist/core/ingestion/pipeline-phases/types.d.ts +79 -0
- package/dist/core/ingestion/pipeline-phases/types.js +37 -0
- package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.d.ts +35 -0
- package/dist/core/ingestion/pipeline-phases/wildcard-synthesis.js +174 -0
- package/dist/core/ingestion/pipeline.d.ts +16 -10
- package/dist/core/ingestion/pipeline.js +66 -1534
- package/dist/core/ingestion/process-processor.js +1 -1
- package/dist/core/ingestion/tree-sitter-queries.d.ts +2 -2
- package/dist/core/ingestion/tree-sitter-queries.js +69 -0
- package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -3
- package/dist/core/ingestion/utils/ast-helpers.js +48 -21
- package/dist/core/ingestion/utils/env.d.ts +10 -0
- package/dist/core/ingestion/utils/env.js +10 -0
- package/dist/core/ingestion/utils/graph-sort.d.ts +58 -0
- package/dist/core/ingestion/utils/graph-sort.js +100 -0
- package/dist/core/ingestion/workers/parse-worker.js +12 -8
- package/dist/core/lbug/lbug-adapter.js +66 -24
- package/package.json +3 -3
- package/vendor/tree-sitter-proto/binding.gyp +30 -0
- package/vendor/tree-sitter-proto/bindings/node/binding.cc +20 -0
- package/vendor/tree-sitter-proto/bindings/node/index.d.ts +28 -0
- package/vendor/tree-sitter-proto/bindings/node/index.js +7 -0
- package/vendor/tree-sitter-proto/package.json +18 -0
- package/vendor/tree-sitter-proto/src/node-types.json +1145 -0
- package/vendor/tree-sitter-proto/src/parser.c +10149 -0
- package/vendor/tree-sitter-proto/src/tree_sitter/alloc.h +54 -0
- package/vendor/tree-sitter-proto/src/tree_sitter/array.h +291 -0
- package/vendor/tree-sitter-proto/src/tree_sitter/parser.h +266 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fs from 'fs/promises';
|
|
2
|
-
import { createReadStream } from 'fs';
|
|
2
|
+
import { createReadStream, createWriteStream } from 'fs';
|
|
3
3
|
import { createInterface } from 'readline';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import lbug from '@ladybugdb/core';
|
|
@@ -215,9 +215,12 @@ export const loadGraphToLbug = async (graph, repoPath, storagePath, onProgress)
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
// Bulk COPY relationships — split by FROM→TO label pair (LadybugDB requires it)
|
|
218
|
-
// Stream-read the relation CSV line by line
|
|
218
|
+
// Stream-read the relation CSV line by line and write directly to per-pair
|
|
219
|
+
// temp files on disk. This avoids accumulating potentially millions of CSV
|
|
220
|
+
// lines in memory which could exceed V8 Map or array limits on large repos.
|
|
219
221
|
let relHeader = '';
|
|
220
|
-
const
|
|
222
|
+
const relsByPairMeta = new Map();
|
|
223
|
+
const pairWriteStreams = new Map();
|
|
221
224
|
let skippedRels = 0;
|
|
222
225
|
let totalValidRels = 0;
|
|
223
226
|
await new Promise((resolve, reject) => {
|
|
@@ -246,33 +249,49 @@ export const loadGraphToLbug = async (graph, repoPath, storagePath, onProgress)
|
|
|
246
249
|
return;
|
|
247
250
|
}
|
|
248
251
|
const pairKey = `${fromLabel}|${toLabel}`;
|
|
249
|
-
let
|
|
250
|
-
if (!
|
|
251
|
-
|
|
252
|
-
|
|
252
|
+
let ws = pairWriteStreams.get(pairKey);
|
|
253
|
+
if (!ws) {
|
|
254
|
+
const pairCsvPath = path.join(csvDir, `rel_${fromLabel}_${toLabel}.csv`);
|
|
255
|
+
ws = createWriteStream(pairCsvPath, 'utf-8');
|
|
256
|
+
ws.write(relHeader + '\n');
|
|
257
|
+
pairWriteStreams.set(pairKey, ws);
|
|
258
|
+
relsByPairMeta.set(pairKey, { csvPath: pairCsvPath, rows: 0 });
|
|
253
259
|
}
|
|
254
|
-
|
|
260
|
+
const ok = ws.write(line + '\n');
|
|
261
|
+
relsByPairMeta.get(pairKey).rows++;
|
|
255
262
|
totalValidRels++;
|
|
263
|
+
// Handle backpressure: pause reading when the write buffer is full,
|
|
264
|
+
// resume when the stream drains. Prevents unbounded memory growth
|
|
265
|
+
// on repos with millions of relationships.
|
|
266
|
+
if (!ok) {
|
|
267
|
+
rl.pause();
|
|
268
|
+
ws.once('drain', () => rl.resume());
|
|
269
|
+
}
|
|
256
270
|
});
|
|
257
271
|
rl.on('close', resolve);
|
|
258
|
-
rl.on('error',
|
|
272
|
+
rl.on('error', (err) => {
|
|
273
|
+
// Destroy all open write streams to avoid resource leaks
|
|
274
|
+
for (const ws of pairWriteStreams.values())
|
|
275
|
+
ws.destroy();
|
|
276
|
+
reject(err);
|
|
277
|
+
});
|
|
259
278
|
});
|
|
279
|
+
// Close all per-pair write streams before COPY
|
|
280
|
+
await Promise.all(Array.from(pairWriteStreams.values()).map((ws) => new Promise((resolve, reject) => ws.end((err) => (err ? reject(err) : resolve())))));
|
|
260
281
|
const insertedRels = totalValidRels;
|
|
261
282
|
const warnings = [];
|
|
262
283
|
if (insertedRels > 0) {
|
|
263
|
-
log(`Loading edges: ${insertedRels.toLocaleString()} across ${
|
|
284
|
+
log(`Loading edges: ${insertedRels.toLocaleString()} across ${relsByPairMeta.size} types`);
|
|
264
285
|
let pairIdx = 0;
|
|
265
286
|
let failedPairEdges = 0;
|
|
266
|
-
const
|
|
267
|
-
for (const [pairKey,
|
|
287
|
+
const failedPairCsvPaths = new Set();
|
|
288
|
+
for (const [pairKey, { csvPath: pairCsvPath, rows }] of relsByPairMeta) {
|
|
268
289
|
pairIdx++;
|
|
269
290
|
const [fromLabel, toLabel] = pairKey.split('|');
|
|
270
|
-
const pairCsvPath = path.join(csvDir, `rel_${fromLabel}_${toLabel}.csv`);
|
|
271
|
-
await fs.writeFile(pairCsvPath, relHeader + '\n' + lines.join('\n'), 'utf-8');
|
|
272
291
|
const normalizedPath = normalizeCopyPath(pairCsvPath);
|
|
273
292
|
const copyQuery = `COPY ${REL_TABLE_NAME} FROM "${normalizedPath}" (from="${fromLabel}", to="${toLabel}", HEADER=true, ESCAPE='"', DELIM=',', QUOTE='"', PARALLEL=false, auto_detect=false)`;
|
|
274
|
-
if (pairIdx % 5 === 0 ||
|
|
275
|
-
log(`Loading edges: ${pairIdx}/${
|
|
293
|
+
if (pairIdx % 5 === 0 || rows > 1000) {
|
|
294
|
+
log(`Loading edges: ${pairIdx}/${relsByPairMeta.size} types (${fromLabel} -> ${toLabel})`);
|
|
276
295
|
}
|
|
277
296
|
try {
|
|
278
297
|
await conn.query(copyQuery);
|
|
@@ -284,19 +303,42 @@ export const loadGraphToLbug = async (graph, repoPath, storagePath, onProgress)
|
|
|
284
303
|
}
|
|
285
304
|
catch (retryErr) {
|
|
286
305
|
const retryMsg = retryErr instanceof Error ? retryErr.message : String(retryErr);
|
|
287
|
-
warnings.push(`${fromLabel}->${toLabel} (${
|
|
288
|
-
failedPairEdges +=
|
|
289
|
-
|
|
306
|
+
warnings.push(`${fromLabel}->${toLabel} (${rows} edges): ${retryMsg.slice(0, 80)}`);
|
|
307
|
+
failedPairEdges += rows;
|
|
308
|
+
failedPairCsvPaths.add(pairCsvPath);
|
|
290
309
|
}
|
|
291
310
|
}
|
|
292
|
-
|
|
293
|
-
|
|
311
|
+
// Only delete if not in failedPairCsvPaths (needed for fallback)
|
|
312
|
+
if (!failedPairCsvPaths.has(pairCsvPath)) {
|
|
313
|
+
try {
|
|
314
|
+
await fs.unlink(pairCsvPath);
|
|
315
|
+
}
|
|
316
|
+
catch { }
|
|
294
317
|
}
|
|
295
|
-
catch { }
|
|
296
318
|
}
|
|
297
|
-
if (
|
|
319
|
+
if (failedPairCsvPaths.size > 0) {
|
|
298
320
|
log(`Inserting ${failedPairEdges} edges individually (missing schema pairs)`);
|
|
299
|
-
|
|
321
|
+
// Read failed pair files and merge for fallback inserts
|
|
322
|
+
const allLines = [relHeader];
|
|
323
|
+
for (const failedPath of failedPairCsvPaths) {
|
|
324
|
+
try {
|
|
325
|
+
const content = await fs.readFile(failedPath, 'utf-8');
|
|
326
|
+
const lines = content.split('\n');
|
|
327
|
+
// Skip header line (first) and empty lines
|
|
328
|
+
for (let i = 1; i < lines.length; i++) {
|
|
329
|
+
if (lines[i].trim())
|
|
330
|
+
allLines.push(lines[i]);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
catch { }
|
|
334
|
+
try {
|
|
335
|
+
await fs.unlink(failedPath);
|
|
336
|
+
}
|
|
337
|
+
catch { }
|
|
338
|
+
}
|
|
339
|
+
if (allLines.length > 1) {
|
|
340
|
+
await fallbackRelationshipInserts(allLines, validTables, getNodeLabel);
|
|
341
|
+
}
|
|
300
342
|
}
|
|
301
343
|
}
|
|
302
344
|
// Cleanup all CSVs
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gitnexus",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"description": "Graph-powered code intelligence for AI agents. Index any codebase, query via MCP or CLI.",
|
|
5
5
|
"author": "Abhigyan Patwari",
|
|
6
6
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
@@ -59,7 +59,6 @@
|
|
|
59
59
|
"commander": "^12.0.0",
|
|
60
60
|
"cors": "^2.8.5",
|
|
61
61
|
"express": "^4.19.2",
|
|
62
|
-
"gitnexus-shared": "file:../gitnexus-shared",
|
|
63
62
|
"glob": "^11.0.0",
|
|
64
63
|
"graphology": "^0.25.4",
|
|
65
64
|
"graphology-indices": "^0.17.0",
|
|
@@ -85,8 +84,9 @@
|
|
|
85
84
|
"uuid": "^13.0.0"
|
|
86
85
|
},
|
|
87
86
|
"optionalDependencies": {
|
|
88
|
-
"tree-sitter-dart": "github
|
|
87
|
+
"tree-sitter-dart": "https://github.com/UserNobody14/tree-sitter-dart/archive/80e23c07b64494f7e21090bb3450223ef0b192f4.tar.gz",
|
|
89
88
|
"tree-sitter-kotlin": "^0.3.8",
|
|
89
|
+
"tree-sitter-proto": "file:./vendor/tree-sitter-proto",
|
|
90
90
|
"tree-sitter-swift": "^0.6.0"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"targets": [
|
|
3
|
+
{
|
|
4
|
+
"target_name": "tree_sitter_proto_binding",
|
|
5
|
+
"dependencies": [
|
|
6
|
+
"<!(node -p \"require('node-addon-api').targets\"):node_addon_api_except",
|
|
7
|
+
],
|
|
8
|
+
"include_dirs": [
|
|
9
|
+
"src",
|
|
10
|
+
],
|
|
11
|
+
"sources": [
|
|
12
|
+
"bindings/node/binding.cc",
|
|
13
|
+
"src/parser.c",
|
|
14
|
+
# NOTE: if your language has an external scanner, add it here.
|
|
15
|
+
],
|
|
16
|
+
"conditions": [
|
|
17
|
+
["OS!='win'", {
|
|
18
|
+
"cflags_c": [
|
|
19
|
+
"-std=c11",
|
|
20
|
+
],
|
|
21
|
+
}, { # OS == "win"
|
|
22
|
+
"cflags_c": [
|
|
23
|
+
"/std:c11",
|
|
24
|
+
"/utf-8",
|
|
25
|
+
],
|
|
26
|
+
}],
|
|
27
|
+
],
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#include <napi.h>
|
|
2
|
+
|
|
3
|
+
typedef struct TSLanguage TSLanguage;
|
|
4
|
+
|
|
5
|
+
extern "C" TSLanguage *tree_sitter_proto();
|
|
6
|
+
|
|
7
|
+
// "tree-sitter", "language" hashed with BLAKE2
|
|
8
|
+
const napi_type_tag LANGUAGE_TYPE_TAG = {
|
|
9
|
+
0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
Napi::Object Init(Napi::Env env, Napi::Object exports) {
|
|
13
|
+
exports["name"] = Napi::String::New(env, "proto");
|
|
14
|
+
auto language = Napi::External<TSLanguage>::New(env, tree_sitter_proto());
|
|
15
|
+
language.TypeTag(&LANGUAGE_TYPE_TAG);
|
|
16
|
+
exports["language"] = language;
|
|
17
|
+
return exports;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
NODE_API_MODULE(tree_sitter_proto_binding, Init)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
type BaseNode = {
|
|
2
|
+
type: string;
|
|
3
|
+
named: boolean;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
type ChildNode = {
|
|
7
|
+
multiple: boolean;
|
|
8
|
+
required: boolean;
|
|
9
|
+
types: BaseNode[];
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
type NodeInfo =
|
|
13
|
+
| (BaseNode & {
|
|
14
|
+
subtypes: BaseNode[];
|
|
15
|
+
})
|
|
16
|
+
| (BaseNode & {
|
|
17
|
+
fields: { [name: string]: ChildNode };
|
|
18
|
+
children: ChildNode[];
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
type Language = {
|
|
22
|
+
name: string;
|
|
23
|
+
language: unknown;
|
|
24
|
+
nodeTypeInfo: NodeInfo[];
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
declare const language: Language;
|
|
28
|
+
export = language;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tree-sitter-proto",
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "tree-sitter grammar for protobuf — ABI 14 build from coder3101/tree-sitter-proto latest grammar.js, compatible with tree-sitter 0.25",
|
|
5
|
+
"repository": "https://github.com/coder3101/tree-sitter-proto",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "bindings/node",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"install": "node-gyp-build"
|
|
10
|
+
},
|
|
11
|
+
"peerDependencies": {
|
|
12
|
+
"tree-sitter": ">=0.21.0"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"node-addon-api": "^8.0.0",
|
|
16
|
+
"node-gyp-build": "^4.8.0"
|
|
17
|
+
}
|
|
18
|
+
}
|