inertiax-core 5.0.13 → 5.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +2 -2
- package/dist/index.esm.js.map +4 -4
- package/dist/index.js +2 -2
- package/dist/index.js.map +4 -4
- package/package.json +3 -3
- package/types/eventHandler.d.ts +2 -3
- package/types/response.d.ts +1 -1
- package/types/types.d.ts +1 -0
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../src/debounce.ts", "../src/head.ts", "../src/progress.ts", "../src/shouldIntercept.ts", "../src/url.ts", "../src/files.ts", "../src/formData.ts", "../src/eventHandler.ts", "../src/events.ts", "../src/history.ts", "../src/sessionStorage.ts", "../src/encryption.ts", "../src/scroll.ts", "../src/page.ts", "../src/navigationType.ts", "../src/initialVisit.ts", "../src/poll.ts", "../src/polls.ts", "../src/objectUtils.ts", "../src/time.ts", "../src/prefetched.ts", "../src/request.ts", "../src/requestParams.ts", "../src/modal.ts", "../src/response.ts", "../src/requestStream.ts"
|
|
4
|
-
"sourcesContent": ["export { default as createHeadManager } from './head'\nexport { hide as hideProgress, reveal as revealProgress, default as setupProgress } from './progress'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport * from './types'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { Router } from './router'\nexport { History } from './history'", "export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F {\n let timeoutID: NodeJS.Timeout\n return function (...args: unknown[]) {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(() => fn.apply(this, args), delay)\n } as F\n}\n", "import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n", "import NProgress from 'nprogress'\nimport { GlobalEvent } from './types'\n\nconst hideProgressStyleEl = (() => {\n if (typeof document === 'undefined') {\n return null\n }\n\n const el = document.createElement('style')\n\n el.innerHTML = '#nprogress { display: none; }'\n\n return el\n})()\n\nlet hideCount = 0\n\nconst removeStyle = () => {\n if (hideProgressStyleEl && document.head.contains(hideProgressStyleEl)) {\n return document.head.removeChild(hideProgressStyleEl)\n }\n}\n\nexport const reveal = (force = false) => {\n hideCount = Math.max(0, hideCount - 1)\n\n if (force || hideCount === 0) {\n removeStyle()\n }\n}\n\nexport const hide = () => {\n hideCount++\n\n if (hideProgressStyleEl && !document.head.contains(hideProgressStyleEl)) {\n document.head.appendChild(hideProgressStyleEl)\n }\n}\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', (e) => start(e, delay))\n document.addEventListener('inertia:progress', progress)\n}\n\nfunction start(event: GlobalEvent<'start'>, delay: number): void {\n if (!event.detail.visit.showProgress) {\n hide()\n }\n\n const timeout = setTimeout(() => NProgress.start(), delay)\n document.addEventListener('inertia:finish', (e) => finish(e, timeout), { once: true })\n}\n\nfunction progress(event: GlobalEvent<'progress'>): void {\n if (NProgress.isStarted() && event.detail.progress?.percentage) {\n NProgress.set(Math.max(NProgress.status!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>, timeout: NodeJS.Timeout): void {\n clearTimeout(timeout!)\n\n if (!NProgress.isStarted()) {\n return\n }\n\n if (event.detail.visit.completed) {\n NProgress.done()\n } else if (event.detail.visit.interrupted) {\n NProgress.set(0)\n } else if (event.detail.visit.cancelled) {\n NProgress.done()\n NProgress.remove()\n }\n}\n\nfunction injectCSS(color: string): void {\n const element = document.createElement('style')\n element.textContent = `\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n NProgress.configure({ showSpinner })\n if (includeCSS) {\n injectCSS(color)\n }\n}\n", "export default function shouldIntercept(event: MouseEvent | KeyboardEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\n (isLink && event.which > 1) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey) ||\n (isLink && 'button' in event && event.button !== 0)\n )\n}\n", "import deepmerge from 'deepmerge'\nimport * as qs from 'qs'\nimport { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport { FormDataConvertible, Method, RequestPayload, VisitOptions } from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), typeof window === 'undefined' ? undefined : window.location.toString())\n}\n\nexport const transformUrlAndData = (\n href: string | URL,\n data: RequestPayload,\n method: Method,\n forceFormData: VisitOptions['forceFormData'],\n queryStringArrayFormat: VisitOptions['queryStringArrayFormat'],\n): [URL, RequestPayload] => {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !isFormData(data)) {\n data = objectToFormData(data)\n }\n\n if (isFormData(data)) {\n return [url, data]\n }\n\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n\n return [hrefToUrl(_href), _data]\n}\n\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === 'get' && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === 'get' && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n\nexport const setHashIfSameUrl = (originUrl: URL | Location, destinationUrl: URL | Location) => {\n if (originUrl.hash && !destinationUrl.hash && urlWithoutHash(originUrl).href === destinationUrl.href) {\n destinationUrl.hash = originUrl.hash\n }\n}\n\nexport const isSameUrlWithoutHash = (url1: URL | Location, url2: URL | Location): boolean => {\n return urlWithoutHash(url1).href === urlWithoutHash(url2).href\n}\n", "import { FormDataConvertible, RequestPayload } from './types'\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n data instanceof File ||\n data instanceof Blob ||\n (data instanceof FileList && data.length > 0) ||\n (data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value))) ||\n (typeof data === 'object' && data !== null && Object.values(data).some((value) => hasFiles(value)))\n )\n}\n", "import { FormDataConvertible } from './types'\n\nexport const isFormData = (value: any): value is FormData => value instanceof FormData\n\nexport function objectToFormData(\n source: Record<string, FormDataConvertible>,\n form: FormData = new FormData(),\n parentKey: string | null = null,\n): FormData {\n source = source || {}\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n append(form, composeKey(parentKey, key), source[key])\n }\n }\n\n return form\n}\n\nfunction composeKey(parent: string | null, key: string): string {\n return parent ? parent + '[' + key + ']' : key\n}\n\nfunction append(form: FormData, key: string, value: FormDataConvertible): void {\n if (Array.isArray(value)) {\n return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]))\n } else if (value instanceof Date) {\n return form.append(key, value.toISOString())\n } else if (value instanceof File) {\n return form.append(key, value, value.name)\n } else if (value instanceof Blob) {\n return form.append(key, value)\n } else if (typeof value === 'boolean') {\n return form.append(key, value ? '1' : '0')\n } else if (typeof value === 'string') {\n return form.append(key, value)\n } else if (typeof value === 'number') {\n return form.append(key, `${value}`)\n } else if (value === null || value === undefined) {\n return form.append(key, '')\n }\n\n objectToFormData(value, form, key)\n}\n", "import deepmerge from 'deepmerge'\nimport debounce from './debounce'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { page as currentPage } from './page'\nimport { Scroll } from './scroll'\nimport { GlobalEvent, GlobalEventNames, GlobalEventResult } from './types'\nimport { hrefToUrl } from './url'\n\ntype InternalEvent = 'missingHistoryItem'\nclass EventHandler {\n protected internalListeners: {\n event: InternalEvent\n listener: VoidFunction\n }[] = []\n\n public init() {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n }\n\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', debounce(Scroll.onScroll.bind(Scroll), 100), true)\n }\n }\n\n public onGlobalEvent<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n const listener = ((event: GlobalEvent<TEventName>) => {\n const response = callback(event)\n\n if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n return this.registerListener(`inertia:${type}`, listener)\n }\n\n public on(event: InternalEvent, callback: VoidFunction): VoidFunction {\n this.internalListeners.push({ event, listener: callback })\n\n return () => {\n this.internalListeners = this.internalListeners.filter((listener) => listener.listener !== callback)\n }\n }\n\n public onMissingHistoryItem() {\n // At this point, the user has probably cleared the state\n // Mark the current page as cleared so that we don't try to write anything to it.\n currentPage.clear()\n // Fire an event so that that any listeners can handle this situation\n this.fireInternalEvent('missingHistoryItem')\n }\n\n protected fireInternalEvent(event: InternalEvent): void {\n this.internalListeners.filter((listener) => listener.event === event).forEach((listener) => listener.listener())\n }\n\n protected registerListener(type: string, listener: EventListener): VoidFunction {\n document.addEventListener(type, listener)\n\n return () => document.removeEventListener(type, listener)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n const state = event.state || null\n\n if (state === null) {\n const url = hrefToUrl(currentPage.frame(\"_top\").url)\n url.hash = window.location.hash\n \n history.replaceState(\n deepmerge(currentPage.get(), {\n frames: { _top: { url: url.href } }\n },\n { arrayMerge: (_, s) => s })\n );\n \n Scroll.reset(currentPage.get())\n return\n }\n\n if (history.isValidState(state)) {\n history\n .decrypt(state.page)\n .then((data) => {\n currentPage.setQuietly(data, { preserveState: false }).then(() => {\n Scroll.restore(currentPage.get())\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n this.onMissingHistoryItem()\n })\n\n return\n }\n\n this.onMissingHistoryItem()\n }\n}\n\nexport const eventHandler = new EventHandler()\n", "import { GlobalEventDetails, GlobalEventNames, GlobalEventTrigger } from './types'\n\nfunction fireEvent<TEventName extends GlobalEventNames>(\n name: TEventName,\n options: CustomEventInit<GlobalEventDetails<TEventName>>,\n): boolean {\n return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options))\n}\n\nexport const fireBeforeEvent: GlobalEventTrigger<'before'> = (visit) => {\n return fireEvent('before', { cancelable: true, detail: { visit } })\n}\n\nexport const fireErrorEvent: GlobalEventTrigger<'error'> = (errors) => {\n return fireEvent('error', { detail: { errors } })\n}\n\nexport const fireExceptionEvent: GlobalEventTrigger<'exception'> = (exception) => {\n return fireEvent('exception', { cancelable: true, detail: { exception } })\n}\n\nexport const fireFinishEvent: GlobalEventTrigger<'finish'> = (visit) => {\n return fireEvent('finish', { detail: { visit } })\n}\n\nexport const fireInvalidEvent: GlobalEventTrigger<'invalid'> = (response) => {\n return fireEvent('invalid', { cancelable: true, detail: { response } })\n}\n\nexport const fireNavigateEvent: GlobalEventTrigger<'navigate'> = (page) => {\n return fireEvent('navigate', { detail: { page } })\n}\n\nexport const fireProgressEvent: GlobalEventTrigger<'progress'> = (progress) => {\n return fireEvent('progress', { detail: { progress } })\n}\n\nexport const fireStartEvent: GlobalEventTrigger<'start'> = (visit) => {\n return fireEvent('start', { detail: { visit } })\n}\n\nexport const fireSuccessEvent: GlobalEventTrigger<'success'> = (page) => {\n return fireEvent('success', { detail: { page } })\n}\n\nexport const firePrefetchedEvent: GlobalEventTrigger<'prefetched'> = (response, visit) => {\n return fireEvent('prefetched', { detail: { fetchedAt: Date.now(), response: response.data, visit } })\n}\n\nexport const firePrefetchingEvent: GlobalEventTrigger<'prefetching'> = (visit) => {\n return fireEvent('prefetching', { detail: { visit } })\n}\n", "import deepmerge from 'deepmerge'\nimport { decryptHistory, encryptHistory, historySessionStorageKeys } from './encryption'\nimport { page as currentPage } from './page'\nimport { SessionStorage } from './sessionStorage'\nimport { Page } from './types'\n\nconst isServer = typeof window === 'undefined'\n\nexport class History {\n public rememberedState = 'rememberedState' as const\n public scrollRegions = 'scrollRegions' as const\n public preserveUrl = false\n public static encryptHistory = false\n \n protected current: Partial<Page> = {}\n protected queue: (() => Promise<void>)[] = []\n\n\n public remember(frame: string, data: unknown, key: string): void {\n const old = currentPage.get()\n const newState = deepmerge(old, {\n frames: {[frame]: {rememberedState: {[key]: data}}}\n }, {arrayMerge: (_,s) => s})\n \n this.replaceState(newState)\n }\n\n public restore(frame: string, key: string): unknown {\n if (!isServer) {\n const frameState = this.current?.frames?.[frame]\n return frameState?.rememberedState?.[key]\n }\n }\n\n public pushState(page: Page): void {\n if (isServer || this.preserveUrl) {\n return\n }\n\n this.current = page\n\n this.addToQueue(() => {\n return this.getPageData(page).then((data) => {\n\n window.history.pushState(\n {\n page: data,\n timestamp: Date.now(),\n },\n '',\n page.frames[\"_top\"].url,\n )\n })\n })\n }\n\n protected getPageData(page: Page): Promise<Page | ArrayBuffer> {\n return new Promise((resolve) => {\n return History.encryptHistory ? encryptHistory(page).then(resolve) : resolve(page)\n })\n }\n\n public processQueue(): Promise<void> {\n const next = this.queue.shift()\n\n if (next) {\n return next().then(() => this.processQueue())\n }\n\n return Promise.resolve()\n }\n\n public decrypt(page: Page | null = null): Promise<Page> {\n if (isServer) {\n return Promise.resolve(page ?? currentPage.get())\n }\n\n const pageData = page ?? window.history.state?.page\n\n return this.decryptPageData(pageData).then((data) => {\n if (!data) {\n throw new Error('Unable to decrypt history')\n }\n \n this.current = data ?? {}\n \n\n return data\n })\n }\n\n protected decryptPageData(pageData: ArrayBuffer | Page | null): Promise<Page | null> {\n return pageData instanceof ArrayBuffer ? decryptHistory(pageData) : Promise.resolve(pageData)\n }\n\n public replaceState(page: Page): void {\n currentPage.merge(page)\n\n if (isServer || this.preserveUrl) {\n return\n }\n\n this.current = page\n\n this.addToQueue(() => {\n return this.getPageData(page).then((data) => {\n window.history.replaceState(\n {\n page: data,\n timestamp: Date.now(),\n },\n '',\n page.frames[\"_top\"].url,\n )\n })\n })\n }\n\n protected addToQueue(fn: () => Promise<void>): void {\n this.queue.push(fn)\n this.processQueue()\n }\n\n public getState<T>(key: keyof Page, defaultValue?: T): any {\n return this.current?.[key] ?? defaultValue\n }\n\n public deleteRememberedState() {\n if (!this.current.frames) return\n Object.values((this.current as Page).frames).forEach((frame) => {\n delete frame.rememberedState\n })\n this.replaceState(this.current as Page)\n }\n\n public hasAnyState(): boolean {\n return !!this.getAllState()\n }\n\n public clear() {\n SessionStorage.remove(historySessionStorageKeys.key)\n SessionStorage.remove(historySessionStorageKeys.iv)\n }\n\n public isValidState(state: any): boolean {\n return !!state.page\n }\n\n public getAllState(): Page {\n return this.current as Page\n }\n}\n\nexport const history = new History()\n", "export class SessionStorage {\n public static locationVisitKey = 'inertiaLocationVisit'\n\n public static set(key: string, value: any): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.setItem(key, JSON.stringify(value))\n }\n }\n\n public static get(key: string): any {\n if (typeof window !== 'undefined') {\n return JSON.parse(window.sessionStorage.getItem(key) || 'null')\n }\n }\n\n public static merge(key: string, value: any): void {\n const existing = this.get(key)\n\n if (existing === null) {\n this.set(key, value)\n } else {\n this.set(key, { ...existing, ...value })\n }\n }\n\n public static remove(key: string): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.removeItem(key)\n }\n }\n\n public static removeNested(key: string, nestedKey: string): void {\n const existing = this.get(key)\n\n if (existing !== null) {\n delete existing[nestedKey]\n\n this.set(key, existing)\n }\n }\n\n public static exists(key: string): boolean {\n try {\n return this.get(key) !== null\n } catch (error) {\n return false\n }\n }\n\n public static clear(): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.clear()\n }\n }\n}\n", "import { SessionStorage } from './sessionStorage'\n\nexport const encryptHistory = async (data: any): Promise<ArrayBuffer> => {\n if (typeof window === 'undefined') {\n throw new Error('Unable to encrypt history')\n }\n\n const iv = getIv()\n const storedKey = await getKeyFromSessionStorage()\n const key = await getOrCreateKey(storedKey)\n\n if (!key) {\n throw new Error('Unable to encrypt history')\n }\n\n const encrypted = await encryptData(iv, key, data)\n\n return encrypted\n}\n\nexport const historySessionStorageKeys = {\n key: 'historyKey',\n iv: 'historyIv',\n}\n\nexport const decryptHistory = async (data: any): Promise<any> => {\n const iv = getIv()\n const storedKey = await getKeyFromSessionStorage()\n\n if (!storedKey) {\n throw new Error('Unable to decrypt history')\n }\n\n return await decryptData(iv, storedKey, data)\n}\n\nconst encryptData = async (iv: Uint8Array, key: CryptoKey, data: any) => {\n if (typeof window === 'undefined') {\n throw new Error('Unable to encrypt history')\n }\n\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(data)\n }\n const textEncoder = new TextEncoder()\n const str = JSON.stringify(data)\n \n const encoded = textEncoder.encode(str)\n\n return window.crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n encoded,\n )\n}\n\nconst decryptData = async (iv: Uint8Array, key: CryptoKey, data: any) => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Decryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(data)\n }\n\n const decrypted = await window.crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n data,\n )\n \n let decoded = new TextDecoder().decode(decrypted)\n\n return JSON.parse(decoded)\n}\n\nconst getIv = () => {\n const ivString = SessionStorage.get(historySessionStorageKeys.iv)\n\n if (ivString) {\n return new Uint8Array(ivString)\n }\n\n const iv = window.crypto.getRandomValues(new Uint8Array(12))\n\n SessionStorage.set(historySessionStorageKeys.iv, Array.from(iv))\n\n return iv\n}\n\nconst createKey = async () => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(null)\n }\n\n return window.crypto.subtle.generateKey(\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n )\n}\n\nconst saveKey = async (key: CryptoKey) => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve()\n }\n\n const keyData = await window.crypto.subtle.exportKey('raw', key)\n\n SessionStorage.set(historySessionStorageKeys.key, Array.from(new Uint8Array(keyData)))\n}\n\nconst getOrCreateKey = async (key: CryptoKey | null) => {\n if (key) {\n return key\n }\n\n const newKey = await createKey()\n\n if (!newKey) {\n return null\n }\n\n await saveKey(newKey)\n\n return newKey\n}\n\nconst getKeyFromSessionStorage = async (): Promise<CryptoKey | null> => {\n const stringKey = SessionStorage.get(historySessionStorageKeys.key)\n\n if (!stringKey) {\n return null\n }\n\n const key = await window.crypto.subtle.importKey(\n 'raw',\n new Uint8Array(stringKey),\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n )\n\n return key\n}\n", "import { history } from './history'\nimport { page as currentPage } from './page'\nimport { Page } from './types'\n\nexport class Scroll {\n public static save(page: Page): void {\n history.replaceState({\n ...page,\n scrollRegions: Array.from(this.regions()).map((region) => ({\n top: region.scrollTop,\n left: region.scrollLeft,\n })),\n })\n }\n\n protected static regions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n public static reset(page: Page): void {\n if (typeof window !== 'undefined') {\n window.scrollTo(0, 0)\n }\n\n this.regions().forEach((region) => {\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(0, 0)\n } else {\n region.scrollTop = 0\n region.scrollLeft = 0\n }\n })\n\n this.save(page)\n\n if (window.location.hash) {\n // We're using a setTimeout() here as a workaround for a bug in the React adapter where the\n // rendering isn't completing fast enough, causing the anchor link to not be scrolled to.\n setTimeout(() => document.getElementById(window.location.hash.slice(1))?.scrollIntoView())\n }\n }\n\n public static restore(page: Page): void {\n if (!page.scrollRegions) {\n return\n }\n\n this.regions().forEach((region: Element, index: number) => {\n const scrollPosition = page.scrollRegions[index]\n\n if (!scrollPosition) {\n return\n }\n\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(scrollPosition.left, scrollPosition.top)\n } else {\n region.scrollTop = scrollPosition.top\n region.scrollLeft = scrollPosition.left\n }\n })\n }\n\n public static onScroll(event: Event): void {\n let target = event.target as Element\n if (typeof target.hasAttribute === 'function' && target.hasAttribute('scroll-region') || target as unknown == document) {\n this.save(currentPage.get())\n }\n }\n}\n", "import { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { Scroll } from './scroll'\nimport { Router } from './router'\nimport {\n Frame,\n Component,\n Page,\n PageEvent,\n FrameHandler,\n PreserveStateOption,\n RouterInitParams,\n VisitOptions,\n} from './types'\nimport { hrefToUrl, isSameUrlWithoutHash } from './url'\nimport deepmerge from 'deepmerge'\n\nclass CurrentPage {\n protected page: Page = {\n frames: {},\n version: null,\n scrollRegions: []\n }\n \n protected swappers: {\n [frame: string]: FrameHandler,\n } = {}\n protected componentId = {}\n protected listeners: {\n event: PageEvent\n callback: VoidFunction\n }[] = []\n protected isFirstPageLoad = true\n protected cleared = false\n\n public init({ frame, initialState, swapComponent }: RouterInitParams) { \n this.page.version ||= initialState?.version\n if (initialState?.component) {\n this.merge({\n frames: {\n [frame]: initialState\n }\n })\n }\n this.swappers[frame] = swapComponent\n \n return this\n }\n\n public async set(\n page: Page,\n {\n replace = false,\n preserveScroll = false,\n preserveState = false,\n frame\n }: Partial<VisitOptions> = {},\n ): Promise<void> {\n this.componentId = {}\n\n const componentId = this.componentId\n\n\n return this.resolve(page.frames).then((components) => {\n if (componentId !== this.componentId) {\n // Component has changed since we started resolving this component, bail\n return\n }\n\n page.scrollRegions ??= []\n //page.rememberedState ??= {}\n // If we changed the _top frame, update the URL\n if (page.frames['_top']?.url === undefined) {\n const location = typeof window !== 'undefined' ? window.location : new URL(page.frames['_top'].url)\n replace = replace || isSameUrlWithoutHash(hrefToUrl(page.frames['_top']?.url), location)\n }\n\n replace ? history.replaceState(page) : history.pushState(page)\n\n // const isNewComponent = !this.isTheSame(page)\n\n this.page = page\n this.cleared = false\n\n // if (isNewComponent) {\n // this.fireEventsFor('newComponent')\n // }\n\n if (this.isFirstPageLoad) {\n this.fireEventsFor('firstLoad')\n }\n\n this.isFirstPageLoad = false\n\n return this.swap({ components, page, preserveState, frame }).then(() => {\n // TODO: save scroll positions within frames.\n if (!preserveScroll && frame == '_top') {\n Scroll.reset(page)\n }\n\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n \n })\n }\n\n public async setQuietly(\n page: Page,\n {\n preserveState = false,\n }: {\n preserveState?: PreserveStateOption\n } = {},\n ) {\n return this.resolve(page.frames).then((components) => {\n this.page = page\n this.cleared = false\n return this.swap({ components, page, preserveState })\n })\n }\n\n public async setFrame(\n name: string,\n frame: Frame,\n options: Partial<VisitOptions> = {}\n ): Promise<void> {\n return this.set(deepmerge(this.page, {\n frames: {\n [name]: frame,\n }\n }, { arrayMerge: (_, s) => s }) as Page,\n { frame: name, ...options })\n }\n \n \n public clear(): void {\n this.cleared = true\n }\n\n public isCleared(): boolean {\n return this.cleared\n }\n \n public frame(name: string): Frame {\n return this.page.frames[name] || {}\n }\n \n public get(): Page {\n return this.page\n }\n\n public merge(data: Partial<Page>): void {\n this.page = deepmerge(this.page, data, {arrayMerge: (_, source) => source})\n }\n\n public setUrlHash(hash: string): void {\n this.page.frames[\"_top\"].url += hash\n }\n\n public remember(frame: string, data: Frame['rememberedState']): void {\n this.page.frames[frame].rememberedState = data\n }\n\n public scrollRegions(regions: Page['scrollRegions']): void {\n this.page.scrollRegions = regions\n }\n\n public swap({\n components,\n page,\n preserveState,\n frame\n }: {\n components: { [name: string]: Component }\n page: Page,\n preserveState: PreserveStateOption,\n frame?: string\n }): Promise<unknown> {\n\n return Promise.all(Object.entries(components).map(([name, component]) => {\n if (frame && frame !== name) return Promise.resolve()\n \n // a swapper can be undefined if we refresh the page, and have history in frames\n // that we havent initialized in the new page\n if (!this.swappers[name]) return;\n \n return this.swappers[name]({ component, frame: page.frames[name], preserveState })\n }))\n }\n\n public async resolve(frames: { [name: string]: Frame }): Promise<{ [name: string]: Component }> {\n const result: { [name: string]: Component } = {}\n await Promise.all(Object.keys(frames).map(async (name) => {\n const frame = frames[name]\n result[name] = await Router.resolveComponent(frame.component)\n }))\n return result\n }\n\n public isTheSame(name: string, frame: Frame): boolean {\n return this.page.frames[name].component === frame.component\n }\n\n public on(event: PageEvent, callback: VoidFunction): VoidFunction {\n this.listeners.push({ event, callback })\n\n return () => {\n this.listeners = this.listeners.filter((listener) => listener.event !== event && listener.callback !== callback)\n }\n }\n\n public fireEventsFor(event: PageEvent): void {\n this.listeners.filter((listener) => listener.event === event).forEach((listener) => listener.callback())\n }\n}\n\nexport const page = new CurrentPage()\n", "class NavigationType {\n protected type: NavigationTimingType\n\n public constructor() {\n if (typeof window !== 'undefined' && window?.performance.getEntriesByType('navigation').length > 0) {\n this.type = (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n } else {\n this.type = 'navigate'\n }\n }\n\n public get(): NavigationTimingType {\n return this.type\n }\n\n public isBackForward(): boolean {\n return this.type === 'back_forward'\n }\n\n public isReload(): boolean {\n return this.type === 'reload'\n }\n}\n\nexport const navigationType = new NavigationType()\n", "import { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { navigationType } from './navigationType'\nimport { page as currentPage } from './page'\nimport { Scroll } from './scroll'\nimport { SessionStorage } from './sessionStorage'\nimport { LocationVisit, Page, Frame } from './types'\n\nexport class InitialVisit {\n public static handle(): void {\n \n this.clearRememberedStateOnReload()\n \n const scenarios = [this.handleBackForward, this.handleLocation, this.handleDefault]\n\n scenarios.find((handler) => handler.bind(this)())\n }\n\n protected static clearRememberedStateOnReload(): void {\n if (navigationType.isReload()) {\n history.deleteRememberedState()\n }\n }\n\n protected static handleBackForward(): boolean {\n if (!navigationType.isBackForward() || !history.hasAnyState()) {\n return false\n }\n \n if (!window.history.state?.page) {\n // We have no power here\n return false\n }\n\n history\n .decrypt()\n .then((data) => {\n currentPage.set(data, { preserveScroll: true, preserveState: true, replace: true }).then(() => {\n Scroll.restore(currentPage.get())\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n eventHandler.onMissingHistoryItem()\n })\n\n return true\n }\n\n /**\n * @link https://inertiajs.com/redirects#external-redirects\n */\n protected static handleLocation(): boolean {\n if (!SessionStorage.exists(SessionStorage.locationVisitKey)) {\n return false\n }\n\n const locationVisit: LocationVisit = SessionStorage.get(SessionStorage.locationVisitKey) || {}\n\n SessionStorage.remove(SessionStorage.locationVisitKey)\n\n if (typeof window !== 'undefined') {\n currentPage.setUrlHash(window.location.hash)\n }\n\n history\n .decrypt()\n .then(() => {\n const rememberedFrames: Record<string, Frame> = history.getState<Page['frames']>(\"frames\", {})\n const scrollRegions = history.getState<Page['scrollRegions']>(history.scrollRegions, [])\n Object.entries(rememberedFrames).forEach(([name, frame]) => {\n currentPage.remember(name, frame.rememberedState)\n })\n currentPage.scrollRegions(scrollRegions)\n\n currentPage\n .set(currentPage.get(), {\n preserveScroll: locationVisit.preserveScroll,\n preserveState: true,\n })\n .then(() => {\n if (locationVisit.preserveScroll) {\n Scroll.restore(currentPage.get())\n }\n\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n eventHandler.onMissingHistoryItem()\n })\n\n return true\n }\n\n protected static handleDefault(): void {\n if (typeof window !== 'undefined') {\n currentPage.setUrlHash(window.location.hash)\n }\n\n currentPage.set(currentPage.get(), { preserveState: true, replace: true }).then(() => {\n fireNavigateEvent(currentPage.get())\n })\n }\n}\n", "import { PollOptions } from './types'\n\nexport class Poll {\n protected id: number | null = null\n protected throttle = false\n protected keepAlive = false\n protected cb: VoidFunction\n protected interval: number\n protected cbCount = 0\n\n constructor(interval: number, cb: VoidFunction, options: PollOptions) {\n this.keepAlive = options.keepAlive ?? false\n\n this.cb = cb\n this.interval = interval\n\n if (options.autoStart ?? true) {\n this.start()\n }\n }\n\n public stop() {\n // console.log('stopping...', this.id)\n if (this.id) {\n // console.log('clearing interval...')\n clearInterval(this.id)\n }\n }\n\n public start() {\n if (typeof window === 'undefined') {\n return\n }\n\n this.stop()\n\n this.id = window.setInterval(() => {\n if (!this.throttle || this.cbCount % 10 === 0) {\n this.cb()\n }\n\n if (this.throttle) {\n this.cbCount++\n }\n }, this.interval)\n }\n\n public isInBackground(hidden: boolean) {\n this.throttle = this.keepAlive ? false : hidden\n\n if (this.throttle) {\n this.cbCount = 0\n }\n }\n}\n", "import { Poll } from './poll'\nimport { PollOptions } from './types'\n\nclass Polls {\n protected polls: Poll[] = []\n\n constructor() {\n this.setupVisibilityListener()\n }\n\n public add(\n interval: number,\n cb: VoidFunction,\n options: PollOptions,\n ): {\n stop: VoidFunction\n start: VoidFunction\n } {\n const poll = new Poll(interval, cb, options)\n\n this.polls.push(poll)\n\n return {\n stop: () => poll.stop(),\n start: () => poll.start(),\n }\n }\n\n public clear() {\n this.polls.forEach((poll) => poll.stop())\n\n this.polls = []\n }\n\n protected setupVisibilityListener() {\n if (typeof document === 'undefined') {\n return\n }\n\n document.addEventListener(\n 'visibilitychange',\n () => {\n this.polls.forEach((poll) => poll.isInBackground(document.hidden))\n },\n false,\n )\n }\n}\n\nexport const polls = new Polls()\n", "export const objectsAreEqual = <T>(\n obj1: T,\n obj2: T,\n excludeKeys: {\n [K in keyof T]: K\n }[keyof T][],\n): boolean => {\n if (obj1 === obj2) {\n return true\n }\n\n for (const key in obj1) {\n if (excludeKeys.includes(key)) {\n continue\n }\n\n if (obj1[key] === obj2[key]) {\n continue\n }\n\n if (!compareValues(obj1[key], obj2[key])) {\n return false\n }\n }\n\n return true\n}\n\nconst compareValues = (value1: any, value2: any): boolean => {\n switch (typeof value1) {\n case 'object':\n return objectsAreEqual(value1, value2, [])\n case 'function':\n return value1.toString() === value2.toString()\n default:\n return value1 === value2\n }\n}\n", "const conversionMap = {\n ms: 1,\n s: 1000,\n m: 1000 * 60,\n h: 1000 * 60 * 60,\n d: 1000 * 60 * 60 * 24,\n}\n\nexport const timeToMs = (time: string | number): number => {\n if (typeof time === 'number') {\n return time\n }\n\n for (const [unit, conversion] of Object.entries(conversionMap)) {\n if (time.endsWith(unit)) {\n return parseFloat(time) * conversion\n }\n }\n\n return parseInt(time)\n}\n", "import { objectsAreEqual } from './objectUtils'\nimport { Response } from './response'\nimport { timeToMs } from './time'\nimport {\n ActiveVisit,\n CacheForOption,\n InFlightPrefetch,\n InternalActiveVisit,\n PrefetchedResponse,\n PrefetchOptions,\n PrefetchRemovalTimer,\n} from './types'\n\nclass PrefetchedRequests {\n protected cached: PrefetchedResponse[] = []\n protected inFlightRequests: InFlightPrefetch[] = []\n protected removalTimers: PrefetchRemovalTimer[] = []\n protected currentUseId: string | null = null\n\n public add(params: ActiveVisit, sendFunc: (params: InternalActiveVisit) => void, { cacheFor }: PrefetchOptions) {\n const inFlight = this.findInFlight(params)\n\n if (inFlight) {\n return Promise.resolve()\n }\n\n const existing = this.findCached(params)\n\n if (!params.fresh && existing && existing.staleTimestamp > Date.now()) {\n return Promise.resolve()\n }\n\n const [stale, expires] = this.extractStaleValues(cacheFor)\n\n const promise = new Promise<Response>((resolve, reject) => {\n sendFunc({\n ...params,\n onCancel: () => {\n this.remove(params)\n params.onCancel()\n reject()\n },\n onError: (error) => {\n this.remove(params)\n params.onError(error)\n reject()\n },\n onPrefetching(visitParams) {\n params.onPrefetching(visitParams)\n },\n onPrefetched(response, visit) {\n params.onPrefetched(response, visit)\n },\n onPrefetchResponse(response) {\n resolve(response)\n },\n })\n }).then((response) => {\n this.remove(params)\n\n this.cached.push({\n params: { ...params },\n staleTimestamp: Date.now() + stale,\n response: promise,\n singleUse: cacheFor === 0,\n timestamp: Date.now(),\n inFlight: false,\n })\n\n this.scheduleForRemoval(params, expires)\n\n this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {\n return !this.paramsAreEqual(prefetching.params, params)\n })\n\n response.handlePrefetch()\n\n return response\n })\n\n this.inFlightRequests.push({\n params: { ...params },\n response: promise,\n staleTimestamp: null,\n inFlight: true,\n })\n\n return promise\n }\n\n public removeAll(): void {\n this.cached = []\n this.removalTimers.forEach((removalTimer) => {\n clearTimeout(removalTimer.timer)\n })\n this.removalTimers = []\n }\n\n public remove(params: ActiveVisit): void {\n this.cached = this.cached.filter((prefetched) => {\n return !this.paramsAreEqual(prefetched.params, params)\n })\n\n this.clearTimer(params)\n }\n\n protected extractStaleValues(cacheFor: PrefetchOptions['cacheFor']): [number, number] {\n const [stale, expires] = this.cacheForToStaleAndExpires(cacheFor)\n\n return [timeToMs(stale), timeToMs(expires)]\n }\n\n protected cacheForToStaleAndExpires(cacheFor: PrefetchOptions['cacheFor']): [CacheForOption, CacheForOption] {\n if (!Array.isArray(cacheFor)) {\n return [cacheFor, cacheFor]\n }\n\n switch (cacheFor.length) {\n case 0:\n return [0, 0]\n case 1:\n return [cacheFor[0], cacheFor[0]]\n default:\n return [cacheFor[0], cacheFor[1]]\n }\n }\n\n protected clearTimer(params: ActiveVisit) {\n const timer = this.removalTimers.find((removalTimer) => {\n return this.paramsAreEqual(removalTimer.params, params)\n })\n\n if (timer) {\n clearTimeout(timer.timer)\n this.removalTimers = this.removalTimers.filter((removalTimer) => removalTimer !== timer)\n }\n }\n\n protected scheduleForRemoval(params: ActiveVisit, expiresIn: number) {\n if (typeof window === 'undefined') {\n return\n }\n\n this.clearTimer(params)\n\n if (expiresIn > 0) {\n const timer = window.setTimeout(() => this.remove(params), expiresIn)\n\n this.removalTimers.push({\n params,\n timer,\n })\n }\n }\n\n public get(params: ActiveVisit): InFlightPrefetch | PrefetchedResponse | null {\n return this.findCached(params) || this.findInFlight(params)\n }\n\n public use(prefetched: PrefetchedResponse | InFlightPrefetch, params: ActiveVisit) {\n const id = `${params.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`\n\n this.currentUseId = id\n\n return prefetched.response.then((response) => {\n if (this.currentUseId !== id) {\n // They've since gone on to `use` a different request,\n // so we should ignore this one\n return\n }\n\n response.mergeParams({ ...params, onPrefetched: () => {} })\n\n // If this was a one-time cache, remove it\n // (generally a prefetch=\"click\" request with no specified cache value)\n this.removeSingleUseItems(params)\n\n return response.handle()\n })\n }\n\n protected removeSingleUseItems(params: ActiveVisit) {\n this.cached = this.cached.filter((prefetched) => {\n if (!this.paramsAreEqual(prefetched.params, params)) {\n return true\n }\n\n return !prefetched.singleUse\n })\n }\n\n public findCached(params: ActiveVisit): PrefetchedResponse | null {\n return (\n this.cached.find((prefetched) => {\n return this.paramsAreEqual(prefetched.params, params)\n }) || null\n )\n }\n\n public findInFlight(params: ActiveVisit): InFlightPrefetch | null {\n return (\n this.inFlightRequests.find((prefetched) => {\n return this.paramsAreEqual(prefetched.params, params)\n }) || null\n )\n }\n\n protected paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean {\n return objectsAreEqual<ActiveVisit>(params1, params2, [\n 'showProgress',\n 'replace',\n 'prefetch',\n 'onBefore',\n 'onStart',\n 'onProgress',\n 'onFinish',\n 'onCancel',\n 'onSuccess',\n 'onError',\n 'onPrefetched',\n 'onCancelToken',\n 'onPrefetching',\n 'async',\n ])\n }\n}\n\nexport const prefetchedRequests = new PrefetchedRequests()\n", "import { default as axios, AxiosProgressEvent, AxiosRequestConfig } from 'axios'\nimport { fireExceptionEvent, fireFinishEvent, firePrefetchingEvent, fireProgressEvent, fireStartEvent } from './events'\nimport { page as currentPage } from './page'\nimport { RequestParams } from './requestParams'\nimport { Response } from './response'\nimport { ActiveVisit, Page } from './types'\nimport { urlWithoutHash, hrefToUrl } from './url'\n\nexport class Request {\n protected response!: Response\n protected cancelToken!: AbortController\n protected requestParams: RequestParams\n protected requestHasFinished = false\n\n constructor(\n params: ActiveVisit,\n protected page: Page,\n ) {\n this.requestParams = RequestParams.create(params)\n this.cancelToken = new AbortController()\n }\n\n public static create(params: ActiveVisit, page: Page): Request {\n return new Request(params, page)\n }\n\n public async send() {\n this.requestParams.onCancelToken(() => this.cancel({ cancelled: true }))\n\n fireStartEvent(this.requestParams.all())\n this.requestParams.onStart()\n\n if (this.requestParams.all().prefetch) {\n this.requestParams.onPrefetching()\n firePrefetchingEvent(this.requestParams.all())\n }\n\n // We capture this up here because the response\n // will clear the prefetch flag so it can use it\n // as a regular response once the prefetch is done\n const originallyPrefetch = this.requestParams.all().prefetch\n return axios({\n method: this.requestParams.all().method,\n url: urlWithoutHash(this.requestParams.all().url).href,\n data: this.requestParams.data(),\n params: this.requestParams.queryParams(),\n signal: this.cancelToken.signal,\n headers: this.getHeaders(),\n onUploadProgress: this.onProgress.bind(this),\n // Why text? This allows us to delay JSON.parse until we're ready to use the response,\n // helps with performance particularly on large responses + history encryption\n responseType: 'text',\n })\n .then((response) => {\n this.response = Response.create(this.requestParams, response, this.page)\n\n return this.response.handle()\n })\n .catch((error) => {\n if (error?.response) {\n this.response = Response.create(this.requestParams, error.response, this.page)\n\n return this.response.handle()\n }\n\n return Promise.reject(error)\n })\n .catch((error) => {\n if (axios.isCancel(error)) {\n return\n }\n\n if (fireExceptionEvent(error)) {\n return Promise.reject(error)\n }\n })\n .finally(() => {\n this.finish()\n\n if (originallyPrefetch && this.response) {\n this.requestParams.onPrefetchResponse(this.response)\n }\n })\n }\n\n protected finish(): void {\n if (this.requestParams.wasCancelledAtAll()) {\n return\n }\n\n this.requestParams.markAsFinished()\n this.fireFinishEvents()\n }\n\n protected fireFinishEvents(): void {\n if (this.requestHasFinished) {\n // This could be called from multiple places, don't let it re-fire\n return\n }\n\n this.requestHasFinished = true\n\n fireFinishEvent(this.requestParams.all())\n this.requestParams.onFinish()\n }\n\n public cancel({ cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean }): void {\n if (this.requestHasFinished) {\n // If the request has already finished, there's no need to cancel it\n return\n }\n\n this.cancelToken.abort()\n\n this.requestParams.markAsCancelled({ cancelled, interrupted })\n\n this.fireFinishEvents()\n }\n\n protected onProgress(progress: AxiosProgressEvent): void {\n if (this.requestParams.data() instanceof FormData) {\n progress.percentage = progress.progress ? Math.round(progress.progress * 100) : 0\n fireProgressEvent(progress)\n this.requestParams.all().onProgress(progress)\n }\n }\n\n protected getHeaders(): AxiosRequestConfig['headers'] {\n const headers: AxiosRequestConfig['headers'] = {\n ...this.requestParams.headers(),\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n }\n \n const frame = this.requestParams.all().frame\n const referer = currentPage.frame(frame).url\n if (referer) {\n headers['X-Inertia-Referer'] = urlWithoutHash(hrefToUrl(referer)).href\n }\n\n if (currentPage.get().version) {\n headers['X-Inertia-Version'] = currentPage.get().version\n }\n\n return headers\n }\n}\n", "import { AxiosRequestConfig } from 'axios'\nimport { page as currentPage } from './page'\nimport { Response } from './response'\nimport { ActiveVisit, InternalActiveVisit, Page, PreserveStateOption, VisitCallbacks } from './types'\n\nexport class RequestParams {\n protected callbacks: {\n name: keyof VisitCallbacks\n args: any[]\n }[] = []\n\n protected params: InternalActiveVisit\n\n constructor(params: InternalActiveVisit) {\n if (!params.prefetch) {\n this.params = params\n } else {\n const wrappedCallbacks: Record<keyof VisitCallbacks, () => any> = {\n onBefore: this.wrapCallback(params, 'onBefore'),\n onStart: this.wrapCallback(params, 'onStart'),\n onProgress: this.wrapCallback(params, 'onProgress'),\n onFinish: this.wrapCallback(params, 'onFinish'),\n onCancel: this.wrapCallback(params, 'onCancel'),\n onSuccess: this.wrapCallback(params, 'onSuccess'),\n onError: this.wrapCallback(params, 'onError'),\n onCancelToken: this.wrapCallback(params, 'onCancelToken'),\n onPrefetched: this.wrapCallback(params, 'onPrefetched'),\n onPrefetching: this.wrapCallback(params, 'onPrefetching'),\n }\n\n this.params = {\n ...params,\n ...wrappedCallbacks,\n onPrefetchResponse: params.onPrefetchResponse || (() => {}),\n }\n }\n //\n }\n\n public static create(params: ActiveVisit): RequestParams {\n return new RequestParams(params)\n }\n\n public data() {\n return this.params.method === 'get' ? {} : this.params.data\n }\n\n public queryParams() {\n return this.params.method === 'get' ? this.params.data : {}\n }\n\n public isPartial() {\n return this.params.only.length > 0 || this.params.except.length > 0 || this.params.reset.length > 0\n }\n\n public onCancelToken(cb: VoidFunction) {\n this.params.onCancelToken({\n cancel: cb,\n })\n }\n\n public markAsFinished() {\n this.params.completed = true\n this.params.cancelled = false\n this.params.interrupted = false\n }\n\n public markAsCancelled({ cancelled = true, interrupted = false }) {\n this.params.onCancel()\n\n this.params.completed = false\n this.params.cancelled = cancelled\n this.params.interrupted = interrupted\n }\n\n public wasCancelledAtAll() {\n return this.params.cancelled || this.params.interrupted\n }\n\n public onFinish() {\n this.params.onFinish(this.params)\n }\n\n public onStart() {\n this.params.onStart(this.params)\n }\n\n public onPrefetching() {\n this.params.onPrefetching(this.params)\n }\n\n public onPrefetchResponse(response: Response) {\n if (this.params.onPrefetchResponse) {\n this.params.onPrefetchResponse(response)\n }\n }\n\n public all() {\n return this.params\n }\n\n public headers(): AxiosRequestConfig['headers'] {\n const headers: AxiosRequestConfig['headers'] = {\n ...this.params.headers,\n }\n\n if (this.isPartial()) {\n headers['X-Inertia-Partial-Component'] = currentPage.frame(this.params.frame).component\n }\n\n const only = this.params.only.concat(this.params.reset)\n\n if (only.length > 0) {\n headers['X-Inertia-Partial-Data'] = only.join(',')\n }\n\n if (this.params.except.length > 0) {\n headers['X-Inertia-Partial-Except'] = this.params.except.join(',')\n }\n\n if (this.params.reset.length > 0) {\n headers['X-Inertia-Reset'] = this.params.reset.join(',')\n }\n\n if (this.params.errorBag && this.params.errorBag.length > 0) {\n headers['X-Inertia-Error-Bag'] = this.params.errorBag\n }\n\n return headers\n }\n\n public setPreserveOptions(page: Page) {\n this.params.preserveScroll = this.resolvePreserveOption(this.params.preserveScroll, page)\n this.params.preserveState = this.resolvePreserveOption(this.params.preserveState, page)\n }\n\n public runCallbacks() {\n this.callbacks.forEach(({ name, args }) => {\n // @ts-ignore\n this.params[name](...args)\n })\n }\n\n public merge(toMerge: Partial<ActiveVisit>) {\n this.params = {\n ...this.params,\n ...toMerge,\n }\n }\n\n protected wrapCallback(params: ActiveVisit, name: keyof VisitCallbacks) {\n // @ts-ignore\n return (...args) => {\n this.recordCallback(name, args)\n // @ts-ignore\n params[name](...args)\n }\n }\n\n protected recordCallback(name: keyof VisitCallbacks, args: any[]) {\n this.callbacks.push({ name, args })\n }\n\n protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean {\n if (typeof value === 'function') {\n return value(page)\n }\n\n if (value === 'errors') {\n return Object.keys(page.frames[this.params.frame].props.errors || {}).length > 0\n }\n\n return value\n }\n}\n", "export default {\n modal: null,\n listener: null,\n\n show(html: Record<string, unknown> | string): void {\n if (typeof html === 'object') {\n html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(\n html,\n )}`\n }\n\n const page = document.createElement('html')\n page.innerHTML = html\n page.querySelectorAll('a').forEach((a) => a.setAttribute('target', '_top'))\n\n this.modal = document.createElement('div')\n this.modal.style.position = 'fixed'\n this.modal.style.width = '100vw'\n this.modal.style.height = '100vh'\n this.modal.style.padding = '50px'\n this.modal.style.boxSizing = 'border-box'\n this.modal.style.backgroundColor = 'rgba(0, 0, 0, .6)'\n this.modal.style.zIndex = 200000\n this.modal.addEventListener('click', () => this.hide())\n\n const iframe = document.createElement('iframe')\n iframe.style.backgroundColor = 'white'\n iframe.style.borderRadius = '5px'\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n this.modal.appendChild(iframe)\n\n document.body.prepend(this.modal)\n document.body.style.overflow = 'hidden'\n if (!iframe.contentWindow) {\n throw new Error('iframe not yet ready.')\n }\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n\n this.listener = this.hideOnEscape.bind(this)\n document.addEventListener('keydown', this.listener)\n },\n\n hide(): void {\n this.modal.outerHTML = ''\n this.modal = null\n document.body.style.overflow = 'visible'\n document.removeEventListener('keydown', this.listener)\n },\n\n hideOnEscape(event: KeyboardEvent): void {\n if (event.keyCode === 27) {\n this.hide()\n }\n },\n}\n", "import { AxiosResponse } from 'axios'\nimport { fireErrorEvent, fireInvalidEvent, firePrefetchedEvent, fireSuccessEvent } from './events'\nimport { history, History } from './history'\nimport modal from './modal'\nimport { page as currentPage } from './page'\nimport { RequestParams } from './requestParams'\nimport { SessionStorage } from './sessionStorage'\nimport { ActiveVisit, ErrorBag, Errors, Page, Frame } from './types'\nimport { hrefToUrl, isSameUrlWithoutHash, setHashIfSameUrl } from './url'\n\nclass ResponseQueue {\n protected queue: Response[] = []\n protected processing = false\n\n public add(response: Response) {\n this.queue.push(response)\n }\n\n public async process(): Promise<void> {\n if (this.processing) {\n return Promise.resolve()\n }\n\n this.processing = true\n await this.processQueue()\n this.processing = false\n\n return Promise.resolve()\n }\n\n protected async processQueue(): Promise<void> {\n const nextResponse = this.queue.shift()\n\n if (nextResponse) {\n await nextResponse.process()\n return this.processQueue()\n }\n\n return Promise.resolve()\n }\n}\n\nconst queue = new ResponseQueue()\n\nexport class Response {\n constructor(\n protected requestParams: RequestParams,\n protected response: AxiosResponse,\n protected originatingPage: Page,\n ) {}\n\n public static create(params: RequestParams, response: AxiosResponse, originatingPage: Page): Response {\n return new Response(params, response, originatingPage)\n }\n\n public async handlePrefetch() {\n if (isSameUrlWithoutHash(this.requestParams.all().url, window.location)) {\n this.handle()\n }\n }\n\n public async handle() {\n queue.add(this)\n return queue.process()\n }\n\n public async process() {\n if (this.requestParams.all().prefetch) {\n this.requestParams.all().prefetch = false\n\n this.requestParams.all().onPrefetched(this.response, this.requestParams.all())\n firePrefetchedEvent(this.response, this.requestParams.all())\n\n return Promise.resolve()\n }\n\n this.requestParams.runCallbacks()\n\n if (!this.isInertiaResponse()) {\n return this.handleNonInertiaResponse()\n }\n\n await history.processQueue()\n\n history.preserveUrl = this.requestParams.all().preserveUrl\n\n await this.setFrame()\n const frame = this.requestParams.all().frame\n \n const errors = currentPage.frame(frame).props.errors || {}\n\n if (Object.keys(errors).length > 0) {\n const scopedErrors = this.getScopedErrors(errors)\n\n fireErrorEvent(scopedErrors)\n\n return this.requestParams.all().onError(scopedErrors)\n }\n\n fireSuccessEvent(currentPage.get())\n\n await this.requestParams.all().onSuccess(currentPage.get())\n\n history.preserveUrl = false\n }\n\n public mergeParams(params: ActiveVisit) {\n this.requestParams.merge(params)\n }\n\n protected async handleNonInertiaResponse() {\n if (this.isLocationVisit()) {\n const locationUrl = hrefToUrl(this.getHeader('x-inertia-location'))\n\n setHashIfSameUrl(this.requestParams.all().url, locationUrl)\n\n return this.locationVisit(locationUrl)\n }\n\n const response = {\n ...this.response,\n data: this.getDataFromResponse(this.response.data),\n }\n\n if (fireInvalidEvent(response)) {\n return modal.show(response.data)\n }\n }\n\n protected isInertiaResponse(): boolean {\n return this.hasHeader('x-inertia')\n }\n\n protected hasStatus(status: number): boolean {\n return this.response.status === status\n }\n\n protected getHeader(header: string): string {\n return this.response.headers[header]\n }\n\n protected hasHeader(header: string): boolean {\n return this.getHeader(header) !== undefined\n }\n\n protected isLocationVisit(): boolean {\n return this.hasStatus(409) && this.hasHeader('x-inertia-location')\n }\n\n /**\n * @link https://inertiajs.com/redirects#external-redirects\n */\n protected locationVisit(url: URL): boolean | void {\n try {\n SessionStorage.set(SessionStorage.locationVisitKey, {\n preserveScroll: this.requestParams.all().preserveScroll === true,\n })\n\n if (typeof window === 'undefined') {\n return\n }\n\n if (isSameUrlWithoutHash(window.location, url)) {\n window.location.reload()\n } else {\n window.location.href = url.href\n }\n } catch (error) {\n return false\n }\n }\n\n protected async setFrame(): Promise<void> {\n const pageResponse = this.getDataFromResponse(this.response.data)\n\n if (!this.shouldSetFrame(pageResponse)) {\n return Promise.resolve()\n }\n\n this.mergeProps(pageResponse)\n await this.setRememberedState(pageResponse)\n\n this.requestParams.setPreserveOptions(pageResponse)\n\n pageResponse.url = history.preserveUrl ? currentPage.frame(\"_top\").url : this.pageUrl(pageResponse)\n delete pageResponse.version\n \n History.encryptHistory = pageResponse.encryptHistory\n if (pageResponse.clearHistory) {\n history.clear()\n }\n \n return currentPage.setFrame(\n this.requestParams.all().frame, \n pageResponse, {\n replace: this.requestParams.all().replace,\n preserveScroll: this.requestParams.all().preserveScroll,\n preserveState: this.requestParams.all().preserveState,\n })\n }\n\n protected getDataFromResponse(response: any): any {\n if (typeof response !== 'string') {\n return response\n }\n\n try {\n return JSON.parse(response)\n } catch (error) {\n return response\n }\n }\n\n protected shouldSetFrame(pageResponse: Frame): boolean {\n const frame = this.requestParams.all().frame\n if (!this.requestParams.all().async) {\n // If the request is sync, we should always set the page\n return true\n }\n\n if (this.originatingPage.frames[frame].component !== pageResponse.component) {\n // We originated from a component but the response re-directed us,\n // we should respect the redirection and set the page\n return true\n }\n\n // At this point, if the originating request component is different than the current component,\n // the user has since navigated and we should discard the response\n if (this.originatingPage.frames[frame].component !== currentPage.frame(frame).component) {\n return false\n }\n\n const originatingUrl = hrefToUrl(this.originatingPage.frames['_top'].url)\n const currentPageUrl = hrefToUrl(currentPage.frame(\"_top\").url)\n\n // We have the same component, let's double-check the URL\n // If we're no longer on the same path name (e.g. /users/1 -> /users/2), we should not set the page\n return originatingUrl.origin === currentPageUrl.origin && originatingUrl.pathname === currentPageUrl.pathname\n }\n\n protected pageUrl(pageResponse: Frame) {\n const responseUrl = hrefToUrl(pageResponse.url)\n\n setHashIfSameUrl(this.requestParams.all().url, responseUrl)\n\n return responseUrl.href\n }\n\n protected mergeProps(pageResponse: Frame): void {\n const frame = this.requestParams.all().frame\n if (this.requestParams.isPartial() && pageResponse.component === currentPage.frame(frame).component) {\n const propsToMerge = pageResponse.mergeProps || []\n\n propsToMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n\n if (Array.isArray(incomingProp)) {\n pageResponse.props[prop] = [...((currentPage.frame(frame).props[prop] || []) as any[]), ...incomingProp]\n } else if (typeof incomingProp === 'object') {\n pageResponse.props[prop] = {\n ...((currentPage.frame(frame).props[prop] || []) as Record<string, any>),\n ...incomingProp,\n }\n }\n })\n\n pageResponse.props = { ...currentPage.frame(frame).props, ...pageResponse.props }\n }\n }\n\n protected async setRememberedState(pageResponse: Frame): Promise<void> {\n const rememberedFrames = await history.getState<Page['frames']>('frames', {})\n const frame = this.requestParams.all().frame\n const rememberedState = rememberedFrames[frame]?.rememberedState || {}\n if (\n this.requestParams.all().preserveState &&\n rememberedState &&\n pageResponse.component === currentPage.frame(frame).component\n ) {\n pageResponse.rememberedState = rememberedState\n }\n }\n\n protected getScopedErrors(errors: Errors & ErrorBag): Errors {\n if (!this.requestParams.all().errorBag) {\n return errors\n }\n\n return errors[this.requestParams.all().errorBag || ''] || {}\n }\n}\n", "import { Request } from './request'\n\nexport class RequestStream {\n protected requests: Request[] = []\n\n protected maxConcurrent: number\n\n protected interruptible: boolean\n\n constructor({ maxConcurrent, interruptible }: { maxConcurrent: number; interruptible: boolean }) {\n this.maxConcurrent = maxConcurrent\n this.interruptible = interruptible\n }\n\n public send(request: Request) {\n this.requests.push(request)\n\n request.send().then(() => {\n this.requests = this.requests.filter((r) => r !== request)\n })\n }\n\n public interruptInFlight(): void {\n this.cancel({ interrupted: true }, false)\n }\n\n public cancelInFlight(): void {\n this.cancel({ cancelled: true }, true)\n }\n\n protected cancel({ cancelled = false, interrupted = false } = {}, force: boolean): void {\n if (!this.shouldCancel(force)) {\n return\n }\n\n const request = this.requests.shift()!\n\n request?.cancel({ interrupted, cancelled })\n }\n\n protected shouldCancel(force: boolean): boolean {\n if (force) {\n return true\n }\n\n return this.interruptible && this.requests.length >= this.maxConcurrent\n }\n}\n", "import { hideProgress, revealProgress } from '.'\nimport { eventHandler } from './eventHandler'\nimport { fireBeforeEvent } from './events'\nimport { history } from './history'\nimport { InitialVisit } from './initialVisit'\nimport { page as currentPage } from './page'\nimport { polls } from './polls'\nimport { prefetchedRequests } from './prefetched'\nimport { Request } from './request'\nimport { RequestStream } from './requestStream'\nimport { Scroll } from './scroll'\nimport {\n ActiveVisit,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Page,\n PendingVisit,\n PendingVisitOptions,\n PollOptions,\n PrefetchedResponse,\n PrefetchOptions,\n ReloadOptions,\n RequestPayload,\n PageResolver,\n RouterInitParams,\n Visit,\n VisitCallbacks,\n VisitHelperOptions,\n VisitOptions,\n} from './types'\nimport { transformUrlAndData } from './url'\n\nexport class Router {\n static resolveComponent: PageResolver\n \n protected frame: string\n \n protected syncRequestStream = new RequestStream({\n maxConcurrent: 1,\n interruptible: true,\n })\n\n protected asyncRequestStream = new RequestStream({\n maxConcurrent: Infinity,\n interruptible: false,\n })\n \n constructor({ frame, initialState, swapComponent }: RouterInitParams) {\n this.frame = frame\n \n if (import.meta.env.SSR) return;\n\n currentPage.init({\n frame,\n initialState,\n swapComponent,\n })\n \n if (frame !== '_top') return;\n \n InitialVisit.handle()\n \n eventHandler.init()\n\n eventHandler.on('missingHistoryItem', () => {\n if (typeof window !== 'undefined') {\n this.visit(window.location.href, { preserveState: true, preserveScroll: true, replace: true })\n }\n })\n\n eventHandler.onGlobalEvent('navigate', () => {\n this.loadDeferredProps()\n })\n }\n\n public get(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { ...options, method: 'get', data })\n }\n\n public post(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'post', data })\n }\n\n public put(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'put', data })\n }\n\n public patch(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'patch', data })\n }\n\n public delete(url: URL | string, options: Omit<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'delete' })\n }\n\n public reload(options: ReloadOptions = {}): void {\n if (typeof window === 'undefined') {\n return\n }\n\n return this.visit(window.location.href, {\n ...options,\n preserveScroll: true,\n preserveState: true,\n async: true,\n headers: {\n ...(options.headers || {}),\n 'Cache-Control': 'no-cache',\n },\n })\n }\n\n public remember(data: unknown, key = 'default'): void {\n history.remember(this.frame, data, key)\n }\n\n public restore(key = 'default'): unknown {\n return history.restore(this.frame, key)\n }\n\n public on<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n return eventHandler.onGlobalEvent(type, callback)\n }\n\n public cancel(): void {\n this.syncRequestStream.cancelInFlight()\n }\n\n public cancelAll(): void {\n this.asyncRequestStream.cancelInFlight()\n this.syncRequestStream.cancelInFlight()\n }\n\n public poll(interval: number, requestOptions: ReloadOptions = {}, options: PollOptions = {}) {\n return polls.add(interval, () => this.reload(requestOptions), {\n autoStart: options.autoStart ?? true,\n keepAlive: options.keepAlive ?? false,\n })\n }\n\n public visit(href: string | URL, options: VisitOptions = {}): void {\n if (import.meta.env.SSR) return;\n \n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n showProgress: options.showProgress ?? !options.async,\n })\n\n const events = this.getVisitEvents(options)\n\n // If either of these return false, we don't want to continue\n if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n const requestStream = visit.async ? this.asyncRequestStream : this.syncRequestStream\n\n requestStream.interruptInFlight()\n\n if (!currentPage.isCleared() && !visit.preserveUrl) {\n // Save scroll regions for the current page\n Scroll.save(currentPage.get())\n }\n\n const requestParams: PendingVisit & VisitCallbacks = {\n ...visit,\n ...events,\n }\n\n const prefetched = prefetchedRequests.get(requestParams)\n\n if (prefetched) {\n revealProgress(prefetched.inFlight)\n prefetchedRequests.use(prefetched, requestParams)\n } else {\n revealProgress(true)\n requestStream.send(Request.create(requestParams, currentPage.get()))\n }\n }\n\n public getCached(href: string | URL, options: VisitOptions = {}): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findCached(this.getPrefetchParams(href, options))\n }\n\n public flush(href: string | URL, options: VisitOptions = {}): void {\n prefetchedRequests.remove(this.getPrefetchParams(href, options))\n }\n\n public flushAll(): void {\n prefetchedRequests.removeAll()\n }\n\n public getPrefetching(href: string | URL, options: VisitOptions = {}): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options))\n }\n\n public prefetch(href: string | URL, options: VisitOptions = {}, { cacheFor }: PrefetchOptions) {\n if (options.method !== 'get') {\n throw new Error('Prefetch requests must use the GET method')\n }\n\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n async: true,\n showProgress: false,\n prefetch: true,\n })\n\n const events = this.getVisitEvents(options)\n\n // If either of these return false, we don't want to continue\n if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n hideProgress()\n\n this.asyncRequestStream.interruptInFlight()\n\n const requestParams: PendingVisit & VisitCallbacks = {\n ...visit,\n ...events,\n }\n\n prefetchedRequests.add(\n requestParams,\n (params) => {\n this.asyncRequestStream.send(Request.create(params, currentPage.get()))\n },\n { cacheFor },\n )\n }\n\n public clearHistory(): void {\n history.clear()\n }\n\n public decryptHistory(): Promise<Page> {\n return history.decrypt()\n }\n\n protected getPrefetchParams(href: string | URL, options: VisitOptions): ActiveVisit {\n return {\n ...this.getPendingVisit(href, {\n ...options,\n async: true,\n showProgress: false,\n prefetch: true,\n }),\n ...this.getVisitEvents(options),\n }\n }\n\n protected getPendingVisit(\n href: string | URL,\n options: VisitOptions,\n pendingVisitOptions: Partial<PendingVisitOptions> = {},\n ): PendingVisit {\n const mergedOptions: Visit = {\n method: 'get',\n data: {},\n replace: false,\n preserveScroll: false,\n preserveState: false,\n only: [],\n except: [],\n headers: {},\n errorBag: '',\n forceFormData: false,\n queryStringArrayFormat: 'brackets',\n async: false,\n showProgress: true,\n fresh: false,\n reset: [],\n preserveUrl: false,\n prefetch: false,\n frame: this.frame,\n ...options,\n }\n\n const [url, _data] = transformUrlAndData(\n href,\n mergedOptions.data,\n mergedOptions.method,\n mergedOptions.forceFormData,\n mergedOptions.queryStringArrayFormat,\n )\n\n return {\n cancelled: false,\n completed: false,\n interrupted: false,\n ...mergedOptions,\n ...pendingVisitOptions,\n url,\n data: _data,\n }\n }\n\n protected getVisitEvents(options: VisitOptions): VisitCallbacks {\n return {\n onCancelToken: options.onCancelToken || (() => {}),\n onBefore: options.onBefore || (() => {}),\n onStart: options.onStart || (() => {}),\n onProgress: options.onProgress || (() => {}),\n onFinish: options.onFinish || (() => {}),\n onCancel: options.onCancel || (() => {}),\n onSuccess: options.onSuccess || (() => {}),\n onError: options.onError || (() => {}),\n onPrefetched: options.onPrefetched || (() => {}),\n onPrefetching: options.onPrefetching || (() => {}),\n }\n }\n\n protected loadDeferredProps(): void {\n const deferred = currentPage.frame(this.frame)?.deferredProps\n\n if (deferred) {\n Object.entries(deferred).forEach(([_, group]) => {\n this.reload({ only: group })\n })\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["src_exports", "__export", "History", "Router", "createHeadManager", "hide", "hrefToUrl", "mergeDataIntoQueryString", "reveal", "setupProgress", "shouldIntercept", "urlWithoutHash", "__toCommonJS", "debounce", "fn", "delay", "timeoutID", "args", "Renderer", "tag", "template", "node", "script", "name", "element", "elements", "key", "debounce", "sourceElements", "targetElement", "index", "sourceElement", "createHeadManager", "isServer", "titleCallback", "onUpdate", "states", "lastProviderId", "connect", "id", "disconnect", "commit", "update", "collect", "title", "defaults", "carry", "match", "import_nprogress", "hideProgressStyleEl", "el", "hideCount", "removeStyle", "reveal", "force", "hide", "addEventListeners", "delay", "start", "progress", "event", "timeout", "NProgress", "e", "finish", "injectCSS", "color", "element", "setupProgress", "includeCSS", "showSpinner", "shouldIntercept", "event", "isLink", "import_deepmerge", "qs", "hasFiles", "data", "value", "isFormData", "value", "objectToFormData", "source", "form", "parentKey", "key", "append", "composeKey", "parent", "index", "hrefToUrl", "href", "transformUrlAndData", "data", "method", "forceFormData", "queryStringArrayFormat", "url", "hasFiles", "isFormData", "objectToFormData", "_href", "_data", "mergeDataIntoQueryString", "qsArrayFormat", "hasHost", "hasAbsolutePath", "hasRelativePath", "hasSearch", "hasHash", "deepmerge", "urlWithoutHash", "setHashIfSameUrl", "originUrl", "destinationUrl", "isSameUrlWithoutHash", "url1", "url2", "import_deepmerge", "fireEvent", "name", "options", "fireBeforeEvent", "visit", "fireErrorEvent", "errors", "fireExceptionEvent", "exception", "fireFinishEvent", "fireInvalidEvent", "response", "fireNavigateEvent", "page", "fireProgressEvent", "progress", "fireStartEvent", "fireSuccessEvent", "firePrefetchedEvent", "firePrefetchingEvent", "import_deepmerge", "SessionStorage", "key", "value", "existing", "nestedKey", "encryptHistory", "data", "iv", "getIv", "storedKey", "getKeyFromSessionStorage", "key", "getOrCreateKey", "encryptData", "historySessionStorageKeys", "decryptHistory", "decryptData", "textEncoder", "str", "encoded", "decrypted", "decoded", "ivString", "SessionStorage", "createKey", "saveKey", "keyData", "newKey", "stringKey", "Scroll", "page", "history", "region", "index", "scrollPosition", "event", "target", "import_deepmerge", "CurrentPage", "frame", "initialState", "swapComponent", "_a", "page", "replace", "preserveScroll", "preserveState", "componentId", "components", "location", "isSameUrlWithoutHash", "hrefToUrl", "history", "Scroll", "fireNavigateEvent", "name", "options", "deepmerge", "_", "s", "data", "source", "hash", "regions", "component", "frames", "result", "Router", "event", "callback", "listener", "isServer", "_History", "frame", "data", "key", "old", "page", "newState", "deepmerge", "_", "s", "resolve", "encryptHistory", "next", "pageData", "decryptHistory", "fn", "defaultValue", "SessionStorage", "historySessionStorageKeys", "state", "History", "history", "EventHandler", "debounce", "Scroll", "type", "callback", "listener", "event", "response", "page", "state", "url", "hrefToUrl", "history", "deepmerge", "_", "s", "data", "fireNavigateEvent", "eventHandler", "NavigationType", "navigationType", "InitialVisit", "handler", "navigationType", "history", "data", "page", "Scroll", "fireNavigateEvent", "eventHandler", "SessionStorage", "locationVisit", "rememberedFrames", "scrollRegions", "name", "frame", "Poll", "interval", "cb", "options", "hidden", "Polls", "interval", "cb", "options", "poll", "Poll", "polls", "objectsAreEqual", "obj1", "obj2", "excludeKeys", "key", "compareValues", "value1", "value2", "conversionMap", "timeToMs", "time", "unit", "conversion", "PrefetchedRequests", "params", "sendFunc", "cacheFor", "existing", "stale", "expires", "promise", "resolve", "reject", "error", "visitParams", "response", "visit", "prefetching", "removalTimer", "prefetched", "timeToMs", "timer", "expiresIn", "id", "params1", "params2", "objectsAreEqual", "prefetchedRequests", "import_axios", "RequestParams", "params", "wrappedCallbacks", "cb", "cancelled", "interrupted", "response", "headers", "page", "only", "name", "args", "toMerge", "value", "modal_default", "html", "page", "a", "iframe", "event", "ResponseQueue", "response", "nextResponse", "queue", "Response", "requestParams", "originatingPage", "params", "isSameUrlWithoutHash", "firePrefetchedEvent", "history", "frame", "errors", "page", "scopedErrors", "fireErrorEvent", "fireSuccessEvent", "locationUrl", "hrefToUrl", "setHashIfSameUrl", "fireInvalidEvent", "modal_default", "status", "header", "url", "SessionStorage", "pageResponse", "History", "originatingUrl", "currentPageUrl", "responseUrl", "prop", "incomingProp", "rememberedFrames", "rememberedState", "Request", "params", "page", "RequestParams", "fireStartEvent", "firePrefetchingEvent", "originallyPrefetch", "axios", "urlWithoutHash", "response", "Response", "error", "fireExceptionEvent", "fireFinishEvent", "cancelled", "interrupted", "progress", "fireProgressEvent", "headers", "frame", "referer", "hrefToUrl", "RequestStream", "maxConcurrent", "interruptible", "request", "r", "cancelled", "interrupted", "force", "
|
|
3
|
+
"sources": ["../src/index.ts", "../src/debounce.ts", "../src/head.ts", "../src/progress.ts", "../src/shouldIntercept.ts", "../src/url.ts", "../src/files.ts", "../src/formData.ts", "../src/router.ts", "../src/eventHandler.ts", "../src/events.ts", "../src/history.ts", "../src/sessionStorage.ts", "../src/encryption.ts", "../src/scroll.ts", "../src/page.ts", "../src/navigationType.ts", "../src/initialVisit.ts", "../src/poll.ts", "../src/polls.ts", "../src/objectUtils.ts", "../src/time.ts", "../src/prefetched.ts", "../src/request.ts", "../src/requestParams.ts", "../src/modal.ts", "../src/response.ts", "../src/requestStream.ts"],
|
|
4
|
+
"sourcesContent": ["export { default as createHeadManager } from './head'\nexport { hide as hideProgress, reveal as revealProgress, default as setupProgress } from './progress'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport * from './types'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { Router } from './router'\nexport { History } from './history'", "export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F {\n let timeoutID: NodeJS.Timeout\n return function (...args: unknown[]) {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(() => fn.apply(this, args), delay)\n } as F\n}\n", "import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n", "import NProgress from 'nprogress'\nimport { GlobalEvent } from './types'\n\nconst hideProgressStyleEl = (() => {\n if (typeof document === 'undefined') {\n return null\n }\n\n const el = document.createElement('style')\n\n el.innerHTML = '#nprogress { display: none; }'\n\n return el\n})()\n\nlet hideCount = 0\n\nconst removeStyle = () => {\n if (hideProgressStyleEl && document.head.contains(hideProgressStyleEl)) {\n return document.head.removeChild(hideProgressStyleEl)\n }\n}\n\nexport const reveal = (force = false) => {\n hideCount = Math.max(0, hideCount - 1)\n\n if (force || hideCount === 0) {\n removeStyle()\n }\n}\n\nexport const hide = () => {\n hideCount++\n\n if (hideProgressStyleEl && !document.head.contains(hideProgressStyleEl)) {\n document.head.appendChild(hideProgressStyleEl)\n }\n}\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', (e) => start(e, delay))\n document.addEventListener('inertia:progress', progress)\n}\n\nfunction start(event: GlobalEvent<'start'>, delay: number): void {\n if (!event.detail.visit.showProgress) {\n hide()\n }\n\n const timeout = setTimeout(() => NProgress.start(), delay)\n document.addEventListener('inertia:finish', (e) => finish(e, timeout), { once: true })\n}\n\nfunction progress(event: GlobalEvent<'progress'>): void {\n if (NProgress.isStarted() && event.detail.progress?.percentage) {\n NProgress.set(Math.max(NProgress.status!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>, timeout: NodeJS.Timeout): void {\n clearTimeout(timeout!)\n\n if (!NProgress.isStarted()) {\n return\n }\n\n if (event.detail.visit.completed) {\n NProgress.done()\n } else if (event.detail.visit.interrupted) {\n NProgress.set(0)\n } else if (event.detail.visit.cancelled) {\n NProgress.done()\n NProgress.remove()\n }\n}\n\nfunction injectCSS(color: string): void {\n const element = document.createElement('style')\n element.textContent = `\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n NProgress.configure({ showSpinner })\n if (includeCSS) {\n injectCSS(color)\n }\n}\n", "export default function shouldIntercept(event: MouseEvent | KeyboardEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\n (isLink && event.which > 1) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey) ||\n (isLink && 'button' in event && event.button !== 0)\n )\n}\n", "import deepmerge from 'deepmerge'\nimport * as qs from 'qs'\nimport { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport { FormDataConvertible, Method, RequestPayload, VisitOptions } from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), typeof window === 'undefined' ? undefined : window.location.toString())\n}\n\nexport const transformUrlAndData = (\n href: string | URL,\n data: RequestPayload,\n method: Method,\n forceFormData: VisitOptions['forceFormData'],\n queryStringArrayFormat: VisitOptions['queryStringArrayFormat'],\n): [URL, RequestPayload] => {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !isFormData(data)) {\n data = objectToFormData(data)\n }\n\n if (isFormData(data)) {\n return [url, data]\n }\n\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n\n return [hrefToUrl(_href), _data]\n}\n\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === 'get' && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === 'get' && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n\nexport const setHashIfSameUrl = (originUrl: URL | Location, destinationUrl: URL | Location) => {\n if (originUrl.hash && !destinationUrl.hash && urlWithoutHash(originUrl).href === destinationUrl.href) {\n destinationUrl.hash = originUrl.hash\n }\n}\n\nexport const isSameUrlWithoutHash = (url1: URL | Location, url2: URL | Location): boolean => {\n return urlWithoutHash(url1).href === urlWithoutHash(url2).href\n}\n", "import { FormDataConvertible, RequestPayload } from './types'\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n data instanceof File ||\n data instanceof Blob ||\n (data instanceof FileList && data.length > 0) ||\n (data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value))) ||\n (typeof data === 'object' && data !== null && Object.values(data).some((value) => hasFiles(value)))\n )\n}\n", "import { FormDataConvertible } from './types'\n\nexport const isFormData = (value: any): value is FormData => value instanceof FormData\n\nexport function objectToFormData(\n source: Record<string, FormDataConvertible>,\n form: FormData = new FormData(),\n parentKey: string | null = null,\n): FormData {\n source = source || {}\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n append(form, composeKey(parentKey, key), source[key])\n }\n }\n\n return form\n}\n\nfunction composeKey(parent: string | null, key: string): string {\n return parent ? parent + '[' + key + ']' : key\n}\n\nfunction append(form: FormData, key: string, value: FormDataConvertible): void {\n if (Array.isArray(value)) {\n return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]))\n } else if (value instanceof Date) {\n return form.append(key, value.toISOString())\n } else if (value instanceof File) {\n return form.append(key, value, value.name)\n } else if (value instanceof Blob) {\n return form.append(key, value)\n } else if (typeof value === 'boolean') {\n return form.append(key, value ? '1' : '0')\n } else if (typeof value === 'string') {\n return form.append(key, value)\n } else if (typeof value === 'number') {\n return form.append(key, `${value}`)\n } else if (value === null || value === undefined) {\n return form.append(key, '')\n }\n\n objectToFormData(value, form, key)\n}\n", "import { BROWSER } from 'esm-env';\nimport { hideProgress, revealProgress } from '.'\nimport { eventHandler } from './eventHandler'\nimport { fireBeforeEvent } from './events'\nimport { history } from './history'\nimport { InitialVisit } from './initialVisit'\nimport { page as currentPage } from './page'\nimport { polls } from './polls'\nimport { prefetchedRequests } from './prefetched'\nimport { Request } from './request'\nimport { RequestStream } from './requestStream'\nimport { Scroll } from './scroll'\nimport {\n ActiveVisit,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Page,\n PendingVisit,\n PendingVisitOptions,\n PollOptions,\n PrefetchedResponse,\n PrefetchOptions,\n ReloadOptions,\n RequestPayload,\n PageResolver,\n RouterInitParams,\n Visit,\n VisitCallbacks,\n VisitHelperOptions,\n VisitOptions,\n} from './types'\nimport { transformUrlAndData } from './url'\n\nexport class Router {\n static resolveComponent: PageResolver\n \n protected frame: string\n \n protected syncRequestStream = new RequestStream({\n maxConcurrent: 1,\n interruptible: true,\n })\n\n protected asyncRequestStream = new RequestStream({\n maxConcurrent: Infinity,\n interruptible: false,\n })\n \n constructor({ frame, initialState, swapComponent }: RouterInitParams) {\n this.frame = frame\n \n if (!BROWSER) return;\n\n currentPage.init({\n frame,\n initialState,\n swapComponent,\n })\n \n if (frame !== '_top') return;\n \n InitialVisit.handle()\n \n eventHandler.init()\n\n eventHandler.on('missingHistoryItem', () => {\n if (typeof window !== 'undefined') {\n this.visit(window.location.href, { preserveState: true, preserveScroll: true, replace: true })\n }\n })\n\n eventHandler.on('loadDeferredProps', () => {\n this.loadDeferredProps()\n })\n }\n\n public get(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { ...options, method: 'get', data })\n }\n\n public post(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'post', data })\n }\n\n public put(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'put', data })\n }\n\n public patch(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'patch', data })\n }\n\n public delete(url: URL | string, options: Omit<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'delete' })\n }\n\n public reload(options: ReloadOptions = {}): void {\n if (typeof window === 'undefined') {\n return\n }\n\n return this.visit(window.location.href, {\n ...options,\n preserveScroll: true,\n preserveState: true,\n async: true,\n headers: {\n ...(options.headers || {}),\n 'Cache-Control': 'no-cache',\n },\n })\n }\n\n public remember(data: unknown, key = 'default'): void {\n history.remember(this.frame, data, key)\n }\n\n public restore(key = 'default'): unknown {\n return history.restore(this.frame, key)\n }\n\n public on<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n return eventHandler.onGlobalEvent(type, callback)\n }\n\n public cancel(): void {\n this.syncRequestStream.cancelInFlight()\n }\n\n public cancelAll(): void {\n this.asyncRequestStream.cancelInFlight()\n this.syncRequestStream.cancelInFlight()\n }\n\n public poll(interval: number, requestOptions: ReloadOptions = {}, options: PollOptions = {}) {\n return polls.add(interval, () => this.reload(requestOptions), {\n autoStart: options.autoStart ?? true,\n keepAlive: options.keepAlive ?? false,\n })\n }\n\n public visit(href: string | URL, options: VisitOptions = {}): void {\n if (!BROWSER) return;\n \n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n showProgress: options.showProgress ?? !options.async,\n })\n\n const events = this.getVisitEvents(options)\n\n // If either of these return false, we don't want to continue\n if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n const requestStream = visit.async ? this.asyncRequestStream : this.syncRequestStream\n\n requestStream.interruptInFlight()\n\n if (!currentPage.isCleared() && !visit.preserveUrl) {\n // Save scroll regions for the current page\n Scroll.save(currentPage.get())\n }\n\n const requestParams: PendingVisit & VisitCallbacks = {\n ...visit,\n ...events,\n }\n\n const prefetched = prefetchedRequests.get(requestParams)\n\n if (prefetched) {\n revealProgress(prefetched.inFlight)\n prefetchedRequests.use(prefetched, requestParams)\n } else {\n revealProgress(true)\n requestStream.send(Request.create(requestParams, currentPage.get()))\n }\n }\n\n public getCached(href: string | URL, options: VisitOptions = {}): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findCached(this.getPrefetchParams(href, options))\n }\n\n public flush(href: string | URL, options: VisitOptions = {}): void {\n prefetchedRequests.remove(this.getPrefetchParams(href, options))\n }\n\n public flushAll(): void {\n prefetchedRequests.removeAll()\n }\n\n public getPrefetching(href: string | URL, options: VisitOptions = {}): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options))\n }\n\n public prefetch(href: string | URL, options: VisitOptions = {}, { cacheFor }: PrefetchOptions) {\n if (options.method !== 'get') {\n throw new Error('Prefetch requests must use the GET method')\n }\n\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n async: true,\n showProgress: false,\n prefetch: true,\n })\n\n const events = this.getVisitEvents(options)\n\n // If either of these return false, we don't want to continue\n if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n hideProgress()\n\n this.asyncRequestStream.interruptInFlight()\n\n const requestParams: PendingVisit & VisitCallbacks = {\n ...visit,\n ...events,\n }\n\n prefetchedRequests.add(\n requestParams,\n (params) => {\n this.asyncRequestStream.send(Request.create(params, currentPage.get()))\n },\n { cacheFor },\n )\n }\n\n public clearHistory(): void {\n history.clear()\n }\n\n public decryptHistory(): Promise<Page> {\n return history.decrypt()\n }\n\n protected getPrefetchParams(href: string | URL, options: VisitOptions): ActiveVisit {\n return {\n ...this.getPendingVisit(href, {\n ...options,\n async: true,\n showProgress: false,\n prefetch: true,\n }),\n ...this.getVisitEvents(options),\n }\n }\n\n protected getPendingVisit(\n href: string | URL,\n options: VisitOptions,\n pendingVisitOptions: Partial<PendingVisitOptions> = {},\n ): PendingVisit {\n const mergedOptions: Visit = {\n method: 'get',\n data: {},\n replace: false,\n preserveScroll: false,\n preserveState: false,\n only: [],\n except: [],\n headers: {},\n errorBag: '',\n forceFormData: false,\n queryStringArrayFormat: 'brackets',\n async: false,\n showProgress: true,\n fresh: false,\n reset: [],\n preserveUrl: false,\n prefetch: false,\n frame: this.frame,\n ...options,\n }\n\n const [url, _data] = transformUrlAndData(\n href,\n mergedOptions.data,\n mergedOptions.method,\n mergedOptions.forceFormData,\n mergedOptions.queryStringArrayFormat,\n )\n\n return {\n cancelled: false,\n completed: false,\n interrupted: false,\n ...mergedOptions,\n ...pendingVisitOptions,\n url,\n data: _data,\n }\n }\n\n protected getVisitEvents(options: VisitOptions): VisitCallbacks {\n return {\n onCancelToken: options.onCancelToken || (() => {}),\n onBefore: options.onBefore || (() => {}),\n onStart: options.onStart || (() => {}),\n onProgress: options.onProgress || (() => {}),\n onFinish: options.onFinish || (() => {}),\n onCancel: options.onCancel || (() => {}),\n onSuccess: options.onSuccess || (() => {}),\n onError: options.onError || (() => {}),\n onPrefetched: options.onPrefetched || (() => {}),\n onPrefetching: options.onPrefetching || (() => {}),\n }\n }\n\n protected loadDeferredProps(): void {\n const deferred = currentPage.frame(this.frame)?.deferredProps\n\n if (deferred) {\n Object.entries(deferred).forEach(([_, group]) => {\n this.reload({ only: group })\n })\n }\n }\n}\n", "import deepmerge from 'deepmerge'\nimport debounce from './debounce'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { page as currentPage } from './page'\nimport { Scroll } from './scroll'\nimport { GlobalEvent, GlobalEventNames, GlobalEventResult, InternalEvent } from './types'\nimport { hrefToUrl } from './url'\n\nclass EventHandler {\n protected internalListeners: {\n event: InternalEvent\n listener: VoidFunction\n }[] = []\n\n public init() {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n }\n\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', debounce(Scroll.onScroll.bind(Scroll), 100), true)\n }\n }\n\n public onGlobalEvent<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n const listener = ((event: GlobalEvent<TEventName>) => {\n const response = callback(event)\n\n if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n return this.registerListener(`inertia:${type}`, listener)\n }\n\n public on(event: InternalEvent, callback: VoidFunction): VoidFunction {\n this.internalListeners.push({ event, listener: callback })\n\n return () => {\n this.internalListeners = this.internalListeners.filter((listener) => listener.listener !== callback)\n }\n }\n\n public onMissingHistoryItem() {\n // At this point, the user has probably cleared the state\n // Mark the current page as cleared so that we don't try to write anything to it.\n currentPage.clear()\n // Fire an event so that that any listeners can handle this situation\n this.fireInternalEvent('missingHistoryItem')\n }\n\n public fireInternalEvent(event: InternalEvent): void {\n this.internalListeners.filter((listener) => listener.event === event).forEach((listener) => listener.listener())\n }\n\n protected registerListener(type: string, listener: EventListener): VoidFunction {\n document.addEventListener(type, listener)\n\n return () => document.removeEventListener(type, listener)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n const state = event.state || null\n\n if (state === null) {\n const url = hrefToUrl(currentPage.frame(\"_top\").url)\n url.hash = window.location.hash\n \n history.replaceState(\n deepmerge(currentPage.get(), {\n frames: { _top: { url: url.href } }\n },\n { arrayMerge: (_, s) => s })\n );\n \n Scroll.reset(currentPage.get())\n return\n }\n\n if (history.isValidState(state)) {\n history\n .decrypt(state.page)\n .then((data) => {\n currentPage.setQuietly(data, { preserveState: false }).then(() => {\n Scroll.restore(currentPage.get())\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n this.onMissingHistoryItem()\n })\n\n return\n }\n\n this.onMissingHistoryItem()\n }\n}\n\nexport const eventHandler = new EventHandler()\n", "import { GlobalEventDetails, GlobalEventNames, GlobalEventTrigger } from './types'\n\nfunction fireEvent<TEventName extends GlobalEventNames>(\n name: TEventName,\n options: CustomEventInit<GlobalEventDetails<TEventName>>,\n): boolean {\n return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options))\n}\n\nexport const fireBeforeEvent: GlobalEventTrigger<'before'> = (visit) => {\n return fireEvent('before', { cancelable: true, detail: { visit } })\n}\n\nexport const fireErrorEvent: GlobalEventTrigger<'error'> = (errors) => {\n return fireEvent('error', { detail: { errors } })\n}\n\nexport const fireExceptionEvent: GlobalEventTrigger<'exception'> = (exception) => {\n return fireEvent('exception', { cancelable: true, detail: { exception } })\n}\n\nexport const fireFinishEvent: GlobalEventTrigger<'finish'> = (visit) => {\n return fireEvent('finish', { detail: { visit } })\n}\n\nexport const fireInvalidEvent: GlobalEventTrigger<'invalid'> = (response) => {\n return fireEvent('invalid', { cancelable: true, detail: { response } })\n}\n\nexport const fireNavigateEvent: GlobalEventTrigger<'navigate'> = (page) => {\n return fireEvent('navigate', { detail: { page } })\n}\n\nexport const fireProgressEvent: GlobalEventTrigger<'progress'> = (progress) => {\n return fireEvent('progress', { detail: { progress } })\n}\n\nexport const fireStartEvent: GlobalEventTrigger<'start'> = (visit) => {\n return fireEvent('start', { detail: { visit } })\n}\n\nexport const fireSuccessEvent: GlobalEventTrigger<'success'> = (page) => {\n return fireEvent('success', { detail: { page } })\n}\n\nexport const firePrefetchedEvent: GlobalEventTrigger<'prefetched'> = (response, visit) => {\n return fireEvent('prefetched', { detail: { fetchedAt: Date.now(), response: response.data, visit } })\n}\n\nexport const firePrefetchingEvent: GlobalEventTrigger<'prefetching'> = (visit) => {\n return fireEvent('prefetching', { detail: { visit } })\n}\n", "import deepmerge from 'deepmerge'\nimport { decryptHistory, encryptHistory, historySessionStorageKeys } from './encryption'\nimport { page as currentPage } from './page'\nimport { SessionStorage } from './sessionStorage'\nimport { Page } from './types'\n\nconst isServer = typeof window === 'undefined'\n\nexport class History {\n public rememberedState = 'rememberedState' as const\n public scrollRegions = 'scrollRegions' as const\n public preserveUrl = false\n public static encryptHistory = false\n \n protected current: Partial<Page> = {}\n protected queue: (() => Promise<void>)[] = []\n\n\n public remember(frame: string, data: unknown, key: string): void {\n const old = currentPage.get()\n const newState = deepmerge(old, {\n frames: {[frame]: {rememberedState: {[key]: data}}}\n }, {arrayMerge: (_,s) => s})\n \n this.replaceState(newState)\n }\n\n public restore(frame: string, key: string): unknown {\n if (!isServer) {\n const frameState = this.current?.frames?.[frame]\n return frameState?.rememberedState?.[key]\n }\n }\n\n public pushState(page: Page): void {\n if (isServer || this.preserveUrl) {\n return\n }\n\n this.current = page\n\n this.addToQueue(() => {\n return this.getPageData(page).then((data) => {\n\n window.history.pushState(\n {\n page: data,\n timestamp: Date.now(),\n },\n '',\n page.frames[\"_top\"].url,\n )\n })\n })\n }\n\n protected getPageData(page: Page): Promise<Page | ArrayBuffer> {\n return new Promise((resolve) => {\n return History.encryptHistory ? encryptHistory(page).then(resolve) : resolve(page)\n })\n }\n\n public processQueue(): Promise<void> {\n const next = this.queue.shift()\n\n if (next) {\n return next().then(() => this.processQueue())\n }\n\n return Promise.resolve()\n }\n\n public decrypt(page: Page | null = null): Promise<Page> {\n if (isServer) {\n return Promise.resolve(page ?? currentPage.get())\n }\n\n const pageData = page ?? window.history.state?.page\n\n return this.decryptPageData(pageData).then((data) => {\n if (!data) {\n throw new Error('Unable to decrypt history')\n }\n \n this.current = data ?? {}\n \n\n return data\n })\n }\n\n protected decryptPageData(pageData: ArrayBuffer | Page | null): Promise<Page | null> {\n return pageData instanceof ArrayBuffer ? decryptHistory(pageData) : Promise.resolve(pageData)\n }\n\n public replaceState(page: Page): void {\n currentPage.merge(page)\n\n if (isServer || this.preserveUrl) {\n return\n }\n\n this.current = page\n\n this.addToQueue(() => {\n return this.getPageData(page).then((data) => {\n window.history.replaceState(\n {\n page: data,\n timestamp: Date.now(),\n },\n '',\n page.frames[\"_top\"].url,\n )\n })\n })\n }\n\n protected addToQueue(fn: () => Promise<void>): void {\n this.queue.push(fn)\n this.processQueue()\n }\n\n public getState<T>(key: keyof Page, defaultValue?: T): any {\n return this.current?.[key] ?? defaultValue\n }\n\n public deleteRememberedState() {\n if (!this.current.frames) return\n Object.values((this.current as Page).frames).forEach((frame) => {\n delete frame.rememberedState\n })\n this.replaceState(this.current as Page)\n }\n\n public hasAnyState(): boolean {\n return !!this.getAllState()\n }\n\n public clear() {\n SessionStorage.remove(historySessionStorageKeys.key)\n SessionStorage.remove(historySessionStorageKeys.iv)\n }\n\n public isValidState(state: any): boolean {\n return !!state.page\n }\n\n public getAllState(): Page {\n return this.current as Page\n }\n}\n\nexport const history = new History()\n", "export class SessionStorage {\n public static locationVisitKey = 'inertiaLocationVisit'\n\n public static set(key: string, value: any): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.setItem(key, JSON.stringify(value))\n }\n }\n\n public static get(key: string): any {\n if (typeof window !== 'undefined') {\n return JSON.parse(window.sessionStorage.getItem(key) || 'null')\n }\n }\n\n public static merge(key: string, value: any): void {\n const existing = this.get(key)\n\n if (existing === null) {\n this.set(key, value)\n } else {\n this.set(key, { ...existing, ...value })\n }\n }\n\n public static remove(key: string): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.removeItem(key)\n }\n }\n\n public static removeNested(key: string, nestedKey: string): void {\n const existing = this.get(key)\n\n if (existing !== null) {\n delete existing[nestedKey]\n\n this.set(key, existing)\n }\n }\n\n public static exists(key: string): boolean {\n try {\n return this.get(key) !== null\n } catch (error) {\n return false\n }\n }\n\n public static clear(): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.clear()\n }\n }\n}\n", "import { SessionStorage } from './sessionStorage'\n\nexport const encryptHistory = async (data: any): Promise<ArrayBuffer> => {\n if (typeof window === 'undefined') {\n throw new Error('Unable to encrypt history')\n }\n\n const iv = getIv()\n const storedKey = await getKeyFromSessionStorage()\n const key = await getOrCreateKey(storedKey)\n\n if (!key) {\n throw new Error('Unable to encrypt history')\n }\n\n const encrypted = await encryptData(iv, key, data)\n\n return encrypted\n}\n\nexport const historySessionStorageKeys = {\n key: 'historyKey',\n iv: 'historyIv',\n}\n\nexport const decryptHistory = async (data: any): Promise<any> => {\n const iv = getIv()\n const storedKey = await getKeyFromSessionStorage()\n\n if (!storedKey) {\n throw new Error('Unable to decrypt history')\n }\n\n return await decryptData(iv, storedKey, data)\n}\n\nconst encryptData = async (iv: Uint8Array, key: CryptoKey, data: any) => {\n if (typeof window === 'undefined') {\n throw new Error('Unable to encrypt history')\n }\n\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(data)\n }\n const textEncoder = new TextEncoder()\n const str = JSON.stringify(data)\n \n const encoded = new Uint8Array(str.length * 3)\n \n const result = textEncoder.encodeInto(str, encoded)\n \n return window.crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n encoded.subarray(0, result.written),\n )\n}\n\nconst decryptData = async (iv: Uint8Array, key: CryptoKey, data: any) => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Decryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(data)\n }\n\n const decrypted = await window.crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n data,\n )\n \n let decoded = new TextDecoder().decode(decrypted)\n\n return JSON.parse(decoded)\n}\n\nconst getIv = () => {\n const ivString = SessionStorage.get(historySessionStorageKeys.iv)\n\n if (ivString) {\n return new Uint8Array(ivString)\n }\n\n const iv = window.crypto.getRandomValues(new Uint8Array(12))\n\n SessionStorage.set(historySessionStorageKeys.iv, Array.from(iv))\n\n return iv\n}\n\nconst createKey = async () => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(null)\n }\n\n return window.crypto.subtle.generateKey(\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n )\n}\n\nconst saveKey = async (key: CryptoKey) => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve()\n }\n\n const keyData = await window.crypto.subtle.exportKey('raw', key)\n\n SessionStorage.set(historySessionStorageKeys.key, Array.from(new Uint8Array(keyData)))\n}\n\nconst getOrCreateKey = async (key: CryptoKey | null) => {\n if (key) {\n return key\n }\n\n const newKey = await createKey()\n\n if (!newKey) {\n return null\n }\n\n await saveKey(newKey)\n\n return newKey\n}\n\nconst getKeyFromSessionStorage = async (): Promise<CryptoKey | null> => {\n const stringKey = SessionStorage.get(historySessionStorageKeys.key)\n\n if (!stringKey) {\n return null\n }\n\n const key = await window.crypto.subtle.importKey(\n 'raw',\n new Uint8Array(stringKey),\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n )\n\n return key\n}\n", "import { history } from './history'\nimport { page as currentPage } from './page'\nimport { Page } from './types'\n\nexport class Scroll {\n public static save(page: Page): void {\n history.replaceState({\n ...page,\n scrollRegions: Array.from(this.regions()).map((region) => ({\n top: region.scrollTop,\n left: region.scrollLeft,\n })),\n })\n }\n\n protected static regions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n public static reset(page: Page): void {\n if (typeof window !== 'undefined') {\n window.scrollTo(0, 0)\n }\n\n this.regions().forEach((region) => {\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(0, 0)\n } else {\n region.scrollTop = 0\n region.scrollLeft = 0\n }\n })\n\n this.save(page)\n\n if (window.location.hash) {\n // We're using a setTimeout() here as a workaround for a bug in the React adapter where the\n // rendering isn't completing fast enough, causing the anchor link to not be scrolled to.\n setTimeout(() => document.getElementById(window.location.hash.slice(1))?.scrollIntoView())\n }\n }\n\n public static restore(page: Page): void {\n if (!page.scrollRegions) {\n return\n }\n\n this.regions().forEach((region: Element, index: number) => {\n const scrollPosition = page.scrollRegions[index]\n\n if (!scrollPosition) {\n return\n }\n\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(scrollPosition.left, scrollPosition.top)\n } else {\n region.scrollTop = scrollPosition.top\n region.scrollLeft = scrollPosition.left\n }\n })\n }\n\n public static onScroll(event: Event): void {\n let target = event.target as Element\n if (typeof target.hasAttribute === 'function' && target.hasAttribute('scroll-region') || target as unknown == document) {\n this.save(currentPage.get())\n }\n }\n}\n", "import { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { Scroll } from './scroll'\nimport { Router } from './router'\nimport {\n Frame,\n Component,\n Page,\n PageEvent,\n FrameHandler,\n PreserveStateOption,\n RouterInitParams,\n VisitOptions,\n} from './types'\nimport { hrefToUrl, isSameUrlWithoutHash } from './url'\nimport deepmerge from 'deepmerge'\n\nclass CurrentPage {\n protected page: Page = {\n frames: {},\n version: null,\n scrollRegions: []\n }\n \n protected swappers: {\n [frame: string]: FrameHandler,\n } = {}\n protected componentId = {}\n protected listeners: {\n event: PageEvent\n callback: VoidFunction\n }[] = []\n protected isFirstPageLoad = true\n protected cleared = false\n\n public init({ frame, initialState, swapComponent }: RouterInitParams) { \n this.page.version ||= initialState?.version\n if (initialState?.component) {\n this.merge({\n frames: {\n [frame]: initialState\n }\n })\n }\n this.swappers[frame] = swapComponent\n \n return this\n }\n\n public async set(\n page: Page,\n {\n replace = false,\n preserveScroll = false,\n preserveState = false,\n frame\n }: Partial<VisitOptions> = {},\n ): Promise<void> {\n this.componentId = {}\n\n const componentId = this.componentId\n\n\n return this.resolve(page.frames).then((components) => {\n if (componentId !== this.componentId) {\n // Component has changed since we started resolving this component, bail\n return\n }\n\n page.scrollRegions ??= []\n //page.rememberedState ??= {}\n // If we changed the _top frame, update the URL\n if (page.frames['_top']?.url === undefined) {\n const location = typeof window !== 'undefined' ? window.location : new URL(page.frames['_top'].url)\n replace = replace || isSameUrlWithoutHash(hrefToUrl(page.frames['_top']?.url), location)\n }\n\n replace ? history.replaceState(page) : history.pushState(page)\n\n // const isNewComponent = !this.isTheSame(page)\n\n this.page = page\n this.cleared = false\n\n // if (isNewComponent) {\n // this.fireEventsFor('newComponent')\n // }\n\n if (this.isFirstPageLoad) {\n this.fireEventsFor('firstLoad')\n }\n\n this.isFirstPageLoad = false\n\n return this.swap({ components, page, preserveState, frame }).then(() => {\n // TODO: save scroll positions within frames.\n if (!preserveScroll && frame == '_top') {\n Scroll.reset(page)\n }\n \n eventHandler.fireInternalEvent('loadDeferredProps')\n\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n \n })\n }\n\n public async setQuietly(\n page: Page,\n {\n preserveState = false,\n }: {\n preserveState?: PreserveStateOption\n } = {},\n ) {\n return this.resolve(page.frames).then((components) => {\n this.page = page\n this.cleared = false\n return this.swap({ components, page, preserveState })\n })\n }\n\n public async setFrame(\n name: string,\n frame: Frame,\n options: Partial<VisitOptions> = {}\n ): Promise<void> {\n return this.set(deepmerge(this.page, {\n frames: {\n [name]: frame,\n }\n }, { arrayMerge: (_, s) => s }) as Page,\n { frame: name, ...options })\n }\n \n \n public clear(): void {\n this.cleared = true\n }\n\n public isCleared(): boolean {\n return this.cleared\n }\n \n public frame(name: string): Frame {\n return this.page.frames[name] || {}\n }\n \n public get(): Page {\n return this.page\n }\n\n public merge(data: Partial<Page>): void {\n this.page = deepmerge(this.page, data, {arrayMerge: (_, source) => source})\n }\n\n public setUrlHash(hash: string): void {\n this.page.frames[\"_top\"].url += hash\n }\n\n public remember(frame: string, data: Frame['rememberedState']): void {\n this.page.frames[frame].rememberedState = data\n }\n\n public scrollRegions(regions: Page['scrollRegions']): void {\n this.page.scrollRegions = regions\n }\n\n public swap({\n components,\n page,\n preserveState,\n frame\n }: {\n components: { [name: string]: Component }\n page: Page,\n preserveState: PreserveStateOption,\n frame?: string\n }): Promise<unknown> {\n\n return Promise.all(Object.entries(components).map(([name, component]) => {\n if (frame && frame !== name) return Promise.resolve()\n \n // a swapper can be undefined if we refresh the page, and have history in frames\n // that we havent initialized in the new page\n if (!this.swappers[name]) return;\n \n return this.swappers[name]({ component, frame: page.frames[name], preserveState })\n }))\n }\n\n public async resolve(frames: { [name: string]: Frame }): Promise<{ [name: string]: Component }> {\n const result: { [name: string]: Component } = {}\n await Promise.all(Object.keys(frames).map(async (name) => {\n const frame = frames[name]\n result[name] = await Router.resolveComponent(frame.component)\n }))\n return result\n }\n\n public isTheSame(name: string, frame: Frame): boolean {\n return this.page.frames[name].component === frame.component\n }\n\n public on(event: PageEvent, callback: VoidFunction): VoidFunction {\n this.listeners.push({ event, callback })\n\n return () => {\n this.listeners = this.listeners.filter((listener) => listener.event !== event && listener.callback !== callback)\n }\n }\n\n public fireEventsFor(event: PageEvent): void {\n this.listeners.filter((listener) => listener.event === event).forEach((listener) => listener.callback())\n }\n}\n\nexport const page = new CurrentPage()\n", "class NavigationType {\n protected type: NavigationTimingType\n\n public constructor() {\n if (typeof window !== 'undefined' && window?.performance.getEntriesByType('navigation').length > 0) {\n this.type = (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n } else {\n this.type = 'navigate'\n }\n }\n\n public get(): NavigationTimingType {\n return this.type\n }\n\n public isBackForward(): boolean {\n return this.type === 'back_forward'\n }\n\n public isReload(): boolean {\n return this.type === 'reload'\n }\n}\n\nexport const navigationType = new NavigationType()\n", "import { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { navigationType } from './navigationType'\nimport { page as currentPage } from './page'\nimport { Scroll } from './scroll'\nimport { SessionStorage } from './sessionStorage'\nimport { LocationVisit, Page, Frame } from './types'\n\nexport class InitialVisit {\n public static handle(): void {\n \n this.clearRememberedStateOnReload()\n \n const scenarios = [this.handleBackForward, this.handleLocation, this.handleDefault]\n\n scenarios.find((handler) => handler.bind(this)())\n }\n\n protected static clearRememberedStateOnReload(): void {\n if (navigationType.isReload()) {\n history.deleteRememberedState()\n }\n }\n\n protected static handleBackForward(): boolean {\n if (!navigationType.isBackForward() || !history.hasAnyState()) {\n return false\n }\n \n if (!window.history.state?.page) {\n // We have no power here\n return false\n }\n\n history\n .decrypt()\n .then((data) => {\n currentPage.set(data, { preserveScroll: true, preserveState: true, replace: true }).then(() => {\n Scroll.restore(currentPage.get())\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n eventHandler.onMissingHistoryItem()\n })\n\n return true\n }\n\n /**\n * @link https://inertiajs.com/redirects#external-redirects\n */\n protected static handleLocation(): boolean {\n if (!SessionStorage.exists(SessionStorage.locationVisitKey)) {\n return false\n }\n\n const locationVisit: LocationVisit = SessionStorage.get(SessionStorage.locationVisitKey) || {}\n\n SessionStorage.remove(SessionStorage.locationVisitKey)\n\n if (typeof window !== 'undefined') {\n currentPage.setUrlHash(window.location.hash)\n }\n\n history\n .decrypt()\n .then(() => {\n const rememberedFrames: Record<string, Frame> = history.getState<Page['frames']>(\"frames\", {})\n const scrollRegions = history.getState<Page['scrollRegions']>(history.scrollRegions, [])\n Object.entries(rememberedFrames).forEach(([name, frame]) => {\n currentPage.remember(name, frame.rememberedState)\n })\n currentPage.scrollRegions(scrollRegions)\n\n currentPage\n .set(currentPage.get(), {\n preserveScroll: locationVisit.preserveScroll,\n preserveState: true,\n })\n .then(() => {\n if (locationVisit.preserveScroll) {\n Scroll.restore(currentPage.get())\n }\n\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n eventHandler.onMissingHistoryItem()\n })\n\n return true\n }\n\n protected static handleDefault(): void {\n if (typeof window !== 'undefined') {\n currentPage.setUrlHash(window.location.hash)\n }\n\n currentPage.set(currentPage.get(), { preserveState: true, replace: true }).then(() => {\n fireNavigateEvent(currentPage.get())\n })\n }\n}\n", "import { PollOptions } from './types'\n\nexport class Poll {\n protected id: number | null = null\n protected throttle = false\n protected keepAlive = false\n protected cb: VoidFunction\n protected interval: number\n protected cbCount = 0\n\n constructor(interval: number, cb: VoidFunction, options: PollOptions) {\n this.keepAlive = options.keepAlive ?? false\n\n this.cb = cb\n this.interval = interval\n\n if (options.autoStart ?? true) {\n this.start()\n }\n }\n\n public stop() {\n // console.log('stopping...', this.id)\n if (this.id) {\n // console.log('clearing interval...')\n clearInterval(this.id)\n }\n }\n\n public start() {\n if (typeof window === 'undefined') {\n return\n }\n\n this.stop()\n\n this.id = window.setInterval(() => {\n if (!this.throttle || this.cbCount % 10 === 0) {\n this.cb()\n }\n\n if (this.throttle) {\n this.cbCount++\n }\n }, this.interval)\n }\n\n public isInBackground(hidden: boolean) {\n this.throttle = this.keepAlive ? false : hidden\n\n if (this.throttle) {\n this.cbCount = 0\n }\n }\n}\n", "import { Poll } from './poll'\nimport { PollOptions } from './types'\n\nclass Polls {\n protected polls: Poll[] = []\n\n constructor() {\n this.setupVisibilityListener()\n }\n\n public add(\n interval: number,\n cb: VoidFunction,\n options: PollOptions,\n ): {\n stop: VoidFunction\n start: VoidFunction\n } {\n const poll = new Poll(interval, cb, options)\n\n this.polls.push(poll)\n\n return {\n stop: () => poll.stop(),\n start: () => poll.start(),\n }\n }\n\n public clear() {\n this.polls.forEach((poll) => poll.stop())\n\n this.polls = []\n }\n\n protected setupVisibilityListener() {\n if (typeof document === 'undefined') {\n return\n }\n\n document.addEventListener(\n 'visibilitychange',\n () => {\n this.polls.forEach((poll) => poll.isInBackground(document.hidden))\n },\n false,\n )\n }\n}\n\nexport const polls = new Polls()\n", "export const objectsAreEqual = <T>(\n obj1: T,\n obj2: T,\n excludeKeys: {\n [K in keyof T]: K\n }[keyof T][],\n): boolean => {\n if (obj1 === obj2) {\n return true\n }\n\n for (const key in obj1) {\n if (excludeKeys.includes(key)) {\n continue\n }\n\n if (obj1[key] === obj2[key]) {\n continue\n }\n\n if (!compareValues(obj1[key], obj2[key])) {\n return false\n }\n }\n\n return true\n}\n\nconst compareValues = (value1: any, value2: any): boolean => {\n switch (typeof value1) {\n case 'object':\n return objectsAreEqual(value1, value2, [])\n case 'function':\n return value1.toString() === value2.toString()\n default:\n return value1 === value2\n }\n}\n", "const conversionMap = {\n ms: 1,\n s: 1000,\n m: 1000 * 60,\n h: 1000 * 60 * 60,\n d: 1000 * 60 * 60 * 24,\n}\n\nexport const timeToMs = (time: string | number): number => {\n if (typeof time === 'number') {\n return time\n }\n\n for (const [unit, conversion] of Object.entries(conversionMap)) {\n if (time.endsWith(unit)) {\n return parseFloat(time) * conversion\n }\n }\n\n return parseInt(time)\n}\n", "import { objectsAreEqual } from './objectUtils'\nimport { Response } from './response'\nimport { timeToMs } from './time'\nimport {\n ActiveVisit,\n CacheForOption,\n InFlightPrefetch,\n InternalActiveVisit,\n PrefetchedResponse,\n PrefetchOptions,\n PrefetchRemovalTimer,\n} from './types'\n\nclass PrefetchedRequests {\n protected cached: PrefetchedResponse[] = []\n protected inFlightRequests: InFlightPrefetch[] = []\n protected removalTimers: PrefetchRemovalTimer[] = []\n protected currentUseId: string | null = null\n\n public add(params: ActiveVisit, sendFunc: (params: InternalActiveVisit) => void, { cacheFor }: PrefetchOptions) {\n const inFlight = this.findInFlight(params)\n\n if (inFlight) {\n return Promise.resolve()\n }\n\n const existing = this.findCached(params)\n\n if (!params.fresh && existing && existing.staleTimestamp > Date.now()) {\n return Promise.resolve()\n }\n\n const [stale, expires] = this.extractStaleValues(cacheFor)\n\n const promise = new Promise<Response>((resolve, reject) => {\n sendFunc({\n ...params,\n onCancel: () => {\n this.remove(params)\n params.onCancel()\n reject()\n },\n onError: (error) => {\n this.remove(params)\n params.onError(error)\n reject()\n },\n onPrefetching(visitParams) {\n params.onPrefetching(visitParams)\n },\n onPrefetched(response, visit) {\n params.onPrefetched(response, visit)\n },\n onPrefetchResponse(response) {\n resolve(response)\n },\n })\n }).then((response) => {\n this.remove(params)\n\n this.cached.push({\n params: { ...params },\n staleTimestamp: Date.now() + stale,\n response: promise,\n singleUse: cacheFor === 0,\n timestamp: Date.now(),\n inFlight: false,\n })\n\n this.scheduleForRemoval(params, expires)\n\n this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {\n return !this.paramsAreEqual(prefetching.params, params)\n })\n\n response.handlePrefetch()\n\n return response\n })\n\n this.inFlightRequests.push({\n params: { ...params },\n response: promise,\n staleTimestamp: null,\n inFlight: true,\n })\n\n return promise\n }\n\n public removeAll(): void {\n this.cached = []\n this.removalTimers.forEach((removalTimer) => {\n clearTimeout(removalTimer.timer)\n })\n this.removalTimers = []\n }\n\n public remove(params: ActiveVisit): void {\n this.cached = this.cached.filter((prefetched) => {\n return !this.paramsAreEqual(prefetched.params, params)\n })\n\n this.clearTimer(params)\n }\n\n protected extractStaleValues(cacheFor: PrefetchOptions['cacheFor']): [number, number] {\n const [stale, expires] = this.cacheForToStaleAndExpires(cacheFor)\n\n return [timeToMs(stale), timeToMs(expires)]\n }\n\n protected cacheForToStaleAndExpires(cacheFor: PrefetchOptions['cacheFor']): [CacheForOption, CacheForOption] {\n if (!Array.isArray(cacheFor)) {\n return [cacheFor, cacheFor]\n }\n\n switch (cacheFor.length) {\n case 0:\n return [0, 0]\n case 1:\n return [cacheFor[0], cacheFor[0]]\n default:\n return [cacheFor[0], cacheFor[1]]\n }\n }\n\n protected clearTimer(params: ActiveVisit) {\n const timer = this.removalTimers.find((removalTimer) => {\n return this.paramsAreEqual(removalTimer.params, params)\n })\n\n if (timer) {\n clearTimeout(timer.timer)\n this.removalTimers = this.removalTimers.filter((removalTimer) => removalTimer !== timer)\n }\n }\n\n protected scheduleForRemoval(params: ActiveVisit, expiresIn: number) {\n if (typeof window === 'undefined') {\n return\n }\n\n this.clearTimer(params)\n\n if (expiresIn > 0) {\n const timer = window.setTimeout(() => this.remove(params), expiresIn)\n\n this.removalTimers.push({\n params,\n timer,\n })\n }\n }\n\n public get(params: ActiveVisit): InFlightPrefetch | PrefetchedResponse | null {\n return this.findCached(params) || this.findInFlight(params)\n }\n\n public use(prefetched: PrefetchedResponse | InFlightPrefetch, params: ActiveVisit) {\n const id = `${params.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`\n\n this.currentUseId = id\n\n return prefetched.response.then((response) => {\n if (this.currentUseId !== id) {\n // They've since gone on to `use` a different request,\n // so we should ignore this one\n return\n }\n\n response.mergeParams({ ...params, onPrefetched: () => {} })\n\n // If this was a one-time cache, remove it\n // (generally a prefetch=\"click\" request with no specified cache value)\n this.removeSingleUseItems(params)\n\n return response.handle()\n })\n }\n\n protected removeSingleUseItems(params: ActiveVisit) {\n this.cached = this.cached.filter((prefetched) => {\n if (!this.paramsAreEqual(prefetched.params, params)) {\n return true\n }\n\n return !prefetched.singleUse\n })\n }\n\n public findCached(params: ActiveVisit): PrefetchedResponse | null {\n return (\n this.cached.find((prefetched) => {\n return this.paramsAreEqual(prefetched.params, params)\n }) || null\n )\n }\n\n public findInFlight(params: ActiveVisit): InFlightPrefetch | null {\n return (\n this.inFlightRequests.find((prefetched) => {\n return this.paramsAreEqual(prefetched.params, params)\n }) || null\n )\n }\n\n protected paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean {\n return objectsAreEqual<ActiveVisit>(params1, params2, [\n 'showProgress',\n 'replace',\n 'prefetch',\n 'onBefore',\n 'onStart',\n 'onProgress',\n 'onFinish',\n 'onCancel',\n 'onSuccess',\n 'onError',\n 'onPrefetched',\n 'onCancelToken',\n 'onPrefetching',\n 'async',\n ])\n }\n}\n\nexport const prefetchedRequests = new PrefetchedRequests()\n", "import { default as axios, AxiosProgressEvent, AxiosRequestConfig } from 'axios'\nimport { fireExceptionEvent, fireFinishEvent, firePrefetchingEvent, fireProgressEvent, fireStartEvent } from './events'\nimport { page as currentPage } from './page'\nimport { RequestParams } from './requestParams'\nimport { Response } from './response'\nimport { ActiveVisit, Page } from './types'\nimport { urlWithoutHash, hrefToUrl } from './url'\n\nexport class Request {\n protected response!: Response\n protected cancelToken!: AbortController\n protected requestParams: RequestParams\n protected requestHasFinished = false\n\n constructor(\n params: ActiveVisit,\n protected page: Page,\n ) {\n this.requestParams = RequestParams.create(params)\n this.cancelToken = new AbortController()\n }\n\n public static create(params: ActiveVisit, page: Page): Request {\n return new Request(params, page)\n }\n\n public async send() {\n this.requestParams.onCancelToken(() => this.cancel({ cancelled: true }))\n\n fireStartEvent(this.requestParams.all())\n this.requestParams.onStart()\n\n if (this.requestParams.all().prefetch) {\n this.requestParams.onPrefetching()\n firePrefetchingEvent(this.requestParams.all())\n }\n\n // We capture this up here because the response\n // will clear the prefetch flag so it can use it\n // as a regular response once the prefetch is done\n const originallyPrefetch = this.requestParams.all().prefetch\n return axios({\n method: this.requestParams.all().method,\n url: urlWithoutHash(this.requestParams.all().url).href,\n data: this.requestParams.data(),\n params: this.requestParams.queryParams(),\n signal: this.cancelToken.signal,\n headers: this.getHeaders(),\n onUploadProgress: this.onProgress.bind(this),\n // Why text? This allows us to delay JSON.parse until we're ready to use the response,\n // helps with performance particularly on large responses + history encryption\n responseType: 'text',\n })\n .then((response) => {\n this.response = Response.create(this.requestParams, response, this.page)\n\n return this.response.handle()\n })\n .catch((error) => {\n if (error?.response) {\n this.response = Response.create(this.requestParams, error.response, this.page)\n\n return this.response.handle()\n }\n\n return Promise.reject(error)\n })\n .catch((error) => {\n if (axios.isCancel(error)) {\n return\n }\n\n if (fireExceptionEvent(error)) {\n return Promise.reject(error)\n }\n })\n .finally(() => {\n this.finish()\n\n if (originallyPrefetch && this.response) {\n this.requestParams.onPrefetchResponse(this.response)\n }\n })\n }\n\n protected finish(): void {\n if (this.requestParams.wasCancelledAtAll()) {\n return\n }\n\n this.requestParams.markAsFinished()\n this.fireFinishEvents()\n }\n\n protected fireFinishEvents(): void {\n if (this.requestHasFinished) {\n // This could be called from multiple places, don't let it re-fire\n return\n }\n\n this.requestHasFinished = true\n\n fireFinishEvent(this.requestParams.all())\n this.requestParams.onFinish()\n }\n\n public cancel({ cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean }): void {\n if (this.requestHasFinished) {\n // If the request has already finished, there's no need to cancel it\n return\n }\n\n this.cancelToken.abort()\n\n this.requestParams.markAsCancelled({ cancelled, interrupted })\n\n this.fireFinishEvents()\n }\n\n protected onProgress(progress: AxiosProgressEvent): void {\n if (this.requestParams.data() instanceof FormData) {\n progress.percentage = progress.progress ? Math.round(progress.progress * 100) : 0\n fireProgressEvent(progress)\n this.requestParams.all().onProgress(progress)\n }\n }\n\n protected getHeaders(): AxiosRequestConfig['headers'] {\n const headers: AxiosRequestConfig['headers'] = {\n ...this.requestParams.headers(),\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n }\n \n const frame = this.requestParams.all().frame\n const referer = currentPage.frame(frame).url\n if (referer) {\n headers['X-Inertia-Referer'] = urlWithoutHash(hrefToUrl(referer)).href\n }\n\n if (currentPage.get().version) {\n headers['X-Inertia-Version'] = currentPage.get().version\n }\n\n return headers\n }\n}\n", "import { AxiosRequestConfig } from 'axios'\nimport { page as currentPage } from './page'\nimport { Response } from './response'\nimport { ActiveVisit, InternalActiveVisit, Page, PreserveStateOption, VisitCallbacks } from './types'\n\nexport class RequestParams {\n protected callbacks: {\n name: keyof VisitCallbacks\n args: any[]\n }[] = []\n\n protected params: InternalActiveVisit\n\n constructor(params: InternalActiveVisit) {\n if (!params.prefetch) {\n this.params = params\n } else {\n const wrappedCallbacks: Record<keyof VisitCallbacks, () => any> = {\n onBefore: this.wrapCallback(params, 'onBefore'),\n onStart: this.wrapCallback(params, 'onStart'),\n onProgress: this.wrapCallback(params, 'onProgress'),\n onFinish: this.wrapCallback(params, 'onFinish'),\n onCancel: this.wrapCallback(params, 'onCancel'),\n onSuccess: this.wrapCallback(params, 'onSuccess'),\n onError: this.wrapCallback(params, 'onError'),\n onCancelToken: this.wrapCallback(params, 'onCancelToken'),\n onPrefetched: this.wrapCallback(params, 'onPrefetched'),\n onPrefetching: this.wrapCallback(params, 'onPrefetching'),\n }\n\n this.params = {\n ...params,\n ...wrappedCallbacks,\n onPrefetchResponse: params.onPrefetchResponse || (() => {}),\n }\n }\n //\n }\n\n public static create(params: ActiveVisit): RequestParams {\n return new RequestParams(params)\n }\n\n public data() {\n return this.params.method === 'get' ? {} : this.params.data\n }\n\n public queryParams() {\n return this.params.method === 'get' ? this.params.data : {}\n }\n\n public isPartial() {\n return this.params.only.length > 0 || this.params.except.length > 0 || this.params.reset.length > 0\n }\n\n public onCancelToken(cb: VoidFunction) {\n this.params.onCancelToken({\n cancel: cb,\n })\n }\n\n public markAsFinished() {\n this.params.completed = true\n this.params.cancelled = false\n this.params.interrupted = false\n }\n\n public markAsCancelled({ cancelled = true, interrupted = false }) {\n this.params.onCancel()\n\n this.params.completed = false\n this.params.cancelled = cancelled\n this.params.interrupted = interrupted\n }\n\n public wasCancelledAtAll() {\n return this.params.cancelled || this.params.interrupted\n }\n\n public onFinish() {\n this.params.onFinish(this.params)\n }\n\n public onStart() {\n this.params.onStart(this.params)\n }\n\n public onPrefetching() {\n this.params.onPrefetching(this.params)\n }\n\n public onPrefetchResponse(response: Response) {\n if (this.params.onPrefetchResponse) {\n this.params.onPrefetchResponse(response)\n }\n }\n\n public all() {\n return this.params\n }\n\n public headers(): AxiosRequestConfig['headers'] {\n const headers: AxiosRequestConfig['headers'] = {\n ...this.params.headers,\n }\n\n if (this.isPartial()) {\n headers['X-Inertia-Partial-Component'] = currentPage.frame(this.params.frame).component\n }\n\n const only = this.params.only.concat(this.params.reset)\n\n if (only.length > 0) {\n headers['X-Inertia-Partial-Data'] = only.join(',')\n }\n\n if (this.params.except.length > 0) {\n headers['X-Inertia-Partial-Except'] = this.params.except.join(',')\n }\n\n if (this.params.reset.length > 0) {\n headers['X-Inertia-Reset'] = this.params.reset.join(',')\n }\n\n if (this.params.errorBag && this.params.errorBag.length > 0) {\n headers['X-Inertia-Error-Bag'] = this.params.errorBag\n }\n\n return headers\n }\n\n public setPreserveOptions(page: Page) {\n this.params.preserveScroll = this.resolvePreserveOption(this.params.preserveScroll, page)\n this.params.preserveState = this.resolvePreserveOption(this.params.preserveState, page)\n }\n\n public runCallbacks() {\n this.callbacks.forEach(({ name, args }) => {\n // @ts-ignore\n this.params[name](...args)\n })\n }\n\n public merge(toMerge: Partial<ActiveVisit>) {\n this.params = {\n ...this.params,\n ...toMerge,\n }\n }\n\n protected wrapCallback(params: ActiveVisit, name: keyof VisitCallbacks) {\n // @ts-ignore\n return (...args) => {\n this.recordCallback(name, args)\n // @ts-ignore\n params[name](...args)\n }\n }\n\n protected recordCallback(name: keyof VisitCallbacks, args: any[]) {\n this.callbacks.push({ name, args })\n }\n\n protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean {\n if (typeof value === 'function') {\n return value(page)\n }\n\n if (value === 'errors') {\n return Object.keys(page.frames[this.params.frame].props.errors || {}).length > 0\n }\n\n return value\n }\n}\n", "export default {\n modal: null,\n listener: null,\n\n show(html: Record<string, unknown> | string): void {\n if (typeof html === 'object') {\n html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(\n html,\n )}`\n }\n\n const page = document.createElement('html')\n page.innerHTML = html\n page.querySelectorAll('a').forEach((a) => a.setAttribute('target', '_top'))\n\n this.modal = document.createElement('div')\n this.modal.style.position = 'fixed'\n this.modal.style.width = '100vw'\n this.modal.style.height = '100vh'\n this.modal.style.padding = '50px'\n this.modal.style.boxSizing = 'border-box'\n this.modal.style.backgroundColor = 'rgba(0, 0, 0, .6)'\n this.modal.style.zIndex = 200000\n this.modal.addEventListener('click', () => this.hide())\n\n const iframe = document.createElement('iframe')\n iframe.style.backgroundColor = 'white'\n iframe.style.borderRadius = '5px'\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n this.modal.appendChild(iframe)\n\n document.body.prepend(this.modal)\n document.body.style.overflow = 'hidden'\n if (!iframe.contentWindow) {\n throw new Error('iframe not yet ready.')\n }\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n\n this.listener = this.hideOnEscape.bind(this)\n document.addEventListener('keydown', this.listener)\n },\n\n hide(): void {\n this.modal.outerHTML = ''\n this.modal = null\n document.body.style.overflow = 'visible'\n document.removeEventListener('keydown', this.listener)\n },\n\n hideOnEscape(event: KeyboardEvent): void {\n if (event.keyCode === 27) {\n this.hide()\n }\n },\n}\n", "import { AxiosResponse } from 'axios'\nimport { fireErrorEvent, fireInvalidEvent, firePrefetchedEvent, fireSuccessEvent } from './events'\nimport { history, History } from './history'\nimport modal from './modal'\nimport { page as currentPage } from './page'\nimport { RequestParams } from './requestParams'\nimport { SessionStorage } from './sessionStorage'\nimport { ActiveVisit, ErrorBag, Errors, Page, Frame } from './types'\nimport { hrefToUrl, isSameUrlWithoutHash, setHashIfSameUrl } from './url'\n\nclass ResponseQueue {\n protected queue: Response[] = []\n protected processing = false\n\n public add(response: Response) {\n this.queue.push(response)\n }\n\n public async process(): Promise<void> {\n if (this.processing) {\n return Promise.resolve()\n }\n\n this.processing = true\n await this.processQueue()\n this.processing = false\n\n return Promise.resolve()\n }\n\n protected async processQueue(): Promise<void> {\n const nextResponse = this.queue.shift()\n\n if (nextResponse) {\n await nextResponse.process()\n return this.processQueue()\n }\n\n return Promise.resolve()\n }\n}\n\nconst queue = new ResponseQueue()\n\nexport class Response {\n constructor(\n protected requestParams: RequestParams,\n protected response: AxiosResponse,\n protected originatingPage: Page,\n ) {}\n\n public static create(params: RequestParams, response: AxiosResponse, originatingPage: Page): Response {\n return new Response(params, response, originatingPage)\n }\n\n public async handlePrefetch() {\n if (isSameUrlWithoutHash(this.requestParams.all().url, window.location)) {\n this.handle()\n }\n }\n\n public async handle() {\n queue.add(this)\n return queue.process()\n }\n\n public async process() {\n if (this.requestParams.all().prefetch) {\n this.requestParams.all().prefetch = false\n\n this.requestParams.all().onPrefetched(this.response, this.requestParams.all())\n firePrefetchedEvent(this.response, this.requestParams.all())\n\n return Promise.resolve()\n }\n\n this.requestParams.runCallbacks()\n\n if (!this.isInertiaResponse()) {\n return this.handleNonInertiaResponse()\n }\n\n await history.processQueue()\n\n history.preserveUrl = this.requestParams.all().preserveUrl\n\n await this.setFrame()\n const frame = this.requestParams.all().frame\n \n const errors = currentPage.frame(frame).props.errors || {}\n\n if (Object.keys(errors).length > 0) {\n const scopedErrors = this.getScopedErrors(errors)\n\n fireErrorEvent(scopedErrors)\n\n return this.requestParams.all().onError(scopedErrors)\n }\n\n fireSuccessEvent(currentPage.get())\n\n await this.requestParams.all().onSuccess(currentPage.get())\n\n history.preserveUrl = false\n }\n\n public mergeParams(params: ActiveVisit) {\n this.requestParams.merge(params)\n }\n\n protected async handleNonInertiaResponse() {\n if (this.isLocationVisit()) {\n const locationUrl = hrefToUrl(this.getHeader('x-inertia-location'))\n\n setHashIfSameUrl(this.requestParams.all().url, locationUrl)\n\n return this.locationVisit(locationUrl)\n }\n\n const response = {\n ...this.response,\n data: this.getDataFromResponse(this.response.data),\n }\n\n if (fireInvalidEvent(response)) {\n return modal.show(response.data)\n }\n }\n\n protected isInertiaResponse(): boolean {\n return this.hasHeader('x-inertia')\n }\n\n protected hasStatus(status: number): boolean {\n return this.response.status === status\n }\n\n protected getHeader(header: string): string {\n return this.response.headers[header]\n }\n\n protected hasHeader(header: string): boolean {\n return this.getHeader(header) !== undefined\n }\n\n protected isLocationVisit(): boolean {\n return this.hasStatus(409) && this.hasHeader('x-inertia-location')\n }\n\n /**\n * @link https://inertiajs.com/redirects#external-redirects\n */\n protected locationVisit(url: URL): boolean | void {\n try {\n SessionStorage.set(SessionStorage.locationVisitKey, {\n preserveScroll: this.requestParams.all().preserveScroll === true,\n })\n\n if (typeof window === 'undefined') {\n return\n }\n\n if (isSameUrlWithoutHash(window.location, url)) {\n window.location.reload()\n } else {\n window.location.href = url.href\n }\n } catch (error) {\n return false\n }\n }\n\n protected async setFrame(): Promise<void> {\n const pageResponse = this.getDataFromResponse(this.response.data)\n\n if (!this.shouldSetFrame(pageResponse)) {\n return Promise.resolve()\n }\n\n this.mergeProps(pageResponse)\n await this.setRememberedState(pageResponse)\n\n this.requestParams.setPreserveOptions(pageResponse)\n\n pageResponse.url = history.preserveUrl ? currentPage.frame(\"_top\").url : this.pageUrl(pageResponse)\n delete pageResponse.version\n \n History.encryptHistory = pageResponse.encryptHistory\n if (pageResponse.clearHistory) {\n history.clear()\n }\n \n return currentPage.setFrame(\n this.requestParams.all().frame, \n pageResponse, {\n replace: this.requestParams.all().replace,\n preserveScroll: this.requestParams.all().preserveScroll,\n preserveState: this.requestParams.all().preserveState,\n })\n }\n\n protected getDataFromResponse(response: any): any {\n if (typeof response !== 'string') {\n return response\n }\n\n try {\n return JSON.parse(response)\n } catch (error) {\n return response\n }\n }\n\n protected shouldSetFrame(pageResponse: Frame): boolean {\n const frame = this.requestParams.all().frame\n if (!this.requestParams.all().async) {\n // If the request is sync, we should always set the page\n return true\n }\n\n if (this.originatingPage.frames[frame].component !== pageResponse.component) {\n // We originated from a component but the response re-directed us,\n // we should respect the redirection and set the page\n return true\n }\n\n // At this point, if the originating request component is different than the current component,\n // the user has since navigated and we should discard the response\n if (this.originatingPage.frames[frame].component !== currentPage.frame(frame).component) {\n return false\n }\n\n const originatingUrl = hrefToUrl(this.originatingPage.frames['_top'].url)\n const currentPageUrl = hrefToUrl(currentPage.frame(\"_top\").url)\n\n // We have the same component, let's double-check the URL\n // If we're no longer on the same path name (e.g. /users/1 -> /users/2), we should not set the page\n return originatingUrl.origin === currentPageUrl.origin && originatingUrl.pathname === currentPageUrl.pathname\n }\n\n protected pageUrl(pageResponse: Frame) {\n const responseUrl = hrefToUrl(pageResponse.url)\n\n setHashIfSameUrl(this.requestParams.all().url, responseUrl)\n\n return responseUrl.href.split(responseUrl.host).pop()\n }\n\n protected mergeProps(pageResponse: Frame): void {\n const frame = this.requestParams.all().frame\n if (this.requestParams.isPartial() && pageResponse.component === currentPage.frame(frame).component) {\n const propsToMerge = pageResponse.mergeProps || []\n\n propsToMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n\n if (Array.isArray(incomingProp)) {\n pageResponse.props[prop] = [...((currentPage.frame(frame).props[prop] || []) as any[]), ...incomingProp]\n } else if (typeof incomingProp === 'object') {\n pageResponse.props[prop] = {\n ...((currentPage.frame(frame).props[prop] || []) as Record<string, any>),\n ...incomingProp,\n }\n }\n })\n\n pageResponse.props = { ...currentPage.frame(frame).props, ...pageResponse.props }\n }\n }\n\n protected async setRememberedState(pageResponse: Frame): Promise<void> {\n const rememberedFrames = await history.getState<Page['frames']>('frames', {})\n const frame = this.requestParams.all().frame\n const rememberedState = rememberedFrames[frame]?.rememberedState || {}\n if (\n this.requestParams.all().preserveState &&\n rememberedState &&\n pageResponse.component === currentPage.frame(frame).component\n ) {\n pageResponse.rememberedState = rememberedState\n }\n }\n\n protected getScopedErrors(errors: Errors & ErrorBag): Errors {\n if (!this.requestParams.all().errorBag) {\n return errors\n }\n\n return errors[this.requestParams.all().errorBag || ''] || {}\n }\n}\n", "import { Request } from './request'\n\nexport class RequestStream {\n protected requests: Request[] = []\n\n protected maxConcurrent: number\n\n protected interruptible: boolean\n\n constructor({ maxConcurrent, interruptible }: { maxConcurrent: number; interruptible: boolean }) {\n this.maxConcurrent = maxConcurrent\n this.interruptible = interruptible\n }\n\n public send(request: Request) {\n this.requests.push(request)\n\n request.send().then(() => {\n this.requests = this.requests.filter((r) => r !== request)\n })\n }\n\n public interruptInFlight(): void {\n this.cancel({ interrupted: true }, false)\n }\n\n public cancelInFlight(): void {\n this.cancel({ cancelled: true }, true)\n }\n\n protected cancel({ cancelled = false, interrupted = false } = {}, force: boolean): void {\n if (!this.shouldCancel(force)) {\n return\n }\n\n const request = this.requests.shift()!\n\n request?.cancel({ interrupted, cancelled })\n }\n\n protected shouldCancel(force: boolean): boolean {\n if (force) {\n return true\n }\n\n return this.interruptible && this.requests.length >= this.maxConcurrent\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["src_exports", "__export", "History", "Router", "createHeadManager", "hide", "hrefToUrl", "mergeDataIntoQueryString", "reveal", "setupProgress", "shouldIntercept", "urlWithoutHash", "__toCommonJS", "debounce", "fn", "delay", "timeoutID", "args", "Renderer", "tag", "template", "node", "script", "name", "element", "elements", "key", "debounce", "sourceElements", "targetElement", "index", "sourceElement", "createHeadManager", "isServer", "titleCallback", "onUpdate", "states", "lastProviderId", "connect", "id", "disconnect", "commit", "update", "collect", "title", "defaults", "carry", "match", "import_nprogress", "hideProgressStyleEl", "el", "hideCount", "removeStyle", "reveal", "force", "hide", "addEventListeners", "delay", "start", "progress", "event", "timeout", "NProgress", "e", "finish", "injectCSS", "color", "element", "setupProgress", "includeCSS", "showSpinner", "shouldIntercept", "event", "isLink", "import_deepmerge", "qs", "hasFiles", "data", "value", "isFormData", "value", "objectToFormData", "source", "form", "parentKey", "key", "append", "composeKey", "parent", "index", "hrefToUrl", "href", "transformUrlAndData", "data", "method", "forceFormData", "queryStringArrayFormat", "url", "hasFiles", "isFormData", "objectToFormData", "_href", "_data", "mergeDataIntoQueryString", "qsArrayFormat", "hasHost", "hasAbsolutePath", "hasRelativePath", "hasSearch", "hasHash", "deepmerge", "urlWithoutHash", "setHashIfSameUrl", "originUrl", "destinationUrl", "isSameUrlWithoutHash", "url1", "url2", "import_esm_env", "import_deepmerge", "fireEvent", "name", "options", "fireBeforeEvent", "visit", "fireErrorEvent", "errors", "fireExceptionEvent", "exception", "fireFinishEvent", "fireInvalidEvent", "response", "fireNavigateEvent", "page", "fireProgressEvent", "progress", "fireStartEvent", "fireSuccessEvent", "firePrefetchedEvent", "firePrefetchingEvent", "import_deepmerge", "SessionStorage", "key", "value", "existing", "nestedKey", "encryptHistory", "data", "iv", "getIv", "storedKey", "getKeyFromSessionStorage", "key", "getOrCreateKey", "encryptData", "historySessionStorageKeys", "decryptHistory", "decryptData", "textEncoder", "str", "encoded", "result", "decrypted", "decoded", "ivString", "SessionStorage", "createKey", "saveKey", "keyData", "newKey", "stringKey", "Scroll", "page", "history", "region", "index", "scrollPosition", "event", "target", "import_deepmerge", "CurrentPage", "frame", "initialState", "swapComponent", "_a", "page", "replace", "preserveScroll", "preserveState", "componentId", "components", "location", "isSameUrlWithoutHash", "hrefToUrl", "history", "Scroll", "eventHandler", "fireNavigateEvent", "name", "options", "deepmerge", "_", "s", "data", "source", "hash", "regions", "component", "frames", "result", "Router", "event", "callback", "listener", "isServer", "_History", "frame", "data", "key", "old", "page", "newState", "deepmerge", "_", "s", "resolve", "encryptHistory", "next", "pageData", "decryptHistory", "fn", "defaultValue", "SessionStorage", "historySessionStorageKeys", "state", "History", "history", "EventHandler", "debounce", "Scroll", "type", "callback", "listener", "event", "response", "page", "state", "url", "hrefToUrl", "history", "deepmerge", "_", "s", "data", "fireNavigateEvent", "eventHandler", "NavigationType", "navigationType", "InitialVisit", "handler", "navigationType", "history", "data", "page", "Scroll", "fireNavigateEvent", "eventHandler", "SessionStorage", "locationVisit", "rememberedFrames", "scrollRegions", "name", "frame", "Poll", "interval", "cb", "options", "hidden", "Polls", "interval", "cb", "options", "poll", "Poll", "polls", "objectsAreEqual", "obj1", "obj2", "excludeKeys", "key", "compareValues", "value1", "value2", "conversionMap", "timeToMs", "time", "unit", "conversion", "PrefetchedRequests", "params", "sendFunc", "cacheFor", "existing", "stale", "expires", "promise", "resolve", "reject", "error", "visitParams", "response", "visit", "prefetching", "removalTimer", "prefetched", "timeToMs", "timer", "expiresIn", "id", "params1", "params2", "objectsAreEqual", "prefetchedRequests", "import_axios", "RequestParams", "params", "wrappedCallbacks", "cb", "cancelled", "interrupted", "response", "headers", "page", "only", "name", "args", "toMerge", "value", "modal_default", "html", "page", "a", "iframe", "event", "ResponseQueue", "response", "nextResponse", "queue", "Response", "requestParams", "originatingPage", "params", "isSameUrlWithoutHash", "firePrefetchedEvent", "history", "frame", "errors", "page", "scopedErrors", "fireErrorEvent", "fireSuccessEvent", "locationUrl", "hrefToUrl", "setHashIfSameUrl", "fireInvalidEvent", "modal_default", "status", "header", "url", "SessionStorage", "pageResponse", "History", "originatingUrl", "currentPageUrl", "responseUrl", "prop", "incomingProp", "rememberedFrames", "rememberedState", "Request", "params", "page", "RequestParams", "fireStartEvent", "firePrefetchingEvent", "originallyPrefetch", "axios", "urlWithoutHash", "response", "Response", "error", "fireExceptionEvent", "fireFinishEvent", "cancelled", "interrupted", "progress", "fireProgressEvent", "headers", "frame", "referer", "hrefToUrl", "RequestStream", "maxConcurrent", "interruptible", "request", "r", "cancelled", "interrupted", "force", "Router", "frame", "initialState", "swapComponent", "RequestStream", "page", "InitialVisit", "eventHandler", "url", "data", "options", "key", "history", "type", "callback", "interval", "requestOptions", "polls", "href", "visit", "events", "fireBeforeEvent", "requestStream", "Scroll", "requestParams", "prefetched", "prefetchedRequests", "reveal", "Request", "cacheFor", "hide", "params", "pendingVisitOptions", "mergedOptions", "_data", "transformUrlAndData", "deferred", "_", "group"]
|
|
7
7
|
}
|