@meekojs/meeko 0.0.4 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +21 -19
  2. package/dist/autoimports-ts.d.ts +4 -4
  3. package/dist/autoimports-ts.js +86 -30
  4. package/dist/autoimports-ts.js.map +1 -1
  5. package/dist/autoimports.d.ts +2 -2
  6. package/dist/autoimports.js +23 -7
  7. package/dist/autoimports.js.map +1 -1
  8. package/dist/check.js +39 -10
  9. package/dist/check.js.map +1 -1
  10. package/dist/cli.js +37 -4
  11. package/dist/cli.js.map +1 -1
  12. package/dist/compiler/events.d.ts +2 -0
  13. package/dist/compiler/events.js +6 -0
  14. package/dist/compiler/events.js.map +1 -0
  15. package/dist/compiler/props.d.ts +12 -0
  16. package/dist/compiler/props.js +32 -0
  17. package/dist/compiler/props.js.map +1 -0
  18. package/dist/compiler.js +55 -12
  19. package/dist/compiler.js.map +1 -1
  20. package/dist/component-errors.d.ts +18 -0
  21. package/dist/component-errors.js +65 -0
  22. package/dist/component-errors.js.map +1 -0
  23. package/dist/devtools.js +2 -4
  24. package/dist/devtools.js.map +1 -1
  25. package/dist/dom.d.ts +11 -5
  26. package/dist/dom.js +288 -88
  27. package/dist/dom.js.map +1 -1
  28. package/dist/error-observer.d.ts +6 -0
  29. package/dist/error-observer.js +41 -0
  30. package/dist/error-observer.js.map +1 -0
  31. package/dist/framework/check-app.js +160 -5
  32. package/dist/framework/check-app.js.map +1 -1
  33. package/dist/framework/check-project.d.ts +4 -0
  34. package/dist/framework/check-project.js +42 -0
  35. package/dist/framework/check-project.js.map +1 -0
  36. package/dist/framework/client.d.ts +3 -0
  37. package/dist/framework/client.js +136 -33
  38. package/dist/framework/client.js.map +1 -1
  39. package/dist/framework/clients.js +12 -4
  40. package/dist/framework/clients.js.map +1 -1
  41. package/dist/framework/contracts-generate.js +66 -3
  42. package/dist/framework/contracts-generate.js.map +1 -1
  43. package/dist/framework/init.js +21 -200
  44. package/dist/framework/init.js.map +1 -1
  45. package/dist/framework/middleware.d.ts +14 -0
  46. package/dist/framework/middleware.js +16 -0
  47. package/dist/framework/middleware.js.map +1 -0
  48. package/dist/framework/page-contracts-check.d.ts +8 -0
  49. package/dist/framework/page-contracts-check.js +110 -0
  50. package/dist/framework/page-contracts-check.js.map +1 -0
  51. package/dist/framework/page-contracts-generate.d.ts +2 -0
  52. package/dist/framework/page-contracts-generate.js +94 -0
  53. package/dist/framework/page-contracts-generate.js.map +1 -0
  54. package/dist/framework/page.d.ts +7 -3
  55. package/dist/framework/page.js +3 -1
  56. package/dist/framework/page.js.map +1 -1
  57. package/dist/framework/prerender.js +11 -5
  58. package/dist/framework/prerender.js.map +1 -1
  59. package/dist/framework/project-templates.d.ts +3 -0
  60. package/dist/framework/project-templates.js +119 -0
  61. package/dist/framework/project-templates.js.map +1 -0
  62. package/dist/framework/project.d.ts +9 -0
  63. package/dist/framework/project.js +272 -0
  64. package/dist/framework/project.js.map +1 -0
  65. package/dist/framework/router.d.ts +3 -1
  66. package/dist/framework/router.js +94 -8
  67. package/dist/framework/router.js.map +1 -1
  68. package/dist/framework/server.d.ts +17 -3
  69. package/dist/framework/server.js +71 -24
  70. package/dist/framework/server.js.map +1 -1
  71. package/dist/framework/socket-contracts-generate.js +8 -5
  72. package/dist/framework/socket-contracts-generate.js.map +1 -1
  73. package/dist/framework/socket.d.ts +2 -0
  74. package/dist/framework/socket.js +119 -17
  75. package/dist/framework/socket.js.map +1 -1
  76. package/dist/framework/standard-schema-types.d.ts +7 -0
  77. package/dist/framework/standard-schema-types.js +69 -0
  78. package/dist/framework/standard-schema-types.js.map +1 -0
  79. package/dist/framework/state.d.ts +7 -0
  80. package/dist/framework/state.js +78 -14
  81. package/dist/framework/state.js.map +1 -1
  82. package/dist/framework/styles.d.ts +2 -0
  83. package/dist/framework/styles.js +6 -0
  84. package/dist/framework/styles.js.map +1 -0
  85. package/dist/framework/type-declarations.d.ts +5 -0
  86. package/dist/framework/type-declarations.js +84 -0
  87. package/dist/framework/type-declarations.js.map +1 -0
  88. package/dist/framework-server/contracts.d.ts +11 -2
  89. package/dist/framework-server/contracts.js +62 -7
  90. package/dist/framework-server/contracts.js.map +1 -1
  91. package/dist/framework-server/discovery.d.ts +4 -1
  92. package/dist/framework-server/discovery.js +21 -16
  93. package/dist/framework-server/discovery.js.map +1 -1
  94. package/dist/framework-server/local.d.ts +2 -0
  95. package/dist/framework-server/local.js +5 -3
  96. package/dist/framework-server/local.js.map +1 -1
  97. package/dist/framework-server/middleware.d.ts +4 -0
  98. package/dist/framework-server/middleware.js +56 -0
  99. package/dist/framework-server/middleware.js.map +1 -0
  100. package/dist/framework-server/node-upgrade.js +27 -9
  101. package/dist/framework-server/node-upgrade.js.map +1 -1
  102. package/dist/framework-server/node-websocket.js +4 -2
  103. package/dist/framework-server/node-websocket.js.map +1 -1
  104. package/dist/framework-server/session-stores.d.ts +9 -2
  105. package/dist/framework-server/session-stores.js +37 -11
  106. package/dist/framework-server/session-stores.js.map +1 -1
  107. package/dist/framework-server/sessions.d.ts +6 -0
  108. package/dist/framework-server/sessions.js +41 -10
  109. package/dist/framework-server/sessions.js.map +1 -1
  110. package/dist/framework-server/socket.js +62 -27
  111. package/dist/framework-server/socket.js.map +1 -1
  112. package/dist/framework-server.d.ts +2 -0
  113. package/dist/framework-server.js +1 -0
  114. package/dist/framework-server.js.map +1 -1
  115. package/dist/framework.d.ts +3 -1
  116. package/dist/framework.js +1 -0
  117. package/dist/framework.js.map +1 -1
  118. package/dist/hmr.js +74 -24
  119. package/dist/hmr.js.map +1 -1
  120. package/dist/index.d.ts +2 -0
  121. package/dist/index.js +1 -0
  122. package/dist/index.js.map +1 -1
  123. package/dist/init.js +27 -1
  124. package/dist/init.js.map +1 -1
  125. package/dist/internal.d.ts +2 -2
  126. package/dist/internal.js +2 -2
  127. package/dist/internal.js.map +1 -1
  128. package/dist/node.d.ts +5 -1
  129. package/dist/node.js +80 -10
  130. package/dist/node.js.map +1 -1
  131. package/dist/reactivity.d.ts +12 -3
  132. package/dist/reactivity.js +94 -17
  133. package/dist/reactivity.js.map +1 -1
  134. package/dist/types.d.ts +2 -0
  135. package/dist/types.js +3 -1
  136. package/dist/types.js.map +1 -1
  137. package/dist/vite.js +29 -9
  138. package/dist/vite.js.map +1 -1
  139. package/package.json +2 -2
