@inertiajs/core 2.1.2 → 2.1.3

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/debounce.ts", "../src/events.ts", "../src/sessionStorage.ts", "../src/encryption.ts", "../src/scroll.ts", "../src/url.ts", "../src/files.ts", "../src/formData.ts", "../src/page.ts", "../src/queue.ts", "../src/history.ts", "../src/eventHandler.ts", "../src/navigationType.ts", "../src/initialVisit.ts", "../src/poll.ts", "../src/polls.ts", "../src/prefetched.ts", "../src/objectUtils.ts", "../src/time.ts", "../src/request.ts", "../src/requestParams.ts", "../src/modal.ts", "../src/response.ts", "../src/requestStream.ts", "../src/router.ts", "../src/formObject.ts", "../src/resetFormFields.ts", "../src/head.ts", "../src/progress-component.ts", "../src/progress.ts", "../src/shouldIntercept.ts", "../src/index.ts"],
4
- "sourcesContent": ["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 { 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", "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\n const textEncoder = new TextEncoder()\n const str = JSON.stringify(data)\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 return JSON.parse(new TextDecoder().decode(decrypted))\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 { ScrollRegion } from './types'\n\nexport class Scroll {\n public static save(): void {\n history.saveScrollPositions(\n 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(): void {\n const anchorHash = typeof window !== 'undefined' ? window.location.hash : null\n\n if (!anchorHash) {\n // Reset the document scroll position if there is no hash.\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()\n\n if (anchorHash) {\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(() => {\n const anchorElement = document.getElementById(anchorHash.slice(1))\n anchorElement ? anchorElement.scrollIntoView() : window.scrollTo(0, 0)\n })\n }\n }\n\n public static restore(scrollRegions: ScrollRegion[]): void {\n this.restoreDocument()\n\n this.regions().forEach((region: Element, index: number) => {\n const scrollPosition = 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 restoreDocument(): void {\n const scrollPosition = history.getDocumentScrollPosition()\n\n if (typeof window !== 'undefined') {\n window.scrollTo(scrollPosition.left, scrollPosition.top)\n }\n }\n\n public static onScroll(event: Event): void {\n const target = event.target as Element\n\n if (typeof target.hasAttribute === 'function' && target.hasAttribute('scroll-region')) {\n this.save()\n }\n }\n\n public static onWindowScroll(): void {\n history.saveDocumentScrollPosition({\n top: window.scrollY,\n left: window.scrollX,\n })\n }\n}\n", "import * as qs from 'qs'\nimport { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport { FormDataConvertible, Method, RequestPayload, UrlMethodPair, 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\ntype MergeDataIntoQueryStringDataReturnType<T extends RequestPayload> =\n T extends Record<string, FormDataConvertible> ? Record<string, FormDataConvertible> : RequestPayload\n\nexport function mergeDataIntoQueryString<T extends RequestPayload>(\n method: Method,\n href: URL | string,\n data: T,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, MergeDataIntoQueryStringDataReturnType<T>] {\n const hasDataForQueryString = method === 'get' && !isFormData(data) && Object.keys(data).length > 0\n const hasHost = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/') || href.toString() === ''\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasRelativePathWithDotPrefix = /^[.]{1,2}([/]|$)/.test(href.toString())\n const hasSearch = href.toString().includes('?') || hasDataForQueryString\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), typeof window === 'undefined' ? 'http://localhost' : window.location.toString())\n\n if (hasDataForQueryString) {\n const parseOptions = { ignoreQueryPrefix: true, parseArrays: false }\n url.search = qs.stringify(\n { ...qs.parse(url.search, parseOptions), ...data },\n {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n },\n )\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(hasRelativePathWithDotPrefix ? 0 : 1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n (hasDataForQueryString ? {} : data) as MergeDataIntoQueryStringDataReturnType<T>,\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\nexport function isUrlMethodPair(href: unknown): href is UrlMethodPair {\n return href !== null && typeof href === 'object' && href !== undefined && 'url' in href && 'method' in 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 { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { Scroll } from './scroll'\nimport {\n Component,\n Page,\n PageEvent,\n PageHandler,\n PageResolver,\n PreserveStateOption,\n RouterInitParams,\n VisitOptions,\n} from './types'\nimport { hrefToUrl, isSameUrlWithoutHash } from './url'\n\nclass CurrentPage {\n protected page!: Page\n protected swapComponent!: PageHandler\n protected resolveComponent!: PageResolver\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({ initialPage, swapComponent, resolveComponent }: RouterInitParams) {\n this.page = initialPage\n this.swapComponent = swapComponent\n this.resolveComponent = resolveComponent\n\n return this\n }\n\n public set(\n page: Page,\n {\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: Partial<Pick<VisitOptions, 'replace' | 'preserveScroll' | 'preserveState'>> = {},\n ): Promise<void> {\n this.componentId = {}\n\n const componentId = this.componentId\n\n if (page.clearHistory) {\n history.clear()\n }\n\n return this.resolve(page.component).then((component) => {\n if (componentId !== this.componentId) {\n // Component has changed since we started resolving this component, bail\n return\n }\n\n page.rememberedState ??= {}\n\n const location = typeof window !== 'undefined' ? window.location : new URL(page.url)\n replace = replace || isSameUrlWithoutHash(hrefToUrl(page.url), location)\n\n return new Promise((resolve) => {\n replace ? history.replaceState(page, () => resolve(null)) : history.pushState(page, () => resolve(null))\n }).then(() => {\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({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n Scroll.reset()\n }\n\n eventHandler.fireInternalEvent('loadDeferredProps')\n\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n })\n })\n }\n\n public setQuietly(\n page: Page,\n {\n preserveState = false,\n }: {\n preserveState?: PreserveStateOption\n } = {},\n ) {\n return this.resolve(page.component).then((component) => {\n this.page = page\n this.cleared = false\n history.setCurrent(page)\n return this.swap({ component, page, preserveState })\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 get(): Page {\n return this.page\n }\n\n public merge(data: Partial<Page>): void {\n this.page = { ...this.page, ...data }\n }\n\n public setUrlHash(hash: string): void {\n if (!this.page.url.includes(hash)) {\n this.page.url += hash\n }\n }\n\n public remember(data: Page['rememberedState']): void {\n this.page.rememberedState = data\n }\n\n public swap({\n component,\n page,\n preserveState,\n }: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n }): Promise<unknown> {\n return this.swapComponent({ component, page, preserveState })\n }\n\n public resolve(component: string): Promise<Component> {\n return Promise.resolve(this.resolveComponent(component))\n }\n\n public isTheSame(page: Page): boolean {\n return this.page.component === page.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", "export default class Queue<T> {\n protected items: (() => T)[] = []\n protected processingPromise: Promise<void> | null = null\n\n public add(item: () => T) {\n this.items.push(item)\n return this.process()\n }\n\n public process() {\n this.processingPromise ??= this.processNext().finally(() => {\n this.processingPromise = null\n })\n\n return this.processingPromise\n }\n\n protected processNext(): Promise<void> {\n const next = this.items.shift()\n\n if (next) {\n return Promise.resolve(next()).then(() => this.processNext())\n }\n\n return Promise.resolve()\n }\n}\n", "import { decryptHistory, encryptHistory, historySessionStorageKeys } from './encryption'\nimport { page as currentPage } from './page'\nimport Queue from './queue'\nimport { SessionStorage } from './sessionStorage'\nimport { Page, ScrollRegion } from './types'\n\nconst isServer = typeof window === 'undefined'\nconst queue = new Queue<Promise<void>>()\nconst isChromeIOS = !isServer && /CriOS/.test(window.navigator.userAgent)\n\nclass History {\n public rememberedState = 'rememberedState' as const\n public scrollRegions = 'scrollRegions' as const\n public preserveUrl = false\n protected current: Partial<Page> = {}\n // We need initialState for `restore`\n protected initialState: Partial<Page> | null = null\n\n public remember(data: unknown, key: string): void {\n this.replaceState({\n ...currentPage.get(),\n rememberedState: {\n ...(currentPage.get()?.rememberedState ?? {}),\n [key]: data,\n },\n })\n }\n\n public restore(key: string): unknown {\n if (!isServer) {\n return this.current[this.rememberedState]\n ? this.current[this.rememberedState]?.[key]\n : this.initialState?.[this.rememberedState]?.[key]\n }\n }\n\n public pushState(page: Page, cb: (() => void) | null = null): void {\n if (isServer) {\n return\n }\n\n if (this.preserveUrl) {\n cb && cb()\n return\n }\n\n this.current = page\n\n queue.add(() => {\n return this.getPageData(page).then((data) => {\n // Defer history.pushState to the next event loop tick to prevent timing conflicts.\n // Ensure any previous history.replaceState completes before pushState is executed.\n const doPush = () => {\n this.doPushState({ page: data }, page.url)\n cb && cb()\n }\n\n if (isChromeIOS) {\n setTimeout(doPush)\n } else {\n doPush()\n }\n })\n })\n }\n\n protected getPageData(page: Page): Promise<Page | ArrayBuffer> {\n return new Promise((resolve) => {\n return page.encryptHistory ? encryptHistory(page).then(resolve) : resolve(page)\n })\n }\n\n public processQueue(): Promise<void> {\n return queue.process()\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 if (this.initialState === null) {\n this.initialState = data ?? undefined\n } else {\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 saveScrollPositions(scrollRegions: ScrollRegion[]): void {\n queue.add(() => {\n return Promise.resolve().then(() => {\n if (!window.history.state?.page) {\n return\n }\n\n this.doReplaceState(\n {\n page: window.history.state.page,\n scrollRegions,\n }\n )\n })\n })\n }\n\n public saveDocumentScrollPosition(scrollRegion: ScrollRegion): void {\n queue.add(() => {\n return Promise.resolve().then(() => {\n if (!window.history.state?.page) {\n return\n }\n\n this.doReplaceState(\n {\n page: window.history.state.page,\n documentScrollPosition: scrollRegion,\n }\n )\n })\n })\n }\n\n public getScrollRegions(): ScrollRegion[] {\n return window.history.state?.scrollRegions || []\n }\n\n public getDocumentScrollPosition(): ScrollRegion {\n return window.history.state?.documentScrollPosition || { top: 0, left: 0 }\n }\n\n public replaceState(page: Page, cb: (() => void) | null = null): void {\n currentPage.merge(page)\n\n if (isServer) {\n return\n }\n\n if (this.preserveUrl) {\n cb && cb()\n return\n }\n\n this.current = page\n\n queue.add(() => {\n return this.getPageData(page).then((data) => {\n // Defer history.replaceState to the next event loop tick to prevent timing conflicts.\n // Ensure any previous history.pushState completes before replaceState is executed.\n const doReplace = () => {\n this.doReplaceState({ page: data }, page.url)\n cb && cb()\n }\n\n if (isChromeIOS) {\n setTimeout(doReplace)\n } else {\n doReplace()\n }\n })\n })\n }\n\n protected doReplaceState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url?: string,\n ): void {\n window.history.replaceState(\n {\n ...data,\n scrollRegions: data.scrollRegions ?? window.history.state?.scrollRegions,\n documentScrollPosition: data.documentScrollPosition ?? window.history.state?.documentScrollPosition,\n },\n '',\n url,\n )\n }\n\n protected doPushState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url: string,\n ): void {\n window.history.pushState(data, '', url)\n }\n\n public getState<T>(key: keyof Page, defaultValue?: T): any {\n return this.current?.[key] ?? defaultValue\n }\n\n public deleteState(key: keyof Page) {\n if (this.current[key] !== undefined) {\n delete this.current[key]\n this.replaceState(this.current as Page)\n }\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 setCurrent(page: Page): void {\n this.current = page\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\nif (typeof window !== 'undefined' && window.history.scrollRestoration) {\n window.history.scrollRestoration = 'manual'\n}\n\nexport const history = new History()\n", "import debounce from './debounce'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { router } from './index'\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 window.addEventListener('scroll', debounce(Scroll.onWindowScroll.bind(Scroll), 100), true)\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.get().url)\n url.hash = window.location.hash\n\n history.replaceState({ ...currentPage.get(), url: url.href })\n Scroll.reset()\n\n return\n }\n\n if (!history.isValidState(state)) {\n return this.onMissingHistoryItem()\n }\n\n history\n .decrypt(state.page)\n .then((data) => {\n if (currentPage.get().version !== data.version) {\n this.onMissingHistoryItem()\n return\n }\n\n // Cancel ongoing requests\n router.cancelAll()\n\n currentPage.setQuietly(data, { preserveState: false }).then(() => {\n window.requestAnimationFrame(() => {\n Scroll.restore(history.getScrollRegions())\n })\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n this.onMissingHistoryItem()\n })\n }\n}\n\nexport const eventHandler = new EventHandler()\n", "class NavigationType {\n protected type: NavigationTimingType\n\n public constructor() {\n this.type = this.resolveType()\n }\n\n protected resolveType(): NavigationTimingType {\n if (typeof window === 'undefined') {\n return 'navigate'\n }\n\n if (\n window.performance &&\n window.performance.getEntriesByType &&\n window.performance.getEntriesByType('navigation').length > 0\n ) {\n return (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n }\n\n return 'navigate'\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 } from './types'\n\nexport class InitialVisit {\n public static handle(): void {\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.deleteState(history.rememberedState)\n }\n }\n\n protected static handleBackForward(): boolean {\n if (!navigationType.isBackForward() || !history.hasAnyState()) {\n return false\n }\n\n const scrollRegions = history.getScrollRegions()\n\n history\n .decrypt()\n .then((data) => {\n currentPage.set(data, { preserveScroll: true, preserveState: true }).then(() => {\n Scroll.restore(scrollRegions)\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(currentPage.get())\n .then(() => {\n const rememberedState = history.getState<Page['rememberedState']>(history.rememberedState, {})\n const scrollRegions = history.getScrollRegions()\n currentPage.remember(rememberedState)\n\n currentPage\n .set(currentPage.get(), {\n preserveScroll: locationVisit.preserveScroll,\n preserveState: true,\n })\n .then(() => {\n if (locationVisit.preserveScroll) {\n Scroll.restore(scrollRegions)\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(), { preserveScroll: true, preserveState: true }).then(() => {\n if (navigationType.isReload()) {\n Scroll.restore(history.getScrollRegions())\n }\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", "import { cloneDeep } from 'es-toolkit'\nimport { 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(\n params: ActiveVisit,\n sendFunc: (params: InternalActiveVisit) => void,\n { cacheFor, cacheTags }: PrefetchOptions,\n ) {\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 onPrefetchError(error) {\n prefetchedRequests.removeFromInFlight(params)\n reject(error)\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: expires === 0,\n timestamp: Date.now(),\n inFlight: false,\n tags: Array.isArray(cacheTags) ? cacheTags : [cacheTags],\n })\n\n this.scheduleForRemoval(params, expires)\n this.removeFromInFlight(params)\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 removeByTags(tags: string[]): void {\n this.cached = this.cached.filter((prefetched) => {\n return !prefetched.tags.some((tag) => tags.includes(tag))\n })\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 removeFromInFlight(params: ActiveVisit): void {\n this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {\n return !this.paramsAreEqual(prefetching.params, params)\n })\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 withoutPurposePrefetchHeader(params: ActiveVisit): ActiveVisit {\n const newParams = cloneDeep(params)\n if (newParams.headers['Purpose'] === 'prefetch') {\n delete newParams.headers['Purpose']\n }\n return newParams\n }\n\n protected paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean {\n return objectsAreEqual<ActiveVisit>(\n this.withoutPurposePrefetchHeader(params1),\n this.withoutPurposePrefetchHeader(params2),\n [\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}\n\nexport const prefetchedRequests = new PrefetchedRequests()\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 { 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 } 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\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 if (originallyPrefetch) {\n this.requestParams.onPrefetchError(error)\n }\n\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 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 onPrefetchError: params.onPrefetchError || (() => {}),\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' ? null : 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 onPrefetchError(error: Error) {\n if (this.params.onPrefetchError) {\n this.params.onPrefetchError(error)\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.get().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.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 { router } from '.'\nimport { fireErrorEvent, fireInvalidEvent, firePrefetchedEvent, fireSuccessEvent } from './events'\nimport { history } from './history'\nimport modal from './modal'\nimport { page as currentPage } from './page'\nimport Queue from './queue'\nimport { RequestParams } from './requestParams'\nimport { SessionStorage } from './sessionStorage'\nimport { ActiveVisit, ErrorBag, Errors, Page } from './types'\nimport { hrefToUrl, isSameUrlWithoutHash, setHashIfSameUrl } from './url'\n\nconst queue = new Queue<Promise<boolean | void>>()\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 return queue.add(() => this.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.setPage()\n\n const errors = currentPage.get().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 router.flushByCacheTags(this.requestParams.all().invalidateCacheTags || [])\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 setPage(): Promise<void> {\n const pageResponse = this.getDataFromResponse(this.response.data)\n\n if (!this.shouldSetPage(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.get().url : this.pageUrl(pageResponse)\n\n return currentPage.set(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 shouldSetPage(pageResponse: Page): boolean {\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.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.component !== currentPage.get().component) {\n return false\n }\n\n const originatingUrl = hrefToUrl(this.originatingPage.url)\n const currentPageUrl = hrefToUrl(currentPage.get().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: Page) {\n const responseUrl = hrefToUrl(pageResponse.url)\n\n setHashIfSameUrl(this.requestParams.all().url, responseUrl)\n\n return responseUrl.pathname + responseUrl.search + responseUrl.hash\n }\n\n protected mergeProps(pageResponse: Page): void {\n if (!this.requestParams.isPartial() || pageResponse.component !== currentPage.get().component) {\n return\n }\n\n const propsToMerge = pageResponse.mergeProps || []\n const propsToDeepMerge = pageResponse.deepMergeProps || []\n const matchPropsOn = pageResponse.matchPropsOn || []\n\n propsToMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n\n if (Array.isArray(incomingProp)) {\n pageResponse.props[prop] = this.mergeOrMatchItems(\n (currentPage.get().props[prop] || []) as any[],\n incomingProp,\n prop,\n matchPropsOn,\n )\n } else if (typeof incomingProp === 'object' && incomingProp !== null) {\n pageResponse.props[prop] = {\n ...((currentPage.get().props[prop] || []) as Record<string, any>),\n ...incomingProp,\n }\n }\n })\n\n propsToDeepMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n const currentProp = currentPage.get().props[prop]\n\n // Function to recursively merge objects and arrays\n const deepMerge = (target: any, source: any, currentKey: string) => {\n if (Array.isArray(source)) {\n return this.mergeOrMatchItems(target, source, currentKey, matchPropsOn)\n }\n\n if (typeof source === 'object' && source !== null) {\n // Merge objects by iterating over keys\n return Object.keys(source).reduce(\n (acc, key) => {\n acc[key] = deepMerge(target ? target[key] : undefined, source[key], `${currentKey}.${key}`)\n return acc\n },\n { ...target },\n )\n }\n\n // f the source is neither an array nor an object, simply return the it\n return source\n }\n\n // Apply the deep merge and update the page response\n pageResponse.props[prop] = deepMerge(currentProp, incomingProp, prop)\n })\n\n pageResponse.props = { ...currentPage.get().props, ...pageResponse.props }\n }\n\n protected mergeOrMatchItems(target: any[], source: any[], currentKey: string, matchPropsOn: string[]) {\n // Determine if there's a specific key to match items.\n // E.g.: matchPropsOn = ['posts.data.id'] and currentKey = 'posts.data' will match.\n const matchOn = matchPropsOn.find((key) => {\n const path = key.split('.').slice(0, -1).join('.')\n return path === currentKey\n })\n\n if (!matchOn) {\n // No key found to match on, just concatenate the arrays\n return [...(Array.isArray(target) ? target : []), ...source]\n }\n\n // Extract the unique property name to match items (e.g., 'id' from 'posts.data.id').\n const uniqueProperty = matchOn.split('.').pop() || ''\n const targetArray = Array.isArray(target) ? target : []\n const map = new Map<any, any>()\n\n // Populate the map with items from the target array, using the unique property as the key.\n // If an item doesn't have the unique property or isn't an object, a unique Symbol is used as the key.\n targetArray.forEach((item) => {\n if (item && typeof item === 'object' && uniqueProperty in item) {\n map.set(item[uniqueProperty], item)\n } else {\n map.set(Symbol(), item)\n }\n })\n\n // Iterate through the source array. If an item's unique property matches an existing key in the map,\n // update the item. Otherwise, add the new item to the map.\n source.forEach((item) => {\n if (item && typeof item === 'object' && uniqueProperty in item) {\n map.set(item[uniqueProperty], item)\n } else {\n map.set(Symbol(), item)\n }\n })\n\n return Array.from(map.values())\n }\n\n protected async setRememberedState(pageResponse: Page): Promise<void> {\n const rememberedState = await history.getState<Page['rememberedState']>(history.rememberedState, {})\n\n if (\n this.requestParams.all().preserveState &&\n rememberedState &&\n pageResponse.component === currentPage.get().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 ClientSideVisitOptions,\n Component,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Method,\n Page,\n PendingVisit,\n PendingVisitOptions,\n PollOptions,\n PrefetchedResponse,\n PrefetchOptions,\n ReloadOptions,\n RequestPayload,\n RouterInitParams,\n UrlMethodPair,\n Visit,\n VisitCallbacks,\n VisitHelperOptions,\n VisitOptions,\n} from './types'\nimport { isUrlMethodPair, transformUrlAndData } from './url'\n\nexport class Router {\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 public init({ initialPage, resolveComponent, swapComponent }: RouterInitParams): void {\n currentPage.init({\n initialPage,\n resolveComponent,\n swapComponent,\n })\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<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { ...options, method: 'get', data })\n }\n\n public post<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'post', data })\n }\n\n public put<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'put', data })\n }\n\n public patch<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'patch', data })\n }\n\n public delete<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n options: Omit<VisitOptions<T>, 'method'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'delete' })\n }\n\n public reload<T extends RequestPayload = RequestPayload>(options: ReloadOptions<T> = {}): 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(data, key)\n }\n\n public restore(key = 'default'): unknown {\n return history.restore(key)\n }\n\n public on<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n if (typeof window === 'undefined') {\n return () => {}\n }\n\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<T extends RequestPayload = RequestPayload>(\n href: string | URL | UrlMethodPair,\n options: VisitOptions<T> = {},\n ): void {\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n showProgress: options.showProgress ?? !options.async,\n } as VisitOptions)\n\n const events = this.getVisitEvents(options as VisitOptions)\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()\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(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n ): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findCached(this.getPrefetchParams(href, options))\n }\n\n public flush(href: string | URL | UrlMethodPair, options: VisitOptions = {}): void {\n prefetchedRequests.remove(this.getPrefetchParams(href, options))\n }\n\n public flushAll(): void {\n prefetchedRequests.removeAll()\n }\n\n public flushByCacheTags(tags: string | string[]): void {\n prefetchedRequests.removeByTags(Array.isArray(tags) ? tags : [tags])\n }\n\n public getPrefetching(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n ): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options))\n }\n\n public prefetch(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n prefetchOptions: Partial<PrefetchOptions> = {},\n ) {\n const method: Method = options.method ?? (isUrlMethodPair(href) ? href.method : 'get')\n\n if (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 visitUrl = visit.url.origin + visit.url.pathname + visit.url.search\n const currentUrl = window.location.origin + window.location.pathname + window.location.search\n\n if (visitUrl === currentUrl) {\n // Don't prefetch the current page, you're already on it\n return\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 const ensureCurrentPageIsSet = (): Promise<void> => {\n return new Promise((resolve) => {\n const checkIfPageIsDefined = () => {\n if (currentPage.get()) {\n resolve()\n } else {\n setTimeout(checkIfPageIsDefined, 50)\n }\n }\n\n checkIfPageIsDefined()\n })\n }\n\n ensureCurrentPageIsSet().then(() => {\n prefetchedRequests.add(\n requestParams,\n (params) => {\n this.asyncRequestStream.send(Request.create(params, currentPage.get()))\n },\n {\n cacheFor: 30_000,\n cacheTags: [],\n ...prefetchOptions,\n },\n )\n })\n }\n\n public clearHistory(): void {\n history.clear()\n }\n\n public decryptHistory(): Promise<Page> {\n return history.decrypt()\n }\n\n public resolveComponent(component: string): Promise<Component> {\n return currentPage.resolve(component)\n }\n\n public replace<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params, { replace: true })\n }\n\n public push<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params)\n }\n\n protected clientVisit<TProps = Page['props']>(\n params: ClientSideVisitOptions<TProps>,\n { replace = false }: { replace?: boolean } = {},\n ): void {\n const current = currentPage.get()\n\n const props =\n typeof params.props === 'function' ? params.props(current.props as TProps) : (params.props ?? current.props)\n\n const { onError, onFinish, onSuccess, ...pageParams } = params\n\n currentPage\n .set(\n {\n ...current,\n ...pageParams,\n props: props as Page['props'],\n },\n {\n replace,\n preserveScroll: params.preserveScroll,\n preserveState: params.preserveState,\n },\n )\n .then(() => {\n const errors = currentPage.get().props.errors || {}\n\n if (Object.keys(errors).length === 0) {\n return onSuccess?.(currentPage.get())\n }\n\n const scopedErrors = params.errorBag ? errors[params.errorBag || ''] || {} : errors\n\n return onError?.(scopedErrors)\n })\n .finally(() => onFinish?.(params))\n }\n\n protected getPrefetchParams(href: string | URL | UrlMethodPair, 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 | UrlMethodPair,\n options: VisitOptions,\n pendingVisitOptions: Partial<PendingVisitOptions> = {},\n ): PendingVisit {\n if (isUrlMethodPair(href)) {\n const urlMethodPair = href\n href = urlMethodPair.url\n options.method = options.method ?? urlMethodPair.method\n }\n\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 invalidateCacheTags: [],\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 const visit = {\n cancelled: false,\n completed: false,\n interrupted: false,\n ...mergedOptions,\n ...pendingVisitOptions,\n url,\n data: _data,\n }\n\n if (visit.prefetch) {\n visit.headers['Purpose'] = 'prefetch'\n }\n\n return visit\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.get()?.deferredProps\n\n if (deferred) {\n Object.entries(deferred).forEach(([_, group]) => {\n this.reload({ only: group })\n })\n }\n }\n}\n", "import { get, set } from 'es-toolkit/compat'\nimport { FormDataConvertible } from './types'\n\n/**\n * Transform dotted notation to bracket notation.\n *\n * Examples:\n * user.name => user[name]\n * user.profile.city => user[profile][city]\n * user.skills[] => user[skills][]\n * users.company[address].street => users[company][address][street]\n * config\\.app\\.name => config.app.name (escaped, literal)\n */\nfunction undotKey(key: string): string {\n if (!key.includes('.')) {\n return key\n }\n\n const transformSegment = (segment: string): string => {\n if (segment.startsWith('[') && segment.endsWith(']')) {\n return segment // Already in bracket notation - leave untouched\n }\n\n // Convert dotted segment to bracket notation: \"user.name\" \u2192 \"user[name]\"\n return segment.split('.').reduce((result, part, index) => (index === 0 ? part : `${result}[${part}]`))\n }\n\n return key\n .replace(/\\\\\\./g, '__ESCAPED_DOT__') // Temporarily replace escaped dots (\\.) to protect them from transformation\n .split(/(\\[[^\\]]*\\])/) // Split on bracket notation while preserving the brackets in the result array\n .filter(Boolean) // Remove empty strings from the split operation\n .map(transformSegment) // Transform each segment: dotted parts become bracketed, existing brackets stay as-is\n .join('') // Reassemble all segments back into a single string\n .replace(/__ESCAPED_DOT__/g, '.') // Restore the escaped dots as literal dots in the final result\n}\n\n/**\n * Parse a key into an array of path segments.\n *\n * Examples:\n * - \"user[name]\" => [\"user\", \"name\"]\n * - \"tags[]\" => [\"tags\", \"\"]\n * - \"items[0][name]\" => [\"items\", 0, \"name\"]\n */\nfunction parseKey(key: string): (string | number | '')[] {\n const path: (string | number | '')[] = []\n const pattern = /([^\\[\\]]+)|\\[(\\d*)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(key)) !== null) {\n if (match[1] !== undefined) {\n path.push(match[1])\n } else if (match[2] !== undefined) {\n path.push(match[2] === '' ? '' : Number(match[2]))\n }\n }\n\n return path\n}\n\n/**\n * Convert a FormData instance into an object structure.\n */\nexport function formDataToObject(source: FormData): Record<string, FormDataConvertible> {\n const form: Record<string, any> = {}\n\n // formData.entries() returns an iterator where the first element is the key and the second element\n // is the value. Examples of the keys are \"user[name]\", \"tags[]\", \"items[0][name]\", \"user.name\", etc.\n // We should construct a new (nested) object based on these keys.\n for (const [key, value] of source.entries()) {\n if (value instanceof File && value.size === 0 && value.name === '') {\n // Check if the given value is an empty file. We want to filter\n // those out as they prevent us from comparing objects with\n // each other, which we do to set the isDirty prop.\n continue\n }\n\n const path = parseKey(undotKey(key))\n\n // If the key ends with an empty string (''), treat it as an array push (e.g., \"tags[]\")\n if (path[path.length - 1] === '') {\n const arrayPath = path.slice(0, -1)\n const existing = get(form, arrayPath)\n\n if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n set(form, arrayPath, [value])\n }\n\n continue\n }\n\n // No brackets: last value wins when multiple fields have the same key\n set(form, path, value)\n }\n\n return form\n}\n", "type FormElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n\nfunction isFormElement(element: Element): element is FormElement {\n return (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n )\n}\n\nfunction resetInputElement(input: HTMLInputElement, defaultValues: FormDataEntryValue[]): boolean {\n const oldValue = input.value\n const oldChecked = input.checked\n\n switch (input.type.toLowerCase()) {\n case 'checkbox':\n // For checkboxes, check if the input's value is in the array of default values\n input.checked = defaultValues.includes(input.value)\n break\n case 'radio':\n // For radios, only use the first default value to avoid multiple radios being checked\n input.checked = defaultValues[0] === input.value\n break\n case 'file':\n input.value = ''\n break\n case 'button':\n case 'submit':\n case 'reset':\n case 'image':\n // These input types don't carry form state\n break\n default:\n // text, email, number, date, etc. - use first default value\n input.value = defaultValues[0] !== null && defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n }\n\n // Return true if the value actually changed\n return input.value !== oldValue || input.checked !== oldChecked\n}\n\nfunction resetSelectElement(select: HTMLSelectElement, defaultValues: FormDataEntryValue[]): boolean {\n const oldValue = select.value\n const oldSelectedOptions = Array.from(select.selectedOptions).map((opt) => opt.value)\n\n if (select.multiple) {\n // For multi-select, select all options that match any of the default values\n const defaultStrings = defaultValues.map((value) => String(value))\n\n Array.from(select.options).forEach((option) => {\n option.selected = defaultStrings.includes(option.value)\n })\n } else {\n // For single select, use the first default value (or empty string)\n select.value = defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n }\n\n // Check if selection actually changed\n const newSelectedOptions = Array.from(select.selectedOptions).map((opt) => opt.value)\n const hasChanged = select.multiple\n ? JSON.stringify(oldSelectedOptions.sort()) !== JSON.stringify(newSelectedOptions.sort())\n : select.value !== oldValue\n\n return hasChanged\n}\n\nfunction resetFormElement(element: FormElement, defaultValues: FormDataEntryValue[]): boolean {\n if (element.disabled) {\n // For disabled elements, use their DOM defaultValue since they're not in FormData\n if (element instanceof HTMLInputElement) {\n const oldValue = element.value\n const oldChecked = element.checked\n\n switch (element.type.toLowerCase()) {\n case 'checkbox':\n case 'radio':\n element.checked = element.defaultChecked\n return element.checked !== oldChecked\n case 'file':\n element.value = ''\n return oldValue !== ''\n case 'button':\n case 'submit':\n case 'reset':\n case 'image':\n // These input types don't carry form state\n return false\n default:\n element.value = element.defaultValue\n return element.value !== oldValue\n }\n } else if (element instanceof HTMLSelectElement) {\n // Reset select to default selected options\n const oldSelectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value)\n\n Array.from(element.options).forEach((option) => {\n option.selected = option.defaultSelected\n })\n\n const newSelectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value)\n return JSON.stringify(oldSelectedOptions.sort()) !== JSON.stringify(newSelectedOptions.sort())\n } else if (element instanceof HTMLTextAreaElement) {\n const oldValue = element.value\n element.value = element.defaultValue\n return element.value !== oldValue\n }\n\n return false\n }\n\n if (element instanceof HTMLInputElement) {\n // Pass all default values to handle checkboxes and radios correctly\n return resetInputElement(element, defaultValues)\n } else if (element instanceof HTMLSelectElement) {\n return resetSelectElement(element, defaultValues)\n } else if (element instanceof HTMLTextAreaElement) {\n const oldValue = element.value\n element.value = defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n return element.value !== oldValue\n }\n\n return false\n}\n\nfunction resetFieldElements(\n elements: Element | RadioNodeList | HTMLCollection,\n defaultValues: FormDataEntryValue[],\n): boolean {\n let hasChanged = false\n\n if (elements instanceof RadioNodeList || elements instanceof HTMLCollection) {\n // Handle multiple elements with the same name (e.g., radio buttons, checkboxes, array fields)\n Array.from(elements).forEach((node, index) => {\n if (node instanceof Element && isFormElement(node)) {\n if (node instanceof HTMLInputElement && ['checkbox', 'radio'].includes(node.type.toLowerCase())) {\n // For checkboxes and radios, pass all default values for value-based matching\n if (resetFormElement(node, defaultValues)) {\n hasChanged = true\n }\n } else {\n // For other array elements (like text inputs), use index-based matching\n const indexedDefaultValues =\n defaultValues[index] !== undefined ? [defaultValues[index]] : [defaultValues[0] ?? null].filter(Boolean)\n\n if (resetFormElement(node, indexedDefaultValues)) {\n hasChanged = true\n }\n }\n }\n })\n } else if (isFormElement(elements)) {\n // Handle single element - pass all default values (important for multi-selects)\n hasChanged = resetFormElement(elements, defaultValues)\n }\n\n return hasChanged\n}\n\nexport function resetFormFields(formElement: HTMLFormElement, defaults: FormData, fieldNames?: string[]): void {\n if (!formElement) {\n return\n }\n\n // If no specific fields provided, reset the entire form\n if (!fieldNames || fieldNames.length === 0) {\n // Get all field names from both defaults and form elements (including disabled ones)\n const formData = new FormData(formElement)\n const formElementNames = Array.from(formElement.elements).map(el => isFormElement(el) ? el.name : '').filter(Boolean)\n fieldNames = [...new Set([...defaults.keys(), ...formData.keys(), ...formElementNames])]\n }\n\n let hasChanged = false\n\n fieldNames.forEach((fieldName) => {\n const elements = formElement.elements.namedItem(fieldName)\n\n if (elements) {\n if (resetFieldElements(elements, defaults.getAll(fieldName))) {\n hasChanged = true\n }\n }\n })\n\n // Dispatch reset event if any field changed (matching native form.reset() behavior)\n if (hasChanged) {\n formElement.dispatchEvent(new Event('reset', { bubbles: true }))\n }\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 reconnect(id: string): void {\n if (Object.keys(states).indexOf(id) === -1) {\n states[id] = []\n }\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 reconnect: () => reconnect(id),\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n", "/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\nimport { ProgressSettings } from './types'\n\nconst baseComponentSelector = 'nprogress'\n\nlet progress: HTMLDivElement\n\nconst settings: ProgressSettings = {\n minimum: 0.08,\n easing: 'linear',\n positionUsing: 'translate3d',\n speed: 200,\n trickle: true,\n trickleSpeed: 200,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n color: '#29d',\n includeCSS: true,\n template: [\n '<div class=\"bar\" role=\"bar\">',\n '<div class=\"peg\"></div>',\n '</div>',\n '<div class=\"spinner\" role=\"spinner\">',\n '<div class=\"spinner-icon\"></div>',\n '</div>',\n ].join(''),\n}\n\nlet status: number | null = null\n\nconst configure = (options: Partial<ProgressSettings>) => {\n Object.assign(settings, options)\n\n if (settings.includeCSS) {\n injectCSS(settings.color)\n }\n\n progress = document.createElement('div')\n progress.id = baseComponentSelector\n progress.innerHTML = settings.template\n}\n\n/**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n */\nconst set = (n: number) => {\n const started = isStarted()\n\n n = clamp(n, settings.minimum, 1)\n status = n === 1 ? null : n\n\n const progress = render(!started)\n const bar = progress.querySelector(settings.barSelector)! as HTMLElement\n const speed = settings.speed\n const ease = settings.easing\n\n progress.offsetWidth /* Repaint */\n\n queue((next) => {\n const barStyles = ((): Partial<CSSStyleDeclaration> => {\n if (settings.positionUsing === 'translate3d') {\n return {\n transition: `all ${speed}ms ${ease}`,\n transform: `translate3d(${toBarPercentage(n)}%,0,0)`,\n }\n }\n\n if (settings.positionUsing === 'translate') {\n return {\n transition: `all ${speed}ms ${ease}`,\n transform: `translate(${toBarPercentage(n)}%,0)`,\n }\n }\n\n return { marginLeft: `${toBarPercentage(n)}%` }\n })()\n\n for (const key in barStyles) {\n bar.style[key] = barStyles[key]!\n }\n\n if (n !== 1) {\n return setTimeout(next, speed)\n }\n\n // Fade out\n progress.style.transition = 'none'\n progress.style.opacity = '1'\n progress.offsetWidth /* Repaint */\n\n setTimeout(() => {\n progress.style.transition = `all ${speed}ms linear`\n progress.style.opacity = '0'\n\n setTimeout(() => {\n remove()\n progress.style.transition = ''\n progress.style.opacity = ''\n next()\n }, speed)\n }, speed)\n })\n}\n\nconst isStarted = () => typeof status === 'number'\n\n/**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n */\nconst start = () => {\n if (!status) {\n set(0)\n }\n\n const work = function () {\n setTimeout(function () {\n if (!status) {\n return\n }\n\n increaseByRandom()\n work()\n }, settings.trickleSpeed)\n }\n\n if (settings.trickle) {\n work()\n }\n}\n\n/**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * If `true` is passed, it will show the progress bar even if it's hidden.\n */\nconst done = (force?: boolean) => {\n if (!force && !status) {\n return\n }\n\n increaseByRandom(0.3 + 0.5 * Math.random())\n set(1)\n}\n\nconst increaseByRandom = (amount?: number) => {\n const n = status\n\n if (n === null) {\n return start()\n }\n\n if (n > 1) {\n return\n }\n\n amount =\n typeof amount === 'number'\n ? amount\n : (() => {\n const ranges: Record<number, [number, number]> = {\n 0.1: [0, 0.2],\n 0.04: [0.2, 0.5],\n 0.02: [0.5, 0.8],\n 0.005: [0.8, 0.99],\n }\n\n for (const r in ranges) {\n if (n >= ranges[r][0] && n < ranges[r][1]) {\n return parseFloat(r)\n }\n }\n\n return 0\n })()\n\n return set(clamp(n + amount, 0, 0.994))\n}\n\n/**\n * (Internal) renders the progress bar markup based on the `template` setting.\n */\nconst render = (fromStart: boolean) => {\n if (isRendered()) {\n return document.getElementById(baseComponentSelector)!\n }\n\n document.documentElement.classList.add(`${baseComponentSelector}-busy`)\n\n const bar = progress.querySelector(settings.barSelector)! as HTMLElement\n const perc = fromStart ? '-100' : toBarPercentage(status || 0)\n const parent = getParent()\n\n bar.style.transition = 'all 0 linear'\n bar.style.transform = `translate3d(${perc}%,0,0)`\n\n if (!settings.showSpinner) {\n progress.querySelector(settings.spinnerSelector)?.remove()\n }\n\n if (parent !== document.body) {\n parent.classList.add(`${baseComponentSelector}-custom-parent`)\n }\n\n parent.appendChild(progress)\n\n return progress\n}\n\nconst getParent = (): HTMLElement => {\n return (isDOM(settings.parent) ? settings.parent : document.querySelector(settings.parent)) as HTMLElement\n}\n\nconst remove = () => {\n document.documentElement.classList.remove(`${baseComponentSelector}-busy`)\n getParent().classList.remove(`${baseComponentSelector}-custom-parent`)\n progress?.remove()\n}\n\nconst isRendered = () => {\n return document.getElementById(baseComponentSelector) !== null\n}\n\nconst isDOM = (obj: any) => {\n if (typeof HTMLElement === 'object') {\n return obj instanceof HTMLElement\n }\n\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n if (n < min) {\n return min\n }\n\n if (n > max) {\n return max\n }\n\n return n\n}\n\n// Converts a percentage (`0..1`) to a bar translateX percentage (`-100%..0%`).\nconst toBarPercentage = (n: number) => (-1 + n) * 100\n\n// Queues a function to be executed.\nconst queue = (() => {\n const pending: ((...args: any[]) => any)[] = []\n\n const next = () => {\n const fn = pending.shift()\n\n if (fn) {\n fn(next)\n }\n }\n\n return (fn: (...args: any[]) => any) => {\n pending.push(fn)\n\n if (pending.length === 1) {\n next()\n }\n }\n})()\n\nconst injectCSS = (color: string): void => {\n const element = document.createElement('style')\n\n element.textContent = `\n #${baseComponentSelector} {\n pointer-events: none;\n }\n\n #${baseComponentSelector} .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 #${baseComponentSelector} .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 transform: rotate(3deg) translate(0px, -4px);\n }\n\n #${baseComponentSelector} .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #${baseComponentSelector} .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 animation: ${baseComponentSelector}-spinner 400ms linear infinite;\n }\n\n .${baseComponentSelector}-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .${baseComponentSelector}-custom-parent #${baseComponentSelector} .spinner,\n .${baseComponentSelector}-custom-parent #${baseComponentSelector} .bar {\n position: absolute;\n }\n\n @keyframes ${baseComponentSelector}-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nconst show = () => {\n if (progress) {\n progress.style.display = ''\n }\n}\n\nconst hide = () => {\n if (progress) {\n progress.style.display = 'none'\n }\n}\n\nexport default {\n configure,\n isStarted,\n done,\n set,\n remove,\n start,\n status,\n show,\n hide,\n}\n", "import ProgressComponent from './progress-component'\nimport { GlobalEvent } from './types'\n\nlet hideCount = 0\n\nexport const reveal = (force = false) => {\n hideCount = Math.max(0, hideCount - 1)\n\n if (force || hideCount === 0) {\n ProgressComponent.show()\n }\n}\n\nexport const hide = () => {\n hideCount++\n\n ProgressComponent.hide()\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(() => ProgressComponent.start(), delay)\n document.addEventListener('inertia:finish', (e) => finish(e, timeout), { once: true })\n}\n\nfunction progress(event: GlobalEvent<'progress'>): void {\n if (ProgressComponent.isStarted() && event.detail.progress?.percentage) {\n ProgressComponent.set(Math.max(ProgressComponent.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 (!ProgressComponent.isStarted()) {\n return\n }\n\n if (event.detail.visit.completed) {\n ProgressComponent.done()\n } else if (event.detail.visit.interrupted) {\n ProgressComponent.set(0)\n } else if (event.detail.visit.cancelled) {\n ProgressComponent.done()\n ProgressComponent.remove()\n }\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n ProgressComponent.configure({ showSpinner, includeCSS, color })\n}\n", "// The actual event passed to this function could be a native JavaScript event\n// or a React synthetic event, so we are picking just the keys needed here (that\n// are present in both types).\n\nexport default function shouldIntercept(\n event: Pick<\n MouseEvent,\n 'altKey' | 'ctrlKey' | 'defaultPrevented' | 'target' | 'currentTarget' | 'metaKey' | 'shiftKey' | 'button'\n >,\n): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\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 { Router } from './router'\n\nexport { objectToFormData } from './formData'\nexport { formDataToObject } from './formObject'\nexport { resetFormFields } from './resetFormFields'\nexport { 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, isUrlMethodPair } from './url'\nexport { type Router }\n\nexport const router = new Router()\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/debounce.ts", "../src/events.ts", "../src/sessionStorage.ts", "../src/encryption.ts", "../src/scroll.ts", "../src/url.ts", "../src/files.ts", "../src/formData.ts", "../src/page.ts", "../src/queue.ts", "../src/history.ts", "../src/eventHandler.ts", "../src/navigationType.ts", "../src/initialVisit.ts", "../src/poll.ts", "../src/polls.ts", "../src/prefetched.ts", "../src/objectUtils.ts", "../src/time.ts", "../src/request.ts", "../src/requestParams.ts", "../src/modal.ts", "../src/response.ts", "../src/requestStream.ts", "../src/router.ts", "../src/formObject.ts", "../src/head.ts", "../src/navigationEvents.ts", "../src/progress-component.ts", "../src/progress.ts", "../src/resetFormFields.ts", "../src/index.ts"],
4
+ "sourcesContent": ["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 { 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", "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\n const textEncoder = new TextEncoder()\n const str = JSON.stringify(data)\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 return JSON.parse(new TextDecoder().decode(decrypted))\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 { ScrollRegion } from './types'\n\nexport class Scroll {\n public static save(): void {\n history.saveScrollPositions(\n 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(): void {\n const anchorHash = typeof window !== 'undefined' ? window.location.hash : null\n\n if (!anchorHash) {\n // Reset the document scroll position if there is no hash.\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()\n\n if (anchorHash) {\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(() => {\n const anchorElement = document.getElementById(anchorHash.slice(1))\n anchorElement ? anchorElement.scrollIntoView() : window.scrollTo(0, 0)\n })\n }\n }\n\n public static restore(scrollRegions: ScrollRegion[]): void {\n this.restoreDocument()\n\n this.regions().forEach((region: Element, index: number) => {\n const scrollPosition = 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 restoreDocument(): void {\n const scrollPosition = history.getDocumentScrollPosition()\n\n if (typeof window !== 'undefined') {\n window.scrollTo(scrollPosition.left, scrollPosition.top)\n }\n }\n\n public static onScroll(event: Event): void {\n const target = event.target as Element\n\n if (typeof target.hasAttribute === 'function' && target.hasAttribute('scroll-region')) {\n this.save()\n }\n }\n\n public static onWindowScroll(): void {\n history.saveDocumentScrollPosition({\n top: window.scrollY,\n left: window.scrollX,\n })\n }\n}\n", "import * as qs from 'qs'\nimport { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport { FormDataConvertible, Method, RequestPayload, UrlMethodPair, 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\ntype MergeDataIntoQueryStringDataReturnType<T extends RequestPayload> =\n T extends Record<string, FormDataConvertible> ? Record<string, FormDataConvertible> : RequestPayload\n\nexport function mergeDataIntoQueryString<T extends RequestPayload>(\n method: Method,\n href: URL | string,\n data: T,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, MergeDataIntoQueryStringDataReturnType<T>] {\n const hasDataForQueryString = method === 'get' && !isFormData(data) && Object.keys(data).length > 0\n const hasHost = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/') || href.toString() === ''\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasRelativePathWithDotPrefix = /^[.]{1,2}([/]|$)/.test(href.toString())\n const hasSearch = href.toString().includes('?') || hasDataForQueryString\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), typeof window === 'undefined' ? 'http://localhost' : window.location.toString())\n\n if (hasDataForQueryString) {\n const parseOptions = { ignoreQueryPrefix: true, parseArrays: false }\n url.search = qs.stringify(\n { ...qs.parse(url.search, parseOptions), ...data },\n {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n },\n )\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(hasRelativePathWithDotPrefix ? 0 : 1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n (hasDataForQueryString ? {} : data) as MergeDataIntoQueryStringDataReturnType<T>,\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\nexport function isUrlMethodPair(href: unknown): href is UrlMethodPair {\n return href !== null && typeof href === 'object' && href !== undefined && 'url' in href && 'method' in 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 { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { Scroll } from './scroll'\nimport {\n Component,\n Page,\n PageEvent,\n PageHandler,\n PageResolver,\n PreserveStateOption,\n RouterInitParams,\n VisitOptions,\n} from './types'\nimport { hrefToUrl, isSameUrlWithoutHash } from './url'\n\nclass CurrentPage {\n protected page!: Page\n protected swapComponent!: PageHandler\n protected resolveComponent!: PageResolver\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({ initialPage, swapComponent, resolveComponent }: RouterInitParams) {\n this.page = initialPage\n this.swapComponent = swapComponent\n this.resolveComponent = resolveComponent\n\n return this\n }\n\n public set(\n page: Page,\n {\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: Partial<Pick<VisitOptions, 'replace' | 'preserveScroll' | 'preserveState'>> = {},\n ): Promise<void> {\n this.componentId = {}\n\n const componentId = this.componentId\n\n if (page.clearHistory) {\n history.clear()\n }\n\n return this.resolve(page.component).then((component) => {\n if (componentId !== this.componentId) {\n // Component has changed since we started resolving this component, bail\n return\n }\n\n page.rememberedState ??= {}\n\n const location = typeof window !== 'undefined' ? window.location : new URL(page.url)\n replace = replace || isSameUrlWithoutHash(hrefToUrl(page.url), location)\n\n return new Promise((resolve) => {\n replace ? history.replaceState(page, () => resolve(null)) : history.pushState(page, () => resolve(null))\n }).then(() => {\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({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n Scroll.reset()\n }\n\n eventHandler.fireInternalEvent('loadDeferredProps')\n\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n })\n })\n }\n\n public setQuietly(\n page: Page,\n {\n preserveState = false,\n }: {\n preserveState?: PreserveStateOption\n } = {},\n ) {\n return this.resolve(page.component).then((component) => {\n this.page = page\n this.cleared = false\n history.setCurrent(page)\n return this.swap({ component, page, preserveState })\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 get(): Page {\n return this.page\n }\n\n public merge(data: Partial<Page>): void {\n this.page = { ...this.page, ...data }\n }\n\n public setUrlHash(hash: string): void {\n if (!this.page.url.includes(hash)) {\n this.page.url += hash\n }\n }\n\n public remember(data: Page['rememberedState']): void {\n this.page.rememberedState = data\n }\n\n public swap({\n component,\n page,\n preserveState,\n }: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n }): Promise<unknown> {\n return this.swapComponent({ component, page, preserveState })\n }\n\n public resolve(component: string): Promise<Component> {\n return Promise.resolve(this.resolveComponent(component))\n }\n\n public isTheSame(page: Page): boolean {\n return this.page.component === page.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", "export default class Queue<T> {\n protected items: (() => T)[] = []\n protected processingPromise: Promise<void> | null = null\n\n public add(item: () => T) {\n this.items.push(item)\n return this.process()\n }\n\n public process() {\n this.processingPromise ??= this.processNext().finally(() => {\n this.processingPromise = null\n })\n\n return this.processingPromise\n }\n\n protected processNext(): Promise<void> {\n const next = this.items.shift()\n\n if (next) {\n return Promise.resolve(next()).then(() => this.processNext())\n }\n\n return Promise.resolve()\n }\n}\n", "import { decryptHistory, encryptHistory, historySessionStorageKeys } from './encryption'\nimport { page as currentPage } from './page'\nimport Queue from './queue'\nimport { SessionStorage } from './sessionStorage'\nimport { Page, ScrollRegion } from './types'\n\nconst isServer = typeof window === 'undefined'\nconst queue = new Queue<Promise<void>>()\nconst isChromeIOS = !isServer && /CriOS/.test(window.navigator.userAgent)\n\nclass History {\n public rememberedState = 'rememberedState' as const\n public scrollRegions = 'scrollRegions' as const\n public preserveUrl = false\n protected current: Partial<Page> = {}\n // We need initialState for `restore`\n protected initialState: Partial<Page> | null = null\n\n public remember(data: unknown, key: string): void {\n this.replaceState({\n ...currentPage.get(),\n rememberedState: {\n ...(currentPage.get()?.rememberedState ?? {}),\n [key]: data,\n },\n })\n }\n\n public restore(key: string): unknown {\n if (!isServer) {\n return this.current[this.rememberedState]\n ? this.current[this.rememberedState]?.[key]\n : this.initialState?.[this.rememberedState]?.[key]\n }\n }\n\n public pushState(page: Page, cb: (() => void) | null = null): void {\n if (isServer) {\n return\n }\n\n if (this.preserveUrl) {\n cb && cb()\n return\n }\n\n this.current = page\n\n queue.add(() => {\n return this.getPageData(page).then((data) => {\n // Defer history.pushState to the next event loop tick to prevent timing conflicts.\n // Ensure any previous history.replaceState completes before pushState is executed.\n const doPush = () => {\n this.doPushState({ page: data }, page.url)\n cb && cb()\n }\n\n if (isChromeIOS) {\n setTimeout(doPush)\n } else {\n doPush()\n }\n })\n })\n }\n\n protected getPageData(page: Page): Promise<Page | ArrayBuffer> {\n return new Promise((resolve) => {\n return page.encryptHistory ? encryptHistory(page).then(resolve) : resolve(page)\n })\n }\n\n public processQueue(): Promise<void> {\n return queue.process()\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 if (this.initialState === null) {\n this.initialState = data ?? undefined\n } else {\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 saveScrollPositions(scrollRegions: ScrollRegion[]): void {\n queue.add(() => {\n return Promise.resolve().then(() => {\n if (!window.history.state?.page) {\n return\n }\n\n this.doReplaceState({\n page: window.history.state.page,\n scrollRegions,\n })\n })\n })\n }\n\n public saveDocumentScrollPosition(scrollRegion: ScrollRegion): void {\n queue.add(() => {\n return Promise.resolve().then(() => {\n if (!window.history.state?.page) {\n return\n }\n\n this.doReplaceState({\n page: window.history.state.page,\n documentScrollPosition: scrollRegion,\n })\n })\n })\n }\n\n public getScrollRegions(): ScrollRegion[] {\n return window.history.state?.scrollRegions || []\n }\n\n public getDocumentScrollPosition(): ScrollRegion {\n return window.history.state?.documentScrollPosition || { top: 0, left: 0 }\n }\n\n public replaceState(page: Page, cb: (() => void) | null = null): void {\n currentPage.merge(page)\n\n if (isServer) {\n return\n }\n\n if (this.preserveUrl) {\n cb && cb()\n return\n }\n\n this.current = page\n\n queue.add(() => {\n return this.getPageData(page).then((data) => {\n // Defer history.replaceState to the next event loop tick to prevent timing conflicts.\n // Ensure any previous history.pushState completes before replaceState is executed.\n const doReplace = () => {\n this.doReplaceState({ page: data }, page.url)\n cb && cb()\n }\n\n if (isChromeIOS) {\n setTimeout(doReplace)\n } else {\n doReplace()\n }\n })\n })\n }\n\n protected doReplaceState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url?: string,\n ): void {\n window.history.replaceState(\n {\n ...data,\n scrollRegions: data.scrollRegions ?? window.history.state?.scrollRegions,\n documentScrollPosition: data.documentScrollPosition ?? window.history.state?.documentScrollPosition,\n },\n '',\n url,\n )\n }\n\n protected doPushState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url: string,\n ): void {\n window.history.pushState(data, '', url)\n }\n\n public getState<T>(key: keyof Page, defaultValue?: T): any {\n return this.current?.[key] ?? defaultValue\n }\n\n public deleteState(key: keyof Page) {\n if (this.current[key] !== undefined) {\n delete this.current[key]\n this.replaceState(this.current as Page)\n }\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 setCurrent(page: Page): void {\n this.current = page\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\nif (typeof window !== 'undefined' && window.history.scrollRestoration) {\n window.history.scrollRestoration = 'manual'\n}\n\nexport const history = new History()\n", "import debounce from './debounce'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { router } from './index'\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 window.addEventListener('scroll', debounce(Scroll.onWindowScroll.bind(Scroll), 100), true)\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.get().url)\n url.hash = window.location.hash\n\n history.replaceState({ ...currentPage.get(), url: url.href })\n Scroll.reset()\n\n return\n }\n\n if (!history.isValidState(state)) {\n return this.onMissingHistoryItem()\n }\n\n history\n .decrypt(state.page)\n .then((data) => {\n if (currentPage.get().version !== data.version) {\n this.onMissingHistoryItem()\n return\n }\n\n // Cancel ongoing requests\n router.cancelAll()\n\n currentPage.setQuietly(data, { preserveState: false }).then(() => {\n window.requestAnimationFrame(() => {\n Scroll.restore(history.getScrollRegions())\n })\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n this.onMissingHistoryItem()\n })\n }\n}\n\nexport const eventHandler = new EventHandler()\n", "class NavigationType {\n protected type: NavigationTimingType\n\n public constructor() {\n this.type = this.resolveType()\n }\n\n protected resolveType(): NavigationTimingType {\n if (typeof window === 'undefined') {\n return 'navigate'\n }\n\n if (\n window.performance &&\n window.performance.getEntriesByType &&\n window.performance.getEntriesByType('navigation').length > 0\n ) {\n return (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n }\n\n return 'navigate'\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 } from './types'\n\nexport class InitialVisit {\n public static handle(): void {\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.deleteState(history.rememberedState)\n }\n }\n\n protected static handleBackForward(): boolean {\n if (!navigationType.isBackForward() || !history.hasAnyState()) {\n return false\n }\n\n const scrollRegions = history.getScrollRegions()\n\n history\n .decrypt()\n .then((data) => {\n currentPage.set(data, { preserveScroll: true, preserveState: true }).then(() => {\n Scroll.restore(scrollRegions)\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(currentPage.get())\n .then(() => {\n const rememberedState = history.getState<Page['rememberedState']>(history.rememberedState, {})\n const scrollRegions = history.getScrollRegions()\n currentPage.remember(rememberedState)\n\n currentPage\n .set(currentPage.get(), {\n preserveScroll: locationVisit.preserveScroll,\n preserveState: true,\n })\n .then(() => {\n if (locationVisit.preserveScroll) {\n Scroll.restore(scrollRegions)\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(), { preserveScroll: true, preserveState: true }).then(() => {\n if (navigationType.isReload()) {\n Scroll.restore(history.getScrollRegions())\n }\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", "import { cloneDeep } from 'lodash-es'\nimport { 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(\n params: ActiveVisit,\n sendFunc: (params: InternalActiveVisit) => void,\n { cacheFor, cacheTags }: PrefetchOptions,\n ) {\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 onPrefetchError(error) {\n prefetchedRequests.removeFromInFlight(params)\n reject(error)\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: expires === 0,\n timestamp: Date.now(),\n inFlight: false,\n tags: Array.isArray(cacheTags) ? cacheTags : [cacheTags],\n })\n\n this.scheduleForRemoval(params, expires)\n this.removeFromInFlight(params)\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 removeByTags(tags: string[]): void {\n this.cached = this.cached.filter((prefetched) => {\n return !prefetched.tags.some((tag) => tags.includes(tag))\n })\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 removeFromInFlight(params: ActiveVisit): void {\n this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {\n return !this.paramsAreEqual(prefetching.params, params)\n })\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 withoutPurposePrefetchHeader(params: ActiveVisit): ActiveVisit {\n const newParams = cloneDeep(params)\n if (newParams.headers['Purpose'] === 'prefetch') {\n delete newParams.headers['Purpose']\n }\n return newParams\n }\n\n protected paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean {\n return objectsAreEqual<ActiveVisit>(\n this.withoutPurposePrefetchHeader(params1),\n this.withoutPurposePrefetchHeader(params2),\n [\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}\n\nexport const prefetchedRequests = new PrefetchedRequests()\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 { 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 } 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\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 if (originallyPrefetch) {\n this.requestParams.onPrefetchError(error)\n }\n\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 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 onPrefetchError: params.onPrefetchError || (() => {}),\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' ? null : 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 onPrefetchError(error: Error) {\n if (this.params.onPrefetchError) {\n this.params.onPrefetchError(error)\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.get().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.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 { router } from '.'\nimport { fireErrorEvent, fireInvalidEvent, firePrefetchedEvent, fireSuccessEvent } from './events'\nimport { history } from './history'\nimport modal from './modal'\nimport { page as currentPage } from './page'\nimport Queue from './queue'\nimport { RequestParams } from './requestParams'\nimport { SessionStorage } from './sessionStorage'\nimport { ActiveVisit, ErrorBag, Errors, Page } from './types'\nimport { hrefToUrl, isSameUrlWithoutHash, setHashIfSameUrl } from './url'\n\nconst queue = new Queue<Promise<boolean | void>>()\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 return queue.add(() => this.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.setPage()\n\n const errors = currentPage.get().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 router.flushByCacheTags(this.requestParams.all().invalidateCacheTags || [])\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 setPage(): Promise<void> {\n const pageResponse = this.getDataFromResponse(this.response.data)\n\n if (!this.shouldSetPage(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.get().url : this.pageUrl(pageResponse)\n\n return currentPage.set(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 shouldSetPage(pageResponse: Page): boolean {\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.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.component !== currentPage.get().component) {\n return false\n }\n\n const originatingUrl = hrefToUrl(this.originatingPage.url)\n const currentPageUrl = hrefToUrl(currentPage.get().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: Page) {\n const responseUrl = hrefToUrl(pageResponse.url)\n\n setHashIfSameUrl(this.requestParams.all().url, responseUrl)\n\n return responseUrl.pathname + responseUrl.search + responseUrl.hash\n }\n\n protected mergeProps(pageResponse: Page): void {\n if (!this.requestParams.isPartial() || pageResponse.component !== currentPage.get().component) {\n return\n }\n\n const propsToMerge = pageResponse.mergeProps || []\n const propsToDeepMerge = pageResponse.deepMergeProps || []\n const matchPropsOn = pageResponse.matchPropsOn || []\n\n propsToMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n\n if (Array.isArray(incomingProp)) {\n pageResponse.props[prop] = this.mergeOrMatchItems(\n (currentPage.get().props[prop] || []) as any[],\n incomingProp,\n prop,\n matchPropsOn,\n )\n } else if (typeof incomingProp === 'object' && incomingProp !== null) {\n pageResponse.props[prop] = {\n ...((currentPage.get().props[prop] || []) as Record<string, any>),\n ...incomingProp,\n }\n }\n })\n\n propsToDeepMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n const currentProp = currentPage.get().props[prop]\n\n // Function to recursively merge objects and arrays\n const deepMerge = (target: any, source: any, currentKey: string) => {\n if (Array.isArray(source)) {\n return this.mergeOrMatchItems(target, source, currentKey, matchPropsOn)\n }\n\n if (typeof source === 'object' && source !== null) {\n // Merge objects by iterating over keys\n return Object.keys(source).reduce(\n (acc, key) => {\n acc[key] = deepMerge(target ? target[key] : undefined, source[key], `${currentKey}.${key}`)\n return acc\n },\n { ...target },\n )\n }\n\n // f the source is neither an array nor an object, simply return the it\n return source\n }\n\n // Apply the deep merge and update the page response\n pageResponse.props[prop] = deepMerge(currentProp, incomingProp, prop)\n })\n\n pageResponse.props = { ...currentPage.get().props, ...pageResponse.props }\n }\n\n protected mergeOrMatchItems(target: any[], source: any[], currentKey: string, matchPropsOn: string[]) {\n // Determine if there's a specific key to match items.\n // E.g.: matchPropsOn = ['posts.data.id'] and currentKey = 'posts.data' will match.\n const matchOn = matchPropsOn.find((key) => {\n const path = key.split('.').slice(0, -1).join('.')\n return path === currentKey\n })\n\n if (!matchOn) {\n // No key found to match on, just concatenate the arrays\n return [...(Array.isArray(target) ? target : []), ...source]\n }\n\n // Extract the unique property name to match items (e.g., 'id' from 'posts.data.id').\n const uniqueProperty = matchOn.split('.').pop() || ''\n const targetArray = Array.isArray(target) ? target : []\n const map = new Map<any, any>()\n\n // Populate the map with items from the target array, using the unique property as the key.\n // If an item doesn't have the unique property or isn't an object, a unique Symbol is used as the key.\n targetArray.forEach((item) => {\n if (item && typeof item === 'object' && uniqueProperty in item) {\n map.set(item[uniqueProperty], item)\n } else {\n map.set(Symbol(), item)\n }\n })\n\n // Iterate through the source array. If an item's unique property matches an existing key in the map,\n // update the item. Otherwise, add the new item to the map.\n source.forEach((item) => {\n if (item && typeof item === 'object' && uniqueProperty in item) {\n map.set(item[uniqueProperty], item)\n } else {\n map.set(Symbol(), item)\n }\n })\n\n return Array.from(map.values())\n }\n\n protected async setRememberedState(pageResponse: Page): Promise<void> {\n const rememberedState = await history.getState<Page['rememberedState']>(history.rememberedState, {})\n\n if (\n this.requestParams.all().preserveState &&\n rememberedState &&\n pageResponse.component === currentPage.get().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 ClientSideVisitOptions,\n Component,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Method,\n Page,\n PendingVisit,\n PendingVisitOptions,\n PollOptions,\n PrefetchedResponse,\n PrefetchOptions,\n ReloadOptions,\n RequestPayload,\n RouterInitParams,\n UrlMethodPair,\n Visit,\n VisitCallbacks,\n VisitHelperOptions,\n VisitOptions,\n} from './types'\nimport { isUrlMethodPair, transformUrlAndData } from './url'\n\nexport class Router {\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 public init({ initialPage, resolveComponent, swapComponent }: RouterInitParams): void {\n currentPage.init({\n initialPage,\n resolveComponent,\n swapComponent,\n })\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<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { ...options, method: 'get', data })\n }\n\n public post<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'post', data })\n }\n\n public put<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'put', data })\n }\n\n public patch<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'patch', data })\n }\n\n public delete<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n options: Omit<VisitOptions<T>, 'method'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'delete' })\n }\n\n public reload<T extends RequestPayload = RequestPayload>(options: ReloadOptions<T> = {}): 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(data, key)\n }\n\n public restore(key = 'default'): unknown {\n return history.restore(key)\n }\n\n public on<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n if (typeof window === 'undefined') {\n return () => {}\n }\n\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<T extends RequestPayload = RequestPayload>(\n href: string | URL | UrlMethodPair,\n options: VisitOptions<T> = {},\n ): void {\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n showProgress: options.showProgress ?? !options.async,\n } as VisitOptions)\n\n const events = this.getVisitEvents(options as VisitOptions)\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()\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(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n ): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findCached(this.getPrefetchParams(href, options))\n }\n\n public flush(href: string | URL | UrlMethodPair, options: VisitOptions = {}): void {\n prefetchedRequests.remove(this.getPrefetchParams(href, options))\n }\n\n public flushAll(): void {\n prefetchedRequests.removeAll()\n }\n\n public flushByCacheTags(tags: string | string[]): void {\n prefetchedRequests.removeByTags(Array.isArray(tags) ? tags : [tags])\n }\n\n public getPrefetching(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n ): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options))\n }\n\n public prefetch(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n prefetchOptions: Partial<PrefetchOptions> = {},\n ) {\n const method: Method = options.method ?? (isUrlMethodPair(href) ? href.method : 'get')\n\n if (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 visitUrl = visit.url.origin + visit.url.pathname + visit.url.search\n const currentUrl = window.location.origin + window.location.pathname + window.location.search\n\n if (visitUrl === currentUrl) {\n // Don't prefetch the current page, you're already on it\n return\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 const ensureCurrentPageIsSet = (): Promise<void> => {\n return new Promise((resolve) => {\n const checkIfPageIsDefined = () => {\n if (currentPage.get()) {\n resolve()\n } else {\n setTimeout(checkIfPageIsDefined, 50)\n }\n }\n\n checkIfPageIsDefined()\n })\n }\n\n ensureCurrentPageIsSet().then(() => {\n prefetchedRequests.add(\n requestParams,\n (params) => {\n this.asyncRequestStream.send(Request.create(params, currentPage.get()))\n },\n {\n cacheFor: 30_000,\n cacheTags: [],\n ...prefetchOptions,\n },\n )\n })\n }\n\n public clearHistory(): void {\n history.clear()\n }\n\n public decryptHistory(): Promise<Page> {\n return history.decrypt()\n }\n\n public resolveComponent(component: string): Promise<Component> {\n return currentPage.resolve(component)\n }\n\n public replace<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params, { replace: true })\n }\n\n public push<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params)\n }\n\n protected clientVisit<TProps = Page['props']>(\n params: ClientSideVisitOptions<TProps>,\n { replace = false }: { replace?: boolean } = {},\n ): void {\n const current = currentPage.get()\n\n const props =\n typeof params.props === 'function' ? params.props(current.props as TProps) : (params.props ?? current.props)\n\n const { onError, onFinish, onSuccess, ...pageParams } = params\n\n currentPage\n .set(\n {\n ...current,\n ...pageParams,\n props: props as Page['props'],\n },\n {\n replace,\n preserveScroll: params.preserveScroll,\n preserveState: params.preserveState,\n },\n )\n .then(() => {\n const errors = currentPage.get().props.errors || {}\n\n if (Object.keys(errors).length === 0) {\n return onSuccess?.(currentPage.get())\n }\n\n const scopedErrors = params.errorBag ? errors[params.errorBag || ''] || {} : errors\n\n return onError?.(scopedErrors)\n })\n .finally(() => onFinish?.(params))\n }\n\n protected getPrefetchParams(href: string | URL | UrlMethodPair, 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 | UrlMethodPair,\n options: VisitOptions,\n pendingVisitOptions: Partial<PendingVisitOptions> = {},\n ): PendingVisit {\n if (isUrlMethodPair(href)) {\n const urlMethodPair = href\n href = urlMethodPair.url\n options.method = options.method ?? urlMethodPair.method\n }\n\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 invalidateCacheTags: [],\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 const visit = {\n cancelled: false,\n completed: false,\n interrupted: false,\n ...mergedOptions,\n ...pendingVisitOptions,\n url,\n data: _data,\n }\n\n if (visit.prefetch) {\n visit.headers['Purpose'] = 'prefetch'\n }\n\n return visit\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.get()?.deferredProps\n\n if (deferred) {\n Object.entries(deferred).forEach(([_, group]) => {\n this.reload({ only: group })\n })\n }\n }\n}\n", "import { get, set } from 'lodash-es'\nimport { FormDataConvertible } from './types'\n\n/**\n * Transform dotted notation to bracket notation.\n *\n * Examples:\n * user.name => user[name]\n * user.profile.city => user[profile][city]\n * user.skills[] => user[skills][]\n * users.company[address].street => users[company][address][street]\n * config\\.app\\.name => config.app.name (escaped, literal)\n */\nfunction undotKey(key: string): string {\n if (!key.includes('.')) {\n return key\n }\n\n const transformSegment = (segment: string): string => {\n if (segment.startsWith('[') && segment.endsWith(']')) {\n return segment // Already in bracket notation - leave untouched\n }\n\n // Convert dotted segment to bracket notation: \"user.name\" \u2192 \"user[name]\"\n return segment.split('.').reduce((result, part, index) => (index === 0 ? part : `${result}[${part}]`))\n }\n\n return key\n .replace(/\\\\\\./g, '__ESCAPED_DOT__') // Temporarily replace escaped dots (\\.) to protect them from transformation\n .split(/(\\[[^\\]]*\\])/) // Split on bracket notation while preserving the brackets in the result array\n .filter(Boolean) // Remove empty strings from the split operation\n .map(transformSegment) // Transform each segment: dotted parts become bracketed, existing brackets stay as-is\n .join('') // Reassemble all segments back into a single string\n .replace(/__ESCAPED_DOT__/g, '.') // Restore the escaped dots as literal dots in the final result\n}\n\n/**\n * Parse a key into an array of path segments.\n *\n * Examples:\n * - \"user[name]\" => [\"user\", \"name\"]\n * - \"tags[]\" => [\"tags\", \"\"]\n * - \"items[0][name]\" => [\"items\", 0, \"name\"]\n */\nfunction parseKey(key: string): (string | number | '')[] {\n const path: (string | number | '')[] = []\n const pattern = /([^\\[\\]]+)|\\[(\\d*)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(key)) !== null) {\n if (match[1] !== undefined) {\n path.push(match[1])\n } else if (match[2] !== undefined) {\n path.push(match[2] === '' ? '' : Number(match[2]))\n }\n }\n\n return path\n}\n\n/**\n * Convert a FormData instance into an object structure.\n */\nexport function formDataToObject(source: FormData): Record<string, FormDataConvertible> {\n const form: Record<string, any> = {}\n\n // formData.entries() returns an iterator where the first element is the key and the second element\n // is the value. Examples of the keys are \"user[name]\", \"tags[]\", \"items[0][name]\", \"user.name\", etc.\n // We should construct a new (nested) object based on these keys.\n for (const [key, value] of source.entries()) {\n if (value instanceof File && value.size === 0 && value.name === '') {\n // Check if the given value is an empty file. We want to filter\n // those out as they prevent us from comparing objects with\n // each other, which we do to set the isDirty prop.\n continue\n }\n\n const path = parseKey(undotKey(key))\n\n // If the key ends with an empty string (''), treat it as an array push (e.g., \"tags[]\")\n if (path[path.length - 1] === '') {\n const arrayPath = path.slice(0, -1)\n const existing = get(form, arrayPath)\n\n if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n set(form, arrayPath, [value])\n }\n\n continue\n }\n\n // No brackets: last value wins when multiple fields have the same key\n set(form, path, value)\n }\n\n return form\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 reconnect(id: string): void {\n if (Object.keys(states).indexOf(id) === -1) {\n states[id] = []\n }\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 reconnect: () => reconnect(id),\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n", "/**\n * Determine if this mouse event should be intercepted for navigation purposes.\n * Links with modifier keys or non-left clicks should not be intercepted.\n * Content editable elements and prevented events are ignored.\n */\nexport function shouldIntercept(\n event: Pick<\n MouseEvent,\n 'altKey' | 'ctrlKey' | 'defaultPrevented' | 'target' | 'currentTarget' | 'metaKey' | 'shiftKey' | 'button'\n >,\n): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\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\n/**\n * Determine if this keyboard event should trigger a navigation request.\n * Enter triggers navigation for both links and buttons currently.\n * Space only triggers navigation for buttons specifically.\n */\nexport function shouldNavigate(event: Pick<KeyboardEvent, 'key' | 'currentTarget'>): boolean {\n const isButton = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'button'\n\n return event.key === 'Enter' || (isButton && event.key === ' ')\n}\n", "/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\nimport { ProgressSettings } from './types'\n\nconst baseComponentSelector = 'nprogress'\n\nlet progress: HTMLDivElement\n\nconst settings: ProgressSettings = {\n minimum: 0.08,\n easing: 'linear',\n positionUsing: 'translate3d',\n speed: 200,\n trickle: true,\n trickleSpeed: 200,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n color: '#29d',\n includeCSS: true,\n template: [\n '<div class=\"bar\" role=\"bar\">',\n '<div class=\"peg\"></div>',\n '</div>',\n '<div class=\"spinner\" role=\"spinner\">',\n '<div class=\"spinner-icon\"></div>',\n '</div>',\n ].join(''),\n}\n\nlet status: number | null = null\n\nconst configure = (options: Partial<ProgressSettings>) => {\n Object.assign(settings, options)\n\n if (settings.includeCSS) {\n injectCSS(settings.color)\n }\n\n progress = document.createElement('div')\n progress.id = baseComponentSelector\n progress.innerHTML = settings.template\n}\n\n/**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n */\nconst set = (n: number) => {\n const started = isStarted()\n\n n = clamp(n, settings.minimum, 1)\n status = n === 1 ? null : n\n\n const progress = render(!started)\n const bar = progress.querySelector(settings.barSelector)! as HTMLElement\n const speed = settings.speed\n const ease = settings.easing\n\n progress.offsetWidth /* Repaint */\n\n queue((next) => {\n const barStyles = ((): Partial<CSSStyleDeclaration> => {\n if (settings.positionUsing === 'translate3d') {\n return {\n transition: `all ${speed}ms ${ease}`,\n transform: `translate3d(${toBarPercentage(n)}%,0,0)`,\n }\n }\n\n if (settings.positionUsing === 'translate') {\n return {\n transition: `all ${speed}ms ${ease}`,\n transform: `translate(${toBarPercentage(n)}%,0)`,\n }\n }\n\n return { marginLeft: `${toBarPercentage(n)}%` }\n })()\n\n for (const key in barStyles) {\n bar.style[key] = barStyles[key]!\n }\n\n if (n !== 1) {\n return setTimeout(next, speed)\n }\n\n // Fade out\n progress.style.transition = 'none'\n progress.style.opacity = '1'\n progress.offsetWidth /* Repaint */\n\n setTimeout(() => {\n progress.style.transition = `all ${speed}ms linear`\n progress.style.opacity = '0'\n\n setTimeout(() => {\n remove()\n progress.style.transition = ''\n progress.style.opacity = ''\n next()\n }, speed)\n }, speed)\n })\n}\n\nconst isStarted = () => typeof status === 'number'\n\n/**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n */\nconst start = () => {\n if (!status) {\n set(0)\n }\n\n const work = function () {\n setTimeout(function () {\n if (!status) {\n return\n }\n\n increaseByRandom()\n work()\n }, settings.trickleSpeed)\n }\n\n if (settings.trickle) {\n work()\n }\n}\n\n/**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * If `true` is passed, it will show the progress bar even if it's hidden.\n */\nconst done = (force?: boolean) => {\n if (!force && !status) {\n return\n }\n\n increaseByRandom(0.3 + 0.5 * Math.random())\n set(1)\n}\n\nconst increaseByRandom = (amount?: number) => {\n const n = status\n\n if (n === null) {\n return start()\n }\n\n if (n > 1) {\n return\n }\n\n amount =\n typeof amount === 'number'\n ? amount\n : (() => {\n const ranges: Record<number, [number, number]> = {\n 0.1: [0, 0.2],\n 0.04: [0.2, 0.5],\n 0.02: [0.5, 0.8],\n 0.005: [0.8, 0.99],\n }\n\n for (const r in ranges) {\n if (n >= ranges[r][0] && n < ranges[r][1]) {\n return parseFloat(r)\n }\n }\n\n return 0\n })()\n\n return set(clamp(n + amount, 0, 0.994))\n}\n\n/**\n * (Internal) renders the progress bar markup based on the `template` setting.\n */\nconst render = (fromStart: boolean) => {\n if (isRendered()) {\n return document.getElementById(baseComponentSelector)!\n }\n\n document.documentElement.classList.add(`${baseComponentSelector}-busy`)\n\n const bar = progress.querySelector(settings.barSelector)! as HTMLElement\n const perc = fromStart ? '-100' : toBarPercentage(status || 0)\n const parent = getParent()\n\n bar.style.transition = 'all 0 linear'\n bar.style.transform = `translate3d(${perc}%,0,0)`\n\n if (!settings.showSpinner) {\n progress.querySelector(settings.spinnerSelector)?.remove()\n }\n\n if (parent !== document.body) {\n parent.classList.add(`${baseComponentSelector}-custom-parent`)\n }\n\n parent.appendChild(progress)\n\n return progress\n}\n\nconst getParent = (): HTMLElement => {\n return (isDOM(settings.parent) ? settings.parent : document.querySelector(settings.parent)) as HTMLElement\n}\n\nconst remove = () => {\n document.documentElement.classList.remove(`${baseComponentSelector}-busy`)\n getParent().classList.remove(`${baseComponentSelector}-custom-parent`)\n progress?.remove()\n}\n\nconst isRendered = () => {\n return document.getElementById(baseComponentSelector) !== null\n}\n\nconst isDOM = (obj: any) => {\n if (typeof HTMLElement === 'object') {\n return obj instanceof HTMLElement\n }\n\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n if (n < min) {\n return min\n }\n\n if (n > max) {\n return max\n }\n\n return n\n}\n\n// Converts a percentage (`0..1`) to a bar translateX percentage (`-100%..0%`).\nconst toBarPercentage = (n: number) => (-1 + n) * 100\n\n// Queues a function to be executed.\nconst queue = (() => {\n const pending: ((...args: any[]) => any)[] = []\n\n const next = () => {\n const fn = pending.shift()\n\n if (fn) {\n fn(next)\n }\n }\n\n return (fn: (...args: any[]) => any) => {\n pending.push(fn)\n\n if (pending.length === 1) {\n next()\n }\n }\n})()\n\nconst injectCSS = (color: string): void => {\n const element = document.createElement('style')\n\n element.textContent = `\n #${baseComponentSelector} {\n pointer-events: none;\n }\n\n #${baseComponentSelector} .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 #${baseComponentSelector} .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 transform: rotate(3deg) translate(0px, -4px);\n }\n\n #${baseComponentSelector} .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #${baseComponentSelector} .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 animation: ${baseComponentSelector}-spinner 400ms linear infinite;\n }\n\n .${baseComponentSelector}-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .${baseComponentSelector}-custom-parent #${baseComponentSelector} .spinner,\n .${baseComponentSelector}-custom-parent #${baseComponentSelector} .bar {\n position: absolute;\n }\n\n @keyframes ${baseComponentSelector}-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nconst show = () => {\n if (progress) {\n progress.style.display = ''\n }\n}\n\nconst hide = () => {\n if (progress) {\n progress.style.display = 'none'\n }\n}\n\nexport default {\n configure,\n isStarted,\n done,\n set,\n remove,\n start,\n status,\n show,\n hide,\n}\n", "import ProgressComponent from './progress-component'\nimport { GlobalEvent } from './types'\n\nlet hideCount = 0\n\nexport const reveal = (force = false) => {\n hideCount = Math.max(0, hideCount - 1)\n\n if (force || hideCount === 0) {\n ProgressComponent.show()\n }\n}\n\nexport const hide = () => {\n hideCount++\n\n ProgressComponent.hide()\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(() => ProgressComponent.start(), delay)\n document.addEventListener('inertia:finish', (e) => finish(e, timeout), { once: true })\n}\n\nfunction progress(event: GlobalEvent<'progress'>): void {\n if (ProgressComponent.isStarted() && event.detail.progress?.percentage) {\n ProgressComponent.set(Math.max(ProgressComponent.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 (!ProgressComponent.isStarted()) {\n return\n }\n\n if (event.detail.visit.completed) {\n ProgressComponent.done()\n } else if (event.detail.visit.interrupted) {\n ProgressComponent.set(0)\n } else if (event.detail.visit.cancelled) {\n ProgressComponent.done()\n ProgressComponent.remove()\n }\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n ProgressComponent.configure({ showSpinner, includeCSS, color })\n}\n", "type FormElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n\nfunction isFormElement(element: Element): element is FormElement {\n return (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n )\n}\n\nfunction resetInputElement(input: HTMLInputElement, defaultValues: FormDataEntryValue[]): boolean {\n const oldValue = input.value\n const oldChecked = input.checked\n\n switch (input.type.toLowerCase()) {\n case 'checkbox':\n // For checkboxes, check if the input's value is in the array of default values\n input.checked = defaultValues.includes(input.value)\n break\n case 'radio':\n // For radios, only use the first default value to avoid multiple radios being checked\n input.checked = defaultValues[0] === input.value\n break\n case 'file':\n input.value = ''\n break\n case 'button':\n case 'submit':\n case 'reset':\n case 'image':\n // These input types don't carry form state\n break\n default:\n // text, email, number, date, etc. - use first default value\n input.value = defaultValues[0] !== null && defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n }\n\n // Return true if the value actually changed\n return input.value !== oldValue || input.checked !== oldChecked\n}\n\nfunction resetSelectElement(select: HTMLSelectElement, defaultValues: FormDataEntryValue[]): boolean {\n const oldValue = select.value\n const oldSelectedOptions = Array.from(select.selectedOptions).map((opt) => opt.value)\n\n if (select.multiple) {\n // For multi-select, select all options that match any of the default values\n const defaultStrings = defaultValues.map((value) => String(value))\n\n Array.from(select.options).forEach((option) => {\n option.selected = defaultStrings.includes(option.value)\n })\n } else {\n // For single select, use the first default value (or empty string)\n select.value = defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n }\n\n // Check if selection actually changed\n const newSelectedOptions = Array.from(select.selectedOptions).map((opt) => opt.value)\n const hasChanged = select.multiple\n ? JSON.stringify(oldSelectedOptions.sort()) !== JSON.stringify(newSelectedOptions.sort())\n : select.value !== oldValue\n\n return hasChanged\n}\n\nfunction resetFormElement(element: FormElement, defaultValues: FormDataEntryValue[]): boolean {\n if (element.disabled) {\n // For disabled elements, use their DOM defaultValue since they're not in FormData\n if (element instanceof HTMLInputElement) {\n const oldValue = element.value\n const oldChecked = element.checked\n\n switch (element.type.toLowerCase()) {\n case 'checkbox':\n case 'radio':\n element.checked = element.defaultChecked\n return element.checked !== oldChecked\n case 'file':\n element.value = ''\n return oldValue !== ''\n case 'button':\n case 'submit':\n case 'reset':\n case 'image':\n // These input types don't carry form state\n return false\n default:\n element.value = element.defaultValue\n return element.value !== oldValue\n }\n } else if (element instanceof HTMLSelectElement) {\n // Reset select to default selected options\n const oldSelectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value)\n\n Array.from(element.options).forEach((option) => {\n option.selected = option.defaultSelected\n })\n\n const newSelectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value)\n return JSON.stringify(oldSelectedOptions.sort()) !== JSON.stringify(newSelectedOptions.sort())\n } else if (element instanceof HTMLTextAreaElement) {\n const oldValue = element.value\n element.value = element.defaultValue\n return element.value !== oldValue\n }\n\n return false\n }\n\n if (element instanceof HTMLInputElement) {\n // Pass all default values to handle checkboxes and radios correctly\n return resetInputElement(element, defaultValues)\n } else if (element instanceof HTMLSelectElement) {\n return resetSelectElement(element, defaultValues)\n } else if (element instanceof HTMLTextAreaElement) {\n const oldValue = element.value\n element.value = defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n return element.value !== oldValue\n }\n\n return false\n}\n\nfunction resetFieldElements(\n elements: Element | RadioNodeList | HTMLCollection,\n defaultValues: FormDataEntryValue[],\n): boolean {\n let hasChanged = false\n\n if (elements instanceof RadioNodeList || elements instanceof HTMLCollection) {\n // Handle multiple elements with the same name (e.g., radio buttons, checkboxes, array fields)\n Array.from(elements).forEach((node, index) => {\n if (node instanceof Element && isFormElement(node)) {\n if (node instanceof HTMLInputElement && ['checkbox', 'radio'].includes(node.type.toLowerCase())) {\n // For checkboxes and radios, pass all default values for value-based matching\n if (resetFormElement(node, defaultValues)) {\n hasChanged = true\n }\n } else {\n // For other array elements (like text inputs), use index-based matching\n const indexedDefaultValues =\n defaultValues[index] !== undefined ? [defaultValues[index]] : [defaultValues[0] ?? null].filter(Boolean)\n\n if (resetFormElement(node, indexedDefaultValues)) {\n hasChanged = true\n }\n }\n }\n })\n } else if (isFormElement(elements)) {\n // Handle single element - pass all default values (important for multi-selects)\n hasChanged = resetFormElement(elements, defaultValues)\n }\n\n return hasChanged\n}\n\nexport function resetFormFields(formElement: HTMLFormElement, defaults: FormData, fieldNames?: string[]): void {\n if (!formElement) {\n return\n }\n\n // If no specific fields provided, reset the entire form\n if (!fieldNames || fieldNames.length === 0) {\n // Get all field names from both defaults and form elements (including disabled ones)\n const formData = new FormData(formElement)\n const formElementNames = Array.from(formElement.elements)\n .map((el) => (isFormElement(el) ? el.name : ''))\n .filter(Boolean)\n fieldNames = [...new Set([...defaults.keys(), ...formData.keys(), ...formElementNames])]\n }\n\n let hasChanged = false\n\n fieldNames.forEach((fieldName) => {\n const elements = formElement.elements.namedItem(fieldName)\n\n if (elements) {\n if (resetFieldElements(elements, defaults.getAll(fieldName))) {\n hasChanged = true\n }\n }\n })\n\n // Dispatch reset event if any field changed (matching native form.reset() behavior)\n if (hasChanged) {\n formElement.dispatchEvent(new Event('reset', { bubbles: true }))\n }\n}\n", "import { Router } from './router'\n\nexport { objectToFormData } from './formData'\nexport { formDataToObject } from './formObject'\nexport { default as createHeadManager } from './head'\nexport { shouldIntercept, shouldNavigate } from './navigationEvents'\nexport { hide as hideProgress, reveal as revealProgress, default as setupProgress } from './progress'\nexport { resetFormFields } from './resetFormFields'\nexport * from './types'\nexport { hrefToUrl, isUrlMethodPair, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { type Router }\n\nexport const router = new Router()\n"],
5
+ "mappings": "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",
6
6
  "names": ["page", "progress", "page", "page", "page", "page", "queue", "status", "page", "progress", "element", "isServer", "elements", "title", "set", "progress", "queue", "hide", "start", "progress"]
7
7
  }