@base44-preview/vite-plugin 0.2.27-pr.44.b37fb09 → 0.2.28-pr.43.a5112a4
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/dist/consts.d.ts +12 -0
- package/dist/consts.d.ts.map +1 -0
- package/dist/consts.js +12 -0
- package/dist/consts.js.map +1 -0
- package/dist/jsx-processor.d.ts +4 -1
- package/dist/jsx-processor.d.ts.map +1 -1
- package/dist/jsx-processor.js +33 -6
- package/dist/jsx-processor.js.map +1 -1
- package/dist/jsx-utils.d.ts +9 -0
- package/dist/jsx-utils.d.ts.map +1 -1
- package/dist/jsx-utils.js +86 -0
- package/dist/jsx-utils.js.map +1 -1
- package/dist/processors/collection-id-processor.d.ts +20 -0
- package/dist/processors/collection-id-processor.d.ts.map +1 -0
- package/dist/processors/collection-id-processor.js +182 -0
- package/dist/processors/collection-id-processor.js.map +1 -0
- package/dist/processors/collection-item-field-processor.d.ts +39 -0
- package/dist/processors/collection-item-field-processor.d.ts.map +1 -0
- package/dist/processors/collection-item-field-processor.js +281 -0
- package/dist/processors/collection-item-field-processor.js.map +1 -0
- package/dist/processors/collection-item-id-processor.d.ts +12 -0
- package/dist/processors/collection-item-id-processor.d.ts.map +1 -0
- package/dist/processors/collection-item-id-processor.js +50 -0
- package/dist/processors/collection-item-id-processor.js.map +1 -0
- package/dist/processors/collection-reference-field-processor.d.ts +31 -0
- package/dist/processors/collection-reference-field-processor.d.ts.map +1 -0
- package/dist/processors/collection-reference-field-processor.js +174 -0
- package/dist/processors/collection-reference-field-processor.js.map +1 -0
- package/dist/processors/collection-tracing-utils.d.ts +36 -0
- package/dist/processors/collection-tracing-utils.d.ts.map +1 -0
- package/dist/processors/collection-tracing-utils.js +390 -0
- package/dist/processors/collection-tracing-utils.js.map +1 -0
- package/dist/processors/shared-utils.d.ts +77 -0
- package/dist/processors/shared-utils.d.ts.map +1 -1
- package/dist/processors/shared-utils.js +525 -0
- package/dist/processors/shared-utils.js.map +1 -1
- package/dist/processors/static-array-processor.d.ts +2 -3
- package/dist/processors/static-array-processor.d.ts.map +1 -1
- package/dist/processors/static-array-processor.js +2 -3
- package/dist/processors/static-array-processor.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/visual-edit-plugin.d.ts +0 -1
- package/dist/visual-edit-plugin.d.ts.map +1 -1
- package/dist/visual-edit-plugin.js +29 -178
- package/dist/visual-edit-plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/consts.ts +12 -0
- package/src/jsx-processor.ts +41 -14
- package/src/jsx-utils.ts +116 -0
- package/src/processors/collection-id-processor.ts +261 -0
- package/src/processors/collection-item-field-processor.ts +433 -0
- package/src/processors/collection-item-id-processor.ts +69 -0
- package/src/processors/collection-reference-field-processor.ts +225 -0
- package/src/processors/collection-tracing-utils.ts +507 -0
- package/src/processors/shared-utils.ts +671 -0
- package/src/processors/static-array-processor.ts +6 -3
- package/src/types.ts +4 -0
- package/src/visual-edit-plugin.ts +34 -215
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { DATA_COLLECTION_ITEM_FIELD, DATA_COLLECTION_ITEM_ID, EXCLUDED_FIELDS, } from "../consts.js";
|
|
2
|
+
import { JSXUtils } from "../jsx-utils.js";
|
|
3
|
+
import { JSXAttributeUtils, ExpressionAnalysisUtils, StaticValueUtils, } from "./shared-utils.js";
|
|
4
|
+
export class DataItemFieldProcessor {
|
|
5
|
+
types;
|
|
6
|
+
attributeUtils;
|
|
7
|
+
expressionUtils;
|
|
8
|
+
staticUtils;
|
|
9
|
+
constructor(types) {
|
|
10
|
+
this.types = types;
|
|
11
|
+
this.attributeUtils = new JSXAttributeUtils(types);
|
|
12
|
+
this.expressionUtils = new ExpressionAnalysisUtils(types);
|
|
13
|
+
this.staticUtils = new StaticValueUtils(types);
|
|
14
|
+
}
|
|
15
|
+
process(path) {
|
|
16
|
+
if (this.attributeUtils.hasAttribute(path, DATA_COLLECTION_ITEM_FIELD)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const jsxElement = path.parentPath;
|
|
20
|
+
if (!jsxElement?.isJSXElement())
|
|
21
|
+
return;
|
|
22
|
+
const result = this.extractFieldFromChildren(jsxElement);
|
|
23
|
+
if (!result)
|
|
24
|
+
return;
|
|
25
|
+
this.attributeUtils.addStringAttribute(path, DATA_COLLECTION_ITEM_FIELD, result.fieldPath);
|
|
26
|
+
this.tryAddItemId(path, result.rootIdentifier, result.fieldPath);
|
|
27
|
+
}
|
|
28
|
+
extractFieldFromChildren(jsxElement) {
|
|
29
|
+
const children = jsxElement.get("children");
|
|
30
|
+
for (const child of children) {
|
|
31
|
+
const result = this.extractFieldFromChild(child);
|
|
32
|
+
if (result)
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
extractFieldFromChild(child) {
|
|
38
|
+
if (child.isJSXExpressionContainer()) {
|
|
39
|
+
return this.extractFromExpressionContainer(child);
|
|
40
|
+
}
|
|
41
|
+
if (child.isJSXElement()) {
|
|
42
|
+
return this.extractFromChildElement(child);
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
extractFromExpressionContainer(container) {
|
|
47
|
+
const expression = container.get("expression");
|
|
48
|
+
if (expression.isJSXEmptyExpression())
|
|
49
|
+
return null;
|
|
50
|
+
const expr = expression;
|
|
51
|
+
if (expr.isMemberExpression() || expr.isOptionalMemberExpression()) {
|
|
52
|
+
return this.extractFromMemberExpression(expr);
|
|
53
|
+
}
|
|
54
|
+
if (expr.isLogicalExpression() && expr.node.operator === "&&") {
|
|
55
|
+
const left = expr.get("left");
|
|
56
|
+
if (left.isMemberExpression() ||
|
|
57
|
+
left.isOptionalMemberExpression()) {
|
|
58
|
+
return this.extractFromMemberExpression(left);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (expr.isCallExpression()) {
|
|
62
|
+
const callee = expr.get("callee");
|
|
63
|
+
if (callee.isMemberExpression()) {
|
|
64
|
+
const obj = callee.get("object");
|
|
65
|
+
if (obj.isMemberExpression() || obj.isOptionalMemberExpression()) {
|
|
66
|
+
return this.extractFromMemberExpression(obj);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (expr.isIdentifier()) {
|
|
71
|
+
return this.extractFromSimpleIdentifier(expr);
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
extractFromMemberExpression(expr) {
|
|
76
|
+
const rootId = this.expressionUtils.extractRootIdentifier(expr.node);
|
|
77
|
+
if (!rootId)
|
|
78
|
+
return null;
|
|
79
|
+
if (this.staticUtils.isDerivedFromStaticData(rootId.name, expr)) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const parts = this.expressionUtils.collectMemberExpressionPath(expr.node);
|
|
83
|
+
if (parts.length < 2)
|
|
84
|
+
return null;
|
|
85
|
+
const fieldParts = parts.slice(1);
|
|
86
|
+
const fieldPath = fieldParts.join(".");
|
|
87
|
+
if (EXCLUDED_FIELDS.includes(fieldPath))
|
|
88
|
+
return null;
|
|
89
|
+
if (fieldParts.some((p) => EXCLUDED_FIELDS.includes(p)))
|
|
90
|
+
return null;
|
|
91
|
+
return { fieldPath, rootIdentifier: rootId };
|
|
92
|
+
}
|
|
93
|
+
extractFromSimpleIdentifier(expr) {
|
|
94
|
+
const name = expr.node.name;
|
|
95
|
+
if (EXCLUDED_FIELDS.includes(name))
|
|
96
|
+
return null;
|
|
97
|
+
if (this.staticUtils.isDerivedFromStaticData(name, expr))
|
|
98
|
+
return null;
|
|
99
|
+
return { fieldPath: name, rootIdentifier: expr.node };
|
|
100
|
+
}
|
|
101
|
+
extractFromChildElement(child) {
|
|
102
|
+
const elementName = JSXUtils.getElementName(child.node.openingElement);
|
|
103
|
+
if (!elementName)
|
|
104
|
+
return null;
|
|
105
|
+
if (elementName === "Image" || elementName === "img") {
|
|
106
|
+
return this.extractFromImageElement(child);
|
|
107
|
+
}
|
|
108
|
+
const logicalParent = child.parentPath;
|
|
109
|
+
if (logicalParent?.isJSXExpressionContainer()) {
|
|
110
|
+
const logicalExpr = logicalParent.parentPath;
|
|
111
|
+
if (logicalExpr?.isLogicalExpression()) {
|
|
112
|
+
return this.extractFromConditionalImage(child);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
extractFromImageElement(imageElement) {
|
|
118
|
+
const openingElement = imageElement.get("openingElement");
|
|
119
|
+
const attrs = openingElement.node.attributes;
|
|
120
|
+
for (const attr of attrs) {
|
|
121
|
+
if (this.types.isJSXAttribute(attr) &&
|
|
122
|
+
this.types.isJSXIdentifier(attr.name) &&
|
|
123
|
+
attr.name.name === "src") {
|
|
124
|
+
if (attr.value &&
|
|
125
|
+
this.types.isJSXExpressionContainer(attr.value) &&
|
|
126
|
+
this.types.isExpression(attr.value.expression) &&
|
|
127
|
+
!this.types.isJSXEmptyExpression(attr.value.expression)) {
|
|
128
|
+
const expr = attr.value.expression;
|
|
129
|
+
if (this.types.isMemberExpression(expr) ||
|
|
130
|
+
this.types.isOptionalMemberExpression(expr)) {
|
|
131
|
+
const rootId = this.expressionUtils.extractRootIdentifier(expr);
|
|
132
|
+
if (!rootId)
|
|
133
|
+
return null;
|
|
134
|
+
const parts = this.expressionUtils.collectMemberExpressionPath(expr);
|
|
135
|
+
if (parts.length < 2)
|
|
136
|
+
return null;
|
|
137
|
+
const fieldPath = parts.slice(1).join(".");
|
|
138
|
+
if (EXCLUDED_FIELDS.includes(fieldPath))
|
|
139
|
+
return null;
|
|
140
|
+
return { fieldPath, rootIdentifier: rootId };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
extractFromConditionalImage(child) {
|
|
148
|
+
const elementName = JSXUtils.getElementName(child.node.openingElement);
|
|
149
|
+
if (elementName === "Image" || elementName === "img") {
|
|
150
|
+
return this.extractFromImageElement(child);
|
|
151
|
+
}
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
tryAddItemId(path, rootIdentifier, fieldPath) {
|
|
155
|
+
if (this.attributeUtils.hasAttribute(path, DATA_COLLECTION_ITEM_ID)) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const idField = this.resolveIdFieldName(path);
|
|
159
|
+
if (rootIdentifier.name === fieldPath) {
|
|
160
|
+
this.tryAddItemIdFromDestructuredParams(path, idField);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const idExpr = this.buildIdExpression(rootIdentifier.name, idField);
|
|
164
|
+
const binding = path.scope.getBinding(rootIdentifier.name);
|
|
165
|
+
if (!binding) {
|
|
166
|
+
this.tryAddItemIdFromParentComponent(path, rootIdentifier, idField);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (binding.path.isVariableDeclarator() ||
|
|
170
|
+
binding.kind === "param") {
|
|
171
|
+
this.attributeUtils.addExpressionAttribute(path, DATA_COLLECTION_ITEM_ID, idExpr);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Build the ID expression for a given root object name.
|
|
176
|
+
* If a specific idField was resolved from a key attribute, generates root?.id (or root?._id).
|
|
177
|
+
* If unknown (cross-file component), generates root?.id || root?._id to cover both conventions.
|
|
178
|
+
*/
|
|
179
|
+
buildIdExpression(rootName, idField) {
|
|
180
|
+
if (idField) {
|
|
181
|
+
return this.types.optionalMemberExpression(this.types.identifier(rootName), this.types.identifier(idField), false, true);
|
|
182
|
+
}
|
|
183
|
+
return this.types.logicalExpression("||", this.types.optionalMemberExpression(this.types.identifier(rootName), this.types.identifier("id"), false, true), this.types.optionalMemberExpression(this.types.identifier(rootName), this.types.identifier("_id"), false, true));
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Walk up the JSX tree to find a key attribute that accesses .id or ._id.
|
|
187
|
+
* Returns null when no key is found (e.g. cross-file component receiving props).
|
|
188
|
+
*/
|
|
189
|
+
resolveIdFieldName(path) {
|
|
190
|
+
let current = path.parentPath;
|
|
191
|
+
while (current) {
|
|
192
|
+
if (current.isJSXElement()) {
|
|
193
|
+
const opening = current.get("openingElement");
|
|
194
|
+
const field = this.extractIdFieldFromKey(opening);
|
|
195
|
+
if (field)
|
|
196
|
+
return field;
|
|
197
|
+
}
|
|
198
|
+
current = current.parentPath;
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
extractIdFieldFromKey(path) {
|
|
203
|
+
for (const attr of path.node.attributes) {
|
|
204
|
+
if (this.types.isJSXAttribute(attr) &&
|
|
205
|
+
this.types.isJSXIdentifier(attr.name) &&
|
|
206
|
+
attr.name.name === "key" &&
|
|
207
|
+
attr.value &&
|
|
208
|
+
this.types.isJSXExpressionContainer(attr.value)) {
|
|
209
|
+
const expr = attr.value.expression;
|
|
210
|
+
if (this.types.isMemberExpression(expr) &&
|
|
211
|
+
this.types.isIdentifier(expr.property)) {
|
|
212
|
+
const name = expr.property.name;
|
|
213
|
+
if (name === "id" || name === "_id")
|
|
214
|
+
return name;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* For simple identifiers from destructured component props like ({ name, price }),
|
|
222
|
+
* find or inject the id field in the ObjectPattern so we can reference it directly.
|
|
223
|
+
*/
|
|
224
|
+
tryAddItemIdFromDestructuredParams(path, idField) {
|
|
225
|
+
const fn = path.getFunctionParent();
|
|
226
|
+
if (!fn)
|
|
227
|
+
return;
|
|
228
|
+
const params = fn.get("params");
|
|
229
|
+
for (const param of Array.isArray(params) ? params : [params]) {
|
|
230
|
+
if (!param.isObjectPattern())
|
|
231
|
+
continue;
|
|
232
|
+
for (const prop of param.get("properties")) {
|
|
233
|
+
if (prop.isObjectProperty() &&
|
|
234
|
+
this.types.isIdentifier(prop.node.key) &&
|
|
235
|
+
(prop.node.key.name === "id" || prop.node.key.name === "_id") &&
|
|
236
|
+
this.types.isIdentifier(prop.node.value)) {
|
|
237
|
+
this.attributeUtils.addExpressionAttribute(path, DATA_COLLECTION_ITEM_ID, this.types.identifier(prop.node.value.name));
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const fieldToInject = idField ?? "id";
|
|
242
|
+
param.node.properties.push(this.types.objectProperty(this.types.identifier(fieldToInject), this.types.identifier(fieldToInject), false, true));
|
|
243
|
+
this.attributeUtils.addExpressionAttribute(path, DATA_COLLECTION_ITEM_ID, this.types.identifier(fieldToInject));
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
tryAddItemIdFromParentComponent(path, rootIdentifier, idField) {
|
|
248
|
+
let current = path.parentPath;
|
|
249
|
+
while (current) {
|
|
250
|
+
if (current.isJSXElement()) {
|
|
251
|
+
const opening = current.get("openingElement");
|
|
252
|
+
const name = JSXUtils.getElementName(opening.node);
|
|
253
|
+
if (name && JSXUtils.isCustomComponent(name)) {
|
|
254
|
+
const keyAttr = this.findKeyWithId(opening);
|
|
255
|
+
if (keyAttr) {
|
|
256
|
+
const idExpr = this.buildIdExpression(rootIdentifier.name, idField);
|
|
257
|
+
this.attributeUtils.addExpressionAttribute(path, DATA_COLLECTION_ITEM_ID, idExpr);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
current = current.parentPath;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
findKeyWithId(path) {
|
|
266
|
+
for (const attr of path.node.attributes) {
|
|
267
|
+
if (this.types.isJSXAttribute(attr) &&
|
|
268
|
+
this.types.isJSXIdentifier(attr.name) &&
|
|
269
|
+
attr.name.name === "key" &&
|
|
270
|
+
attr.value &&
|
|
271
|
+
this.types.isJSXExpressionContainer(attr.value)) {
|
|
272
|
+
const expr = attr.value.expression;
|
|
273
|
+
if (this.types.isExpression(expr)) {
|
|
274
|
+
return this.expressionUtils.isIdAccess(expr);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=collection-item-field-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-item-field-processor.js","sourceRoot":"","sources":["../../src/processors/collection-item-field-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { NodePath } from "@babel/traverse";
|
|
2
|
+
import type * as t from "@babel/types";
|
|
3
|
+
export declare class DataItemIdProcessor {
|
|
4
|
+
private types;
|
|
5
|
+
private attributeUtils;
|
|
6
|
+
private expressionUtils;
|
|
7
|
+
constructor(types: typeof t);
|
|
8
|
+
process(path: NodePath<t.JSXOpeningElement>): void;
|
|
9
|
+
private findKeyAttribute;
|
|
10
|
+
private extractKeyExpression;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=collection-item-id-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-item-id-processor.d.ts","sourceRoot":"","sources":["../../src/processors/collection-item-id-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AAOvC,qBAAa,mBAAmB;IAIlB,OAAO,CAAC,KAAK;IAHzB,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,eAAe,CAA0B;gBAE7B,KAAK,EAAE,OAAO,CAAC;IAKnC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAwBlD,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,oBAAoB;CAY7B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { DATA_COLLECTION_ITEM_ID } from "../consts.js";
|
|
2
|
+
import { JSXAttributeUtils, ExpressionAnalysisUtils, } from "./shared-utils.js";
|
|
3
|
+
export class DataItemIdProcessor {
|
|
4
|
+
types;
|
|
5
|
+
attributeUtils;
|
|
6
|
+
expressionUtils;
|
|
7
|
+
constructor(types) {
|
|
8
|
+
this.types = types;
|
|
9
|
+
this.attributeUtils = new JSXAttributeUtils(types);
|
|
10
|
+
this.expressionUtils = new ExpressionAnalysisUtils(types);
|
|
11
|
+
}
|
|
12
|
+
process(path) {
|
|
13
|
+
if (this.attributeUtils.hasAttribute(path, DATA_COLLECTION_ITEM_ID)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const keyAttr = this.findKeyAttribute(path);
|
|
17
|
+
if (!keyAttr)
|
|
18
|
+
return;
|
|
19
|
+
const expression = this.extractKeyExpression(keyAttr);
|
|
20
|
+
if (!expression)
|
|
21
|
+
return;
|
|
22
|
+
if (!this.expressionUtils.isIdAccess(expression))
|
|
23
|
+
return;
|
|
24
|
+
const optionalExpr = this.types.isMemberExpression(expression)
|
|
25
|
+
? this.expressionUtils.createOptionalChainExpression(expression)
|
|
26
|
+
: expression;
|
|
27
|
+
this.attributeUtils.addExpressionAttribute(path, DATA_COLLECTION_ITEM_ID, optionalExpr);
|
|
28
|
+
}
|
|
29
|
+
findKeyAttribute(path) {
|
|
30
|
+
for (const attr of path.node.attributes) {
|
|
31
|
+
if (this.types.isJSXAttribute(attr) &&
|
|
32
|
+
this.types.isJSXIdentifier(attr.name) &&
|
|
33
|
+
attr.name.name === "key") {
|
|
34
|
+
return attr;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
extractKeyExpression(attr) {
|
|
40
|
+
if (!attr.value)
|
|
41
|
+
return null;
|
|
42
|
+
if (this.types.isJSXExpressionContainer(attr.value)) {
|
|
43
|
+
const expr = attr.value.expression;
|
|
44
|
+
if (this.types.isExpression(expr))
|
|
45
|
+
return expr;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=collection-item-id-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-item-id-processor.js","sourceRoot":"","sources":["../../src/processors/collection-item-id-processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,OAAO,mBAAmB;IAIV;IAHZ,cAAc,CAAoB;IAClC,eAAe,CAA0B;IAEjD,YAAoB,KAAe;QAAf,UAAK,GAAL,KAAK,CAAU;QACjC,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,eAAe,GAAG,IAAI,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,CAAC,IAAmC;QACzC,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,uBAAuB,CAAC,EAAE,CAAC;YACpE,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO;QAEzD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC;YAC5D,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,UAAU,CAAC;YAChE,CAAC,CAAC,UAAU,CAAC;QAEf,IAAI,CAAC,cAAc,CAAC,sBAAsB,CACxC,IAAI,EACJ,uBAAuB,EACvB,YAAY,CACb,CAAC;IACJ,CAAC;IAEO,gBAAgB,CACtB,IAAmC;QAEnC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IACE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,EACxB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,oBAAoB,CAC1B,IAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAE7B,IAAI,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QACjD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { NodePath } from "@babel/traverse";
|
|
2
|
+
import type * as t from "@babel/types";
|
|
3
|
+
export declare class ReferenceFieldProcessor {
|
|
4
|
+
private types;
|
|
5
|
+
private attributeUtils;
|
|
6
|
+
private expressionUtils;
|
|
7
|
+
private typeCheckUtils;
|
|
8
|
+
constructor(types: typeof t);
|
|
9
|
+
process(path: NodePath<t.JSXOpeningElement>): void;
|
|
10
|
+
/**
|
|
11
|
+
* Strategy A: Element is the direct return of a .map() callback
|
|
12
|
+
* whose array is a reference variable (initialized via type-check pattern).
|
|
13
|
+
*/
|
|
14
|
+
private isReturnedFromReferenceMap;
|
|
15
|
+
/**
|
|
16
|
+
* Strategy B: Element is inside a && expression where the left operand
|
|
17
|
+
* references a field name that appears in an ancestor's data-collection-reference.
|
|
18
|
+
*/
|
|
19
|
+
private isInsideReferenceLogicalExpression;
|
|
20
|
+
/**
|
|
21
|
+
* Strategy C: Element is inside a .map() chain on a reference property.
|
|
22
|
+
* e.g. item.relatedProducts.map(...) or item.relatedProducts.filter(...).map(...)
|
|
23
|
+
*/
|
|
24
|
+
private isInReferencePropertyMapChain;
|
|
25
|
+
private findEnclosingMapCallback;
|
|
26
|
+
private isReferenceArray;
|
|
27
|
+
private extractFieldNameFromExpression;
|
|
28
|
+
private isFieldInAncestorReference;
|
|
29
|
+
private extractReferenceFieldFromMapChain;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=collection-reference-field-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-reference-field-processor.d.ts","sourceRoot":"","sources":["../../src/processors/collection-reference-field-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AAWvC,qBAAa,uBAAuB;IAKtB,OAAO,CAAC,KAAK;IAJzB,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,cAAc,CAAiB;gBAEnB,KAAK,EAAE,OAAO,CAAC;IAMnC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAoBlD;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAsBlC;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAiB1C;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAuBrC,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,8BAA8B;IActC,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,iCAAiC;CAmC1C"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { DATA_COLLECTION_FIELD_REFERENCE, DATA_COLLECTION_REFERENCE, } from "../consts.js";
|
|
2
|
+
import { JSXAttributeUtils, ExpressionAnalysisUtils, TypeCheckUtils, } from "./shared-utils.js";
|
|
3
|
+
export class ReferenceFieldProcessor {
|
|
4
|
+
types;
|
|
5
|
+
attributeUtils;
|
|
6
|
+
expressionUtils;
|
|
7
|
+
typeCheckUtils;
|
|
8
|
+
constructor(types) {
|
|
9
|
+
this.types = types;
|
|
10
|
+
this.attributeUtils = new JSXAttributeUtils(types);
|
|
11
|
+
this.expressionUtils = new ExpressionAnalysisUtils(types);
|
|
12
|
+
this.typeCheckUtils = new TypeCheckUtils(types);
|
|
13
|
+
}
|
|
14
|
+
process(path) {
|
|
15
|
+
if (this.attributeUtils.hasAttribute(path, DATA_COLLECTION_FIELD_REFERENCE)) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (this.isReturnedFromReferenceMap(path) ||
|
|
19
|
+
this.isInsideReferenceLogicalExpression(path) ||
|
|
20
|
+
this.isInReferencePropertyMapChain(path)) {
|
|
21
|
+
this.attributeUtils.addStringAttribute(path, DATA_COLLECTION_FIELD_REFERENCE, "true");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Strategy A: Element is the direct return of a .map() callback
|
|
26
|
+
* whose array is a reference variable (initialized via type-check pattern).
|
|
27
|
+
*/
|
|
28
|
+
isReturnedFromReferenceMap(path) {
|
|
29
|
+
const jsxElement = path.parentPath;
|
|
30
|
+
if (!jsxElement?.isJSXElement())
|
|
31
|
+
return false;
|
|
32
|
+
const parent = jsxElement.parentPath;
|
|
33
|
+
if (!parent)
|
|
34
|
+
return false;
|
|
35
|
+
const callbackFn = this.findEnclosingMapCallback(parent);
|
|
36
|
+
if (!callbackFn)
|
|
37
|
+
return false;
|
|
38
|
+
const mapCall = callbackFn.parentPath;
|
|
39
|
+
if (!mapCall?.isCallExpression())
|
|
40
|
+
return false;
|
|
41
|
+
const callee = mapCall.get("callee");
|
|
42
|
+
if (!callee.isMemberExpression())
|
|
43
|
+
return false;
|
|
44
|
+
const arrayObj = callee.get("object");
|
|
45
|
+
return this.isReferenceArray(arrayObj);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Strategy B: Element is inside a && expression where the left operand
|
|
49
|
+
* references a field name that appears in an ancestor's data-collection-reference.
|
|
50
|
+
*/
|
|
51
|
+
isInsideReferenceLogicalExpression(path) {
|
|
52
|
+
const jsxElement = path.parentPath;
|
|
53
|
+
if (!jsxElement?.isJSXElement())
|
|
54
|
+
return false;
|
|
55
|
+
const logicalParent = jsxElement.parentPath;
|
|
56
|
+
if (!logicalParent?.isLogicalExpression())
|
|
57
|
+
return false;
|
|
58
|
+
if (logicalParent.node.operator !== "&&")
|
|
59
|
+
return false;
|
|
60
|
+
const left = logicalParent.node.left;
|
|
61
|
+
const fieldName = this.extractFieldNameFromExpression(left);
|
|
62
|
+
if (!fieldName)
|
|
63
|
+
return false;
|
|
64
|
+
return this.isFieldInAncestorReference(path, fieldName);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Strategy C: Element is inside a .map() chain on a reference property.
|
|
68
|
+
* e.g. item.relatedProducts.map(...) or item.relatedProducts.filter(...).map(...)
|
|
69
|
+
*/
|
|
70
|
+
isInReferencePropertyMapChain(path) {
|
|
71
|
+
const jsxElement = path.parentPath;
|
|
72
|
+
if (!jsxElement?.isJSXElement())
|
|
73
|
+
return false;
|
|
74
|
+
let current = jsxElement;
|
|
75
|
+
while (current) {
|
|
76
|
+
if (current.isCallExpression()) {
|
|
77
|
+
const callee = current.get("callee");
|
|
78
|
+
if (callee.isMemberExpression()) {
|
|
79
|
+
const fieldName = this.extractReferenceFieldFromMapChain(callee);
|
|
80
|
+
if (fieldName && this.isFieldInAncestorReference(path, fieldName)) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
current = current.parentPath;
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
findEnclosingMapCallback(path) {
|
|
90
|
+
let current = path;
|
|
91
|
+
while (current) {
|
|
92
|
+
if (current.isArrowFunctionExpression() || current.isFunctionExpression()) {
|
|
93
|
+
const parent = current.parentPath;
|
|
94
|
+
if (parent?.isCallExpression()) {
|
|
95
|
+
const callee = parent.get("callee");
|
|
96
|
+
if (callee.isMemberExpression()) {
|
|
97
|
+
const prop = callee.get("property");
|
|
98
|
+
if (prop.isIdentifier() &&
|
|
99
|
+
(prop.node.name === "map" || prop.node.name === "flatMap")) {
|
|
100
|
+
return current;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
current = current.parentPath;
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
isReferenceArray(path) {
|
|
110
|
+
if (!path.isIdentifier())
|
|
111
|
+
return false;
|
|
112
|
+
const binding = path.scope.getBinding(path.node.name);
|
|
113
|
+
if (!binding?.path.isVariableDeclarator())
|
|
114
|
+
return false;
|
|
115
|
+
const init = binding.path.get("init");
|
|
116
|
+
if (!init.isConditionalExpression())
|
|
117
|
+
return false;
|
|
118
|
+
const test = init.node.test;
|
|
119
|
+
return this.typeCheckUtils.isReferenceTypeCheck(test);
|
|
120
|
+
}
|
|
121
|
+
extractFieldNameFromExpression(node) {
|
|
122
|
+
if (this.types.isMemberExpression(node)) {
|
|
123
|
+
const prop = node.property;
|
|
124
|
+
if (this.types.isIdentifier(prop))
|
|
125
|
+
return prop.name;
|
|
126
|
+
}
|
|
127
|
+
if (this.types.isOptionalMemberExpression(node)) {
|
|
128
|
+
const prop = node.property;
|
|
129
|
+
if (this.types.isIdentifier(prop))
|
|
130
|
+
return prop.name;
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
isFieldInAncestorReference(path, fieldName) {
|
|
135
|
+
const ancestor = this.attributeUtils.findAncestorWithAttribute(path, DATA_COLLECTION_REFERENCE);
|
|
136
|
+
if (!ancestor)
|
|
137
|
+
return false;
|
|
138
|
+
const refValue = this.attributeUtils.getAttributeStringValue(ancestor, DATA_COLLECTION_REFERENCE);
|
|
139
|
+
if (!refValue)
|
|
140
|
+
return false;
|
|
141
|
+
const references = refValue.split(",").map((r) => r.trim());
|
|
142
|
+
return references.includes(fieldName);
|
|
143
|
+
}
|
|
144
|
+
extractReferenceFieldFromMapChain(callee) {
|
|
145
|
+
const prop = callee.get("property");
|
|
146
|
+
if (!prop.isIdentifier())
|
|
147
|
+
return null;
|
|
148
|
+
const methodName = prop.node.name;
|
|
149
|
+
const obj = callee.get("object");
|
|
150
|
+
if (methodName === "map" || methodName === "flatMap") {
|
|
151
|
+
if (obj.isMemberExpression()) {
|
|
152
|
+
const fieldProp = obj.get("property");
|
|
153
|
+
if (fieldProp.isIdentifier())
|
|
154
|
+
return fieldProp.node.name;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (methodName === "map" || methodName === "flatMap") {
|
|
158
|
+
if (obj.isCallExpression()) {
|
|
159
|
+
const innerCallee = obj.get("callee");
|
|
160
|
+
if (innerCallee.isMemberExpression()) {
|
|
161
|
+
return this.extractReferenceFieldFromMapChain(innerCallee);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (["filter", "sort", "slice"].includes(methodName) &&
|
|
166
|
+
obj.isMemberExpression()) {
|
|
167
|
+
const fieldProp = obj.get("property");
|
|
168
|
+
if (fieldProp.isIdentifier())
|
|
169
|
+
return fieldProp.node.name;
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=collection-reference-field-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-reference-field-processor.js","sourceRoot":"","sources":["../../src/processors/collection-reference-field-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { NodePath } from "@babel/traverse";
|
|
2
|
+
import type * as t from "@babel/types";
|
|
3
|
+
import type { CollectionInfo } from "../types.js";
|
|
4
|
+
export declare class CollectionTracingUtils {
|
|
5
|
+
private types;
|
|
6
|
+
private expressionUtils;
|
|
7
|
+
private bindingUtils;
|
|
8
|
+
private callUtils;
|
|
9
|
+
private visitedSetters;
|
|
10
|
+
private visitedGetByIdSetters;
|
|
11
|
+
constructor(types: typeof t);
|
|
12
|
+
resetVisited(): void;
|
|
13
|
+
traceCollectionSource(path: NodePath<t.Expression>): CollectionInfo | null;
|
|
14
|
+
private traceExpression;
|
|
15
|
+
private traceIdentifierToCollection;
|
|
16
|
+
private traceVariableDeclarator;
|
|
17
|
+
private traceUseStateSetter;
|
|
18
|
+
private traceMemberExpression;
|
|
19
|
+
private traceCallExpression;
|
|
20
|
+
/**
|
|
21
|
+
* Trace useQuery({ queryFn: () => base44.entities.X.list() }) patterns.
|
|
22
|
+
* Extracts the collection from the queryFn return expression.
|
|
23
|
+
*/
|
|
24
|
+
private traceUseQueryCall;
|
|
25
|
+
private checkDirectServiceCall;
|
|
26
|
+
private traceArrayDestructuring;
|
|
27
|
+
private traceObjectDestructuring;
|
|
28
|
+
private tracePromiseAllElement;
|
|
29
|
+
private traceParameterToCollection;
|
|
30
|
+
private traceArrayExpression;
|
|
31
|
+
private getFunctionName;
|
|
32
|
+
private getJSXElementName;
|
|
33
|
+
traceGetByIdSource(path: NodePath): CollectionInfo | null;
|
|
34
|
+
private findGetByIdInScope;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=collection-tracing-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-tracing-utils.d.ts","sourceRoot":"","sources":["../../src/processors/collection-tracing-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,qBAAa,sBAAsB;IAOrB,OAAO,CAAC,KAAK;IANzB,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,qBAAqB,CAAqB;gBAE9B,KAAK,EAAE,OAAO,CAAC;IAMnC,YAAY,IAAI,IAAI;IAKpB,qBAAqB,CACnB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GAC3B,cAAc,GAAG,IAAI;IAKxB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,2BAA2B;IAkBnC,OAAO,CAAC,uBAAuB;IAkD/B,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,mBAAmB;IAoB3B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAyCzB,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,wBAAwB;IAmChC,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,0BAA0B;IAgElC,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,iBAAiB;IAOzB,kBAAkB,CAChB,IAAI,EAAE,QAAQ,GACb,cAAc,GAAG,IAAI;IAKxB,OAAO,CAAC,kBAAkB;CA0B3B"}
|