@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.
Files changed (84) hide show
  1. package/README.md +18 -13
  2. package/dist/adapters/adapter-netlify.d.ts +1 -1
  3. package/dist/adapters/adapter-netlify.js +56 -13
  4. package/dist/adapters/adapter-node.js +8 -0
  5. package/dist/adapters/adapter-static-export.d.ts +5 -0
  6. package/dist/adapters/adapter-static-export.js +115 -0
  7. package/dist/adapters/adapter-types.d.ts +3 -1
  8. package/dist/adapters/adapter-types.js +5 -2
  9. package/dist/adapters/adapter-vercel.d.ts +1 -1
  10. package/dist/adapters/adapter-vercel.js +70 -13
  11. package/dist/adapters/copy-hosted-page-runtime.d.ts +1 -0
  12. package/dist/adapters/copy-hosted-page-runtime.js +49 -0
  13. package/dist/adapters/resolve-adapter.js +4 -0
  14. package/dist/adapters/route-rules.d.ts +5 -0
  15. package/dist/adapters/route-rules.js +9 -0
  16. package/dist/adapters/validate-hosted-resource-routes.d.ts +1 -0
  17. package/dist/adapters/validate-hosted-resource-routes.js +13 -0
  18. package/dist/auth/route-auth.d.ts +6 -0
  19. package/dist/auth/route-auth.js +236 -0
  20. package/dist/build/compiler-runtime.d.ts +10 -9
  21. package/dist/build/compiler-runtime.js +58 -2
  22. package/dist/build/compiler-signal-expression.d.ts +1 -0
  23. package/dist/build/compiler-signal-expression.js +155 -0
  24. package/dist/build/expression-rewrites.d.ts +1 -6
  25. package/dist/build/expression-rewrites.js +61 -65
  26. package/dist/build/page-component-loop.d.ts +3 -13
  27. package/dist/build/page-component-loop.js +21 -46
  28. package/dist/build/page-ir-normalization.d.ts +0 -8
  29. package/dist/build/page-ir-normalization.js +13 -234
  30. package/dist/build/page-loop-state.d.ts +6 -9
  31. package/dist/build/page-loop-state.js +9 -8
  32. package/dist/build/page-loop.js +27 -22
  33. package/dist/build/scoped-identifier-rewrite.d.ts +37 -44
  34. package/dist/build/scoped-identifier-rewrite.js +28 -128
  35. package/dist/build/server-script.d.ts +3 -1
  36. package/dist/build/server-script.js +35 -5
  37. package/dist/build-output-manifest.d.ts +3 -2
  38. package/dist/build-output-manifest.js +3 -0
  39. package/dist/build.js +32 -18
  40. package/dist/component-instance-ir.js +158 -52
  41. package/dist/dev-build-session.js +20 -6
  42. package/dist/dev-server.js +152 -55
  43. package/dist/download-result.d.ts +14 -0
  44. package/dist/download-result.js +148 -0
  45. package/dist/framework-components/Image.zen +1 -1
  46. package/dist/images/materialization-plan.d.ts +1 -0
  47. package/dist/images/materialization-plan.js +6 -0
  48. package/dist/images/materialize.d.ts +5 -3
  49. package/dist/images/materialize.js +24 -109
  50. package/dist/images/router-manifest.d.ts +1 -0
  51. package/dist/images/router-manifest.js +49 -0
  52. package/dist/images/service.d.ts +13 -1
  53. package/dist/images/service.js +45 -15
  54. package/dist/index.js +8 -2
  55. package/dist/manifest.d.ts +15 -1
  56. package/dist/manifest.js +27 -7
  57. package/dist/preview.d.ts +13 -4
  58. package/dist/preview.js +261 -101
  59. package/dist/request-body.d.ts +1 -0
  60. package/dist/request-body.js +7 -0
  61. package/dist/request-origin.d.ts +2 -0
  62. package/dist/request-origin.js +45 -0
  63. package/dist/resource-manifest.d.ts +16 -0
  64. package/dist/resource-manifest.js +53 -0
  65. package/dist/resource-response.d.ts +34 -0
  66. package/dist/resource-response.js +71 -0
  67. package/dist/resource-route-module.d.ts +15 -0
  68. package/dist/resource-route-module.js +129 -0
  69. package/dist/route-check-support.d.ts +1 -0
  70. package/dist/route-check-support.js +4 -0
  71. package/dist/server-contract.d.ts +29 -6
  72. package/dist/server-contract.js +304 -42
  73. package/dist/server-error.d.ts +4 -0
  74. package/dist/server-error.js +36 -0
  75. package/dist/server-output.d.ts +4 -1
  76. package/dist/server-output.js +71 -10
  77. package/dist/server-runtime/node-server.js +67 -31
  78. package/dist/server-runtime/route-render.d.ts +27 -3
  79. package/dist/server-runtime/route-render.js +94 -53
  80. package/dist/server-script-composition.d.ts +13 -5
  81. package/dist/server-script-composition.js +29 -11
  82. package/dist/static-export-paths.d.ts +3 -0
  83. package/dist/static-export-paths.js +160 -0
  84. package/package.json +6 -3