package/dist/dom.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRoot, effect, signal } from \"./reactivity.js\";\nimport type { EffectSource, Signal } from \"./reactivity.js\";\nimport { attributeValue, serializeJson } from \"./server.js\";\n\n/** Fragmento de DOM que pertenece a una instancia o a una región dinámica. */\nexport interface DomScope {\n root: Element;\n start?: Comment;\n end?: Comment;\n}\n\n/** Contrato de un módulo de componente compilado para composición sin wrapper. */\nexport interface ComponentModule<Props extends object> {\n renderToString(props: Props, state?: Record<string, unknown>): string;\n renderWithState?(props: Props): { html: string; state: Record<string, unknown> };\n hydrateScope(scope: DomScope, props: Props, state?: Record<string, unknown>): ComponentRelease;\n}\n\n/** Componente compilado que puede transferir su estado durante SSR. */\nexport type Component<Props extends object> = ComponentModule<Props> & {\n renderWithState(props: Props): { html: string; state: Record<string, unknown> };\n};\n\n/** Función de limpieza que puede exponer el estado editable de su instancia. */\nexport interface ComponentRelease {\n (): void;\n snapshot?: () => Record<string, unknown>;\n}\n\n/** Añade una lectura de estado a la limpieza de un componente compilado. */\nexport function withStateSnapshot(release: () => void, snapshot: () => Record<string, unknown>): ComponentRelease {\n return Object.assign(release, { snapshot });\n}\n\nconst componentStart = /^meeko:component:\\d+(?::.*)?$/;\n\nfunction componentEnd(start: Node): Node {\n let depth = 0;\n for (let node: Node | null = start; node; node = node.nextSibling) {\n if (node.nodeType !== 8) continue;\n const data = (node as Comment).data;\n if (componentStart.test(data)) depth++;\n else if (/^\\/meeko:component:\\d+$/.test(data) && --depth === 0) return node;\n }\n throw new Error(`Missing end marker for ${(start as Comment).data}`);\n}\n\nfunction visit(scope: DomScope, callback: (node: Node) => boolean): Node | undefined {\n function siblings(first: Node | null, stop: Node | null = null): Node | undefined {\n for (let node = first; node && node !== stop;) {\n if (callback(node)) return node;\n if (node.nodeType === 8 && componentStart.test((node as Comment).data)) {\n const end = componentEnd(node);\n if (callback(end)) return end;\n node = end.nextSibling;\n continue;\n }\n const found = siblings(node.firstChild);\n if (found) return found;\n node = node.nextSibling;\n }\n return undefined;\n }\n return siblings(scope.start?.nextSibling ?? scope.root.firstChild, scope.end ?? null);\n}\n\nfunction findComment(scope: DomScope, data: string): Comment {\n const node = visit(scope, (candidate) => candidate.nodeType === 8 && (candidate as Comment).data === data);\n if (!node) throw new Error(`Missing Meeko marker ${data}`);\n return node as Comment;\n}\n\nfunction findElement(scope: DomScope, name: string): Element {\n const node = visit(scope, (candidate) => candidate.nodeType === 1 && (candidate as Element).hasAttribute(name));\n if (!node) throw new Error(`Missing Meeko target ${name}`);\n return node as Element;\n}\n\nfunction region(scope: DomScope, kind: string, id: number): DomScope {\n const start = findComment(scope, `meeko:${kind}:${id}`);\n const end = findComment(scope, `/meeko:${kind}:${id}`);\n if (start.parentNode !== end.parentNode) throw new Error(`Invalid Meeko region ${kind}:${id}`);\n return { root: scope.root, start, end };\n}\n\nfunction clearRegion(scope: DomScope): void {\n if (!scope.start || !scope.end) throw new Error(\"Expected a bounded Meeko region\");\n for (let node = scope.start.nextSibling; node && node !== scope.end;) {\n const next = node.nextSibling;\n node.parentNode?.removeChild(node);\n node = next;\n }\n}\n\nfunction insertHtml(end: Comment, html: string): void {\n const parent = end.parentNode;\n if (!parent) throw new Error(\"Detached Meeko region\");\n const range = end.ownerDocument.createRange();\n range.selectNodeContents(parent);\n parent.insertBefore(range.createContextualFragment(html), end);\n}\n\nfunction sameProps<Props extends object>(first: Props, second: Props): boolean {\n const firstKeys = Object.keys(first);\n const secondKeys = Object.keys(second);\n return firstKeys.length === secondKeys.length && firstKeys.every((key) => Object.hasOwn(second, key) && Object.is(first[key as keyof Props], second[key as keyof Props]));\n}\n\n/** Renderiza un hijo entre comentarios de ámbito sin añadir un elemento visual. */\nexport function renderComponent<Props extends object>(id: number, component: ComponentModule<Props>, props: Props, transferState = false): string {\n if (transferState) {\n if (!component.renderWithState) throw new TypeError(`Component ${id} cannot transfer SSR state`);\n const rendered = component.renderWithState(props);\n return `<!--meeko:component:${id}:${encodeURIComponent(serializeJson(rendered.state))}-->${rendered.html}<!--/meeko:component:${id}-->`;\n }\n return `<!--meeko:component:${id}-->${component.renderToString(props)}<!--/meeko:component:${id}-->`;\n}\n\nfunction componentRegion(scope: DomScope, id: number): { inner: DomScope; state?: Record<string, unknown> } {\n const prefix = `meeko:component:${id}`;\n const start = visit(scope, (candidate) => candidate.nodeType === 8 && ((candidate as Comment).data === prefix || (candidate as Comment).data.startsWith(`${prefix}:`))) as Comment | undefined;\n if (!start) throw new Error(`Missing Meeko marker ${prefix}`);\n const end = findComment(scope, `/meeko:component:${id}`);\n if (start.parentNode !== end.parentNode) throw new Error(`Invalid Meeko region component:${id}`);\n const encoded = start.data.slice(prefix.length);\n if (!encoded) return { inner: { root: scope.root, start, end } };\n const parsed: unknown = JSON.parse(decodeURIComponent(encoded.slice(1)));\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) throw new TypeError(`Invalid Meeko state for component:${id}`);\n return { inner: { root: scope.root, start, end }, state: parsed as Record<string, unknown> };\n}\n\n/** Hidrata un hijo dentro de su rango y actualiza props reactivas con limpieza previa. */\nexport function bindComponent<Props extends object>(scope: DomScope, id: number, input: ComponentModule<Props> | (() => ComponentModule<Props>), read: () => Props, location: string): () => void {\n let inner: DomScope;\n let state: Record<string, unknown> | undefined;\n try {\n ({ inner, state } = componentRegion(scope, id));\n } catch (error) {\n throw new Error(`Hydration mismatch in ${location}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n const resolveComponent = (): ComponentModule<Props> => typeof input === \"function\" ? input() : input;\n let component = resolveComponent();\n let props = read();\n let release = component.hydrateScope(inner, props, state);\n const stop = effect(() => {\n const nextComponent = resolveComponent();\n const next = read();\n if (nextComponent === component && sameProps(props, next)) return;\n const state = nextComponent === component ? release.snapshot?.() : undefined;\n const html = nextComponent.renderToString(next, state);\n release();\n clearRegion(inner);\n insertHtml(inner.end!, html);\n release = nextComponent.hydrateScope(inner, next, state);\n component = nextComponent;\n props = next;\n });\n return () => { stop(); release(); };\n}\n\n/** Conecta un texto reactivo al marcador SSR y comprueba su valor inicial. */\nexport function bindText(scope: DomScope, id: number, read: () => unknown, location: string, source?: EffectSource): () => void {\n const marker = findComment(scope, `meeko:text:${id}`);\n const text = marker.nextSibling;\n if (!text || text.nodeType !== 3) throw new Error(`Missing text node in ${location}`);\n const initial = String(read());\n if (text.textContent !== initial) throw new Error(`Hydration mismatch in ${location}`);\n let first = true;\n return effect(() => {\n const next = String(read());\n if (first) {\n first = false;\n if (text.textContent === next) return;\n }\n text.textContent = next;\n }, source);\n}\n\n/** Conecta un atributo dinámico al elemento SSR y comprueba su valor inicial. */\nexport function bindAttribute(scope: DomScope, id: number, name: string, read: () => unknown, location: string, source?: EffectSource): () => void {\n const target = findElement(scope, `data-meeko-a-${id}`);\n const initial = attributeValue(name, read());\n if (target.getAttribute(name) !== initial) throw new Error(`Hydration mismatch in ${location}`);\n let first = true;\n return effect(() => {\n const next = attributeValue(name, read());\n if (first) {\n first = false;\n if (target.getAttribute(name) === next) return;\n }\n if (next === null) target.removeAttribute(name);\n else target.setAttribute(name, next);\n }, source);\n}\n\n/** Conecta un evento al elemento SSR y entrega su función de limpieza. */\nexport function bindEvent(scope: DomScope, id: number, name: string, handler: (event: Event) => void): () => void {\n const target = findElement(scope, `data-meeko-e-${id}`);\n target.addEventListener(name, handler);\n return () => target.removeEventListener(name, handler);\n}\n\n/** Genera los límites estables de una condición en SSR. */\nexport function renderIf(id: number, condition: unknown, render: () => string): string {\n return `<!--meeko:if:${id}-->${condition ? render() : \"\"}<!--/meeko:if:${id}-->`;\n}\n\n/** Hidrata una condición y conserva los nodos mientras sigue siendo verdadera. */\nexport function bindIf(scope: DomScope, id: number, read: () => unknown, render: () => string, hydrate: (inner: DomScope) => () => void): () => void {\n const inner = region(scope, \"if\", id);\n let active = Boolean(read());\n if (!active && inner.start?.nextSibling !== inner.end) throw new Error(`Hydration mismatch in condition ${id}`);\n let release = active ? hydrate(inner) : undefined;\n const stop = effect(() => {\n const next = Boolean(read());\n if (next === active) return;\n release?.();\n release = undefined;\n clearRegion(inner);\n if (next) {\n insertHtml(inner.end!, render());\n release = hydrate(inner);\n }\n active = next;\n });\n return () => { stop(); release?.(); };\n}\n\n/** Convierte una clave de lista en un token seguro para comentarios HTML. */\nexport function keyToken(key: unknown): string {\n if (typeof key === \"number\" && Number.isFinite(key)) return `n${encodeURIComponent(String(key)).replaceAll(\"-\", \"%2D\")}`;\n if (typeof key === \"string\") return `s${encodeURIComponent(key).replaceAll(\"-\", \"%2D\")}`;\n throw new TypeError(\"Meeko list keys must be strings or finite numbers\");\n}\n\n/** Renderiza una lista con límites identificados por claves únicas. */\nexport function renderFor<T>(id: number, items: Iterable<T>, keyOf: (item: T, index: number) => string | number, render: (item: T, index: number) => string): string {\n const seen = new Set<string>();\n let html = `<!--meeko:for:${id}-->`;\n let index = 0;\n for (const item of items) {\n const key = keyToken(keyOf(item, index));\n if (seen.has(key)) throw new Error(`Duplicate Meeko list key ${key}`);\n seen.add(key);\n html += `<!--meeko:item:${id}:${key}-->${render(item, index)}<!--/meeko:item:${id}:${key}-->`;\n index++;\n }\n return `${html}<!--/meeko:for:${id}-->`;\n}\n\ninterface ListEntry<T> {\n key: string;\n start: Comment;\n end: Comment;\n value: Signal<T>;\n index: Signal<number> | undefined;\n release: () => void;\n}\n\nfunction moveRange(start: Comment, end: Comment, before: Node): void {\n const parent = before.parentNode;\n if (!parent) throw new Error(\"Detached Meeko list\");\n const document = before.ownerDocument;\n if (!document) throw new Error(\"Missing document for Meeko list\");\n const fragment = document.createDocumentFragment();\n for (let node: Node | null = start; node;) {\n const next: Node | null = node.nextSibling;\n fragment.appendChild(node);\n if (node === end) break;\n node = next;\n }\n parent.insertBefore(fragment, before);\n}\n\n/** Encuentra las posiciones que ya mantienen el orden relativo de la lista anterior. */\nfunction stableListPositions(indices: readonly number[]): Set<number> {\n const tails: number[] = [];\n const previous = new Int32Array(indices.length).fill(-1);\n for (let index = 0; index < indices.length; index++) {\n const oldIndex = indices[index]!;\n if (oldIndex < 0) continue;\n let low = 0;\n let high = tails.length;\n while (low < high) {\n const middle = (low + high) >>> 1;\n if (indices[tails[middle]!]! < oldIndex) low = middle + 1;\n else high = middle;\n }\n if (low > 0) previous[index] = tails[low - 1]!;\n tails[low] = index;\n }\n const stable = new Set<number>();\n for (let index = tails.at(-1) ?? -1; index >= 0; index = previous[index]!) stable.add(index);\n return stable;\n}\n\n/**\n * Hidrata una lista y reordena regiones por clave sin reemplazar nodos conservados.\n * El compilador desactiva `trackIndex` sólo cuando el cuerpo de hidratación no lee\n * la señal de índice; las llamadas directas conservan la señal por defecto.\n */\nexport function bindFor<T>(scope: DomScope, id: number, read: () => Iterable<T>, keyOf: (item: T, index: number) => string | number, render: (item: T, index: number) => string, hydrate: (item: Signal<T>, index: Signal<number>, inner: DomScope) => () => void, trackIndex = true): () => void {\n const outer = region(scope, \"for\", id);\n const entries = new Map<string, ListEntry<T>>();\n const initial = [...read()];\n let currentKeys: string[] = [];\n let cursor = outer.start!.nextSibling;\n for (let index = 0; index < initial.length; index++) {\n const item = initial[index]!;\n const key = keyToken(keyOf(item, index));\n if (entries.has(key)) throw new Error(`Duplicate Meeko list key ${key}`);\n const startData = `meeko:item:${id}:${key}`;\n const endData = `/meeko:item:${id}:${key}`;\n if (!cursor || cursor.nodeType !== 8 || (cursor as Comment).data !== startData) throw new Error(`Hydration mismatch in list ${id} at key ${key}`);\n const start = cursor as Comment;\n let end = start.nextSibling;\n while (end && (end.nodeType !== 8 || (end as Comment).data !== endData)) end = end.nextSibling;\n if (!end) throw new Error(`Missing end marker for list key ${key}`);\n const value = signal(item);\n const position = trackIndex ? signal(index) : undefined;\n const release = createRoot((dispose) => {\n const cleanup = hydrate(value, position as Signal<number>, { root: scope.root, start, end: end as Comment });\n return () => { cleanup(); dispose(); };\n });\n entries.set(key, { key, start, end: end as Comment, value, index: position, release });\n currentKeys.push(key);\n cursor = end.nextSibling;\n }\n if (cursor !== outer.end) throw new Error(`Hydration mismatch in list ${id}: extra nodes`);\n let initialItems: T[] | undefined = initial;\n const stop = effect(() => {\n const items = [...read()];\n if (initialItems) {\n const previous = initialItems;\n initialItems = undefined;\n if (items.length === previous.length && items.every((item, index) =>\n Object.is(item, previous[index]) && keyToken(keyOf(item, index)) === currentKeys[index])) return;\n }\n const nextKeys = items.map((item, index) => keyToken(keyOf(item, index)));\n const nextKeySet = new Set(nextKeys);\n if (nextKeySet.size !== nextKeys.length) throw new Error(`Duplicate Meeko list key in region ${id}`);\n const oldPositions = new Map(currentKeys.map((key, index) => [key, index]));\n const oldIndices = nextKeys.map((key) => oldPositions.get(key) ?? -1);\n const stable = stableListPositions(oldIndices);\n for (const [key, entry] of entries) {\n if (nextKeySet.has(key)) continue;\n entry.release();\n let node: Node | null = entry.start;\n while (node) {\n const next: Node | null = node.nextSibling;\n node.parentNode?.removeChild(node);\n if (node === entry.end) break;\n node = next;\n }\n entries.delete(key);\n }\n let before: Node = outer.end!;\n for (let index = items.length - 1; index >= 0; index--) {\n const item = items[index]!;\n const key = nextKeys[index]!;\n let entry = entries.get(key);\n if (!entry) {\n const html = `<!--meeko:item:${id}:${key}-->${render(item, index)}<!--/meeko:item:${id}:${key}-->`;\n insertHtml(before as Comment, html);\n const end = before.previousSibling as Comment;\n let start: Node | null = end.previousSibling;\n while (start && (start.nodeType !== 8 || (start as Comment).data !== `meeko:item:${id}:${key}`)) start = start.previousSibling;\n if (!start) throw new Error(`Missing new list marker for ${key}`);\n const value = signal(item);\n const position = trackIndex ? signal(index) : undefined;\n const release = createRoot((dispose) => {\n const cleanup = hydrate(value, position as Signal<number>, { root: scope.root, start: start as Comment, end });\n return () => { cleanup(); dispose(); };\n });\n entry = { key, start: start as Comment, end, value, index: position, release };\n entries.set(key, entry);\n } else {\n entry.value.value = item;\n if (entry.index) entry.index.value = index;\n }\n if (oldIndices[index] !== -1 && !stable.has(index) && entry.end.nextSibling !== before) moveRange(entry.start, entry.end, before);\n before = entry.start;\n }\n currentKeys = nextKeys;\n });\n return () => { stop(); for (const entry of entries.values()) entry.release(); entries.clear(); };\n}\n"]}
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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","sourcesContent":["import { batch, createRoot, effect, finishWithCleanup, signal } from \"./reactivity.js\";\nimport { observeCallback } from \"./error-observer.js\";\nimport { componentErrorReporter } from \"./component-errors.js\";\nimport type { EffectSource, Signal } from \"./reactivity.js\";\nimport { attributeValue, serializeJson } from \"./server.js\";\n\n/** Fragmento de DOM que pertenece a una instancia o a una región dinámica. */\nexport interface DomScope {\n root: Element;\n start?: Comment;\n end?: Comment;\n}\n\n/** Contrato de un módulo de componente compilado para composición sin wrapper. */\nexport interface ComponentModule<Props extends object> {\n readonly renderToString: (props: Props, state?: Record<string, unknown>) => string;\n readonly renderWithState?: (props: Props) => { html: string; state: Record<string, unknown> };\n readonly hydrateScope: (scope: DomScope, props: Props, state?: Record<string, unknown>) => ComponentRelease;\n}\n\n/** Componente compilado que puede transferir su estado durante SSR. */\nexport type Component<Props extends object> = ComponentModule<Props> & {\n readonly renderWithState: (props: Props) => { html: string; state: Record<string, unknown> };\n};\n\n/** Función de limpieza que puede exponer el estado editable de su instancia. */\nexport interface ComponentRelease {\n (): void;\n snapshot?: () => Record<string, unknown>;\n}\n\n/** Releases every compiled binding and preserves the failure that triggered cleanup. */\nexport function releaseAll(cleanups: Array<() => void>, cause: { error: unknown }): never;\nexport function releaseAll(cleanups: Array<() => void>): void;\nexport function releaseAll(cleanups: Array<() => void>, cause?: { error: unknown }): void {\n const failures: unknown[] = cause ? [cause.error] : [];\n while (cleanups.length) {\n try { cleanups.pop()!(); }\n catch (error) { failures.push(error); }\n }\n if (failures.length > 1) throw new AggregateError(failures, \"Meeko hydration cleanup failed\");\n if (failures.length === 1) throw failures[0];\n}\n\n/** Añade una lectura de estado a la limpieza de un componente compilado. */\nexport function withStateSnapshot(release: () => void, snapshot: () => Record<string, unknown>): ComponentRelease {\n return Object.assign(release, { snapshot });\n}\n\nconst componentStart = /^meeko:component:\\d+(?::.*)?$/;\n\nfunction componentEnd(start: Node): Node {\n let depth = 0;\n for (let node: Node | null = start; node; node = node.nextSibling) {\n if (node.nodeType !== 8) continue;\n const data = (node as Comment).data;\n if (componentStart.test(data)) depth++;\n else if (/^\\/meeko:component:\\d+$/.test(data) && --depth === 0) return node;\n }\n throw new Error(`Missing end marker for ${(start as Comment).data}`);\n}\n\nfunction visit(scope: DomScope, callback: (node: Node) => boolean): Node | undefined {\n function siblings(first: Node | null, stop: Node | null = null): Node | undefined {\n for (let node = first; node && node !== stop;) {\n if (callback(node)) return node;\n if (node.nodeType === 8 && componentStart.test((node as Comment).data)) {\n const end = componentEnd(node);\n if (callback(end)) return end;\n node = end.nextSibling;\n continue;\n }\n const found = siblings(node.firstChild);\n if (found) return found;\n node = node.nextSibling;\n }\n return undefined;\n }\n return siblings(scope.start?.nextSibling ?? scope.root.firstChild, scope.end ?? null);\n}\n\nfunction findComment(scope: DomScope, data: string): Comment {\n const node = visit(scope, (candidate) => candidate.nodeType === 8 && (candidate as Comment).data === data);\n if (!node) throw new Error(`Missing Meeko marker ${data}`);\n return node as Comment;\n}\n\nfunction findElement(scope: DomScope, name: string): Element {\n const node = visit(scope, (candidate) => candidate.nodeType === 1 && (candidate as Element).hasAttribute(name));\n if (!node) throw new Error(`Missing Meeko target ${name}`);\n return node as Element;\n}\n\nfunction region(scope: DomScope, kind: string, id: number): DomScope {\n const start = findComment(scope, `meeko:${kind}:${id}`);\n const end = findComment(scope, `/meeko:${kind}:${id}`);\n if (start.parentNode !== end.parentNode) throw new Error(`Invalid Meeko region ${kind}:${id}`);\n return { root: scope.root, start, end };\n}\n\nfunction clearRegion(scope: DomScope): void {\n if (!scope.start || !scope.end) throw new Error(\"Expected a bounded Meeko region\");\n for (let node = scope.start.nextSibling; node && node !== scope.end;) {\n const next = node.nextSibling;\n node.parentNode?.removeChild(node);\n node = next;\n }\n}\n\nfunction cloneRegion(scope: DomScope): DocumentFragment {\n if (!scope.start || !scope.end) throw new Error(\"Expected a bounded Meeko region\");\n const range = scope.start.ownerDocument.createRange();\n range.setStartAfter(scope.start);\n range.setEndBefore(scope.end);\n return range.cloneContents();\n}\n\nfunction restoreRegion(scope: DomScope, content: DocumentFragment): void {\n clearRegion(scope);\n scope.end!.parentNode!.insertBefore(content, scope.end!);\n}\n\nfunction insertHtml(end: Comment, html: string): void {\n const parent = end.parentNode;\n if (!parent) throw new Error(\"Detached Meeko region\");\n const range = end.ownerDocument.createRange();\n range.selectNodeContents(parent);\n parent.insertBefore(range.createContextualFragment(html), end);\n}\n\nfunction sameProps<Props extends object>(first: Props, second: Props): boolean {\n const firstKeys = Object.keys(first);\n const secondKeys = Object.keys(second);\n return firstKeys.length === secondKeys.length && firstKeys.every((key) => Object.hasOwn(second, key) && Object.is(first[key as keyof Props], second[key as keyof Props]));\n}\n\n/** Renderiza un hijo entre comentarios de ámbito sin añadir un elemento visual. */\nexport function renderComponent<Props extends object>(id: number, component: Component<Props>, props: Props, transferState: boolean): string;\nexport function renderComponent<Props extends object>(id: number, component: ComponentModule<Props>, props: Props, transferState?: false): string;\nexport function renderComponent<Props extends object>(id: number, component: ComponentModule<Props>, props: Props, transferState = false): string {\n if (transferState) {\n if (!component.renderWithState) throw new TypeError(`Component ${id} cannot transfer SSR state`);\n const rendered = component.renderWithState(props);\n return `<!--meeko:component:${id}:${encodeURIComponent(serializeJson(rendered.state))}-->${rendered.html}<!--/meeko:component:${id}-->`;\n }\n return `<!--meeko:component:${id}-->${component.renderToString(props)}<!--/meeko:component:${id}-->`;\n}\n\nfunction componentRegion(scope: DomScope, id: number): { inner: DomScope; state?: Record<string, unknown> } {\n const prefix = `meeko:component:${id}`;\n const start = visit(scope, (candidate) => candidate.nodeType === 8 && ((candidate as Comment).data === prefix || (candidate as Comment).data.startsWith(`${prefix}:`))) as Comment | undefined;\n if (!start) throw new Error(`Missing Meeko marker ${prefix}`);\n const end = findComment(scope, `/meeko:component:${id}`);\n if (start.parentNode !== end.parentNode) throw new Error(`Invalid Meeko region component:${id}`);\n const encoded = start.data.slice(prefix.length);\n if (!encoded) return { inner: { root: scope.root, start, end } };\n const parsed: unknown = JSON.parse(decodeURIComponent(encoded.slice(1)));\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) throw new TypeError(`Invalid Meeko state for component:${id}`);\n return { inner: { root: scope.root, start, end }, state: parsed as Record<string, unknown> };\n}\n\n/** Hidrata un hijo dentro de su rango y actualiza props reactivas con limpieza previa. */\nexport function bindComponent<Props extends object>(scope: DomScope, id: number, input: ComponentModule<Props> | (() => ComponentModule<Props>), read: () => Props, location: string): () => void {\n let inner: DomScope;\n let state: Record<string, unknown> | undefined;\n try {\n ({ inner, state } = componentRegion(scope, id));\n } catch (error) {\n throw new Error(`Hydration mismatch in ${location}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n const resolveComponent = (): ComponentModule<Props> => typeof input === \"function\" ? input() : input;\n let component = resolveComponent();\n let props = read();\n let release = component.hydrateScope(inner, props, state);\n let stop = () => {};\n stop = effect(() => {\n const nextComponent = resolveComponent();\n const next = read();\n if (nextComponent === component && sameProps(props, next)) return;\n const previousState = release.snapshot?.();\n const state = nextComponent === component ? previousState : undefined;\n const html = nextComponent.renderToString(next, state);\n const previous = cloneRegion(inner);\n try {\n release();\n clearRegion(inner);\n insertHtml(inner.end!, html);\n const nextRelease = nextComponent.hydrateScope(inner, next, state);\n release = nextRelease;\n component = nextComponent;\n props = next;\n } catch (error) {\n try {\n restoreRegion(inner, previous);\n release = component.hydrateScope(inner, props, previousState);\n } catch (rollbackError) {\n release = () => {};\n stop();\n throw new AggregateError([error, rollbackError], `Meeko component update and recovery failed in ${location}`);\n }\n throw error;\n }\n });\n return () => { stop(); release(); };\n}\n\n/** Conecta un texto reactivo al marcador SSR y comprueba su valor inicial. */\nexport function bindText(scope: DomScope, id: number, read: () => unknown, location: string, source?: EffectSource): () => void {\n const marker = findComment(scope, `meeko:text:${id}`);\n const initial = String(read());\n let text = marker.nextSibling;\n // HTML parsing drops empty text nodes. Restore only that empty SSR case so\n // adjacent static text stays untouched and the reactive expression can bind.\n if (initial === \"\" && (!text || text.nodeType !== 3 || text.textContent !== \"\")) {\n text = marker.ownerDocument.createTextNode(\"\");\n marker.parentNode!.insertBefore(text, marker.nextSibling);\n }\n if (!text || text.nodeType !== 3) throw new Error(`Missing text node in ${location}`);\n if (text.textContent !== initial) throw new Error(`Hydration mismatch in ${location}`);\n let first = true;\n return effect(() => {\n const next = String(read());\n if (first) {\n first = false;\n if (text.textContent === next) return;\n }\n text.textContent = next;\n }, source);\n}\n\n/** Conecta un atributo dinámico al elemento SSR y comprueba su valor inicial. */\nexport function bindAttribute(scope: DomScope, id: number, name: string, read: () => unknown, location: string, source?: EffectSource): () => void {\n const target = findElement(scope, `data-meeko-a-${id}`);\n const initial = attributeValue(name, read());\n if (target.getAttribute(name) !== initial) throw new Error(`Hydration mismatch in ${location}`);\n let first = true;\n return effect(() => {\n const next = attributeValue(name, read());\n if (first) {\n first = false;\n if (target.getAttribute(name) === next) return;\n }\n if (next === null) target.removeAttribute(name);\n else target.setAttribute(name, next);\n }, source);\n}\n\n/** Conecta un evento al elemento SSR y entrega su función de limpieza. */\nexport function bindEvent(scope: DomScope, id: number, name: string, handler: (event: Event) => void): () => void {\n const target = findElement(scope, `data-meeko-e-${id}`);\n const report = componentErrorReporter();\n const listener = (event: Event) => observeCallback(\n () => handler(event),\n report,\n );\n target.addEventListener(name, listener);\n return () => target.removeEventListener(name, listener);\n}\n\n/** Genera los límites estables de una condición en SSR. */\nexport function renderIf(id: number, condition: unknown, render: () => string): string {\n return `<!--meeko:if:${id}-->${condition ? render() : \"\"}<!--/meeko:if:${id}-->`;\n}\n\n/** Hidrata una condición y conserva los nodos mientras sigue siendo verdadera. */\nexport function bindIf(scope: DomScope, id: number, read: () => unknown, render: () => string, hydrate: (inner: DomScope) => () => void): () => void {\n const inner = region(scope, \"if\", id);\n let active = Boolean(read());\n if (!active && inner.start?.nextSibling !== inner.end) throw new Error(`Hydration mismatch in condition ${id}`);\n let release = active ? hydrate(inner) : undefined;\n let stop = () => {};\n stop = effect(() => {\n const next = Boolean(read());\n if (next === active) return;\n if (next) {\n const html = render();\n try {\n clearRegion(inner);\n insertHtml(inner.end!, html);\n release = hydrate(inner);\n active = true;\n } catch (error) {\n try { clearRegion(inner); }\n catch (cleanupError) {\n stop();\n throw new AggregateError([error, cleanupError], `Meeko condition ${id} update and cleanup failed`);\n }\n throw error;\n }\n return;\n }\n const failures: unknown[] = [];\n try { release?.(); }\n catch (error) { failures.push(error); }\n release = undefined;\n try { clearRegion(inner); }\n catch (error) { failures.push(error); stop(); }\n active = false;\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, `Meeko condition ${id} update failed`);\n });\n return () => { stop(); release?.(); };\n}\n\n/** Convierte una clave de lista en un token seguro para comentarios HTML. */\nexport function keyToken(key: unknown): string {\n if (typeof key === \"number\" && Number.isFinite(key)) return `n${encodeURIComponent(String(key)).replaceAll(\"-\", \"%2D\")}`;\n if (typeof key === \"string\") return `s${encodeURIComponent(key).replaceAll(\"-\", \"%2D\")}`;\n throw new TypeError(\"Meeko list keys must be strings or finite numbers\");\n}\n\n/** Renderiza una lista con límites identificados por claves únicas. */\nexport function renderFor<T>(id: number, items: Iterable<T>, keyOf: (item: T, index: number) => string | number, render: (item: T, index: number) => string): string {\n const seen = new Set<string>();\n let html = `<!--meeko:for:${id}-->`;\n let index = 0;\n for (const item of items) {\n const key = keyToken(keyOf(item, index));\n if (seen.has(key)) throw new Error(`Duplicate Meeko list key ${key}`);\n seen.add(key);\n html += `<!--meeko:item:${id}:${key}-->${render(item, index)}<!--/meeko:item:${id}:${key}-->`;\n index++;\n }\n return `${html}<!--/meeko:for:${id}-->`;\n}\n\ninterface ListEntry<T> {\n key: string;\n start: Comment;\n end: Comment;\n value: Signal<T>;\n index: Signal<number> | undefined;\n release: () => void;\n}\n\nfunction moveRange(start: Comment, end: Comment, before: Node): void {\n const parent = before.parentNode;\n if (!parent) throw new Error(\"Detached Meeko list\");\n if (start.parentNode !== parent || end.parentNode !== parent) throw new Error(\"Detached Meeko list row\");\n const document = before.ownerDocument;\n if (!document) throw new Error(\"Missing document for Meeko list\");\n const originalNext = end.nextSibling;\n const fragment = document.createDocumentFragment();\n for (let node: Node | null = start; node;) {\n const next: Node | null = node.nextSibling;\n fragment.appendChild(node);\n if (node === end) break;\n node = next;\n }\n try { parent.insertBefore(fragment, before); }\n catch (error) {\n try { parent.insertBefore(fragment, originalNext); }\n catch (restoreError) {\n throw new AggregateError([error, restoreError], \"Meeko list move and restoration failed\");\n }\n throw error;\n }\n}\n\nfunction removeRange(start: Comment, end: Comment): void {\n const parent = start.parentNode;\n if (!parent || end.parentNode !== parent) throw new Error(\"Detached Meeko list row\");\n for (let node: Node | null = start; node;) {\n const next: Node | null = node.nextSibling;\n parent.removeChild(node);\n if (node === end) break;\n node = next;\n }\n}\n\n/** Encuentra las posiciones que ya mantienen el orden relativo de la lista anterior. */\nfunction stableListPositions(indices: readonly number[]): Set<number> {\n const tails: number[] = [];\n const previous = new Int32Array(indices.length).fill(-1);\n for (let index = 0; index < indices.length; index++) {\n const oldIndex = indices[index]!;\n if (oldIndex < 0) continue;\n let low = 0;\n let high = tails.length;\n while (low < high) {\n const middle = (low + high) >>> 1;\n if (indices[tails[middle]!]! < oldIndex) low = middle + 1;\n else high = middle;\n }\n if (low > 0) previous[index] = tails[low - 1]!;\n tails[low] = index;\n }\n const stable = new Set<number>();\n for (let index = tails.at(-1) ?? -1; index >= 0; index = previous[index]!) stable.add(index);\n return stable;\n}\n\n/**\n * Hidrata una lista y reordena regiones por clave sin reemplazar nodos conservados.\n * El compilador desactiva `trackIndex` sólo cuando el cuerpo de hidratación no lee\n * la señal de índice; las llamadas directas conservan la señal por defecto.\n */\nexport function bindFor<T>(scope: DomScope, id: number, read: () => Iterable<T>, keyOf: (item: T, index: number) => string | number, render: (item: T, index: number) => string, hydrate: (item: Signal<T>, index: Signal<number>, inner: DomScope) => () => void, trackIndex = true): () => void {\n const outer = region(scope, \"for\", id);\n const entries = new Map<string, ListEntry<T>>();\n const initial = [...read()];\n let currentKeys: string[] = [];\n let cursor = outer.start!.nextSibling;\n try {\n for (let index = 0; index < initial.length; index++) {\n const item = initial[index]!;\n const key = keyToken(keyOf(item, index));\n if (entries.has(key)) throw new Error(`Duplicate Meeko list key ${key}`);\n const startData = `meeko:item:${id}:${key}`;\n const endData = `/meeko:item:${id}:${key}`;\n if (!cursor || cursor.nodeType !== 8 || (cursor as Comment).data !== startData) throw new Error(`Hydration mismatch in list ${id} at key ${key}`);\n const start = cursor as Comment;\n let end = start.nextSibling;\n while (end && (end.nodeType !== 8 || (end as Comment).data !== endData)) end = end.nextSibling;\n if (!end) throw new Error(`Missing end marker for list key ${key}`);\n const value = signal(item);\n const position = trackIndex ? signal(index) : undefined;\n const release = createRoot((dispose) => {\n const cleanup = hydrate(value, position as Signal<number>, { root: scope.root, start, end: end as Comment });\n return () => finishWithCleanup(cleanup, dispose);\n });\n entries.set(key, { key, start, end: end as Comment, value, index: position, release });\n currentKeys.push(key);\n cursor = end.nextSibling;\n }\n if (cursor !== outer.end) throw new Error(`Hydration mismatch in list ${id}: extra nodes`);\n } catch (error) {\n try { releaseAll([...entries.values()].map((entry) => entry.release), { error }); }\n finally { entries.clear(); }\n }\n let initialItems: T[] | undefined = initial;\n let stop = () => {};\n stop = effect(() => {\n const items = [...read()];\n if (initialItems) {\n const previous = initialItems;\n initialItems = undefined;\n if (items.length === previous.length && items.every((item, index) =>\n Object.is(item, previous[index]) && keyToken(keyOf(item, index)) === currentKeys[index])) return;\n }\n const nextKeys = items.map((item, index) => keyToken(keyOf(item, index)));\n const nextKeySet = new Set(nextKeys);\n if (nextKeySet.size !== nextKeys.length) throw new Error(`Duplicate Meeko list key in region ${id}`);\n const oldPositions = new Map(currentKeys.map((key, index) => [key, index]));\n const oldIndices = nextKeys.map((key) => oldPositions.get(key) ?? -1);\n const stable = stableListPositions(oldIndices);\n const newRows = items.flatMap((item, index) => entries.has(nextKeys[index]!) ? [] : [{\n key: nextKeys[index]!, index, item,\n html: `<!--meeko:item:${id}:${nextKeys[index]}-->${render(item, index)}<!--/meeko:item:${id}:${nextKeys[index]}-->`,\n }]);\n const staged = new Map<string, ListEntry<T>>();\n const inserted: Array<{ start: Comment; end: Comment }> = [];\n let moving = false;\n try {\n for (const row of newRows) {\n const marker = outer.end!;\n insertHtml(marker, row.html);\n const end = marker.previousSibling as Comment;\n let start: Node | null = end.previousSibling;\n while (start && (start.nodeType !== 8 || (start as Comment).data !== `meeko:item:${id}:${row.key}`)) start = start.previousSibling;\n if (!start) throw new Error(`Missing new list marker for ${row.key}`);\n inserted.push({ start: start as Comment, end });\n const value = signal(row.item);\n const position = trackIndex ? signal(row.index) : undefined;\n const release = createRoot((dispose) => {\n const cleanup = hydrate(value, position as Signal<number>, { root: scope.root, start: start as Comment, end });\n return () => finishWithCleanup(cleanup, dispose);\n });\n staged.set(row.key, { key: row.key, start: start as Comment, end, value, index: position, release });\n }\n moving = true;\n let before: Node = outer.end!;\n for (let index = items.length - 1; index >= 0; index--) {\n const key = nextKeys[index]!;\n const entry = entries.get(key) ?? staged.get(key)!;\n if ((oldIndices[index] === -1 || !stable.has(index)) && entry.end.nextSibling !== before) {\n moveRange(entry.start, entry.end, before);\n }\n before = entry.start;\n }\n } catch (error) {\n const failures: unknown[] = [error];\n for (const entry of [...staged.values()].reverse()) {\n try { entry.release(); }\n catch (cleanupError) { failures.push(cleanupError); }\n }\n for (const row of inserted.reverse()) {\n try { removeRange(row.start, row.end); }\n catch (cleanupError) { failures.push(cleanupError); }\n }\n if (moving) {\n let before: Node = outer.end!;\n for (let index = currentKeys.length - 1; index >= 0; index--) {\n const entry = entries.get(currentKeys[index]!)!;\n try {\n if (entry.end.nextSibling !== before) moveRange(entry.start, entry.end, before);\n before = entry.start;\n } catch (restoreError) { failures.push(restoreError); }\n }\n }\n if (failures.length > 1) {\n stop();\n throw new AggregateError(failures, `Meeko list ${id} update and cleanup failed`);\n }\n throw error;\n }\n const failures: unknown[] = [];\n for (const [key, entry] of entries) {\n if (nextKeySet.has(key)) continue;\n try { entry.release(); }\n catch (error) { failures.push(error); }\n try { removeRange(entry.start, entry.end); }\n catch (error) { failures.push(error); stop(); }\n entries.delete(key);\n }\n for (const [key, entry] of staged) entries.set(key, entry);\n currentKeys = nextKeys;\n try {\n batch(() => {\n for (let index = 0; index < items.length; index++) {\n const entry = entries.get(nextKeys[index]!)!;\n if (staged.has(entry.key)) continue;\n entry.value.value = items[index]!;\n if (entry.index) entry.index.value = index;\n }\n });\n } catch (error) { failures.push(error); }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, `Meeko list ${id} update failed`);\n });\n return () => {\n stop();\n try { releaseAll([...entries.values()].map((entry) => entry.release)); }\n finally { entries.clear(); }\n };\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /** Attaches a rejection observer immediately, including to foreign thenables. */
2
+ export declare function observeReturnedPromise(result: unknown, report: (error: unknown) => void): boolean;
3
+ /** Observes synchronous callbacks and returned promises at browser event boundaries. */
4
+ export declare function observeCallback(call: () => unknown, report: (error: unknown) => void): void;
5
+ /** Last-resort client reporting when no application observer is available. */
6
+ export declare function logClientError(label: string, ...details: unknown[]): void;
@@ -0,0 +1,41 @@
1
+ /** Attaches a rejection observer immediately, including to foreign thenables. */
2
+ export function observeReturnedPromise(result, report) {
3
+ const safeReport = (error) => {
4
+ try {
5
+ report(error);
6
+ }
7
+ catch { /* Reporting cannot escape an event callback or create another rejection. */ }
8
+ };
9
+ try {
10
+ if (result && (typeof result === "object" || typeof result === "function")
11
+ && "then" in result && typeof result.then === "function") {
12
+ void Promise.resolve(result).catch(safeReport);
13
+ return true;
14
+ }
15
+ }
16
+ catch (error) {
17
+ safeReport(error);
18
+ return true;
19
+ }
20
+ return false;
21
+ }
22
+ /** Observes synchronous callbacks and returned promises at browser event boundaries. */
23
+ export function observeCallback(call, report) {
24
+ try {
25
+ observeReturnedPromise(call(), report);
26
+ }
27
+ catch (error) {
28
+ try {
29
+ report(error);
30
+ }
31
+ catch { /* Reporting cannot escape an event callback. */ }
32
+ }
33
+ }
34
+ /** Last-resort client reporting when no application observer is available. */
35
+ export function logClientError(label, ...details) {
36
+ try {
37
+ console.error(label, ...details);
38
+ }
39
+ catch { /* A broken console cannot escape an event callback. */ }
40
+ }
41
+ //# sourceMappingURL=error-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-observer.js","sourceRoot":"","sources":["../src/error-observer.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,UAAU,sBAAsB,CAAC,MAAe,EAAE,MAAgC;IACtF,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,EAAE;QACpC,IAAI,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QACtB,MAAM,CAAC,CAAC,4EAA4E,CAAC,CAAC;IACxF,CAAC,CAAC;IACF,IAAI,CAAC;QACH,IAAI,MAAM,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,UAAU,CAAC;eACrE,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3D,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,eAAe,CAAC,IAAmB,EAAE,MAAgC;IACnF,IAAI,CAAC;QAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAAC,CAAC;IAC/C,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QACtB,MAAM,CAAC,CAAC,gDAAgD,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,GAAG,OAAkB;IACjE,IAAI,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;IAAC,CAAC;IACzC,MAAM,CAAC,CAAC,uDAAuD,CAAC,CAAC;AACnE,CAAC","sourcesContent":["/** Attaches a rejection observer immediately, including to foreign thenables. */\nexport function observeReturnedPromise(result: unknown, report: (error: unknown) => void): boolean {\n const safeReport = (error: unknown) => {\n try { report(error); }\n catch { /* Reporting cannot escape an event callback or create another rejection. */ }\n };\n try {\n if (result && (typeof result === \"object\" || typeof result === \"function\")\n && \"then\" in result && typeof result.then === \"function\") {\n void Promise.resolve(result).catch(safeReport);\n return true;\n }\n } catch (error) { safeReport(error); return true; }\n return false;\n}\n\n/** Observes synchronous callbacks and returned promises at browser event boundaries. */\nexport function observeCallback(call: () => unknown, report: (error: unknown) => void): void {\n try { observeReturnedPromise(call(), report); }\n catch (error) {\n try { report(error); }\n catch { /* Reporting cannot escape an event callback. */ }\n }\n}\n\n/** Last-resort client reporting when no application observer is available. */\nexport function logClientError(label: string, ...details: unknown[]): void {\n try { console.error(label, ...details); }\n catch { /* A broken console cannot escape an event callback. */ }\n}\n"]}
@@ -1,8 +1,159 @@
1
- import { readdir, readFile } from "node:fs/promises";
2
- import { join, resolve } from "node:path";
1
+ import { access, mkdir, readFile, readdir, realpath, unlink, writeFile } from "node:fs/promises";
2
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
3
+ import ts from "@typescript/typescript6";
3
4
  import { checkSource } from "../check.js";
