@blinkk/root 2.5.13 → 3.0.1-alpha.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 (38) hide show
  1. package/dist/chunk-3OVMCKPA.js +416 -0
  2. package/dist/chunk-3OVMCKPA.js.map +1 -0
  3. package/dist/{chunk-3KGEENDW.js → chunk-6P3B7ZXL.js} +16 -17
  4. package/dist/chunk-6P3B7ZXL.js.map +1 -0
  5. package/dist/chunk-CY5IQ4AQ.js +73 -0
  6. package/dist/chunk-CY5IQ4AQ.js.map +1 -0
  7. package/dist/{chunk-ISNB54FM.js → chunk-EBE4O463.js} +30 -19
  8. package/dist/chunk-EBE4O463.js.map +1 -0
  9. package/dist/{chunk-EWCJOOZN.js → chunk-G7OKXRD3.js} +34 -32
  10. package/dist/chunk-G7OKXRD3.js.map +1 -0
  11. package/dist/cli.d.ts +3 -1
  12. package/dist/cli.js +3 -3
  13. package/dist/core.d.ts +4 -2
  14. package/dist/core.js +4 -4
  15. package/dist/core.js.map +1 -1
  16. package/dist/functions.js +3 -3
  17. package/dist/jsx/jsx-dev-runtime.d.ts +1 -0
  18. package/dist/jsx/jsx-dev-runtime.js +11 -0
  19. package/dist/jsx/jsx-dev-runtime.js.map +1 -0
  20. package/dist/jsx/jsx-runtime.d.ts +1 -0
  21. package/dist/jsx/jsx-runtime.js +19 -0
  22. package/dist/jsx/jsx-runtime.js.map +1 -0
  23. package/dist/jsx-C8BaDh-4.d.ts +14 -0
  24. package/dist/jsx-dev-runtime-DUJrvx5P.d.ts +677 -0
  25. package/dist/jsx.d.ts +2 -0
  26. package/dist/jsx.js +23 -0
  27. package/dist/jsx.js.map +1 -0
  28. package/dist/middleware.d.ts +4 -2
  29. package/dist/node.d.ts +3 -1
  30. package/dist/node.js +1 -1
  31. package/dist/render.d.ts +3 -1
  32. package/dist/render.js +45 -10
  33. package/dist/render.js.map +1 -1
  34. package/dist/{types-BXpvdaTX.d.ts → types-BstdV3Rj.d.ts} +31 -1
  35. package/package.json +21 -8
  36. package/dist/chunk-3KGEENDW.js.map +0 -1
  37. package/dist/chunk-EWCJOOZN.js.map +0 -1
  38. package/dist/chunk-ISNB54FM.js.map +0 -1
