@praxisjs/vite-plugin 4.0.6 → 4.1.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 (58) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/decorators.d.ts +15 -0
  3. package/dist/decorators.d.ts.map +1 -1
  4. package/dist/decorators.js +437 -16
  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 +16 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +11 -18
  13. package/dist/index.js.map +1 -1
  14. package/dist/keyed-lists.d.ts +27 -0
  15. package/dist/keyed-lists.d.ts.map +1 -0
  16. package/dist/keyed-lists.js +248 -0
  17. package/dist/keyed-lists.js.map +1 -0
  18. package/dist/mapped-output.d.ts +32 -0
  19. package/dist/mapped-output.d.ts.map +1 -0
  20. package/dist/mapped-output.js +107 -0
  21. package/dist/mapped-output.js.map +1 -0
  22. package/dist/templates.d.ts +51 -0
  23. package/dist/templates.d.ts.map +1 -0
  24. package/dist/templates.js +707 -0
  25. package/dist/templates.js.map +1 -0
  26. package/package.json +13 -5
  27. package/src/decorators.ts +456 -16
  28. package/src/hmr.ts +108 -0
  29. package/src/index.ts +22 -25
  30. package/src/keyed-lists.ts +282 -0
  31. package/src/mapped-output.ts +116 -0
  32. package/src/templates.ts +729 -0
  33. package/dist/__tests__/css-esbuild-error.test.d.ts +0 -2
  34. package/dist/__tests__/css-esbuild-error.test.d.ts.map +0 -1
  35. package/dist/__tests__/css-esbuild-error.test.js +0 -25
  36. package/dist/__tests__/css-esbuild-error.test.js.map +0 -1
  37. package/dist/__tests__/css-tsconfig-error.test.d.ts +0 -2
  38. package/dist/__tests__/css-tsconfig-error.test.d.ts.map +0 -1
  39. package/dist/__tests__/css-tsconfig-error.test.js +0 -39
  40. package/dist/__tests__/css-tsconfig-error.test.js.map +0 -1
  41. package/dist/__tests__/css-tsconfig-no-config.test.d.ts +0 -2
  42. package/dist/__tests__/css-tsconfig-no-config.test.d.ts.map +0 -1
  43. package/dist/__tests__/css-tsconfig-no-config.test.js +0 -38
  44. package/dist/__tests__/css-tsconfig-no-config.test.js.map +0 -1
  45. package/dist/__tests__/css.test.d.ts +0 -2
  46. package/dist/__tests__/css.test.d.ts.map +0 -1
  47. package/dist/__tests__/css.test.js +0 -288
  48. package/dist/__tests__/css.test.js.map +0 -1
  49. package/dist/__tests__/index.test.d.ts +0 -2
  50. package/dist/__tests__/index.test.d.ts.map +0 -1
  51. package/dist/__tests__/index.test.js +0 -301
  52. package/dist/__tests__/index.test.js.map +0 -1
  53. package/src/__tests__/css-esbuild-error.test.ts +0 -39
  54. package/src/__tests__/css-tsconfig-error.test.ts +0 -53
  55. package/src/__tests__/css-tsconfig-no-config.test.ts +0 -52
  56. package/src/__tests__/css.test.ts +0 -381
  57. package/src/__tests__/index.test.ts +0 -351
  58. package/tsconfig.json +0 -11