4
- import { generateTypes } from "../types.js";
5
+ import { componentTypeDeclarationMarker, generateTypes } from "../types.js";
5
6
  import { resolveConfigSources } from "./config.js";
7
+ const componentTypesManifest = "component-types.json";
8
+ const componentTypeSuffix = ".d.meeko.ts";
9
+ function inside(root, target) {
10
+ const path = relative(root, target);
11
+ return path === "" || (path !== ".." && !path.startsWith(`..${sep}`) && !isAbsolute(path));
12
+ }
13
+ function ownedTypePath(typesRoot, file) {
14
+ const path = relative(typesRoot, resolve(file));
15
+ if (!path || path === ".." || path.startsWith(`..${sep}`) || isAbsolute(path) || !path.endsWith(componentTypeSuffix))
16
+ return undefined;
17
+ return path.replaceAll("\\", "/");
18
+ }
19
+ async function readTypeOwnership(file) {
20
+ let source;
21
+ try {
22
+ source = await readFile(file, "utf8");
23
+ }
24
+ catch (error) {
25
+ if (error.code === "ENOENT")
26
+ return undefined;
27
+ throw error;
28
+ }
29
+ let value;
30
+ try {
31
+ value = JSON.parse(source);
32
+ }
33
+ catch (error) {
34
+ throw new Error(`Invalid Meeko component type ownership manifest: ${file}`, { cause: error });
35
+ }
36
+ if (!value || typeof value !== "object" || value.version !== 1 ||
37
+ !Array.isArray(value.files) ||
38
+ value.files.some((entry) => typeof entry !== "string" || !entry)) {
39
+ throw new Error(`Invalid Meeko component type ownership manifest: ${file}`);
40
+ }
41
+ return value.files;
42
+ }
43
+ function generatedComponentDeclaration(source) {
44
+ if (source.startsWith(`${componentTypeDeclarationMarker}\n`) || source.startsWith(`${componentTypeDeclarationMarker}\r\n`))
45
+ return true;
46
+ // Releases before the ownership manifest did not preserve a comment marker.
47
+ // Parse their complete generated runtime surface so comments and strings cannot impersonate it.
48
+ const file = ts.createSourceFile("component.d.meeko.ts", source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
49
+ const modifiers = (node) => node.modifiers ?? [];
50
+ const exportedDeclaration = (node) => modifiers(node).some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) &&
51
+ modifiers(node).some((modifier) => modifier.kind === ts.SyntaxKind.DeclareKeyword);
52
+ const typeName = (node) => {
53
+ if (!node || !ts.isTypeReferenceNode(node))
54
+ return undefined;
55
+ if (ts.isIdentifier(node.typeName))
56
+ return node.typeName.text;
57
+ return ts.isIdentifier(node.typeName.left) && ts.isIdentifier(node.typeName.right)
58
+ ? `${node.typeName.left.text}.${node.typeName.right.text}` : undefined;
59
+ };
60
+ const generatedFunction = (name, expected) => file.statements.some((statement) => ts.isFunctionDeclaration(statement) && statement.name?.text === name &&
61
+ exportedDeclaration(statement) && expected.every(([parameterName, parameterType], index) => {
62
+ const parameter = statement.parameters[index];
63
+ return parameter !== undefined && ts.isIdentifier(parameter.name) && parameter.name.text === parameterName && typeName(parameter.type) === parameterType;
64
+ }));
65
+ const internalImport = file.statements.some((statement) => {
66
+ if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier) ||
67
+ statement.moduleSpecifier.text !== "@meekojs/meeko/internal")
68
+ return false;
69
+ const bindings = statement.importClause?.namedBindings;
70
+ return bindings !== undefined && ts.isNamespaceImport(bindings) && bindings.name.text === "__meeko";
71
+ });
72
+ const componentProps = file.statements.some((statement) => ts.isTypeAliasDeclaration(statement) &&
73
+ statement.name.text === "ComponentProps" && modifiers(statement).some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword));
74
+ const css = file.statements.some((statement) => ts.isVariableStatement(statement) && exportedDeclaration(statement) &&
75
+ statement.declarationList.declarations.some((declaration) => ts.isIdentifier(declaration.name) && declaration.name.text === "css" &&
76
+ declaration.initializer !== undefined && ts.isStringLiteral(declaration.initializer)));
77
+ return internalImport && componentProps && css &&
78
+ generatedFunction("renderWithState", [["__inputProps", "ComponentProps"]]) &&
79
+ generatedFunction("renderToString", [["__inputProps", "ComponentProps"]]) &&
80
+ generatedFunction("hydrate", [["root", "Element"], ["__inputProps", "ComponentProps"]]) &&
81
+ generatedFunction("hydrateScope", [["__scope", "__meeko.DomScope"], ["__inputProps", "ComponentProps"]]);
82
+ }
83
+ /** Adopts only orphaned declarations with a current marker or the complete legacy generator fingerprint. */
84
+ async function adoptGeneratedTypes(projectRoot, typesRoot) {
85
+ const files = [];
86
+ async function walk(directory) {
87
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
88
+ const file = join(directory, entry.name);
89
+ if (entry.isDirectory())
90
+ await walk(file);
91
+ else if (entry.isFile() && entry.name.endsWith(componentTypeSuffix) && generatedComponentDeclaration(await readFile(file, "utf8"))) {
92
+ const path = ownedTypePath(typesRoot, file);
93
+ if (!path)
94
+ continue;
95
+ const source = resolve(projectRoot, `${path.slice(0, -componentTypeSuffix.length)}.meeko`);
96
+ try {
97
+ await access(source);
98
+ }
99
+ catch (error) {
100
+ if (error.code === "ENOENT") {
101
+ files.push(path);
102
+ continue;
103
+ }
104
+ throw error;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ await walk(typesRoot);
110
+ return files;
111
+ }
112
+ /** Removes only declarations recorded by a previous successful generation. */
113
+ async function reconcileOwnedTypes(projectRoot, outputs) {
114
+ const root = resolve(projectRoot);
115
+ const typesRoot = resolve(root, ".meeko", "types");
116
+ const manifest = resolve(root, ".meeko", "manifests", componentTypesManifest);
117
+ const current = new Set(outputs.map((output) => ownedTypePath(typesRoot, output)).filter((path) => path !== undefined));
118
+ const recorded = await readTypeOwnership(manifest);
119
+ await mkdir(typesRoot, { recursive: true });
120
+ const actualRoot = await realpath(root);
121
+ const actualTypesRoot = await realpath(typesRoot);
122
+ if (!inside(actualRoot, actualTypesRoot))
123
+ throw new Error(`Meeko type directory escapes project root: ${typesRoot}`);
124
+ const previous = recorded ?? await adoptGeneratedTypes(root, typesRoot);
125
+ for (const path of previous) {
126
+ const target = resolve(typesRoot, path);
127
+ if (path.includes("\\") || ownedTypePath(typesRoot, target) !== path) {
128
+ throw new Error(`Invalid owned Meeko component type path: ${path}`);
129
+ }
130
+ if (current.has(path))
131
+ continue;
132
+ let actualTarget;
133
+ try {
134
+ actualTarget = await realpath(target);
135
+ }
136
+ catch (error) {
137
+ if (error.code === "ENOENT")
138
+ continue;
139
+ throw error;
140
+ }
141
+ if (!inside(actualTypesRoot, actualTarget))
142
+ throw new Error(`Owned Meeko component type escapes generated directory: ${target}`);
143
+ await unlink(target);
144
+ }
145
+ const body = `${JSON.stringify({ version: 1, files: [...current].sort() }, null, 2)}\n`;
146
+ await mkdir(dirname(manifest), { recursive: true });
147
+ try {
148
+ if (await readFile(manifest, "utf8") === body)
149
+ return;
150
+ }
151
+ catch (error) {
152
+ if (error.code !== "ENOENT")
153
+ throw error;
154
+ }
155
+ await writeFile(manifest, body, "utf8");
156
+ }
6
157
  async function appMeekoFiles(projectRoot) {
7
158
  const root = resolve(projectRoot);
8
159
  const files = [];
@@ -26,6 +177,7 @@ async function appMeekoFiles(projectRoot) {
26
177
  }
27
178
  for (const source of await resolveConfigSources(root)) {
28
179
  await walk(join(source.root, "app", "pages"));
180
+ await walk(join(source.root, "app", "layouts"));
29
181
  await walk(join(source.root, "app", "components"));
30
182
  for (const file of [join(source.root, "app", "app.meeko"), join(source.root, "app", "error.meeko")]) {
31
183
  try {
@@ -49,11 +201,14 @@ export async function checkApp(projectRoot) {
49
201
  }
50
202
  /** Mirrors app component declarations into the project's virtual type tree. */
51
203
  export async function generateAppTypes(projectRoot) {
204
+ const root = resolve(projectRoot);
52
205
  const outputs = new Set();
53
- for (const file of await appMeekoFiles(projectRoot)) {
206
+ for (const file of await appMeekoFiles(root)) {
54
207
  for (const output of await generateTypes(await readFile(file, "utf8"), file))
55
208
  outputs.add(output);
56
209
  }
57
- return [...outputs].sort();
210
+ const generated = [...outputs].sort();
211
+ await reconcileOwnedTypes(root, generated);
212
+ return generated;
58
213
  }
59
214
  //# sourceMappingURL=check-app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-app.js","sourceRoot":"","sources":["../../src/framework/check-app.ts"],"names":[],"mappings":"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","sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { checkSource } from \"../check.js\";\nimport type { CompileDiagnostic } from \"../compiler/sfc.js\";\nimport { generateTypes } from \"../types.js\";\nimport { resolveConfigSources } from \"./config.js\";\n\nasync function appMeekoFiles(projectRoot: string): Promise<string[]> {\n const root = resolve(projectRoot);\n const files: string[] = [];\n async function walk(directory: string): Promise<void> {\n let entries;\n try { entries = await readdir(directory, { withFileTypes: true }); }\n catch (error) { if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return; throw error; }\n for (const entry of entries) {\n const path = join(directory, entry.name);\n if (entry.isDirectory()) await walk(path);\n else if (entry.isFile() && entry.name.endsWith(\".meeko\")) files.push(path);\n }\n }\n for (const source of await resolveConfigSources(root)) {\n await walk(join(source.root, \"app\", \"pages\"));\n await walk(join(source.root, \"app\", \"components\"));\n for (const file of [join(source.root, \"app\", \"app.meeko\"), join(source.root, \"app\", \"error.meeko\")]) {\n try { await readFile(file); files.push(file); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n }\n }\n return files.sort();\n}\n\n/** Checks every discovered application component, including new pages and layouts. */\nexport async function checkApp(projectRoot: string): Promise<CompileDiagnostic[]> {\n const diagnostics: CompileDiagnostic[] = [];\n for (const file of await appMeekoFiles(projectRoot)) diagnostics.push(...await checkSource(await readFile(file, \"utf8\"), file));\n return diagnostics;\n}\n\n/** Mirrors app component declarations into the project's virtual type tree. */\nexport async function generateAppTypes(projectRoot: string): Promise<string[]> {\n const outputs = new Set<string>();\n for (const file of await appMeekoFiles(projectRoot)) {\n for (const output of await generateTypes(await readFile(file, \"utf8\"), file)) outputs.add(output);\n }\n return [...outputs].sort();\n}\n"]}
1
+ {"version":3,"file":"check-app.js","sourceRoot":"","sources":["../../src/framework/check-app.ts"],"names":[],"mappings":"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","sourcesContent":["import { access, mkdir, readFile, readdir, realpath, unlink, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport ts from \"@typescript/typescript6\";\nimport { checkSource } from \"../check.js\";\nimport type { CompileDiagnostic } from \"../compiler/sfc.js\";\nimport { componentTypeDeclarationMarker, generateTypes } from \"../types.js\";\nimport { resolveConfigSources } from \"./config.js\";\n\nconst componentTypesManifest = \"component-types.json\";\nconst componentTypeSuffix = \".d.meeko.ts\";\n\ninterface ComponentTypesOwnership {\n readonly version: 1;\n readonly files: readonly string[];\n}\n\nfunction inside(root: string, target: string): boolean {\n const path = relative(root, target);\n return path === \"\" || (path !== \"..\" && !path.startsWith(`..${sep}`) && !isAbsolute(path));\n}\n\nfunction ownedTypePath(typesRoot: string, file: string): string | undefined {\n const path = relative(typesRoot, resolve(file));\n if (!path || path === \"..\" || path.startsWith(`..${sep}`) || isAbsolute(path) || !path.endsWith(componentTypeSuffix)) return undefined;\n return path.replaceAll(\"\\\\\", \"/\");\n}\n\nasync function readTypeOwnership(file: string): Promise<readonly string[] | undefined> {\n let source: string;\n try { source = await readFile(file, \"utf8\"); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return undefined;\n throw error;\n }\n let value: unknown;\n try { value = JSON.parse(source) as unknown; }\n catch (error) { throw new Error(`Invalid Meeko component type ownership manifest: ${file}`, { cause: error }); }\n if (!value || typeof value !== \"object\" || (value as Partial<ComponentTypesOwnership>).version !== 1 ||\n !Array.isArray((value as Partial<ComponentTypesOwnership>).files) ||\n (value as Partial<ComponentTypesOwnership>).files!.some((entry) => typeof entry !== \"string\" || !entry)) {\n throw new Error(`Invalid Meeko component type ownership manifest: ${file}`);\n }\n return (value as ComponentTypesOwnership).files;\n}\n\nfunction generatedComponentDeclaration(source: string): boolean {\n if (source.startsWith(`${componentTypeDeclarationMarker}\\n`) || source.startsWith(`${componentTypeDeclarationMarker}\\r\\n`)) return true;\n // Releases before the ownership manifest did not preserve a comment marker.\n // Parse their complete generated runtime surface so comments and strings cannot impersonate it.\n const file = ts.createSourceFile(\"component.d.meeko.ts\", source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const modifiers = (node: { readonly modifiers?: ts.NodeArray<ts.ModifierLike> }): readonly ts.ModifierLike[] => node.modifiers ?? [];\n const exportedDeclaration = (node: { readonly modifiers?: ts.NodeArray<ts.ModifierLike> }): boolean =>\n modifiers(node).some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) &&\n modifiers(node).some((modifier) => modifier.kind === ts.SyntaxKind.DeclareKeyword);\n const typeName = (node: ts.TypeNode | undefined): string | undefined => {\n if (!node || !ts.isTypeReferenceNode(node)) return undefined;\n if (ts.isIdentifier(node.typeName)) return node.typeName.text;\n return ts.isIdentifier(node.typeName.left) && ts.isIdentifier(node.typeName.right)\n ? `${node.typeName.left.text}.${node.typeName.right.text}` : undefined;\n };\n const generatedFunction = (name: string, expected: readonly (readonly [string, string])[]): boolean =>\n file.statements.some((statement) => ts.isFunctionDeclaration(statement) && statement.name?.text === name &&\n exportedDeclaration(statement) && expected.every(([parameterName, parameterType], index) => {\n const parameter = statement.parameters[index];\n return parameter !== undefined && ts.isIdentifier(parameter.name) && parameter.name.text === parameterName && typeName(parameter.type) === parameterType;\n }));\n const internalImport = file.statements.some((statement) => {\n if (!ts.isImportDeclaration(statement) || !ts.isStringLiteral(statement.moduleSpecifier) ||\n statement.moduleSpecifier.text !== \"@meekojs/meeko/internal\") return false;\n const bindings = statement.importClause?.namedBindings;\n return bindings !== undefined && ts.isNamespaceImport(bindings) && bindings.name.text === \"__meeko\";\n });\n const componentProps = file.statements.some((statement) => ts.isTypeAliasDeclaration(statement) &&\n statement.name.text === \"ComponentProps\" && modifiers(statement).some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword));\n const css = file.statements.some((statement) => ts.isVariableStatement(statement) && exportedDeclaration(statement) &&\n statement.declarationList.declarations.some((declaration) => ts.isIdentifier(declaration.name) && declaration.name.text === \"css\" &&\n declaration.initializer !== undefined && ts.isStringLiteral(declaration.initializer)));\n return internalImport && componentProps && css &&\n generatedFunction(\"renderWithState\", [[\"__inputProps\", \"ComponentProps\"]]) &&\n generatedFunction(\"renderToString\", [[\"__inputProps\", \"ComponentProps\"]]) &&\n generatedFunction(\"hydrate\", [[\"root\", \"Element\"], [\"__inputProps\", \"ComponentProps\"]]) &&\n generatedFunction(\"hydrateScope\", [[\"__scope\", \"__meeko.DomScope\"], [\"__inputProps\", \"ComponentProps\"]]);\n}\n\n/** Adopts only orphaned declarations with a current marker or the complete legacy generator fingerprint. */\nasync function adoptGeneratedTypes(projectRoot: string, typesRoot: string): Promise<readonly string[]> {\n const files: string[] = [];\n async function walk(directory: string): Promise<void> {\n for (const entry of await readdir(directory, { withFileTypes: true })) {\n const file = join(directory, entry.name);\n if (entry.isDirectory()) await walk(file);\n else if (entry.isFile() && entry.name.endsWith(componentTypeSuffix) && generatedComponentDeclaration(await readFile(file, \"utf8\"))) {\n const path = ownedTypePath(typesRoot, file);\n if (!path) continue;\n const source = resolve(projectRoot, `${path.slice(0, -componentTypeSuffix.length)}.meeko`);\n try { await access(source); }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") { files.push(path); continue; }\n throw error;\n }\n }\n }\n }\n await walk(typesRoot);\n return files;\n}\n\n/** Removes only declarations recorded by a previous successful generation. */\nasync function reconcileOwnedTypes(projectRoot: string, outputs: readonly string[]): Promise<void> {\n const root = resolve(projectRoot);\n const typesRoot = resolve(root, \".meeko\", \"types\");\n const manifest = resolve(root, \".meeko\", \"manifests\", componentTypesManifest);\n const current = new Set(outputs.map((output) => ownedTypePath(typesRoot, output)).filter((path): path is string => path !== undefined));\n const recorded = await readTypeOwnership(manifest);\n await mkdir(typesRoot, { recursive: true });\n const actualRoot = await realpath(root);\n const actualTypesRoot = await realpath(typesRoot);\n if (!inside(actualRoot, actualTypesRoot)) throw new Error(`Meeko type directory escapes project root: ${typesRoot}`);\n const previous = recorded ?? await adoptGeneratedTypes(root, typesRoot);\n for (const path of previous) {\n const target = resolve(typesRoot, path);\n if (path.includes(\"\\\\\") || ownedTypePath(typesRoot, target) !== path) {\n throw new Error(`Invalid owned Meeko component type path: ${path}`);\n }\n if (current.has(path)) continue;\n let actualTarget: string;\n try { actualTarget = await realpath(target); }\n catch (error) { if ((error as NodeJS.ErrnoException).code === \"ENOENT\") continue; throw error; }\n if (!inside(actualTypesRoot, actualTarget)) throw new Error(`Owned Meeko component type escapes generated directory: ${target}`);\n await unlink(target);\n }\n const body = `${JSON.stringify({ version: 1, files: [...current].sort() } satisfies ComponentTypesOwnership, null, 2)}\\n`;\n await mkdir(dirname(manifest), { recursive: true });\n try { if (await readFile(manifest, \"utf8\") === body) return; }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n await writeFile(manifest, body, \"utf8\");\n}\n\nasync function appMeekoFiles(projectRoot: string): Promise<string[]> {\n const root = resolve(projectRoot);\n const files: string[] = [];\n async function walk(directory: string): Promise<void> {\n let entries;\n try { entries = await readdir(directory, { withFileTypes: true }); }\n catch (error) { if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return; throw error; }\n for (const entry of entries) {\n const path = join(directory, entry.name);\n if (entry.isDirectory()) await walk(path);\n else if (entry.isFile() && entry.name.endsWith(\".meeko\")) files.push(path);\n }\n }\n for (const source of await resolveConfigSources(root)) {\n await walk(join(source.root, \"app\", \"pages\"));\n await walk(join(source.root, \"app\", \"layouts\"));\n await walk(join(source.root, \"app\", \"components\"));\n for (const file of [join(source.root, \"app\", \"app.meeko\"), join(source.root, \"app\", \"error.meeko\")]) {\n try { await readFile(file); files.push(file); }\n catch (error) { if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error; }\n }\n }\n return files.sort();\n}\n\n/** Checks every discovered application component, including new pages and layouts. */\nexport async function checkApp(projectRoot: string): Promise<CompileDiagnostic[]> {\n const diagnostics: CompileDiagnostic[] = [];\n for (const file of await appMeekoFiles(projectRoot)) diagnostics.push(...await checkSource(await readFile(file, \"utf8\"), file));\n return diagnostics;\n}\n\n/** Mirrors app component declarations into the project's virtual type tree. */\nexport async function generateAppTypes(projectRoot: string): Promise<string[]> {\n const root = resolve(projectRoot);\n const outputs = new Set<string>();\n for (const file of await appMeekoFiles(root)) {\n for (const output of await generateTypes(await readFile(file, \"utf8\"), file)) outputs.add(output);\n }\n const generated = [...outputs].sort();\n await reconcileOwnedTypes(root, generated);\n return generated;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ /** Prepares generated entries, declarations and editor projects without checking sources. */
2
+ export declare function prepareFrameworkTypes(projectRoot: string): Promise<void>;
3
+ /** Generates declarations, checks .meeko sources, then checks app/server/shared TS separately. */
4
+ export declare function checkFrameworkProject(projectRoot: string): Promise<void>;
@@ -0,0 +1,42 @@
1
+ import { dirname, join, resolve } from "node:path";
2
+ import { createRequire } from "node:module";
3
+ import { execFile } from "node:child_process";
4
+ import { promisify } from "node:util";
5
+ import { checkApp } from "./check-app.js";
6
+ import { prepareProject } from "./project.js";
7
+ import { prepareFrameworkTypeDeclarations, projectNames } from "./type-declarations.js";
8
+ const execute = promisify(execFile);
9
+ const require = createRequire(import.meta.url);
10
+ async function checkTypeScript(configs) {
11
+ const compiler = join(dirname(require.resolve("typescript/package.json")), "bin", "tsc");
12
+ for (const config of configs) {
13
+ try {
14
+ await execute(process.execPath, [compiler, "-p", config, "--noEmit"]);
15
+ }
16
+ catch (error) {
17
+ const failure = error;
18
+ throw new Error(`TypeScript check failed (${config}):\n${failure.stdout ?? ""}${failure.stderr ?? ""}`);
19
+ }
20
+ }
21
+ }
22
+ /** Prepares generated entries, declarations and editor projects without checking sources. */
23
+ export async function prepareFrameworkTypes(projectRoot) {
24
+ const root = resolve(projectRoot);
25
+ await prepareProject(root);
26
+ await prepareFrameworkTypeDeclarations(root);
27
+ }
28
+ /** Generates declarations, checks .meeko sources, then checks app/server/shared TS separately. */
29
+ export async function checkFrameworkProject(projectRoot) {
30
+ const root = resolve(projectRoot);
31
+ await prepareFrameworkTypes(root);
32
+ const sourceDiagnostics = await checkApp(root);
33
+ if (sourceDiagnostics.length > 0) {
34
+ throw new Error(sourceDiagnostics.map((diagnostic) => {
35
+ const { line, column } = diagnostic.location;
36
+ return `${diagnostic.filename}:${line}:${column} ${diagnostic.code}: ${diagnostic.message}`;
37
+ }).join("\n"));
38
+ }
39
+ const configs = projectNames.map((name) => join(root, ".meeko", `tsconfig.${name}.json`));
40
+ await checkTypeScript(configs);
41
+ }
42
+ //# sourceMappingURL=check-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-project.js","sourceRoot":"","sources":["../../src/framework/check-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAExF,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACpC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,KAAK,UAAU,eAAe,CAAC,OAA0B;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACzF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QAAC,CAAC;QAC9E,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAqD,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,OAAO,OAAO,CAAC,MAAM,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;AACH,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,gCAAgC,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YACnD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC;YAC7C,OAAO,GAAG,UAAU,CAAC,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;QAC9F,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC;IAC1F,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC","sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { checkApp } from \"./check-app.js\";\nimport { prepareProject } from \"./project.js\";\nimport { prepareFrameworkTypeDeclarations, projectNames } from \"./type-declarations.js\";\n\nconst execute = promisify(execFile);\nconst require = createRequire(import.meta.url);\n\nasync function checkTypeScript(configs: readonly string[]): Promise<void> {\n const compiler = join(dirname(require.resolve(\"typescript/package.json\")), \"bin\", \"tsc\");\n for (const config of configs) {\n try { await execute(process.execPath, [compiler, \"-p\", config, \"--noEmit\"]); }\n catch (error) {\n const failure = error as Error & { stdout?: string; stderr?: string };\n throw new Error(`TypeScript check failed (${config}):\\n${failure.stdout ?? \"\"}${failure.stderr ?? \"\"}`);\n }\n }\n}\n\n/** Prepares generated entries, declarations and editor projects without checking sources. */\nexport async function prepareFrameworkTypes(projectRoot: string): Promise<void> {\n const root = resolve(projectRoot);\n await prepareProject(root);\n await prepareFrameworkTypeDeclarations(root);\n}\n\n/** Generates declarations, checks .meeko sources, then checks app/server/shared TS separately. */\nexport async function checkFrameworkProject(projectRoot: string): Promise<void> {\n const root = resolve(projectRoot);\n await prepareFrameworkTypes(root);\n const sourceDiagnostics = await checkApp(root);\n if (sourceDiagnostics.length > 0) {\n throw new Error(sourceDiagnostics.map((diagnostic) => {\n const { line, column } = diagnostic.location;\n return `${diagnostic.filename}:${line}:${column} ${diagnostic.code}: ${diagnostic.message}`;\n }).join(\"\\n\"));\n }\n const configs = projectNames.map((name) => join(root, \".meeko\", `tsconfig.${name}.json`));\n await checkTypeScript(configs);\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { DomScope } from "../dom.js";
2
2
  import type { PageSchema } from "./page.js";
3
+ import type { RouteMiddleware } from "./middleware.js";
3
4
  import type { NavigationContext, Navigator, RouteRecord } from "./router.js";
4
5
  import { StateStore } from "./state.js";
5
6
  /** The public shape emitted by the .meeko compiler. */
@@ -27,6 +28,8 @@ export interface ClientAppOptions {
27
28
  readonly payload: string | unknown;
28
29
  readonly loadPage: (file: string) => Promise<ClientComponent>;
29
30
  readonly loadRoute?: (file: string) => Promise<ClientRoute>;
31
+ /** Runs the same route guards as SSR before a browser navigation fetch. */
32
+ readonly loadMiddleware?: () => Promise<readonly RouteMiddleware[]>;
30
33
  /** Fetches public loader data from the SSR handler during browser navigation. */
31
34
  readonly serverData?: boolean;
32
35
  readonly fetch?: typeof fetch;