@alignable/bifrost 0.0.33 → 0.0.35

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 (72) hide show
  1. package/dist/{chunk-LCW7IDQV.js → chunk-4YPY5NIX.js} +7 -1
  2. package/dist/chunk-4YPY5NIX.js.map +1 -0
  3. package/dist/{chunk-6QZLCT3X.js → chunk-JHLK62FM.js} +5 -2
  4. package/dist/chunk-JHLK62FM.js.map +1 -0
  5. package/dist/chunk-PESUYCE4.js +33 -0
  6. package/dist/chunk-PESUYCE4.js.map +1 -0
  7. package/dist/index.d.ts +5 -3
  8. package/dist/index.js +11 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/{internal-1d9cac7c.d.ts → internal-28df99a9.d.ts} +15 -8
  11. package/dist/proxy/pages/passthru/+config.d.ts +8 -0
  12. package/dist/proxy/pages/passthru/+config.js +12 -0
  13. package/dist/proxy/pages/passthru/+config.js.map +1 -0
  14. package/dist/proxy/pages/passthru/onRenderClient.d.ts +3 -0
  15. package/dist/proxy/pages/passthru/onRenderClient.js +8 -0
  16. package/dist/proxy/pages/passthru/onRenderClient.js.map +1 -0
  17. package/dist/proxy/pages/passthru/onRenderHtml.d.ts +12 -0
  18. package/dist/proxy/pages/passthru/onRenderHtml.js +10 -0
  19. package/dist/proxy/pages/passthru/onRenderHtml.js.map +1 -0
  20. package/dist/proxy/pages/wrapped/+config.d.ts +25 -0
  21. package/dist/proxy/pages/wrapped/+config.js +19 -0
  22. package/dist/proxy/pages/wrapped/+config.js.map +1 -0
  23. package/dist/proxy/pages/{onBeforeRender.d.ts → wrapped/onBeforeRender.d.ts} +3 -3
  24. package/dist/proxy/pages/{onBeforeRender.js → wrapped/onBeforeRender.js} +1 -1
  25. package/dist/proxy/pages/wrapped/onBeforeRender.js.map +1 -0
  26. package/dist/proxy/pages/{onRenderClient.d.ts → wrapped/onRenderClient.d.ts} +3 -3
  27. package/dist/proxy/pages/{onRenderClient.js → wrapped/onRenderClient.js} +8 -7
  28. package/dist/proxy/pages/wrapped/onRenderClient.js.map +1 -0
  29. package/dist/proxy/pages/{onRenderHtml.d.ts → wrapped/onRenderHtml.d.ts} +3 -3
  30. package/dist/proxy/pages/{onRenderHtml.js → wrapped/onRenderHtml.js} +6 -5
  31. package/dist/proxy/pages/wrapped/onRenderHtml.js.map +1 -0
  32. package/dist/proxy/pages/wrapped/restorationVisit/+config.d.ts +24 -0
  33. package/dist/proxy/pages/wrapped/restorationVisit/+config.js +18 -0
  34. package/dist/proxy/pages/wrapped/restorationVisit/+config.js.map +1 -0
  35. package/dist/proxy/pages/{restorationVisit → wrapped/restorationVisit}/onRenderClient.d.ts +3 -3
  36. package/dist/proxy/pages/{restorationVisit → wrapped/restorationVisit}/onRenderClient.js +7 -6
  37. package/dist/proxy/pages/wrapped/restorationVisit/onRenderClient.js.map +1 -0
  38. package/dist/proxy/pages/wrapped/restorationVisit/route.js +8 -0
  39. package/dist/proxy/pages/wrapped/restorationVisit/route.js.map +1 -0
  40. package/dist/renderer/+config.d.ts +22 -6
  41. package/dist/renderer/+config.js +6 -6
  42. package/dist/renderer/+config.js.map +1 -1
  43. package/dist/renderer/getConfigOrPageContext.d.ts +2 -2
  44. package/dist/renderer/onBeforeRoute.js +1 -1
  45. package/dist/renderer/onBeforeRoute.js.map +1 -1
  46. package/dist/renderer/onRenderClient.d.ts +2 -2
  47. package/dist/renderer/onRenderClient.js +5 -4
  48. package/dist/renderer/onRenderClient.js.map +1 -1
  49. package/dist/renderer/onRenderHtml.d.ts +2 -2
  50. package/dist/renderer/onRenderHtml.js +4 -3
  51. package/dist/renderer/onRenderHtml.js.map +1 -1
  52. package/dist/renderer/useNavigation.d.ts +13 -0
  53. package/dist/renderer/useNavigation.js +12 -0
  54. package/dist/renderer/useNavigation.js.map +1 -0
  55. package/dist/renderer/usePageContext.d.ts +2 -2
  56. package/dist/renderer/utils/buildHead.d.ts +2 -2
  57. package/package.json +39 -27
  58. package/dist/chunk-6QZLCT3X.js.map +0 -1
  59. package/dist/chunk-LCW7IDQV.js.map +0 -1
  60. package/dist/proxy/pages/+config.d.ts +0 -20
  61. package/dist/proxy/pages/+config.js +0 -19
  62. package/dist/proxy/pages/+config.js.map +0 -1
  63. package/dist/proxy/pages/onBeforeRender.js.map +0 -1
  64. package/dist/proxy/pages/onRenderClient.js.map +0 -1
  65. package/dist/proxy/pages/onRenderHtml.js.map +0 -1
  66. package/dist/proxy/pages/restorationVisit/+config.d.ts +0 -11
  67. package/dist/proxy/pages/restorationVisit/+config.js +0 -14
  68. package/dist/proxy/pages/restorationVisit/+config.js.map +0 -1
  69. package/dist/proxy/pages/restorationVisit/onRenderClient.js.map +0 -1
  70. package/dist/proxy/pages/restorationVisit/route.js +0 -8
  71. package/dist/proxy/pages/restorationVisit/route.js.map +0 -1
  72. /package/dist/proxy/pages/{restorationVisit → wrapped/restorationVisit}/route.d.ts +0 -0
