@alignable/bifrost 0.0.34 → 0.0.36

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 (51) 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 +4 -2
  8. package/dist/index.js +11 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/{internal-23a16e8b.d.ts → internal-28df99a9.d.ts} +14 -7
  11. package/dist/proxy/pages/passthru/+config.d.ts +1 -1
  12. package/dist/proxy/pages/passthru/+config.js +2 -2
  13. package/dist/proxy/pages/passthru/+config.js.map +1 -1
  14. package/dist/proxy/pages/passthru/onRenderHtml.d.ts +1 -1
  15. package/dist/proxy/pages/wrapped/+config.d.ts +7 -2
  16. package/dist/proxy/pages/wrapped/+config.js +2 -2
  17. package/dist/proxy/pages/wrapped/+config.js.map +1 -1
  18. package/dist/proxy/pages/wrapped/onBeforeRender.d.ts +1 -1
  19. package/dist/proxy/pages/wrapped/onRenderClient.d.ts +1 -1
  20. package/dist/proxy/pages/wrapped/onRenderClient.js +3 -2
  21. package/dist/proxy/pages/wrapped/onRenderClient.js.map +1 -1
  22. package/dist/proxy/pages/wrapped/onRenderHtml.d.ts +1 -1
  23. package/dist/proxy/pages/wrapped/onRenderHtml.js +2 -1
  24. package/dist/proxy/pages/wrapped/onRenderHtml.js.map +1 -1
  25. package/dist/proxy/pages/wrapped/restorationVisit/+config.d.ts +7 -2
  26. package/dist/proxy/pages/wrapped/restorationVisit/+config.js +2 -2
  27. package/dist/proxy/pages/wrapped/restorationVisit/+config.js.map +1 -1
  28. package/dist/proxy/pages/wrapped/restorationVisit/onRenderClient.d.ts +1 -1
  29. package/dist/proxy/pages/wrapped/restorationVisit/onRenderClient.js +3 -2
  30. package/dist/proxy/pages/wrapped/restorationVisit/onRenderClient.js.map +1 -1
  31. package/dist/renderer/+config.d.ts +22 -6
  32. package/dist/renderer/+config.js +6 -6
  33. package/dist/renderer/+config.js.map +1 -1
  34. package/dist/renderer/getConfigOrPageContext.d.ts +1 -1
  35. package/dist/renderer/onRenderClient.d.ts +1 -1
  36. package/dist/renderer/onRenderClient.js +3 -2
  37. package/dist/renderer/onRenderClient.js.map +1 -1
  38. package/dist/renderer/onRenderHtml.d.ts +1 -1
  39. package/dist/renderer/onRenderHtml.js +2 -1
  40. package/dist/renderer/onRenderHtml.js.map +1 -1
  41. package/dist/renderer/useNavigation.d.ts +13 -0
  42. package/dist/renderer/useNavigation.js +12 -0
  43. package/dist/renderer/useNavigation.js.map +1 -0
  44. package/dist/renderer/usePageContext.d.ts +1 -1
  45. package/dist/renderer/utils/buildHead.d.ts +1 -1
  46. package/package.json +3 -7
  47. package/dist/chunk-6QZLCT3X.js.map +0 -1
  48. package/dist/chunk-LCW7IDQV.js.map +0 -1
  49. package/dist/proxy/pages/passthru/onRenderClient.d.ts +0 -3
  50. package/dist/proxy/pages/passthru/onRenderClient.js +0 -8
  51. package/dist/proxy/pages/passthru/onRenderClient.js.map +0 -1
@@ -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,8 +1,10 @@
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-23a16e8b.js';
4
- export { N as BifrostConfig, P as BifrostProxyConfig, D as DocumentProps, b as LayoutComponent, L as LayoutMap, c as PageContext } from './internal-23a16e8b.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
9
  import './proxy/pages/wrapped/_config.js';
8
10
  import './renderer/_config.js';
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,5 +1,5 @@
1
1
  import { PropsWithChildren } from 'react';
2
- import { Config, PageContextBuiltInServer, PageContextBuiltInClientWithClientRouting } from 'vike/types';
2
+ import { Config, PageContextServer, PageContextClient } from 'vike/types';
3
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';
@@ -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 };
@@ -1,8 +1,8 @@
1
1
  declare const _default: {
2
2
  route: string;
3
+ clientRouting: false;
3
4
  Page: string;
4
5
  onRenderHtml: "import:@alignable/bifrost/proxy/pages/passthru/onRenderHtml";
5
- onRenderClient: "import:@alignable/bifrost/proxy/pages/passthru/onRenderClient";
6
6
  };
7
7
 
8
8
  export { _default as default };
@@ -1,10 +1,10 @@
1
1
  // proxy/pages/passthru/+config.ts
2
2
  var config_default = {
3
3
  route: "/*",
4
+ clientRouting: false,
4
5
  // Fake page:
5
6
  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"
7
+ onRenderHtml: "import:@alignable/bifrost/proxy/pages/passthru/onRenderHtml"
8
8
  };
