@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.
@@ -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,3 @@
1
+ import type ts from "typescript";
2
+ export declare function enhanceQuickInfo(typescript: typeof ts, info: ts.server.PluginCreateInfo, fileName: string, position: number, prior: ts.QuickInfo | undefined): ts.QuickInfo | undefined;
3
+ //# sourceMappingURL=quickinfo.d.ts.map
@@ -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"}