@inertiajs/core 1.0.0-beta.1 → 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server.esm.js +0 -4
- package/dist/server.esm.js.map +1 -1
- package/dist/server.js +0 -4
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/modal.ts","../src/debounce.ts","../src/formData.ts","../src/url.ts","../src/events.ts","../src/types.ts","../src/router.ts","../src/files.ts","../src/progress.ts","../src/head.ts","../src/shouldIntercept.ts","../src/index.ts"],"sourcesContent":["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","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 { FormDataConvertible } from './types'\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 * as qs from 'qs'\nimport deepmerge from 'deepmerge'\nimport { FormDataConvertible, Method } from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), window.location.toString())\n}\n\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === Method.GET && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === Method.GET && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n","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","import { AxiosResponse, CancelTokenSource } from 'axios'\n\nexport type Errors = Record<string, string>\nexport type ErrorBag = Record<string, Errors>\n\nexport type FormDataConvertible =\n | Array<FormDataConvertible>\n | Blob\n | FormDataEntryValue\n | Date\n | boolean\n | number\n | null\n | undefined\n\nexport enum Method {\n GET = 'get',\n POST = 'post',\n PUT = 'put',\n PATCH = 'patch',\n DELETE = 'delete',\n}\n\nexport type RequestPayload = Record<string, FormDataConvertible> | FormData\n\nexport interface PageProps {\n [key: string]: unknown\n}\n\nexport interface Page<SharedProps = PageProps> {\n component: string\n props: PageProps &\n SharedProps & {\n errors: Errors & ErrorBag\n }\n url: string\n version: string | null\n\n // Refactor away\n scrollRegions: Array<{ top: number; left: number }>\n rememberedState: Record<string, unknown>\n resolvedErrors: Errors\n}\n\nexport type PageResolver = (name: string) => Component\n\nexport type PageHandler = ({\n component,\n page,\n preserveState,\n}: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n}) => Promise<unknown>\n\nexport type PreserveStateOption = boolean | string | ((page: Page) => boolean)\n\nexport type Progress = ProgressEvent & { percentage: number }\n\nexport type LocationVisit = {\n preserveScroll: boolean\n}\n\nexport type Visit = {\n method: Method\n data: RequestPayload\n replace: boolean\n preserveScroll: PreserveStateOption\n preserveState: PreserveStateOption\n only: Array<string>\n headers: Record<string, string>\n errorBag: string | null\n forceFormData: boolean\n queryStringArrayFormat: 'indices' | 'brackets'\n}\n\nexport type GlobalEventsMap = {\n before: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: boolean | void\n }\n start: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: void\n }\n progress: {\n parameters: [Progress | undefined]\n details: {\n progress: Progress | undefined\n }\n result: void\n }\n finish: {\n parameters: [ActiveVisit]\n details: {\n visit: ActiveVisit\n }\n result: void\n }\n cancel: {\n parameters: []\n details: {}\n result: void\n }\n navigate: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n success: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n error: {\n parameters: [Errors]\n details: {\n errors: Errors\n }\n result: void\n }\n invalid: {\n parameters: [AxiosResponse]\n details: {\n response: AxiosResponse\n }\n result: boolean | void\n }\n exception: {\n parameters: [Error]\n details: {\n exception: Error\n }\n result: boolean | void\n }\n}\n\nexport type GlobalEventNames = keyof GlobalEventsMap\n\nexport type GlobalEvent<TEventName extends GlobalEventNames> = CustomEvent<GlobalEventDetails<TEventName>>\n\nexport type GlobalEventParameters<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['parameters']\n\nexport type GlobalEventResult<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['result']\n\nexport type GlobalEventDetails<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['details']\n\nexport type GlobalEventTrigger<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type GlobalEventCallback<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type VisitOptions = Partial<\n Visit & {\n onCancelToken: { ({ cancel }: { cancel: VoidFunction }): void }\n onBefore: GlobalEventCallback<'before'>\n onStart: GlobalEventCallback<'start'>\n onProgress: GlobalEventCallback<'progress'>\n onFinish: GlobalEventCallback<'finish'>\n onCancel: GlobalEventCallback<'cancel'>\n onSuccess: GlobalEventCallback<'success'>\n onError: GlobalEventCallback<'error'>\n }\n>\n\nexport type PendingVisit = Visit & {\n url: URL\n completed: boolean\n cancelled: boolean\n interrupted: boolean\n}\n\nexport type ActiveVisit = PendingVisit &\n Required<VisitOptions> & {\n cancelToken: CancelTokenSource\n }\n\nexport type VisitId = unknown\nexport type Component = unknown\n\nexport type InertiaAppResponse = Promise<{ head: string[]; body: string } | void>\n\ndeclare global {\n interface DocumentEventMap {\n 'inertia:before': GlobalEvent<'before'>\n 'inertia:start': GlobalEvent<'start'>\n 'inertia:progress': GlobalEvent<'progress'>\n 'inertia:success': GlobalEvent<'success'>\n 'inertia:error': GlobalEvent<'error'>\n 'inertia:invalid': GlobalEvent<'invalid'>\n 'inertia:exception': GlobalEvent<'exception'>\n 'inertia:finish': GlobalEvent<'finish'>\n 'inertia:navigate': GlobalEvent<'navigate'>\n }\n}\n","import modal from './modal'\nimport debounce from './debounce'\nimport { hasFiles } from './files'\nimport { objectToFormData } from './formData'\nimport { default as Axios, AxiosResponse } from 'axios'\nimport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nimport {\n ActiveVisit,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n LocationVisit,\n Method,\n Page,\n PageHandler,\n PageResolver,\n PendingVisit,\n PreserveStateOption,\n RequestPayload,\n VisitId,\n VisitOptions,\n} from './types'\nimport {\n fireBeforeEvent,\n fireErrorEvent,\n fireExceptionEvent,\n fireFinishEvent,\n fireInvalidEvent,\n fireNavigateEvent,\n fireProgressEvent,\n fireStartEvent,\n fireSuccessEvent,\n} from './events'\n\nconst isServer = typeof window === 'undefined'\n\nexport class Router {\n protected page!: Page\n protected resolveComponent!: PageResolver\n protected swapComponent!: PageHandler\n protected navigationType?: string\n protected activeVisit?: ActiveVisit\n protected visitId: VisitId = null\n\n public init({\n initialPage,\n resolveComponent,\n swapComponent,\n }: {\n initialPage: Page\n resolveComponent: PageResolver\n swapComponent: PageHandler\n }): void {\n this.page = initialPage\n this.resolveComponent = resolveComponent\n this.swapComponent = swapComponent\n\n this.setNavigationType()\n this.clearRememberedStateOnReload()\n\n if (this.isBackForwardVisit()) {\n this.handleBackForwardVisit(this.page)\n } else if (this.isLocationVisit()) {\n this.handleLocationVisit(this.page)\n } else {\n this.handleInitialPageVisit(this.page)\n }\n\n this.setupEventListeners()\n }\n\n protected setNavigationType(): void {\n this.navigationType =\n window.performance && window.performance.getEntriesByType('navigation').length > 0\n ? (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n : 'navigate'\n }\n\n protected clearRememberedStateOnReload(): void {\n if (this.navigationType === 'reload' && window.history.state?.rememberedState) {\n delete window.history.state.rememberedState\n }\n }\n\n protected handleInitialPageVisit(page: Page): void {\n this.page.url += window.location.hash\n this.setPage(page, { preserveState: true }).then(() => fireNavigateEvent(page))\n }\n\n protected setupEventListeners(): void {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n document.addEventListener('scroll', debounce(this.handleScrollEvent.bind(this), 100), true)\n }\n\n protected scrollRegions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n protected handleScrollEvent(event: Event): void {\n if (\n typeof (event.target as Element).hasAttribute === 'function' &&\n (event.target as Element).hasAttribute('scroll-region')\n ) {\n this.saveScrollPositions()\n }\n }\n\n protected saveScrollPositions(): void {\n this.replaceState({\n ...this.page,\n scrollRegions: Array.from(this.scrollRegions()).map((region) => {\n return {\n top: region.scrollTop,\n left: region.scrollLeft,\n }\n }),\n })\n }\n\n protected resetScrollPositions(): void {\n window.scrollTo(0, 0)\n this.scrollRegions().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 this.saveScrollPositions()\n if (window.location.hash) {\n document.getElementById(window.location.hash.slice(1))?.scrollIntoView()\n }\n }\n\n protected restoreScrollPositions(): void {\n if (this.page.scrollRegions) {\n this.scrollRegions().forEach((region: Element, index: number) => {\n const scrollPosition = this.page.scrollRegions[index]\n if (!scrollPosition) {\n return\n } else 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\n protected isBackForwardVisit(): boolean {\n return window.history.state && this.navigationType === 'back_forward'\n }\n\n protected handleBackForwardVisit(page: Page): void {\n window.history.state.version = page.version\n this.setPage(window.history.state, { preserveScroll: true, preserveState: true }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n\n protected locationVisit(url: URL, preserveScroll: LocationVisit['preserveScroll']): boolean | void {\n try {\n const locationVisit: LocationVisit = { preserveScroll }\n window.sessionStorage.setItem('inertiaLocationVisit', JSON.stringify(locationVisit))\n window.location.href = url.href\n if (urlWithoutHash(window.location).href === urlWithoutHash(url).href) {\n window.location.reload()\n }\n } catch (error) {\n return false\n }\n }\n\n protected isLocationVisit(): boolean {\n try {\n return window.sessionStorage.getItem('inertiaLocationVisit') !== null\n } catch (error) {\n return false\n }\n }\n\n protected handleLocationVisit(page: Page): void {\n const locationVisit: LocationVisit = JSON.parse(window.sessionStorage.getItem('inertiaLocationVisit') || '')\n window.sessionStorage.removeItem('inertiaLocationVisit')\n page.url += window.location.hash\n page.rememberedState = window.history.state?.rememberedState ?? {}\n page.scrollRegions = window.history.state?.scrollRegions ?? []\n this.setPage(page, { preserveScroll: locationVisit.preserveScroll, preserveState: true }).then(() => {\n if (locationVisit.preserveScroll) {\n this.restoreScrollPositions()\n }\n fireNavigateEvent(page)\n })\n }\n\n protected isLocationVisitResponse(response: AxiosResponse): boolean {\n return !!(response && response.status === 409 && response.headers['x-inertia-location'])\n }\n\n protected isInertiaResponse(response: AxiosResponse): boolean {\n return !!response?.headers['x-inertia']\n }\n\n protected createVisitId(): VisitId {\n this.visitId = {}\n return this.visitId\n }\n\n protected cancelVisit(\n activeVisit: ActiveVisit,\n { cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean },\n ): void {\n if (activeVisit && !activeVisit.completed && !activeVisit.cancelled && !activeVisit.interrupted) {\n activeVisit.cancelToken.cancel()\n activeVisit.onCancel()\n activeVisit.completed = false\n activeVisit.cancelled = cancelled\n activeVisit.interrupted = interrupted\n fireFinishEvent(activeVisit)\n activeVisit.onFinish(activeVisit)\n }\n }\n\n protected finishVisit(visit: ActiveVisit): void {\n if (!visit.cancelled && !visit.interrupted) {\n visit.completed = true\n visit.cancelled = false\n visit.interrupted = false\n fireFinishEvent(visit)\n visit.onFinish(visit)\n }\n }\n\n protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean | string {\n if (typeof value === 'function') {\n return value(page)\n } else if (value === 'errors') {\n return Object.keys(page.props.errors || {}).length > 0\n } else {\n return value\n }\n }\n\n public visit(\n href: string | URL,\n {\n method = Method.GET,\n data = {},\n replace = false,\n preserveScroll = false,\n preserveState = false,\n only = [],\n headers = {},\n errorBag = '',\n forceFormData = false,\n onCancelToken = () => {},\n onBefore = () => {},\n onStart = () => {},\n onProgress = () => {},\n onFinish = () => {},\n onCancel = () => {},\n onSuccess = () => {},\n onError = () => {},\n queryStringArrayFormat = 'brackets',\n }: VisitOptions = {},\n ): void {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !(data instanceof FormData)) {\n data = objectToFormData(data)\n }\n\n if (!(data instanceof FormData)) {\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n url = hrefToUrl(_href)\n data = _data\n }\n\n const visit: PendingVisit = {\n url,\n method,\n data,\n replace,\n preserveScroll,\n preserveState,\n only,\n headers,\n errorBag,\n forceFormData,\n queryStringArrayFormat,\n cancelled: false,\n completed: false,\n interrupted: false,\n }\n\n if (onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { interrupted: true })\n }\n\n this.saveScrollPositions()\n\n const visitId = this.createVisitId()\n this.activeVisit = {\n ...visit,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess,\n onError,\n queryStringArrayFormat,\n cancelToken: Axios.CancelToken.source(),\n }\n\n onCancelToken({\n cancel: () => {\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { cancelled: true })\n }\n },\n })\n\n fireStartEvent(visit)\n onStart(visit)\n\n Axios({\n method,\n url: urlWithoutHash(url).href,\n data: method === Method.GET ? {} : data,\n params: method === Method.GET ? data : {},\n cancelToken: this.activeVisit.cancelToken.token,\n headers: {\n ...headers,\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n ...(only.length\n ? {\n 'X-Inertia-Partial-Component': this.page.component,\n 'X-Inertia-Partial-Data': only.join(','),\n }\n : {}),\n ...(errorBag && errorBag.length ? { 'X-Inertia-Error-Bag': errorBag } : {}),\n ...(this.page.version ? { 'X-Inertia-Version': this.page.version } : {}),\n },\n onUploadProgress: (progress) => {\n if (data instanceof FormData) {\n progress.percentage = Math.round((progress.loaded / progress.total) * 100)\n fireProgressEvent(progress)\n onProgress(progress)\n }\n },\n })\n .then((response) => {\n if (!this.isInertiaResponse(response)) {\n return Promise.reject({ response })\n }\n\n const pageResponse: Page = response.data\n if (only.length && pageResponse.component === this.page.component) {\n pageResponse.props = { ...this.page.props, ...pageResponse.props }\n }\n preserveScroll = this.resolvePreserveOption(preserveScroll, pageResponse) as boolean\n preserveState = this.resolvePreserveOption(preserveState, pageResponse)\n if (preserveState && window.history.state?.rememberedState && pageResponse.component === this.page.component) {\n pageResponse.rememberedState = window.history.state.rememberedState\n }\n const requestUrl = url\n const responseUrl = hrefToUrl(pageResponse.url)\n if (requestUrl.hash && !responseUrl.hash && urlWithoutHash(requestUrl).href === responseUrl.href) {\n responseUrl.hash = requestUrl.hash\n pageResponse.url = responseUrl.href\n }\n return this.setPage(pageResponse, { visitId, replace, preserveScroll, preserveState })\n })\n .then(() => {\n const errors = this.page.props.errors || {}\n if (Object.keys(errors).length > 0) {\n const scopedErrors = errorBag ? (errors[errorBag] ? errors[errorBag] : {}) : errors\n fireErrorEvent(scopedErrors)\n return onError(scopedErrors)\n }\n fireSuccessEvent(this.page)\n return onSuccess(this.page)\n })\n .catch((error) => {\n if (this.isInertiaResponse(error.response)) {\n return this.setPage(error.response.data, { visitId })\n } else if (this.isLocationVisitResponse(error.response)) {\n const locationUrl = hrefToUrl(error.response.headers['x-inertia-location'])\n const requestUrl = url\n if (requestUrl.hash && !locationUrl.hash && urlWithoutHash(requestUrl).href === locationUrl.href) {\n locationUrl.hash = requestUrl.hash\n }\n this.locationVisit(locationUrl, preserveScroll === true)\n } else if (error.response) {\n if (fireInvalidEvent(error.response)) {\n modal.show(error.response.data)\n }\n } else {\n return Promise.reject(error)\n }\n })\n .then(() => {\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n })\n .catch((error) => {\n if (!Axios.isCancel(error)) {\n const throwException = fireExceptionEvent(error)\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n if (throwException) {\n return Promise.reject(error)\n }\n }\n })\n }\n\n protected setPage(\n page: Page,\n {\n visitId = this.createVisitId(),\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: {\n visitId?: VisitId\n replace?: boolean\n preserveScroll?: PreserveStateOption\n preserveState?: PreserveStateOption\n } = {},\n ): Promise<void> {\n return Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n page.scrollRegions = page.scrollRegions || []\n page.rememberedState = page.rememberedState || {}\n replace = replace || hrefToUrl(page.url).href === window.location.href\n replace ? this.replaceState(page) : this.pushState(page)\n this.swapComponent({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n this.resetScrollPositions()\n }\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n }\n })\n }\n\n protected pushState(page: Page): void {\n this.page = page\n window.history.pushState(page, '', page.url)\n }\n\n protected replaceState(page: Page): void {\n this.page = page\n window.history.replaceState(page, '', page.url)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n if (event.state !== null) {\n const page = event.state\n const visitId = this.createVisitId()\n Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n this.page = page\n this.swapComponent({ component, page, preserveState: false }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n })\n } else {\n const url = hrefToUrl(this.page.url)\n url.hash = window.location.hash\n this.replaceState({ ...this.page, url: url.href })\n this.resetScrollPositions()\n }\n }\n\n public get(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { ...options, method: Method.GET, data })\n }\n\n public reload(options: Exclude<VisitOptions, 'preserveScroll' | 'preserveState'> = {}): void {\n return this.visit(window.location.href, { ...options, preserveScroll: true, preserveState: true })\n }\n\n public replace(url: URL | string, options: Exclude<VisitOptions, 'replace'> = {}): void {\n console.warn(\n `Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${\n options.method ?? 'get'\n }() instead.`,\n )\n return this.visit(url, { preserveState: true, ...options, replace: true })\n }\n\n public post(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.POST, data })\n }\n\n public put(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PUT, data })\n }\n\n public patch(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PATCH, data })\n }\n\n public delete(url: URL | string, options: Exclude<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.DELETE })\n }\n\n public remember(data: unknown, key = 'default'): void {\n if (isServer) {\n return\n }\n\n this.replaceState({\n ...this.page,\n rememberedState: {\n ...this.page?.rememberedState,\n [key]: data,\n },\n })\n }\n\n public restore(key = 'default'): unknown {\n if (isServer) {\n return\n }\n\n return window.history.state?.rememberedState?.[key]\n }\n\n public on<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 if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n document.addEventListener(`inertia:${type}`, listener)\n return () => document.removeEventListener(`inertia:${type}`, listener)\n }\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 { GlobalEvent } from './types'\nimport NProgress from 'nprogress'\n\nlet timeout: NodeJS.Timeout | null = null\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', start.bind(null, delay))\n document.addEventListener('inertia:progress', progress)\n document.addEventListener('inertia:finish', finish)\n}\n\nfunction start(delay: number): void {\n timeout = setTimeout(() => NProgress.start(), delay)\n}\n\nfunction progress(event: GlobalEvent<'progress'>) {\n if (NProgress.isStarted() && event.detail.progress?.percentage) {\n NProgress.set(Math.max(NProgress.status!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>) {\n clearTimeout(timeout!)\n if (!NProgress.isStarted()) {\n return\n } else if (event.detail.visit.completed) {\n NProgress.done()\n } else if (event.detail.visit.interrupted) {\n NProgress.set(0)\n } else if (event.detail.visit.cancelled) {\n NProgress.done()\n NProgress.remove()\n }\n}\n\nfunction injectCSS(color: string): void {\n const element = document.createElement('style')\n element.type = 'text/css'\n element.textContent = `\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n NProgress.configure({ showSpinner })\n if (includeCSS) {\n injectCSS(color)\n }\n}\n","import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n","export default function shouldIntercept(event: KeyboardEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\n (isLink && event.which > 1) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey)\n )\n}\n","import { Router } from './router'\n\nexport * from './types'\n\nexport { default as setupProgress } from './progress'\nexport { default as createHeadManager } from './head'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\n\nexport const router = new Router()\n"],"names":["modal","listener","show","html","JSON","stringify","document","createElement","page","innerHTML","querySelectorAll","forEach","a","setAttribute","this","style","position","width","height","padding","boxSizing","backgroundColor","zIndex","addEventListener","hide","iframe","borderRadius","appendChild","body","prepend","overflow","contentWindow","open","write","outerHTML","close","hideOnEscape","bind","removeEventListener","event","keyCode","fn","delay","clearTimeout","timeoutID","setTimeout","apply","_this","source","form","parentKey","Object","prototype","hasOwnProperty","call","key","append","composeKey","parent","value","Array","isArray","from","keys","index","toString","toISOString","name","objectToFormData","href","window","location","method","data","qsArrayFormat","test","hasHost","startsWith","hasAbsolutePath","includes","Method","GET","length","url","search","qs","deepmerge","ignoreQueryPrefix","encodeValuesOnly","arrayFormat","protocol","host","pathname","hasRelativePath","substring","hasSearch","hasHash","hash","join","options","dispatchEvent","visit","detail","init","resolveComponent","swapComponent","initialPage","setNavigationType","clearRememberedStateOnReload","isBackForwardVisit","handleBackForwardVisit","isLocationVisit","handleLocationVisit","handleInitialPageVisit","setupEventListeners","navigationType","performance","getEntriesByType","type","history","state","_window$history$state","rememberedState","setPage","preserveState","then","handlePopstateEvent","debounce","handleScrollEvent","scrollRegions","target","hasAttribute","saveScrollPositions","replaceState","map","region","top","scrollTop","left","scrollLeft","resetScrollPositions","scrollTo","getElementById","slice","scrollIntoView","restoreScrollPositions","scrollPosition","version","preserveScroll","_this2","fireNavigateEvent","locationVisit","sessionStorage","setItem","urlWithoutHash","reload","error","getItem","parse","removeItem","_window$history$state3","_window$history$state5","_this3","isLocationVisitResponse","response","status","headers","isInertiaResponse","createVisitId","visitId","cancelVisit","activeVisit","cancelled","interrupted","completed","cancelToken","cancel","onCancel","fireFinishEvent","onFinish","finishVisit","resolvePreserveOption","props","errors","replace","only","errorBag","forceFormData","onCancelToken","onBefore","onStart","onProgress","onSuccess","onError","queryStringArrayFormat","hrefToUrl","values","some","hasFiles","mergeDataIntoQueryString","_data","cancelable","fireBeforeEvent","Axios","CancelToken","_this4","fireStartEvent","params","token","Accept","X-Requested-With","X-Inertia","X-Inertia-Partial-Component","component","X-Inertia-Partial-Data","X-Inertia-Error-Bag","X-Inertia-Version","onUploadProgress","progress","percentage","Math","round","loaded","total","fireProgressEvent","reject","pageResponse","_window$history$state6","requestUrl","responseUrl","fireErrorEvent","scopedErrors","locationUrl","isCancel","exception","throwException","resolve","_this5","pushState","Promise","_this6","get","console","warn","post","POST","put","PUT","patch","PATCH","DELETE","remember","isServer","_this$page","restore","_window$history$state7","_window$history$state8","on","callback","defaultPrevented","preventDefault","start","finish","timeout","NProgress","isStarted","_event$detail$progres","set","max","done","remove","color","includeCSS","showSpinner","addEventListeners","configure","element","textContent","head","injectCSS","buildDOMElement","tag","template","content","firstChild","script","node","getAttributeNames","getAttribute","isInertiaManagedElement","nodeType","Node","ELEMENT_NODE","findMatchingElementIndex","elements","findIndex","update","childNodes","filter","targetElement","sourceElements","splice","sourceElement","isEqualNode","parentNode","replaceChild","removeChild","titleCallback","onUpdate","title","states","reduce","carry","concat","indexOf","match","defaults","collect","Renderer","commit","forceUpdate","createProvider","lastProviderId","id","connect","disconnect","currentTarget","tagName","toLowerCase","isContentEditable","isLink","which","altKey","ctrlKey","metaKey","shiftKey","router"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/modal.ts","../src/debounce.ts","../src/formData.ts","../src/url.ts","../src/events.ts","../src/types.ts","../src/router.ts","../src/files.ts","../src/progress.ts","../src/head.ts","../src/shouldIntercept.ts","../src/index.ts"],"sourcesContent":["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","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 { FormDataConvertible } from './types'\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 * as qs from 'qs'\nimport deepmerge from 'deepmerge'\nimport { FormDataConvertible, Method } from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), window.location.toString())\n}\n\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === Method.GET && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === Method.GET && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n","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","import { AxiosResponse, CancelTokenSource } from 'axios'\n\nexport type Errors = Record<string, string>\nexport type ErrorBag = Record<string, Errors>\n\nexport type FormDataConvertible =\n | Array<FormDataConvertible>\n | Blob\n | FormDataEntryValue\n | Date\n | boolean\n | number\n | null\n | undefined\n\nexport enum Method {\n GET = 'get',\n POST = 'post',\n PUT = 'put',\n PATCH = 'patch',\n DELETE = 'delete',\n}\n\nexport type RequestPayload = Record<string, FormDataConvertible> | FormData\n\nexport interface PageProps {\n [key: string]: unknown\n}\n\nexport interface Page<SharedProps = PageProps> {\n component: string\n props: PageProps &\n SharedProps & {\n errors: Errors & ErrorBag\n }\n url: string\n version: string | null\n\n // Refactor away\n scrollRegions: Array<{ top: number; left: number }>\n rememberedState: Record<string, unknown>\n resolvedErrors: Errors\n}\n\nexport type PageResolver = (name: string) => Component\n\nexport type PageHandler = ({\n component,\n page,\n preserveState,\n}: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n}) => Promise<unknown>\n\nexport type PreserveStateOption = boolean | string | ((page: Page) => boolean)\n\nexport type Progress = ProgressEvent & { percentage: number }\n\nexport type LocationVisit = {\n preserveScroll: boolean\n}\n\nexport type Visit = {\n method: Method\n data: RequestPayload\n replace: boolean\n preserveScroll: PreserveStateOption\n preserveState: PreserveStateOption\n only: Array<string>\n headers: Record<string, string>\n errorBag: string | null\n forceFormData: boolean\n queryStringArrayFormat: 'indices' | 'brackets'\n}\n\nexport type GlobalEventsMap = {\n before: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: boolean | void\n }\n start: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: void\n }\n progress: {\n parameters: [Progress | undefined]\n details: {\n progress: Progress | undefined\n }\n result: void\n }\n finish: {\n parameters: [ActiveVisit]\n details: {\n visit: ActiveVisit\n }\n result: void\n }\n cancel: {\n parameters: []\n details: {}\n result: void\n }\n navigate: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n success: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n error: {\n parameters: [Errors]\n details: {\n errors: Errors\n }\n result: void\n }\n invalid: {\n parameters: [AxiosResponse]\n details: {\n response: AxiosResponse\n }\n result: boolean | void\n }\n exception: {\n parameters: [Error]\n details: {\n exception: Error\n }\n result: boolean | void\n }\n}\n\nexport type GlobalEventNames = keyof GlobalEventsMap\n\nexport type GlobalEvent<TEventName extends GlobalEventNames> = CustomEvent<GlobalEventDetails<TEventName>>\n\nexport type GlobalEventParameters<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['parameters']\n\nexport type GlobalEventResult<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['result']\n\nexport type GlobalEventDetails<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['details']\n\nexport type GlobalEventTrigger<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type GlobalEventCallback<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type VisitOptions = Partial<\n Visit & {\n onCancelToken: { ({ cancel }: { cancel: VoidFunction }): void }\n onBefore: GlobalEventCallback<'before'>\n onStart: GlobalEventCallback<'start'>\n onProgress: GlobalEventCallback<'progress'>\n onFinish: GlobalEventCallback<'finish'>\n onCancel: GlobalEventCallback<'cancel'>\n onSuccess: GlobalEventCallback<'success'>\n onError: GlobalEventCallback<'error'>\n }\n>\n\nexport type PendingVisit = Visit & {\n url: URL\n completed: boolean\n cancelled: boolean\n interrupted: boolean\n}\n\nexport type ActiveVisit = PendingVisit &\n Required<VisitOptions> & {\n cancelToken: CancelTokenSource\n }\n\nexport type VisitId = unknown\nexport type Component = unknown\n\nexport type InertiaAppResponse = Promise<{ head: string[]; body: string } | void>\n\ndeclare global {\n interface DocumentEventMap {\n 'inertia:before': GlobalEvent<'before'>\n 'inertia:start': GlobalEvent<'start'>\n 'inertia:progress': GlobalEvent<'progress'>\n 'inertia:success': GlobalEvent<'success'>\n 'inertia:error': GlobalEvent<'error'>\n 'inertia:invalid': GlobalEvent<'invalid'>\n 'inertia:exception': GlobalEvent<'exception'>\n 'inertia:finish': GlobalEvent<'finish'>\n 'inertia:navigate': GlobalEvent<'navigate'>\n }\n}\n","import modal from './modal'\nimport debounce from './debounce'\nimport { hasFiles } from './files'\nimport { objectToFormData } from './formData'\nimport { default as Axios, AxiosResponse } from 'axios'\nimport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nimport {\n ActiveVisit,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n LocationVisit,\n Method,\n Page,\n PageHandler,\n PageResolver,\n PendingVisit,\n PreserveStateOption,\n RequestPayload,\n VisitId,\n VisitOptions,\n} from './types'\nimport {\n fireBeforeEvent,\n fireErrorEvent,\n fireExceptionEvent,\n fireFinishEvent,\n fireInvalidEvent,\n fireNavigateEvent,\n fireProgressEvent,\n fireStartEvent,\n fireSuccessEvent,\n} from './events'\n\nconst isServer = typeof window === 'undefined'\n\nexport class Router {\n protected page!: Page\n protected resolveComponent!: PageResolver\n protected swapComponent!: PageHandler\n protected navigationType?: string\n protected activeVisit?: ActiveVisit\n protected visitId: VisitId = null\n\n public init({\n initialPage,\n resolveComponent,\n swapComponent,\n }: {\n initialPage: Page\n resolveComponent: PageResolver\n swapComponent: PageHandler\n }): void {\n this.page = initialPage\n this.resolveComponent = resolveComponent\n this.swapComponent = swapComponent\n\n this.setNavigationType()\n this.clearRememberedStateOnReload()\n\n if (this.isBackForwardVisit()) {\n this.handleBackForwardVisit(this.page)\n } else if (this.isLocationVisit()) {\n this.handleLocationVisit(this.page)\n } else {\n this.handleInitialPageVisit(this.page)\n }\n\n this.setupEventListeners()\n }\n\n protected setNavigationType(): void {\n this.navigationType =\n window.performance && window.performance.getEntriesByType('navigation').length > 0\n ? (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n : 'navigate'\n }\n\n protected clearRememberedStateOnReload(): void {\n if (this.navigationType === 'reload' && window.history.state?.rememberedState) {\n delete window.history.state.rememberedState\n }\n }\n\n protected handleInitialPageVisit(page: Page): void {\n this.page.url += window.location.hash\n this.setPage(page, { preserveState: true }).then(() => fireNavigateEvent(page))\n }\n\n protected setupEventListeners(): void {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n document.addEventListener('scroll', debounce(this.handleScrollEvent.bind(this), 100), true)\n }\n\n protected scrollRegions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n protected handleScrollEvent(event: Event): void {\n if (\n typeof (event.target as Element).hasAttribute === 'function' &&\n (event.target as Element).hasAttribute('scroll-region')\n ) {\n this.saveScrollPositions()\n }\n }\n\n protected saveScrollPositions(): void {\n this.replaceState({\n ...this.page,\n scrollRegions: Array.from(this.scrollRegions()).map((region) => {\n return {\n top: region.scrollTop,\n left: region.scrollLeft,\n }\n }),\n })\n }\n\n protected resetScrollPositions(): void {\n window.scrollTo(0, 0)\n this.scrollRegions().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 this.saveScrollPositions()\n if (window.location.hash) {\n document.getElementById(window.location.hash.slice(1))?.scrollIntoView()\n }\n }\n\n protected restoreScrollPositions(): void {\n if (this.page.scrollRegions) {\n this.scrollRegions().forEach((region: Element, index: number) => {\n const scrollPosition = this.page.scrollRegions[index]\n if (!scrollPosition) {\n return\n } else 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\n protected isBackForwardVisit(): boolean {\n return window.history.state && this.navigationType === 'back_forward'\n }\n\n protected handleBackForwardVisit(page: Page): void {\n window.history.state.version = page.version\n this.setPage(window.history.state, { preserveScroll: true, preserveState: true }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n\n protected locationVisit(url: URL, preserveScroll: LocationVisit['preserveScroll']): boolean | void {\n try {\n const locationVisit: LocationVisit = { preserveScroll }\n window.sessionStorage.setItem('inertiaLocationVisit', JSON.stringify(locationVisit))\n window.location.href = url.href\n if (urlWithoutHash(window.location).href === urlWithoutHash(url).href) {\n window.location.reload()\n }\n } catch (error) {\n return false\n }\n }\n\n protected isLocationVisit(): boolean {\n try {\n return window.sessionStorage.getItem('inertiaLocationVisit') !== null\n } catch (error) {\n return false\n }\n }\n\n protected handleLocationVisit(page: Page): void {\n const locationVisit: LocationVisit = JSON.parse(window.sessionStorage.getItem('inertiaLocationVisit') || '')\n window.sessionStorage.removeItem('inertiaLocationVisit')\n page.url += window.location.hash\n page.rememberedState = window.history.state?.rememberedState ?? {}\n page.scrollRegions = window.history.state?.scrollRegions ?? []\n this.setPage(page, { preserveScroll: locationVisit.preserveScroll, preserveState: true }).then(() => {\n if (locationVisit.preserveScroll) {\n this.restoreScrollPositions()\n }\n fireNavigateEvent(page)\n })\n }\n\n protected isLocationVisitResponse(response: AxiosResponse): boolean {\n return !!(response && response.status === 409 && response.headers['x-inertia-location'])\n }\n\n protected isInertiaResponse(response: AxiosResponse): boolean {\n return !!response?.headers['x-inertia']\n }\n\n protected createVisitId(): VisitId {\n this.visitId = {}\n return this.visitId\n }\n\n protected cancelVisit(\n activeVisit: ActiveVisit,\n { cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean },\n ): void {\n if (activeVisit && !activeVisit.completed && !activeVisit.cancelled && !activeVisit.interrupted) {\n activeVisit.cancelToken.cancel()\n activeVisit.onCancel()\n activeVisit.completed = false\n activeVisit.cancelled = cancelled\n activeVisit.interrupted = interrupted\n fireFinishEvent(activeVisit)\n activeVisit.onFinish(activeVisit)\n }\n }\n\n protected finishVisit(visit: ActiveVisit): void {\n if (!visit.cancelled && !visit.interrupted) {\n visit.completed = true\n visit.cancelled = false\n visit.interrupted = false\n fireFinishEvent(visit)\n visit.onFinish(visit)\n }\n }\n\n protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean | string {\n if (typeof value === 'function') {\n return value(page)\n } else if (value === 'errors') {\n return Object.keys(page.props.errors || {}).length > 0\n } else {\n return value\n }\n }\n\n public visit(\n href: string | URL,\n {\n method = Method.GET,\n data = {},\n replace = false,\n preserveScroll = false,\n preserveState = false,\n only = [],\n headers = {},\n errorBag = '',\n forceFormData = false,\n onCancelToken = () => {},\n onBefore = () => {},\n onStart = () => {},\n onProgress = () => {},\n onFinish = () => {},\n onCancel = () => {},\n onSuccess = () => {},\n onError = () => {},\n queryStringArrayFormat = 'brackets',\n }: VisitOptions = {},\n ): void {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !(data instanceof FormData)) {\n data = objectToFormData(data)\n }\n\n if (!(data instanceof FormData)) {\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n url = hrefToUrl(_href)\n data = _data\n }\n\n const visit: PendingVisit = {\n url,\n method,\n data,\n replace,\n preserveScroll,\n preserveState,\n only,\n headers,\n errorBag,\n forceFormData,\n queryStringArrayFormat,\n cancelled: false,\n completed: false,\n interrupted: false,\n }\n\n if (onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { interrupted: true })\n }\n\n this.saveScrollPositions()\n\n const visitId = this.createVisitId()\n this.activeVisit = {\n ...visit,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess,\n onError,\n queryStringArrayFormat,\n cancelToken: Axios.CancelToken.source(),\n }\n\n onCancelToken({\n cancel: () => {\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { cancelled: true })\n }\n },\n })\n\n fireStartEvent(visit)\n onStart(visit)\n\n Axios({\n method,\n url: urlWithoutHash(url).href,\n data: method === Method.GET ? {} : data,\n params: method === Method.GET ? data : {},\n cancelToken: this.activeVisit.cancelToken.token,\n headers: {\n ...headers,\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n ...(only.length\n ? {\n 'X-Inertia-Partial-Component': this.page.component,\n 'X-Inertia-Partial-Data': only.join(','),\n }\n : {}),\n ...(errorBag && errorBag.length ? { 'X-Inertia-Error-Bag': errorBag } : {}),\n ...(this.page.version ? { 'X-Inertia-Version': this.page.version } : {}),\n },\n onUploadProgress: (progress) => {\n if (data instanceof FormData) {\n progress.percentage = Math.round((progress.loaded / progress.total) * 100)\n fireProgressEvent(progress)\n onProgress(progress)\n }\n },\n })\n .then((response) => {\n if (!this.isInertiaResponse(response)) {\n return Promise.reject({ response })\n }\n\n const pageResponse: Page = response.data\n if (only.length && pageResponse.component === this.page.component) {\n pageResponse.props = { ...this.page.props, ...pageResponse.props }\n }\n preserveScroll = this.resolvePreserveOption(preserveScroll, pageResponse) as boolean\n preserveState = this.resolvePreserveOption(preserveState, pageResponse)\n if (preserveState && window.history.state?.rememberedState && pageResponse.component === this.page.component) {\n pageResponse.rememberedState = window.history.state.rememberedState\n }\n const requestUrl = url\n const responseUrl = hrefToUrl(pageResponse.url)\n if (requestUrl.hash && !responseUrl.hash && urlWithoutHash(requestUrl).href === responseUrl.href) {\n responseUrl.hash = requestUrl.hash\n pageResponse.url = responseUrl.href\n }\n return this.setPage(pageResponse, { visitId, replace, preserveScroll, preserveState })\n })\n .then(() => {\n const errors = this.page.props.errors || {}\n if (Object.keys(errors).length > 0) {\n const scopedErrors = errorBag ? (errors[errorBag] ? errors[errorBag] : {}) : errors\n fireErrorEvent(scopedErrors)\n return onError(scopedErrors)\n }\n fireSuccessEvent(this.page)\n return onSuccess(this.page)\n })\n .catch((error) => {\n if (this.isInertiaResponse(error.response)) {\n return this.setPage(error.response.data, { visitId })\n } else if (this.isLocationVisitResponse(error.response)) {\n const locationUrl = hrefToUrl(error.response.headers['x-inertia-location'])\n const requestUrl = url\n if (requestUrl.hash && !locationUrl.hash && urlWithoutHash(requestUrl).href === locationUrl.href) {\n locationUrl.hash = requestUrl.hash\n }\n this.locationVisit(locationUrl, preserveScroll === true)\n } else if (error.response) {\n if (fireInvalidEvent(error.response)) {\n modal.show(error.response.data)\n }\n } else {\n return Promise.reject(error)\n }\n })\n .then(() => {\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n })\n .catch((error) => {\n if (!Axios.isCancel(error)) {\n const throwException = fireExceptionEvent(error)\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n if (throwException) {\n return Promise.reject(error)\n }\n }\n })\n }\n\n protected setPage(\n page: Page,\n {\n visitId = this.createVisitId(),\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: {\n visitId?: VisitId\n replace?: boolean\n preserveScroll?: PreserveStateOption\n preserveState?: PreserveStateOption\n } = {},\n ): Promise<void> {\n return Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n page.scrollRegions = page.scrollRegions || []\n page.rememberedState = page.rememberedState || {}\n replace = replace || hrefToUrl(page.url).href === window.location.href\n replace ? this.replaceState(page) : this.pushState(page)\n this.swapComponent({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n this.resetScrollPositions()\n }\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n }\n })\n }\n\n protected pushState(page: Page): void {\n this.page = page\n window.history.pushState(page, '', page.url)\n }\n\n protected replaceState(page: Page): void {\n this.page = page\n window.history.replaceState(page, '', page.url)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n if (event.state !== null) {\n const page = event.state\n const visitId = this.createVisitId()\n Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n this.page = page\n this.swapComponent({ component, page, preserveState: false }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n })\n } else {\n const url = hrefToUrl(this.page.url)\n url.hash = window.location.hash\n this.replaceState({ ...this.page, url: url.href })\n this.resetScrollPositions()\n }\n }\n\n public get(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { ...options, method: Method.GET, data })\n }\n\n public reload(options: Exclude<VisitOptions, 'preserveScroll' | 'preserveState'> = {}): void {\n return this.visit(window.location.href, { ...options, preserveScroll: true, preserveState: true })\n }\n\n public replace(url: URL | string, options: Exclude<VisitOptions, 'replace'> = {}): void {\n console.warn(\n `Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${\n options.method ?? 'get'\n }() instead.`,\n )\n return this.visit(url, { preserveState: true, ...options, replace: true })\n }\n\n public post(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.POST, data })\n }\n\n public put(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PUT, data })\n }\n\n public patch(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PATCH, data })\n }\n\n public delete(url: URL | string, options: Exclude<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.DELETE })\n }\n\n public remember(data: unknown, key = 'default'): void {\n if (isServer) {\n return\n }\n\n this.replaceState({\n ...this.page,\n rememberedState: {\n ...this.page?.rememberedState,\n [key]: data,\n },\n })\n }\n\n public restore(key = 'default'): unknown {\n if (isServer) {\n return\n }\n\n return window.history.state?.rememberedState?.[key]\n }\n\n public on<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 if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n document.addEventListener(`inertia:${type}`, listener)\n return () => document.removeEventListener(`inertia:${type}`, listener)\n }\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 { GlobalEvent } from './types'\nimport NProgress from 'nprogress'\n\nlet timeout: NodeJS.Timeout | null = null\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', start.bind(null, delay))\n document.addEventListener('inertia:progress', progress)\n document.addEventListener('inertia:finish', finish)\n}\n\nfunction start(delay: number): void {\n timeout = setTimeout(() => NProgress.start(), delay)\n}\n\nfunction progress(event: GlobalEvent<'progress'>) {\n if (NProgress.isStarted() && event.detail.progress?.percentage) {\n NProgress.set(Math.max(NProgress.status!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>) {\n clearTimeout(timeout!)\n if (!NProgress.isStarted()) {\n return\n } else if (event.detail.visit.completed) {\n NProgress.done()\n } else if (event.detail.visit.interrupted) {\n NProgress.set(0)\n } else if (event.detail.visit.cancelled) {\n NProgress.done()\n NProgress.remove()\n }\n}\n\nfunction injectCSS(color: string): void {\n const element = document.createElement('style')\n element.type = 'text/css'\n element.textContent = `\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n NProgress.configure({ showSpinner })\n if (includeCSS) {\n injectCSS(color)\n }\n}\n","import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n","export default function shouldIntercept(event: KeyboardEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\n (isLink && event.which > 1) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey)\n )\n}\n","import { Router } from './router'\n\nexport * from './types'\n\nexport { default as setupProgress } from './progress'\nexport { default as createHeadManager } from './head'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\n\nexport const router = new Router()\n"],"names":["modal","listener","show","html","JSON","stringify","document","createElement","page","innerHTML","querySelectorAll","forEach","a","setAttribute","this","style","position","width","height","padding","boxSizing","backgroundColor","zIndex","addEventListener","hide","iframe","borderRadius","appendChild","body","prepend","overflow","contentWindow","open","write","outerHTML","close","hideOnEscape","bind","removeEventListener","event","keyCode","fn","delay","clearTimeout","timeoutID","setTimeout","apply","_this","source","form","parentKey","Object","prototype","hasOwnProperty","call","key","append","composeKey","parent","value","Array","isArray","from","keys","index","toString","toISOString","name","objectToFormData","href","window","location","method","data","qsArrayFormat","test","hasHost","startsWith","hasAbsolutePath","includes","Method","GET","length","url","search","qs","deepmerge","ignoreQueryPrefix","encodeValuesOnly","arrayFormat","protocol","host","pathname","hasRelativePath","substring","hasSearch","hasHash","hash","join","options","dispatchEvent","visit","detail","init","resolveComponent","swapComponent","initialPage","setNavigationType","clearRememberedStateOnReload","isBackForwardVisit","handleBackForwardVisit","isLocationVisit","handleLocationVisit","handleInitialPageVisit","setupEventListeners","navigationType","performance","getEntriesByType","type","history","state","_window$history$state","rememberedState","setPage","preserveState","then","handlePopstateEvent","debounce","handleScrollEvent","scrollRegions","target","hasAttribute","saveScrollPositions","replaceState","map","region","top","scrollTop","left","scrollLeft","resetScrollPositions","scrollTo","getElementById","slice","_document$getElementB","scrollIntoView","restoreScrollPositions","scrollPosition","version","preserveScroll","_this2","fireNavigateEvent","locationVisit","sessionStorage","setItem","urlWithoutHash","reload","error","getItem","parse","removeItem","_window$history$state3","_window$history$state5","_this3","isLocationVisitResponse","response","status","headers","isInertiaResponse","createVisitId","visitId","cancelVisit","activeVisit","cancelled","interrupted","completed","cancelToken","cancel","onCancel","fireFinishEvent","onFinish","finishVisit","resolvePreserveOption","props","errors","replace","only","errorBag","forceFormData","onCancelToken","onBefore","onStart","onProgress","onSuccess","onError","queryStringArrayFormat","hrefToUrl","values","some","hasFiles","mergeDataIntoQueryString","_data","cancelable","fireBeforeEvent","Axios","CancelToken","_this4","fireStartEvent","params","token","Accept","X-Requested-With","X-Inertia","X-Inertia-Partial-Component","component","X-Inertia-Partial-Data","X-Inertia-Error-Bag","X-Inertia-Version","onUploadProgress","progress","percentage","Math","round","loaded","total","fireProgressEvent","reject","pageResponse","_window$history$state6","requestUrl","responseUrl","fireErrorEvent","scopedErrors","locationUrl","isCancel","exception","throwException","resolve","_this5","pushState","Promise","_this6","get","console","warn","post","POST","put","PUT","patch","PATCH","DELETE","remember","isServer","_this$page","restore","_window$history$state7","_window$history$state8","on","callback","defaultPrevented","preventDefault","start","finish","timeout","NProgress","isStarted","_event$detail$progres","set","max","done","remove","color","includeCSS","showSpinner","addEventListeners","configure","element","textContent","head","injectCSS","buildDOMElement","tag","template","content","firstChild","script","node","getAttributeNames","getAttribute","isInertiaManagedElement","nodeType","Node","ELEMENT_NODE","findMatchingElementIndex","elements","findIndex","update","childNodes","filter","targetElement","sourceElements","splice","sourceElement","isEqualNode","parentNode","_targetElement$parent2","replaceChild","_targetElement$parent","removeChild","titleCallback","onUpdate","title","states","reduce","carry","concat","indexOf","match","defaults","collect","Renderer","commit","forceUpdate","createProvider","lastProviderId","id","connect","disconnect","currentTarget","tagName","toLowerCase","isContentEditable","isLink","which","altKey","ctrlKey","metaKey","shiftKey","router"],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/modal.ts","../src/types.ts","../src/debounce.ts","../src/formData.ts","../src/url.ts","../src/events.ts","../src/router.ts","../src/files.ts","../src/progress.ts","../src/head.ts","../src/index.ts","../src/shouldIntercept.ts"],"sourcesContent":["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, CancelTokenSource } from 'axios'\n\nexport type Errors = Record<string, string>\nexport type ErrorBag = Record<string, Errors>\n\nexport type FormDataConvertible =\n | Array<FormDataConvertible>\n | Blob\n | FormDataEntryValue\n | Date\n | boolean\n | number\n | null\n | undefined\n\nexport enum Method {\n GET = 'get',\n POST = 'post',\n PUT = 'put',\n PATCH = 'patch',\n DELETE = 'delete',\n}\n\nexport type RequestPayload = Record<string, FormDataConvertible> | FormData\n\nexport interface PageProps {\n [key: string]: unknown\n}\n\nexport interface Page<SharedProps = PageProps> {\n component: string\n props: PageProps &\n SharedProps & {\n errors: Errors & ErrorBag\n }\n url: string\n version: string | null\n\n // Refactor away\n scrollRegions: Array<{ top: number; left: number }>\n rememberedState: Record<string, unknown>\n resolvedErrors: Errors\n}\n\nexport type PageResolver = (name: string) => Component\n\nexport type PageHandler = ({\n component,\n page,\n preserveState,\n}: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n}) => Promise<unknown>\n\nexport type PreserveStateOption = boolean | string | ((page: Page) => boolean)\n\nexport type Progress = ProgressEvent & { percentage: number }\n\nexport type LocationVisit = {\n preserveScroll: boolean\n}\n\nexport type Visit = {\n method: Method\n data: RequestPayload\n replace: boolean\n preserveScroll: PreserveStateOption\n preserveState: PreserveStateOption\n only: Array<string>\n headers: Record<string, string>\n errorBag: string | null\n forceFormData: boolean\n queryStringArrayFormat: 'indices' | 'brackets'\n}\n\nexport type GlobalEventsMap = {\n before: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: boolean | void\n }\n start: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: void\n }\n progress: {\n parameters: [Progress | undefined]\n details: {\n progress: Progress | undefined\n }\n result: void\n }\n finish: {\n parameters: [ActiveVisit]\n details: {\n visit: ActiveVisit\n }\n result: void\n }\n cancel: {\n parameters: []\n details: {}\n result: void\n }\n navigate: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n success: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n error: {\n parameters: [Errors]\n details: {\n errors: Errors\n }\n result: void\n }\n invalid: {\n parameters: [AxiosResponse]\n details: {\n response: AxiosResponse\n }\n result: boolean | void\n }\n exception: {\n parameters: [Error]\n details: {\n exception: Error\n }\n result: boolean | void\n }\n}\n\nexport type GlobalEventNames = keyof GlobalEventsMap\n\nexport type GlobalEvent<TEventName extends GlobalEventNames> = CustomEvent<GlobalEventDetails<TEventName>>\n\nexport type GlobalEventParameters<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['parameters']\n\nexport type GlobalEventResult<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['result']\n\nexport type GlobalEventDetails<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['details']\n\nexport type GlobalEventTrigger<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type GlobalEventCallback<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type VisitOptions = Partial<\n Visit & {\n onCancelToken: { ({ cancel }: { cancel: VoidFunction }): void }\n onBefore: GlobalEventCallback<'before'>\n onStart: GlobalEventCallback<'start'>\n onProgress: GlobalEventCallback<'progress'>\n onFinish: GlobalEventCallback<'finish'>\n onCancel: GlobalEventCallback<'cancel'>\n onSuccess: GlobalEventCallback<'success'>\n onError: GlobalEventCallback<'error'>\n }\n>\n\nexport type PendingVisit = Visit & {\n url: URL\n completed: boolean\n cancelled: boolean\n interrupted: boolean\n}\n\nexport type ActiveVisit = PendingVisit &\n Required<VisitOptions> & {\n cancelToken: CancelTokenSource\n }\n\nexport type VisitId = unknown\nexport type Component = unknown\n\nexport type InertiaAppResponse = Promise<{ head: string[]; body: string } | void>\n\ndeclare global {\n interface DocumentEventMap {\n 'inertia:before': GlobalEvent<'before'>\n 'inertia:start': GlobalEvent<'start'>\n 'inertia:progress': GlobalEvent<'progress'>\n 'inertia:success': GlobalEvent<'success'>\n 'inertia:error': GlobalEvent<'error'>\n 'inertia:invalid': GlobalEvent<'invalid'>\n 'inertia:exception': GlobalEvent<'exception'>\n 'inertia:finish': GlobalEvent<'finish'>\n 'inertia:navigate': GlobalEvent<'navigate'>\n }\n}\n","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 { FormDataConvertible } from './types'\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 * as qs from 'qs'\nimport deepmerge from 'deepmerge'\nimport { FormDataConvertible, Method } from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), window.location.toString())\n}\n\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === Method.GET && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === Method.GET && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n","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","import modal from './modal'\nimport debounce from './debounce'\nimport { hasFiles } from './files'\nimport { objectToFormData } from './formData'\nimport { default as Axios, AxiosResponse } from 'axios'\nimport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nimport {\n ActiveVisit,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n LocationVisit,\n Method,\n Page,\n PageHandler,\n PageResolver,\n PendingVisit,\n PreserveStateOption,\n RequestPayload,\n VisitId,\n VisitOptions,\n} from './types'\nimport {\n fireBeforeEvent,\n fireErrorEvent,\n fireExceptionEvent,\n fireFinishEvent,\n fireInvalidEvent,\n fireNavigateEvent,\n fireProgressEvent,\n fireStartEvent,\n fireSuccessEvent,\n} from './events'\n\nconst isServer = typeof window === 'undefined'\n\nexport class Router {\n protected page!: Page\n protected resolveComponent!: PageResolver\n protected swapComponent!: PageHandler\n protected navigationType?: string\n protected activeVisit?: ActiveVisit\n protected visitId: VisitId = null\n\n public init({\n initialPage,\n resolveComponent,\n swapComponent,\n }: {\n initialPage: Page\n resolveComponent: PageResolver\n swapComponent: PageHandler\n }): void {\n this.page = initialPage\n this.resolveComponent = resolveComponent\n this.swapComponent = swapComponent\n\n this.setNavigationType()\n this.clearRememberedStateOnReload()\n\n if (this.isBackForwardVisit()) {\n this.handleBackForwardVisit(this.page)\n } else if (this.isLocationVisit()) {\n this.handleLocationVisit(this.page)\n } else {\n this.handleInitialPageVisit(this.page)\n }\n\n this.setupEventListeners()\n }\n\n protected setNavigationType(): void {\n this.navigationType =\n window.performance && window.performance.getEntriesByType('navigation').length > 0\n ? (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n : 'navigate'\n }\n\n protected clearRememberedStateOnReload(): void {\n if (this.navigationType === 'reload' && window.history.state?.rememberedState) {\n delete window.history.state.rememberedState\n }\n }\n\n protected handleInitialPageVisit(page: Page): void {\n this.page.url += window.location.hash\n this.setPage(page, { preserveState: true }).then(() => fireNavigateEvent(page))\n }\n\n protected setupEventListeners(): void {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n document.addEventListener('scroll', debounce(this.handleScrollEvent.bind(this), 100), true)\n }\n\n protected scrollRegions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n protected handleScrollEvent(event: Event): void {\n if (\n typeof (event.target as Element).hasAttribute === 'function' &&\n (event.target as Element).hasAttribute('scroll-region')\n ) {\n this.saveScrollPositions()\n }\n }\n\n protected saveScrollPositions(): void {\n this.replaceState({\n ...this.page,\n scrollRegions: Array.from(this.scrollRegions()).map((region) => {\n return {\n top: region.scrollTop,\n left: region.scrollLeft,\n }\n }),\n })\n }\n\n protected resetScrollPositions(): void {\n window.scrollTo(0, 0)\n this.scrollRegions().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 this.saveScrollPositions()\n if (window.location.hash) {\n document.getElementById(window.location.hash.slice(1))?.scrollIntoView()\n }\n }\n\n protected restoreScrollPositions(): void {\n if (this.page.scrollRegions) {\n this.scrollRegions().forEach((region: Element, index: number) => {\n const scrollPosition = this.page.scrollRegions[index]\n if (!scrollPosition) {\n return\n } else 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\n protected isBackForwardVisit(): boolean {\n return window.history.state && this.navigationType === 'back_forward'\n }\n\n protected handleBackForwardVisit(page: Page): void {\n window.history.state.version = page.version\n this.setPage(window.history.state, { preserveScroll: true, preserveState: true }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n\n protected locationVisit(url: URL, preserveScroll: LocationVisit['preserveScroll']): boolean | void {\n try {\n const locationVisit: LocationVisit = { preserveScroll }\n window.sessionStorage.setItem('inertiaLocationVisit', JSON.stringify(locationVisit))\n window.location.href = url.href\n if (urlWithoutHash(window.location).href === urlWithoutHash(url).href) {\n window.location.reload()\n }\n } catch (error) {\n return false\n }\n }\n\n protected isLocationVisit(): boolean {\n try {\n return window.sessionStorage.getItem('inertiaLocationVisit') !== null\n } catch (error) {\n return false\n }\n }\n\n protected handleLocationVisit(page: Page): void {\n const locationVisit: LocationVisit = JSON.parse(window.sessionStorage.getItem('inertiaLocationVisit') || '')\n window.sessionStorage.removeItem('inertiaLocationVisit')\n page.url += window.location.hash\n page.rememberedState = window.history.state?.rememberedState ?? {}\n page.scrollRegions = window.history.state?.scrollRegions ?? []\n this.setPage(page, { preserveScroll: locationVisit.preserveScroll, preserveState: true }).then(() => {\n if (locationVisit.preserveScroll) {\n this.restoreScrollPositions()\n }\n fireNavigateEvent(page)\n })\n }\n\n protected isLocationVisitResponse(response: AxiosResponse): boolean {\n return !!(response && response.status === 409 && response.headers['x-inertia-location'])\n }\n\n protected isInertiaResponse(response: AxiosResponse): boolean {\n return !!response?.headers['x-inertia']\n }\n\n protected createVisitId(): VisitId {\n this.visitId = {}\n return this.visitId\n }\n\n protected cancelVisit(\n activeVisit: ActiveVisit,\n { cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean },\n ): void {\n if (activeVisit && !activeVisit.completed && !activeVisit.cancelled && !activeVisit.interrupted) {\n activeVisit.cancelToken.cancel()\n activeVisit.onCancel()\n activeVisit.completed = false\n activeVisit.cancelled = cancelled\n activeVisit.interrupted = interrupted\n fireFinishEvent(activeVisit)\n activeVisit.onFinish(activeVisit)\n }\n }\n\n protected finishVisit(visit: ActiveVisit): void {\n if (!visit.cancelled && !visit.interrupted) {\n visit.completed = true\n visit.cancelled = false\n visit.interrupted = false\n fireFinishEvent(visit)\n visit.onFinish(visit)\n }\n }\n\n protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean | string {\n if (typeof value === 'function') {\n return value(page)\n } else if (value === 'errors') {\n return Object.keys(page.props.errors || {}).length > 0\n } else {\n return value\n }\n }\n\n public visit(\n href: string | URL,\n {\n method = Method.GET,\n data = {},\n replace = false,\n preserveScroll = false,\n preserveState = false,\n only = [],\n headers = {},\n errorBag = '',\n forceFormData = false,\n onCancelToken = () => {},\n onBefore = () => {},\n onStart = () => {},\n onProgress = () => {},\n onFinish = () => {},\n onCancel = () => {},\n onSuccess = () => {},\n onError = () => {},\n queryStringArrayFormat = 'brackets',\n }: VisitOptions = {},\n ): void {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !(data instanceof FormData)) {\n data = objectToFormData(data)\n }\n\n if (!(data instanceof FormData)) {\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n url = hrefToUrl(_href)\n data = _data\n }\n\n const visit: PendingVisit = {\n url,\n method,\n data,\n replace,\n preserveScroll,\n preserveState,\n only,\n headers,\n errorBag,\n forceFormData,\n queryStringArrayFormat,\n cancelled: false,\n completed: false,\n interrupted: false,\n }\n\n if (onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { interrupted: true })\n }\n\n this.saveScrollPositions()\n\n const visitId = this.createVisitId()\n this.activeVisit = {\n ...visit,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess,\n onError,\n queryStringArrayFormat,\n cancelToken: Axios.CancelToken.source(),\n }\n\n onCancelToken({\n cancel: () => {\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { cancelled: true })\n }\n },\n })\n\n fireStartEvent(visit)\n onStart(visit)\n\n Axios({\n method,\n url: urlWithoutHash(url).href,\n data: method === Method.GET ? {} : data,\n params: method === Method.GET ? data : {},\n cancelToken: this.activeVisit.cancelToken.token,\n headers: {\n ...headers,\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n ...(only.length\n ? {\n 'X-Inertia-Partial-Component': this.page.component,\n 'X-Inertia-Partial-Data': only.join(','),\n }\n : {}),\n ...(errorBag && errorBag.length ? { 'X-Inertia-Error-Bag': errorBag } : {}),\n ...(this.page.version ? { 'X-Inertia-Version': this.page.version } : {}),\n },\n onUploadProgress: (progress) => {\n if (data instanceof FormData) {\n progress.percentage = Math.round((progress.loaded / progress.total) * 100)\n fireProgressEvent(progress)\n onProgress(progress)\n }\n },\n })\n .then((response) => {\n if (!this.isInertiaResponse(response)) {\n return Promise.reject({ response })\n }\n\n const pageResponse: Page = response.data\n if (only.length && pageResponse.component === this.page.component) {\n pageResponse.props = { ...this.page.props, ...pageResponse.props }\n }\n preserveScroll = this.resolvePreserveOption(preserveScroll, pageResponse) as boolean\n preserveState = this.resolvePreserveOption(preserveState, pageResponse)\n if (preserveState && window.history.state?.rememberedState && pageResponse.component === this.page.component) {\n pageResponse.rememberedState = window.history.state.rememberedState\n }\n const requestUrl = url\n const responseUrl = hrefToUrl(pageResponse.url)\n if (requestUrl.hash && !responseUrl.hash && urlWithoutHash(requestUrl).href === responseUrl.href) {\n responseUrl.hash = requestUrl.hash\n pageResponse.url = responseUrl.href\n }\n return this.setPage(pageResponse, { visitId, replace, preserveScroll, preserveState })\n })\n .then(() => {\n const errors = this.page.props.errors || {}\n if (Object.keys(errors).length > 0) {\n const scopedErrors = errorBag ? (errors[errorBag] ? errors[errorBag] : {}) : errors\n fireErrorEvent(scopedErrors)\n return onError(scopedErrors)\n }\n fireSuccessEvent(this.page)\n return onSuccess(this.page)\n })\n .catch((error) => {\n if (this.isInertiaResponse(error.response)) {\n return this.setPage(error.response.data, { visitId })\n } else if (this.isLocationVisitResponse(error.response)) {\n const locationUrl = hrefToUrl(error.response.headers['x-inertia-location'])\n const requestUrl = url\n if (requestUrl.hash && !locationUrl.hash && urlWithoutHash(requestUrl).href === locationUrl.href) {\n locationUrl.hash = requestUrl.hash\n }\n this.locationVisit(locationUrl, preserveScroll === true)\n } else if (error.response) {\n if (fireInvalidEvent(error.response)) {\n modal.show(error.response.data)\n }\n } else {\n return Promise.reject(error)\n }\n })\n .then(() => {\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n })\n .catch((error) => {\n if (!Axios.isCancel(error)) {\n const throwException = fireExceptionEvent(error)\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n if (throwException) {\n return Promise.reject(error)\n }\n }\n })\n }\n\n protected setPage(\n page: Page,\n {\n visitId = this.createVisitId(),\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: {\n visitId?: VisitId\n replace?: boolean\n preserveScroll?: PreserveStateOption\n preserveState?: PreserveStateOption\n } = {},\n ): Promise<void> {\n return Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n page.scrollRegions = page.scrollRegions || []\n page.rememberedState = page.rememberedState || {}\n replace = replace || hrefToUrl(page.url).href === window.location.href\n replace ? this.replaceState(page) : this.pushState(page)\n this.swapComponent({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n this.resetScrollPositions()\n }\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n }\n })\n }\n\n protected pushState(page: Page): void {\n this.page = page\n window.history.pushState(page, '', page.url)\n }\n\n protected replaceState(page: Page): void {\n this.page = page\n window.history.replaceState(page, '', page.url)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n if (event.state !== null) {\n const page = event.state\n const visitId = this.createVisitId()\n Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n this.page = page\n this.swapComponent({ component, page, preserveState: false }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n })\n } else {\n const url = hrefToUrl(this.page.url)\n url.hash = window.location.hash\n this.replaceState({ ...this.page, url: url.href })\n this.resetScrollPositions()\n }\n }\n\n public get(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { ...options, method: Method.GET, data })\n }\n\n public reload(options: Exclude<VisitOptions, 'preserveScroll' | 'preserveState'> = {}): void {\n return this.visit(window.location.href, { ...options, preserveScroll: true, preserveState: true })\n }\n\n public replace(url: URL | string, options: Exclude<VisitOptions, 'replace'> = {}): void {\n console.warn(\n `Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${\n options.method ?? 'get'\n }() instead.`,\n )\n return this.visit(url, { preserveState: true, ...options, replace: true })\n }\n\n public post(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.POST, data })\n }\n\n public put(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PUT, data })\n }\n\n public patch(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PATCH, data })\n }\n\n public delete(url: URL | string, options: Exclude<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.DELETE })\n }\n\n public remember(data: unknown, key = 'default'): void {\n if (isServer) {\n return\n }\n\n this.replaceState({\n ...this.page,\n rememberedState: {\n ...this.page?.rememberedState,\n [key]: data,\n },\n })\n }\n\n public restore(key = 'default'): unknown {\n if (isServer) {\n return\n }\n\n return window.history.state?.rememberedState?.[key]\n }\n\n public on<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 if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n document.addEventListener(`inertia:${type}`, listener)\n return () => document.removeEventListener(`inertia:${type}`, listener)\n }\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 { GlobalEvent } from './types'\nimport NProgress from 'nprogress'\n\nlet timeout: NodeJS.Timeout | null = null\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', start.bind(null, delay))\n document.addEventListener('inertia:progress', progress)\n document.addEventListener('inertia:finish', finish)\n}\n\nfunction start(delay: number): void {\n timeout = setTimeout(() => NProgress.start(), delay)\n}\n\nfunction progress(event: GlobalEvent<'progress'>) {\n if (NProgress.isStarted() && event.detail.progress?.percentage) {\n NProgress.set(Math.max(NProgress.status!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>) {\n clearTimeout(timeout!)\n if (!NProgress.isStarted()) {\n return\n } else if (event.detail.visit.completed) {\n NProgress.done()\n } else if (event.detail.visit.interrupted) {\n NProgress.set(0)\n } else if (event.detail.visit.cancelled) {\n NProgress.done()\n NProgress.remove()\n }\n}\n\nfunction injectCSS(color: string): void {\n const element = document.createElement('style')\n element.type = 'text/css'\n element.textContent = `\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n NProgress.configure({ showSpinner })\n if (includeCSS) {\n injectCSS(color)\n }\n}\n","import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n","import { Router } from './router'\n\nexport * from './types'\n\nexport { default as setupProgress } from './progress'\nexport { default as createHeadManager } from './head'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\n\nexport const router = new Router()\n","export default function shouldIntercept(event: KeyboardEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\n (isLink && event.which > 1) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey)\n )\n}\n"],"names":["Method","modal","listener","show","html","JSON","stringify","document","createElement","page","innerHTML","querySelectorAll","forEach","a","setAttribute","this","style","position","width","height","padding","boxSizing","backgroundColor","zIndex","addEventListener","hide","iframe","borderRadius","appendChild","body","prepend","overflow","contentWindow","open","write","outerHTML","close","hideOnEscape","bind","removeEventListener","event","keyCode","fn","delay","clearTimeout","timeoutID","setTimeout","apply","_this","source","form","parentKey","Object","prototype","hasOwnProperty","call","key","append","composeKey","parent","value","Array","isArray","from","keys","index","toString","toISOString","name","objectToFormData","href","window","location","method","data","qsArrayFormat","test","hasHost","startsWith","hasAbsolutePath","includes","GET","length","url","search","qs","deepmerge","ignoreQueryPrefix","encodeValuesOnly","arrayFormat","protocol","host","pathname","hasRelativePath","substring","hasSearch","hasHash","hash","join","options","dispatchEvent","visit","detail","init","resolveComponent","swapComponent","initialPage","setNavigationType","clearRememberedStateOnReload","isBackForwardVisit","handleBackForwardVisit","isLocationVisit","handleLocationVisit","handleInitialPageVisit","setupEventListeners","navigationType","performance","getEntriesByType","type","history","state","_window$history$state","rememberedState","setPage","preserveState","then","handlePopstateEvent","debounce","handleScrollEvent","scrollRegions","target","hasAttribute","saveScrollPositions","replaceState","map","region","top","scrollTop","left","scrollLeft","resetScrollPositions","scrollTo","getElementById","slice","scrollIntoView","restoreScrollPositions","scrollPosition","version","preserveScroll","_this2","fireNavigateEvent","locationVisit","sessionStorage","setItem","urlWithoutHash","reload","error","getItem","parse","removeItem","_window$history$state3","_window$history$state5","_this3","isLocationVisitResponse","response","status","headers","isInertiaResponse","createVisitId","visitId","cancelVisit","activeVisit","cancelled","interrupted","completed","cancelToken","cancel","onCancel","fireFinishEvent","onFinish","finishVisit","resolvePreserveOption","props","errors","replace","only","errorBag","forceFormData","onCancelToken","onBefore","onStart","onProgress","onSuccess","onError","queryStringArrayFormat","hrefToUrl","values","some","hasFiles","mergeDataIntoQueryString","_data","cancelable","fireBeforeEvent","Axios","CancelToken","_this4","fireStartEvent","params","token","Accept","X-Requested-With","X-Inertia","X-Inertia-Partial-Component","component","X-Inertia-Partial-Data","X-Inertia-Error-Bag","X-Inertia-Version","onUploadProgress","progress","percentage","Math","round","loaded","total","fireProgressEvent","reject","pageResponse","_window$history$state6","requestUrl","responseUrl","fireErrorEvent","scopedErrors","locationUrl","isCancel","exception","throwException","resolve","_this5","pushState","Promise","_this6","get","console","warn","post","POST","put","PUT","patch","PATCH","DELETE","remember","isServer","_this$page","restore","_window$history$state7","_window$history$state8","on","callback","defaultPrevented","preventDefault","start","finish","timeout","NProgress","isStarted","_event$detail$progres","set","max","done","remove","buildDOMElement","tag","template","content","firstChild","script","node","getAttributeNames","getAttribute","isInertiaManagedElement","element","nodeType","Node","ELEMENT_NODE","findMatchingElementIndex","elements","findIndex","update","head","childNodes","filter","targetElement","sourceElements","splice","sourceElement","isEqualNode","parentNode","replaceChild","removeChild","titleCallback","onUpdate","title","states","reduce","carry","concat","indexOf","match","defaults","collect","Renderer","commit","forceUpdate","createProvider","lastProviderId","id","connect","disconnect","color","includeCSS","showSpinner","addEventListeners","configure","textContent","injectCSS","currentTarget","tagName","toLowerCase","isContentEditable","isLink","which","altKey","ctrlKey","metaKey","shiftKey"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/modal.ts","../src/types.ts","../src/debounce.ts","../src/formData.ts","../src/url.ts","../src/events.ts","../src/router.ts","../src/files.ts","../src/progress.ts","../src/head.ts","../src/index.ts","../src/shouldIntercept.ts"],"sourcesContent":["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, CancelTokenSource } from 'axios'\n\nexport type Errors = Record<string, string>\nexport type ErrorBag = Record<string, Errors>\n\nexport type FormDataConvertible =\n | Array<FormDataConvertible>\n | Blob\n | FormDataEntryValue\n | Date\n | boolean\n | number\n | null\n | undefined\n\nexport enum Method {\n GET = 'get',\n POST = 'post',\n PUT = 'put',\n PATCH = 'patch',\n DELETE = 'delete',\n}\n\nexport type RequestPayload = Record<string, FormDataConvertible> | FormData\n\nexport interface PageProps {\n [key: string]: unknown\n}\n\nexport interface Page<SharedProps = PageProps> {\n component: string\n props: PageProps &\n SharedProps & {\n errors: Errors & ErrorBag\n }\n url: string\n version: string | null\n\n // Refactor away\n scrollRegions: Array<{ top: number; left: number }>\n rememberedState: Record<string, unknown>\n resolvedErrors: Errors\n}\n\nexport type PageResolver = (name: string) => Component\n\nexport type PageHandler = ({\n component,\n page,\n preserveState,\n}: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n}) => Promise<unknown>\n\nexport type PreserveStateOption = boolean | string | ((page: Page) => boolean)\n\nexport type Progress = ProgressEvent & { percentage: number }\n\nexport type LocationVisit = {\n preserveScroll: boolean\n}\n\nexport type Visit = {\n method: Method\n data: RequestPayload\n replace: boolean\n preserveScroll: PreserveStateOption\n preserveState: PreserveStateOption\n only: Array<string>\n headers: Record<string, string>\n errorBag: string | null\n forceFormData: boolean\n queryStringArrayFormat: 'indices' | 'brackets'\n}\n\nexport type GlobalEventsMap = {\n before: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: boolean | void\n }\n start: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: void\n }\n progress: {\n parameters: [Progress | undefined]\n details: {\n progress: Progress | undefined\n }\n result: void\n }\n finish: {\n parameters: [ActiveVisit]\n details: {\n visit: ActiveVisit\n }\n result: void\n }\n cancel: {\n parameters: []\n details: {}\n result: void\n }\n navigate: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n success: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n error: {\n parameters: [Errors]\n details: {\n errors: Errors\n }\n result: void\n }\n invalid: {\n parameters: [AxiosResponse]\n details: {\n response: AxiosResponse\n }\n result: boolean | void\n }\n exception: {\n parameters: [Error]\n details: {\n exception: Error\n }\n result: boolean | void\n }\n}\n\nexport type GlobalEventNames = keyof GlobalEventsMap\n\nexport type GlobalEvent<TEventName extends GlobalEventNames> = CustomEvent<GlobalEventDetails<TEventName>>\n\nexport type GlobalEventParameters<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['parameters']\n\nexport type GlobalEventResult<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['result']\n\nexport type GlobalEventDetails<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['details']\n\nexport type GlobalEventTrigger<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type GlobalEventCallback<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type VisitOptions = Partial<\n Visit & {\n onCancelToken: { ({ cancel }: { cancel: VoidFunction }): void }\n onBefore: GlobalEventCallback<'before'>\n onStart: GlobalEventCallback<'start'>\n onProgress: GlobalEventCallback<'progress'>\n onFinish: GlobalEventCallback<'finish'>\n onCancel: GlobalEventCallback<'cancel'>\n onSuccess: GlobalEventCallback<'success'>\n onError: GlobalEventCallback<'error'>\n }\n>\n\nexport type PendingVisit = Visit & {\n url: URL\n completed: boolean\n cancelled: boolean\n interrupted: boolean\n}\n\nexport type ActiveVisit = PendingVisit &\n Required<VisitOptions> & {\n cancelToken: CancelTokenSource\n }\n\nexport type VisitId = unknown\nexport type Component = unknown\n\nexport type InertiaAppResponse = Promise<{ head: string[]; body: string } | void>\n\ndeclare global {\n interface DocumentEventMap {\n 'inertia:before': GlobalEvent<'before'>\n 'inertia:start': GlobalEvent<'start'>\n 'inertia:progress': GlobalEvent<'progress'>\n 'inertia:success': GlobalEvent<'success'>\n 'inertia:error': GlobalEvent<'error'>\n 'inertia:invalid': GlobalEvent<'invalid'>\n 'inertia:exception': GlobalEvent<'exception'>\n 'inertia:finish': GlobalEvent<'finish'>\n 'inertia:navigate': GlobalEvent<'navigate'>\n }\n}\n","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 { FormDataConvertible } from './types'\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 * as qs from 'qs'\nimport deepmerge from 'deepmerge'\nimport { FormDataConvertible, Method } from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), window.location.toString())\n}\n\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === Method.GET && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === Method.GET && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n","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","import modal from './modal'\nimport debounce from './debounce'\nimport { hasFiles } from './files'\nimport { objectToFormData } from './formData'\nimport { default as Axios, AxiosResponse } from 'axios'\nimport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nimport {\n ActiveVisit,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n LocationVisit,\n Method,\n Page,\n PageHandler,\n PageResolver,\n PendingVisit,\n PreserveStateOption,\n RequestPayload,\n VisitId,\n VisitOptions,\n} from './types'\nimport {\n fireBeforeEvent,\n fireErrorEvent,\n fireExceptionEvent,\n fireFinishEvent,\n fireInvalidEvent,\n fireNavigateEvent,\n fireProgressEvent,\n fireStartEvent,\n fireSuccessEvent,\n} from './events'\n\nconst isServer = typeof window === 'undefined'\n\nexport class Router {\n protected page!: Page\n protected resolveComponent!: PageResolver\n protected swapComponent!: PageHandler\n protected navigationType?: string\n protected activeVisit?: ActiveVisit\n protected visitId: VisitId = null\n\n public init({\n initialPage,\n resolveComponent,\n swapComponent,\n }: {\n initialPage: Page\n resolveComponent: PageResolver\n swapComponent: PageHandler\n }): void {\n this.page = initialPage\n this.resolveComponent = resolveComponent\n this.swapComponent = swapComponent\n\n this.setNavigationType()\n this.clearRememberedStateOnReload()\n\n if (this.isBackForwardVisit()) {\n this.handleBackForwardVisit(this.page)\n } else if (this.isLocationVisit()) {\n this.handleLocationVisit(this.page)\n } else {\n this.handleInitialPageVisit(this.page)\n }\n\n this.setupEventListeners()\n }\n\n protected setNavigationType(): void {\n this.navigationType =\n window.performance && window.performance.getEntriesByType('navigation').length > 0\n ? (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n : 'navigate'\n }\n\n protected clearRememberedStateOnReload(): void {\n if (this.navigationType === 'reload' && window.history.state?.rememberedState) {\n delete window.history.state.rememberedState\n }\n }\n\n protected handleInitialPageVisit(page: Page): void {\n this.page.url += window.location.hash\n this.setPage(page, { preserveState: true }).then(() => fireNavigateEvent(page))\n }\n\n protected setupEventListeners(): void {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n document.addEventListener('scroll', debounce(this.handleScrollEvent.bind(this), 100), true)\n }\n\n protected scrollRegions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n protected handleScrollEvent(event: Event): void {\n if (\n typeof (event.target as Element).hasAttribute === 'function' &&\n (event.target as Element).hasAttribute('scroll-region')\n ) {\n this.saveScrollPositions()\n }\n }\n\n protected saveScrollPositions(): void {\n this.replaceState({\n ...this.page,\n scrollRegions: Array.from(this.scrollRegions()).map((region) => {\n return {\n top: region.scrollTop,\n left: region.scrollLeft,\n }\n }),\n })\n }\n\n protected resetScrollPositions(): void {\n window.scrollTo(0, 0)\n this.scrollRegions().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 this.saveScrollPositions()\n if (window.location.hash) {\n document.getElementById(window.location.hash.slice(1))?.scrollIntoView()\n }\n }\n\n protected restoreScrollPositions(): void {\n if (this.page.scrollRegions) {\n this.scrollRegions().forEach((region: Element, index: number) => {\n const scrollPosition = this.page.scrollRegions[index]\n if (!scrollPosition) {\n return\n } else 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\n protected isBackForwardVisit(): boolean {\n return window.history.state && this.navigationType === 'back_forward'\n }\n\n protected handleBackForwardVisit(page: Page): void {\n window.history.state.version = page.version\n this.setPage(window.history.state, { preserveScroll: true, preserveState: true }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n\n protected locationVisit(url: URL, preserveScroll: LocationVisit['preserveScroll']): boolean | void {\n try {\n const locationVisit: LocationVisit = { preserveScroll }\n window.sessionStorage.setItem('inertiaLocationVisit', JSON.stringify(locationVisit))\n window.location.href = url.href\n if (urlWithoutHash(window.location).href === urlWithoutHash(url).href) {\n window.location.reload()\n }\n } catch (error) {\n return false\n }\n }\n\n protected isLocationVisit(): boolean {\n try {\n return window.sessionStorage.getItem('inertiaLocationVisit') !== null\n } catch (error) {\n return false\n }\n }\n\n protected handleLocationVisit(page: Page): void {\n const locationVisit: LocationVisit = JSON.parse(window.sessionStorage.getItem('inertiaLocationVisit') || '')\n window.sessionStorage.removeItem('inertiaLocationVisit')\n page.url += window.location.hash\n page.rememberedState = window.history.state?.rememberedState ?? {}\n page.scrollRegions = window.history.state?.scrollRegions ?? []\n this.setPage(page, { preserveScroll: locationVisit.preserveScroll, preserveState: true }).then(() => {\n if (locationVisit.preserveScroll) {\n this.restoreScrollPositions()\n }\n fireNavigateEvent(page)\n })\n }\n\n protected isLocationVisitResponse(response: AxiosResponse): boolean {\n return !!(response && response.status === 409 && response.headers['x-inertia-location'])\n }\n\n protected isInertiaResponse(response: AxiosResponse): boolean {\n return !!response?.headers['x-inertia']\n }\n\n protected createVisitId(): VisitId {\n this.visitId = {}\n return this.visitId\n }\n\n protected cancelVisit(\n activeVisit: ActiveVisit,\n { cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean },\n ): void {\n if (activeVisit && !activeVisit.completed && !activeVisit.cancelled && !activeVisit.interrupted) {\n activeVisit.cancelToken.cancel()\n activeVisit.onCancel()\n activeVisit.completed = false\n activeVisit.cancelled = cancelled\n activeVisit.interrupted = interrupted\n fireFinishEvent(activeVisit)\n activeVisit.onFinish(activeVisit)\n }\n }\n\n protected finishVisit(visit: ActiveVisit): void {\n if (!visit.cancelled && !visit.interrupted) {\n visit.completed = true\n visit.cancelled = false\n visit.interrupted = false\n fireFinishEvent(visit)\n visit.onFinish(visit)\n }\n }\n\n protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean | string {\n if (typeof value === 'function') {\n return value(page)\n } else if (value === 'errors') {\n return Object.keys(page.props.errors || {}).length > 0\n } else {\n return value\n }\n }\n\n public visit(\n href: string | URL,\n {\n method = Method.GET,\n data = {},\n replace = false,\n preserveScroll = false,\n preserveState = false,\n only = [],\n headers = {},\n errorBag = '',\n forceFormData = false,\n onCancelToken = () => {},\n onBefore = () => {},\n onStart = () => {},\n onProgress = () => {},\n onFinish = () => {},\n onCancel = () => {},\n onSuccess = () => {},\n onError = () => {},\n queryStringArrayFormat = 'brackets',\n }: VisitOptions = {},\n ): void {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !(data instanceof FormData)) {\n data = objectToFormData(data)\n }\n\n if (!(data instanceof FormData)) {\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n url = hrefToUrl(_href)\n data = _data\n }\n\n const visit: PendingVisit = {\n url,\n method,\n data,\n replace,\n preserveScroll,\n preserveState,\n only,\n headers,\n errorBag,\n forceFormData,\n queryStringArrayFormat,\n cancelled: false,\n completed: false,\n interrupted: false,\n }\n\n if (onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { interrupted: true })\n }\n\n this.saveScrollPositions()\n\n const visitId = this.createVisitId()\n this.activeVisit = {\n ...visit,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess,\n onError,\n queryStringArrayFormat,\n cancelToken: Axios.CancelToken.source(),\n }\n\n onCancelToken({\n cancel: () => {\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { cancelled: true })\n }\n },\n })\n\n fireStartEvent(visit)\n onStart(visit)\n\n Axios({\n method,\n url: urlWithoutHash(url).href,\n data: method === Method.GET ? {} : data,\n params: method === Method.GET ? data : {},\n cancelToken: this.activeVisit.cancelToken.token,\n headers: {\n ...headers,\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n ...(only.length\n ? {\n 'X-Inertia-Partial-Component': this.page.component,\n 'X-Inertia-Partial-Data': only.join(','),\n }\n : {}),\n ...(errorBag && errorBag.length ? { 'X-Inertia-Error-Bag': errorBag } : {}),\n ...(this.page.version ? { 'X-Inertia-Version': this.page.version } : {}),\n },\n onUploadProgress: (progress) => {\n if (data instanceof FormData) {\n progress.percentage = Math.round((progress.loaded / progress.total) * 100)\n fireProgressEvent(progress)\n onProgress(progress)\n }\n },\n })\n .then((response) => {\n if (!this.isInertiaResponse(response)) {\n return Promise.reject({ response })\n }\n\n const pageResponse: Page = response.data\n if (only.length && pageResponse.component === this.page.component) {\n pageResponse.props = { ...this.page.props, ...pageResponse.props }\n }\n preserveScroll = this.resolvePreserveOption(preserveScroll, pageResponse) as boolean\n preserveState = this.resolvePreserveOption(preserveState, pageResponse)\n if (preserveState && window.history.state?.rememberedState && pageResponse.component === this.page.component) {\n pageResponse.rememberedState = window.history.state.rememberedState\n }\n const requestUrl = url\n const responseUrl = hrefToUrl(pageResponse.url)\n if (requestUrl.hash && !responseUrl.hash && urlWithoutHash(requestUrl).href === responseUrl.href) {\n responseUrl.hash = requestUrl.hash\n pageResponse.url = responseUrl.href\n }\n return this.setPage(pageResponse, { visitId, replace, preserveScroll, preserveState })\n })\n .then(() => {\n const errors = this.page.props.errors || {}\n if (Object.keys(errors).length > 0) {\n const scopedErrors = errorBag ? (errors[errorBag] ? errors[errorBag] : {}) : errors\n fireErrorEvent(scopedErrors)\n return onError(scopedErrors)\n }\n fireSuccessEvent(this.page)\n return onSuccess(this.page)\n })\n .catch((error) => {\n if (this.isInertiaResponse(error.response)) {\n return this.setPage(error.response.data, { visitId })\n } else if (this.isLocationVisitResponse(error.response)) {\n const locationUrl = hrefToUrl(error.response.headers['x-inertia-location'])\n const requestUrl = url\n if (requestUrl.hash && !locationUrl.hash && urlWithoutHash(requestUrl).href === locationUrl.href) {\n locationUrl.hash = requestUrl.hash\n }\n this.locationVisit(locationUrl, preserveScroll === true)\n } else if (error.response) {\n if (fireInvalidEvent(error.response)) {\n modal.show(error.response.data)\n }\n } else {\n return Promise.reject(error)\n }\n })\n .then(() => {\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n })\n .catch((error) => {\n if (!Axios.isCancel(error)) {\n const throwException = fireExceptionEvent(error)\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n if (throwException) {\n return Promise.reject(error)\n }\n }\n })\n }\n\n protected setPage(\n page: Page,\n {\n visitId = this.createVisitId(),\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: {\n visitId?: VisitId\n replace?: boolean\n preserveScroll?: PreserveStateOption\n preserveState?: PreserveStateOption\n } = {},\n ): Promise<void> {\n return Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n page.scrollRegions = page.scrollRegions || []\n page.rememberedState = page.rememberedState || {}\n replace = replace || hrefToUrl(page.url).href === window.location.href\n replace ? this.replaceState(page) : this.pushState(page)\n this.swapComponent({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n this.resetScrollPositions()\n }\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n }\n })\n }\n\n protected pushState(page: Page): void {\n this.page = page\n window.history.pushState(page, '', page.url)\n }\n\n protected replaceState(page: Page): void {\n this.page = page\n window.history.replaceState(page, '', page.url)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n if (event.state !== null) {\n const page = event.state\n const visitId = this.createVisitId()\n Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n this.page = page\n this.swapComponent({ component, page, preserveState: false }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n })\n } else {\n const url = hrefToUrl(this.page.url)\n url.hash = window.location.hash\n this.replaceState({ ...this.page, url: url.href })\n this.resetScrollPositions()\n }\n }\n\n public get(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { ...options, method: Method.GET, data })\n }\n\n public reload(options: Exclude<VisitOptions, 'preserveScroll' | 'preserveState'> = {}): void {\n return this.visit(window.location.href, { ...options, preserveScroll: true, preserveState: true })\n }\n\n public replace(url: URL | string, options: Exclude<VisitOptions, 'replace'> = {}): void {\n console.warn(\n `Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${\n options.method ?? 'get'\n }() instead.`,\n )\n return this.visit(url, { preserveState: true, ...options, replace: true })\n }\n\n public post(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.POST, data })\n }\n\n public put(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PUT, data })\n }\n\n public patch(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PATCH, data })\n }\n\n public delete(url: URL | string, options: Exclude<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.DELETE })\n }\n\n public remember(data: unknown, key = 'default'): void {\n if (isServer) {\n return\n }\n\n this.replaceState({\n ...this.page,\n rememberedState: {\n ...this.page?.rememberedState,\n [key]: data,\n },\n })\n }\n\n public restore(key = 'default'): unknown {\n if (isServer) {\n return\n }\n\n return window.history.state?.rememberedState?.[key]\n }\n\n public on<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 if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n document.addEventListener(`inertia:${type}`, listener)\n return () => document.removeEventListener(`inertia:${type}`, listener)\n }\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 { GlobalEvent } from './types'\nimport NProgress from 'nprogress'\n\nlet timeout: NodeJS.Timeout | null = null\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', start.bind(null, delay))\n document.addEventListener('inertia:progress', progress)\n document.addEventListener('inertia:finish', finish)\n}\n\nfunction start(delay: number): void {\n timeout = setTimeout(() => NProgress.start(), delay)\n}\n\nfunction progress(event: GlobalEvent<'progress'>) {\n if (NProgress.isStarted() && event.detail.progress?.percentage) {\n NProgress.set(Math.max(NProgress.status!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>) {\n clearTimeout(timeout!)\n if (!NProgress.isStarted()) {\n return\n } else if (event.detail.visit.completed) {\n NProgress.done()\n } else if (event.detail.visit.interrupted) {\n NProgress.set(0)\n } else if (event.detail.visit.cancelled) {\n NProgress.done()\n NProgress.remove()\n }\n}\n\nfunction injectCSS(color: string): void {\n const element = document.createElement('style')\n element.type = 'text/css'\n element.textContent = `\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n NProgress.configure({ showSpinner })\n if (includeCSS) {\n injectCSS(color)\n }\n}\n","import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n","import { Router } from './router'\n\nexport * from './types'\n\nexport { default as setupProgress } from './progress'\nexport { default as createHeadManager } from './head'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\n\nexport const router = new Router()\n","export default function shouldIntercept(event: KeyboardEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\n (isLink && event.which > 1) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey)\n )\n}\n"],"names":["Method","modal","listener","show","html","JSON","stringify","document","createElement","page","innerHTML","querySelectorAll","forEach","a","setAttribute","this","style","position","width","height","padding","boxSizing","backgroundColor","zIndex","addEventListener","hide","iframe","borderRadius","appendChild","body","prepend","overflow","contentWindow","open","write","outerHTML","close","hideOnEscape","bind","removeEventListener","event","keyCode","fn","delay","clearTimeout","timeoutID","setTimeout","apply","_this","source","form","parentKey","Object","prototype","hasOwnProperty","call","key","append","composeKey","parent","value","Array","isArray","from","keys","index","toString","toISOString","name","objectToFormData","href","window","location","method","data","qsArrayFormat","test","hasHost","startsWith","hasAbsolutePath","includes","GET","length","url","search","qs","deepmerge","ignoreQueryPrefix","encodeValuesOnly","arrayFormat","protocol","host","pathname","hasRelativePath","substring","hasSearch","hasHash","hash","join","options","dispatchEvent","visit","detail","init","resolveComponent","swapComponent","initialPage","setNavigationType","clearRememberedStateOnReload","isBackForwardVisit","handleBackForwardVisit","isLocationVisit","handleLocationVisit","handleInitialPageVisit","setupEventListeners","navigationType","performance","getEntriesByType","type","history","state","_window$history$state","rememberedState","setPage","preserveState","then","handlePopstateEvent","debounce","handleScrollEvent","scrollRegions","target","hasAttribute","saveScrollPositions","replaceState","map","region","top","scrollTop","left","scrollLeft","resetScrollPositions","scrollTo","getElementById","slice","_document$getElementB","scrollIntoView","restoreScrollPositions","scrollPosition","version","preserveScroll","_this2","fireNavigateEvent","locationVisit","sessionStorage","setItem","urlWithoutHash","reload","error","getItem","parse","removeItem","_window$history$state3","_window$history$state5","_this3","isLocationVisitResponse","response","status","headers","isInertiaResponse","createVisitId","visitId","cancelVisit","activeVisit","cancelled","interrupted","completed","cancelToken","cancel","onCancel","fireFinishEvent","onFinish","finishVisit","resolvePreserveOption","props","errors","replace","only","errorBag","forceFormData","onCancelToken","onBefore","onStart","onProgress","onSuccess","onError","queryStringArrayFormat","hrefToUrl","values","some","hasFiles","mergeDataIntoQueryString","_data","cancelable","fireBeforeEvent","Axios","CancelToken","_this4","fireStartEvent","params","token","Accept","X-Requested-With","X-Inertia","X-Inertia-Partial-Component","component","X-Inertia-Partial-Data","X-Inertia-Error-Bag","X-Inertia-Version","onUploadProgress","progress","percentage","Math","round","loaded","total","fireProgressEvent","reject","pageResponse","_window$history$state6","requestUrl","responseUrl","fireErrorEvent","scopedErrors","locationUrl","isCancel","exception","throwException","resolve","_this5","pushState","Promise","_this6","get","console","warn","post","POST","put","PUT","patch","PATCH","DELETE","remember","isServer","_this$page","restore","_window$history$state7","_window$history$state8","on","callback","defaultPrevented","preventDefault","start","finish","timeout","NProgress","isStarted","_event$detail$progres","set","max","done","remove","buildDOMElement","tag","template","content","firstChild","script","node","getAttributeNames","getAttribute","isInertiaManagedElement","element","nodeType","Node","ELEMENT_NODE","findMatchingElementIndex","elements","findIndex","update","head","childNodes","filter","targetElement","sourceElements","splice","sourceElement","isEqualNode","parentNode","_targetElement$parent2","replaceChild","_targetElement$parent","removeChild","titleCallback","onUpdate","title","states","reduce","carry","concat","indexOf","match","defaults","collect","Renderer","commit","forceUpdate","createProvider","lastProviderId","id","connect","disconnect","color","includeCSS","showSpinner","addEventListeners","configure","textContent","injectCSS","currentTarget","tagName","toLowerCase","isContentEditable","isLink","which","altKey","ctrlKey","metaKey","shiftKey"],"mappings":"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"}
|
package/dist/server.esm.js
CHANGED
|
@@ -7,10 +7,8 @@ const readableToString = readable => new Promise((resolve, reject) => {
|
|
|
7
7
|
readable.on('end', () => resolve(data));
|
|
8
8
|
readable.on('error', err => reject(err));
|
|
9
9
|
});
|
|
10
|
-
|
|
11
10
|
var server = ((render, port) => {
|
|
12
11
|
const _port = port || 13714;
|
|
13
|
-
|
|
14
12
|
const routes = {
|
|
15
13
|
'/health': async () => ({
|
|
16
14
|
status: 'OK',
|
|
@@ -25,7 +23,6 @@ var server = ((render, port) => {
|
|
|
25
23
|
};
|
|
26
24
|
createServer(async (request, response) => {
|
|
27
25
|
const dispatchRoute = routes[request.url] || routes['/404'];
|
|
28
|
-
|
|
29
26
|
try {
|
|
30
27
|
response.writeHead(200, {
|
|
31
28
|
'Content-Type': 'application/json',
|
|
@@ -35,7 +32,6 @@ var server = ((render, port) => {
|
|
|
35
32
|
} catch (e) {
|
|
36
33
|
console.error(e);
|
|
37
34
|
}
|
|
38
|
-
|
|
39
35
|
response.end();
|
|
40
36
|
}).listen(_port, () => console.log('Inertia SSR server started.'));
|
|
41
37
|
console.log(`Starting SSR server on port ${_port}...`);
|
package/dist/server.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.esm.js","sources":["../src/server.ts"],"sourcesContent":["import * as process from 'process'\nimport { createServer, IncomingMessage } from 'http'\nimport { Page, InertiaAppResponse } from './types'\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage) => Promise<unknown>\n\nconst readableToString: (readable: IncomingMessage) => Promise<string> = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, port?: number): void => {\n const _port = port || 13714\n\n const routes: Record<string, RouteHandler> = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': () => process.exit(),\n '/render': async (request) => render(JSON.parse(await readableToString(request))),\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[<string>request.url] || routes['/404']\n\n try {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(await dispatchRoute(request)))\n } catch (e) {\n console.error(e)\n }\n\n response.end()\n }).listen(_port, () => console.log('Inertia SSR server started.'))\n\n console.log(`Starting SSR server on port ${_port}...`)\n}\n"],"names":["readableToString","readable","Promise","resolve","reject","data","on","chunk","err","render","port","_port","routes","status","timestamp","Date","now","process","request","JSON","parse","createServer","response","dispatchRoute","url","writeHead","Server","write","stringify","e","console","error","end","listen","log"],"mappings":";;;AAOA,MAAMA,gBAAgB,GAAoDC,
|
|
1
|
+
{"version":3,"file":"server.esm.js","sources":["../src/server.ts"],"sourcesContent":["import * as process from 'process'\nimport { createServer, IncomingMessage } from 'http'\nimport { Page, InertiaAppResponse } from './types'\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage) => Promise<unknown>\n\nconst readableToString: (readable: IncomingMessage) => Promise<string> = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, port?: number): void => {\n const _port = port || 13714\n\n const routes: Record<string, RouteHandler> = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': () => process.exit(),\n '/render': async (request) => render(JSON.parse(await readableToString(request))),\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[<string>request.url] || routes['/404']\n\n try {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(await dispatchRoute(request)))\n } catch (e) {\n console.error(e)\n }\n\n response.end()\n }).listen(_port, () => console.log('Inertia SSR server started.'))\n\n console.log(`Starting SSR server on port ${_port}...`)\n}\n"],"names":["readableToString","readable","Promise","resolve","reject","data","on","chunk","err","render","port","_port","routes","status","timestamp","Date","now","process","request","JSON","parse","createServer","response","dispatchRoute","url","writeHead","Server","write","stringify","e","console","error","end","listen","log"],"mappings":";;;AAOA,MAAMA,gBAAgB,GAAoDC,QAAQ,IAChF,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM;EAC1B,IAAIC,IAAI,GAAG,EAAE;EACbJ,QAAQ,CAACK,EAAE,CAAC,MAAM,EAAGC,KAAK,IAAMF,IAAI,IAAIE,KAAM,CAAC;EAC/CN,QAAQ,CAACK,EAAE,CAAC,KAAK,EAAE,MAAMH,OAAO,CAACE,IAAI,CAAC,CAAC;EACvCJ,QAAQ,CAACK,EAAE,CAAC,OAAO,EAAGE,GAAG,IAAKJ,MAAM,CAACI,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEJ,cAAe,CAACC,MAAmB,EAAEC,IAAa;EAChD,MAAMC,KAAK,GAAGD,IAAI,IAAI,KAAK;EAE3B,MAAME,MAAM,GAAiC;IAC3C,SAAS,EAAE,aAAa;MAAEC,MAAM,EAAE,IAAI;MAAEC,SAAS,EAAEC,IAAI,CAACC,GAAG;KAAI,CAAC;IAChE,WAAW,EAAE,MAAMC,IAAY,EAAE;IACjC,SAAS,EAAE,MAAOC,OAAO,IAAKT,MAAM,CAACU,IAAI,CAACC,KAAK,CAAC,MAAMpB,gBAAgB,CAACkB,OAAO,CAAC,CAAC,CAAC;IACjF,MAAM,EAAE,aAAa;MAAEL,MAAM,EAAE,WAAW;MAAEC,SAAS,EAAEC,IAAI,CAACC,GAAG;KAAI;GACpE;EAEDK,YAAY,CAAC,OAAOH,OAAO,EAAEI,QAAQ;IACnC,MAAMC,aAAa,GAAGX,MAAM,CAASM,OAAO,CAACM,GAAG,CAAC,IAAIZ,MAAM,CAAC,MAAM,CAAC;IAEnE,IAAI;MACFU,QAAQ,CAACG,SAAS,CAAC,GAAG,EAAE;QAAE,cAAc,EAAE,kBAAkB;QAAEC,MAAM,EAAE;OAAkB,CAAC;MACzFJ,QAAQ,CAACK,KAAK,CAACR,IAAI,CAACS,SAAS,CAAC,MAAML,aAAa,CAACL,OAAO,CAAC,CAAC,CAAC;KAC7D,CAAC,OAAOW,CAAC,EAAE;MACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;;IAGlBP,QAAQ,CAACU,GAAG,EAAE;GACf,CAAC,CAACC,MAAM,CAACtB,KAAK,EAAE,MAAMmB,OAAO,CAACI,GAAG,CAAC,6BAA6B,CAAC,CAAC;EAElEJ,OAAO,CAACI,GAAG,gCAAgCvB,UAAU,CAAC;AACxD,CAAC;;;;"}
|
package/dist/server.js
CHANGED
|
@@ -7,10 +7,8 @@ const readableToString = readable => new Promise((resolve, reject) => {
|
|
|
7
7
|
readable.on('end', () => resolve(data));
|
|
8
8
|
readable.on('error', err => reject(err));
|
|
9
9
|
});
|
|
10
|
-
|
|
11
10
|
var server = ((render, port) => {
|
|
12
11
|
const _port = port || 13714;
|
|
13
|
-
|
|
14
12
|
const routes = {
|
|
15
13
|
'/health': async () => ({
|
|
16
14
|
status: 'OK',
|
|
@@ -25,7 +23,6 @@ var server = ((render, port) => {
|
|
|
25
23
|
};
|
|
26
24
|
http.createServer(async (request, response) => {
|
|
27
25
|
const dispatchRoute = routes[request.url] || routes['/404'];
|
|
28
|
-
|
|
29
26
|
try {
|
|
30
27
|
response.writeHead(200, {
|
|
31
28
|
'Content-Type': 'application/json',
|
|
@@ -35,7 +32,6 @@ var server = ((render, port) => {
|
|
|
35
32
|
} catch (e) {
|
|
36
33
|
console.error(e);
|
|
37
34
|
}
|
|
38
|
-
|
|
39
35
|
response.end();
|
|
40
36
|
}).listen(_port, () => console.log('Inertia SSR server started.'));
|
|
41
37
|
console.log(`Starting SSR server on port ${_port}...`);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../src/server.ts"],"sourcesContent":["import * as process from 'process'\nimport { createServer, IncomingMessage } from 'http'\nimport { Page, InertiaAppResponse } from './types'\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage) => Promise<unknown>\n\nconst readableToString: (readable: IncomingMessage) => Promise<string> = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, port?: number): void => {\n const _port = port || 13714\n\n const routes: Record<string, RouteHandler> = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': () => process.exit(),\n '/render': async (request) => render(JSON.parse(await readableToString(request))),\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[<string>request.url] || routes['/404']\n\n try {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(await dispatchRoute(request)))\n } catch (e) {\n console.error(e)\n }\n\n response.end()\n }).listen(_port, () => console.log('Inertia SSR server started.'))\n\n console.log(`Starting SSR server on port ${_port}...`)\n}\n"],"names":["readableToString","readable","Promise","resolve","reject","data","on","chunk","err","render","port","_port","routes","status","timestamp","Date","now","process","request","JSON","parse","createServer","response","dispatchRoute","url","writeHead","Server","write","stringify","e","console","error","end","listen","log"],"mappings":";;;AAOA,MAAMA,gBAAgB,GAAoDC,
|
|
1
|
+
{"version":3,"file":"server.js","sources":["../src/server.ts"],"sourcesContent":["import * as process from 'process'\nimport { createServer, IncomingMessage } from 'http'\nimport { Page, InertiaAppResponse } from './types'\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage) => Promise<unknown>\n\nconst readableToString: (readable: IncomingMessage) => Promise<string> = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, port?: number): void => {\n const _port = port || 13714\n\n const routes: Record<string, RouteHandler> = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': () => process.exit(),\n '/render': async (request) => render(JSON.parse(await readableToString(request))),\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[<string>request.url] || routes['/404']\n\n try {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(await dispatchRoute(request)))\n } catch (e) {\n console.error(e)\n }\n\n response.end()\n }).listen(_port, () => console.log('Inertia SSR server started.'))\n\n console.log(`Starting SSR server on port ${_port}...`)\n}\n"],"names":["readableToString","readable","Promise","resolve","reject","data","on","chunk","err","render","port","_port","routes","status","timestamp","Date","now","process","request","JSON","parse","createServer","response","dispatchRoute","url","writeHead","Server","write","stringify","e","console","error","end","listen","log"],"mappings":";;;AAOA,MAAMA,gBAAgB,GAAoDC,QAAQ,IAChF,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM;EAC1B,IAAIC,IAAI,GAAG,EAAE;EACbJ,QAAQ,CAACK,EAAE,CAAC,MAAM,EAAGC,KAAK,IAAMF,IAAI,IAAIE,KAAM,CAAC;EAC/CN,QAAQ,CAACK,EAAE,CAAC,KAAK,EAAE,MAAMH,OAAO,CAACE,IAAI,CAAC,CAAC;EACvCJ,QAAQ,CAACK,EAAE,CAAC,OAAO,EAAGE,GAAG,IAAKJ,MAAM,CAACI,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEJ,cAAe,CAACC,MAAmB,EAAEC,IAAa;EAChD,MAAMC,KAAK,GAAGD,IAAI,IAAI,KAAK;EAE3B,MAAME,MAAM,GAAiC;IAC3C,SAAS,EAAE,aAAa;MAAEC,MAAM,EAAE,IAAI;MAAEC,SAAS,EAAEC,IAAI,CAACC,GAAG;KAAI,CAAC;IAChE,WAAW,EAAE,MAAMC,YAAY,EAAE;IACjC,SAAS,EAAE,MAAOC,OAAO,IAAKT,MAAM,CAACU,IAAI,CAACC,KAAK,CAAC,MAAMpB,gBAAgB,CAACkB,OAAO,CAAC,CAAC,CAAC;IACjF,MAAM,EAAE,aAAa;MAAEL,MAAM,EAAE,WAAW;MAAEC,SAAS,EAAEC,IAAI,CAACC,GAAG;KAAI;GACpE;EAEDK,iBAAY,CAAC,OAAOH,OAAO,EAAEI,QAAQ;IACnC,MAAMC,aAAa,GAAGX,MAAM,CAASM,OAAO,CAACM,GAAG,CAAC,IAAIZ,MAAM,CAAC,MAAM,CAAC;IAEnE,IAAI;MACFU,QAAQ,CAACG,SAAS,CAAC,GAAG,EAAE;QAAE,cAAc,EAAE,kBAAkB;QAAEC,MAAM,EAAE;OAAkB,CAAC;MACzFJ,QAAQ,CAACK,KAAK,CAACR,IAAI,CAACS,SAAS,CAAC,MAAML,aAAa,CAACL,OAAO,CAAC,CAAC,CAAC;KAC7D,CAAC,OAAOW,CAAC,EAAE;MACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;;IAGlBP,QAAQ,CAACU,GAAG,EAAE;GACf,CAAC,CAACC,MAAM,CAACtB,KAAK,EAAE,MAAMmB,OAAO,CAACI,GAAG,CAAC,6BAA6B,CAAC,CAAC;EAElEJ,OAAO,CAACI,GAAG,gCAAgCvB,UAAU,CAAC;AACxD,CAAC;;;;"}
|