@barefootjs/jsx 0.31.2 → 0.31.3
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/adapters/jsx-adapter.d.ts.map +1 -1
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +134 -36
- package/dist/jsx-to-ir.d.ts.map +1 -1
- package/dist/prop-rewrite.d.ts +1 -1
- package/dist/scope/binding-scope.d.ts +179 -0
- package/dist/scope/binding-scope.d.ts.map +1 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/binding-scope-preamble-shadowing.test.ts +115 -0
- package/src/__tests__/binding-scope-ratchet.test.ts +194 -0
- package/src/__tests__/binding-scope.test.ts +200 -0
- package/src/__tests__/let-type-annotation.test.ts +208 -0
- package/src/adapters/jsx-adapter.ts +32 -4
- package/src/analyzer.ts +20 -3
- package/src/index.ts +4 -0
- package/src/jsx-to-ir.ts +170 -65
- package/src/prop-rewrite.ts +1 -1
- package/src/scope/binding-scope.ts +238 -0
- package/src/types.ts +8 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/jsx-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,MAAM,EACN,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAK1D,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,8BAAsB,UAAW,SAAQ,WAAW;IAClD,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IAEpC,yEAAyE;IACzE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAA;IAE9C;;;;;;OAMG;IACH,mBAAmB,EAAE,oBAAoB,CAAa;IAMtD,SAAS,CAAC,sBAAsB,CAC9B,UAAU,EAAE,eAAe,EAAE,GAC5B,MAAM,CAuBR;IAMD;;;;;;;;;;OAUG;IACH,0BAA0B,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"jsx-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/jsx-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,MAAM,EACN,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAK1D,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,8BAAsB,UAAW,SAAQ,WAAW;IAClD,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IAEpC,yEAAyE;IACzE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAA;IAE9C;;;;;;OAMG;IACH,mBAAmB,EAAE,oBAAoB,CAAa;IAMtD,SAAS,CAAC,sBAAsB,CAC9B,UAAU,EAAE,eAAe,EAAE,GAC5B,MAAM,CAuBR;IAMD;;;;;;;;;;OAUG;IACH,0BAA0B,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAuKnE;IAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAEhF,SAAS,CAAC,2BAA2B,CAAC,EAAE,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAmFlE;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,SAAS,CAAC,+BAA+B,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CA0DjE;IAMD,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ5C;IAMD;;;;;OAKG;IACH,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAE1E;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,GAAG,MAAM,CASvF;IAMD,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEhD;IAED,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvC;IAED,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvC;CACF"}
|
package/dist/analyzer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAG3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAInE,OAAO,EACL,KAAK,eAAe,EAUrB,MAAM,uBAAuB,CAAA;AAqB9B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAU/D;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAA;CAAE,GAAG,IAAI,CA8CpF;AAMD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EACpB,mBAAmB,CAAC,EAAE,oBAAoB,EAC1C,eAAe,CAAC,EAAE,OAAO,GACxB,eAAe,CAkKjB;
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAG3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAInE,OAAO,EACL,KAAK,eAAe,EAUrB,MAAM,uBAAuB,CAAA;AAqB9B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAU/D;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAA;CAAE,GAAG,IAAI,CA8CpF;AAMD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EACpB,mBAAmB,CAAC,EAAE,oBAAoB,EAC1C,eAAe,CAAC,EAAE,OAAO,GACxB,eAAe,CAkKjB;AAuhBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAavE;AAuuCD,MAAM,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,qBAAqB,GAAG,EAAE,CAAC,WAAW,CAAA;AAErF;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC;QACd,SAAS,EAAE,EAAE,CAAC,UAAU,CAAA;QACxB,SAAS,EAAE,aAAa,GAAG,IAAI,CAAA;QAC/B;;;;;WAKG;QACH,mBAAmB,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAA;KACtC,CAAC,CAAA;IACF,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAA;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAA;CAClC;AAuBD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,EAAE,CAAC,KAAK,EACd,aAAa,UAAQ,GACpB,sBAAsB,GAAG,IAAI,CA+J/B;AAsGD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CA6BpE;AA2LD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAuCzE;AAuDD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAelE;AA6tCD,eAAO,MAAM,wBAAwB,aAOnC,CAAA;AAqBF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA0DV;AAcD,eAAO,MAAM,mBAAmB,aAG9B,CAAA;AA25CF;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CA4EvE;AAiID,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -97,6 +97,8 @@ export type { ParsedExpr, ObjectLiteralProperty, ParsedStatement, SortComparator
|
|
|
97
97
|
export { buildLoopChainExpr } from './loop-chain.ts';
|
|
98
98
|
export type { LoopChainInputs } from './loop-chain.ts';
|
|
99
99
|
export { isLowerableLoopDestructure, isLowerableObjectRestDestructure } from './loop-destructure.ts';
|
|
100
|
+
export { BindingScope } from './scope/binding-scope.ts';
|
|
101
|
+
export type { ScopeBindingSource, ScopeBinding, ScopeFrame, LoopBindingSource } from './scope/binding-scope.ts';
|
|
100
102
|
export { buildComponentGraph, buildComponentAnalysis, buildGraphFromIR, buildEventSummary, buildLoopSummary, buildWhyUpdate, traceUpdatePath, formatComponentGraph, formatUpdatePath, formatEventSummary, formatLoopSummary, formatWhyUpdate, describeFallback, formatFallbackExplanations, buildComponentSummary, formatComponentSummary, formatSignalTrace, generateStaticTrace, graphToJSON, resolveSetters, buildLocalFunctionSetterMap, makeIdCallRegex, } from './debug.ts';
|
|
101
103
|
export type { ComponentGraph, ComponentAnalysis, SignalNode, MemoNode, EffectNode, DomBinding, UpdatePath, SignalTrace, EventBinding, SetterRef, FnSetterResolution, EventSummary, LoopInfo, LoopChildBinding, LoopSummary, WhyUpdateResult, WhyUpdateDep, WhyUpdateSource, FallbackExplanation, ComponentSummary } from './debug.ts';
|
|
102
104
|
export type { WrapReason } from './ir-to-client-js/reactivity.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6008,7 +6008,8 @@ function visit(node, ctx, targetComponentName, namedExports) {
|
|
|
6008
6008
|
if (!ctx.componentNode) {
|
|
6009
6009
|
collectAmbientGlobals(node, ctx);
|
|
6010
6010
|
}
|
|
6011
|
-
|
|
6011
|
+
const isDeclareStatement = ts9.isVariableStatement(node) && (node.modifiers?.some((m) => m.kind === ts9.SyntaxKind.DeclareKeyword) ?? false);
|
|
6012
|
+
if (ts9.isVariableStatement(node) && !ctx.componentNode && !isDeclareStatement) {
|
|
6012
6013
|
const isExported = node.modifiers?.some((m) => m.kind === ts9.SyntaxKind.ExportKeyword) ?? false;
|
|
6013
6014
|
const isLet = (node.declarationList.flags & ts9.NodeFlags.Let) !== 0;
|
|
6014
6015
|
const isModuleClientDirective = hasLeadingClientDirectiveOnStatement(node, ctx.sourceFile);
|
|
@@ -6021,7 +6022,7 @@ function visit(node, ctx, targetComponentName, namedExports) {
|
|
|
6021
6022
|
}
|
|
6022
6023
|
continue;
|
|
6023
6024
|
}
|
|
6024
|
-
if (ts9.isIdentifier(decl.name) && decl.initializer && !isArrowComponentFunction(decl)) {
|
|
6025
|
+
if (ts9.isIdentifier(decl.name) && (decl.initializer || isLet) && !isArrowComponentFunction(decl)) {
|
|
6025
6026
|
collectConstant(decl, ctx, true, isLet ? "let" : "const", isExported);
|
|
6026
6027
|
}
|
|
6027
6028
|
}
|
|
@@ -7592,6 +7593,7 @@ function collectConstant(node, ctx, _isModule, declarationKind = "const", isExpo
|
|
|
7592
7593
|
value,
|
|
7593
7594
|
parsed,
|
|
7594
7595
|
typedValue: typedValue !== value ? typedValue : undefined,
|
|
7596
|
+
typeAnnotation: node.type ? node.type.getText(ctx.sourceFile) : undefined,
|
|
7595
7597
|
valueBranches,
|
|
7596
7598
|
declarationKind,
|
|
7597
7599
|
isExported,
|
|
@@ -10020,6 +10022,85 @@ var toLocaleDatePlugin = {
|
|
|
10020
10022
|
|
|
10021
10023
|
// src/jsx-to-ir.ts
|
|
10022
10024
|
import { toHTMLAttrName, decodeEntities } from "@barefootjs/shared";
|
|
10025
|
+
|
|
10026
|
+
// src/scope/binding-scope.ts
|
|
10027
|
+
class BindingScope {
|
|
10028
|
+
frames;
|
|
10029
|
+
static EMPTY = new BindingScope([]);
|
|
10030
|
+
constructor(frames) {
|
|
10031
|
+
this.frames = frames;
|
|
10032
|
+
}
|
|
10033
|
+
enterLoopRow(loop) {
|
|
10034
|
+
const bindings = new Map;
|
|
10035
|
+
if (loop.paramBindings && loop.paramBindings.length > 0) {
|
|
10036
|
+
for (const b of loop.paramBindings)
|
|
10037
|
+
bindings.set(b.name, { source: "destructure" });
|
|
10038
|
+
} else {
|
|
10039
|
+
bindings.set(loop.param, { source: "item" });
|
|
10040
|
+
}
|
|
10041
|
+
if (loop.index != null)
|
|
10042
|
+
bindings.set(loop.index, { source: "index" });
|
|
10043
|
+
for (const name of loop.preamble?.declaredNames ?? [])
|
|
10044
|
+
bindings.set(name, { source: "preamble" });
|
|
10045
|
+
const frame = { kind: "loop-row", bindings };
|
|
10046
|
+
return new BindingScope([frame, ...this.frames]);
|
|
10047
|
+
}
|
|
10048
|
+
enterCallback(params) {
|
|
10049
|
+
const bindings = new Map;
|
|
10050
|
+
for (const name of params)
|
|
10051
|
+
bindings.set(name, { source: "param" });
|
|
10052
|
+
const frame = { kind: "callback", bindings };
|
|
10053
|
+
return new BindingScope([frame, ...this.frames]);
|
|
10054
|
+
}
|
|
10055
|
+
isBound(name) {
|
|
10056
|
+
for (const frame of this.frames) {
|
|
10057
|
+
if (frame.bindings.has(name))
|
|
10058
|
+
return true;
|
|
10059
|
+
}
|
|
10060
|
+
return false;
|
|
10061
|
+
}
|
|
10062
|
+
lookup(name) {
|
|
10063
|
+
for (let depth = 0;depth < this.frames.length; depth++) {
|
|
10064
|
+
const frame = this.frames[depth];
|
|
10065
|
+
const binding = frame.bindings.get(name);
|
|
10066
|
+
if (binding)
|
|
10067
|
+
return { depth, frame, binding };
|
|
10068
|
+
}
|
|
10069
|
+
return null;
|
|
10070
|
+
}
|
|
10071
|
+
boundNames() {
|
|
10072
|
+
if (this.boundNamesCache)
|
|
10073
|
+
return this.boundNamesCache;
|
|
10074
|
+
const names = new Set;
|
|
10075
|
+
for (const frame of this.frames) {
|
|
10076
|
+
for (const name of frame.bindings.keys())
|
|
10077
|
+
names.add(name);
|
|
10078
|
+
}
|
|
10079
|
+
this.boundNamesCache = names;
|
|
10080
|
+
return names;
|
|
10081
|
+
}
|
|
10082
|
+
boundNamesCache;
|
|
10083
|
+
valueBoundNamesCache;
|
|
10084
|
+
valueBoundNames() {
|
|
10085
|
+
if (this.valueBoundNamesCache)
|
|
10086
|
+
return this.valueBoundNamesCache;
|
|
10087
|
+
const names = new Set;
|
|
10088
|
+
for (const frame of this.frames) {
|
|
10089
|
+
for (const [name, binding] of frame.bindings) {
|
|
10090
|
+
if (binding.source === "item" || binding.source === "index" || binding.source === "destructure") {
|
|
10091
|
+
names.add(name);
|
|
10092
|
+
}
|
|
10093
|
+
}
|
|
10094
|
+
}
|
|
10095
|
+
this.valueBoundNamesCache = names;
|
|
10096
|
+
return names;
|
|
10097
|
+
}
|
|
10098
|
+
asShadowPredicate() {
|
|
10099
|
+
return (name) => this.isBound(name);
|
|
10100
|
+
}
|
|
10101
|
+
}
|
|
10102
|
+
|
|
10103
|
+
// src/jsx-to-ir.ts
|
|
10023
10104
|
var CLIENT_DIRECTIVE_INTERIOR_RE2 = /^\s*@client\s*$/;
|
|
10024
10105
|
var BLOCK_COMMENT_RE2 = /\/\*([\s\S]*?)\*\//g;
|
|
10025
10106
|
function hasLeadingClientDirective(expr, sourceFile) {
|
|
@@ -10199,8 +10280,9 @@ function rewriteBarePropRefs2(text, expr, ctx) {
|
|
|
10199
10280
|
let propNames = getDestructuredPropNames(ctx);
|
|
10200
10281
|
if (!propNames)
|
|
10201
10282
|
return dateLowered === text ? undefined : dateLowered;
|
|
10202
|
-
|
|
10203
|
-
|
|
10283
|
+
const shadowingNames = ctx.scope.boundNames();
|
|
10284
|
+
if (shadowingNames.size > 0) {
|
|
10285
|
+
const filtered = new Set([...propNames].filter((n) => !shadowingNames.has(n)));
|
|
10204
10286
|
if (filtered.size === 0)
|
|
10205
10287
|
return dateLowered === text ? undefined : dateLowered;
|
|
10206
10288
|
propNames = filtered;
|
|
@@ -10276,7 +10358,7 @@ function createTransformContext(analyzer) {
|
|
|
10276
10358
|
spreadIdCounter: 0,
|
|
10277
10359
|
isRoot: true,
|
|
10278
10360
|
insideComponentChildren: false,
|
|
10279
|
-
|
|
10361
|
+
scope: BindingScope.EMPTY,
|
|
10280
10362
|
loopDepth: 0,
|
|
10281
10363
|
patterns: {
|
|
10282
10364
|
signals: analyzer.signals.map((s) => ({
|
|
@@ -10353,7 +10435,8 @@ function generateSpreadSlotId(ctx) {
|
|
|
10353
10435
|
return `Spread_${ctx.spreadIdCounter++}`;
|
|
10354
10436
|
}
|
|
10355
10437
|
function makeBindingEnv(ctx) {
|
|
10356
|
-
const
|
|
10438
|
+
const boundNames = ctx.scope.valueBoundNames();
|
|
10439
|
+
const loopKey = boundNames.size === 0 ? "" : Array.from(boundNames).sort().join("\x00");
|
|
10357
10440
|
if (ctx._bindingEnv && ctx._bindingEnvLoopKey === loopKey) {
|
|
10358
10441
|
return ctx._bindingEnv;
|
|
10359
10442
|
}
|
|
@@ -10368,7 +10451,7 @@ function makeBindingEnv(ctx) {
|
|
|
10368
10451
|
localFunctions: a.localFunctions,
|
|
10369
10452
|
imports: a.imports,
|
|
10370
10453
|
ambientGlobals: a.ambientGlobals,
|
|
10371
|
-
loopParams:
|
|
10454
|
+
loopParams: boundNames,
|
|
10372
10455
|
checker: a.checker
|
|
10373
10456
|
};
|
|
10374
10457
|
ctx._bindingEnv = env;
|
|
@@ -11061,7 +11144,8 @@ function transformExpressionInner(expr, ctx, node, isClientOnly) {
|
|
|
11061
11144
|
freeRefs
|
|
11062
11145
|
};
|
|
11063
11146
|
const reactive = isReactiveExpression(exprText, ctx, expr) || isReactiveOrigin(origin);
|
|
11064
|
-
const
|
|
11147
|
+
const scopeValueNames = ctx.scope.valueBoundNames();
|
|
11148
|
+
const refsLoopParam = scopeValueNames.size > 0 && Array.from(scopeValueNames).some((p) => new RegExp(`\\b${p}\\b`).test(exprText));
|
|
11065
11149
|
const callsReactive = exprCallsReactiveGetters(expr, ctx);
|
|
11066
11150
|
const hasCalls = exprHasFunctionCalls(expr);
|
|
11067
11151
|
const needsSlot = reactive || isClientOnly || refsLoopParam || callsReactive || hasCalls;
|
|
@@ -12149,7 +12233,7 @@ function extractItemConditionalKey(cond) {
|
|
|
12149
12233
|
return a ?? b;
|
|
12150
12234
|
}
|
|
12151
12235
|
function transformMapCall(node, ctx, isClientOnly = false, method = "map") {
|
|
12152
|
-
const isNested = ctx.
|
|
12236
|
+
const isNested = ctx.scope.valueBoundNames().size > 0;
|
|
12153
12237
|
const diagCountAtEntry = ctx.analyzer.errors.length;
|
|
12154
12238
|
const depth = ctx.loopDepth;
|
|
12155
12239
|
const propAccess = node.expression;
|
|
@@ -12308,14 +12392,8 @@ function transformMapCall(node, ctx, isClientOnly = false, method = "map") {
|
|
|
12308
12392
|
indexType = secondParam.type.getText(ctx.sourceFile);
|
|
12309
12393
|
}
|
|
12310
12394
|
}
|
|
12311
|
-
|
|
12312
|
-
|
|
12313
|
-
ctx.loopParams.add(b.name);
|
|
12314
|
-
} else {
|
|
12315
|
-
ctx.loopParams.add(param);
|
|
12316
|
-
}
|
|
12317
|
-
if (index)
|
|
12318
|
-
ctx.loopParams.add(index);
|
|
12395
|
+
const savedScope = ctx.scope;
|
|
12396
|
+
ctx.scope = ctx.scope.enterLoopRow({ param, index, paramBindings });
|
|
12319
12397
|
ctx.loopDepth++;
|
|
12320
12398
|
const tryTransformRenderableBody = (expr) => {
|
|
12321
12399
|
if (!ts12.isBinaryExpression(expr))
|
|
@@ -12376,6 +12454,24 @@ function transformMapCall(node, ctx, isClientOnly = false, method = "map") {
|
|
|
12376
12454
|
}
|
|
12377
12455
|
}
|
|
12378
12456
|
const returnStmt = children.length === 0 ? body.statements.find((s) => ts12.isReturnStatement(s) && s.expression != null) : undefined;
|
|
12457
|
+
let rowScopeBeforePreamble = null;
|
|
12458
|
+
if (returnStmt) {
|
|
12459
|
+
const preambleNames = new Set;
|
|
12460
|
+
for (const stmt of body.statements) {
|
|
12461
|
+
if (stmt === returnStmt)
|
|
12462
|
+
break;
|
|
12463
|
+
collectPreambleDeclaredNames(stmt, preambleNames);
|
|
12464
|
+
}
|
|
12465
|
+
if (preambleNames.size > 0) {
|
|
12466
|
+
rowScopeBeforePreamble = ctx.scope;
|
|
12467
|
+
ctx.scope = savedScope.enterLoopRow({
|
|
12468
|
+
param,
|
|
12469
|
+
index,
|
|
12470
|
+
paramBindings,
|
|
12471
|
+
preamble: { declaredNames: [...preambleNames] }
|
|
12472
|
+
});
|
|
12473
|
+
}
|
|
12474
|
+
}
|
|
12379
12475
|
if (returnStmt && returnStmt.expression) {
|
|
12380
12476
|
let returnExpr = returnStmt.expression;
|
|
12381
12477
|
while (ts12.isParenthesizedExpression(returnExpr)) {
|
|
@@ -12445,6 +12541,9 @@ function transformMapCall(node, ctx, isClientOnly = false, method = "map") {
|
|
|
12445
12541
|
}
|
|
12446
12542
|
}
|
|
12447
12543
|
}
|
|
12544
|
+
if (rowScopeBeforePreamble) {
|
|
12545
|
+
ctx.scope = rowScopeBeforePreamble;
|
|
12546
|
+
}
|
|
12448
12547
|
if (method === "flatMap" && children.length === 0 && !flatMapProjectionCall(body)) {
|
|
12449
12548
|
flatMapCallback = buildFlatMapCallback(callback, body, ctx);
|
|
12450
12549
|
}
|
|
@@ -12473,14 +12572,7 @@ function transformMapCall(node, ctx, isClientOnly = false, method = "map") {
|
|
|
12473
12572
|
}
|
|
12474
12573
|
}));
|
|
12475
12574
|
}
|
|
12476
|
-
|
|
12477
|
-
for (const b of paramBindings)
|
|
12478
|
-
ctx.loopParams.delete(b.name);
|
|
12479
|
-
} else {
|
|
12480
|
-
ctx.loopParams.delete(param);
|
|
12481
|
-
}
|
|
12482
|
-
if (index)
|
|
12483
|
-
ctx.loopParams.delete(index);
|
|
12575
|
+
ctx.scope = savedScope;
|
|
12484
12576
|
ctx.loopDepth--;
|
|
12485
12577
|
}
|
|
12486
12578
|
if (children.length === 0 && !flatMapCallback) {
|
|
@@ -13227,7 +13319,7 @@ function parseTemplateLiteral(expr, ctx) {
|
|
|
13227
13319
|
}
|
|
13228
13320
|
function tryResolveTemplateSpanFromConst(expr, ctx) {
|
|
13229
13321
|
if (ts12.isIdentifier(expr)) {
|
|
13230
|
-
if (ctx.
|
|
13322
|
+
if (ctx.scope.isBound(expr.text))
|
|
13231
13323
|
return null;
|
|
13232
13324
|
const constInfo = findLocalConst(expr.text, ctx.analyzer);
|
|
13233
13325
|
if (!constInfo)
|
|
@@ -13243,7 +13335,7 @@ function tryResolveTemplateSpanFromConst(expr, ctx) {
|
|
|
13243
13335
|
if (ts12.isElementAccessExpression(expr)) {
|
|
13244
13336
|
if (!ts12.isIdentifier(expr.expression))
|
|
13245
13337
|
return null;
|
|
13246
|
-
if (ctx.
|
|
13338
|
+
if (ctx.scope.isBound(expr.expression.text))
|
|
13247
13339
|
return null;
|
|
13248
13340
|
const constInfo = findLocalConst(expr.expression.text, ctx.analyzer);
|
|
13249
13341
|
if (!constInfo)
|
|
@@ -13322,7 +13414,7 @@ function hasDynamicTagBinding(name, sourceFile) {
|
|
|
13322
13414
|
return found;
|
|
13323
13415
|
}
|
|
13324
13416
|
function tryResolveIdentifierAsTemplateLiteral(ident, ctx) {
|
|
13325
|
-
if (ctx.
|
|
13417
|
+
if (ctx.scope.isBound(ident.text))
|
|
13326
13418
|
return null;
|
|
13327
13419
|
const constInfo = findLocalConst(ident.text, ctx.analyzer);
|
|
13328
13420
|
if (!constInfo)
|
|
@@ -13671,9 +13763,10 @@ function isSignalOrMemoArray(array, ctx) {
|
|
|
13671
13763
|
return false;
|
|
13672
13764
|
}
|
|
13673
13765
|
function referencesLoopParam(expr, ctx) {
|
|
13674
|
-
|
|
13766
|
+
const boundNames = ctx.scope.valueBoundNames();
|
|
13767
|
+
if (boundNames.size === 0)
|
|
13675
13768
|
return false;
|
|
13676
|
-
for (const p of
|
|
13769
|
+
for (const p of boundNames) {
|
|
13677
13770
|
if (new RegExp(`\\b${p}\\b`).test(expr))
|
|
13678
13771
|
return true;
|
|
13679
13772
|
}
|
|
@@ -13753,8 +13846,9 @@ function hasReactiveAttributes(attrs, ctx) {
|
|
|
13753
13846
|
if (isSignalOrMemoReference(valueToCheck, ctx) || isPropsReference(valueToCheck, ctx)) {
|
|
13754
13847
|
return true;
|
|
13755
13848
|
}
|
|
13756
|
-
|
|
13757
|
-
|
|
13849
|
+
const scopeValueNames = ctx.scope.valueBoundNames();
|
|
13850
|
+
if (scopeValueNames.size > 0) {
|
|
13851
|
+
for (const p of scopeValueNames) {
|
|
13758
13852
|
if (new RegExp(`\\b${p}\\b`).test(valueToCheck))
|
|
13759
13853
|
return true;
|
|
13760
13854
|
}
|
|
@@ -24563,7 +24657,7 @@ class JsxAdapter extends BaseAdapter {
|
|
|
24563
24657
|
continue;
|
|
24564
24658
|
const keyword = constant.declarationKind ?? "const";
|
|
24565
24659
|
if (!constant.value) {
|
|
24566
|
-
const typeAnnotation = preserveTypes && constant.type ? `: ${constant.type
|
|
24660
|
+
const typeAnnotation = preserveTypes && (constant.typeAnnotation ?? constant.type) ? `: ${constant.typeAnnotation ?? constant.type?.raw}` : "";
|
|
24567
24661
|
lines.push(` ${keyword} ${constant.name}${typeAnnotation}`);
|
|
24568
24662
|
continue;
|
|
24569
24663
|
}
|
|
@@ -24573,7 +24667,8 @@ class JsxAdapter extends BaseAdapter {
|
|
|
24573
24667
|
if (!reachable.has(constant.name))
|
|
24574
24668
|
continue;
|
|
24575
24669
|
const constValue = preserveTypes ? constant.typedValue ?? constant.value : constant.value;
|
|
24576
|
-
|
|
24670
|
+
const letTypeAnnotation = preserveTypes && keyword === "let" && constant.typeAnnotation ? `: ${constant.typeAnnotation}` : "";
|
|
24671
|
+
lines.push(` ${keyword} ${constant.name}${letTypeAnnotation} = ${constValue}`);
|
|
24577
24672
|
}
|
|
24578
24673
|
for (const func of localFunctions) {
|
|
24579
24674
|
if (moduleScopeNames.has(func.name))
|
|
@@ -24680,7 +24775,8 @@ class JsxAdapter extends BaseAdapter {
|
|
|
24680
24775
|
const keyword = c.declarationKind ?? "const";
|
|
24681
24776
|
const exportKw = c.isExported ? "export " : "";
|
|
24682
24777
|
if (!c.value) {
|
|
24683
|
-
|
|
24778
|
+
const typeAnnotation = preserveTypes && (c.typeAnnotation ?? c.type) ? `: ${c.typeAnnotation ?? c.type?.raw}` : "";
|
|
24779
|
+
entries.push({ line: c.loc.start.line, text: `${exportKw}${keyword} ${c.name}${typeAnnotation}` });
|
|
24684
24780
|
continue;
|
|
24685
24781
|
}
|
|
24686
24782
|
const trimmed = c.value.trim();
|
|
@@ -24689,7 +24785,8 @@ class JsxAdapter extends BaseAdapter {
|
|
|
24689
24785
|
if (c.isExported && /^createContext\b/.test(trimmed))
|
|
24690
24786
|
continue;
|
|
24691
24787
|
const value = preserveTypes ? c.typedValue ?? c.value : c.value;
|
|
24692
|
-
|
|
24788
|
+
const letTypeAnnotation = preserveTypes && keyword === "let" && c.typeAnnotation ? `: ${c.typeAnnotation}` : "";
|
|
24789
|
+
entries.push({ line: c.loc.start.line, text: `${exportKw}${keyword} ${c.name}${letTypeAnnotation} = ${value}` });
|
|
24693
24790
|
}
|
|
24694
24791
|
for (const f of ir.metadata.localFunctions) {
|
|
24695
24792
|
if (!f.isModule || !moduleNames.has(f.name))
|
|
@@ -28570,6 +28667,7 @@ export {
|
|
|
28570
28667
|
ErrorCodes,
|
|
28571
28668
|
ENV_SIGNAL_READERS,
|
|
28572
28669
|
CALLBACK_METHODS,
|
|
28670
|
+
BindingScope,
|
|
28573
28671
|
BaseAdapter,
|
|
28574
28672
|
BUILTIN_LOWERING_PLUGINS,
|
|
28575
28673
|
BROWSER_ONLY_CLIENT_APIS,
|
package/dist/jsx-to-ir.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-to-ir.d.ts","sourceRoot":"","sources":["../src/jsx-to-ir.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,MAAM,EA+BZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,KAAK,eAAe,EAA0E,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"jsx-to-ir.d.ts","sourceRoot":"","sources":["../src/jsx-to-ir.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,MAAM,EA+BZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,KAAK,eAAe,EAA0E,MAAM,uBAAuB,CAAA;AA+6BpI,wBAAgB,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAIhE"}
|
package/dist/prop-rewrite.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* stack, so `items.map((title) => title.a)` never turns into the
|
|
15
15
|
* syntactically invalid `.map((_p.title) => _p.title.a)` when `title`
|
|
16
16
|
* is also a prop. (Names bound by loop callbacks that ENCLOSE the
|
|
17
|
-
* expression are the caller's job — see the `ctx.
|
|
17
|
+
* expression are the caller's job — see the `ctx.scope` filter in
|
|
18
18
|
* `jsx-to-ir.ts`'s `rewriteBarePropRefs` wrapper, #2222.)
|
|
19
19
|
*/
|
|
20
20
|
import ts from 'typescript';
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `BindingScope`: the one shared, immutable, stack-shaped model of "names
|
|
3
|
+
* bound by a loop callback" (#2482 Stage 0). Six independent ad-hoc
|
|
4
|
+
* mechanisms across the compiler currently answer this same question —
|
|
5
|
+
* `ctx.loopParams` (a mutated `Set<string>` in `jsx-to-ir.ts`),
|
|
6
|
+
* `collectLoopBoundNames` (`adapters/loop-bound-names.ts`),
|
|
7
|
+
* `resolveStaticLoopSource`'s `isNameShadowed` callback
|
|
8
|
+
* (`static-literal.ts`), and others — each reimplementing the same
|
|
9
|
+
* item/index/destructure/preamble-local bookkeeping with its own bugs and
|
|
10
|
+
* its own blind spots. This module is the single door those mechanisms
|
|
11
|
+
* migrate onto in later stages (Stage 0 only ships the service + tests;
|
|
12
|
+
* NO call site is migrated yet).
|
|
13
|
+
*
|
|
14
|
+
* Immutability is the point, not an incidental style choice:
|
|
15
|
+
* `ctx.loopParams` is `.add`/`.delete`-mutated as `jsx-to-ir.ts` walks in
|
|
16
|
+
* and back out of nested loops, so a caller that forgets (or races) a
|
|
17
|
+
* `.delete()` — or that holds a reference to the "current" set across a
|
|
18
|
+
* push/pop it didn't expect — silently observes the WRONG scope. A
|
|
19
|
+
* restore-bug of that shape is impossible by construction here:
|
|
20
|
+
* `enterLoopRow`/`enterCallback` never mutate `this`, they return a NEW
|
|
21
|
+
* `BindingScope` whose parent is untouched, so holding an old reference
|
|
22
|
+
* always sees the scope as it was, and there is no delete step to forget.
|
|
23
|
+
*
|
|
24
|
+
* Filter/sort callback params (`.filter(x => ...)`, `.sort((a, b) => ...)`,
|
|
25
|
+
* a nested arrow) are bound as `'callback'` frames via `enterCallback` —
|
|
26
|
+
* never folded into a `'loop-row'` frame's bindings. They are a distinct
|
|
27
|
+
* scope-introduction shape (an inner function's own parameter list, not a
|
|
28
|
+
* row's item/index/destructure/preamble names) even though both end up
|
|
29
|
+
* "just names you can't resolve against component-level state."
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* How a name inside a `ScopeFrame` came to be bound — the row shapes
|
|
33
|
+
* (`'item'`/`'index'`/`'destructure'`/`'preamble'`) for `'loop-row'` frames,
|
|
34
|
+
* `'param'` for `'callback'` frames. One shared type because both frame
|
|
35
|
+
* kinds carry the same binding metadata.
|
|
36
|
+
*/
|
|
37
|
+
export type ScopeBindingSource = 'item' | 'index' | 'destructure' | 'preamble' | 'param';
|
|
38
|
+
export interface ScopeBinding {
|
|
39
|
+
readonly source: ScopeBindingSource;
|
|
40
|
+
}
|
|
41
|
+
export interface ScopeFrame {
|
|
42
|
+
readonly kind: 'loop-row' | 'callback';
|
|
43
|
+
readonly bindings: ReadonlyMap<string, ScopeBinding>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Structural pick satisfied by BOTH `IRLoop` (`packages/jsx/src/types.ts`)
|
|
47
|
+
* and the client-JS `LoopCore` family (`packages/jsx/src/ir-to-client-js/types.ts`)
|
|
48
|
+
* without importing either — this module stays dependency-free and cannot
|
|
49
|
+
* form an import cycle with `types.ts` / `ir-to-client-js`.
|
|
50
|
+
*/
|
|
51
|
+
export interface LoopBindingSource {
|
|
52
|
+
readonly param: string;
|
|
53
|
+
readonly index?: string | null;
|
|
54
|
+
readonly paramBindings?: readonly {
|
|
55
|
+
readonly name: string;
|
|
56
|
+
}[];
|
|
57
|
+
readonly preamble?: {
|
|
58
|
+
readonly declaredNames: readonly string[];
|
|
59
|
+
} | null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A stack of `ScopeFrame`s, innermost frame at index 0 of the internal
|
|
63
|
+
* array (i.e. `frames[0]` is what `enterLoopRow`/`enterCallback` most
|
|
64
|
+
* recently pushed). `lookup`'s `depth` counts from `frames[0]`, so depth 0
|
|
65
|
+
* always means "the innermost frame," independent of how many ancestor
|
|
66
|
+
* frames exist.
|
|
67
|
+
*/
|
|
68
|
+
export declare class BindingScope {
|
|
69
|
+
private readonly frames;
|
|
70
|
+
static readonly EMPTY: BindingScope;
|
|
71
|
+
private constructor();
|
|
72
|
+
/**
|
|
73
|
+
* Child scope with a new `'loop-row'` frame for one loop's per-item
|
|
74
|
+
* bindings. Parent (`this`) is not mutated; the returned scope is a
|
|
75
|
+
* NEW object with `frames = [newFrame, ...this.frames]`.
|
|
76
|
+
*
|
|
77
|
+
* Binding semantics mirror `jsx-to-ir.ts`'s `ctx.loopParams` add site
|
|
78
|
+
* EXACTLY (verified against lines ~4320-4345 and the matching delete
|
|
79
|
+
* site ~4695-4710 of `packages/jsx/src/jsx-to-ir.ts`):
|
|
80
|
+
*
|
|
81
|
+
* - When `loop.paramBindings` is non-empty (a destructured callback
|
|
82
|
+
* param, e.g. `.map(({ id, name }) => ...)`), each `paramBindings[i].name`
|
|
83
|
+
* is bound with source `'destructure'` and the raw `param` text
|
|
84
|
+
* (which for a destructured callback holds the ORIGINAL pattern
|
|
85
|
+
* source, e.g. `"{ id, name }"`, not a usable identifier) is NOT
|
|
86
|
+
* bound. This matches `jsx-to-ir.ts`:
|
|
87
|
+
* `if (paramBindings) { for (const b of paramBindings) ctx.loopParams.add(b.name) }`
|
|
88
|
+
* — the `else` branch (`ctx.loopParams.add(param)`) is skipped
|
|
89
|
+
* entirely when `paramBindings` is present.
|
|
90
|
+
* - Otherwise (a plain identifier param, e.g. `.map(item => ...)`),
|
|
91
|
+
* `param` itself is bound with source `'item'`.
|
|
92
|
+
* - `index` (the second callback param, e.g. `.map((item, i) => ...)`)
|
|
93
|
+
* is bound with source `'index'` when non-null/non-undefined.
|
|
94
|
+
* - Every name in `preamble.declaredNames` (a `.map()` callback's
|
|
95
|
+
* pre-return `const`/`let`/`function` locals, #2447) is bound with
|
|
96
|
+
* source `'preamble'`.
|
|
97
|
+
*
|
|
98
|
+
* NOTE on a sibling mechanism this method does NOT mirror:
|
|
99
|
+
* `adapters/loop-bound-names.ts`'s `collectLoopBoundNames` adds BOTH
|
|
100
|
+
* `node.param` AND every `paramBindings[i].name` unconditionally
|
|
101
|
+
* (never skipping `param` in the destructured case) — a deliberately
|
|
102
|
+
* coarser, over-inclusive collection used only to subtract names from
|
|
103
|
+
* a flat string-typing Set (safe to over-exclude there). This method
|
|
104
|
+
* follows the precise `jsx-to-ir.ts` `ctx.loopParams` semantics, since
|
|
105
|
+
* that is the mechanism actually doing scope-shadowed name RESOLUTION
|
|
106
|
+
* (the behavior `BindingScope` replaces), not coarse exclusion.
|
|
107
|
+
*/
|
|
108
|
+
enterLoopRow(loop: LoopBindingSource): BindingScope;
|
|
109
|
+
/**
|
|
110
|
+
* Child scope with a new `'callback'` frame binding `params` (a filter
|
|
111
|
+
* predicate's `x`, a sort comparator's `(a, b)`, or a nested arrow's
|
|
112
|
+
* parameter list) with source `'param'`. Parent is not mutated.
|
|
113
|
+
*/
|
|
114
|
+
enterCallback(params: readonly string[]): BindingScope;
|
|
115
|
+
/** Innermost-first membership check across every frame in the stack. */
|
|
116
|
+
isBound(name: string): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Resolves `name` against the frame stack innermost-first. `depth 0`
|
|
119
|
+
* means the innermost (most recently entered) frame; `null` when `name`
|
|
120
|
+
* is not bound in any frame.
|
|
121
|
+
*/
|
|
122
|
+
lookup(name: string): {
|
|
123
|
+
readonly depth: number;
|
|
124
|
+
readonly frame: ScopeFrame;
|
|
125
|
+
readonly binding: ScopeBinding;
|
|
126
|
+
} | null;
|
|
127
|
+
/**
|
|
128
|
+
* Union of every frame's bound names (every `ScopeBindingSource`), for
|
|
129
|
+
* migration interop with legacy `Set<string>`-shaped consumers (e.g.
|
|
130
|
+
* `collectLoopBoundNames`'s return type) as later stages migrate them
|
|
131
|
+
* onto `BindingScope`.
|
|
132
|
+
*
|
|
133
|
+
* This is the SHADOW-GUARD query — see {@link valueBoundNames} for the
|
|
134
|
+
* other consumer class and why the two must not be conflated.
|
|
135
|
+
*/
|
|
136
|
+
boundNames(): ReadonlySet<string>;
|
|
137
|
+
private boundNamesCache;
|
|
138
|
+
private valueBoundNamesCache;
|
|
139
|
+
/**
|
|
140
|
+
* Union of names bound via `'item'`/`'index'`/`'destructure'` sources
|
|
141
|
+
* only — the loop row's own per-item identity — excluding `'preamble'`
|
|
142
|
+
* (a `.map()` callback's pre-return `const`/`let`/`function` locals,
|
|
143
|
+
* #2447) and `'param'` (an `enterCallback` frame's filter/sort/nested-
|
|
144
|
+
* arrow parameters).
|
|
145
|
+
*
|
|
146
|
+
* `BindingScope` has exactly two consumer classes, and conflating them
|
|
147
|
+
* is the #2482 Stage 1a Commit 2 regression this split exists to
|
|
148
|
+
* prevent (a `ctx.scope`-wide preamble merge flipped `tag-cloud` and
|
|
149
|
+
* `preamble-cells` conformance fixtures before this method existed):
|
|
150
|
+
*
|
|
151
|
+
* - SHADOW GUARDS (`tryResolveTemplateSpanFromConst`,
|
|
152
|
+
* `tryResolveIdentifierAsTemplateLiteral`, `rewriteBarePropRefs`
|
|
153
|
+
* in `jsx-to-ir.ts`) ask "is this name resolved to SOMETHING in
|
|
154
|
+
* this scope, so an outer const/prop of the same name must not be
|
|
155
|
+
* substituted here at this transform position" — every source
|
|
156
|
+
* qualifies, including a preamble local shadowing a module const.
|
|
157
|
+
* These call `isBound` / `boundNames()`.
|
|
158
|
+
* - REACTIVITY / SLOT-ID CLASSIFIERS (`referencesLoopParam`,
|
|
159
|
+
* `hasReactiveAttributes`, and the `BindingEnvironment.loopParams`
|
|
160
|
+
* feed built from `makeBindingEnv`, all in `jsx-to-ir.ts`) ask
|
|
161
|
+
* "does this expression read a value that changes per row and so
|
|
162
|
+
* needs its own patchable slot" — a preamble local already gets
|
|
163
|
+
* ITS OWN dedicated slot/region-patch machinery
|
|
164
|
+
* (`preambleRegions` / `markPreambleAttrSlots`, #2447), so folding
|
|
165
|
+
* it into this classification double-counts it. Worse: widening a
|
|
166
|
+
* text child's `reactive` flag this way is read by
|
|
167
|
+
* `hasDynamicContent` to decide whether the loop ROW's own root
|
|
168
|
+
* element needs a slot — an unrelated, narrower decision that must
|
|
169
|
+
* not move just because a preamble local is now scope-visible.
|
|
170
|
+
* These call `valueBoundNames()`.
|
|
171
|
+
*/
|
|
172
|
+
valueBoundNames(): ReadonlySet<string>;
|
|
173
|
+
/**
|
|
174
|
+
* Drop-in for `resolveStaticLoopSource`'s `opts.isNameShadowed`
|
|
175
|
+
* (`packages/jsx/src/static-literal.ts:112-128`).
|
|
176
|
+
*/
|
|
177
|
+
asShadowPredicate(): (name: string) => boolean;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=binding-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-scope.d.ts","sourceRoot":"","sources":["../../src/scope/binding-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,CAAA;AAExF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAA;IACtC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CACrD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7D,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;CACzE;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IAGH,OAAO,CAAC,QAAQ,CAAC,MAAM;IAF3C,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAuB;IAE1D,OAAO,eAA+D;IAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,YAAY,CAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CAYlD;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAKrD;IAED,wEAAwE;IACxE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK7B;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI,CAOlH;IAED;;;;;;;;OAQG;IACH,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,CAQhC;IAMD,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,oBAAoB,CAAiC;IAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,eAAe,IAAI,WAAW,CAAC,MAAM,CAAC,CAYrC;IAED;;;OAGG;IACH,iBAAiB,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAE7C;CACF"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1652,6 +1652,14 @@ export interface ConstantInfo {
|
|
|
1652
1652
|
parsed?: ParsedExpr;
|
|
1653
1653
|
/** Value with TypeScript type annotations preserved, for .tsx output */
|
|
1654
1654
|
typedValue?: string;
|
|
1655
|
+
/**
|
|
1656
|
+
* The declaration's explicit type annotation, verbatim from source
|
|
1657
|
+
* (`node.type.getText()`), when the author wrote one. Distinct from
|
|
1658
|
+
* `type`, which is also populated by inference from the initializer —
|
|
1659
|
+
* emitters must only print THIS field, never an inferred type, onto a
|
|
1660
|
+
* declaration (#2589).
|
|
1661
|
+
*/
|
|
1662
|
+
typeAnnotation?: string;
|
|
1655
1663
|
valueBranches?: string[];
|
|
1656
1664
|
declarationKind: 'const' | 'let';
|
|
1657
1665
|
isExported?: boolean;
|