9
9
  export {
10
10
  config_default as default
@@ -1 +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":[]}
1
+ {"version":3,"sources":["../../../../proxy/pages/passthru/+config.ts"],"sourcesContent":["import { Config } from \"vike/types\";\n\nexport default {\n route: \"/*\",\n clientRouting: false,\n // Fake page:\n Page: \"import:@alignable/bifrost/proxy/pages/Page\",\n onRenderHtml: \"import:@alignable/bifrost/proxy/pages/passthru/onRenderHtml\",\n} satisfies Config;\n"],"mappings":";AAEA,IAAO,iBAAQ;AAAA,EACb,OAAO;AAAA,EACP,eAAe;AAAA;AAAA,EAEf,MAAM;AAAA,EACN,cAAc;AAChB;","names":[]}
@@ -1,4 +1,4 @@
1
- import { f as PageContextNoProxyServer } from '../../../internal-23a16e8b.js';
1
+ import { f as PageContextNoProxyServer } from '../../../internal-28df99a9.js';
2
2
  import 'react';
3
3
  import 'vike/types';
4
4
  import '../wrapped/_config.js';
@@ -9,10 +9,15 @@ declare const _default: {
9
9
  hydrationCanBeAborted: true;
10
10
  meta: {
11
11
  layoutMap: {
12
- env: "server-and-client";
12
+ env: {
13
+ server: true;
14
+ client: true;
15
+ };
13
16
  };
14
17
  onClientInit: {
15
- env: "client-only";
18
+ env: {
19
+ client: true;
20
+ };
16
21
  };
17
22
  };
18
23
  };
@@ -9,8 +9,8 @@ var config_default = {
9
9
  clientRouting: true,
10
10
  hydrationCanBeAborted: true,
11
11
  meta: {
12
- layoutMap: { env: "server-and-client" },
13
- onClientInit: { env: "client-only" }
12
+ layoutMap: { env: { server: true, client: true } },
13
+ onClientInit: { env: { client: true } }
14
14
  }
15
15
  };
16
16
  export {
@@ -1 +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-and-client\" },\n onClientInit: { env: \"client-only\" },\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,oBAAoB;AAAA,IACtC,cAAc,EAAE,KAAK,cAAc;AAAA,EACrC;AACF;","names":[]}
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,4 +1,4 @@
1
- import { g as PageContextProxyInit, a as AugmentMe } from '../../../internal-23a16e8b.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';
@@ -1,4 +1,4 @@
1
- import { h as PageContextProxyClient } from '../../../internal-23a16e8b.js';
1
+ import { h as PageContextProxyClient } from '../../../internal-28df99a9.js';
2
2
  import 'react';
3
3
  import 'vike/types';
4
4
  import './_config.js';
@@ -8,10 +8,11 @@ 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";
14
+ } from "../../../chunk-JHLK62FM.js";
15
+ import "../../../chunk-PESUYCE4.js";
15
16
  import "../../../chunk-IYGONC4I.js";
16
17
  import "../../../chunk-EYYCKU6F.js";
17
18
 
@@ -1 +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
+ {"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,5 +1,5 @@
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-23a16e8b.js';
2
+ import { i as PageContextProxyServer } from '../../../internal-28df99a9.js';
3
3
  import 'react';
4
4
  import 'vike/types';
5
5
  import './_config.js';
@@ -3,7 +3,8 @@ import {
3
3
  } from "../../../chunk-RQ34EW7E.js";
4
4
  import {
5
5
  PageShell
6
- } from "../../../chunk-6QZLCT3X.js";
6
+ } from "../../../chunk-JHLK62FM.js";
7
+ import "../../../chunk-PESUYCE4.js";
7
8
  import "../../../chunk-IYGONC4I.js";
8
9
  import "../../../chunk-EYYCKU6F.js";
9
10
 
@@ -1 +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":[]}
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":[]}
@@ -8,10 +8,15 @@ declare const _default: {
8
8
  hydrationCanBeAborted: true;
9
9
  meta: {
10
10
  layoutMap: {
11
- env: "server-and-client";
11
+ env: {
12
+ server: true;
13
+ client: true;
14
+ };
12
15
  };
13
16
  onClientInit: {
14
- env: "client-only";
17
+ env: {
18
+ client: true;
19
+ };
15
20
  };
16
21
  };
17
22
  };
@@ -8,8 +8,8 @@ var config_default = {
8
8
  clientRouting: true,
9
9
  hydrationCanBeAborted: true,
10
10
  meta: {
11
- layoutMap: { env: "server-and-client" },
12
- onClientInit: { env: "client-only" }
11
+ layoutMap: { env: { server: true, client: true } },
12
+ onClientInit: { env: { client: true } }
13
13
  }
14
14
  };
15
15
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../proxy/pages/wrapped/restorationVisit/+config.ts"],"sourcesContent":["import { Config } from \"vike/types\";\n\nexport default {\n route: \"import:@alignable/bifrost/proxy/pages/wrapped/restorationVisit/route\",\n Page: \"import:@alignable/bifrost/proxy/pages/Page\",\n onBeforeRender: null,\n onRenderClient:\n \"import:@alignable/bifrost/proxy/pages/wrapped/restorationVisit/onRenderClient\",\n passToClient: [],\n clientRouting: true,\n hydrationCanBeAborted: true,\n meta: {\n layoutMap: { env: \"server-and-client\" },\n onClientInit: { env: \"client-only\" },\n },\n} satisfies Config;\n"],"mappings":";AAEA,IAAO,iBAAQ;AAAA,EACb,OAAO;AAAA,EACP,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,gBACE;AAAA,EACF,cAAc,CAAC;AAAA,EACf,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,MAAM;AAAA,IACJ,WAAW,EAAE,KAAK,oBAAoB;AAAA,IACtC,cAAc,EAAE,KAAK,cAAc;AAAA,EACrC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../../proxy/pages/wrapped/restorationVisit/+config.ts"],"sourcesContent":["import { Config } from \"vike/types\";\n\nexport default {\n route: \"import:@alignable/bifrost/proxy/pages/wrapped/restorationVisit/route\",\n Page: \"import:@alignable/bifrost/proxy/pages/Page\",\n onBeforeRender: null,\n onRenderClient:\n \"import:@alignable/bifrost/proxy/pages/wrapped/restorationVisit/onRenderClient\",\n passToClient: [],\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,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,gBACE;AAAA,EACF,cAAc,CAAC;AAAA,EACf,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,4 +1,4 @@
1
- import { j as PageContextProxyRestorationVisit } from '../../../../internal-23a16e8b.js';
1
+ import { j as PageContextProxyRestorationVisit } from '../../../../internal-28df99a9.js';
2
2
  import 'react';
3
3
  import 'vike/types';
4
4
  import '../_config.js';
@@ -5,10 +5,11 @@ import {
5
5
  Turbolinks,
6
6
  copyElementAttributes,
7
7
  renderReact
8
- } from "../../../../chunk-LCW7IDQV.js";
8
+ } from "../../../../chunk-4YPY5NIX.js";
9
9
  import {
10
10
  PageShell
11
- } from "../../../../chunk-6QZLCT3X.js";
11
+ } from "../../../../chunk-JHLK62FM.js";
12
+ import "../../../../chunk-PESUYCE4.js";
12
13
  import "../../../../chunk-IYGONC4I.js";
