@base44-preview/vite-plugin 0.2.27-pr.41.77be9cb → 0.2.27-pr.43.93e5e43

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 (149) hide show
  1. package/dist/consts.d.ts +12 -0
  2. package/dist/consts.d.ts.map +1 -0
  3. package/dist/consts.js +12 -0
  4. package/dist/consts.js.map +1 -0
  5. package/dist/injections/visual-edit-agent.d.ts +1 -1
  6. package/dist/injections/visual-edit-agent.d.ts.map +1 -1
  7. package/dist/injections/visual-edit-agent.js +566 -1
  8. package/dist/injections/visual-edit-agent.js.map +1 -1
  9. package/dist/jsx-processor.d.ts +4 -1
  10. package/dist/jsx-processor.d.ts.map +1 -1
  11. package/dist/jsx-processor.js +33 -6
  12. package/dist/jsx-processor.js.map +1 -1
  13. package/dist/jsx-utils.d.ts +9 -0
  14. package/dist/jsx-utils.d.ts.map +1 -1
  15. package/dist/jsx-utils.js +86 -0
  16. package/dist/jsx-utils.js.map +1 -1
  17. package/dist/processors/collection-id-processor.d.ts +20 -0
  18. package/dist/processors/collection-id-processor.d.ts.map +1 -0
  19. package/dist/processors/collection-id-processor.js +182 -0
  20. package/dist/processors/collection-id-processor.js.map +1 -0
  21. package/dist/processors/collection-item-field-processor.d.ts +39 -0
  22. package/dist/processors/collection-item-field-processor.d.ts.map +1 -0
  23. package/dist/processors/collection-item-field-processor.js +281 -0
  24. package/dist/processors/collection-item-field-processor.js.map +1 -0
  25. package/dist/processors/collection-item-id-processor.d.ts +12 -0
  26. package/dist/processors/collection-item-id-processor.d.ts.map +1 -0
  27. package/dist/processors/collection-item-id-processor.js +50 -0
  28. package/dist/processors/collection-item-id-processor.js.map +1 -0
  29. package/dist/processors/collection-reference-field-processor.d.ts +31 -0
  30. package/dist/processors/collection-reference-field-processor.d.ts.map +1 -0
  31. package/dist/processors/collection-reference-field-processor.js +174 -0
  32. package/dist/processors/collection-reference-field-processor.js.map +1 -0
  33. package/dist/processors/collection-tracing-utils.d.ts +36 -0
  34. package/dist/processors/collection-tracing-utils.d.ts.map +1 -0
  35. package/dist/processors/collection-tracing-utils.js +390 -0
  36. package/dist/processors/collection-tracing-utils.js.map +1 -0
  37. package/dist/processors/shared-utils.d.ts +77 -0
  38. package/dist/processors/shared-utils.d.ts.map +1 -1
  39. package/dist/processors/shared-utils.js +525 -0
  40. package/dist/processors/shared-utils.js.map +1 -1
  41. package/dist/processors/static-array-processor.d.ts +2 -3
  42. package/dist/processors/static-array-processor.d.ts.map +1 -1
  43. package/dist/processors/static-array-processor.js +2 -3
  44. package/dist/processors/static-array-processor.js.map +1 -1
  45. package/dist/statics/index.mjs +2 -2
  46. package/dist/statics/index.mjs.map +1 -1
  47. package/dist/types.d.ts +5 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/visual-edit-plugin.d.ts +0 -1
  52. package/dist/visual-edit-plugin.d.ts.map +1 -1
  53. package/dist/visual-edit-plugin.js +29 -178
  54. package/dist/visual-edit-plugin.js.map +1 -1
  55. package/package.json +1 -1
  56. package/src/consts.ts +12 -0
  57. package/src/injections/visual-edit-agent.ts +698 -1
  58. package/src/jsx-processor.ts +41 -14
  59. package/src/jsx-utils.ts +116 -0
  60. package/src/processors/collection-id-processor.ts +261 -0
  61. package/src/processors/collection-item-field-processor.ts +433 -0
  62. package/src/processors/collection-item-id-processor.ts +69 -0
  63. package/src/processors/collection-reference-field-processor.ts +225 -0
  64. package/src/processors/collection-tracing-utils.ts +507 -0
  65. package/src/processors/shared-utils.ts +671 -0
  66. package/src/processors/static-array-processor.ts +6 -3
  67. package/src/types.ts +4 -0
  68. package/src/visual-edit-plugin.ts +34 -215
  69. package/dist/injections/visual-edit-agent/capabilities/inline-editing/core.d.ts +0 -25
  70. package/dist/injections/visual-edit-agent/capabilities/inline-editing/core.d.ts.map +0 -1
  71. package/dist/injections/visual-edit-agent/capabilities/inline-editing/core.js +0 -95
  72. package/dist/injections/visual-edit-agent/capabilities/inline-editing/core.js.map +0 -1
  73. package/dist/injections/visual-edit-agent/capabilities/inline-editing/index.d.ts +0 -4
  74. package/dist/injections/visual-edit-agent/capabilities/inline-editing/index.d.ts.map +0 -1
  75. package/dist/injections/visual-edit-agent/capabilities/inline-editing/index.js +0 -4
  76. package/dist/injections/visual-edit-agent/capabilities/inline-editing/index.js.map +0 -1
  77. package/dist/injections/visual-edit-agent/capabilities/inline-editing/styles.d.ts +0 -9
  78. package/dist/injections/visual-edit-agent/capabilities/inline-editing/styles.d.ts.map +0 -1
  79. package/dist/injections/visual-edit-agent/capabilities/inline-editing/styles.js +0 -26
  80. package/dist/injections/visual-edit-agent/capabilities/inline-editing/styles.js.map +0 -1
  81. package/dist/injections/visual-edit-agent/capabilities/inline-editing/validation.d.ts +0 -17
  82. package/dist/injections/visual-edit-agent/capabilities/inline-editing/validation.d.ts.map +0 -1
  83. package/dist/injections/visual-edit-agent/capabilities/inline-editing/validation.js +0 -76
  84. package/dist/injections/visual-edit-agent/capabilities/inline-editing/validation.js.map +0 -1
  85. package/dist/injections/visual-edit-agent/constants.d.ts +0 -10
  86. package/dist/injections/visual-edit-agent/constants.d.ts.map +0 -1
  87. package/dist/injections/visual-edit-agent/constants.js +0 -10
  88. package/dist/injections/visual-edit-agent/constants.js.map +0 -1
  89. package/dist/injections/visual-edit-agent/handlers/click-handlers.d.ts +0 -10
  90. package/dist/injections/visual-edit-agent/handlers/click-handlers.d.ts.map +0 -1
  91. package/dist/injections/visual-edit-agent/handlers/click-handlers.js +0 -117
  92. package/dist/injections/visual-edit-agent/handlers/click-handlers.js.map +0 -1
  93. package/dist/injections/visual-edit-agent/handlers/hover-handlers.d.ts +0 -14
  94. package/dist/injections/visual-edit-agent/handlers/hover-handlers.d.ts.map +0 -1
  95. package/dist/injections/visual-edit-agent/handlers/hover-handlers.js +0 -64
  96. package/dist/injections/visual-edit-agent/handlers/hover-handlers.js.map +0 -1
  97. package/dist/injections/visual-edit-agent/handlers/inline-edit-handlers.d.ts +0 -14
  98. package/dist/injections/visual-edit-agent/handlers/inline-edit-handlers.d.ts.map +0 -1
  99. package/dist/injections/visual-edit-agent/handlers/inline-edit-handlers.js +0 -114
  100. package/dist/injections/visual-edit-agent/handlers/inline-edit-handlers.js.map +0 -1
  101. package/dist/injections/visual-edit-agent/handlers/message-handlers.d.ts +0 -26
  102. package/dist/injections/visual-edit-agent/handlers/message-handlers.d.ts.map +0 -1
  103. package/dist/injections/visual-edit-agent/handlers/message-handlers.js +0 -148
  104. package/dist/injections/visual-edit-agent/handlers/message-handlers.js.map +0 -1
  105. package/dist/injections/visual-edit-agent/handlers/messages/toggle-inline-edit-mode.d.ts +0 -7
  106. package/dist/injections/visual-edit-agent/handlers/messages/toggle-inline-edit-mode.d.ts.map +0 -1
  107. package/dist/injections/visual-edit-agent/handlers/messages/toggle-inline-edit-mode.js +0 -54
  108. package/dist/injections/visual-edit-agent/handlers/messages/toggle-inline-edit-mode.js.map +0 -1
  109. package/dist/injections/visual-edit-agent/handlers/messages/toggle-visual-edit-mode.d.ts +0 -11
  110. package/dist/injections/visual-edit-agent/handlers/messages/toggle-visual-edit-mode.d.ts.map +0 -1
  111. package/dist/injections/visual-edit-agent/handlers/messages/toggle-visual-edit-mode.js +0 -32
  112. package/dist/injections/visual-edit-agent/handlers/messages/toggle-visual-edit-mode.js.map +0 -1
  113. package/dist/injections/visual-edit-agent/handlers/messages/types.d.ts +0 -105
  114. package/dist/injections/visual-edit-agent/handlers/messages/types.d.ts.map +0 -1
  115. package/dist/injections/visual-edit-agent/handlers/messages/types.js +0 -28
  116. package/dist/injections/visual-edit-agent/handlers/messages/types.js.map +0 -1
  117. package/dist/injections/visual-edit-agent/index.d.ts +0 -6
  118. package/dist/injections/visual-edit-agent/index.d.ts.map +0 -1
  119. package/dist/injections/visual-edit-agent/index.js +0 -109
  120. package/dist/injections/visual-edit-agent/index.js.map +0 -1
  121. package/dist/injections/visual-edit-agent/state/agent-state.d.ts +0 -17
  122. package/dist/injections/visual-edit-agent/state/agent-state.d.ts.map +0 -1
  123. package/dist/injections/visual-edit-agent/state/agent-state.js +0 -18
  124. package/dist/injections/visual-edit-agent/state/agent-state.js.map +0 -1
  125. package/dist/injections/visual-edit-agent/ui/overlay.d.ts +0 -26
  126. package/dist/injections/visual-edit-agent/ui/overlay.d.ts.map +0 -1
  127. package/dist/injections/visual-edit-agent/ui/overlay.js +0 -104
  128. package/dist/injections/visual-edit-agent/ui/overlay.js.map +0 -1
  129. package/dist/injections/visual-edit-agent/utils/dom-utils.d.ts +0 -14
  130. package/dist/injections/visual-edit-agent/utils/dom-utils.d.ts.map +0 -1
  131. package/dist/injections/visual-edit-agent/utils/dom-utils.js +0 -34
  132. package/dist/injections/visual-edit-agent/utils/dom-utils.js.map +0 -1
  133. package/src/injections/visual-edit-agent/README.md +0 -222
  134. package/src/injections/visual-edit-agent/capabilities/inline-editing/core.ts +0 -120
  135. package/src/injections/visual-edit-agent/capabilities/inline-editing/index.ts +0 -10
  136. package/src/injections/visual-edit-agent/capabilities/inline-editing/styles.ts +0 -26
  137. package/src/injections/visual-edit-agent/capabilities/inline-editing/validation.ts +0 -87
  138. package/src/injections/visual-edit-agent/constants.ts +0 -9
  139. package/src/injections/visual-edit-agent/handlers/click-handlers.ts +0 -146
  140. package/src/injections/visual-edit-agent/handlers/hover-handlers.ts +0 -78
  141. package/src/injections/visual-edit-agent/handlers/inline-edit-handlers.ts +0 -146
  142. package/src/injections/visual-edit-agent/handlers/message-handlers.ts +0 -201
  143. package/src/injections/visual-edit-agent/handlers/messages/toggle-inline-edit-mode.ts +0 -65
  144. package/src/injections/visual-edit-agent/handlers/messages/toggle-visual-edit-mode.ts +0 -40
  145. package/src/injections/visual-edit-agent/handlers/messages/types.ts +0 -134
  146. package/src/injections/visual-edit-agent/index.ts +0 -121
  147. package/src/injections/visual-edit-agent/state/agent-state.ts +0 -31
  148. package/src/injections/visual-edit-agent/ui/overlay.ts +0 -126
  149. package/src/injections/visual-edit-agent/utils/dom-utils.ts +0 -39
