@base44/vite-plugin 0.2.28 → 0.2.30
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/capabilities/inline-edit/controller.d.ts.map +1 -1
- package/dist/capabilities/inline-edit/controller.js +3 -0
- package/dist/capabilities/inline-edit/controller.js.map +1 -1
- package/dist/capabilities/inline-edit/index.d.ts +1 -1
- package/dist/capabilities/inline-edit/index.d.ts.map +1 -1
- package/dist/capabilities/inline-edit/types.d.ts +4 -0
- package/dist/capabilities/inline-edit/types.d.ts.map +1 -1
- package/dist/consts.d.ts +11 -0
- package/dist/consts.d.ts.map +1 -0
- package/dist/consts.js +11 -0
- package/dist/consts.js.map +1 -0
- package/dist/injections/layer-dropdown/dropdown-ui.d.ts.map +1 -1
- package/dist/injections/layer-dropdown/dropdown-ui.js +3 -0
- package/dist/injections/layer-dropdown/dropdown-ui.js.map +1 -1
- package/dist/injections/utils.d.ts +31 -0
- package/dist/injections/utils.d.ts.map +1 -1
- package/dist/injections/utils.js +97 -0
- package/dist/injections/utils.js.map +1 -1
- package/dist/injections/visual-edit-agent.d.ts.map +1 -1
- package/dist/injections/visual-edit-agent.js +58 -51
- package/dist/injections/visual-edit-agent.js.map +1 -1
- package/dist/jsx-processor.d.ts +3 -1
- package/dist/jsx-processor.d.ts.map +1 -1
- package/dist/jsx-processor.js +29 -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/static-array-processor.d.ts +0 -3
- package/dist/processors/static-array-processor.d.ts.map +1 -1
- package/dist/processors/static-array-processor.js +2 -4
- package/dist/processors/static-array-processor.js.map +1 -1
- package/dist/processors/utils/collection-tracing-utils.d.ts +36 -0
- package/dist/processors/utils/collection-tracing-utils.d.ts.map +1 -0
- package/dist/processors/utils/collection-tracing-utils.js +390 -0
- package/dist/processors/utils/collection-tracing-utils.js.map +1 -0
- package/dist/processors/utils/shared-utils.d.ts +96 -0
- package/dist/processors/utils/shared-utils.d.ts.map +1 -0
- package/dist/processors/utils/shared-utils.js +600 -0
- package/dist/processors/utils/shared-utils.js.map +1 -0
- package/dist/statics/index.mjs +12 -2
- package/dist/statics/index.mjs.map +1 -1
- 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/capabilities/inline-edit/controller.ts +3 -0
- package/src/capabilities/inline-edit/index.ts +1 -1
- package/src/capabilities/inline-edit/types.ts +5 -0
- package/src/consts.ts +11 -0
- package/src/injections/layer-dropdown/dropdown-ui.ts +3 -0
- package/src/injections/utils.ts +105 -0
- package/src/injections/visual-edit-agent.ts +56 -64
- package/src/jsx-processor.ts +36 -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/static-array-processor.ts +7 -4
- package/src/processors/utils/collection-tracing-utils.ts +507 -0
- package/src/processors/utils/shared-utils.ts +785 -0
- package/src/visual-edit-plugin.ts +34 -215
- package/dist/processors/shared-utils.d.ts +0 -19
- package/dist/processors/shared-utils.d.ts.map +0 -1
- package/dist/processors/shared-utils.js +0 -77
- package/dist/processors/shared-utils.js.map +0 -1
- package/src/processors/shared-utils.ts +0 -116
package/dist/jsx-processor.d.ts
CHANGED
|
@@ -3,12 +3,14 @@ import type * as t from "@babel/types";
|
|
|
3
3
|
export declare class JSXProcessor {
|
|
4
4
|
private types;
|
|
5
5
|
private filename;
|
|
6
|
+
private collectionIdProcessor;
|
|
7
|
+
private dataItemIdProcessor;
|
|
8
|
+
private dataItemFieldProcessor;
|
|
6
9
|
private staticArrayProcessor;
|
|
7
10
|
constructor(types: typeof t, filename: string);
|
|
8
11
|
processJSXElement(path: NodePath<t.JSXOpeningElement>): void;
|
|
9
12
|
private addSourceLocationAttribute;
|
|
10
13
|
private addDynamicContentAttribute;
|
|
11
|
-
private addContentEditableAttribute;
|
|
12
14
|
private hasAttribute;
|
|
13
15
|
private checkIfElementHasDynamicContent;
|
|
14
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-processor.d.ts","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"jsx-processor.d.ts","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AAMvC,qBAAa,YAAY;IAOrB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ;IAPlB,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,oBAAoB,CAAuB;gBAGzC,KAAK,EAAE,OAAO,CAAC,EACf,QAAQ,EAAE,MAAM;IAQ1B,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAY5D,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,0BAA0B;IA2BlC,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,+BAA+B;CAgFxC"}
|
package/dist/jsx-processor.js
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
|
+
import { CollectionIdProcessor } from "./processors/collection-id-processor.js";
|
|
2
|
+
import { DataItemIdProcessor } from "./processors/collection-item-id-processor.js";
|
|
3
|
+
import { DataItemFieldProcessor } from "./processors/collection-item-field-processor.js";
|
|
1
4
|
import { StaticArrayProcessor } from "./processors/static-array-processor.js";
|
|
2
5
|
export class JSXProcessor {
|
|
3
6
|
types;
|
|
4
7
|
filename;
|
|
8
|
+
collectionIdProcessor;
|
|
9
|
+
dataItemIdProcessor;
|
|
10
|
+
dataItemFieldProcessor;
|
|
5
11
|
staticArrayProcessor;
|
|
6
12
|
constructor(types, filename) {
|
|
7
13
|
this.types = types;
|
|
8
14
|
this.filename = filename;
|
|
15
|
+
this.collectionIdProcessor = new CollectionIdProcessor(types);
|
|
16
|
+
this.dataItemIdProcessor = new DataItemIdProcessor(types);
|
|
17
|
+
this.dataItemFieldProcessor = new DataItemFieldProcessor(types);
|
|
9
18
|
this.staticArrayProcessor = new StaticArrayProcessor(types);
|
|
10
19
|
}
|
|
11
20
|
processJSXElement(path) {
|
|
@@ -13,23 +22,25 @@ export class JSXProcessor {
|
|
|
13
22
|
return;
|
|
14
23
|
this.addSourceLocationAttribute(path);
|
|
15
24
|
this.addDynamicContentAttribute(path);
|
|
16
|
-
this.
|
|
25
|
+
this.collectionIdProcessor.process(path);
|
|
26
|
+
this.dataItemIdProcessor.process(path);
|
|
27
|
+
this.dataItemFieldProcessor.process(path);
|
|
17
28
|
this.staticArrayProcessor.process(path);
|
|
18
29
|
}
|
|
19
30
|
addSourceLocationAttribute(path) {
|
|
20
31
|
const { line, column } = path.node.loc?.start || { line: 1, column: 0 };
|
|
21
32
|
const value = `${this.filename}:${line}:${column}`;
|
|
22
|
-
path.node.attributes.
|
|
33
|
+
path.node.attributes.unshift(this.types.jsxAttribute(this.types.jsxIdentifier("data-source-location"), this.types.stringLiteral(value)));
|
|
23
34
|
}
|
|
24
35
|
addDynamicContentAttribute(path) {
|
|
25
36
|
const parentElement = path.parentPath;
|
|
26
37
|
if (!parentElement?.isJSXElement())
|
|
27
38
|
return;
|
|
28
39
|
const isDynamic = this.checkIfElementHasDynamicContent(parentElement.node);
|
|
29
|
-
path.node.attributes.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
path.node.attributes.
|
|
40
|
+
const sourceLocIdx = path.node.attributes.findIndex((attr) => this.types.isJSXAttribute(attr) &&
|
|
41
|
+
this.types.isJSXIdentifier(attr.name) &&
|
|
42
|
+
attr.name.name === "data-source-location");
|
|
43
|
+
path.node.attributes.splice(sourceLocIdx + 1, 0, this.types.jsxAttribute(this.types.jsxIdentifier("data-dynamic-content"), this.types.stringLiteral(isDynamic ? "true" : "false")));
|
|
33
44
|
}
|
|
34
45
|
hasAttribute(path, name) {
|
|
35
46
|
return path.node.attributes.some((attr) => this.types.isJSXAttribute(attr) &&
|
|
@@ -95,6 +106,18 @@ export class JSXProcessor {
|
|
|
95
106
|
}
|
|
96
107
|
}
|
|
97
108
|
};
|
|
109
|
+
const attributes = jsxElement.openingElement?.attributes || [];
|
|
110
|
+
for (const attr of attributes) {
|
|
111
|
+
if (hasDynamicContent)
|
|
112
|
+
break;
|
|
113
|
+
if (this.types.isJSXSpreadAttribute(attr)) {
|
|
114
|
+
hasDynamicContent = true;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
if (this.types.isJSXAttribute(attr) && attr.value) {
|
|
118
|
+
traverseNode(attr.value);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
98
121
|
for (const child of jsxElement.children) {
|
|
99
122
|
if (hasDynamicContent)
|
|
100
123
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-processor.js","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"jsx-processor.js","sourceRoot":"","sources":["../src/jsx-processor.ts"],"names":[],"mappings":"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"}
|
package/dist/jsx-utils.d.ts
CHANGED
|
@@ -3,5 +3,14 @@ export declare class JSXUtils {
|
|
|
3
3
|
private static types;
|
|
4
4
|
static init(types: typeof t): void;
|
|
5
5
|
static getAttributeName(attr: t.JSXAttribute): string;
|
|
6
|
+
static getElementName(node: t.JSXOpeningElement): string | null;
|
|
7
|
+
private static collectJSXMemberName;
|
|
8
|
+
static isCustomComponent(name: string): boolean;
|
|
9
|
+
static isAllowedCustomComponent(name: string): boolean;
|
|
10
|
+
static isDOMElement(name: string): boolean;
|
|
11
|
+
static isDOMOrAllowed(name: string): boolean;
|
|
12
|
+
static producesJSX(node: t.Expression | t.Node): boolean;
|
|
13
|
+
private static callbackProducesJSX;
|
|
14
|
+
static doesBlockReturnJSX(block: t.BlockStatement): boolean;
|
|
6
15
|
}
|
|
7
16
|
//# sourceMappingURL=jsx-utils.d.ts.map
|
package/dist/jsx-utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-utils.d.ts","sourceRoot":"","sources":["../src/jsx-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"jsx-utils.d.ts","sourceRoot":"","sources":["../src/jsx-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AAGvC,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAW;IAE/B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;IAI3B,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,GAAG,MAAM;IAMrD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB,GAAG,MAAM,GAAG,IAAI;IAkB/D,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAkBnC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAItD,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI5C,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,GAAG,OAAO;IAmCxD,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmBlC,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,cAAc,GAAG,OAAO;CAQ5D"}
|
package/dist/jsx-utils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ALLOWED_CUSTOM_COMPONENTS } from "./consts.js";
|
|
1
2
|
export class JSXUtils {
|
|
2
3
|
static types;
|
|
3
4
|
static init(types) {
|
|
@@ -8,5 +9,90 @@ export class JSXUtils {
|
|
|
8
9
|
? `${attr.name.namespace.name}:${attr.name.name.name}`
|
|
9
10
|
: attr.name.name;
|
|
10
11
|
}
|
|
12
|
+
static getElementName(node) {
|
|
13
|
+
const name = node.name;
|
|
14
|
+
if (this.types.isJSXIdentifier(name)) {
|
|
15
|
+
return name.name;
|
|
16
|
+
}
|
|
17
|
+
if (this.types.isJSXNamespacedName(name)) {
|
|
18
|
+
return `${name.namespace.name}:${name.name.name}`;
|
|
19
|
+
}
|
|
20
|
+
if (this.types.isJSXMemberExpression(name)) {
|
|
21
|
+
return this.collectJSXMemberName(name);
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
static collectJSXMemberName(node) {
|
|
26
|
+
const parts = [node.property.name];
|
|
27
|
+
let current = node.object;
|
|
28
|
+
while (this.types.isJSXMemberExpression(current)) {
|
|
29
|
+
parts.unshift(current.property.name);
|
|
30
|
+
current = current.object;
|
|
31
|
+
}
|
|
32
|
+
if (this.types.isJSXIdentifier(current)) {
|
|
33
|
+
parts.unshift(current.name);
|
|
34
|
+
}
|
|
35
|
+
return parts.join(".");
|
|
36
|
+
}
|
|
37
|
+
static isCustomComponent(name) {
|
|
38
|
+
return name.length > 0 && name.charAt(0) === name.charAt(0).toUpperCase();
|
|
39
|
+
}
|
|
40
|
+
static isAllowedCustomComponent(name) {
|
|
41
|
+
return ALLOWED_CUSTOM_COMPONENTS.includes(name);
|
|
42
|
+
}
|
|
43
|
+
static isDOMElement(name) {
|
|
44
|
+
return name.length > 0 && name.charAt(0) === name.charAt(0).toLowerCase();
|
|
45
|
+
}
|
|
46
|
+
static isDOMOrAllowed(name) {
|
|
47
|
+
return this.isDOMElement(name) || this.isAllowedCustomComponent(name);
|
|
48
|
+
}
|
|
49
|
+
static producesJSX(node) {
|
|
50
|
+
const types = this.types;
|
|
51
|
+
if (types.isJSXElement(node) || types.isJSXFragment(node))
|
|
52
|
+
return true;
|
|
53
|
+
if (types.isConditionalExpression(node)) {
|
|
54
|
+
return (this.producesJSX(node.consequent) || this.producesJSX(node.alternate));
|
|
55
|
+
}
|
|
56
|
+
if (types.isLogicalExpression(node)) {
|
|
57
|
+
return this.producesJSX(node.left) || this.producesJSX(node.right);
|
|
58
|
+
}
|
|
59
|
+
if (types.isCallExpression(node)) {
|
|
60
|
+
if (types.isMemberExpression(node.callee)) {
|
|
61
|
+
const prop = node.callee.property;
|
|
62
|
+
if (types.isIdentifier(prop) &&
|
|
63
|
+
(prop.name === "map" || prop.name === "flatMap")) {
|
|
64
|
+
const callback = node.arguments[0];
|
|
65
|
+
if (callback)
|
|
66
|
+
return this.callbackProducesJSX(callback);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (types.isParenthesizedExpression(node)) {
|
|
71
|
+
return this.producesJSX(node.expression);
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
static callbackProducesJSX(callback) {
|
|
76
|
+
const types = this.types;
|
|
77
|
+
if (types.isArrowFunctionExpression(callback)) {
|
|
78
|
+
if (types.isBlockStatement(callback.body)) {
|
|
79
|
+
return this.doesBlockReturnJSX(callback.body);
|
|
80
|
+
}
|
|
81
|
+
return this.producesJSX(callback.body);
|
|
82
|
+
}
|
|
83
|
+
if (types.isFunctionExpression(callback)) {
|
|
84
|
+
return this.doesBlockReturnJSX(callback.body);
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
static doesBlockReturnJSX(block) {
|
|
89
|
+
for (const stmt of block.body) {
|
|
90
|
+
if (this.types.isReturnStatement(stmt) && stmt.argument) {
|
|
91
|
+
if (this.producesJSX(stmt.argument))
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
11
97
|
}
|
|
12
98
|
//# sourceMappingURL=jsx-utils.js.map
|
package/dist/jsx-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-utils.js","sourceRoot":"","sources":["../src/jsx-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsx-utils.js","sourceRoot":"","sources":["../src/jsx-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { NodePath } from "@babel/traverse";
|
|
2
|
+
import type * as t from "@babel/types";
|
|
3
|
+
export declare class CollectionIdProcessor {
|
|
4
|
+
private types;
|
|
5
|
+
private attributeUtils;
|
|
6
|
+
private pathUtils;
|
|
7
|
+
private expressionUtils;
|
|
8
|
+
private tracingUtils;
|
|
9
|
+
constructor(types: typeof t);
|
|
10
|
+
process(path: NodePath<t.JSXOpeningElement>): void;
|
|
11
|
+
private tryDirectMapInChildren;
|
|
12
|
+
private extractMapSource;
|
|
13
|
+
private traceMapCall;
|
|
14
|
+
private traceOptionalMapCall;
|
|
15
|
+
private callbackProducesJSX;
|
|
16
|
+
private tryGetByIdInChildren;
|
|
17
|
+
private checkChildForGetById;
|
|
18
|
+
private tryComponentRootWithCollectionProp;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=collection-id-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-id-processor.d.ts","sourceRoot":"","sources":["../../src/processors/collection-id-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AAevC,qBAAa,qBAAqB;IAMpB,OAAO,CAAC,KAAK;IALzB,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,YAAY,CAAyB;gBAEzB,KAAK,EAAE,OAAO,CAAC;IAOnC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAuBlD,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,kCAAkC;CAkC3C"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { DATA_COLLECTION_ID, DATA_COLLECTION_REFERENCE, MAX_JSX_DEPTH, } from "../consts.js";
|
|
2
|
+
import { JSXUtils } from "../jsx-utils.js";
|
|
3
|
+
import { JSXAttributeUtils, PathNavigationUtils, ExpressionAnalysisUtils, } from "./utils/shared-utils.js";
|
|
4
|
+
import { CollectionTracingUtils } from "./utils/collection-tracing-utils.js";
|
|
5
|
+
export class CollectionIdProcessor {
|
|
6
|
+
types;
|
|
7
|
+
attributeUtils;
|
|
8
|
+
pathUtils;
|
|
9
|
+
expressionUtils;
|
|
10
|
+
tracingUtils;
|
|
11
|
+
constructor(types) {
|
|
12
|
+
this.types = types;
|
|
13
|
+
this.attributeUtils = new JSXAttributeUtils(types);
|
|
14
|
+
this.pathUtils = new PathNavigationUtils(types);
|
|
15
|
+
this.expressionUtils = new ExpressionAnalysisUtils(types);
|
|
16
|
+
this.tracingUtils = new CollectionTracingUtils(types);
|
|
17
|
+
}
|
|
18
|
+
process(path) {
|
|
19
|
+
if (this.attributeUtils.hasAttribute(path, DATA_COLLECTION_ID))
|
|
20
|
+
return;
|
|
21
|
+
const info = this.tryDirectMapInChildren(path) ??
|
|
22
|
+
this.tryGetByIdInChildren(path) ??
|
|
23
|
+
this.tryComponentRootWithCollectionProp(path);
|
|
24
|
+
if (!info)
|
|
25
|
+
return;
|
|
26
|
+
const target = this.pathUtils.findDOMElementTarget(path) ?? path;
|
|
27
|
+
this.attributeUtils.addStringAttribute(target, DATA_COLLECTION_ID, info.id);
|
|
28
|
+
if (info.references.length > 0) {
|
|
29
|
+
this.attributeUtils.addStringAttribute(target, DATA_COLLECTION_REFERENCE, info.references.join(","));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
tryDirectMapInChildren(path) {
|
|
33
|
+
const jsxElement = path.parentPath;
|
|
34
|
+
if (!jsxElement?.isJSXElement())
|
|
35
|
+
return null;
|
|
36
|
+
const children = jsxElement.get("children");
|
|
37
|
+
for (const child of children) {
|
|
38
|
+
if (!child.isJSXExpressionContainer())
|
|
39
|
+
continue;
|
|
40
|
+
const expression = child.get("expression");
|
|
41
|
+
if (expression.isJSXEmptyExpression())
|
|
42
|
+
continue;
|
|
43
|
+
const mapSource = this.extractMapSource(expression);
|
|
44
|
+
if (mapSource)
|
|
45
|
+
return mapSource;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
extractMapSource(expr) {
|
|
50
|
+
if (expr.isCallExpression()) {
|
|
51
|
+
return this.traceMapCall(expr);
|
|
52
|
+
}
|
|
53
|
+
if (expr.isLogicalExpression()) {
|
|
54
|
+
if (expr.node.operator === "&&") {
|
|
55
|
+
const right = expr.get("right");
|
|
56
|
+
return this.extractMapSource(right);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (expr.isConditionalExpression()) {
|
|
60
|
+
const consequent = expr.get("consequent");
|
|
61
|
+
const alternate = expr.get("alternate");
|
|
62
|
+
return (this.extractMapSource(consequent) ?? this.extractMapSource(alternate));
|
|
63
|
+
}
|
|
64
|
+
if (expr.isOptionalCallExpression()) {
|
|
65
|
+
return this.traceOptionalMapCall(expr);
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
traceMapCall(callPath) {
|
|
70
|
+
const callee = callPath.get("callee");
|
|
71
|
+
if (!callee.isMemberExpression())
|
|
72
|
+
return null;
|
|
73
|
+
const property = callee.get("property");
|
|
74
|
+
if (!property.isIdentifier() ||
|
|
75
|
+
(property.node.name !== "map" && property.node.name !== "flatMap")) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
if (!this.callbackProducesJSX(callPath))
|
|
79
|
+
return null;
|
|
80
|
+
const arrayObj = callee.get("object");
|
|
81
|
+
return this.tracingUtils.traceCollectionSource(arrayObj);
|
|
82
|
+
}
|
|
83
|
+
traceOptionalMapCall(callPath) {
|
|
84
|
+
const callee = callPath.get("callee");
|
|
85
|
+
if (!callee.isMemberExpression() &&
|
|
86
|
+
!callee.isOptionalMemberExpression()) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
const property = callee.get("property");
|
|
90
|
+
if (!property.isIdentifier() ||
|
|
91
|
+
(property.node.name !== "map" && property.node.name !== "flatMap")) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const arrayObj = callee.get("object");
|
|
95
|
+
return this.tracingUtils.traceCollectionSource(arrayObj);
|
|
96
|
+
}
|
|
97
|
+
callbackProducesJSX(callPath) {
|
|
98
|
+
const args = callPath.get("arguments");
|
|
99
|
+
const callback = args[0];
|
|
100
|
+
if (!callback)
|
|
101
|
+
return false;
|
|
102
|
+
if (callback.isArrowFunctionExpression()) {
|
|
103
|
+
const body = callback.get("body");
|
|
104
|
+
if (body.isBlockStatement()) {
|
|
105
|
+
return JSXUtils.doesBlockReturnJSX(body.node);
|
|
106
|
+
}
|
|
107
|
+
return JSXUtils.producesJSX(body.node);
|
|
108
|
+
}
|
|
109
|
+
if (callback.isFunctionExpression()) {
|
|
110
|
+
return JSXUtils.doesBlockReturnJSX(callback.node.body);
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
tryGetByIdInChildren(path, depth = 0) {
|
|
115
|
+
if (depth > MAX_JSX_DEPTH)
|
|
116
|
+
return null;
|
|
117
|
+
const jsxElement = path.parentPath;
|
|
118
|
+
if (!jsxElement?.isJSXElement())
|
|
119
|
+
return null;
|
|
120
|
+
const children = jsxElement.get("children");
|
|
121
|
+
for (const child of children) {
|
|
122
|
+
const info = this.checkChildForGetById(child, depth);
|
|
123
|
+
if (info)
|
|
124
|
+
return info;
|
|
125
|
+
}
|
|
126
|
+
for (const attr of path.node.attributes) {
|
|
127
|
+
if (this.types.isJSXAttribute(attr) &&
|
|
128
|
+
attr.value &&
|
|
129
|
+
this.types.isJSXExpressionContainer(attr.value)) {
|
|
130
|
+
const expr = attr.value.expression;
|
|
131
|
+
if (this.types.isMemberExpression(expr)) {
|
|
132
|
+
const info = this.tracingUtils.traceGetByIdSource(path);
|
|
133
|
+
if (info)
|
|
134
|
+
return info;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
checkChildForGetById(child, depth) {
|
|
141
|
+
if (child.isJSXExpressionContainer()) {
|
|
142
|
+
const expr = child.get("expression");
|
|
143
|
+
if (expr.isMemberExpression() ||
|
|
144
|
+
expr.isOptionalMemberExpression()) {
|
|
145
|
+
return this.tracingUtils.traceGetByIdSource(child);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (child.isJSXElement()) {
|
|
149
|
+
const childOpening = child.get("openingElement");
|
|
150
|
+
return this.tryGetByIdInChildren(childOpening, depth + 1);
|
|
151
|
+
}
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
tryComponentRootWithCollectionProp(path) {
|
|
155
|
+
if (!this.pathUtils.isRootReturnElement(path))
|
|
156
|
+
return null;
|
|
157
|
+
const fn = this.pathUtils.findEnclosingFunction(path);
|
|
158
|
+
if (!fn)
|
|
159
|
+
return null;
|
|
160
|
+
let info = null;
|
|
161
|
+
fn.traverse({
|
|
162
|
+
CallExpression: (callPath) => {
|
|
163
|
+
if (info)
|
|
164
|
+
return;
|
|
165
|
+
const callee = callPath.get("callee");
|
|
166
|
+
if (!callee.isMemberExpression())
|
|
167
|
+
return;
|
|
168
|
+
const prop = callee.get("property");
|
|
169
|
+
if (!prop.isIdentifier() ||
|
|
170
|
+
(prop.node.name !== "map" && prop.node.name !== "flatMap")) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (!this.callbackProducesJSX(callPath))
|
|
174
|
+
return;
|
|
175
|
+
const arrayObj = callee.get("object");
|
|
176
|
+
info = this.tracingUtils.traceCollectionSource(arrayObj);
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
return info;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=collection-id-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-id-processor.js","sourceRoot":"","sources":["../../src/processors/collection-id-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { NodePath } from "@babel/traverse";
|
|
2
|
+
import type * as t from "@babel/types";
|
|
3
|
+
export declare class DataItemFieldProcessor {
|
|
4
|
+
private types;
|
|
5
|
+
private attributeUtils;
|
|
6
|
+
private expressionUtils;
|
|
7
|
+
private staticUtils;
|
|
8
|
+
constructor(types: typeof t);
|
|
9
|
+
process(path: NodePath<t.JSXOpeningElement>): void;
|
|
10
|
+
private extractFieldFromChildren;
|
|
11
|
+
private extractFieldFromChild;
|
|
12
|
+
private extractFromExpressionContainer;
|
|
13
|
+
private extractFromMemberExpression;
|
|
14
|
+
private extractFromSimpleIdentifier;
|
|
15
|
+
private extractFromChildElement;
|
|
16
|
+
private extractFromImageElement;
|
|
17
|
+
private extractFromConditionalImage;
|
|
18
|
+
private tryAddItemId;
|
|
19
|
+
/**
|
|
20
|
+
* Build the ID expression for a given root object name.
|
|
21
|
+
* If a specific idField was resolved from a key attribute, generates root?.id (or root?._id).
|
|
22
|
+
* If unknown (cross-file component), generates root?.id || root?._id to cover both conventions.
|
|
23
|
+
*/
|
|
24
|
+
private buildIdExpression;
|
|
25
|
+
/**
|
|
26
|
+
* Walk up the JSX tree to find a key attribute that accesses .id or ._id.
|
|
27
|
+
* Returns null when no key is found (e.g. cross-file component receiving props).
|
|
28
|
+
*/
|
|
29
|
+
private resolveIdFieldName;
|
|
30
|
+
private extractIdFieldFromKey;
|
|
31
|
+
/**
|
|
32
|
+
* For simple identifiers from destructured component props like ({ name, price }),
|
|
33
|
+
* find or inject the id field in the ObjectPattern so we can reference it directly.
|
|
34
|
+
*/
|
|
35
|
+
private tryAddItemIdFromDestructuredParams;
|
|
36
|
+
private tryAddItemIdFromParentComponent;
|
|
37
|
+
private findKeyWithId;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=collection-item-field-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-item-field-processor.d.ts","sourceRoot":"","sources":["../../src/processors/collection-item-field-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAC;AAavC,qBAAa,sBAAsB;IAKrB,OAAO,CAAC,KAAK;IAJzB,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,WAAW,CAAmB;gBAElB,KAAK,EAAE,OAAO,CAAC;IAMnC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAoBlD,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,8BAA8B;IAwCtC,OAAO,CAAC,2BAA2B;IA0BnC,OAAO,CAAC,2BAA2B;IAUnC,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,uBAAuB;IAyC/B,OAAO,CAAC,2BAA2B;IAUnC,OAAO,CAAC,YAAY;IAoCpB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,qBAAqB;IAwB7B;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IA6C1C,OAAO,CAAC,+BAA+B;IA8BvC,OAAO,CAAC,aAAa;CAmBtB"}
|