@alignable/bifrost 0.0.14 → 0.0.15

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 (136) hide show
  1. package/dist/chunk-4DL7N7Y5.js +17 -0
  2. package/dist/chunk-4DL7N7Y5.js.map +1 -0
  3. package/dist/chunk-ABW2IXO4.js +936 -0
  4. package/dist/chunk-ABW2IXO4.js.map +1 -0
  5. package/dist/chunk-AIK6VRNF.js +20 -0
  6. package/dist/chunk-AIK6VRNF.js.map +1 -0
  7. package/dist/chunk-CXNEKD7R.js +9 -0
  8. package/dist/chunk-CXNEKD7R.js.map +1 -0
  9. package/dist/chunk-EYYCKU6F.js +11 -0
  10. package/dist/chunk-EYYCKU6F.js.map +1 -0
  11. package/dist/chunk-LEUA73GT.js +26 -0
  12. package/dist/chunk-LEUA73GT.js.map +1 -0
  13. package/dist/chunk-RQ34EW7E.js +13 -0
  14. package/dist/chunk-RQ34EW7E.js.map +1 -0
  15. package/dist/index.d.ts +13 -7
  16. package/dist/index.js +8 -1
  17. package/dist/index.js.map +1 -0
  18. package/dist/internal-fe09ebc7.d.ts +72 -0
  19. package/dist/proxy/pages/+config.d.ts +2 -2
  20. package/dist/proxy/pages/+config.js +17 -12
  21. package/dist/proxy/pages/+config.js.map +1 -0
  22. package/dist/proxy/pages/Page.d.ts +3 -2
  23. package/dist/proxy/pages/Page.js +7 -3
  24. package/dist/proxy/pages/Page.js.map +1 -0
  25. package/dist/proxy/pages/onBeforeRender.d.ts +9 -3
  26. package/dist/proxy/pages/onBeforeRender.js +9 -5
  27. package/dist/proxy/pages/onBeforeRender.js.map +1 -0
  28. package/dist/proxy/pages/onRenderClient.d.ts +9 -3
  29. package/dist/proxy/pages/onRenderClient.js +59 -51
  30. package/dist/proxy/pages/onRenderClient.js.map +1 -0
  31. package/dist/proxy/pages/onRenderHtml.d.ts +11 -4
  32. package/dist/proxy/pages/onRenderHtml.js +54 -39
  33. package/dist/proxy/pages/onRenderHtml.js.map +1 -0
  34. package/dist/proxy/pages/restorationVisit/+config.d.ts +2 -2
  35. package/dist/proxy/pages/restorationVisit/+config.js +19 -14
  36. package/dist/proxy/pages/restorationVisit/+config.js.map +1 -0
  37. package/dist/proxy/pages/restorationVisit/onRenderClient.d.ts +9 -3
  38. package/dist/proxy/pages/restorationVisit/onRenderClient.js +49 -39
  39. package/dist/proxy/pages/restorationVisit/onRenderClient.js.map +1 -0
  40. package/dist/proxy/pages/restorationVisit/route.d.ts +3 -2
  41. package/dist/proxy/pages/restorationVisit/route.js +7 -3
  42. package/dist/proxy/pages/restorationVisit/route.js.map +1 -0
  43. package/dist/renderer/+config.d.ts +2 -5
  44. package/dist/renderer/+config.js +25 -14
  45. package/dist/renderer/+config.js.map +1 -0
  46. package/dist/renderer/_error/Page.d.ts +2 -3
  47. package/dist/renderer/_error/Page.js +11 -12
  48. package/dist/renderer/_error/Page.js.map +1 -0
  49. package/dist/renderer/getConfigOrPageContext.d.ts +9 -4
  50. package/dist/renderer/getConfigOrPageContext.js +7 -6
  51. package/dist/renderer/getConfigOrPageContext.js.map +1 -0
  52. package/dist/renderer/onBeforeRoute.d.ts +3 -2
  53. package/dist/renderer/onBeforeRoute.js +28 -20
  54. package/dist/renderer/onBeforeRoute.js.map +1 -0
  55. package/dist/renderer/onRenderClient.d.ts +9 -3
  56. package/dist/renderer/onRenderClient.js +53 -38
  57. package/dist/renderer/onRenderClient.js.map +1 -0
  58. package/dist/renderer/onRenderHtml.d.ts +11 -4
  59. package/dist/renderer/onRenderHtml.js +43 -23
  60. package/dist/renderer/onRenderHtml.js.map +1 -0
  61. package/dist/renderer/usePageContext.d.ts +7 -4
  62. package/dist/renderer/usePageContext.js +10 -21
  63. package/dist/renderer/usePageContext.js.map +1 -0
  64. package/dist/renderer/utils/buildHead.d.ts +9 -4
  65. package/dist/renderer/utils/buildHead.js +7 -10
  66. package/dist/renderer/utils/buildHead.js.map +1 -0
  67. package/dist/renderer/utils/getGlobalObject.d.ts +3 -2
  68. package/dist/renderer/utils/getGlobalObject.js +7 -8
  69. package/dist/renderer/utils/getGlobalObject.js.map +1 -0
  70. package/package.json +5 -4
  71. package/dist/index.d.ts.map +0 -1
  72. package/dist/lib/PageShell.d.ts +0 -7
  73. package/dist/lib/PageShell.d.ts.map +0 -1
  74. package/dist/lib/PageShell.js +0 -6
  75. package/dist/lib/getElementAttributes.d.ts +0 -2
  76. package/dist/lib/getElementAttributes.d.ts.map +0 -1
  77. package/dist/lib/getElementAttributes.js +0 -7
  78. package/dist/lib/renderReact.d.ts +0 -3
  79. package/dist/lib/renderReact.d.ts.map +0 -1
  80. package/dist/lib/renderReact.js +0 -14
  81. package/dist/lib/turbolinks/adapter.d.ts +0 -17
  82. package/dist/lib/turbolinks/adapter.d.ts.map +0 -1
  83. package/dist/lib/turbolinks/adapter.js +0 -1
  84. package/dist/lib/turbolinks/browser_adapter.d.ts +0 -28
  85. package/dist/lib/turbolinks/browser_adapter.d.ts.map +0 -1
  86. package/dist/lib/turbolinks/browser_adapter.js +0 -68
  87. package/dist/lib/turbolinks/controller.d.ts +0 -75
  88. package/dist/lib/turbolinks/controller.d.ts.map +0 -1
  89. package/dist/lib/turbolinks/controller.js +0 -219
  90. package/dist/lib/turbolinks/head_details.d.ts +0 -24
  91. package/dist/lib/turbolinks/head_details.d.ts.map +0 -1
  92. package/dist/lib/turbolinks/head_details.js +0 -97
  93. package/dist/lib/turbolinks/index.d.ts +0 -14
  94. package/dist/lib/turbolinks/index.d.ts.map +0 -1
  95. package/dist/lib/turbolinks/index.js +0 -55
  96. package/dist/lib/turbolinks/location.d.ts +0 -23
  97. package/dist/lib/turbolinks/location.d.ts.map +0 -1
  98. package/dist/lib/turbolinks/location.js +0 -75
  99. package/dist/lib/turbolinks/lruCache.d.ts +0 -8
  100. package/dist/lib/turbolinks/lruCache.d.ts.map +0 -1
  101. package/dist/lib/turbolinks/lruCache.js +0 -25
  102. package/dist/lib/turbolinks/mergeHead.d.ts +0 -2
  103. package/dist/lib/turbolinks/mergeHead.d.ts.map +0 -1
  104. package/dist/lib/turbolinks/mergeHead.js +0 -120
  105. package/dist/lib/turbolinks/progress_bar.d.ts +0 -24
  106. package/dist/lib/turbolinks/progress_bar.d.ts.map +0 -1
  107. package/dist/lib/turbolinks/progress_bar.js +0 -99
  108. package/dist/lib/turbolinks/types.d.ts +0 -7
  109. package/dist/lib/turbolinks/types.d.ts.map +0 -1
  110. package/dist/lib/turbolinks/types.js +0 -3
  111. package/dist/lib/turbolinks/util.d.ts +0 -18
  112. package/dist/lib/turbolinks/util.d.ts.map +0 -1
  113. package/dist/lib/turbolinks/util.js +0 -125
  114. package/dist/lib/turbolinks/visit.d.ts +0 -55
  115. package/dist/lib/turbolinks/visit.d.ts.map +0 -1
  116. package/dist/lib/turbolinks/visit.js +0 -163
  117. package/dist/proxy/pages/+config.d.ts.map +0 -1
  118. package/dist/proxy/pages/Page.d.ts.map +0 -1
  119. package/dist/proxy/pages/onBeforeRender.d.ts.map +0 -1
  120. package/dist/proxy/pages/onRenderClient.d.ts.map +0 -1
  121. package/dist/proxy/pages/onRenderHtml.d.ts.map +0 -1
  122. package/dist/proxy/pages/restorationVisit/+config.d.ts.map +0 -1
  123. package/dist/proxy/pages/restorationVisit/onRenderClient.d.ts.map +0 -1
  124. package/dist/proxy/pages/restorationVisit/route.d.ts.map +0 -1
  125. package/dist/renderer/+config.d.ts.map +0 -1
  126. package/dist/renderer/_error/Page.d.ts.map +0 -1
  127. package/dist/renderer/getConfigOrPageContext.d.ts.map +0 -1
  128. package/dist/renderer/onBeforeRoute.d.ts.map +0 -1
  129. package/dist/renderer/onRenderClient.d.ts.map +0 -1
  130. package/dist/renderer/onRenderHtml.d.ts.map +0 -1
  131. package/dist/renderer/usePageContext.d.ts.map +0 -1
  132. package/dist/renderer/utils/buildHead.d.ts.map +0 -1
  133. package/dist/renderer/utils/getGlobalObject.d.ts.map +0 -1
  134. package/dist/types/internal.d.ts +0 -64
  135. package/dist/types/internal.d.ts.map +0 -1
  136. package/dist/types/internal.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../lib/renderReact.ts","../lib/turbolinks/util.ts","../lib/turbolinks/mergeHead.ts","../lib/turbolinks/lruCache.ts","../lib/turbolinks/progress_bar.ts","../lib/turbolinks/browser_adapter.ts","../lib/turbolinks/location.ts","../lib/turbolinks/types.ts","../lib/turbolinks/visit.ts","../lib/turbolinks/controller.ts","../lib/turbolinks/index.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nimport { Root, createRoot, hydrateRoot } from \"react-dom/client\";\n\nlet root: Root;\n\nexport function renderReact(page: ReactNode, isHydration: boolean) {\n const container = document.getElementById(\"page-view\")!;\n if (isHydration) {\n root = hydrateRoot(container, page);\n } else {\n if (!root) {\n root = createRoot(container);\n }\n root.render(page);\n }\n}\n","export function array<T>(values: ArrayLike<T>): T[] {\n return Array.prototype.slice.call(values);\n}\n\nexport const closest = (() => {\n const html = document.documentElement;\n\n type MatchesSelector = (this: Element, selector: string) => boolean;\n const match: MatchesSelector =\n html.matches ||\n (html as any).webkitMatchesSelector ||\n (html as any).msMatchesSelector ||\n (html as any).mozMatchesSelector;\n\n type Closest = (this: Element, selector: string) => Element | null;\n const closest: Closest =\n html.closest ||\n function (selector: string) {\n let element: Element | null = this;\n while (element) {\n if (match.call(element, selector)) {\n return element;\n } else {\n element = element.parentElement;\n }\n }\n };\n\n return function (element: Element, selector: string) {\n return closest.call(element, selector);\n };\n})();\n\nexport function defer(callback: () => any) {\n setTimeout(callback, 1);\n}\n\nexport type DispatchOptions = {\n target: EventTarget;\n cancelable: boolean;\n data: any;\n};\n\nexport function dispatch(\n eventName: string,\n { target, cancelable, data }: Partial<DispatchOptions> = {}\n) {\n const event = document.createEvent(\"Events\") as Event & { data: any };\n event.initEvent(eventName, true, cancelable == true);\n event.data = data || {};\n\n // Fix setting `defaultPrevented` when `preventDefault()` is called\n // http://stackoverflow.com/questions/23349191/event-preventdefault-is-not-working-in-ie-11-for-custom-events\n if (event.cancelable && !preventDefaultSupported) {\n const { preventDefault } = event;\n event.preventDefault = function () {\n if (!this.defaultPrevented) {\n Object.defineProperty(this, \"defaultPrevented\", { get: () => true });\n }\n preventDefault.call(this);\n };\n }\n\n (target || document).dispatchEvent(event);\n return event;\n}\n\nconst preventDefaultSupported = (() => {\n const event = document.createEvent(\"Events\");\n event.initEvent(\"test\", true, true);\n event.preventDefault();\n return event.defaultPrevented;\n})();\n\nexport function unindent(\n strings: TemplateStringsArray,\n ...values: any[]\n): string {\n const lines = trimLeft(interpolate(strings, values)).split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\n\nfunction trimLeft(string: string) {\n return string.replace(/^\\n/, \"\");\n}\n\nfunction interpolate(strings: TemplateStringsArray, values: any[]) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value;\n }, \"\");\n}\n\nexport function uuid() {\n return Array.apply(null, { length: 36 } as any)\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n } else if (i == 14) {\n return \"4\";\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n } else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n })\n .join(\"\");\n}\n\nexport function createScriptElement(element: Element, cb?: () => void) {\n if (element.getAttribute(\"data-turbolinks-eval\") == \"false\") {\n return element;\n } else {\n const createdScriptElement = document.createElement(\"script\");\n createdScriptElement.textContent = element.textContent;\n // async false makes scripts run in-order. it wont block js execution (thankfully)\n // https://github.com/turbolinks/turbolinks/issues/282#issuecomment-355731712\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n if (cb) {\n createdScriptElement.addEventListener(\"load\", cb);\n }\n return createdScriptElement;\n }\n}\n\nexport function copyElementAttributes(\n destinationElement: Element,\n sourceElement: Element\n) {\n for (const { name, value } of array(sourceElement.attributes)) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction replaceElementWithElement(fromElement: Element, toElement: Element) {\n const parentElement = fromElement.parentElement;\n if (parentElement) {\n return parentElement.replaceChild(toElement, fromElement);\n }\n}\nexport function activateNewBodyScriptElements(\n newScriptElements: HTMLScriptElement[]\n) {\n for (const inertScriptElement of newScriptElements) {\n const activatedScriptElement = createScriptElement(inertScriptElement);\n replaceElementWithElement(inertScriptElement, activatedScriptElement);\n }\n}\n\nexport function focusFirstAutofocusableElement() {\n const element = document.body.querySelector(\"[autofocus]\");\n if (element && \"focus\" in element && typeof element.focus === \"function\") {\n element.focus();\n }\n}\n","import { createScriptElement } from \"./util\";\n\ninterface ElementDetails {\n tracked: boolean;\n}\nconst allHeadScriptsEverRun: { [outerHTML: string]: ElementDetails } = {};\nlet firstLoad = true;\nlet lastTrackedScriptSignature: string;\n\nexport async function mergeHead(\n head: HTMLHeadElement,\n trackScripts: boolean,\n reload: () => void\n) {\n const newHead = categorizeHead(head);\n const oldHead = categorizeHead(document.head);\n\n if (\n head\n .querySelector('meta[name=\"turbolinks-visit-control\"]')\n ?.getAttribute(\"content\") === \"reload\"\n ) {\n reload();\n }\n if (trackScripts) {\n lastTrackedScriptSignature =\n lastTrackedScriptSignature ||\n trackedElementSignature([...oldHead.scripts, ...oldHead.stylesheets]);\n if (\n lastTrackedScriptSignature !==\n trackedElementSignature([...newHead.scripts, ...newHead.stylesheets])\n ) {\n reload();\n }\n }\n\n if (firstLoad) {\n // TODO: messy code\n for (const element of oldHead.scripts) {\n allHeadScriptsEverRun[element.outerHTML] = {\n tracked: elementIsTracked(element),\n };\n }\n firstLoad = false;\n }\n\n copyNewHeadStylesheetElements(newHead.stylesheets, oldHead.stylesheets);\n removeCurrentHeadProvisionalElements(oldHead.provisional);\n copyNewHeadProvisionalElements(newHead.provisional);\n\n return new Promise<void>((resolve) => {\n copyNewHeadScriptElements(newHead.scripts, resolve);\n });\n}\n\nfunction trackedElementSignature(scripts: Element[]) {\n return scripts\n .filter(elementIsTracked)\n .map((s) => s.outerHTML)\n .join();\n}\n\nfunction copyNewHeadStylesheetElements(next: Element[], prev: Element[]) {\n const existing = prev.map((s) => s.outerHTML);\n for (const element of next) {\n if (!existing.includes(element.outerHTML)) {\n document.head.appendChild(element);\n }\n }\n}\n\nfunction copyNewHeadScriptElements(\n next: Element[],\n onScriptsLoaded: () => void\n) {\n let blockingLoaded: boolean[] = [];\n function dispatch() {\n onScriptsLoaded();\n }\n for (const element of next as HTMLScriptElement[]) {\n const runBefore = element.outerHTML in allHeadScriptsEverRun;\n if (!runBefore) {\n let cb;\n if (!element.defer && element.src) {\n const idx = blockingLoaded.length;\n cb = () => {\n blockingLoaded[idx] = true;\n if (blockingLoaded.every((v) => v)) {\n dispatch();\n }\n };\n blockingLoaded.push(false);\n }\n document.head.appendChild(createScriptElement(element, cb));\n allHeadScriptsEverRun[element.outerHTML] = {\n tracked: elementIsTracked(element),\n };\n }\n }\n if (blockingLoaded.length === 0) {\n // raf waits for react to finish\n requestAnimationFrame(dispatch);\n }\n}\n\nfunction removeCurrentHeadProvisionalElements(prev: Element[]) {\n for (const element of prev) {\n document.head.removeChild(element);\n }\n}\n\nfunction copyNewHeadProvisionalElements(next: Element[]) {\n for (const element of next) {\n document.head.appendChild(element);\n }\n}\n\nfunction elementIsTracked(element: Element) {\n return element.getAttribute(\"data-turbolinks-track\") == \"reload\";\n}\n\nfunction elementIsScript(element: Element) {\n const tagName = element.tagName.toLowerCase();\n return tagName == \"script\";\n}\n\nfunction elementIsStylesheet(element: Element) {\n const tagName = element.tagName.toLowerCase();\n return (\n tagName == \"style\" ||\n (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n );\n}\n\nfunction categorizeHead(head: ParentNode) {\n const scripts = [];\n const stylesheets = [];\n const provisional = [];\n for (const element of head.children) {\n if (elementIsScript(element)) {\n scripts.push(element);\n } else if (elementIsStylesheet(element)) {\n stylesheets.push(element);\n } else {\n provisional.push(element);\n }\n }\n return { scripts, stylesheets, provisional };\n}\n","export class LruCache<T> {\n private values: Map<string, T> = new Map<string, T>();\n private maxEntries;\n\n constructor(maxEntries: number) {\n this.maxEntries = maxEntries;\n }\n\n public get(key: string): T | undefined {\n const hasKey = this.values.has(key);\n let entry: T | undefined;\n if (hasKey) {\n // peek the entry, re-insert for LRU strategy\n entry = this.values.get(key)!;\n this.values.delete(key);\n this.values.set(key, entry);\n }\n\n return entry;\n }\n\n public put(key: string, value: T) {\n if (this.values.size >= this.maxEntries) {\n // least-recently used cache eviction strategy\n const keyToDelete = this.values.keys().next().value;\n\n this.values.delete(keyToDelete);\n }\n\n this.values.set(key, value);\n }\n}\n","import { unindent } from \"./util\";\n\nexport class ProgressBar {\n static animationDuration = 300; /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbolinks-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 9999;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${\n ProgressBar.animationDuration / 2\n }ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `;\n }\n\n readonly stylesheetElement = this.createStylesheetElement();\n readonly progressElement = this.createProgressElement();\n\n hiding = false;\n trickleInterval?: number;\n value = 0;\n visible = false;\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installStylesheetElement();\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value: number) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(\n this.stylesheetElement,\n document.head.firstChild\n );\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback: () => void) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(\n this.trickle,\n ProgressBar.animationDuration\n );\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n };\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n return element;\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbolinks-progress-bar\";\n return element;\n }\n}\n","import { Adapter } from \"./adapter\";\nimport { Controller } from \"./controller\";\nimport { Locatable } from \"./location\";\nimport { ProgressBar } from \"./progress_bar\";\nimport { Action } from \"./types\";\nimport { Visit } from \"./visit\";\n\nexport class BrowserAdapter implements Adapter {\n readonly controller: Controller;\n readonly progressBar = new ProgressBar();\n\n progressBarTimeout?: number;\n\n constructor(controller: Controller) {\n this.controller = controller;\n }\n\n visitProposedToLocationWithAction(location: Locatable, action: Action) {\n this.controller.startVisitToLocationWithAction(\n location,\n action,\n );\n }\n\n visitStarted(visit: Visit) {\n visit.issueRequest();\n visit.changeHistory();\n visit.loadCachedSnapshot();\n }\n\n visitRequestStarted(visit: Visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestProgressed(visit: Visit) {\n this.progressBar.setValue(visit.progress);\n }\n\n visitRequestCompleted(visit: Visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit: Visit, statusCode: number) {\n switch (statusCode) {\n // TODO\n // case SystemStatusCode.networkFailure:\n // case SystemStatusCode.timeoutFailure:\n // case SystemStatusCode.contentTypeMismatch:\n // return this.reload()\n default:\n return visit.loadResponse();\n }\n }\n\n visitRequestFinished(visit: Visit) {\n this.hideProgressBar();\n }\n\n visitCompleted(visit: Visit) {\n }\n\n pageInvalidated() {\n this.reload();\n }\n\n visitFailed(visit: Visit) {}\n\n visitRendered(visit: Visit) {}\n\n // Private\n\n showProgressBarAfterDelay() {\n this.progressBarTimeout = window.setTimeout(\n this.showProgressBar,\n this.controller.progressBarDelay\n );\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n };\n\n hideProgressBar() {\n this.progressBar.hide();\n if (this.progressBarTimeout != null) {\n window.clearTimeout(this.progressBarTimeout);\n delete this.progressBarTimeout;\n }\n }\n\n reload() {\n window.location.reload();\n }\n}\n","export type Locatable = Location | string;\n\nexport class Location {\n static get currentLocation() {\n return this.wrap(window.location.toString());\n }\n\n static wrap(locatable: Locatable): Location;\n static wrap(locatable?: Locatable | null): Location | undefined;\n static wrap(locatable: Locatable) {\n if (typeof locatable == \"string\") {\n return new this(locatable);\n } else if (locatable != null) {\n return locatable;\n }\n }\n\n readonly absoluteURL: string;\n readonly requestURL: string;\n readonly anchor?: string;\n\n constructor(url: string) {\n const linkWithAnchor = document.createElement(\"a\");\n linkWithAnchor.href = url;\n\n this.absoluteURL = linkWithAnchor.href;\n\n const anchorLength = linkWithAnchor.hash.length;\n if (anchorLength < 2) {\n this.requestURL = this.absoluteURL;\n } else {\n this.requestURL = this.absoluteURL.slice(0, -anchorLength);\n this.anchor = linkWithAnchor.hash.slice(1);\n }\n }\n\n getOrigin() {\n return this.absoluteURL.split(\"/\", 3).join(\"/\");\n }\n\n getPath() {\n return (this.requestURL.match(/\\/\\/[^/]*(\\/[^?;]*)/) || [])[1] || \"/\";\n }\n\n getPathComponents() {\n return this.getPath().split(\"/\").slice(1);\n }\n\n getLastPathComponent() {\n return this.getPathComponents().slice(-1)[0];\n }\n\n getExtension() {\n return (this.getLastPathComponent().match(/\\.[^.]*$/) || [])[0] || \"\";\n }\n\n isHTML() {\n return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/);\n }\n\n isPrefixedBy(location: Location): boolean {\n const prefixURL = getPrefixURL(location);\n return (\n this.isEqualTo(location) || stringStartsWith(this.absoluteURL, prefixURL)\n );\n }\n\n isEqualTo(location?: Location) {\n return location && this.absoluteURL === location.absoluteURL;\n }\n\n toCacheKey() {\n return this.requestURL;\n }\n\n toJSON() {\n return this.absoluteURL;\n }\n\n toString() {\n return this.absoluteURL;\n }\n\n valueOf() {\n return this.absoluteURL;\n }\n}\n\nfunction getPrefixURL(location: Location) {\n return addTrailingSlash(location.getOrigin() + location.getPath());\n}\n\nfunction addTrailingSlash(url: string) {\n return stringEndsWith(url, \"/\") ? url : url + \"/\";\n}\n\nfunction stringStartsWith(string: string, prefix: string) {\n return string.slice(0, prefix.length) === prefix;\n}\n\nfunction stringEndsWith(string: string, suffix: string) {\n return string.slice(-suffix.length) === suffix;\n}\n","export type Action = \"advance\" | \"replace\" | \"restore\";\n\nexport function isAction(action: any): action is Action {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nexport type Position = { x: number; y: number };\n","import { navigate } from \"vite-plugin-ssr/client/router\";\nimport { Adapter } from \"./adapter\";\nimport { Controller } from \"./controller.js\";\nimport { Location } from \"./location\";\nimport { Action } from \"./types\";\nimport { uuid } from \"./util\";\n\nexport enum TimingMetric {\n visitStart = \"visitStart\",\n requestStart = \"requestStart\",\n requestEnd = \"requestEnd\",\n visitEnd = \"visitEnd\",\n}\n\nexport type TimingMetrics = Partial<{ [metric in TimingMetric]: any }>;\n\nexport enum VisitState {\n initialized = \"initialized\",\n started = \"started\",\n canceled = \"canceled\",\n failed = \"failed\",\n completed = \"completed\",\n}\n\nexport class Visit {\n readonly controller: Controller;\n readonly action: Action;\n readonly adapter: Adapter;\n readonly identifier = uuid();\n readonly restorationIdentifier: string;\n readonly timingMetrics: TimingMetrics = {};\n\n frame?: number;\n location: Location;\n progress = 0;\n referrer?: Location;\n redirectedToLocation?: Location;\n snapshotCached = false;\n state = VisitState.initialized;\n\n requestInFlight = false;\n renderFn?: () => Promise<void>;\n\n constructor(\n controller: Controller,\n location: Location,\n action: Action,\n restorationIdentifier: string = uuid()\n ) {\n this.controller = controller;\n this.location = location;\n this.action = action;\n this.adapter = controller.adapter;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n this.requestInFlight = false;\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.adapter.visitCompleted(this);\n this.controller.visitCompleted(this);\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n\n changeHistory() {\n // no-op since issueRequest calls navigate which handles all of this already\n return;\n }\n\n issueRequest() {\n if (!this.requestInFlight) {\n if (this.shouldIssueRequest()) {\n const url = new URL(\n this.location.toString(),\n this.location.getOrigin()\n );\n navigate(url.pathname + url.hash + url.search, {\n overwriteLastHistoryEntry: this.action === \"replace\",\n }).catch(console.error);\n this.progress = 0;\n this.requestInFlight = true;\n }\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.controller.getCachedSnapshotForLocation(\n this.location\n );\n if (snapshot) {\n if (this.action == \"restore\") {\n return snapshot;\n }\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\n }\n\n loadCachedSnapshot() {\n // no-op since issueRequest calls navigate which handles all of this already\n return;\n }\n\n loadResponse() {\n this.render(async () => {\n if (!this.renderFn)\n throw new Error(\"Render details not set before rendering\");\n this.cacheSnapshot();\n await this.renderFn();\n this.complete();\n });\n }\n\n // HTTP request delegate\n\n /*\n requestStarted() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n requestProgressed(progress: number) {\n this.progress = progress;\n if (this.adapter.visitRequestProgressed) {\n this.adapter.visitRequestProgressed(this);\n }\n }\n\n requestCompletedWithResponse(\n response: string,\n redirectedToLocation?: Location\n ) {\n this.response = response;\n this.redirectedToLocation = redirectedToLocation;\n this.adapter.visitRequestCompleted(this);\n }\n\n requestFailedWithStatusCode(statusCode: number, response?: string) {\n this.response = response;\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n\n requestFinished() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n */\n\n // Instrumentation\n\n recordTimingMetric(metric: TimingMetric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics(): TimingMetrics {\n return { ...this.timingMetrics };\n }\n\n // Private\n\n shouldIssueRequest() {\n return this.action == \"restore\" ? !this.hasCachedSnapshot() : true;\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.controller.cacheSnapshot();\n this.snapshotCached = true;\n }\n }\n\n render(callback: () => Promise<void>) {\n this.cancelRender();\n this.frame = requestAnimationFrame(() => {\n delete this.frame;\n callback.call(this);\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n","import { LruCache } from \"./lruCache\";\nimport { Adapter } from \"./adapter\";\nimport { BrowserAdapter } from \"./browser_adapter\";\nimport { Location, Locatable } from \"./location\";\nimport { Action, isAction } from \"./types\";\nimport { closest, defer, dispatch, uuid } from \"./util\";\nimport { Visit } from \"./visit\";\n\nexport type TimingData = {};\nexport type VisitOptions = { action: Action };\n\nexport interface Snapshot {\n bodyEl: Element;\n headEl: Element;\n pageContext: any;\n}\n\nexport class Controller {\n adapter: Adapter = new BrowserAdapter(this);\n\n cache = new LruCache<Snapshot>(10);\n currentVisit?: Visit;\n enabled = true;\n lastRenderedLocation?: Location;\n location!: Location;\n progressBarDelay = 500;\n restorationIdentifier!: string; // This only exists for compatibility with iOS\n started = false;\n pageContext: any;\n\n start() {\n if (!this.started) {\n // TODO: delete document.body in this file. We are doing this to pre-empt VPS interceptor.\n // https://github.com/brillout/vite-plugin-ssr/issues/918 fixes this.\n document.body.addEventListener(\"click\", this.clickCaptured, true);\n this.location = Location.currentLocation;\n this.restorationIdentifier = uuid();\n this.lastRenderedLocation = this.location;\n this.started = true;\n this.enabled = true;\n }\n }\n\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n document.body.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clearCache() {\n this.cache = new LruCache(10);\n }\n\n visit(location: Locatable, options: Partial<VisitOptions> = {}) {\n location = Location.wrap(location);\n if (this.applicationAllowsVisitingLocation(location)) {\n if (this.locationIsVisitable(location)) {\n const action = options.action || \"advance\";\n this.adapter.visitProposedToLocationWithAction(location, action);\n } else {\n window.location.href = location.toString();\n }\n }\n }\n\n startVisitToLocationWithAction(\n location: Locatable,\n action: Action,\n restorationIdentifier?: string\n ) {\n this.startVisit(Location.wrap(location), action);\n }\n\n setProgressBarDelay(delay: number) {\n this.progressBarDelay = delay;\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifier(\n location: Locatable,\n restorationIdentifier: string\n ) {\n if (this.enabled) {\n this.location = Location.wrap(location);\n this.restorationIdentifier = restorationIdentifier;\n this.startVisit(this.location, \"restore\");\n } else {\n this.adapter.pageInvalidated();\n }\n }\n\n // Snapshot cache\n\n getCachedSnapshotForLocation(location: Locatable) {\n return this.cache.get(Location.wrap(location).toCacheKey());\n }\n\n shouldCacheSnapshot() {\n return (\n document.body.querySelector(\"#proxied-body\") &&\n document.head\n .querySelector(\"meta[name='turbolinks-no-cache']\")\n ?.getAttribute(\"content\") != \"no-cache\"\n );\n }\n\n cacheSnapshot() {\n if (this.shouldCacheSnapshot()) {\n this.notifyApplicationBeforeCachingSnapshot();\n const snapshot = {\n bodyEl: document.body.cloneNode(true),\n headEl: document.head.cloneNode(true),\n pageContext: this.pageContext,\n };\n const location = this.lastRenderedLocation || Location.currentLocation;\n defer(() => this.cache.put(location.toCacheKey(), snapshot));\n }\n }\n\n // View\n viewInvalidated() {\n this.adapter.pageInvalidated();\n }\n\n viewWillRender() {\n this.notifyApplicationBeforeRender();\n }\n\n viewRendered() {\n this.lastRenderedLocation = this.currentVisit!.location;\n this.notifyApplicationAfterRender();\n }\n\n // Event handlers\n\n clickCaptured = () => {\n document.body.removeEventListener(\"click\", this.clickBubbled, false);\n document.body.addEventListener(\"click\", this.clickBubbled, false);\n };\n\n clickBubbled = (event: MouseEvent) => {\n if (this.enabled && this.clickEventIsSignificant(event)) {\n const link = this.getVisitableLinkForTarget(event.target);\n if (link) {\n const location = this.getVisitableLocationForLink(link);\n if (\n location &&\n this.applicationAllowsFollowingLinkToLocation(link, location)\n ) {\n event.preventDefault();\n event.stopPropagation();\n const action = this.getActionForLink(link);\n this.visit(location, { action });\n }\n }\n }\n };\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link: Element, location: Location) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(\n link,\n location\n );\n return !event.defaultPrevented;\n }\n\n applicationAllowsVisitingLocation(location: Location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n\n notifyApplicationAfterClickingLinkToLocation(\n link: Element,\n location: Location\n ) {\n return dispatch(\"turbolinks:click\", {\n target: link,\n data: { url: location.absoluteURL },\n cancelable: true,\n });\n }\n\n notifyApplicationBeforeVisitingLocation(location: Location) {\n return dispatch(\"turbolinks:before-visit\", {\n data: { url: location.absoluteURL },\n cancelable: true,\n });\n }\n\n notifyApplicationAfterVisitingLocation(location: Location) {\n return dispatch(\"turbolinks:visit\", {\n data: { url: location.absoluteURL },\n });\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbolinks:before-cache\");\n }\n\n notifyApplicationBeforeRender() {\n return dispatch(\"turbolinks:before-render\");\n }\n\n notifyApplicationAfterRender() {\n return dispatch(\"turbolinks:render\");\n }\n\n notifyApplicationAfterPageLoad(timing: TimingData = {}) {\n return dispatch(\"turbolinks:load\", {\n data: { url: this.location.absoluteURL, timing },\n });\n }\n\n // Private\n\n startVisit(location: Location, action: Action) {\n if (this.currentVisit) {\n this.currentVisit.cancel();\n }\n this.currentVisit = this.createVisit(location, action);\n this.currentVisit.start();\n this.notifyApplicationAfterVisitingLocation(location);\n }\n\n createVisit(location: Location, action: Action): Visit {\n const visit = new Visit(this, location, action);\n visit.referrer = this.location;\n if (action === \"restore\") {\n // dont issue navigate() because VPS already did.\n visit.requestInFlight = true;\n }\n return visit;\n }\n\n visitCompleted(visit: Visit) {\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n clickEventIsSignificant(event: MouseEvent) {\n return !(\n (event.target && (event.target as any).isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n );\n }\n\n getVisitableLinkForTarget(target: EventTarget | null) {\n if (target instanceof Element && this.elementIsVisitable(target)) {\n return closest(target, \"a[href]:not([target]):not([download])\");\n }\n }\n\n getVisitableLocationForLink(link: Element) {\n const location = new Location(link.getAttribute(\"href\") || \"\");\n if (this.locationIsVisitable(location)) {\n return location;\n }\n }\n\n getActionForLink(link: Element): Action {\n const action = link.getAttribute(\"data-turbolinks-action\");\n return isAction(action) ? action : \"advance\";\n }\n\n elementIsVisitable(element: Element) {\n const container = closest(element, \"[data-turbolinks]\");\n if (container) {\n return container.getAttribute(\"data-turbolinks\") != \"false\";\n } else {\n return true;\n }\n }\n\n locationIsVisitable(location: Location) {\n return location.isPrefixedBy(new Location(\"/\")) && location.isHTML();\n }\n}\n","import { mergeHead } from \"./mergeHead\";\nimport { Controller, VisitOptions } from \"./controller\";\nimport { Locatable } from \"./location\";\nimport { activateNewBodyScriptElements, focusFirstAutofocusableElement } from \"./util\";\n\nconst controller = new Controller();\n\nexport const Turbolinks = {\n get supported() {\n return true;\n },\n\n controller,\n\n visit(location: Locatable, options?: Partial<VisitOptions>) {\n controller.visit(location, options);\n },\n\n clearCache() {\n controller.clearCache();\n },\n\n setProgressBarDelay(delay: number) {\n controller.setProgressBarDelay(delay);\n },\n\n start() {\n // because this runs after ios hooks, we have to recover. See onRenderHtml\n if (\n window.Turbolinks !== Turbolinks &&\n window.Turbolinks.controller.adapter\n ) {\n (window.Turbolinks.controller.adapter as any).controller = controller;\n controller.adapter = window.Turbolinks.controller.adapter;\n }\n // Tells vite-plugin-ssr not to do link interception\n (window as any)._disableAutomaticLinkInterception = true\n window.Turbolinks = Turbolinks;\n controller.start();\n },\n\n _vpsCachePageContext(pageContext: any) {\n controller.pageContext = pageContext;\n },\n\n _vpsOnRenderClient(\n newHead: HTMLHeadElement,\n trackScripts: boolean,\n renderBody: () => void\n ) {\n if (controller.currentVisit) {\n const { currentVisit } = controller;\n // TODO: move to controller?\n currentVisit.renderFn = async () => {\n const scriptsLoaded = mergeHead(newHead, trackScripts, () =>\n controller.viewInvalidated()\n );\n\n controller.viewWillRender();\n renderBody();\n await scriptsLoaded;\n\n activateNewBodyScriptElements(\n Array.from(document.body.querySelectorAll(\"script\"))\n );\n focusFirstAutofocusableElement();\n\n controller.viewRendered();\n controller.adapter.visitRendered(currentVisit);\n };\n\n controller.adapter.visitRequestCompleted(controller.currentVisit);\n controller.adapter.visitRequestFinished(controller.currentVisit);\n } else {\n console.error(\n \"controller.currentVisit should exist when onRenderClient fires\"\n );\n }\n },\n};\n\nexport type Turbolinks = typeof Turbolinks;\n"],"mappings":"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","names":["closest","dispatch","controller","controller"]}
