@marko/runtime-tags 0.1.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 (44) hide show
  1. package/dist/common/helpers.d.ts +4 -0
  2. package/dist/common/types.d.ts +90 -0
  3. package/dist/debug/dom.js +1411 -0
  4. package/dist/debug/dom.js.map +7 -0
  5. package/dist/debug/dom.mjs +1388 -0
  6. package/dist/debug/dom.mjs.map +7 -0
  7. package/dist/debug/html.js +1323 -0
  8. package/dist/debug/html.js.map +7 -0
  9. package/dist/debug/html.mjs +1263 -0
  10. package/dist/debug/html.mjs.map +7 -0
  11. package/dist/dom/abort-signal.d.ts +3 -0
  12. package/dist/dom/control-flow.d.ts +14 -0
  13. package/dist/dom/dom.d.ts +14 -0
  14. package/dist/dom/event.d.ts +3 -0
  15. package/dist/dom/queue.d.ts +10 -0
  16. package/dist/dom/reconcile-domdiff.d.ts +2 -0
  17. package/dist/dom/reconcile-listdiff.d.ts +2 -0
  18. package/dist/dom/reconcile-longest-increasing-subsequence.d.ts +2 -0
  19. package/dist/dom/reconcile.d.ts +1 -0
  20. package/dist/dom/renderer.d.ts +20 -0
  21. package/dist/dom/resume.d.ts +8 -0
  22. package/dist/dom/schedule.d.ts +2 -0
  23. package/dist/dom/scope.d.ts +13 -0
  24. package/dist/dom/signals.d.ts +31 -0
  25. package/dist/dom/template.d.ts +11 -0
  26. package/dist/dom/walker.d.ts +4 -0
  27. package/dist/dom.d.ts +11 -0
  28. package/dist/dom.js +904 -0
  29. package/dist/dom.js.map +7 -0
  30. package/dist/dom.mjs +884 -0
  31. package/dist/dom.mjs.map +7 -0
  32. package/dist/html/attrs.d.ts +4 -0
  33. package/dist/html/content.d.ts +5 -0
  34. package/dist/html/dynamic-tag.d.ts +12 -0
  35. package/dist/html/reorder-runtime.d.ts +1 -0
  36. package/dist/html/serializer.d.ts +38 -0
  37. package/dist/html/template.d.ts +9 -0
  38. package/dist/html/writer.d.ts +40 -0
  39. package/dist/html.d.ts +6 -0
  40. package/dist/html.js +933 -0
  41. package/dist/html.js.map +7 -0
  42. package/dist/html.mjs +876 -0
  43. package/dist/html.mjs.map +7 -0
  44. package/package.json +39 -0
