@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.
- package/dist/inTypePosition.d.ts +2 -0
- package/dist/inTypePosition.js +20 -0
- package/dist/inTypePosition.js.map +1 -0
- package/dist/printVirtualCode.js +1 -1
- package/dist/printVirtualCode.js.map +1 -1
- package/dist/resolveBindings.d.ts +15 -6
- package/dist/resolveBindings.js +80 -42
- 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 +12 -77
- package/dist/virtualScript.js.map +1 -1
- package/package.json +3 -3
- package/src/inTypePosition.ts +26 -0
- package/src/printVirtualCode.ts +1 -1
- package/src/resolveBindings.ts +109 -54
- package/src/rewriteFile.ts +5 -3
- package/src/virtualScript.ts +13 -96
|
@@ -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"}
|
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,8 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
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
|
-
//
|
|
52
|
-
const
|
|
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
|
-
|
|
58
|
-
|
|
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
|
|
65
|
-
// class's `extends`, which read values.
|
|
66
|
-
if (ts.
|
|
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
|
-
|
|
79
|
+
const resolved = resolve(node);
|
|
80
|
+
if (resolved === undefined) {
|
|
80
81
|
return;
|
|
81
82
|
}
|
|
82
|
-
const
|
|
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
|
|
138
|
-
// its
|
|
139
|
-
|
|
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
|
|
173
|
+
let cursor = 0;
|
|
155
174
|
const copy = (to) => {
|
|
156
175
|
const start = combined.text.length;
|
|
157
|
-
combined.pieces.push({
|
|
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 >=
|
|
160
|
-
combined.positions.set(identifier, start + offset -
|
|
183
|
+
if (offset >= cursor && offset < to) {
|
|
184
|
+
combined.positions.set(identifier, start + offset - cursor);
|
|
161
185
|
}
|
|
162
186
|
}
|
|
163
|
-
combined.text += script.textWithPlaceholders.slice(
|
|
164
|
-
|
|
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.
|
|
172
|
-
|
|
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
|
-
|
|
176
|
-
|
|
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
|
-
|
|
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
|
|
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":"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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
|
@@ -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
|
|
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
|
-
|
|
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":"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"}
|
|
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,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
|
+
}
|
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,10 +1,11 @@
|
|
|
1
1
|
import type ts from "typescript";
|
|
2
|
-
import
|
|
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
|
-
*
|
|
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
|
-
*
|
|
34
|
-
*
|
|
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:
|
|
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
|
-
|
|
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
|
-
//
|
|
182
|
-
const
|
|
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
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
|
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
|
-
|
|
226
|
+
const resolved = resolve(node);
|
|
227
|
+
if (resolved === undefined) {
|
|
221
228
|
return;
|
|
222
229
|
}
|
|
223
|
-
const
|
|
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
|
|
294
|
-
// 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.
|
|
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(
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
});
|
|
339
|
+
const holes = [...identifiers.values()].filter(
|
|
340
|
+
(identifier) => script.splices[identifier.text]?.kind === "braced",
|
|
341
|
+
);
|
|
312
342
|
combined.text += "(() => ";
|
|
313
|
-
let
|
|
343
|
+
let cursor = 0;
|
|
314
344
|
const copy = (to: number): void => {
|
|
315
345
|
const start = combined.text.length;
|
|
316
|
-
combined.pieces.push({
|
|
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 >=
|
|
319
|
-
combined.positions.set(identifier, start + offset -
|
|
353
|
+
if (offset >= cursor && offset < to) {
|
|
354
|
+
combined.positions.set(identifier, start + offset - cursor);
|
|
320
355
|
}
|
|
321
356
|
}
|
|
322
|
-
combined.text += script.textWithPlaceholders.slice(
|
|
323
|
-
|
|
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.
|
|
331
|
-
|
|
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
|
-
|
|
335
|
-
|
|
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
|
-
|
|
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
|
|
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"),
|
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,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 {
|
|
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
|
|
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:
|
|
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
|
-
|
|
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
|
-
}
|