@@ -0,0 +1,225 @@
1
+ import type { NodePath } from "@babel/traverse";
2
+ import type * as t from "@babel/types";
3
+ import {
4
+ DATA_COLLECTION_FIELD_REFERENCE,
5
+ DATA_COLLECTION_REFERENCE,
6
+ } from "../consts.js";
7
+ import {
8
+ JSXAttributeUtils,
9
+ ExpressionAnalysisUtils,
10
+ TypeCheckUtils,
11
+ } from "./shared-utils.js";
12
+
13
+ export class ReferenceFieldProcessor {
14
+ private attributeUtils: JSXAttributeUtils;
15
+ private expressionUtils: ExpressionAnalysisUtils;
16
+ private typeCheckUtils: TypeCheckUtils;
17
+
18
+ constructor(private types: typeof t) {
19
+ this.attributeUtils = new JSXAttributeUtils(types);
20
+ this.expressionUtils = new ExpressionAnalysisUtils(types);
21
+ this.typeCheckUtils = new TypeCheckUtils(types);
22
+ }
23
+
24
+ process(path: NodePath<t.JSXOpeningElement>): void {
25
+ if (
26
+ this.attributeUtils.hasAttribute(path, DATA_COLLECTION_FIELD_REFERENCE)
27
+ ) {
28
+ return;
29
+ }
30
+
31
+ if (
32
+ this.isReturnedFromReferenceMap(path) ||
33
+ this.isInsideReferenceLogicalExpression(path) ||
34
+ this.isInReferencePropertyMapChain(path)
35
+ ) {
36
+ this.attributeUtils.addStringAttribute(
37
+ path,
38
+ DATA_COLLECTION_FIELD_REFERENCE,
39
+ "true"
40
+ );
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Strategy A: Element is the direct return of a .map() callback
46
+ * whose array is a reference variable (initialized via type-check pattern).
47
+ */
48
+ private isReturnedFromReferenceMap(
49
+ path: NodePath<t.JSXOpeningElement>
50
+ ): boolean {
51
+ const jsxElement = path.parentPath;
52
+ if (!jsxElement?.isJSXElement()) return false;
53
+
54
+ const parent = jsxElement.parentPath;
55
+ if (!parent) return false;
56
+
57
+ const callbackFn = this.findEnclosingMapCallback(parent);
58
+ if (!callbackFn) return false;
59
+
60
+ const mapCall = callbackFn.parentPath;
61
+ if (!mapCall?.isCallExpression()) return false;
62
+
63
+ const callee = mapCall.get("callee");
64
+ if (!callee.isMemberExpression()) return false;
65
+
66
+ const arrayObj = callee.get("object") as NodePath<t.Expression>;
67
+ return this.isReferenceArray(arrayObj);
68
+ }
69
+
70
+ /**
71
+ * Strategy B: Element is inside a && expression where the left operand
72
+ * references a field name that appears in an ancestor's data-collection-reference.
73
+ */
74
+ private isInsideReferenceLogicalExpression(
75
+ path: NodePath<t.JSXOpeningElement>
76
+ ): boolean {
77
+ const jsxElement = path.parentPath;
78
+ if (!jsxElement?.isJSXElement()) return false;
79
+
80
+ const logicalParent = jsxElement.parentPath;
81
+ if (!logicalParent?.isLogicalExpression()) return false;
82
+ if (logicalParent.node.operator !== "&&") return false;
83
+
84
+ const left = logicalParent.node.left;
85
+ const fieldName = this.extractFieldNameFromExpression(left as t.Expression);
86
+ if (!fieldName) return false;
87
+
88
+ return this.isFieldInAncestorReference(path, fieldName);
89
+ }
90
+
91
+ /**
92
+ * Strategy C: Element is inside a .map() chain on a reference property.
93
+ * e.g. item.relatedProducts.map(...) or item.relatedProducts.filter(...).map(...)
94
+ */
95
+ private isInReferencePropertyMapChain(
96
+ path: NodePath<t.JSXOpeningElement>
97
+ ): boolean {
98
+ const jsxElement = path.parentPath;
99
+ if (!jsxElement?.isJSXElement()) return false;
100
+
101
+ let current: NodePath | null = jsxElement;
102
+ while (current) {
103
+ if (current.isCallExpression()) {
104
+ const callee = current.get("callee");
105
+ if (callee.isMemberExpression()) {
106
+ const fieldName = this.extractReferenceFieldFromMapChain(callee);
107
+ if (fieldName && this.isFieldInAncestorReference(path, fieldName)) {
108
+ return true;
109
+ }
110
+ }
111
+ }
112
+ current = current.parentPath;
113
+ }
114
+
115
+ return false;
116
+ }
117
+
118
+ private findEnclosingMapCallback(
119
+ path: NodePath
120
+ ): NodePath<t.Function> | null {
121
+ let current: NodePath | null = path;
122
+ while (current) {
123
+ if (current.isArrowFunctionExpression() || current.isFunctionExpression()) {
124
+ const parent = current.parentPath;
125
+ if (parent?.isCallExpression()) {
126
+ const callee = parent.get("callee");
127
+ if (callee.isMemberExpression()) {
128
+ const prop = callee.get("property") as NodePath;
129
+ if (
130
+ prop.isIdentifier() &&
131
+ (prop.node.name === "map" || prop.node.name === "flatMap")
132
+ ) {
133
+ return current as NodePath<t.Function>;
134
+ }
135
+ }
136
+ }
137
+ }
138
+ current = current.parentPath;
139
+ }
140
+ return null;
141
+ }
142
+
143
+ private isReferenceArray(path: NodePath<t.Expression>): boolean {
144
+ if (!path.isIdentifier()) return false;
145
+
146
+ const binding = path.scope.getBinding(path.node.name);
147
+ if (!binding?.path.isVariableDeclarator()) return false;
148
+
149
+ const init = binding.path.get("init");
150
+ if (!init.isConditionalExpression()) return false;
151
+
152
+ const test = init.node.test;
153
+ return this.typeCheckUtils.isReferenceTypeCheck(test as t.Expression);
154
+ }
155
+
156
+ private extractFieldNameFromExpression(
157
+ node: t.Expression
158
+ ): string | null {
159
+ if (this.types.isMemberExpression(node)) {
160
+ const prop = node.property;
161
+ if (this.types.isIdentifier(prop)) return prop.name;
162
+ }
163
+ if (this.types.isOptionalMemberExpression(node)) {
164
+ const prop = node.property;
165
+ if (this.types.isIdentifier(prop)) return prop.name;
166
+ }
167
+ return null;
168
+ }
169
+
170
+ private isFieldInAncestorReference(
171
+ path: NodePath,
172
+ fieldName: string
173
+ ): boolean {
174
+ const ancestor = this.attributeUtils.findAncestorWithAttribute(
175
+ path,
176
+ DATA_COLLECTION_REFERENCE
177
+ );
178
+ if (!ancestor) return false;
179
+
180
+ const refValue = this.attributeUtils.getAttributeStringValue(
181
+ ancestor,
182
+ DATA_COLLECTION_REFERENCE
183
+ );
184
+ if (!refValue) return false;
185
+
186
+ const references = refValue.split(",").map((r) => r.trim());
187
+ return references.includes(fieldName);
188
+ }
189
+
190
+ private extractReferenceFieldFromMapChain(
191
+ callee: NodePath<t.MemberExpression>
192
+ ): string | null {
193
+ const prop = callee.get("property") as NodePath;
194
+ if (!prop.isIdentifier()) return null;
195
+
196
+ const methodName = prop.node.name;
197
+ const obj = callee.get("object") as NodePath<t.Expression>;
198
+
199
+ if (methodName === "map" || methodName === "flatMap") {
200
+ if (obj.isMemberExpression()) {
201
+ const fieldProp = obj.get("property") as NodePath;
202
+ if (fieldProp.isIdentifier()) return fieldProp.node.name;
203
+ }
204
+ }
205
+
206
+ if (methodName === "map" || methodName === "flatMap") {
207
+ if (obj.isCallExpression()) {
208
+ const innerCallee = obj.get("callee");
209
+ if (innerCallee.isMemberExpression()) {
210
+ return this.extractReferenceFieldFromMapChain(innerCallee);
211
+ }
212
+ }
213
+ }
214
+
215
+ if (
216
+ ["filter", "sort", "slice"].includes(methodName) &&
217
+ obj.isMemberExpression()
218
+ ) {
219
+ const fieldProp = obj.get("property") as NodePath;
220
+ if (fieldProp.isIdentifier()) return fieldProp.node.name;
221
+ }
222
+
223
+ return null;
224
+ }
225
+ }