@@ -1,3 +1,7 @@
1
+ import {
2
+ setNavigation
3
+ } from "./chunk-PESUYCE4.js";
4
+
1
5
  // lib/renderReact.ts
2
6
  import { createRoot, hydrateRoot } from "react-dom/client";
3
7
  var root;
@@ -803,6 +807,7 @@ var Controller = class {
803
807
  });
804
808
  }
805
809
  notifyApplicationBeforeVisitingLocation(location) {
810
+ setNavigation({ state: "loading" });
806
811
  return dispatch("turbolinks:before-visit", {
807
812
  data: { url: location.absoluteURL },
808
813
  cancelable: true
@@ -817,6 +822,7 @@ var Controller = class {
817
822
  return dispatch("turbolinks:before-cache");
818
823
  }
819
824
  notifyApplicationBeforeRender() {
825
+ setNavigation({ state: "idle" });
820
826
  return dispatch("turbolinks:before-render");
821
827
  }
822
828
  notifyApplicationAfterRender() {
@@ -942,4 +948,4 @@ export {
942
948
  copyElementAttributes,
943
949
  Turbolinks
944
950
  };
945
- //# sourceMappingURL=chunk-LCW7IDQV.js.map
951
+ //# sourceMappingURL=chunk-4YPY5NIX.js.map
@@ -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 elementIsFavicon(element: Element) {\n const tagName = element.tagName.toLowerCase();\n\n return tagName == \"link\" && element.getAttribute(\"rel\") == \"icon\";\n}\n\nfunction categorizeHead(head: ParentNode) {\n const scripts = [];\n const stylesheets = [];\n const provisional = [];\n for (const element of head.children) {\n // we want to keep the same favicon on page transitions\n if (elementIsFavicon(element)) {\n continue;\n }\n\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 \"vike/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\";\nimport { setNavigation } from \"../../renderer/useNavigation\";\n\nexport type TimingData = {};\nexport type VisitOptions = { action: Action };\n\nexport interface Snapshot {\n bodyEl: Element;\n headEl: HTMLHeadElement;\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 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 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.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 removeEventListener(\"click\", this.clickBubbled, false);\n 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 setNavigation({ state: \"loading\" });\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 setNavigation({ state: \"idle\" });\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 {\n activateNewBodyScriptElements,\n focusFirstAutofocusableElement,\n} 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 vike 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 executeBodyScripts: 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 if (executeBodyScripts) {\n activateNewBodyScriptElements(\n Array.from(document.body.querySelectorAll(\"script\"))\n );\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"]}
@@ -1,3 +1,6 @@
1
+ import {
2
+ NavigationProvider
3
+ } from "./chunk-PESUYCE4.js";
1
4
  import {
2
5
  PageContextProvider
3
6
  } from "./chunk-IYGONC4I.js";
@@ -8,10 +11,10 @@ function PageShell({
8
11
  pageContext,
9
12
  children
10
13
  }) {
11
- return /* @__PURE__ */ React.createElement(React.StrictMode, null, /* @__PURE__ */ React.createElement(PageContextProvider, { pageContext }, children));
14
+ return /* @__PURE__ */ React.createElement(React.StrictMode, null, /* @__PURE__ */ React.createElement(PageContextProvider, { pageContext }, /* @__PURE__ */ React.createElement(NavigationProvider, null, children)));
12
15
  }
13
16
 
14
17
  export {
15
18
  PageShell
16
19
  };
17
- //# sourceMappingURL=chunk-6QZLCT3X.js.map
20
+ //# sourceMappingURL=chunk-JHLK62FM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../lib/PageShell.tsx"],"sourcesContent":["import React, { ReactNode } from \"react\";\nimport { PageContextProvider } from \"../renderer/usePageContext.js\";\nimport { PageContext } from \"../types/internal.js\";\nimport { NavigationProvider } from \"../renderer/useNavigation.js\";\n\nexport function PageShell({\n pageContext,\n children,\n}: {\n pageContext: PageContext;\n children: ReactNode;\n}) {\n return (\n <React.StrictMode>\n <PageContextProvider pageContext={pageContext}>\n <NavigationProvider>{children}</NavigationProvider>\n </PageContextProvider>\n </React.StrictMode>\n );\n}\n"],"mappings":";;;;;;;;AAAA,OAAO,WAA0B;AAK1B,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AACF,GAGG;AACD,SACE,oCAAC,MAAM,YAAN,MACC,oCAAC,uBAAoB,eACnB,oCAAC,0BAAoB,QAAS,CAChC,CACF;AAEJ;","names":[]}
@@ -0,0 +1,33 @@
1
+ import {
2
+ getGlobalObject
3
+ } from "./chunk-EYYCKU6F.js";
4
+
5
+ // renderer/useNavigation.tsx
6
+ import React, { useContext, useState } from "react";
7
+ var setNavigation = (navigation) => {
8
+ };
9
+ var { Context } = getGlobalObject("useNavigation.ts", {
10
+ Context: React.createContext(void 0)
11
+ });
12
+ function NavigationProvider({ children }) {
13
+ const [navigation, setNav] = useState({ state: "idle" });
14
+ setNavigation = setNav;
15
+ if (!navigation)
16
+ throw new Error("Argument navigation missing");
17
+ return /* @__PURE__ */ React.createElement(Context.Provider, { value: navigation }, children);
18
+ }
19
+ function useNavigation() {
20
+ const navigation = useContext(Context);
21
+ if (!navigation)
22
+ throw new Error(
23
+ "<NavigationProvider> is needed for being able to use useNavigation()"
24
+ );
25
+ return navigation;
26
+ }
27
+
28
+ export {
29
+ setNavigation,
30
+ NavigationProvider,
31
+ useNavigation
32
+ };
33
+ //# sourceMappingURL=chunk-PESUYCE4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../renderer/useNavigation.tsx"],"sourcesContent":["import React, { useContext, useState } from \"react\";\nimport { getGlobalObject } from \"./utils/getGlobalObject.js\";\n\nexport { NavigationProvider };\nexport { useNavigation };\nexport { setNavigation };\n\nlet setNavigation = (navigation: Navigation) => {};\n\ninterface Navigation {\n state: \"idle\" | \"loading\";\n}\n\nconst { Context } = getGlobalObject(\"useNavigation.ts\", {\n Context: React.createContext<Navigation>(undefined as never),\n});\n\nfunction NavigationProvider({ children }: { children: React.ReactNode }) {\n const [navigation, setNav] = useState<Navigation>({ state: \"idle\" });\n // bit of a hack - lets us trigger from outside react.\n setNavigation = setNav;\n if (!navigation) throw new Error(\"Argument navigation missing\");\n return <Context.Provider value={navigation}>{children}</Context.Provider>;\n}\n\n/** Access the navigation from any React component */\nfunction useNavigation() {\n const navigation = useContext(Context);\n if (!navigation)\n throw new Error(\n \"<NavigationProvider> is needed for being able to use useNavigation()\"\n );\n return navigation;\n}\n"],"mappings":";;;;;AAAA,OAAO,SAAS,YAAY,gBAAgB;AAO5C,IAAI,gBAAgB,CAAC,eAA2B;AAAC;AAMjD,IAAM,EAAE,QAAQ,IAAI,gBAAgB,oBAAoB;AAAA,EACtD,SAAS,MAAM,cAA0B,MAAkB;AAC7D,CAAC;AAED,SAAS,mBAAmB,EAAE,SAAS,GAAkC;AACvE,QAAM,CAAC,YAAY,MAAM,IAAI,SAAqB,EAAE,OAAO,OAAO,CAAC;AAEnE,kBAAgB;AAChB,MAAI,CAAC;AAAY,UAAM,IAAI,MAAM,6BAA6B;AAC9D,SAAO,oCAAC,QAAQ,UAAR,EAAiB,OAAO,cAAa,QAAS;AACxD;AAGA,SAAS,gBAAgB;AACvB,QAAM,aAAa,WAAW,OAAO;AACrC,MAAI,CAAC;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AACF,SAAO;AACT;","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  export { Config, GuardAsync, GuardSync, Meta, OnBeforePrerenderStartAsync, OnBeforePrerenderStartSync, OnBeforeRenderAsync, OnBeforeRenderSync, OnBeforeRouteAsync, OnBeforeRouteSync, OnHydrationEndAsync, OnHydrationEndSync, OnPageTransitionEndAsync, OnPageTransitionEndSync, OnPageTransitionStartAsync, OnPageTransitionStartSync, OnPrerenderStartAsync, OnPrerenderStartSync, OnRenderClientAsync, OnRenderClientSync, OnRenderHtmlAsync, OnRenderHtmlSync, RouteAsync, RouteSync } from 'vike/types';
2
2
  import { navigate as navigate$1 } from 'vike/client/router';
3
- import { A as ApplicationFacingPageContext, a as AugmentMe } from './internal-1d9cac7c.js';
4
- export { N as BifrostConfig, P as BifrostProxyConfig, D as DocumentProps, b as LayoutComponent, L as LayoutMap, c as PageContext } from './internal-1d9cac7c.js';
3
+ export { prefetch } from 'vike/client/router';
4
+ import { A as ApplicationFacingPageContext, a as AugmentMe } from './internal-28df99a9.js';
5
+ export { N as BifrostConfig, P as BifrostProxyConfig, D as DocumentProps, b as LayoutComponent, L as LayoutMap, c as PageContext } from './internal-28df99a9.js';
5
6
  export { PageContextProvider, usePageContext } from './renderer/usePageContext.js';
7
+ export { useNavigation } from './renderer/useNavigation.js';
6
8
  import 'react';
7
- import './proxy/pages/_config.js';
9
+ import './proxy/pages/wrapped/_config.js';
8
10
  import './renderer/_config.js';
9
11
  import './controller-16e58bbd.js';
10
12
 
package/dist/index.js CHANGED
@@ -1,3 +1,6 @@
1
+ import {
2
+ useNavigation
3
+ } from "./chunk-PESUYCE4.js";
1
4
  import {
2
5
  PageContextProvider,
3
6
  usePageContext
@@ -5,14 +8,22 @@ import {
5
8
  import "./chunk-EYYCKU6F.js";
6
9
 
7
10
  // index.ts
11
+ import { prefetch } from "vike/client/router";
8
12
  var navigate = async (url, opts) => {
9
13
  window.Turbolinks.visit(url, {
10
14
  action: opts?.overwriteLastHistoryEntry ? "replace" : "advance"
11
15
  });
16
+ if (window.Turbolinks.controller.currentVisit?.state === "started") {
17
+ return new Promise((resolve) => {
18
+ window.document.addEventListener("turbolinks:load", (ev) => resolve());
19
+ });
20
+ }
12
21
  };
13
22
  export {
14
23
  PageContextProvider,
15
24
  navigate,
25
+ prefetch,
26
+ useNavigation,
16
27
  usePageContext
17
28
  };
18
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts"],"sourcesContent":["export type {\n Config,\n Meta,\n GuardAsync,\n GuardSync,\n OnBeforePrerenderStartAsync,\n OnBeforePrerenderStartSync,\n OnBeforeRenderAsync,\n OnBeforeRenderSync,\n OnBeforeRouteAsync,\n OnBeforeRouteSync,\n OnHydrationEndAsync,\n OnHydrationEndSync,\n OnPageTransitionEndAsync,\n OnPageTransitionEndSync,\n OnPageTransitionStartAsync,\n OnPageTransitionStartSync,\n OnPrerenderStartAsync,\n OnPrerenderStartSync,\n OnRenderClientAsync,\n OnRenderClientSync,\n OnRenderHtmlAsync,\n OnRenderHtmlSync,\n RouteAsync,\n RouteSync,\n} from \"vike/types\";\nimport { navigate as vikeNavigate } from \"vike/client/router\";\nimport { ApplicationFacingPageContext, AugmentMe } from \"./types/internal.js\";\n\nexport type {\n DocumentProps,\n LayoutMap,\n NoProxyConfig as BifrostConfig,\n ProxyConfig as BifrostProxyConfig,\n LayoutComponent,\n AugmentMe,\n PageContext,\n} from \"./types/internal\";\nexport {\n usePageContext,\n PageContextProvider,\n} from \"./renderer/usePageContext.js\";\n\nexport const navigate: typeof vikeNavigate = async (url, opts) => {\n window.Turbolinks.visit(url, {\n action: opts?.overwriteLastHistoryEntry ? \"replace\" : \"advance\",\n });\n};\n\ndeclare global {\n namespace Vike {\n interface PageContext\n extends ApplicationFacingPageContext,\n AugmentMe.PageContextInit {}\n }\n}\n"],"mappings":";;;;;;;AA2CO,IAAM,WAAgC,OAAO,KAAK,SAAS;AAChE,SAAO,WAAW,MAAM,KAAK;AAAA,IAC3B,QAAQ,MAAM,4BAA4B,YAAY;AAAA,EACxD,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../index.ts"],"sourcesContent":["export type {\n Config,\n Meta,\n GuardAsync,\n GuardSync,\n OnBeforePrerenderStartAsync,\n OnBeforePrerenderStartSync,\n OnBeforeRenderAsync,\n OnBeforeRenderSync,\n OnBeforeRouteAsync,\n OnBeforeRouteSync,\n OnHydrationEndAsync,\n OnHydrationEndSync,\n OnPageTransitionEndAsync,\n OnPageTransitionEndSync,\n OnPageTransitionStartAsync,\n OnPageTransitionStartSync,\n OnPrerenderStartAsync,\n OnPrerenderStartSync,\n OnRenderClientAsync,\n OnRenderClientSync,\n OnRenderHtmlAsync,\n OnRenderHtmlSync,\n RouteAsync,\n RouteSync,\n} from \"vike/types\";\nimport { navigate as vikeNavigate } from \"vike/client/router\";\nexport { prefetch } from \"vike/client/router\";\nimport type {\n ApplicationFacingPageContext,\n AugmentMe,\n} from \"./types/internal.js\";\n\nexport type {\n DocumentProps,\n LayoutMap,\n NoProxyConfig as BifrostConfig,\n ProxyConfig as BifrostProxyConfig,\n LayoutComponent,\n AugmentMe,\n PageContext,\n} from \"./types/internal\";\nexport {\n usePageContext,\n PageContextProvider,\n} from \"./renderer/usePageContext.js\";\nexport { useNavigation } from \"./renderer/useNavigation.js\";\n\nexport const navigate: typeof vikeNavigate = async (url, opts) => {\n window.Turbolinks.visit(url, {\n action: opts?.overwriteLastHistoryEntry ? \"replace\" : \"advance\",\n });\n if (window.Turbolinks.controller.currentVisit?.state === \"started\") {\n return new Promise((resolve) => {\n window.document.addEventListener(\"turbolinks:load\", (ev) => resolve());\n });\n }\n};\n\ndeclare global {\n namespace Vike {\n interface PageContext\n extends ApplicationFacingPageContext,\n AugmentMe.PageContextInit {}\n }\n}\n"],"mappings":";;;;;;;;;;AA2BA,SAAS,gBAAgB;AAqBlB,IAAM,WAAgC,OAAO,KAAK,SAAS;AAChE,SAAO,WAAW,MAAM,KAAK;AAAA,IAC3B,QAAQ,MAAM,4BAA4B,YAAY;AAAA,EACxD,CAAC;AACD,MAAI,OAAO,WAAW,WAAW,cAAc,UAAU,WAAW;AAClE,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,aAAO,SAAS,iBAAiB,mBAAmB,CAAC,OAAO,QAAQ,CAAC;AAAA,IACvE,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import { PropsWithChildren } from 'react';
2
- import { Config, PageContextBuiltInServer, PageContextBuiltInClientWithClientRouting } from 'vike/types';
3
- import _default from './proxy/pages/_config.js';
2
+ import { Config, PageContextServer, PageContextClient } from 'vike/types';
3
+ import _default from './proxy/pages/wrapped/_config.js';
4
4
  import _default$1 from './renderer/_config.js';
5
5
  import { S as Snapshot } from './controller-16e58bbd.js';
6
6
 
@@ -58,15 +58,15 @@ type FromProxy = {
58
58
  layoutProps: AugmentMe.LayoutProps;
59
59
  html: string;
60
60
  };
61
- type PageContextProxyInit = PageContextBuiltInServer<Page> & {
61
+ type PageContextProxyInit = PageContextServer<Page> & {
62
62
  fromProxy: FromProxy;
63
63
  };
64
- type PageContextProxyServer = PageContextBuiltInServer<Page> & PageContextProxyCommon & {
64
+ type PageContextProxyServer = PageContextServer & PageContextProxyCommon & {
65
65
  proxy: string;
66
66
  };
67
- type PageContextProxyClient = PageContextBuiltInClientWithClientRouting<Page> & PageContextProxyCommon & (PageContextProxyClientHydration | PageContextProxyClientNav);
67
+ type PageContextProxyClient = PageContextClient & PageContextProxyCommon & (PageContextProxyClientHydration | PageContextProxyClientNav);
68
68
  type PageContextProxy = PageContextProxyServer | PageContextProxyClient;
69
- type PageContextProxyRestorationVisit = PageContextBuiltInClientWithClientRouting<Page> & {
69
+ type PageContextProxyRestorationVisit = PageContextClient & {
70
70
  snapshot: Snapshot;
71
71
  } & PageContextProxyCommon;
72
72
  type NoProxyConfig = ConfigConstructor<typeof _default$1, {
@@ -88,9 +88,16 @@ interface ApplicationFacingPageContext {
88
88
  interface PageContextNoProxyCommon extends ApplicationFacingPageContext {
89
89
  config: NoProxyConfig;
90
90
  }
91
- type PageContextNoProxyServer = PageContextBuiltInServer<Page> & PageContextNoProxyCommon;
92
- type PageContextNoProxyClient = PageContextBuiltInClientWithClientRouting<Page> & PageContextNoProxyCommon;
91
+ type PageContextNoProxyServer = PageContextServer<Page> & PageContextNoProxyCommon;
92
+ type PageContextNoProxyClient = PageContextClient<Page> & PageContextNoProxyCommon;
93
93
  type PageContextNoProxy = PageContextNoProxyServer | PageContextNoProxyClient;
94
94
  type PageContext = PageContextNoProxy | PageContextProxy | PageContextProxyRestorationVisit;
95
+ declare global {
96
+ namespace Vike {
97
+ interface PageContext {
98
+ Page?: React.ComponentType;
99
+ }
100
+ }
101
+ }
95
102
 
96
103
  export { ApplicationFacingPageContext as A, DocumentProps as D, LayoutMap as L, NoProxyConfig as N, ProxyConfig as P, AugmentMe as a, LayoutComponent as b, PageContext as c, PageContextNoProxy as d, PageContextNoProxyClient as e, PageContextNoProxyServer as f, PageContextProxyInit as g, PageContextProxyClient as h, PageContextProxyServer as i, PageContextProxyRestorationVisit as j };
@@ -0,0 +1,8 @@
1
+ declare const _default: {
2
+ route: string;
3
+ Page: string;
4
+ onRenderHtml: "import:@alignable/bifrost/proxy/pages/passthru/onRenderHtml";
5
+ onRenderClient: "import:@alignable/bifrost/proxy/pages/passthru/onRenderClient";
6
+ };
7
+
8
+ export { _default as default };
@@ -0,0 +1,12 @@
1
+ // proxy/pages/passthru/+config.ts
2
+ var config_default = {
3
+ route: "/*",
4
+ // Fake page:
5
+ Page: "import:@alignable/bifrost/proxy/pages/Page",
6
+ onRenderHtml: "import:@alignable/bifrost/proxy/pages/passthru/onRenderHtml",
7
+ onRenderClient: "import:@alignable/bifrost/proxy/pages/passthru/onRenderClient"
8
+ };
9
+ export {
10
+ config_default as default
11
+ };
12
+ //# sourceMappingURL=+config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../proxy/pages/passthru/+config.ts"],"sourcesContent":["import { Config } from \"vike/types\";\n\nexport default {\n route: \"/*\",\n // Fake page:\n Page: \"import:@alignable/bifrost/proxy/pages/Page\",\n onRenderHtml: \"import:@alignable/bifrost/proxy/pages/passthru/onRenderHtml\",\n onRenderClient:\n \"import:@alignable/bifrost/proxy/pages/passthru/onRenderClient\",\n} satisfies Config;\n"],"mappings":";AAEA,IAAO,iBAAQ;AAAA,EACb,OAAO;AAAA;AAAA,EAEP,MAAM;AAAA,EACN,cAAc;AAAA,EACd,gBACE;AACJ;","names":[]}
@@ -0,0 +1,3 @@
1
+ declare function onRenderClient(): Promise<void>;
2
+
3
+ export { onRenderClient as default };
@@ -0,0 +1,8 @@
1
+ // proxy/pages/passthru/onRenderClient.tsx
2
+ async function onRenderClient() {
3
+ window.location.reload();
4
+ }
5
+ export {
6
+ onRenderClient as default
7
+ };
8
+ //# sourceMappingURL=onRenderClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../proxy/pages/passthru/onRenderClient.tsx"],"sourcesContent":["export default async function onRenderClient() {\n // Passthru pages are unhandled by bifrost, reload to grab legacy content from server\n window.location.reload();\n}\n"],"mappings":";AAAA,eAAO,iBAAwC;AAE7C,SAAO,SAAS,OAAO;AACzB;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { f as PageContextNoProxyServer } from '../../../internal-28df99a9.js';
2
+ import 'react';
3
+ import 'vike/types';
4
+ import '../wrapped/_config.js';
5
+ import '../../../renderer/_config.js';
6
+ import '../../../controller-16e58bbd.js';
7
+
8
+ declare function onRenderHtml(pageContext: PageContextNoProxyServer): Promise<{
9
+ pageContext: {};
10
+ }>;
11
+
12
+ export { onRenderHtml as default };
@@ -0,0 +1,10 @@
1
+ // proxy/pages/passthru/onRenderHtml.tsx
2
+ async function onRenderHtml(pageContext) {
3
+ return {
4
+ pageContext: {}
5
+ };
6
+ }
7
+ export {
8
+ onRenderHtml as default
9
+ };
10
+ //# sourceMappingURL=onRenderHtml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../proxy/pages/passthru/onRenderHtml.tsx"],"sourcesContent":["import { PageContextNoProxyServer } from \"../../../types/internal.js\";\n\nexport default async function onRenderHtml(\n pageContext: PageContextNoProxyServer\n) {\n return {\n pageContext: {},\n };\n}\n"],"mappings":";AAEA,eAAO,aACL,aACA;AACA,SAAO;AAAA,IACL,aAAa,CAAC;AAAA,EAChB;AACF;","names":[]}
@@ -0,0 +1,25 @@
1
+ declare const _default: {
2
+ route: string;
3
+ onBeforeRender: "import:@alignable/bifrost/proxy/pages/wrapped/onBeforeRender";
4
+ onRenderClient: "import:@alignable/bifrost/proxy/pages/wrapped/onRenderClient";
5
+ onRenderHtml: "import:@alignable/bifrost/proxy/pages/wrapped/onRenderHtml";
6
+ Page: string;
7
+ passToClient: string[];
8
+ clientRouting: true;
9
+ hydrationCanBeAborted: true;
10
+ meta: {
11
+ layoutMap: {
12
+ env: {
13
+ server: true;
14
+ client: true;
15
+ };
16
+ };
17
+ onClientInit: {
18
+ env: {
19
+ client: true;
20
+ };
21
+ };
22
+ };
23
+ };
24
+
25
+ export { _default as default };
@@ -0,0 +1,19 @@
1
+ // proxy/pages/wrapped/+config.ts
2
+ var config_default = {
3
+ route: "/*",
4
+ onBeforeRender: "import:@alignable/bifrost/proxy/pages/wrapped/onBeforeRender",
5
+ onRenderClient: "import:@alignable/bifrost/proxy/pages/wrapped/onRenderClient",
6
+ onRenderHtml: "import:@alignable/bifrost/proxy/pages/wrapped/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: true, client: true } },
13
+ onClientInit: { env: { client: true } }
14
+ }
15
+ };
16
+ export {
17
+ config_default as default
18
+ };
19
+ //# sourceMappingURL=+config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../proxy/pages/wrapped/+config.ts"],"sourcesContent":["import { type Config } from \"vike/types\";\n\nexport default {\n route: \"/*\",\n onBeforeRender:\n \"import:@alignable/bifrost/proxy/pages/wrapped/onBeforeRender\",\n onRenderClient:\n \"import:@alignable/bifrost/proxy/pages/wrapped/onRenderClient\",\n onRenderHtml: \"import:@alignable/bifrost/proxy/pages/wrapped/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: true, client: true } },\n onClientInit: { env: { client: true } },\n },\n} satisfies Config;\n"],"mappings":";AAEA,IAAO,iBAAQ;AAAA,EACb,OAAO;AAAA,EACP,gBACE;AAAA,EACF,gBACE;AAAA,EACF,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,EAAE,QAAQ,MAAM,QAAQ,KAAK,EAAE;AAAA,IACjD,cAAc,EAAE,KAAK,EAAE,QAAQ,KAAK,EAAE;AAAA,EACxC;AACF;","names":[]}
@@ -1,9 +1,9 @@
1
- import { g as PageContextProxyInit, a as AugmentMe } from '../../internal-1d9cac7c.js';
1
+ import { g as PageContextProxyInit, a as AugmentMe } from '../../../internal-28df99a9.js';
2
2
  import 'react';
3
3
  import 'vike/types';
4
4
  import './_config.js';
5
- import '../../renderer/_config.js';
6
- import '../../controller-16e58bbd.js';
5
+ import '../../../renderer/_config.js';
6
+ import '../../../controller-16e58bbd.js';
7
7
 
8
8
  declare function onBeforeRender(pageContext: PageContextProxyInit): Promise<{
9
9
  pageContext: {
@@ -1,4 +1,4 @@
1
- // proxy/pages/onBeforeRender.tsx
1
+ // proxy/pages/wrapped/onBeforeRender.tsx
2
2
  async function onBeforeRender(pageContext) {
3
3
  if (pageContext.fromProxy) {
4
4
  const { fromProxy } = pageContext;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../proxy/pages/wrapped/onBeforeRender.tsx"],"sourcesContent":["import { PageContextProxyInit } from \"../../../types/internal\";\n\nexport default async function onBeforeRender(\n pageContext: PageContextProxyInit\n) {\n if (pageContext.fromProxy) {\n const { fromProxy } = pageContext;\n if (pageContext.isClientSideNavigation) {\n return {\n pageContext: {\n layout: fromProxy.layout,\n layoutProps: fromProxy.layoutProps,\n // proxySendClient is serialized and sent to client on subsequent navigation.\n // Important that we dont send it on ssr\n proxySendClient: fromProxy.html,\n },\n };\n } else {\n return {\n pageContext: {\n layout: fromProxy.layout,\n layoutProps: fromProxy.layoutProps,\n // proxy is ONLY included server-side to avoid doubling page size\n proxy: fromProxy.html,\n },\n };\n }\n }\n}\n"],"mappings":";AAEA,eAAO,eACL,aACA;AACA,MAAI,YAAY,WAAW;AACzB,UAAM,EAAE,UAAU,IAAI;AACtB,QAAI,YAAY,wBAAwB;AACtC,aAAO;AAAA,QACL,aAAa;AAAA,UACX,QAAQ,UAAU;AAAA,UAClB,aAAa,UAAU;AAAA;AAAA;AAAA,UAGvB,iBAAiB,UAAU;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO;AAAA,QACL,aAAa;AAAA,UACX,QAAQ,UAAU;AAAA,UAClB,aAAa,UAAU;AAAA;AAAA,UAEvB,OAAO,UAAU;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1,9 +1,9 @@
1
- import { h as PageContextProxyClient } from '../../internal-1d9cac7c.js';
1
+ import { h as PageContextProxyClient } from '../../../internal-28df99a9.js';
2
2
  import 'react';
3
3
  import 'vike/types';
4
4
  import './_config.js';
5
- import '../../renderer/_config.js';
6
- import '../../controller-16e58bbd.js';
5
+ import '../../../renderer/_config.js';
6
+ import '../../../controller-16e58bbd.js';
7
7
 
8
8
  declare function onRenderClient(pageContext: PageContextProxyClient): Promise<void>;
9
9
 
@@ -1,21 +1,22 @@
1
1
  import {
2
2
  getElementAttributes
3
- } from "../../chunk-RQ34EW7E.js";
3
+ } from "../../../chunk-RQ34EW7E.js";
4
4
  import {
5
5
  runClientInit
6
- } from "../../chunk-HZZHKVWB.js";
6
+ } from "../../../chunk-HZZHKVWB.js";
7
7
  import {
8
8
  Turbolinks,
9
9
  copyElementAttributes,
10
10
  renderReact
11
- } from "../../chunk-LCW7IDQV.js";
11
+ } from "../../../chunk-4YPY5NIX.js";
12
12
  import {
13
13
  PageShell
14
- } from "../../chunk-6QZLCT3X.js";
15
- import "../../chunk-IYGONC4I.js";
16
- import "../../chunk-EYYCKU6F.js";
14
+ } from "../../../chunk-JHLK62FM.js";
15
+ import "../../../chunk-PESUYCE4.js";
16
+ import "../../../chunk-IYGONC4I.js";
17
+ import "../../../chunk-EYYCKU6F.js";
17
18
 
18
- // proxy/pages/onRenderClient.tsx
19
+ // proxy/pages/wrapped/onRenderClient.tsx
19
20
  import React from "react";
20
21
  Turbolinks.start();
21
22
  var PassthruLayout = ({ children }) => /* @__PURE__ */ React.createElement(React.Fragment, null, children);
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../proxy/pages/wrapped/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 { copyElementAttributes } from \"../../../lib/turbolinks/util.js\";\nimport { getElementAttributes } from \"../../../lib/getElementAttributes.js\";\nimport { LayoutComponent } from \"../../../types/internal.js\";\nimport { runClientInit } from \"../../../lib/runClientInit.js\";\n\nTurbolinks.start();\n\nconst PassthruLayout: LayoutComponent = ({ children }) => <>{children}</>;\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] || PassthruLayout;\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 function cachePageContext() {\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\n if (pageContext.isHydration) {\n // During hydration of initial ssr, body is in dom, not page props (to avoid double-send)\n await runClientInit(pageContext.configEntries);\n bodyEl = document.getElementById(\"proxied-body\")!;\n render(bodyEl.innerHTML);\n cachePageContext();\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, 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 cachePageContext();\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAUlB,WAAW,MAAM;AAEjB,IAAM,iBAAkC,CAAC,EAAE,SAAS,MAAM,0DAAG,QAAS;AAEtE,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,KAAK;AAEpC,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,WAAS,mBAAmB;AAE1B,eAAW,qBAAqB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,WAAW,qBAAqB,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AAEA,MAAI,YAAY,aAAa;AAE3B,UAAM,cAAc,YAAY,aAAa;AAC7C,aAAS,SAAS,eAAe,cAAc;AAC/C,WAAO,OAAO,SAAS;AACvB,qBAAiB;AAAA,EACnB,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,MAAM;AAEtD,eAAS,KACN,kBAAkB,EAClB,QAAQ,CAAC,MAAM,SAAS,KAAK,gBAAgB,CAAC,CAAC;AAClD,4BAAsB,SAAS,MAAM,MAAM;AAE3C,aAAO,OAAO,SAAS;AACvB,uBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1,10 +1,10 @@
1
1
  import * as vike_dist_esm_node_runtime_html_renderHtml_js from 'vike/dist/esm/node/runtime/html/renderHtml.js';
2
- import { i as PageContextProxyServer } from '../../internal-1d9cac7c.js';
2
+ import { i as PageContextProxyServer } from '../../../internal-28df99a9.js';
3
3
  import 'react';
4
4
  import 'vike/types';
5
5
  import './_config.js';
6
- import '../../renderer/_config.js';
7
- import '../../controller-16e58bbd.js';
6
+ import '../../../renderer/_config.js';
7
+ import '../../../controller-16e58bbd.js';
8
8
 
9
9
  declare function onRenderHtml(pageContext: PageContextProxyServer): Promise<{
10
10
  documentHtml: string;
@@ -1,13 +1,14 @@
1
1
  import {
2
2
  getElementAttributes
3
- } from "../../chunk-RQ34EW7E.js";
3
+ } from "../../../chunk-RQ34EW7E.js";
4
4
  import {
5
5
  PageShell
6
- } from "../../chunk-6QZLCT3X.js";
7
- import "../../chunk-IYGONC4I.js";
8
- import "../../chunk-EYYCKU6F.js";
6
+ } from "../../../chunk-JHLK62FM.js";
7
+ import "../../../chunk-PESUYCE4.js";
8
+ import "../../../chunk-IYGONC4I.js";
9
+ import "../../../chunk-EYYCKU6F.js";
9
10
 
10
- // proxy/pages/onRenderHtml.tsx
11
+ // proxy/pages/wrapped/onRenderHtml.tsx
11
12
  import React from "react";
12
13
  import ReactDOMServer from "react-dom/server";
13
14
  import { dangerouslySkipEscape, escapeInject } from "vike/server";
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../proxy/pages/wrapped/onRenderHtml.tsx"],"sourcesContent":["import React from \"react\";\nimport ReactDOMServer from \"react-dom/server\";\nimport { dangerouslySkipEscape, escapeInject } from \"vike/server\";\nimport { PageContextProxyServer } from \"../../../types/internal.js\";\nimport { PageShell } from \"../../../lib/PageShell.js\";\nimport jsdom from \"jsdom\";\nimport { getElementAttributes } from \"../../../lib/getElementAttributes.js\";\n\nexport default async function onRenderHtml(\n pageContext: PageContextProxyServer\n) {\n if (pageContext.proxy) {\n const { proxy, 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 if (!Layout) {\n // passthru\n return { documentHtml: proxy, pageContext: {} };\n }\n\n const dom = new jsdom.JSDOM(proxy);\n const doc = dom.window.document;\n const bodyEl = doc.querySelector(\"body\");\n const head = doc.querySelector(\"head\");\n if (!bodyEl || !head) {\n throw new Error(\"Proxy failed\");\n }\n\n const pageHtml = ReactDOMServer.renderToString(\n <PageShell pageContext={pageContext}>\n <Layout {...layoutProps}>\n <div\n id=\"proxied-body\"\n dangerouslySetInnerHTML={{ __html: bodyEl.innerHTML }}\n />\n </Layout>\n </PageShell>\n );\n\n const documentHtml = escapeInject`\n <!DOCTYPE html>\n <html>\n <head>\n ${dangerouslySkipEscape(head.innerHTML)}\n ${\n // We need to fire turbolinks:load exactly on DCL, so it must be a blocking head script to catch DCL event.\n // Vite loads scripts with type=\"module\" so the rest of our code will show up too late.\n // TODO: figure out how to bundle this better. at least read from a .js file\n dangerouslySkipEscape(`<script>\n window.Turbolinks = {controller:{restorationIdentifier: ''}};\n addEventListener(\"DOMContentLoaded\", () => {\n const event = new Event(\"turbolinks:load\", { bubbles: true, cancelable: true });\n event.data = {url: window.location.href};\n document.dispatchEvent(event); \n })\n </script>`)\n }\n </head>\n <body ${dangerouslySkipEscape(\n Object.entries(getElementAttributes(bodyEl))\n .map(([name, value]) => `${name}=\"${value}\"`)\n .join(\" \")\n )}>\n <div id=\"page-view\">${dangerouslySkipEscape(pageHtml)}</div>\n </body>\n </html>`;\n\n return {\n documentHtml,\n pageContext: {},\n };\n } else {\n // do nothing: Just exists to signal fastify server that no routes matched and we should proxy\n return {};\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,WAAW;AAClB,OAAO,oBAAoB;AAC3B,SAAS,uBAAuB,oBAAoB;AAGpD,OAAO,WAAW;AAGlB,eAAO,aACL,aACA;AACA,MAAI,YAAY,OAAO;AACrB,UAAM,EAAE,OAAO,aAAa,OAAO,IAAI;AAEvC,UAAM,EAAE,UAAU,IAAI,YAAY;AAClC,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AACA,UAAM,SAAS,UAAU,MAAM;AAC/B,QAAI,CAAC,QAAQ;AAEX,aAAO,EAAE,cAAc,OAAO,aAAa,CAAC,EAAE;AAAA,IAChD;AAEA,UAAM,MAAM,IAAI,MAAM,MAAM,KAAK;AACjC,UAAM,MAAM,IAAI,OAAO;AACvB,UAAM,SAAS,IAAI,cAAc,MAAM;AACvC,UAAM,OAAO,IAAI,cAAc,MAAM;AACrC,QAAI,CAAC,UAAU,CAAC,MAAM;AACpB,YAAM,IAAI,MAAM,cAAc;AAAA,IAChC;AAEA,UAAM,WAAW,eAAe;AAAA,MAC9B,oCAAC,aAAU,eACT,oCAAC,UAAQ,GAAG,eACV;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,yBAAyB,EAAE,QAAQ,OAAO,UAAU;AAAA;AAAA,MACtD,CACF,CACF;AAAA,IACF;AAEA,UAAM,eAAe;AAAA;AAAA;AAAA;AAAA,YAIb,sBAAsB,KAAK,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA,IAKrC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAOd,CACV;AAAA;AAAA,gBAEM;AAAA,MACN,OAAO,QAAQ,qBAAqB,MAAM,CAAC,EACxC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,KAAK,KAAK,GAAG,EAC3C,KAAK,GAAG;AAAA,IACb,CAAC;AAAA,gCACuB,sBAAsB,QAAQ,CAAC;AAAA;AAAA;AAI3D,WAAO;AAAA,MACL;AAAA,MACA,aAAa,CAAC;AAAA,IAChB;AAAA,EACF,OAAO;AAEL,WAAO,CAAC;AAAA,EACV;AACF;","names":[]}