package/dist/hmr.js ADDED
@@ -0,0 +1,106 @@
1
+ import ts from "typescript";
2
+ // Component hot replacement, development only. Every top-level class of a module is registered
3
+ // with the runtime under `<file>#<class>` (the runtime ignores classes that are not components),
4
+ // so an edited module that runs again replaces its components in place (see @praxisjs/runtime's
5
+ // hmr.ts). The module accepts its own update only when all it exports are classes: anything else
6
+ // it exports (a helper, a constant, a store) may be held by the modules that import it, so those
7
+ // updates keep Vite's default handling, which runs the importers again or reloads the page. A
8
+ // module whose new exports turn out not to be components at runtime also hands the update on.
9
+ const SCRIPT_FILE = /\.[cm]?[jt]sx?$/;
10
+ function scriptKindFor(fileName) {
11
+ if (fileName.endsWith("x"))
12
+ return fileName.endsWith(".jsx") ? ts.ScriptKind.JSX : ts.ScriptKind.TSX;
13
+ return fileName.endsWith(".js") || fileName.endsWith(".mjs") || fileName.endsWith(".cjs") ? ts.ScriptKind.JS : ts.ScriptKind.TS;
14
+ }
15
+ function hasModifier(node, kind) {
16
+ return ts.canHaveModifiers(node) && (ts.getModifiers(node)?.some((m) => m.kind === kind) ?? false);
17
+ }
18
+ function moduleShape(source) {
19
+ const classes = [];
20
+ let exportsValue = false;
21
+ let exportsOther = false;
22
+ const exportedNames = [];
23
+ for (const statement of source.statements) {
24
+ if (ts.isClassDeclaration(statement) && !hasModifier(statement, ts.SyntaxKind.DeclareKeyword)) {
25
+ const exported = hasModifier(statement, ts.SyntaxKind.ExportKeyword);
26
+ if (statement.name !== undefined)
27
+ classes.push(statement.name.text);
28
+ if (exported) {
29
+ exportsValue = true;
30
+ // `export default class {}` has no binding to register.
31
+ if (statement.name === undefined)
32
+ exportsOther = true;
33
+ }
34
+ }
35
+ else if (ts.isExportAssignment(statement)) {
36
+ exportsValue = true;
37
+ if (ts.isIdentifier(statement.expression))
38
+ exportedNames.push(statement.expression.text);
39
+ else
40
+ exportsOther = true;
41
+ }
42
+ else if (ts.isExportDeclaration(statement)) {
43
+ if (statement.isTypeOnly)
44
+ continue;
45
+ exportsValue = true;
46
+ const clause = statement.exportClause;
47
+ if (statement.moduleSpecifier !== undefined || clause === undefined || !ts.isNamedExports(clause)) {
48
+ exportsOther = true;
49
+ continue;
50
+ }
51
+ for (const element of clause.elements) {
52
+ if (!element.isTypeOnly)
53
+ exportedNames.push((element.propertyName ?? element.name).text);
54
+ }
55
+ }
56
+ else if (hasModifier(statement, ts.SyntaxKind.ExportKeyword) &&
57
+ !ts.isInterfaceDeclaration(statement) &&
58
+ !ts.isTypeAliasDeclaration(statement) &&
59
+ !hasModifier(statement, ts.SyntaxKind.DeclareKeyword)) {
60
+ exportsValue = true;
61
+ exportsOther = true;
62
+ }
63
+ }
64
+ const onlyClasses = exportsValue && !exportsOther && exportedNames.every((name) => classes.includes(name));
65
+ return { classes, onlyClasses };
66
+ }
67
+ /** Appends the hot replacement code to a module; null when it declares no top-level class. */
68
+ export function transformHmr(code, id) {
69
+ const fileName = id.split("?")[0];
70
+ if (!SCRIPT_FILE.test(fileName) || !code.includes("class"))
71
+ return null;
72
+ const source = ts.createSourceFile(fileName, code, ts.ScriptTarget.Latest, false, scriptKindFor(fileName));
73
+ const { classes, onlyClasses } = moduleShape(source);
74
+ if (classes.length === 0)
75
+ return null;
76
+ // Appended, not prepended: imports are hoisted, and every original line keeps its place for the
77
+ // source map.
78
+ let footer = '\nimport { _$hmrRegister as __pxHotRegister, _$hmrAccepts as __pxHotAccepts } from "@praxisjs/runtime";\n';
79
+ for (const name of classes)
80
+ footer += `__pxHotRegister(${name}, ${JSON.stringify(`${fileName}#${name}`)});\n`;
81
+ if (onlyClasses) {
82
+ footer += "if (import.meta.hot) import.meta.hot.accept((mod) => { if (!__pxHotAccepts(mod)) import.meta.hot.invalidate(); });\n";
83
+ }
84
+ return code + footer;
85
+ }
86
+ export function hmrPlugin() {
87
+ let root = "/";
88
+ return {
89
+ name: "praxisjs:hmr",
90
+ apply: "serve",
91
+ enforce: "pre",
92
+ configResolved(config) {
93
+ root = config.root.endsWith("/") ? config.root : `${config.root}/`;
94
+ },
95
+ transform(code, id, options) {
96
+ // The app's own modules only: dependencies (including workspace packages linked from outside
97
+ // the project) are not edited while it runs, and may not resolve @praxisjs/runtime.
98
+ if (options?.ssr === true || !id.startsWith(root) || id.includes("/node_modules/"))
99
+ return null;
100
+ const result = transformHmr(code, id);
101
+ // Code only appended at the end: the existing source map still holds.
102
+ return result === null ? null : { code: result, map: null };
103
+ },
104
+ };
105
+ }
106
+ //# sourceMappingURL=hmr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr.js","sourceRoot":"","sources":["../src/hmr.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,27 @@
1
1
  import { praxisjsCSS } from "./css.js";
