@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 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":"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"}
@@ -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[];
@@ -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) {
@@ -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. Solid's adapter's `solid()` is one.
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) => {
@@ -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.CommonJS,
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":"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"}
1
+ {"version":3,"file":"compileScript.js","sourceRoot":"","sources":["../src/compileScript.ts"],"names":[],"mappings":"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"}
@@ -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
- if (ts.isTypeNode(node) || asWritten.has(node)) {
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
- // Where the script stands, so the entry maps to it.
130
- const entry = ts.setTextRange(f.createArrowFunction(undefined, undefined, params.map((name) => f.createParameterDeclaration(undefined, undefined, name)), undefined, f.createToken(ts.SyntaxKind.EqualsGreaterThanToken), ts.isExpressionStatement(statement)
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
- : ts.visitNode(statement, visit, ts.isBlock)), statement);
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
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"emitScript.js","sourceRoot":"","sources":["../src/emitScript.ts"],"names":[],"mappings":"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"}
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,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,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,sEAAsE;YACtE,yCAAyC;YACzC,IACE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC9C,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EACnB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxD,CAAC;YACD,8CAA8C;YAC9C,IAAI,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,OAAO,CAAC,CAAC,wBAAwB,CAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CACxB,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,eAAe,GAAG,CAAC,IAAyB,EAAE,EAAE,CACpD,EAAE,CAAC,eAAe,CAChB,EAAE,CAAC,YAAY,CACb,CAAC,CAAC,qBAAqB,CACrB,SAAS,EACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,OAAO,CACb,EACD,IAAI,CACL,EACD,IAAI,CACL,CAAC;QACJ,wEAAwE;QACxE,iCAAiC;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC;YAC9C,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC;YAC5D,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC;gBACtB,CAAC,CAAC,eAAe,CACb,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,CACtD;gBACH,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAC3B,CAAC,CAAC,mBAAmB,CACnB,SAAS,EACT,SAAS,EACT,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,CAAC,CAAC,0BAA0B,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CACzD,EACD,SAAS,EACT,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,EACnD,IAAI,CACL,EACD,SAAS,CACV,CAAC;QACF,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAC9B,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;SAClE,CAAC,CAAC;IACL,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,oBAAoB,EAAE;QAC7D,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,eAAe,EAAE;YACf,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;YAC9B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;YAC5B,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ;YACxB,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,IAAI;SACrB;QACD,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;KACxC,CAAC,CAAC;IACH,sEAAsE;IACtE,qBAAqB;IACrB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU;SAC3B,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC;SAC3C,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxB,OAAO;QACL,IAAI;QACJ,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,aAAc,EAAE,MAAM,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,SAAS,KAAK,CAAC,GAAW,EAAE,MAAoB;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACvE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;QAChD,MAAM,EAAE,GAAG,UAAU,CAAC,6BAA6B,CACjD,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAE,GAAG,MAAM,CAAC,CACtD,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;IACrD,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,WAAW,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE;QACzC,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,EAAE;gBACf,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO,CAAC,aAAa;oBAC3B,MAAM,EAAE,OAAO,CAAC,eAAe;iBAChC;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,0DAA0D;QAC1D,UAAU,CAAC,IAAI,EAAE;YACf,SAAS,EAAE;gBACT,IAAI,EAAE,OAAO,CAAC,aAAa;gBAC3B,MAAM,EAAE,OAAO,CAAC,eAAe;aAChC;YACD,MAAM,EAAE,UAAU,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC;SACjE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,2DAA2D;IAC3D,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY;QAC9B,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC9B,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ;KACtC,CAAC,CAAC;AACL,CAAC"}
@@ -1,2 +1,3 @@
1
1
  import type ts from "typescript";
2
2
  export declare function inTypePosition(ts: typeof import("typescript"), node: ts.Identifier): boolean;
3
+ export declare function namesValue(ts: typeof import("typescript"), node: ts.Node): boolean;
@@ -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 class's `extends`.
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.isExpressionWithTypeArguments(parent) &&
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,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"}
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"}
@@ -0,0 +1,2 @@
1
+ import type ts from "typescript";
2
+ export declare function isClass(ts: typeof import("typescript"), statement: ts.Statement): statement is ts.ClassDeclaration;
@@ -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"}
@@ -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 script of parsedFile.scripts) {
10
- const start = script.sourceNode.getStart(sourceFile);
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(...renderScript(ts, sourceFile, rewrittenFile, script));
13
- cursor = script.sourceNode.getEnd();
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":"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"}
1
+ {"version":3,"file":"printVirtualCode.js","sourceRoot":"","sources":["../src/printVirtualCode.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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 braces.
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) || ts.isBlock(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: write " +
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.isArrowFunction(skipParentheses(ts, statement.expression)) ||
91
- ts.isFunctionExpression(skipParentheses(ts, statement.expression))
92
- ? "function"
93
- : "expression";
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 `ClientModule.id`): its line from 1, and its
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 `ClientModule.params` describes them, and
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":"AAGA,OAAO,EAEL,UAAU,EACV,SAAS,EACT,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAIxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAcvC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAA+B,EAC/B,IAAY,EACZ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAiB,EACnC,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAkB;IAE3C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;IACrB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC,uBAAuB,CAC9B,SAAS,EACT,CAAC,CAAC,6BAA6B,CAC7B;QACE,CAAC,CAAC,yBAAyB,CACzB,IAAI,EACJ,SAAS,EACT,SAAS,EACT,CAAC,CAAC,6BAA6B,CAC7B;YACE,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,CAAC,wBAAwB,CACxB,cAAc,EACd,CAAC,CAAC,4BAA4B,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CACzD;YACD,CAAC,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC5C,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SACjD,EACD,IAAI,CACL,CACF;KACF,EACD,EAAE,CAAC,SAAS,CAAC,KAAK,CACnB,CACF,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,UAAU,CACxB,EAA+B,EAC/B,UAAkB,EAClB,EAAE,IAAI,EAAiB;IAEvB,OAAO,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC;QACvC,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAWD,MAAM,UAAU,aAAa,CAC3B,EAA+B,EAC/B,YAA0B,EAC1B,QAAgB,EAChB,QAA2B,EAC3B,SAAmC,EAAE;IAErC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,GAAG,YAAY,CAAC;IAEtE,sEAAsE;IACtE,0DAA0D;IAC1D,MAAM,aAAa,GAAG,CAAC,WAAyB,EAAmB,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,IAAI;QACnB,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,WAAW,GAAgB;QAC/B,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;QACtC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE;KACzB,CAAC;IAEF,0EAA0E;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,WAAW,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CACtC,CAAC,UAAU,EAAE,EAAE,CACb,YAAY,CAAC,oBAAoB,CAAC,KAAK,CACrC,UAAU,CAAC,KAAM,EACjB,UAAU,CAAC,KAAM,GAAG,CAAC,CACtB,KAAK,KAAK,CACd,CAAC;IACF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC;YACnB;gBACE,KAAK,EAAE;oBACL,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,eAAe,CAAC,KAAM,CAAC;oBAC1D,GAAG,EAAE,YAAY,CAAC,cAAc,CAAC,eAAe,CAAC,KAAM,GAAG,CAAC,CAAC;iBAC7D;gBACD,OAAO,EACL,kEAAkE;oBAClE,uDAAuD;gBACzD,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK;gBACrC,IAAI,EAAE,CAAC;aACR;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,aAAa,CAClB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC/B,KAAK,EAAE;gBACL,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC,KAAM,CAAC;gBACrD,GAAG,EAAE,YAAY,CAAC,cAAc,CAC9B,UAAU,CAAC,KAAM,GAAG,UAAU,CAAC,MAAO,CACvC;aACF;YACD,OAAO,EAAE,EAAE,CAAC,4BAA4B,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;YACtE,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK;YACrC,IAAI,EAAE,UAAU,CAAC,IAAI;SACtB,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,MAAM,CAAC,SAAS,CAAC,GAAG,oBAAoB,CAAC,UAAU,CAAC;IACpD,IACE,oBAAoB,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,SAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC,EACjE,CAAC;QACD,OAAO,aAAa,CAAC;YACnB;gBACE,KAAK,EAAE,WAAW;gBAClB,OAAO,EACL,6DAA6D;oBAC7D,+CAA+C;gBACjD,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK;gBACrC,IAAI,EAAE,CAAC;aACR;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,SAAU,CAAC;QACjC,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3D,EAAE,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;YACpE,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,YAAY,CAAC;IAEnB,4EAA4E;IAC5E,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,oEAAoE;IACpE,4DAA4D;IAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,yEAAyE;IACzE,iBAAiB;IACjB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,6BAA6B,CAClE,WAAW,CAAC,KAAK,CAClB,CAAC;IACF,MAAM,EAAE,GAAG,GAAG,QAAQ,IAAI,IAAI,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;IAElD,0EAA0E;IAC1E,0EAA0E;IAC1E,SAAS;IACT,MAAM,aAAa,GAAG,CAAC,UAAyC,EAAE,EAAE,CAClE,EAAE,CAAC,OAAO,CAAC,6BAA6B,CACtC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAC/C,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CACjD,EACD,KAAK,CACN,CAAC;IACJ,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACnB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC;oBACnB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACtB,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAC/C,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAC1B,KAAK,CACN;iBACF,CAAC,CAAC;YACL,KAAK,SAAS;gBACZ,OAAO,aAAa,CAAC;oBACnB,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;oBACvB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;iBACvB,CAAC,CAAC;QACP,CAAC;IACH,CAAC,CAAC,EACF,KAAK,CACN,CAAC;IACF,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,4BAA4B,CACzD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACvB,KAAK,CAAC,IAAI,KAAK,SAAS;QACtB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC,UAAU,CAAC,CAClD,EACD,KAAK,CACN,CAAC;IAEF,MAAM,OAAO,GAAG,UAAU,CACxB,EAAE,EACF,YAAY,EACZ,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EACrB,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAC5C,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE;QACxE,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,8DAA8D;AAC9D,MAAM,UAAU,QAAQ,CACtB,EAA+B,EAC/B,IAAa;IAEb,KAAK,IAAI,KAAK,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAI,CAAC;QACtD,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,6BAA6B,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,CACL,EAAE;iBACC,YAAY,CAAC,MAAoC,CAAC;gBACnD,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;gBACpE,KAAK,CACN,CAAC;QACJ,CAAC;QACD,KAAK,GAAG,MAAM,CAAC;QACf,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,kEAAkE;AAClE,SAAS,cAAc,CACrB,EAA+B,EAC/B,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAgB;IAEjD,MAAM,KAAK,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC;QACxD,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa;QACnC,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,EAAE,CAAC,KAAK,SAAS,CAAC;SAC/D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,KAAK,EAAE;YACL,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,UAAU;YACrD,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,WAAW;SACxD;QACD,OAAO,EACL,+DAA+D;YAC/D,gDAAgD;QAClD,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK;QACrC,IAAI,EAAE,CAAC;KACR,CAAC,CAAC,CAAC;AACR,CAAC;AAED,yEAAyE;AACzE,8EAA8E;AAC9E,2BAA2B;AAC3B,SAAS,QAAQ,CACf,EAA+B,EAC/B,MAAoB,EACpB,QAA2B;IAE3B,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,OAAe,EAAQ,EAAE;QACtD,WAAW,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;YACjC,OAAO;YACP,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK;YACrC,IAAI,EAAE,CAAC;SACR,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,MAAM,IAAI,GACR,CAAC,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC7B,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACzB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC9B,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,IAAI,CAAC,IAAI;YACX,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,oEAAoE;YACpE,2DAA2D;YAC3D,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,CACJ,IAAI,EACJ,iEAAiE;oBAC/D,gBAAgB,CACnB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,sEAAsE;gBACtE,gEAAgE;gBAChE,qDAAqD;gBACrD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,MAAM,CACJ,IAAI,EACJ,KAAK,IAAI,CAAC,IAAI,0BACZ,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,sBACvC,UAAU,MAAM,GAAG,CACpB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,0EAA0E;QAC1E,2EAA2E;QAC3E,iCAAiC;QACjC,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;YACrE,4DAA4D;YAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAClE,IAAI,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,MAAM,CACJ,IAAI,EACJ,8DAA8D;oBAC5D,cAAc,CACjB,CAAC;YACJ,CAAC;iBAAM,IACL,IAAI,KAAK,SAAS;gBAClB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC1B,oEAAoE;gBACpE,qBAAqB;gBACrB,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpD,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EACnB,CAAC;gBACD,MAAM,CACJ,IAAI,EACJ,MAAM,OAAO,uDAAuD;oBAClE,iCAAiC,OAAO,MAAM,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACnC,oEAAoE;IACpE,oCAAoC;IACpC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,CACJ,GAAG,EACH,kBAAkB,MAAM,CAAC,UAAU,CAAC,IAAI,iBAAiB;oBACvD,sDAAsD;oBACtD,QAAQ,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CACvC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,oEAAoE;AACpE,SAAS,YAAY,CAAC,IAAY;IAChC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW;YACd,OAAO,gCAAgC,CAAC;QAC1C,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,+BAA+B,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,+BAA+B,CAAC;QACzC;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,yDAAyD;AACzD,SAAS,gBAAgB,CAAC,IAAmB;IAC3C,OAAQ,IAAyD;SAC9D,gBAAgB,CAAC;AACtB,CAAC;AAED,SAAS,eAAe,CACtB,EAA+B,EAC/B,IAAmB;IAEnB,OAAO,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"rewriteScript.js","sourceRoot":"","sources":["../src/rewriteScript.ts"],"names":[],"mappings":"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"}
@@ -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
- * adapter's `solid()`. None by default, which leaves a script's JSX for a
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, before anything that could run a script.
52
- const imports = visited.statements.findIndex((statement) => !ts.isImportDeclaration(statement));
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),
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"AACA,OAAO,EACL,yBAAyB,EACzB,SAAS,EACT,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,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,IACE,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAC/B,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACxC,yBAAyB,CAAC,EAAE,EAAE,SAAS,CAAC,CACzC,EACD,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,aAAa,GAAG,WAAW,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAElD,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,UAAU,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;gBACnD,aAAa,CAAC;oBACZ,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK;oBAC7B,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK;oBACrD,WAAW,EAAE,UAAU,CAAC,OAAO;oBAC/B,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,MAAM,EAAE,UAAU;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,uDAAuD;QACvD,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC3C,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC5D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBACnE,MAAM,UAAU,GAAG,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CACT,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,EAC3C,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CACpC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAe,CAAC,IAAI,EAAE,EAAE;YACjC,sEAAsE;YACtE,wEAAwE;YACxE,aAAa;YACb,IAAI,yBAAyB,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;gBACjC,MAAM,OAAO,GAAG,gBAAgB,CAC9B,EAAE,EACF,eAAe,CAAC,IAAI,EACpB,UAAU,CAAC,QAAQ,CACpB,CAAC;gBACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,aAAa,EAAE,CAAC;wBACd,IAAI,EAAE,UAAU;wBAChB,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAC3C,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAC5C,WAAW,EAAE,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,0FAA0F;wBACzI,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK;wBACrC,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,UAAU;qBACnB,CAAC,CAAC;oBACH,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,OAAO,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YACD,IACE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC;gBACnC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI;gBACtB,IAAI,CAAC,GAAG,IAAI,CAAC,EACb,CAAC;gBACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;gBACrE,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAC1B,UAAU,EACV,KAAK,EACL,EAAE,CAAC,YAAY,CACC,CAAC;QACnB,qEAAqE;QACrE,sBAAsB;QACtB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAC1C,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CACtE,CAAC;QACF,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAChE,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE;YAC/C,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAClC,GAAG,OAAO;YACV,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;SAChC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backtickjs/compiler",
3
- "version": "0.1.10",
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.1.10",
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
+ }
@@ -16,7 +16,7 @@ interface PluginModule {
16
16
  * with the project's own `require`:
17
17
  *
18
18
  * ```json
19
- * "backtick": { "plugins": ["@backtickjs/react/plugin"] }
19
+ * "backtick": { "plugins": ["@backtickjs/jsx-react/plugin"] }
20
20
  * ```
21
21
  */
22
22
  export function pluginsFrom(
@@ -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. Solid's adapter's `solid()` is one.
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.CommonJS,
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
- if (ts.isTypeNode(node) || asWritten.has(node)) {
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
- // Where the script stands, so the entry maps to it.
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
- ts.isExpressionStatement(statement)
221
- ? ts.visitNode(statement.expression, visit, ts.isExpression)
222
- : ts.visitNode(statement, visit, ts.isBlock),
248
+ body,
223
249
  ),
224
250
  statement,
225
251
  );
@@ -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 class's `extends`.
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
+ }
@@ -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 script of parsedFile.scripts) {
24
- const start = script.sourceNode.getStart(sourceFile);
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(...renderScript(ts, sourceFile, rewrittenFile, script));
27
- cursor = script.sourceNode.getEnd();
44
+ segments.push(...render());
45
+ cursor = node.getEnd();
28
46
  }
29
47
  segments.push(
30
48
  ...renderVerbatim(sourceFile.text, cursor, sourceFile.text.length - cursor),
@@ -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 braces.
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
- !(ts.isExpressionStatement(statement!) || ts.isBlock(statement!))
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: write " +
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.isArrowFunction(skipParentheses(ts, statement.expression)) ||
177
- ts.isFunctionExpression(skipParentheses(ts, statement.expression))
178
- ? "function"
179
- : "expression";
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 `ClientModule.id`): its line from 1, and its
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 `ClientModule.params` describes them, and
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
- * adapter's `solid()`. None by default, which leaves a script's JSX for a
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 (parsedFile.scripts.length === 0) {
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, before anything that could run a script.
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, [