13
14
  import "../../../../chunk-EYYCKU6F.js";
14
15
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../proxy/pages/wrapped/restorationVisit/onRenderClient.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n LayoutComponent,\n PageContextProxyRestorationVisit,\n} from \"../../../../types/internal.js\";\nimport { PageShell } from \"../../../../lib/PageShell.js\";\nimport { renderReact } from \"../../../../lib/renderReact.js\";\nimport { Turbolinks } from \"../../../../lib/turbolinks/index.js\";\nimport { getElementAttributes } from \"../../../../lib/getElementAttributes.js\";\nimport { copyElementAttributes } from \"../../../../lib/turbolinks/util.js\";\n\nconst PassthruLayout: LayoutComponent = ({ children }) => <>{children}</>;\n\nexport default async function onRenderClient(\n pageContext: PageContextProxyRestorationVisit\n) {\n if (pageContext.isHydration) {\n throw new Error(\"restoration visit should never happen on initial render\");\n }\n\n const { layoutProps, layout } = pageContext.snapshot.pageContext;\n const { bodyEl, headEl } = pageContext.snapshot;\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 const proxyBodyEl = bodyEl.querySelector(\"#proxied-body\");\n if (!proxyBodyEl) {\n throw new Error(\"proxied body not found in cached snapshot\");\n }\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(proxyBodyEl.innerHTML);\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"],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAWlB,IAAM,iBAAkC,CAAC,EAAE,SAAS,MAAM,0DAAG,QAAS;AAEtE,eAAO,eACL,aACA;AACA,MAAI,YAAY,aAAa;AAC3B,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AAEA,QAAM,EAAE,aAAa,OAAO,IAAI,YAAY,SAAS;AACrD,QAAM,EAAE,QAAQ,OAAO,IAAI,YAAY;AACvC,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,QAAM,cAAc,OAAO,cAAc,eAAe;AACxD,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,aAAW,mBAAmB,QAAQ,MAAM,MAAM,MAAM;AAEtD,aAAS,KACN,kBAAkB,EAClB,QAAQ,CAAC,MAAM,SAAS,KAAK,gBAAgB,CAAC,CAAC;AAClD,0BAAsB,SAAS,MAAM,MAAM;AAE3C,WAAO,YAAY,SAAS;AAE5B,eAAW,qBAAqB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,WAAW,qBAAqB,MAAM;AAAA,IACxC,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../../proxy/pages/wrapped/restorationVisit/onRenderClient.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n LayoutComponent,\n PageContextProxyRestorationVisit,\n} from \"../../../../types/internal.js\";\nimport { PageShell } from \"../../../../lib/PageShell.js\";\nimport { renderReact } from \"../../../../lib/renderReact.js\";\nimport { Turbolinks } from \"../../../../lib/turbolinks/index.js\";\nimport { getElementAttributes } from \"../../../../lib/getElementAttributes.js\";\nimport { copyElementAttributes } from \"../../../../lib/turbolinks/util.js\";\n\nconst PassthruLayout: LayoutComponent = ({ children }) => <>{children}</>;\n\nexport default async function onRenderClient(\n pageContext: PageContextProxyRestorationVisit\n) {\n if (pageContext.isHydration) {\n throw new Error(\"restoration visit should never happen on initial render\");\n }\n\n const { layoutProps, layout } = pageContext.snapshot.pageContext;\n const { bodyEl, headEl } = pageContext.snapshot;\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 const proxyBodyEl = bodyEl.querySelector(\"#proxied-body\");\n if (!proxyBodyEl) {\n throw new Error(\"proxied body not found in cached snapshot\");\n }\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(proxyBodyEl.innerHTML);\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"],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAWlB,IAAM,iBAAkC,CAAC,EAAE,SAAS,MAAM,0DAAG,QAAS;AAEtE,eAAO,eACL,aACA;AACA,MAAI,YAAY,aAAa;AAC3B,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AAEA,QAAM,EAAE,aAAa,OAAO,IAAI,YAAY,SAAS;AACrD,QAAM,EAAE,QAAQ,OAAO,IAAI,YAAY;AACvC,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,QAAM,cAAc,OAAO,cAAc,eAAe;AACxD,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,aAAW,mBAAmB,QAAQ,MAAM,MAAM,MAAM;AAEtD,aAAS,KACN,kBAAkB,EAClB,QAAQ,CAAC,MAAM,SAAS,KAAK,gBAAgB,CAAC,CAAC;AAClD,0BAAsB,SAAS,MAAM,MAAM;AAE3C,WAAO,YAAY,SAAS;AAE5B,eAAW,qBAAqB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,WAAW,qBAAqB,MAAM;AAAA,IACxC,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}
@@ -7,22 +7,38 @@ declare const _default: {
7
7
  hydrationCanBeAborted: true;
8
8
  meta: {
9
9
  Layout: {
10
- env: "server-and-client";
10
+ env: {
11
+ server: true;
12
+ client: true;
13
+ };
11
14
  };
12
15
  layoutProps: {
13
- env: "server-and-client";
16
+ env: {
17
+ server: true;
18
+ client: true;
19
+ };
14
20
  };
15
21
  documentProps: {
16
- env: "server-and-client";
22
+ env: {
23
+ server: true;
24
+ client: true;
25
+ };
17
26
  };
18
27
  scripts: {
19
- env: "server-and-client";
28
+ env: {
29
+ server: true;
30
+ client: true;
31
+ };
20
32
  };
21
33
  favicon: {
22
- env: "server-only";
34
+ env: {
35
+ server: true;
36
+ };
23
37
  };
24
38
  onClientInit: {
25
- env: "client-only";
39
+ env: {
40
+ client: true;
41
+ };
26
42
  };
27
43
  };
28
44
  };
