@backtickjs/compiler 0.1.8 → 0.1.10

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.
@@ -0,0 +1,2 @@
1
+ import type ts from "typescript";
2
+ export declare function inTypePosition(ts: typeof import("typescript"), node: ts.Identifier): boolean;
@@ -0,0 +1,20 @@
1
+ // Whether a name stands in a type, which names types rather than values: all
2
+ // but what a `typeof` reads, and a class's `extends`.
3
+ export function inTypePosition(ts, node) {
4
+ for (let at = node; at.parent !== undefined; at = at.parent) {
5
+ const parent = at.parent;
6
+ if (ts.isTypeQueryNode(parent)) {
7
+ return false;
8
+ }
9
+ if (ts.isExpressionWithTypeArguments(parent) &&
10
+ ts.isHeritageClause(parent.parent) &&
11
+ ts.isClassLike(parent.parent.parent)) {
12
+ return false;
13
+ }
14
+ if (ts.isTypeNode(parent)) {
15
+ return true;
16
+ }
17
+ }
18
+ return false;
19
+ }
20
+ //# sourceMappingURL=inTypePosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inTypePosition.js","sourceRoot":"","sources":["../src/inTypePosition.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,sDAAsD;AACtD,MAAM,UAAU,cAAc,CAC5B,EAA+B,EAC/B,IAAmB;IAEnB,KAAK,IAAI,EAAE,GAAY,IAAI,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QACzB,IAAI,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IACE,EAAE,CAAC,6BAA6B,CAAC,MAAM,CAAC;YACxC,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACpC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -28,7 +28,7 @@ function renderScript(ts, sourceFile, rewrittenFile, script) {
28
28
  if (rewritten.leftAsWritten) {
29
29
  return ["cs.lift(undefined as never)"];
30
30
  }
31
- return virtualScript(ts, script, rewrittenFile.bindings, (splice) => renderSplice(ts, sourceFile, rewrittenFile, splice, mayAwait(ts, script.sourceNode)));
31
+ return virtualScript(ts, script, rewrittenFile, (splice) => renderSplice(ts, sourceFile, rewrittenFile, splice, mayAwait(ts, script.sourceNode)));
32
32
  }
33
33
  // A splice's host code, each nested script rendered as a script wherever it's
34
34
  // written. Where the host may await, an `await x` of its own is
