@zenithbuild/cli 0.7.3 → 0.7.5
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/README.md +18 -13
- package/dist/adapters/adapter-netlify.d.ts +1 -1
- package/dist/adapters/adapter-netlify.js +56 -13
- package/dist/adapters/adapter-node.js +8 -0
- package/dist/adapters/adapter-static-export.d.ts +5 -0
- package/dist/adapters/adapter-static-export.js +115 -0
- package/dist/adapters/adapter-types.d.ts +3 -1
- package/dist/adapters/adapter-types.js +5 -2
- package/dist/adapters/adapter-vercel.d.ts +1 -1
- package/dist/adapters/adapter-vercel.js +70 -13
- package/dist/adapters/copy-hosted-page-runtime.d.ts +1 -0
- package/dist/adapters/copy-hosted-page-runtime.js +49 -0
- package/dist/adapters/resolve-adapter.js +4 -0
- package/dist/adapters/route-rules.d.ts +5 -0
- package/dist/adapters/route-rules.js +9 -0
- package/dist/adapters/validate-hosted-resource-routes.d.ts +1 -0
- package/dist/adapters/validate-hosted-resource-routes.js +13 -0
- package/dist/auth/route-auth.d.ts +6 -0
- package/dist/auth/route-auth.js +236 -0
- package/dist/build/compiler-runtime.d.ts +10 -9
- package/dist/build/compiler-runtime.js +58 -2
- package/dist/build/compiler-signal-expression.d.ts +1 -0
- package/dist/build/compiler-signal-expression.js +155 -0
- package/dist/build/expression-rewrites.d.ts +1 -6
- package/dist/build/expression-rewrites.js +61 -65
- package/dist/build/page-component-loop.d.ts +3 -13
- package/dist/build/page-component-loop.js +21 -46
- package/dist/build/page-ir-normalization.d.ts +0 -8
- package/dist/build/page-ir-normalization.js +13 -234
- package/dist/build/page-loop-state.d.ts +6 -9
- package/dist/build/page-loop-state.js +9 -8
- package/dist/build/page-loop.js +27 -22
- package/dist/build/scoped-identifier-rewrite.d.ts +37 -44
- package/dist/build/scoped-identifier-rewrite.js +28 -128
- package/dist/build/server-script.d.ts +3 -1
- package/dist/build/server-script.js +35 -5
- package/dist/build-output-manifest.d.ts +3 -2
- package/dist/build-output-manifest.js +3 -0
- package/dist/build.js +32 -18
- package/dist/component-instance-ir.js +158 -52
- package/dist/dev-build-session.js +20 -6
- package/dist/dev-server.js +152 -55
- package/dist/download-result.d.ts +14 -0
- package/dist/download-result.js +148 -0
- package/dist/framework-components/Image.zen +1 -1
- package/dist/images/materialization-plan.d.ts +1 -0
- package/dist/images/materialization-plan.js +6 -0
- package/dist/images/materialize.d.ts +5 -3
- package/dist/images/materialize.js +24 -109
- package/dist/images/router-manifest.d.ts +1 -0
- package/dist/images/router-manifest.js +49 -0
- package/dist/images/service.d.ts +13 -1
- package/dist/images/service.js +45 -15
- package/dist/index.js +8 -2
- package/dist/manifest.d.ts +15 -1
- package/dist/manifest.js +27 -7
- package/dist/preview.d.ts +13 -4
- package/dist/preview.js +261 -101
- package/dist/request-body.d.ts +1 -0
- package/dist/request-body.js +7 -0
- package/dist/request-origin.d.ts +2 -0
- package/dist/request-origin.js +45 -0
- package/dist/resource-manifest.d.ts +16 -0
- package/dist/resource-manifest.js +53 -0
- package/dist/resource-response.d.ts +34 -0
- package/dist/resource-response.js +71 -0
- package/dist/resource-route-module.d.ts +15 -0
- package/dist/resource-route-module.js +129 -0
- package/dist/route-check-support.d.ts +1 -0
- package/dist/route-check-support.js +4 -0
- package/dist/server-contract.d.ts +29 -6
- package/dist/server-contract.js +304 -42
- package/dist/server-error.d.ts +4 -0
- package/dist/server-error.js +36 -0
- package/dist/server-output.d.ts +4 -1
- package/dist/server-output.js +71 -10
- package/dist/server-runtime/node-server.js +67 -31
- package/dist/server-runtime/route-render.d.ts +27 -3
- package/dist/server-runtime/route-render.js +94 -53
- package/dist/server-script-composition.d.ts +13 -5
- package/dist/server-script-composition.js +29 -11
- package/dist/static-export-paths.d.ts +3 -0
- package/dist/static-export-paths.js +160 -0
- package/package.json +6 -3
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { performance } from 'node:perf_hooks';
|
|
2
|
-
import {
|
|
3
|
-
import { runCompiler } from './compiler-runtime.js';
|
|
2
|
+
import { rewriteCompilerSignalMapReferences } from './compiler-signal-expression.js';
|
|
4
3
|
/**
|
|
5
|
-
* @param {string} compPath
|
|
6
|
-
* @param {string} componentSource
|
|
7
4
|
* @param {object} compIr
|
|
8
|
-
* @param {object} compilerOpts
|
|
9
|
-
* @param {string|object} compilerBin
|
|
10
|
-
* @param {Map<string, string[]> | null} [templateExpressionCache]
|
|
11
5
|
* @param {Record<string, number> | null} [rewriteMetrics]
|
|
12
6
|
* @returns {{
|
|
13
7
|
* map: Map<string, string>,
|
|
@@ -25,7 +19,9 @@ import { runCompiler } from './compiler-runtime.js';
|
|
|
25
19
|
* sequence: Array<{ raw: string, rewritten: string, binding: object | null }>
|
|
26
20
|
* }}
|
|
27
21
|
*/
|
|
28
|
-
export function buildComponentExpressionRewrite(
|
|
22
|
+
export function buildComponentExpressionRewrite(compIr, rewriteMetrics = null) {
|
|
23
|
+
// Downstream is only allowed to read compiler-owned raw->rewritten pairs here.
|
|
24
|
+
// It must not synthesize new identifier meaning beyond this mapping.
|
|
29
25
|
const out = {
|
|
30
26
|
map: new Map(),
|
|
31
27
|
bindings: new Map(),
|
|
@@ -39,60 +35,19 @@ export function buildComponentExpressionRewrite(compPath, componentSource, compI
|
|
|
39
35
|
if (rewrittenExpressions.length === 0) {
|
|
40
36
|
return out;
|
|
41
37
|
}
|
|
42
|
-
const hoistedState = Array.isArray(compIr?.hoisted?.state) ? compIr.hoisted.state : [];
|
|
43
|
-
const hoistedFunctions = Array.isArray(compIr?.hoisted?.functions) ? compIr.hoisted.functions : [];
|
|
44
|
-
const hoistedDeclarations = Array.isArray(compIr?.hoisted?.declarations) ? compIr.hoisted.declarations : [];
|
|
45
|
-
const signals = Array.isArray(compIr?.signals) ? compIr.signals : [];
|
|
46
|
-
if (hoistedState.length === 0 &&
|
|
47
|
-
hoistedFunctions.length === 0 &&
|
|
48
|
-
hoistedDeclarations.length === 0 &&
|
|
49
|
-
signals.length === 0) {
|
|
50
|
-
return out;
|
|
51
|
-
}
|
|
52
38
|
if (rewriteMetrics && typeof rewriteMetrics === 'object') {
|
|
53
39
|
rewriteMetrics.calls += 1;
|
|
54
40
|
}
|
|
55
|
-
|
|
56
|
-
if (!templateOnly.trim()) {
|
|
57
|
-
return out;
|
|
58
|
-
}
|
|
59
|
-
const cacheKey = `${compPath}\u0000${templateOnly}`;
|
|
60
|
-
let rawExpressions = null;
|
|
61
|
-
if (templateExpressionCache instanceof Map && templateExpressionCache.has(cacheKey)) {
|
|
62
|
-
rawExpressions = templateExpressionCache.get(cacheKey);
|
|
63
|
-
if (rewriteMetrics && typeof rewriteMetrics === 'object') {
|
|
64
|
-
rewriteMetrics.cacheHits += 1;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
let templateIr;
|
|
69
|
-
const templateCompileStartedAt = performance.now();
|
|
70
|
-
try {
|
|
71
|
-
templateIr = runCompiler(compPath, templateOnly, compilerOpts, {
|
|
72
|
-
suppressWarnings: true,
|
|
73
|
-
compilerToolchain: compilerBin
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
return out;
|
|
78
|
-
}
|
|
79
|
-
rawExpressions = Array.isArray(templateIr?.expressions) ? templateIr.expressions : [];
|
|
80
|
-
if (templateExpressionCache instanceof Map) {
|
|
81
|
-
templateExpressionCache.set(cacheKey, rawExpressions);
|
|
82
|
-
}
|
|
83
|
-
if (rewriteMetrics && typeof rewriteMetrics === 'object') {
|
|
84
|
-
rewriteMetrics.cacheMisses += 1;
|
|
85
|
-
rewriteMetrics.templateCompileMs += Math.round((performance.now() - templateCompileStartedAt) * 100) / 100;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
const count = Math.min(rawExpressions.length, rewrittenExpressions.length);
|
|
89
|
-
for (let i = 0; i < count; i++) {
|
|
90
|
-
const raw = rawExpressions[i];
|
|
41
|
+
for (let i = 0; i < rewrittenExpressions.length; i++) {
|
|
91
42
|
const rewritten = rewrittenExpressions[i];
|
|
92
|
-
if (typeof
|
|
43
|
+
if (typeof rewritten !== 'string') {
|
|
93
44
|
continue;
|
|
94
45
|
}
|
|
95
46
|
const binding = rewrittenBindings[i];
|
|
47
|
+
// Compiler emits the raw source literal for exact lookup; CLI only transports it.
|
|
48
|
+
const raw = typeof binding?.literal === 'string' && binding.literal.length > 0
|
|
49
|
+
? binding.literal
|
|
50
|
+
: rewritten;
|
|
96
51
|
const normalizedBinding = binding && typeof binding === 'object'
|
|
97
52
|
? {
|
|
98
53
|
compiled_expr: typeof binding.compiled_expr === 'string' ? binding.compiled_expr : null,
|
|
@@ -133,6 +88,10 @@ export function buildComponentExpressionRewrite(compPath, componentSource, compI
|
|
|
133
88
|
}
|
|
134
89
|
}
|
|
135
90
|
}
|
|
91
|
+
if (rewriteMetrics && typeof rewriteMetrics === 'object') {
|
|
92
|
+
rewriteMetrics.compilerOwnedBindings += out.sequence.length;
|
|
93
|
+
rewriteMetrics.ambiguousBindings += out.ambiguous.size;
|
|
94
|
+
}
|
|
136
95
|
return out;
|
|
137
96
|
}
|
|
138
97
|
/**
|
|
@@ -143,27 +102,28 @@ export function buildComponentExpressionRewrite(compPath, componentSource, compI
|
|
|
143
102
|
* @returns {string | null}
|
|
144
103
|
*/
|
|
145
104
|
export function remapCompiledExpressionSignals(compiledExpr, componentSignals, componentStateBindings, pageSignalIndexByStateKey) {
|
|
105
|
+
// This is a mechanical index remap across page merge boundaries, not a second compiler pass.
|
|
146
106
|
if (typeof compiledExpr !== 'string' || compiledExpr.length === 0) {
|
|
147
107
|
return null;
|
|
148
108
|
}
|
|
149
|
-
return compiledExpr
|
|
150
|
-
const
|
|
151
|
-
if (!Number.isInteger(localIndex)) {
|
|
152
|
-
return full;
|
|
153
|
-
}
|
|
154
|
-
const signal = componentSignals[localIndex];
|
|
109
|
+
return rewriteCompilerSignalMapReferences(compiledExpr, ({ ts, signalIndex, valueRead }) => {
|
|
110
|
+
const signal = componentSignals[signalIndex];
|
|
155
111
|
if (!signal || !Number.isInteger(signal.state_index)) {
|
|
156
|
-
return
|
|
112
|
+
return null;
|
|
157
113
|
}
|
|
158
114
|
const stateKey = componentStateBindings[signal.state_index]?.key;
|
|
159
115
|
if (typeof stateKey !== 'string' || stateKey.length === 0) {
|
|
160
|
-
return
|
|
116
|
+
return null;
|
|
161
117
|
}
|
|
162
118
|
const pageIndex = pageSignalIndexByStateKey.get(stateKey);
|
|
163
119
|
if (!Number.isInteger(pageIndex)) {
|
|
164
|
-
return
|
|
120
|
+
return null;
|
|
165
121
|
}
|
|
166
|
-
|
|
122
|
+
const signalMapRead = ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(ts.factory.createIdentifier('signalMap'), 'get'), undefined, [ts.factory.createNumericLiteral(String(pageIndex))]);
|
|
123
|
+
if (valueRead) {
|
|
124
|
+
return ts.factory.createCallExpression(ts.factory.createPropertyAccessExpression(signalMapRead, 'get'), undefined, []);
|
|
125
|
+
}
|
|
126
|
+
return signalMapRead;
|
|
167
127
|
});
|
|
168
128
|
}
|
|
169
129
|
/**
|
|
@@ -319,6 +279,15 @@ export function mergeExpressionRewriteMaps(pageMap, pageBindingMap, pageAmbiguou
|
|
|
319
279
|
const resolved = resolveRewrittenBindingMetadata(pageBindingContext, componentRewrite, binding, bindingResolutionMetrics);
|
|
320
280
|
const existing = pageBindingMap.get(raw);
|
|
321
281
|
if (existing && JSON.stringify(existing) !== JSON.stringify(resolved)) {
|
|
282
|
+
const existingWeight = measureBindingSpecificity(existing, raw);
|
|
283
|
+
const resolvedWeight = measureBindingSpecificity(resolved, raw);
|
|
284
|
+
if (resolvedWeight > existingWeight && existingWeight === 0) {
|
|
285
|
+
pageBindingMap.set(raw, resolved);
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
if (existingWeight > resolvedWeight && resolvedWeight === 0) {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
322
291
|
pageAmbiguous.add(raw);
|
|
323
292
|
pageMap.delete(raw);
|
|
324
293
|
pageBindingMap.delete(raw);
|
|
@@ -340,6 +309,33 @@ export function mergeExpressionRewriteMaps(pageMap, pageBindingMap, pageAmbiguou
|
|
|
340
309
|
pageMap.set(raw, rewritten);
|
|
341
310
|
}
|
|
342
311
|
}
|
|
312
|
+
function measureBindingSpecificity(binding, raw) {
|
|
313
|
+
if (!binding || typeof binding !== 'object') {
|
|
314
|
+
return 0;
|
|
315
|
+
}
|
|
316
|
+
let score = 0;
|
|
317
|
+
if (typeof binding.compiled_expr === 'string' &&
|
|
318
|
+
binding.compiled_expr.length > 0 &&
|
|
319
|
+
binding.compiled_expr !== raw) {
|
|
320
|
+
score += 4;
|
|
321
|
+
}
|
|
322
|
+
if (Number.isInteger(binding.signal_index)) {
|
|
323
|
+
score += 2;
|
|
324
|
+
}
|
|
325
|
+
if (Array.isArray(binding.signal_indices) && binding.signal_indices.length > 0) {
|
|
326
|
+
score += 2;
|
|
327
|
+
}
|
|
328
|
+
if (Number.isInteger(binding.state_index)) {
|
|
329
|
+
score += 1;
|
|
330
|
+
}
|
|
331
|
+
if (typeof binding.component_instance === 'string' && binding.component_instance.length > 0) {
|
|
332
|
+
score += 1;
|
|
333
|
+
}
|
|
334
|
+
if (typeof binding.component_binding === 'string' && binding.component_binding.length > 0) {
|
|
335
|
+
score += 1;
|
|
336
|
+
}
|
|
337
|
+
return score;
|
|
338
|
+
}
|
|
343
339
|
/**
|
|
344
340
|
* @param {string} identifier
|
|
345
341
|
* @param {Array<{ key?: string }>} stateBindings
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function buildPageOwnerContext({ componentOccurrences, sourceFile, pageOwnerSource, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield,
|
|
1
|
+
export function buildPageOwnerContext({ componentOccurrences, sourceFile, pageOwnerSource, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, expressionRewriteMetrics, startupProfile }: {
|
|
2
2
|
componentOccurrences: any;
|
|
3
3
|
sourceFile: any;
|
|
4
4
|
pageOwnerSource: any;
|
|
@@ -6,7 +6,6 @@ export function buildPageOwnerContext({ componentOccurrences, sourceFile, pageOw
|
|
|
6
6
|
compilerBin: any;
|
|
7
7
|
timedRunCompiler: any;
|
|
8
8
|
cooperativeYield: any;
|
|
9
|
-
templateExpressionCache: any;
|
|
10
9
|
expressionRewriteMetrics: any;
|
|
11
10
|
startupProfile: any;
|
|
12
11
|
}): Promise<{
|
|
@@ -19,10 +18,6 @@ export function buildPageOwnerContext({ componentOccurrences, sourceFile, pageOw
|
|
|
19
18
|
ambiguous: Set<any>;
|
|
20
19
|
sequence: never[];
|
|
21
20
|
};
|
|
22
|
-
pageOwnerScopeRewrite: {
|
|
23
|
-
map: Map<any, any>;
|
|
24
|
-
ambiguous: Set<any>;
|
|
25
|
-
};
|
|
26
21
|
} | {
|
|
27
22
|
pageOwnerCompileMs: any;
|
|
28
23
|
pageOwnerExpressionRewrite: {
|
|
@@ -51,12 +46,8 @@ export function buildPageOwnerContext({ componentOccurrences, sourceFile, pageOw
|
|
|
51
46
|
binding: object | null;
|
|
52
47
|
}>;
|
|
53
48
|
};
|
|
54
|
-
pageOwnerScopeRewrite: {
|
|
55
|
-
map: Map<string, string>;
|
|
56
|
-
ambiguous: Set<string>;
|
|
57
|
-
};
|
|
58
49
|
}>;
|
|
59
|
-
export function runPageComponentLoop({ componentOccurrences, occurrenceCountByPath, sourceFile, registry, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, startupProfile, compilerTotals, emitCompilerWarning, componentIrCache, componentDocumentModeCache, componentExpressionRewriteCache,
|
|
50
|
+
export function runPageComponentLoop({ componentOccurrences, occurrenceCountByPath, sourceFile, registry, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, startupProfile, compilerTotals, emitCompilerWarning, componentIrCache, componentDocumentModeCache, componentExpressionRewriteCache, expressionRewriteMetrics, pageOwnerExpressionRewrite, pageIr, pageIrMergeCache, seenStaticImports, pageExpressionRewriteMap, pageExpressionBindingMap, pageAmbiguousExpressionMap, knownRefKeys, componentOccurrencePlans, imagePropsLiterals, pagePhase, pageBindingResolutionBreakdown, pageMergeBreakdown, pageComponentLoopBreakdown, hoistedCodeTransformCache, pageStats }: {
|
|
60
51
|
componentOccurrences: any;
|
|
61
52
|
occurrenceCountByPath: any;
|
|
62
53
|
sourceFile: any;
|
|
@@ -71,10 +62,8 @@ export function runPageComponentLoop({ componentOccurrences, occurrenceCountByPa
|
|
|
71
62
|
componentIrCache: any;
|
|
72
63
|
componentDocumentModeCache: any;
|
|
73
64
|
componentExpressionRewriteCache: any;
|
|
74
|
-
templateExpressionCache: any;
|
|
75
65
|
expressionRewriteMetrics: any;
|
|
76
66
|
pageOwnerExpressionRewrite: any;
|
|
77
|
-
pageOwnerScopeRewrite: any;
|
|
78
67
|
pageIr: any;
|
|
79
68
|
pageIrMergeCache: any;
|
|
80
69
|
seenStaticImports: any;
|
|
@@ -83,6 +72,7 @@ export function runPageComponentLoop({ componentOccurrences, occurrenceCountByPa
|
|
|
83
72
|
pageAmbiguousExpressionMap: any;
|
|
84
73
|
knownRefKeys: any;
|
|
85
74
|
componentOccurrencePlans: any;
|
|
75
|
+
imagePropsLiterals: any;
|
|
86
76
|
pagePhase: any;
|
|
87
77
|
pageBindingResolutionBreakdown: any;
|
|
88
78
|
pageMergeBreakdown: any;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { performance } from 'node:perf_hooks';
|
|
3
3
|
import { cloneComponentIrForInstance } from '../component-instance-ir.js';
|
|
4
|
+
import { renderPropsLiteralFromAttrs } from './scoped-identifier-rewrite.js';
|
|
4
5
|
import { extractTemplate, isDocumentMode } from '../resolve-components.js';
|
|
5
6
|
import { buildComponentExpressionRewrite, mergeExpressionRewriteMaps, resolveStateKeyFromBindings } from './expression-rewrites.js';
|
|
6
7
|
import { mergeComponentIr } from './merge-component-ir.js';
|
|
7
|
-
import { buildScopedIdentifierRewrite } from './scoped-identifier-rewrite.js';
|
|
8
8
|
import { stripStyleBlocks } from './compiler-runtime.js';
|
|
9
9
|
import { extractDeclaredIdentifiers } from './typescript-expression-utils.js';
|
|
10
10
|
function createEmptyExpressionRewrite() {
|
|
@@ -17,12 +17,6 @@ function createEmptyExpressionRewrite() {
|
|
|
17
17
|
sequence: []
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
function createEmptyScopeRewrite() {
|
|
21
|
-
return {
|
|
22
|
-
map: new Map(),
|
|
23
|
-
ambiguous: new Set()
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
20
|
async function resolveComponentIr({ compPath, componentSource, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, componentIrCache, compilerTotals, pageStats, startupProfile, emitCompilerWarning }) {
|
|
27
21
|
let compIr;
|
|
28
22
|
if (componentIrCache.has(compPath)) {
|
|
@@ -51,24 +45,23 @@ function resolveDocumentMode({ compPath, componentSource, componentDocumentModeC
|
|
|
51
45
|
}
|
|
52
46
|
return docMode;
|
|
53
47
|
}
|
|
54
|
-
function resolveComponentExpressionRewrite({ compPath,
|
|
48
|
+
function resolveComponentExpressionRewrite({ compPath, compIr, expressionRewriteMetrics, componentExpressionRewriteCache, pageComponentLoopBreakdown, startupProfile }) {
|
|
55
49
|
let expressionRewrite = componentExpressionRewriteCache.get(compPath);
|
|
56
50
|
if (!expressionRewrite) {
|
|
57
51
|
const startedAt = performance.now();
|
|
58
|
-
expressionRewrite = buildComponentExpressionRewrite(
|
|
52
|
+
expressionRewrite = buildComponentExpressionRewrite(compIr, expressionRewriteMetrics);
|
|
59
53
|
pageComponentLoopBreakdown.componentExpressionRewriteBuildMs += startupProfile.roundMs(performance.now() - startedAt);
|
|
60
54
|
componentExpressionRewriteCache.set(compPath, expressionRewrite);
|
|
61
55
|
}
|
|
62
56
|
return expressionRewrite;
|
|
63
57
|
}
|
|
64
|
-
async function resolveOwnerRewriteContext({ occurrence, sourceFile, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, componentIrCache, componentExpressionRewriteCache,
|
|
58
|
+
async function resolveOwnerRewriteContext({ occurrence, sourceFile, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, componentIrCache, componentExpressionRewriteCache, expressionRewriteMetrics, startupProfile, compilerTotals, emitCompilerWarning, pageComponentLoopBreakdown, pageStats, pageOwnerExpressionRewrite }) {
|
|
65
59
|
const ownerPath = typeof occurrence.ownerPath === 'string' && occurrence.ownerPath.length > 0
|
|
66
60
|
? occurrence.ownerPath
|
|
67
61
|
: sourceFile;
|
|
68
62
|
if (ownerPath === sourceFile) {
|
|
69
63
|
return {
|
|
70
|
-
attrExpressionRewrite: pageOwnerExpressionRewrite
|
|
71
|
-
attrScopeRewrite: pageOwnerScopeRewrite
|
|
64
|
+
attrExpressionRewrite: pageOwnerExpressionRewrite
|
|
72
65
|
};
|
|
73
66
|
}
|
|
74
67
|
let ownerIr = componentIrCache.get(ownerPath);
|
|
@@ -97,20 +90,13 @@ async function resolveOwnerRewriteContext({ occurrence, sourceFile, compilerOpts
|
|
|
97
90
|
pageComponentLoopBreakdown.ownerSourceReadMs += startupProfile.roundMs(performance.now() - ownerSourceReadStartedAt);
|
|
98
91
|
}
|
|
99
92
|
const startedAt = performance.now();
|
|
100
|
-
attrExpressionRewrite = buildComponentExpressionRewrite(
|
|
93
|
+
attrExpressionRewrite = buildComponentExpressionRewrite(ownerIr, expressionRewriteMetrics);
|
|
101
94
|
pageComponentLoopBreakdown.ownerExpressionRewriteBuildMs += startupProfile.roundMs(performance.now() - startedAt);
|
|
102
95
|
componentExpressionRewriteCache.set(ownerPath, attrExpressionRewrite);
|
|
103
96
|
}
|
|
104
|
-
|
|
105
|
-
if (!attrScopeRewrite) {
|
|
106
|
-
const startedAt = performance.now();
|
|
107
|
-
attrScopeRewrite = buildScopedIdentifierRewrite(ownerIr);
|
|
108
|
-
pageComponentLoopBreakdown.ownerScopeRewriteBuildMs += startupProfile.roundMs(performance.now() - startedAt);
|
|
109
|
-
componentScopeRewriteCache.set(ownerPath, attrScopeRewrite);
|
|
110
|
-
}
|
|
111
|
-
return { attrExpressionRewrite, attrScopeRewrite };
|
|
97
|
+
return { attrExpressionRewrite };
|
|
112
98
|
}
|
|
113
|
-
function resolveInstanceState({ useIsolatedInstance, compIr,
|
|
99
|
+
function resolveInstanceState({ useIsolatedInstance, compIr, expressionRewriteMetrics, expressionRewrite, startupProfile, pagePhase, componentInstanceCounter }) {
|
|
114
100
|
if (!useIsolatedInstance) {
|
|
115
101
|
return {
|
|
116
102
|
instanceIr: compIr,
|
|
@@ -123,7 +109,7 @@ function resolveInstanceState({ useIsolatedInstance, compIr, compPath, component
|
|
|
123
109
|
const cloned = cloneComponentIrForInstance(compIr, componentInstanceCounter, extractDeclaredIdentifiers, resolveStateKeyFromBindings);
|
|
124
110
|
pagePhase.cloneMs += startupProfile.roundMs(performance.now() - cloneStartedAt);
|
|
125
111
|
const instanceRewriteStartedAt = performance.now();
|
|
126
|
-
const instanceRewrite = buildComponentExpressionRewrite(
|
|
112
|
+
const instanceRewrite = buildComponentExpressionRewrite(cloned.ir, expressionRewriteMetrics);
|
|
127
113
|
pagePhase.instanceRewriteMs += startupProfile.roundMs(performance.now() - instanceRewriteStartedAt);
|
|
128
114
|
return {
|
|
129
115
|
instanceIr: cloned.ir,
|
|
@@ -132,12 +118,11 @@ function resolveInstanceState({ useIsolatedInstance, compIr, compPath, component
|
|
|
132
118
|
componentInstanceCounter: componentInstanceCounter + 1
|
|
133
119
|
};
|
|
134
120
|
}
|
|
135
|
-
export async function buildPageOwnerContext({ componentOccurrences, sourceFile, pageOwnerSource, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield,
|
|
121
|
+
export async function buildPageOwnerContext({ componentOccurrences, sourceFile, pageOwnerSource, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, expressionRewriteMetrics, startupProfile }) {
|
|
136
122
|
if (componentOccurrences.length === 0) {
|
|
137
123
|
return {
|
|
138
124
|
pageOwnerCompileMs: 0,
|
|
139
|
-
pageOwnerExpressionRewrite: createEmptyExpressionRewrite()
|
|
140
|
-
pageOwnerScopeRewrite: createEmptyScopeRewrite()
|
|
125
|
+
pageOwnerExpressionRewrite: createEmptyExpressionRewrite()
|
|
141
126
|
};
|
|
142
127
|
}
|
|
143
128
|
await cooperativeYield();
|
|
@@ -146,12 +131,10 @@ export async function buildPageOwnerContext({ componentOccurrences, sourceFile,
|
|
|
146
131
|
const pageOwnerCompileMs = startupProfile.roundMs(performance.now() - ownerStartedAt);
|
|
147
132
|
return {
|
|
148
133
|
pageOwnerCompileMs,
|
|
149
|
-
pageOwnerExpressionRewrite: buildComponentExpressionRewrite(
|
|
150
|
-
pageOwnerScopeRewrite: buildScopedIdentifierRewrite(pageOwnerIr)
|
|
134
|
+
pageOwnerExpressionRewrite: buildComponentExpressionRewrite(pageOwnerIr, expressionRewriteMetrics)
|
|
151
135
|
};
|
|
152
136
|
}
|
|
153
|
-
export async function runPageComponentLoop({ componentOccurrences, occurrenceCountByPath, sourceFile, registry, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, startupProfile, compilerTotals, emitCompilerWarning, componentIrCache, componentDocumentModeCache, componentExpressionRewriteCache,
|
|
154
|
-
const componentScopeRewriteCache = new Map();
|
|
137
|
+
export async function runPageComponentLoop({ componentOccurrences, occurrenceCountByPath, sourceFile, registry, compilerOpts, compilerBin, timedRunCompiler, cooperativeYield, startupProfile, compilerTotals, emitCompilerWarning, componentIrCache, componentDocumentModeCache, componentExpressionRewriteCache, expressionRewriteMetrics, pageOwnerExpressionRewrite, pageIr, pageIrMergeCache, seenStaticImports, pageExpressionRewriteMap, pageExpressionBindingMap, pageAmbiguousExpressionMap, knownRefKeys, componentOccurrencePlans, imagePropsLiterals, pagePhase, pageBindingResolutionBreakdown, pageMergeBreakdown, pageComponentLoopBreakdown, hoistedCodeTransformCache, pageStats }) {
|
|
155
138
|
let componentInstanceCounter = 0;
|
|
156
139
|
for (const occurrence of componentOccurrences) {
|
|
157
140
|
await cooperativeYield();
|
|
@@ -186,17 +169,13 @@ export async function runPageComponentLoop({ componentOccurrences, occurrenceCou
|
|
|
186
169
|
});
|
|
187
170
|
const expressionRewrite = resolveComponentExpressionRewrite({
|
|
188
171
|
compPath,
|
|
189
|
-
componentSource,
|
|
190
172
|
compIr,
|
|
191
|
-
compilerOpts,
|
|
192
|
-
compilerBin,
|
|
193
|
-
templateExpressionCache,
|
|
194
173
|
expressionRewriteMetrics,
|
|
195
174
|
componentExpressionRewriteCache,
|
|
196
175
|
pageComponentLoopBreakdown,
|
|
197
176
|
startupProfile
|
|
198
177
|
});
|
|
199
|
-
const { attrExpressionRewrite
|
|
178
|
+
const { attrExpressionRewrite } = await resolveOwnerRewriteContext({
|
|
200
179
|
occurrence,
|
|
201
180
|
sourceFile,
|
|
202
181
|
compilerOpts,
|
|
@@ -205,26 +184,23 @@ export async function runPageComponentLoop({ componentOccurrences, occurrenceCou
|
|
|
205
184
|
cooperativeYield,
|
|
206
185
|
componentIrCache,
|
|
207
186
|
componentExpressionRewriteCache,
|
|
208
|
-
componentScopeRewriteCache,
|
|
209
|
-
templateExpressionCache,
|
|
210
187
|
expressionRewriteMetrics,
|
|
211
188
|
startupProfile,
|
|
212
189
|
compilerTotals,
|
|
213
190
|
emitCompilerWarning,
|
|
214
191
|
pageComponentLoopBreakdown,
|
|
215
192
|
pageStats,
|
|
216
|
-
pageOwnerExpressionRewrite
|
|
217
|
-
pageOwnerScopeRewrite
|
|
193
|
+
pageOwnerExpressionRewrite
|
|
218
194
|
});
|
|
195
|
+
if (compName === 'Image') {
|
|
196
|
+
imagePropsLiterals.push(renderPropsLiteralFromAttrs(occurrence.attrs || '', {
|
|
197
|
+
expressionRewrite: attrExpressionRewrite
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
219
200
|
const useIsolatedInstance = occurrenceCount > 1;
|
|
220
201
|
const instanceState = resolveInstanceState({
|
|
221
202
|
useIsolatedInstance,
|
|
222
203
|
compIr,
|
|
223
|
-
compPath,
|
|
224
|
-
componentSource,
|
|
225
|
-
compilerOpts,
|
|
226
|
-
compilerBin,
|
|
227
|
-
templateExpressionCache,
|
|
228
204
|
expressionRewriteMetrics,
|
|
229
205
|
expressionRewrite,
|
|
230
206
|
startupProfile,
|
|
@@ -239,8 +215,7 @@ export async function runPageComponentLoop({ componentOccurrences, occurrenceCou
|
|
|
239
215
|
documentMode: isDocMode,
|
|
240
216
|
componentAttrs: typeof occurrence.attrs === 'string' ? occurrence.attrs : '',
|
|
241
217
|
componentAttrsRewrite: {
|
|
242
|
-
expressionRewrite: attrExpressionRewrite
|
|
243
|
-
scopeRewrite: attrScopeRewrite
|
|
218
|
+
expressionRewrite: attrExpressionRewrite
|
|
244
219
|
}
|
|
245
220
|
}, seenStaticImports, knownRefKeys, pageIrMergeCache, pageMergeBreakdown, hoistedCodeTransformCache);
|
|
246
221
|
pagePhase.mergeMs += startupProfile.roundMs(performance.now() - mergeStartedAt);
|
|
@@ -10,14 +10,6 @@ export function rewriteRefBindingIdentifiers(pageIr: object, preferredKeys?: Set
|
|
|
10
10
|
* @param {Set<string>} ambiguous
|
|
11
11
|
*/
|
|
12
12
|
export function applyExpressionRewrites(pageIr: object, expressionMap: Map<string, string>, bindingMap: Map<string, object>, ambiguous: Set<string>): void;
|
|
13
|
-
/**
|
|
14
|
-
* @param {object} pageIr
|
|
15
|
-
* @param {object} scopeRewrite
|
|
16
|
-
* @param {Record<string, number> | null} [scopedMetrics]
|
|
17
|
-
*/
|
|
18
|
-
export function applyScopedIdentifierRewrites(pageIr: object, scopeRewrite: object, scopedMetrics?: Record<string, number> | null): void;
|
|
19
|
-
export function synthesizeSignalBackedCompiledExpressions(pageIr: any): void;
|
|
20
|
-
export function normalizeExpressionBindingDependencies(pageIr: any): void;
|
|
21
13
|
export function normalizeExpressionPayload(pageIr: any): void;
|
|
22
14
|
export function normalizeHoistedSourcePayload(pageIr: any): void;
|
|
23
15
|
export function rewriteLegacyMarkupIdentifiers(pageIr: any): void;
|