@@ -15,12 +15,12 @@ var config_default = {
15
15
  clientRouting: true,
16
16
  hydrationCanBeAborted: true,
17
17
  meta: {
18
- Layout: { env: "server-and-client" },
19
- layoutProps: { env: "server-and-client" },
20
- documentProps: { env: "server-and-client" },
21
- scripts: { env: "server-and-client" },
22
- favicon: { env: "server-only" },
23
- onClientInit: { env: "client-only" }
18
+ Layout: { env: { server: true, client: true } },
19
+ layoutProps: { env: { server: true, client: true } },
20
+ documentProps: { env: { server: true, client: true } },
21
+ scripts: { env: { server: true, client: true } },
22
+ favicon: { env: { server: true } },
23
+ onClientInit: { env: { client: true } }
24
24
  }
25
25
  };
26
26
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../renderer/+config.ts"],"sourcesContent":["import { type Config } from \"vike/types\";\n\nconst passToClient = [\n \"layoutProps\",\n \"pageProps\",\n \"redirectTo\",\n \"documentProps\",\n \"scripts\",\n \"is404\",\n];\nexport default {\n passToClient,\n onRenderClient: \"import:@alignable/bifrost/renderer/onRenderClient\",\n onRenderHtml: \"import:@alignable/bifrost/renderer/onRenderHtml\",\n onBeforeRoute: \"import:@alignable/bifrost/renderer/onBeforeRoute\",\n clientRouting: true,\n hydrationCanBeAborted: true,\n meta: {\n Layout: { env: \"server-and-client\" },\n layoutProps: { env: \"server-and-client\" },\n documentProps: { env: \"server-and-client\" },\n scripts: { env: \"server-and-client\" },\n favicon: { env: \"server-only\" },\n onClientInit: { env: \"client-only\" },\n },\n} satisfies Config;\n"],"mappings":";AAEA,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAO,iBAAQ;AAAA,EACb;AAAA,EACA,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,MAAM;AAAA,IACJ,QAAQ,EAAE,KAAK,oBAAoB;AAAA,IACnC,aAAa,EAAE,KAAK,oBAAoB;AAAA,IACxC,eAAe,EAAE,KAAK,oBAAoB;AAAA,IAC1C,SAAS,EAAE,KAAK,oBAAoB;AAAA,IACpC,SAAS,EAAE,KAAK,cAAc;AAAA,IAC9B,cAAc,EAAE,KAAK,cAAc;AAAA,EACrC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../renderer/+config.ts"],"sourcesContent":["import { type Config } from \"vike/types\";\n\nconst passToClient = [\n \"layoutProps\",\n \"pageProps\",\n \"redirectTo\",\n \"documentProps\",\n \"scripts\",\n \"is404\",\n];\nexport default {\n passToClient,\n onRenderClient: \"import:@alignable/bifrost/renderer/onRenderClient\",\n onRenderHtml: \"import:@alignable/bifrost/renderer/onRenderHtml\",\n onBeforeRoute: \"import:@alignable/bifrost/renderer/onBeforeRoute\",\n clientRouting: true,\n hydrationCanBeAborted: true,\n meta: {\n Layout: { env: { server: true, client: true } },\n layoutProps: { env: { server: true, client: true } },\n documentProps: { env: { server: true, client: true } },\n scripts: { env: { server: true, client: true } },\n favicon: { env: { server: true } },\n onClientInit: { env: { client: true } },\n },\n} satisfies Config;\n"],"mappings":";AAEA,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAO,iBAAQ;AAAA,EACb;AAAA,EACA,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,MAAM;AAAA,IACJ,QAAQ,EAAE,KAAK,EAAE,QAAQ,MAAM,QAAQ,KAAK,EAAE;AAAA,IAC9C,aAAa,EAAE,KAAK,EAAE,QAAQ,MAAM,QAAQ,KAAK,EAAE;AAAA,IACnD,eAAe,EAAE,KAAK,EAAE,QAAQ,MAAM,QAAQ,KAAK,EAAE;AAAA,IACrD,SAAS,EAAE,KAAK,EAAE,QAAQ,MAAM,QAAQ,KAAK,EAAE;AAAA,IAC/C,SAAS,EAAE,KAAK,EAAE,QAAQ,KAAK,EAAE;AAAA,IACjC,cAAc,EAAE,KAAK,EAAE,QAAQ,KAAK,EAAE;AAAA,EACxC;AACF;","names":[]}
@@ -1,4 +1,4 @@
1
- import { d as PageContextNoProxy } from '../internal-23a16e8b.js';
1
+ import { d as PageContextNoProxy } from '../internal-28df99a9.js';
2
2
  import 'react';
3
3
  import 'vike/types';
4
4
  import '../proxy/pages/wrapped/_config.js';