package/dist/html.js ADDED
@@ -0,0 +1,933 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
16
+
17
+ // src/html.ts
18
+ var html_exports = {};
19
+ __export(html_exports, {
20
+ $_streamData: () => $_streamData,
21
+ attr: () => attr,
22
+ attrs: () => attrs,
23
+ classAttr: () => classAttr,
24
+ createRenderFn: () => createRenderFn,
25
+ createRenderer: () => createRenderer,
26
+ createTemplate: () => createTemplate,
27
+ dynamicTagArgs: () => dynamicTagArgs,
28
+ dynamicTagInput: () => dynamicTagInput,
29
+ escapeAttrValue: () => escapeAttrValue,
30
+ escapeScript: () => escapeScript,
31
+ escapeStyle: () => escapeStyle,
32
+ escapeXML: () => escapeXML,
33
+ fork: () => fork,
34
+ getRegistryInfo: () => getRegistryInfo,
35
+ makeSerializable: () => makeSerializable,
36
+ markResumeControlEnd: () => markResumeControlEnd,
37
+ markResumeControlSingleNodeEnd: () => markResumeControlSingleNodeEnd,
38
+ markResumeNode: () => markResumeNode,
39
+ markResumeScopeStart: () => markResumeScopeStart,
40
+ maybeFlush: () => maybeFlush,
41
+ nextScopeId: () => nextScopeId,
42
+ nextTagId: () => nextTagId,
43
+ patchDynamicTag: () => patchDynamicTag,
44
+ peekSerializedScope: () => peekSerializedScope,
45
+ register: () => register,
46
+ serializedScope: () => serializedScope,
47
+ styleAttr: () => styleAttr,
48
+ toString: () => toString,
49
+ tryCatch: () => tryCatch,
50
+ tryPlaceholder: () => tryPlaceholder,
51
+ write: () => write,
52
+ writeEffect: () => writeEffect,
53
+ writeScope: () => writeScope
54
+ });
55
+ module.exports = __toCommonJS(html_exports);
56
+
57
+ // src/html/content.ts
58
+ function toString(val) {
59
+ return val || val === 0 ? val + "" : "";
60
+ }
61
+ var escapeXML = escapeIfNeeded((val) => {
62
+ let result = "", lastPos = 0;
63
+ for (let i = 0, len = val.length; i < len; i++) {
64
+ let replacement;
65
+ switch (val[i]) {
66
+ case "<":
67
+ replacement = "&lt;";
68
+ break;
69
+ case "&":
70
+ replacement = "&amp;";
71
+ break;
72
+ default:
73
+ continue;
74
+ }
75
+ result += val.slice(lastPos, i) + replacement, lastPos = i + 1;
76
+ }
77
+ return lastPos ? result + val.slice(lastPos) : val;
78
+ }), escapeScript = escapeIfNeeded(escapeTagEnding("script")), escapeStyle = escapeIfNeeded(escapeTagEnding("style"));
79
+ function escapeTagEnding(tagName) {
80
+ let openTag = `</${tagName}`, escaped = `<\\/${tagName}`;
81
+ return (val) => {
82
+ let result = "", lastPos = 0, i = val.indexOf(openTag, lastPos);
83
+ for (; i !== -1; )
84
+ result += val.slice(lastPos, i) + escaped, lastPos = i + 1, i = val.indexOf(openTag, lastPos);
85
+ return lastPos ? result + val.slice(lastPos) : val;
86
+ };
87
+ }
88
+ function escapeAttrValue(val) {
89
+ let len = val.length, i = 0;
90
+ do
91
+ switch (val[i]) {
92
+ case '"':
93
+ return quoteValue(val, i + 1, "'", "&#39;");
94
+ case "'":
95
+ case ">":
96
+ case " ":
97
+ case " ":
98
+ case `
99
+ `:
100
+ case "\r":
101
+ case "\f":
102
+ return quoteValue(val, i + 1, '"', "&#34;");
103
+ default:
104
+ i++;
105
+ break;
106
+ }
107
+ while (i < len);
108
+ return val;
109
+ }
110
+ function escapeIfNeeded(escape) {
111
+ return (val) => {
112
+ if (!val && val !== 0)
113
+ return "&zwj;";
114
+ switch (typeof val) {
115
+ case "string":
116
+ return escape(val);
117
+ case "boolean":
118
+ return "true";
119
+ case "number":
120
+ return val + "";
121
+ default:
122
+ return escape(val + "");
123
+ }
124
+ };
125
+ }
126
+ function quoteValue(val, startPos, quote2, escaped) {
127
+ let result = quote2, lastPos = 0;
128
+ for (let i = startPos, len = val.length; i < len; i++)
129
+ val[i] === quote2 && (result += val.slice(lastPos, i) + escaped, lastPos = i + 1);
130
+ return result + (lastPos ? val.slice(lastPos) : val) + quote2;
131
+ }
132
+
133
+ // src/common/helpers.ts
134
+ function classValue(value) {
135
+ return toDelimitedString(value, " ", stringifyClassObject);
136
+ }
137
+ function stringifyClassObject(name, value) {
138
+ return isVoid(value) ? "" : name;
139
+ }
140
+ function styleValue(value) {
141
+ return toDelimitedString(value, ";", stringifyStyleObject);
142
+ }
143
+ var NON_DIMENSIONAL = /^(--|ta|or|li|z)|n-c|i(do|nk|m|t)|w$|we/;
144
+ function stringifyStyleObject(name, value) {
145
+ return isVoid(value) ? "" : (typeof value == "number" && value && !NON_DIMENSIONAL.test(name) && (value += "px"), `${name}:${value}`);
146
+ }
147
+ function toDelimitedString(val, delimiter, stringify) {
148
+ switch (typeof val) {
149
+ case "string":
150
+ return val;
151
+ case "object":
152
+ if (val !== null) {
153
+ let result = "", curDelimiter = "";
154
+ if (Array.isArray(val))
155
+ for (let v of val) {
156
+ let part = toDelimitedString(v, delimiter, stringify);
157
+ part !== "" && (result += curDelimiter + part, curDelimiter = delimiter);
158
+ }
159
+ else
160
+ for (let name in val) {
161
+ let v = val[name], part = stringify(name, v);
162
+ part !== "" && (result += curDelimiter + part, curDelimiter = delimiter);
163
+ }
164
+ return result;
165
+ }
166
+ }
167
+ return "";
168
+ }
169
+ function isVoid(value) {
170
+ return value == null || value === !1;
171
+ }
172
+
173
+ // src/html/attrs.ts
174
+ function classAttr(val) {
175
+ return stringAttr("class", classValue(val));
176
+ }
177
+ function styleAttr(val) {
178
+ return stringAttr("style", styleValue(val));
179
+ }
180
+ function attr(name, val) {
181
+ return isVoid(val) ? "" : nonVoidUntypedAttr(name, val);
182
+ }
183
+ function attrs(data) {
184
+ let result = "";
185
+ for (let name in data) {
186
+ if (/^on[A-Z-]/.test(name))
187
+ continue;
188
+ let val = data[name];
189
+ switch (name) {
190
+ case "class":
191
+ result += classAttr(val);
192
+ break;
193
+ case "style":
194
+ result += styleAttr(val);
195
+ break;
196
+ case "renderBody":
197
+ break;
198
+ default:
199
+ isVoid(val) || isInvalidAttrName(name) || (result += nonVoidUntypedAttr(name, val));
200
+ }
201
+ }
202
+ return result;
203
+ }
204
+ function stringAttr(name, val) {
205
+ return val && ` ${name}=${escapeAttrValue(val)}`;
206
+ }
207
+ function nonVoidUntypedAttr(name, val) {
208
+ switch (typeof val) {
209
+ case "string":
210
+ return ` ${name + attrAssignment(val)}`;
211
+ case "boolean":
212
+ return ` ${name}`;
213
+ case "number":
214
+ return ` ${name}=${val}`;
215
+ case "object":
216
+ if (val instanceof RegExp)
217
+ return ` ${name}=${escapeAttrValue(val.source)}`;
218
+ default:
219
+ return ` ${name + attrAssignment(val + "")}`;
220
+ }
221
+ }
222
+ function attrAssignment(val) {
223
+ return val ? `=${escapeAttrValue(val)}` : "";
224
+ }
225
+ function isInvalidAttrName(name) {
226
+ for (let i = name.length; i--; )
227
+ if (name[i] === ">")
228
+ return !0;
229
+ return !1;
230
+ }
231
+
232
+ // src/html/serializer.ts
233
+ var { hasOwnProperty } = Object.prototype, PARAM_BIND = "b", PARAM_SCOPE = "s", REF_START_CHARS = "hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_", REF_START_CHARS_LEN = REF_START_CHARS.length, REF_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_", REF_CHARS_LEN = REF_CHARS.length, SYMBOL_REGISTRY_ID = Symbol("REGISTRY_ID"), SYMBOL_SCOPE = Symbol("SCOPE"), SYMBOL_SERIALIZE = Symbol("SERIALIZE"), Scope = class {
234
+ }, serializedScope = (scopeId) => {
235
+ let scope = new Scope();
236
+ return makeSerializable(scope, (s, a) => {
237
+ s.value(s.scopeLookup.get(scopeId), a);
238
+ });
239
+ };
240
+ function register(entry, registryId, scopeId) {
241
+ return entry[SYMBOL_REGISTRY_ID] = registryId, entry[SYMBOL_SCOPE] = scopeId, entry;
242
+ }
243
+ function getRegistryInfo(entry) {
244
+ return [entry[SYMBOL_REGISTRY_ID], entry[SYMBOL_SCOPE]];
245
+ }
246
+ function makeSerializable(object, serialize) {
247
+ return object[SYMBOL_SERIALIZE] = serialize, object;
248
+ }
249
+ var Serializer = class {
250
+ // TODO: hoist these back out?
251
+ STACK = [];
252
+ BUFFER = [""];
253
+ ASSIGNMENTS = /* @__PURE__ */ new Map();
254
+ INDEX_OR_REF = /* @__PURE__ */ new WeakMap();
255
+ REF_COUNT = 0;
256
+ // These stay
257
+ PARENTS = /* @__PURE__ */ new WeakMap();
258
+ KEYS = /* @__PURE__ */ new WeakMap();
259
+ VALUES = /* @__PURE__ */ new Map();
260
+ scopeLookup;
261
+ constructor(scopeLookup) {
262
+ this.scopeLookup = scopeLookup, this.BUFFER.pop();
263
+ }
264
+ stringify(root) {
265
+ if (this.writeProp(root, "")) {
266
+ let { BUFFER, REF_COUNT, ASSIGNMENTS, INDEX_OR_REF } = this, result = BUFFER[0];
267
+ for (let i = 1, len = BUFFER.length; i < len; i++)
268
+ result += BUFFER[i];
269
+ if (REF_COUNT) {
270
+ if (ASSIGNMENTS.size) {
271
+ let ref = INDEX_OR_REF.get(root);
272
+ typeof ref == "number" && (ref = toRefParam(this.REF_COUNT++), result = ref + "=" + result);
273
+ for (let [assignmentRef, assignments] of ASSIGNMENTS)
274
+ result += "," + assignments + assignmentRef;
275
+ result += "," + ref, this.ASSIGNMENTS = /* @__PURE__ */ new Map();
276
+ }
277
+ result = "(" + PARAM_BIND + "," + PARAM_SCOPE + "," + this.refParamsString() + ")=>(" + result + ")";
278
+ } else
279
+ root && root.constructor === Object && (result = "(" + PARAM_BIND + "," + PARAM_SCOPE + ")=>(" + result + ")");
280
+ return BUFFER.length = 0, this.INDEX_OR_REF = /* @__PURE__ */ new WeakMap(), result;
281
+ }
282
+ return "void 0";
283
+ }
284
+ code(code) {
285
+ return this.BUFFER.push(code), this;
286
+ }
287
+ value(value, accessor = "") {
288
+ return !this.writeProp(value, accessor) && !this.STACK.includes(value) && this.BUFFER.push("void 0"), this;
289
+ }
290
+ writeProp(cur, accessor) {
291
+ let { BUFFER } = this;
292
+ switch (typeof cur) {
293
+ case "string":
294
+ BUFFER.push(quote(cur, 0));
295
+ break;
296
+ case "number":
297
+ BUFFER.push(cur + "");
298
+ break;
299
+ case "boolean":
300
+ BUFFER.push(cur ? "!0" : "!1");
301
+ break;
302
+ case "function":
303
+ case "object":
304
+ if (cur === null)
305
+ BUFFER.push("null");
306
+ else {
307
+ let ref = this.getRef(cur, accessor);
308
+ switch (ref) {
309
+ case !0:
310
+ return !1;
311
+ case !1:
312
+ switch (cur.constructor) {
313
+ case Object:
314
+ this.writeObject(cur);
315
+ break;
316
+ case Array:
317
+ this.writeArray(cur);
318
+ break;
319
+ case Date:
320
+ BUFFER.push(
321
+ 'new Date("' + cur.toISOString() + '")'
322
+ );
323
+ break;
324
+ case RegExp:
325
+ BUFFER.push(cur + "");
326
+ break;
327
+ case Map:
328
+ BUFFER.push("new Map("), this.writeArray(
329
+ Array.from(cur)
330
+ ), BUFFER.push(")");
331
+ break;
332
+ case Set:
333
+ BUFFER.push("new Set("), this.writeArray(
334
+ Array.from(cur)
335
+ ), BUFFER.push(")");
336
+ break;
337
+ case void 0:
338
+ BUFFER.push("Object.assign(Object.create(null),"), this.writeObject(cur), BUFFER.push("))");
339
+ break;
340
+ default:
341
+ return this.writeRegistered(
342
+ cur,
343
+ accessor
344
+ );
345
+ }
346
+ break;
347
+ default:
348
+ BUFFER.push(ref);
349
+ break;
350
+ }
351
+ }
352
+ break;
353
+ default:
354
+ return !1;
355
+ }
356
+ return !0;
357
+ }
358
+ writeRegistered(value, accessor) {
359
+ let {
360
+ [SYMBOL_REGISTRY_ID]: registryId,
361
+ [SYMBOL_SCOPE]: scopeId,
362
+ [SYMBOL_SERIALIZE]: serialize
363
+ } = value, { BUFFER } = this;
364
+ if (registryId) {
365
+ let scope = scopeId !== void 0 ? this.scopeLookup.get(scopeId) ?? !1 : void 0, ref = scope && this.getRef(scope, "");
366
+ if (ref === !0) {
367
+ let { STACK, INDEX_OR_REF, ASSIGNMENTS } = this, parent = STACK[STACK.length - 1], parentRef = INDEX_OR_REF.get(parent), resolvedRef = INDEX_OR_REF.get(scope);
368
+ return ASSIGNMENTS.set(
369
+ `${PARAM_BIND}("${registryId}",${resolvedRef})`,
370
+ (ASSIGNMENTS.get(ref) || "") + toAssignment(parentRef, accessor) + "="
371
+ ), !1;
372
+ } else {
373
+ if (ref === !1)
374
+ throw new Error(
375
+ "The scope has not yet been defined. This needs to be fixed in the serializer."
376
+ );
377
+ return BUFFER.push(`${PARAM_BIND}("${registryId}"${ref ? "," + ref : ""})`), !0;
378
+ }
379
+ } else if (serialize) {
380
+ let prevSize = BUFFER.length;
381
+ return serialize(this, accessor), prevSize !== BUFFER.length;
382
+ }
383
+ return !1;
384
+ }
385
+ writeObject(obj) {
386
+ let { STACK, BUFFER } = this, sep = "{";
387
+ STACK.push(obj);
388
+ for (let key in obj)
389
+ if (hasOwnProperty.call(obj, key)) {
390
+ let val = obj[key], escapedKey = toObjectKey(key);
391
+ BUFFER.push(sep + escapedKey + ":"), this.writeProp(val, escapedKey) ? sep = "," : BUFFER.pop();
392
+ }
393
+ sep === "{" ? BUFFER.push("{}") : BUFFER.push("}"), STACK.pop();
394
+ }
395
+ writeArray(arr) {
396
+ let { STACK, BUFFER } = this;
397
+ BUFFER.push("["), STACK.push(arr), this.writeProp(arr[0], 0);
398
+ for (let i = 1, len = arr.length; i < len; i++)
399
+ BUFFER.push(","), this.writeProp(arr[i], i);
400
+ STACK.pop(), BUFFER.push("]");
401
+ }
402
+ getRef(cur, accessor) {
403
+ let { STACK, BUFFER, INDEX_OR_REF, ASSIGNMENTS, PARENTS, KEYS } = this, ref = INDEX_OR_REF.get(cur);
404
+ if (ref === void 0) {
405
+ INDEX_OR_REF.set(cur, BUFFER.length);
406
+ let knownParent = PARENTS.get(cur);
407
+ if (knownParent === void 0) {
408
+ let parent = STACK[STACK.length - 1];
409
+ return parent && (PARENTS.set(cur, parent), KEYS.set(cur, toObjectKey(accessor))), !1;
410
+ } else {
411
+ let ref2 = "";
412
+ for (; knownParent; )
413
+ ref2 = toPropertyAccess(KEYS.get(cur)) + ref2, knownParent = PARENTS.get(cur = knownParent);
414
+ return PARAM_SCOPE + ref2;
415
+ }
416
+ }
417
+ if (typeof ref == "number" && (ref = this.insertAndGetRef(cur, ref)), STACK.includes(cur)) {
418
+ let parent = STACK[STACK.length - 1], parentRef = INDEX_OR_REF.get(parent);
419
+ return typeof parentRef == "number" && (parentRef = this.insertAndGetRef(parent, parentRef)), accessor !== "" && ASSIGNMENTS.set(
420
+ ref,
421
+ (ASSIGNMENTS.get(ref) || "") + toAssignment(parentRef, accessor) + "="
422
+ ), !0;
423
+ }
424
+ return ref;
425
+ }
426
+ insertAndGetRef(obj, pos) {
427
+ let ref = toRefParam(this.REF_COUNT++);
428
+ return this.INDEX_OR_REF.set(obj, ref), pos ? this.BUFFER[pos - 1] += ref + "=" : this.BUFFER[pos] = ref + "=" + this.BUFFER[pos], ref;
429
+ }
430
+ refParamsString() {
431
+ let result = REF_START_CHARS[0];
432
+ for (let i = 1; i < this.REF_COUNT; i++)
433
+ result += "," + toRefParam(i);
434
+ return this.REF_COUNT = 0, result;
435
+ }
436
+ };
437
+ function toAssignment(parent, key) {
438
+ return parent + toPropertyAccess(key);
439
+ }
440
+ function toPropertyAccess(key) {
441
+ return typeof key == "number" || key[0] === '"' ? "[" + key + "]" : "." + key;
442
+ }
443
+ function toObjectKey(name) {
444
+ if (typeof name != "string")
445
+ return name;
446
+ let char = name[0];
447
+ if (char >= "0" && char <= "9") {
448
+ for (let i = 1, len = name.length; i < len; i++)
449
+ if (char = name[i], !(char >= "0" && char <= "9"))
450
+ return quote(name, i);
451
+ return parseInt(name, 10);
452
+ } else
453
+ for (let i = 0, len = name.length; i < len; i++)
454
+ if (char = name[i], !(char >= "a" && char <= "z" || char >= "A" && char <= "Z" || char >= "0" && char <= "9" || char === "$" || char === "_"))
455
+ return quote(name, i);
456
+ return name;
457
+ }
458
+ function quote(str, startPos) {
459
+ let result = "", lastPos = 0;
460
+ for (let i = startPos, len = str.length; i < len; i++) {
461
+ let replacement;
462
+ switch (str[i]) {
463
+ case '"':
464
+ replacement = '\\"';
465
+ break;
466
+ case "\\":
467
+ replacement = "\\\\";
468
+ break;
469
+ case "<":
470
+ replacement = "\\x3C";
471
+ break;
472
+ case `
473
+ `:
474
+ replacement = "\\n";
475
+ break;
476
+ case "\r":
477
+ replacement = "\\r";
478
+ break;
479
+ case "\u2028":
480
+ replacement = "\\u2028";
481
+ break;
482
+ case "\u2029":
483
+ replacement = "\\u2029";
484
+ break;
485
+ default:
486
+ continue;
487
+ }
488
+ result += str.slice(lastPos, i) + replacement, lastPos = i + 1;
489
+ }
490
+ return lastPos === startPos ? result = str : result += str.slice(lastPos), '"' + result + '"';
491
+ }
492
+ function toRefParam(index) {
493
+ let mod = index % REF_START_CHARS_LEN, ref = REF_START_CHARS[mod];
494
+ for (index = (index - mod) / REF_START_CHARS_LEN; index > 0; )
495
+ mod = index % REF_CHARS_LEN, ref += REF_CHARS[mod], index = (index - mod) / REF_CHARS_LEN;
496
+ return ref;
497
+ }
498
+
499
+ // src/html/reorder-runtime.ts
500
+ function reorder_runtime_default(id, doc, walker, node, replacementNode, targetParent, targetNode, refNode, nextNode, runtimePrefix) {
501
+ for (runtimePrefix = "RUNTIME_ID$", id = runtimePrefix + id, doc = document, walker = doc[runtimePrefix + "w"] || (doc[runtimePrefix + "w"] = doc.createTreeWalker(
502
+ doc,
503
+ 128
504
+ )); node = walker.nextNode(); )
505
+ node.data.indexOf(runtimePrefix) === 0 && (walker[node.data] = node);
506
+ for (replacementNode = doc.getElementById(id), targetNode = walker[id], targetParent = targetNode.parentNode; refNode = replacementNode.firstChild; )
507
+ targetParent.insertBefore(refNode, targetNode);
508
+ for (nextNode = replacementNode.parentNode, nextNode.removeChild(replacementNode.nextSibling), nextNode.removeChild(replacementNode), refNode = walker[id + "/"]; targetNode && (nextNode = targetNode.nextSibling, targetParent.removeChild(targetNode) !== refNode); )
509
+ targetNode = nextNode;
510
+ }
511
+
512
+ // src/html/writer.ts
513
+ var runtimeId = "M" /* DefaultRuntimeId */, reorderRuntimeString = String(reorder_runtime_default).replace(
514
+ "RUNTIME_ID",
515
+ runtimeId
516
+ ), $_buffer = null, $_streamData = null;
517
+ function createRenderFn(renderer) {
518
+ return (stream, input = {}, $global, streamState = {}) => {
519
+ let remainingChildren = 1, originalBuffer = $_buffer, originalStreamState = $_streamData, reject = (err) => {
520
+ stream.emit("error", err);
521
+ }, async = (complete) => {
522
+ remainingChildren += complete ? -1 : 1, remainingChildren || setImmediate(() => stream.end());
523
+ };
524
+ $_buffer = createInitialBuffer(stream), streamState.global = $global, $_streamData = createStreamState(streamState), $_buffer.onReject = reject, $_buffer.onAsync = async;
525
+ try {
526
+ scheduleFlush(), renderer(input), async(!0);
527
+ } catch (err) {
528
+ reject(err);
529
+ } finally {
530
+ $_buffer = originalBuffer, $_streamData = originalStreamState;
531
+ }
532
+ };
533
+ }
534
+ function write(data) {
535
+ $_buffer.content += data;
536
+ }
537
+ var TARGET_BUFFER_SIZE = 64e3;
538
+ function maybeFlush() {
539
+ !$_buffer.prev && $_buffer.content.length > TARGET_BUFFER_SIZE;
540
+ }
541
+ function scheduleFlush() {
542
+ let buffer = $_buffer, streamState = $_streamData;
543
+ buffer.prev || setImmediate(() => flushToStream(buffer, streamState));
544
+ }
545
+ function flushToStream(buffer, streamState) {
546
+ for (; buffer.prev; )
547
+ buffer = buffer.prev;
548
+ if (buffer.disabled)
549
+ return;
550
+ let stream = buffer.stream, { content, calls, scopes } = buffer;
551
+ for (buffer.flushed = !0; !buffer.pending && buffer.next; )
552
+ clearBuffer(buffer), buffer = buffer.next, buffer.prev = null, buffer.flushed = !0, content += buffer.content, calls += buffer.calls, buffer.scopes && (scopes ? Object.assign(scopes, buffer.scopes) : scopes = buffer.scopes);
553
+ let data = content + getResumeScript(calls, scopes, streamState);
554
+ data && (stream.write(data), stream.flush?.()), clearBuffer(buffer);
555
+ }
556
+ function createStreamState(state) {
557
+ return state.scopeId ??= 0, state.tagId ??= 0, state.placeholderId ??= 0, state.scopeLookup ??= /* @__PURE__ */ new Map(), state.runtimeFlushed ??= !1, state;
558
+ }
559
+ function createNextBuffer(prevBuffer) {
560
+ let newBuffer = {
561
+ stream: prevBuffer.stream,
562
+ pending: !1,
563
+ flushed: !1,
564
+ disabled: !1,
565
+ prev: prevBuffer,
566
+ next: prevBuffer?.next ?? null,
567
+ content: "",
568
+ calls: "",
569
+ scopes: null,
570
+ onReject: prevBuffer.onReject,
571
+ onAsync: prevBuffer.onAsync
572
+ };
573
+ return prevBuffer.next && (prevBuffer.next.prev = prevBuffer), prevBuffer.next = newBuffer, newBuffer;
574
+ }
575
+ function createDetatchedBuffer(parentBuffer) {
576
+ return {
577
+ stream: parentBuffer.stream,
578
+ pending: !1,
579
+ flushed: !1,
580
+ disabled: !0,
581
+ prev: null,
582
+ next: null,
583
+ content: "",
584
+ calls: "",
585
+ scopes: null,
586
+ onReject: parentBuffer.onReject,
587
+ onAsync: parentBuffer.onAsync
588
+ };
589
+ }
590
+ function createInitialBuffer(stream) {
591
+ return {
592
+ stream,
593
+ pending: !1,
594
+ flushed: !1,
595
+ disabled: !1,
596
+ prev: null,
597
+ next: null,
598
+ content: "",
599
+ calls: "",
600
+ scopes: null,
601
+ onReject: void 0,
602
+ onAsync: void 0
603
+ };
604
+ }
605
+ async function fork(promise, renderResult) {
606
+ let originalBuffer = $_buffer, originalStreamState = $_streamData;
607
+ scheduleFlush(), $_buffer.pending = !0, $_buffer.onAsync?.(!1), $_buffer = createNextBuffer($_buffer);
608
+ try {
609
+ let result;
610
+ try {
611
+ result = await promise, originalBuffer.pending = !1;
612
+ } finally {
613
+ $_buffer = originalBuffer, $_streamData = originalStreamState, scheduleFlush();
614
+ }
615
+ renderResult(result);
616
+ } catch (err) {
617
+ $_buffer.onReject?.(err);
618
+ } finally {
619
+ $_buffer.onAsync?.(!0), clearScope();
620
+ }
621
+ }
622
+ function tryCatch(renderBody, renderError) {
623
+ let id = nextPlaceholderId(), err = null, originalBuffer = $_buffer, tryBuffer = createDetatchedBuffer(originalBuffer), finalTryBuffer;
624
+ tryBuffer.onReject = (asyncErr) => {
625
+ let errorBuffer = createDetatchedBuffer(originalBuffer);
626
+ $_buffer = errorBuffer, renderError(asyncErr), replaceBuffers(
627
+ id,
628
+ tryBuffer,
629
+ finalTryBuffer,
630
+ errorBuffer,
631
+ $_buffer
632
+ );
633
+ };
634
+ try {
635
+ $_buffer = tryBuffer, renderBody();
636
+ } catch (_err) {
637
+ err = _err;
638
+ } finally {
639
+ err ? ($_buffer = originalBuffer, renderError(err)) : (tryBuffer.disabled = !1, originalBuffer.next = tryBuffer, tryBuffer.prev = originalBuffer, $_buffer !== tryBuffer && (tryBuffer.content = `<!${marker(id)}>` + tryBuffer.content, markReplaceEnd(id), finalTryBuffer = $_buffer, $_buffer = createNextBuffer(finalTryBuffer)), $_buffer.onReject = originalBuffer.onReject);
640
+ }
641
+ }
642
+ function tryPlaceholder(renderBody, renderPlaceholder) {
643
+ let originalBuffer = $_buffer, asyncBuffer = createDetatchedBuffer(originalBuffer), id, placeholderBuffer, finalPlaceholderBuffer, finalAsyncBuffer, remainingChildren = 0, remainingPlaceholders = 0;
644
+ asyncBuffer.onAsync = (complete, isPlaceholder) => {
645
+ let delta = complete ? -1 : 1;
646
+ isPlaceholder ? remainingPlaceholders += delta : remainingChildren += delta, remainingChildren || (isPlaceholder || replaceBuffers(
647
+ id,
648
+ placeholderBuffer,
649
+ finalPlaceholderBuffer,
650
+ asyncBuffer,
651
+ finalAsyncBuffer
652
+ ), remainingPlaceholders || originalBuffer.onAsync?.(!0, !0));
653
+ }, $_buffer = asyncBuffer, renderBody(), $_buffer === asyncBuffer ? (originalBuffer.next = asyncBuffer, asyncBuffer.prev = originalBuffer, asyncBuffer.disabled = !1, asyncBuffer.onAsync = originalBuffer.onAsync) : (id = nextPlaceholderId(), placeholderBuffer = createNextBuffer(originalBuffer), finalAsyncBuffer = $_buffer, $_buffer = placeholderBuffer, markReplaceStart(id), renderPlaceholder(), markReplaceEnd(id), finalPlaceholderBuffer = $_buffer, $_buffer = createNextBuffer(finalPlaceholderBuffer), originalBuffer.onAsync?.(!1, !0));
654
+ }
655
+ function clearBuffer(buffer) {
656
+ buffer.content = "", buffer.calls = "", buffer.scopes = null;
657
+ }
658
+ function clearScope() {
659
+ $_buffer = $_streamData = null;
660
+ }
661
+ function markReplaceStart(id) {
662
+ return $_buffer.content += `<!${marker(id)}>`;
663
+ }
664
+ function markReplaceEnd(id) {
665
+ return $_buffer.content += `<!${marker(id)}/>`;
666
+ }
667
+ function replaceBuffers(id, placeholderStart, placeholderEnd, replacementStart, replacementEnd) {
668
+ if (placeholderStart.flushed) {
669
+ addReplacementWrapper(id, replacementStart, replacementEnd);
670
+ let next = placeholderEnd.next;
671
+ if (placeholderEnd.flushed)
672
+ for (; next && !next.pending && next.flushed; )
673
+ next = next.next;
674
+ next && (replacementStart.next = next, next.prev = replacementEnd), $_buffer = replacementStart, scheduleFlush();
675
+ } else {
676
+ let prev = placeholderStart.prev, next = placeholderEnd.next;
677
+ prev && (prev.next = replacementStart, replacementStart.prev = prev), next && (next.prev = replacementEnd, replacementEnd.next = next);
678
+ }
679
+ replacementStart.disabled = !1;
680
+ }
681
+ function addReplacementWrapper(id, replacementStart, replacementEnd) {
682
+ let runtimeCall = runtimeId + "$r" /* VarReorderRuntime */;
683
+ $_streamData.runtimeFlushed || (runtimeCall = `(${runtimeCall}=${reorderRuntimeString})`, $_streamData.runtimeFlushed = !0), replacementStart.content = `<t id="${marker(id)}">` + replacementStart.content, replacementEnd.content += `</t><script>${runtimeCall}(${id})</script>`;
684
+ }
685
+ function marker(id) {
686
+ return `${runtimeId}$${id}`;
687
+ }
688
+ function nextTagId() {
689
+ return "s" + $_streamData.tagId++;
690
+ }
691
+ function nextPlaceholderId() {
692
+ return $_streamData.placeholderId++;
693
+ }
694
+ function nextScopeId() {
695
+ return $_streamData.scopeId++;
696
+ }
697
+ function peekNextScopeId() {
698
+ return $_streamData.scopeId;
699
+ }
700
+ function peekSerializedScope() {
701
+ return serializedScope(peekNextScopeId());
702
+ }
703
+ function writeEffect(scopeId, fnId) {
704
+ $_buffer.calls += `${scopeId},"${fnId}",`;
705
+ }
706
+ function writeScope(scopeId, scope, assignTo = $_streamData.scopeLookup.get(scopeId)) {
707
+ assignTo !== void 0 && (Array.isArray(assignTo) ? assignTo.push(scope) : scope = Object.assign(assignTo, scope)), $_buffer.scopes ??= {
708
+ $global: getFilteredGlobals($_streamData.global)
709
+ }, $_buffer.scopes[scopeId] = scope, $_streamData.scopeLookup.set(scopeId, scope);
710
+ }
711
+ function markResumeNode(scopeId, index) {
712
+ return `<!${runtimeId}*${scopeId} ${index}>`;
713
+ }
714
+ function markResumeScopeStart(scopeId, key) {
715
+ return `<!${runtimeId}[${scopeId}${key ? " " + key : ""}>`;
716
+ }
717
+ function markResumeControlEnd(scopeId, index) {
718
+ return `<!${runtimeId}]${scopeId} ${index}>`;
719
+ }
720
+ function markResumeControlSingleNodeEnd(scopeId, index, childScopeIds) {
721
+ return `<!${runtimeId}|${scopeId} ${index} ${childScopeIds ?? ""}>`;
722
+ }
723
+ function getResumeScript(calls, scopes, streamState) {
724
+ if (calls || scopes) {
725
+ let isFirstFlush, serializer = streamState.serializer;
726
+ return (isFirstFlush = !serializer) && (serializer = streamState.serializer = new Serializer(
727
+ streamState.scopeLookup
728
+ )), `<script>${isFirstFlush ? `(${runtimeId + "$h" /* VarResume */}=[])` : runtimeId + "$h" /* VarResume */}.push(${serializer.stringify(scopes)},[${calls}])</script>`;
729
+ }
730
+ return "";
731
+ }
732
+ function getFilteredGlobals($global) {
733
+ if (!$global)
734
+ return;
735
+ let serializedGlobals = $global.serializedGlobals;
736
+ if (!serializedGlobals)
737
+ return;
738
+ let filtered;
739
+ if (Array.isArray(serializedGlobals))
740
+ for (let key of serializedGlobals) {
741
+ let value = $global[key];
742
+ value !== void 0 && (filtered ? filtered[key] = value : filtered = { [key]: value });
743
+ }
744
+ else
745
+ for (let key in serializedGlobals)
746
+ if (serializedGlobals[key]) {
747
+ let value = $global[key];
748
+ value !== void 0 && (filtered ? filtered[key] = value : filtered = { [key]: value });
749
+ }
750
+ return filtered;
751
+ }
752
+
753
+ // src/html/dynamic-tag.ts
754
+ var voidElements = /* @__PURE__ */ new Set([
755
+ "area",
756
+ "base",
757
+ "br",
758
+ "col",
759
+ "embed",
760
+ "hr",
761
+ "img",
762
+ "input",
763
+ "link",
764
+ "meta",
765
+ "param",
766
+ "source",
767
+ "track",
768
+ "wbr"
769
+ ]);
770
+ function dynamicTagInput(tag, input, renderBody) {
771
+ if (!tag && !renderBody)
772
+ return;
773
+ let futureScopeId = peekNextScopeId(), futureScope = serializedScope(futureScopeId);
774
+ if (write(`${markResumeScopeStart(futureScopeId)}`), writeScope(futureScopeId, {}), !tag)
775
+ return renderBody(), futureScope;
776
+ if (typeof tag == "string")
777
+ return nextScopeId(), write(`<${tag}${attrs(input)}>`), voidElements.has(tag) || (renderBody && renderBody(), write(`</${tag}>`)), futureScope;
778
+ let renderer = getDynamicRenderer(tag);
779
+ if (typeof renderer == "function")
780
+ return renderer(renderBody ? { ...input, renderBody } : input), futureScope;
781
+ }
782
+ function dynamicTagArgs(tag, args) {
783
+ if (!tag)
784
+ return;
785
+ let futureScopeId = peekNextScopeId(), futureScope = serializedScope(futureScopeId);
786
+ if (write(`${markResumeScopeStart(futureScopeId)}`), writeScope(futureScopeId, {}), typeof tag == "string")
787
+ return nextScopeId(), write(`<${tag}${attrs(args[0])}></${tag}>`), futureScope;
788
+ let renderer = getDynamicRenderer(tag);
789
+ if (typeof renderer == "function")
790
+ return renderer(...args), futureScope;
791
+ }
792
+ var getDynamicRenderer = (tag) => tag._ || tag.renderBody || tag, createRenderer = (fn) => fn;
793
+ function patchDynamicTag(newGetDynamicRenderer, newCreateRenderer) {
794
+ getDynamicRenderer = newGetDynamicRenderer, createRenderer = newCreateRenderer;
795
+ }
796
+
797
+ // src/html/template.ts
798
+ var createTemplate = (renderer, id = "") => register(new ServerTemplate(renderer), id);
799
+ function deferred() {
800
+ let resolve, reject;
801
+ return { promise: new Promise((res, rej) => {
802
+ resolve = res, reject = rej;
803
+ }), resolve, reject };
804
+ }
805
+ async function stringFromAsync(iterable) {
806
+ let str = "";
807
+ for await (let part of iterable)
808
+ str += part;
809
+ return str;
810
+ }
811
+ var ServerRenderResult = class {
812
+ #iterable;
813
+ #promise;
814
+ constructor(iterable) {
815
+ this.#iterable = iterable;
816
+ }
817
+ [Symbol.asyncIterator]() {
818
+ return this.#iterable;
819
+ }
820
+ [Symbol.toStringTag] = "RenderResult";
821
+ then(onfulfilled, onrejected) {
822
+ return (this.#promise ||= stringFromAsync(this.#iterable)).then(
823
+ onfulfilled,
824
+ onrejected
825
+ );
826
+ }
827
+ catch(onrejected) {
828
+ return this.then(void 0, onrejected);
829
+ }
830
+ finally(onfinally) {
831
+ return this.then(void 0, void 0).finally(onfinally);
832
+ }
833
+ toReadable() {
834
+ return new ReadableStream({
835
+ start: async (controller) => {
836
+ try {
837
+ for await (let chunk of this.#iterable)
838
+ chunk && controller.enqueue(chunk);
839
+ controller.close();
840
+ } catch (err) {
841
+ controller.error(err);
842
+ }
843
+ }
844
+ });
845
+ }
846
+ }, ServerTemplate = class {
847
+ #writeTo;
848
+ _;
849
+ constructor(renderer) {
850
+ this._ = renderer, this.#writeTo = createRenderFn(renderer);
851
+ }
852
+ mount() {
853
+ throw new Error(
854
+ "mount() is not implemented for the HTML compilation of a Marko template"
855
+ );
856
+ }
857
+ render(templateInput = {}) {
858
+ let { $global, ...input } = templateInput, buffer = "", done = !1, pending = deferred();
859
+ return this.#writeTo(
860
+ {
861
+ write(data) {
862
+ buffer += data;
863
+ },
864
+ flush() {
865
+ pending.resolve({
866
+ value: buffer,
867
+ done: !1
868
+ }), buffer = "", pending = deferred();
869
+ },
870
+ emit(name, error) {
871
+ name === "error" && pending.reject(error);
872
+ },
873
+ end() {
874
+ done = !0, pending.resolve({
875
+ value: "",
876
+ done
877
+ });
878
+ }
879
+ },
880
+ input,
881
+ $global
882
+ ), new ServerRenderResult({
883
+ [Symbol.asyncIterator]() {
884
+ return this;
885
+ },
886
+ async next() {
887
+ if (buffer || done) {
888
+ let value = buffer;
889
+ return buffer = "", { value, done };
890
+ }
891
+ return pending.promise;
892
+ }
893
+ });
894
+ }
895
+ };
896
+ // Annotate the CommonJS export names for ESM import in node:
897
+ 0 && (module.exports = {
898
+ $_streamData,
899
+ attr,
900
+ attrs,
901
+ classAttr,
902
+ createRenderFn,
903
+ createRenderer,
904
+ createTemplate,
905
+ dynamicTagArgs,
906
+ dynamicTagInput,
907
+ escapeAttrValue,
908
+ escapeScript,
909
+ escapeStyle,
910
+ escapeXML,
911
+ fork,
912
+ getRegistryInfo,
913
+ makeSerializable,
914
+ markResumeControlEnd,
915
+ markResumeControlSingleNodeEnd,
916
+ markResumeNode,
917
+ markResumeScopeStart,
918
+ maybeFlush,
919
+ nextScopeId,
920
+ nextTagId,
921
+ patchDynamicTag,
922
+ peekSerializedScope,
923
+ register,
924
+ serializedScope,
925
+ styleAttr,
926
+ toString,
927
+ tryCatch,
928
+ tryPlaceholder,
929
+ write,
930
+ writeEffect,
931
+ writeScope
932
+ });
933
+ //# sourceMappingURL=html.js.map