@@ -0,0 +1,20 @@
1
+ // renderer/utils/buildHead.tsx
2
+ import React from "react";
3
+ function documentPropsToReact({
4
+ title = "",
5
+ description = "",
6
+ viewport = {}
7
+ }) {
8
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("title", null, title), /* @__PURE__ */ React.createElement("meta", { name: "title", property: "og:title", content: title }), /* @__PURE__ */ React.createElement("meta", { name: "description", content: description }), /* @__PURE__ */ React.createElement(
9
+ "meta",
10
+ {
11
+ name: "viewport",
12
+ content: Object.entries(viewport).map((e) => e.join("=")).join(", ")
13
+ }
14
+ ));
15
+ }
16
+
17
+ export {
18
+ documentPropsToReact
19
+ };
20
+ //# sourceMappingURL=chunk-AIK6VRNF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../renderer/utils/buildHead.tsx"],"sourcesContent":["import React from \"react\";\nimport { DocumentProps } from \"../../types/internal\";\n\nexport function documentPropsToReact({\n title = \"\",\n description = \"\",\n viewport = {},\n}: DocumentProps): React.ReactElement {\n return (\n <>\n <title>{title}</title>\n <meta name=\"title\" property=\"og:title\" content={title} />\n <meta name=\"description\" content={description} />\n <meta\n name=\"viewport\"\n content={Object.entries(viewport)\n .map((e) => e.join(\"=\"))\n .join(\", \")}\n />\n </>\n );\n}\n"],"mappings":";AAAA,OAAO,WAAW;AAGX,SAAS,qBAAqB;AAAA,EACnC,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,WAAW,CAAC;AACd,GAAsC;AACpC,SACE,0DACE,oCAAC,eAAO,KAAM,GACd,oCAAC,UAAK,MAAK,SAAQ,UAAS,YAAW,SAAS,OAAO,GACvD,oCAAC,UAAK,MAAK,eAAc,SAAS,aAAa,GAC/C;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,OAAO,QAAQ,QAAQ,EAC7B,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,EACtB,KAAK,IAAI;AAAA;AAAA,EACd,CACF;AAEJ;","names":[]}
@@ -0,0 +1,9 @@
1
+ // renderer/getConfigOrPageContext.ts
2
+ function getPageContextOrConfig(pageContext, prop) {
3
+ return pageContext[prop] || pageContext.config[prop];
4
+ }
5
+
6
+ export {
7
+ getPageContextOrConfig
8
+ };
9
+ //# sourceMappingURL=chunk-CXNEKD7R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../renderer/getConfigOrPageContext.ts"],"sourcesContent":["import { PageContextNoProxy } from \"../types/internal.js\";\n\ntype ConfigOrContext = PageContextNoProxy | PageContextNoProxy[\"config\"];\n\n/**\n * Get page configs that are definable in config and in runtime via onBeforeRoute. documentProps, for example.\n */\nexport function getPageContextOrConfig<T extends keyof ConfigOrContext>(\n pageContext: PageContextNoProxy,\n prop: T\n): ConfigOrContext[T] {\n return pageContext[prop] || pageContext.config[prop];\n}\n"],"mappings":";AAOO,SAAS,uBACd,aACA,MACoB;AACpB,SAAO,YAAY,IAAI,KAAK,YAAY,OAAO,IAAI;AACrD;","names":[]}
@@ -0,0 +1,11 @@
1
+ // renderer/utils/getGlobalObject.ts
2
+ function getGlobalObject(key, defaultValue) {
3
+ const allGlobalObjects = globalThis.__vite_plugin_ssr = globalThis.__vite_plugin_ssr || {};
4
+ const globalObject = allGlobalObjects[key] = allGlobalObjects[key] || defaultValue;
5
+ return globalObject;
6
+ }
7
+
8
+ export {
9
+ getGlobalObject
10
+ };
11
+ //# sourceMappingURL=chunk-EYYCKU6F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../renderer/utils/getGlobalObject.ts"],"sourcesContent":["// https://github.com/brillout/vike-react/blob/main/vike-react/renderer/utils/getGlobalObject.ts\n\nexport function getGlobalObject<T extends Record<string, unknown> = never>(\n // We use the filename as key; each `getGlobalObject()` call should live in a unique filename.\n key: `${string}.ts`,\n defaultValue: T\n): T {\n const allGlobalObjects = (globalThis.__vite_plugin_ssr = globalThis.__vite_plugin_ssr || {})\n const globalObject = (allGlobalObjects[key] = (allGlobalObjects[key] as T) || defaultValue)\n return globalObject\n}\ndeclare global {\n var __vite_plugin_ssr: undefined | Record<string, Record<string, unknown>>\n}\n"],"mappings":";AAEO,SAAS,gBAEd,KACA,cACG;AACH,QAAM,mBAAoB,WAAW,oBAAoB,WAAW,qBAAqB,CAAC;AAC1F,QAAM,eAAgB,iBAAiB,GAAG,IAAK,iBAAiB,GAAG,KAAW;AAC9E,SAAO;AACT;","names":[]}
@@ -0,0 +1,26 @@
1
+ import {
2
+ getGlobalObject
3
+ } from "./chunk-EYYCKU6F.js";
4
+
5
+ // renderer/usePageContext.tsx
6
+ import React, { useContext } from "react";
7
+ var { Context } = getGlobalObject("PageContextProvider.ts", {
8
+ Context: React.createContext(void 0)
9
+ });
10
+ function PageContextProvider({ pageContext, children }) {
11
+ if (!pageContext)
12
+ throw new Error("Argument pageContext missing");
13
+ return /* @__PURE__ */ React.createElement(Context.Provider, { value: pageContext }, children);
14
+ }
15
+ function usePageContext() {
16
+ const pageContext = useContext(Context);
17
+ if (!pageContext)
18
+ throw new Error("<PageContextProvider> is needed for being able to use usePageContext()");
19
+ return pageContext;
20
+ }
21
+
22
+ export {
23
+ PageContextProvider,
24
+ usePageContext
25
+ };
26
+ //# sourceMappingURL=chunk-LEUA73GT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../renderer/usePageContext.tsx"],"sourcesContent":["// `usePageContext` allows us to access `pageContext` in any React component.\n// See https://vite-plugin-ssr.com/pageContext-anywhere\n\nimport React, { useContext } from 'react'\nimport { PageContext } from \"../types/internal.js\";\nimport { getGlobalObject } from './utils/getGlobalObject.js';\n\nexport { PageContextProvider }\nexport { usePageContext }\n\nconst { Context } = getGlobalObject('PageContextProvider.ts', {\n Context: React.createContext<PageContext>(undefined as never)\n})\n\nfunction PageContextProvider({ pageContext, children }: { pageContext: PageContext; children: React.ReactNode }) {\n if (!pageContext) throw new Error('Argument pageContext missing')\n return <Context.Provider value={pageContext}>{children}</Context.Provider>\n}\n\n/** Access the pageContext from any React component */\nfunction usePageContext() {\n const pageContext = useContext(Context)\n if (!pageContext) throw new Error('<PageContextProvider> is needed for being able to use usePageContext()')\n return pageContext\n}\n"],"mappings":";;;;;AAGA,OAAO,SAAS,kBAAkB;AAOlC,IAAM,EAAE,QAAQ,IAAI,gBAAgB,0BAA0B;AAAA,EAC5D,SAAS,MAAM,cAA2B,MAAkB;AAC9D,CAAC;AAED,SAAS,oBAAoB,EAAE,aAAa,SAAS,GAA4D;AAC/G,MAAI,CAAC;AAAa,UAAM,IAAI,MAAM,8BAA8B;AAChE,SAAO,oCAAC,QAAQ,UAAR,EAAiB,OAAO,eAAc,QAAS;AACzD;AAGA,SAAS,iBAAiB;AACxB,QAAM,cAAc,WAAW,OAAO;AACtC,MAAI,CAAC;AAAa,UAAM,IAAI,MAAM,wEAAwE;AAC1G,SAAO;AACT;","names":[]}
@@ -0,0 +1,13 @@
1
+ // lib/getElementAttributes.ts
2
+ function getElementAttributes(element) {
3
+ const bodyAttrs = {};
4
+ element.getAttributeNames().forEach((name) => {
5
+ bodyAttrs[name] = element.getAttribute(name);
6
+ });
7
+ return bodyAttrs;
8
+ }
9
+
10
+ export {
11
+ getElementAttributes
12
+ };
13
+ //# sourceMappingURL=chunk-RQ34EW7E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../lib/getElementAttributes.ts"],"sourcesContent":["export function getElementAttributes(element: Element) {\n const bodyAttrs: Record<string, string> = {};\n element.getAttributeNames().forEach((name) => {\n bodyAttrs[name] = element.getAttribute(name)!;\n });\n return bodyAttrs;\n}\n"],"mappings":";AAAO,SAAS,qBAAqB,SAAkB;AACrD,QAAM,YAAoC,CAAC;AAC3C,UAAQ,kBAAkB,EAAE,QAAQ,CAAC,SAAS;AAC5C,cAAU,IAAI,IAAI,QAAQ,aAAa,IAAI;AAAA,EAC7C,CAAC;AACD,SAAO;AACT;","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,14 @@
1
- import { PageContextBuiltIn } from "vite-plugin-ssr/types";
2
- import { PageContextProxy } from "./types/internal";
3
- export type { DocumentProps, LayoutMap, NoProxyConfig as BifrostConfig, } from "./types/internal";
4
- export { usePageContext } from "./renderer/usePageContext.js";
5
- export type OnBeforeRender = (pageContext: PageContextBuiltIn) => Promise<{
6
- pageContext: Partial<PageContextProxy>;
1
+ import { PageContextBuiltIn } from 'vite-plugin-ssr/types';
2
+ import { A as AugmentMe, P as PageContextNoProxy } from './internal-fe09ebc7.js';
3
+ export { N as BifrostConfig, a as BifrostProxyConfig, D as DocumentProps, b as LayoutComponent, L as LayoutMap, c as PageContext } from './internal-fe09ebc7.js';
4
+ export { usePageContext } from './renderer/usePageContext.js';
5
+ import 'react';
6
+ import './proxy/pages/_config.js';
7
+ import './renderer/_config.js';
8
+
9
+ type OptionalPromise<T> = Promise<T> | T;
10
+ type OnBeforeRender = (pageContext: PageContextBuiltIn & AugmentMe.PageContextInit) => OptionalPromise<{
11
+ pageContext: Partial<PageContextNoProxy>;
7
12
  }>;
8
- //# sourceMappingURL=index.d.ts.map
13
+
14
+ export { AugmentMe, OnBeforeRender };
package/dist/index.js CHANGED
@@ -1 +1,8 @@
1
- export { usePageContext } from "./renderer/usePageContext.js";
1
+ import {
2
+ usePageContext
3
+ } from "./chunk-LEUA73GT.js";
4
+ import "./chunk-EYYCKU6F.js";
5
+ export {
6
+ usePageContext
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,72 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { ConfigNonHeaderFile, Config, PageContextBuiltIn, PageContextBuiltInClientWithClientRouting } from 'vite-plugin-ssr/types';
3
+ import _default from './proxy/pages/_config.js';
4
+ import _default$1 from './renderer/_config.js';
5
+
6
+ declare namespace AugmentMe {
7
+ interface PageContextInit {
8
+ }
9
+ interface LayoutProps {
10
+ }
11
+ }
12
+ type ConfigConstructor<LibConfig extends ConfigNonHeaderFile, T extends {
13
+ [K in keyof LibConfig["meta"]]: any;
14
+ }> = Omit<Config, "extends"> & {
15
+ extends?: ConfigNonHeaderFile;
16
+ } & Partial<T>;
17
+ type LayoutComponent = React.ComponentType<PropsWithChildren<AugmentMe.LayoutProps>>;
18
+ type LayoutMap = Record<string, LayoutComponent>;
19
+ type ProxyConfig = ConfigConstructor<typeof _default, {
20
+ layoutMap: LayoutMap;
21
+ }>;
22
+ type PageContextProxyCommon = {
23
+ layout: string;
24
+ layoutProps: AugmentMe.LayoutProps;
25
+ config: ProxyConfig;
26
+ };
27
+ type PageContextProxyClientHydration = {
28
+ isHydration: true;
29
+ redirectTo?: string;
30
+ };
31
+ type PageContextProxyClientNav = {
32
+ isHydration: false;
33
+ redirectTo?: string;
34
+ proxySendClient?: string;
35
+ };
36
+ type PageContextProxyServer = PageContextBuiltIn<Page> & PageContextProxyCommon & {
37
+ proxy: string;
38
+ };
39
+ type PageContextProxyClient = PageContextBuiltInClientWithClientRouting<Page> & PageContextProxyCommon & (PageContextProxyClientHydration | PageContextProxyClientNav);
40
+ type PageContextProxy = PageContextProxyServer | PageContextProxyClient;
41
+ type PageContextProxyRestorationVisit = PageContextBuiltInClientWithClientRouting<Page> & {
42
+ bodyEl: Element;
43
+ headEl: HTMLHeadElement;
44
+ } & PageContextProxyCommon;
45
+ interface DocumentProps {
46
+ title?: string;
47
+ description?: string;
48
+ viewport?: {
49
+ [key: string]: string;
50
+ };
51
+ }
52
+ type NoProxyConfig = ConfigConstructor<typeof _default$1, {
53
+ Layout: LayoutComponent;
54
+ layoutProps: AugmentMe.LayoutProps;
55
+ documentProps: DocumentProps;
56
+ scripts: string[];
57
+ }>;
58
+ type PageProps = Record<string, unknown>;
59
+ type Page = React.ComponentType<PageProps>;
60
+ type PageContextNoProxyCommon = {
61
+ pageProps: PageProps;
62
+ redirectTo?: string;
63
+ documentProps?: DocumentProps;
64
+ layoutProps: AugmentMe.LayoutProps;
65
+ config: NoProxyConfig;
66
+ };
67
+ type PageContextNoProxyServer = PageContextBuiltIn<Page> & PageContextNoProxyCommon;
68
+ type PageContextNoProxyClient = PageContextBuiltInClientWithClientRouting<Page> & PageContextNoProxyCommon;
69
+ type PageContextNoProxy = PageContextNoProxyServer | PageContextNoProxyClient;
70
+ type PageContext = PageContextNoProxy | PageContextProxy | PageContextProxyRestorationVisit;
71
+
72
+ export { AugmentMe as A, DocumentProps as D, LayoutMap as L, NoProxyConfig as N, PageContextNoProxy as P, ProxyConfig as a, LayoutComponent as b, PageContext as c, PageContextNoProxyClient as d, PageContextNoProxyServer as e, PageContextProxyServer as f, PageContextProxyClient as g, PageContextProxyRestorationVisit as h };
@@ -13,5 +13,5 @@ declare const _default: {
13
13
  };
14
14
  };
15
15
  };