@@ -1 +1 @@
1
- {"version":3,"file":"printVirtualCode.js","sourceRoot":"","sources":["../src/printVirtualCode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printVirtualCode.js","sourceRoot":"","sources":["../src/printVirtualCode.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import type ts from "typescript";
2
- import type { ClientScript } from "./parseFile.js";
2
+ import type { ClientScript, ParsedFile } from "./parseFile.js";
3
3
  /**
4
4
  * Every client script in a file, its scopes resolved by TypeScript's checker,
5
5
  * so any syntax TypeScript reads is resolved as the language does. It produces
6
- * two things:
6
+ * three things:
7
7
  *
8
8
  * - `bindings`: every *bound* variable identifier — a declaration, an arrow
9
9
  * parameter, or a reference that resolves to one of those — mapped to a
@@ -29,10 +29,18 @@ import type { ClientScript } from "./parseFile.js";
29
29
  * captured by something, somewhere: a binding no fragment ever wants is
30
30
  * dead weight in every thunk written for that hole.
31
31
  *
32
- * Scripts are checked as one text: each written `(() => …)`, a nested script
33
- * where its placeholder stands, as it lands at runtime. A reference is free
32
+ * - `hostReferences`: every script identifier that resolves to a host
33
+ * binding — a name the host file declares in scope around the script,
34
+ * imports and all, and no script does. The client has no such binding, so
35
+ * the virtual code reports the read: it has to be spliced. A name that
36
+ * resolves to nothing is the client's global, read as written.
37
+ *
38
+ * The file is checked as one text: the host code as written, each script
39
+ * `(() => …)` where its template stands, a nested script where it stands in
40
+ * its splice's host expression, as it lands at runtime. A reference is free
34
41
  * for the script it appears in exactly when the binding it resolves to was
35
- * declared in an *enclosing* script (or in none at all).
42
+ * declared in an *enclosing* script (or in none at all); it is the host's when
43
+ * no script declares it.
36
44
  *
37
45
  * Uniqueness of keys has two axes. A per-file counter distinguishes bindings
38
46
  * *within* a file; a hash of the file's text (see `hashText`) distinguishes
@@ -53,6 +61,7 @@ import type { ClientScript } from "./parseFile.js";
53
61
  export type BindingResolution = Map<ts.Identifier, string>;
54
62
  export interface ResolvedScopes {
55
63
  bindings: BindingResolution;
64
+ hostReferences: Set<ts.Identifier>;
56
65
  params: Map<ClientScript, ResolvedParam[]>;
57
66
  }
58
67
  /**
@@ -72,5 +81,5 @@ interface ResolvedCapture {
72
81
  kind: "capture";
73
82
  key: string;
74
83
  }
75
- export declare function resolveBindings(ts: typeof import("typescript"), scripts: ClientScript[], fileHash: string): ResolvedScopes;
84
+ export declare function resolveBindings(ts: typeof import("typescript"), { sourceFile, scripts }: ParsedFile, fileHash: string): ResolvedScopes;
76
85
  export {};
@@ -1,8 +1,14 @@
1
- export function resolveBindings(ts, scripts, fileHash) {
2
- const combined = combine(ts, scripts);
3
- const file = ts.createSourceFile("scripts.tsx", combined.text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
1
+ import { inTypePosition } from "./inTypePosition.js";
2
+ export function resolveBindings(ts, { sourceFile, scripts }, fileHash) {
3
+ const combined = combine(ts, sourceFile, scripts);
4
+ const file = ts.createSourceFile(sourceFile.fileName, combined.text, ts.ScriptTarget.Latest, true);
4
5
  const checker = checkerOf(ts, file);
5
6
  const binding = ts.SymbolFlags.Variable | ts.SymbolFlags.Function | ts.SymbolFlags.Class;
7
+ // what the host declares by a name: the above, an enum, a namespace, an import
8
+ const hostBinding = binding |
9
+ ts.SymbolFlags.Enum |
10
+ ts.SymbolFlags.Module |
11
+ ts.SymbolFlags.Alias;
6
12
  const scriptAt = (position) => combined.pieces.find((piece) => position >= piece.start && position < piece.start + piece.length)?.script;
7
13
  const own = new Map();
8
14
  // The script's own identifier written at a combined position.
@@ -48,39 +54,47 @@ export function resolveBindings(ts, scripts, fileHash) {
48
54
  }
49
55
  return key;
50
56
  };
51
- // The binding a name resolves to, where the scripts declare it.
52
- const declarationOf = (identifier) => {
57
+ // What a name resolves to, and where it is declared.
58
+ const resolve = (identifier) => {
53
59
  const symbol = ts.isShorthandPropertyAssignment(identifier.parent) &&
54
60
  identifier.parent.name === identifier
55
61
  ? checker.getShorthandAssignmentValueSymbol(identifier.parent)
56
62
  : checker.getSymbolAtLocation(identifier);
57
- return symbol !== undefined && symbol.flags & binding
58
- ? symbol.declarations?.find((declaration) => declaration.getSourceFile() === file)
63
+ const declaration = symbol?.declarations?.find((declaration) => declaration.getSourceFile() === file);
64
+ return symbol !== undefined && declaration !== undefined
65
+ ? { symbol, declaration }
59
66
  : undefined;
60
67
  };
61
68
  // Every binding some nested script captures, whatever hole it was written at.
62
69
  const escaped = new Set();
70
+ const hostReferences = new Set();
63
71
  const visit = (node) => {
64
- // A type's names are never runtime bindings, but for a `typeof` and a
65
- // class's `extends`, which read values.
66
- if (ts.isTypeNode(node) &&
67
- !ts.isTypeQueryNode(node) &&
68
- !(ts.isExpressionWithTypeArguments(node) &&
69
- ts.isHeritageClause(node.parent) &&
70
- ts.isClassLike(node.parent.parent))) {
71
- return;
72
- }
73
- if (ts.isIdentifier(node)) {
72
+ // A type's names are never runtime bindings, but for a `typeof`, however
73
+ // deep in a type, and a class's `extends`, which read values.
74
+ if (ts.isIdentifier(node) && !inTypePosition(ts, node)) {
74
75
  const script = scriptAt(node.getStart(file));
75
- const declaration = declarationOf(node);
76
76
  if (script === undefined) {
77
77
  return;
78
78
  }
79
- if (declaration === undefined) {
79
+ const resolved = resolve(node);
80
+ if (resolved === undefined) {
80
81
  return;
81
82
  }
82
- const key = keyOf(declaration);
83
+ const { symbol, declaration } = resolved;
83
84
  const identifier = identifierAt(node.getStart(file));
85
+ if (scriptAt(declaration.getStart(file)) === undefined) {
86
+ // The host's, unless a `declare global` declares it: that is a global.
87
+ if ((symbol.flags & hostBinding) !== 0 &&
88
+ !inGlobalAugmentation(ts, declaration) &&
89
+ identifier !== undefined) {
90
+ hostReferences.add(identifier);
91
+ }
92
+ return;
93
+ }
94
+ if ((symbol.flags & binding) === 0) {
95
+ return;
96
+ }
97
+ const key = keyOf(declaration);
84
98
  if (identifier !== undefined) {
85
99
  bindings.set(identifier, key);
86
100
  }
@@ -132,59 +146,74 @@ export function resolveBindings(ts, scripts, fileHash) {
132
146
  }
133
147
  params.set(script, [...splices, ...captures.values()]);
134
148
  }
135
- return { bindings, params };
149
+ return { bindings, hostReferences, params };
136
150
  }
137
- // The scripts as one text, each `(() => text)`, a nested script written where
138
- // its placeholder stands.
139
- function combine(ts, scripts) {
151
+ // The file as one text: the host code as written, each script `(() => text)`
152
+ // where its template stands, a braced splice's host expression where its
153
+ // placeholder stands, parenthesized, with the scripts nested in it written the
154
+ // same way.
155
+ function combine(ts, sourceFile, scripts) {
140
156
  const combined = {
141
157
  text: "",
142
158
  pieces: [],
143
159
  parents: new Map(),
144
160
  positions: new Map(),
145
161
  };
162
+ // Host text up to an offset, from where the last host text ended.
163
+ let at = 0;
164
+ const host = (to) => {
165
+ combined.text += sourceFile.text.slice(at, to);
166
+ at = to;
167
+ };
146
168
  const emit = (script, parent) => {
147
169
  combined.parents.set(script, parent);
148
170
  const identifiers = identifiersOf(ts, script.fileWithPlaceholders);
149
- const holes = [...identifiers.values()].filter((identifier) => {
150
- const splice = script.splices[identifier.text];
151
- return splice?.kind === "braced" && splice.scripts.length > 0;
152
- });
171
+ const holes = [...identifiers.values()].filter((identifier) => script.splices[identifier.text]?.kind === "braced");
153
172
  combined.text += "(() => ";
154
- let at = 0;
173
+ let cursor = 0;
155
174
  const copy = (to) => {
156
175
  const start = combined.text.length;
157
- combined.pieces.push({ start, length: to - at, script, from: at });
176
+ combined.pieces.push({
177
+ start,
178
+ length: to - cursor,
179
+ script,
180
+ from: cursor,
181
+ });
158
182
  for (const [offset, identifier] of identifiers) {
159
- if (offset >= at && offset < to) {
160
- combined.positions.set(identifier, start + offset - at);
183
+ if (offset >= cursor && offset < to) {
184
+ combined.positions.set(identifier, start + offset - cursor);
161
185
  }
162
186
  }
163
- combined.text += script.textWithPlaceholders.slice(at, to);
164
- at = to;
187
+ combined.text += script.textWithPlaceholders.slice(cursor, to);
188
+ cursor = to;
165
189
  };
166
190
  for (const hole of holes) {
167
191
  copy(hole.getStart(script.fileWithPlaceholders));
168
192
  combined.positions.set(hole, combined.text.length);
169
193
  const splice = script.splices[hole.text];
170
- combined.text += "[";
171
- splice.scripts.forEach((nested, index) => {
172
- combined.text += index === 0 ? "" : ", ";
194
+ combined.text += "(";
195
+ at = splice.expression.getStart(sourceFile);
196
+ for (const nested of splice.scripts) {
197
+ host(nested.sourceNode.getStart(sourceFile));
173
198
  emit(nested, script);
174
- });
175
- combined.text += "]";
176
- at = hole.getEnd();
199
+ at = nested.sourceNode.getEnd();
200
+ }
201
+ host(splice.expression.getEnd());
202
+ combined.text += ")";
203
+ cursor = hole.getEnd();
177
204
  }
178
205
  copy(script.textWithPlaceholders.length);
179
206
  combined.text += ")";
180
207
  };
181
208
  for (const script of scripts) {
209
+ host(script.sourceNode.getStart(sourceFile));
182
210
  emit(script);
183
- combined.text += ";\n";
211
+ at = script.sourceNode.getEnd();
184
212
  }
213
+ host(sourceFile.text.length);
185
214
  return combined;
186
215
  }
187
- // A checker over the one file: no libraries, as only the scripts' own
216
+ // A checker over the one file: no libraries, as only the file's own
188
217
  // bindings are asked about.
189
218
  function checkerOf(ts, file) {
190
219
  const host = {
@@ -202,6 +231,15 @@ function checkerOf(ts, file) {
202
231
  .createProgram([file.fileName], { noLib: true, noResolve: true, types: [], jsx: ts.JsxEmit.Preserve }, host)
203
232
  .getTypeChecker();
204
233
  }
234
+ function inGlobalAugmentation(ts, declaration) {
235
+ for (let node = declaration; node; node = node.parent) {
236
+ if (ts.isModuleDeclaration(node) &&
237
+ (node.flags & ts.NodeFlags.GlobalAugmentation) !== 0) {
238
+ return true;
239
+ }
240
+ }
241
+ return false;
242
+ }
205
243
  // A script's own identifiers, by where they start in its placeholder text.
206
244
  function identifiersOf(ts, file) {
207
245
  const identifiers = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"resolveBindings.js","sourceRoot":"","sources":["../src/resolveBindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveBindings.js","sourceRoot":"","sources":["../src/resolveBindings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAwHrD,MAAM,UAAU,eAAe,CAC7B,EAA+B,EAC/B,EAAE,UAAU,EAAE,OAAO,EAAc,EACnC,QAAgB;IAEhB,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAC9B,UAAU,CAAC,QAAQ,EACnB,QAAQ,CAAC,IAAI,EACb,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,CACL,CAAC;IACF,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GACX,EAAE,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAC3E,+EAA+E;IAC/E,MAAM,WAAW,GACf,OAAO;QACP,EAAE,CAAC,WAAW,CAAC,IAAI;QACnB,EAAE,CAAC,WAAW,CAAC,MAAM;QACrB,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAEvB,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAA4B,EAAE,CAC9D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAClB,CAAC,KAAK,EAAE,EAAE,CACR,QAAQ,IAAI,KAAK,CAAC,KAAK,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CACnE,EAAE,MAAM,CAAC;IACZ,MAAM,GAAG,GAAG,IAAI,GAAG,EAA4C,CAAC;IAChE,8DAA8D;IAC9D,MAAM,YAAY,GAAG,CAAC,QAAgB,EAA6B,EAAE;QACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CACxE,CAAC;QACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,WAAW,GAAG,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACnE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC3D,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE;YACvB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7D,IAAI,EAAE,QAAQ;gBACd,GAAG;gBACH,QAAQ,EAAE,EAAE;gBACZ,IAAI;aACL,CAAC,CAAC;YACH,QAAQ,EAAE,IAAI,GAAG,EAAE;SACpB,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,QAAQ,GAAsB,IAAI,GAAG,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAA0B,CAAC;IACrD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,WAA2B,EAAU,EAAE;QACpD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAClD,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,IAAI,IAAI,EAAE,EAAE,CAAC;YACjF,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC;YACtD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,qDAAqD;IACrD,MAAM,OAAO,GAAG,CACd,UAAyB,EACuC,EAAE;QAClE,MAAM,MAAM,GACV,EAAE,CAAC,6BAA6B,CAAC,UAAU,CAAC,MAAM,CAAC;YACnD,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;YACnC,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,UAAU,CAAC,MAAM,CAAC;YAC9D,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,EAAE,YAAY,EAAE,IAAI,CAC5C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,IAAI,CACtD,CAAC;QACF,OAAO,MAAM,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS;YACtD,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;YACzB,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC,CAAC;IAEF,8EAA8E;IAC9E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEhD,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,yEAAyE;QACzE,8DAA8D;QAC9D,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;YACzC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,IAAI,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvD,uEAAuE;gBACvE,IACE,CAAC,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;oBAClC,CAAC,oBAAoB,CAAC,EAAE,EAAE,WAAW,CAAC;oBACtC,UAAU,KAAK,SAAS,EACxB,CAAC;oBACD,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAChC,CAAC;YACD,uEAAuE;YACvE,0DAA0D;YAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,KACE,IAAI,MAAM,GAA6B,MAAM,EAC7C,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EACvC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EACrC,CAAC;gBACD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,QAAQ,CAAC;gBACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,CAAC;IAEZ,2EAA2E;IAC3E,uEAAuE;IACvE,oDAAoD;IACpD,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QACjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACxC,MAAM,CAAC,QAAQ,GAAG,OAAO;qBACtB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC;qBACpC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAClB,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,EAAE,IAAI,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CACxC,CAAC;oBACF,IACE,WAAW,KAAK,SAAS;wBACzB,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,QAAQ,EAC7C,CAAC;wBACD,OAAO,EAAE,CAAC;oBACZ,CAAC;oBACD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChD,CAAC,CAAC;qBACD,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,UAAU,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACpC,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;IACxD,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;QAC3D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,sEAAsE;YACtE,+CAA+C;YAC/C,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAC9C,CAAC;AAED,6EAA6E;AAC7E,yEAAyE;AACzE,+EAA+E;AAC/E,YAAY;AACZ,SAAS,OAAO,CACd,EAA+B,EAC/B,UAAyB,EACzB,OAAuB;IAEvB,MAAM,QAAQ,GAAa;QACzB,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,SAAS,EAAE,IAAI,GAAG,EAAE;KACrB,CAAC;IACF,kEAAkE;IAClE,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,MAAM,IAAI,GAAG,CAAC,EAAU,EAAQ,EAAE;QAChC,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,EAAE,GAAG,EAAE,CAAC;IACV,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,MAAoB,EAAE,MAAqB,EAAQ,EAAE;QACjE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC5C,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,QAAQ,CACnE,CAAC;QACF,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC;QAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,IAAI,GAAG,CAAC,EAAU,EAAQ,EAAE;YAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;gBACnB,KAAK;gBACL,MAAM,EAAE,EAAE,GAAG,MAAM;gBACnB,MAAM;gBACN,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YACH,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC/C,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;oBACpC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,GAAG,EAAE,CAAC;QACd,CAAC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACjD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC;YACrB,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC5C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrB,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAClC,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACjC,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC;YACrB,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC;IACvB,CAAC,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,CAAC;QACb,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,oEAAoE;AACpE,4BAA4B;AAC5B,SAAS,SAAS,CAChB,EAA+B,EAC/B,IAAmB;IAEnB,MAAM,IAAI,GAAoB;QAC5B,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,qBAAqB,EAAE,GAAG,EAAE,CAAC,UAAU;QACvC,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;QACnB,mBAAmB,EAAE,GAAG,EAAE,CAAC,GAAG;QAC9B,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;QACpC,yBAAyB,EAAE,GAAG,EAAE,CAAC,IAAI;QACrC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI;QACtB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;QAC5C,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;KAC1B,CAAC;IACF,OAAO,EAAE;SACN,aAAa,CACZ,CAAC,IAAI,CAAC,QAAQ,CAAC,EACf,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EACrE,IAAI,CACL;SACA,cAAc,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,oBAAoB,CAC3B,EAA+B,EAC/B,WAA2B;IAE3B,KAAK,IAAI,IAAI,GAAwB,WAAW,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3E,IACE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC5B,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,EACpD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,SAAS,aAAa,CACpB,EAA+B,EAC/B,IAAmB;IAEnB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IACrD,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,6CAA6C;AAC7C,SAAS,MAAM,CAAC,IAAmB,EAAE,QAAgB;IACnD,IAAI,KAAK,GAAY,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAChE,KAAK,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,gFAAgF;AAChF,SAAS,QAAQ,CACf,EAA+B,EAC/B,WAA2B;IAE3B,IAAI,EAAE,GAAY,WAAW,CAAC;IAC9B,OACE,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvB,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAC5B,CAAC;QACD,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -7,6 +7,7 @@ export interface RewrittenFile {
7
7
  sourceFile: ts.SourceFile;
8
8
  scripts: Map<ts.TaggedTemplateExpression, RewrittenScript>;
9
9
  bindings: BindingResolution;
10
+ hostReferences: Set<ts.Identifier>;
10
11
  diagnostics: Diagnostic[];
11
12
  }
12
13
  export declare function rewriteFile(ts: typeof import("typescript"), parsedFile: ParsedFile): RewrittenFile;
@@ -10,13 +10,13 @@ export function rewriteFile(ts, parsedFile) {
10
10
  // One hash per file, shared by binding keys and script locations: both need
11
11
  // to distinguish this file from a same-named file in another codebase.
12
12
  const fileHash = hashText(sourceFile.text);
13
- const { bindings, params } = resolveBindings(ts, parsedFile.scripts, fileHash);
13
+ const { bindings, hostReferences, params } = resolveBindings(ts, parsedFile, fileHash);
14
14
  for (const script of flattenScripts(parsedFile.scripts)) {
15
15
  const rewritten = rewriteScript(ts, script, fileHash, bindings, params.get(script));
16
16
  scripts.set(script.sourceNode, rewritten);
17
17
  diagnostics.push(...rewritten.diagnostics);
18
18
  }
19
19
  diagnostics.push(...hostElementDiagnostics(ts, sourceFile));
20
- return { sourceFile, scripts, bindings, diagnostics };
20
+ return { sourceFile, scripts, bindings, hostReferences, diagnostics };
21
21
  }
22
22
  //# sourceMappingURL=rewriteFile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rewriteFile.js","sourceRoot":"","sources":["../src/rewriteFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAA0B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAwB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUzE,MAAM,UAAU,WAAW,CACzB,EAA+B,EAC/B,UAAsB;IAEtB,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgD,CAAC;IACxE,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,eAAe,CAC1C,EAAE,EACF,UAAU,CAAC,OAAO,EAClB,QAAQ,CACT,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,aAAa,CAC7B,EAAE,EACF,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAE5D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"rewriteFile.js","sourceRoot":"","sources":["../src/rewriteFile.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAA0B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAwB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYzE,MAAM,UAAU,WAAW,CACzB,EAA+B,EAC/B,UAAsB;IAEtB,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgD,CAAC;IACxE,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,eAAe,CAC1D,EAAE,EACF,UAAU,EACV,QAAQ,CACT,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,aAAa,CAC7B,EAAE,EACF,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAE5D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AACxE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { ClientScript, Splice } from "./parseFile.js";
2
- import type { BindingResolution } from "./resolveBindings.js";
2
+ import type { RewrittenFile } from "./rewriteFile.js";
3
3
  import type { Segment } from "./segmentsToString.js";
4
4
  /**
5
5
  * A script as the typechecker reads it: its own text, as written, wrapped as
@@ -8,7 +8,14 @@ import type { Segment } from "./segmentsToString.js";
8
8
  *
9
9
  * - its own binding, renamed (`x` to `__cs_x`), so it can't hide a host binding
10
10
  * a splice names; a shorthand keeps its property name (`x: __cs_x`)
11
- * - a name nothing declares, read as the client's global (`cs.globalThis.x`)
11
+ * - a host binding, renamed the same way, as a HACK: `__cs_x` is declared
12
+ * nowhere, so TypeScript reports "Cannot find name '__cs_x'" where it is
13
+ * read, which `unmangle` turns into "Cannot find name 'x'": true of the
14
+ * client, and the nearest TypeScript gets to "splice it". Nothing says that
15
+ * the name is right there in the host, or that `$x` is the fix.
16
+ * - a name nothing declares, the client's global: written as it is. A global
17
+ * declared with `const` or `let`, as React Native's `__DEV__` is, is no
18
+ * property of `typeof globalThis`, so only its bare name reads it.
12
19
  * - a splice, as the host value the client is handed: `$x` as
13
20
  * `cs.splice((x))`, `${…}` as `cs.splice(…)` around the host code
14
21
  * - a splice written as a tag, `<$Card>`, as JSX on a name the host value is
@@ -19,4 +26,4 @@ import type { Segment } from "./segmentsToString.js";
19
26
  * piece maps back to the text it came from; what the wrapper adds maps to no
20
27
  * editor feature.
21
28
  */
22
- export declare function virtualScript(ts: typeof import("typescript"), script: ClientScript, bindings: BindingResolution, renderSplice: (splice: Splice) => Segment[]): Segment[];
29
+ export declare function virtualScript(ts: typeof import("typescript"), script: ClientScript, { bindings, hostReferences }: RewrittenFile, renderSplice: (splice: Splice) => Segment[]): Segment[];
@@ -1,3 +1,4 @@
1
+ import { inTypePosition } from "./inTypePosition.js";
1
2
  import { tagRoot } from "./tagRoot.js";
2
3
  import { mangle } from "./unmangle.js";
3
4
  // What the editor reads through a wrapper the virtual code adds: nothing.
@@ -18,7 +19,14 @@ const TAG_NAME = {
18
19
  *
19
20
  * - its own binding, renamed (`x` to `__cs_x`), so it can't hide a host binding
20
21
  * a splice names; a shorthand keeps its property name (`x: __cs_x`)
21
- * - a name nothing declares, read as the client's global (`cs.globalThis.x`)
22
+ * - a host binding, renamed the same way, as a HACK: `__cs_x` is declared
23
+ * nowhere, so TypeScript reports "Cannot find name '__cs_x'" where it is
24
+ * read, which `unmangle` turns into "Cannot find name 'x'": true of the
25
+ * client, and the nearest TypeScript gets to "splice it". Nothing says that
26
+ * the name is right there in the host, or that `$x` is the fix.
27
+ * - a name nothing declares, the client's global: written as it is. A global
28
+ * declared with `const` or `let`, as React Native's `__DEV__` is, is no
29
+ * property of `typeof globalThis`, so only its bare name reads it.
22
30
  * - a splice, as the host value the client is handed: `$x` as
23
31
  * `cs.splice((x))`, `${…}` as `cs.splice(…)` around the host code
24
32
  * - a splice written as a tag, `<$Card>`, as JSX on a name the host value is
@@ -29,7 +37,7 @@ const TAG_NAME = {
29
37
  * piece maps back to the text it came from; what the wrapper adds maps to no
30
38
  * editor feature.
31
39
  */
32
- export function virtualScript(ts, script, bindings, renderSplice) {
40
+ export function virtualScript(ts, script, { bindings, hostReferences }, renderSplice) {
33
41
  const file = script.fileWithPlaceholders;
34
42
  const text = script.textWithPlaceholders;
35
43
  const out = [];
@@ -113,7 +121,8 @@ export function virtualScript(ts, script, bindings, renderSplice) {
113
121
  parent.propertyName === undefined &&
114
122
  parent.dotDotDotToken === undefined &&
115
123
  ts.isObjectBindingPattern(parent.parent));
116
- if (bindings.has(node)) {
124
+ // A host reference is renamed like a binding on purpose: see the HACK above.
125
+ if (bindings.has(node) || hostReferences.has(node)) {
117
126
  if (shorthand) {
118
127
  mapped(node.text, node);
119
128
  added(": ");
@@ -121,15 +130,6 @@ export function virtualScript(ts, script, bindings, renderSplice) {
121
130
  mapped(mangle(node.text), node);
122
131
  return;
123
132
  }
124
- if (node.text !== "undefined" && isReference(ts, node)) {
125
- if (shorthand) {
126
- mapped(node.text, node);
127
- added(": ");
128
- }
129
- added("cs.globalThis.");
130
- mapped(node.text, node);
131
- return;
132
- }
133
133
  verbatim(node.getStart(file), node.getEnd());
134
134
  };
135
135
  // A tag that splices a host value, `<$Card>`, which the client is handed
@@ -232,69 +232,4 @@ export function virtualScript(ts, script, bindings, renderSplice) {
232
232
  out.push([")())", undefined, closed, 1, WRAPPER]);
233
233
  return out;
234
234
  }
235
- // Whether a name is read as a value where it stands, rather than naming a
236
- // property, an attribute, a label or what a declaration declares.
237
- function isReference(ts, node) {
238
- const parent = node.parent;
239
- if ((ts.isPropertyAccessExpression(parent) ||
240
- ts.isPropertyAssignment(parent) ||
241
- ts.isMethodDeclaration(parent) ||
242
- ts.isPropertyDeclaration(parent) ||
243
- ts.isGetAccessorDeclaration(parent) ||
244
- ts.isSetAccessorDeclaration(parent) ||
245
- ts.isPropertySignature(parent) ||
246
- ts.isMethodSignature(parent) ||
247
- ts.isEnumMember(parent) ||
248
- ts.isJsxAttribute(parent) ||
249
- ts.isVariableDeclaration(parent) ||
250
- ts.isParameter(parent) ||
251
- ts.isFunctionDeclaration(parent) ||
252
- ts.isFunctionExpression(parent) ||
253
- ts.isClassDeclaration(parent) ||
254
- ts.isClassExpression(parent) ||
255
- ts.isTypeAliasDeclaration(parent) ||
256
- ts.isInterfaceDeclaration(parent) ||
257
- ts.isEnumDeclaration(parent) ||
258
- ts.isTypeParameterDeclaration(parent)) &&
259
- parent.name === node) {
260
- return false;
261
- }
262
- if (ts.isBindingElement(parent)) {
263
- return false; // its name declares, its property name names a property
264
- }
265
- if ((ts.isLabeledStatement(parent) ||
266
- ts.isBreakStatement(parent) ||
267
- ts.isContinueStatement(parent)) &&
268
- parent.label === node) {
269
- return false;
270
- }
271
- if ((ts.isJsxOpeningElement(parent) ||
272
- ts.isJsxSelfClosingElement(parent) ||
273
- ts.isJsxClosingElement(parent)) &&
274
- parent.tagName === node) {
275
- return false; // an intrinsic element's name, or a host tag's (above)
276
- }
277
- return !(ts.isQualifiedName(parent) ||
278
- ts.isMetaProperty(parent) ||
279
- ts.isJsxNamespacedName(parent));
280
- }
281
- // Whether a name stands in a type, which names types rather than values: all
282
- // but what a `typeof` reads, and a class's `extends`.
283
- function inTypePosition(ts, node) {
284
- for (let at = node; at.parent !== undefined; at = at.parent) {
285
- const parent = at.parent;
286
- if (ts.isTypeQueryNode(parent)) {
287
- return false;
288
- }
289
- if (ts.isExpressionWithTypeArguments(parent) &&
290
- ts.isHeritageClause(parent.parent) &&
291
- ts.isClassLike(parent.parent.parent)) {
292
- return false;
293
- }
294
- if (ts.isTypeNode(parent)) {
295
- return true;
296
- }
297
- }
298
- return false;
299
- }
300
235
  //# sourceMappingURL=virtualScript.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtualScript.js","sourceRoot":"","sources":["../src/virtualScript.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,0EAA0E;AAC1E,MAAM,OAAO,GAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACxE,wEAAwE;AACxE,0EAA0E;AAC1E,gCAAgC;AAChC,MAAM,QAAQ,GAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACzE,+EAA+E;AAC/E,+BAA+B;AAC/B,MAAM,QAAQ,GAAoB;IAChC,QAAQ,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;CAC3C,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAC3B,EAA+B,EAC/B,MAAoB,EACpB,QAA2B,EAC3B,YAA2C;IAE3C,MAAM,IAAI,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACzC,MAAM,GAAG,GAAc,EAAE,CAAC;IAE1B,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAU,EAAQ,EAAE;QAClD,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,SAAS;gBACT,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC3B,EAAE,GAAG,IAAI;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CACb,OAAe,EACf,IAAa,EACb,IAAsB,EAChB,EAAE;QACR,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CACN,IAAI,KAAK,SAAS;YAChB,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC;YAC1C,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC,CACnD,CAAC;IACJ,CAAC,CAAC;IACF,2EAA2E;IAC3E,MAAM,KAAK,GAAG,CAAC,OAAe,EAAE,EAAW,EAAE,IAAI,GAAG,OAAO,EAAQ,EAAE;QACnE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAQ,EAAE;QAC/D,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IACE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAC3D,SAAS,CAAC,IAAI,CAAC,EACf,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,EAAE,GAAG,IAAI,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,CAAC;YACZ,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;QACD,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,CAAC,IAAmB,EAAsB,EAAE,CAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7E,MAAM,UAAU,GAAG,CAAC,IAAmB,EAAQ,EAAE;QAC/C,IAAI,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,sEAAsE;YACtE,yEAAyE;YACzE,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpE,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,mEAAmE;gBACnE,4DAA4D;gBAC5D,8DAA8D;gBAC9D,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC5C,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,SAAS,GACb,CAAC,EAAE,CAAC,6BAA6B,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;YAClE,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC1B,MAAM,CAAC,IAAI,KAAK,IAAI;gBACpB,MAAM,CAAC,YAAY,KAAK,SAAS;gBACjC,MAAM,CAAC,cAAc,KAAK,SAAS;gBACnC,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACvD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;YACD,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,yEAAyE;IACzE,kBAAkB;IAClB,MAAM,SAAS,GAAG,CAChB,IAA8C,EACrC,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAClB,EAAE,EACF,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CACnE,CAAC;QACF,OAAO,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IAC5D,CAAC,CAAC;IAEF,yEAAyE;IACzE,iFAAiF;IACjF,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,sDAAsD;IACtD,MAAM,OAAO,GAAG,CAAC,IAA8C,EAAQ,EAAE;QACvE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,2EAA2E;QAC3E,uDAAuD;QACvD,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,OAAO,CAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACvC,2EAA2E;QAC3E,MAAM,IAAI,GAAG,IAAK,QAAQ,CAAC,IAAI,CAAE,CAAC,UAA4B,CAAC,IAAI,GAAG,CAAC;QACvE,sEAAsE;QACtE,gDAAgD;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,MAAM,GACV,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;YACzB,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;YACvB,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAE;YAC3C,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QACD,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,wEAAwE;QACxE,2EAA2E;QAC3E,mCAAmC;QACnC,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACzE,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,CAAC;YAChB,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACZ,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC;YACD,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAQ,EAAE,QAAQ,CAAC,CAAC;YACtC,QAAQ,CAAC,OAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,KAAK,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QACD,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IAEF,0EAA0E;IAC1E,8EAA8E;IAC9E,sEAAsE;IACtE,cAAc;IACd,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,GAAG,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0EAA0E;AAC1E,kEAAkE;AAClE,SAAS,WAAW,CAClB,EAA+B,EAC/B,IAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IACE,CAAC,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC;QACpC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAC/B,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC9B,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAChC,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACnC,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACnC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC9B,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAC5B,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;QACvB,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;QACzB,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAChC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;QACtB,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAChC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAC/B,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAC7B,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAC5B,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC;QACjC,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC;QACjC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAC5B,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,KAAK,IAAI,EACpB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,CAAC,wDAAwD;IACxE,CAAC;IACD,IACE,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAC5B,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC3B,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,KAAK,IAAI,EACrB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IACE,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC7B,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAClC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,OAAO,KAAK,IAAI,EACvB,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,uDAAuD;IACvE,CAAC;IACD,OAAO,CAAC,CACN,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QAC1B,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;QACzB,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,sDAAsD;AACtD,SAAS,cAAc,CACrB,EAA+B,EAC/B,IAAmB;IAEnB,KAAK,IAAI,EAAE,GAAY,IAAI,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QACzB,IAAI,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IACE,EAAE,CAAC,6BAA6B,CAAC,MAAM,CAAC;YACxC,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACpC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"virtualScript.js","sourceRoot":"","sources":["../src/virtualScript.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backtickjs/compiler",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Internal: the compiler for Backtick client scripts, used by the build plugins, backtick-tsc and the editor tooling",
5
5
  "keywords": [
6
6
  "backtick",
@@ -46,9 +46,9 @@
46
46
  "@jridgewell/trace-mapping": "^0.3.31"
47
47
  },
48
48
  "devDependencies": {
49
+ "@backtickjs/core": "^0.1.10",
49
50
  "prettier": "^3.6.2",
50
- "typescript": "^6.0.3",
51
- "@backtickjs/core": "0.1.8"
51
+ "typescript": "^6.0.3"
52
52
  },
53
53
  "scripts": {
54
54
  "build": "tsc -b",
@@ -0,0 +1,26 @@
1
+ import type ts from "typescript";
2
+
3
+ // Whether a name stands in a type, which names types rather than values: all
4
+ // but what a `typeof` reads, and a class's `extends`.
5
+ export function inTypePosition(
6
+ ts: typeof import("typescript"),
7
+ node: ts.Identifier,
8
+ ): boolean {
9
+ for (let at: ts.Node = node; at.parent !== undefined; at = at.parent) {
10
+ const parent = at.parent;
11
+ if (ts.isTypeQueryNode(parent)) {
12
+ return false;
13
+ }
14
+ if (
15
+ ts.isExpressionWithTypeArguments(parent) &&
16
+ ts.isHeritageClause(parent.parent) &&
17
+ ts.isClassLike(parent.parent.parent)
18
+ ) {
19
+ return false;
20
+ }
21
+ if (ts.isTypeNode(parent)) {
22
+ return true;
23
+ }
24
+ }
25
+ return false;
26
+ }
@@ -51,7 +51,7 @@ function renderScript(
51
51
  if (rewritten.leftAsWritten) {
52
52
  return ["cs.lift(undefined as never)"];
53
53
  }
54
- return virtualScript(ts, script, rewrittenFile.bindings, (splice) =>
54
+ return virtualScript(ts, script, rewrittenFile, (splice) =>
55
55
  renderSplice(
56
56
  ts,
57
57
  sourceFile,
@@ -1,10 +1,11 @@
1
1
  import type ts from "typescript";
2
- import type { ClientScript } from "./parseFile.js";
2
+ import { inTypePosition } from "./inTypePosition.js";
3
+ import type { ClientScript, ParsedFile } from "./parseFile.js";
3
4
 
4
5
  /**
5
6
  * Every client script in a file, its scopes resolved by TypeScript's checker,
6
7
  * so any syntax TypeScript reads is resolved as the language does. It produces
7
- * two things:
8
+ * three things:
8
9
  *
9
10
  * - `bindings`: every *bound* variable identifier — a declaration, an arrow
10
11
  * parameter, or a reference that resolves to one of those — mapped to a
@@ -30,10 +31,18 @@ import type { ClientScript } from "./parseFile.js";
30
31
  * captured by something, somewhere: a binding no fragment ever wants is
31
32
  * dead weight in every thunk written for that hole.
32
33
  *
33
- * Scripts are checked as one text: each written `(() => …)`, a nested script
34
- * where its placeholder stands, as it lands at runtime. A reference is free
34
+ * - `hostReferences`: every script identifier that resolves to a host
35
+ * binding — a name the host file declares in scope around the script,
36
+ * imports and all, and no script does. The client has no such binding, so
37
+ * the virtual code reports the read: it has to be spliced. A name that
38
+ * resolves to nothing is the client's global, read as written.
39
+ *
40
+ * The file is checked as one text: the host code as written, each script
41
+ * `(() => …)` where its template stands, a nested script where it stands in
42
+ * its splice's host expression, as it lands at runtime. A reference is free
35
43
  * for the script it appears in exactly when the binding it resolves to was
36
- * declared in an *enclosing* script (or in none at all).
44
+ * declared in an *enclosing* script (or in none at all); it is the host's when
45
+ * no script declares it.
37
46
  *
38
47
  * Uniqueness of keys has two axes. A per-file counter distinguishes bindings
39
48
  * *within* a file; a hash of the file's text (see `hashText`) distinguishes
@@ -55,6 +64,8 @@ export type BindingResolution = Map<ts.Identifier, string>;
55
64
 
56
65
  export interface ResolvedScopes {
57
66
  bindings: BindingResolution;
67
+ // the scripts' identifiers that read a host binding
68
+ hostReferences: Set<ts.Identifier>;
58
69
  // `params.get(script)[i]` is the script's parameter `i` (`$splice<i>`,
59
70
  // `$capture<i>`): splices in the order the script first reads them, then
60
71
  // captures
@@ -110,20 +121,25 @@ interface Combined {
110
121
 
111
122
  export function resolveBindings(
112
123
  ts: typeof import("typescript"),
113
- scripts: ClientScript[],
124
+ { sourceFile, scripts }: ParsedFile,
114
125
  fileHash: string,
115
126
  ): ResolvedScopes {
116
- const combined = combine(ts, scripts);
127
+ const combined = combine(ts, sourceFile, scripts);
117
128
  const file = ts.createSourceFile(
118
- "scripts.tsx",
129
+ sourceFile.fileName,
119
130
  combined.text,
120
131
  ts.ScriptTarget.Latest,
121
132
  true,
122
- ts.ScriptKind.TSX,
123
133
  );
124
134
  const checker = checkerOf(ts, file);
125
135
  const binding =
126
136
  ts.SymbolFlags.Variable | ts.SymbolFlags.Function | ts.SymbolFlags.Class;
137
+ // what the host declares by a name: the above, an enum, a namespace, an import
138
+ const hostBinding =
139
+ binding |
140
+ ts.SymbolFlags.Enum |
141
+ ts.SymbolFlags.Module |
142
+ ts.SymbolFlags.Alias;
127
143
 
128
144
  const scriptAt = (position: number): ClientScript | undefined =>
129
145
  combined.pieces.find(
@@ -178,50 +194,56 @@ export function resolveBindings(
178
194
  }
179
195
  return key;
180
196
  };
181
- // The binding a name resolves to, where the scripts declare it.
182
- const declarationOf = (
197
+ // What a name resolves to, and where it is declared.
198
+ const resolve = (
183
199
  identifier: ts.Identifier,
184
- ): ts.Declaration | undefined => {
200
+ ): { symbol: ts.Symbol; declaration: ts.Declaration } | undefined => {
185
201
  const symbol =
186
202
  ts.isShorthandPropertyAssignment(identifier.parent) &&
187
203
  identifier.parent.name === identifier
188
204
  ? checker.getShorthandAssignmentValueSymbol(identifier.parent)
189
205
  : checker.getSymbolAtLocation(identifier);
190
- return symbol !== undefined && symbol.flags & binding
191
- ? symbol.declarations?.find(
192
- (declaration) => declaration.getSourceFile() === file,
193
- )
206
+ const declaration = symbol?.declarations?.find(
207
+ (declaration) => declaration.getSourceFile() === file,
208
+ );
209
+ return symbol !== undefined && declaration !== undefined
210
+ ? { symbol, declaration }
194
211
  : undefined;
195
212
  };
196
213
 
197
214
  // Every binding some nested script captures, whatever hole it was written at.
198
215
  const escaped = new Set<string>();
216
+ const hostReferences = new Set<ts.Identifier>();
199
217
 
200
218
  const visit = (node: ts.Node): void => {
201
- // A type's names are never runtime bindings, but for a `typeof` and a
202
- // class's `extends`, which read values.
203
- if (
204
- ts.isTypeNode(node) &&
205
- !ts.isTypeQueryNode(node) &&
206
- !(
207
- ts.isExpressionWithTypeArguments(node) &&
208
- ts.isHeritageClause(node.parent) &&
209
- ts.isClassLike(node.parent.parent)
210
- )
211
- ) {
212
- return;
213
- }
214
- if (ts.isIdentifier(node)) {
219
+ // A type's names are never runtime bindings, but for a `typeof`, however
220
+ // deep in a type, and a class's `extends`, which read values.
221
+ if (ts.isIdentifier(node) && !inTypePosition(ts, node)) {
215
222
  const script = scriptAt(node.getStart(file));
216
- const declaration = declarationOf(node);
217
223
  if (script === undefined) {
218
224
  return;
219
225
  }
220
- if (declaration === undefined) {
226
+ const resolved = resolve(node);
227
+ if (resolved === undefined) {
221
228
  return;
222
229
  }
223
- const key = keyOf(declaration);
230
+ const { symbol, declaration } = resolved;
224
231
  const identifier = identifierAt(node.getStart(file));
232
+ if (scriptAt(declaration.getStart(file)) === undefined) {
233
+ // The host's, unless a `declare global` declares it: that is a global.
234
+ if (
235
+ (symbol.flags & hostBinding) !== 0 &&
236
+ !inGlobalAugmentation(ts, declaration) &&
237
+ identifier !== undefined
238
+ ) {
239
+ hostReferences.add(identifier);
240
+ }
241
+ return;
242
+ }
243
+ if ((symbol.flags & binding) === 0) {
244
+ return;
245
+ }
246
+ const key = keyOf(declaration);
225
247
  if (identifier !== undefined) {
226
248
  bindings.set(identifier, key);
227
249
  }
@@ -287,13 +309,16 @@ export function resolveBindings(
287
309
  params.set(script, [...splices, ...captures.values()]);
288
310
  }
289
311
 
290
- return { bindings, params };
312
+ return { bindings, hostReferences, params };
291
313
  }
292
314
 
293
- // The scripts as one text, each `(() => text)`, a nested script written where
294
- // its placeholder stands.
315
+ // The file as one text: the host code as written, each script `(() => text)`
316
+ // where its template stands, a braced splice's host expression where its
317
+ // placeholder stands, parenthesized, with the scripts nested in it written the
318
+ // same way.
295
319
  function combine(
296
320
  ts: typeof import("typescript"),
321
+ sourceFile: ts.SourceFile,
297
322
  scripts: ClientScript[],
298
323
  ): Combined {
299
324
  const combined: Combined = {
@@ -302,49 +327,64 @@ function combine(
302
327
  parents: new Map(),
303
328
  positions: new Map(),
304
329
  };
330
+ // Host text up to an offset, from where the last host text ended.
331
+ let at = 0;
332
+ const host = (to: number): void => {
333
+ combined.text += sourceFile.text.slice(at, to);
334
+ at = to;
335
+ };
305
336
  const emit = (script: ClientScript, parent?: ClientScript): void => {
306
337
  combined.parents.set(script, parent);
307
338
  const identifiers = identifiersOf(ts, script.fileWithPlaceholders);
308
- const holes = [...identifiers.values()].filter((identifier) => {
309
- const splice = script.splices[identifier.text];
310
- return splice?.kind === "braced" && splice.scripts.length > 0;
311
- });
339
+ const holes = [...identifiers.values()].filter(
340
+ (identifier) => script.splices[identifier.text]?.kind === "braced",
341
+ );
312
342
  combined.text += "(() => ";
313
- let at = 0;
343
+ let cursor = 0;
314
344
  const copy = (to: number): void => {
315
345
  const start = combined.text.length;
316
- combined.pieces.push({ start, length: to - at, script, from: at });
346
+ combined.pieces.push({
347
+ start,
348
+ length: to - cursor,
349
+ script,
350
+ from: cursor,
351
+ });
317
352
  for (const [offset, identifier] of identifiers) {
318
- if (offset >= at && offset < to) {
319
- combined.positions.set(identifier, start + offset - at);
353
+ if (offset >= cursor && offset < to) {
354
+ combined.positions.set(identifier, start + offset - cursor);
320
355
  }
321
356
  }
322
- combined.text += script.textWithPlaceholders.slice(at, to);
323
- at = to;
357
+ combined.text += script.textWithPlaceholders.slice(cursor, to);
358
+ cursor = to;
324
359
  };
325
360
  for (const hole of holes) {
326
361
  copy(hole.getStart(script.fileWithPlaceholders));
327
362
  combined.positions.set(hole, combined.text.length);
328
363
  const splice = script.splices[hole.text]!;
329
- combined.text += "[";
330
- splice.scripts.forEach((nested, index) => {
331
- combined.text += index === 0 ? "" : ", ";
364
+ combined.text += "(";
365
+ at = splice.expression.getStart(sourceFile);
366
+ for (const nested of splice.scripts) {
367
+ host(nested.sourceNode.getStart(sourceFile));
332
368
  emit(nested, script);
333
- });
334
- combined.text += "]";
335
- at = hole.getEnd();
369
+ at = nested.sourceNode.getEnd();
370
+ }
371
+ host(splice.expression.getEnd());
372
+ combined.text += ")";
373
+ cursor = hole.getEnd();
336
374
  }
337
375
  copy(script.textWithPlaceholders.length);
338
376
  combined.text += ")";
339
377
  };
340
378
  for (const script of scripts) {
379
+ host(script.sourceNode.getStart(sourceFile));
341
380
  emit(script);
342
- combined.text += ";\n";
381
+ at = script.sourceNode.getEnd();
343
382
  }
383
+ host(sourceFile.text.length);
344
384
  return combined;
345
385
  }
346
386
 
347
- // A checker over the one file: no libraries, as only the scripts' own
387
+ // A checker over the one file: no libraries, as only the file's own
348
388
  // bindings are asked about.
349
389
  function checkerOf(
350
390
  ts: typeof import("typescript"),
@@ -370,6 +410,21 @@ function checkerOf(
370
410
  .getTypeChecker();
371
411
  }
372
412
 
413
+ function inGlobalAugmentation(
414
+ ts: typeof import("typescript"),
415
+ declaration: ts.Declaration,
416
+ ): boolean {
417
+ for (let node: ts.Node | undefined = declaration; node; node = node.parent) {
418
+ if (
419
+ ts.isModuleDeclaration(node) &&
420
+ (node.flags & ts.NodeFlags.GlobalAugmentation) !== 0
421
+ ) {
422
+ return true;
423
+ }
424
+ }
425
+ return false;
426
+ }
427
+
373
428
  // A script's own identifiers, by where they start in its placeholder text.
374
429
  function identifiersOf(
375
430
  ts: typeof import("typescript"),
@@ -12,6 +12,8 @@ export interface RewrittenFile {
12
12
  scripts: Map<ts.TaggedTemplateExpression, RewrittenScript>;
13
13
  // every script's own bindings, by identifier (see `resolveBindings`)
14
14
  bindings: BindingResolution;
15
+ // the scripts' identifiers that read a host binding (see `resolveBindings`)
16
+ hostReferences: Set<ts.Identifier>;
15
17
  diagnostics: Diagnostic[];
16
18
  }
17
19
 
@@ -28,9 +30,9 @@ export function rewriteFile(
28
30
  // to distinguish this file from a same-named file in another codebase.
29
31
  const fileHash = hashText(sourceFile.text);
30
32
 
31
- const { bindings, params } = resolveBindings(
33
+ const { bindings, hostReferences, params } = resolveBindings(
32
34
  ts,
33
- parsedFile.scripts,
35
+ parsedFile,
34
36
  fileHash,
35
37
  );
36
38
 
@@ -48,5 +50,5 @@ export function rewriteFile(
48
50
 
49
51
  diagnostics.push(...hostElementDiagnostics(ts, sourceFile));
50
52
 
51
- return { sourceFile, scripts, bindings, diagnostics };
53
+ return { sourceFile, scripts, bindings, hostReferences, diagnostics };
52
54
  }
@@ -1,8 +1,9 @@
1
1
  import type ts from "typescript";
2
2
  import type { CodeInformation } from "./CodeInformation.js";
3
3
  import type { ClientScript, Splice } from "./parseFile.js";
4
- import type { BindingResolution } from "./resolveBindings.js";
4
+ import type { RewrittenFile } from "./rewriteFile.js";
5
5
  import type { Segment } from "./segmentsToString.js";
6
+ import { inTypePosition } from "./inTypePosition.js";
6
7
  import { tagRoot } from "./tagRoot.js";
7
8
  import { mangle } from "./unmangle.js";
8
9
 
@@ -25,7 +26,14 @@ const TAG_NAME: CodeInformation = {
25
26
  *
26
27
  * - its own binding, renamed (`x` to `__cs_x`), so it can't hide a host binding
27
28
  * a splice names; a shorthand keeps its property name (`x: __cs_x`)
28
- * - a name nothing declares, read as the client's global (`cs.globalThis.x`)
29
+ * - a host binding, renamed the same way, as a HACK: `__cs_x` is declared
30
+ * nowhere, so TypeScript reports "Cannot find name '__cs_x'" where it is
31
+ * read, which `unmangle` turns into "Cannot find name 'x'": true of the
32
+ * client, and the nearest TypeScript gets to "splice it". Nothing says that
33
+ * the name is right there in the host, or that `$x` is the fix.
34
+ * - a name nothing declares, the client's global: written as it is. A global
35
+ * declared with `const` or `let`, as React Native's `__DEV__` is, is no
36
+ * property of `typeof globalThis`, so only its bare name reads it.
29
37
  * - a splice, as the host value the client is handed: `$x` as
30
38
  * `cs.splice((x))`, `${…}` as `cs.splice(…)` around the host code
31
39
  * - a splice written as a tag, `<$Card>`, as JSX on a name the host value is
@@ -39,7 +47,7 @@ const TAG_NAME: CodeInformation = {
39
47
  export function virtualScript(
40
48
  ts: typeof import("typescript"),
41
49
  script: ClientScript,
42
- bindings: BindingResolution,
50
+ { bindings, hostReferences }: RewrittenFile,
43
51
  renderSplice: (splice: Splice) => Segment[],
44
52
  ): Segment[] {
45
53
  const file = script.fileWithPlaceholders;
@@ -138,7 +146,8 @@ export function virtualScript(
138
146
  parent.propertyName === undefined &&
139
147
  parent.dotDotDotToken === undefined &&
140
148
  ts.isObjectBindingPattern(parent.parent));
141
- if (bindings.has(node)) {
149
+ // A host reference is renamed like a binding on purpose: see the HACK above.
150
+ if (bindings.has(node) || hostReferences.has(node)) {
142
151
  if (shorthand) {
143
152
  mapped(node.text, node);
144
153
  added(": ");
@@ -146,15 +155,6 @@ export function virtualScript(
146
155
  mapped(mangle(node.text), node);
147
156
  return;
148
157
  }
149
- if (node.text !== "undefined" && isReference(ts, node)) {
150
- if (shorthand) {
151
- mapped(node.text, node);
152
- added(": ");
153
- }
154
- added("cs.globalThis.");
155
- mapped(node.text, node);
156
- return;
157
- }
158
158
  verbatim(node.getStart(file), node.getEnd());
159
159
  };
160
160
 
@@ -264,86 +264,3 @@ export function virtualScript(
264
264
  out.push([")())", undefined, closed, 1, WRAPPER]);
265
265
  return out;
266
266
  }
267
-
268
- // Whether a name is read as a value where it stands, rather than naming a
269
- // property, an attribute, a label or what a declaration declares.
270
- function isReference(
271
- ts: typeof import("typescript"),
272
- node: ts.Identifier,
273
- ): boolean {
274
- const parent = node.parent;
275
- if (
276
- (ts.isPropertyAccessExpression(parent) ||
277
- ts.isPropertyAssignment(parent) ||
278
- ts.isMethodDeclaration(parent) ||
279
- ts.isPropertyDeclaration(parent) ||
280
- ts.isGetAccessorDeclaration(parent) ||
281
- ts.isSetAccessorDeclaration(parent) ||
282
- ts.isPropertySignature(parent) ||
283
- ts.isMethodSignature(parent) ||
284
- ts.isEnumMember(parent) ||
285
- ts.isJsxAttribute(parent) ||
286
- ts.isVariableDeclaration(parent) ||
287
- ts.isParameter(parent) ||
288
- ts.isFunctionDeclaration(parent) ||
289
- ts.isFunctionExpression(parent) ||
290
- ts.isClassDeclaration(parent) ||
291
- ts.isClassExpression(parent) ||
292
- ts.isTypeAliasDeclaration(parent) ||
293
- ts.isInterfaceDeclaration(parent) ||
294
- ts.isEnumDeclaration(parent) ||
295
- ts.isTypeParameterDeclaration(parent)) &&
296
- parent.name === node
297
- ) {
298
- return false;
299
- }
300
- if (ts.isBindingElement(parent)) {
301
- return false; // its name declares, its property name names a property
302
- }
303
- if (
304
- (ts.isLabeledStatement(parent) ||
305
- ts.isBreakStatement(parent) ||
306
- ts.isContinueStatement(parent)) &&
307
- parent.label === node
308
- ) {
309
- return false;
310
- }
311
- if (
312
- (ts.isJsxOpeningElement(parent) ||
313
- ts.isJsxSelfClosingElement(parent) ||
314
- ts.isJsxClosingElement(parent)) &&
315
- parent.tagName === node
316
- ) {
317
- return false; // an intrinsic element's name, or a host tag's (above)
318
- }
319
- return !(
320
- ts.isQualifiedName(parent) ||
321
- ts.isMetaProperty(parent) ||
322
- ts.isJsxNamespacedName(parent)
323
- );
324
- }
325
-
326
- // Whether a name stands in a type, which names types rather than values: all
327
- // but what a `typeof` reads, and a class's `extends`.
328
- function inTypePosition(
329
- ts: typeof import("typescript"),
330
- node: ts.Identifier,
331
- ): boolean {
332
- for (let at: ts.Node = node; at.parent !== undefined; at = at.parent) {
333
- const parent = at.parent;
334
- if (ts.isTypeQueryNode(parent)) {
335
- return false;
336
- }
337
- if (
338
- ts.isExpressionWithTypeArguments(parent) &&
339
- ts.isHeritageClause(parent.parent) &&
340
- ts.isClassLike(parent.parent.parent)
341
- ) {
342
- return false;
343
- }
344
- if (ts.isTypeNode(parent)) {
345
- return true;
346
- }
347
- }
348
- return false;
349
- }