2
2
  import { decoratorLoweringPlugin } from "./decorators.js";
3
+ import { hmrPlugin, transformHmr } from "./hmr.js";
4
+ import { keyedListsPlugin, transformKeyedLists, type KeyedListsPluginOptions } from "./keyed-lists.js";
5
+ import { templatesPlugin, transformTemplates, type TemplatesPluginOptions } from "./templates.js";
3
6
  import type { PluginOption } from "vite";
4
7
  export { praxisjsCSS };
5
8
  export { decoratorLoweringPlugin };
9
+ export { hmrPlugin, transformHmr };
10
+ export { keyedListsPlugin, transformKeyedLists, type KeyedListsPluginOptions };
11
+ export { templatesPlugin, transformTemplates, type TemplatesPluginOptions };
6
12
  export interface PraxisJSVitePluginOptions {
7
13
  hmr?: boolean;
8
14
  autoImport?: boolean;
15
+ /**
16
+ * Rewrites keyed `{() => list.map((item) => <Row key={…} />)}` into `<For>` so rows are reused
17
+ * instead of rebuilt. `false` turns it off. Default `true`.
18
+ */
19
+ keyedLists?: boolean | KeyedListsPluginOptions;
20
+ /**
21
+ * Compiles JSX trees of host elements into templates cloned with one `cloneNode(true)` per
22
+ * render, binding only their dynamic parts. `false` leaves every element to `jsx()`. Default `true`.
23
+ */
24
+ templates?: boolean | TemplatesPluginOptions;
9
25
  }
10
26
  export declare function praxisjs(options?: PraxisJSVitePluginOptions): PluginOption[];
11
27
  export default praxisjs;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,MAAM,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,MAAM,WAAW,yBAAyB;IACxC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,QAAQ,CAAC,OAAO,GAAE,yBAA8B,GAAG,YAAY,EAAE,CA8ChF;AAED,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAElG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,KAAK,uBAAuB,EAAE,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,CAAC;AAE5E,MAAM,WAAW,yBAAyB;IACxC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAAC;IAC/C;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;CAC9C;AAED,wBAAgB,QAAQ,CAAC,OAAO,GAAE,yBAA8B,GAAG,YAAY,EAAE,CA2BhF;AAED,eAAe,QAAQ,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,21 @@
1
1
  import { praxisjsCSS } from "./css.js";
2
2
  import { decoratorLoweringPlugin } from "./decorators.js";
3
+ import { hmrPlugin, transformHmr } from "./hmr.js";
4
+ import { keyedListsPlugin, transformKeyedLists } from "./keyed-lists.js";
5
+ import { templatesPlugin, transformTemplates } from "./templates.js";
3
6
  export { praxisjsCSS };
4
7
  export { decoratorLoweringPlugin };
