@marko/runtime-tags 0.1.2 → 0.1.3

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.
package/dist/debug/dom.js CHANGED
@@ -27,6 +27,7 @@ __export(dom_exports, {
27
27
  childClosures: () => childClosures,
28
28
  classAttr: () => classAttr,
29
29
  closure: () => closure,
30
+ compat: () => compat,
30
31
  conditional: () => conditional,
31
32
  conditionalOnlyChild: () => conditionalOnlyChild,
32
33
  createRenderer: () => createRenderer,
@@ -53,7 +54,6 @@ __export(dom_exports, {
53
54
  loopTo: () => loopTo,
54
55
  nextTagId: () => nextTagId,
55
56
  on: () => on,
56
- patchConditionals: () => patchConditionals,
57
57
  prepare: () => prepare,
58
58
  props: () => props,
59
59
  queueEffect: () => queueEffect,
@@ -1408,4 +1408,66 @@ var ClientTemplate = class {
1408
1408
  );
1409
1409
  }
1410
1410
  };
1411
+
1412
+ // src/dom/compat.ts
1413
+ var compat = {
1414
+ register,
1415
+ patchConditionals,
1416
+ queueEffect,
1417
+ isRenderer(renderer) {
1418
+ return renderer.___clone !== void 0;
1419
+ },
1420
+ getStartNode(scope) {
1421
+ return scope.___startNode;
1422
+ },
1423
+ setScopeNodes(scope, startNode, endNode) {
1424
+ scope.___startNode = startNode;
1425
+ scope.___endNode = endNode;
1426
+ },
1427
+ runComponentEffects() {
1428
+ runEffects(this.effects);
1429
+ },
1430
+ resolveRenderer(renderer) {
1431
+ if (renderer && typeof renderer === "object") {
1432
+ if (Array.isArray(renderer)) {
1433
+ const [registerId, scopeId] = renderer;
1434
+ const scope = scopeLookup[scopeId];
1435
+ return getRegisteredWithScope(registerId, scope);
1436
+ }
1437
+ if (renderer.___clone) {
1438
+ return renderer;
1439
+ }
1440
+ }
1441
+ },
1442
+ createRenderer(setup, clone, args) {
1443
+ const renderer = createRenderer("", void 0, setup, void 0, 1, args);
1444
+ renderer.___clone = clone;
1445
+ return renderer;
1446
+ },
1447
+ render(isHydrate, out, component, renderer, input) {
1448
+ const args = renderer.___args || noop;
1449
+ let existing = false;
1450
+ let scope = isHydrate ? component.scope = scopeLookup[out.global.componentIdToScopeId[component.id]] : component.scope;
1451
+ component.effects = prepare(() => {
1452
+ if (!scope) {
1453
+ scope = component.scope = createScopeWithRenderer(renderer, out.global);
1454
+ const closures = renderer.___closureSignals;
1455
+ if (closures) {
1456
+ for (const signal of closures) {
1457
+ signal(component.scope, true);
1458
+ }
1459
+ }
1460
+ } else {
1461
+ args(scope, input, 1);
1462
+ existing = true;
1463
+ }
1464
+ args(scope, input);
1465
+ });
1466
+ if (!existing) {
1467
+ return scope.___startNode === scope.___endNode ? scope.___startNode : scope.___startNode.parentNode;
1468
+ }
1469
+ }
1470
+ };
1471
+ function noop() {
1472
+ }
1411
1473
  //# sourceMappingURL=dom.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/dom.ts", "../../src/dom/scope.ts", "../../src/dom/reconcile-longest-increasing-subsequence.ts", "../../src/common/helpers.ts", "../../src/dom/abort-signal.ts", "../../src/dom/dom.ts", "../../src/dom/walker.ts", "../../src/dom/renderer.ts", "../../src/dom/signals.ts", "../../src/dom/control-flow.ts", "../../src/dom/event.ts", "../../src/dom/resume.ts", "../../src/dom/schedule.ts", "../../src/dom/queue.ts", "../../src/dom/template.ts"],
4
- "sourcesContent": ["export {\n conditional,\n conditionalOnlyChild,\n inConditionalScope,\n loopOf,\n loopIn,\n loopTo,\n inLoopScope,\n patchConditionals,\n} from \"./dom/control-flow\";\n\nexport {\n data,\n html,\n attr,\n attrs,\n classAttr,\n styleAttr,\n props,\n lifecycle,\n} from \"./dom/dom\";\n\nexport { resetAbortSignal, getAbortSignal } from \"./dom/abort-signal\";\n\nexport { on } from \"./dom/event\";\n\nexport {\n init,\n register,\n registerSubscriber,\n getRegisteredWithScope,\n scopeLookup,\n} from \"./dom/resume\";\n\nexport {\n queueSource,\n queueEffect,\n run,\n prepare,\n runEffects,\n} from \"./dom/queue\";\n\nexport { write, bindFunction, bindRenderer, createScope } from \"./dom/scope\";\n\nexport type { Scope } from \"./common/types\";\n\nexport {\n createRenderer,\n dynamicTagAttrs,\n createScopeWithRenderer,\n} from \"./dom/renderer\";\n\nexport { createTemplate } from \"./dom/template\";\n\nexport {\n value,\n initValue,\n intersection,\n closure,\n dynamicClosure,\n dynamicSubscribers,\n childClosures,\n setTagVar,\n tagVarSignal,\n nextTagId,\n inChild,\n values,\n intersections,\n} from \"./dom/signals\";\n", "import type { Scope } from \"../common/types\";\nimport type { Renderer } from \"./renderer\";\n\nlet debugID = 0;\n\nexport function createScope($global: Scope[\"$global\"]): Scope {\n const scope = {} as Scope;\n if (MARKO_DEBUG) {\n scope.___debugId = debugID++;\n }\n scope.___client = true;\n scope.$global = $global;\n return scope;\n}\n\nconst emptyScope = createScope({});\nexport function getEmptyScope(marker: Comment) {\n emptyScope.___startNode = emptyScope.___endNode = marker;\n return emptyScope;\n}\n\nexport function write<S extends Scope, K extends keyof S>(\n scope: S,\n localIndex: K,\n value: S[K],\n) {\n if (scope[localIndex] !== value) {\n scope[localIndex] = value;\n return 1;\n }\n return 0;\n}\n\nfunction binder<T, U = T>(bind: (scope: Scope, value: T) => U) {\n return (scope: Scope, value: T): U => {\n scope.___bound ??= new Map();\n let bound = scope.___bound.get(value) as U;\n if (!bound) {\n bound = bind(scope, value);\n scope.___bound.set(value, bound);\n }\n return bound;\n };\n}\n\nexport const bindRenderer = binder(\n (ownerScope, renderer: Renderer): Renderer =>\n renderer && {\n ...renderer,\n ___owner: ownerScope,\n },\n);\n\ntype BindableFunction = (\n this: unknown,\n scope: Scope,\n ...args: any[]\n) => unknown;\nexport const bindFunction = binder(\n <T extends BindableFunction>(boundScope: Scope, fn: T) =>\n fn.length\n ? function bound(this: unknown, ...args: any[]) {\n return fn.call(this, boundScope, ...args);\n }\n : function bound(this: unknown) {\n return fn.call(this, boundScope);\n },\n);\n\nexport function destroyScope(scope: Scope) {\n _destroyScope(scope);\n\n scope._?.___cleanup?.delete(scope);\n\n const closureSignals = scope.___renderer?.___closureSignals;\n if (closureSignals) {\n for (const signal of closureSignals) {\n signal.___unsubscribe?.(scope);\n }\n }\n return scope;\n}\n\nfunction _destroyScope(scope: Scope) {\n const cleanup = scope.___cleanup;\n if (cleanup) {\n for (const instance of cleanup) {\n _destroyScope(instance);\n }\n }\n\n const controllers = scope.___abortControllers;\n if (controllers) {\n for (const ctrl of controllers.values()) {\n ctrl.abort();\n }\n }\n}\n\nexport function onDestroy(scope: Scope) {\n let parentScope = scope._;\n while (parentScope && !parentScope.___cleanup?.has(scope)) {\n (parentScope.___cleanup ||= new Set()).add(scope);\n scope = parentScope;\n parentScope = scope._;\n }\n}\n\nexport function removeAndDestroyScope(scope: Scope) {\n destroyScope(scope);\n let current = scope.___startNode;\n const stop = scope.___endNode.nextSibling;\n while (current !== stop) {\n const next = current.nextSibling;\n current.remove();\n current = next!;\n }\n}\n\nexport function insertBefore(\n scope: Scope,\n parent: Node & ParentNode,\n nextSibling: Node | null,\n) {\n let current = scope.___startNode as Node;\n const stop = scope.___endNode.nextSibling;\n while (current !== stop) {\n const next = current.nextSibling;\n parent.insertBefore(current, nextSibling);\n current = next!;\n }\n}\n", "import type { Scope } from \"../common/types\";\nimport { insertBefore, removeAndDestroyScope } from \"./scope\";\n\nconst WRONG_POS = 2147483647;\n\nexport function reconcile(\n parent: Node & ParentNode,\n oldScopes: Scope[],\n newScopes: Scope[],\n afterReference: Node | null,\n): void {\n let oldStart = 0;\n let newStart = 0;\n let oldEnd = oldScopes.length - 1;\n let newEnd = newScopes.length - 1;\n let oldStartScope = oldScopes[oldStart];\n let newStartScope = newScopes[newStart];\n let oldEndScope = oldScopes[oldEnd];\n let newEndScope = newScopes[newEnd];\n let i: number;\n let j: number | undefined;\n let k: number;\n let nextSibling: Node | null;\n let oldScope: Scope | null;\n let newScope: Scope;\n\n // Step 1\n // tslint:disable-next-line: label-position\n outer: {\n // Skip nodes with the same key at the beginning.\n while (oldStartScope === newStartScope) {\n ++oldStart;\n ++newStart;\n if (oldStart > oldEnd || newStart > newEnd) {\n break outer;\n }\n oldStartScope = oldScopes[oldStart];\n newStartScope = newScopes[newStart];\n }\n\n // Skip nodes with the same key at the end.\n while (oldEndScope === newEndScope) {\n --oldEnd;\n --newEnd;\n if (oldStart > oldEnd || newStart > newEnd) {\n break outer;\n }\n oldEndScope = oldScopes[oldEnd];\n newEndScope = newScopes[newEnd];\n }\n }\n\n if (oldStart > oldEnd) {\n // All old nodes are in the correct place, insert the remaining new nodes.\n if (newStart <= newEnd) {\n k = newEnd + 1;\n nextSibling =\n k < newScopes.length ? newScopes[k].___startNode : afterReference;\n do {\n insertBefore(newScopes[newStart++], parent, nextSibling);\n } while (newStart <= newEnd);\n }\n } else if (newStart > newEnd) {\n // All new nodes are in the correct place, remove the remaining old nodes.\n do {\n removeAndDestroyScope(oldScopes[oldStart++]);\n } while (oldStart <= oldEnd);\n } else {\n // Step 2\n const oldLength = oldEnd - oldStart + 1;\n const newLength = newEnd - newStart + 1;\n\n const aNullable = oldScopes as Array<Scope | null>; // will be removed by js optimizing compilers.\n // Mark all nodes as inserted.\n const sources = new Array(newLength);\n for (i = 0; i < newLength; ++i) {\n sources[i] = -1;\n }\n\n // When pos === WRONG_POS, it means that one of the nodes in the wrong position.\n let pos = 0;\n let synced = 0;\n\n const keyIndex: Map<unknown, number> = new Map();\n for (j = newStart; j <= newEnd; ++j) {\n keyIndex.set(newScopes[j], j);\n }\n\n for (i = oldStart; i <= oldEnd && synced < newLength; ++i) {\n oldScope = oldScopes[i];\n j = keyIndex.get(oldScope);\n if (j !== undefined) {\n pos = pos > j ? WRONG_POS : j;\n ++synced;\n newScope = newScopes[j];\n sources[j - newStart] = i;\n aNullable[i] = null;\n }\n }\n\n if (oldLength === oldScopes.length && synced === 0) {\n // None of the newNodes already exist in the DOM\n // All newNodes need to be inserted\n for (; newStart < newLength; ++newStart) {\n insertBefore(newScopes[newStart], parent, afterReference);\n }\n // All oldNodes need to be removed\n for (; oldStart < oldLength; ++oldStart) {\n removeAndDestroyScope(oldScopes[oldStart]);\n }\n } else {\n i = oldLength - synced;\n while (i > 0) {\n oldScope = aNullable[oldStart++];\n if (oldScope !== null) {\n removeAndDestroyScope(oldScope);\n i--;\n }\n }\n\n // Step 3\n if (pos === WRONG_POS) {\n const seq = longestIncreasingSubsequence(sources);\n j = seq.length - 1;\n k = newScopes.length;\n for (i = newLength - 1; i >= 0; --i) {\n if (sources[i] === -1) {\n pos = i + newStart;\n newScope = newScopes[pos++];\n nextSibling =\n pos < k ? newScopes[pos].___startNode : afterReference;\n insertBefore(newScope, parent, nextSibling);\n } else {\n if (j < 0 || i !== seq[j]) {\n pos = i + newStart;\n newScope = newScopes[pos++];\n nextSibling =\n pos < k ? newScopes[pos].___startNode : afterReference;\n insertBefore(newScope, parent, nextSibling);\n } else {\n --j;\n }\n }\n }\n } else if (synced !== newLength) {\n k = newScopes.length;\n for (i = newLength - 1; i >= 0; --i) {\n if (sources[i] === -1) {\n pos = i + newStart;\n newScope = newScopes[pos++];\n nextSibling =\n pos < k ? newScopes[pos].___startNode : afterReference;\n insertBefore(newScope, parent, nextSibling);\n }\n }\n }\n }\n }\n}\n\nfunction longestIncreasingSubsequence(a: number[]): number[] {\n const p = a.slice();\n const result: number[] = [];\n result.push(0);\n let u: number;\n let v: number;\n\n for (let i = 0, il = a.length; i < il; ++i) {\n if (a[i] === -1) {\n continue;\n }\n\n const j = result[result.length - 1];\n if (a[j] < a[i]) {\n p[i] = j;\n result.push(i);\n continue;\n }\n\n u = 0;\n v = result.length - 1;\n\n while (u < v) {\n // tslint:disable-next-line:no-bitwise\n const c = ((u + v) / 2) | 0;\n if (a[result[c]] < a[i]) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n\n if (a[i] < a[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n\n u = result.length;\n v = result[u - 1];\n\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n\n return result;\n}\n", "export function classValue(value: unknown) {\n return toDelimitedString(value, \" \", stringifyClassObject);\n}\n\nfunction stringifyClassObject(name: string, value: unknown) {\n if (isVoid(value)) {\n return \"\";\n }\n\n return name;\n}\n\nexport function styleValue(value: unknown) {\n return toDelimitedString(value, \";\", stringifyStyleObject);\n}\n\nconst NON_DIMENSIONAL = /^(--|ta|or|li|z)|n-c|i(do|nk|m|t)|w$|we/;\nfunction stringifyStyleObject(name: string, value: unknown) {\n if (isVoid(value)) {\n return \"\";\n }\n\n if (typeof value === \"number\" && value && !NON_DIMENSIONAL.test(name)) {\n (value as unknown as string) += \"px\";\n }\n\n return `${name}:${value}`;\n}\n\nfunction toDelimitedString(\n val: unknown,\n delimiter: string,\n stringify: (n: string, v: unknown) => string | undefined,\n) {\n switch (typeof val) {\n case \"string\":\n return val;\n case \"object\":\n if (val !== null) {\n let result = \"\";\n let curDelimiter = \"\";\n\n if (Array.isArray(val)) {\n for (const v of val) {\n const part = toDelimitedString(v, delimiter, stringify);\n if (part !== \"\") {\n result += curDelimiter + part;\n curDelimiter = delimiter;\n }\n }\n } else {\n for (const name in val) {\n const v = (val as Record<string, unknown>)[name];\n const part = stringify(name, v);\n if (part !== \"\") {\n result += curDelimiter + part;\n curDelimiter = delimiter;\n }\n }\n }\n\n return result;\n }\n }\n\n return \"\";\n}\n\nexport function isVoid(value: unknown) {\n return value == null || value === false;\n}\n\nexport function alphaEncode(num: number): string {\n return num < 52\n ? String.fromCharCode(num < 26 ? num + 97 : num + (65 - 26))\n : alphaEncode((num / 52) | 0) + alphaEncode(num % 52);\n}\n", "import type { Scope } from \"../common/types\";\nimport { onDestroy } from \"./scope\";\n\nexport function resetAbortSignal(scope: Scope, id: string | number) {\n const controllers = scope.___abortControllers;\n if (controllers) {\n const ctrl = controllers.get(id);\n if (ctrl) {\n ctrl.abort();\n controllers.delete(id);\n }\n }\n}\n\nexport function getAbortSignal(scope: Scope, id: string | number) {\n const controllers = (scope.___abortControllers ??= new Map());\n let controller = controllers.get(id);\n if (!controller) {\n onDestroy(scope);\n controllers.set(id, (controller = new AbortController()));\n }\n\n return controller.signal;\n}\n", "import { classValue, styleValue } from \"../common/helpers\";\nimport {\n type Accessor,\n AccessorChar,\n NodeType,\n type Scope,\n} from \"../common/types\";\nimport { getAbortSignal } from \"./abort-signal\";\nimport { write } from \"./scope\";\n\nexport function isDocumentFragment(node: Node): node is DocumentFragment {\n return node.nodeType === NodeType.DocumentFragment;\n}\n\nexport function attr(element: Element, name: string, value: unknown) {\n const normalizedValue = normalizeAttrValue(value);\n if (normalizedValue === undefined) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, normalizedValue);\n }\n}\n\nexport function classAttr(element: Element, value: unknown) {\n attr(element, \"class\", classValue(value) || false);\n}\n\nexport function styleAttr(element: Element, value: unknown) {\n attr(element, \"style\", styleValue(value) || false);\n}\n\nexport function data(node: Text | Comment, value: unknown) {\n const normalizedValue = normalizeString(value);\n // TODO: benchmark if it is actually faster to check data first\n if (node.data !== normalizedValue) {\n node.data = normalizedValue;\n }\n}\n\nexport function attrs(\n scope: Scope,\n elementAccessor: Accessor,\n nextAttrs: Record<string, unknown>,\n) {\n const prevAttrs = scope[elementAccessor + AccessorChar.PreviousAttributes] as\n | typeof nextAttrs\n | undefined;\n const element = scope[elementAccessor] as Element;\n\n if (prevAttrs) {\n for (const name in prevAttrs) {\n if (!(nextAttrs && name in nextAttrs)) {\n element.removeAttribute(name);\n }\n }\n }\n // https://jsperf.com/object-keys-vs-for-in-with-closure/194\n for (const name in nextAttrs) {\n if (!(prevAttrs && nextAttrs[name] === prevAttrs[name])) {\n if (name === \"class\") {\n classAttr(element, nextAttrs[name]);\n } else if (name === \"style\") {\n styleAttr(element, nextAttrs[name]);\n } else if (name !== \"renderBody\") {\n attr(element, name, nextAttrs[name]);\n }\n }\n }\n\n scope[elementAccessor + AccessorChar.PreviousAttributes] = nextAttrs;\n}\n\nconst doc = document;\nconst parser = /* @__PURE__ */ doc.createElement(\"template\");\n\nexport function html(scope: Scope, value: unknown, index: Accessor) {\n const firstChild = scope[index] as Node & ChildNode;\n const lastChild = (scope[index + \"-\"] || firstChild) as Node & ChildNode;\n const parentNode = firstChild.parentNode!;\n const afterReference = lastChild.nextSibling;\n\n parser.innerHTML = value || value === 0 ? `${value}` : \"<!>\";\n const newContent = parser.content;\n write(scope, index, newContent.firstChild);\n write(scope, (index + \"-\") as any as number, newContent.lastChild);\n parentNode.insertBefore(newContent, firstChild);\n\n let current = firstChild;\n while (current !== afterReference) {\n const next = current.nextSibling;\n current.remove();\n current = next!;\n }\n}\n\nexport function props(scope: Scope, nodeIndex: number, index: number) {\n const nextProps = scope[index] as Record<string, unknown>;\n const prevProps = scope[index + \"-\"] as Record<string, unknown> | undefined;\n const node = scope[nodeIndex] as Node;\n\n if (prevProps) {\n for (const name in prevProps) {\n if (!(name in nextProps)) {\n (node as any)[name] = undefined;\n }\n }\n }\n // https://jsperf.com/object-keys-vs-for-in-with-closure/194\n for (const name in nextProps) {\n (node as any)[name] = nextProps[name];\n }\n\n scope[index + \"-\"] = nextProps;\n}\n\nfunction normalizeAttrValue(value: unknown) {\n if (value || value === 0) {\n return value === true ? \"\" : value + \"\";\n }\n}\n\nfunction normalizeString(value: unknown) {\n return value || value === 0 ? value + \"\" : \"\\u200d\";\n}\nexport function lifecycle(\n scope: Scope,\n index: string | number,\n thisObj: Record<string, unknown> & {\n onMount?: (this: unknown) => void;\n onUpdate?: (this: unknown) => void;\n onDestroy?: (this: unknown) => void;\n },\n) {\n const instance = scope[index] as typeof thisObj;\n if (instance) {\n Object.assign(instance, thisObj);\n instance.onUpdate?.();\n } else {\n scope[index] = thisObj;\n thisObj.onMount?.();\n getAbortSignal(\n scope,\n AccessorChar.LifecycleAbortController + index,\n ).onabort = () => thisObj.onDestroy?.();\n }\n}\n", "import { type Scope, NodeType, WalkCode, WalkRangeSize } from \"../common/types\";\nimport { createScope } from \"./scope\";\n\nexport const walker = /* @__PURE__ */ document.createTreeWalker(document);\n\n// Laws of the walks string:\n// - Always prefer Get to Before to After, Inside, or Replace\n// - Get must always be used to get a static node from clonable template if possible\n// - Replace must only be used to insert between two static text nodes\n// - Inside must only be used to insert into elements with no static children\n// - After must only be used to insert a last child or immediately following another action (if it makes the walks string smaller)\n// - Adjacent actions must always be in source order (Before* Get* Inside* After* || Before* Replace)\n// - When an element is both walked into and needs to insert After, you must walk in first (Next) and then walk Out before After\n// - Unless the inserted node is Text, Inside, After, & Replace must be followed by Out/Over to skip over unknown children\n// - Out must always be followed by After or Over\n// - Before must be done before walking into the node\n// - Next would walk back in the node we just walked Out of\n// - A component must assume the walker is on its first node, and include instructions for walking to its assumed nextSibling\n\nexport function trimWalkString(walkString: string): string {\n let end = walkString.length;\n while (walkString.charCodeAt(--end) > WalkCode.BeginChild);\n return walkString.slice(0, end + 1);\n}\n\nexport function walk(startNode: Node, walkCodes: string, scope: Scope) {\n walker.currentNode = startNode;\n walkInternal(walkCodes, scope, 0);\n walker.currentNode = document.documentElement;\n}\n\nfunction walkInternal(\n walkCodes: string,\n scope: Scope,\n currentWalkIndex: number,\n) {\n let value: number;\n let storedMultiplier = 0;\n let currentMultiplier = 0;\n let currentScopeIndex = 0;\n\n while ((value = walkCodes.charCodeAt(currentWalkIndex++))) {\n currentMultiplier = storedMultiplier;\n storedMultiplier = 0;\n if (value >= WalkCode.Multiplier) {\n storedMultiplier =\n currentMultiplier * WalkRangeSize.Multiplier +\n value -\n WalkCode.Multiplier;\n } else if (value >= WalkCode.Out) {\n value = WalkRangeSize.Out * currentMultiplier + value - WalkCode.Out;\n while (value--) {\n walker.parentNode();\n }\n walker.nextSibling();\n } else if (value >= WalkCode.Over) {\n value = WalkRangeSize.Over * currentMultiplier + value - WalkCode.Over;\n while (value--) {\n !walker.nextSibling() && !walker.nextNode();\n }\n } else if (value >= WalkCode.Next) {\n value = WalkRangeSize.Next * currentMultiplier + value - WalkCode.Next;\n while (value--) {\n walker.nextNode();\n }\n } else if (value === WalkCode.BeginChild) {\n currentWalkIndex = walkInternal(\n walkCodes,\n (scope[\n MARKO_DEBUG\n ? getDebugKey(currentScopeIndex++, \"#childScope\")\n : currentScopeIndex++\n ] = createScope(scope.$global)),\n currentWalkIndex,\n )!;\n } else if (value === WalkCode.EndChild) {\n return currentWalkIndex;\n } else if (value === WalkCode.Get) {\n scope[\n MARKO_DEBUG\n ? getDebugKey(currentScopeIndex++, walker.currentNode)\n : currentScopeIndex++\n ] = walker.currentNode;\n } else {\n const newNode = (scope[\n MARKO_DEBUG\n ? getDebugKey(currentScopeIndex++, \"#text\")\n : currentScopeIndex++\n ] = document.createTextNode(\"\"));\n const current = walker.currentNode;\n const parentNode = current.parentNode!;\n\n if (value === WalkCode.Before) {\n parentNode.insertBefore(newNode, current);\n } else {\n if (value === WalkCode.After) {\n parentNode.insertBefore(newNode, current.nextSibling);\n } else {\n if (MARKO_DEBUG && value !== WalkCode.Replace) {\n throw new Error(`Unknown walk code: ${value}`);\n }\n parentNode.replaceChild(newNode, current);\n }\n\n walker.currentNode = newNode;\n }\n } /* else {\n if (MARKO_DEBUG && value !== WalkCodes.Replace) {\n throw new Error(`Unknown walk code: ${value}`);\n }\n const current = walker.currentNode;\n current.parentNode!.replaceChild(walker.currentNode = scope[currentScopeIndex++] = document.createTextNode(\"\"), current);\n } */\n }\n\n return currentWalkIndex;\n}\n\nfunction getDebugKey(index: number, node: Node | string) {\n if (typeof node === \"string\") {\n return `${node}/${index}`;\n } else if (node.nodeType === NodeType.Text) {\n return `#text/${index}`;\n } else if (node.nodeType === NodeType.Comment) {\n return `#comment/${index}`;\n } else if (node.nodeType === NodeType.Element) {\n return `#${(node as Element).tagName.toLowerCase()}/${index}`;\n }\n\n return index;\n}\n", "import {\n type Accessor,\n AccessorChar,\n NodeType,\n WalkCode,\n type Scope,\n} from \"../common/types\";\nimport { setConditionalRendererOnlyChild } from \"./control-flow\";\nimport { attrs } from \"./dom\";\nimport { bindRenderer, createScope } from \"./scope\";\nimport type { IntersectionSignal, ValueSignal } from \"./signals\";\nimport { trimWalkString, walk } from \"./walker\";\n\nexport type Renderer = {\n ___template: string;\n ___walks: string | undefined;\n ___setup: SetupFn | undefined;\n ___closureSignals: Set<IntersectionSignal>;\n ___clone: () => Node;\n ___hasUserEffects: 0 | 1;\n ___sourceNode: Node | undefined;\n ___args: ValueSignal | undefined;\n ___owner: Scope | undefined;\n};\n\nexport type RendererOrElementName =\n | Renderer\n | (string & Record<keyof Renderer, undefined>);\n\ntype SetupFn = (scope: Scope) => void;\n\nexport function createScopeWithRenderer(\n renderer: RendererOrElementName,\n $global: Scope[\"___global\"],\n ownerScope?: Scope,\n) {\n const newScope = createScope($global);\n newScope._ = renderer.___owner || ownerScope;\n newScope.___renderer = renderer as Renderer;\n initRenderer(renderer, newScope);\n if (renderer.___closureSignals) {\n for (const signal of renderer.___closureSignals) {\n signal.___subscribe?.(newScope);\n }\n }\n return newScope;\n}\n\nexport function initRenderer(renderer: RendererOrElementName, scope: Scope) {\n const dom =\n typeof renderer === \"string\"\n ? document.createElement(renderer)\n : renderer.___clone();\n walk(\n dom.nodeType === NodeType.DocumentFragment ? dom.firstChild! : dom,\n renderer.___walks ?? \" \",\n scope,\n );\n scope.___startNode =\n dom.nodeType === NodeType.DocumentFragment\n ? dom.firstChild!\n : (dom as ChildNode);\n scope.___endNode =\n dom.nodeType === NodeType.DocumentFragment\n ? dom.lastChild!\n : (dom as ChildNode);\n if (renderer.___setup) {\n renderer.___setup(scope);\n }\n return dom;\n}\n\nexport function dynamicTagAttrs(\n nodeAccessor: Accessor,\n renderBody?: Renderer,\n inputIsArgs?: boolean,\n) {\n return (\n scope: Scope,\n getAttrs: () => Record<string, unknown>,\n clean?: boolean | 1,\n ) => {\n const renderer = scope[\n nodeAccessor + AccessorChar.ConditionalRenderer\n ] as Renderer;\n\n if (!renderer || renderer === renderBody || (clean && !renderer.___args)) {\n return;\n }\n\n const childScope = scope[nodeAccessor + AccessorChar.ConditionalScope];\n if (typeof renderer === \"string\") {\n // This will always be 0 because in dynamicRenderer we used WalkCodes.Get\n const elementAccessor = MARKO_DEBUG ? `#${renderer}/0` : 0;\n attrs(childScope, elementAccessor, getAttrs());\n setConditionalRendererOnlyChild(\n childScope,\n elementAccessor,\n renderBody && bindRenderer(scope, renderBody),\n );\n } else if (renderer.___args) {\n if (clean) {\n renderer.___args(childScope, null as any, clean);\n } else {\n const attributes = getAttrs();\n renderer.___args(\n childScope,\n inputIsArgs\n ? attributes\n : [\n renderBody\n ? {\n ...attributes,\n renderBody: bindRenderer(scope, renderBody),\n }\n : attributes,\n ],\n clean,\n );\n }\n }\n };\n}\n\nexport function createRenderer(\n template: string,\n walks?: string,\n setup?: SetupFn,\n closureSignals?: IntersectionSignal[],\n hasUserEffects: 0 | 1 = 0,\n args?: ValueSignal,\n): Renderer {\n return {\n ___template: template,\n ___walks: walks && /* @__PURE__ */ trimWalkString(walks),\n ___setup: setup,\n ___clone: _clone,\n ___closureSignals: new Set(closureSignals),\n ___hasUserEffects: hasUserEffects,\n ___sourceNode: undefined,\n ___args: args,\n ___owner: undefined,\n };\n}\n\nfunction _clone(this: Renderer) {\n let sourceNode: Node | null | undefined = this.___sourceNode;\n if (!sourceNode) {\n if (MARKO_DEBUG && this.___template === undefined) {\n throw new Error(\n \"The renderer does not have a template to clone: \" +\n JSON.stringify(this),\n );\n }\n const walks = this.___walks;\n // TODO: there's probably a better way to determine if nodes will be inserted before/after the parsed content\n // and therefore we need to put it in a document fragment, even though only a single node results from the parse\n const ensureFragment =\n walks &&\n walks.length < 4 &&\n walks.charCodeAt(walks.length - 1) !== WalkCode.Get;\n this.___sourceNode = sourceNode = parse(\n this.___template,\n ensureFragment as boolean,\n );\n }\n return sourceNode.cloneNode(true);\n}\n\nconst doc = document;\nconst parser = /* @__PURE__ */ doc.createElement(\"template\");\n\nfunction parse(template: string, ensureFragment?: boolean) {\n let node: Node | null;\n parser.innerHTML = template;\n const content = parser.content;\n\n if (\n ensureFragment ||\n (node = content.firstChild) !== content.lastChild ||\n (node && node.nodeType === NodeType.Comment)\n ) {\n node = doc.createDocumentFragment();\n node.appendChild(content);\n } else if (!node) {\n node = doc.createTextNode(\"\");\n }\n\n return node as Node & { firstChild: ChildNode; lastChild: ChildNode };\n}\n", "import { type Accessor, AccessorChar, type Scope } from \"../common/types\";\nimport type { RendererOrElementName } from \"./renderer\";\nimport { bindFunction } from \"./scope\";\n\nexport type Signal = ValueSignal | IntersectionSignal;\n\nexport type ValueSignal<T = unknown> = (\n scope: Scope,\n value: T,\n clean?: 1 | boolean,\n) => void;\n\nexport type BoundValueSignal<T = unknown> = (\n value: T,\n clean?: 1 | boolean,\n) => void;\n\nexport type IntersectionSignal = ((\n scope: Scope,\n clean?: 1 | boolean,\n) => void) & {\n ___subscribe?(scope: Scope): void;\n ___unsubscribe?(scope: Scope): void;\n};\n\nexport type BoundIntersectionSignal = ((clean?: 1 | boolean) => void) & {\n ___subscribe?(scope: Scope): void;\n ___unsubscribe?(scope: Scope): void;\n};\n\nexport function initValue<T>(\n valueAccessor: Accessor,\n fn: ValueSignal<T>,\n): ValueSignal<T> {\n const markAccessor = valueAccessor + AccessorChar.Mark;\n return (scope, nextValue, clean) => {\n if (clean !== 1 && scope[markAccessor] === undefined) {\n fn(scope, nextValue, clean);\n }\n };\n}\n\nexport function value<T>(\n valueAccessor: Accessor,\n render?: ValueSignal<T>,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal<any>,\n): ValueSignal<T> {\n const markAccessor = valueAccessor + AccessorChar.Mark;\n return (scope, nextValue, clean) => {\n let creation: boolean | undefined;\n let currentMark: number;\n\n if (clean === 1) {\n currentMark = scope[markAccessor] = (scope[markAccessor] ?? 0) + 1;\n } else {\n creation = scope[markAccessor] === undefined;\n currentMark = scope[markAccessor] ||= 1;\n }\n\n if (currentMark === 1) {\n if (\n clean !== 1 &&\n (creation || !(clean ||= scope[valueAccessor] === nextValue))\n ) {\n scope[valueAccessor] = nextValue;\n render?.(scope, nextValue);\n } else {\n valueWithIntersection?.(scope, 0, clean);\n }\n intersection?.(scope, clean);\n }\n\n // closure needs this to be called after the fn\n // so it is marked until all downstream have been called\n if (clean !== 1) {\n scope[markAccessor]--;\n }\n };\n}\n\nlet accessorId = 0;\n\nexport function intersection(\n count: number,\n fn: IntersectionSignal,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal,\n): IntersectionSignal {\n const cleanAccessor = AccessorChar.Dynamic + accessorId++;\n const markAccessor = cleanAccessor + AccessorChar.Mark;\n return (scope, clean) => {\n let currentMark;\n if (clean === 1) {\n currentMark = scope[markAccessor] = (scope[markAccessor] ?? 0) + 1;\n } else {\n if (scope[markAccessor] === undefined) {\n scope[markAccessor] = count - 1;\n clean = undefined;\n } else {\n currentMark = scope[markAccessor]--;\n clean = scope[cleanAccessor] &&= clean;\n }\n }\n if (currentMark === 1) {\n if (clean) {\n valueWithIntersection?.(scope, 0, clean);\n } else {\n scope[cleanAccessor] = true;\n fn(scope, clean);\n }\n intersection?.(scope, clean);\n }\n };\n}\n\nconst defaultGetOwnerScope = (scope: Scope) => scope._!;\n\nexport function closure<T>(\n ownerValueAccessor: Accessor | ((scope: Scope) => Accessor),\n fn: ValueSignal<T>,\n _getOwnerScope?: (scope: Scope) => Scope,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal<any>,\n): IntersectionSignal {\n const cleanAccessor = AccessorChar.Dynamic + accessorId++;\n const markAccessor = cleanAccessor + 1;\n const getOwnerScope = _getOwnerScope || defaultGetOwnerScope;\n const getOwnerValueAccessor =\n typeof ownerValueAccessor === \"function\"\n ? ownerValueAccessor\n : () => ownerValueAccessor as Accessor;\n return (scope, clean) => {\n let ownerScope, ownerValueAccessor, currentMark;\n if (clean === 1) {\n currentMark = scope[markAccessor] = (scope[markAccessor] ?? 0) + 1;\n } else {\n if (scope[markAccessor] === undefined) {\n ownerScope = getOwnerScope(scope);\n ownerValueAccessor = getOwnerValueAccessor(scope);\n const ownerMark = ownerScope[ownerValueAccessor + AccessorChar.Mark];\n const ownerHasRun =\n ownerMark === undefined ? !ownerScope.___client : ownerMark === 0;\n scope[markAccessor] = (currentMark = ownerHasRun ? 1 : 2) - 1;\n clean = undefined;\n } else {\n currentMark = scope[markAccessor]--;\n clean = scope[cleanAccessor] &&= clean;\n }\n }\n if (currentMark === 1) {\n if (clean) {\n valueWithIntersection?.(scope, 0, clean);\n } else {\n scope[cleanAccessor] = false;\n ownerScope ??= getOwnerScope(scope);\n ownerValueAccessor ??= getOwnerValueAccessor(scope);\n fn?.(scope, ownerScope[ownerValueAccessor]);\n }\n intersection?.(scope, clean);\n }\n };\n}\n\nexport function dynamicClosure<T>(\n ownerValueAccessor: Accessor | ((scope: Scope) => Accessor),\n fn: ValueSignal<T>,\n _getOwnerScope?: (scope: Scope) => Scope,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal,\n): IntersectionSignal {\n const getOwnerScope = _getOwnerScope || defaultGetOwnerScope;\n const getOwnerValueAccessor =\n typeof ownerValueAccessor === \"function\"\n ? ownerValueAccessor\n : () => ownerValueAccessor as string;\n const signalFn = closure(\n getOwnerValueAccessor,\n fn,\n getOwnerScope,\n intersection,\n valueWithIntersection,\n );\n return Object.assign(signalFn, {\n ___subscribe(scope: Scope) {\n const ownerScope = getOwnerScope(scope);\n const providerSubscriptionsAccessor =\n getOwnerValueAccessor(scope) + AccessorChar.Subscribers;\n ownerScope[providerSubscriptionsAccessor] ??= new Set();\n ownerScope[providerSubscriptionsAccessor].add(\n bindFunction(scope, signalFn as any),\n );\n },\n ___unsubscribe(scope: Scope) {\n const ownerScope = getOwnerScope(scope);\n const providerSubscriptionsAccessor =\n getOwnerValueAccessor(scope) + AccessorChar.Subscribers;\n ownerScope[providerSubscriptionsAccessor]?.delete(\n bindFunction(scope, signalFn as any),\n );\n },\n });\n}\n\nexport function childClosures(\n closureSignals: IntersectionSignal[],\n childAccessor: Accessor,\n) {\n const signal = (scope: Scope, clean?: boolean | 1) => {\n const childScope = scope[childAccessor] as Scope;\n for (const closureSignal of closureSignals) {\n closureSignal(childScope, clean);\n }\n };\n return Object.assign(signal, {\n ___subscribe(scope: Scope) {\n const childScope = scope[childAccessor] as Scope;\n for (const closureSignal of closureSignals) {\n closureSignal.___subscribe?.(childScope);\n }\n },\n ___unsubscribe(scope: Scope) {\n const childScope = scope[childAccessor] as Scope;\n for (const closureSignal of closureSignals) {\n closureSignal.___unsubscribe?.(childScope);\n }\n },\n });\n}\n\nexport function dynamicSubscribers(valueAccessor: Accessor) {\n const subscribersAccessor = valueAccessor + AccessorChar.Subscribers;\n return (scope: Scope, clean?: boolean | 1) => {\n const subscribers = scope[\n subscribersAccessor\n ] as Set<BoundIntersectionSignal>;\n if (subscribers) {\n for (const subscriber of subscribers) {\n subscriber(clean);\n }\n }\n };\n}\n\nexport function setTagVar(\n scope: Scope,\n childAccessor: Accessor,\n tagVarSignal: ValueSignal,\n) {\n scope[childAccessor][AccessorChar.TagVariable] = bindFunction(\n scope,\n tagVarSignal as any,\n ) as BoundValueSignal;\n}\n\nexport const tagVarSignal = (\n scope: Scope,\n value: unknown,\n clean?: boolean | 1,\n) => scope[AccessorChar.TagVariable]?.(value, clean);\n\nexport const renderBodyClosures = (\n renderBody: RendererOrElementName | undefined,\n childScope: Scope,\n clean?: 1 | boolean,\n) => {\n const signals = renderBody?.___closureSignals;\n if (signals) {\n for (const signal of signals) {\n signal(childScope, clean);\n }\n }\n};\n\nexport const inMany = (\n scopes: Scope[],\n clean: 1 | boolean | undefined,\n signal: IntersectionSignal,\n) => {\n for (const scope of scopes) {\n signal(scope, clean);\n }\n};\n\nlet tagId = 0;\nexport function nextTagId() {\n return \"c\" + tagId++;\n}\n\nexport function inChild(childAccessor: Accessor, signal: ValueSignal) {\n return (scope: Scope, _: unknown, clean?: 1 | boolean) => {\n signal(scope[childAccessor] as Scope, _, clean);\n };\n}\n\nexport function intersections(\n signals: IntersectionSignal[],\n): IntersectionSignal {\n return (scope, clean) => {\n for (const signal of signals) {\n signal(scope, clean);\n }\n };\n}\n\nexport function values(signals: ValueSignal[]): ValueSignal {\n return (scope, _, clean) => {\n for (const signal of signals) {\n signal(scope, _, clean);\n }\n };\n}\n", "import { type Accessor, AccessorChar, type Scope } from \"../common/types\";\nimport { reconcile } from \"./reconcile\";\nimport {\n type Renderer,\n type RendererOrElementName,\n createScopeWithRenderer,\n} from \"./renderer\";\nimport {\n destroyScope,\n getEmptyScope,\n insertBefore,\n removeAndDestroyScope,\n} from \"./scope\";\nimport {\n type IntersectionSignal,\n type ValueSignal,\n renderBodyClosures,\n} from \"./signals\";\nimport type { ClientTemplate as Template } from \"./template\";\n\ntype LoopForEach = (\n value: unknown[],\n cb: (key: unknown, args: unknown[]) => void,\n) => void;\n\nexport function patchConditionals(\n fn: <T extends typeof conditional | typeof conditionalOnlyChild>(\n cond: T,\n ) => T,\n) {\n conditional = fn(conditional);\n conditionalOnlyChild = fn(conditionalOnlyChild);\n}\n\nexport let conditional = function conditional(\n nodeAccessor: Accessor,\n dynamicTagAttrs?: IntersectionSignal,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal,\n): ValueSignal<RendererOrElementName | undefined> {\n const rendererAccessor = nodeAccessor + AccessorChar.ConditionalRenderer;\n const childScopeAccessor = nodeAccessor + AccessorChar.ConditionalScope;\n return (scope, newRenderer, clean) => {\n newRenderer = newRenderer\n ? (newRenderer as any as Template)._ || newRenderer\n : undefined;\n let currentRenderer = scope[rendererAccessor] as\n | RendererOrElementName\n | undefined;\n if (!clean && !(clean = currentRenderer === newRenderer)) {\n currentRenderer = scope[rendererAccessor] = newRenderer;\n setConditionalRenderer(scope, nodeAccessor, newRenderer);\n dynamicTagAttrs?.(scope);\n } else {\n valueWithIntersection?.(scope, 0, clean);\n }\n intersection?.(scope, clean);\n renderBodyClosures(currentRenderer, scope[childScopeAccessor], clean);\n };\n};\n\n// TODO: remove this, use return from conditional instead\nexport function inConditionalScope<S extends Scope>(\n signal: IntersectionSignal,\n nodeAccessor: Accessor /* branch?: Renderer */,\n): IntersectionSignal {\n const scopeAccessor = nodeAccessor + AccessorChar.ConditionalScope;\n const rendererAccessor = nodeAccessor + AccessorChar.ConditionalRenderer;\n return (scope: Scope, clean?: boolean | 1) => {\n const conditionalScope = scope[scopeAccessor] as S;\n if (conditionalScope) {\n const conditionalRenderer = scope[rendererAccessor] as Renderer;\n if (\n !conditionalRenderer?.___closureSignals ||\n conditionalRenderer.___closureSignals.has(signal)\n ) {\n signal(conditionalScope, clean);\n }\n }\n };\n}\n\nexport function setConditionalRenderer<ChildScope extends Scope>(\n scope: Scope,\n nodeAccessor: Accessor,\n newRenderer: RendererOrElementName | undefined,\n) {\n let newScope: ChildScope;\n let prevScope = scope[\n nodeAccessor + AccessorChar.ConditionalScope\n ] as ChildScope;\n\n if (newRenderer) {\n newScope = scope[nodeAccessor + AccessorChar.ConditionalScope] =\n createScopeWithRenderer(newRenderer, scope.$global, scope) as ChildScope;\n prevScope = prevScope || getEmptyScope(scope[nodeAccessor] as Comment);\n } else {\n newScope = getEmptyScope(scope[nodeAccessor] as Comment) as ChildScope;\n scope[nodeAccessor + AccessorChar.ConditionalScope] = undefined;\n }\n\n insertBefore(\n newScope,\n prevScope.___startNode.parentNode!,\n prevScope.___startNode,\n );\n removeAndDestroyScope(prevScope);\n}\n\nexport let conditionalOnlyChild = function conditionalOnlyChild(\n nodeAccessor: Accessor,\n action?: ValueSignal<RendererOrElementName | undefined>,\n): ValueSignal<RendererOrElementName | undefined> {\n const rendererAccessor = nodeAccessor + AccessorChar.ConditionalRenderer;\n const childScopeAccessor = nodeAccessor + AccessorChar.ConditionalScope;\n return (scope, newRenderer, clean) => {\n let currentRenderer = scope[rendererAccessor] as\n | RendererOrElementName\n | undefined;\n if (!clean && currentRenderer !== newRenderer) {\n currentRenderer = scope[rendererAccessor] = newRenderer;\n setConditionalRendererOnlyChild(scope, nodeAccessor, newRenderer);\n }\n renderBodyClosures(currentRenderer, scope[childScopeAccessor], clean);\n action?.(scope, currentRenderer, clean);\n };\n};\n\nexport function setConditionalRendererOnlyChild(\n scope: Scope,\n nodeAccessor: Accessor,\n newRenderer: RendererOrElementName | undefined,\n) {\n const prevScope = scope[\n nodeAccessor + AccessorChar.ConditionalScope\n ] as Scope;\n const referenceNode = scope[nodeAccessor] as Element;\n referenceNode.textContent = \"\";\n\n if (newRenderer) {\n const newScope = (scope[nodeAccessor + AccessorChar.ConditionalScope] =\n createScopeWithRenderer(newRenderer, scope.$global, scope));\n insertBefore(newScope, referenceNode, null);\n }\n\n prevScope && destroyScope(prevScope);\n}\n\nconst emptyMarkerMap = /* @__PURE__ */ (() =>\n new Map().set(Symbol(\"empty\"), getEmptyScope(undefined as any)))();\nexport const emptyMarkerArray = [\n /* @__PURE__ */ getEmptyScope(undefined as any),\n];\nconst emptyMap = new Map();\nconst emptyArray = [] as Scope[];\n\nexport function loopOf(nodeAccessor: Accessor, renderer: Renderer) {\n return loop(nodeAccessor, renderer, (value, cb) => {\n const [all, getKey = keyBySecondArg] = value as typeof value &\n [all: unknown[], getKey?: (item: unknown, index: number) => unknown];\n let i = 0;\n for (const item of all) {\n cb(getKey(item, i), [item, i, all]);\n i++;\n }\n });\n}\n\nexport function loopIn(nodeAccessor: Accessor, renderer: Renderer) {\n return loop(nodeAccessor, renderer, (value, cb) => {\n const [all, getKey = keyByFirstArg] = value as typeof value &\n [\n all: Record<string, unknown>,\n getKey?: (key: string, v: unknown) => unknown,\n ];\n for (const key in all) {\n const v = all[key];\n cb(getKey(key, v), [key, v, all]);\n }\n });\n}\n\nexport function loopTo(nodeAccessor: Accessor, renderer: Renderer) {\n return loop(nodeAccessor, renderer, (value, cb) => {\n const [to, from = 0, step = 1, getKey = keyByFirstArg] = value as [\n to: number,\n from: number,\n step: number,\n getKey?: (v: number) => unknown,\n ];\n const steps = (to - from) / step;\n for (let i = 0; i <= steps; i++) {\n const v = from + i * step;\n cb(getKey(v), [v]);\n }\n });\n}\n\nfunction loop(\n nodeAccessor: Accessor,\n renderer: Renderer,\n forEach: LoopForEach,\n) {\n const loopScopeAccessor = nodeAccessor + AccessorChar.LoopScopeArray;\n const closureSignals = renderer.___closureSignals;\n const params = renderer.___args;\n return (\n scope: Scope,\n value: [unknown, (...args: unknown[]) => unknown],\n clean: boolean | 1,\n ) => {\n if (clean) {\n for (const childScope of scope[loopScopeAccessor]) {\n params?.(childScope, null, clean);\n for (const signal of closureSignals) {\n signal(childScope, clean);\n }\n }\n\n return;\n }\n\n const referenceNode = scope[nodeAccessor] as Element | Comment | Text;\n // TODO: compiler should use only comment so the text check can be removed\n const referenceIsMarker =\n referenceNode.nodeType === 8 /* Comment */ ||\n referenceNode.nodeType === 3; /* Text */\n const oldMap =\n (scope[nodeAccessor + AccessorChar.LoopScopeMap] as Map<\n unknown,\n Scope\n >) || (referenceIsMarker ? emptyMarkerMap : emptyMap);\n const oldArray =\n (scope[nodeAccessor + AccessorChar.LoopScopeArray] as Scope[]) ||\n Array.from(oldMap.values());\n\n let newMap!: Map<unknown, Scope>;\n let newArray!: Scope[];\n let afterReference: Node | null;\n let parentNode: Node & ParentNode;\n let needsReconciliation = true;\n\n forEach(value, (key, args) => {\n let childScope = oldMap.get(key);\n const isNew = !childScope;\n if (!childScope) {\n childScope = createScopeWithRenderer(renderer, scope.$global, scope);\n // TODO: once we can track moves\n // needsReconciliation = true;\n } else {\n // TODO: track if any childScope has changed index\n // needsReconciliation ||= oldArray[index] !== childScope;\n }\n if (params) {\n params(childScope, args);\n }\n if (closureSignals) {\n for (const signal of closureSignals) {\n signal(childScope, isNew);\n }\n }\n\n if (newMap) {\n newMap.set(key, childScope);\n newArray.push(childScope);\n } else {\n newMap = new Map([[key, childScope]]);\n newArray = [childScope];\n }\n });\n\n if (!newMap) {\n if (referenceIsMarker) {\n newMap = emptyMarkerMap;\n newArray = emptyMarkerArray;\n getEmptyScope(referenceNode as Comment);\n } else {\n // Fast path when loop is only child of parent\n if (renderer.___hasUserEffects) {\n for (let i = 0; i < oldArray.length; i++) {\n destroyScope(oldArray[i]);\n }\n }\n referenceNode.textContent = \"\";\n newMap = emptyMap;\n newArray = emptyArray;\n needsReconciliation = false;\n }\n }\n\n if (needsReconciliation) {\n if (referenceIsMarker) {\n if (oldMap === emptyMarkerMap) {\n getEmptyScope(referenceNode as Comment);\n }\n const oldLastChild = oldArray[oldArray.length - 1];\n afterReference = oldLastChild.___endNode.nextSibling;\n parentNode = oldLastChild.___startNode.parentNode!;\n } else {\n afterReference = null;\n parentNode = referenceNode as Element;\n }\n reconcile(parentNode, oldArray, newArray!, afterReference);\n }\n\n scope[nodeAccessor + AccessorChar.LoopScopeMap] = newMap;\n scope[nodeAccessor + AccessorChar.LoopScopeArray] = newArray;\n };\n}\n\n// TODO: remove this, use return from loop instead\nexport function inLoopScope(\n signal: IntersectionSignal,\n loopNodeAccessor: Accessor,\n) {\n const loopScopeAccessor = loopNodeAccessor + AccessorChar.LoopScopeArray;\n return (scope: Scope, clean?: boolean | 1) => {\n const loopScopes =\n scope[loopScopeAccessor] ??\n scope[loopNodeAccessor + AccessorChar.LoopScopeMap]?.values() ??\n [];\n for (const scope of loopScopes) {\n signal(scope, clean);\n }\n };\n}\n\nfunction keyBySecondArg(_item: unknown, index: unknown) {\n return index;\n}\n\nfunction keyByFirstArg(name: unknown) {\n return name;\n}\n", "type EventNames = keyof GlobalEventHandlersEventMap;\n\nconst elementHandlersByEvent = new Map<\n string,\n WeakMap<Element, undefined | ((...args: any[]) => void)>\n>();\nconst delegatedEventsByRoot = new WeakMap<Node, Set<string>>();\nconst eventOpts: AddEventListenerOptions = { capture: true };\n\nexport function on<\n T extends EventNames,\n H extends\n | false\n | null\n | undefined\n | ((ev: GlobalEventHandlersEventMap[T], target: Element) => void),\n>(element: Element, type: T, handler: H) {\n let handlersByElement = elementHandlersByEvent.get(type);\n\n if (!handlersByElement) {\n elementHandlersByEvent.set(type, (handlersByElement = new WeakMap()));\n }\n\n if (!handlersByElement.has(element)) {\n ensureDelegated(element, type);\n }\n\n handlersByElement.set(element, handler || undefined);\n}\n\nfunction ensureDelegated(node: Node, type: string) {\n const root = node.getRootNode();\n let delegatedEvents = delegatedEventsByRoot.get(root);\n\n if (!delegatedEvents) {\n delegatedEventsByRoot.set(root, (delegatedEvents = new Set()));\n }\n\n if (!delegatedEvents.has(type)) {\n delegatedEvents.add(type);\n root.addEventListener(type, handleDelegated, eventOpts);\n }\n}\n\nfunction handleDelegated(ev: GlobalEventHandlersEventMap[EventNames]) {\n let target = ev.target as Element | null;\n if (target) {\n const handlersByElement = elementHandlersByEvent.get(ev.type)!;\n handlersByElement.get(target)?.(ev, target);\n\n if (ev.bubbles) {\n while ((target = target.parentElement) && !ev.cancelBubble) {\n handlersByElement.get(target)?.(ev, target);\n }\n }\n }\n}\n", "import { ResumeSymbol, type Scope } from \"../common/types\";\nimport type { Renderer } from \"./renderer\";\nimport { bindFunction, bindRenderer } from \"./scope\";\nimport type { IntersectionSignal, ValueSignal } from \"./signals\";\n\ntype RegisteredFn<S extends Scope = Scope> = (scope: S) => void;\n\nconst registeredObjects = new Map<\n string,\n RegisteredFn | ValueSignal | Renderer\n>();\nconst doc = document;\n\nexport function register<T>(id: string, obj: T): T {\n registeredObjects.set(id, obj as any);\n return obj;\n}\n\nexport function getRegisteredWithScope(registryId: string, scope: Scope) {\n const obj = registeredObjects.get(registryId);\n if (!scope) {\n return obj;\n } else if ((obj as Renderer).___template) {\n return bindRenderer(scope, obj as Renderer);\n } else {\n return bindFunction(scope, obj as RegisteredFn);\n }\n}\n\nexport const scopeLookup = {} as Record<number | string, Scope>;\n\nexport function init(\n runtimeId = ResumeSymbol.DefaultRuntimeId /* [a-zA-Z0-9]+ */,\n) {\n const runtimeLength = runtimeId.length;\n const resumeVar = runtimeId + ResumeSymbol.VarResume;\n // TODO: check if this is a fakeArray\n // and warn in dev that there are conflicting runtime ids\n const initialHydration = (window as any)[resumeVar];\n const walker = doc.createTreeWalker(doc, 128 /** NodeFilter.SHOW_COMMENT */);\n\n let currentScopeId: number;\n let currentNode: Node & ChildNode;\n // const scopeLookup: Record<number, Scope> = {};\n const getScope = (id: number) =>\n scopeLookup[id] ?? (scopeLookup[id] = {} as Scope);\n const stack: number[] = [];\n const fakeArray = { push: resume };\n\n if (initialHydration) {\n for (let i = 0; i < initialHydration.length; i += 2) {\n resume(initialHydration[i], initialHydration[i + 1]);\n }\n } else {\n (window as any)[resumeVar] = fakeArray;\n }\n\n function resume(\n scopesFn:\n | null\n | ((\n b: typeof getRegisteredWithScope,\n s: typeof scopeLookup,\n ...rest: unknown[]\n ) => Record<string, Scope>),\n calls: Array<string | number>,\n ) {\n // TODO: Can be refactored/removed when adding runtimeId and componentIdPrefix\n /**\n * Necessary for injecting content into an existing document (e.g. microframe)\n */\n if (doc.readyState !== \"loading\") {\n walker.currentNode = doc;\n }\n\n if (scopesFn) {\n const scopes = scopesFn(getRegisteredWithScope, scopeLookup);\n scopeLookup.$global ||= scopes.$global || {};\n\n /**\n * Loop over all the new hydration scopes and see if a previous walk\n * had to create a dummy scope to store Nodes of interest.\n * If so merge them and set/replace the scope in the scopeLookup.\n */\n for (const scopeIdAsString in scopes) {\n if (scopeIdAsString === \"$global\") continue;\n const scopeId = parseInt(scopeIdAsString);\n const scope = scopes[scopeId];\n const storedScope = scopeLookup[scopeId];\n scope.$global = scopes.$global;\n if (storedScope !== scope) {\n scopeLookup[scopeId] = Object.assign(scope, storedScope) as Scope;\n }\n }\n }\n\n while ((currentNode = walker.nextNode() as ChildNode)) {\n const nodeValue = currentNode.nodeValue!;\n if (nodeValue.startsWith(runtimeId)) {\n const token = nodeValue[runtimeLength];\n const scopeId = parseInt(nodeValue.slice(runtimeLength + 1));\n const scope = getScope(scopeId);\n const data = nodeValue.slice(nodeValue.indexOf(\" \") + 1);\n\n if (token === ResumeSymbol.Node) {\n scope[data] = currentNode.previousSibling;\n } else if (token === ResumeSymbol.SectionStart) {\n stack.push(currentScopeId);\n currentScopeId = scopeId;\n scope.___startNode = currentNode;\n } else if (token === ResumeSymbol.SectionEnd) {\n scope[data] = currentNode;\n if (scopeId < currentScopeId) {\n const currScope = scopeLookup[currentScopeId];\n const currParent = currentNode.parentNode!;\n const startNode = currScope.___startNode as Node;\n if (currParent !== startNode.parentNode) {\n currParent.prepend(startNode);\n }\n currScope.___endNode = currentNode.previousSibling!;\n currentScopeId = stack.pop()!;\n }\n } else if (token === ResumeSymbol.SectionSingleNodesEnd) {\n scope[\n MARKO_DEBUG ? data.slice(0, data.indexOf(\" \")) : parseInt(data)\n ] = currentNode;\n // https://jsben.ch/dR7uk\n const childScopeIds = JSON.parse(\n \"[\" + data.slice(data.indexOf(\" \") + 1) + \"]\",\n );\n for (let i = childScopeIds.length - 1; i >= 0; i--) {\n const childScope = getScope(childScopeIds[i]);\n // TODO: consider whether the single node optimization\n // should only apply to elements which means could\n // use previousElementSibling instead of a while loop\n while (\n (currentNode = currentNode.previousSibling!).nodeType ===\n 8 /* Node.COMMENT_NODE */\n );\n // TODO: consider only setting ___startNode?\n childScope.___startNode = childScope.___endNode = currentNode;\n }\n }\n }\n }\n\n for (let i = 0; i < calls.length; i += 2) {\n (registeredObjects.get(calls[i + 1] as string) as RegisteredFn)(\n scopeLookup[calls[i] as number]!,\n );\n }\n }\n}\n\nexport function registerSubscriber(\n id: string,\n signal: IntersectionSignal,\n // ownerValueAccessor: string | number,\n // getOwnerScope = (scope: Scope) => scope._!\n) {\n register(id, signal.___subscribe!);\n return signal;\n\n // TODO: we need to handle the async case - DO NOT REMOVE UNTIL WE DO\n // const ownerMarkAccessor = ownerValueAccessor + AccessorChars.MARK;\n // const ownerSubscribersAccessor =\n // ownerValueAccessor + AccessorChars.SUBSCRIBERS;\n\n // register(id, (subscriberScope: Scope) => {\n // const ownerScope = getOwnerScope(subscriberScope);\n // const boundSignal = bindFunction(subscriberScope, signal);\n // const ownerMark = ownerScope[ownerMarkAccessor];\n // (ownerScope[ownerSubscribersAccessor] ??= new Set()).add(boundSignal);\n\n // // TODO: if the mark is not undefined, it means the value was updated clientside\n // // before this subscriber was flushed.\n // if (ownerMark === 0) {\n // // the value has finished updating\n // // we should trigger an update to `signal`\n // } else if (ownerMark >= 1) {\n // // the value is queued for update\n // // we should mark `signal` and let it be updated when the owner is updated\n // }\n // });\n}\n", "import { run } from \"./queue\";\n\nconst port2 = /* @__PURE__ */ (() => {\n const { port1, port2 } = new MessageChannel();\n port1.onmessage = () => {\n isScheduled = false;\n run();\n };\n return port2;\n})();\n\nexport let isScheduled: boolean;\n\nexport function schedule() {\n if (!isScheduled) {\n isScheduled = true;\n queueMicrotask(flushAndWaitFrame);\n }\n}\n\nfunction flushAndWaitFrame() {\n run();\n requestAnimationFrame(triggerMacroTask);\n}\n\nfunction triggerMacroTask() {\n port2.postMessage(0);\n}\n", "import type { Scope } from \"../common/types\";\nimport { schedule } from \"./schedule\";\nimport type { ValueSignal } from \"./signals\";\n\nconst enum BatchOffset {\n Scope = 0,\n Signal = 1,\n Value = 2,\n Total = 3,\n}\n\nconst enum EffectOffset {\n Scope = 0,\n Function = 1,\n Total = 2,\n}\n\ntype ExecFn<S extends Scope = Scope> = (scope: S, arg?: any) => void;\n\nlet currentBatch: unknown[] = [];\nlet currentEffects: unknown[] = [];\n\nexport function queueSource<T>(scope: Scope, signal: ValueSignal, value: T) {\n schedule();\n signal(scope, 0, 1);\n currentBatch.push(scope, signal, value);\n return value;\n}\n\nexport function queueEffect<S extends Scope, T extends ExecFn<S>>(\n scope: S,\n fn: T,\n) {\n currentEffects.push(scope, fn);\n}\n\nexport function run() {\n try {\n runBatch();\n } finally {\n currentBatch = [];\n }\n try {\n runEffects();\n } finally {\n currentEffects = [];\n }\n}\n\nexport function runSync(fn: () => void) {\n const prevBatch = currentBatch;\n const prevEffects = currentEffects;\n currentBatch = [];\n currentEffects = [];\n try {\n fn();\n runBatch();\n currentBatch = prevBatch;\n runEffects();\n } finally {\n currentBatch = prevBatch;\n currentEffects = prevEffects;\n }\n}\n\nexport function prepare(fn: () => void) {\n const prevBatch = currentBatch;\n const prevEffects = currentEffects;\n const preparedEffects = (currentEffects = []);\n currentBatch = [];\n try {\n fn();\n runBatch();\n } finally {\n currentBatch = prevBatch;\n currentEffects = prevEffects;\n }\n return preparedEffects;\n}\n\nexport function runEffects(effects: unknown[] = currentEffects) {\n for (let i = 0; i < effects.length; i += EffectOffset.Total) {\n const scope = effects[i] as Scope;\n const fn = effects[i + 1] as (scope: Scope) => void;\n fn(scope);\n }\n}\n\nfunction runBatch() {\n for (let i = 0; i < currentBatch.length; i += BatchOffset.Total) {\n const scope = currentBatch[i + BatchOffset.Scope] as Scope;\n const signal = currentBatch[i + BatchOffset.Signal] as ValueSignal;\n const value = currentBatch[i + BatchOffset.Value] as unknown;\n signal(scope, value);\n }\n}\n", "import type {\n Template,\n Input,\n TemplateInstance,\n Scope,\n RenderResult,\n} from \"../common/types\";\nimport { prepare, runEffects, runSync } from \"./queue\";\nimport { type Renderer, initRenderer } from \"./renderer\";\nimport { register } from \"./resume\";\nimport { createScope, removeAndDestroyScope } from \"./scope\";\n\nexport const createTemplate = (renderer: Renderer, templateId?: string) =>\n register(templateId!, new ClientTemplate(renderer));\n\nexport class ClientTemplate implements Template {\n public _: Renderer;\n\n constructor(renderer: Renderer) {\n this._ = renderer;\n }\n\n mount(\n templateInput: Input & { $global?: Record<string, unknown> } = {},\n reference: ParentNode & Node,\n position?: InsertPosition,\n ): TemplateInstance {\n let scope!: Scope, dom!: Node;\n const { $global = {}, ...input } = templateInput;\n const args = this._.___args;\n const effects = prepare(() => {\n scope = createScope($global);\n dom = initRenderer(this._, scope);\n if (args) {\n args(scope, [input]);\n }\n });\n\n /*\n <!-- beforebegin -->\n <reference>\n <!-- afterbegin -->\n foo\n <!-- beforeend -->\n </reference>\n <!-- afterend -->\n */\n\n switch (position) {\n case \"afterbegin\":\n reference.insertBefore(dom, reference.firstChild);\n break;\n case \"afterend\":\n reference.parentElement!.insertBefore(dom, reference.nextSibling);\n break;\n case \"beforebegin\":\n reference.parentElement!.insertBefore(dom, reference);\n break;\n default:\n reference.appendChild(dom);\n break;\n }\n\n runEffects(effects);\n\n return {\n update: (newInput: unknown) => {\n if (args) {\n runSync(() => {\n args(scope, null, 1);\n args(scope, [newInput]);\n });\n }\n },\n destroy: () => {\n removeAndDestroyScope(scope);\n },\n };\n }\n\n render(): RenderResult {\n throw new Error(\n `render() is not implemented for the DOM compilation of a Marko template`,\n );\n }\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../src/dom.ts", "../../src/dom/scope.ts", "../../src/dom/reconcile-longest-increasing-subsequence.ts", "../../src/common/helpers.ts", "../../src/dom/abort-signal.ts", "../../src/dom/dom.ts", "../../src/dom/walker.ts", "../../src/dom/renderer.ts", "../../src/dom/signals.ts", "../../src/dom/control-flow.ts", "../../src/dom/event.ts", "../../src/dom/resume.ts", "../../src/dom/schedule.ts", "../../src/dom/queue.ts", "../../src/dom/template.ts", "../../src/dom/compat.ts"],
4
+ "sourcesContent": ["export {\n conditional,\n conditionalOnlyChild,\n inConditionalScope,\n loopOf,\n loopIn,\n loopTo,\n inLoopScope,\n} from \"./dom/control-flow\";\n\nexport {\n data,\n html,\n attr,\n attrs,\n classAttr,\n styleAttr,\n props,\n lifecycle,\n} from \"./dom/dom\";\n\nexport { resetAbortSignal, getAbortSignal } from \"./dom/abort-signal\";\n\nexport { on } from \"./dom/event\";\n\nexport {\n init,\n register,\n registerSubscriber,\n getRegisteredWithScope,\n scopeLookup,\n} from \"./dom/resume\";\n\nexport {\n queueSource,\n queueEffect,\n run,\n prepare,\n runEffects,\n} from \"./dom/queue\";\n\nexport { write, bindFunction, bindRenderer, createScope } from \"./dom/scope\";\n\nexport type { Scope } from \"./common/types\";\n\nexport {\n createRenderer,\n dynamicTagAttrs,\n createScopeWithRenderer,\n} from \"./dom/renderer\";\n\nexport { createTemplate } from \"./dom/template\";\n\nexport {\n value,\n initValue,\n intersection,\n closure,\n dynamicClosure,\n dynamicSubscribers,\n childClosures,\n setTagVar,\n tagVarSignal,\n nextTagId,\n inChild,\n values,\n intersections,\n} from \"./dom/signals\";\n\nexport { compat } from \"./dom/compat\";\n", "import type { Scope } from \"../common/types\";\nimport type { Renderer } from \"./renderer\";\n\nlet debugID = 0;\n\nexport function createScope($global: Scope[\"$global\"]): Scope {\n const scope = {} as Scope;\n if (MARKO_DEBUG) {\n scope.___debugId = debugID++;\n }\n scope.___client = true;\n scope.$global = $global;\n return scope;\n}\n\nconst emptyScope = createScope({});\nexport function getEmptyScope(marker: Comment) {\n emptyScope.___startNode = emptyScope.___endNode = marker;\n return emptyScope;\n}\n\nexport function write<S extends Scope, K extends keyof S>(\n scope: S,\n localIndex: K,\n value: S[K],\n) {\n if (scope[localIndex] !== value) {\n scope[localIndex] = value;\n return 1;\n }\n return 0;\n}\n\nfunction binder<T, U = T>(bind: (scope: Scope, value: T) => U) {\n return (scope: Scope, value: T): U => {\n scope.___bound ??= new Map();\n let bound = scope.___bound.get(value) as U;\n if (!bound) {\n bound = bind(scope, value);\n scope.___bound.set(value, bound);\n }\n return bound;\n };\n}\n\nexport const bindRenderer = binder(\n (ownerScope, renderer: Renderer): Renderer =>\n renderer && {\n ...renderer,\n ___owner: ownerScope,\n },\n);\n\ntype BindableFunction = (\n this: unknown,\n scope: Scope,\n ...args: any[]\n) => unknown;\nexport const bindFunction = binder(\n <T extends BindableFunction>(boundScope: Scope, fn: T) =>\n fn.length\n ? function bound(this: unknown, ...args: any[]) {\n return fn.call(this, boundScope, ...args);\n }\n : function bound(this: unknown) {\n return fn.call(this, boundScope);\n },\n);\n\nexport function destroyScope(scope: Scope) {\n _destroyScope(scope);\n\n scope._?.___cleanup?.delete(scope);\n\n const closureSignals = scope.___renderer?.___closureSignals;\n if (closureSignals) {\n for (const signal of closureSignals) {\n signal.___unsubscribe?.(scope);\n }\n }\n return scope;\n}\n\nfunction _destroyScope(scope: Scope) {\n const cleanup = scope.___cleanup;\n if (cleanup) {\n for (const instance of cleanup) {\n _destroyScope(instance);\n }\n }\n\n const controllers = scope.___abortControllers;\n if (controllers) {\n for (const ctrl of controllers.values()) {\n ctrl.abort();\n }\n }\n}\n\nexport function onDestroy(scope: Scope) {\n let parentScope = scope._;\n while (parentScope && !parentScope.___cleanup?.has(scope)) {\n (parentScope.___cleanup ||= new Set()).add(scope);\n scope = parentScope;\n parentScope = scope._;\n }\n}\n\nexport function removeAndDestroyScope(scope: Scope) {\n destroyScope(scope);\n let current = scope.___startNode;\n const stop = scope.___endNode.nextSibling;\n while (current !== stop) {\n const next = current.nextSibling;\n current.remove();\n current = next!;\n }\n}\n\nexport function insertBefore(\n scope: Scope,\n parent: Node & ParentNode,\n nextSibling: Node | null,\n) {\n let current = scope.___startNode as Node;\n const stop = scope.___endNode.nextSibling;\n while (current !== stop) {\n const next = current.nextSibling;\n parent.insertBefore(current, nextSibling);\n current = next!;\n }\n}\n", "import type { Scope } from \"../common/types\";\nimport { insertBefore, removeAndDestroyScope } from \"./scope\";\n\nconst WRONG_POS = 2147483647;\n\nexport function reconcile(\n parent: Node & ParentNode,\n oldScopes: Scope[],\n newScopes: Scope[],\n afterReference: Node | null,\n): void {\n let oldStart = 0;\n let newStart = 0;\n let oldEnd = oldScopes.length - 1;\n let newEnd = newScopes.length - 1;\n let oldStartScope = oldScopes[oldStart];\n let newStartScope = newScopes[newStart];\n let oldEndScope = oldScopes[oldEnd];\n let newEndScope = newScopes[newEnd];\n let i: number;\n let j: number | undefined;\n let k: number;\n let nextSibling: Node | null;\n let oldScope: Scope | null;\n let newScope: Scope;\n\n // Step 1\n // tslint:disable-next-line: label-position\n outer: {\n // Skip nodes with the same key at the beginning.\n while (oldStartScope === newStartScope) {\n ++oldStart;\n ++newStart;\n if (oldStart > oldEnd || newStart > newEnd) {\n break outer;\n }\n oldStartScope = oldScopes[oldStart];\n newStartScope = newScopes[newStart];\n }\n\n // Skip nodes with the same key at the end.\n while (oldEndScope === newEndScope) {\n --oldEnd;\n --newEnd;\n if (oldStart > oldEnd || newStart > newEnd) {\n break outer;\n }\n oldEndScope = oldScopes[oldEnd];\n newEndScope = newScopes[newEnd];\n }\n }\n\n if (oldStart > oldEnd) {\n // All old nodes are in the correct place, insert the remaining new nodes.\n if (newStart <= newEnd) {\n k = newEnd + 1;\n nextSibling =\n k < newScopes.length ? newScopes[k].___startNode : afterReference;\n do {\n insertBefore(newScopes[newStart++], parent, nextSibling);\n } while (newStart <= newEnd);\n }\n } else if (newStart > newEnd) {\n // All new nodes are in the correct place, remove the remaining old nodes.\n do {\n removeAndDestroyScope(oldScopes[oldStart++]);\n } while (oldStart <= oldEnd);\n } else {\n // Step 2\n const oldLength = oldEnd - oldStart + 1;\n const newLength = newEnd - newStart + 1;\n\n const aNullable = oldScopes as Array<Scope | null>; // will be removed by js optimizing compilers.\n // Mark all nodes as inserted.\n const sources = new Array(newLength);\n for (i = 0; i < newLength; ++i) {\n sources[i] = -1;\n }\n\n // When pos === WRONG_POS, it means that one of the nodes in the wrong position.\n let pos = 0;\n let synced = 0;\n\n const keyIndex: Map<unknown, number> = new Map();\n for (j = newStart; j <= newEnd; ++j) {\n keyIndex.set(newScopes[j], j);\n }\n\n for (i = oldStart; i <= oldEnd && synced < newLength; ++i) {\n oldScope = oldScopes[i];\n j = keyIndex.get(oldScope);\n if (j !== undefined) {\n pos = pos > j ? WRONG_POS : j;\n ++synced;\n newScope = newScopes[j];\n sources[j - newStart] = i;\n aNullable[i] = null;\n }\n }\n\n if (oldLength === oldScopes.length && synced === 0) {\n // None of the newNodes already exist in the DOM\n // All newNodes need to be inserted\n for (; newStart < newLength; ++newStart) {\n insertBefore(newScopes[newStart], parent, afterReference);\n }\n // All oldNodes need to be removed\n for (; oldStart < oldLength; ++oldStart) {\n removeAndDestroyScope(oldScopes[oldStart]);\n }\n } else {\n i = oldLength - synced;\n while (i > 0) {\n oldScope = aNullable[oldStart++];\n if (oldScope !== null) {\n removeAndDestroyScope(oldScope);\n i--;\n }\n }\n\n // Step 3\n if (pos === WRONG_POS) {\n const seq = longestIncreasingSubsequence(sources);\n j = seq.length - 1;\n k = newScopes.length;\n for (i = newLength - 1; i >= 0; --i) {\n if (sources[i] === -1) {\n pos = i + newStart;\n newScope = newScopes[pos++];\n nextSibling =\n pos < k ? newScopes[pos].___startNode : afterReference;\n insertBefore(newScope, parent, nextSibling);\n } else {\n if (j < 0 || i !== seq[j]) {\n pos = i + newStart;\n newScope = newScopes[pos++];\n nextSibling =\n pos < k ? newScopes[pos].___startNode : afterReference;\n insertBefore(newScope, parent, nextSibling);\n } else {\n --j;\n }\n }\n }\n } else if (synced !== newLength) {\n k = newScopes.length;\n for (i = newLength - 1; i >= 0; --i) {\n if (sources[i] === -1) {\n pos = i + newStart;\n newScope = newScopes[pos++];\n nextSibling =\n pos < k ? newScopes[pos].___startNode : afterReference;\n insertBefore(newScope, parent, nextSibling);\n }\n }\n }\n }\n }\n}\n\nfunction longestIncreasingSubsequence(a: number[]): number[] {\n const p = a.slice();\n const result: number[] = [];\n result.push(0);\n let u: number;\n let v: number;\n\n for (let i = 0, il = a.length; i < il; ++i) {\n if (a[i] === -1) {\n continue;\n }\n\n const j = result[result.length - 1];\n if (a[j] < a[i]) {\n p[i] = j;\n result.push(i);\n continue;\n }\n\n u = 0;\n v = result.length - 1;\n\n while (u < v) {\n // tslint:disable-next-line:no-bitwise\n const c = ((u + v) / 2) | 0;\n if (a[result[c]] < a[i]) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n\n if (a[i] < a[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n\n u = result.length;\n v = result[u - 1];\n\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n\n return result;\n}\n", "export function classValue(value: unknown) {\n return toDelimitedString(value, \" \", stringifyClassObject);\n}\n\nfunction stringifyClassObject(name: string, value: unknown) {\n if (isVoid(value)) {\n return \"\";\n }\n\n return name;\n}\n\nexport function styleValue(value: unknown) {\n return toDelimitedString(value, \";\", stringifyStyleObject);\n}\n\nconst NON_DIMENSIONAL = /^(--|ta|or|li|z)|n-c|i(do|nk|m|t)|w$|we/;\nfunction stringifyStyleObject(name: string, value: unknown) {\n if (isVoid(value)) {\n return \"\";\n }\n\n if (typeof value === \"number\" && value && !NON_DIMENSIONAL.test(name)) {\n (value as unknown as string) += \"px\";\n }\n\n return `${name}:${value}`;\n}\n\nfunction toDelimitedString(\n val: unknown,\n delimiter: string,\n stringify: (n: string, v: unknown) => string | undefined,\n) {\n switch (typeof val) {\n case \"string\":\n return val;\n case \"object\":\n if (val !== null) {\n let result = \"\";\n let curDelimiter = \"\";\n\n if (Array.isArray(val)) {\n for (const v of val) {\n const part = toDelimitedString(v, delimiter, stringify);\n if (part !== \"\") {\n result += curDelimiter + part;\n curDelimiter = delimiter;\n }\n }\n } else {\n for (const name in val) {\n const v = (val as Record<string, unknown>)[name];\n const part = stringify(name, v);\n if (part !== \"\") {\n result += curDelimiter + part;\n curDelimiter = delimiter;\n }\n }\n }\n\n return result;\n }\n }\n\n return \"\";\n}\n\nexport function isVoid(value: unknown) {\n return value == null || value === false;\n}\n\nexport function alphaEncode(num: number): string {\n return num < 52\n ? String.fromCharCode(num < 26 ? num + 97 : num + (65 - 26))\n : alphaEncode((num / 52) | 0) + alphaEncode(num % 52);\n}\n", "import type { Scope } from \"../common/types\";\nimport { onDestroy } from \"./scope\";\n\nexport function resetAbortSignal(scope: Scope, id: string | number) {\n const controllers = scope.___abortControllers;\n if (controllers) {\n const ctrl = controllers.get(id);\n if (ctrl) {\n ctrl.abort();\n controllers.delete(id);\n }\n }\n}\n\nexport function getAbortSignal(scope: Scope, id: string | number) {\n const controllers = (scope.___abortControllers ??= new Map());\n let controller = controllers.get(id);\n if (!controller) {\n onDestroy(scope);\n controllers.set(id, (controller = new AbortController()));\n }\n\n return controller.signal;\n}\n", "import { classValue, styleValue } from \"../common/helpers\";\nimport {\n type Accessor,\n AccessorChar,\n NodeType,\n type Scope,\n} from \"../common/types\";\nimport { getAbortSignal } from \"./abort-signal\";\nimport { write } from \"./scope\";\n\nexport function isDocumentFragment(node: Node): node is DocumentFragment {\n return node.nodeType === NodeType.DocumentFragment;\n}\n\nexport function attr(element: Element, name: string, value: unknown) {\n const normalizedValue = normalizeAttrValue(value);\n if (normalizedValue === undefined) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, normalizedValue);\n }\n}\n\nexport function classAttr(element: Element, value: unknown) {\n attr(element, \"class\", classValue(value) || false);\n}\n\nexport function styleAttr(element: Element, value: unknown) {\n attr(element, \"style\", styleValue(value) || false);\n}\n\nexport function data(node: Text | Comment, value: unknown) {\n const normalizedValue = normalizeString(value);\n // TODO: benchmark if it is actually faster to check data first\n if (node.data !== normalizedValue) {\n node.data = normalizedValue;\n }\n}\n\nexport function attrs(\n scope: Scope,\n elementAccessor: Accessor,\n nextAttrs: Record<string, unknown>,\n) {\n const prevAttrs = scope[elementAccessor + AccessorChar.PreviousAttributes] as\n | typeof nextAttrs\n | undefined;\n const element = scope[elementAccessor] as Element;\n\n if (prevAttrs) {\n for (const name in prevAttrs) {\n if (!(nextAttrs && name in nextAttrs)) {\n element.removeAttribute(name);\n }\n }\n }\n // https://jsperf.com/object-keys-vs-for-in-with-closure/194\n for (const name in nextAttrs) {\n if (!(prevAttrs && nextAttrs[name] === prevAttrs[name])) {\n if (name === \"class\") {\n classAttr(element, nextAttrs[name]);\n } else if (name === \"style\") {\n styleAttr(element, nextAttrs[name]);\n } else if (name !== \"renderBody\") {\n attr(element, name, nextAttrs[name]);\n }\n }\n }\n\n scope[elementAccessor + AccessorChar.PreviousAttributes] = nextAttrs;\n}\n\nconst doc = document;\nconst parser = /* @__PURE__ */ doc.createElement(\"template\");\n\nexport function html(scope: Scope, value: unknown, index: Accessor) {\n const firstChild = scope[index] as Node & ChildNode;\n const lastChild = (scope[index + \"-\"] || firstChild) as Node & ChildNode;\n const parentNode = firstChild.parentNode!;\n const afterReference = lastChild.nextSibling;\n\n parser.innerHTML = value || value === 0 ? `${value}` : \"<!>\";\n const newContent = parser.content;\n write(scope, index, newContent.firstChild);\n write(scope, (index + \"-\") as any as number, newContent.lastChild);\n parentNode.insertBefore(newContent, firstChild);\n\n let current = firstChild;\n while (current !== afterReference) {\n const next = current.nextSibling;\n current.remove();\n current = next!;\n }\n}\n\nexport function props(scope: Scope, nodeIndex: number, index: number) {\n const nextProps = scope[index] as Record<string, unknown>;\n const prevProps = scope[index + \"-\"] as Record<string, unknown> | undefined;\n const node = scope[nodeIndex] as Node;\n\n if (prevProps) {\n for (const name in prevProps) {\n if (!(name in nextProps)) {\n (node as any)[name] = undefined;\n }\n }\n }\n // https://jsperf.com/object-keys-vs-for-in-with-closure/194\n for (const name in nextProps) {\n (node as any)[name] = nextProps[name];\n }\n\n scope[index + \"-\"] = nextProps;\n}\n\nfunction normalizeAttrValue(value: unknown) {\n if (value || value === 0) {\n return value === true ? \"\" : value + \"\";\n }\n}\n\nfunction normalizeString(value: unknown) {\n return value || value === 0 ? value + \"\" : \"\\u200d\";\n}\nexport function lifecycle(\n scope: Scope,\n index: string | number,\n thisObj: Record<string, unknown> & {\n onMount?: (this: unknown) => void;\n onUpdate?: (this: unknown) => void;\n onDestroy?: (this: unknown) => void;\n },\n) {\n const instance = scope[index] as typeof thisObj;\n if (instance) {\n Object.assign(instance, thisObj);\n instance.onUpdate?.();\n } else {\n scope[index] = thisObj;\n thisObj.onMount?.();\n getAbortSignal(\n scope,\n AccessorChar.LifecycleAbortController + index,\n ).onabort = () => thisObj.onDestroy?.();\n }\n}\n", "import { type Scope, NodeType, WalkCode, WalkRangeSize } from \"../common/types\";\nimport { createScope } from \"./scope\";\n\nexport const walker = /* @__PURE__ */ document.createTreeWalker(document);\n\n// Laws of the walks string:\n// - Always prefer Get to Before to After, Inside, or Replace\n// - Get must always be used to get a static node from clonable template if possible\n// - Replace must only be used to insert between two static text nodes\n// - Inside must only be used to insert into elements with no static children\n// - After must only be used to insert a last child or immediately following another action (if it makes the walks string smaller)\n// - Adjacent actions must always be in source order (Before* Get* Inside* After* || Before* Replace)\n// - When an element is both walked into and needs to insert After, you must walk in first (Next) and then walk Out before After\n// - Unless the inserted node is Text, Inside, After, & Replace must be followed by Out/Over to skip over unknown children\n// - Out must always be followed by After or Over\n// - Before must be done before walking into the node\n// - Next would walk back in the node we just walked Out of\n// - A component must assume the walker is on its first node, and include instructions for walking to its assumed nextSibling\n\nexport function trimWalkString(walkString: string): string {\n let end = walkString.length;\n while (walkString.charCodeAt(--end) > WalkCode.BeginChild);\n return walkString.slice(0, end + 1);\n}\n\nexport function walk(startNode: Node, walkCodes: string, scope: Scope) {\n walker.currentNode = startNode;\n walkInternal(walkCodes, scope, 0);\n walker.currentNode = document.documentElement;\n}\n\nfunction walkInternal(\n walkCodes: string,\n scope: Scope,\n currentWalkIndex: number,\n) {\n let value: number;\n let storedMultiplier = 0;\n let currentMultiplier = 0;\n let currentScopeIndex = 0;\n\n while ((value = walkCodes.charCodeAt(currentWalkIndex++))) {\n currentMultiplier = storedMultiplier;\n storedMultiplier = 0;\n if (value >= WalkCode.Multiplier) {\n storedMultiplier =\n currentMultiplier * WalkRangeSize.Multiplier +\n value -\n WalkCode.Multiplier;\n } else if (value >= WalkCode.Out) {\n value = WalkRangeSize.Out * currentMultiplier + value - WalkCode.Out;\n while (value--) {\n walker.parentNode();\n }\n walker.nextSibling();\n } else if (value >= WalkCode.Over) {\n value = WalkRangeSize.Over * currentMultiplier + value - WalkCode.Over;\n while (value--) {\n !walker.nextSibling() && !walker.nextNode();\n }\n } else if (value >= WalkCode.Next) {\n value = WalkRangeSize.Next * currentMultiplier + value - WalkCode.Next;\n while (value--) {\n walker.nextNode();\n }\n } else if (value === WalkCode.BeginChild) {\n currentWalkIndex = walkInternal(\n walkCodes,\n (scope[\n MARKO_DEBUG\n ? getDebugKey(currentScopeIndex++, \"#childScope\")\n : currentScopeIndex++\n ] = createScope(scope.$global)),\n currentWalkIndex,\n )!;\n } else if (value === WalkCode.EndChild) {\n return currentWalkIndex;\n } else if (value === WalkCode.Get) {\n scope[\n MARKO_DEBUG\n ? getDebugKey(currentScopeIndex++, walker.currentNode)\n : currentScopeIndex++\n ] = walker.currentNode;\n } else {\n const newNode = (scope[\n MARKO_DEBUG\n ? getDebugKey(currentScopeIndex++, \"#text\")\n : currentScopeIndex++\n ] = document.createTextNode(\"\"));\n const current = walker.currentNode;\n const parentNode = current.parentNode!;\n\n if (value === WalkCode.Before) {\n parentNode.insertBefore(newNode, current);\n } else {\n if (value === WalkCode.After) {\n parentNode.insertBefore(newNode, current.nextSibling);\n } else {\n if (MARKO_DEBUG && value !== WalkCode.Replace) {\n throw new Error(`Unknown walk code: ${value}`);\n }\n parentNode.replaceChild(newNode, current);\n }\n\n walker.currentNode = newNode;\n }\n } /* else {\n if (MARKO_DEBUG && value !== WalkCodes.Replace) {\n throw new Error(`Unknown walk code: ${value}`);\n }\n const current = walker.currentNode;\n current.parentNode!.replaceChild(walker.currentNode = scope[currentScopeIndex++] = document.createTextNode(\"\"), current);\n } */\n }\n\n return currentWalkIndex;\n}\n\nfunction getDebugKey(index: number, node: Node | string) {\n if (typeof node === \"string\") {\n return `${node}/${index}`;\n } else if (node.nodeType === NodeType.Text) {\n return `#text/${index}`;\n } else if (node.nodeType === NodeType.Comment) {\n return `#comment/${index}`;\n } else if (node.nodeType === NodeType.Element) {\n return `#${(node as Element).tagName.toLowerCase()}/${index}`;\n }\n\n return index;\n}\n", "import {\n type Accessor,\n AccessorChar,\n NodeType,\n WalkCode,\n type Scope,\n} from \"../common/types\";\nimport { setConditionalRendererOnlyChild } from \"./control-flow\";\nimport { attrs } from \"./dom\";\nimport { bindRenderer, createScope } from \"./scope\";\nimport type { IntersectionSignal, ValueSignal } from \"./signals\";\nimport { trimWalkString, walk } from \"./walker\";\n\nexport type Renderer = {\n ___template: string;\n ___walks: string | undefined;\n ___setup: SetupFn | undefined;\n ___closureSignals: Set<IntersectionSignal>;\n ___clone: () => Node;\n ___hasUserEffects: 0 | 1;\n ___sourceNode: Node | undefined;\n ___args: ValueSignal | undefined;\n ___owner: Scope | undefined;\n};\n\nexport type RendererOrElementName =\n | Renderer\n | (string & Record<keyof Renderer, undefined>);\n\ntype SetupFn = (scope: Scope) => void;\n\nexport function createScopeWithRenderer(\n renderer: RendererOrElementName,\n $global: Scope[\"___global\"],\n ownerScope?: Scope,\n) {\n const newScope = createScope($global);\n newScope._ = renderer.___owner || ownerScope;\n newScope.___renderer = renderer as Renderer;\n initRenderer(renderer, newScope);\n if (renderer.___closureSignals) {\n for (const signal of renderer.___closureSignals) {\n signal.___subscribe?.(newScope);\n }\n }\n return newScope;\n}\n\nexport function initRenderer(renderer: RendererOrElementName, scope: Scope) {\n const dom =\n typeof renderer === \"string\"\n ? document.createElement(renderer)\n : renderer.___clone();\n walk(\n dom.nodeType === NodeType.DocumentFragment ? dom.firstChild! : dom,\n renderer.___walks ?? \" \",\n scope,\n );\n scope.___startNode =\n dom.nodeType === NodeType.DocumentFragment\n ? dom.firstChild!\n : (dom as ChildNode);\n scope.___endNode =\n dom.nodeType === NodeType.DocumentFragment\n ? dom.lastChild!\n : (dom as ChildNode);\n if (renderer.___setup) {\n renderer.___setup(scope);\n }\n return dom;\n}\n\nexport function dynamicTagAttrs(\n nodeAccessor: Accessor,\n renderBody?: Renderer,\n inputIsArgs?: boolean,\n) {\n return (\n scope: Scope,\n getAttrs: () => Record<string, unknown>,\n clean?: boolean | 1,\n ) => {\n const renderer = scope[\n nodeAccessor + AccessorChar.ConditionalRenderer\n ] as Renderer;\n\n if (!renderer || renderer === renderBody || (clean && !renderer.___args)) {\n return;\n }\n\n const childScope = scope[nodeAccessor + AccessorChar.ConditionalScope];\n if (typeof renderer === \"string\") {\n // This will always be 0 because in dynamicRenderer we used WalkCodes.Get\n const elementAccessor = MARKO_DEBUG ? `#${renderer}/0` : 0;\n attrs(childScope, elementAccessor, getAttrs());\n setConditionalRendererOnlyChild(\n childScope,\n elementAccessor,\n renderBody && bindRenderer(scope, renderBody),\n );\n } else if (renderer.___args) {\n if (clean) {\n renderer.___args(childScope, null as any, clean);\n } else {\n const attributes = getAttrs();\n renderer.___args(\n childScope,\n inputIsArgs\n ? attributes\n : [\n renderBody\n ? {\n ...attributes,\n renderBody: bindRenderer(scope, renderBody),\n }\n : attributes,\n ],\n clean,\n );\n }\n }\n };\n}\n\nexport function createRenderer(\n template: string,\n walks?: string,\n setup?: SetupFn,\n closureSignals?: IntersectionSignal[],\n hasUserEffects: 0 | 1 = 0,\n args?: ValueSignal,\n): Renderer {\n return {\n ___template: template,\n ___walks: walks && /* @__PURE__ */ trimWalkString(walks),\n ___setup: setup,\n ___clone: _clone,\n ___closureSignals: new Set(closureSignals),\n ___hasUserEffects: hasUserEffects,\n ___sourceNode: undefined,\n ___args: args,\n ___owner: undefined,\n };\n}\n\nfunction _clone(this: Renderer) {\n let sourceNode: Node | null | undefined = this.___sourceNode;\n if (!sourceNode) {\n if (MARKO_DEBUG && this.___template === undefined) {\n throw new Error(\n \"The renderer does not have a template to clone: \" +\n JSON.stringify(this),\n );\n }\n const walks = this.___walks;\n // TODO: there's probably a better way to determine if nodes will be inserted before/after the parsed content\n // and therefore we need to put it in a document fragment, even though only a single node results from the parse\n const ensureFragment =\n walks &&\n walks.length < 4 &&\n walks.charCodeAt(walks.length - 1) !== WalkCode.Get;\n this.___sourceNode = sourceNode = parse(\n this.___template,\n ensureFragment as boolean,\n );\n }\n return sourceNode.cloneNode(true);\n}\n\nconst doc = document;\nconst parser = /* @__PURE__ */ doc.createElement(\"template\");\n\nfunction parse(template: string, ensureFragment?: boolean) {\n let node: Node | null;\n parser.innerHTML = template;\n const content = parser.content;\n\n if (\n ensureFragment ||\n (node = content.firstChild) !== content.lastChild ||\n (node && node.nodeType === NodeType.Comment)\n ) {\n node = doc.createDocumentFragment();\n node.appendChild(content);\n } else if (!node) {\n node = doc.createTextNode(\"\");\n }\n\n return node as Node & { firstChild: ChildNode; lastChild: ChildNode };\n}\n", "import { type Accessor, AccessorChar, type Scope } from \"../common/types\";\nimport type { RendererOrElementName } from \"./renderer\";\nimport { bindFunction } from \"./scope\";\n\nexport type Signal = ValueSignal | IntersectionSignal;\n\nexport type ValueSignal<T = unknown> = (\n scope: Scope,\n value: T,\n clean?: 1 | boolean,\n) => void;\n\nexport type BoundValueSignal<T = unknown> = (\n value: T,\n clean?: 1 | boolean,\n) => void;\n\nexport type IntersectionSignal = ((\n scope: Scope,\n clean?: 1 | boolean,\n) => void) & {\n ___subscribe?(scope: Scope): void;\n ___unsubscribe?(scope: Scope): void;\n};\n\nexport type BoundIntersectionSignal = ((clean?: 1 | boolean) => void) & {\n ___subscribe?(scope: Scope): void;\n ___unsubscribe?(scope: Scope): void;\n};\n\nexport function initValue<T>(\n valueAccessor: Accessor,\n fn: ValueSignal<T>,\n): ValueSignal<T> {\n const markAccessor = valueAccessor + AccessorChar.Mark;\n return (scope, nextValue, clean) => {\n if (clean !== 1 && scope[markAccessor] === undefined) {\n fn(scope, nextValue, clean);\n }\n };\n}\n\nexport function value<T>(\n valueAccessor: Accessor,\n render?: ValueSignal<T>,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal<any>,\n): ValueSignal<T> {\n const markAccessor = valueAccessor + AccessorChar.Mark;\n return (scope, nextValue, clean) => {\n let creation: boolean | undefined;\n let currentMark: number;\n\n if (clean === 1) {\n currentMark = scope[markAccessor] = (scope[markAccessor] ?? 0) + 1;\n } else {\n creation = scope[markAccessor] === undefined;\n currentMark = scope[markAccessor] ||= 1;\n }\n\n if (currentMark === 1) {\n if (\n clean !== 1 &&\n (creation || !(clean ||= scope[valueAccessor] === nextValue))\n ) {\n scope[valueAccessor] = nextValue;\n render?.(scope, nextValue);\n } else {\n valueWithIntersection?.(scope, 0, clean);\n }\n intersection?.(scope, clean);\n }\n\n // closure needs this to be called after the fn\n // so it is marked until all downstream have been called\n if (clean !== 1) {\n scope[markAccessor]--;\n }\n };\n}\n\nlet accessorId = 0;\n\nexport function intersection(\n count: number,\n fn: IntersectionSignal,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal,\n): IntersectionSignal {\n const cleanAccessor = AccessorChar.Dynamic + accessorId++;\n const markAccessor = cleanAccessor + AccessorChar.Mark;\n return (scope, clean) => {\n let currentMark;\n if (clean === 1) {\n currentMark = scope[markAccessor] = (scope[markAccessor] ?? 0) + 1;\n } else {\n if (scope[markAccessor] === undefined) {\n scope[markAccessor] = count - 1;\n clean = undefined;\n } else {\n currentMark = scope[markAccessor]--;\n clean = scope[cleanAccessor] &&= clean;\n }\n }\n if (currentMark === 1) {\n if (clean) {\n valueWithIntersection?.(scope, 0, clean);\n } else {\n scope[cleanAccessor] = true;\n fn(scope, clean);\n }\n intersection?.(scope, clean);\n }\n };\n}\n\nconst defaultGetOwnerScope = (scope: Scope) => scope._!;\n\nexport function closure<T>(\n ownerValueAccessor: Accessor | ((scope: Scope) => Accessor),\n fn: ValueSignal<T>,\n _getOwnerScope?: (scope: Scope) => Scope,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal<any>,\n): IntersectionSignal {\n const cleanAccessor = AccessorChar.Dynamic + accessorId++;\n const markAccessor = cleanAccessor + 1;\n const getOwnerScope = _getOwnerScope || defaultGetOwnerScope;\n const getOwnerValueAccessor =\n typeof ownerValueAccessor === \"function\"\n ? ownerValueAccessor\n : () => ownerValueAccessor as Accessor;\n return (scope, clean) => {\n let ownerScope, ownerValueAccessor, currentMark;\n if (clean === 1) {\n currentMark = scope[markAccessor] = (scope[markAccessor] ?? 0) + 1;\n } else {\n if (scope[markAccessor] === undefined) {\n ownerScope = getOwnerScope(scope);\n ownerValueAccessor = getOwnerValueAccessor(scope);\n const ownerMark = ownerScope[ownerValueAccessor + AccessorChar.Mark];\n const ownerHasRun =\n ownerMark === undefined ? !ownerScope.___client : ownerMark === 0;\n scope[markAccessor] = (currentMark = ownerHasRun ? 1 : 2) - 1;\n clean = undefined;\n } else {\n currentMark = scope[markAccessor]--;\n clean = scope[cleanAccessor] &&= clean;\n }\n }\n if (currentMark === 1) {\n if (clean) {\n valueWithIntersection?.(scope, 0, clean);\n } else {\n scope[cleanAccessor] = false;\n ownerScope ??= getOwnerScope(scope);\n ownerValueAccessor ??= getOwnerValueAccessor(scope);\n fn?.(scope, ownerScope[ownerValueAccessor]);\n }\n intersection?.(scope, clean);\n }\n };\n}\n\nexport function dynamicClosure<T>(\n ownerValueAccessor: Accessor | ((scope: Scope) => Accessor),\n fn: ValueSignal<T>,\n _getOwnerScope?: (scope: Scope) => Scope,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal,\n): IntersectionSignal {\n const getOwnerScope = _getOwnerScope || defaultGetOwnerScope;\n const getOwnerValueAccessor =\n typeof ownerValueAccessor === \"function\"\n ? ownerValueAccessor\n : () => ownerValueAccessor as string;\n const signalFn = closure(\n getOwnerValueAccessor,\n fn,\n getOwnerScope,\n intersection,\n valueWithIntersection,\n );\n return Object.assign(signalFn, {\n ___subscribe(scope: Scope) {\n const ownerScope = getOwnerScope(scope);\n const providerSubscriptionsAccessor =\n getOwnerValueAccessor(scope) + AccessorChar.Subscribers;\n ownerScope[providerSubscriptionsAccessor] ??= new Set();\n ownerScope[providerSubscriptionsAccessor].add(\n bindFunction(scope, signalFn as any),\n );\n },\n ___unsubscribe(scope: Scope) {\n const ownerScope = getOwnerScope(scope);\n const providerSubscriptionsAccessor =\n getOwnerValueAccessor(scope) + AccessorChar.Subscribers;\n ownerScope[providerSubscriptionsAccessor]?.delete(\n bindFunction(scope, signalFn as any),\n );\n },\n });\n}\n\nexport function childClosures(\n closureSignals: IntersectionSignal[],\n childAccessor: Accessor,\n) {\n const signal = (scope: Scope, clean?: boolean | 1) => {\n const childScope = scope[childAccessor] as Scope;\n for (const closureSignal of closureSignals) {\n closureSignal(childScope, clean);\n }\n };\n return Object.assign(signal, {\n ___subscribe(scope: Scope) {\n const childScope = scope[childAccessor] as Scope;\n for (const closureSignal of closureSignals) {\n closureSignal.___subscribe?.(childScope);\n }\n },\n ___unsubscribe(scope: Scope) {\n const childScope = scope[childAccessor] as Scope;\n for (const closureSignal of closureSignals) {\n closureSignal.___unsubscribe?.(childScope);\n }\n },\n });\n}\n\nexport function dynamicSubscribers(valueAccessor: Accessor) {\n const subscribersAccessor = valueAccessor + AccessorChar.Subscribers;\n return (scope: Scope, clean?: boolean | 1) => {\n const subscribers = scope[\n subscribersAccessor\n ] as Set<BoundIntersectionSignal>;\n if (subscribers) {\n for (const subscriber of subscribers) {\n subscriber(clean);\n }\n }\n };\n}\n\nexport function setTagVar(\n scope: Scope,\n childAccessor: Accessor,\n tagVarSignal: ValueSignal,\n) {\n scope[childAccessor][AccessorChar.TagVariable] = bindFunction(\n scope,\n tagVarSignal as any,\n ) as BoundValueSignal;\n}\n\nexport const tagVarSignal = (\n scope: Scope,\n value: unknown,\n clean?: boolean | 1,\n) => scope[AccessorChar.TagVariable]?.(value, clean);\n\nexport const renderBodyClosures = (\n renderBody: RendererOrElementName | undefined,\n childScope: Scope,\n clean?: 1 | boolean,\n) => {\n const signals = renderBody?.___closureSignals;\n if (signals) {\n for (const signal of signals) {\n signal(childScope, clean);\n }\n }\n};\n\nexport const inMany = (\n scopes: Scope[],\n clean: 1 | boolean | undefined,\n signal: IntersectionSignal,\n) => {\n for (const scope of scopes) {\n signal(scope, clean);\n }\n};\n\nlet tagId = 0;\nexport function nextTagId() {\n return \"c\" + tagId++;\n}\n\nexport function inChild(childAccessor: Accessor, signal: ValueSignal) {\n return (scope: Scope, _: unknown, clean?: 1 | boolean) => {\n signal(scope[childAccessor] as Scope, _, clean);\n };\n}\n\nexport function intersections(\n signals: IntersectionSignal[],\n): IntersectionSignal {\n return (scope, clean) => {\n for (const signal of signals) {\n signal(scope, clean);\n }\n };\n}\n\nexport function values(signals: ValueSignal[]): ValueSignal {\n return (scope, _, clean) => {\n for (const signal of signals) {\n signal(scope, _, clean);\n }\n };\n}\n", "import { type Accessor, AccessorChar, type Scope } from \"../common/types\";\nimport { reconcile } from \"./reconcile\";\nimport {\n type Renderer,\n type RendererOrElementName,\n createScopeWithRenderer,\n} from \"./renderer\";\nimport {\n destroyScope,\n getEmptyScope,\n insertBefore,\n removeAndDestroyScope,\n} from \"./scope\";\nimport {\n type IntersectionSignal,\n type ValueSignal,\n renderBodyClosures,\n} from \"./signals\";\nimport type { ClientTemplate as Template } from \"./template\";\n\ntype LoopForEach = (\n value: unknown[],\n cb: (key: unknown, args: unknown[]) => void,\n) => void;\n\nexport function patchConditionals(\n fn: <T extends typeof conditional | typeof conditionalOnlyChild>(\n cond: T,\n ) => T,\n) {\n conditional = fn(conditional);\n conditionalOnlyChild = fn(conditionalOnlyChild);\n}\n\nexport let conditional = function conditional(\n nodeAccessor: Accessor,\n dynamicTagAttrs?: IntersectionSignal,\n intersection?: IntersectionSignal,\n valueWithIntersection?: ValueSignal,\n): ValueSignal<RendererOrElementName | undefined> {\n const rendererAccessor = nodeAccessor + AccessorChar.ConditionalRenderer;\n const childScopeAccessor = nodeAccessor + AccessorChar.ConditionalScope;\n return (scope, newRenderer, clean) => {\n newRenderer = newRenderer\n ? (newRenderer as any as Template)._ || newRenderer\n : undefined;\n let currentRenderer = scope[rendererAccessor] as\n | RendererOrElementName\n | undefined;\n if (!clean && !(clean = currentRenderer === newRenderer)) {\n currentRenderer = scope[rendererAccessor] = newRenderer;\n setConditionalRenderer(scope, nodeAccessor, newRenderer);\n dynamicTagAttrs?.(scope);\n } else {\n valueWithIntersection?.(scope, 0, clean);\n }\n intersection?.(scope, clean);\n renderBodyClosures(currentRenderer, scope[childScopeAccessor], clean);\n };\n};\n\n// TODO: remove this, use return from conditional instead\nexport function inConditionalScope<S extends Scope>(\n signal: IntersectionSignal,\n nodeAccessor: Accessor /* branch?: Renderer */,\n): IntersectionSignal {\n const scopeAccessor = nodeAccessor + AccessorChar.ConditionalScope;\n const rendererAccessor = nodeAccessor + AccessorChar.ConditionalRenderer;\n return (scope: Scope, clean?: boolean | 1) => {\n const conditionalScope = scope[scopeAccessor] as S;\n if (conditionalScope) {\n const conditionalRenderer = scope[rendererAccessor] as Renderer;\n if (\n !conditionalRenderer?.___closureSignals ||\n conditionalRenderer.___closureSignals.has(signal)\n ) {\n signal(conditionalScope, clean);\n }\n }\n };\n}\n\nexport function setConditionalRenderer<ChildScope extends Scope>(\n scope: Scope,\n nodeAccessor: Accessor,\n newRenderer: RendererOrElementName | undefined,\n) {\n let newScope: ChildScope;\n let prevScope = scope[\n nodeAccessor + AccessorChar.ConditionalScope\n ] as ChildScope;\n\n if (newRenderer) {\n newScope = scope[nodeAccessor + AccessorChar.ConditionalScope] =\n createScopeWithRenderer(newRenderer, scope.$global, scope) as ChildScope;\n prevScope = prevScope || getEmptyScope(scope[nodeAccessor] as Comment);\n } else {\n newScope = getEmptyScope(scope[nodeAccessor] as Comment) as ChildScope;\n scope[nodeAccessor + AccessorChar.ConditionalScope] = undefined;\n }\n\n insertBefore(\n newScope,\n prevScope.___startNode.parentNode!,\n prevScope.___startNode,\n );\n removeAndDestroyScope(prevScope);\n}\n\nexport let conditionalOnlyChild = function conditionalOnlyChild(\n nodeAccessor: Accessor,\n action?: ValueSignal<RendererOrElementName | undefined>,\n): ValueSignal<RendererOrElementName | undefined> {\n const rendererAccessor = nodeAccessor + AccessorChar.ConditionalRenderer;\n const childScopeAccessor = nodeAccessor + AccessorChar.ConditionalScope;\n return (scope, newRenderer, clean) => {\n let currentRenderer = scope[rendererAccessor] as\n | RendererOrElementName\n | undefined;\n if (!clean && currentRenderer !== newRenderer) {\n currentRenderer = scope[rendererAccessor] = newRenderer;\n setConditionalRendererOnlyChild(scope, nodeAccessor, newRenderer);\n }\n renderBodyClosures(currentRenderer, scope[childScopeAccessor], clean);\n action?.(scope, currentRenderer, clean);\n };\n};\n\nexport function setConditionalRendererOnlyChild(\n scope: Scope,\n nodeAccessor: Accessor,\n newRenderer: RendererOrElementName | undefined,\n) {\n const prevScope = scope[\n nodeAccessor + AccessorChar.ConditionalScope\n ] as Scope;\n const referenceNode = scope[nodeAccessor] as Element;\n referenceNode.textContent = \"\";\n\n if (newRenderer) {\n const newScope = (scope[nodeAccessor + AccessorChar.ConditionalScope] =\n createScopeWithRenderer(newRenderer, scope.$global, scope));\n insertBefore(newScope, referenceNode, null);\n }\n\n prevScope && destroyScope(prevScope);\n}\n\nconst emptyMarkerMap = /* @__PURE__ */ (() =>\n new Map().set(Symbol(\"empty\"), getEmptyScope(undefined as any)))();\nexport const emptyMarkerArray = [\n /* @__PURE__ */ getEmptyScope(undefined as any),\n];\nconst emptyMap = new Map();\nconst emptyArray = [] as Scope[];\n\nexport function loopOf(nodeAccessor: Accessor, renderer: Renderer) {\n return loop(nodeAccessor, renderer, (value, cb) => {\n const [all, getKey = keyBySecondArg] = value as typeof value &\n [all: unknown[], getKey?: (item: unknown, index: number) => unknown];\n let i = 0;\n for (const item of all) {\n cb(getKey(item, i), [item, i, all]);\n i++;\n }\n });\n}\n\nexport function loopIn(nodeAccessor: Accessor, renderer: Renderer) {\n return loop(nodeAccessor, renderer, (value, cb) => {\n const [all, getKey = keyByFirstArg] = value as typeof value &\n [\n all: Record<string, unknown>,\n getKey?: (key: string, v: unknown) => unknown,\n ];\n for (const key in all) {\n const v = all[key];\n cb(getKey(key, v), [key, v, all]);\n }\n });\n}\n\nexport function loopTo(nodeAccessor: Accessor, renderer: Renderer) {\n return loop(nodeAccessor, renderer, (value, cb) => {\n const [to, from = 0, step = 1, getKey = keyByFirstArg] = value as [\n to: number,\n from: number,\n step: number,\n getKey?: (v: number) => unknown,\n ];\n const steps = (to - from) / step;\n for (let i = 0; i <= steps; i++) {\n const v = from + i * step;\n cb(getKey(v), [v]);\n }\n });\n}\n\nfunction loop(\n nodeAccessor: Accessor,\n renderer: Renderer,\n forEach: LoopForEach,\n) {\n const loopScopeAccessor = nodeAccessor + AccessorChar.LoopScopeArray;\n const closureSignals = renderer.___closureSignals;\n const params = renderer.___args;\n return (\n scope: Scope,\n value: [unknown, (...args: unknown[]) => unknown],\n clean: boolean | 1,\n ) => {\n if (clean) {\n for (const childScope of scope[loopScopeAccessor]) {\n params?.(childScope, null, clean);\n for (const signal of closureSignals) {\n signal(childScope, clean);\n }\n }\n\n return;\n }\n\n const referenceNode = scope[nodeAccessor] as Element | Comment | Text;\n // TODO: compiler should use only comment so the text check can be removed\n const referenceIsMarker =\n referenceNode.nodeType === 8 /* Comment */ ||\n referenceNode.nodeType === 3; /* Text */\n const oldMap =\n (scope[nodeAccessor + AccessorChar.LoopScopeMap] as Map<\n unknown,\n Scope\n >) || (referenceIsMarker ? emptyMarkerMap : emptyMap);\n const oldArray =\n (scope[nodeAccessor + AccessorChar.LoopScopeArray] as Scope[]) ||\n Array.from(oldMap.values());\n\n let newMap!: Map<unknown, Scope>;\n let newArray!: Scope[];\n let afterReference: Node | null;\n let parentNode: Node & ParentNode;\n let needsReconciliation = true;\n\n forEach(value, (key, args) => {\n let childScope = oldMap.get(key);\n const isNew = !childScope;\n if (!childScope) {\n childScope = createScopeWithRenderer(renderer, scope.$global, scope);\n // TODO: once we can track moves\n // needsReconciliation = true;\n } else {\n // TODO: track if any childScope has changed index\n // needsReconciliation ||= oldArray[index] !== childScope;\n }\n if (params) {\n params(childScope, args);\n }\n if (closureSignals) {\n for (const signal of closureSignals) {\n signal(childScope, isNew);\n }\n }\n\n if (newMap) {\n newMap.set(key, childScope);\n newArray.push(childScope);\n } else {\n newMap = new Map([[key, childScope]]);\n newArray = [childScope];\n }\n });\n\n if (!newMap) {\n if (referenceIsMarker) {\n newMap = emptyMarkerMap;\n newArray = emptyMarkerArray;\n getEmptyScope(referenceNode as Comment);\n } else {\n // Fast path when loop is only child of parent\n if (renderer.___hasUserEffects) {\n for (let i = 0; i < oldArray.length; i++) {\n destroyScope(oldArray[i]);\n }\n }\n referenceNode.textContent = \"\";\n newMap = emptyMap;\n newArray = emptyArray;\n needsReconciliation = false;\n }\n }\n\n if (needsReconciliation) {\n if (referenceIsMarker) {\n if (oldMap === emptyMarkerMap) {\n getEmptyScope(referenceNode as Comment);\n }\n const oldLastChild = oldArray[oldArray.length - 1];\n afterReference = oldLastChild.___endNode.nextSibling;\n parentNode = oldLastChild.___startNode.parentNode!;\n } else {\n afterReference = null;\n parentNode = referenceNode as Element;\n }\n reconcile(parentNode, oldArray, newArray!, afterReference);\n }\n\n scope[nodeAccessor + AccessorChar.LoopScopeMap] = newMap;\n scope[nodeAccessor + AccessorChar.LoopScopeArray] = newArray;\n };\n}\n\n// TODO: remove this, use return from loop instead\nexport function inLoopScope(\n signal: IntersectionSignal,\n loopNodeAccessor: Accessor,\n) {\n const loopScopeAccessor = loopNodeAccessor + AccessorChar.LoopScopeArray;\n return (scope: Scope, clean?: boolean | 1) => {\n const loopScopes =\n scope[loopScopeAccessor] ??\n scope[loopNodeAccessor + AccessorChar.LoopScopeMap]?.values() ??\n [];\n for (const scope of loopScopes) {\n signal(scope, clean);\n }\n };\n}\n\nfunction keyBySecondArg(_item: unknown, index: unknown) {\n return index;\n}\n\nfunction keyByFirstArg(name: unknown) {\n return name;\n}\n", "type EventNames = keyof GlobalEventHandlersEventMap;\n\nconst elementHandlersByEvent = new Map<\n string,\n WeakMap<Element, undefined | ((...args: any[]) => void)>\n>();\nconst delegatedEventsByRoot = new WeakMap<Node, Set<string>>();\nconst eventOpts: AddEventListenerOptions = { capture: true };\n\nexport function on<\n T extends EventNames,\n H extends\n | false\n | null\n | undefined\n | ((ev: GlobalEventHandlersEventMap[T], target: Element) => void),\n>(element: Element, type: T, handler: H) {\n let handlersByElement = elementHandlersByEvent.get(type);\n\n if (!handlersByElement) {\n elementHandlersByEvent.set(type, (handlersByElement = new WeakMap()));\n }\n\n if (!handlersByElement.has(element)) {\n ensureDelegated(element, type);\n }\n\n handlersByElement.set(element, handler || undefined);\n}\n\nfunction ensureDelegated(node: Node, type: string) {\n const root = node.getRootNode();\n let delegatedEvents = delegatedEventsByRoot.get(root);\n\n if (!delegatedEvents) {\n delegatedEventsByRoot.set(root, (delegatedEvents = new Set()));\n }\n\n if (!delegatedEvents.has(type)) {\n delegatedEvents.add(type);\n root.addEventListener(type, handleDelegated, eventOpts);\n }\n}\n\nfunction handleDelegated(ev: GlobalEventHandlersEventMap[EventNames]) {\n let target = ev.target as Element | null;\n if (target) {\n const handlersByElement = elementHandlersByEvent.get(ev.type)!;\n handlersByElement.get(target)?.(ev, target);\n\n if (ev.bubbles) {\n while ((target = target.parentElement) && !ev.cancelBubble) {\n handlersByElement.get(target)?.(ev, target);\n }\n }\n }\n}\n", "import { ResumeSymbol, type Scope } from \"../common/types\";\nimport type { Renderer } from \"./renderer\";\nimport { bindFunction, bindRenderer } from \"./scope\";\nimport type { IntersectionSignal, ValueSignal } from \"./signals\";\n\ntype RegisteredFn<S extends Scope = Scope> = (scope: S) => void;\n\nconst registeredObjects = new Map<\n string,\n RegisteredFn | ValueSignal | Renderer\n>();\nconst doc = document;\n\nexport function register<T>(id: string, obj: T): T {\n registeredObjects.set(id, obj as any);\n return obj;\n}\n\nexport function getRegisteredWithScope(registryId: string, scope: Scope) {\n const obj = registeredObjects.get(registryId);\n if (!scope) {\n return obj;\n } else if ((obj as Renderer).___template) {\n return bindRenderer(scope, obj as Renderer);\n } else {\n return bindFunction(scope, obj as RegisteredFn);\n }\n}\n\nexport const scopeLookup = {} as Record<number | string, Scope>;\n\nexport function init(\n runtimeId = ResumeSymbol.DefaultRuntimeId /* [a-zA-Z0-9]+ */,\n) {\n const runtimeLength = runtimeId.length;\n const resumeVar = runtimeId + ResumeSymbol.VarResume;\n // TODO: check if this is a fakeArray\n // and warn in dev that there are conflicting runtime ids\n const initialHydration = (window as any)[resumeVar];\n const walker = doc.createTreeWalker(doc, 128 /** NodeFilter.SHOW_COMMENT */);\n\n let currentScopeId: number;\n let currentNode: Node & ChildNode;\n // const scopeLookup: Record<number, Scope> = {};\n const getScope = (id: number) =>\n scopeLookup[id] ?? (scopeLookup[id] = {} as Scope);\n const stack: number[] = [];\n const fakeArray = { push: resume };\n\n if (initialHydration) {\n for (let i = 0; i < initialHydration.length; i += 2) {\n resume(initialHydration[i], initialHydration[i + 1]);\n }\n } else {\n (window as any)[resumeVar] = fakeArray;\n }\n\n function resume(\n scopesFn:\n | null\n | ((\n b: typeof getRegisteredWithScope,\n s: typeof scopeLookup,\n ...rest: unknown[]\n ) => Record<string, Scope>),\n calls: Array<string | number>,\n ) {\n // TODO: Can be refactored/removed when adding runtimeId and componentIdPrefix\n /**\n * Necessary for injecting content into an existing document (e.g. microframe)\n */\n if (doc.readyState !== \"loading\") {\n walker.currentNode = doc;\n }\n\n if (scopesFn) {\n const scopes = scopesFn(getRegisteredWithScope, scopeLookup);\n scopeLookup.$global ||= scopes.$global || {};\n\n /**\n * Loop over all the new hydration scopes and see if a previous walk\n * had to create a dummy scope to store Nodes of interest.\n * If so merge them and set/replace the scope in the scopeLookup.\n */\n for (const scopeIdAsString in scopes) {\n if (scopeIdAsString === \"$global\") continue;\n const scopeId = parseInt(scopeIdAsString);\n const scope = scopes[scopeId];\n const storedScope = scopeLookup[scopeId];\n scope.$global = scopes.$global;\n if (storedScope !== scope) {\n scopeLookup[scopeId] = Object.assign(scope, storedScope) as Scope;\n }\n }\n }\n\n while ((currentNode = walker.nextNode() as ChildNode)) {\n const nodeValue = currentNode.nodeValue!;\n if (nodeValue.startsWith(runtimeId)) {\n const token = nodeValue[runtimeLength];\n const scopeId = parseInt(nodeValue.slice(runtimeLength + 1));\n const scope = getScope(scopeId);\n const data = nodeValue.slice(nodeValue.indexOf(\" \") + 1);\n\n if (token === ResumeSymbol.Node) {\n scope[data] = currentNode.previousSibling;\n } else if (token === ResumeSymbol.SectionStart) {\n stack.push(currentScopeId);\n currentScopeId = scopeId;\n scope.___startNode = currentNode;\n } else if (token === ResumeSymbol.SectionEnd) {\n scope[data] = currentNode;\n if (scopeId < currentScopeId) {\n const currScope = scopeLookup[currentScopeId];\n const currParent = currentNode.parentNode!;\n const startNode = currScope.___startNode as Node;\n if (currParent !== startNode.parentNode) {\n currParent.prepend(startNode);\n }\n currScope.___endNode = currentNode.previousSibling!;\n currentScopeId = stack.pop()!;\n }\n } else if (token === ResumeSymbol.SectionSingleNodesEnd) {\n scope[\n MARKO_DEBUG ? data.slice(0, data.indexOf(\" \")) : parseInt(data)\n ] = currentNode;\n // https://jsben.ch/dR7uk\n const childScopeIds = JSON.parse(\n \"[\" + data.slice(data.indexOf(\" \") + 1) + \"]\",\n );\n for (let i = childScopeIds.length - 1; i >= 0; i--) {\n const childScope = getScope(childScopeIds[i]);\n // TODO: consider whether the single node optimization\n // should only apply to elements which means could\n // use previousElementSibling instead of a while loop\n while (\n (currentNode = currentNode.previousSibling!).nodeType ===\n 8 /* Node.COMMENT_NODE */\n );\n // TODO: consider only setting ___startNode?\n childScope.___startNode = childScope.___endNode = currentNode;\n }\n }\n }\n }\n\n for (let i = 0; i < calls.length; i += 2) {\n (registeredObjects.get(calls[i + 1] as string) as RegisteredFn)(\n scopeLookup[calls[i] as number]!,\n );\n }\n }\n}\n\nexport function registerSubscriber(\n id: string,\n signal: IntersectionSignal,\n // ownerValueAccessor: string | number,\n // getOwnerScope = (scope: Scope) => scope._!\n) {\n register(id, signal.___subscribe!);\n return signal;\n\n // TODO: we need to handle the async case - DO NOT REMOVE UNTIL WE DO\n // const ownerMarkAccessor = ownerValueAccessor + AccessorChars.MARK;\n // const ownerSubscribersAccessor =\n // ownerValueAccessor + AccessorChars.SUBSCRIBERS;\n\n // register(id, (subscriberScope: Scope) => {\n // const ownerScope = getOwnerScope(subscriberScope);\n // const boundSignal = bindFunction(subscriberScope, signal);\n // const ownerMark = ownerScope[ownerMarkAccessor];\n // (ownerScope[ownerSubscribersAccessor] ??= new Set()).add(boundSignal);\n\n // // TODO: if the mark is not undefined, it means the value was updated clientside\n // // before this subscriber was flushed.\n // if (ownerMark === 0) {\n // // the value has finished updating\n // // we should trigger an update to `signal`\n // } else if (ownerMark >= 1) {\n // // the value is queued for update\n // // we should mark `signal` and let it be updated when the owner is updated\n // }\n // });\n}\n", "import { run } from \"./queue\";\n\nconst port2 = /* @__PURE__ */ (() => {\n const { port1, port2 } = new MessageChannel();\n port1.onmessage = () => {\n isScheduled = false;\n run();\n };\n return port2;\n})();\n\nexport let isScheduled: boolean;\n\nexport function schedule() {\n if (!isScheduled) {\n isScheduled = true;\n queueMicrotask(flushAndWaitFrame);\n }\n}\n\nfunction flushAndWaitFrame() {\n run();\n requestAnimationFrame(triggerMacroTask);\n}\n\nfunction triggerMacroTask() {\n port2.postMessage(0);\n}\n", "import type { Scope } from \"../common/types\";\nimport { schedule } from \"./schedule\";\nimport type { ValueSignal } from \"./signals\";\n\nconst enum BatchOffset {\n Scope = 0,\n Signal = 1,\n Value = 2,\n Total = 3,\n}\n\nconst enum EffectOffset {\n Scope = 0,\n Function = 1,\n Total = 2,\n}\n\ntype ExecFn<S extends Scope = Scope> = (scope: S, arg?: any) => void;\n\nlet currentBatch: unknown[] = [];\nlet currentEffects: unknown[] = [];\n\nexport function queueSource<T>(scope: Scope, signal: ValueSignal, value: T) {\n schedule();\n signal(scope, 0, 1);\n currentBatch.push(scope, signal, value);\n return value;\n}\n\nexport function queueEffect<S extends Scope, T extends ExecFn<S>>(\n scope: S,\n fn: T,\n) {\n currentEffects.push(scope, fn);\n}\n\nexport function run() {\n try {\n runBatch();\n } finally {\n currentBatch = [];\n }\n try {\n runEffects();\n } finally {\n currentEffects = [];\n }\n}\n\nexport function runSync(fn: () => void) {\n const prevBatch = currentBatch;\n const prevEffects = currentEffects;\n currentBatch = [];\n currentEffects = [];\n try {\n fn();\n runBatch();\n currentBatch = prevBatch;\n runEffects();\n } finally {\n currentBatch = prevBatch;\n currentEffects = prevEffects;\n }\n}\n\nexport function prepare(fn: () => void) {\n const prevBatch = currentBatch;\n const prevEffects = currentEffects;\n const preparedEffects = (currentEffects = []);\n currentBatch = [];\n try {\n fn();\n runBatch();\n } finally {\n currentBatch = prevBatch;\n currentEffects = prevEffects;\n }\n return preparedEffects;\n}\n\nexport function runEffects(effects: unknown[] = currentEffects) {\n for (let i = 0; i < effects.length; i += EffectOffset.Total) {\n const scope = effects[i] as Scope;\n const fn = effects[i + 1] as (scope: Scope) => void;\n fn(scope);\n }\n}\n\nfunction runBatch() {\n for (let i = 0; i < currentBatch.length; i += BatchOffset.Total) {\n const scope = currentBatch[i + BatchOffset.Scope] as Scope;\n const signal = currentBatch[i + BatchOffset.Signal] as ValueSignal;\n const value = currentBatch[i + BatchOffset.Value] as unknown;\n signal(scope, value);\n }\n}\n", "import type {\n Template,\n Input,\n TemplateInstance,\n Scope,\n RenderResult,\n} from \"../common/types\";\nimport { prepare, runEffects, runSync } from \"./queue\";\nimport { type Renderer, initRenderer } from \"./renderer\";\nimport { register } from \"./resume\";\nimport { createScope, removeAndDestroyScope } from \"./scope\";\n\nexport const createTemplate = (renderer: Renderer, templateId?: string) =>\n register(templateId!, new ClientTemplate(renderer));\n\nexport class ClientTemplate implements Template {\n public _: Renderer;\n\n constructor(renderer: Renderer) {\n this._ = renderer;\n }\n\n mount(\n templateInput: Input & { $global?: Record<string, unknown> } = {},\n reference: ParentNode & Node,\n position?: InsertPosition,\n ): TemplateInstance {\n let scope!: Scope, dom!: Node;\n const { $global = {}, ...input } = templateInput;\n const args = this._.___args;\n const effects = prepare(() => {\n scope = createScope($global);\n dom = initRenderer(this._, scope);\n if (args) {\n args(scope, [input]);\n }\n });\n\n /*\n <!-- beforebegin -->\n <reference>\n <!-- afterbegin -->\n foo\n <!-- beforeend -->\n </reference>\n <!-- afterend -->\n */\n\n switch (position) {\n case \"afterbegin\":\n reference.insertBefore(dom, reference.firstChild);\n break;\n case \"afterend\":\n reference.parentElement!.insertBefore(dom, reference.nextSibling);\n break;\n case \"beforebegin\":\n reference.parentElement!.insertBefore(dom, reference);\n break;\n default:\n reference.appendChild(dom);\n break;\n }\n\n runEffects(effects);\n\n return {\n update: (newInput: unknown) => {\n if (args) {\n runSync(() => {\n args(scope, null, 1);\n args(scope, [newInput]);\n });\n }\n },\n destroy: () => {\n removeAndDestroyScope(scope);\n },\n };\n }\n\n render(): RenderResult {\n throw new Error(\n `render() is not implemented for the DOM compilation of a Marko template`,\n );\n }\n}\n", "import { patchConditionals } from \"./control-flow\";\nimport { prepare, queueEffect, runEffects } from \"./queue\";\nimport {\n createRenderer,\n createScopeWithRenderer,\n type Renderer,\n} from \"./renderer\";\nimport { getRegisteredWithScope, register, scopeLookup } from \"./resume\";\n\nexport const compat = {\n register,\n patchConditionals,\n queueEffect,\n isRenderer(renderer: any) {\n return renderer.___clone !== undefined;\n },\n getStartNode(scope: any) {\n return scope.___startNode;\n },\n setScopeNodes(scope: any, startNode: Node, endNode: Node) {\n scope.___startNode = startNode;\n scope.___endNode = endNode;\n },\n runComponentEffects(this: any) {\n runEffects(this.effects);\n },\n resolveRenderer(renderer: any) {\n if (renderer && typeof renderer === \"object\") {\n if (Array.isArray(renderer)) {\n const [registerId, scopeId] = renderer;\n const scope = scopeLookup[scopeId];\n return getRegisteredWithScope(registerId, scope);\n }\n\n if (renderer.___clone) {\n return renderer;\n }\n }\n },\n createRenderer(\n setup: Renderer[\"___setup\"],\n clone: Renderer[\"___clone\"],\n args: Renderer[\"___args\"],\n ) {\n const renderer = createRenderer(\"\", undefined, setup, undefined, 1, args);\n renderer.___clone = clone;\n return renderer;\n },\n render(\n isHydrate: boolean,\n out: any,\n component: any,\n renderer: Renderer,\n input: any,\n ) {\n const args = renderer.___args || noop;\n let existing = false;\n let scope: any = isHydrate\n ? (component.scope =\n scopeLookup[(out.global.componentIdToScopeId as any)[component.id]])\n : component.scope;\n\n component.effects = prepare(() => {\n if (!scope) {\n scope = component.scope = createScopeWithRenderer(renderer, out.global);\n const closures = renderer.___closureSignals;\n if (closures) {\n for (const signal of closures) {\n signal(component.scope, true);\n }\n }\n } else {\n args(scope, input, 1);\n existing = true;\n }\n args(scope, input);\n });\n\n if (!existing) {\n return scope.___startNode === scope.___endNode\n ? scope.___startNode\n : scope.___startNode.parentNode;\n }\n },\n};\n\nfunction noop() {}\n"],
5
+ "mappings": "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",
6
6
  "names": ["value", "value", "value", "value", "doc", "parser", "intersection", "ownerValueAccessor", "tagVarSignal", "value", "conditional", "dynamicTagAttrs", "intersection", "conditionalOnlyChild", "value", "scope", "doc", "walker", "data", "port2", "value"]
7
7
  }
@@ -1333,6 +1333,68 @@ var ClientTemplate = class {
1333
1333
  );
1334
1334
  }
