@praxisjs/vite-plugin 4.0.6 → 4.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/decorators.d.ts +34 -1
  3. package/dist/decorators.d.ts.map +1 -1
  4. package/dist/decorators.js +469 -25
  5. package/dist/decorators.js.map +1 -1
  6. package/dist/hmr.d.ts +5 -0
  7. package/dist/hmr.d.ts.map +1 -0
  8. package/dist/hmr.js +106 -0
  9. package/dist/hmr.js.map +1 -0
  10. package/dist/index.d.ts +24 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +21 -19
  13. package/dist/index.js.map +1 -1
  14. package/dist/keyed-lists.d.ts +28 -0
  15. package/dist/keyed-lists.d.ts.map +1 -0
  16. package/dist/keyed-lists.js +251 -0
  17. package/dist/keyed-lists.js.map +1 -0
  18. package/dist/libraries.d.ts +56 -0
  19. package/dist/libraries.d.ts.map +1 -0
  20. package/dist/libraries.js +281 -0
  21. package/dist/libraries.js.map +1 -0
  22. package/dist/mapped-output.d.ts +34 -0
  23. package/dist/mapped-output.d.ts.map +1 -0
  24. package/dist/mapped-output.js +119 -0
  25. package/dist/mapped-output.js.map +1 -0
  26. package/dist/templates.d.ts +56 -0
  27. package/dist/templates.d.ts.map +1 -0
  28. package/dist/templates.js +708 -0
  29. package/dist/templates.js.map +1 -0
  30. package/package.json +13 -5
  31. package/src/decorators.ts +496 -27
  32. package/src/hmr.ts +108 -0
  33. package/src/index.ts +39 -26
  34. package/src/keyed-lists.ts +285 -0
  35. package/src/libraries.ts +328 -0
  36. package/src/mapped-output.ts +128 -0
  37. package/src/templates.ts +733 -0
  38. package/dist/__tests__/css-esbuild-error.test.d.ts +0 -2
  39. package/dist/__tests__/css-esbuild-error.test.d.ts.map +0 -1
  40. package/dist/__tests__/css-esbuild-error.test.js +0 -25
  41. package/dist/__tests__/css-esbuild-error.test.js.map +0 -1
  42. package/dist/__tests__/css-tsconfig-error.test.d.ts +0 -2
  43. package/dist/__tests__/css-tsconfig-error.test.d.ts.map +0 -1
  44. package/dist/__tests__/css-tsconfig-error.test.js +0 -39
  45. package/dist/__tests__/css-tsconfig-error.test.js.map +0 -1
  46. package/dist/__tests__/css-tsconfig-no-config.test.d.ts +0 -2
  47. package/dist/__tests__/css-tsconfig-no-config.test.d.ts.map +0 -1
  48. package/dist/__tests__/css-tsconfig-no-config.test.js +0 -38
  49. package/dist/__tests__/css-tsconfig-no-config.test.js.map +0 -1
  50. package/dist/__tests__/css.test.d.ts +0 -2
  51. package/dist/__tests__/css.test.d.ts.map +0 -1
  52. package/dist/__tests__/css.test.js +0 -288
  53. package/dist/__tests__/css.test.js.map +0 -1
  54. package/dist/__tests__/index.test.d.ts +0 -2
  55. package/dist/__tests__/index.test.d.ts.map +0 -1
  56. package/dist/__tests__/index.test.js +0 -301
  57. package/dist/__tests__/index.test.js.map +0 -1
  58. package/src/__tests__/css-esbuild-error.test.ts +0 -39
  59. package/src/__tests__/css-tsconfig-error.test.ts +0 -53
  60. package/src/__tests__/css-tsconfig-no-config.test.ts +0 -52
  61. package/src/__tests__/css.test.ts +0 -381
  62. package/src/__tests__/index.test.ts +0 -351
  63. package/tsconfig.json +0 -11