16
- export default _default;
17
- //# sourceMappingURL=+config.d.ts.map
16
+
17
+ export { _default as default };
@@ -1,13 +1,18 @@
1
- export default {
2
- route: "/*",
3
- onBeforeRender: "import:@alignable/bifrost/proxy/pages/onBeforeRender",
4
- onRenderClient: "import:@alignable/bifrost/proxy/pages/onRenderClient",
5
- onRenderHtml: "import:@alignable/bifrost/proxy/pages/onRenderHtml",
6
- Page: "import:@alignable/bifrost/proxy/pages/Page",
7
- passToClient: ["proxySendClient", "layout", "layoutProps", "redirectTo"],
8
- clientRouting: true,
9
- hydrationCanBeAborted: true,
10
- meta: {
11
- layoutMap: { env: "server-and-client" },
12
- },
1
+ // proxy/pages/+config.ts
2
+ var config_default = {
3
+ route: "/*",
4
+ onBeforeRender: "import:@alignable/bifrost/proxy/pages/onBeforeRender",
5
+ onRenderClient: "import:@alignable/bifrost/proxy/pages/onRenderClient",
6
+ onRenderHtml: "import:@alignable/bifrost/proxy/pages/onRenderHtml",
7
+ Page: "import:@alignable/bifrost/proxy/pages/Page",
8
+ passToClient: ["proxySendClient", "layout", "layoutProps", "redirectTo"],
9
+ clientRouting: true,
10
+ hydrationCanBeAborted: true,
11
+ meta: {
12
+ layoutMap: { env: "server-and-client" }
13
+ }
13
14
  };
15
+ export {
16
+ config_default as default
17
+ };
18
+ //# sourceMappingURL=+config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../proxy/pages/+config.ts"],"sourcesContent":["import { type ConfigNonHeaderFile } from \"vite-plugin-ssr/types\";\n\nexport default {\n route: \"/*\",\n onBeforeRender: \"import:@alignable/bifrost/proxy/pages/onBeforeRender\",\n onRenderClient: \"import:@alignable/bifrost/proxy/pages/onRenderClient\",\n onRenderHtml: \"import:@alignable/bifrost/proxy/pages/onRenderHtml\",\n Page: \"import:@alignable/bifrost/proxy/pages/Page\",\n passToClient: [\"proxySendClient\", \"layout\", \"layoutProps\", \"redirectTo\"],\n clientRouting: true,\n hydrationCanBeAborted: true,\n meta: {\n layoutMap: { env: \"server-and-client\" },\n },\n} satisfies ConfigNonHeaderFile;\n"],"mappings":";AAEA,IAAO,iBAAQ;AAAA,EACb,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,MAAM;AAAA,EACN,cAAc,CAAC,mBAAmB,UAAU,eAAe,YAAY;AAAA,EACvE,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,MAAM;AAAA,IACJ,WAAW,EAAE,KAAK,oBAAoB;AAAA,EACxC;AACF;","names":[]}
@@ -1,2 +1,3 @@
1
- export default function Page(): null;
2
- //# sourceMappingURL=Page.d.ts.map
1
+ declare function Page(): null;
2
+
3
+ export { Page as default };
@@ -1,4 +1,8 @@
1
- /* This really should not be neccessary. VPS v1 beta turns off client routing if no Page detected - maybe a bug */
2
- export default function Page() {
3
- return null;
1
+ // proxy/pages/Page.tsx
2
+ function Page() {
3
+ return null;
4
4
  }
5
+ export {
6
+ Page as default
7
+ };
8
+ //# sourceMappingURL=Page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../proxy/pages/Page.tsx"],"sourcesContent":["/* This really should not be neccessary. VPS v1 beta turns off client routing if no Page detected - maybe a bug */\nexport default function Page() {\n return null;\n}\n"],"mappings":";AACe,SAAR,OAAwB;AAC7B,SAAO;AACT;","names":[]}
@@ -1,5 +1,11 @@
1
- import { PageContextProxyServer } from "../../types/internal.js";
2
- export default function onBeforeRender(pageContext: PageContextProxyServer): Promise<{
1
+ import { f as PageContextProxyServer } from '../../internal-fe09ebc7.js';
2
+ import 'react';
3
+ import 'vite-plugin-ssr/types';
4
+ import './_config.js';
5
+ import '../../renderer/_config.js';
6
+
7
+ declare function onBeforeRender(pageContext: PageContextProxyServer): Promise<{
3
8
  pageContext: {};
4
9
  } | undefined>;
5
- //# sourceMappingURL=onBeforeRender.d.ts.map
10
+
11
+ export { onBeforeRender as default };
@@ -1,6 +1,10 @@
1
- // Indicates to VPS that this route requires a data fetch to grab pageContext
2
- export default async function onBeforeRender(pageContext) {
3
- if (pageContext.proxy) {
4
- return { pageContext: {} };
5
- }
1
+ // proxy/pages/onBeforeRender.tsx
2
+ async function onBeforeRender(pageContext) {
3
+ if (pageContext.proxy) {
4
+ return { pageContext: {} };
5
+ }
6
6
  }
7
+ export {
8
+ onBeforeRender as default
9
+ };
10
+ //# sourceMappingURL=onBeforeRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../proxy/pages/onBeforeRender.tsx"],"sourcesContent":["import { PageContextProxyServer } from \"../../types/internal.js\";\n\n// Indicates to VPS that this route requires a data fetch to grab pageContext\nexport default async function onBeforeRender(pageContext: PageContextProxyServer) {\n if (pageContext.proxy) {\n return { pageContext: {} };\n }\n}\n"],"mappings":";AAGA,eAAO,eAAsC,aAAqC;AAChF,MAAI,YAAY,OAAO;AACrB,WAAO,EAAE,aAAa,CAAC,EAAE;AAAA,EAC3B;AACF;","names":[]}
@@ -1,3 +1,9 @@
1
- import { PageContextProxyClient } from "../../types/internal.js";
2
- export default function onRenderClient(pageContext: PageContextProxyClient): Promise<void>;
3
- //# sourceMappingURL=onRenderClient.d.ts.map
1
+ import { g as PageContextProxyClient } from '../../internal-fe09ebc7.js';
2
+ import 'react';
3
+ import 'vite-plugin-ssr/types';
4
+ import './_config.js';
5
+ import '../../renderer/_config.js';
6
+
7
+ declare function onRenderClient(pageContext: PageContextProxyClient): Promise<void>;
8
+
9
+ export { onRenderClient as default };
@@ -1,56 +1,64 @@
1
+ import {
2
+ getElementAttributes
3
+ } from "../../chunk-RQ34EW7E.js";
4
+ import {
5
+ Turbolinks,
6
+ copyElementAttributes,
7
+ renderReact
8
+ } from "../../chunk-ABW2IXO4.js";
9
+ import {
10
+ PageShell
11
+ } from "../../chunk-4DL7N7Y5.js";
12
+ import "../../chunk-LEUA73GT.js";
13
+ import "../../chunk-EYYCKU6F.js";
14
+
15
+ // proxy/pages/onRenderClient.tsx
1
16
  import React from "react";
2
- import { renderReact } from "../../lib/renderReact.js";
3
- import { PageShell } from "../../lib/PageShell.js";
4
- import { Turbolinks } from "../../lib/turbolinks/index.js";
5
- import { copyElementAttributes, } from "../../lib/turbolinks/util.js";
6
- import { getElementAttributes } from "../../lib/getElementAttributes.js";
7
17
  Turbolinks.start();
8
- export default async function onRenderClient(pageContext) {
9
- if (pageContext.redirectTo) {
10
- Turbolinks.visit(pageContext.redirectTo);
11
- return;
18
+ async function onRenderClient(pageContext) {
19
+ if (pageContext.redirectTo) {
20
+ Turbolinks.visit(pageContext.redirectTo);
21
+ return;
22
+ }
23
+ const { layoutProps, layout } = pageContext;
24
+ const { layoutMap } = pageContext.config;
25
+ if (!layoutMap) {
26
+ throw new Error("layoutMap needs to be defined in config");
27
+ }
28
+ const Layout = layoutMap[layout];
29
+ function render(body) {
30
+ renderReact(
31
+ /* @__PURE__ */ React.createElement(PageShell, { key: pageContext.urlOriginal, pageContext }, /* @__PURE__ */ React.createElement(Layout, { ...layoutProps }, /* @__PURE__ */ React.createElement("div", { id: "proxied-body", dangerouslySetInnerHTML: { __html: body } }))),
32
+ pageContext.isHydration
33
+ );
34
+ }
35
+ let bodyEl;
36
+ if (pageContext.isHydration) {
37
+ bodyEl = document.getElementById("proxied-body");
38
+ render(bodyEl.innerHTML);
39
+ } else {
40
+ const { proxySendClient: proxy } = pageContext;
41
+ if (!proxy) {
42
+ console.error("proxy/+onRenderClient did not receive proxySendClient");
43
+ return;
12
44
  }
13
- const { layoutProps, layout } = pageContext;
14
- const { layoutMap } = pageContext.config;
15
- if (!layoutMap) {
16
- throw new Error("layoutMap needs to be defined in config");
17
- }
18
- const Layout = layoutMap[layout];
19
- function render(body) {
20
- renderReact(React.createElement(PageShell, { key: pageContext.urlOriginal, pageContext: pageContext },
21
- React.createElement(Layout, { ...layoutProps },
22
- React.createElement("div", { id: "proxied-body", dangerouslySetInnerHTML: { __html: body } }))), pageContext.isHydration);
23
- }
24
- let bodyEl;
25
- if (pageContext.isHydration) {
26
- // During hydration of initial ssr, body is in dom, not page props (to avoid double-send)
27
- bodyEl = document.getElementById("proxied-body");
28
- render(bodyEl.innerHTML);
29
- }
30
- else {
31
- const { proxySendClient: proxy } = pageContext;
32
- if (!proxy) {
33
- console.error("proxy/+onRenderClient did not receive proxySendClient");
34
- return;
35
- }
36
- const parsed = document.createElement("html");
37
- parsed.innerHTML = proxy;
38
- bodyEl = parsed.querySelector("body");
39
- const headEl = parsed.querySelector("head");
40
- Turbolinks._vpsOnRenderClient(headEl, true, () => {
41
- // merge body attributes
42
- document.body
43
- .getAttributeNames()
44
- .forEach((n) => document.body.removeAttribute(n));
45
- copyElementAttributes(document.body, bodyEl);
46
- // render body with react
47
- render(bodyEl.innerHTML);
48
- });
49
- }
50
- // cache page context will save it and return it to us during restoration visits
51
- Turbolinks._vpsCachePageContext({
52
- layoutProps,
53
- layout,
54
- bodyAttrs: getElementAttributes(bodyEl),
45
+ const parsed = document.createElement("html");
46
+ parsed.innerHTML = proxy;
47
+ bodyEl = parsed.querySelector("body");
48
+ const headEl = parsed.querySelector("head");
49
+ Turbolinks._vpsOnRenderClient(headEl, true, () => {
50
+ document.body.getAttributeNames().forEach((n) => document.body.removeAttribute(n));
51
+ copyElementAttributes(document.body, bodyEl);
52
+ render(bodyEl.innerHTML);
55
53
  });
54
+ }
55
+ Turbolinks._vpsCachePageContext({
56
+ layoutProps,
57
+ layout,
58
+ bodyAttrs: getElementAttributes(bodyEl)
59
+ });
56
60
  }
61
+ export {
62
+ onRenderClient as default
63
+ };
64
+ //# sourceMappingURL=onRenderClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../proxy/pages/onRenderClient.tsx"],"sourcesContent":["import React from \"react\";\nimport { renderReact } from \"../../lib/renderReact.js\";\nimport { PageShell } from \"../../lib/PageShell.js\";\nimport { PageContextProxyClient } from \"../../types/internal.js\";\nimport { Turbolinks } from \"../../lib/turbolinks/index.js\";\nimport {\n copyElementAttributes,\n} from \"../../lib/turbolinks/util.js\";\nimport { getElementAttributes } from \"../../lib/getElementAttributes.js\";\n\nTurbolinks.start();\n\nexport default async function onRenderClient(\n pageContext: PageContextProxyClient\n) {\n if (pageContext.redirectTo) {\n Turbolinks.visit(pageContext.redirectTo);\n return;\n }\n const { layoutProps, layout } = pageContext;\n\n const { layoutMap } = pageContext.config;\n if (!layoutMap) {\n throw new Error(\"layoutMap needs to be defined in config\");\n }\n const Layout = layoutMap[layout];\n\n function render(body: string) {\n renderReact(\n <PageShell key={pageContext.urlOriginal} pageContext={pageContext}>\n <Layout {...layoutProps}>\n <div id=\"proxied-body\" dangerouslySetInnerHTML={{ __html: body }} />\n </Layout>\n </PageShell>,\n pageContext.isHydration\n );\n }\n let bodyEl: Element;\n\n if (pageContext.isHydration) {\n // During hydration of initial ssr, body is in dom, not page props (to avoid double-send)\n bodyEl = document.getElementById(\"proxied-body\")!;\n render(bodyEl.innerHTML);\n } else {\n const { proxySendClient: proxy } = pageContext;\n\n if (!proxy) {\n console.error(\"proxy/+onRenderClient did not receive proxySendClient\");\n return;\n }\n\n const parsed = document.createElement(\"html\");\n parsed.innerHTML = proxy;\n bodyEl = parsed.querySelector(\"body\")!;\n const headEl = parsed.querySelector(\"head\")!;\n\n Turbolinks._vpsOnRenderClient(headEl, true, () => {\n // merge body attributes\n document.body\n .getAttributeNames()\n .forEach((n) => document.body.removeAttribute(n));\n copyElementAttributes(document.body, bodyEl);\n // render body with react\n render(bodyEl.innerHTML);\n });\n }\n\n // cache page context will save it and return it to us during restoration visits\n Turbolinks._vpsCachePageContext({\n layoutProps,\n layout,\n bodyAttrs: getElementAttributes(bodyEl),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAUlB,WAAW,MAAM;AAEjB,eAAO,eACL,aACA;AACA,MAAI,YAAY,YAAY;AAC1B,eAAW,MAAM,YAAY,UAAU;AACvC;AAAA,EACF;AACA,QAAM,EAAE,aAAa,OAAO,IAAI;AAEhC,QAAM,EAAE,UAAU,IAAI,YAAY;AAClC,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,QAAM,SAAS,UAAU,MAAM;AAE/B,WAAS,OAAO,MAAc;AAC5B;AAAA,MACE,oCAAC,aAAU,KAAK,YAAY,aAAa,eACvC,oCAAC,UAAQ,GAAG,eACV,oCAAC,SAAI,IAAG,gBAAe,yBAAyB,EAAE,QAAQ,KAAK,GAAG,CACpE,CACF;AAAA,MACA,YAAY;AAAA,IACd;AAAA,EACF;AACA,MAAI;AAEJ,MAAI,YAAY,aAAa;AAE3B,aAAS,SAAS,eAAe,cAAc;AAC/C,WAAO,OAAO,SAAS;AAAA,EACzB,OAAO;AACL,UAAM,EAAE,iBAAiB,MAAM,IAAI;AAEnC,QAAI,CAAC,OAAO;AACV,cAAQ,MAAM,uDAAuD;AACrE;AAAA,IACF;AAEA,UAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,WAAO,YAAY;AACnB,aAAS,OAAO,cAAc,MAAM;AACpC,UAAM,SAAS,OAAO,cAAc,MAAM;AAE1C,eAAW,mBAAmB,QAAQ,MAAM,MAAM;AAEhD,eAAS,KACN,kBAAkB,EAClB,QAAQ,CAAC,MAAM,SAAS,KAAK,gBAAgB,CAAC,CAAC;AAClD,4BAAsB,SAAS,MAAM,MAAM;AAE3C,aAAO,OAAO,SAAS;AAAA,IACzB,CAAC;AAAA,EACH;AAGA,aAAW,qBAAqB;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,WAAW,qBAAqB,MAAM;AAAA,EACxC,CAAC;AACH;","names":[]}
@@ -1,9 +1,16 @@
1
- import { PageContextProxyServer } from "../../types/internal.js";
2
- export default function onRenderHtml(pageContext: PageContextProxyServer): Promise<{
3
- documentHtml: import("vite-plugin-ssr/dist/types/node/runtime/html/renderHtml.js").TemplateWrapped;
1
+ import * as vite_plugin_ssr_dist_types_node_runtime_html_renderHtml_js from 'vite-plugin-ssr/dist/types/node/runtime/html/renderHtml.js';
2
+ import { f as PageContextProxyServer } from '../../internal-fe09ebc7.js';
3
+ import 'react';
4
+ import 'vite-plugin-ssr/types';
5
+ import './_config.js';
6
+ import '../../renderer/_config.js';
7
+
8
+ declare function onRenderHtml(pageContext: PageContextProxyServer): Promise<{
9
+ documentHtml: vite_plugin_ssr_dist_types_node_runtime_html_renderHtml_js.TemplateWrapped;
4
10
  pageContext: {};
5
11
  } | {
6
12
  documentHtml?: undefined;
7
13
  pageContext?: undefined;
8
14
  }>;
9
- //# sourceMappingURL=onRenderHtml.d.ts.map
15
+
16
+ export { onRenderHtml as default };