@effect-dynamodb/language-service 0.1.0
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/LICENSE +21 -0
- package/README.md +30 -0
- package/dist/core/Cache.d.ts +7 -0
- package/dist/core/Cache.d.ts.map +1 -0
- package/dist/core/Cache.js +33 -0
- package/dist/core/Cache.js.map +1 -0
- package/dist/core/EntityResolver.d.ts +58 -0
- package/dist/core/EntityResolver.d.ts.map +1 -0
- package/dist/core/EntityResolver.js +628 -0
- package/dist/core/EntityResolver.js.map +1 -0
- package/dist/core/OperationDetector.d.ts +33 -0
- package/dist/core/OperationDetector.d.ts.map +1 -0
- package/dist/core/OperationDetector.js +528 -0
- package/dist/core/OperationDetector.js.map +1 -0
- package/dist/core/ParamsBuilder.d.ts +18 -0
- package/dist/core/ParamsBuilder.d.ts.map +1 -0
- package/dist/core/ParamsBuilder.js +571 -0
- package/dist/core/ParamsBuilder.js.map +1 -0
- package/dist/features/diagnostics.d.ts +19 -0
- package/dist/features/diagnostics.d.ts.map +1 -0
- package/dist/features/diagnostics.js +530 -0
- package/dist/features/diagnostics.js.map +1 -0
- package/dist/features/quickinfo.d.ts +3 -0
- package/dist/features/quickinfo.d.ts.map +1 -0
- package/dist/features/quickinfo.js +192 -0
- package/dist/features/quickinfo.js.map +1 -0
- package/dist/formatters/tooltip.d.ts +3 -0
- package/dist/formatters/tooltip.d.ts.map +1 -0
- package/dist/formatters/tooltip.js +64 -0
- package/dist/formatters/tooltip.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,628 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveEntities = resolveEntities;
|
|
4
|
+
exports.resolveCollections = resolveCollections;
|
|
5
|
+
exports.extractStringLiteral = extractStringLiteral;
|
|
6
|
+
exports.extractNumberLiteral = extractNumberLiteral;
|
|
7
|
+
exports.extractLiteralValue = extractLiteralValue;
|
|
8
|
+
exports.extractStringArray = extractStringArray;
|
|
9
|
+
exports.extractObjectLiteral = extractObjectLiteral;
|
|
10
|
+
function resolveEntities(ts, sourceFile, program) {
|
|
11
|
+
// First pass: collect variable declarations and their initializers for reference tracing
|
|
12
|
+
const varDecls = new Map();
|
|
13
|
+
collectVarDecls(ts, sourceFile, varDecls);
|
|
14
|
+
// Second pass: find Entity.make() calls (partial — no schema yet)
|
|
15
|
+
const partials = [];
|
|
16
|
+
ts.forEachChild(sourceFile, function visit(node) {
|
|
17
|
+
if (ts.isVariableStatement(node)) {
|
|
18
|
+
for (const decl of node.declarationList.declarations) {
|
|
19
|
+
if (decl.initializer && ts.isIdentifier(decl.name)) {
|
|
20
|
+
const partial = tryResolveEntityMake(ts, decl.name.text, decl.initializer);
|
|
21
|
+
if (partial)
|
|
22
|
+
partials.push(partial);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
ts.forEachChild(node, visit);
|
|
27
|
+
});
|
|
28
|
+
if (partials.length === 0)
|
|
29
|
+
return [];
|
|
30
|
+
// Third pass: find Table.make() calls and resolve schemas for registered entities
|
|
31
|
+
const entitySchemas = resolveEntitySchemas(ts, sourceFile, varDecls, program);
|
|
32
|
+
// Combine partials with resolved schemas
|
|
33
|
+
const entities = [];
|
|
34
|
+
for (const partial of partials) {
|
|
35
|
+
const schema = entitySchemas.get(partial.varName);
|
|
36
|
+
if (!schema)
|
|
37
|
+
continue;
|
|
38
|
+
entities.push({ ...partial, variableName: partial.varName, schema });
|
|
39
|
+
}
|
|
40
|
+
return entities;
|
|
41
|
+
}
|
|
42
|
+
function collectVarDecls(ts, sourceFile, out) {
|
|
43
|
+
ts.forEachChild(sourceFile, function visit(node) {
|
|
44
|
+
if (ts.isVariableStatement(node)) {
|
|
45
|
+
for (const decl of node.declarationList.declarations) {
|
|
46
|
+
if (ts.isIdentifier(decl.name) && decl.initializer) {
|
|
47
|
+
out.set(decl.name.text, decl.initializer);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
ts.forEachChild(node, visit);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve a variable reference to its initializer expression.
|
|
56
|
+
* Tries same-file varDecls first, then cross-file via TypeChecker.
|
|
57
|
+
*/
|
|
58
|
+
function resolveVariable(ts, expr, varDecls, program) {
|
|
59
|
+
if (!ts.isIdentifier(expr))
|
|
60
|
+
return expr;
|
|
61
|
+
// Try local (same-file) first
|
|
62
|
+
const local = varDecls.get(expr.text);
|
|
63
|
+
if (local)
|
|
64
|
+
return local;
|
|
65
|
+
// Try cross-file via TypeChecker
|
|
66
|
+
if (!program)
|
|
67
|
+
return expr;
|
|
68
|
+
const checker = program.getTypeChecker();
|
|
69
|
+
const symbol = checker.getSymbolAtLocation(expr);
|
|
70
|
+
if (!symbol)
|
|
71
|
+
return expr;
|
|
72
|
+
// Follow alias chain (imports, re-exports, barrel exports)
|
|
73
|
+
const resolved = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;
|
|
74
|
+
const decls = resolved.getDeclarations();
|
|
75
|
+
if (!decls)
|
|
76
|
+
return expr;
|
|
77
|
+
for (const decl of decls) {
|
|
78
|
+
if (ts.isVariableDeclaration(decl) && decl.initializer) {
|
|
79
|
+
return decl.initializer;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return expr;
|
|
83
|
+
}
|
|
84
|
+
function tryResolveEntityMake(ts, varName, expr) {
|
|
85
|
+
// Match: Entity.make({ ... })
|
|
86
|
+
if (!ts.isCallExpression(expr))
|
|
87
|
+
return undefined;
|
|
88
|
+
const callee = expr.expression;
|
|
89
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
90
|
+
return undefined;
|
|
91
|
+
if (callee.name.text !== "make")
|
|
92
|
+
return undefined;
|
|
93
|
+
// Check if the target is "Entity" (imported namespace or destructured import)
|
|
94
|
+
const target = callee.expression;
|
|
95
|
+
if (!ts.isIdentifier(target))
|
|
96
|
+
return undefined;
|
|
97
|
+
if (target.text !== "Entity")
|
|
98
|
+
return undefined;
|
|
99
|
+
const args = expr.arguments;
|
|
100
|
+
if (args.length < 1)
|
|
101
|
+
return undefined;
|
|
102
|
+
const configArg = args[0];
|
|
103
|
+
if (!ts.isObjectLiteralExpression(configArg))
|
|
104
|
+
return undefined;
|
|
105
|
+
return resolveEntityConfig(ts, varName, configArg);
|
|
106
|
+
}
|
|
107
|
+
function resolveEntityConfig(ts, varName, config) {
|
|
108
|
+
let entityType;
|
|
109
|
+
let indexes;
|
|
110
|
+
let timestamps = false;
|
|
111
|
+
let versioned = false;
|
|
112
|
+
let softDelete = false;
|
|
113
|
+
let unique;
|
|
114
|
+
let primaryKeyDef;
|
|
115
|
+
let gsiIndexes;
|
|
116
|
+
for (const prop of config.properties) {
|
|
117
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
118
|
+
continue;
|
|
119
|
+
const name = prop.name.text;
|
|
120
|
+
switch (name) {
|
|
121
|
+
case "entityType":
|
|
122
|
+
entityType = extractStringLiteral(ts, prop.initializer);
|
|
123
|
+
break;
|
|
124
|
+
case "indexes":
|
|
125
|
+
// Try new GsiConfig format first, fall back to old IndexDefinition format
|
|
126
|
+
gsiIndexes = resolveGsiIndexes(ts, prop.initializer) ?? resolveIndexes(ts, prop.initializer);
|
|
127
|
+
break;
|
|
128
|
+
case "primaryKey": {
|
|
129
|
+
primaryKeyDef = resolveIndexDefinition(ts, prop.initializer);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
case "timestamps":
|
|
133
|
+
timestamps = extractBoolOrObject(ts, prop.initializer);
|
|
134
|
+
break;
|
|
135
|
+
case "versioned":
|
|
136
|
+
versioned = extractBoolOrObject(ts, prop.initializer);
|
|
137
|
+
break;
|
|
138
|
+
case "softDelete":
|
|
139
|
+
softDelete = extractBoolOrObject(ts, prop.initializer);
|
|
140
|
+
break;
|
|
141
|
+
case "unique":
|
|
142
|
+
unique = extractObjectLiteral(ts, prop.initializer) ?? undefined;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Merge primaryKey + indexes (new API) or use indexes alone (old API)
|
|
147
|
+
if (primaryKeyDef) {
|
|
148
|
+
indexes = { primary: primaryKeyDef, ...gsiIndexes };
|
|
149
|
+
}
|
|
150
|
+
else if (gsiIndexes) {
|
|
151
|
+
indexes = gsiIndexes;
|
|
152
|
+
}
|
|
153
|
+
if (!entityType || !indexes)
|
|
154
|
+
return undefined;
|
|
155
|
+
return { varName, entityType, indexes, timestamps, versioned, softDelete, unique };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Scan for Table.make({ schema, entities: { ... } }) calls and build a map
|
|
159
|
+
* from entity variable name → SchemaConfig.
|
|
160
|
+
*/
|
|
161
|
+
function resolveEntitySchemas(ts, sourceFile, varDecls, program) {
|
|
162
|
+
const result = new Map();
|
|
163
|
+
ts.forEachChild(sourceFile, function visit(node) {
|
|
164
|
+
if (ts.isVariableStatement(node)) {
|
|
165
|
+
for (const decl of node.declarationList.declarations) {
|
|
166
|
+
if (!decl.initializer)
|
|
167
|
+
continue;
|
|
168
|
+
const tableInfo = tryResolveTableMake(ts, decl.initializer, varDecls, program);
|
|
169
|
+
if (tableInfo) {
|
|
170
|
+
for (const entityName of tableInfo.entityNames) {
|
|
171
|
+
result.set(entityName, tableInfo.schema);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
ts.forEachChild(node, visit);
|
|
177
|
+
});
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
function tryResolveTableMake(ts, expr, varDecls, program) {
|
|
181
|
+
// Match: Table.make({ schema: <schemaExpr>, entities: { ... } })
|
|
182
|
+
if (!ts.isCallExpression(expr))
|
|
183
|
+
return undefined;
|
|
184
|
+
const callee = expr.expression;
|
|
185
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
186
|
+
return undefined;
|
|
187
|
+
if (callee.name.text !== "make")
|
|
188
|
+
return undefined;
|
|
189
|
+
const target = callee.expression;
|
|
190
|
+
if (!ts.isIdentifier(target) || target.text !== "Table")
|
|
191
|
+
return undefined;
|
|
192
|
+
const args = expr.arguments;
|
|
193
|
+
if (args.length < 1)
|
|
194
|
+
return undefined;
|
|
195
|
+
// New signature: Table.make({ schema, entities }) — first arg is string name
|
|
196
|
+
// Legacy signature: Table.make({ schema, entities }) — first arg is config object
|
|
197
|
+
let tableConfig;
|
|
198
|
+
if (args.length >= 2 && ts.isStringLiteral(args[0]) && ts.isObjectLiteralExpression(args[1])) {
|
|
199
|
+
tableConfig = args[1];
|
|
200
|
+
}
|
|
201
|
+
else if (ts.isObjectLiteralExpression(args[0])) {
|
|
202
|
+
tableConfig = args[0];
|
|
203
|
+
}
|
|
204
|
+
if (!tableConfig)
|
|
205
|
+
return undefined;
|
|
206
|
+
let schemaExpr;
|
|
207
|
+
let entitiesExpr;
|
|
208
|
+
for (const prop of tableConfig.properties) {
|
|
209
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
210
|
+
continue;
|
|
211
|
+
if (prop.name.text === "schema")
|
|
212
|
+
schemaExpr = prop.initializer;
|
|
213
|
+
if (prop.name.text === "entities")
|
|
214
|
+
entitiesExpr = prop.initializer;
|
|
215
|
+
}
|
|
216
|
+
if (!schemaExpr || !entitiesExpr)
|
|
217
|
+
return undefined;
|
|
218
|
+
// Resolve schema
|
|
219
|
+
const schemaInit = resolveVariable(ts, schemaExpr, varDecls, program);
|
|
220
|
+
const schema = resolveDynamoSchema(ts, schemaInit);
|
|
221
|
+
if (!schema)
|
|
222
|
+
return undefined;
|
|
223
|
+
// Extract entity names from the entities record
|
|
224
|
+
const entityNames = [];
|
|
225
|
+
if (ts.isObjectLiteralExpression(entitiesExpr)) {
|
|
226
|
+
for (const prop of entitiesExpr.properties) {
|
|
227
|
+
if (ts.isShorthandPropertyAssignment(prop)) {
|
|
228
|
+
// { Todos } — shorthand, variable name = property name
|
|
229
|
+
entityNames.push(prop.name.text);
|
|
230
|
+
}
|
|
231
|
+
else if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {
|
|
232
|
+
// { Todos: TodoEntity } — the key is the client accessor, value is the entity variable
|
|
233
|
+
if (ts.isIdentifier(prop.initializer)) {
|
|
234
|
+
entityNames.push(prop.initializer.text);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return entityNames.length > 0 ? { schema, entityNames } : undefined;
|
|
240
|
+
}
|
|
241
|
+
function resolveDynamoSchema(ts, expr) {
|
|
242
|
+
// Match: DynamoSchema.make({ name: "...", version: N, casing?: "..." })
|
|
243
|
+
if (!ts.isCallExpression(expr))
|
|
244
|
+
return undefined;
|
|
245
|
+
const callee = expr.expression;
|
|
246
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
247
|
+
return undefined;
|
|
248
|
+
if (callee.name.text !== "make")
|
|
249
|
+
return undefined;
|
|
250
|
+
const args = expr.arguments;
|
|
251
|
+
if (args.length < 1)
|
|
252
|
+
return undefined;
|
|
253
|
+
const configObj = args[0];
|
|
254
|
+
if (!ts.isObjectLiteralExpression(configObj))
|
|
255
|
+
return undefined;
|
|
256
|
+
let name;
|
|
257
|
+
let version;
|
|
258
|
+
let casing = "lowercase";
|
|
259
|
+
for (const prop of configObj.properties) {
|
|
260
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
261
|
+
continue;
|
|
262
|
+
switch (prop.name.text) {
|
|
263
|
+
case "name":
|
|
264
|
+
name = extractStringLiteral(ts, prop.initializer);
|
|
265
|
+
break;
|
|
266
|
+
case "version":
|
|
267
|
+
version = extractNumberLiteral(ts, prop.initializer);
|
|
268
|
+
break;
|
|
269
|
+
case "casing":
|
|
270
|
+
casing = extractStringLiteral(ts, prop.initializer) ?? "lowercase";
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (!name || version === undefined)
|
|
275
|
+
return undefined;
|
|
276
|
+
return { name, version, casing };
|
|
277
|
+
}
|
|
278
|
+
function resolveIndexes(ts, expr) {
|
|
279
|
+
if (!ts.isObjectLiteralExpression(expr))
|
|
280
|
+
return undefined;
|
|
281
|
+
const result = {};
|
|
282
|
+
for (const prop of expr.properties) {
|
|
283
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
284
|
+
continue;
|
|
285
|
+
const indexDef = resolveIndexDefinition(ts, prop.initializer);
|
|
286
|
+
if (indexDef) {
|
|
287
|
+
result[prop.name.text] = indexDef;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Parse indexes in GsiConfig format:
|
|
294
|
+
* { byRole: { name: "gsi1", pk: { field, composite }, sk: { field, composite }, collection? } }
|
|
295
|
+
* Normalizes to IndexDefinition format.
|
|
296
|
+
*/
|
|
297
|
+
function resolveGsiIndexes(ts, expr) {
|
|
298
|
+
if (!ts.isObjectLiteralExpression(expr))
|
|
299
|
+
return undefined;
|
|
300
|
+
const result = {};
|
|
301
|
+
for (const prop of expr.properties) {
|
|
302
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
303
|
+
continue;
|
|
304
|
+
const indexDef = resolveGsiConfig(ts, prop.initializer);
|
|
305
|
+
if (indexDef) {
|
|
306
|
+
result[prop.name.text] = indexDef;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Parse a single GsiConfig:
|
|
313
|
+
* { name: "gsi1", pk: { field: "gsi1pk", composite: [...] }, sk: { field: "gsi1sk", composite: [...] }, collection? }
|
|
314
|
+
* Returns normalized IndexDefinition.
|
|
315
|
+
*/
|
|
316
|
+
function resolveGsiConfig(ts, expr) {
|
|
317
|
+
if (!ts.isObjectLiteralExpression(expr))
|
|
318
|
+
return undefined;
|
|
319
|
+
let gsiName;
|
|
320
|
+
let pk;
|
|
321
|
+
let sk;
|
|
322
|
+
let collection;
|
|
323
|
+
let type;
|
|
324
|
+
for (const prop of expr.properties) {
|
|
325
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
326
|
+
continue;
|
|
327
|
+
switch (prop.name.text) {
|
|
328
|
+
case "name":
|
|
329
|
+
gsiName = extractStringLiteral(ts, prop.initializer);
|
|
330
|
+
break;
|
|
331
|
+
case "pk":
|
|
332
|
+
pk = resolveKeyPart(ts, prop.initializer);
|
|
333
|
+
break;
|
|
334
|
+
case "sk":
|
|
335
|
+
sk = resolveKeyPart(ts, prop.initializer);
|
|
336
|
+
break;
|
|
337
|
+
case "collection":
|
|
338
|
+
collection = extractStringOrStringArray(ts, prop.initializer);
|
|
339
|
+
break;
|
|
340
|
+
case "type":
|
|
341
|
+
type = extractStringLiteral(ts, prop.initializer);
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (!gsiName || !pk || !sk)
|
|
346
|
+
return undefined;
|
|
347
|
+
return {
|
|
348
|
+
index: gsiName,
|
|
349
|
+
collection,
|
|
350
|
+
type: type ?? "isolated",
|
|
351
|
+
pk,
|
|
352
|
+
sk,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
function resolveIndexDefinition(ts, expr) {
|
|
356
|
+
if (!ts.isObjectLiteralExpression(expr))
|
|
357
|
+
return undefined;
|
|
358
|
+
let index;
|
|
359
|
+
let collection;
|
|
360
|
+
let type;
|
|
361
|
+
let pk;
|
|
362
|
+
let sk;
|
|
363
|
+
let casing;
|
|
364
|
+
for (const prop of expr.properties) {
|
|
365
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
366
|
+
continue;
|
|
367
|
+
switch (prop.name.text) {
|
|
368
|
+
case "index":
|
|
369
|
+
index = extractStringLiteral(ts, prop.initializer);
|
|
370
|
+
break;
|
|
371
|
+
case "collection":
|
|
372
|
+
collection = extractStringOrStringArray(ts, prop.initializer);
|
|
373
|
+
break;
|
|
374
|
+
case "type":
|
|
375
|
+
type = extractStringLiteral(ts, prop.initializer);
|
|
376
|
+
break;
|
|
377
|
+
case "pk":
|
|
378
|
+
pk = resolveKeyPart(ts, prop.initializer);
|
|
379
|
+
break;
|
|
380
|
+
case "sk":
|
|
381
|
+
sk = resolveKeyPart(ts, prop.initializer);
|
|
382
|
+
break;
|
|
383
|
+
case "casing":
|
|
384
|
+
casing = extractStringLiteral(ts, prop.initializer);
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (!pk || !sk)
|
|
389
|
+
return undefined;
|
|
390
|
+
return { index, collection, type, pk, sk, casing };
|
|
391
|
+
}
|
|
392
|
+
function resolveKeyPart(ts, expr) {
|
|
393
|
+
if (!ts.isObjectLiteralExpression(expr))
|
|
394
|
+
return undefined;
|
|
395
|
+
let field;
|
|
396
|
+
let composite;
|
|
397
|
+
for (const prop of expr.properties) {
|
|
398
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
399
|
+
continue;
|
|
400
|
+
switch (prop.name.text) {
|
|
401
|
+
case "field":
|
|
402
|
+
field = extractStringLiteral(ts, prop.initializer);
|
|
403
|
+
break;
|
|
404
|
+
case "composite":
|
|
405
|
+
composite = extractStringArray(ts, prop.initializer);
|
|
406
|
+
break;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
if (!field || !composite)
|
|
410
|
+
return undefined;
|
|
411
|
+
return { field, composite };
|
|
412
|
+
}
|
|
413
|
+
// --- Extraction helpers ---
|
|
414
|
+
function extractStringLiteral(ts, expr) {
|
|
415
|
+
if (ts.isStringLiteral(expr) || ts.isNoSubstitutionTemplateLiteral(expr)) {
|
|
416
|
+
return expr.text;
|
|
417
|
+
}
|
|
418
|
+
return undefined;
|
|
419
|
+
}
|
|
420
|
+
function extractNumberLiteral(ts, expr) {
|
|
421
|
+
if (ts.isNumericLiteral(expr)) {
|
|
422
|
+
return Number(expr.text);
|
|
423
|
+
}
|
|
424
|
+
// Handle negative: -N
|
|
425
|
+
if (ts.isPrefixUnaryExpression(expr) &&
|
|
426
|
+
expr.operator === ts.SyntaxKind.MinusToken &&
|
|
427
|
+
ts.isNumericLiteral(expr.operand)) {
|
|
428
|
+
return -Number(expr.operand.text);
|
|
429
|
+
}
|
|
430
|
+
return undefined;
|
|
431
|
+
}
|
|
432
|
+
function extractBoolOrObject(ts, expr) {
|
|
433
|
+
if (expr.kind === ts.SyntaxKind.TrueKeyword)
|
|
434
|
+
return true;
|
|
435
|
+
if (expr.kind === ts.SyntaxKind.FalseKeyword)
|
|
436
|
+
return false;
|
|
437
|
+
if (ts.isObjectLiteralExpression(expr)) {
|
|
438
|
+
return extractObjectLiteral(ts, expr) ?? true;
|
|
439
|
+
}
|
|
440
|
+
return false;
|
|
441
|
+
}
|
|
442
|
+
function extractObjectLiteral(ts, expr) {
|
|
443
|
+
if (!ts.isObjectLiteralExpression(expr))
|
|
444
|
+
return undefined;
|
|
445
|
+
const result = {};
|
|
446
|
+
for (const prop of expr.properties) {
|
|
447
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
448
|
+
continue;
|
|
449
|
+
result[prop.name.text] = extractLiteralValue(ts, prop.initializer);
|
|
450
|
+
}
|
|
451
|
+
return result;
|
|
452
|
+
}
|
|
453
|
+
function extractLiteralValue(ts, expr) {
|
|
454
|
+
if (ts.isStringLiteral(expr) || ts.isNoSubstitutionTemplateLiteral(expr))
|
|
455
|
+
return expr.text;
|
|
456
|
+
if (ts.isNumericLiteral(expr))
|
|
457
|
+
return Number(expr.text);
|
|
458
|
+
if (expr.kind === ts.SyntaxKind.TrueKeyword)
|
|
459
|
+
return true;
|
|
460
|
+
if (expr.kind === ts.SyntaxKind.FalseKeyword)
|
|
461
|
+
return false;
|
|
462
|
+
if (expr.kind === ts.SyntaxKind.NullKeyword)
|
|
463
|
+
return null;
|
|
464
|
+
if (ts.isArrayLiteralExpression(expr))
|
|
465
|
+
return expr.elements.map((e) => extractLiteralValue(ts, e));
|
|
466
|
+
if (ts.isObjectLiteralExpression(expr))
|
|
467
|
+
return extractObjectLiteral(ts, expr);
|
|
468
|
+
return undefined;
|
|
469
|
+
}
|
|
470
|
+
function extractStringArray(ts, expr) {
|
|
471
|
+
if (!ts.isArrayLiteralExpression(expr))
|
|
472
|
+
return undefined;
|
|
473
|
+
const result = [];
|
|
474
|
+
for (const el of expr.elements) {
|
|
475
|
+
const s = extractStringLiteral(ts, el);
|
|
476
|
+
if (s === undefined)
|
|
477
|
+
return undefined;
|
|
478
|
+
result.push(s);
|
|
479
|
+
}
|
|
480
|
+
return result;
|
|
481
|
+
}
|
|
482
|
+
function extractStringOrStringArray(ts, expr) {
|
|
483
|
+
const str = extractStringLiteral(ts, expr);
|
|
484
|
+
if (str !== undefined)
|
|
485
|
+
return str;
|
|
486
|
+
return extractStringArray(ts, expr);
|
|
487
|
+
}
|
|
488
|
+
// ---------------------------------------------------------------------------
|
|
489
|
+
// Collections.make() resolution
|
|
490
|
+
// ---------------------------------------------------------------------------
|
|
491
|
+
/**
|
|
492
|
+
* Resolve all Collections.make() calls in a source file.
|
|
493
|
+
*/
|
|
494
|
+
function resolveCollections(ts, sourceFile) {
|
|
495
|
+
const collections = [];
|
|
496
|
+
ts.forEachChild(sourceFile, function visit(node) {
|
|
497
|
+
if (ts.isVariableStatement(node)) {
|
|
498
|
+
for (const decl of node.declarationList.declarations) {
|
|
499
|
+
if (decl.initializer && ts.isIdentifier(decl.name)) {
|
|
500
|
+
const coll = tryResolveCollectionMake(ts, decl.name.text, decl.initializer);
|
|
501
|
+
if (coll)
|
|
502
|
+
collections.push(coll);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
ts.forEachChild(node, visit);
|
|
507
|
+
});
|
|
508
|
+
return collections;
|
|
509
|
+
}
|
|
510
|
+
function tryResolveCollectionMake(ts, varName, expr) {
|
|
511
|
+
// Match: Collections.make({ name, index: { name, pk, sk }, composite, members })
|
|
512
|
+
if (!ts.isCallExpression(expr))
|
|
513
|
+
return undefined;
|
|
514
|
+
const callee = expr.expression;
|
|
515
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
516
|
+
return undefined;
|
|
517
|
+
if (callee.name.text !== "make")
|
|
518
|
+
return undefined;
|
|
519
|
+
const target = callee.expression;
|
|
520
|
+
if (!ts.isIdentifier(target) || target.text !== "Collections")
|
|
521
|
+
return undefined;
|
|
522
|
+
const args = expr.arguments;
|
|
523
|
+
if (args.length < 1)
|
|
524
|
+
return undefined;
|
|
525
|
+
const configArg = args[0];
|
|
526
|
+
if (!ts.isObjectLiteralExpression(configArg))
|
|
527
|
+
return undefined;
|
|
528
|
+
let collectionName;
|
|
529
|
+
let indexName;
|
|
530
|
+
let pkField;
|
|
531
|
+
let skField;
|
|
532
|
+
let type = "clustered";
|
|
533
|
+
let composite;
|
|
534
|
+
let membersExpr;
|
|
535
|
+
for (const prop of configArg.properties) {
|
|
536
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
537
|
+
continue;
|
|
538
|
+
switch (prop.name.text) {
|
|
539
|
+
case "name":
|
|
540
|
+
collectionName = extractStringLiteral(ts, prop.initializer);
|
|
541
|
+
break;
|
|
542
|
+
case "index": {
|
|
543
|
+
// index: { name: "gsi3", pk: "gsi3pk", sk: "gsi3sk" }
|
|
544
|
+
if (ts.isObjectLiteralExpression(prop.initializer)) {
|
|
545
|
+
for (const idxProp of prop.initializer.properties) {
|
|
546
|
+
if (!ts.isPropertyAssignment(idxProp) || !ts.isIdentifier(idxProp.name))
|
|
547
|
+
continue;
|
|
548
|
+
switch (idxProp.name.text) {
|
|
549
|
+
case "name":
|
|
550
|
+
indexName = extractStringLiteral(ts, idxProp.initializer);
|
|
551
|
+
break;
|
|
552
|
+
case "pk":
|
|
553
|
+
pkField = extractStringLiteral(ts, idxProp.initializer);
|
|
554
|
+
break;
|
|
555
|
+
case "sk":
|
|
556
|
+
skField = extractStringLiteral(ts, idxProp.initializer);
|
|
557
|
+
break;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
break;
|
|
562
|
+
}
|
|
563
|
+
case "type":
|
|
564
|
+
type =
|
|
565
|
+
extractStringLiteral(ts, prop.initializer) ?? "clustered";
|
|
566
|
+
break;
|
|
567
|
+
case "composite":
|
|
568
|
+
composite = extractStringArray(ts, prop.initializer);
|
|
569
|
+
break;
|
|
570
|
+
case "members":
|
|
571
|
+
membersExpr = prop.initializer;
|
|
572
|
+
break;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
if (!collectionName || !indexName || !pkField || !skField || !composite || !membersExpr)
|
|
576
|
+
return undefined;
|
|
577
|
+
// Parse members: { Name: Collections.member(Entity, [...skComposites]) }
|
|
578
|
+
const members = {};
|
|
579
|
+
if (ts.isObjectLiteralExpression(membersExpr)) {
|
|
580
|
+
for (const prop of membersExpr.properties) {
|
|
581
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
582
|
+
continue;
|
|
583
|
+
const memberName = prop.name.text;
|
|
584
|
+
const member = tryResolveCollectionMember(ts, prop.initializer);
|
|
585
|
+
if (member)
|
|
586
|
+
members[memberName] = member;
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
if (Object.keys(members).length === 0)
|
|
590
|
+
return undefined;
|
|
591
|
+
return {
|
|
592
|
+
variableName: varName,
|
|
593
|
+
collectionName,
|
|
594
|
+
index: indexName,
|
|
595
|
+
type,
|
|
596
|
+
pk: { field: pkField, composite: [...composite] },
|
|
597
|
+
sk: { field: skField },
|
|
598
|
+
members,
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
function tryResolveCollectionMember(ts, expr) {
|
|
602
|
+
// Match: Collections.member(EntityRef, [...skComposites])
|
|
603
|
+
if (!ts.isCallExpression(expr))
|
|
604
|
+
return undefined;
|
|
605
|
+
const callee = expr.expression;
|
|
606
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
607
|
+
return undefined;
|
|
608
|
+
if (callee.name.text !== "member")
|
|
609
|
+
return undefined;
|
|
610
|
+
const args = expr.arguments;
|
|
611
|
+
if (args.length < 2)
|
|
612
|
+
return undefined;
|
|
613
|
+
// First arg: entity reference (identifier)
|
|
614
|
+
const entityArg = args[0];
|
|
615
|
+
let entityVariableName;
|
|
616
|
+
if (ts.isIdentifier(entityArg)) {
|
|
617
|
+
entityVariableName = entityArg.text;
|
|
618
|
+
}
|
|
619
|
+
if (!entityVariableName)
|
|
620
|
+
return undefined;
|
|
621
|
+
// Second arg: string array of SK composites
|
|
622
|
+
const compositeArg = args[1];
|
|
623
|
+
const composite = extractStringArray(ts, compositeArg);
|
|
624
|
+
if (!composite)
|
|
625
|
+
return undefined;
|
|
626
|
+
return { entityVariableName, sk: { composite } };
|
|
627
|
+
}
|
|
628
|
+
//# sourceMappingURL=EntityResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityResolver.js","sourceRoot":"","sources":["../../src/core/EntityResolver.ts"],"names":[],"mappings":"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"}
|