@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,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"}
|