@fluixi/compiler 1.0.0-alpha.82 → 1.0.0-alpha.84
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/analyze/expr-shape.cjs +62 -1
- package/dist/analyze/expr-shape.d.cts +14 -0
- package/dist/analyze/expr-shape.mjs +41 -1
- package/dist/analyze/intrinsics.cjs +80 -1
- package/dist/analyze/intrinsics.d.cts +66 -0
- package/dist/analyze/intrinsics.mjs +59 -1
- package/dist/analyze/paren.cjs +134 -0
- package/dist/analyze/paren.d.cts +23 -0
- package/dist/analyze/paren.d.ts +24 -0
- package/dist/analyze/paren.d.ts.map +1 -0
- package/dist/analyze/paren.js +168 -0
- package/dist/analyze/paren.mjs +113 -0
- package/dist/analyze/props-destructure.cjs +226 -1
- package/dist/analyze/props-destructure.d.cts +83 -0
- package/dist/analyze/props-destructure.mjs +205 -1
- package/dist/analyze/reactive-bindings.cjs +190 -1
- package/dist/analyze/reactive-bindings.d.cts +42 -0
- package/dist/analyze/reactive-bindings.mjs +167 -1
- package/dist/analyze/reactive-expr.cjs +38 -1
- package/dist/analyze/reactive-expr.d.cts +38 -0
- package/dist/analyze/reactive-expr.mjs +17 -1
- package/dist/analyze/static-graph.cjs +811 -0
- package/dist/analyze/static-graph.d.cts +102 -0
- package/dist/analyze/static-graph.d.ts +103 -0
- package/dist/analyze/static-graph.d.ts.map +1 -0
- package/dist/analyze/static-graph.js +869 -0
- package/dist/analyze/static-graph.mjs +793 -0
- package/dist/babel-NRW4EFTG.mjs +636 -0
- package/dist/chunk-3YKZ4GNH.mjs +11 -0
- package/dist/chunk-EZR7NZOY.mjs +1718 -0
- package/dist/chunk-FSSWUXUR.mjs +16 -0
- package/dist/chunk-MJV3UXIL.mjs +158 -0
- package/dist/chunk-R2VHAZAX.mjs +1078 -0
- package/dist/codegen/backend.cjs +18 -1
- package/dist/codegen/backend.d.cts +35 -0
- package/dist/codegen/backends/imperative.cjs +542 -1
- package/dist/codegen/backends/imperative.d.cts +11 -0
- package/dist/codegen/backends/imperative.d.ts.map +1 -1
- package/dist/codegen/backends/imperative.js +68 -13
- package/dist/codegen/backends/imperative.mjs +519 -1
- package/dist/codegen/contract.cjs +52 -1
- package/dist/codegen/contract.d.cts +24 -0
- package/dist/codegen/contract.mjs +31 -1
- package/dist/codegen/partial-template.cjs +176 -1
- package/dist/codegen/partial-template.d.cts +61 -0
- package/dist/codegen/partial-template.mjs +153 -1
- package/dist/codegen/serialize-static.cjs +125 -1
- package/dist/codegen/serialize-static.d.cts +38 -0
- package/dist/codegen/serialize-static.d.ts +16 -0
- package/dist/codegen/serialize-static.d.ts.map +1 -1
- package/dist/codegen/serialize-static.js +25 -0
- package/dist/codegen/serialize-static.mjs +104 -1
- package/dist/frontend/babel/build-ir-lit.cjs +1509 -1
- package/dist/frontend/babel/build-ir-lit.d.cts +26 -0
- package/dist/frontend/babel/build-ir-lit.mjs +1478 -1
- package/dist/frontend/babel/build-ir.cjs +1524 -1
- package/dist/frontend/babel/build-ir.d.cts +35 -0
- package/dist/frontend/babel/build-ir.mjs +1495 -1
- package/dist/frontend/babel/index.cjs +2186 -1
- package/dist/frontend/babel/index.d.cts +33 -0
- package/dist/frontend/babel/index.mjs +2156 -1
- package/dist/frontend/babel/lower-template.cjs +1507 -1
- package/dist/frontend/babel/lower-template.d.cts +23 -0
- package/dist/frontend/babel/lower-template.mjs +1478 -1
- package/dist/frontend/babel/plugin.cjs +2132 -1
- package/dist/frontend/babel/plugin.d.cts +95 -0
- package/dist/frontend/babel/plugin.mjs +2103 -1
- package/dist/frontend/babel/server-functions.cjs +110 -1
- package/dist/frontend/babel/server-functions.d.cts +10 -0
- package/dist/frontend/babel/server-functions.mjs +89 -1
- package/dist/frontend/babel/types.cjs +18 -1
- package/dist/frontend/babel/types.d.cts +33 -0
- package/dist/frontend/types.cjs +18 -1
- package/dist/frontend/types.d.cts +25 -0
- package/dist/frontend/vocabulary.cjs +98 -0
- package/dist/frontend/vocabulary.d.cts +79 -0
- package/dist/frontend/vocabulary.d.ts +80 -0
- package/dist/frontend/vocabulary.d.ts.map +1 -0
- package/dist/frontend/vocabulary.js +124 -0
- package/dist/frontend/vocabulary.mjs +77 -0
- package/dist/index.cjs +1594 -13
- package/dist/index.d.cts +27 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.mjs +1574 -13
- package/dist/integrations.cjs +4307 -25
- package/dist/integrations.d.cts +215 -0
- package/dist/integrations.d.ts +16 -0
- package/dist/integrations.d.ts.map +1 -1
- package/dist/integrations.js +21 -2
- package/dist/integrations.mjs +531 -17
- package/dist/ir/nodes.cjs +18 -1
- package/dist/ir/nodes.d.cts +168 -0
- package/dist/ir/nodes.d.ts +46 -0
- package/dist/ir/nodes.d.ts.map +1 -1
- package/dist/lower/compile-template.cjs +1356 -1
- package/dist/lower/compile-template.d.cts +69 -0
- package/dist/lower/compile-template.d.ts +12 -0
- package/dist/lower/compile-template.d.ts.map +1 -1
- package/dist/lower/compile-template.js +5 -1
- package/dist/lower/compile-template.mjs +1336 -1
- package/dist/lower/jsx.cjs +529 -1
- package/dist/lower/jsx.d.cts +25 -0
- package/dist/lower/jsx.d.ts +2 -0
- package/dist/lower/jsx.d.ts.map +1 -1
- package/dist/lower/jsx.js +27 -4
- package/dist/lower/jsx.mjs +506 -1
- package/dist/lower/template.cjs +1061 -1
- package/dist/lower/template.d.cts +53 -0
- package/dist/lower/template.d.ts +14 -1
- package/dist/lower/template.d.ts.map +1 -1
- package/dist/lower/template.js +106 -19
- package/dist/lower/template.mjs +1042 -1
- package/dist/lower/text.cjs +42 -1
- package/dist/lower/text.d.cts +10 -0
- package/dist/lower/text.mjs +21 -1
- package/dist/optimize/analyze-static.cjs +112 -1
- package/dist/optimize/analyze-static.d.cts +39 -0
- package/dist/optimize/analyze-static.mjs +91 -1
- package/dist/optimize/collapse-strategies.cjs +90 -1
- package/dist/optimize/collapse-strategies.d.cts +30 -0
- package/dist/optimize/collapse-strategies.mjs +67 -1
- package/dist/options.cjs +33 -1
- package/dist/options.d.cts +39 -0
- package/dist/options.mjs +12 -1
- package/dist/resolve/builtins.cjs +73 -1
- package/dist/resolve/builtins.d.cts +68 -0
- package/dist/resolve/builtins.mjs +53 -1
- package/dist/resolve/component-globals.cjs +233 -13
- package/dist/resolve/component-globals.d.cts +80 -0
- package/dist/resolve/component-globals.mjs +210 -13
- package/dist/resolve/component-resolver.cjs +80 -1
- package/dist/resolve/component-resolver.d.cts +68 -0
- package/dist/resolve/component-resolver.mjs +59 -1
- package/dist/resolve/load-directive.cjs +93 -1
- package/dist/resolve/load-directive.d.cts +53 -0
- package/dist/resolve/load-directive.mjs +72 -1
- package/dist/resolve/resolve-ir.cjs +108 -1
- package/dist/resolve/resolve-ir.d.cts +53 -0
- package/dist/resolve/resolve-ir.mjs +85 -1
- package/dist/resolve/write-globals.cjs +318 -13
- package/dist/resolve/write-globals.d.cts +30 -0
- package/dist/resolve/write-globals.mjs +297 -13
- package/dist/server-fns-4ZXN6DYU.mjs +78 -0
- package/dist/server-functions-V6D6DRIA.mjs +82 -0
- package/dist/transform/bindings.cjs +71 -1
- package/dist/transform/bindings.d.cts +16 -0
- package/dist/transform/bindings.mjs +50 -1
- package/dist/transform/index.cjs +2732 -8
- package/dist/transform/index.d.cts +15 -0
- package/dist/transform/index.mjs +3773 -17
- package/dist/transform/intrinsics.cjs +216 -3
- package/dist/transform/intrinsics.d.cts +21 -0
- package/dist/transform/intrinsics.mjs +193 -3
- package/dist/transform/props.cjs +441 -3
- package/dist/transform/props.d.cts +45 -0
- package/dist/transform/props.mjs +1482 -12
- package/dist/transform/server-fn-id.cjs +35 -1
- package/dist/transform/server-fn-id.d.cts +9 -0
- package/dist/transform/server-fn-id.mjs +14 -1
- package/dist/transform/server-fns.cjs +114 -2
- package/dist/transform/server-fns.d.cts +12 -0
- package/dist/transform/server-fns.mjs +1155 -11
- package/dist/transform/source-locations.cjs +330 -0
- package/dist/transform/source-locations.d.cts +43 -0
- package/dist/transform/source-locations.d.ts +44 -0
- package/dist/transform/source-locations.d.ts.map +1 -0
- package/dist/transform/source-locations.js +238 -0
- package/dist/transform/source-locations.mjs +307 -0
- package/dist/transform/templates.cjs +2701 -7
- package/dist/transform/templates.d.cts +69 -0
- package/dist/transform/templates.d.ts +12 -4
- package/dist/transform/templates.d.ts.map +1 -1
- package/dist/transform/templates.js +72 -7
- package/dist/transform/templates.mjs +3743 -16
- package/dist/transform-BT4MMASR.mjs +893 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +6 -5
- package/dist/babel-4JUDAR2G.mjs +0 -1
- package/dist/chunk-3SAEGOMQ.mjs +0 -1
- package/dist/chunk-IBRM4W7I.mjs +0 -10
- package/dist/chunk-OHHZCYIQ.mjs +0 -1
- package/dist/chunk-PVR2SN3B.mjs +0 -1
- package/dist/chunk-QUIYULS2.mjs +0 -1
- package/dist/chunk-YR3SAEO7.mjs +0 -1
- package/dist/server-fns-6QM243HC.mjs +0 -2
- package/dist/server-functions-E3LKCZ4R.mjs +0 -1
- package/dist/transform-5WC4FWJE.mjs +0 -8
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
// src/analyze/intrinsics.ts
|
|
2
|
+
var REACTIVE_MODULE = "@fluixi/reactive/signal";
|
|
3
|
+
var INTRINSICS = {
|
|
4
|
+
$signal: { export: "signal", module: REACTIVE_MODULE, returns: "signal-handle" },
|
|
5
|
+
$memo: { export: "memo", module: REACTIVE_MODULE, returns: "memo-handle" },
|
|
6
|
+
$effect: { export: "effect", module: REACTIVE_MODULE, returns: "effect" },
|
|
7
|
+
$store: { export: "store", module: "@fluixi/reactive/store", returns: "store-handle" },
|
|
8
|
+
$resource: { export: "resource", module: REACTIVE_MODULE, returns: "resource-handle" },
|
|
9
|
+
// No short runtime form for these yet, so the intrinsic stands for the `create*`
|
|
10
|
+
// name. Still worth having — no import to write — and when a shorter form is
|
|
11
|
+
// designed, the change is this line rather than a compiler pass.
|
|
12
|
+
$selector: { export: "createSelector", module: REACTIVE_MODULE, returns: "memo-accessor" },
|
|
13
|
+
$deferred: { export: "createDeferred", module: REACTIVE_MODULE, returns: "memo-accessor" },
|
|
14
|
+
// Not value constructors, but the compiler has to know them: they change what a read
|
|
15
|
+
// does. `untrack` suppresses dependency collection, which is exactly the kind of thing
|
|
16
|
+
// dependency analysis must not guess at.
|
|
17
|
+
$untrack: { export: "untrack", module: REACTIVE_MODULE, returns: "plain" },
|
|
18
|
+
$untrackStore: { export: "untrackStore", module: "@fluixi/reactive/store", returns: "plain" }
|
|
19
|
+
};
|
|
20
|
+
var RUNTIME_PRIMITIVES = {
|
|
21
|
+
signal: "signal-handle",
|
|
22
|
+
memo: "memo-handle",
|
|
23
|
+
effect: "effect",
|
|
24
|
+
store: "store-handle",
|
|
25
|
+
createSignal: ["signal-accessor", "signal-setter"],
|
|
26
|
+
createMemo: "memo-accessor",
|
|
27
|
+
createEffect: "effect",
|
|
28
|
+
createRenderEffect: "effect",
|
|
29
|
+
createStore: "reactive-object",
|
|
30
|
+
resource: "resource-handle",
|
|
31
|
+
createResource: "reactive-object",
|
|
32
|
+
createSelector: "memo-accessor",
|
|
33
|
+
createDeferred: "memo-accessor"
|
|
34
|
+
};
|
|
35
|
+
var PRIMITIVE_MODULES = [
|
|
36
|
+
"@fluixi/reactive",
|
|
37
|
+
"@fluixi/reactive/signal",
|
|
38
|
+
"@fluixi/reactive/store",
|
|
39
|
+
"@fluixi/core"
|
|
40
|
+
];
|
|
41
|
+
var INTRINSIC_CALL = new RegExp(`\\$(?:${Object.keys(INTRINSICS).map((n) => n.slice(1)).join("|")})\\s*\\(`);
|
|
42
|
+
function isIntrinsicName(name) {
|
|
43
|
+
return Object.prototype.hasOwnProperty.call(INTRINSICS, name);
|
|
44
|
+
}
|
|
45
|
+
function isPrimitiveModule(source) {
|
|
46
|
+
return PRIMITIVE_MODULES.includes(source);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// src/analyze/reactive-bindings.ts
|
|
50
|
+
function patternNames(node, out) {
|
|
51
|
+
if (!node) return;
|
|
52
|
+
switch (node.type) {
|
|
53
|
+
case "Identifier":
|
|
54
|
+
out.add(node.name);
|
|
55
|
+
return;
|
|
56
|
+
case "ObjectPattern":
|
|
57
|
+
for (const p of node.properties ?? []) {
|
|
58
|
+
if (p.type === "RestElement") patternNames(p.argument, out);
|
|
59
|
+
else patternNames(p.value, out);
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
case "ArrayPattern":
|
|
63
|
+
for (const e of node.elements ?? []) patternNames(e, out);
|
|
64
|
+
return;
|
|
65
|
+
case "AssignmentPattern":
|
|
66
|
+
patternNames(node.left, out);
|
|
67
|
+
return;
|
|
68
|
+
case "RestElement":
|
|
69
|
+
patternNames(node.argument, out);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function walk(root, visit) {
|
|
74
|
+
if (!root || typeof root !== "object" || typeof root.type !== "string") return;
|
|
75
|
+
visit(root);
|
|
76
|
+
for (const key of Object.keys(root)) {
|
|
77
|
+
if (key === "loc" || key === "leadingComments" || key === "trailingComments") continue;
|
|
78
|
+
const value = root[key];
|
|
79
|
+
if (Array.isArray(value)) for (const item of value) walk(item, visit);
|
|
80
|
+
else if (value && typeof value === "object") walk(value, visit);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function calledPrimitive(node, bindings) {
|
|
84
|
+
if (node.type !== "CallExpression") return void 0;
|
|
85
|
+
const callee = node.callee;
|
|
86
|
+
if (callee?.type !== "Identifier") return void 0;
|
|
87
|
+
const name = callee.name;
|
|
88
|
+
const imported = bindings.primitives.get(name);
|
|
89
|
+
if (imported) return imported;
|
|
90
|
+
const intrinsic = INTRINSICS[name];
|
|
91
|
+
if (intrinsic && !bindings.shadowed.has(name)) return intrinsic.returns;
|
|
92
|
+
return void 0;
|
|
93
|
+
}
|
|
94
|
+
function classify(id, returns, kinds) {
|
|
95
|
+
if (Array.isArray(returns)) {
|
|
96
|
+
if (id.type === "ArrayPattern") {
|
|
97
|
+
id.elements.forEach((element, index) => {
|
|
98
|
+
const kind = returns[index];
|
|
99
|
+
if (element?.type === "Identifier" && kind) kinds.set(element.name, kind);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (id.type === "Identifier") kinds.set(id.name, returns);
|
|
105
|
+
}
|
|
106
|
+
function resolveReactiveBindings(program) {
|
|
107
|
+
const bindings = { kinds: /* @__PURE__ */ new Map(), primitives: /* @__PURE__ */ new Map(), shadowed: /* @__PURE__ */ new Set() };
|
|
108
|
+
const root = program;
|
|
109
|
+
walk(root, (node) => {
|
|
110
|
+
const names = /* @__PURE__ */ new Set();
|
|
111
|
+
if (node.type === "VariableDeclarator") patternNames(node.id, names);
|
|
112
|
+
else if (node.type === "FunctionDeclaration" || node.type === "ClassDeclaration") patternNames(node.id, names);
|
|
113
|
+
else if (node.type === "ImportDefaultSpecifier" || node.type === "ImportNamespaceSpecifier") patternNames(node.local, names);
|
|
114
|
+
else if (node.type === "ImportSpecifier") patternNames(node.local, names);
|
|
115
|
+
else if (node.type === "FunctionExpression" || node.type === "ArrowFunctionExpression" || node.type === "FunctionDeclaration") {
|
|
116
|
+
for (const p of node.params ?? []) patternNames(p, names);
|
|
117
|
+
}
|
|
118
|
+
for (const name of names) if (INTRINSICS[name]) bindings.shadowed.add(name);
|
|
119
|
+
});
|
|
120
|
+
for (const statement of root.body ?? []) {
|
|
121
|
+
if (statement.type !== "ImportDeclaration") continue;
|
|
122
|
+
if (!isPrimitiveModule(statement.source?.value)) continue;
|
|
123
|
+
for (const specifier of statement.specifiers ?? []) {
|
|
124
|
+
if (specifier.type !== "ImportSpecifier") continue;
|
|
125
|
+
const importedNode = specifier.imported;
|
|
126
|
+
const imported = importedNode.type === "Identifier" ? importedNode.name : importedNode.value;
|
|
127
|
+
const returns = RUNTIME_PRIMITIVES[imported];
|
|
128
|
+
if (returns) bindings.primitives.set(specifier.local.name, returns);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
walk(root, (node) => {
|
|
132
|
+
if (node.type !== "VariableDeclarator" || !node.init) return;
|
|
133
|
+
const returns = calledPrimitive(node.init, bindings);
|
|
134
|
+
if (returns) classify(node.id, returns, bindings.kinds);
|
|
135
|
+
});
|
|
136
|
+
return bindings;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// src/transform/source-locations.ts
|
|
140
|
+
var SOURCE_MARKER = "__fx_source";
|
|
141
|
+
var COMPONENT_MARKER = "__fx_component";
|
|
142
|
+
var HOLE_MARKER = "__fx_hole";
|
|
143
|
+
var markHole = (accessor, line, column, name) => `(globalThis.${HOLE_MARKER} ?? ((f) => f))(${accessor},${line},${column}${name === void 0 ? "" : `,${JSON.stringify(name)}`})`;
|
|
144
|
+
var PROPS_MARKER = "__fx_props";
|
|
145
|
+
var markProps = (object, at) => `(globalThis.${PROPS_MARKER} ?? ((p) => p))(${object},${JSON.stringify(at)})`;
|
|
146
|
+
var RUNTIME_PRIMITIVES2 = /* @__PURE__ */ new Set([
|
|
147
|
+
"signal",
|
|
148
|
+
"memo",
|
|
149
|
+
"effect",
|
|
150
|
+
"store",
|
|
151
|
+
"resource",
|
|
152
|
+
"watch",
|
|
153
|
+
"createSignal",
|
|
154
|
+
"createMemo",
|
|
155
|
+
"createEffect",
|
|
156
|
+
"createStore",
|
|
157
|
+
"createResource"
|
|
158
|
+
]);
|
|
159
|
+
function mayHaveReactiveCall(code) {
|
|
160
|
+
for (const name of RUNTIME_PRIMITIVES2) {
|
|
161
|
+
if (code.includes(name)) return true;
|
|
162
|
+
}
|
|
163
|
+
return code.includes("$signal") || code.includes("$memo") || code.includes("$effect") || code.includes("$store");
|
|
164
|
+
}
|
|
165
|
+
var SINGLE_STATEMENT_PARENTS = /* @__PURE__ */ new Set([
|
|
166
|
+
"IfStatement",
|
|
167
|
+
"ForStatement",
|
|
168
|
+
"ForInStatement",
|
|
169
|
+
"ForOfStatement",
|
|
170
|
+
"WhileStatement",
|
|
171
|
+
"DoWhileStatement",
|
|
172
|
+
"LabeledStatement",
|
|
173
|
+
"WithStatement"
|
|
174
|
+
]);
|
|
175
|
+
function isLoneBranch(statement, parent) {
|
|
176
|
+
if (!parent || statement.type === "BlockStatement") return false;
|
|
177
|
+
return SINGLE_STATEMENT_PARENTS.has(parent.type);
|
|
178
|
+
}
|
|
179
|
+
function isExport(node) {
|
|
180
|
+
return node.type === "ExportNamedDeclaration" || node.type === "ExportDefaultDeclaration";
|
|
181
|
+
}
|
|
182
|
+
function isStatement(node) {
|
|
183
|
+
return node.type.endsWith("Statement") || node.type === "VariableDeclaration";
|
|
184
|
+
}
|
|
185
|
+
function walk2(node, visit, stack = []) {
|
|
186
|
+
if (!node || typeof node.type !== "string") return;
|
|
187
|
+
visit(node, stack);
|
|
188
|
+
stack.push(node);
|
|
189
|
+
for (const key of Object.keys(node)) {
|
|
190
|
+
if (key === "loc" || key === "parent") continue;
|
|
191
|
+
const value = node[key];
|
|
192
|
+
if (Array.isArray(value)) {
|
|
193
|
+
for (const child of value) walk2(child, visit, stack);
|
|
194
|
+
} else if (value && typeof value.type === "string") {
|
|
195
|
+
walk2(value, visit, stack);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
stack.pop();
|
|
199
|
+
}
|
|
200
|
+
function nameFor(stack) {
|
|
201
|
+
const declarator = stack[stack.length - 1];
|
|
202
|
+
if (declarator?.type !== "VariableDeclarator") return void 0;
|
|
203
|
+
const id = declarator.id;
|
|
204
|
+
if (id?.type === "Identifier") return id.name;
|
|
205
|
+
if (id?.type === "ArrayPattern") {
|
|
206
|
+
const first = id.elements?.[0];
|
|
207
|
+
if (first?.type === "Identifier") return first.name;
|
|
208
|
+
}
|
|
209
|
+
return void 0;
|
|
210
|
+
}
|
|
211
|
+
function componentName(node) {
|
|
212
|
+
if (node.type === "FunctionDeclaration") {
|
|
213
|
+
const name = node.id?.name;
|
|
214
|
+
return name && name[0] === name[0]?.toUpperCase() ? name : void 0;
|
|
215
|
+
}
|
|
216
|
+
if (node.type === "VariableDeclarator") {
|
|
217
|
+
const id = node.id;
|
|
218
|
+
const init = node.init;
|
|
219
|
+
if (id?.type !== "Identifier" || !init) return void 0;
|
|
220
|
+
if (init.type !== "ArrowFunctionExpression" && init.type !== "FunctionExpression") return void 0;
|
|
221
|
+
const name = id.name;
|
|
222
|
+
return name[0] === name[0]?.toUpperCase() ? name : void 0;
|
|
223
|
+
}
|
|
224
|
+
return void 0;
|
|
225
|
+
}
|
|
226
|
+
function collectSourceEdits(program, filename) {
|
|
227
|
+
const edits = [];
|
|
228
|
+
const claimed = /* @__PURE__ */ new Set();
|
|
229
|
+
const { primitives, shadowed } = resolveReactiveBindings(program);
|
|
230
|
+
walk2(program, (node, stack) => {
|
|
231
|
+
const component = componentName(node);
|
|
232
|
+
if (component) {
|
|
233
|
+
const at = node.loc?.start;
|
|
234
|
+
let end2 = node.end;
|
|
235
|
+
for (let i = stack.length - 1; i >= 0; i--) {
|
|
236
|
+
const up = stack[i];
|
|
237
|
+
if (up.type !== "VariableDeclaration" && up.type !== "ExportNamedDeclaration" && up.type !== "ExportDefaultDeclaration") {
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
end2 = up.end;
|
|
241
|
+
}
|
|
242
|
+
if (at) {
|
|
243
|
+
edits.push({
|
|
244
|
+
start: end2,
|
|
245
|
+
end: end2,
|
|
246
|
+
code: `;globalThis.${COMPONENT_MARKER}?.(${JSON.stringify(component)},${JSON.stringify(filename)},${at.line},${at.column});`
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (node.type !== "CallExpression") return;
|
|
251
|
+
const callee = node.callee;
|
|
252
|
+
if (callee?.type !== "Identifier") return;
|
|
253
|
+
const name = callee.name;
|
|
254
|
+
const intrinsic = isIntrinsicName(name) && !shadowed.has(name) ? INTRINSICS[name] : void 0;
|
|
255
|
+
const imported = primitives.has(name) || RUNTIME_PRIMITIVES2.has(name);
|
|
256
|
+
if (!intrinsic && !imported) return;
|
|
257
|
+
const position = node.loc?.start;
|
|
258
|
+
if (!position) return;
|
|
259
|
+
let statement;
|
|
260
|
+
let parent;
|
|
261
|
+
let index = -1;
|
|
262
|
+
for (let i = stack.length - 1; i >= 0; i--) {
|
|
263
|
+
if (isStatement(stack[i]) || isExport(stack[i])) {
|
|
264
|
+
statement = stack[i];
|
|
265
|
+
parent = stack[i - 1];
|
|
266
|
+
index = i;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (!statement) return;
|
|
271
|
+
let start = statement.start;
|
|
272
|
+
let end = statement.end;
|
|
273
|
+
for (let i = index - 1; i >= 0; i--) {
|
|
274
|
+
if (!isExport(stack[i])) break;
|
|
275
|
+
start = stack[i].start;
|
|
276
|
+
end = stack[i].end;
|
|
277
|
+
parent = stack[i - 1];
|
|
278
|
+
}
|
|
279
|
+
if (claimed.has(start)) return;
|
|
280
|
+
claimed.add(start);
|
|
281
|
+
const label = nameFor(stack);
|
|
282
|
+
const args = [
|
|
283
|
+
JSON.stringify(filename),
|
|
284
|
+
String(position.line),
|
|
285
|
+
String(position.column),
|
|
286
|
+
label ? JSON.stringify(label) : void 0
|
|
287
|
+
].filter((a) => a !== void 0).join(",");
|
|
288
|
+
const mark = `globalThis.${SOURCE_MARKER}?.(${args});`;
|
|
289
|
+
if (isLoneBranch(statement, parent)) {
|
|
290
|
+
edits.push({ start, end: start, code: `{${mark}` });
|
|
291
|
+
edits.push({ start: end, end, code: "}" });
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
edits.push({ start, end: start, code: mark });
|
|
295
|
+
});
|
|
296
|
+
return { edits, marked: edits.length };
|
|
297
|
+
}
|
|
298
|
+
export {
|
|
299
|
+
COMPONENT_MARKER,
|
|
300
|
+
HOLE_MARKER,
|
|
301
|
+
PROPS_MARKER,
|
|
302
|
+
SOURCE_MARKER,
|
|
303
|
+
collectSourceEdits,
|
|
304
|
+
markHole,
|
|
305
|
+
markProps,
|
|
306
|
+
mayHaveReactiveCall
|
|
307
|
+
};
|