@backtickjs/compiler 0.1.10 → 0.2.0
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/README.md +1 -1
- package/dist/clientImports.d.ts +11 -0
- package/dist/clientImports.js +132 -0
- package/dist/clientImports.js.map +1 -0
- package/dist/compileModule.d.ts +1 -1
- package/dist/compileModule.js +1 -1
- package/dist/compileScript.d.ts +1 -1
- package/dist/compileScript.js +4 -2
- package/dist/compileScript.js.map +1 -1
- package/dist/emitScript.js +14 -5
- package/dist/emitScript.js.map +1 -1
- package/dist/inTypePosition.d.ts +1 -0
- package/dist/inTypePosition.js +14 -4
- package/dist/inTypePosition.js.map +1 -1
- package/dist/isClass.d.ts +2 -0
- package/dist/isClass.js +7 -0
- package/dist/isClass.js.map +1 -0
- package/dist/printVirtualCode.js +18 -4
- package/dist/printVirtualCode.js.map +1 -1
- package/dist/rewriteScript.d.ts +1 -1
- package/dist/rewriteScript.js +18 -10
- package/dist/rewriteScript.js.map +1 -1
- package/dist/transform.d.ts +1 -1
- package/dist/transform.js +26 -3
- package/dist/transform.js.map +1 -1
- package/package.json +2 -2
- package/src/clientImports.ts +198 -0
- package/src/compileModule.ts +1 -1
- package/src/compileScript.ts +5 -3
- package/src/emitScript.ts +32 -6
- package/src/inTypePosition.ts +20 -6
- package/src/isClass.ts +11 -0
- package/src/printVirtualCode.ts +22 -4
- package/src/rewriteScript.ts +21 -11
- package/src/transform.ts +40 -4
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ It finds each script in a source file, resolves its splices, compiles the script
|
|
|
19
19
|
|
|
20
20
|
- [`@backtickjs/core`](https://github.com/backtickjs/backtick/tree/main/packages/core): the `cs` tag
|
|
21
21
|
- [`@backtickjs/tsc`](https://github.com/backtickjs/backtick/tree/main/packages/tsc), [`@backtickjs/node-plugin`](https://github.com/backtickjs/backtick/tree/main/packages/node-plugin), [`@backtickjs/bun-plugin`](https://github.com/backtickjs/backtick/tree/main/packages/bun-plugin): packages that use it
|
|
22
|
-
- [How it works](https://backtickjs.com/docs/how-it-works)
|
|
22
|
+
- [How it works](https://backtickjs.com/docs/how-it-works/)
|
|
23
23
|
|
|
24
24
|
## License
|
|
25
25
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type ts from "typescript";
|
|
2
|
+
import type { Segment } from "./segmentsToString.js";
|
|
3
|
+
export declare function isClientImportDeclaration(ts: typeof import("typescript"), node: ts.Node): node is ts.ImportDeclaration & {
|
|
4
|
+
moduleSpecifier: ts.StringLiteral;
|
|
5
|
+
};
|
|
6
|
+
export declare function virtualClientImport(ts: typeof import("typescript"), sourceFile: ts.SourceFile, declaration: ts.ImportDeclaration): Segment[];
|
|
7
|
+
export declare function packageOf(specifier: string): string;
|
|
8
|
+
export declare function installedVersion(ts: typeof import("typescript"), specifier: string, fileName: string): string | undefined;
|
|
9
|
+
export declare function runtimeClientImport(ts: typeof import("typescript"), declaration: ts.ImportDeclaration & {
|
|
10
|
+
moduleSpecifier: ts.StringLiteral;
|
|
11
|
+
}, version: string): ts.Statement[];
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// `import { View } from "react-native" with { backtick: "client" }`, an import
|
|
2
|
+
// of what the client provides. The server never loads the module: each name
|
|
3
|
+
// is a client import of it, typed `Client<…>` by the module's own declarations.
|
|
4
|
+
// A type-only one is left to TypeScript, which refuses attributes on it.
|
|
5
|
+
export function isClientImportDeclaration(ts, node) {
|
|
6
|
+
return (ts.isImportDeclaration(node) &&
|
|
7
|
+
node.importClause?.isTypeOnly !== true &&
|
|
8
|
+
(node.attributes?.elements.some((attribute) => attribute.name.text === "backtick" &&
|
|
9
|
+
ts.isStringLiteral(attribute.value) &&
|
|
10
|
+
attribute.value.text === "client") ??
|
|
11
|
+
false));
|
|
12
|
+
}
|
|
13
|
+
function bindingsOf(ts, declaration) {
|
|
14
|
+
const clause = declaration.importClause;
|
|
15
|
+
const named = clause?.namedBindings;
|
|
16
|
+
const bindings = [];
|
|
17
|
+
if (clause?.name !== undefined) {
|
|
18
|
+
const local = clause.name;
|
|
19
|
+
bindings.push({
|
|
20
|
+
name: "default",
|
|
21
|
+
written: undefined,
|
|
22
|
+
local,
|
|
23
|
+
isType: false,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
if (named !== undefined && ts.isNamespaceImport(named)) {
|
|
27
|
+
const local = named.name;
|
|
28
|
+
bindings.push({ name: "*", written: undefined, local, isType: false });
|
|
29
|
+
}
|
|
30
|
+
if (named !== undefined && ts.isNamedImports(named)) {
|
|
31
|
+
for (const element of named.elements) {
|
|
32
|
+
const written = element.propertyName ?? element.name;
|
|
33
|
+
bindings.push({
|
|
34
|
+
name: written.text,
|
|
35
|
+
written,
|
|
36
|
+
local: element.name,
|
|
37
|
+
isType: element.isTypeOnly,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return bindings;
|
|
42
|
+
}
|
|
43
|
+
// For the typechecker, each name mapped back to where it's written: the
|
|
44
|
+
// values destructured from the module's exports as client imports, so the
|
|
45
|
+
// editor goes from a name to where the module declares it; a namespace a
|
|
46
|
+
// client import of the whole module; a type imported from the module.
|
|
47
|
+
export function virtualClientImport(ts, sourceFile, declaration) {
|
|
48
|
+
const at = (node) => [
|
|
49
|
+
node.getText(sourceFile),
|
|
50
|
+
undefined,
|
|
51
|
+
node.getStart(sourceFile),
|
|
52
|
+
node.getEnd() - node.getStart(sourceFile),
|
|
53
|
+
];
|
|
54
|
+
const from = at(declaration.moduleSpecifier);
|
|
55
|
+
const bindings = bindingsOf(ts, declaration);
|
|
56
|
+
const values = bindings.filter(({ name, isType }) => !isType && name !== "*");
|
|
57
|
+
const statements = [];
|
|
58
|
+
if (values.length > 0) {
|
|
59
|
+
statements.push([
|
|
60
|
+
"declare const { ",
|
|
61
|
+
...values.flatMap(({ written, local }, index) => [
|
|
62
|
+
...(index > 0 ? [", "] : []),
|
|
63
|
+
...(written === undefined
|
|
64
|
+
? ["default: "]
|
|
65
|
+
: written.getText(sourceFile) === local.text
|
|
66
|
+
? []
|
|
67
|
+
: [at(written), ": "]),
|
|
68
|
+
at(local),
|
|
69
|
+
]),
|
|
70
|
+
' }: import("@backtickjs/core").ClientModule<typeof import(',
|
|
71
|
+
from,
|
|
72
|
+
")>;",
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
for (const { name, written, local, isType } of bindings) {
|
|
76
|
+
if (name === "*") {
|
|
77
|
+
statements.push([
|
|
78
|
+
"declare const ",
|
|
79
|
+
at(local),
|
|
80
|
+
': import("@backtickjs/core").Client<typeof import(',
|
|
81
|
+
from,
|
|
82
|
+
")>;",
|
|
83
|
+
]);
|
|
84
|
+
}
|
|
85
|
+
else if (isType) {
|
|
86
|
+
statements.push([
|
|
87
|
+
"import type { ",
|
|
88
|
+
at(written),
|
|
89
|
+
" as ",
|
|
90
|
+
at(local),
|
|
91
|
+
" } from ",
|
|
92
|
+
from,
|
|
93
|
+
";",
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return statements.flatMap((statement, index) => index === 0 ? statement : [" ", ...statement]);
|
|
98
|
+
}
|
|
99
|
+
// The package a module specifier is in: `react` for `react/jsx-runtime`.
|
|
100
|
+
export function packageOf(specifier) {
|
|
101
|
+
const segments = specifier.split("/");
|
|
102
|
+
return segments.slice(0, specifier.startsWith("@") ? 2 : 1).join("/");
|
|
103
|
+
}
|
|
104
|
+
// The version of its package a client import is typed against: as installed
|
|
105
|
+
// where the importing file finds it, up its directories as `tsc` finds a config.
|
|
106
|
+
export function installedVersion(ts, specifier, fileName) {
|
|
107
|
+
const manifest = ts.findConfigFile(ts.sys.resolvePath(fileName), ts.sys.fileExists, `node_modules/${packageOf(specifier)}/package.json`);
|
|
108
|
+
if (manifest === undefined)
|
|
109
|
+
return undefined;
|
|
110
|
+
const { version } = JSON.parse(ts.sys.readFile(manifest));
|
|
111
|
+
return version;
|
|
112
|
+
}
|
|
113
|
+
// For the runtime, a constant per value it names, in the declaration's place:
|
|
114
|
+
// `const View = { "@backtickjs": "ClientImport", name: "View", from:
|
|
115
|
+
// "react-native", version: "0.86.3" }`, core's `ClientImport`.
|
|
116
|
+
export function runtimeClientImport(ts, declaration, version) {
|
|
117
|
+
const f = ts.factory;
|
|
118
|
+
const property = (key, value) => f.createPropertyAssignment(key, f.createStringLiteral(value));
|
|
119
|
+
return bindingsOf(ts, declaration)
|
|
120
|
+
.filter(({ isType }) => !isType)
|
|
121
|
+
.map(({ name, local }) =>
|
|
122
|
+
// Still the import it replaces, which `transform` places scripts after.
|
|
123
|
+
ts.setOriginalNode(f.createVariableStatement(undefined, f.createVariableDeclarationList([
|
|
124
|
+
f.createVariableDeclaration(local.text, undefined, undefined, f.createObjectLiteralExpression([
|
|
125
|
+
property(f.createStringLiteral("@backtickjs"), "ClientImport"),
|
|
126
|
+
property("name", name),
|
|
127
|
+
property("from", declaration.moduleSpecifier.text),
|
|
128
|
+
property("version", version),
|
|
129
|
+
])),
|
|
130
|
+
], ts.NodeFlags.Const)), declaration));
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=clientImports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientImports.js","sourceRoot":"","sources":["../src/clientImports.ts"],"names":[],"mappings":"AAGA,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,yEAAyE;AAEzE,MAAM,UAAU,yBAAyB,CACvC,EAA+B,EAC/B,IAAa;IAEb,OAAO,CACL,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,UAAU,KAAK,IAAI;QACtC,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAC7B,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;YAClC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC;YACnC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CACpC;YACC,KAAK,CAAC,CACT,CAAC;AACJ,CAAC;AAYD,SAAS,UAAU,CACjB,EAA+B,EAC/B,WAAiC;IAEjC,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,EAAE,aAAa,CAAC;IACpC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,MAAM,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS;YAClB,KAAK;YACL,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,MAAM,EAAE,OAAO,CAAC,UAAU;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,sEAAsE;AACtE,MAAM,UAAU,mBAAmB,CACjC,EAA+B,EAC/B,UAAyB,EACzB,WAAiC;IAEjC,MAAM,EAAE,GAAG,CAAC,IAAa,EAAW,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACxB,SAAS;QACT,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;KAC1C,CAAC;IACF,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,UAAU,CAAC,IAAI,CAAC;YACd,kBAAkB;YAClB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAa,EAAE,CAAC;gBAC1D,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,GAAG,CAAC,OAAO,KAAK,SAAS;oBACvB,CAAC,CAAC,CAAC,WAAW,CAAC;oBACf,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,IAAI;wBAC1C,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC1B,EAAE,CAAC,KAAK,CAAC;aACV,CAAC;YACF,4DAA4D;YAC5D,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QACxD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC;gBACd,gBAAgB;gBAChB,EAAE,CAAC,KAAK,CAAC;gBACT,oDAAoD;gBACpD,IAAI;gBACJ,KAAK;aACN,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC;gBACd,gBAAgB;gBAChB,EAAE,CAAC,OAAQ,CAAC;gBACZ,MAAM;gBACN,EAAE,CAAC,KAAK,CAAC;gBACT,UAAU;gBACV,IAAI;gBACJ,GAAG;aACJ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC7C,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,4EAA4E;AAC5E,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAC9B,EAA+B,EAC/B,SAAiB,EACjB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,CAChC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,EAC5B,EAAE,CAAC,GAAG,CAAC,UAAU,EACjB,gBAAgB,SAAS,CAAC,SAAS,CAAC,eAAe,CACpD,CAAC;IACF,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAE,CAExD,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,qEAAqE;AACrE,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CACjC,EAA+B,EAC/B,WAAyE,EACzE,OAAe;IAEf,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IACrB,MAAM,QAAQ,GAAG,CAAC,GAA6B,EAAE,KAAa,EAAE,EAAE,CAChE,CAAC,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,OAAO,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC;SAC/B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;SAC/B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACvB,wEAAwE;IACxE,EAAE,CAAC,eAAe,CAChB,CAAC,CAAC,uBAAuB,CACvB,SAAS,EACT,CAAC,CAAC,6BAA6B,CAC7B;QACE,CAAC,CAAC,yBAAyB,CACzB,KAAK,CAAC,IAAI,EACV,SAAS,EACT,SAAS,EACT,CAAC,CAAC,6BAA6B,CAAC;YAC9B,QAAQ,CACN,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC,EACpC,cAAc,CACf;YACD,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;YACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC;YAClD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;SAC7B,CAAC,CACH;KACF,EACD,EAAE,CAAC,SAAS,CAAC,KAAK,CACnB,CACF,EACD,WAAW,CACZ,CACF,CAAC;AACN,CAAC"}
|
package/dist/compileModule.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type { Plugin } from "./compileScript.js";
|
|
|
5
5
|
* with the project's own `require`:
|
|
6
6
|
*
|
|
7
7
|
* ```json
|
|
8
|
-
* "backtick": { "plugins": ["@backtickjs/react/plugin"] }
|
|
8
|
+
* "backtick": { "plugins": ["@backtickjs/jsx-react/plugin"] }
|
|
9
9
|
* ```
|
|
10
10
|
*/
|
|
11
11
|
export declare function pluginsFrom(packageJson: string, require: (specifier: string) => unknown): Plugin[];
|
package/dist/compileModule.js
CHANGED
|
@@ -4,7 +4,7 @@ import { transform } from "./transform.js";
|
|
|
4
4
|
* with the project's own `require`:
|
|
5
5
|
*
|
|
6
6
|
* ```json
|
|
7
|
-
* "backtick": { "plugins": ["@backtickjs/react/plugin"] }
|
|
7
|
+
* "backtick": { "plugins": ["@backtickjs/jsx-react/plugin"] }
|
|
8
8
|
* ```
|
|
9
9
|
*/
|
|
10
10
|
export function pluginsFrom(packageJson, require) {
|
package/dist/compileScript.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { EmittedScript } from "./emitScript.js";
|
|
2
2
|
/**
|
|
3
3
|
* A framework's compile step: a module in, the module it compiles to out, with
|
|
4
|
-
* its map into the module it was given.
|
|
4
|
+
* its map into the module it was given. `@backtickjs/jsx-solid`'s `solid()` is one.
|
|
5
5
|
* Synchronous, as a TypeScript transformer is.
|
|
6
6
|
*/
|
|
7
7
|
export type Plugin = (code: string, id: string) => {
|
package/dist/compileScript.js
CHANGED
|
@@ -16,13 +16,15 @@ export function compileScript(ts, script, sourceName, plugins) {
|
|
|
16
16
|
maps.unshift(compiled.map);
|
|
17
17
|
}
|
|
18
18
|
// The module as CommonJS, by TypeScript: its imports `require` calls, its
|
|
19
|
-
// default export `exports.default`, so it runs as a function's body.
|
|
19
|
+
// default export `exports.default`, so it runs as a function's body. As
|
|
20
|
+
// Node's CommonJS, which keeps a dynamic `import()` one, as it would be in
|
|
21
|
+
// the same code written by hand, not a `require` of the module table.
|
|
20
22
|
const dependencies = [];
|
|
21
23
|
const output = ts.transpileModule(code, {
|
|
22
24
|
fileName: "module.jsx",
|
|
23
25
|
compilerOptions: {
|
|
24
26
|
jsx: ts.JsxEmit.Preserve,
|
|
25
|
-
module: ts.ModuleKind.
|
|
27
|
+
module: ts.ModuleKind.NodeNext,
|
|
26
28
|
target: ts.ScriptTarget.ESNext,
|
|
27
29
|
sourceMap: true,
|
|
28
30
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileScript.js","sourceRoot":"","sources":["../src/compileScript.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAoB9C;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,EAA+B,EAC/B,MAAqB,EACrB,UAAkB,EAClB,OAA0B;IAE1B,IAAI,IAAI,GAAG,qBAAqB,MAAM,CAAC,IAAI,MAAM,CAAC;IAClD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACrD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC;QACnD,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,0EAA0E;IAC1E,
|
|
1
|
+
{"version":3,"file":"compileScript.js","sourceRoot":"","sources":["../src/compileScript.ts"],"names":[],"mappings":"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"}
|
package/dist/emitScript.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { addMapping, GenMapping, toEncodedMap } from "@jridgewell/gen-mapping";
|
|
2
2
|
import { eachMapping, TraceMap } from "@jridgewell/trace-mapping";
|
|
3
|
+
import { namesValue } from "./inTypePosition.js";
|
|
4
|
+
import { isClass } from "./isClass.js";
|
|
3
5
|
import { tagRoot } from "./tagRoot.js";
|
|
4
6
|
/**
|
|
5
7
|
* A script parameter's name: its kind and its index in a script's `params`,
|
|
@@ -99,8 +101,10 @@ export function emitScript(ts, script, params, edits) {
|
|
|
99
101
|
: call;
|
|
100
102
|
};
|
|
101
103
|
const visit = (node) => {
|
|
102
|
-
// Types are TypeScript's to strip, after this
|
|
103
|
-
|
|
104
|
+
// Types are TypeScript's to strip, after this, but for the type nodes
|
|
105
|
+
// that name a value, which is rewritten.
|
|
106
|
+
if ((ts.isTypeNode(node) && !namesValue(ts, node)) ||
|
|
107
|
+
asWritten.has(node)) {
|
|
104
108
|
return node;
|
|
105
109
|
}
|
|
106
110
|
if (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node)) {
|
|
@@ -126,10 +130,15 @@ export function emitScript(ts, script, params, edits) {
|
|
|
126
130
|
if (statement === undefined) {
|
|
127
131
|
return file;
|
|
128
132
|
}
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
const classExpression = (node) => ts.setOriginalNode(ts.setTextRange(f.createClassExpression(undefined, node.name, node.typeParameters, node.heritageClauses, node.members), node), node);
|
|
134
|
+
// Where the script stands, so the entry maps to it. A class declaration
|
|
135
|
+
// is its class as an expression.
|
|
136
|
+
const body = ts.isExpressionStatement(statement)
|
|
131
137
|
? ts.visitNode(statement.expression, visit, ts.isExpression)
|
|
132
|
-
:
|
|
138
|
+
: isClass(ts, statement)
|
|
139
|
+
? classExpression(ts.visitNode(statement, visit, ts.isClassDeclaration))
|
|
140
|
+
: ts.visitNode(statement, visit, ts.isBlock);
|
|
141
|
+
const entry = ts.setTextRange(f.createArrowFunction(undefined, undefined, params.map((name) => f.createParameterDeclaration(undefined, undefined, name)), undefined, f.createToken(ts.SyntaxKind.EqualsGreaterThanToken), body), statement);
|
|
133
142
|
return f.updateSourceFile(file, [
|
|
134
143
|
ts.setOriginalNode(f.createExpressionStatement(entry), statement),
|
|
135
144
|
]);
|
package/dist/emitScript.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitScript.js","sourceRoot":"","sources":["../src/emitScript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAIlE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA6BvC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAoB,EAAE,KAAa;IAC3D,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,MAAoB,EACpB,QAA2B,EAC3B,MAAgC;IAEhC,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC9B,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAC9D,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,CAAC,GAAW,EAAU,EAAE;QACnC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC;IACpE,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IACtC,MAAM,EAAE,GAAG,CAAC,UAAyB,EAAE,EAAE,CACvC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;IACzC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAS;YACjB,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;YAC9B,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;SACjD,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IACE,KAAK,KAAK,SAAS;YACnB,UAAU,CAAC,aAAa,EAAE,KAAK,MAAM,CAAC,oBAAoB,EAC1D,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CACxB,EAA+B,EAC/B,MAAoB,EACpB,MAAyB,EACzB,KAAgC;IAEhC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAErC,MAAM,WAAW,GACf,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;QACpB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,EAAE,CAC/B,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,CAAC,IAAU,EAAE,IAAa,EAAiB,EAAE;YAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,KAAK,SAAS;gBACrB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,CAAC,CAAC,oBAAoB,CACpB,KAAK,EACL,SAAS,EACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAChD,CAAC;YACR,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC,CAAC;QACF,wEAAwE;QACxE,gCAAgC;QAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAW,CAAC;QACrC,yEAAyE;QACzE,2EAA2E;QAC3E,mEAAmE;QACnE,yEAAyE;QACzE,2BAA2B;QAC3B,MAAM,OAAO,GAAG,CACd,IAA8C,EACzB,EAAE;YACvB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;YACnE,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;gBACnD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAC1B,CAAC,CAAC,oBAAoB,CACpB,CAAC,CAAC,6BAA6B,CAC7B,CAAC,CAAC,mBAAmB,CACnB,SAAS,EACT,SAAS,EACT,CAAC,CAAC,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAC/D,SAAS,EACT,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,EACnD,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CACxC,CACF,EACD,SAAS,EACT,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACrB,EACD,IAAI,CACL,CAAC;YACF,mEAAmE;YACnE,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClE,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC;gBACxC,CAAC,CAAC,IAAI,CAAC;QACX,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,IAAa,EAAW,EAAE;YACvC
|
|
1
|
+
{"version":3,"file":"emitScript.js","sourceRoot":"","sources":["../src/emitScript.ts"],"names":[],"mappings":"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"}
|
package/dist/inTypePosition.d.ts
CHANGED
package/dist/inTypePosition.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
// Whether a name stands in a type, which names types rather than values: all
|
|
2
|
-
// but what a `typeof` reads, and a
|
|
2
|
+
// but what a `typeof` reads, and what `namesValue` says is a value.
|
|
3
3
|
export function inTypePosition(ts, node) {
|
|
4
4
|
for (let at = node; at.parent !== undefined; at = at.parent) {
|
|
5
5
|
const parent = at.parent;
|
|
6
6
|
if (ts.isTypeQueryNode(parent)) {
|
|
7
7
|
return false;
|
|
8
8
|
}
|
|
9
|
-
if (ts
|
|
10
|
-
ts.isHeritageClause(parent.parent) &&
|
|
11
|
-
ts.isClassLike(parent.parent.parent)) {
|
|
9
|
+
if (namesValue(ts, parent)) {
|
|
12
10
|
return false;
|
|
13
11
|
}
|
|
14
12
|
if (ts.isTypeNode(parent)) {
|
|
@@ -17,4 +15,16 @@ export function inTypePosition(ts, node) {
|
|
|
17
15
|
}
|
|
18
16
|
return false;
|
|
19
17
|
}
|
|
18
|
+
// A type node that names a value: `f<T>`, a function given type arguments,
|
|
19
|
+
// and a class's `extends Base<T>`. `implements` and an interface's `extends`
|
|
20
|
+
// name types.
|
|
21
|
+
export function namesValue(ts, node) {
|
|
22
|
+
if (!ts.isExpressionWithTypeArguments(node)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const clause = node.parent;
|
|
26
|
+
return (!ts.isHeritageClause(clause) ||
|
|
27
|
+
(clause.token === ts.SyntaxKind.ExtendsKeyword &&
|
|
28
|
+
ts.isClassLike(clause.parent)));
|
|
29
|
+
}
|
|
20
30
|
//# sourceMappingURL=inTypePosition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inTypePosition.js","sourceRoot":"","sources":["../src/inTypePosition.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"inTypePosition.js","sourceRoot":"","sources":["../src/inTypePosition.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,oEAAoE;AACpE,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,IAAI,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3B,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;AAED,2EAA2E;AAC3E,6EAA6E;AAC7E,cAAc;AACd,MAAM,UAAU,UAAU,CACxB,EAA+B,EAC/B,IAAa;IAEb,IAAI,CAAC,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,OAAO,CACL,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC5B,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;YAC5C,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CACjC,CAAC;AACJ,CAAC"}
|
package/dist/isClass.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// `class Foo {}`, a script that is a class, written as a declaration: its class
|
|
2
|
+
// as an expression. Modifiers such as `export` or `abstract` have no
|
|
3
|
+
// expression form.
|
|
4
|
+
export function isClass(ts, statement) {
|
|
5
|
+
return ts.isClassDeclaration(statement) && statement.modifiers === undefined;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=isClass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isClass.js","sourceRoot":"","sources":["../src/isClass.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,qEAAqE;AACrE,mBAAmB;AACnB,MAAM,UAAU,OAAO,CACrB,EAA+B,EAC/B,SAAuB;IAEvB,OAAO,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC;AAC/E,CAAC"}
|
package/dist/printVirtualCode.js
CHANGED
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
import { buildMappings } from "./buildMappings.js";
|
|
2
|
+
import { isClientImportDeclaration, virtualClientImport, } from "./clientImports.js";
|
|
2
3
|
import { mayAwait } from "./rewriteScript.js";
|
|
3
4
|
import { segmentsToString } from "./segmentsToString.js";
|
|
4
5
|
import { virtualScript } from "./virtualScript.js";
|
|
5
6
|
export function printVirtualCode(ts, parsedFile, rewrittenFile) {
|
|
6
7
|
const { sourceFile } = parsedFile;
|
|
7
8
|
const segments = [];
|
|
9
|
+
// What's rewritten, client imports and scripts, in the order it's written.
|
|
10
|
+
const rewrites = [
|
|
11
|
+
...sourceFile.statements
|
|
12
|
+
.filter((statement) => isClientImportDeclaration(ts, statement))
|
|
13
|
+
.map((declaration) => ({
|
|
14
|
+
node: declaration,
|
|
15
|
+
render: () => virtualClientImport(ts, sourceFile, declaration),
|
|
16
|
+
})),
|
|
17
|
+
...parsedFile.scripts.map((script) => ({
|
|
18
|
+
node: script.sourceNode,
|
|
19
|
+
render: () => renderScript(ts, sourceFile, rewrittenFile, script),
|
|
20
|
+
})),
|
|
21
|
+
].sort((a, b) => a.node.getStart(sourceFile) - b.node.getStart(sourceFile));
|
|
8
22
|
let cursor = 0;
|
|
9
|
-
for (const
|
|
10
|
-
const start =
|
|
23
|
+
for (const { node, render } of rewrites) {
|
|
24
|
+
const start = node.getStart(sourceFile);
|
|
11
25
|
segments.push(...renderVerbatim(sourceFile.text, cursor, start - cursor));
|
|
12
|
-
segments.push(...
|
|
13
|
-
cursor =
|
|
26
|
+
segments.push(...render());
|
|
27
|
+
cursor = node.getEnd();
|
|
14
28
|
}
|
|
15
29
|
segments.push(...renderVerbatim(sourceFile.text, cursor, sourceFile.text.length - cursor));
|
|
16
30
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printVirtualCode.js","sourceRoot":"","sources":["../src/printVirtualCode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAsB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"printVirtualCode.js","sourceRoot":"","sources":["../src/printVirtualCode.ts"],"names":[],"mappings":"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"}
|
package/dist/rewriteScript.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import type { BindingResolution, ResolvedParam } from "./resolveBindings.js";
|
|
|
7
7
|
/** What `cs.create` is handed for a script: which it is, and what it runs. */
|
|
8
8
|
export interface RuntimeScript {
|
|
9
9
|
id: string;
|
|
10
|
-
kind: "function" | "expression" | "block";
|
|
10
|
+
kind: "function" | "class" | "expression" | "block";
|
|
11
11
|
params: ts.Expression;
|
|
12
12
|
args: ts.Expression;
|
|
13
13
|
emitted: EmittedScript;
|
package/dist/rewriteScript.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { emitScript, paramName, scriptEdits, } from "./emitScript.js";
|
|
2
|
+
import { isClass } from "./isClass.js";
|
|
2
3
|
import { isComponentTag } from "./isComponentTag.js";
|
|
3
4
|
import { call } from "./nodeFactory.js";
|
|
4
5
|
import { tagRoot } from "./tagRoot.js";
|
|
@@ -71,26 +72,33 @@ export function rewriteScript(ts, clientScript, fileHash, bindings, params = [])
|
|
|
71
72
|
code: diagnostic.code,
|
|
72
73
|
})));
|
|
73
74
|
}
|
|
74
|
-
// A script is one expression or one block: statements go in
|
|
75
|
+
// A script is one expression, one class or one block: statements go in
|
|
76
|
+
// braces. A class is written as a declaration, `class Foo {}`.
|
|
75
77
|
const [statement] = fileWithPlaceholders.statements;
|
|
76
78
|
if (fileWithPlaceholders.statements.length !== 1 ||
|
|
77
|
-
!(ts.isExpressionStatement(statement) ||
|
|
79
|
+
!(ts.isExpressionStatement(statement) ||
|
|
80
|
+
ts.isBlock(statement) ||
|
|
81
|
+
isClass(ts, statement))) {
|
|
78
82
|
return leftAsWritten([
|
|
79
83
|
{
|
|
80
84
|
range: scriptRange,
|
|
81
|
-
message: "A `cs` client script is one expression or one block:
|
|
82
|
-
"statements in braces, e.g. cs`{ a(); b(); }`.",
|
|
85
|
+
message: "A `cs` client script is one expression, one class or one block: " +
|
|
86
|
+
"write statements in braces, e.g. cs`{ a(); b(); }`.",
|
|
83
87
|
category: ts.DiagnosticCategory.Error,
|
|
84
88
|
code: 0,
|
|
85
89
|
},
|
|
86
90
|
]);
|
|
87
91
|
}
|
|
92
|
+
const expression = ts.isExpressionStatement(statement)
|
|
93
|
+
? skipParentheses(ts, statement.expression)
|
|
94
|
+
: undefined;
|
|
88
95
|
const kind = ts.isBlock(statement)
|
|
89
96
|
? "block"
|
|
90
|
-
: ts.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
97
|
+
: expression === undefined || ts.isClassExpression(expression)
|
|
98
|
+
? "class"
|
|
99
|
+
: ts.isArrowFunction(expression) || ts.isFunctionExpression(expression)
|
|
100
|
+
? "function"
|
|
101
|
+
: "expression";
|
|
94
102
|
// A `${…}` written where the script has text rather than code is no splice.
|
|
95
103
|
const unspliced = unsplicedSpans(ts, clientScript);
|
|
96
104
|
if (unspliced.length > 0) {
|
|
@@ -102,11 +110,11 @@ export function rewriteScript(ts, clientScript, fileHash, bindings, params = [])
|
|
|
102
110
|
if (refused.length > 0) {
|
|
103
111
|
return leftAsWritten(refused);
|
|
104
112
|
}
|
|
105
|
-
// Which script this is (see `
|
|
113
|
+
// Which script this is (see `ScriptModule.id`): its line from 1, and its
|
|
106
114
|
// column from 0.
|
|
107
115
|
const { line, character } = sourceFile.getLineAndCharacterOfPosition(scriptRange.start);
|
|
108
116
|
const id = `${fileHash}:${line + 1}:${character}`;
|
|
109
|
-
// The function's parameters, as `
|
|
117
|
+
// The function's parameters, as `ScriptModule.params` describes them, and
|
|
110
118
|
// what a run passes: for each splice and tag, the host expression written
|
|
111
119
|
// there.
|
|
112
120
|
const objectLiteral = (properties) => ts.factory.createObjectLiteralExpression(Object.entries(properties).map(([name, value]) => ts.factory.createPropertyAssignment(name, value)), false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewriteScript.js","sourceRoot":"","sources":["../src/rewriteScript.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rewriteScript.js","sourceRoot":"","sources":["../src/rewriteScript.ts"],"names":[],"mappings":"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"}
|
package/dist/transform.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface TransformOptions {
|
|
|
9
9
|
readonly sourceName?: (fileName: string) => string;
|
|
10
10
|
/**
|
|
11
11
|
* The framework's compile steps, run in series over each script: Solid's
|
|
12
|
-
*
|
|
12
|
+
* `@backtickjs/jsx-solid`'s `solid()`. None by default, which leaves a script's JSX for a
|
|
13
13
|
* bundle's own plugins.
|
|
14
14
|
*/
|
|
15
15
|
readonly plugins?: readonly Plugin[];
|
package/dist/transform.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isClientImportDeclaration, packageOf, runtimeClientImport, installedVersion, } from "./clientImports.js";
|
|
1
2
|
import { compileScript } from "./compileScript.js";
|
|
2
3
|
import { parseSourceFile } from "./parseFile.js";
|
|
3
4
|
import { rewriteFile } from "./rewriteFile.js";
|
|
@@ -5,7 +6,8 @@ import { createCall, moduleDeclaration } from "./rewriteScript.js";
|
|
|
5
6
|
export function transform(ts, addDiagnostic, { sourceName = (fileName) => fileName, plugins = [] } = {}) {
|
|
6
7
|
return (context) => (sourceFile) => {
|
|
7
8
|
const parsedFile = parseSourceFile(ts, sourceFile);
|
|
8
|
-
if (parsedFile.scripts.length === 0
|
|
9
|
+
if (parsedFile.scripts.length === 0 &&
|
|
10
|
+
!sourceFile.statements.some((statement) => isClientImportDeclaration(ts, statement))) {
|
|
9
11
|
return sourceFile;
|
|
10
12
|
}
|
|
11
13
|
const rewrittenFile = rewriteFile(ts, parsedFile);
|
|
@@ -36,6 +38,26 @@ export function transform(ts, addDiagnostic, { sourceName = (fileName) => fileNa
|
|
|
36
38
|
}
|
|
37
39
|
}
|
|
38
40
|
const visit = (node) => {
|
|
41
|
+
// The server never loads a client import's module: the declaration is
|
|
42
|
+
// replaced by its client imports, or by nothing where the package isn't
|
|
43
|
+
// installed.
|
|
44
|
+
if (isClientImportDeclaration(ts, node)) {
|
|
45
|
+
const { moduleSpecifier } = node;
|
|
46
|
+
const version = installedVersion(ts, moduleSpecifier.text, sourceFile.fileName);
|
|
47
|
+
if (version === undefined) {
|
|
48
|
+
addDiagnostic?.({
|
|
49
|
+
file: sourceFile,
|
|
50
|
+
start: moduleSpecifier.getStart(sourceFile),
|
|
51
|
+
length: moduleSpecifier.getWidth(sourceFile),
|
|
52
|
+
messageText: `${packageOf(moduleSpecifier.text)} isn't installed where this file finds packages: install the version the client app has.`,
|
|
53
|
+
category: ts.DiagnosticCategory.Error,
|
|
54
|
+
code: 0,
|
|
55
|
+
source: "backtick",
|
|
56
|
+
});
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
return runtimeClientImport(ts, node, version);
|
|
60
|
+
}
|
|
39
61
|
if (ts.isTaggedTemplateExpression(node) &&
|
|
40
62
|
ts.isIdentifier(node.tag) &&
|
|
41
63
|
node.tag.text === "cs" &&
|
|
@@ -48,8 +70,9 @@ export function transform(ts, addDiagnostic, { sourceName = (fileName) => fileNa
|
|
|
48
70
|
return ts.visitEachChild(node, visit, context);
|
|
49
71
|
};
|
|
50
72
|
const visited = ts.visitNode(sourceFile, visit, ts.isSourceFile);
|
|
51
|
-
// After the imports,
|
|
52
|
-
|
|
73
|
+
// After the imports, client imports among them, before anything that
|
|
74
|
+
// could run a script.
|
|
75
|
+
const imports = visited.statements.findIndex((statement) => !ts.isImportDeclaration(ts.getOriginalNode(statement)));
|
|
53
76
|
const at = imports === -1 ? visited.statements.length : imports;
|
|
54
77
|
return context.factory.updateSourceFile(visited, [
|
|
55
78
|
...visited.statements.slice(0, at),
|
package/dist/transform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAe,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAiBnE,MAAM,UAAU,SAAS,CACvB,EAA+B,EAC/B,aAAmD,EACnD,EAAE,UAAU,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,KAAuB,EAAE;IAE5E,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACnD,
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.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.
|
|
3
|
+
"version": "0.2.0",
|
|
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.
|
|
49
|
+
"@backtickjs/core": "^0.2.0",
|
|
50
50
|
"prettier": "^3.6.2",
|
|
51
51
|
"typescript": "^6.0.3"
|
|
52
52
|
},
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import type ts from "typescript";
|
|
2
|
+
import type { Segment } from "./segmentsToString.js";
|
|
3
|
+
|
|
4
|
+
// `import { View } from "react-native" with { backtick: "client" }`, an import
|
|
5
|
+
// of what the client provides. The server never loads the module: each name
|
|
6
|
+
// is a client import of it, typed `Client<…>` by the module's own declarations.
|
|
7
|
+
// A type-only one is left to TypeScript, which refuses attributes on it.
|
|
8
|
+
|
|
9
|
+
export function isClientImportDeclaration(
|
|
10
|
+
ts: typeof import("typescript"),
|
|
11
|
+
node: ts.Node,
|
|
12
|
+
): node is ts.ImportDeclaration & { moduleSpecifier: ts.StringLiteral } {
|
|
13
|
+
return (
|
|
14
|
+
ts.isImportDeclaration(node) &&
|
|
15
|
+
node.importClause?.isTypeOnly !== true &&
|
|
16
|
+
(node.attributes?.elements.some(
|
|
17
|
+
(attribute) =>
|
|
18
|
+
attribute.name.text === "backtick" &&
|
|
19
|
+
ts.isStringLiteral(attribute.value) &&
|
|
20
|
+
attribute.value.text === "client",
|
|
21
|
+
) ??
|
|
22
|
+
false)
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// One name a client import binds, by the module's name for it: `default` for
|
|
27
|
+
// a default import, `*` for a namespace.
|
|
28
|
+
interface Binding {
|
|
29
|
+
name: string;
|
|
30
|
+
// where the module's name is written, if it is
|
|
31
|
+
written: ts.ModuleExportName | undefined;
|
|
32
|
+
local: ts.Identifier;
|
|
33
|
+
isType: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function bindingsOf(
|
|
37
|
+
ts: typeof import("typescript"),
|
|
38
|
+
declaration: ts.ImportDeclaration,
|
|
39
|
+
): Binding[] {
|
|
40
|
+
const clause = declaration.importClause;
|
|
41
|
+
const named = clause?.namedBindings;
|
|
42
|
+
const bindings: Binding[] = [];
|
|
43
|
+
if (clause?.name !== undefined) {
|
|
44
|
+
const local = clause.name;
|
|
45
|
+
bindings.push({
|
|
46
|
+
name: "default",
|
|
47
|
+
written: undefined,
|
|
48
|
+
local,
|
|
49
|
+
isType: false,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (named !== undefined && ts.isNamespaceImport(named)) {
|
|
53
|
+
const local = named.name;
|
|
54
|
+
bindings.push({ name: "*", written: undefined, local, isType: false });
|
|
55
|
+
}
|
|
56
|
+
if (named !== undefined && ts.isNamedImports(named)) {
|
|
57
|
+
for (const element of named.elements) {
|
|
58
|
+
const written = element.propertyName ?? element.name;
|
|
59
|
+
bindings.push({
|
|
60
|
+
name: written.text,
|
|
61
|
+
written,
|
|
62
|
+
local: element.name,
|
|
63
|
+
isType: element.isTypeOnly,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return bindings;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// For the typechecker, each name mapped back to where it's written: the
|
|
71
|
+
// values destructured from the module's exports as client imports, so the
|
|
72
|
+
// editor goes from a name to where the module declares it; a namespace a
|
|
73
|
+
// client import of the whole module; a type imported from the module.
|
|
74
|
+
export function virtualClientImport(
|
|
75
|
+
ts: typeof import("typescript"),
|
|
76
|
+
sourceFile: ts.SourceFile,
|
|
77
|
+
declaration: ts.ImportDeclaration,
|
|
78
|
+
): Segment[] {
|
|
79
|
+
const at = (node: ts.Node): Segment => [
|
|
80
|
+
node.getText(sourceFile),
|
|
81
|
+
undefined,
|
|
82
|
+
node.getStart(sourceFile),
|
|
83
|
+
node.getEnd() - node.getStart(sourceFile),
|
|
84
|
+
];
|
|
85
|
+
const from = at(declaration.moduleSpecifier);
|
|
86
|
+
const bindings = bindingsOf(ts, declaration);
|
|
87
|
+
const values = bindings.filter(({ name, isType }) => !isType && name !== "*");
|
|
88
|
+
const statements: Segment[][] = [];
|
|
89
|
+
if (values.length > 0) {
|
|
90
|
+
statements.push([
|
|
91
|
+
"declare const { ",
|
|
92
|
+
...values.flatMap(({ written, local }, index): Segment[] => [
|
|
93
|
+
...(index > 0 ? [", "] : []),
|
|
94
|
+
...(written === undefined
|
|
95
|
+
? ["default: "]
|
|
96
|
+
: written.getText(sourceFile) === local.text
|
|
97
|
+
? []
|
|
98
|
+
: [at(written), ": "]),
|
|
99
|
+
at(local),
|
|
100
|
+
]),
|
|
101
|
+
' }: import("@backtickjs/core").ClientModule<typeof import(',
|
|
102
|
+
from,
|
|
103
|
+
")>;",
|
|
104
|
+
]);
|
|
105
|
+
}
|
|
106
|
+
for (const { name, written, local, isType } of bindings) {
|
|
107
|
+
if (name === "*") {
|
|
108
|
+
statements.push([
|
|
109
|
+
"declare const ",
|
|
110
|
+
at(local),
|
|
111
|
+
': import("@backtickjs/core").Client<typeof import(',
|
|
112
|
+
from,
|
|
113
|
+
")>;",
|
|
114
|
+
]);
|
|
115
|
+
} else if (isType) {
|
|
116
|
+
statements.push([
|
|
117
|
+
"import type { ",
|
|
118
|
+
at(written!),
|
|
119
|
+
" as ",
|
|
120
|
+
at(local),
|
|
121
|
+
" } from ",
|
|
122
|
+
from,
|
|
123
|
+
";",
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return statements.flatMap((statement, index) =>
|
|
128
|
+
index === 0 ? statement : [" ", ...statement],
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// The package a module specifier is in: `react` for `react/jsx-runtime`.
|
|
133
|
+
export function packageOf(specifier: string): string {
|
|
134
|
+
const segments = specifier.split("/");
|
|
135
|
+
return segments.slice(0, specifier.startsWith("@") ? 2 : 1).join("/");
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// The version of its package a client import is typed against: as installed
|
|
139
|
+
// where the importing file finds it, up its directories as `tsc` finds a config.
|
|
140
|
+
export function installedVersion(
|
|
141
|
+
ts: typeof import("typescript"),
|
|
142
|
+
specifier: string,
|
|
143
|
+
fileName: string,
|
|
144
|
+
): string | undefined {
|
|
145
|
+
const manifest = ts.findConfigFile(
|
|
146
|
+
ts.sys.resolvePath(fileName),
|
|
147
|
+
ts.sys.fileExists,
|
|
148
|
+
`node_modules/${packageOf(specifier)}/package.json`,
|
|
149
|
+
);
|
|
150
|
+
if (manifest === undefined) return undefined;
|
|
151
|
+
const { version } = JSON.parse(ts.sys.readFile(manifest)!) as {
|
|
152
|
+
version: string;
|
|
153
|
+
};
|
|
154
|
+
return version;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// For the runtime, a constant per value it names, in the declaration's place:
|
|
158
|
+
// `const View = { "@backtickjs": "ClientImport", name: "View", from:
|
|
159
|
+
// "react-native", version: "0.86.3" }`, core's `ClientImport`.
|
|
160
|
+
export function runtimeClientImport(
|
|
161
|
+
ts: typeof import("typescript"),
|
|
162
|
+
declaration: ts.ImportDeclaration & { moduleSpecifier: ts.StringLiteral },
|
|
163
|
+
version: string,
|
|
164
|
+
): ts.Statement[] {
|
|
165
|
+
const f = ts.factory;
|
|
166
|
+
const property = (key: string | ts.PropertyName, value: string) =>
|
|
167
|
+
f.createPropertyAssignment(key, f.createStringLiteral(value));
|
|
168
|
+
return bindingsOf(ts, declaration)
|
|
169
|
+
.filter(({ isType }) => !isType)
|
|
170
|
+
.map(({ name, local }) =>
|
|
171
|
+
// Still the import it replaces, which `transform` places scripts after.
|
|
172
|
+
ts.setOriginalNode(
|
|
173
|
+
f.createVariableStatement(
|
|
174
|
+
undefined,
|
|
175
|
+
f.createVariableDeclarationList(
|
|
176
|
+
[
|
|
177
|
+
f.createVariableDeclaration(
|
|
178
|
+
local.text,
|
|
179
|
+
undefined,
|
|
180
|
+
undefined,
|
|
181
|
+
f.createObjectLiteralExpression([
|
|
182
|
+
property(
|
|
183
|
+
f.createStringLiteral("@backtickjs"),
|
|
184
|
+
"ClientImport",
|
|
185
|
+
),
|
|
186
|
+
property("name", name),
|
|
187
|
+
property("from", declaration.moduleSpecifier.text),
|
|
188
|
+
property("version", version),
|
|
189
|
+
]),
|
|
190
|
+
),
|
|
191
|
+
],
|
|
192
|
+
ts.NodeFlags.Const,
|
|
193
|
+
),
|
|
194
|
+
),
|
|
195
|
+
declaration,
|
|
196
|
+
),
|
|
197
|
+
);
|
|
198
|
+
}
|
package/src/compileModule.ts
CHANGED
package/src/compileScript.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { EmittedScript } from "./emitScript.js";
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* A framework's compile step: a module in, the module it compiles to out, with
|
|
7
|
-
* its map into the module it was given.
|
|
7
|
+
* its map into the module it was given. `@backtickjs/jsx-solid`'s `solid()` is one.
|
|
8
8
|
* Synchronous, as a TypeScript transformer is.
|
|
9
9
|
*/
|
|
10
10
|
export type Plugin = (
|
|
@@ -40,13 +40,15 @@ export function compileScript(
|
|
|
40
40
|
maps.unshift(compiled.map);
|
|
41
41
|
}
|
|
42
42
|
// The module as CommonJS, by TypeScript: its imports `require` calls, its
|
|
43
|
-
// default export `exports.default`, so it runs as a function's body.
|
|
43
|
+
// default export `exports.default`, so it runs as a function's body. As
|
|
44
|
+
// Node's CommonJS, which keeps a dynamic `import()` one, as it would be in
|
|
45
|
+
// the same code written by hand, not a `require` of the module table.
|
|
44
46
|
const dependencies: string[] = [];
|
|
45
47
|
const output = ts.transpileModule(code, {
|
|
46
48
|
fileName: "module.jsx",
|
|
47
49
|
compilerOptions: {
|
|
48
50
|
jsx: ts.JsxEmit.Preserve,
|
|
49
|
-
module: ts.ModuleKind.
|
|
51
|
+
module: ts.ModuleKind.NodeNext,
|
|
50
52
|
target: ts.ScriptTarget.ESNext,
|
|
51
53
|
sourceMap: true,
|
|
52
54
|
},
|
package/src/emitScript.ts
CHANGED
|
@@ -3,6 +3,8 @@ import { eachMapping, TraceMap } from "@jridgewell/trace-mapping";
|
|
|
3
3
|
import type ts from "typescript";
|
|
4
4
|
import type { ClientScript } from "./parseFile.js";
|
|
5
5
|
import type { BindingResolution, ResolvedParam } from "./resolveBindings.js";
|
|
6
|
+
import { namesValue } from "./inTypePosition.js";
|
|
7
|
+
import { isClass } from "./isClass.js";
|
|
6
8
|
import { tagRoot } from "./tagRoot.js";
|
|
7
9
|
|
|
8
10
|
/** A script as the client runs it, and where its code came from. */
|
|
@@ -176,8 +178,12 @@ export function emitScript(
|
|
|
176
178
|
: call;
|
|
177
179
|
};
|
|
178
180
|
const visit = (node: ts.Node): ts.Node => {
|
|
179
|
-
// Types are TypeScript's to strip, after this
|
|
180
|
-
|
|
181
|
+
// Types are TypeScript's to strip, after this, but for the type nodes
|
|
182
|
+
// that name a value, which is rewritten.
|
|
183
|
+
if (
|
|
184
|
+
(ts.isTypeNode(node) && !namesValue(ts, node)) ||
|
|
185
|
+
asWritten.has(node)
|
|
186
|
+
) {
|
|
181
187
|
return node;
|
|
182
188
|
}
|
|
183
189
|
if (ts.isJsxElement(node) || ts.isJsxSelfClosingElement(node)) {
|
|
@@ -207,7 +213,29 @@ export function emitScript(
|
|
|
207
213
|
if (statement === undefined) {
|
|
208
214
|
return file;
|
|
209
215
|
}
|
|
210
|
-
|
|
216
|
+
const classExpression = (node: ts.ClassDeclaration) =>
|
|
217
|
+
ts.setOriginalNode(
|
|
218
|
+
ts.setTextRange(
|
|
219
|
+
f.createClassExpression(
|
|
220
|
+
undefined,
|
|
221
|
+
node.name,
|
|
222
|
+
node.typeParameters,
|
|
223
|
+
node.heritageClauses,
|
|
224
|
+
node.members,
|
|
225
|
+
),
|
|
226
|
+
node,
|
|
227
|
+
),
|
|
228
|
+
node,
|
|
229
|
+
);
|
|
230
|
+
// Where the script stands, so the entry maps to it. A class declaration
|
|
231
|
+
// is its class as an expression.
|
|
232
|
+
const body = ts.isExpressionStatement(statement)
|
|
233
|
+
? ts.visitNode(statement.expression, visit, ts.isExpression)
|
|
234
|
+
: isClass(ts, statement)
|
|
235
|
+
? classExpression(
|
|
236
|
+
ts.visitNode(statement, visit, ts.isClassDeclaration),
|
|
237
|
+
)
|
|
238
|
+
: ts.visitNode(statement, visit, ts.isBlock);
|
|
211
239
|
const entry = ts.setTextRange(
|
|
212
240
|
f.createArrowFunction(
|
|
213
241
|
undefined,
|
|
@@ -217,9 +245,7 @@ export function emitScript(
|
|
|
217
245
|
),
|
|
218
246
|
undefined,
|
|
219
247
|
f.createToken(ts.SyntaxKind.EqualsGreaterThanToken),
|
|
220
|
-
|
|
221
|
-
? ts.visitNode(statement.expression, visit, ts.isExpression)
|
|
222
|
-
: ts.visitNode(statement, visit, ts.isBlock),
|
|
248
|
+
body,
|
|
223
249
|
),
|
|
224
250
|
statement,
|
|
225
251
|
);
|
package/src/inTypePosition.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type ts from "typescript";
|
|
2
2
|
|
|
3
3
|
// Whether a name stands in a type, which names types rather than values: all
|
|
4
|
-
// but what a `typeof` reads, and a
|
|
4
|
+
// but what a `typeof` reads, and what `namesValue` says is a value.
|
|
5
5
|
export function inTypePosition(
|
|
6
6
|
ts: typeof import("typescript"),
|
|
7
7
|
node: ts.Identifier,
|
|
@@ -11,11 +11,7 @@ export function inTypePosition(
|
|
|
11
11
|
if (ts.isTypeQueryNode(parent)) {
|
|
12
12
|
return false;
|
|
13
13
|
}
|
|
14
|
-
if (
|
|
15
|
-
ts.isExpressionWithTypeArguments(parent) &&
|
|
16
|
-
ts.isHeritageClause(parent.parent) &&
|
|
17
|
-
ts.isClassLike(parent.parent.parent)
|
|
18
|
-
) {
|
|
14
|
+
if (namesValue(ts, parent)) {
|
|
19
15
|
return false;
|
|
20
16
|
}
|
|
21
17
|
if (ts.isTypeNode(parent)) {
|
|
@@ -24,3 +20,21 @@ export function inTypePosition(
|
|
|
24
20
|
}
|
|
25
21
|
return false;
|
|
26
22
|
}
|
|
23
|
+
|
|
24
|
+
// A type node that names a value: `f<T>`, a function given type arguments,
|
|
25
|
+
// and a class's `extends Base<T>`. `implements` and an interface's `extends`
|
|
26
|
+
// name types.
|
|
27
|
+
export function namesValue(
|
|
28
|
+
ts: typeof import("typescript"),
|
|
29
|
+
node: ts.Node,
|
|
30
|
+
): boolean {
|
|
31
|
+
if (!ts.isExpressionWithTypeArguments(node)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const clause = node.parent;
|
|
35
|
+
return (
|
|
36
|
+
!ts.isHeritageClause(clause) ||
|
|
37
|
+
(clause.token === ts.SyntaxKind.ExtendsKeyword &&
|
|
38
|
+
ts.isClassLike(clause.parent))
|
|
39
|
+
);
|
|
40
|
+
}
|
package/src/isClass.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type ts from "typescript";
|
|
2
|
+
|
|
3
|
+
// `class Foo {}`, a script that is a class, written as a declaration: its class
|
|
4
|
+
// as an expression. Modifiers such as `export` or `abstract` have no
|
|
5
|
+
// expression form.
|
|
6
|
+
export function isClass(
|
|
7
|
+
ts: typeof import("typescript"),
|
|
8
|
+
statement: ts.Statement,
|
|
9
|
+
): statement is ts.ClassDeclaration {
|
|
10
|
+
return ts.isClassDeclaration(statement) && statement.modifiers === undefined;
|
|
11
|
+
}
|
package/src/printVirtualCode.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type ts from "typescript";
|
|
2
2
|
import { buildMappings, type SourceMapping } from "./buildMappings.js";
|
|
3
|
+
import {
|
|
4
|
+
isClientImportDeclaration,
|
|
5
|
+
virtualClientImport,
|
|
6
|
+
} from "./clientImports.js";
|
|
3
7
|
import type { ClientScript, ParsedFile, Splice } from "./parseFile.js";
|
|
4
8
|
import type { RewrittenFile } from "./rewriteFile.js";
|
|
5
9
|
import { mayAwait } from "./rewriteScript.js";
|
|
@@ -19,12 +23,26 @@ export function printVirtualCode(
|
|
|
19
23
|
const { sourceFile } = parsedFile;
|
|
20
24
|
const segments: Segment[] = [];
|
|
21
25
|
|
|
26
|
+
// What's rewritten, client imports and scripts, in the order it's written.
|
|
27
|
+
const rewrites = [
|
|
28
|
+
...sourceFile.statements
|
|
29
|
+
.filter((statement) => isClientImportDeclaration(ts, statement))
|
|
30
|
+
.map((declaration) => ({
|
|
31
|
+
node: declaration,
|
|
32
|
+
render: () => virtualClientImport(ts, sourceFile, declaration),
|
|
33
|
+
})),
|
|
34
|
+
...parsedFile.scripts.map((script) => ({
|
|
35
|
+
node: script.sourceNode,
|
|
36
|
+
render: () => renderScript(ts, sourceFile, rewrittenFile, script),
|
|
37
|
+
})),
|
|
38
|
+
].sort((a, b) => a.node.getStart(sourceFile) - b.node.getStart(sourceFile));
|
|
39
|
+
|
|
22
40
|
let cursor = 0;
|
|
23
|
-
for (const
|
|
24
|
-
const start =
|
|
41
|
+
for (const { node, render } of rewrites) {
|
|
42
|
+
const start = node.getStart(sourceFile);
|
|
25
43
|
segments.push(...renderVerbatim(sourceFile.text, cursor, start - cursor));
|
|
26
|
-
segments.push(...
|
|
27
|
-
cursor =
|
|
44
|
+
segments.push(...render());
|
|
45
|
+
cursor = node.getEnd();
|
|
28
46
|
}
|
|
29
47
|
segments.push(
|
|
30
48
|
...renderVerbatim(sourceFile.text, cursor, sourceFile.text.length - cursor),
|
package/src/rewriteScript.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
paramName,
|
|
8
8
|
scriptEdits,
|
|
9
9
|
} from "./emitScript.js";
|
|
10
|
+
import { isClass } from "./isClass.js";
|
|
10
11
|
import { isComponentTag } from "./isComponentTag.js";
|
|
11
12
|
import { call } from "./nodeFactory.js";
|
|
12
13
|
import type { ClientScript } from "./parseFile.js";
|
|
@@ -18,7 +19,7 @@ import { tagRoot } from "./tagRoot.js";
|
|
|
18
19
|
export interface RuntimeScript {
|
|
19
20
|
id: string;
|
|
20
21
|
// the module's `kind`
|
|
21
|
-
kind: "function" | "expression" | "block";
|
|
22
|
+
kind: "function" | "class" | "expression" | "block";
|
|
22
23
|
// the module's `params`, an array literal of literals
|
|
23
24
|
params: ts.Expression;
|
|
24
25
|
// the script's `args`, an array literal of host expressions
|
|
@@ -153,30 +154,39 @@ export function rewriteScript(
|
|
|
153
154
|
);
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
// A script is one expression or one block: statements go in
|
|
157
|
+
// A script is one expression, one class or one block: statements go in
|
|
158
|
+
// braces. A class is written as a declaration, `class Foo {}`.
|
|
157
159
|
const [statement] = fileWithPlaceholders.statements;
|
|
158
160
|
if (
|
|
159
161
|
fileWithPlaceholders.statements.length !== 1 ||
|
|
160
|
-
!(
|
|
162
|
+
!(
|
|
163
|
+
ts.isExpressionStatement(statement!) ||
|
|
164
|
+
ts.isBlock(statement!) ||
|
|
165
|
+
isClass(ts, statement!)
|
|
166
|
+
)
|
|
161
167
|
) {
|
|
162
168
|
return leftAsWritten([
|
|
163
169
|
{
|
|
164
170
|
range: scriptRange,
|
|
165
171
|
message:
|
|
166
|
-
"A `cs` client script is one expression or one block:
|
|
167
|
-
"statements in braces, e.g. cs`{ a(); b(); }`.",
|
|
172
|
+
"A `cs` client script is one expression, one class or one block: " +
|
|
173
|
+
"write statements in braces, e.g. cs`{ a(); b(); }`.",
|
|
168
174
|
category: ts.DiagnosticCategory.Error,
|
|
169
175
|
code: 0,
|
|
170
176
|
},
|
|
171
177
|
]);
|
|
172
178
|
}
|
|
173
179
|
|
|
180
|
+
const expression = ts.isExpressionStatement(statement!)
|
|
181
|
+
? skipParentheses(ts, statement.expression)
|
|
182
|
+
: undefined;
|
|
174
183
|
const kind = ts.isBlock(statement!)
|
|
175
184
|
? "block"
|
|
176
|
-
: ts.
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
185
|
+
: expression === undefined || ts.isClassExpression(expression)
|
|
186
|
+
? "class"
|
|
187
|
+
: ts.isArrowFunction(expression) || ts.isFunctionExpression(expression)
|
|
188
|
+
? "function"
|
|
189
|
+
: "expression";
|
|
180
190
|
|
|
181
191
|
// A `${…}` written where the script has text rather than code is no splice.
|
|
182
192
|
const unspliced = unsplicedSpans(ts, clientScript);
|
|
@@ -191,14 +201,14 @@ export function rewriteScript(
|
|
|
191
201
|
return leftAsWritten(refused);
|
|
192
202
|
}
|
|
193
203
|
|
|
194
|
-
// Which script this is (see `
|
|
204
|
+
// Which script this is (see `ScriptModule.id`): its line from 1, and its
|
|
195
205
|
// column from 0.
|
|
196
206
|
const { line, character } = sourceFile.getLineAndCharacterOfPosition(
|
|
197
207
|
scriptRange.start,
|
|
198
208
|
);
|
|
199
209
|
const id = `${fileHash}:${line + 1}:${character}`;
|
|
200
210
|
|
|
201
|
-
// The function's parameters, as `
|
|
211
|
+
// The function's parameters, as `ScriptModule.params` describes them, and
|
|
202
212
|
// what a run passes: for each splice and tag, the host expression written
|
|
203
213
|
// there.
|
|
204
214
|
const objectLiteral = (properties: Record<string, ts.Expression>) =>
|
package/src/transform.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type ts from "typescript";
|
|
2
|
+
import {
|
|
3
|
+
isClientImportDeclaration,
|
|
4
|
+
packageOf,
|
|
5
|
+
runtimeClientImport,
|
|
6
|
+
installedVersion,
|
|
7
|
+
} from "./clientImports.js";
|
|
2
8
|
import { compileScript, type Plugin } from "./compileScript.js";
|
|
3
9
|
import { parseSourceFile } from "./parseFile.js";
|
|
4
10
|
import { rewriteFile } from "./rewriteFile.js";
|
|
@@ -13,7 +19,7 @@ export interface TransformOptions {
|
|
|
13
19
|
readonly sourceName?: (fileName: string) => string;
|
|
14
20
|
/**
|
|
15
21
|
* The framework's compile steps, run in series over each script: Solid's
|
|
16
|
-
*
|
|
22
|
+
* `@backtickjs/jsx-solid`'s `solid()`. None by default, which leaves a script's JSX for a
|
|
17
23
|
* bundle's own plugins.
|
|
18
24
|
*/
|
|
19
25
|
readonly plugins?: readonly Plugin[];
|
|
@@ -26,7 +32,12 @@ export function transform(
|
|
|
26
32
|
): ts.TransformerFactory<ts.SourceFile> {
|
|
27
33
|
return (context) => (sourceFile) => {
|
|
28
34
|
const parsedFile = parseSourceFile(ts, sourceFile);
|
|
29
|
-
if (
|
|
35
|
+
if (
|
|
36
|
+
parsedFile.scripts.length === 0 &&
|
|
37
|
+
!sourceFile.statements.some((statement) =>
|
|
38
|
+
isClientImportDeclaration(ts, statement),
|
|
39
|
+
)
|
|
40
|
+
) {
|
|
30
41
|
return sourceFile;
|
|
31
42
|
}
|
|
32
43
|
|
|
@@ -64,6 +75,30 @@ export function transform(
|
|
|
64
75
|
}
|
|
65
76
|
|
|
66
77
|
const visit: ts.Visitor = (node) => {
|
|
78
|
+
// The server never loads a client import's module: the declaration is
|
|
79
|
+
// replaced by its client imports, or by nothing where the package isn't
|
|
80
|
+
// installed.
|
|
81
|
+
if (isClientImportDeclaration(ts, node)) {
|
|
82
|
+
const { moduleSpecifier } = node;
|
|
83
|
+
const version = installedVersion(
|
|
84
|
+
ts,
|
|
85
|
+
moduleSpecifier.text,
|
|
86
|
+
sourceFile.fileName,
|
|
87
|
+
);
|
|
88
|
+
if (version === undefined) {
|
|
89
|
+
addDiagnostic?.({
|
|
90
|
+
file: sourceFile,
|
|
91
|
+
start: moduleSpecifier.getStart(sourceFile),
|
|
92
|
+
length: moduleSpecifier.getWidth(sourceFile),
|
|
93
|
+
messageText: `${packageOf(moduleSpecifier.text)} isn't installed where this file finds packages: install the version the client app has.`,
|
|
94
|
+
category: ts.DiagnosticCategory.Error,
|
|
95
|
+
code: 0,
|
|
96
|
+
source: "backtick",
|
|
97
|
+
});
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
return runtimeClientImport(ts, node, version);
|
|
101
|
+
}
|
|
67
102
|
if (
|
|
68
103
|
ts.isTaggedTemplateExpression(node) &&
|
|
69
104
|
ts.isIdentifier(node.tag) &&
|
|
@@ -82,9 +117,10 @@ export function transform(
|
|
|
82
117
|
visit,
|
|
83
118
|
ts.isSourceFile,
|
|
84
119
|
) as ts.SourceFile;
|
|
85
|
-
// After the imports,
|
|
120
|
+
// After the imports, client imports among them, before anything that
|
|
121
|
+
// could run a script.
|
|
86
122
|
const imports = visited.statements.findIndex(
|
|
87
|
-
(statement) => !ts.isImportDeclaration(statement),
|
|
123
|
+
(statement) => !ts.isImportDeclaration(ts.getOriginalNode(statement)),
|
|
88
124
|
);
|
|
89
125
|
const at = imports === -1 ? visited.statements.length : imports;
|
|
90
126
|
return context.factory.updateSourceFile(visited, [
|