@monoes/monograph 1.6.11 → 1.6.12
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/src/pipeline/phases/orm-helpers.d.ts +11 -0
- package/dist/src/pipeline/phases/orm-helpers.d.ts.map +1 -0
- package/dist/src/pipeline/phases/orm-helpers.js +72 -0
- package/dist/src/pipeline/phases/orm-helpers.js.map +1 -0
- package/dist/src/pipeline/phases/orm-mongoose.d.ts +8 -0
- package/dist/src/pipeline/phases/orm-mongoose.d.ts.map +1 -0
- package/dist/src/pipeline/phases/orm-mongoose.js +51 -0
- package/dist/src/pipeline/phases/orm-mongoose.js.map +1 -0
- package/dist/src/pipeline/phases/orm-prisma.d.ts +8 -0
- package/dist/src/pipeline/phases/orm-prisma.d.ts.map +1 -0
- package/dist/src/pipeline/phases/orm-prisma.js +41 -0
- package/dist/src/pipeline/phases/orm-prisma.js.map +1 -0
- package/dist/src/pipeline/phases/orm-sequelize.d.ts +12 -0
- package/dist/src/pipeline/phases/orm-sequelize.d.ts.map +1 -0
- package/dist/src/pipeline/phases/orm-sequelize.js +97 -0
- package/dist/src/pipeline/phases/orm-sequelize.js.map +1 -0
- package/dist/src/pipeline/phases/orm-sqlalchemy.d.ts +8 -0
- package/dist/src/pipeline/phases/orm-sqlalchemy.d.ts.map +1 -0
- package/dist/src/pipeline/phases/orm-sqlalchemy.js +42 -0
- package/dist/src/pipeline/phases/orm-sqlalchemy.js.map +1 -0
- package/dist/src/pipeline/phases/orm-typeorm.d.ts +10 -0
- package/dist/src/pipeline/phases/orm-typeorm.d.ts.map +1 -0
- package/dist/src/pipeline/phases/orm-typeorm.js +52 -0
- package/dist/src/pipeline/phases/orm-typeorm.js.map +1 -0
- package/dist/src/pipeline/phases/orm.d.ts.map +1 -1
- package/dist/src/pipeline/phases/orm.js +6 -336
- package/dist/src/pipeline/phases/orm.js.map +1 -1
- package/dist/src/pipeline/phases/scope-resolution-edges.d.ts +9 -0
- package/dist/src/pipeline/phases/scope-resolution-edges.d.ts.map +1 -0
- package/dist/src/pipeline/phases/scope-resolution-edges.js +30 -0
- package/dist/src/pipeline/phases/scope-resolution-edges.js.map +1 -0
- package/dist/src/pipeline/phases/scope-resolution-function-index.d.ts +31 -0
- package/dist/src/pipeline/phases/scope-resolution-function-index.d.ts.map +1 -0
- package/dist/src/pipeline/phases/scope-resolution-function-index.js +96 -0
- package/dist/src/pipeline/phases/scope-resolution-function-index.js.map +1 -0
- package/dist/src/pipeline/phases/scope-resolution-target.d.ts +6 -0
- package/dist/src/pipeline/phases/scope-resolution-target.d.ts.map +1 -0
- package/dist/src/pipeline/phases/scope-resolution-target.js +69 -0
- package/dist/src/pipeline/phases/scope-resolution-target.js.map +1 -0
- package/dist/src/pipeline/phases/scope-resolution.d.ts.map +1 -1
- package/dist/src/pipeline/phases/scope-resolution.js +3 -189
- package/dist/src/pipeline/phases/scope-resolution.js.map +1 -1
- package/dist/src/storage/fts-store-hybrid.d.ts +17 -0
- package/dist/src/storage/fts-store-hybrid.d.ts.map +1 -0
- package/dist/src/storage/fts-store-hybrid.js +119 -0
- package/dist/src/storage/fts-store-hybrid.js.map +1 -0
- package/dist/src/storage/fts-store-search.d.ts +29 -0
- package/dist/src/storage/fts-store-search.d.ts.map +1 -0
- package/dist/src/storage/fts-store-search.js +177 -0
- package/dist/src/storage/fts-store-search.js.map +1 -0
- package/dist/src/storage/fts-store-terms.d.ts +8 -0
- package/dist/src/storage/fts-store-terms.d.ts.map +1 -0
- package/dist/src/storage/fts-store-terms.js +174 -0
- package/dist/src/storage/fts-store-terms.js.map +1 -0
- package/dist/src/storage/fts-store.d.ts +12 -46
- package/dist/src/storage/fts-store.d.ts.map +1 -1
- package/dist/src/storage/fts-store.js +11 -459
- package/dist/src/storage/fts-store.js.map +1 -1
- package/dist/src/web/api-queries.d.ts +89 -0
- package/dist/src/web/api-queries.d.ts.map +1 -0
- package/dist/src/web/api-queries.js +245 -0
- package/dist/src/web/api-queries.js.map +1 -0
- package/dist/src/web/api.d.ts +2 -87
- package/dist/src/web/api.d.ts.map +1 -1
- package/dist/src/web/api.js +3 -244
- package/dist/src/web/api.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,37 +1,14 @@
|
|
|
1
|
-
import { readFileSync, statSync } from 'node:fs';
|
|
2
1
|
import { basename, extname } from 'node:path';
|
|
3
2
|
import { insertEdges } from '../../storage/edge-store.js';
|
|
4
3
|
import { insertNodes } from '../../storage/node-store.js';
|
|
5
|
-
import {
|
|
4
|
+
import { langFromExt, safeReadSource } from './orm-helpers.js';
|
|
5
|
+
import { detectMongooseEntities } from './orm-mongoose.js';
|
|
6
|
+
import { detectPrismaEntities } from './orm-prisma.js';
|
|
7
|
+
import { detectSequelizeEntities } from './orm-sequelize.js';
|
|
8
|
+
import { detectSQLAlchemyEntities } from './orm-sqlalchemy.js';
|
|
9
|
+
import { detectTypeOrmEntities } from './orm-typeorm.js';
|
|
6
10
|
// ── Supported code extensions ─────────────────────────────────────────────────
|
|
7
11
|
const TS_JS_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs']);
|
|
8
|
-
// ── Regex patterns ────────────────────────────────────────────────────────────
|
|
9
|
-
/** TypeORM: @Entity() decorator before a class */
|
|
10
|
-
const TYPEORM_ENTITY_RE = /@Entity\s*\([^)]*\)\s*(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/g;
|
|
11
|
-
/** TypeORM/MikroORM column decorator (matches the decorator line only) */
|
|
12
|
-
const TYPEORM_COLUMN_DECORATOR_RE = /@(?:Primary(?:Generated)?Column|Column|CreateDateColumn|UpdateDateColumn|DeleteDateColumn|Property|PrimaryKey|ManyToOne|OneToMany|ManyToMany|OneToOne)\s*\([^)]*\)/g;
|
|
13
|
-
/** Property declaration after a TypeORM column decorator */
|
|
14
|
-
const TYPEORM_PROP_RE = /(\w+)\s*[!?]?\s*:\s*(\w+)/;
|
|
15
|
-
/** Prisma model block: model Name { ... } */
|
|
16
|
-
const PRISMA_MODEL_RE = /^model\s+(\w+)\s*\{([^}]+)\}/gm;
|
|
17
|
-
/** Prisma field line inside a model block */
|
|
18
|
-
const PRISMA_FIELD_RE = /^\s+(\w+)\s+(\w+)/gm;
|
|
19
|
-
/** Mongoose: const XxxSchema = new Schema({ */
|
|
20
|
-
const MONGOOSE_SCHEMA_RE = /(?:const|let|var)\s+(\w*[Ss]chema)\s*=\s*new\s+(?:\w+\.)?Schema\s*\(\s*\{/g;
|
|
21
|
-
/** Mongoose field inside a Schema object: fieldName: { type: SomeType } or fieldName: SomeType */
|
|
22
|
-
const MONGOOSE_FIELD_RE = /(\w+)\s*:\s*(?:\{[^}]*type\s*:\s*(\w+)|(\w+))/g;
|
|
23
|
-
/** Sequelize: class Foo extends Model (or extends Model.Model) */
|
|
24
|
-
const SEQUELIZE_CLASS_RE = /class\s+(\w+)\s+extends\s+(?:\w+\.)?Model\b/g;
|
|
25
|
-
/** Sequelize Model.init({ field: ... }, { sequelize }) — capture the first arg block */
|
|
26
|
-
const SEQUELIZE_INIT_RE = /(\w+)\.init\s*\(\s*\{/g;
|
|
27
|
-
/** Sequelize sequelize.define('ModelName', { ... }) */
|
|
28
|
-
const SEQUELIZE_DEFINE_RE = /\.define\s*\(\s*['"](\w+)['"]\s*,\s*\{/g;
|
|
29
|
-
/** Sequelize field inside init/define block: fieldName: DataTypes.X or fieldName: { type: DataTypes.X } */
|
|
30
|
-
const SEQUELIZE_FIELD_RE = /(\w+)\s*:\s*(?:\{[^}]*type\s*:\s*(?:DataTypes\.)?(\w+)|(?:DataTypes\.)?(\w+))/g;
|
|
31
|
-
/** SQLAlchemy: class Foo(Base) or class Foo(db.Model) etc. */
|
|
32
|
-
const SQLALCHEMY_CLASS_RE = /class\s+(\w+)\s*\([^)]*Base[^)]*\)/g;
|
|
33
|
-
/** SQLAlchemy column: fieldName = Column( */
|
|
34
|
-
const SQLALCHEMY_COLUMN_RE = /(\w+)\s*(?::\s*[\w[\]]+)?\s*=\s*Column\s*\(/g;
|
|
35
12
|
// ── Phase ─────────────────────────────────────────────────────────────────────
|
|
36
13
|
export const ormPhase = {
|
|
37
14
|
name: 'orm',
|
|
@@ -78,311 +55,4 @@ export const ormPhase = {
|
|
|
78
55
|
return { entities };
|
|
79
56
|
},
|
|
80
57
|
};
|
|
81
|
-
// ── Detectors ─────────────────────────────────────────────────────────────────
|
|
82
|
-
function detectTypeOrmEntities(source, filePath, language, entities, entityNodes, fieldNodes, edges) {
|
|
83
|
-
const entityRe = new RegExp(TYPEORM_ENTITY_RE.source, 'g');
|
|
84
|
-
const lines = source.split('\n');
|
|
85
|
-
let m;
|
|
86
|
-
while ((m = entityRe.exec(source)) !== null) {
|
|
87
|
-
const entityName = m[1];
|
|
88
|
-
const entityNodeId = makeId('entity', entityName + filePath);
|
|
89
|
-
const entityNode = {
|
|
90
|
-
id: entityNodeId,
|
|
91
|
-
label: 'Entity',
|
|
92
|
-
name: entityName,
|
|
93
|
-
normLabel: toNormLabel(entityName),
|
|
94
|
-
filePath,
|
|
95
|
-
startLine: 0,
|
|
96
|
-
endLine: 0,
|
|
97
|
-
isExported: true,
|
|
98
|
-
language,
|
|
99
|
-
};
|
|
100
|
-
entityNodes.push(entityNode);
|
|
101
|
-
const fields = [];
|
|
102
|
-
const colDecRe = new RegExp(TYPEORM_COLUMN_DECORATOR_RE.source, 'g');
|
|
103
|
-
for (let i = 0; i < lines.length; i++) {
|
|
104
|
-
const line = lines[i];
|
|
105
|
-
if (colDecRe.test(line)) {
|
|
106
|
-
colDecRe.lastIndex = 0; // reset after test
|
|
107
|
-
// Look at the next non-empty line for the property declaration
|
|
108
|
-
for (let j = i + 1; j < Math.min(i + 4, lines.length); j++) {
|
|
109
|
-
const propLine = lines[j].trim();
|
|
110
|
-
if (!propLine || propLine.startsWith('@') || propLine.startsWith('//'))
|
|
111
|
-
continue;
|
|
112
|
-
const pm = TYPEORM_PROP_RE.exec(propLine);
|
|
113
|
-
if (pm) {
|
|
114
|
-
addField(entityName, pm[1], pm[2], filePath, language, entityNodeId, fields, fieldNodes, edges);
|
|
115
|
-
}
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
colDecRe.lastIndex = 0; // always reset
|
|
120
|
-
}
|
|
121
|
-
entities.push({ name: entityName, filePath, fields, entityNodeId });
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
function detectPrismaEntities(source, filePath, language, entities, entityNodes, fieldNodes, edges) {
|
|
125
|
-
const modelRe = new RegExp(PRISMA_MODEL_RE.source, 'gm');
|
|
126
|
-
let m;
|
|
127
|
-
while ((m = modelRe.exec(source)) !== null) {
|
|
128
|
-
const entityName = m[1];
|
|
129
|
-
const body = m[2];
|
|
130
|
-
const entityNodeId = makeId('entity', entityName + filePath);
|
|
131
|
-
const entityNode = {
|
|
132
|
-
id: entityNodeId,
|
|
133
|
-
label: 'Entity',
|
|
134
|
-
name: entityName,
|
|
135
|
-
normLabel: toNormLabel(entityName),
|
|
136
|
-
filePath,
|
|
137
|
-
startLine: 0,
|
|
138
|
-
endLine: 0,
|
|
139
|
-
isExported: true,
|
|
140
|
-
language,
|
|
141
|
-
};
|
|
142
|
-
entityNodes.push(entityNode);
|
|
143
|
-
const fields = [];
|
|
144
|
-
const fieldRe = new RegExp(PRISMA_FIELD_RE.source, 'gm');
|
|
145
|
-
let fm;
|
|
146
|
-
while ((fm = fieldRe.exec(body)) !== null) {
|
|
147
|
-
const fieldName = fm[1];
|
|
148
|
-
const fieldType = fm[2];
|
|
149
|
-
// Skip Prisma keywords
|
|
150
|
-
if (['model', 'enum', 'type', 'datasource', 'generator'].includes(fieldName))
|
|
151
|
-
continue;
|
|
152
|
-
addField(entityName, fieldName, fieldType, filePath, language, entityNodeId, fields, fieldNodes, edges);
|
|
153
|
-
}
|
|
154
|
-
entities.push({ name: entityName, filePath, fields, entityNodeId });
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
function detectMongooseEntities(source, filePath, language, entities, entityNodes, fieldNodes, edges) {
|
|
158
|
-
const schemaRe = new RegExp(MONGOOSE_SCHEMA_RE.source, 'g');
|
|
159
|
-
let m;
|
|
160
|
-
while ((m = schemaRe.exec(source)) !== null) {
|
|
161
|
-
const schemaVarName = m[1];
|
|
162
|
-
// Remove 'Schema' suffix to get entity name
|
|
163
|
-
const entityName = schemaVarName.replace(/[Ss]chema$/, '') || schemaVarName;
|
|
164
|
-
const entityNodeId = makeId('entity', entityName + filePath);
|
|
165
|
-
const entityNode = {
|
|
166
|
-
id: entityNodeId,
|
|
167
|
-
label: 'Entity',
|
|
168
|
-
name: entityName,
|
|
169
|
-
normLabel: toNormLabel(entityName),
|
|
170
|
-
filePath,
|
|
171
|
-
startLine: 0,
|
|
172
|
-
endLine: 0,
|
|
173
|
-
isExported: true,
|
|
174
|
-
language,
|
|
175
|
-
};
|
|
176
|
-
entityNodes.push(entityNode);
|
|
177
|
-
// Extract a block after the Schema({ starting point
|
|
178
|
-
const blockStart = m.index + m[0].length;
|
|
179
|
-
const block = extractBraceBlock(source, blockStart - 1, 4000);
|
|
180
|
-
const fields = [];
|
|
181
|
-
if (block) {
|
|
182
|
-
const fieldRe = new RegExp(MONGOOSE_FIELD_RE.source, 'g');
|
|
183
|
-
let fm;
|
|
184
|
-
const seen = new Set();
|
|
185
|
-
while ((fm = fieldRe.exec(block)) !== null) {
|
|
186
|
-
const fieldName = fm[1];
|
|
187
|
-
const fieldType = fm[2] ?? fm[3] ?? 'Mixed';
|
|
188
|
-
if (seen.has(fieldName))
|
|
189
|
-
continue;
|
|
190
|
-
// Skip obvious non-field keys
|
|
191
|
-
if (['type', 'required', 'default', 'ref', 'index', 'unique', 'enum'].includes(fieldName))
|
|
192
|
-
continue;
|
|
193
|
-
seen.add(fieldName);
|
|
194
|
-
addField(entityName, fieldName, fieldType, filePath, language, entityNodeId, fields, fieldNodes, edges);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
entities.push({ name: entityName, filePath, fields, entityNodeId });
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
function detectSequelizeEntities(source, filePath, language, entities, entityNodes, fieldNodes, edges) {
|
|
201
|
-
// Track entity names we've already registered to avoid duplicates.
|
|
202
|
-
const registeredNames = new Set();
|
|
203
|
-
function registerEntity(entityName) {
|
|
204
|
-
const entityNodeId = makeId('entity', entityName + filePath);
|
|
205
|
-
if (registeredNames.has(entityName))
|
|
206
|
-
return entityNodeId;
|
|
207
|
-
registeredNames.add(entityName);
|
|
208
|
-
const entityNode = {
|
|
209
|
-
id: entityNodeId,
|
|
210
|
-
label: 'Entity',
|
|
211
|
-
name: entityName,
|
|
212
|
-
normLabel: toNormLabel(entityName),
|
|
213
|
-
filePath,
|
|
214
|
-
startLine: 0,
|
|
215
|
-
endLine: 0,
|
|
216
|
-
isExported: true,
|
|
217
|
-
language,
|
|
218
|
-
};
|
|
219
|
-
entityNodes.push(entityNode);
|
|
220
|
-
return entityNodeId;
|
|
221
|
-
}
|
|
222
|
-
// Collect class names that extend Model so we can match them in .init() calls.
|
|
223
|
-
const modelClasses = new Set();
|
|
224
|
-
const classRe = new RegExp(SEQUELIZE_CLASS_RE.source, 'g');
|
|
225
|
-
let cm;
|
|
226
|
-
while ((cm = classRe.exec(source)) !== null) {
|
|
227
|
-
modelClasses.add(cm[1]);
|
|
228
|
-
}
|
|
229
|
-
// Handle: ClassName.init({ ... }, { sequelize })
|
|
230
|
-
const initRe = new RegExp(SEQUELIZE_INIT_RE.source, 'g');
|
|
231
|
-
let im;
|
|
232
|
-
while ((im = initRe.exec(source)) !== null) {
|
|
233
|
-
const candidateName = im[1];
|
|
234
|
-
// Only treat as Sequelize if it's a known Model subclass OR if DataTypes appears in the block.
|
|
235
|
-
const blockStart = im.index + im[0].length - 1; // position of the opening '{'
|
|
236
|
-
const block = extractBraceBlock(source, blockStart, 4000);
|
|
237
|
-
if (!block)
|
|
238
|
-
continue;
|
|
239
|
-
if (!modelClasses.has(candidateName) && !block.includes('DataTypes'))
|
|
240
|
-
continue;
|
|
241
|
-
const entityNodeId = registerEntity(candidateName);
|
|
242
|
-
const fields = [];
|
|
243
|
-
const fieldRe = new RegExp(SEQUELIZE_FIELD_RE.source, 'g');
|
|
244
|
-
let fm;
|
|
245
|
-
const seen = new Set();
|
|
246
|
-
while ((fm = fieldRe.exec(block)) !== null) {
|
|
247
|
-
const fieldName = fm[1];
|
|
248
|
-
const fieldType = fm[2] ?? fm[3] ?? 'DataType';
|
|
249
|
-
if (seen.has(fieldName))
|
|
250
|
-
continue;
|
|
251
|
-
if (['type', 'allowNull', 'defaultValue', 'primaryKey', 'unique', 'references'].includes(fieldName))
|
|
252
|
-
continue;
|
|
253
|
-
seen.add(fieldName);
|
|
254
|
-
addField(candidateName, fieldName, fieldType, filePath, language, entityNodeId, fields, fieldNodes, edges);
|
|
255
|
-
}
|
|
256
|
-
entities.push({ name: candidateName, filePath, fields, entityNodeId });
|
|
257
|
-
}
|
|
258
|
-
// Handle: sequelize.define('ModelName', { ... })
|
|
259
|
-
const defineRe = new RegExp(SEQUELIZE_DEFINE_RE.source, 'g');
|
|
260
|
-
let dm;
|
|
261
|
-
while ((dm = defineRe.exec(source)) !== null) {
|
|
262
|
-
const entityName = dm[1];
|
|
263
|
-
const blockStart = dm.index + dm[0].length - 1;
|
|
264
|
-
const block = extractBraceBlock(source, blockStart, 4000);
|
|
265
|
-
const entityNodeId = registerEntity(entityName);
|
|
266
|
-
const fields = [];
|
|
267
|
-
if (block) {
|
|
268
|
-
const fieldRe = new RegExp(SEQUELIZE_FIELD_RE.source, 'g');
|
|
269
|
-
let fm;
|
|
270
|
-
const seen = new Set();
|
|
271
|
-
while ((fm = fieldRe.exec(block)) !== null) {
|
|
272
|
-
const fieldName = fm[1];
|
|
273
|
-
const fieldType = fm[2] ?? fm[3] ?? 'DataType';
|
|
274
|
-
if (seen.has(fieldName))
|
|
275
|
-
continue;
|
|
276
|
-
if (['type', 'allowNull', 'defaultValue', 'primaryKey', 'unique', 'references'].includes(fieldName))
|
|
277
|
-
continue;
|
|
278
|
-
seen.add(fieldName);
|
|
279
|
-
addField(entityName, fieldName, fieldType, filePath, language, entityNodeId, fields, fieldNodes, edges);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
entities.push({ name: entityName, filePath, fields, entityNodeId });
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
function detectSQLAlchemyEntities(source, filePath, language, entities, entityNodes, fieldNodes, edges) {
|
|
286
|
-
const classRe = new RegExp(SQLALCHEMY_CLASS_RE.source, 'g');
|
|
287
|
-
let m;
|
|
288
|
-
while ((m = classRe.exec(source)) !== null) {
|
|
289
|
-
const entityName = m[1];
|
|
290
|
-
const entityNodeId = makeId('entity', entityName + filePath);
|
|
291
|
-
const entityNode = {
|
|
292
|
-
id: entityNodeId,
|
|
293
|
-
label: 'Entity',
|
|
294
|
-
name: entityName,
|
|
295
|
-
normLabel: toNormLabel(entityName),
|
|
296
|
-
filePath,
|
|
297
|
-
startLine: 0,
|
|
298
|
-
endLine: 0,
|
|
299
|
-
isExported: true,
|
|
300
|
-
language,
|
|
301
|
-
};
|
|
302
|
-
entityNodes.push(entityNode);
|
|
303
|
-
const fields = [];
|
|
304
|
-
// Scope column scan to this class's body — slice from the match end to the next
|
|
305
|
-
// unindented `class ` keyword or end-of-string to avoid assigning columns from
|
|
306
|
-
// other classes to this entity.
|
|
307
|
-
const classBodyStart = m.index + m[0].length;
|
|
308
|
-
const nextClassIdx = source.indexOf('\nclass ', classBodyStart);
|
|
309
|
-
const classBody = nextClassIdx >= 0 ? source.slice(classBodyStart, nextClassIdx) : source.slice(classBodyStart);
|
|
310
|
-
const columnRe = new RegExp(SQLALCHEMY_COLUMN_RE.source, 'g');
|
|
311
|
-
let cm;
|
|
312
|
-
while ((cm = columnRe.exec(classBody)) !== null) {
|
|
313
|
-
const fieldName = cm[1];
|
|
314
|
-
addField(entityName, fieldName, 'Column', filePath, language, entityNodeId, fields, fieldNodes, edges);
|
|
315
|
-
}
|
|
316
|
-
entities.push({ name: entityName, filePath, fields, entityNodeId });
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
320
|
-
function addField(entityName, fieldName, fieldType, filePath, language, entityNodeId, fields, fieldNodes, edges) {
|
|
321
|
-
const fieldNodeId = makeId('field', entityName + fieldName + filePath);
|
|
322
|
-
const fieldNode = {
|
|
323
|
-
id: fieldNodeId,
|
|
324
|
-
label: 'Field',
|
|
325
|
-
name: fieldName,
|
|
326
|
-
normLabel: toNormLabel(fieldName),
|
|
327
|
-
filePath,
|
|
328
|
-
startLine: 0,
|
|
329
|
-
endLine: 0,
|
|
330
|
-
isExported: false,
|
|
331
|
-
language,
|
|
332
|
-
properties: { declaredType: fieldType },
|
|
333
|
-
};
|
|
334
|
-
fieldNodes.push(fieldNode);
|
|
335
|
-
const edgeId = makeId(entityNodeId, fieldNodeId, 'has_field');
|
|
336
|
-
edges.push({
|
|
337
|
-
id: edgeId,
|
|
338
|
-
sourceId: entityNodeId,
|
|
339
|
-
targetId: fieldNodeId,
|
|
340
|
-
relation: 'HAS_FIELD',
|
|
341
|
-
confidence: 'EXTRACTED',
|
|
342
|
-
confidenceScore: 0.9,
|
|
343
|
-
});
|
|
344
|
-
fields.push({ name: fieldName, type: fieldType, fieldNodeId });
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Extracts a balanced brace block from source starting at the position of the
|
|
348
|
-
* opening `{`. Returns the content between the braces (not including the braces).
|
|
349
|
-
*/
|
|
350
|
-
function extractBraceBlock(source, openPos, maxLen) {
|
|
351
|
-
// Find the opening brace at or after openPos
|
|
352
|
-
const start = source.indexOf('{', openPos);
|
|
353
|
-
if (start === -1)
|
|
354
|
-
return undefined;
|
|
355
|
-
let depth = 0;
|
|
356
|
-
let i = start;
|
|
357
|
-
const end = Math.min(start + maxLen, source.length);
|
|
358
|
-
for (; i < end; i++) {
|
|
359
|
-
if (source[i] === '{')
|
|
360
|
-
depth++;
|
|
361
|
-
else if (source[i] === '}') {
|
|
362
|
-
depth--;
|
|
363
|
-
if (depth === 0)
|
|
364
|
-
return source.slice(start + 1, i);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
// Return partial block if not closed within maxLen
|
|
368
|
-
return source.slice(start + 1, i);
|
|
369
|
-
}
|
|
370
|
-
function safeReadSource(absPath, maxBytes) {
|
|
371
|
-
try {
|
|
372
|
-
const stat = statSync(absPath);
|
|
373
|
-
if (stat.size > maxBytes)
|
|
374
|
-
return undefined;
|
|
375
|
-
return readFileSync(absPath, 'utf-8');
|
|
376
|
-
}
|
|
377
|
-
catch {
|
|
378
|
-
return undefined;
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
function langFromExt(ext) {
|
|
382
|
-
if (ext === '.ts' || ext === '.tsx')
|
|
383
|
-
return 'typescript';
|
|
384
|
-
if (ext === '.js' || ext === '.jsx' || ext === '.mjs' || ext === '.cjs')
|
|
385
|
-
return 'javascript';
|
|
386
|
-
return 'unknown';
|
|
387
|
-
}
|
|
388
58
|
//# sourceMappingURL=orm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orm.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/orm.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"orm.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/orm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface PreparedEdgeStmts {
|
|
2
|
+
selectExisting: import('better-sqlite3').Statement;
|
|
3
|
+
updateScore: import('better-sqlite3').Statement;
|
|
4
|
+
insertNew: import('better-sqlite3').Statement;
|
|
5
|
+
}
|
|
6
|
+
export declare function prepareEdgeStmts(db: import('better-sqlite3').Database): PreparedEdgeStmts;
|
|
7
|
+
export declare const RESOLVED_CONFIDENCE_SCORE = 0.75;
|
|
8
|
+
export declare function emitEdge(stmts: PreparedEdgeStmts, sourceId: string, targetId: string): 'inserted' | 'upgraded' | 'skipped';
|
|
9
|
+
//# sourceMappingURL=scope-resolution-edges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolution-edges.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution-edges.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,OAAO,gBAAgB,EAAE,SAAS,CAAC;IACnD,WAAW,EAAE,OAAO,gBAAgB,EAAE,SAAS,CAAC;IAChD,SAAS,EAAE,OAAO,gBAAgB,EAAE,SAAS,CAAC;CAC/C;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,gBAAgB,EAAE,QAAQ,GAAG,iBAAiB,CAYzF;AAED,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,wBAAgB,QAAQ,CACtB,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,UAAU,GAAG,UAAU,GAAG,SAAS,CAsBrC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { makeId } from '../../types.js';
|
|
2
|
+
export function prepareEdgeStmts(db) {
|
|
3
|
+
return {
|
|
4
|
+
selectExisting: db.prepare(`SELECT id, confidence_score FROM edges WHERE source_id = ? AND target_id = ? AND relation = 'CALLS'`),
|
|
5
|
+
updateScore: db.prepare(`UPDATE edges SET confidence_score = ?, confidence = 'EXTRACTED' WHERE id = ?`),
|
|
6
|
+
insertNew: db.prepare(`INSERT OR IGNORE INTO edges (id, source_id, target_id, relation, confidence, confidence_score) VALUES (?, ?, ?, 'CALLS', 'EXTRACTED', ?)`),
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export const RESOLVED_CONFIDENCE_SCORE = 0.75;
|
|
10
|
+
export function emitEdge(stmts, sourceId, targetId) {
|
|
11
|
+
if (sourceId === targetId)
|
|
12
|
+
return 'skipped';
|
|
13
|
+
const existing = stmts.selectExisting.get(sourceId, targetId);
|
|
14
|
+
if (existing) {
|
|
15
|
+
const newScore = Math.max(existing.confidence_score, RESOLVED_CONFIDENCE_SCORE);
|
|
16
|
+
if (newScore > existing.confidence_score) {
|
|
17
|
+
stmts.updateScore.run(newScore, existing.id);
|
|
18
|
+
}
|
|
19
|
+
return 'upgraded';
|
|
20
|
+
}
|
|
21
|
+
const edgeId = makeId(sourceId, targetId, 'calls_resolved');
|
|
22
|
+
try {
|
|
23
|
+
stmts.insertNew.run(edgeId, sourceId, targetId, RESOLVED_CONFIDENCE_SCORE);
|
|
24
|
+
return 'inserted';
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return 'skipped';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=scope-resolution-edges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolution-edges.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution-edges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAYxC,MAAM,UAAU,gBAAgB,CAAC,EAAqC;IACpE,OAAO;QACL,cAAc,EAAE,EAAE,CAAC,OAAO,CACxB,qGAAqG,CACtG;QACD,WAAW,EAAE,EAAE,CAAC,OAAO,CACrB,8EAA8E,CAC/E;QACD,SAAS,EAAE,EAAE,CAAC,OAAO,CACnB,0IAA0I,CAC3I;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,MAAM,UAAU,QAAQ,CACtB,KAAwB,EACxB,QAAgB,EAChB,QAAgB;IAEhB,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAE/C,CAAC;IAEd,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC;QAChF,IAAI,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACzC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { PipelineContext } from '../types.js';
|
|
2
|
+
export declare function buildFunctionIndex(ctx: PipelineContext): {
|
|
3
|
+
byFilePath: Map<string, Map<string, string[]>>;
|
|
4
|
+
nameCounts: Map<string, number>;
|
|
5
|
+
};
|
|
6
|
+
/** A callable node with a known line range, used to attribute a call to its caller. */
|
|
7
|
+
export interface EnclosingSymbol {
|
|
8
|
+
id: string;
|
|
9
|
+
startLine: number;
|
|
10
|
+
endLine: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Line ranges of every callable, grouped by file, innermost-first.
|
|
14
|
+
*
|
|
15
|
+
* Call edges are attributed to the enclosing function rather than the file.
|
|
16
|
+
* Attributing them to the file makes a function appear "used" by its own file
|
|
17
|
+
* purely because it is declared there, which silently disabled dead-export
|
|
18
|
+
* detection: `detectDeadCodeNodes` rejects any candidate with an inbound CALLS
|
|
19
|
+
* edge, and that self-edge always existed.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildEnclosingIndex(ctx: PipelineContext): Map<string, EnclosingSymbol[]>;
|
|
22
|
+
/** Line-start offsets, for turning a match offset into a 1-based line number. */
|
|
23
|
+
export declare function buildLineOffsets(source: string): number[];
|
|
24
|
+
export declare function lineAtOffset(lineOffsets: number[], offset: number): number;
|
|
25
|
+
/**
|
|
26
|
+
* The innermost callable containing `offset`, or null when the call sits at
|
|
27
|
+
* module top level — which is genuinely file-scoped, so the file node stays
|
|
28
|
+
* the correct source for those.
|
|
29
|
+
*/
|
|
30
|
+
export declare function findEnclosingSymbolId(enclosing: EnclosingSymbol[] | undefined, lineOffsets: number[], offset: number | undefined): string | null;
|
|
31
|
+
//# sourceMappingURL=scope-resolution-function-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolution-function-index.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution-function-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAMnD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG;IACxD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CA4BA;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CA6BxF;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAMzD;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,eAAe,EAAE,GAAG,SAAS,EACxC,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,IAAI,CAOf"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Split out of scope-resolution.ts (file-size sweep). Pure move: no behaviour change.
|
|
2
|
+
// ── Function index ───────────────────────────────────────────────────────────
|
|
3
|
+
export function buildFunctionIndex(ctx) {
|
|
4
|
+
const byFilePath = new Map();
|
|
5
|
+
const nameCounts = new Map();
|
|
6
|
+
if (!ctx.db)
|
|
7
|
+
return { byFilePath, nameCounts };
|
|
8
|
+
const rows = ctx.db
|
|
9
|
+
.prepare(`SELECT id, name, file_path FROM nodes WHERE label IN ('Function', 'Method', 'Constructor', 'Class') AND file_path IS NOT NULL`)
|
|
10
|
+
.all();
|
|
11
|
+
for (const row of rows) {
|
|
12
|
+
let fileMap = byFilePath.get(row.file_path);
|
|
13
|
+
if (!fileMap) {
|
|
14
|
+
fileMap = new Map();
|
|
15
|
+
byFilePath.set(row.file_path, fileMap);
|
|
16
|
+
}
|
|
17
|
+
let ids = fileMap.get(row.name);
|
|
18
|
+
if (!ids) {
|
|
19
|
+
ids = [];
|
|
20
|
+
fileMap.set(row.name, ids);
|
|
21
|
+
}
|
|
22
|
+
ids.push(row.id);
|
|
23
|
+
nameCounts.set(row.name, (nameCounts.get(row.name) ?? 0) + 1);
|
|
24
|
+
}
|
|
25
|
+
return { byFilePath, nameCounts };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Line ranges of every callable, grouped by file, innermost-first.
|
|
29
|
+
*
|
|
30
|
+
* Call edges are attributed to the enclosing function rather than the file.
|
|
31
|
+
* Attributing them to the file makes a function appear "used" by its own file
|
|
32
|
+
* purely because it is declared there, which silently disabled dead-export
|
|
33
|
+
* detection: `detectDeadCodeNodes` rejects any candidate with an inbound CALLS
|
|
34
|
+
* edge, and that self-edge always existed.
|
|
35
|
+
*/
|
|
36
|
+
export function buildEnclosingIndex(ctx) {
|
|
37
|
+
const byFile = new Map();
|
|
38
|
+
if (!ctx.db)
|
|
39
|
+
return byFile;
|
|
40
|
+
const rows = ctx.db
|
|
41
|
+
.prepare(`SELECT id, file_path, start_line, end_line FROM nodes
|
|
42
|
+
WHERE label IN ('Function', 'Method', 'Constructor')
|
|
43
|
+
AND file_path IS NOT NULL AND start_line IS NOT NULL AND end_line IS NOT NULL`)
|
|
44
|
+
.all();
|
|
45
|
+
for (const row of rows) {
|
|
46
|
+
let list = byFile.get(row.file_path);
|
|
47
|
+
if (!list) {
|
|
48
|
+
list = [];
|
|
49
|
+
byFile.set(row.file_path, list);
|
|
50
|
+
}
|
|
51
|
+
list.push({ id: row.id, startLine: row.start_line, endLine: row.end_line });
|
|
52
|
+
}
|
|
53
|
+
// Narrowest range first, so the first containing match is the innermost
|
|
54
|
+
// scope — a call inside a closure belongs to the closure, not the function
|
|
55
|
+
// that happens to wrap it.
|
|
56
|
+
for (const list of byFile.values()) {
|
|
57
|
+
list.sort((a, b) => a.endLine - a.startLine - (b.endLine - b.startLine));
|
|
58
|
+
}
|
|
59
|
+
return byFile;
|
|
60
|
+
}
|
|
61
|
+
/** Line-start offsets, for turning a match offset into a 1-based line number. */
|
|
62
|
+
export function buildLineOffsets(source) {
|
|
63
|
+
const offsets = [0];
|
|
64
|
+
for (let i = 0; i < source.length; i++) {
|
|
65
|
+
if (source.charCodeAt(i) === 10)
|
|
66
|
+
offsets.push(i + 1);
|
|
67
|
+
}
|
|
68
|
+
return offsets;
|
|
69
|
+
}
|
|
70
|
+
export function lineAtOffset(lineOffsets, offset) {
|
|
71
|
+
let lo = 0, hi = lineOffsets.length - 1;
|
|
72
|
+
while (lo < hi) {
|
|
73
|
+
const mid = (lo + hi + 1) >> 1;
|
|
74
|
+
if (lineOffsets[mid] <= offset)
|
|
75
|
+
lo = mid;
|
|
76
|
+
else
|
|
77
|
+
hi = mid - 1;
|
|
78
|
+
}
|
|
79
|
+
return lo + 1;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The innermost callable containing `offset`, or null when the call sits at
|
|
83
|
+
* module top level — which is genuinely file-scoped, so the file node stays
|
|
84
|
+
* the correct source for those.
|
|
85
|
+
*/
|
|
86
|
+
export function findEnclosingSymbolId(enclosing, lineOffsets, offset) {
|
|
87
|
+
if (!enclosing || enclosing.length === 0 || offset === undefined)
|
|
88
|
+
return null;
|
|
89
|
+
const line = lineAtOffset(lineOffsets, offset);
|
|
90
|
+
for (const sym of enclosing) {
|
|
91
|
+
if (line >= sym.startLine && line <= sym.endLine)
|
|
92
|
+
return sym.id;
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=scope-resolution-function-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolution-function-index.js","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution-function-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CallSite } from './call-site-extractors.js';
|
|
2
|
+
export declare function pickBestId(ids: string[], site: CallSite): string | null;
|
|
3
|
+
export declare function resolveTarget(site: CallSite, callerFilePath: string, importMap: Map<string, string>, fnIndex: Map<string, Map<string, string[]>>, ctorMap: Map<string, string> | undefined, importedFiles: string[]): {
|
|
4
|
+
targetId: string;
|
|
5
|
+
} | null;
|
|
6
|
+
//# sourceMappingURL=scope-resolution-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolution-target.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/scope-resolution-target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAM1D,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAUvE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAC3C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EAAE,GACtB;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgD7B"}
|