@@ -0,0 +1,56 @@
1
+ import type { Plugin, Rolldown } from "vite";
2
+ export interface LibraryOptions {
3
+ /** Where the package keeps the sources its build output comes from (tsc's `rootDir`), relative to its package.json. */
4
+ rootDir?: string;
5
+ /** Where its build output is (tsc's `outDir`). With `rootDir`, the package is compiled from its sources. */
6
+ outDir?: string;
7
+ }
8
+ /**
9
+ * Packages compiled like the app's own code, by name (`"@scope/*"` names a whole scope): `true` or
10
+ * options opt a package in, `false` leaves it as published even when its package.json opts in.
11
+ */
12
+ export type LibrariesOption = Record<string, boolean | LibraryOptions>;
13
+ /** What the app compiles in its own files, and so in the libraries' too. */
14
+ export interface LibraryTransforms {
15
+ keyedLists: boolean;
16
+ /** The ids the template compiler takes, or null when it is off. */
17
+ templates: RegExp | null;
18
+ }
19
+ export declare class Libraries {
20
+ readonly option: LibrariesOption;
21
+ /** The package each directory belongs to, or null outside of any. */
22
+ private readonly packages;
23
+ /** Names of the libraries compiled from their sources, found by `discover`. */
24
+ private readonly sourceNames;
25
+ constructor(option?: LibrariesOption);
26
+ clear(): void;
27
+ private setting;
28
+ /** The package whose package.json is in `dir`, or null when it has none with a name. */
29
+ private packageIn;
30
+ /** The package `file` belongs to. */
31
+ private packageOf;
32
+ /** Whether module `id` is a file of a library compiled like the app's own code. */
33
+ isLibraryFile(id: string): boolean;
34
+ /** The source a compiled file of a library comes from, or null when it is not compiled from its sources. */
35
+ sourceFile(file: string): string | null;
36
+ /** Whether resolving `specifier` from `importer` may land in a compiled file that has a source. */
37
+ mayResolveToSource(specifier: string, importer: string | undefined): boolean;
38
+ /** The libraries the app depends on, directly or through other libraries, and those the option names. */
39
+ discover(root: string): string[];
40
+ /** The package `name` resolves to from `dir`, as Node looks it up. */
41
+ private installed;
42
+ }
43
+ /**
44
+ * The same transforms, for Vite's dependency optimizer: it bundles the dependencies it pre-bundles
45
+ * before any Vite plugin sees them. Vite keys its cache of pre-bundled dependencies on the names of
46
+ * these plugins, so the first one carries a hash of what they do.
47
+ */
48
+ export declare function prebundlePlugins(libraries: Libraries, transforms: LibraryTransforms): Rolldown.Plugin[];
49
+ /**
50
+ * Lets the other PraxisJS plugins compile the libraries that opt in: runs them inside Vite's
51
+ * dependency optimizer too, keeps the libraries out of SSR externals (Node would load them as
52
+ * published), loads their sources in place of their build output, and pins the JSX runtime their
53
+ * files compile against.
54
+ */
55
+ export declare function librariesPlugin(libraries: Libraries, transforms: LibraryTransforms): Plugin;
56
+ //# sourceMappingURL=libraries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../src/libraries.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAS7C,MAAM,WAAW,cAAc;IAC7B,uHAAuH;IACvH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4GAA4G;IAC5G,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC;AAEvE,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAqDD,qBAAa,SAAS;IAMR,QAAQ,CAAC,MAAM,EAAE,eAAe;IAL5C,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAClE,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAE5B,MAAM,GAAE,eAAoB;IAEjD,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,OAAO;IAMf,wFAAwF;IACxF,OAAO,CAAC,SAAS;IAsBjB,qCAAqC;IACrC,OAAO,CAAC,SAAS;IAiBjB,mFAAmF;IACnF,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIlC,4GAA4G;IAC5G,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWvC,mGAAmG;IACnG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAS5E,yGAAyG;IACzG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IA0BhC,sEAAsE;IACtE,OAAO,CAAC,SAAS;CAYlB;AAyBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,GAAG,QAAQ,CAAC,MAAM,EAAE,CAmDvG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,GAAG,MAAM,CAuB3F"}
@@ -0,0 +1,281 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, readFileSync, realpathSync } from "node:fs";
3
+ import { dirname, join, resolve, sep } from "node:path";
4
+ import { HELPERS_ID, helpersModule, transformDecorators } from "./decorators.js";
5
+ import { transformKeyedLists } from "./keyed-lists.js";
6
+ import { MappedOutput } from "./mapped-output.js";
7
+ import { transformTemplates } from "./templates.js";
8
+ // What tsc compiles to each output extension.
9
+ const SOURCE_EXTENSIONS = new Map([
10
+ [".js", [".tsx", ".ts", ".jsx", ".js"]],
11
+ [".jsx", [".tsx", ".jsx"]],
12
+ [".mjs", [".mts", ".mjs"]],
13
+ ]);
14
+ const JSX_FILE = /\.[jt]sx$/;
15
+ const JSX_PRAGMA = "/* @jsxImportSource @praxisjs/jsx */ ";
16
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
17
+ const keys = (value) => (isRecord(value) ? Object.keys(value) : []);
18
+ const cleanId = (id) => id.split("?")[0];
19
+ function readJson(file) {
20
+ try {
21
+ const json = JSON.parse(readFileSync(file, "utf8"));
22
+ return isRecord(json) ? json : null;
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /** `@scope/name/sub` → `@scope/name`, `name/sub` → `name`. */
29
+ function packageName(specifier) {
30
+ const parts = specifier.split("/");
31
+ return specifier.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
32
+ }
33
+ const inside = (dir, path) => path.startsWith(dir.endsWith(sep) ? dir : dir + sep);
34
+ export class Libraries {
35
+ option;
36
+ /** The package each directory belongs to, or null outside of any. */
37
+ packages = new Map();
38
+ /** Names of the libraries compiled from their sources, found by `discover`. */
39
+ sourceNames = new Set();
40
+ constructor(option = {}) {
41
+ this.option = option;
42
+ }
43
+ clear() {
44
+ this.packages.clear();
45
+ }
46
+ setting(name) {
47
+ if (name in this.option)
48
+ return this.option[name];
49
+ const scope = `${name.split("/")[0]}/*`;
50
+ return name.startsWith("@") && scope in this.option ? this.option[scope] : undefined;
51
+ }
52
+ /** The package whose package.json is in `dir`, or null when it has none with a name. */
53
+ packageIn(dir) {
54
+ const json = readJson(join(dir, "package.json"));
55
+ if (json === null || typeof json.name !== "string")
56
+ return null;
57
+ const field = isRecord(json.praxisjs) ? json.praxisjs : {};
58
+ const setting = this.setting(json.name);
59
+ const library = setting === undefined ? field.optimize === true : setting !== false;
60
+ const options = isRecord(setting) ? setting : field;
61
+ const path = (value) => {
62
+ if (typeof value !== "string")
63
+ return null;
64
+ const full = resolve(dir, value);
65
+ return inside(dir, full) ? full + sep : null;
66
+ };
67
+ const rootDir = path(options.rootDir);
68
+ const outDir = path(options.outDir);
69
+ return {
70
+ dir,
71
+ library,
72
+ source: library && rootDir !== null && outDir !== null ? { rootDir, outDir } : null,
73
+ deps: [...new Set([...keys(json.dependencies), ...keys(json.peerDependencies), ...keys(json.optionalDependencies)])],
74
+ };
75
+ }
76
+ /** The package `file` belongs to. */
77
+ packageOf(file) {
78
+ const visited = [];
79
+ let found = null;
80
+ for (let dir = dirname(file);; dir = dirname(dir)) {
81
+ const cached = this.packages.get(dir);
82
+ if (cached !== undefined) {
83
+ found = cached;
84
+ break;
85
+ }
86
+ visited.push(dir);
87
+ found = this.packageIn(dir);
88
+ if (found !== null || dirname(dir) === dir)
89
+ break;
90
+ }
91
+ for (const dir of visited)
92
+ this.packages.set(dir, found);
93
+ return found;
94
+ }
95
+ /** Whether module `id` is a file of a library compiled like the app's own code. */
96
+ isLibraryFile(id) {
97
+ return !id.startsWith("\0") && this.packageOf(cleanId(id))?.library === true;
98
+ }
99
+ /** The source a compiled file of a library comes from, or null when it is not compiled from its sources. */
100
+ sourceFile(file) {
101
+ const source = this.packageOf(file)?.source;
102
+ if (source == null || !inside(source.outDir, file))
103
+ return null;
104
+ const relative = file.slice(source.outDir.length);
105
+ const extension = /\.[^./\\]+$/.exec(relative)?.[0] ?? "";
106
+ const candidates = SOURCE_EXTENSIONS.get(extension);
107
+ if (candidates === undefined)
108
+ return null;
109
+ const base = join(source.rootDir, relative.slice(0, -extension.length));
110
+ return candidates.map((candidate) => base + candidate).find((candidate) => existsSync(candidate)) ?? null;
111
+ }
112
+ /** Whether resolving `specifier` from `importer` may land in a compiled file that has a source. */
113
+ mayResolveToSource(specifier, importer) {
114
+ if (specifier.startsWith("\0"))
115
+ return false;
116
+ if (!specifier.startsWith(".") && !specifier.startsWith("/"))
117
+ return this.sourceNames.has(packageName(specifier));
118
+ if (importer === undefined || importer.startsWith("\0"))
119
+ return false;
120
+ const file = cleanId(importer);
121
+ const source = this.packageOf(file)?.source;
122
+ return source != null && inside(source.outDir, file);
123
+ }
124
+ /** The libraries the app depends on, directly or through other libraries, and those the option names. */
125
+ discover(root) {
126
+ const found = new Set();
127
+ const visited = new Set();
128
+ const json = readJson(join(root, "package.json"));
129
+ const deps = json === null ? [] : [
130
+ ...keys(json.dependencies), ...keys(json.devDependencies), ...keys(json.peerDependencies), ...keys(json.optionalDependencies),
131
+ ];
132
+ const queue = [{ dir: root, deps }];
133
+ // Grows while it is walked: an array iterator reads the length at every step.
134
+ for (const next of queue) {
135
+ for (const dep of next.deps) {
136
+ const installed = this.installed(dep, next.dir);
137
+ if (installed?.library !== true)
138
+ continue;
139
+ found.add(dep);
140
+ if (installed.source !== null)
141
+ this.sourceNames.add(dep);
142
+ if (visited.has(installed.dir))
143
+ continue;
144
+ visited.add(installed.dir);
145
+ queue.push({ dir: installed.dir, deps: installed.deps });
146
+ }
147
+ }
148
+ for (const [name, value] of Object.entries(this.option)) {
149
+ if (value !== false && !name.endsWith("/*"))
150
+ found.add(name);
151
+ }
152
+ return [...found];
153
+ }
154
+ /** The package `name` resolves to from `dir`, as Node looks it up. */
155
+ installed(name, dir) {
156
+ for (let current = dir;; current = dirname(current)) {
157
+ const candidate = join(current, "node_modules", name);
158
+ if (existsSync(join(candidate, "package.json"))) {
159
+ const real = realpathSync(candidate);
160
+ const info = this.packageIn(real);
161
+ this.packages.set(real, info);
162
+ return info;
163
+ }
164
+ if (dirname(current) === current)
165
+ return null;
166
+ }
167
+ }
168
+ }
169
+ // The compiled file a module resolves to, swapped for its source when the library has one.
170
+ async function resolveToSource(libraries, resolveSkippingSelf, source, importer) {
171
+ if (!libraries.mayResolveToSource(source, importer))
172
+ return null;
173
+ const resolved = await resolveSkippingSelf(source, importer);
174
+ if (resolved === null || (resolved.external !== undefined && resolved.external !== false))
175
+ return resolved;
176
+ const file = cleanId(resolved.id);
177
+ const sourceFile = libraries.sourceFile(file);
178
+ return sourceFile === null ? resolved : { ...resolved, id: sourceFile + resolved.id.slice(file.length) };
179
+ }
180
+ // The JSX runtime the library is written against, pinned in a comment that leads the file: the app
181
+ // configures the one of its own files, and the dependency optimizer has none.
182
+ function pinJsxRuntime(libraries, code, id) {
183
+ const file = cleanId(id);
184
+ if (!JSX_FILE.test(file) || code.includes("@jsxImportSource") || !libraries.isLibraryFile(id))
185
+ return null;
186
+ const out = new MappedOutput(code);
187
+ out.insert(JSX_PRAGMA, 0);
188
+ out.copy(0, code.length);
189
+ return out.result(file);
190
+ }
191
+ /**
192
+ * The same transforms, for Vite's dependency optimizer: it bundles the dependencies it pre-bundles
193
+ * before any Vite plugin sees them. Vite keys its cache of pre-bundled dependencies on the names of
194
+ * these plugins, so the first one carries a hash of what they do.
195
+ */
196
+ export function prebundlePlugins(libraries, transforms) {
197
+ const isLibrary = (id) => libraries.isLibraryFile(id);
198
+ const fingerprint = createHash("sha256")
199
+ .update(JSON.stringify({ option: libraries.option, keyedLists: transforms.keyedLists, templates: transforms.templates?.toString() }))
200
+ .digest("hex")
201
+ .slice(0, 8);
202
+ const plugins = [{
203
+ name: `praxisjs:libraries(${fingerprint})`,
204
+ resolveId(source, importer, options) {
205
+ return resolveToSource(libraries, (s, i) => this.resolve(s, i, { ...options, skipSelf: true }), source, importer);
206
+ },
207
+ }];
208
+ if (transforms.keyedLists) {
209
+ plugins.push({
210
+ name: "praxisjs:keyed-lists",
211
+ transform(code, id) {
212
+ if (!JSX_FILE.test(cleanId(id)) || !isLibrary(id))
213
+ return null;
214
+ const result = transformKeyedLists(code, cleanId(id));
215
+ return result?.map == null ? null : { code: result.code, map: result.map };
216
+ },
217
+ });
218
+ }
219
+ plugins.push({
220
+ name: "praxisjs:decorators",
221
+ resolveId(id) {
222
+ return id === HELPERS_ID ? `\0${HELPERS_ID}` : null;
223
+ },
224
+ load(id) {
225
+ return id === `\0${HELPERS_ID}` ? helpersModule() : null;
226
+ },
227
+ transform(code, id) {
228
+ if (!isLibrary(id))
229
+ return null;
230
+ return transformDecorators(code, id, isLibrary, (message) => { this.warn(message); });
231
+ },
232
+ });
233
+ const { templates } = transforms;
234
+ if (templates !== null) {
235
+ plugins.push({
236
+ name: "praxisjs:templates",
237
+ transform(code, id) {
238
+ return templates.test(id) && isLibrary(id) ? transformTemplates(code, cleanId(id)) : null;
239
+ },
240
+ });
241
+ }
242
+ plugins.push({
243
+ name: "praxisjs:libraries-jsx",
244
+ transform(code, id) {
245
+ return pinJsxRuntime(libraries, code, id);
246
+ },
247
+ });
248
+ return plugins;
249
+ }
250
+ /**
251
+ * Lets the other PraxisJS plugins compile the libraries that opt in: runs them inside Vite's
252
+ * dependency optimizer too, keeps the libraries out of SSR externals (Node would load them as
253
+ * published), loads their sources in place of their build output, and pins the JSX runtime their
254
+ * files compile against.
255
+ */
256
+ export function librariesPlugin(libraries, transforms) {
257
+ return {
258
+ name: "praxisjs:libraries",
259
+ enforce: "pre",
260
+ config(config) {
261
+ const found = libraries.discover(resolve(config.root ?? process.cwd()));
262
+ if (found.length === 0)
263
+ return null;
264
+ return {
265
+ optimizeDeps: { rolldownOptions: { plugins: prebundlePlugins(libraries, transforms) } },
266
+ ssr: { noExternal: found },
267
+ };
268
+ },
269
+ buildStart() {
270
+ libraries.clear();
271
+ },
272
+ resolveId(source, importer, options) {
273
+ return resolveToSource(libraries, (s, i) => this.resolve(s, i, { ...options, skipSelf: true }), source, importer);
274
+ },
275
+ transform(code, id) {
276
+ // After the other transforms that add imports at the top, so the pragma still leads the file.
277
+ return pinJsxRuntime(libraries, code, id);
278
+ },
279
+ };
280
+ }
281
+ //# sourceMappingURL=libraries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../src/libraries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export interface SourceMapV3 {
2
+ version: 3;
3
+ file: string;
4
+ sources: string[];
5
+ sourcesContent: string[];
6
+ names: string[];
7
+ mappings: string;
8
+ }
9
+ export declare function encodeVlq(value: number): string;
10
+ export declare class MappedOutput {
11
+ private readonly source;
12
+ private code;
13
+ private readonly lines;
14
+ private column;
15
+ private prevSourceLine;
16
+ private prevSourceColumn;
17
+ private prevColumn;
18
+ private readonly lineStarts;
19
+ constructor(source: string);
20
+ private position;
21
+ private segment;
22
+ /** Appends text taken verbatim from the source, starting at `offset`. */
23
+ copy(from: number, to: number): void;
24
+ /** Appends generated text, mapped to the source position `offset`. */
25
+ insert(text: string, offset: number): void;
26
+ private newLine;
27
+ result(file: string): {
28
+ code: string;
29
+ map: SourceMapV3;
30
+ };
31
+ }
32
+ /** A map of `source` moved down by `lines` generated lines, each of its lines otherwise in place. */
33
+ export declare function shiftedLines(source: string, file: string, lines: number): SourceMapV3;
34
+ //# sourceMappingURL=mapped-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapped-output.d.ts","sourceRoot":"","sources":["../src/mapped-output.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED,qBAAa,YAAY;IASX,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAET,MAAM,EAAE,MAAM;IAO3C,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,OAAO;IAcf,yEAAyE;IACzE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAepC,sEAAsE;IACtE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY1C,OAAO,CAAC,OAAO;IAMf,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE;CAazD;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAUrF"}
@@ -0,0 +1,119 @@
1
+ // ── source map ───────────────────────────────────────────────────────────────
2
+ const BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
3
+ export function encodeVlq(value) {
4
+ let vlq = value < 0 ? (-value << 1) | 1 : value << 1;
5
+ let out = "";
6
+ do {
7
+ let digit = vlq & 31;
8
+ vlq >>>= 5;
9
+ if (vlq > 0)
10
+ digit |= 32;
11
+ out += BASE64[digit];
12
+ } while (vlq > 0);
13
+ return out;
14
+ }
15
+ export class MappedOutput {
16
+ source;
17
+ code = "";
18
+ lines = [[]];
19
+ column = 0;
20
+ prevSourceLine = 0;
21
+ prevSourceColumn = 0;
22
+ prevColumn = 0;
23
+ lineStarts;
24
+ constructor(source) {
25
+ this.source = source;
26
+ this.lineStarts = [0];
27
+ for (let i = 0; i < source.length; i++) {
28
+ if (source.charCodeAt(i) === 10)
29
+ this.lineStarts.push(i + 1);
30
+ }
31
+ }
32
+ position(offset) {
33
+ let lo = 0;
34
+ let hi = this.lineStarts.length - 1;
35
+ while (lo < hi) {
36
+ const mid = (lo + hi + 1) >> 1;
37
+ if (this.lineStarts[mid] <= offset)
38
+ lo = mid;
39
+ else
40
+ hi = mid - 1;
41
+ }
42
+ return [lo, offset - this.lineStarts[lo]];
43
+ }
44
+ segment(offset) {
45
+ const [line, column] = this.position(offset);
46
+ const current = this.lines[this.lines.length - 1];
47
+ current.push(encodeVlq(this.column - this.prevColumn) +
48
+ encodeVlq(0) +
49
+ encodeVlq(line - this.prevSourceLine) +
50
+ encodeVlq(column - this.prevSourceColumn));
51
+ this.prevColumn = this.column;
52
+ this.prevSourceLine = line;
53
+ this.prevSourceColumn = column;
54
+ }
55
+ /** Appends text taken verbatim from the source, starting at `offset`. */
56
+ copy(from, to) {
57
+ if (from >= to)
58
+ return;
59
+ const text = this.source.slice(from, to);
60
+ this.segment(from);
61
+ let lineStart = 0;
62
+ for (let i = 0; i < text.length; i++) {
63
+ if (text.charCodeAt(i) !== 10)
64
+ continue;
65
+ this.newLine();
66
+ lineStart = i + 1;
67
+ if (lineStart < text.length)
68
+ this.segment(from + lineStart);
69
+ }
70
+ this.column += text.length - lineStart;
71
+ this.code += text;
72
+ }
73
+ /** Appends generated text, mapped to the source position `offset`. */
74
+ insert(text, offset) {
75
+ this.segment(offset);
76
+ const lastBreak = text.lastIndexOf("\n");
77
+ if (lastBreak === -1) {
78
+ this.column += text.length;
79
+ }
80
+ else {
81
+ for (let i = 0; i <= lastBreak; i++)
82
+ if (text.charCodeAt(i) === 10)
83
+ this.newLine();
84
+ this.column = text.length - lastBreak - 1;
85
+ }
86
+ this.code += text;
87
+ }
88
+ newLine() {
89
+ this.lines.push([]);
90
+ this.column = 0;
91
+ this.prevColumn = 0;
92
+ }
93
+ result(file) {
94
+ return {
95
+ code: this.code,
96
+ map: {
97
+ version: 3,
98
+ file,
99
+ sources: [file],
100
+ sourcesContent: [this.source],
101
+ names: [],
102
+ mappings: this.lines.map((segments) => segments.join(",")).join(";"),
103
+ },
104
+ };
105
+ }
106
+ }
107
+ /** A map of `source` moved down by `lines` generated lines, each of its lines otherwise in place. */
108
+ export function shiftedLines(source, file, lines) {
109
+ const count = source.split("\n").length;
110
+ return {
111
+ version: 3,
112
+ file,
113
+ sources: [file],
114
+ sourcesContent: [source],
115
+ names: [],
116
+ mappings: ";".repeat(lines) + ["AAAA", ...Array(count - 1).fill("AACA")].join(";"),
117
+ };
118
+ }
119
+ //# sourceMappingURL=mapped-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapped-output.js","sourceRoot":"","sources":["../src/mapped-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import ts from "typescript";
2
+ import { type SourceMapV3 } from "./mapped-output.js";
3
+ import type { Plugin } from "vite";
4
+ export declare const JSX_FILE: RegExp;
5
+ type JsxEl = ts.JsxElement | ts.JsxSelfClosingElement;
6
+ interface ElementModel {
7
+ kind: "element";
8
+ node: JsxEl;
9
+ tag: string;
10
+ statics: Array<[name: string, code: string]>;
11
+ props: Array<[name: string, value: ts.Expression]>;
12
+ children: ChildModel[];
13
+ ref?: string;
14
+ }
15
+ interface TextModel {
16
+ kind: "text";
17
+ value: string;
18
+ }
19
+ interface SlotModel {
20
+ kind: "slot";
21
+ /** The expression, or the JSX element/fragment that is inserted as is. */
22
+ value: ts.Node;
23
+ /** An arrow or function literal: always reactive, so it gets an anchor in the template. */
24
+ reactive: boolean;
25
+ /** The element's only child: the template holds an empty text node for it instead of an anchor. */
26
+ sole?: boolean;
27
+ ref?: string;
28
+ }
29
+ type ChildModel = ElementModel | TextModel | SlotModel;
30
+ /** Decodes the entities JSX allows; null when one isn't known here, so the tree stays on jsx(). */
31
+ export declare function decodeEntities(text: string): string | null;
32
+ /**
33
+ * JSX whitespace rules, as the JSX transform applies them (oxc's, which jsx() output goes through):
34
+ * lines are trimmed of spaces and tabs at their inner edges, lines of only whitespace drop, and the
35
+ * remaining lines are joined with one space. Tabs inside a line are kept.
36
+ */
37
+ export declare function cleanJsxText(raw: string): string;
38
+ /** The markup of a template's static part, or null when only element() builds it faithfully. */
39
+ export declare function templateHtml(m: ElementModel): string | null;
40
+ export interface TemplateResult {
41
+ code: string;
42
+ map: SourceMapV3;
43
+ }
44
+ /** Compiles every eligible host-element JSX tree in a file; null when there is none. */
45
+ export declare function transformTemplates(code: string, fileName: string): TemplateResult | null;
46
+ export interface TemplatesPluginOptions {
47
+ /**
48
+ * Restricts the transform to matching module ids. Default: every .jsx/.tsx outside node_modules,
49
+ * and those of the libraries that opt in.
50
+ */
51
+ include?: RegExp;
52
+ }
53
+ /** `isLibrary` tells the files of the dependencies compiled like the app's own code. */
54
+ export declare function templatesPlugin(options?: TemplatesPluginOptions, isLibrary?: (id: string) => boolean): Plugin;
55
+ export {};
56
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAYnC,eAAO,MAAM,QAAQ,QAAqB,CAAC;AAQ3C,KAAK,KAAK,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,qBAAqB,CAAC;AAEtD,UAAU,YAAY;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACnD,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;IACf,2FAA2F;IAC3F,QAAQ,EAAE,OAAO,CAAC;IAClB,mGAAmG;IACnG,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,KAAK,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;AA6BvD,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU1D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAchD;AAiXD,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAI3D;AA+LD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgBxF;AAYD,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAWjH"}