@@ -1,4 +1,4 @@
1
- import { e as PageContextNoProxyClient } from '../internal-23a16e8b.js';
1
+ import { e as PageContextNoProxyClient } from '../internal-28df99a9.js';
2
2
  import 'react';
3
3
  import 'vike/types';
4
4
  import '../proxy/pages/wrapped/_config.js';
@@ -4,16 +4,17 @@ import {
4
4
  import {
5
5
  Turbolinks,
6
6
  renderReact
7
- } from "../chunk-LCW7IDQV.js";
7
+ } from "../chunk-4YPY5NIX.js";
8
8
  import {
9
9
  PageShell
10
- } from "../chunk-6QZLCT3X.js";
10
+ } from "../chunk-JHLK62FM.js";
11
11
  import {
12
12
  documentPropsToReact
13
13
  } from "../chunk-VYXAWOXV.js";
14
14
  import {
15
15
  getPageContextOrConfig
16
16
  } from "../chunk-CXNEKD7R.js";
17
+ import "../chunk-PESUYCE4.js";
17
18
  import "../chunk-IYGONC4I.js";
18
19
  import "../chunk-EYYCKU6F.js";
19
20
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../renderer/onRenderClient.tsx"],"sourcesContent":["import React, { PropsWithChildren } from \"react\";\nimport { renderReact } from \"../lib/renderReact.js\";\nimport { PageContextNoProxyClient } from \"../types/internal.js\";\nimport { PageShell } from \"../lib/PageShell.js\";\nimport { Turbolinks } from \"../lib/turbolinks/index.js\";\nimport { documentPropsToReact } from \"./utils/buildHead.js\";\nimport { getPageContextOrConfig } from \"./getConfigOrPageContext.js\";\nimport { createRoot } from \"react-dom/client\";\nimport { runClientInit } from \"../lib/runClientInit.js\";\n\nTurbolinks.start();\n\nconst PassThruLayout: React.ComponentType<PropsWithChildren> = ({\n children,\n}) => <>{children}</>;\n\nexport default async function onRenderClient(\n pageContext: PageContextNoProxyClient\n) {\n if (pageContext.redirectTo) {\n Turbolinks.visit(pageContext.redirectTo);\n return;\n }\n\n // Back button leading to 404 means we hit a page bifrost can't handle in the browser history.\n // Reload allows us to revert to passthru proxy and/or let ALB handle\n if (pageContext.isBackwardNavigation && pageContext.is404) {\n Turbolinks.controller.viewInvalidated();\n return;\n }\n\n const { Page, pageProps } = pageContext;\n const { Layout = PassThruLayout } = pageContext.config;\n const layoutProps = getPageContextOrConfig(pageContext, \"layoutProps\") || {};\n\n if (!Page)\n throw new Error(\"Client-side render() hook expects Page to be exported\");\n\n const page = (\n <PageShell pageContext={pageContext}>\n <Layout {...layoutProps}>\n <Page {...pageProps} />\n </Layout>\n </PageShell>\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 renderReact(page, pageContext.isHydration);\n } else {\n const head = document.createElement(\"head\");\n createRoot(head).render(\n documentPropsToReact(\n getPageContextOrConfig(pageContext, \"documentProps\") || {}\n )\n );\n pageContext.config.scripts?.forEach((s) => {\n head.insertAdjacentHTML(\"beforeend\", s);\n });\n\n requestAnimationFrame(() => {\n Turbolinks._vpsOnRenderClient(head, false, false, () => {\n // clear anything on body\n document.body\n .getAttributeNames()\n .forEach((n) => document.body.removeAttribute(n));\n renderReact(page, pageContext.isHydration);\n });\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAkC;AAOzC,SAAS,kBAAkB;AAG3B,WAAW,MAAM;AAEjB,IAAM,iBAAyD,CAAC;AAAA,EAC9D;AACF,MAAM,0DAAG,QAAS;AAElB,eAAO,eACL,aACA;AACA,MAAI,YAAY,YAAY;AAC1B,eAAW,MAAM,YAAY,UAAU;AACvC;AAAA,EACF;AAIA,MAAI,YAAY,wBAAwB,YAAY,OAAO;AACzD,eAAW,WAAW,gBAAgB;AACtC;AAAA,EACF;AAEA,QAAM,EAAE,MAAM,UAAU,IAAI;AAC5B,QAAM,EAAE,SAAS,eAAe,IAAI,YAAY;AAChD,QAAM,cAAc,uBAAuB,aAAa,aAAa,KAAK,CAAC;AAE3E,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,uDAAuD;AAEzE,QAAM,OACJ,oCAAC,aAAU,eACT,oCAAC,UAAQ,GAAG,eACV,oCAAC,QAAM,GAAG,WAAW,CACvB,CACF;AAEF,MAAI,YAAY,aAAa;AAE3B,UAAM,cAAc,YAAY,aAAa;AAC7C,gBAAY,MAAM,YAAY,WAAW;AAAA,EAC3C,OAAO;AACL,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,eAAW,IAAI,EAAE;AAAA,MACf;AAAA,QACE,uBAAuB,aAAa,eAAe,KAAK,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,gBAAY,OAAO,SAAS,QAAQ,CAAC,MAAM;AACzC,WAAK,mBAAmB,aAAa,CAAC;AAAA,IACxC,CAAC;AAED,0BAAsB,MAAM;AAC1B,iBAAW,mBAAmB,MAAM,OAAO,OAAO,MAAM;AAEtD,iBAAS,KACN,kBAAkB,EAClB,QAAQ,CAAC,MAAM,SAAS,KAAK,gBAAgB,CAAC,CAAC;AAClD,oBAAY,MAAM,YAAY,WAAW;AAAA,MAC3C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../renderer/onRenderClient.tsx"],"sourcesContent":["import React, { PropsWithChildren } from \"react\";\nimport { renderReact } from \"../lib/renderReact.js\";\nimport { PageContextNoProxyClient } from \"../types/internal.js\";\nimport { PageShell } from \"../lib/PageShell.js\";\nimport { Turbolinks } from \"../lib/turbolinks/index.js\";\nimport { documentPropsToReact } from \"./utils/buildHead.js\";\nimport { getPageContextOrConfig } from \"./getConfigOrPageContext.js\";\nimport { createRoot } from \"react-dom/client\";\nimport { runClientInit } from \"../lib/runClientInit.js\";\n\nTurbolinks.start();\n\nconst PassThruLayout: React.ComponentType<PropsWithChildren> = ({\n children,\n}) => <>{children}</>;\n\nexport default async function onRenderClient(\n pageContext: PageContextNoProxyClient\n) {\n if (pageContext.redirectTo) {\n Turbolinks.visit(pageContext.redirectTo);\n return;\n }\n\n // Back button leading to 404 means we hit a page bifrost can't handle in the browser history.\n // Reload allows us to revert to passthru proxy and/or let ALB handle\n if (pageContext.isBackwardNavigation && pageContext.is404) {\n Turbolinks.controller.viewInvalidated();\n return;\n }\n\n const { Page, pageProps } = pageContext;\n const { Layout = PassThruLayout } = pageContext.config;\n const layoutProps = getPageContextOrConfig(pageContext, \"layoutProps\") || {};\n\n if (!Page)\n throw new Error(\"Client-side render() hook expects Page to be exported\");\n\n const page = (\n <PageShell pageContext={pageContext}>\n <Layout {...layoutProps}>\n <Page {...pageProps} />\n </Layout>\n </PageShell>\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 renderReact(page, pageContext.isHydration);\n } else {\n const head = document.createElement(\"head\");\n createRoot(head).render(\n documentPropsToReact(\n getPageContextOrConfig(pageContext, \"documentProps\") || {}\n )\n );\n pageContext.config.scripts?.forEach((s) => {\n head.insertAdjacentHTML(\"beforeend\", s);\n });\n\n requestAnimationFrame(() => {\n Turbolinks._vpsOnRenderClient(head, false, false, () => {\n // clear anything on body\n document.body\n .getAttributeNames()\n .forEach((n) => document.body.removeAttribute(n));\n renderReact(page, pageContext.isHydration);\n });\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAkC;AAOzC,SAAS,kBAAkB;AAG3B,WAAW,MAAM;AAEjB,IAAM,iBAAyD,CAAC;AAAA,EAC9D;AACF,MAAM,0DAAG,QAAS;AAElB,eAAO,eACL,aACA;AACA,MAAI,YAAY,YAAY;AAC1B,eAAW,MAAM,YAAY,UAAU;AACvC;AAAA,EACF;AAIA,MAAI,YAAY,wBAAwB,YAAY,OAAO;AACzD,eAAW,WAAW,gBAAgB;AACtC;AAAA,EACF;AAEA,QAAM,EAAE,MAAM,UAAU,IAAI;AAC5B,QAAM,EAAE,SAAS,eAAe,IAAI,YAAY;AAChD,QAAM,cAAc,uBAAuB,aAAa,aAAa,KAAK,CAAC;AAE3E,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,uDAAuD;AAEzE,QAAM,OACJ,oCAAC,aAAU,eACT,oCAAC,UAAQ,GAAG,eACV,oCAAC,QAAM,GAAG,WAAW,CACvB,CACF;AAEF,MAAI,YAAY,aAAa;AAE3B,UAAM,cAAc,YAAY,aAAa;AAC7C,gBAAY,MAAM,YAAY,WAAW;AAAA,EAC3C,OAAO;AACL,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,eAAW,IAAI,EAAE;AAAA,MACf;AAAA,QACE,uBAAuB,aAAa,eAAe,KAAK,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,gBAAY,OAAO,SAAS,QAAQ,CAAC,MAAM;AACzC,WAAK,mBAAmB,aAAa,CAAC;AAAA,IACxC,CAAC;AAED,0BAAsB,MAAM;AAC1B,iBAAW,mBAAmB,MAAM,OAAO,OAAO,MAAM;AAEtD,iBAAS,KACN,kBAAkB,EAClB,QAAQ,CAAC,MAAM,SAAS,KAAK,gBAAgB,CAAC,CAAC;AAClD,oBAAY,MAAM,YAAY,WAAW;AAAA,MAC3C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1,5 +1,5 @@
1
1
  import * as vike_dist_esm_node_runtime_html_renderHtml_js from 'vike/dist/esm/node/runtime/html/renderHtml.js';
2
- import { f as PageContextNoProxyServer } from '../internal-23a16e8b.js';
2
+ import { f as PageContextNoProxyServer } from '../internal-28df99a9.js';
3
3
  import 'react';
4
4
  import 'vike/types';
5
5
  import '../proxy/pages/wrapped/_config.js';
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  PageShell
3
- } from "../chunk-6QZLCT3X.js";
3
+ } from "../chunk-JHLK62FM.js";
4
4
  import {
5
5
  documentPropsToReact
6
6
  } from "../chunk-VYXAWOXV.js";