8
+ export { hmrPlugin, transformHmr };
9
+ export { keyedListsPlugin, transformKeyedLists };
10
+ export { templatesPlugin, transformTemplates };
5
11
  export function praxisjs(options = {}) {
6
- const { hmr = true, autoImport = true } = options;
12
+ const { hmr = true, autoImport = true, keyedLists = true, templates = true } = options;
7
13
  return [
14
+ ...(keyedLists === false ? [] : [keyedListsPlugin(keyedLists === true ? {} : keyedLists)]),
15
+ // Before the decorator lowering, which turns class declarations into `let X = (() => …)()`.
16
+ ...(hmr ? [hmrPlugin()] : []),
8
17
  decoratorLoweringPlugin(),
18
+ ...(templates === false ? [] : [templatesPlugin(templates === true ? {} : templates)]),
9
19
  {
10
20
  name: "praxisjs:core",
11
21
  enforce: "pre",
@@ -26,23 +36,6 @@ export function praxisjs(options = {}) {
26
36
  return null;
27
37
  },
28
38
  },
29
- ...(hmr
30
- ? [
31
- {
32
- name: "praxisjs:hmr",
33
- enforce: "post",
34
- handleHotUpdate({ file, server, }) {
35
- if (!file.endsWith(".tsx") && !file.endsWith(".ts"))
36
- return;
37
- server.ws.send({
38
- type: "custom",
39
- event: "praxisjs:component-update",
40
- data: { file },
41
- });
42
- },
43
- },
44
- ]
45
- : []),
46
39
  ];
47
40
  }
48
41
  export default praxisjs;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAI1D,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAOnC,MAAM,UAAU,QAAQ,CAAC,UAAqC,EAAE;IAC9D,MAAM,EAAE,GAAG,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAElD,OAAO;QACL,uBAAuB,EAAE;QACzB;YACE,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,KAAK;YACd,MAAM;gBACJ,OAAO;oBACL,GAAG,EAAE;wBACH,MAAM,EAAE,QAAQ;qBACjB;iBACF,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,CAAC,UAAU;oBAAE,OAAO;gBACxB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO;gBACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC;oBAAE,OAAO;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;SACF;QACD,GAAG,CAAC,GAAG;YACL,CAAC,CAAC;gBACE;oBACE,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,MAAe;oBACxB,eAAe,CAAC,EACd,IAAI,EACJ,MAAM,GAIP;wBACC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;4BAAE,OAAO;wBAE5D,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;4BACb,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,2BAA2B;4BAClC,IAAI,EAAE,EAAE,IAAI,EAAE;yBACf,CAAC,CAAC;oBACL,CAAC;iBACF;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAgC,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAA+B,MAAM,gBAAgB,CAAC;AAIlG,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAgC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAA+B,CAAC;AAiB5E,MAAM,UAAU,QAAQ,CAAC,UAAqC,EAAE;IAC9D,MAAM,EAAE,GAAG,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAEvF,OAAO;QACL,GAAG,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1F,4FAA4F;QAC5F,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,uBAAuB,EAAE;QACzB,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACtF;YACE,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,KAAK;YACd,MAAM;gBACJ,OAAO;oBACL,GAAG,EAAE;wBACH,MAAM,EAAE,QAAQ;qBACjB;iBACF,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,CAAC,UAAU;oBAAE,OAAO;gBACxB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO;gBACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC;oBAAE,OAAO;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type SourceMapV3 } from "./mapped-output.js";
