@nextwebwg/html-next 1.0.0-alpha.1

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 (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/ast.d.ts +7 -0
  4. package/dist/ast.d.ts.map +1 -0
  5. package/dist/ast.js +2 -0
  6. package/dist/ast.js.map +1 -0
  7. package/dist/browser-loader.bundle.js +9 -0
  8. package/dist/browser-loader.d.ts +35 -0
  9. package/dist/browser-loader.d.ts.map +1 -0
  10. package/dist/browser-loader.js +83 -0
  11. package/dist/browser-loader.js.map +1 -0
  12. package/dist/browser-source.d.ts +10 -0
  13. package/dist/browser-source.d.ts.map +1 -0
  14. package/dist/browser-source.js +97 -0
  15. package/dist/browser-source.js.map +1 -0
  16. package/dist/browser.d.ts +5 -0
  17. package/dist/browser.d.ts.map +1 -0
  18. package/dist/browser.js +9 -0
  19. package/dist/browser.js.map +1 -0
  20. package/dist/cli.d.ts +31 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +138 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/component-styles-build.d.ts +11 -0
  25. package/dist/component-styles-build.d.ts.map +1 -0
  26. package/dist/component-styles-build.js +74 -0
  27. package/dist/component-styles-build.js.map +1 -0
  28. package/dist/component-styles.d.ts +37 -0
  29. package/dist/component-styles.d.ts.map +1 -0
  30. package/dist/component-styles.js +236 -0
  31. package/dist/component-styles.js.map +1 -0
  32. package/dist/contract-platform.d.ts +5 -0
  33. package/dist/contract-platform.d.ts.map +1 -0
  34. package/dist/contract-platform.js +8 -0
  35. package/dist/contract-platform.js.map +1 -0
  36. package/dist/contract.d.ts +14 -0
  37. package/dist/contract.d.ts.map +1 -0
  38. package/dist/contract.js +234 -0
  39. package/dist/contract.js.map +1 -0
  40. package/dist/controller-files.d.ts +10 -0
  41. package/dist/controller-files.d.ts.map +1 -0
  42. package/dist/controller-files.js +54 -0
  43. package/dist/controller-files.js.map +1 -0
  44. package/dist/controller.d.ts +15 -0
  45. package/dist/controller.d.ts.map +1 -0
  46. package/dist/controller.js +33 -0
  47. package/dist/controller.js.map +1 -0
  48. package/dist/data.d.ts +28 -0
  49. package/dist/data.d.ts.map +1 -0
  50. package/dist/data.js +100 -0
  51. package/dist/data.js.map +1 -0
  52. package/dist/diagnostics.d.ts +11 -0
  53. package/dist/diagnostics.d.ts.map +1 -0
  54. package/dist/diagnostics.js +13 -0
  55. package/dist/diagnostics.js.map +1 -0
  56. package/dist/expression.d.ts +80 -0
  57. package/dist/expression.d.ts.map +1 -0
  58. package/dist/expression.js +474 -0
  59. package/dist/expression.js.map +1 -0
  60. package/dist/freeze.d.ts +2 -0
  61. package/dist/freeze.d.ts.map +1 -0
  62. package/dist/freeze.js +8 -0
  63. package/dist/freeze.js.map +1 -0
  64. package/dist/generate.d.ts +11 -0
  65. package/dist/generate.d.ts.map +1 -0
  66. package/dist/generate.js +41 -0
  67. package/dist/generate.js.map +1 -0
  68. package/dist/generated/dom-properties.d.ts +8 -0
  69. package/dist/generated/dom-properties.d.ts.map +1 -0
  70. package/dist/generated/dom-properties.js +1410 -0
  71. package/dist/generated/dom-properties.js.map +1 -0
  72. package/dist/generated-runtime.d.ts +42 -0
  73. package/dist/generated-runtime.d.ts.map +1 -0
  74. package/dist/generated-runtime.js +266 -0
  75. package/dist/generated-runtime.js.map +1 -0
  76. package/dist/graph.d.ts +37 -0
  77. package/dist/graph.d.ts.map +1 -0
  78. package/dist/graph.js +81 -0
  79. package/dist/graph.js.map +1 -0
  80. package/dist/index.d.ts +29 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +23 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/language.d.ts +7 -0
  85. package/dist/language.d.ts.map +1 -0
  86. package/dist/language.js +43 -0
  87. package/dist/language.js.map +1 -0
  88. package/dist/names.d.ts +4 -0
  89. package/dist/names.d.ts.map +1 -0
  90. package/dist/names.js +19 -0
  91. package/dist/names.js.map +1 -0
  92. package/dist/node-loader.d.ts +22 -0
  93. package/dist/node-loader.d.ts.map +1 -0
  94. package/dist/node-loader.js +109 -0
  95. package/dist/node-loader.js.map +1 -0
  96. package/dist/package-config.d.ts +22 -0
  97. package/dist/package-config.d.ts.map +1 -0
  98. package/dist/package-config.js +2 -0
  99. package/dist/package-config.js.map +1 -0
  100. package/dist/package.d.ts +9 -0
  101. package/dist/package.d.ts.map +1 -0
  102. package/dist/package.js +208 -0
  103. package/dist/package.js.map +1 -0
  104. package/dist/parser.d.ts +11 -0
  105. package/dist/parser.d.ts.map +1 -0
  106. package/dist/parser.js +938 -0
  107. package/dist/parser.js.map +1 -0
  108. package/dist/platform.d.ts +3 -0
  109. package/dist/platform.d.ts.map +1 -0
  110. package/dist/platform.js +26 -0
  111. package/dist/platform.js.map +1 -0
  112. package/dist/reactivity.d.ts +88 -0
  113. package/dist/reactivity.d.ts.map +1 -0
  114. package/dist/reactivity.js +594 -0
  115. package/dist/reactivity.js.map +1 -0
  116. package/dist/registry.d.ts +14 -0
  117. package/dist/registry.d.ts.map +1 -0
  118. package/dist/registry.js +39 -0
  119. package/dist/registry.js.map +1 -0
  120. package/dist/resolve.d.ts +24 -0
  121. package/dist/resolve.d.ts.map +1 -0
  122. package/dist/resolve.js +65 -0
  123. package/dist/resolve.js.map +1 -0
  124. package/dist/runtime.d.ts +110 -0
  125. package/dist/runtime.d.ts.map +1 -0
  126. package/dist/runtime.js +1926 -0
  127. package/dist/runtime.js.map +1 -0
  128. package/dist/sanitize.d.ts +8 -0
  129. package/dist/sanitize.d.ts.map +1 -0
  130. package/dist/sanitize.js +38 -0
  131. package/dist/sanitize.js.map +1 -0
  132. package/dist/source-graph.d.ts +5 -0
  133. package/dist/source-graph.d.ts.map +1 -0
  134. package/dist/source-graph.js +60 -0
  135. package/dist/source-graph.js.map +1 -0
  136. package/dist/source-parser.d.ts +4 -0
  137. package/dist/source-parser.d.ts.map +1 -0
  138. package/dist/source-parser.js +38 -0
  139. package/dist/source-parser.js.map +1 -0
  140. package/dist/source.d.ts +4 -0
  141. package/dist/source.d.ts.map +1 -0
  142. package/dist/source.js +6 -0
  143. package/dist/source.js.map +1 -0
  144. package/dist/targets/backend.d.ts +28 -0
  145. package/dist/targets/backend.d.ts.map +1 -0
  146. package/dist/targets/backend.js +42 -0
  147. package/dist/targets/backend.js.map +1 -0
  148. package/dist/targets/docs.d.ts +3 -0
  149. package/dist/targets/docs.d.ts.map +1 -0
  150. package/dist/targets/docs.js +85 -0
  151. package/dist/targets/docs.js.map +1 -0
  152. package/dist/targets/native-reactive.d.ts +41 -0
  153. package/dist/targets/native-reactive.d.ts.map +1 -0
  154. package/dist/targets/native-reactive.js +169 -0
  155. package/dist/targets/native-reactive.js.map +1 -0
  156. package/dist/targets/shared.d.ts +15 -0
  157. package/dist/targets/shared.d.ts.map +1 -0
  158. package/dist/targets/shared.js +122 -0
  159. package/dist/targets/shared.js.map +1 -0
  160. package/dist/targets/vanilla.d.ts +6 -0
  161. package/dist/targets/vanilla.d.ts.map +1 -0
  162. package/dist/targets/vanilla.js +442 -0
  163. package/dist/targets/vanilla.js.map +1 -0
  164. package/dist/targets/vue.d.ts +3 -0
  165. package/dist/targets/vue.d.ts.map +1 -0
  166. package/dist/targets/vue.js +577 -0
  167. package/dist/targets/vue.js.map +1 -0
  168. package/dist/template.d.ts +172 -0
  169. package/dist/template.d.ts.map +1 -0
  170. package/dist/template.js +2 -0
  171. package/dist/template.js.map +1 -0
  172. package/dist/type-system.d.ts +80 -0
  173. package/dist/type-system.d.ts.map +1 -0
  174. package/dist/type-system.js +414 -0
  175. package/dist/type-system.js.map +1 -0
  176. package/dist/types.d.ts +51 -0
  177. package/dist/types.d.ts.map +1 -0
  178. package/dist/types.js +2 -0
  179. package/dist/types.js.map +1 -0
  180. package/dist/validate.d.ts +38 -0
  181. package/dist/validate.d.ts.map +1 -0
  182. package/dist/validate.js +297 -0
  183. package/dist/validate.js.map +1 -0
  184. package/dist/validation.d.ts +6 -0
  185. package/dist/validation.d.ts.map +1 -0
  186. package/dist/validation.js +6 -0
  187. package/dist/validation.js.map +1 -0
  188. package/dist/validity-css.d.ts +6 -0
  189. package/dist/validity-css.d.ts.map +1 -0
  190. package/dist/validity-css.js +11 -0
  191. package/dist/validity-css.js.map +1 -0
  192. package/dist/validity.d.ts +45 -0
  193. package/dist/validity.d.ts.map +1 -0
  194. package/dist/validity.js +445 -0
  195. package/dist/validity.js.map +1 -0
  196. package/package.json +124 -0
@@ -0,0 +1,577 @@
1
+ /**
2
+ * Converts a definition to a Vue 3.5 single-file component that depends only on Vue and the
3
+ * component's own modules. Props, state, computed values, bindings, structural directives, slots,
4
+ * events, and methods map to Vue's own facilities; the controller receives a host generated here from
5
+ * Vue refs, effects, and lifecycle; styles become `<style scoped>`.
6
+ */
7
+ import { fail } from "../diagnostics.js";
8
+ import { isEnumeratedBoolean } from "../expression.js";
9
+ import { componentName } from "../names.js";
10
+ import { getDomInterface } from "../platform.js";
11
+ import { compileComponentStylesForVue } from "../component-styles-build.js";
12
+ import { stateAttribute } from "../component-styles.js";
13
+ import { parseTypeExpression } from "../type-system.js";
14
+ import { targetComponent } from "./backend.js";
15
+ import { escapeHtml, isVoidElement, propKey, propTypeSource, quote } from "./shared.js";
16
+ /** Expression helpers with HTML Next semantics, emitted into each component (not imported) as used. */
17
+ const HELPERS = [
18
+ ["t", ` t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),`],
19
+ ["n", ` n: (v: unknown): number | undefined => typeof v === "number" && v === v ? v : undefined,`],
20
+ ["op", ` op: (op: string, a: unknown, b: unknown): unknown => {
21
+ const x = hn.n(a), y = hn.n(b);
22
+ if (x === undefined || y === undefined) return undefined;
23
+ switch (op) {
24
+ case "<": return x < y; case "<=": return x <= y; case ">": return x > y; case ">=": return x >= y;
25
+ case "+": return x + y; case "-": return x - y; case "*": return x * y; case "/": return x / y; case "%": return x % y;
26
+ }
27
+ return undefined;
28
+ },`],
29
+ ["match", ` match: (op: string, a: unknown, b: unknown): boolean | undefined => typeof a === "string" && typeof b === "string"
30
+ ? op === "^=" ? a.startsWith(b) : op === "$=" ? a.endsWith(b) : a.includes(b)
31
+ : undefined,`],
32
+ ["text", ` text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),`],
33
+ // Vue types intrinsic attributes more narrowly than the strings the platform accepts.
34
+ ["attr", ` attr: (v: unknown): any => v === undefined || v === null || v === false ? undefined : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? undefined : String(v),`],
35
+ ["enumerated", ` enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),`],
36
+ ["call", ` call: (fn: string, ...args: unknown[]): any => {
37
+ if (fn === "format") {
38
+ let index = 1;
39
+ return typeof args[0] === "string" ? args[0].replace(/%s/g, () => index < args.length ? hn.text(args[index++]) : "%s") : undefined;
40
+ }
41
+ const n = args.map(hn.n);
42
+ if (n.some((value) => value === undefined)) return undefined;
43
+ const v = n as number[];
44
+ switch (fn) {
45
+ case "abs": return v.length === 1 ? Math.abs(v[0]!) : undefined;
46
+ case "round": return v.length === 1 ? Math.round(v[0]!) : undefined;
47
+ case "min": return v.length > 0 ? Math.min(...v) : undefined;
48
+ case "max": return v.length > 0 ? Math.max(...v) : undefined;
49
+ case "clamp": return v.length === 3 ? Math.min(Math.max(v[0]!, v[1]!), v[2]!) : undefined;
50
+ }
51
+ return undefined;
52
+ },`],
53
+ ["shape", ` shape: (items: unknown, where: ((item: any) => unknown) | undefined, sort: readonly string[], limit: unknown): any[] => {
54
+ let list = Array.isArray(items) ? items.slice() : [];
55
+ if (where !== undefined) list = list.filter((item) => hn.t(where(item)));
56
+ if (sort.length > 0) {
57
+ const field = (item: unknown, path: string): unknown => item !== null && typeof item === "object" && !Array.isArray(item)
58
+ ? path.split(".").reduce<unknown>((value, key) => (value as Record<string, unknown> | undefined)?.[key], item)
59
+ : item;
60
+ const compare = (a: unknown, b: unknown): number => typeof a === "number" && typeof b === "number" ? a - b : hn.text(a).localeCompare(hn.text(b));
61
+ list.sort((a, b) => {
62
+ for (const key of sort) {
63
+ const descending = key.startsWith("-");
64
+ const order = compare(field(a, descending ? key.slice(1) : key), field(b, descending ? key.slice(1) : key));
65
+ if (order !== 0) return descending ? -order : order;
66
+ }
67
+ return 0;
68
+ });
69
+ }
70
+ return typeof limit === "number" ? list.slice(0, Math.max(0, Math.trunc(limit))) : list;
71
+ },`],
72
+ ];
73
+ /** The `hn` object holding the helpers `code` uses, and the helpers they use. */
74
+ function helperSource(code) {
75
+ const used = new Set();
76
+ const visit = (source) => {
77
+ for (const [, name] of source.matchAll(/\bhn\.(\w+)/g)) {
78
+ if (used.has(name))
79
+ continue;
80
+ used.add(name);
81
+ visit(HELPERS.find(([helper]) => helper === name)?.[1] ?? "");
82
+ }
83
+ };
84
+ visit(code);
85
+ const entries = HELPERS.filter(([name]) => used.has(name));
86
+ return entries.length === 0 ? "" : `const hn = {\n${entries.map(([, source]) => source).join("\n")}\n};\n`;
87
+ }
88
+ const VUE_APIS = ["computed", "onBeforeUnmount", "onMounted", "ref", "shallowRef", "watchEffect"];
89
+ /** Translates an HTML Next expression to JavaScript with the same absence and typing rules. */
90
+ function expression(node, names) {
91
+ switch (node.kind) {
92
+ case "literal":
93
+ return node.value === undefined ? "undefined" : JSON.stringify(node.value);
94
+ case "id":
95
+ return names.get(node.name) ?? "undefined";
96
+ case "member":
97
+ return /^[A-Za-z_$][\w$]*$/.test(node.key)
98
+ ? `(${expression(node.object, names)})?.${node.key}`
99
+ : `(${expression(node.object, names)})?.[${quote(node.key)}]`;
100
+ case "index":
101
+ return `(${expression(node.object, names)})?.[${expression(node.index, names)}]`;
102
+ case "unary":
103
+ return node.op === "not" ? `!hn.t(${expression(node.operand, names)})` : `hn.op("-", 0, ${expression(node.operand, names)})`;
104
+ case "binary": {
105
+ const left = expression(node.left, names);
106
+ const right = expression(node.right, names);
107
+ if (node.op === "and")
108
+ return `(hn.t(${left}) && hn.t(${right}))`;
109
+ if (node.op === "or")
110
+ return `(hn.t(${left}) || hn.t(${right}))`;
111
+ if (node.op === "=")
112
+ return `(${left} === ${right})`;
113
+ if (node.op === "!=")
114
+ return `(${left} !== ${right})`;
115
+ if (node.op === "^=" || node.op === "$=" || node.op === "*=")
116
+ return `hn.match(${quote(node.op)}, ${left}, ${right})`;
117
+ return `hn.op(${quote(node.op)}, ${left}, ${right})`;
118
+ }
119
+ case "call":
120
+ return `hn.call(${[quote(node.fn), ...node.args.map((argument) => expression(argument, names))].join(", ")})`;
121
+ case "object":
122
+ return `({ ${node.pairs.map((pair) => `${quote(pair.key)}: ${expression(pair.value, names)}`).join(", ")} })`;
123
+ case "array":
124
+ return `[${node.items.map((item) => expression(item, names)).join(", ")}]`;
125
+ }
126
+ }
127
+ function compiled(plan, names, source) {
128
+ if (plan === undefined)
129
+ fail("HT030", `Expression \`${source}\` could not be converted.`);
130
+ return expression(plan.ast, names);
131
+ }
132
+ /**
133
+ * A double-quoted HTML attribute value. Only `"` and an `&` that could begin a character reference
134
+ * are escaped, so expressions such as `a && b` stay readable to Vue's type checker, which does not
135
+ * decode references.
136
+ */
137
+ function attributeValue(value) {
138
+ return `"${value.replace(/&(?=[#A-Za-z])/g, "&amp;").replace(/"/g, "&quot;")}"`;
139
+ }
140
+ /**
141
+ * A template binding: the JavaScript expression as an attribute value. String literals use single
142
+ * quotes so the attribute needs no `&quot;`, which Vue's type checker does not decode.
143
+ */
144
+ function bound(code) {
145
+ return attributeValue(code.replace(/"(?:\\.|[^"\\])*"/g, (literal) => `'${literal.slice(1, -1).replace(/\\"/g, "\"").replace(/'/g, "\\'")}'`));
146
+ }
147
+ function writableTarget(path, names) {
148
+ const [root, ...rest] = path;
149
+ const base = names.get(String(root));
150
+ if (base === undefined)
151
+ fail("HT031", `\`${String(root)}\` is not a writable state path.`);
152
+ return `${base}${rest.map((segment) => `[${JSON.stringify(segment)}]`).join("")}`;
153
+ }
154
+ function isComponentTag(name) {
155
+ return name.includes("-") && getDomInterface(name) === undefined;
156
+ }
157
+ function renderChildren(nodes, names, context) {
158
+ return nodes.map((child) => renderNode(child, names, context)).join("");
159
+ }
160
+ function withLocal(names, entries) {
161
+ const template = new Map(names.template);
162
+ const script = new Map(names.script);
163
+ for (const [name, code] of entries) {
164
+ template.set(name, code);
165
+ script.set(name, code);
166
+ }
167
+ return { template, script };
168
+ }
169
+ function renderNode(node, names, context) {
170
+ if (node.kind === "text")
171
+ return escapeHtml(node.value).replace(/\{\{/g, "{{ '{{' }}");
172
+ if (node.kind === "slot") {
173
+ const name = node.nameExpression !== undefined
174
+ ? ` :name=${bound(compiled(node.nameExpression, names.template, "slot name"))}`
175
+ : node.name === undefined ? "" : ` name=${quote(node.name)}`;
176
+ return `<slot${name}>${renderChildren(node.fallback ?? [], names, context)}</slot>`;
177
+ }
178
+ const flow = node.flow;
179
+ if (flow?.kind === "each") {
180
+ const list = compiled(flow.listPlan, names.template, flow.list);
181
+ const item = flow.item;
182
+ const index = flow.index ?? "index";
183
+ const local = withLocal(names, [[item, item], [index, index]]);
184
+ const where = flow.wherePlan === undefined ? "undefined" : `(${item}) => ${expression(flow.wherePlan.ast, local.template)}`;
185
+ const sort = JSON.stringify((flow.sort ?? "").split(",").map((key) => key.trim()).filter(Boolean));
186
+ const limit = flow.limitPlan === undefined ? "undefined" : expression(flow.limitPlan.ast, names.template);
187
+ const key = flow.keyPlan === undefined ? index : expression(flow.keyPlan.ast, local.template);
188
+ const { flow: _flow, ...body } = node;
189
+ return `<template v-for=${bound(`(${item}, ${index}) in hn.shape(${list}, ${where}, ${sort}, ${limit})`)} :key=${bound(key)}>${renderNode(body, local, context)}</template>`;
190
+ }
191
+ if (flow?.kind === "with") {
192
+ const value = compiled(flow.expressionPlan, names.template, flow.expr);
193
+ const { flow: _flow, ...body } = node;
194
+ return `<template v-for=${bound(`${flow.alias} in [${value}]`)}>${renderNode(body, withLocal(names, [[flow.alias, flow.alias]]), context)}</template>`;
195
+ }
196
+ if (flow?.kind === "match") {
197
+ const local = flow.alias === undefined ? names : withLocal(names, [[flow.alias, flow.alias]]);
198
+ const arms = node.children
199
+ .filter((child) => child.kind === "element" && (child.flow?.kind === "when" || child.flow?.kind === "else"))
200
+ .map((arm, index) => {
201
+ const { flow: armFlow, ...armBody } = arm;
202
+ const test = armFlow?.kind === "when" ? compiled(armFlow.testPlan, local.template, armFlow.test) : undefined;
203
+ const directive = test === undefined ? "v-else" : `${index === 0 ? "v-if" : "v-else-if"}=${bound(`hn.t(${test})`)}`;
204
+ return `<template ${directive}>${renderNode(armBody, local, context)}</template>`;
205
+ }).join("");
206
+ const inner = node.name === "template" ? arms : `<${node.name}${literalAttributes(node)}>${arms}</${node.name}>`;
207
+ if (flow.expr === undefined)
208
+ return inner;
209
+ const value = compiled(flow.expressionPlan, names.template, flow.expr);
210
+ return `<template v-for=${bound(`${flow.alias} in [${value}]`)}>${inner}</template>`;
211
+ }
212
+ if (flow?.kind === "if") {
213
+ const { flow: _flow, ...body } = node;
214
+ return `<template v-if=${bound(`hn.t(${compiled(flow.testPlan, names.template, flow.test)})`)}>${renderNode(body, names, context)}</template>`;
215
+ }
216
+ return renderElement(node, names, context, false);
217
+ }
218
+ function literalAttributes(node) {
219
+ return node.attributes
220
+ .filter((attribute) => attribute.kind === "literal")
221
+ .map((attribute) => ` ${attribute.name}=${attributeValue(attribute.value)}`)
222
+ .join("");
223
+ }
224
+ function renderElement(node, names, context, isRoot) {
225
+ const component = isComponentTag(node.name);
226
+ const name = component ? componentName(node.name) : node.name;
227
+ if (component)
228
+ context.imports.add(node.name);
229
+ const literals = [];
230
+ const attributes = [];
231
+ const classes = [];
232
+ const styles = [];
233
+ let content;
234
+ for (const attribute of node.attributes) {
235
+ if (attribute.kind === "literal") {
236
+ literals.push(`${attribute.name}=${attributeValue(attribute.value)}`);
237
+ }
238
+ else if (attribute.kind === "directive") {
239
+ if (attribute.name === "html")
240
+ fail("HT032", "`$html` is not supported in Vue conversion yet.");
241
+ content = `{{ hn.text(${compiled(attribute.expressionPlan, names.template, attribute.expression)}) }}`;
242
+ }
243
+ else if (attribute.kind === "property") {
244
+ // DOM property types are narrower than HTML Next values (a prop may be null).
245
+ attributes.push(`:${attribute.name}.prop=${bound(`(${compiled(attribute.expressionPlan, names.template, attribute.expression)}) as any`)}`);
246
+ }
247
+ else if (attribute.target === "class") {
248
+ classes.push(`${quote(attribute.name)}: hn.t(${compiled(attribute.expressionPlan, names.template, attribute.expression)})`);
249
+ }
250
+ else if (attribute.target === "style") {
251
+ styles.push(`${quote(attribute.name)}: hn.text(${compiled(attribute.expressionPlan, names.template, attribute.expression)})`);
252
+ }
253
+ else if (attribute.twoWay === true && attribute.writablePath !== undefined) {
254
+ attributes.push(`v-model=${bound(writableTarget(attribute.writablePath, names.template))}`);
255
+ }
256
+ else {
257
+ const value = compiled(attribute.expressionPlan, names.template, attribute.expression);
258
+ const helper = isEnumeratedBoolean(attribute.name) ? "hn.enumerated" : "hn.attr";
259
+ attributes.push(component ? `:${attribute.name}=${bound(value)}` : `:${attribute.name}=${bound(`${helper}(${value})`)}`);
260
+ }
261
+ }
262
+ if (classes.length > 0)
263
+ attributes.push(`:class=${bound(`{ ${classes.join(", ")} }`)}`);
264
+ if (styles.length > 0)
265
+ attributes.push(`:style=${bound(`{ ${styles.join(", ")} }`)}`);
266
+ for (const event of node.events ?? []) {
267
+ const handler = (context.definition.declarations ?? []).find((declaration) => declaration.kind === "handler" && declaration.name === event.handler);
268
+ if (handler === undefined)
269
+ fail("HT033", `Handler \`${event.handler}\` is not declared.`);
270
+ attributes.push(`@${event.name}${event.modifiers.map((modifier) => `.${modifier}`).join("")}=${attributeValue(`handler_${safe(event.handler)}`)}`);
271
+ }
272
+ if (node.ref !== undefined) {
273
+ context.usesRefs.value = true;
274
+ attributes.push(`:ref=${bound(`(element) => { refs[${quote(node.ref)}] = element as Element }`)}`);
275
+ }
276
+ if (isRoot) {
277
+ // The consumer's attributes win over the template's literals and lose to its bindings, as in
278
+ // the runtime; Vue combines class and style itself.
279
+ const tag = context.definition.contract.tag;
280
+ literals.unshift(`data-component=${attributeValue(tag)}`);
281
+ literals.push("v-bind=\"$attrs\"");
282
+ if (context.hostState)
283
+ attributes.push(`:${stateAttribute(tag)}="hostState || undefined"`);
284
+ if (context.model)
285
+ attributes.push(`@${context.model}="updateModel"`);
286
+ if (context.root)
287
+ attributes.push("ref=\"root\"");
288
+ }
289
+ // A <template> without structural flow produces its content with no wrapper element.
290
+ if (node.name === "template" && !isRoot)
291
+ return content ?? renderChildren(node.children, names, context);
292
+ attributes.unshift(...literals);
293
+ const open = `<${name}${attributes.length === 0 ? "" : ` ${attributes.join(" ")}`}>`;
294
+ if (!component && isVoidElement(node.name))
295
+ return open;
296
+ const children = content ?? renderChildren(node.children, names, context);
297
+ return `${open}${children}</${name}>`;
298
+ }
299
+ /** A JavaScript predicate for a declared type, so event details are checked as the runtime checks them. */
300
+ function typeCheck(type, value) {
301
+ switch (type.kind) {
302
+ case "terminal":
303
+ switch (type.name) {
304
+ case "string": return `typeof ${value} === "string"`;
305
+ case "boolean": return `typeof ${value} === "boolean"`;
306
+ case "number": return `(typeof ${value} === "number" && Number.isFinite(${value}))`;
307
+ case "integer": return `Number.isInteger(${value})`;
308
+ case "null": return `${value} === null`;
309
+ case "absent": return `${value} === undefined`;
310
+ case "function": return `typeof ${value} === "function"`;
311
+ default: return "true";
312
+ }
313
+ case "keyword":
314
+ return `${value} === ${JSON.stringify(type.value)}`;
315
+ case "union":
316
+ return `(${type.members.map((member) => typeCheck(member, value)).join(" || ")})`;
317
+ case "list":
318
+ return `(Array.isArray(${value}) && (${value} as unknown[]).every((item: unknown) => ${typeCheck(type.item, "item")}))`;
319
+ case "record":
320
+ return `(${value} !== null && typeof ${value} === "object" && !Array.isArray(${value}) && Object.values(${value} as object).every((item: unknown) => ${typeCheck(type.value, "item")}))`;
321
+ case "object": {
322
+ const fields = type.fields.map((field) => {
323
+ const read = `(${value} as Record<string, unknown>)[${quote(field.name)}]`;
324
+ const check = typeCheck(field.type, read);
325
+ return field.optional ? `(${read} === undefined || ${check})` : check;
326
+ });
327
+ const closed = type.open ? [] : [`Object.keys(${value} as object).every((key) => ${JSON.stringify(type.fields.map((field) => field.name))}.includes(key))`];
328
+ return `(${value} !== null && typeof ${value} === "object" && !Array.isArray(${value})${[...fields, ...closed].map((check) => ` && ${check}`).join("")})`;
329
+ }
330
+ }
331
+ }
332
+ function safe(name) {
333
+ return name.replace(/[^A-Za-z0-9_$]/g, "_");
334
+ }
335
+ function handlerSource(handler, names, events) {
336
+ const lines = [`const handler_${safe(handler.name)} = (event?: Event): void => {`];
337
+ const local = withLocal(names, [["event", "event"]]);
338
+ for (const step of handler.steps) {
339
+ const guard = step.guard === undefined ? "" : `if (hn.t(${expression(step.guard.ast, local.script)})) `;
340
+ if (step.kind === "set") {
341
+ lines.push(` ${guard}${writableTarget(step.writablePath, local.script)} = ${expression(step.value.ast, local.script)};`);
342
+ }
343
+ else if (step.kind === "dispatch") {
344
+ const detail = step.value === undefined ? "undefined" : expression(step.value.ast, local.script);
345
+ const declaration = events.find((event) => event.name === step.event);
346
+ if (declaration === undefined)
347
+ fail("HT034", `Handler \`${handler.name}\` dispatches undeclared event \`${step.event}\`.`);
348
+ lines.push(` ${guard}dispatch(${quote(step.event)}, ${detail});`);
349
+ }
350
+ else if (step.kind === "focus") {
351
+ lines.push(` ${guard}(refs[${quote(step.target)}] as HTMLElement | undefined)?.focus();`);
352
+ }
353
+ else {
354
+ lines.push(` ${guard}(refs[${quote(step.target)}] as HTMLInputElement | undefined)?.reportValidity?.();`);
355
+ }
356
+ }
357
+ lines.push("};");
358
+ return lines.join("\n");
359
+ }
360
+ export function generateVue(definition, version) {
361
+ const { contract, template } = definition;
362
+ const target = targetComponent(definition);
363
+ const declarations = definition.declarations ?? [];
364
+ if (declarations.some((declaration) => declaration.kind === "data")) {
365
+ fail("HT035", `<${contract.tag}> declares <data>, which Vue conversion does not support yet.`);
366
+ }
367
+ const states = declarations.filter((declaration) => declaration.kind === "state");
368
+ const computedValues = declarations.filter((declaration) => declaration.kind === "computed");
369
+ const handlers = declarations.filter((declaration) => declaration.kind === "handler");
370
+ const events = declarations.filter((declaration) => declaration.kind === "event");
371
+ // A native form-control root with a `value` prop takes Vue's v-model: `modelValue` sets the value
372
+ // and the control's input (change, for a select) reports it.
373
+ const modelProp = ["input", "textarea", "select"].includes(template.name)
374
+ ? target.props.find((prop) => prop.name === "value")
375
+ : undefined;
376
+ const names = { template: new Map(), script: new Map() };
377
+ for (const prop of target.props) {
378
+ const read = prop === modelProp
379
+ ? "(props.modelValue ?? props.value)"
380
+ : /^[A-Za-z_$][\w$]*$/.test(prop.name) ? `props.${prop.name}` : `props[${quote(prop.name)}]`;
381
+ names.template.set(prop.name, read);
382
+ names.script.set(prop.name, read);
383
+ }
384
+ for (const state of states) {
385
+ names.template.set(state.name, `state_${safe(state.name)}`);
386
+ names.script.set(state.name, `state_${safe(state.name)}.value`);
387
+ }
388
+ for (const value of computedValues) {
389
+ names.template.set(value.name, `computed_${safe(value.name)}`);
390
+ names.script.set(value.name, `computed_${safe(value.name)}.value`);
391
+ }
392
+ if (template.flow !== undefined) {
393
+ fail("HT036", `<${contract.tag}> has a structural directive on its root, which Vue conversion does not support yet.`);
394
+ }
395
+ const styles = compileComponentStylesForVue(definition.css, definition);
396
+ const controlled = definition.controller !== undefined;
397
+ const dispatches = events.length > 0 || controlled;
398
+ const reads = styles.stateNames.length > 0 || controlled;
399
+ const context = {
400
+ definition,
401
+ imports: new Set(),
402
+ usesRefs: { value: false },
403
+ root: dispatches,
404
+ hostState: styles.stateNames.length > 0,
405
+ ...(modelProp === undefined ? {} : { model: template.name === "select" ? "change" : "input" }),
406
+ };
407
+ const rootMarkup = renderElement(template, names, context, true);
408
+ const defaults = target.props.filter((prop) => "default" in prop.contract);
409
+ const propsType = [
410
+ "{",
411
+ ...target.props.map((prop) => ` ${propKey(prop.name)}?: ${propTypeSource(prop.contract)};`),
412
+ ...(modelProp === undefined ? [] : [` modelValue?: ${propTypeSource(modelProp.contract)};`]),
413
+ "}",
414
+ ].join("\n");
415
+ const emits = [
416
+ ...events.map((event) => {
417
+ const typed = target.events.find((candidate) => candidate.name === event.name);
418
+ return ` ${quote(event.name)}: [detail: ${typed?.detailType ?? "unknown"}];`;
419
+ }),
420
+ ...(modelProp === undefined ? [] : [' "update:modelValue": [value: string];']),
421
+ ];
422
+ const body = [
423
+ ...(target.props.length === 0 ? [] : defaults.length === 0 ? [`const props = defineProps<${propsType}>();`] : [
424
+ `const props = withDefaults(defineProps<${propsType}>(), {`,
425
+ ...defaults.map((prop) => ` ${propKey(prop.name)}: ${defaultSource(prop.contract.default)},`),
426
+ "});",
427
+ ]),
428
+ ...(emits.length === 0 ? [] : ["const emit = defineEmits<{", ...emits, "}>();"]),
429
+ ...(modelProp === undefined ? [] : [
430
+ 'const updateModel = (event: Event): void => emit("update:modelValue", (event.target as HTMLInputElement).value);',
431
+ ]),
432
+ ...(dispatches ? ["const root = ref<HTMLElement | null>(null);"] : []),
433
+ ...(context.usesRefs.value || controlled ? ["const refs: Record<string, Element | undefined> = {};"] : []),
434
+ ...states.map((state) => `const state_${safe(state.name)} = ref<any>(${state.expression === undefined ? "undefined" : expression(state.expression.ast, names.script)});`),
435
+ ...computedValues.map((value) => `const computed_${safe(value.name)} = computed(() => ${value.expression === undefined ? "undefined" : expression(value.expression.ast, names.script)});`),
436
+ ...(!dispatches ? [] : [
437
+ "",
438
+ "/** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */",
439
+ "const dispatch = (name: string, detail?: unknown): boolean => {",
440
+ ...(events.length === 0 ? [] : [
441
+ ` const declared = ${JSON.stringify(Object.fromEntries(events.map((event) => [event.name, { bubbles: event.bubbles, composed: event.composed, cancelable: event.cancelable }])))} as Record<string, EventInit | undefined>;`,
442
+ " const checks: Record<string, (detail: unknown) => boolean> = {",
443
+ ...events.map((event) => ` ${quote(event.name)}: (detail: unknown) => ${typeCheck(parseTypeExpression(event.type), "detail")},`),
444
+ " };",
445
+ " if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {",
446
+ " throw new TypeError(`HR002: Event \\`${name}\\` detail does not satisfy its declared type.`);",
447
+ " }",
448
+ " (emit as (name: string, detail: unknown) => void)(name, detail);",
449
+ ]),
450
+ ` return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ${events.length === 0 ? "" : "...declared[name], "}detail })) ?? true;`,
451
+ "};",
452
+ ]),
453
+ ...handlers.map((handler) => handlerSource(handler, names, events)),
454
+ ...(styles.stateNames.length === 0 ? [] : [
455
+ "",
456
+ "/** The resolved values the styles' :host-state() rules test. */",
457
+ `const hostState = computed(() => (${JSON.stringify(styles.stateNames)} as const).flatMap((name) => {`,
458
+ " const value = read(name);",
459
+ " const tokens: string[] = hn.t(value) ? [name] : [];",
460
+ " if (typeof value === \"string\" || typeof value === \"number\") tokens.push(`${name}=${encodeURIComponent(String(value))}`);",
461
+ " return tokens;",
462
+ "}).join(\" \"));",
463
+ ]),
464
+ ...(!reads ? [] : [
465
+ "",
466
+ "function read(name: string): unknown {",
467
+ ...states.map((state) => ` if (name === ${quote(state.name)}) return state_${safe(state.name)}.value;`),
468
+ ...computedValues.map((value) => ` if (name === ${quote(value.name)}) return computed_${safe(value.name)}.value;`),
469
+ target.props.length === 0 ? " return undefined;" : " return (props as Record<string, unknown>)[name];",
470
+ "}",
471
+ ]),
472
+ ...(!controlled ? [] : [
473
+ "",
474
+ "function write(name: string, value: unknown): boolean {",
475
+ ...states.map((state) => ` if (name === ${quote(state.name)}) { state_${safe(state.name)}.value = value; return true; }`),
476
+ " throw new TypeError(`Only declared state is writable; \\`${name}\\` is not.`);",
477
+ "}",
478
+ ]),
479
+ "",
480
+ ...hostSource(definition, target.methods),
481
+ ];
482
+ const code = `${body.join("\n")}\n${rootMarkup}`;
483
+ const apis = VUE_APIS.filter((api) => new RegExp(`\\b${api}[<(]`).test(code));
484
+ const script = [
485
+ `<!-- Generated by HTML Next ${version} for Vue 3.5. Do not edit. -->`,
486
+ '<script setup lang="ts">',
487
+ ...(apis.length === 0 ? [] : [`import { ${apis.join(", ")} } from "vue";`]),
488
+ ...[...context.imports].sort().map((tag) => `import ${componentName(tag)} from ${quote(`./${componentName(tag)}.vue`)};`),
489
+ ...(definition.controller === undefined ? [] : [`import * as controllerModule from ${quote(definition.controller)};`]),
490
+ "",
491
+ "defineOptions({ inheritAttrs: false });",
492
+ "",
493
+ helperSource(code),
494
+ ...body,
495
+ "</script>",
496
+ "",
497
+ "<template>",
498
+ ` ${rootMarkup}`,
499
+ "</template>",
500
+ ];
501
+ if (styles.css !== "")
502
+ script.push("", "<style scoped>", styles.css, "</style>");
503
+ return `${script.join("\n").replace(/\n{3,}/g, "\n\n")}\n`;
504
+ }
505
+ function defaultSource(value) {
506
+ // Vue requires factories for object and array defaults.
507
+ return value !== null && typeof value === "object" ? `() => (${JSON.stringify(value)})` : JSON.stringify(value);
508
+ }
509
+ /** The controller host, built from Vue refs, effects, and lifecycle. */
510
+ function hostSource(definition, methods) {
511
+ if (definition.controller === undefined)
512
+ return methods.length === 0 ? [] : [
513
+ `defineExpose({ ${methods.map((method) => `${propKey(method.name)}: () => Promise.reject(new TypeError(${quote(`<${definition.contract.tag}> has no controller.`)}))`).join(", ")} });`,
514
+ ];
515
+ return [
516
+ "const stops: Array<() => void> = [];",
517
+ "const host = {",
518
+ " get element(): Element { return root.value as Element; },",
519
+ " state: new Proxy({} as Record<string, unknown>, {",
520
+ " get: (_target, name) => typeof name === \"string\" ? read(name) : undefined,",
521
+ " set: (_target, name, value) => typeof name === \"string\" && write(name, value),",
522
+ " }),",
523
+ " refs: refs as Readonly<Record<string, Element>>,",
524
+ " elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {",
525
+ " get: (_target, name) => {",
526
+ " if (typeof name !== \"string\" || root.value === null) return undefined;",
527
+ " const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector(\"form\");",
528
+ " return form?.elements.namedItem(name) ?? root.value.querySelector(`[name=\"${CSS.escape(name)}\"]`) ?? undefined;",
529
+ " },",
530
+ " }),",
531
+ " signal<T>(initialValue: T) {",
532
+ " const value = shallowRef(initialValue);",
533
+ " return {",
534
+ " get: (): T => value.value,",
535
+ " set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },",
536
+ " update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },",
537
+ " };",
538
+ " },",
539
+ " computed<T>(compute: () => T) {",
540
+ " const value = computed(compute);",
541
+ " return { get: (): T => value.value };",
542
+ " },",
543
+ " effect(run: () => void | (() => void)): () => void {",
544
+ " const stop = watchEffect((onCleanup) => {",
545
+ " const cleanup = run();",
546
+ " if (typeof cleanup === \"function\") onCleanup(cleanup);",
547
+ " }, { flush: \"post\" });",
548
+ " stops.push(stop);",
549
+ " return stop;",
550
+ " },",
551
+ " on(event: string, listener: EventListener): () => void {",
552
+ " const element = root.value;",
553
+ " element?.addEventListener(event, listener);",
554
+ " const off = (): void => element?.removeEventListener(event, listener);",
555
+ " stops.push(off);",
556
+ " return off;",
557
+ " },",
558
+ " dispatch,",
559
+ "};",
560
+ "",
561
+ "let cleanup: void | (() => void);",
562
+ "let ready: Promise<void> | undefined;",
563
+ "onMounted(() => {",
564
+ " ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });",
565
+ "});",
566
+ "onBeforeUnmount(() => {",
567
+ " for (const stop of stops.splice(0)) stop();",
568
+ " if (typeof cleanup === \"function\") cleanup();",
569
+ "});",
570
+ ...(methods.length === 0 ? [] : [
571
+ "defineExpose({",
572
+ ...methods.map((method) => ` ${propKey(method.name)}: async (...args: unknown[]) => { await ready; return (controllerModule as Record<string, (...values: unknown[]) => unknown>)[${quote(method.exportName)}]!(host, ...args); },`),
573
+ "});",
574
+ ]),
575
+ ];
576
+ }
577
+ //# sourceMappingURL=vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.js","sourceRoot":"","sources":["../../src/targets/vue.ts"],"names":[],"mappings":"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"}