7
7
  import {
8
8
  getPageContextOrConfig
9
9
  } from "../chunk-CXNEKD7R.js";
10
+ import "../chunk-PESUYCE4.js";
10
11
  import "../chunk-IYGONC4I.js";
11
12
  import "../chunk-EYYCKU6F.js";
12
13
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../renderer/onRenderHtml.tsx"],"sourcesContent":["import ReactDOMServer from \"react-dom/server\";\nimport React from \"react\";\nimport { PageShell } from \"../lib/PageShell.js\";\nimport { escapeInject, dangerouslySkipEscape } from \"vike/server\";\nimport { PageContextNoProxyServer } from \"../types/internal.js\";\nimport { documentPropsToReact } from \"./utils/buildHead.js\";\nimport { getPageContextOrConfig } from \"./getConfigOrPageContext.js\";\n\nexport default async function onRenderHtml(\n pageContext: PageContextNoProxyServer\n) {\n const { Page, pageProps, redirectTo } = pageContext;\n if (redirectTo) {\n return {\n pageContext: {\n redirectTo,\n },\n };\n }\n const { Layout } = pageContext.config;\n const layoutProps = getPageContextOrConfig(pageContext, \"layoutProps\") || {};\n\n if (!Page)\n throw new Error(\"Server-side render() hook expects Page to be exported\");\n if (!Layout)\n throw new Error(\"Server-side render() hook expects Layout to be exported\");\n\n const pageHtml = ReactDOMServer.renderToString(\n <PageShell pageContext={pageContext}>\n <Layout {...layoutProps}>\n <Page {...pageProps} />\n </Layout>\n </PageShell>\n );\n\n const headHtml = ReactDOMServer.renderToString(\n documentPropsToReact(\n getPageContextOrConfig(pageContext, \"documentProps\") || {}\n )\n );\n\n const { favicon } = pageContext.config;\n const faviconTag = !favicon\n ? \"\"\n : escapeInject`<link rel=\"icon\" href=\"${favicon}\" />`;\n\n const documentHtml = escapeInject`<!DOCTYPE html>\n <html lang=\"en\">\n <head>\n ${faviconTag}\n ${dangerouslySkipEscape(headHtml)}\n ${dangerouslySkipEscape(\n Object.values(pageContext.config.scripts || {}).join(\"\")\n )}\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 </head>\n <body>\n <div id=\"page-view\">${dangerouslySkipEscape(pageHtml)}</div>\n </body>\n </html>`;\n\n return {\n documentHtml,\n pageContext: {\n // We can add some `pageContext` here, which is useful if we want to do page redirection https://vike.com/page-redirection\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,OAAO,oBAAoB;AAC3B,OAAO,WAAW;AAElB,SAAS,cAAc,6BAA6B;AAKpD,eAAO,aACL,aACA;AACA,QAAM,EAAE,MAAM,WAAW,WAAW,IAAI;AACxC,MAAI,YAAY;AACd,WAAO;AAAA,MACL,aAAa;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,EAAE,OAAO,IAAI,YAAY;AAC/B,QAAM,cAAc,uBAAuB,aAAa,aAAa,KAAK,CAAC;AAE3E,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,uDAAuD;AACzE,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,yDAAyD;AAE3E,QAAM,WAAW,eAAe;AAAA,IAC9B,oCAAC,aAAU,eACT,oCAAC,UAAQ,GAAG,eACV,oCAAC,QAAM,GAAG,WAAW,CACvB,CACF;AAAA,EACF;AAEA,QAAM,WAAW,eAAe;AAAA,IAC9B;AAAA,MACE,uBAAuB,aAAa,eAAe,KAAK,CAAC;AAAA,IAC3D;AAAA,EACF;AAEA,QAAM,EAAE,QAAQ,IAAI,YAAY;AAChC,QAAM,aAAa,CAAC,UAChB,KACA,sCAAsC,OAAO;AAEjD,QAAM,eAAe;AAAA;AAAA;AAAA,QAGf,UAAU;AAAA,QACV,sBAAsB,QAAQ,CAAC;AAAA,QAC/B;AAAA,IACA,OAAO,OAAO,YAAY,OAAO,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE;AAAA,EACzD,CAAC;AAAA,QACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAOd,CAAC;AAAA;AAAA;AAAA,8BAGa,sBAAsB,QAAQ,CAAC;AAAA;AAAA;AAI3D,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA;AAAA,IAEb;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../renderer/onRenderHtml.tsx"],"sourcesContent":["import ReactDOMServer from \"react-dom/server\";\nimport React from \"react\";\nimport { PageShell } from \"../lib/PageShell.js\";\nimport { escapeInject, dangerouslySkipEscape } from \"vike/server\";\nimport { PageContextNoProxyServer } from \"../types/internal.js\";\nimport { documentPropsToReact } from \"./utils/buildHead.js\";\nimport { getPageContextOrConfig } from \"./getConfigOrPageContext.js\";\n\nexport default async function onRenderHtml(\n pageContext: PageContextNoProxyServer\n) {\n const { Page, pageProps, redirectTo } = pageContext;\n if (redirectTo) {\n return {\n pageContext: {\n redirectTo,\n },\n };\n }\n const { Layout } = pageContext.config;\n const layoutProps = getPageContextOrConfig(pageContext, \"layoutProps\") || {};\n\n if (!Page)\n throw new Error(\"Server-side render() hook expects Page to be exported\");\n if (!Layout)\n throw new Error(\"Server-side render() hook expects Layout to be exported\");\n\n const pageHtml = ReactDOMServer.renderToString(\n <PageShell pageContext={pageContext}>\n <Layout {...layoutProps}>\n <Page {...pageProps} />\n </Layout>\n </PageShell>\n );\n\n const headHtml = ReactDOMServer.renderToString(\n documentPropsToReact(\n getPageContextOrConfig(pageContext, \"documentProps\") || {}\n )\n );\n\n const { favicon } = pageContext.config;\n const faviconTag = !favicon\n ? \"\"\n : escapeInject`<link rel=\"icon\" href=\"${favicon}\" />`;\n\n const documentHtml = escapeInject`<!DOCTYPE html>\n <html lang=\"en\">\n <head>\n ${faviconTag}\n ${dangerouslySkipEscape(headHtml)}\n ${dangerouslySkipEscape(\n Object.values(pageContext.config.scripts || {}).join(\"\")\n )}\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 </head>\n <body>\n <div id=\"page-view\">${dangerouslySkipEscape(pageHtml)}</div>\n </body>\n </html>`;\n\n return {\n documentHtml,\n pageContext: {\n // We can add some `pageContext` here, which is useful if we want to do page redirection https://vike.com/page-redirection\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,oBAAoB;AAC3B,OAAO,WAAW;AAElB,SAAS,cAAc,6BAA6B;AAKpD,eAAO,aACL,aACA;AACA,QAAM,EAAE,MAAM,WAAW,WAAW,IAAI;AACxC,MAAI,YAAY;AACd,WAAO;AAAA,MACL,aAAa;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,EAAE,OAAO,IAAI,YAAY;AAC/B,QAAM,cAAc,uBAAuB,aAAa,aAAa,KAAK,CAAC;AAE3E,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,uDAAuD;AACzE,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,yDAAyD;AAE3E,QAAM,WAAW,eAAe;AAAA,IAC9B,oCAAC,aAAU,eACT,oCAAC,UAAQ,GAAG,eACV,oCAAC,QAAM,GAAG,WAAW,CACvB,CACF;AAAA,EACF;AAEA,QAAM,WAAW,eAAe;AAAA,IAC9B;AAAA,MACE,uBAAuB,aAAa,eAAe,KAAK,CAAC;AAAA,IAC3D;AAAA,EACF;AAEA,QAAM,EAAE,QAAQ,IAAI,YAAY;AAChC,QAAM,aAAa,CAAC,UAChB,KACA,sCAAsC,OAAO;AAEjD,QAAM,eAAe;AAAA;AAAA;AAAA,QAGf,UAAU;AAAA,QACV,sBAAsB,QAAQ,CAAC;AAAA,QAC/B;AAAA,IACA,OAAO,OAAO,YAAY,OAAO,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE;AAAA,EACzD,CAAC;AAAA,QACC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAOd,CAAC;AAAA;AAAA;AAAA,8BAGa,sBAAsB,QAAQ,CAAC;AAAA;AAAA;AAI3D,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA;AAAA,IAEb;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+
3
+ declare let setNavigation: (navigation: Navigation) => void;
4
+ interface Navigation {
5
+ state: "idle" | "loading";
6
+ }
7
+ declare function NavigationProvider({ children }: {
8
+ children: React.ReactNode;
9
+ }): JSX.Element;
10
+ /** Access the navigation from any React component */
11
+ declare function useNavigation(): Navigation;
12
+
13
+ export { NavigationProvider, setNavigation, useNavigation };
@@ -0,0 +1,12 @@
1
+ import {
2
+ NavigationProvider,
3
+ setNavigation,
4
+ useNavigation
5
+ } from "../chunk-PESUYCE4.js";
6
+ import "../chunk-EYYCKU6F.js";
7
+ export {
8
+ NavigationProvider,
9
+ setNavigation,
10
+ useNavigation
11
+ };
12
+ //# sourceMappingURL=useNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { c as PageContext } from '../internal-23a16e8b.js';
2
+ import { c as PageContext } from '../internal-28df99a9.js';
3
3
  import 'vike/types';
4
4
  import '../proxy/pages/wrapped/_config.js';
5
5
  import './_config.js';
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { D as DocumentProps } from '../../internal-23a16e8b.js';
2
+ import { D as DocumentProps } from '../../internal-28df99a9.js';
3
3
  import 'vike/types';
4
4
  import '../../proxy/pages/wrapped/_config.js';
5
5
  import '../_config.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@alignable/bifrost",
3
3
  "repository": "https://github.com/Alignable/bifrost.git",
4
- "version": "0.0.34",
4
+ "version": "0.0.36",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
7
7
  "exports": {
@@ -61,10 +61,6 @@
61
61
  "types": "./dist/proxy/pages/passthru/onRenderHtml.d.ts",
62
62
  "default": "./dist/proxy/pages/passthru/onRenderHtml.js"
63
63
  },
64
- "./proxy/pages/passthru/onRenderClient": {
65
- "types": "./dist/proxy/pages/passthru/onRenderClient.d.ts",
66
- "default": "./dist/proxy/pages/passthru/onRenderClient.js"
67
- },
68
64
  ".": {
69
65
  "types": "./dist/index.d.ts",
70
66
  "default": "./dist/index.js"
@@ -95,14 +91,14 @@
95
91
  "react-dom": "^18.x.x",
96
92
  "tough-cookie": "^4.1.2",
97
93
  "uuid": "^9.0.0",
98
- "vike": "0.4.146"
94
+ "vike": "0.4.160-commit-937d8d5"
99
95
  },
100
96
  "peerDependencies": {
101
97
  "jsdom": "^22.1.0",
102
98
  "react": "^18.x.x",
103
99
  "react-dom": "^18.x.x",
104
100
  "typescript": ">=4.7",
105
- "vike": "0.4.146"
101
+ "vike": "0.4.160-commit-937d8d5"
106
102
  },
107
103
  "devDependencies": {
108
104
  "@types/jsdom": "^21.1.2",
@@ -1 +0,0 @@
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\";\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 {children}\n </PageContextProvider>\n </React.StrictMode>\n );\n}\n"],"mappings":";;;;;AAAA,OAAO,WAA0B;AAI1B,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AACF,GAGG;AACD,SACE,oCAAC,MAAM,YAAN,MACC,oCAAC,uBAAoB,eAClB,QACH,CACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
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\";\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 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 {\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 +0,0 @@
1
- declare function onRenderClient(): Promise<void>;
2
-
3
- export { onRenderClient as default };
@@ -1,8 +0,0 @@
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
@@ -1 +0,0 @@
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":[]}