2
+ import type { Plugin } from "vite";
3
+ export { encodeVlq, type SourceMapV3 } from "./mapped-output.js";
4
+ export interface KeyedListWarning {
5
+ message: string;
6
+ line: number;
7
+ column: number;
8
+ }
9
+ export interface KeyedListResult {
10
+ code: string;
11
+ map: SourceMapV3 | null;
12
+ warnings: KeyedListWarning[];
13
+ }
14
+ /**
15
+ * Rewrites `{() => list.map((item) => <Row key={item.id} … />)}` into the equivalent `<For>`, so a
16
+ * keyed `.map()` reuses rows instead of rebuilding the whole list on every change. Each row re-renders
17
+ * on its own when its item, its index (if the callback takes one) or anything else it reads changes,
18
+ * which is what the original arrow did for the whole list. Anything that doesn't match the pattern
19
+ * exactly is left alone; keyed `.map()` calls that can't be rewritten produce a warning.
20
+ */
21
+ export declare function transformKeyedLists(code: string, fileName: string): KeyedListResult | null;
22
+ export interface KeyedListsPluginOptions {
23
+ /** Report keyed `.map()` calls that couldn't be rewritten. Default `true`. */
24
+ warn?: boolean;
25
+ }
26
+ export declare function keyedListsPlugin(options?: KeyedListsPluginOptions): Plugin;
27
+ //# sourceMappingURL=keyed-lists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyed-lists.d.ts","sourceRoot":"","sources":["../src/keyed-lists.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmBjE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAuLD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAgC1F;AAED,MAAM,WAAW,uBAAuB;IACtC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAiB9E"}
@@ -0,0 +1,248 @@
1
+ import ts from "typescript";
2
+ import { MappedOutput } from "./mapped-output.js";
3
+ export { encodeVlq } from "./mapped-output.js";
4
+ const JSX_FILE = /\.[jt]sx(?:$|\?)/;
5
+ const FOR_BINDING = "__PraxisFor";
6
+ const ITEM = "__praxisItem";
7
+ const INDEX = "__praxisIndex";
8
+ const KEY_GLOBALS = new Set(["String", "Number", "JSON", "Math", "undefined"]);
9
+ function unwrap(node) {
10
+ let current = node;
11
+ while (ts.isParenthesizedExpression(current))
12
+ current = current.expression;
13
+ return current;
14
+ }
15
+ function rootTag(element) {
16
+ return ts.isJsxElement(element) ? element.openingElement : element;
17
+ }
18
+ function keyAttribute(element) {
19
+ for (const prop of rootTag(element).attributes.properties) {
20
+ if (ts.isJsxAttribute(prop) && ts.isIdentifier(prop.name) && prop.name.text === "key")
21
+ return prop;
22
+ }
23
+ return undefined;
24
+ }
25
+ // Only the attributes of the elements the callback can return count: a `key` deeper in a row belongs
26
+ // to a nested list, not to this one.
27
+ function hasKeyAttribute(node) {
28
+ let found = false;
29
+ const visit = (child) => {
30
+ if (found)
31
+ return;
32
+ if (ts.isJsxAttribute(child) && ts.isIdentifier(child.name) && child.name.text === "key") {
33
+ found = true;
34
+ return;
35
+ }
36
+ if (ts.isJsxElement(child)) {
37
+ visit(child.openingElement);
38
+ return;
39
+ }
40
+ ts.forEachChild(child, visit);
41
+ };
42
+ visit(node);
43
+ return found;
44
+ }
45
+ function boundNames(name, out) {
46
+ if (ts.isIdentifier(name)) {
47
+ out.add(name.text);
48
+ return;
49
+ }
50
+ for (const element of name.elements) {
51
+ if (ts.isBindingElement(element))
52
+ boundNames(element.name, out);
53
+ }
54
+ }
55
+ // Identifiers that are references (not property names, not object literal keys).
56
+ function isReference(node) {
57
+ const parent = node.parent;
58
+ if (ts.isPropertyAccessExpression(parent) && parent.name === node)
59
+ return false;
60
+ if (ts.isPropertyAssignment(parent) && parent.name === node)
61
+ return false;
62
+ return true;
63
+ }
64
+ // The key function runs untracked, once per item, outside the original arrow: it may only depend
65
+ // on the callback's own parameters, or moving it would change what it computes.
66
+ function keyDependsOnlyOnParams(key, params) {
67
+ let ok = true;
68
+ const visit = (node) => {
69
+ if (!ok || ts.isTypeNode(node))
70
+ return;
71
+ if (node.kind === ts.SyntaxKind.ThisKeyword) {
72
+ ok = false;
73
+ return;
74
+ }
75
+ if (ts.isIdentifier(node) && isReference(node) && !params.has(node.text) && !KEY_GLOBALS.has(node.text)) {
76
+ ok = false;
77
+ return;
78
+ }
79
+ ts.forEachChild(node, visit);
80
+ };
81
+ visit(key);
82
+ return ok;
83
+ }
84
+ // Under an intrinsic element a function child is only ever mounted as a reactive child, so it can
85
+ // become the <For> element itself. A component may call a function child (render props), and
86
+ // fragments treat children differently, so there the rewrite stays a function returning the <For>.
87
+ function isIntrinsicParent(parent) {
88
+ if (!ts.isJsxElement(parent))
89
+ return false;
90
+ const tag = parent.openingElement.tagName;
91
+ return ts.isIdentifier(tag) && /^[a-z]/.test(tag.text);
92
+ }
93
+ function matchList(container) {
94
+ const expression = container.expression;
95
+ if (expression === undefined || !ts.isArrowFunction(expression))
96
+ return null;
97
+ if (expression.parameters.length > 0 || ts.isBlock(expression.body))
98
+ return null;
99
+ const call = unwrap(expression.body);
100
+ if (!ts.isCallExpression(call) || !ts.isPropertyAccessExpression(call.expression))
101
+ return null;
102
+ if (call.expression.name.text !== "map")
103
+ return null;
104
+ const callback = call.arguments[0];
105
+ if (callback === undefined || !hasKeyAttribute(callback))
106
+ return null;
107
+ if (call.arguments.length !== 1 || call.typeArguments !== undefined) {
108
+ return { reason: "`.map()` is called with more than one argument or with type arguments" };
109
+ }
110
+ if (!ts.isArrowFunction(callback)) {
111
+ return { reason: "the `.map()` callback is not an arrow function" };
112
+ }
113
+ if (callback.modifiers?.some((m) => m.kind === ts.SyntaxKind.AsyncKeyword) === true) {
114
+ return { reason: "the `.map()` callback is async" };
115
+ }
116
+ const params = callback.parameters;
117
+ if (params.length < 1 || params.length > 2 || params.some((p) => p.dotDotDotToken !== undefined || p.initializer !== undefined)) {
118
+ return { reason: "the `.map()` callback must take (item) or (item, index), without defaults or rest parameters" };
119
+ }
120
+ if (ts.isBlock(callback.body)) {
121
+ return { reason: "the `.map()` callback has a block body; return the element directly" };
122
+ }
123
+ const element = unwrap(callback.body);
124
+ if (!ts.isJsxElement(element) && !ts.isJsxSelfClosingElement(element)) {
125
+ return { reason: "the `.map()` callback does not return a single JSX element" };
126
+ }
127
+ const attribute = keyAttribute(element);
128
+ if (attribute === undefined) {
129
+ return { reason: "`key` is not on the element the callback returns" };
130
+ }
131
+ const initializer = attribute.initializer;
132
+ if (initializer === undefined || !ts.isJsxExpression(initializer) || initializer.expression === undefined) {
133
+ return { reason: "`key` is a constant; every row would share it" };
134
+ }
135
+ const names = new Set();
136
+ for (const param of params)
137
+ boundNames(param.name, names);
138
+ if (!keyDependsOnlyOnParams(initializer.expression, names)) {
139
+ return { reason: "`key` reads something other than the callback's parameters" };
140
+ }
141
+ return {
142
+ match: {
143
+ start: container.getStart(),
144
+ end: container.getEnd(),
145
+ wrap: !isIntrinsicParent(container.parent),
146
+ receiver: call.expression.expression,
147
+ params,
148
+ key: initializer.expression,
149
+ element,
150
+ },
151
+ };
152
+ }
153
+ // ── rewrite ──────────────────────────────────────────────────────────────────
154
+ function emitRange(out, matches, from, to, source) {
155
+ let cursor = from;
156
+ for (const match of matches) {
157
+ if (match.start < cursor || match.end > to)
158
+ continue;
159
+ out.copy(cursor, match.start);
160
+ emitMatch(out, matches, match, source);
161
+ cursor = match.end;
162
+ }
163
+ out.copy(cursor, to);
164
+ }
165
+ function emitMatch(out, matches, match, source) {
166
+ const { receiver, params, key, element } = match;
167
+ const paramsStart = params[0].getStart(source);
168
+ const paramsEnd = params[params.length - 1].getEnd();
169
+ out.insert(`${match.wrap ? "{() => " : ""}<${FOR_BINDING} each={() => (`, match.start);
170
+ out.copy(receiver.getStart(source), receiver.getEnd());
171
+ out.insert(")} by={(", receiver.getEnd());
172
+ out.copy(paramsStart, paramsEnd);
173
+ out.insert(") => (", paramsEnd);
174
+ out.copy(key.getStart(source), key.getEnd());
175
+ out.insert(`)}>{(${ITEM}${params.length > 1 ? `, ${INDEX}` : ""}) => () => { const `, key.getEnd());
176
+ out.copy(params[0].name.getStart(source), params[0].name.getEnd());
177
+ out.insert(` = ${ITEM}(); `, params[0].name.getEnd());
178
+ if (params.length > 1) {
179
+ out.insert("const ", params[1].getStart(source));
180
+ out.copy(params[1].name.getStart(source), params[1].name.getEnd());
181
+ out.insert(` = ${INDEX}(); `, params[1].name.getEnd());
182
+ }
183
+ out.insert("return (", element.getStart(source));
184
+ emitRange(out, matches, element.getStart(source), element.getEnd(), source);
185
+ out.insert(`); }}</${FOR_BINDING}>${match.wrap ? "}" : ""}`, match.end);
186
+ }
187
+ /**
188
+ * Rewrites `{() => list.map((item) => <Row key={item.id} … />)}` into the equivalent `<For>`, so a
189
+ * keyed `.map()` reuses rows instead of rebuilding the whole list on every change. Each row re-renders
190
+ * on its own when its item, its index (if the callback takes one) or anything else it reads changes,
191
+ * which is what the original arrow did for the whole list. Anything that doesn't match the pattern
192
+ * exactly is left alone; keyed `.map()` calls that can't be rewritten produce a warning.
193
+ */
194
+ export function transformKeyedLists(code, fileName) {
195
+ if (!code.includes(".map") || !code.includes("key"))
196
+ return null;
197
+ const kind = fileName.endsWith(".jsx") ? ts.ScriptKind.JSX : ts.ScriptKind.TSX;
198
+ const source = ts.createSourceFile(fileName, code, ts.ScriptTarget.Latest, true, kind);
199
+ const matches = [];
200
+ const warnings = [];
201
+ const visit = (node) => {
202
+ if (ts.isJsxExpression(node) && (ts.isJsxElement(node.parent) || ts.isJsxFragment(node.parent))) {
203
+ const candidate = matchList(node);
204
+ if (candidate !== null && "match" in candidate)
205
+ matches.push(candidate.match);
206
+ else if (candidate !== null) {
207
+ const { line, character } = source.getLineAndCharacterOfPosition(node.getStart(source));
208
+ warnings.push({
209
+ line: line + 1,
210
+ column: character + 1,
211
+ message: `keyed \`.map()\` left as is (${candidate.reason}): the whole list is rebuilt whenever it changes. ` +
212
+ "Use <For each={…} by={…}> from @praxisjs/runtime to keep rows.",
213
+ });
214
+ }
215
+ }
216
+ ts.forEachChild(node, visit);
217
+ };
218
+ visit(source);
219
+ if (matches.length === 0)
220
+ return warnings.length > 0 ? { code, map: null, warnings } : null;
221
+ const out = new MappedOutput(code);
222
+ out.insert(`import { For as ${FOR_BINDING} } from "@praxisjs/runtime";\n`, 0);
223
+ emitRange(out, matches, 0, code.length, source);
224
+ return { ...out.result(fileName), warnings };
225
+ }
226
+ export function keyedListsPlugin(options = {}) {
227
+ const { warn = true } = options;
228
+ return {
229
+ name: "praxisjs:keyed-lists",
230
+ enforce: "pre",
231
+ transform(code, id) {
232
+ if (!JSX_FILE.test(id) || id.includes("/node_modules/"))
233
+ return null;
234
+ const fileName = id.split("?")[0];
235
+ const result = transformKeyedLists(code, fileName);
236
+ if (result === null)
237
+ return null;
238
+ if (warn) {
239
+ for (const w of result.warnings)
240
+ this.warn(`${fileName}:${String(w.line)}:${String(w.column)} ${w.message}`);
241
+ }
242
+ if (result.map === null)
243
+ return null;
244
+ return { code: result.code, map: result.map };
245
+ },
246
+ };
247
+ }
248
+ //# sourceMappingURL=keyed-lists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyed-lists.js","sourceRoot":"","sources":["../src/keyed-lists.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
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
+ //# 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"}
@@ -0,0 +1,107 @@
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
+ //# sourceMappingURL=mapped-output.js.map