@@ -1,13 +1,7 @@
1
1
  import { performance } from 'node:perf_hooks';
2
- import { extractTemplate } from '../resolve-components.js';
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(compPath, componentSource, compIr, compilerOpts, compilerBin, templateExpressionCache = null, rewriteMetrics = null) {
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
- const templateOnly = extractTemplate(componentSource);
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 raw !== 'string' || typeof rewritten !== 'string') {
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.replace(/signalMap\.get\((\d+)\)/g, (full, rawIndex) => {
150
- const localIndex = Number.parseInt(rawIndex, 10);
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 full;
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 full;
116
+ return null;
161
117
  }
162
118
  const pageIndex = pageSignalIndexByStateKey.get(stateKey);
163
119
  if (!Number.isInteger(pageIndex)) {
164
- return full;
120
+ return null;
165
121
  }
166
- return `signalMap.get(${pageIndex})`;
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, templateExpressionCache, expressionRewriteMetrics, startupProfile }: {
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, templateExpressionCache, expressionRewriteMetrics, pageOwnerExpressionRewrite, pageOwnerScopeRewrite, pageIr, pageIrMergeCache, seenStaticImports, pageExpressionRewriteMap, pageExpressionBindingMap, pageAmbiguousExpressionMap, knownRefKeys, componentOccurrencePlans, pagePhase, pageBindingResolutionBreakdown, pageMergeBreakdown, pageComponentLoopBreakdown, hoistedCodeTransformCache, pageStats }: {
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, componentSource, compIr, compilerOpts, compilerBin, templateExpressionCache, expressionRewriteMetrics, componentExpressionRewriteCache, pageComponentLoopBreakdown, startupProfile }) {
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(compPath, componentSource, compIr, compilerOpts, compilerBin, templateExpressionCache, expressionRewriteMetrics);
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, componentScopeRewriteCache, templateExpressionCache, expressionRewriteMetrics, startupProfile, compilerTotals, emitCompilerWarning, pageComponentLoopBreakdown, pageStats, pageOwnerExpressionRewrite, pageOwnerScopeRewrite }) {
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(ownerPath, ownerSource, ownerIr, compilerOpts, compilerBin, templateExpressionCache, expressionRewriteMetrics);
93
+ attrExpressionRewrite = buildComponentExpressionRewrite(ownerIr, expressionRewriteMetrics);
101
94
  pageComponentLoopBreakdown.ownerExpressionRewriteBuildMs += startupProfile.roundMs(performance.now() - startedAt);
102
95
  componentExpressionRewriteCache.set(ownerPath, attrExpressionRewrite);
103
96
  }
104
- let attrScopeRewrite = componentScopeRewriteCache.get(ownerPath);
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, compPath, componentSource, compilerOpts, compilerBin, templateExpressionCache, expressionRewriteMetrics, expressionRewrite, startupProfile, pagePhase, componentInstanceCounter }) {
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(compPath, componentSource, cloned.ir, compilerOpts, compilerBin, templateExpressionCache, expressionRewriteMetrics);
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, templateExpressionCache, expressionRewriteMetrics, startupProfile }) {
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(sourceFile, pageOwnerSource, pageOwnerIr, compilerOpts, compilerBin, templateExpressionCache, expressionRewriteMetrics),
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, templateExpressionCache, expressionRewriteMetrics, pageOwnerExpressionRewrite, pageOwnerScopeRewrite, pageIr, pageIrMergeCache, seenStaticImports, pageExpressionRewriteMap, pageExpressionBindingMap, pageAmbiguousExpressionMap, knownRefKeys, componentOccurrencePlans, pagePhase, pageBindingResolutionBreakdown, pageMergeBreakdown, pageComponentLoopBreakdown, hoistedCodeTransformCache, pageStats }) {
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, attrScopeRewrite } = await resolveOwnerRewriteContext({
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;