@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,33 @@
1
+ import type ts from "typescript";
2
+ import type { ResolvedCollection, ResolvedEntity } from "./EntityResolver";
3
+ export type OperationType = "get" | "put" | "create" | "update" | "delete" | "query" | "scan" | "entity-query-accessor" | "collection-accessor" | "bound-query-terminal" | "table-accessor";
4
+ export interface WhereCondition {
5
+ readonly op: "eq" | "lt" | "lte" | "gt" | "gte" | "beginsWith" | "between";
6
+ readonly field: string;
7
+ readonly value: string;
8
+ readonly value2?: string;
9
+ }
10
+ export interface DetectedOperation {
11
+ readonly entity?: ResolvedEntity | undefined;
12
+ readonly type: OperationType;
13
+ readonly indexName?: string | undefined;
14
+ readonly arguments?: Record<string, unknown> | undefined;
15
+ readonly updateCombinators?: UpdateCombinators | undefined;
16
+ readonly whereCondition?: WhereCondition | undefined;
17
+ readonly collection?: ResolvedCollection | undefined;
18
+ readonly collectionName?: string | undefined;
19
+ readonly terminalName?: string | undefined;
20
+ readonly tableName?: string | undefined;
21
+ }
22
+ export interface UpdateCombinators {
23
+ readonly set?: Record<string, unknown> | undefined;
24
+ readonly remove?: ReadonlyArray<string> | undefined;
25
+ readonly add?: Record<string, number> | undefined;
26
+ readonly subtract?: Record<string, number> | undefined;
27
+ readonly append?: Record<string, ReadonlyArray<unknown>> | undefined;
28
+ readonly deleteFromSet?: Record<string, unknown> | undefined;
29
+ readonly expectedVersion?: number | undefined;
30
+ readonly condition?: unknown;
31
+ }
32
+ export declare function detectOperation(ts: typeof import("typescript"), sourceFile: ts.SourceFile, position: number, entities: ReadonlyArray<ResolvedEntity>, collections?: ReadonlyArray<ResolvedCollection>): DetectedOperation | undefined;
33
+ //# sourceMappingURL=OperationDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationDetector.d.ts","sourceRoot":"","sources":["../../src/core/OperationDetector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE1E,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,MAAM,GACN,uBAAuB,GACvB,qBAAqB,GACrB,sBAAsB,GACtB,gBAAgB,CAAA;AAEpB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,SAAS,CAAA;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACxD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;IAEpD,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACxC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;IACpE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAC5D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,cAAc,YAAY,CAAC,EAC/B,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,EACvC,WAAW,GAAE,aAAa,CAAC,kBAAkB,CAAM,GAClD,iBAAiB,GAAG,SAAS,CAoB/B"}
@@ -0,0 +1,528 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectOperation = detectOperation;
4
+ function detectOperation(ts, sourceFile, position, entities, collections = []) {
5
+ const token = findTokenAtPosition(ts, sourceFile, position);
6
+ if (!token)
7
+ return undefined;
8
+ // Walk up from the token to find the operation-relevant call
9
+ let node = token;
10
+ // Try to detect from current node and parents
11
+ while (node) {
12
+ // Try v2 patterns first (more specific), then fall back to v1
13
+ const v2Result = tryDetectV2Pattern(ts, node, entities, collections);
14
+ if (v2Result)
15
+ return v2Result;
16
+ const result = tryDetectFromNode(ts, node, entities);
17
+ if (result)
18
+ return result;
19
+ if (node === sourceFile)
20
+ break;
21
+ node = node.parent;
22
+ }
23
+ return undefined;
24
+ }
25
+ function findTokenAtPosition(ts, sourceFile, position) {
26
+ function find(node) {
27
+ if (position < node.getStart(sourceFile) || position >= node.getEnd()) {
28
+ return undefined;
29
+ }
30
+ const child = ts.forEachChild(node, find);
31
+ return child ?? node;
32
+ }
33
+ return find(sourceFile);
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // V2 pattern detection — db.entities.*, db.collections.*, BoundQuery terminals
37
+ // ---------------------------------------------------------------------------
38
+ function tryDetectV2Pattern(ts, node, entities, collections) {
39
+ // Only process call expressions and property access expressions
40
+ if (!ts.isCallExpression(node) && !ts.isPropertyAccessExpression(node))
41
+ return undefined;
42
+ // For call expressions, check the callee chain
43
+ const callNode = ts.isCallExpression(node) ? node : undefined;
44
+ const accessNode = callNode
45
+ ? ts.isPropertyAccessExpression(callNode.expression)
46
+ ? callNode.expression
47
+ : undefined
48
+ : ts.isPropertyAccessExpression(node)
49
+ ? node
50
+ : undefined;
51
+ if (!accessNode)
52
+ return undefined;
53
+ // Walk the property access chain to build the path
54
+ const chain = buildPropertyAccessChain(ts, accessNode);
55
+ // Pattern 1: db.entities.Tasks.byProject(...) — 4+ segments: [db, entities, Tasks, byProject]
56
+ if (chain.length >= 4 && chain[1] === "entities" && callNode) {
57
+ const entityName = chain[2];
58
+ const accessorName = chain[3];
59
+ const entity = findEntity(entityName, entities);
60
+ if (entity) {
61
+ // Check if accessorName matches a collection name
62
+ const collection = collections.find((c) => c.collectionName === accessorName);
63
+ if (collection) {
64
+ const args = callNode.arguments.length > 0 ? extractCallArgs(ts, callNode.arguments[0]) : undefined;
65
+ return {
66
+ entity,
67
+ type: "entity-query-accessor",
68
+ collection,
69
+ collectionName: accessorName,
70
+ arguments: args,
71
+ };
72
+ }
73
+ // Check for scan()
74
+ if (accessorName === "scan") {
75
+ return { entity, type: "scan" };
76
+ }
77
+ // Check for CRUD methods via entities namespace: db.entities.Users.get(...)
78
+ const opType = methodToOpType(accessorName);
79
+ if (opType) {
80
+ const args = callNode.arguments.length > 0 ? extractCallArgs(ts, callNode.arguments[0]) : undefined;
81
+ const updateCombs = opType === "update" ? extractUpdateCombinators(ts, callNode) : undefined;
82
+ return { entity, type: opType, arguments: args, updateCombinators: updateCombs };
83
+ }
84
+ // Check for entity index accessor: db.entities.Tasks.byProject(...)
85
+ // Matches any non-primary index name defined on the entity
86
+ if (entity.indexes[accessorName] && accessorName !== "primary") {
87
+ const args = callNode.arguments.length > 0 ? extractCallArgs(ts, callNode.arguments[0]) : undefined;
88
+ return {
89
+ entity,
90
+ type: "entity-query-accessor",
91
+ indexName: accessorName,
92
+ arguments: args,
93
+ };
94
+ }
95
+ }
96
+ }
97
+ // Pattern 2: db.collections.Assignments(...) — 3+ segments: [db, collections, Assignments]
98
+ if (chain.length >= 3 && chain[1] === "collections" && callNode) {
99
+ const collectionVarName = chain[2];
100
+ const collection = collections.find((c) => c.variableName === collectionVarName);
101
+ if (collection) {
102
+ const args = callNode.arguments.length > 0 ? extractCallArgs(ts, callNode.arguments[0]) : undefined;
103
+ return {
104
+ type: "collection-accessor",
105
+ collection,
106
+ collectionName: collection.collectionName,
107
+ arguments: args,
108
+ };
109
+ }
110
+ }
111
+ // Pattern 3: BoundQuery terminals — .collect(), .fetch(), .paginate(), .count() on a chain
112
+ if (callNode && chain.length >= 1) {
113
+ const terminalName = chain[chain.length - 1];
114
+ if (terminalName === "collect" ||
115
+ terminalName === "fetch" ||
116
+ terminalName === "paginate" ||
117
+ terminalName === "count") {
118
+ // Walk up to find if this is chained on an entity accessor or collection accessor
119
+ const parentOp = tryDetectV2ChainRoot(ts, accessNode.expression, entities, collections);
120
+ if (parentOp) {
121
+ return {
122
+ ...parentOp,
123
+ type: "bound-query-terminal",
124
+ terminalName,
125
+ };
126
+ }
127
+ }
128
+ }
129
+ // Pattern 4: db.tables.TableName — 3 segments: [db, tables, TableName]
130
+ if (chain.length >= 3 && chain[1] === "tables") {
131
+ const tableName = chain[2];
132
+ return { type: "table-accessor", tableName };
133
+ }
134
+ return undefined;
135
+ }
136
+ /**
137
+ * Build a property access chain from a PropertyAccessExpression.
138
+ * e.g., `db.entities.Tasks.byProject` → ["db", "entities", "Tasks", "byProject"]
139
+ */
140
+ function buildPropertyAccessChain(ts, node) {
141
+ const parts = [];
142
+ let current = node;
143
+ while (ts.isPropertyAccessExpression(current)) {
144
+ parts.unshift(current.name.text);
145
+ current = current.expression;
146
+ }
147
+ if (ts.isIdentifier(current)) {
148
+ parts.unshift(current.text);
149
+ }
150
+ return parts;
151
+ }
152
+ /**
153
+ * Try to find the root of a BoundQuery chain (entity accessor or collection accessor).
154
+ */
155
+ function tryDetectV2ChainRoot(ts, expr, entities, collections) {
156
+ // If it's a call expression, recurse into it
157
+ if (ts.isCallExpression(expr)) {
158
+ const callee = expr.expression;
159
+ if (ts.isPropertyAccessExpression(callee)) {
160
+ const chain = buildPropertyAccessChain(ts, callee);
161
+ // db.entities.Tasks.byProject(...)
162
+ if (chain.length >= 4 && chain[1] === "entities") {
163
+ const entityName = chain[2];
164
+ const accessorName = chain[3];
165
+ const entity = findEntity(entityName, entities);
166
+ if (entity) {
167
+ const collection = collections.find((c) => c.collectionName === accessorName);
168
+ if (collection) {
169
+ const args = expr.arguments.length > 0 ? extractCallArgs(ts, expr.arguments[0]) : undefined;
170
+ return {
171
+ entity,
172
+ type: "entity-query-accessor",
173
+ collection,
174
+ collectionName: accessorName,
175
+ arguments: args,
176
+ };
177
+ }
178
+ if (accessorName === "scan") {
179
+ return { entity, type: "scan" };
180
+ }
181
+ // Entity index accessor (no collection match needed)
182
+ if (entity.indexes[accessorName] && accessorName !== "primary") {
183
+ const args = expr.arguments.length > 0 ? extractCallArgs(ts, expr.arguments[0]) : undefined;
184
+ return {
185
+ entity,
186
+ type: "entity-query-accessor",
187
+ indexName: accessorName,
188
+ arguments: args,
189
+ };
190
+ }
191
+ }
192
+ }
193
+ // db.collections.Assignments(...)
194
+ if (chain.length >= 3 && chain[1] === "collections") {
195
+ const collectionVarName = chain[2];
196
+ const collection = collections.find((c) => c.variableName === collectionVarName);
197
+ if (collection) {
198
+ const args = expr.arguments.length > 0 ? extractCallArgs(ts, expr.arguments[0]) : undefined;
199
+ return {
200
+ type: "collection-accessor",
201
+ collection,
202
+ collectionName: collection.collectionName,
203
+ arguments: args,
204
+ };
205
+ }
206
+ }
207
+ // Intermediate chain: .limit(10).collect() → try the chain's own parent
208
+ const methodName = chain[chain.length - 1];
209
+ if (methodName === "where") {
210
+ // Extract .where() condition and attach to the root operation
211
+ const rootOp = tryDetectV2ChainRoot(ts, callee.expression, entities, collections);
212
+ if (rootOp && expr.arguments.length > 0) {
213
+ const whereCondition = extractWhereCondition(ts, expr.arguments[0]);
214
+ if (whereCondition)
215
+ return { ...rootOp, whereCondition };
216
+ }
217
+ return rootOp;
218
+ }
219
+ if (methodName === "limit" ||
220
+ methodName === "reverse" ||
221
+ methodName === "filter" ||
222
+ methodName === "select" ||
223
+ methodName === "maxPages" ||
224
+ methodName === "startFrom" ||
225
+ methodName === "consistentRead" ||
226
+ methodName === "ignoreOwnership") {
227
+ return tryDetectV2ChainRoot(ts, callee.expression, entities, collections);
228
+ }
229
+ }
230
+ }
231
+ // If it's a property access on a call (chaining through a combinator result)
232
+ if (ts.isPropertyAccessExpression(expr)) {
233
+ return tryDetectV2ChainRoot(ts, expr.expression, entities, collections);
234
+ }
235
+ return undefined;
236
+ }
237
+ function tryDetectFromNode(ts, node, entities) {
238
+ // Case 1: Direct entity operation — Users.get(...), Users.put(...), etc.
239
+ if (ts.isCallExpression(node)) {
240
+ return tryDetectDirectCall(ts, node, entities);
241
+ }
242
+ // Case 2: We're on an identifier that's part of a property access
243
+ if (ts.isIdentifier(node) && node.parent) {
244
+ // Check if parent is a property access that's part of a call
245
+ if (ts.isPropertyAccessExpression(node.parent)) {
246
+ const callExpr = node.parent.parent;
247
+ if (callExpr && ts.isCallExpression(callExpr)) {
248
+ return tryDetectDirectCall(ts, callExpr, entities);
249
+ }
250
+ // Check if grandparent property access is part of a call (Entity.query.byIndex())
251
+ const grandParent = node.parent.parent;
252
+ if (grandParent && ts.isPropertyAccessExpression(grandParent)) {
253
+ const outerCall = grandParent.parent;
254
+ if (outerCall && ts.isCallExpression(outerCall)) {
255
+ return tryDetectDirectCall(ts, outerCall, entities);
256
+ }
257
+ }
258
+ }
259
+ }
260
+ return undefined;
261
+ }
262
+ function tryDetectDirectCall(ts, call, entities) {
263
+ const callee = call.expression;
264
+ // Pattern: <Entity>.scan()
265
+ if (ts.isPropertyAccessExpression(callee)) {
266
+ const methodName = callee.name.text;
267
+ const target = callee.expression;
268
+ // Direct method: Users.get(...), Users.put(...), etc.
269
+ // Also handles typed client: db.Users.get(...), db.Users.put(...), etc.
270
+ const entityName = resolveEntityName(ts, target);
271
+ if (entityName) {
272
+ const entity = findEntity(entityName, entities);
273
+ if (entity) {
274
+ const opType = methodToOpType(methodName);
275
+ if (opType) {
276
+ const args = call.arguments.length > 0 ? extractCallArgs(ts, call.arguments[0]) : undefined;
277
+ const updateCombs = opType === "update" ? extractUpdateCombinators(ts, call) : undefined;
278
+ return { entity, type: opType, arguments: args, updateCombinators: updateCombs };
279
+ }
280
+ // scan() is on the entity directly
281
+ if (methodName === "scan") {
282
+ return { entity, type: "scan" };
283
+ }
284
+ // collect/paginate: db.Entity.collect(Entity.query.index(pk), ...)
285
+ if ((methodName === "collect" || methodName === "paginate") && call.arguments.length > 0) {
286
+ const queryArg = call.arguments[0];
287
+ if (ts.isCallExpression(queryArg)) {
288
+ return tryDetectDirectCall(ts, queryArg, entities);
289
+ }
290
+ }
291
+ }
292
+ }
293
+ // Query pattern: Users.query.byRole(...)
294
+ if (ts.isPropertyAccessExpression(target)) {
295
+ const indexName = methodName; // byRole, byUser, etc.
296
+ const queryProp = target.name.text; // "query"
297
+ const entityId = target.expression;
298
+ if (queryProp === "query") {
299
+ const queryEntityName = resolveEntityName(ts, entityId);
300
+ if (queryEntityName) {
301
+ const entity = findEntity(queryEntityName, entities);
302
+ if (entity) {
303
+ const args = call.arguments.length > 0 ? extractCallArgs(ts, call.arguments[0]) : undefined;
304
+ return { entity, type: "query", indexName, arguments: args };
305
+ }
306
+ }
307
+ }
308
+ }
309
+ }
310
+ return undefined;
311
+ }
312
+ /**
313
+ * Extract the entity name from the target expression.
314
+ * Handles both `Users` (identifier) and `db.Users` (property access).
315
+ */
316
+ function resolveEntityName(ts, node) {
317
+ if (ts.isIdentifier(node))
318
+ return node.text;
319
+ if (ts.isPropertyAccessExpression(node))
320
+ return node.name.text;
321
+ return undefined;
322
+ }
323
+ function methodToOpType(name) {
324
+ switch (name) {
325
+ case "get":
326
+ case "getVersion":
327
+ return "get";
328
+ case "put":
329
+ return "put";
330
+ case "create":
331
+ return "create";
332
+ case "update":
333
+ return "update";
334
+ case "delete":
335
+ return "delete";
336
+ case "scan":
337
+ return "scan";
338
+ default:
339
+ return undefined;
340
+ }
341
+ }
342
+ function findEntity(name, entities) {
343
+ return entities.find((e) => e.variableName === name);
344
+ }
345
+ function extractCallArgs(ts, arg) {
346
+ if (!ts.isObjectLiteralExpression(arg))
347
+ return undefined;
348
+ const result = {};
349
+ for (const prop of arg.properties) {
350
+ if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name))
351
+ continue;
352
+ result[prop.name.text] = extractArgValue(ts, prop.initializer);
353
+ }
354
+ return Object.keys(result).length > 0 ? result : undefined;
355
+ }
356
+ function extractArgValue(ts, expr) {
357
+ if (ts.isStringLiteral(expr) || ts.isNoSubstitutionTemplateLiteral(expr))
358
+ return expr.text;
359
+ if (ts.isNumericLiteral(expr))
360
+ return Number(expr.text);
361
+ if (expr.kind === ts.SyntaxKind.TrueKeyword)
362
+ return true;
363
+ if (expr.kind === ts.SyntaxKind.FalseKeyword)
364
+ return false;
365
+ // For non-literal expressions, return placeholder
366
+ return undefined;
367
+ }
368
+ function extractUpdateCombinators(ts, updateCall) {
369
+ // Look for .pipe() calls on the update result
370
+ // Pattern: Users.update({ key }).pipe(Users.set({...}), Users.expectedVersion(N))
371
+ let current = updateCall;
372
+ while (current.parent) {
373
+ if (ts.isCallExpression(current.parent)) {
374
+ const parentCall = current.parent;
375
+ const parentCallee = parentCall.expression;
376
+ if (ts.isPropertyAccessExpression(parentCallee) && parentCallee.name.text === "pipe") {
377
+ return parsePipeArgs(ts, parentCall);
378
+ }
379
+ }
380
+ // Also check: used as argument inside .pipe()
381
+ if (ts.isPropertyAccessExpression(current.parent)) {
382
+ const outerCall = current.parent.parent;
383
+ if (outerCall &&
384
+ ts.isCallExpression(outerCall) &&
385
+ ts.isPropertyAccessExpression(outerCall.expression) &&
386
+ outerCall.expression.name.text === "pipe") {
387
+ return parsePipeArgs(ts, outerCall);
388
+ }
389
+ }
390
+ current = current.parent;
391
+ }
392
+ return undefined;
393
+ }
394
+ function parsePipeArgs(ts, pipeCall) {
395
+ const result = {};
396
+ for (const arg of pipeCall.arguments) {
397
+ if (!ts.isCallExpression(arg))
398
+ continue;
399
+ const callee = arg.expression;
400
+ if (!ts.isPropertyAccessExpression(callee))
401
+ continue;
402
+ const methodName = callee.name.text;
403
+ switch (methodName) {
404
+ case "set": {
405
+ if (arg.arguments.length > 0) {
406
+ const setArg = arg.arguments[0];
407
+ if (ts.isObjectLiteralExpression(setArg)) {
408
+ result.set = {};
409
+ for (const p of setArg.properties) {
410
+ if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name)) {
411
+ result.set[p.name.text] = extractArgValue(ts, p.initializer);
412
+ }
413
+ }
414
+ }
415
+ }
416
+ break;
417
+ }
418
+ case "remove": {
419
+ if (arg.arguments.length > 0) {
420
+ const removeArg = arg.arguments[0];
421
+ if (ts.isArrayLiteralExpression(removeArg)) {
422
+ result.remove = [];
423
+ for (const el of removeArg.elements) {
424
+ if (ts.isStringLiteral(el)) {
425
+ result.remove.push(el.text);
426
+ }
427
+ }
428
+ }
429
+ }
430
+ break;
431
+ }
432
+ case "add": {
433
+ if (arg.arguments.length > 0) {
434
+ const addArg = arg.arguments[0];
435
+ if (ts.isObjectLiteralExpression(addArg)) {
436
+ result.add = {};
437
+ for (const p of addArg.properties) {
438
+ if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name)) {
439
+ const val = extractArgValue(ts, p.initializer);
440
+ if (typeof val === "number")
441
+ result.add[p.name.text] = val;
442
+ }
443
+ }
444
+ }
445
+ }
446
+ break;
447
+ }
448
+ case "subtract": {
449
+ if (arg.arguments.length > 0) {
450
+ const subArg = arg.arguments[0];
451
+ if (ts.isObjectLiteralExpression(subArg)) {
452
+ result.subtract = {};
453
+ for (const p of subArg.properties) {
454
+ if (ts.isPropertyAssignment(p) && ts.isIdentifier(p.name)) {
455
+ const val = extractArgValue(ts, p.initializer);
456
+ if (typeof val === "number")
457
+ result.subtract[p.name.text] = val;
458
+ }
459
+ }
460
+ }
461
+ }
462
+ break;
463
+ }
464
+ case "expectedVersion": {
465
+ if (arg.arguments.length > 0) {
466
+ const versionArg = arg.arguments[0];
467
+ if (ts.isNumericLiteral(versionArg)) {
468
+ result.expectedVersion = Number(versionArg.text);
469
+ }
470
+ }
471
+ break;
472
+ }
473
+ }
474
+ }
475
+ return Object.keys(result).length > 0 ? result : {};
476
+ }
477
+ /**
478
+ * Extract a WhereCondition from a .where() callback argument.
479
+ * Parses: (t, { beginsWith }) => beginsWith(t.status, "d")
480
+ * Or: (t, { eq }) => eq(t.status, "done")
481
+ */
482
+ function extractWhereCondition(ts, arg) {
483
+ // Must be an arrow function or function expression
484
+ let body;
485
+ if (ts.isArrowFunction(arg)) {
486
+ body = ts.isBlock(arg.body) ? undefined : arg.body;
487
+ }
488
+ if (!body || !ts.isCallExpression(body))
489
+ return undefined;
490
+ // The call should be like: beginsWith(t.field, "value") or eq(t.field, "value")
491
+ const callee = body.expression;
492
+ let opName;
493
+ if (ts.isIdentifier(callee)) {
494
+ opName = callee.text;
495
+ }
496
+ if (!opName)
497
+ return undefined;
498
+ const validOps = new Set(["eq", "lt", "lte", "gt", "gte", "beginsWith", "between"]);
499
+ if (!validOps.has(opName))
500
+ return undefined;
501
+ // First arg: t.field (property access on the first param)
502
+ if (body.arguments.length < 2)
503
+ return undefined;
504
+ const fieldArg = body.arguments[0];
505
+ let fieldName;
506
+ if (ts.isPropertyAccessExpression(fieldArg) && ts.isIdentifier(fieldArg.name)) {
507
+ fieldName = fieldArg.name.text;
508
+ }
509
+ if (!fieldName)
510
+ return undefined;
511
+ // Second arg: value (string literal)
512
+ const valueArg = body.arguments[1];
513
+ const value = extractArgValue(ts, valueArg);
514
+ if (typeof value !== "string")
515
+ return undefined;
516
+ // For between, extract third arg
517
+ if (opName === "between") {
518
+ if (body.arguments.length < 3)
519
+ return undefined;
520
+ const value2Arg = body.arguments[2];
521
+ const value2 = extractArgValue(ts, value2Arg);
522
+ if (typeof value2 !== "string")
523
+ return undefined;
524
+ return { op: "between", field: fieldName, value, value2 };
525
+ }
526
+ return { op: opName, field: fieldName, value };
527
+ }
528
+ //# sourceMappingURL=OperationDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationDetector.js","sourceRoot":"","sources":["../../src/core/OperationDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { DetectedOperation } from "./OperationDetector";
2
+ export interface DynamoDBParams {
3
+ readonly command: string;
4
+ readonly TableName: string;
5
+ readonly Key?: Record<string, string> | undefined;
6
+ readonly Item?: Record<string, string> | undefined;
7
+ readonly IndexName?: string | undefined;
8
+ readonly KeyConditionExpression?: string | undefined;
9
+ readonly FilterExpression?: string | undefined;
10
+ readonly ConditionExpression?: string | undefined;
11
+ readonly UpdateExpression?: string | undefined;
12
+ readonly ExpressionAttributeNames?: Record<string, string> | undefined;
13
+ readonly ExpressionAttributeValues?: Record<string, string> | undefined;
14
+ readonly entityType: string;
15
+ readonly info?: string | undefined;
16
+ }
17
+ export declare function buildParams(op: DetectedOperation): DynamoDBParams | undefined;
18
+ //# sourceMappingURL=ParamsBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParamsBuilder.d.ts","sourceRoot":"","sources":["../../src/core/ParamsBuilder.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,qBAAqB,CAAA;AAE/F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACtE,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAE3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS,CA6B7E"}