1335
1335
  };
1336
+
1337
+ // src/dom/compat.ts
1338
+ var compat = {
1339
+ register,
1340
+ patchConditionals,
1341
+ queueEffect,
1342
+ isRenderer(renderer) {
1343
+ return renderer.___clone !== void 0;
1344
+ },
1345
+ getStartNode(scope) {
1346
+ return scope.___startNode;
1347
+ },
1348
+ setScopeNodes(scope, startNode, endNode) {
1349
+ scope.___startNode = startNode;
1350
+ scope.___endNode = endNode;
1351
+ },
1352
+ runComponentEffects() {
1353
+ runEffects(this.effects);
1354
+ },
1355
+ resolveRenderer(renderer) {
1356
+ if (renderer && typeof renderer === "object") {
1357
+ if (Array.isArray(renderer)) {
1358
+ const [registerId, scopeId] = renderer;
1359
+ const scope = scopeLookup[scopeId];
1360
+ return getRegisteredWithScope(registerId, scope);
1361
+ }
1362
+ if (renderer.___clone) {
1363
+ return renderer;
1364
+ }
1365
+ }
1366
+ },
1367
+ createRenderer(setup, clone, args) {
1368
+ const renderer = createRenderer("", void 0, setup, void 0, 1, args);
1369
+ renderer.___clone = clone;
1370
+ return renderer;
1371
+ },
1372
+ render(isHydrate, out, component, renderer, input) {
1373
+ const args = renderer.___args || noop;
1374
+ let existing = false;
1375
+ let scope = isHydrate ? component.scope = scopeLookup[out.global.componentIdToScopeId[component.id]] : component.scope;
1376
+ component.effects = prepare(() => {
1377
+ if (!scope) {
1378
+ scope = component.scope = createScopeWithRenderer(renderer, out.global);
1379
+ const closures = renderer.___closureSignals;
1380
+ if (closures) {
1381
+ for (const signal of closures) {
1382
+ signal(component.scope, true);
1383
+ }
1384
+ }
1385
+ } else {
1386
+ args(scope, input, 1);
1387
+ existing = true;
1388
+ }
1389
+ args(scope, input);
1390
+ });
1391
+ if (!existing) {
1392
+ return scope.___startNode === scope.___endNode ? scope.___startNode : scope.___startNode.parentNode;
1393
+ }
1394
+ }
1395
+ };
1396
+ function noop() {
1397
+ }
1336
1398
  export {
1337
1399
  attr,
1338
1400
  attrs,
@@ -1341,6 +1403,7 @@ export {
1341
1403
  childClosures,
1342
1404
  classAttr,
1343
1405
  closure,
1406
+ compat,
1344
1407
  conditional,
1345
1408
  conditionalOnlyChild,
1346
1409
  createRenderer,
@@ -1367,7 +1430,6 @@ export {
1367
1430
  loopTo,
1368
1431
  nextTagId,
1369
1432
  on,
1370
- patchConditionals,
1371
1433
  prepare,
1372
1434
  props,
1373
1435
  queueEffect,