@backtickjs/compiler 0.1.9 → 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.
- package/dist/printVirtualCode.js +1 -1
- package/dist/printVirtualCode.js.map +1 -1
- package/dist/resolveBindings.d.ts +15 -6
- package/dist/resolveBindings.js +76 -32
- package/dist/resolveBindings.js.map +1 -1
- package/dist/rewriteFile.d.ts +1 -0
- package/dist/rewriteFile.js +2 -2
- package/dist/rewriteFile.js.map +1 -1
- package/dist/virtualScript.d.ts +10 -3
- package/dist/virtualScript.js +11 -58
- package/dist/virtualScript.js.map +1 -1
- package/package.json +2 -2
- package/src/printVirtualCode.ts +1 -1
- package/src/resolveBindings.ts +105 -40
- package/src/rewriteFile.ts +5 -3
- package/src/virtualScript.ts +12 -71
package/dist/printVirtualCode.js
CHANGED
|
@@ -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
|
|
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":"AACA,OAAO,EAAE,aAAa,EAAsB,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAgB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,MAAM,UAAU,gBAAgB,CAC9B,EAA+B,EAC/B,UAAsB,EACtB,aAA4B;IAE5B,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC;IAClC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;QACtE,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC;IACD,QAAQ,CAAC,IAAI,CACX,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAC5E,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC;QACvC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,EAA+B,EAC/B,UAAyB,EACzB,aAA4B,EAC5B,MAAoB;IAEpB,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,qEAAqE;IACrE,8CAA8C;IAC9C,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,
|
|
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
|
-
*
|
|
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
|
-
*
|
|
33
|
-
*
|
|
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:
|
|
84
|
+
export declare function resolveBindings(ts: typeof import("typescript"), { sourceFile, scripts }: ParsedFile, fileHash: string): ResolvedScopes;
|
|
76
85
|
export {};
|
package/dist/resolveBindings.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { inTypePosition } from "./inTypePosition.js";
|
|
2
|
-
export function resolveBindings(ts, scripts, fileHash) {
|
|
3
|
-
const combined = combine(ts, scripts);
|
|
4
|
-
const file = ts.createSourceFile(
|
|
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);
|
|
5
5
|
const checker = checkerOf(ts, file);
|
|
6
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;
|
|
7
12
|
const scriptAt = (position) => combined.pieces.find((piece) => position >= piece.start && position < piece.start + piece.length)?.script;
|
|
8
13
|
const own = new Map();
|
|
9
14
|
// The script's own identifier written at a combined position.
|
|
@@ -49,32 +54,47 @@ export function resolveBindings(ts, scripts, fileHash) {
|
|
|
49
54
|
}
|
|
50
55
|
return key;
|
|
51
56
|
};
|
|
52
|
-
//
|
|
53
|
-
const
|
|
57
|
+
// What a name resolves to, and where it is declared.
|
|
58
|
+
const resolve = (identifier) => {
|
|
54
59
|
const symbol = ts.isShorthandPropertyAssignment(identifier.parent) &&
|
|
55
60
|
identifier.parent.name === identifier
|
|
56
61
|
? checker.getShorthandAssignmentValueSymbol(identifier.parent)
|
|
57
62
|
: checker.getSymbolAtLocation(identifier);
|
|
58
|
-
|
|
59
|
-
|
|
63
|
+
const declaration = symbol?.declarations?.find((declaration) => declaration.getSourceFile() === file);
|
|
64
|
+
return symbol !== undefined && declaration !== undefined
|
|
65
|
+
? { symbol, declaration }
|
|
60
66
|
: undefined;
|
|
61
67
|
};
|
|
62
68
|
// Every binding some nested script captures, whatever hole it was written at.
|
|
63
69
|
const escaped = new Set();
|
|
70
|
+
const hostReferences = new Set();
|
|
64
71
|
const visit = (node) => {
|
|
65
72
|
// A type's names are never runtime bindings, but for a `typeof`, however
|
|
66
73
|
// deep in a type, and a class's `extends`, which read values.
|
|
67
74
|
if (ts.isIdentifier(node) && !inTypePosition(ts, node)) {
|
|
68
75
|
const script = scriptAt(node.getStart(file));
|
|
69
|
-
const declaration = declarationOf(node);
|
|
70
76
|
if (script === undefined) {
|
|
71
77
|
return;
|
|
72
78
|
}
|
|
73
|
-
|
|
79
|
+
const resolved = resolve(node);
|
|
80
|
+
if (resolved === undefined) {
|
|
74
81
|
return;
|
|
75
82
|
}
|
|
76
|
-
const
|
|
83
|
+
const { symbol, declaration } = resolved;
|
|
77
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);
|
|
78
98
|
if (identifier !== undefined) {
|
|
79
99
|
bindings.set(identifier, key);
|
|
80
100
|
}
|
|
@@ -126,59 +146,74 @@ export function resolveBindings(ts, scripts, fileHash) {
|
|
|
126
146
|
}
|
|
127
147
|
params.set(script, [...splices, ...captures.values()]);
|
|
128
148
|
}
|
|
129
|
-
return { bindings, params };
|
|
149
|
+
return { bindings, hostReferences, params };
|
|
130
150
|
}
|
|
131
|
-
// The
|
|
132
|
-
// its
|
|
133
|
-
|
|
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) {
|
|
134
156
|
const combined = {
|
|
135
157
|
text: "",
|
|
136
158
|
pieces: [],
|
|
137
159
|
parents: new Map(),
|
|
138
160
|
positions: new Map(),
|
|
139
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
|
+
};
|
|
140
168
|
const emit = (script, parent) => {
|
|
141
169
|
combined.parents.set(script, parent);
|
|
142
170
|
const identifiers = identifiersOf(ts, script.fileWithPlaceholders);
|
|
143
|
-
const holes = [...identifiers.values()].filter((identifier) =>
|
|
144
|
-
const splice = script.splices[identifier.text];
|
|
145
|
-
return splice?.kind === "braced" && splice.scripts.length > 0;
|
|
146
|
-
});
|
|
171
|
+
const holes = [...identifiers.values()].filter((identifier) => script.splices[identifier.text]?.kind === "braced");
|
|
147
172
|
combined.text += "(() => ";
|
|
148
|
-
let
|
|
173
|
+
let cursor = 0;
|
|
149
174
|
const copy = (to) => {
|
|
150
175
|
const start = combined.text.length;
|
|
151
|
-
combined.pieces.push({
|
|
176
|
+
combined.pieces.push({
|
|
177
|
+
start,
|
|
178
|
+
length: to - cursor,
|
|
179
|
+
script,
|
|
180
|
+
from: cursor,
|
|
181
|
+
});
|
|
152
182
|
for (const [offset, identifier] of identifiers) {
|
|
153
|
-
if (offset >=
|
|
154
|
-
combined.positions.set(identifier, start + offset -
|
|
183
|
+
if (offset >= cursor && offset < to) {
|
|
184
|
+
combined.positions.set(identifier, start + offset - cursor);
|
|
155
185
|
}
|
|
156
186
|
}
|
|
157
|
-
combined.text += script.textWithPlaceholders.slice(
|
|
158
|
-
|
|
187
|
+
combined.text += script.textWithPlaceholders.slice(cursor, to);
|
|
188
|
+
cursor = to;
|
|
159
189
|
};
|
|
160
190
|
for (const hole of holes) {
|
|
161
191
|
copy(hole.getStart(script.fileWithPlaceholders));
|
|
162
192
|
combined.positions.set(hole, combined.text.length);
|
|
163
193
|
const splice = script.splices[hole.text];
|
|
164
|
-
combined.text += "
|
|
165
|
-
splice.
|
|
166
|
-
|
|
194
|
+
combined.text += "(";
|
|
195
|
+
at = splice.expression.getStart(sourceFile);
|
|
196
|
+
for (const nested of splice.scripts) {
|
|
197
|
+
host(nested.sourceNode.getStart(sourceFile));
|
|
167
198
|
emit(nested, script);
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
199
|
+
at = nested.sourceNode.getEnd();
|
|
200
|
+
}
|
|
201
|
+
host(splice.expression.getEnd());
|
|
202
|
+
combined.text += ")";
|
|
203
|
+
cursor = hole.getEnd();
|
|
171
204
|
}
|
|
172
205
|
copy(script.textWithPlaceholders.length);
|
|
173
206
|
combined.text += ")";
|
|
174
207
|
};
|
|
175
208
|
for (const script of scripts) {
|
|
209
|
+
host(script.sourceNode.getStart(sourceFile));
|
|
176
210
|
emit(script);
|
|
177
|
-
|
|
211
|
+
at = script.sourceNode.getEnd();
|
|
178
212
|
}
|
|
213
|
+
host(sourceFile.text.length);
|
|
179
214
|
return combined;
|
|
180
215
|
}
|
|
181
|
-
// A checker over the one file: no libraries, as only the
|
|
216
|
+
// A checker over the one file: no libraries, as only the file's own
|
|
182
217
|
// bindings are asked about.
|
|
183
218
|
function checkerOf(ts, file) {
|
|
184
219
|
const host = {
|
|
@@ -196,6 +231,15 @@ function checkerOf(ts, file) {
|
|
|
196
231
|
.createProgram([file.fileName], { noLib: true, noResolve: true, types: [], jsx: ts.JsxEmit.Preserve }, host)
|
|
197
232
|
.getTypeChecker();
|
|
198
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
|
+
}
|
|
199
243
|
// A script's own identifiers, by where they start in its placeholder text.
|
|
200
244
|
function identifiersOf(ts, file) {
|
|
201
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":"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"}
|
package/dist/rewriteFile.d.ts
CHANGED
|
@@ -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;
|
package/dist/rewriteFile.js
CHANGED
|
@@ -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
|
|
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
|
package/dist/rewriteFile.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/virtualScript.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ClientScript, Splice } from "./parseFile.js";
|
|
2
|
-
import type {
|
|
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
|
|
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:
|
|
29
|
+
export declare function virtualScript(ts: typeof import("typescript"), script: ClientScript, { bindings, hostReferences }: RewrittenFile, renderSplice: (splice: Splice) => Segment[]): Segment[];
|
package/dist/virtualScript.js
CHANGED
|
@@ -19,7 +19,14 @@ const TAG_NAME = {
|
|
|
19
19
|
*
|
|
20
20
|
* - its own binding, renamed (`x` to `__cs_x`), so it can't hide a host binding
|
|
21
21
|
* a splice names; a shorthand keeps its property name (`x: __cs_x`)
|
|
22
|
-
* - a
|
|
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.
|
|
23
30
|
* - a splice, as the host value the client is handed: `$x` as
|
|
24
31
|
* `cs.splice((x))`, `${…}` as `cs.splice(…)` around the host code
|
|
25
32
|
* - a splice written as a tag, `<$Card>`, as JSX on a name the host value is
|
|
@@ -30,7 +37,7 @@ const TAG_NAME = {
|
|
|
30
37
|
* piece maps back to the text it came from; what the wrapper adds maps to no
|
|
31
38
|
* editor feature.
|
|
32
39
|
*/
|
|
33
|
-
export function virtualScript(ts, script, bindings, renderSplice) {
|
|
40
|
+
export function virtualScript(ts, script, { bindings, hostReferences }, renderSplice) {
|
|
34
41
|
const file = script.fileWithPlaceholders;
|
|
35
42
|
const text = script.textWithPlaceholders;
|
|
36
43
|
const out = [];
|
|
@@ -114,7 +121,8 @@ export function virtualScript(ts, script, bindings, renderSplice) {
|
|
|
114
121
|
parent.propertyName === undefined &&
|
|
115
122
|
parent.dotDotDotToken === undefined &&
|
|
116
123
|
ts.isObjectBindingPattern(parent.parent));
|
|
117
|
-
|
|
124
|
+
// A host reference is renamed like a binding on purpose: see the HACK above.
|
|
125
|
+
if (bindings.has(node) || hostReferences.has(node)) {
|
|
118
126
|
if (shorthand) {
|
|
119
127
|
mapped(node.text, node);
|
|
120
128
|
added(": ");
|
|
@@ -122,15 +130,6 @@ export function virtualScript(ts, script, bindings, renderSplice) {
|
|
|
122
130
|
mapped(mangle(node.text), node);
|
|
123
131
|
return;
|
|
124
132
|
}
|
|
125
|
-
if (node.text !== "undefined" && isReference(ts, node)) {
|
|
126
|
-
if (shorthand) {
|
|
127
|
-
mapped(node.text, node);
|
|
128
|
-
added(": ");
|
|
129
|
-
}
|
|
130
|
-
added("cs.globalThis.");
|
|
131
|
-
mapped(node.text, node);
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
133
|
verbatim(node.getStart(file), node.getEnd());
|
|
135
134
|
};
|
|
136
135
|
// A tag that splices a host value, `<$Card>`, which the client is handed
|
|
@@ -233,50 +232,4 @@ export function virtualScript(ts, script, bindings, renderSplice) {
|
|
|
233
232
|
out.push([")())", undefined, closed, 1, WRAPPER]);
|
|
234
233
|
return out;
|
|
235
234
|
}
|
|
236
|
-
// Whether a name is read as a value where it stands, rather than naming a
|
|
237
|
-
// property, an attribute, a label or what a declaration declares.
|
|
238
|
-
function isReference(ts, node) {
|
|
239
|
-
const parent = node.parent;
|
|
240
|
-
if ((ts.isPropertyAccessExpression(parent) ||
|
|
241
|
-
ts.isPropertyAssignment(parent) ||
|
|
242
|
-
ts.isMethodDeclaration(parent) ||
|
|
243
|
-
ts.isPropertyDeclaration(parent) ||
|
|
244
|
-
ts.isGetAccessorDeclaration(parent) ||
|
|
245
|
-
ts.isSetAccessorDeclaration(parent) ||
|
|
246
|
-
ts.isPropertySignature(parent) ||
|
|
247
|
-
ts.isMethodSignature(parent) ||
|
|
248
|
-
ts.isEnumMember(parent) ||
|
|
249
|
-
ts.isJsxAttribute(parent) ||
|
|
250
|
-
ts.isVariableDeclaration(parent) ||
|
|
251
|
-
ts.isParameter(parent) ||
|
|
252
|
-
ts.isFunctionDeclaration(parent) ||
|
|
253
|
-
ts.isFunctionExpression(parent) ||
|
|
254
|
-
ts.isClassDeclaration(parent) ||
|
|
255
|
-
ts.isClassExpression(parent) ||
|
|
256
|
-
ts.isTypeAliasDeclaration(parent) ||
|
|
257
|
-
ts.isInterfaceDeclaration(parent) ||
|
|
258
|
-
ts.isEnumDeclaration(parent) ||
|
|
259
|
-
ts.isTypeParameterDeclaration(parent)) &&
|
|
260
|
-
parent.name === node) {
|
|
261
|
-
return false;
|
|
262
|
-
}
|
|
263
|
-
if (ts.isBindingElement(parent)) {
|
|
264
|
-
return false; // its name declares, its property name names a property
|
|
265
|
-
}
|
|
266
|
-
if ((ts.isLabeledStatement(parent) ||
|
|
267
|
-
ts.isBreakStatement(parent) ||
|
|
268
|
-
ts.isContinueStatement(parent)) &&
|
|
269
|
-
parent.label === node) {
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
if ((ts.isJsxOpeningElement(parent) ||
|
|
273
|
-
ts.isJsxSelfClosingElement(parent) ||
|
|
274
|
-
ts.isJsxClosingElement(parent)) &&
|
|
275
|
-
parent.tagName === node) {
|
|
276
|
-
return false; // an intrinsic element's name, or a host tag's (above)
|
|
277
|
-
}
|
|
278
|
-
return !(ts.isQualifiedName(parent) ||
|
|
279
|
-
ts.isMetaProperty(parent) ||
|
|
280
|
-
ts.isJsxNamespacedName(parent));
|
|
281
|
-
}
|
|
282
235
|
//# sourceMappingURL=virtualScript.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtualScript.js","sourceRoot":"","sources":["../src/virtualScript.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,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
|
|
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.
|
|
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,7 +46,7 @@
|
|
|
46
46
|
"@jridgewell/trace-mapping": "^0.3.31"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@backtickjs/core": "^0.1.
|
|
49
|
+
"@backtickjs/core": "^0.1.10",
|
|
50
50
|
"prettier": "^3.6.2",
|
|
51
51
|
"typescript": "^6.0.3"
|
|
52
52
|
},
|
package/src/printVirtualCode.ts
CHANGED
|
@@ -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
|
|
54
|
+
return virtualScript(ts, script, rewrittenFile, (splice) =>
|
|
55
55
|
renderSplice(
|
|
56
56
|
ts,
|
|
57
57
|
sourceFile,
|
package/src/resolveBindings.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type ts from "typescript";
|
|
2
2
|
import { inTypePosition } from "./inTypePosition.js";
|
|
3
|
-
import type { ClientScript } from "./parseFile.js";
|
|
3
|
+
import type { ClientScript, ParsedFile } from "./parseFile.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Every client script in a file, its scopes resolved by TypeScript's checker,
|
|
7
7
|
* so any syntax TypeScript reads is resolved as the language does. It produces
|
|
8
|
-
*
|
|
8
|
+
* three things:
|
|
9
9
|
*
|
|
10
10
|
* - `bindings`: every *bound* variable identifier — a declaration, an arrow
|
|
11
11
|
* parameter, or a reference that resolves to one of those — mapped to a
|
|
@@ -31,10 +31,18 @@ import type { ClientScript } from "./parseFile.js";
|
|
|
31
31
|
* captured by something, somewhere: a binding no fragment ever wants is
|
|
32
32
|
* dead weight in every thunk written for that hole.
|
|
33
33
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
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
|
|
36
43
|
* for the script it appears in exactly when the binding it resolves to was
|
|
37
|
-
* 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.
|
|
38
46
|
*
|
|
39
47
|
* Uniqueness of keys has two axes. A per-file counter distinguishes bindings
|
|
40
48
|
* *within* a file; a hash of the file's text (see `hashText`) distinguishes
|
|
@@ -56,6 +64,8 @@ export type BindingResolution = Map<ts.Identifier, string>;
|
|
|
56
64
|
|
|
57
65
|
export interface ResolvedScopes {
|
|
58
66
|
bindings: BindingResolution;
|
|
67
|
+
// the scripts' identifiers that read a host binding
|
|
68
|
+
hostReferences: Set<ts.Identifier>;
|
|
59
69
|
// `params.get(script)[i]` is the script's parameter `i` (`$splice<i>`,
|
|
60
70
|
// `$capture<i>`): splices in the order the script first reads them, then
|
|
61
71
|
// captures
|
|
@@ -111,20 +121,25 @@ interface Combined {
|
|
|
111
121
|
|
|
112
122
|
export function resolveBindings(
|
|
113
123
|
ts: typeof import("typescript"),
|
|
114
|
-
scripts:
|
|
124
|
+
{ sourceFile, scripts }: ParsedFile,
|
|
115
125
|
fileHash: string,
|
|
116
126
|
): ResolvedScopes {
|
|
117
|
-
const combined = combine(ts, scripts);
|
|
127
|
+
const combined = combine(ts, sourceFile, scripts);
|
|
118
128
|
const file = ts.createSourceFile(
|
|
119
|
-
|
|
129
|
+
sourceFile.fileName,
|
|
120
130
|
combined.text,
|
|
121
131
|
ts.ScriptTarget.Latest,
|
|
122
132
|
true,
|
|
123
|
-
ts.ScriptKind.TSX,
|
|
124
133
|
);
|
|
125
134
|
const checker = checkerOf(ts, file);
|
|
126
135
|
const binding =
|
|
127
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;
|
|
128
143
|
|
|
129
144
|
const scriptAt = (position: number): ClientScript | undefined =>
|
|
130
145
|
combined.pieces.find(
|
|
@@ -179,39 +194,56 @@ export function resolveBindings(
|
|
|
179
194
|
}
|
|
180
195
|
return key;
|
|
181
196
|
};
|
|
182
|
-
//
|
|
183
|
-
const
|
|
197
|
+
// What a name resolves to, and where it is declared.
|
|
198
|
+
const resolve = (
|
|
184
199
|
identifier: ts.Identifier,
|
|
185
|
-
): ts.Declaration | undefined => {
|
|
200
|
+
): { symbol: ts.Symbol; declaration: ts.Declaration } | undefined => {
|
|
186
201
|
const symbol =
|
|
187
202
|
ts.isShorthandPropertyAssignment(identifier.parent) &&
|
|
188
203
|
identifier.parent.name === identifier
|
|
189
204
|
? checker.getShorthandAssignmentValueSymbol(identifier.parent)
|
|
190
205
|
: checker.getSymbolAtLocation(identifier);
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
206
|
+
const declaration = symbol?.declarations?.find(
|
|
207
|
+
(declaration) => declaration.getSourceFile() === file,
|
|
208
|
+
);
|
|
209
|
+
return symbol !== undefined && declaration !== undefined
|
|
210
|
+
? { symbol, declaration }
|
|
195
211
|
: undefined;
|
|
196
212
|
};
|
|
197
213
|
|
|
198
214
|
// Every binding some nested script captures, whatever hole it was written at.
|
|
199
215
|
const escaped = new Set<string>();
|
|
216
|
+
const hostReferences = new Set<ts.Identifier>();
|
|
200
217
|
|
|
201
218
|
const visit = (node: ts.Node): void => {
|
|
202
219
|
// A type's names are never runtime bindings, but for a `typeof`, however
|
|
203
220
|
// deep in a type, and a class's `extends`, which read values.
|
|
204
221
|
if (ts.isIdentifier(node) && !inTypePosition(ts, node)) {
|
|
205
222
|
const script = scriptAt(node.getStart(file));
|
|
206
|
-
const declaration = declarationOf(node);
|
|
207
223
|
if (script === undefined) {
|
|
208
224
|
return;
|
|
209
225
|
}
|
|
210
|
-
|
|
226
|
+
const resolved = resolve(node);
|
|
227
|
+
if (resolved === undefined) {
|
|
211
228
|
return;
|
|
212
229
|
}
|
|
213
|
-
const
|
|
230
|
+
const { symbol, declaration } = resolved;
|
|
214
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);
|
|
215
247
|
if (identifier !== undefined) {
|
|
216
248
|
bindings.set(identifier, key);
|
|
217
249
|
}
|
|
@@ -277,13 +309,16 @@ export function resolveBindings(
|
|
|
277
309
|
params.set(script, [...splices, ...captures.values()]);
|
|
278
310
|
}
|
|
279
311
|
|
|
280
|
-
return { bindings, params };
|
|
312
|
+
return { bindings, hostReferences, params };
|
|
281
313
|
}
|
|
282
314
|
|
|
283
|
-
// The
|
|
284
|
-
// its
|
|
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.
|
|
285
319
|
function combine(
|
|
286
320
|
ts: typeof import("typescript"),
|
|
321
|
+
sourceFile: ts.SourceFile,
|
|
287
322
|
scripts: ClientScript[],
|
|
288
323
|
): Combined {
|
|
289
324
|
const combined: Combined = {
|
|
@@ -292,49 +327,64 @@ function combine(
|
|
|
292
327
|
parents: new Map(),
|
|
293
328
|
positions: new Map(),
|
|
294
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
|
+
};
|
|
295
336
|
const emit = (script: ClientScript, parent?: ClientScript): void => {
|
|
296
337
|
combined.parents.set(script, parent);
|
|
297
338
|
const identifiers = identifiersOf(ts, script.fileWithPlaceholders);
|
|
298
|
-
const holes = [...identifiers.values()].filter(
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
});
|
|
339
|
+
const holes = [...identifiers.values()].filter(
|
|
340
|
+
(identifier) => script.splices[identifier.text]?.kind === "braced",
|
|
341
|
+
);
|
|
302
342
|
combined.text += "(() => ";
|
|
303
|
-
let
|
|
343
|
+
let cursor = 0;
|
|
304
344
|
const copy = (to: number): void => {
|
|
305
345
|
const start = combined.text.length;
|
|
306
|
-
combined.pieces.push({
|
|
346
|
+
combined.pieces.push({
|
|
347
|
+
start,
|
|
348
|
+
length: to - cursor,
|
|
349
|
+
script,
|
|
350
|
+
from: cursor,
|
|
351
|
+
});
|
|
307
352
|
for (const [offset, identifier] of identifiers) {
|
|
308
|
-
if (offset >=
|
|
309
|
-
combined.positions.set(identifier, start + offset -
|
|
353
|
+
if (offset >= cursor && offset < to) {
|
|
354
|
+
combined.positions.set(identifier, start + offset - cursor);
|
|
310
355
|
}
|
|
311
356
|
}
|
|
312
|
-
combined.text += script.textWithPlaceholders.slice(
|
|
313
|
-
|
|
357
|
+
combined.text += script.textWithPlaceholders.slice(cursor, to);
|
|
358
|
+
cursor = to;
|
|
314
359
|
};
|
|
315
360
|
for (const hole of holes) {
|
|
316
361
|
copy(hole.getStart(script.fileWithPlaceholders));
|
|
317
362
|
combined.positions.set(hole, combined.text.length);
|
|
318
363
|
const splice = script.splices[hole.text]!;
|
|
319
|
-
combined.text += "
|
|
320
|
-
splice.
|
|
321
|
-
|
|
364
|
+
combined.text += "(";
|
|
365
|
+
at = splice.expression.getStart(sourceFile);
|
|
366
|
+
for (const nested of splice.scripts) {
|
|
367
|
+
host(nested.sourceNode.getStart(sourceFile));
|
|
322
368
|
emit(nested, script);
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
369
|
+
at = nested.sourceNode.getEnd();
|
|
370
|
+
}
|
|
371
|
+
host(splice.expression.getEnd());
|
|
372
|
+
combined.text += ")";
|
|
373
|
+
cursor = hole.getEnd();
|
|
326
374
|
}
|
|
327
375
|
copy(script.textWithPlaceholders.length);
|
|
328
376
|
combined.text += ")";
|
|
329
377
|
};
|
|
330
378
|
for (const script of scripts) {
|
|
379
|
+
host(script.sourceNode.getStart(sourceFile));
|
|
331
380
|
emit(script);
|
|
332
|
-
|
|
381
|
+
at = script.sourceNode.getEnd();
|
|
333
382
|
}
|
|
383
|
+
host(sourceFile.text.length);
|
|
334
384
|
return combined;
|
|
335
385
|
}
|
|
336
386
|
|
|
337
|
-
// A checker over the one file: no libraries, as only the
|
|
387
|
+
// A checker over the one file: no libraries, as only the file's own
|
|
338
388
|
// bindings are asked about.
|
|
339
389
|
function checkerOf(
|
|
340
390
|
ts: typeof import("typescript"),
|
|
@@ -360,6 +410,21 @@ function checkerOf(
|
|
|
360
410
|
.getTypeChecker();
|
|
361
411
|
}
|
|
362
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
|
+
|
|
363
428
|
// A script's own identifiers, by where they start in its placeholder text.
|
|
364
429
|
function identifiersOf(
|
|
365
430
|
ts: typeof import("typescript"),
|
package/src/rewriteFile.ts
CHANGED
|
@@ -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
|
|
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
|
}
|
package/src/virtualScript.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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 {
|
|
4
|
+
import type { RewrittenFile } from "./rewriteFile.js";
|
|
5
5
|
import type { Segment } from "./segmentsToString.js";
|
|
6
6
|
import { inTypePosition } from "./inTypePosition.js";
|
|
7
7
|
import { tagRoot } from "./tagRoot.js";
|
|
@@ -26,7 +26,14 @@ const TAG_NAME: CodeInformation = {
|
|
|
26
26
|
*
|
|
27
27
|
* - its own binding, renamed (`x` to `__cs_x`), so it can't hide a host binding
|
|
28
28
|
* a splice names; a shorthand keeps its property name (`x: __cs_x`)
|
|
29
|
-
* - a
|
|
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.
|
|
30
37
|
* - a splice, as the host value the client is handed: `$x` as
|
|
31
38
|
* `cs.splice((x))`, `${…}` as `cs.splice(…)` around the host code
|
|
32
39
|
* - a splice written as a tag, `<$Card>`, as JSX on a name the host value is
|
|
@@ -40,7 +47,7 @@ const TAG_NAME: CodeInformation = {
|
|
|
40
47
|
export function virtualScript(
|
|
41
48
|
ts: typeof import("typescript"),
|
|
42
49
|
script: ClientScript,
|
|
43
|
-
bindings:
|
|
50
|
+
{ bindings, hostReferences }: RewrittenFile,
|
|
44
51
|
renderSplice: (splice: Splice) => Segment[],
|
|
45
52
|
): Segment[] {
|
|
46
53
|
const file = script.fileWithPlaceholders;
|
|
@@ -139,7 +146,8 @@ export function virtualScript(
|
|
|
139
146
|
parent.propertyName === undefined &&
|
|
140
147
|
parent.dotDotDotToken === undefined &&
|
|
141
148
|
ts.isObjectBindingPattern(parent.parent));
|
|
142
|
-
|
|
149
|
+
// A host reference is renamed like a binding on purpose: see the HACK above.
|
|
150
|
+
if (bindings.has(node) || hostReferences.has(node)) {
|
|
143
151
|
if (shorthand) {
|
|
144
152
|
mapped(node.text, node);
|
|
145
153
|
added(": ");
|
|
@@ -147,15 +155,6 @@ export function virtualScript(
|
|
|
147
155
|
mapped(mangle(node.text), node);
|
|
148
156
|
return;
|
|
149
157
|
}
|
|
150
|
-
if (node.text !== "undefined" && isReference(ts, node)) {
|
|
151
|
-
if (shorthand) {
|
|
152
|
-
mapped(node.text, node);
|
|
153
|
-
added(": ");
|
|
154
|
-
}
|
|
155
|
-
added("cs.globalThis.");
|
|
156
|
-
mapped(node.text, node);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
158
|
verbatim(node.getStart(file), node.getEnd());
|
|
160
159
|
};
|
|
161
160
|
|
|
@@ -265,61 +264,3 @@ export function virtualScript(
|
|
|
265
264
|
out.push([")())", undefined, closed, 1, WRAPPER]);
|
|
266
265
|
return out;
|
|
267
266
|
}
|
|
268
|
-
|
|
269
|
-
// Whether a name is read as a value where it stands, rather than naming a
|
|
270
|
-
// property, an attribute, a label or what a declaration declares.
|
|
271
|
-
function isReference(
|
|
272
|
-
ts: typeof import("typescript"),
|
|
273
|
-
node: ts.Identifier,
|
|
274
|
-
): boolean {
|
|
275
|
-
const parent = node.parent;
|
|
276
|
-
if (
|
|
277
|
-
(ts.isPropertyAccessExpression(parent) ||
|
|
278
|
-
ts.isPropertyAssignment(parent) ||
|
|
279
|
-
ts.isMethodDeclaration(parent) ||
|
|
280
|
-
ts.isPropertyDeclaration(parent) ||
|
|
281
|
-
ts.isGetAccessorDeclaration(parent) ||
|
|
282
|
-
ts.isSetAccessorDeclaration(parent) ||
|
|
283
|
-
ts.isPropertySignature(parent) ||
|
|
284
|
-
ts.isMethodSignature(parent) ||
|
|
285
|
-
ts.isEnumMember(parent) ||
|
|
286
|
-
ts.isJsxAttribute(parent) ||
|
|
287
|
-
ts.isVariableDeclaration(parent) ||
|
|
288
|
-
ts.isParameter(parent) ||
|
|
289
|
-
ts.isFunctionDeclaration(parent) ||
|
|
290
|
-
ts.isFunctionExpression(parent) ||
|
|
291
|
-
ts.isClassDeclaration(parent) ||
|
|
292
|
-
ts.isClassExpression(parent) ||
|
|
293
|
-
ts.isTypeAliasDeclaration(parent) ||
|
|
294
|
-
ts.isInterfaceDeclaration(parent) ||
|
|
295
|
-
ts.isEnumDeclaration(parent) ||
|
|
296
|
-
ts.isTypeParameterDeclaration(parent)) &&
|
|
297
|
-
parent.name === node
|
|
298
|
-
) {
|
|
299
|
-
return false;
|
|
300
|
-
}
|
|
301
|
-
if (ts.isBindingElement(parent)) {
|
|
302
|
-
return false; // its name declares, its property name names a property
|
|
303
|
-
}
|
|
304
|
-
if (
|
|
305
|
-
(ts.isLabeledStatement(parent) ||
|
|
306
|
-
ts.isBreakStatement(parent) ||
|
|
307
|
-
ts.isContinueStatement(parent)) &&
|
|
308
|
-
parent.label === node
|
|
309
|
-
) {
|
|
310
|
-
return false;
|
|
311
|
-
}
|
|
312
|
-
if (
|
|
313
|
-
(ts.isJsxOpeningElement(parent) ||
|
|
314
|
-
ts.isJsxSelfClosingElement(parent) ||
|
|
315
|
-
ts.isJsxClosingElement(parent)) &&
|
|
316
|
-
parent.tagName === node
|
|
317
|
-
) {
|
|
318
|
-
return false; // an intrinsic element's name, or a host tag's (above)
|
|
319
|
-
}
|
|
320
|
-
return !(
|
|
321
|
-
ts.isQualifiedName(parent) ||
|
|
322
|
-
ts.isMetaProperty(parent) ||
|
|
323
|
-
ts.isJsxNamespacedName(parent)
|
|
324
|
-
);
|
|
325
|
-
}
|