@base44-preview/vite-plugin 0.2.25-pr.36.792e85b → 0.2.26-pr.43.056eecd

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.
Files changed (61) hide show
  1. package/dist/consts.d.ts +13 -0
  2. package/dist/consts.d.ts.map +1 -0
  3. package/dist/consts.js +13 -0
  4. package/dist/consts.js.map +1 -0
  5. package/dist/jsx-processor.d.ts +10 -1
  6. package/dist/jsx-processor.d.ts.map +1 -1
  7. package/dist/jsx-processor.js +47 -5
  8. package/dist/jsx-processor.js.map +1 -1
  9. package/dist/jsx-utils.d.ts +9 -0
  10. package/dist/jsx-utils.d.ts.map +1 -1
  11. package/dist/jsx-utils.js +86 -0
  12. package/dist/jsx-utils.js.map +1 -1
  13. package/dist/processors/collection-id-processor.d.ts +20 -0
  14. package/dist/processors/collection-id-processor.d.ts.map +1 -0
  15. package/dist/processors/collection-id-processor.js +182 -0
  16. package/dist/processors/collection-id-processor.js.map +1 -0
  17. package/dist/processors/collection-item-field-processor.d.ts +22 -0
  18. package/dist/processors/collection-item-field-processor.d.ts.map +1 -0
  19. package/dist/processors/collection-item-field-processor.js +215 -0
  20. package/dist/processors/collection-item-field-processor.js.map +1 -0
  21. package/dist/processors/collection-item-id-processor.d.ts +12 -0
  22. package/dist/processors/collection-item-id-processor.d.ts.map +1 -0
  23. package/dist/processors/collection-item-id-processor.js +50 -0
  24. package/dist/processors/collection-item-id-processor.js.map +1 -0
  25. package/dist/processors/collection-reference-field-processor.d.ts +31 -0
  26. package/dist/processors/collection-reference-field-processor.d.ts.map +1 -0
  27. package/dist/processors/collection-reference-field-processor.js +174 -0
  28. package/dist/processors/collection-reference-field-processor.js.map +1 -0
  29. package/dist/processors/collection-tracing-utils.d.ts +31 -0
  30. package/dist/processors/collection-tracing-utils.d.ts.map +1 -0
  31. package/dist/processors/collection-tracing-utils.js +326 -0
  32. package/dist/processors/collection-tracing-utils.js.map +1 -0
  33. package/dist/processors/shared-utils.d.ts +64 -0
  34. package/dist/processors/shared-utils.d.ts.map +1 -1
  35. package/dist/processors/shared-utils.js +464 -0
  36. package/dist/processors/shared-utils.js.map +1 -1
  37. package/dist/processors/static-array-processor.d.ts +2 -3
  38. package/dist/processors/static-array-processor.d.ts.map +1 -1
  39. package/dist/processors/static-array-processor.js +2 -3
  40. package/dist/processors/static-array-processor.js.map +1 -1
  41. package/dist/types.d.ts +5 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +2 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/visual-edit-plugin.d.ts +0 -1
  46. package/dist/visual-edit-plugin.d.ts.map +1 -1
  47. package/dist/visual-edit-plugin.js +29 -178
  48. package/dist/visual-edit-plugin.js.map +1 -1
  49. package/package.json +1 -1
  50. package/src/consts.ts +14 -0
  51. package/src/jsx-processor.ts +58 -9
  52. package/src/jsx-utils.ts +116 -0
  53. package/src/processors/collection-id-processor.ts +261 -0
  54. package/src/processors/collection-item-field-processor.ts +321 -0
  55. package/src/processors/collection-item-id-processor.ts +69 -0
  56. package/src/processors/collection-reference-field-processor.ts +225 -0
  57. package/src/processors/collection-tracing-utils.ts +436 -0
  58. package/src/processors/shared-utils.ts +595 -0
  59. package/src/processors/static-array-processor.ts +6 -3
  60. package/src/types.ts +4 -0
  61. package/src/visual-edit-plugin.ts +34 -215
@@ -0,0 +1,215 @@
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);
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) {
155
+ if (this.attributeUtils.hasAttribute(path, DATA_COLLECTION_ITEM_ID)) {
156
+ return;
157
+ }
158
+ const idExpr = this.types.optionalMemberExpression(this.types.identifier(rootIdentifier.name), this.types.identifier("_id"), false, true);
159
+ const binding = path.scope.getBinding(rootIdentifier.name);
160
+ if (!binding) {
161
+ this.tryAddItemIdFromParentComponent(path, rootIdentifier);
162
+ return;
163
+ }
164
+ if (binding.path.isVariableDeclarator()) {
165
+ this.attributeUtils.addExpressionAttribute(path, DATA_COLLECTION_ITEM_ID, idExpr);
166
+ return;
167
+ }
168
+ const fn = path.getFunctionParent();
169
+ if (fn) {
170
+ const params = fn.get("params");
171
+ for (const param of (Array.isArray(params) ? params : [params])) {
172
+ if (param.isIdentifier() && param.node.name === rootIdentifier.name) {
173
+ this.attributeUtils.addExpressionAttribute(path, DATA_COLLECTION_ITEM_ID, idExpr);
174
+ return;
175
+ }
176
+ }
177
+ }
178
+ }
179
+ tryAddItemIdFromParentComponent(path, rootIdentifier) {
180
+ let current = path.parentPath;
181
+ while (current) {
182
+ if (current.isJSXElement()) {
183
+ const opening = current.get("openingElement");
184
+ const name = JSXUtils.getElementName(opening.node);
185
+ if (name && JSXUtils.isCustomComponent(name)) {
186
+ const keyAttr = this.findKeyWithId(opening);
187
+ if (keyAttr) {
188
+ const idExpr = this.types.optionalMemberExpression(this.types.identifier(rootIdentifier.name), this.types.identifier("_id"), false, true);
189
+ this.attributeUtils.addExpressionAttribute(path, DATA_COLLECTION_ITEM_ID, idExpr);
190
+ return;
191
+ }
192
+ }
193
+ }
194
+ current = current.parentPath;
195
+ }
196
+ }
197
+ findKeyWithId(path) {
198
+ for (const attr of path.node.attributes) {
199
+ if (this.types.isJSXAttribute(attr) &&
200
+ this.types.isJSXIdentifier(attr.name) &&
201
+ attr.name.name === "key" &&
202
+ attr.value &&
203
+ this.types.isJSXExpressionContainer(attr.value)) {
204
+ const expr = attr.value.expression;
205
+ if (this.types.isExpression(expr)) {
206
+ return (this.types.isMemberExpression(expr) &&
207
+ this.types.isIdentifier(expr.property) &&
208
+ expr.property.name === "_id");
209
+ }
210
+ }
211
+ }
212
+ return false;
213
+ }
214
+ }
215
+ //# 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,31 @@
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
+ private checkDirectServiceCall;
21
+ private traceArrayDestructuring;
22
+ private traceObjectDestructuring;
23
+ private tracePromiseAllElement;
24
+ private traceParameterToCollection;
25
+ private traceArrayExpression;
26
+ private getFunctionName;
27
+ private getJSXElementName;
28
+ traceGetByIdSource(path: NodePath): CollectionInfo | null;
29
+ private findGetByIdInScope;
30
+ }
31
+ //# 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;IAiB3B,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,wBAAwB;IA+BhC,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,0BAA0B;IA4DlC,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;CAqB3B"}