@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,530 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DiagnosticCode = void 0;
|
|
4
|
+
exports.getDiagnostics = getDiagnostics;
|
|
5
|
+
const EntityResolver_1 = require("../core/EntityResolver");
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Error codes — structured identifiers for each diagnostic rule
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
exports.DiagnosticCode = {
|
|
10
|
+
/** Entity.make: primary key must have at least one composite attribute */
|
|
11
|
+
EMPTY_PRIMARY_KEY: 9001,
|
|
12
|
+
/** Entity.make: composite attribute references a field not in the model */
|
|
13
|
+
UNKNOWN_COMPOSITE_ATTR: 9002,
|
|
14
|
+
/** Entity.make: GSI index must use new format { name, pk: { field, composite }, sk: { field, composite } } */
|
|
15
|
+
INVALID_GSI_FORMAT: 9003,
|
|
16
|
+
/** Query accessor: SK composites violate prefix ordering */
|
|
17
|
+
SK_PREFIX_VIOLATION: 9004,
|
|
18
|
+
/** Query accessor: SK composite used in .filter() instead of query input */
|
|
19
|
+
SK_IN_FILTER: 9005,
|
|
20
|
+
/** Query accessor: unknown property in query input */
|
|
21
|
+
UNKNOWN_QUERY_PROPERTY: 9006,
|
|
22
|
+
/** DynamoModel.configure: field rename target collides with existing model field */
|
|
23
|
+
FIELD_RENAME_COLLISION: 9007,
|
|
24
|
+
};
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Main diagnostic entry point
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
function getDiagnostics(typescript, info, fileName, prior) {
|
|
29
|
+
try {
|
|
30
|
+
const program = info.languageService.getProgram();
|
|
31
|
+
if (!program)
|
|
32
|
+
return prior;
|
|
33
|
+
const sourceFile = program.getSourceFile(fileName);
|
|
34
|
+
if (!sourceFile)
|
|
35
|
+
return prior;
|
|
36
|
+
const diagnostics = [...prior];
|
|
37
|
+
// 1. Validate Entity.make() calls
|
|
38
|
+
diagnostics.push(...validateEntityMakeCalls(typescript, sourceFile, program));
|
|
39
|
+
// 2. Validate DynamoModel.configure() field rename collisions
|
|
40
|
+
diagnostics.push(...validateConfigureCalls(typescript, sourceFile, program));
|
|
41
|
+
// 3. Validate query accessor calls
|
|
42
|
+
const entities = (0, EntityResolver_1.resolveEntities)(typescript, sourceFile, program);
|
|
43
|
+
diagnostics.push(...validateQueryAccessorCalls(typescript, sourceFile, entities));
|
|
44
|
+
return diagnostics;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return prior;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// DynamoModel.configure() field rename collision validation
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
function validateConfigureCalls(ts, sourceFile, program) {
|
|
54
|
+
const diagnostics = [];
|
|
55
|
+
const checker = program.getTypeChecker();
|
|
56
|
+
ts.forEachChild(sourceFile, function visit(node) {
|
|
57
|
+
if (ts.isCallExpression(node)) {
|
|
58
|
+
const callee = node.expression;
|
|
59
|
+
// Match DynamoModel.configure(Model, { ... })
|
|
60
|
+
if (ts.isPropertyAccessExpression(callee) &&
|
|
61
|
+
callee.name.text === "configure" &&
|
|
62
|
+
ts.isIdentifier(callee.expression) &&
|
|
63
|
+
callee.expression.text === "DynamoModel" &&
|
|
64
|
+
node.arguments.length >= 2) {
|
|
65
|
+
const modelArg = node.arguments[0];
|
|
66
|
+
const configArg = node.arguments[1];
|
|
67
|
+
// Extract model field names from the first argument's type
|
|
68
|
+
const modelType = checker.getTypeAtLocation(modelArg);
|
|
69
|
+
const modelFields = new Set();
|
|
70
|
+
const typeSymbol = modelType.getProperty("Type");
|
|
71
|
+
if (typeSymbol) {
|
|
72
|
+
const typeType = checker.getTypeOfSymbolAtLocation(typeSymbol, modelArg);
|
|
73
|
+
for (const p of typeType.getProperties()) {
|
|
74
|
+
modelFields.add(p.name);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (modelFields.size === 0) {
|
|
78
|
+
// Fallback: try direct properties
|
|
79
|
+
for (const p of modelType.getProperties()) {
|
|
80
|
+
if (!p.name.startsWith("_") && p.name !== "constructor") {
|
|
81
|
+
modelFields.add(p.name);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Walk the config object for { fieldName: { field: "targetName" } }
|
|
86
|
+
if (ts.isObjectLiteralExpression(configArg) && modelFields.size > 0) {
|
|
87
|
+
for (const prop of configArg.properties) {
|
|
88
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
89
|
+
continue;
|
|
90
|
+
const sourceField = prop.name.text;
|
|
91
|
+
if (!ts.isObjectLiteralExpression(prop.initializer))
|
|
92
|
+
continue;
|
|
93
|
+
for (const innerProp of prop.initializer.properties) {
|
|
94
|
+
if (ts.isPropertyAssignment(innerProp) &&
|
|
95
|
+
ts.isIdentifier(innerProp.name) &&
|
|
96
|
+
innerProp.name.text === "field" &&
|
|
97
|
+
ts.isStringLiteral(innerProp.initializer)) {
|
|
98
|
+
const targetField = innerProp.initializer.text;
|
|
99
|
+
// Check if target field name collides with another model field
|
|
100
|
+
if (targetField !== sourceField && modelFields.has(targetField)) {
|
|
101
|
+
diagnostics.push(makeDiagnostic(sourceFile, innerProp.initializer, exports.DiagnosticCode.FIELD_RENAME_COLLISION, `DynamoModel.configure: renaming \`${sourceField}\` to \`${targetField}\` collides with existing model field \`${targetField}\`. This will cause both fields to map to the same DynamoDB attribute.`, ts.DiagnosticCategory.Error));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
ts.forEachChild(node, visit);
|
|
110
|
+
});
|
|
111
|
+
return diagnostics;
|
|
112
|
+
}
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
// Entity.make() validations
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
function validateEntityMakeCalls(ts, sourceFile, program) {
|
|
117
|
+
const diagnostics = [];
|
|
118
|
+
ts.forEachChild(sourceFile, function visit(node) {
|
|
119
|
+
if (ts.isVariableStatement(node)) {
|
|
120
|
+
for (const decl of node.declarationList.declarations) {
|
|
121
|
+
if (decl.initializer && ts.isIdentifier(decl.name)) {
|
|
122
|
+
const diags = tryValidateEntityMake(ts, sourceFile, decl.initializer, program);
|
|
123
|
+
diagnostics.push(...diags);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
ts.forEachChild(node, visit);
|
|
128
|
+
});
|
|
129
|
+
return diagnostics;
|
|
130
|
+
}
|
|
131
|
+
function tryValidateEntityMake(ts, sourceFile, expr, program) {
|
|
132
|
+
if (!ts.isCallExpression(expr))
|
|
133
|
+
return [];
|
|
134
|
+
const callee = expr.expression;
|
|
135
|
+
if (!ts.isPropertyAccessExpression(callee))
|
|
136
|
+
return [];
|
|
137
|
+
if (callee.name.text !== "make")
|
|
138
|
+
return [];
|
|
139
|
+
const target = callee.expression;
|
|
140
|
+
if (!ts.isIdentifier(target) || target.text !== "Entity")
|
|
141
|
+
return [];
|
|
142
|
+
const args = expr.arguments;
|
|
143
|
+
if (args.length < 1)
|
|
144
|
+
return [];
|
|
145
|
+
const configArg = args[0];
|
|
146
|
+
if (!ts.isObjectLiteralExpression(configArg))
|
|
147
|
+
return [];
|
|
148
|
+
const diagnostics = [];
|
|
149
|
+
// Extract model field names via TypeChecker
|
|
150
|
+
const modelFields = extractModelFields(ts, configArg, program);
|
|
151
|
+
// Extract entityType for error messages
|
|
152
|
+
let entityType = "unknown";
|
|
153
|
+
let primaryKeyNode;
|
|
154
|
+
let indexesNode;
|
|
155
|
+
for (const prop of configArg.properties) {
|
|
156
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
157
|
+
continue;
|
|
158
|
+
switch (prop.name.text) {
|
|
159
|
+
case "entityType":
|
|
160
|
+
entityType = (0, EntityResolver_1.extractStringLiteral)(ts, prop.initializer) ?? "unknown";
|
|
161
|
+
break;
|
|
162
|
+
case "primaryKey":
|
|
163
|
+
primaryKeyNode = prop.initializer;
|
|
164
|
+
break;
|
|
165
|
+
case "indexes":
|
|
166
|
+
indexesNode = prop.initializer;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Validate primary key
|
|
171
|
+
if (primaryKeyNode && ts.isObjectLiteralExpression(primaryKeyNode)) {
|
|
172
|
+
diagnostics.push(...validatePrimaryKey(ts, sourceFile, entityType, primaryKeyNode, modelFields));
|
|
173
|
+
}
|
|
174
|
+
// Validate GSI indexes
|
|
175
|
+
if (indexesNode && ts.isObjectLiteralExpression(indexesNode)) {
|
|
176
|
+
diagnostics.push(...validateGsiIndexes(ts, sourceFile, entityType, indexesNode, modelFields));
|
|
177
|
+
}
|
|
178
|
+
return diagnostics;
|
|
179
|
+
}
|
|
180
|
+
function validatePrimaryKey(ts, sourceFile, entityType, pkNode, modelFields) {
|
|
181
|
+
const diagnostics = [];
|
|
182
|
+
let pkComposites = [];
|
|
183
|
+
let skComposites = [];
|
|
184
|
+
let pkCompositeNode;
|
|
185
|
+
let skCompositeNode;
|
|
186
|
+
for (const prop of pkNode.properties) {
|
|
187
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
188
|
+
continue;
|
|
189
|
+
if (prop.name.text === "pk" && ts.isObjectLiteralExpression(prop.initializer)) {
|
|
190
|
+
for (const pkProp of prop.initializer.properties) {
|
|
191
|
+
if (ts.isPropertyAssignment(pkProp) &&
|
|
192
|
+
ts.isIdentifier(pkProp.name) &&
|
|
193
|
+
pkProp.name.text === "composite") {
|
|
194
|
+
pkComposites = (0, EntityResolver_1.extractStringArray)(ts, pkProp.initializer) ?? [];
|
|
195
|
+
pkCompositeNode = pkProp.initializer;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (prop.name.text === "sk" && ts.isObjectLiteralExpression(prop.initializer)) {
|
|
200
|
+
for (const skProp of prop.initializer.properties) {
|
|
201
|
+
if (ts.isPropertyAssignment(skProp) &&
|
|
202
|
+
ts.isIdentifier(skProp.name) &&
|
|
203
|
+
skProp.name.text === "composite") {
|
|
204
|
+
skComposites = (0, EntityResolver_1.extractStringArray)(ts, skProp.initializer) ?? [];
|
|
205
|
+
skCompositeNode = skProp.initializer;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// EDD-9001: Empty primary key
|
|
211
|
+
if (pkComposites.length === 0 && skComposites.length === 0) {
|
|
212
|
+
diagnostics.push(makeDiagnostic(sourceFile, pkNode, exports.DiagnosticCode.EMPTY_PRIMARY_KEY, `Entity \`${entityType}\`: primary key must have at least one composite attribute in \`pk\` or \`sk\`.`, ts.DiagnosticCategory.Error));
|
|
213
|
+
}
|
|
214
|
+
// EDD-9002: Unknown composite attributes
|
|
215
|
+
if (modelFields) {
|
|
216
|
+
for (const attr of pkComposites) {
|
|
217
|
+
if (!modelFields.has(attr)) {
|
|
218
|
+
diagnostics.push(makeDiagnostic(sourceFile, pkCompositeNode ?? pkNode, exports.DiagnosticCode.UNKNOWN_COMPOSITE_ATTR, `Entity \`${entityType}\`: primary key references unknown attribute \`${attr}\`. Valid attributes: ${[...modelFields].map((f) => `\`${f}\``).join(", ")}`, ts.DiagnosticCategory.Error));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
for (const attr of skComposites) {
|
|
222
|
+
if (!modelFields.has(attr)) {
|
|
223
|
+
diagnostics.push(makeDiagnostic(sourceFile, skCompositeNode ?? pkNode, exports.DiagnosticCode.UNKNOWN_COMPOSITE_ATTR, `Entity \`${entityType}\`: primary key references unknown attribute \`${attr}\`. Valid attributes: ${[...modelFields].map((f) => `\`${f}\``).join(", ")}`, ts.DiagnosticCategory.Error));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return diagnostics;
|
|
228
|
+
}
|
|
229
|
+
function validateGsiIndexes(ts, sourceFile, entityType, indexesNode, modelFields) {
|
|
230
|
+
const diagnostics = [];
|
|
231
|
+
for (const prop of indexesNode.properties) {
|
|
232
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
233
|
+
continue;
|
|
234
|
+
const indexName = prop.name.text;
|
|
235
|
+
if (!ts.isObjectLiteralExpression(prop.initializer))
|
|
236
|
+
continue;
|
|
237
|
+
let _nameProp;
|
|
238
|
+
let pkNode;
|
|
239
|
+
let skNode;
|
|
240
|
+
let pkCompositeNode;
|
|
241
|
+
let skCompositeNode;
|
|
242
|
+
let pkCompositeAttrs = [];
|
|
243
|
+
let skCompositeAttrs = [];
|
|
244
|
+
let hasOldIndexProp = false;
|
|
245
|
+
for (const idxProp of prop.initializer.properties) {
|
|
246
|
+
if (!ts.isPropertyAssignment(idxProp) || !ts.isIdentifier(idxProp.name))
|
|
247
|
+
continue;
|
|
248
|
+
switch (idxProp.name.text) {
|
|
249
|
+
case "name":
|
|
250
|
+
_nameProp = idxProp.initializer;
|
|
251
|
+
break;
|
|
252
|
+
case "index":
|
|
253
|
+
// Detect old format: index: { name, pk, sk }
|
|
254
|
+
hasOldIndexProp = true;
|
|
255
|
+
break;
|
|
256
|
+
case "pk":
|
|
257
|
+
pkNode = idxProp.initializer;
|
|
258
|
+
if (ts.isObjectLiteralExpression(idxProp.initializer)) {
|
|
259
|
+
for (const pkProp of idxProp.initializer.properties) {
|
|
260
|
+
if (ts.isPropertyAssignment(pkProp) &&
|
|
261
|
+
ts.isIdentifier(pkProp.name) &&
|
|
262
|
+
pkProp.name.text === "composite") {
|
|
263
|
+
pkCompositeAttrs = (0, EntityResolver_1.extractStringArray)(ts, pkProp.initializer) ?? [];
|
|
264
|
+
pkCompositeNode = pkProp.initializer;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
break;
|
|
269
|
+
case "sk":
|
|
270
|
+
skNode = idxProp.initializer;
|
|
271
|
+
if (ts.isObjectLiteralExpression(idxProp.initializer)) {
|
|
272
|
+
for (const skProp of idxProp.initializer.properties) {
|
|
273
|
+
if (ts.isPropertyAssignment(skProp) &&
|
|
274
|
+
ts.isIdentifier(skProp.name) &&
|
|
275
|
+
skProp.name.text === "composite") {
|
|
276
|
+
skCompositeAttrs = (0, EntityResolver_1.extractStringArray)(ts, skProp.initializer) ?? [];
|
|
277
|
+
skCompositeNode = skProp.initializer;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// EDD-9003: Old format detection (index: { name, pk, sk } instead of name/pk/sk)
|
|
285
|
+
if (hasOldIndexProp) {
|
|
286
|
+
diagnostics.push(makeDiagnostic(sourceFile, prop.initializer, exports.DiagnosticCode.INVALID_GSI_FORMAT, `Entity \`${entityType}\`: index \`${indexName}\` uses old format. Use: \`{ name: "gsi1", pk: { field: "gsi1pk", composite: [...] }, sk: { field: "gsi1sk", composite: [...] } }\``, ts.DiagnosticCategory.Error));
|
|
287
|
+
}
|
|
288
|
+
// EDD-9002: Unknown composite attributes on GSI
|
|
289
|
+
if (modelFields) {
|
|
290
|
+
for (const attr of pkCompositeAttrs) {
|
|
291
|
+
if (!modelFields.has(attr)) {
|
|
292
|
+
diagnostics.push(makeDiagnostic(sourceFile, pkCompositeNode ?? pkNode ?? prop.initializer, exports.DiagnosticCode.UNKNOWN_COMPOSITE_ATTR, `Entity \`${entityType}\`: index \`${indexName}\` references unknown attribute \`${attr}\`. Valid attributes: ${[...modelFields].map((f) => `\`${f}\``).join(", ")}`, ts.DiagnosticCategory.Error));
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
for (const attr of skCompositeAttrs) {
|
|
296
|
+
if (!modelFields.has(attr)) {
|
|
297
|
+
diagnostics.push(makeDiagnostic(sourceFile, skCompositeNode ?? skNode ?? prop.initializer, exports.DiagnosticCode.UNKNOWN_COMPOSITE_ATTR, `Entity \`${entityType}\`: index \`${indexName}\` references unknown attribute \`${attr}\`. Valid attributes: ${[...modelFields].map((f) => `\`${f}\``).join(", ")}`, ts.DiagnosticCategory.Error));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return diagnostics;
|
|
303
|
+
}
|
|
304
|
+
// ---------------------------------------------------------------------------
|
|
305
|
+
// Query accessor validations
|
|
306
|
+
// ---------------------------------------------------------------------------
|
|
307
|
+
function validateQueryAccessorCalls(ts, sourceFile, entities) {
|
|
308
|
+
if (entities.length === 0)
|
|
309
|
+
return [];
|
|
310
|
+
const diagnostics = [];
|
|
311
|
+
ts.forEachChild(sourceFile, function visit(node) {
|
|
312
|
+
// Look for: db.entities.<Entity>.<indexName>({ ... }).filter({ ... })
|
|
313
|
+
if (ts.isCallExpression(node)) {
|
|
314
|
+
const diags = tryValidateQueryChain(ts, sourceFile, node, entities);
|
|
315
|
+
diagnostics.push(...diags);
|
|
316
|
+
}
|
|
317
|
+
ts.forEachChild(node, visit);
|
|
318
|
+
});
|
|
319
|
+
return diagnostics;
|
|
320
|
+
}
|
|
321
|
+
function tryValidateQueryChain(ts, sourceFile, callExpr, entities) {
|
|
322
|
+
const diagnostics = [];
|
|
323
|
+
// Check for .filter() calls on a query chain
|
|
324
|
+
if (!ts.isPropertyAccessExpression(callExpr.expression))
|
|
325
|
+
return [];
|
|
326
|
+
const methodName = callExpr.expression.name.text;
|
|
327
|
+
if (methodName === "filter" && callExpr.arguments.length > 0) {
|
|
328
|
+
// Walk up to find the root query accessor
|
|
329
|
+
const rootInfo = findQueryAccessorRoot(ts, callExpr.expression.expression, entities);
|
|
330
|
+
if (rootInfo) {
|
|
331
|
+
const filterArg = callExpr.arguments[0];
|
|
332
|
+
if (ts.isObjectLiteralExpression(filterArg)) {
|
|
333
|
+
// EDD-9005: Check if any filter keys are SK composites
|
|
334
|
+
for (const filterProp of filterArg.properties) {
|
|
335
|
+
if (!ts.isPropertyAssignment(filterProp) || !ts.isIdentifier(filterProp.name))
|
|
336
|
+
continue;
|
|
337
|
+
const filterKey = filterProp.name.text;
|
|
338
|
+
const skIdx = rootInfo.skComposites.indexOf(filterKey);
|
|
339
|
+
if (skIdx !== -1) {
|
|
340
|
+
diagnostics.push(makeDiagnostic(sourceFile, filterProp.name, exports.DiagnosticCode.SK_IN_FILTER, `\`${filterKey}\` is a sort key composite for index \`${rootInfo.indexName}\` — include it in the query input for efficient key-based filtering instead of post-read \`.filter()\`.`, ts.DiagnosticCategory.Warning));
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// Check query accessor calls directly: db.entities.Tasks.byProject({...})
|
|
347
|
+
const chain = buildChain(ts, callExpr.expression);
|
|
348
|
+
if (chain.length >= 4 && chain[1]?.text === "entities") {
|
|
349
|
+
const entityName = chain[2]?.text;
|
|
350
|
+
const indexName = chain[3]?.text;
|
|
351
|
+
if (entityName && indexName) {
|
|
352
|
+
const entity = entities.find((e) => e.variableName === entityName);
|
|
353
|
+
if (entity) {
|
|
354
|
+
const indexDef = entity.indexes[indexName];
|
|
355
|
+
if (indexDef && indexName !== "primary" && callExpr.arguments.length > 0) {
|
|
356
|
+
const queryArg = callExpr.arguments[0];
|
|
357
|
+
if (ts.isObjectLiteralExpression(queryArg)) {
|
|
358
|
+
diagnostics.push(...validateQueryInput(ts, sourceFile, indexName, indexDef, queryArg));
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return diagnostics;
|
|
365
|
+
}
|
|
366
|
+
function findQueryAccessorRoot(ts, expr, entities) {
|
|
367
|
+
// Walk through intermediate BoundQuery combinator calls
|
|
368
|
+
if (ts.isCallExpression(expr)) {
|
|
369
|
+
const callee = expr.expression;
|
|
370
|
+
if (ts.isPropertyAccessExpression(callee)) {
|
|
371
|
+
const chain = buildChain(ts, callee);
|
|
372
|
+
// db.entities.Tasks.byProject(...)
|
|
373
|
+
if (chain.length >= 4 && chain[1]?.text === "entities") {
|
|
374
|
+
const entityName = chain[2]?.text;
|
|
375
|
+
const indexName = chain[3]?.text;
|
|
376
|
+
if (entityName && indexName) {
|
|
377
|
+
const entity = entities.find((e) => e.variableName === entityName);
|
|
378
|
+
if (entity) {
|
|
379
|
+
const indexDef = entity.indexes[indexName];
|
|
380
|
+
if (indexDef) {
|
|
381
|
+
const providedArgs = new Set();
|
|
382
|
+
if (expr.arguments.length > 0 && ts.isObjectLiteralExpression(expr.arguments[0])) {
|
|
383
|
+
for (const p of expr.arguments[0].properties) {
|
|
384
|
+
if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name)) {
|
|
385
|
+
providedArgs.add(p.name.text);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return {
|
|
390
|
+
entity,
|
|
391
|
+
indexName,
|
|
392
|
+
skComposites: indexDef.sk.composite,
|
|
393
|
+
providedArgs,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// Intermediate combinator: .limit(10).filter(...) → recurse
|
|
400
|
+
const combinator = callee.name.text;
|
|
401
|
+
if (combinator === "limit" ||
|
|
402
|
+
combinator === "reverse" ||
|
|
403
|
+
combinator === "select" ||
|
|
404
|
+
combinator === "where" ||
|
|
405
|
+
combinator === "maxPages" ||
|
|
406
|
+
combinator === "startFrom" ||
|
|
407
|
+
combinator === "consistentRead") {
|
|
408
|
+
return findQueryAccessorRoot(ts, callee.expression, entities);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
// Property access (chaining through non-call)
|
|
413
|
+
if (ts.isPropertyAccessExpression(expr)) {
|
|
414
|
+
return findQueryAccessorRoot(ts, expr.expression, entities);
|
|
415
|
+
}
|
|
416
|
+
return undefined;
|
|
417
|
+
}
|
|
418
|
+
function validateQueryInput(ts, sourceFile, indexName, indexDef, queryArg) {
|
|
419
|
+
const diagnostics = [];
|
|
420
|
+
const validKeys = new Set([...indexDef.pk.composite, ...indexDef.sk.composite]);
|
|
421
|
+
const providedKeys = new Map();
|
|
422
|
+
for (const prop of queryArg.properties) {
|
|
423
|
+
if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {
|
|
424
|
+
providedKeys.set(prop.name.text, prop.name);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
// EDD-9006: Unknown properties
|
|
428
|
+
for (const [key, node] of providedKeys) {
|
|
429
|
+
if (!validKeys.has(key)) {
|
|
430
|
+
diagnostics.push(makeDiagnostic(sourceFile, node, exports.DiagnosticCode.UNKNOWN_QUERY_PROPERTY, `Unknown composite attribute \`${key}\` for index \`${indexName}\`. Valid attributes: ${[...validKeys].map((k) => `\`${k}\``).join(", ")}`, ts.DiagnosticCategory.Error));
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
// EDD-9004: SK prefix ordering violation
|
|
434
|
+
const skComposites = indexDef.sk.composite;
|
|
435
|
+
let lastProvided = -1;
|
|
436
|
+
for (let i = 0; i < skComposites.length; i++) {
|
|
437
|
+
if (providedKeys.has(skComposites[i])) {
|
|
438
|
+
if (i !== lastProvided + 1) {
|
|
439
|
+
const missing = skComposites.slice(lastProvided + 1, i);
|
|
440
|
+
diagnostics.push(makeDiagnostic(sourceFile, providedKeys.get(skComposites[i]), exports.DiagnosticCode.SK_PREFIX_VIOLATION, `Sort key composite \`${skComposites[i]}\` for index \`${indexName}\` requires prior composites: ${missing.map((m) => `\`${m}\``).join(", ")}. Sort key composites must follow prefix ordering.`, ts.DiagnosticCategory.Error));
|
|
441
|
+
}
|
|
442
|
+
lastProvided = i;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
return diagnostics;
|
|
446
|
+
}
|
|
447
|
+
// ---------------------------------------------------------------------------
|
|
448
|
+
// Helpers
|
|
449
|
+
// ---------------------------------------------------------------------------
|
|
450
|
+
function buildChain(ts, node) {
|
|
451
|
+
const parts = [];
|
|
452
|
+
let current = node;
|
|
453
|
+
while (ts.isPropertyAccessExpression(current)) {
|
|
454
|
+
if (ts.isIdentifier(current.name)) {
|
|
455
|
+
parts.unshift(current.name);
|
|
456
|
+
}
|
|
457
|
+
current = current.expression;
|
|
458
|
+
}
|
|
459
|
+
if (ts.isIdentifier(current)) {
|
|
460
|
+
parts.unshift(current);
|
|
461
|
+
}
|
|
462
|
+
return parts;
|
|
463
|
+
}
|
|
464
|
+
/** Extract model field names from the `model` property of Entity.make() config. */
|
|
465
|
+
function extractModelFields(ts, config, program) {
|
|
466
|
+
for (const prop of config.properties) {
|
|
467
|
+
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
|
|
468
|
+
continue;
|
|
469
|
+
if (prop.name.text !== "model")
|
|
470
|
+
continue;
|
|
471
|
+
// Use TypeChecker to resolve the model type and extract field names
|
|
472
|
+
const checker = program.getTypeChecker();
|
|
473
|
+
const type = checker.getTypeAtLocation(prop.initializer);
|
|
474
|
+
if (!type)
|
|
475
|
+
return undefined;
|
|
476
|
+
const fields = extractFieldsFromSchemaType(checker, type, prop.initializer);
|
|
477
|
+
if (fields && fields.size > 0)
|
|
478
|
+
return fields;
|
|
479
|
+
}
|
|
480
|
+
return undefined;
|
|
481
|
+
}
|
|
482
|
+
/** Extract field names from a Schema.Class type or ConfiguredModel type. */
|
|
483
|
+
function extractFieldsFromSchemaType(checker, type, location) {
|
|
484
|
+
const fields = new Set();
|
|
485
|
+
// Try direct Schema.Class: has a `Type` property with the model fields
|
|
486
|
+
const typeSymbol = type.getProperty("Type");
|
|
487
|
+
if (typeSymbol) {
|
|
488
|
+
const typeType = checker.getTypeOfSymbolAtLocation(typeSymbol, location);
|
|
489
|
+
for (const p of typeType.getProperties()) {
|
|
490
|
+
fields.add(p.name);
|
|
491
|
+
}
|
|
492
|
+
if (fields.size > 0)
|
|
493
|
+
return fields;
|
|
494
|
+
}
|
|
495
|
+
// Try ConfiguredModel: has a `model` property that is the Schema.Class
|
|
496
|
+
const modelSymbol = type.getProperty("model");
|
|
497
|
+
if (modelSymbol) {
|
|
498
|
+
const modelType = checker.getTypeOfSymbolAtLocation(modelSymbol, location);
|
|
499
|
+
const innerTypeSymbol = modelType.getProperty("Type");
|
|
500
|
+
if (innerTypeSymbol) {
|
|
501
|
+
const innerTypeType = checker.getTypeOfSymbolAtLocation(innerTypeSymbol, location);
|
|
502
|
+
for (const p of innerTypeType.getProperties()) {
|
|
503
|
+
fields.add(p.name);
|
|
504
|
+
}
|
|
505
|
+
if (fields.size > 0)
|
|
506
|
+
return fields;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
// Fallback: try prototype properties
|
|
510
|
+
for (const p of type.getProperties()) {
|
|
511
|
+
if (p.name.startsWith("_") || p.name === "constructor")
|
|
512
|
+
continue;
|
|
513
|
+
fields.add(p.name);
|
|
514
|
+
}
|
|
515
|
+
if (fields.size > 0)
|
|
516
|
+
return fields;
|
|
517
|
+
return undefined;
|
|
518
|
+
}
|
|
519
|
+
function makeDiagnostic(sourceFile, node, code, message, category) {
|
|
520
|
+
return {
|
|
521
|
+
file: sourceFile,
|
|
522
|
+
start: node.getStart(sourceFile),
|
|
523
|
+
length: node.getWidth(sourceFile),
|
|
524
|
+
messageText: `[EDD-${code}] ${message}`,
|
|
525
|
+
category,
|
|
526
|
+
code,
|
|
527
|
+
source: "effect-dynamodb",
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/features/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickinfo.d.ts","sourceRoot":"","sources":["../../src/features/quickinfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAOhC,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,OAAO,EAAE,EACrB,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,SAAS,GAC9B,EAAE,CAAC,SAAS,GAAG,SAAS,CAqC1B"}
|