@@ -0,0 +1,416 @@
1
+ import {
2
+ Fragment
3
+ } from "./chunk-CY5IQ4AQ.js";
4
+
5
+ // src/jsx/jsx-render.ts
6
+ import { options as preactOptions } from "preact";
7
+ var VOID_ELEMENTS = /* @__PURE__ */ new Set([
8
+ "area",
9
+ "base",
10
+ "br",
11
+ "col",
12
+ "embed",
13
+ "hr",
14
+ "img",
15
+ "input",
16
+ "link",
17
+ "meta",
18
+ "param",
19
+ "source",
20
+ "track",
21
+ "wbr"
22
+ ]);
23
+ var RAW_CONTENT_ELEMENTS = /* @__PURE__ */ new Set(["pre", "textarea", "script", "style"]);
24
+ var DEFAULT_BLOCK_ELEMENTS = /* @__PURE__ */ new Set([
25
+ "address",
26
+ "article",
27
+ "aside",
28
+ "blockquote",
29
+ "body",
30
+ "dd",
31
+ "details",
32
+ "dialog",
33
+ "div",
34
+ "dl",
35
+ "dt",
36
+ "fieldset",
37
+ "figcaption",
38
+ "figure",
39
+ "footer",
40
+ "form",
41
+ "h1",
42
+ "h2",
43
+ "h3",
44
+ "h4",
45
+ "h5",
46
+ "h6",
47
+ "head",
48
+ "header",
49
+ "hgroup",
50
+ "hr",
51
+ "html",
52
+ "li",
53
+ "link",
54
+ "main",
55
+ "meta",
56
+ "nav",
57
+ "noscript",
58
+ "ol",
59
+ "p",
60
+ "pre",
61
+ "script",
62
+ "search",
63
+ "section",
64
+ "style",
65
+ "summary",
66
+ "table",
67
+ "tbody",
68
+ "td",
69
+ "tfoot",
70
+ "th",
71
+ "thead",
72
+ "title",
73
+ "tr",
74
+ "ul"
75
+ ]);
76
+ var PROP_TO_ATTR = {
77
+ acceptCharset: "accept-charset",
78
+ autoCapitalize: "autocapitalize",
79
+ autoComplete: "autocomplete",
80
+ autoFocus: "autofocus",
81
+ autoPlay: "autoplay",
82
+ charSet: "charset",
83
+ className: "class",
84
+ colSpan: "colspan",
85
+ contentEditable: "contenteditable",
86
+ crossOrigin: "crossorigin",
87
+ dateTime: "datetime",
88
+ encType: "enctype",
89
+ formAction: "formaction",
90
+ formEncType: "formenctype",
91
+ formMethod: "formmethod",
92
+ formNoValidate: "formnovalidate",
93
+ formTarget: "formtarget",
94
+ frameBorder: "frameborder",
95
+ hrefLang: "hreflang",
96
+ htmlFor: "for",
97
+ httpEquiv: "http-equiv",
98
+ inputMode: "inputmode",
99
+ itemProp: "itemprop",
100
+ itemRef: "itemref",
101
+ itemScope: "itemscope",
102
+ itemType: "itemtype",
103
+ maxLength: "maxlength",
104
+ mediaGroup: "mediagroup",
105
+ minLength: "minlength",
106
+ noModule: "nomodule",
107
+ noValidate: "novalidate",
108
+ playsInline: "playsinline",
109
+ readOnly: "readonly",
110
+ referrerPolicy: "referrerpolicy",
111
+ rowSpan: "rowspan",
112
+ spellCheck: "spellcheck",
113
+ srcDoc: "srcdoc",
114
+ srcLang: "srclang",
115
+ srcSet: "srcset",
116
+ tabIndex: "tabindex",
117
+ useMap: "usemap",
118
+ // SVG presentation attributes (camelCase -> kebab-case).
119
+ clipPath: "clip-path",
120
+ clipRule: "clip-rule",
121
+ colorInterpolation: "color-interpolation",
122
+ colorInterpolationFilters: "color-interpolation-filters",
123
+ dominantBaseline: "dominant-baseline",
124
+ fillOpacity: "fill-opacity",
125
+ fillRule: "fill-rule",
126
+ floodColor: "flood-color",
127
+ floodOpacity: "flood-opacity",
128
+ imageRendering: "image-rendering",
129
+ letterSpacing: "letter-spacing",
130
+ lightingColor: "lighting-color",
131
+ markerEnd: "marker-end",
132
+ markerMid: "marker-mid",
133
+ markerStart: "marker-start",
134
+ paintOrder: "paint-order",
135
+ pointerEvents: "pointer-events",
136
+ shapeRendering: "shape-rendering",
137
+ stopColor: "stop-color",
138
+ stopOpacity: "stop-opacity",
139
+ strokeDasharray: "stroke-dasharray",
140
+ strokeDashoffset: "stroke-dashoffset",
141
+ strokeLinecap: "stroke-linecap",
142
+ strokeLinejoin: "stroke-linejoin",
143
+ strokeMiterlimit: "stroke-miterlimit",
144
+ strokeOpacity: "stroke-opacity",
145
+ strokeWidth: "stroke-width",
146
+ textAnchor: "text-anchor",
147
+ textDecoration: "text-decoration",
148
+ textRendering: "text-rendering",
149
+ transformOrigin: "transform-origin",
150
+ vectorEffect: "vector-effect",
151
+ wordSpacing: "word-spacing",
152
+ writingMode: "writing-mode"
153
+ };
154
+ var AMP = "&";
155
+ var LT = "<";
156
+ var GT = ">";
157
+ var QUOT = """;
158
+ function isDef(value) {
159
+ return value !== null && value !== void 0;
160
+ }
161
+ function escapeHtml(str) {
162
+ let result = "";
163
+ let last = 0;
164
+ for (let i = 0; i < str.length; i++) {
165
+ const ch = str.charCodeAt(i);
166
+ let escaped;
167
+ if (ch === 38) escaped = AMP;
168
+ else if (ch === 60) escaped = LT;
169
+ else if (ch === 62) escaped = GT;
170
+ if (escaped) {
171
+ result += str.slice(last, i) + escaped;
172
+ last = i + 1;
173
+ }
174
+ }
175
+ if (last === 0) return str;
176
+ return result + str.slice(last);
177
+ }
178
+ function escapeAttr(str) {
179
+ let result = "";
180
+ let last = 0;
181
+ for (let i = 0; i < str.length; i++) {
182
+ const ch = str.charCodeAt(i);
183
+ let escaped;
184
+ if (ch === 38) escaped = AMP;
185
+ else if (ch === 34) escaped = QUOT;
186
+ else if (ch === 60) escaped = LT;
187
+ else if (ch === 62) escaped = GT;
188
+ if (escaped) {
189
+ result += str.slice(last, i) + escaped;
190
+ last = i + 1;
191
+ }
192
+ }
193
+ if (last === 0) return str;
194
+ return result + str.slice(last);
195
+ }
196
+ function styleToString(style) {
197
+ const parts = [];
198
+ for (const key in style) {
199
+ const value = style[key];
200
+ if (!isDef(value) || value === "") continue;
201
+ const cssKey = key.replace(/[A-Z]/g, (m) => "-" + m.toLowerCase());
202
+ parts.push(`${cssKey}:${value}`);
203
+ }
204
+ return parts.join(";");
205
+ }
206
+ function renderJsxToString(vnode, options) {
207
+ const mode = options?.mode ?? "pretty";
208
+ const isPretty = mode === "pretty";
209
+ const blockSet = new Set(DEFAULT_BLOCK_ELEMENTS);
210
+ if (options?.blockElements) {
211
+ for (const el of options.blockElements) {
212
+ blockSet.add(el);
213
+ }
214
+ }
215
+ const contextStacks = /* @__PURE__ */ new Map();
216
+ function pushCtx(contextId, value) {
217
+ let stack = contextStacks.get(contextId);
218
+ if (!stack) {
219
+ stack = [];
220
+ contextStacks.set(contextId, stack);
221
+ }
222
+ stack.push(value);
223
+ }
224
+ function popCtx(contextId) {
225
+ contextStacks.get(contextId)?.pop();
226
+ }
227
+ function buildGlobalContext() {
228
+ const globalCtx = {};
229
+ for (const [contextId, stack] of contextStacks) {
230
+ if (stack.length > 0) {
231
+ globalCtx[contextId] = {
232
+ props: { value: stack[stack.length - 1] },
233
+ sub: noop
234
+ };
235
+ }
236
+ }
237
+ return globalCtx;
238
+ }
239
+ function render(node, inline) {
240
+ if (!isDef(node) || typeof node === "boolean") return "";
241
+ if (typeof node === "string") return escapeHtml(node);
242
+ if (typeof node === "number" || typeof node === "bigint")
243
+ return String(node);
244
+ if (Array.isArray(node)) return node.map((n) => render(n, inline)).join("");
245
+ if (typeof node !== "object" || !("type" in node)) return "";
246
+ const { type, props } = node;
247
+ if (type === Fragment) {
248
+ return renderChildren(props?.children);
249
+ }
250
+ if (typeof type === "function") {
251
+ return renderComponent(node);
252
+ }
253
+ if (typeof type === "string") {
254
+ return renderElement(type, props, inline);
255
+ }
256
+ return "";
257
+ }
258
+ function renderComponent(vnode2) {
259
+ const { type, props } = vnode2;
260
+ const fn = type;
261
+ const fnAny = fn;
262
+ if (fnAny._isProvider && fnAny._context) {
263
+ const ctx = fnAny._context;
264
+ ctx._stack.push(props.value);
265
+ const result = renderChildren(props.children);
266
+ ctx._stack.pop();
267
+ return result;
268
+ }
269
+ let contextId;
270
+ if (typeof fnAny.__c === "string" && fnAny.__c.startsWith("__cC")) {
271
+ contextId = fnAny.__c;
272
+ } else if (fnAny.__ && typeof fnAny.__ === "object" && fnAny.__.__c) {
273
+ contextId = fnAny.__.__c;
274
+ }
275
+ if (contextId) {
276
+ pushCtx(contextId, props.value);
277
+ const result = renderChildren(props.children);
278
+ popCtx(contextId);
279
+ return result;
280
+ }
281
+ if (fn.contextType) {
282
+ const ctx = fn.contextType;
283
+ const ctxId = ctx.__c;
284
+ const stack = contextStacks.get(ctxId);
285
+ const value = stack && stack.length > 0 ? stack[stack.length - 1] : ctx.__;
286
+ if (typeof props.children === "function") {
287
+ return render(props.children(value));
288
+ }
289
+ return renderChildren(props.children);
290
+ }
291
+ const component = {
292
+ props,
293
+ context: buildGlobalContext(),
294
+ state: {},
295
+ __v: vnode2,
296
+ // _vnode
297
+ __d: false,
298
+ // _dirty
299
+ __h: [],
300
+ // _renderCallbacks
301
+ __s: {},
302
+ // _nextState
303
+ __H: null
304
+ // _hooks (initialised by hooks addon)
305
+ };
306
+ vnode2.__c = component;
307
+ preactOptions.__b?.(vnode2);
308
+ preactOptions.__r?.(vnode2);
309
+ try {
310
+ if (fn.prototype && fn.prototype.render) {
311
+ const instance = new fn(props, component.context);
312
+ instance.__n = component.__n;
313
+ instance.__H = component.__H;
314
+ vnode2.__c = instance;
315
+ preactOptions.__r?.(vnode2);
316
+ return render(instance.render(instance.props, instance.state));
317
+ }
318
+ const rendered = fn(props, component.context);
319
+ return render(rendered);
320
+ } finally {
321
+ preactOptions.diffed?.(vnode2);
322
+ }
323
+ }
324
+ function renderElement(tag, props, inline) {
325
+ const isBlock = isPretty && !inline && blockSet.has(tag);
326
+ const isVoid = VOID_ELEMENTS.has(tag);
327
+ const attrs = renderAttrs(tag, props);
328
+ let result = "<" + tag + attrs + ">";
329
+ if (isVoid) {
330
+ if (isBlock) result += "\n";
331
+ return result;
332
+ }
333
+ let inner = "";
334
+ if (isDef(props?.dangerouslySetInnerHTML?.__html)) {
335
+ inner = props.dangerouslySetInnerHTML.__html;
336
+ } else if (isDef(props?.children)) {
337
+ inner = renderChildren(props.children);
338
+ } else if (tag === "textarea" && props) {
339
+ const textVal = props.value ?? props.defaultValue;
340
+ if (isDef(textVal)) {
341
+ inner = escapeHtml(String(textVal));
342
+ }
343
+ }
344
+ if (isBlock) {
345
+ const hasBlockChildren = !RAW_CONTENT_ELEMENTS.has(tag) && inner.includes("\n");
346
+ if (hasBlockChildren) {
347
+ result += "\n" + inner + "</" + tag + ">\n";
348
+ } else {
349
+ result += inner + "</" + tag + ">\n";
350
+ }
351
+ } else {
352
+ result += inner + "</" + tag + ">";
353
+ }
354
+ return result;
355
+ }
356
+ function renderAttrs(tag, props) {
357
+ if (!props) return "";
358
+ const parts = [];
359
+ for (const key in props) {
360
+ if (key === "children" || key === "dangerouslySetInnerHTML" || key === "key" || key === "ref" || key === "__self" || key === "__source") {
361
+ continue;
362
+ }
363
+ if (tag === "textarea" && (key === "value" || key === "defaultValue")) {
364
+ continue;
365
+ }
366
+ if (key.length > 2 && key[0] === "o" && key[1] === "n") continue;
367
+ let value = props[key];
368
+ if (!isDef(value)) continue;
369
+ if (value === false && !key.startsWith("data-")) continue;
370
+ const attrName = PROP_TO_ATTR[key] || key;
371
+ if (value === true) {
372
+ parts.push(" ", attrName);
373
+ continue;
374
+ }
375
+ if (key === "style" && typeof value === "object") {
376
+ value = styleToString(value);
377
+ if (!value) continue;
378
+ }
379
+ parts.push(" ", attrName, '="', escapeAttr(String(value)), '"');
380
+ }
381
+ return parts.join("");
382
+ }
383
+ function isTextNode(child) {
384
+ if (!isDef(child) || typeof child === "boolean") return false;
385
+ return typeof child === "string" || typeof child === "number" || typeof child === "bigint";
386
+ }
387
+ function hasMixedContent(children) {
388
+ let hasText = false;
389
+ let hasElement = false;
390
+ for (const child of children) {
391
+ if (isTextNode(child)) {
392
+ hasText = true;
393
+ } else if (isDef(child) && typeof child === "object" && "type" in child) {
394
+ hasElement = true;
395
+ }
396
+ if (hasText && hasElement) return true;
397
+ }
398
+ return false;
399
+ }
400
+ function renderChildren(children) {
401
+ if (!isDef(children)) return "";
402
+ if (Array.isArray(children)) {
403
+ const inline = isPretty && hasMixedContent(children);
404
+ return children.map((child) => render(child, inline)).join("");
405
+ }
406
+ return render(children);
407
+ }
408
+ return render(vnode);
409
+ }
410
+ function noop() {
411
+ }
412
+
413
+ export {
414
+ renderJsxToString
415
+ };
416
+ //# sourceMappingURL=chunk-3OVMCKPA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/jsx/jsx-render.ts"],"sourcesContent":["import {options as preactOptions} from 'preact';\nimport {VNode, Fragment} from './jsx-runtime.js';\n\n/** HTML void elements (self-closing, no end tag). */\nconst VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\n/** Tags whose text content may contain literal newlines that should not be treated as block-child indicators. */\nconst RAW_CONTENT_ELEMENTS = new Set(['pre', 'textarea', 'script', 'style']);\n\n/** Standard HTML block-level elements. */\nconst DEFAULT_BLOCK_ELEMENTS = new Set([\n 'address',\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'dd',\n 'details',\n 'dialog',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'li',\n 'link',\n 'main',\n 'meta',\n 'nav',\n 'noscript',\n 'ol',\n 'p',\n 'pre',\n 'script',\n 'search',\n 'section',\n 'style',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'ul',\n]);\n\n/** JSX prop name -> HTML attribute name. */\nconst PROP_TO_ATTR: Record<string, string> = {\n acceptCharset: 'accept-charset',\n autoCapitalize: 'autocapitalize',\n autoComplete: 'autocomplete',\n autoFocus: 'autofocus',\n autoPlay: 'autoplay',\n charSet: 'charset',\n className: 'class',\n colSpan: 'colspan',\n contentEditable: 'contenteditable',\n crossOrigin: 'crossorigin',\n dateTime: 'datetime',\n encType: 'enctype',\n formAction: 'formaction',\n formEncType: 'formenctype',\n formMethod: 'formmethod',\n formNoValidate: 'formnovalidate',\n formTarget: 'formtarget',\n frameBorder: 'frameborder',\n hrefLang: 'hreflang',\n htmlFor: 'for',\n httpEquiv: 'http-equiv',\n inputMode: 'inputmode',\n itemProp: 'itemprop',\n itemRef: 'itemref',\n itemScope: 'itemscope',\n itemType: 'itemtype',\n maxLength: 'maxlength',\n mediaGroup: 'mediagroup',\n minLength: 'minlength',\n noModule: 'nomodule',\n noValidate: 'novalidate',\n playsInline: 'playsinline',\n readOnly: 'readonly',\n referrerPolicy: 'referrerpolicy',\n rowSpan: 'rowspan',\n spellCheck: 'spellcheck',\n srcDoc: 'srcdoc',\n srcLang: 'srclang',\n srcSet: 'srcset',\n tabIndex: 'tabindex',\n useMap: 'usemap',\n\n // SVG presentation attributes (camelCase -> kebab-case).\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n dominantBaseline: 'dominant-baseline',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n paintOrder: 'paint-order',\n pointerEvents: 'pointer-events',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strokeDasharray: 'stroke-dasharray',\n strokeDashoffset: 'stroke-dashoffset',\n strokeLinecap: 'stroke-linecap',\n strokeLinejoin: 'stroke-linejoin',\n strokeMiterlimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n vectorEffect: 'vector-effect',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n};\n\nconst AMP = '&amp;';\nconst LT = '&lt;';\nconst GT = '&gt;';\nconst QUOT = '&quot;';\n\n/** Returns `true` when `value` is neither `null` nor `undefined`. */\nfunction isDef<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nfunction escapeHtml(str: string): string {\n let result = '';\n let last = 0;\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i);\n let escaped: string | undefined;\n if (ch === 38) escaped = AMP;\n else if (ch === 60) escaped = LT;\n else if (ch === 62) escaped = GT;\n if (escaped) {\n result += str.slice(last, i) + escaped;\n last = i + 1;\n }\n }\n if (last === 0) return str;\n return result + str.slice(last);\n}\n\nfunction escapeAttr(str: string): string {\n let result = '';\n let last = 0;\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i);\n let escaped: string | undefined;\n if (ch === 38) escaped = AMP;\n else if (ch === 34) escaped = QUOT;\n else if (ch === 60) escaped = LT;\n else if (ch === 62) escaped = GT;\n if (escaped) {\n result += str.slice(last, i) + escaped;\n last = i + 1;\n }\n }\n if (last === 0) return str;\n return result + str.slice(last);\n}\n\nfunction styleToString(style: Record<string, any>): string {\n const parts: string[] = [];\n for (const key in style) {\n const value = style[key];\n if (!isDef(value) || value === '') continue;\n // Convert camelCase to kebab-case.\n const cssKey = key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n parts.push(`${cssKey}:${value}`);\n }\n return parts.join(';');\n}\n\nexport interface JsxRenderOptions {\n /** Render mode. `'pretty'` adds newlines around block elements; `'minimal'` outputs compact HTML. Default: `'pretty'`. */\n mode?: 'pretty' | 'minimal';\n /** Additional tag names to treat as block-level elements in pretty mode. */\n blockElements?: string[];\n}\n\n/**\n * Renders a Preact VNode tree to an HTML string.\n */\nexport function renderJsxToString(\n vnode: VNode,\n options?: JsxRenderOptions\n): string {\n const mode = options?.mode ?? 'pretty';\n const isPretty = mode === 'pretty';\n const blockSet = new Set(DEFAULT_BLOCK_ELEMENTS);\n if (options?.blockElements) {\n for (const el of options.blockElements) {\n blockSet.add(el);\n }\n }\n\n // Context stacks: context.__c (id) -> value[]\n const contextStacks = new Map<string, any[]>();\n\n function pushCtx(contextId: string, value: any) {\n let stack = contextStacks.get(contextId);\n if (!stack) {\n stack = [];\n contextStacks.set(contextId, stack);\n }\n stack.push(value);\n }\n\n function popCtx(contextId: string) {\n contextStacks.get(contextId)?.pop();\n }\n\n /** Builds the __n (global context) map for hooks. */\n function buildGlobalContext(): Record<string, any> {\n const globalCtx: Record<string, any> = {};\n for (const [contextId, stack] of contextStacks) {\n if (stack.length > 0) {\n // useContext expects provider.props.value and provider.sub().\n globalCtx[contextId] = {\n props: {value: stack[stack.length - 1]},\n sub: noop,\n };\n }\n }\n return globalCtx;\n }\n\n function render(node: any, inline?: boolean): string {\n if (!isDef(node) || typeof node === 'boolean') return '';\n if (typeof node === 'string') return escapeHtml(node);\n if (typeof node === 'number' || typeof node === 'bigint')\n return String(node);\n if (Array.isArray(node)) return node.map((n) => render(n, inline)).join('');\n\n // Must be a VNode-like object.\n if (typeof node !== 'object' || !('type' in node)) return '';\n\n const {type, props} = node;\n\n // Fragment.\n if (type === Fragment) {\n return renderChildren(props?.children);\n }\n\n // Component (function or class).\n if (typeof type === 'function') {\n return renderComponent(node);\n }\n\n // HTML element.\n if (typeof type === 'string') {\n return renderElement(type, props, inline);\n }\n\n return '';\n }\n\n function renderComponent(vnode: VNode): string {\n const {type, props} = vnode;\n const fn = type as Function;\n\n // Detect context Provider.\n // Root.js local JSX runtime: Provider._isProvider === true, Provider._context\n // is the Context object with a _stack array.\n // Preact >=10.27: Provider === Context (same function). `fn.__c` is the\n // context id string (e.g. \"__cC0\").\n // Preact <10.27: Provider._contextRef (mangled `fn.__`) points to the\n // context object which has `__c` (id) and `__` (default value).\n const fnAny = fn as any;\n if (fnAny._isProvider && fnAny._context) {\n const ctx = fnAny._context;\n ctx._stack.push((props as any).value);\n const result = renderChildren(props.children);\n ctx._stack.pop();\n return result;\n }\n let contextId: string | undefined;\n if (typeof fnAny.__c === 'string' && fnAny.__c.startsWith('__cC')) {\n contextId = fnAny.__c;\n } else if (fnAny.__ && typeof fnAny.__ === 'object' && fnAny.__.__c) {\n contextId = fnAny.__.__c;\n }\n if (contextId) {\n pushCtx(contextId, (props as any).value);\n const result = renderChildren(props.children);\n popCtx(contextId);\n return result;\n }\n\n // Detect context Consumer.\n if ((fn as any).contextType) {\n const ctx = (fn as any).contextType;\n const ctxId: string = ctx.__c;\n const stack = contextStacks.get(ctxId);\n const value =\n stack && stack.length > 0 ? stack[stack.length - 1] : ctx.__;\n if (typeof props.children === 'function') {\n return render(props.children(value));\n }\n return renderChildren(props.children);\n }\n\n // Regular component — set up a fake component instance so Preact hooks\n // (useContext, useState, useMemo, etc.) work during SSR.\n // Preact's useContext reads from `component.context[context.__c]`.\n const component: any = {\n props,\n context: buildGlobalContext(),\n state: {},\n __v: vnode, // _vnode\n __d: false, // _dirty\n __h: [], // _renderCallbacks\n __s: {}, // _nextState\n __H: null, // _hooks (initialised by hooks addon)\n };\n (vnode as any).__c = component;\n\n // Trigger Preact option hooks so the hooks addon can set currentComponent.\n (preactOptions as any).__b?.(vnode);\n (preactOptions as any).__r?.(vnode);\n\n try {\n // Class component.\n if (fn.prototype && fn.prototype.render) {\n const instance = new (fn as any)(props, component.context);\n instance.__n = component.__n;\n instance.__H = component.__H;\n (vnode as any).__c = instance;\n (preactOptions as any).__r?.(vnode);\n return render(instance.render(instance.props, instance.state));\n }\n\n // Functional component.\n const rendered = fn(props, component.context);\n return render(rendered);\n } finally {\n preactOptions.diffed?.(vnode as any);\n }\n }\n\n function renderElement(\n tag: string,\n props: Record<string, any>,\n inline?: boolean\n ): string {\n const isBlock = isPretty && !inline && blockSet.has(tag);\n const isVoid = VOID_ELEMENTS.has(tag);\n const attrs = renderAttrs(tag, props);\n let result = '<' + tag + attrs + '>';\n\n if (isVoid) {\n if (isBlock) result += '\\n';\n return result;\n }\n\n let inner = '';\n if (isDef(props?.dangerouslySetInnerHTML?.__html)) {\n inner = props.dangerouslySetInnerHTML.__html;\n } else if (isDef(props?.children)) {\n inner = renderChildren(props.children);\n } else if (tag === 'textarea' && props) {\n // For <textarea>, render value/defaultValue as text content since\n // browsers ignore the value attribute on textarea elements.\n const textVal = props.value ?? props.defaultValue;\n if (isDef(textVal)) {\n inner = escapeHtml(String(textVal));\n }\n }\n\n if (isBlock) {\n // When inner content contains block children (indicated by newlines),\n // add a newline after the opening tag so content starts on its own line.\n // Exempt raw-content elements (pre, textarea, script, style) where\n // newlines are literal text, not block-child indicators.\n const hasBlockChildren =\n !RAW_CONTENT_ELEMENTS.has(tag) && inner.includes('\\n');\n if (hasBlockChildren) {\n result += '\\n' + inner + '</' + tag + '>\\n';\n } else {\n result += inner + '</' + tag + '>\\n';\n }\n } else {\n result += inner + '</' + tag + '>';\n }\n\n return result;\n }\n\n function renderAttrs(tag: string, props: Record<string, any>): string {\n if (!props) return '';\n const parts: string[] = [];\n for (const key in props) {\n if (\n key === 'children' ||\n key === 'dangerouslySetInnerHTML' ||\n key === 'key' ||\n key === 'ref' ||\n key === '__self' ||\n key === '__source'\n ) {\n continue;\n }\n // Skip value/defaultValue on textarea — rendered as text content.\n if (tag === 'textarea' && (key === 'value' || key === 'defaultValue')) {\n continue;\n }\n // Skip event handlers.\n if (key.length > 2 && key[0] === 'o' && key[1] === 'n') continue;\n\n let value = props[key];\n if (!isDef(value)) continue;\n // For standard and boolean attributes, `false` removes the attribute.\n // For data-* attributes, `false` is rendered as the string \"false\".\n if (value === false && !key.startsWith('data-')) continue;\n\n const attrName = PROP_TO_ATTR[key] || key;\n\n // Boolean attributes.\n if (value === true) {\n parts.push(' ', attrName);\n continue;\n }\n\n // Style objects.\n if (key === 'style' && typeof value === 'object') {\n value = styleToString(value);\n if (!value) continue;\n }\n\n parts.push(' ', attrName, '=\"', escapeAttr(String(value)), '\"');\n }\n return parts.join('');\n }\n\n /**\n * Returns true if a child node is a text-like value (string, number).\n */\n function isTextNode(child: any): boolean {\n if (!isDef(child) || typeof child === 'boolean') return false;\n return (\n typeof child === 'string' ||\n typeof child === 'number' ||\n typeof child === 'bigint'\n );\n }\n\n /**\n * Checks if an array of children contains a mix of text nodes and elements.\n * When mixed, block elements should render inline to avoid breaking text flow.\n */\n function hasMixedContent(children: any[]): boolean {\n let hasText = false;\n let hasElement = false;\n for (const child of children) {\n if (isTextNode(child)) {\n hasText = true;\n } else if (isDef(child) && typeof child === 'object' && 'type' in child) {\n hasElement = true;\n }\n if (hasText && hasElement) return true;\n }\n return false;\n }\n\n function renderChildren(children: any): string {\n if (!isDef(children)) return '';\n if (Array.isArray(children)) {\n const inline = isPretty && hasMixedContent(children);\n return children.map((child) => render(child, inline)).join('');\n }\n return render(children);\n }\n\n return render(vnode);\n}\n\nfunction noop() {}\n"],"mappings":"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","names":["vnode"]}
@@ -57,7 +57,7 @@ async function htmlPretty(html, options) {
57
57
 
58
58
  // src/render/route-trie.ts
59
59
  var RouteTrie = class _RouteTrie {
60
- children = {};
60
+ children = /* @__PURE__ */ new Map();
61
61
  paramNodes;
62
62
  catchAllNodes;
63
63
  optCatchAllNodes;
@@ -85,18 +85,18 @@ var RouteTrie = class _RouteTrie {
85
85
  let nextNode;
86
86
  if (head.startsWith("[") && head.endsWith("]")) {
87
87
  if (!this.paramNodes) {
88
- this.paramNodes = {};
88
+ this.paramNodes = /* @__PURE__ */ new Map();
89
89
  }
90
90
  const paramName = head.slice(1, -1);
91
- if (!this.paramNodes[paramName]) {
92
- this.paramNodes[paramName] = new ParamNode(paramName);
91
+ if (!this.paramNodes.has(paramName)) {
92
+ this.paramNodes.set(paramName, new ParamNode(paramName));
93
93
  }
94
- nextNode = this.paramNodes[paramName].trie;
94
+ nextNode = this.paramNodes.get(paramName).trie;
95
95
  } else {
96
- nextNode = this.children[head];
96
+ nextNode = this.children.get(head);
97
97
  if (!nextNode) {
98
98
  nextNode = new _RouteTrie();
99
- this.children[head] = nextNode;
99
+ this.children.set(head, nextNode);
100
100
  }
101
101
  }
102
102
  nextNode.add(tail, route);
@@ -132,7 +132,7 @@ var RouteTrie = class _RouteTrie {
132
132
  addPromise(cb("/", this.route));
133
133
  }
134
134
  if (this.paramNodes) {
135
- Object.values(this.paramNodes).forEach((paramChild) => {
135
+ this.paramNodes.forEach((paramChild) => {
136
136
  const param = `[${paramChild.name}]`;
137
137
  paramChild.trie.walk((childPath, route) => {
138
138
  const paramUrlPath = `/${param}${childPath}`;
@@ -148,12 +148,11 @@ var RouteTrie = class _RouteTrie {
148
148
  const wildcardUrlPath = `/[[...${this.optCatchAllNodes.name}]]`;
149
149
  addPromise(cb(wildcardUrlPath, this.optCatchAllNodes.route));
150
150
  }
151
- for (const subpath of Object.keys(this.children)) {
152
- const childTrie = this.children[subpath];
151
+ this.children.forEach((childTrie, subpath) => {
153
152
  childTrie.walk((childPath, childRoute) => {
154
153
  addPromise(cb(`/${subpath}${childPath}`, childRoute));
155
154
  });
156
- }
155
+ });
157
156
  return Promise.all(promises).then(() => {
158
157
  });
159
158
  }
@@ -161,7 +160,7 @@ var RouteTrie = class _RouteTrie {
161
160
  * Removes all routes from the trie.
162
161
  */
163
162
  clear() {
164
- this.children = {};
163
+ this.children = /* @__PURE__ */ new Map();
165
164
  this.paramNodes = void 0;
166
165
  this.catchAllNodes = void 0;
167
166
  this.optCatchAllNodes = void 0;
@@ -182,7 +181,7 @@ var RouteTrie = class _RouteTrie {
182
181
  return void 0;
183
182
  }
184
183
  const [head, tail] = this.splitPath(urlPath);
185
- const child = this.children[head];
184
+ const child = this.children.get(head);
186
185
  if (child) {
187
186
  const route = child.getRoute(tail, params);
188
187
  if (route) {
@@ -190,7 +189,7 @@ var RouteTrie = class _RouteTrie {
190
189
  }
191
190
  }
192
191
  if (this.paramNodes) {
193
- for (const paramChild of Object.values(this.paramNodes)) {
192
+ for (const paramChild of this.paramNodes.values()) {
194
193
  const route = paramChild.trie.getRoute(tail, params);
195
194
  if (route) {
196
195
  params[paramChild.name] = head;
@@ -224,12 +223,12 @@ var RouteTrie = class _RouteTrie {
224
223
  return;
225
224
  }
226
225
  const [head, tail] = this.splitPath(urlPath);
227
- const child = this.children[head];
226
+ const child = this.children.get(head);
228
227
  if (child) {
229
228
  child.collectRoutes(tail, { ...params }, results);
230
229
  }
231
230
  if (this.paramNodes) {
232
- for (const paramChild of Object.values(this.paramNodes)) {
231
+ for (const paramChild of this.paramNodes.values()) {
233
232
  const paramParams = { ...params, [paramChild.name]: head };
234
233
  paramChild.trie.collectRoutes(tail, paramParams, results);
235
234
  }
@@ -288,4 +287,4 @@ export {
288
287
  htmlPretty,
289
288
  RouteTrie
290
289
  };
291
- //# sourceMappingURL=chunk-3KGEENDW.js.map
290
+ //# sourceMappingURL=chunk-6P3B7ZXL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/elements.ts","../src/render/html-minify.ts","../src/render/html-pretty.ts","../src/render/route-trie.ts"],"sourcesContent":["export const ELEMENT_RE = /^[a-z][\\w-]*-[\\w-]*$/;\nexport const HTML_ELEMENTS_REGEX = /<([a-z][\\w-]*-[\\w-]*)/g;\n\n/**\n * Returns true if the tagName is a valid custom element tag.\n */\nexport function isValidTagName(tagName: string) {\n return ELEMENT_RE.test(tagName);\n}\n\n/**\n * Returns a list of custom elements used in a src string (e.g. HTML, jsx, lit).\n * NOTE: the impl uses a simple regex, so tagNames used in comments and attr\n * values may be included.\n */\nexport function parseTagNames(src: string): string[] {\n if (!src) {\n return [];\n }\n const tagNames = new Set<string>();\n const matches = Array.from(String(src).matchAll(HTML_ELEMENTS_REGEX));\n for (const match of matches) {\n const tagName = match[1];\n tagNames.add(tagName);\n }\n return Array.from(tagNames);\n}\n","import {createRequire} from 'module';\n\nconst require = createRequire(import.meta.url);\nimport type {Options} from 'html-minifier-terser';\n\nconst {minify} = require('html-minifier-terser');\n\nexport type HtmlMinifyOptions = Options;\n\nexport async function htmlMinify(\n html: string,\n options?: HtmlMinifyOptions\n): Promise<string> {\n const minifyOptions = options || {\n collapseWhitespace: true,\n removeComments: true,\n preserveLineBreaks: true,\n };\n try {\n const min = await minify(html, minifyOptions);\n return min.trimStart();\n } catch (e) {\n console.error('failed to minify html:', e);\n return html;\n }\n}\n","import {createRequire} from 'module';\n\nconst require = createRequire(import.meta.url);\nimport type {HTMLBeautifyOptions} from 'js-beautify';\n\nconst beautify = require('js-beautify');\n\nexport type HtmlPrettyOptions = HTMLBeautifyOptions;\n\nexport async function htmlPretty(\n html: string,\n options?: HtmlPrettyOptions\n): Promise<string> {\n const prettyOptions = options || {\n indent_size: 0,\n end_with_newline: true,\n extra_liners: [],\n };\n try {\n const output = beautify.html(html, prettyOptions);\n return output.trimStart();\n } catch (e) {\n console.error('failed to pretty html:', e);\n return html;\n }\n}\n","/**\n * A trie data structure that stores routes. Supports Next-style routing using\n * [param], [...catchall], and [[...optcatchall]] placeholders.\n */\nexport class RouteTrie<T> {\n private children: Map<string, RouteTrie<T>> = new Map();\n private paramNodes?: Map<string, ParamNode<T>>;\n private catchAllNodes?: CatchAllNode<T>;\n private optCatchAllNodes?: CatchAllNode<T>;\n private route?: T;\n\n /**\n * Adds a route to the trie.\n */\n add(path: string, route: T) {\n path = this.normalizePath(path);\n\n // If the end was reached, save the value to the node.\n if (path === '') {\n this.route = route;\n return;\n }\n\n const [head, tail] = this.splitPath(path);\n\n if (head.startsWith('[[...') && head.endsWith(']]')) {\n const paramName = head.slice(5, -2);\n this.optCatchAllNodes = new CatchAllNode(paramName, route);\n return;\n }\n if (head.startsWith('[...') && head.endsWith(']')) {\n const paramName = head.slice(4, -1);\n this.catchAllNodes = new CatchAllNode(paramName, route);\n return;\n }\n\n let nextNode: RouteTrie<T>;\n if (head.startsWith('[') && head.endsWith(']')) {\n if (!this.paramNodes) {\n this.paramNodes = new Map();\n }\n const paramName = head.slice(1, -1);\n if (!this.paramNodes.has(paramName)) {\n this.paramNodes.set(paramName, new ParamNode(paramName));\n }\n nextNode = this.paramNodes.get(paramName)!.trie;\n } else {\n nextNode = this.children.get(head)!;\n if (!nextNode) {\n nextNode = new RouteTrie();\n this.children.set(head, nextNode);\n }\n }\n nextNode.add(tail, route);\n }\n\n /**\n * Returns a route mapped to the given path and any parameter values from the\n * URL.\n */\n get(path: string): [T | undefined, Record<string, string>] {\n const params = {};\n const route = this.getRoute(path, params);\n return [route, params];\n }\n\n /**\n * Returns all routes that match the given path and their parameter values.\n */\n matchAll(path: string): Array<[T, Record<string, string>]> {\n const matches: Array<[T, Record<string, string>]> = [];\n this.collectRoutes(path, {}, matches);\n return matches;\n }\n\n /**\n * Walks the route trie and calls a callback function for each route.\n */\n walk(cb: (urlPath: string, route: T) => Promise<void> | void): Promise<void> {\n const promises: Array<Promise<void>> = [];\n const addPromise = (promise: Promise<void> | void) => {\n if (promise) {\n promises.push(promise);\n }\n };\n if (this.route) {\n addPromise(cb('/', this.route));\n }\n if (this.paramNodes) {\n this.paramNodes.forEach((paramChild) => {\n const param = `[${paramChild.name}]`;\n paramChild.trie.walk((childPath: string, route: T) => {\n const paramUrlPath = `/${param}${childPath}`;\n addPromise(cb(paramUrlPath, route));\n });\n });\n }\n if (this.catchAllNodes) {\n const wildcardUrlPath = `/[...${this.catchAllNodes.name}]`;\n addPromise(cb(wildcardUrlPath, this.catchAllNodes.route));\n }\n if (this.optCatchAllNodes) {\n const wildcardUrlPath = `/[[...${this.optCatchAllNodes.name}]]`;\n addPromise(cb(wildcardUrlPath, this.optCatchAllNodes.route));\n }\n this.children.forEach((childTrie, subpath) => {\n childTrie.walk((childPath: string, childRoute: T) => {\n addPromise(cb(`/${subpath}${childPath}`, childRoute));\n });\n });\n return Promise.all(promises).then(() => {});\n }\n\n /**\n * Removes all routes from the trie.\n */\n clear() {\n this.children = new Map();\n this.paramNodes = undefined;\n this.catchAllNodes = undefined;\n this.optCatchAllNodes = undefined;\n this.route = undefined;\n }\n\n private getRoute(\n urlPath: string,\n params: Record<string, string>\n ): T | undefined {\n urlPath = this.normalizePath(urlPath);\n if (urlPath === '') {\n if (this.route) {\n return this.route;\n }\n if (this.optCatchAllNodes) {\n if (urlPath) {\n params[this.optCatchAllNodes.name] = urlPath;\n }\n return this.optCatchAllNodes.route;\n }\n return undefined;\n }\n\n const [head, tail] = this.splitPath(urlPath);\n\n const child = this.children.get(head);\n if (child) {\n const route = child.getRoute(tail, params);\n if (route) {\n return route;\n }\n }\n\n if (this.paramNodes) {\n for (const paramChild of this.paramNodes.values()) {\n const route = paramChild.trie.getRoute(tail, params);\n if (route) {\n params[paramChild.name] = head;\n return route;\n }\n }\n }\n\n if (this.catchAllNodes) {\n params[this.catchAllNodes.name] = urlPath;\n return this.catchAllNodes.route;\n }\n\n if (this.optCatchAllNodes) {\n params[this.optCatchAllNodes.name] = urlPath;\n return this.optCatchAllNodes.route;\n }\n\n return undefined;\n }\n\n private collectRoutes(\n urlPath: string,\n params: Record<string, string>,\n results: Array<[T, Record<string, string>]>\n ) {\n urlPath = this.normalizePath(urlPath);\n if (urlPath === '') {\n if (this.route) {\n results.push([this.route, {...params}]);\n }\n if (this.optCatchAllNodes) {\n const optParams = {...params};\n if (urlPath) {\n optParams[this.optCatchAllNodes.name] = urlPath;\n }\n results.push([this.optCatchAllNodes.route, optParams]);\n }\n return;\n }\n\n const [head, tail] = this.splitPath(urlPath);\n\n const child = this.children.get(head);\n if (child) {\n child.collectRoutes(tail, {...params}, results);\n }\n\n if (this.paramNodes) {\n for (const paramChild of this.paramNodes.values()) {\n const paramParams = {...params, [paramChild.name]: head};\n paramChild.trie.collectRoutes(tail, paramParams, results);\n }\n }\n\n if (this.catchAllNodes) {\n const caParams = {...params, [this.catchAllNodes.name]: urlPath};\n results.push([this.catchAllNodes.route, caParams]);\n }\n\n if (this.optCatchAllNodes) {\n const ocParams = {...params};\n if (urlPath) {\n ocParams[this.optCatchAllNodes.name] = urlPath;\n }\n results.push([this.optCatchAllNodes.route, ocParams]);\n }\n }\n\n /**\n * Normalizes a path for inclusion into the route trie.\n */\n private normalizePath(path: string) {\n // Remove leading/trailing slashes.\n return path.replace(/^\\/+/g, '').replace(/\\/+$/g, '');\n }\n\n /**\n * Splits the parent directory from its children, e.g.:\n *\n * splitPath(\"foo/bar/baz\") -> [\"foo\", \"bar/baz\"]\n */\n private splitPath(path: string): [string, string] {\n const i = path.indexOf('/');\n if (i === -1) {\n return [path, ''];\n }\n return [path.slice(0, i), path.slice(i + 1)];\n }\n}\n\n/**\n * A node in the RouteTrie for a :param child.\n */\nclass ParamNode<T> {\n readonly name: string;\n readonly trie: RouteTrie<T> = new RouteTrie();\n\n constructor(name: string) {\n this.name = name;\n }\n}\n\n/**\n * A node in the RouteTrie for a *wildcard child.\n */\nclass CatchAllNode<T> {\n readonly name: string;\n readonly route: T;\n\n constructor(name: string, route: T) {\n this.name = name;\n this.route = route;\n }\n}\n"],"mappings":"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","names":["require","createRequire","require"]}