inertiax-core 1.0.15

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Jonathan Reinink <jonathan@reinink.ca>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,73 @@
1
+ import{default as B}from"axios";function T(t,e){let i;return function(...r){clearTimeout(i),i=setTimeout(()=>t.apply(this,r),e)}}function v(t,e){return document.dispatchEvent(new CustomEvent(`inertia:${t}`,e))}var j=t=>v("before",{cancelable:!0,detail:{visit:t}}),H=t=>v("error",{detail:{errors:t}}),$=t=>v("exception",{cancelable:!0,detail:{exception:t}}),k=t=>v("finish",{detail:{visit:t}}),q=t=>v("invalid",{cancelable:!0,detail:{response:t}}),S=t=>v("navigate",{detail:{page:t}}),W=t=>v("progress",{detail:{progress:t}}),_=t=>v("start",{detail:{visit:t}}),K=t=>v("success",{detail:{page:t}});function I(t){return t instanceof File||t instanceof Blob||t instanceof FileList&&t.length>0||t instanceof FormData&&Array.from(t.values()).some(e=>I(e))||typeof t=="object"&&t!==null&&Object.values(t).some(e=>I(e))}function A(t,e=new FormData,i=null){t=t||{};for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&J(e,X(i,r),t[r]);return e}function X(t,e){return t?t+"["+e+"]":e}function J(t,e,i){if(Array.isArray(i))return Array.from(i.keys()).forEach(r=>J(t,X(e,r.toString()),i[r]));if(i instanceof Date)return t.append(e,i.toISOString());if(i instanceof File)return t.append(e,i,i.name);if(i instanceof Blob)return t.append(e,i);if(typeof i=="boolean")return t.append(e,i?"1":"0");if(typeof i=="string")return t.append(e,i);if(typeof i=="number")return t.append(e,`${i}`);if(i==null)return t.append(e,"");A(i,t,e)}var z={modal:null,listener:null,show(t){typeof t=="object"&&(t=`All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(t)}`);let e=document.createElement("html");e.innerHTML=t,e.querySelectorAll("a").forEach(r=>r.setAttribute("target","_top")),this.modal=document.createElement("div"),this.modal.style.position="fixed",this.modal.style.width="100vw",this.modal.style.height="100vh",this.modal.style.padding="50px",this.modal.style.boxSizing="border-box",this.modal.style.backgroundColor="rgba(0, 0, 0, .6)",this.modal.style.zIndex=2e5,this.modal.addEventListener("click",()=>this.hide());let i=document.createElement("iframe");if(i.style.backgroundColor="white",i.style.borderRadius="5px",i.style.width="100%",i.style.height="100%",this.modal.appendChild(i),document.body.prepend(this.modal),document.body.style.overflow="hidden",!i.contentWindow)throw new Error("iframe not yet ready.");i.contentWindow.document.open(),i.contentWindow.document.write(e.outerHTML),i.contentWindow.document.close(),this.listener=this.hideOnEscape.bind(this),document.addEventListener("keydown",this.listener)},hide(){this.modal.outerHTML="",this.modal=null,document.body.style.overflow="visible",document.removeEventListener("keydown",this.listener)},hideOnEscape(t){t.keyCode===27&&this.hide()}};import ne from"deepmerge";import*as O from"qs";function E(t){return new URL(t.toString(),window.location.toString())}function D(t,e,i,r="brackets"){let s=/^https?:\/\//.test(e.toString()),l=s||e.toString().startsWith("/"),u=!l&&!e.toString().startsWith("#")&&!e.toString().startsWith("?"),d=e.toString().includes("?")||t==="get"&&Object.keys(i).length,f=e.toString().includes("#"),c=new URL(e.toString(),"http://localhost");return t==="get"&&Object.keys(i).length&&(c.search=O.stringify(ne(O.parse(c.search,{ignoreQueryPrefix:!0}),i),{encodeValuesOnly:!0,arrayFormat:r}),i={}),[[s?`${c.protocol}//${c.host}`:"",l?c.pathname:"",u?c.pathname.substring(1):"",d?c.search:"",f?c.hash:""].join(""),i]}function x(t){return t=new URL(t.href),t.hash="",t}var Q=typeof window>"u",C=class{constructor(){this.visitId=null}init({initialPage:e,resolveComponent:i,swapComponent:r}){this.page=e,this.resolveComponent=i,this.swapComponent=r,this.setNavigationType(),this.clearRememberedStateOnReload(),this.isBackForwardVisit()?this.handleBackForwardVisit(this.page):this.isLocationVisit()?this.handleLocationVisit(this.page):this.handleInitialPageVisit(this.page),this.setupEventListeners()}setNavigationType(){this.navigationType=window.performance&&window.performance.getEntriesByType("navigation").length>0?window.performance.getEntriesByType("navigation")[0].type:"navigate"}clearRememberedStateOnReload(){this.navigationType==="reload"&&window.history.state?.rememberedState&&delete window.history.state.rememberedState}handleInitialPageVisit(e){this.page.url+=window.location.hash,this.setPage(e,{preserveScroll:!0,preserveState:!0}).then(()=>S(e))}setupEventListeners(){window.addEventListener("popstate",this.handlePopstateEvent.bind(this)),document.addEventListener("scroll",T(this.handleScrollEvent.bind(this),100),!0),document.addEventListener("click",e=>{let i=e.target,r=i.closest("a"),s=i.closest("[data-inertia-frame-id]")?.dataset.inertiaFrameId;!r||r.rel=="external"||r.target=="_blank"||r.href&&r.href.startsWith(location.origin)&&(e.preventDefault(),e.stopPropagation(),this.visit(r.href,{method:r.dataset.method,target:r.dataset.target||s}))})}scrollRegions(){return document.querySelectorAll("[scroll-region]")}handleScrollEvent(e){typeof e.target.hasAttribute=="function"&&e.target.hasAttribute("scroll-region")&&this.saveScrollPositions()}saveScrollPositions(){this.replaceState({...this.page,scrollRegions:Array.from(this.scrollRegions()).map(e=>({top:e.scrollTop,left:e.scrollLeft}))})}resetScrollPositions(){window.scrollTo(0,0),this.scrollRegions().forEach(e=>{typeof e.scrollTo=="function"?e.scrollTo(0,0):(e.scrollTop=0,e.scrollLeft=0)}),this.saveScrollPositions(),window.location.hash&&setTimeout(()=>document.getElementById(window.location.hash.slice(1))?.scrollIntoView())}restoreScrollPositions(){this.page.scrollRegions&&this.scrollRegions().forEach((e,i)=>{let r=this.page.scrollRegions[i];if(r)typeof e.scrollTo=="function"?e.scrollTo(r.left,r.top):(e.scrollTop=r.top,e.scrollLeft=r.left);else return})}isBackForwardVisit(){return window.history.state&&this.navigationType==="back_forward"}handleBackForwardVisit(e){let i;e.props?i=e:(window.history.state.version=e.version,i=window.history.state),this.setPage(i,{preserveScroll:!0,preserveState:!0}).then(()=>{this.restoreScrollPositions(),S(e)})}locationVisit(e,i){try{let r={preserveScroll:i};window.sessionStorage.setItem("inertiaLocationVisit",JSON.stringify(r)),window.location.href=e.href,x(window.location).href===x(e).href&&window.location.reload()}catch{return!1}}isLocationVisit(){try{return window.sessionStorage.getItem("inertiaLocationVisit")!==null}catch{return!1}}handleLocationVisit(e){let i=JSON.parse(window.sessionStorage.getItem("inertiaLocationVisit")||"");window.sessionStorage.removeItem("inertiaLocationVisit"),e.url+=window.location.hash,e.rememberedState=window.history.state?.rememberedState??{},e.scrollRegions=window.history.state?.scrollRegions??[],this.setPage(e,{preserveScroll:i.preserveScroll,preserveState:!0}).then(()=>{i.preserveScroll&&this.restoreScrollPositions(),S(e)})}isLocationVisitResponse(e){return!!(e&&e.status===409&&e.headers["x-inertia-location"])}isInertiaResponse(e){return!!e?.headers["x-inertia"]}createVisitId(){return this.visitId={},this.visitId}cancelVisit(e,{cancelled:i=!1,interrupted:r=!1}){e&&!e.completed&&!e.cancelled&&!e.interrupted&&(e.cancelToken.abort(),e.onCancel(),e.completed=!1,e.cancelled=i,e.interrupted=r,k(e),e.onFinish(e))}finishVisit(e){!e.cancelled&&!e.interrupted&&(e.completed=!0,e.cancelled=!1,e.interrupted=!1,k(e),e.onFinish(e))}resolvePreserveOption(e,i){return typeof e=="function"?e(i):e==="errors"?Object.keys(i.props.errors||{}).length>0:e}cancel(){this.activeVisit&&this.cancelVisit(this.activeVisit,{cancelled:!0})}visit(e,{method:i="get",data:r={},replace:s=!1,preserveScroll:l=!1,preserveState:u=!1,preserveURL:d=!1,only:f=[],headers:c={},errorBag:a="",forceFormData:b=!1,target:P=null,onCancelToken:p=()=>{},onBefore:h=()=>{},onStart:R=()=>{},onProgress:w=()=>{},onFinish:ie=()=>{},onCancel:re=()=>{},onSuccess:U=()=>{},onError:M=()=>{},transformProps:F=()=>{},queryStringArrayFormat:N="brackets"}={}){let y=typeof e=="string"?E(e):e;if((I(r)||b)&&!(r instanceof FormData)&&(r=A(r)),!(r instanceof FormData)){let[n,o]=D(i,y,r,N);y=E(n),r=o}let L={url:y,method:i,data:r,replace:s,preserveScroll:l,preserveState:u,preserveURL:d,only:f,headers:c,errorBag:a,target:P,forceFormData:b,transformProps:F,queryStringArrayFormat:N,cancelled:!1,completed:!1,interrupted:!1};if(h(L)===!1||!j(L))return;this.activeVisit&&this.cancelVisit(this.activeVisit,{interrupted:!0}),this.saveScrollPositions();let G=this.createVisitId();this.activeVisit={...L,onCancelToken:p,onBefore:h,onStart:R,onProgress:w,onFinish:ie,onCancel:re,onSuccess:U,onError:M,queryStringArrayFormat:N,cancelToken:new AbortController},p({cancel:()=>{this.activeVisit&&this.cancelVisit(this.activeVisit,{cancelled:!0})}}),_(L),R(L),B({method:i,url:x(y).href,data:i==="get"?{}:r,params:i==="get"?r:{},signal:this.activeVisit.cancelToken.signal,headers:{...c,Accept:"text/html, application/xhtml+xml","X-Requested-With":"XMLHttpRequest","X-Inertia":!0,...f.length?{"X-Inertia-Partial-Component":this.page.component,"X-Inertia-Partial-Data":f.join(",")}:{},...a&&a.length?{"X-Inertia-Error-Bag":a}:{},...this.page.version?{"X-Inertia-Version":this.page.version}:{}},onUploadProgress:n=>{r instanceof FormData&&(n.percentage=n.progress?Math.round(n.progress*100):0,W(n),w(n))}}).then(n=>{if(!this.isInertiaResponse(n))return Promise.reject({response:n});let o=n.data;n.headers["x-inertia-frame"]&&(P=n.headers["x-inertia-frame"]),f.length&&o.component===this.page.component&&(o.props={...this.page.props,...o.props}),l=this.resolvePreserveOption(l,o),u=this.resolvePreserveOption(u,o),u&&window.history.state?.rememberedState&&o.component===this.page.component&&(o.rememberedState=window.history.state.rememberedState);let m=y,V=E(o.url);return m.hash&&!V.hash&&x(m).href===V.href&&(V.hash=m.hash,o.url=V.href),F&&F(o.props),this.setPage(o,{target:P,visitId:G,replace:s,preserveScroll:l,preserveState:u,preserveURL:d})}).then(n=>{let o=n.props.errors||{};if(Object.keys(o).length>0){let m=a?o[a]?o[a]:{}:o;return H(m),M(m)}return K(n),U(n)}).catch(n=>{if(this.isInertiaResponse(n.response))return this.setPage(n.response.data,{visitId:G});if(this.isLocationVisitResponse(n.response)){let o=E(n.response.headers["x-inertia-location"]),m=y;m.hash&&!o.hash&&x(m).href===o.href&&(o.hash=m.hash),this.locationVisit(o,l===!0)}else if(n.response)q(n.response)&&z.show(n.response.data);else return Promise.reject(n)}).then(()=>{this.activeVisit&&this.finishVisit(this.activeVisit)}).catch(n=>{if(!B.isCancel(n)){let o=$(n);if(this.activeVisit&&this.finishVisit(this.activeVisit),o)return Promise.reject(n)}})}setPage(e,{visitId:i=this.createVisitId(),replace:r=!1,preserveURL:s=!1,preserveScroll:l=!1,preserveState:u=!1,target:d=null}={}){return Promise.resolve(this.resolveComponent(e.component)).then(f=>(i===this.visitId&&(e.scrollRegions=e.scrollRegions||[],e.rememberedState=e.rememberedState||{},s&&(e.url=window.location.href),!d||d==="_top"||d==="_parent"||d==="main"?(r=r||E(e.url).href===window.location.href,r?this.replaceState(e):this.pushState(e)):e.target=d,this.swapComponent({component:f,page:e,preserveState:u}).then(()=>{l||this.resetScrollPositions(),r||S(e)})),e))}pushState(e){this.page=e,window.history.pushState(e,"",e.url)}replaceState(e){this.page=e,window.history.replaceState(e,"",e.url)}handlePopstateEvent(e){if(e.state!==null){let i=e.state,r=this.createVisitId();Promise.resolve(this.resolveComponent(i.component)).then(s=>{r===this.visitId&&(this.page=i,this.swapComponent({component:s,page:i,preserveState:!1}).then(()=>{this.restoreScrollPositions(),S(i)}))})}else{let i=E(this.page.url);i.hash=window.location.hash,this.replaceState({...this.page,url:i.href}),this.resetScrollPositions()}}get(e,i={},r={}){return this.visit(e,{...r,method:"get",data:i})}reload(e={}){return this.visit(window.location.href,{...e,preserveScroll:!0,preserveState:!0,preserveURL:!0})}replace(e,i={}){return console.warn(`Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${i.method??"get"}() instead.`),this.visit(e,{preserveState:!0,...i,replace:!0})}post(e,i={},r={}){return this.visit(e,{preserveState:!0,...r,method:"post",data:i})}put(e,i={},r={}){return this.visit(e,{preserveState:!0,...r,method:"put",data:i})}patch(e,i={},r={}){return this.visit(e,{preserveState:!0,...r,method:"patch",data:i})}delete(e,i={}){return this.visit(e,{preserveState:!0,...i,method:"delete"})}remember(e,i="default"){Q||this.replaceState({...this.page,rememberedState:{...this.page?.rememberedState,[i]:e}})}restore(e="default"){if(!Q)return window.history.state?.rememberedState?.[e]}on(e,i){let r=s=>{let l=i(s);s.cancelable&&!s.defaultPrevented&&l===!1&&s.preventDefault()};return document.addEventListener(`inertia:${e}`,r),()=>document.removeEventListener(`inertia:${e}`,r)}};var oe={buildDOMElement(t){let e=document.createElement("template");e.innerHTML=t;let i=e.content.firstChild;if(!t.startsWith("<script "))return i;let r=document.createElement("script");return r.innerHTML=i.innerHTML,i.getAttributeNames().forEach(s=>{r.setAttribute(s,i.getAttribute(s)||"")}),r},isInertiaManagedElement(t){return t.nodeType===Node.ELEMENT_NODE&&t.getAttribute("inertia")!==null},findMatchingElementIndex(t,e){let i=t.getAttribute("inertia");return i!==null?e.findIndex(r=>r.getAttribute("inertia")===i):-1},update:T(function(t){let e=t.map(r=>this.buildDOMElement(r));Array.from(document.head.childNodes).filter(r=>this.isInertiaManagedElement(r)).forEach(r=>{let s=this.findMatchingElementIndex(r,e);if(s===-1){r?.parentNode?.removeChild(r);return}let l=e.splice(s,1)[0];l&&!r.isEqualNode(l)&&r?.parentNode?.replaceChild(l,r)}),e.forEach(r=>document.head.appendChild(r))},1)};function Y(t,e,i){let r={},s=0;function l(){let a=s+=1;return r[a]=[],a.toString()}function u(a){a===null||Object.keys(r).indexOf(a)===-1||(delete r[a],c())}function d(a,b=[]){a!==null&&Object.keys(r).indexOf(a)>-1&&(r[a]=b),c()}function f(){let a=e(""),b={...a?{title:`<title inertia="">${a}</title>`}:{}},P=Object.values(r).reduce((p,h)=>p.concat(h),[]).reduce((p,h)=>{if(h.indexOf("<")===-1)return p;if(h.indexOf("<title ")===0){let w=h.match(/(<title [^>]+>)(.*?)(<\/title>)/);return p.title=w?`${w[1]}${e(w[2])}${w[3]}`:h,p}let R=h.match(/ inertia="[^"]+"/);return R?p[R[0]]=h:p[Object.keys(p).length]=h,p},b);return Object.values(P)}function c(){t?i(f()):oe.update(f())}return c(),{forceUpdate:c,createProvider:function(){let a=l();return{update:b=>d(a,b),disconnect:()=>u(a)}}}}import g from"nprogress";var Z=null;function se(t){document.addEventListener("inertia:start",ae.bind(null,t)),document.addEventListener("inertia:progress",le),document.addEventListener("inertia:finish",ce)}function ae(t){Z=setTimeout(()=>g.start(),t)}function le(t){g.isStarted()&&t.detail.progress?.percentage&&g.set(Math.max(g.status,t.detail.progress.percentage/100*.9))}function ce(t){if(clearTimeout(Z),g.isStarted())t.detail.visit.completed?g.done():t.detail.visit.interrupted?g.set(0):t.detail.visit.cancelled&&(g.done(),g.remove());else return}function de(t){let e=document.createElement("style");e.type="text/css",e.textContent=`
2
+ #nprogress {
3
+ pointer-events: none;
4
+ }
5
+
6
+ #nprogress .bar {
7
+ background: ${t};
8
+
9
+ position: fixed;
10
+ z-index: 1031;
11
+ top: 0;
12
+ left: 0;
13
+
14
+ width: 100%;
15
+ height: 2px;
16
+ }
17
+
18
+ #nprogress .peg {
19
+ display: block;
20
+ position: absolute;
21
+ right: 0px;
22
+ width: 100px;
23
+ height: 100%;
24
+ box-shadow: 0 0 10px ${t}, 0 0 5px ${t};
25
+ opacity: 1.0;
26
+
27
+ -webkit-transform: rotate(3deg) translate(0px, -4px);
28
+ -ms-transform: rotate(3deg) translate(0px, -4px);
29
+ transform: rotate(3deg) translate(0px, -4px);
30
+ }
31
+
32
+ #nprogress .spinner {
33
+ display: block;
34
+ position: fixed;
35
+ z-index: 1031;
36
+ top: 15px;
37
+ right: 15px;
38
+ }
39
+
40
+ #nprogress .spinner-icon {
41
+ width: 18px;
42
+ height: 18px;
43
+ box-sizing: border-box;
44
+
45
+ border: solid 2px transparent;
46
+ border-top-color: ${t};
47
+ border-left-color: ${t};
48
+ border-radius: 50%;
49
+
50
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
51
+ animation: nprogress-spinner 400ms linear infinite;
52
+ }
53
+
54
+ .nprogress-custom-parent {
55
+ overflow: hidden;
56
+ position: relative;
57
+ }
58
+
59
+ .nprogress-custom-parent #nprogress .spinner,
60
+ .nprogress-custom-parent #nprogress .bar {
61
+ position: absolute;
62
+ }
63
+
64
+ @-webkit-keyframes nprogress-spinner {
65
+ 0% { -webkit-transform: rotate(0deg); }
66
+ 100% { -webkit-transform: rotate(360deg); }
67
+ }
68
+ @keyframes nprogress-spinner {
69
+ 0% { transform: rotate(0deg); }
70
+ 100% { transform: rotate(360deg); }
71
+ }
72
+ `,document.head.appendChild(e)}function ee({delay:t=250,color:e="#29d",includeCSS:i=!0,showSpinner:r=!1}={}){se(t),g.configure({showSpinner:r}),i&&de(e)}function te(t){let e=t.currentTarget.tagName.toLowerCase()==="a";return!(t.target&&(t?.target).isContentEditable||t.defaultPrevented||e&&t.which>1||e&&t.altKey||e&&t.ctrlKey||e&&t.metaKey||e&&t.shiftKey)}var Ne=new C;export{Y as createHeadManager,E as hrefToUrl,D as mergeDataIntoQueryString,Ne as router,ee as setupProgress,te as shouldIntercept,x as urlWithoutHash};
73
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/router.ts", "../src/debounce.ts", "../src/events.ts", "../src/files.ts", "../src/formData.ts", "../src/modal.ts", "../src/url.ts", "../src/head.ts", "../src/progress.ts", "../src/shouldIntercept.ts", "../src/index.ts"],
4
+ "sourcesContent": ["import { AxiosResponse, default as Axios } from 'axios'\nimport debounce from './debounce'\nimport {\n fireBeforeEvent,\n fireErrorEvent,\n fireExceptionEvent,\n fireFinishEvent,\n fireInvalidEvent,\n fireNavigateEvent,\n fireProgressEvent,\n fireStartEvent,\n fireSuccessEvent,\n} from './events'\nimport { hasFiles } from './files'\nimport { objectToFormData } from './formData'\nimport modal from './modal'\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 { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\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, { preserveScroll: true, 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 document.addEventListener('click', (event) => {\n const target = event.target as Element\n const anchorElement = target.closest('a')\n const frameId = (target.closest('[data-inertia-frame-id]') as HTMLElement)?.dataset.inertiaFrameId\n if (!anchorElement || anchorElement.rel == 'external' || anchorElement.target == '_blank') return\n \n if (anchorElement.href && anchorElement.href.startsWith(location.origin)) {\n event.preventDefault()\n event.stopPropagation()\n this.visit(anchorElement.href, {\n method: anchorElement.dataset['method'] as Method,\n target: anchorElement.dataset['target'] || frameId,\n })\n }\n })\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 // We're using a setTimeout() here as a workaround for a bug in the React adapter where the\n // rendering isn't completing fast enough, causing the anchor link to not be scrolled to.\n setTimeout(() => document.getElementById(window.location.hash.slice(1))?.scrollIntoView())\n }\n }\n\n 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 let currentState\n\n /* This ensures we give precedence to a fresh state.\n 'page' here holds the props from the latest backend request.\n This prevents user A logging out and user B seeing sensitive data\n from user A by going back in the history (shared computer)\n */\n if (page.props) {\n currentState = page\n } else {\n window.history.state.version = page.version\n currentState = window.history.state\n }\n\n this.setPage(currentState, { 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.abort()\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 cancel(): void {\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { cancelled: true })\n }\n }\n\n public visit(\n href: string | URL,\n {\n method = 'get',\n data = {},\n replace = false,\n preserveScroll = false,\n preserveState = false,\n preserveURL = false,\n only = [],\n headers = {},\n errorBag = '',\n forceFormData = false,\n target = null,\n onCancelToken = () => {},\n onBefore = () => {},\n onStart = () => {},\n onProgress = () => {},\n onFinish = () => {},\n onCancel = () => {},\n onSuccess = () => {},\n onError = () => {},\n transformProps = () => {},\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 preserveURL, \n only,\n headers,\n errorBag,\n target,\n forceFormData,\n transformProps,\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: new AbortController(),\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 === 'get' ? {} : data,\n params: method === 'get' ? data : {},\n signal: this.activeVisit.cancelToken.signal,\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 = progress.progress ? Math.round(progress.progress * 100) : 0\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\n // if an X-Inertia-Frame header is present, use its value to override target frame id\n if (response.headers['x-inertia-frame']) {\n target = response.headers['x-inertia-frame']\n }\n\n if (only.length && pageResponse.component === this.page.component) {\n pageResponse.props = { ...this.page.props, ...pageResponse.props }\n }\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 if (transformProps) {\n transformProps(pageResponse.props)\n }\n return this.setPage(pageResponse, { target, visitId, replace, preserveScroll, preserveState, preserveURL })\n })\n .then((page: Page) => {\n const errors = 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(page)\n return onSuccess(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 preserveURL = false,\n preserveScroll = false,\n preserveState = false,\n target = null,\n }: {\n visitId?: VisitId\n replace?: boolean\n preserveURL?: boolean\n preserveScroll?: PreserveStateOption\n preserveState?: PreserveStateOption\n target?: string | null\n } = {},\n ): Promise<Page> {\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 if (preserveURL) {\n page.url = window.location.href\n }\n if (!target || target === '_top' || target === '_parent' || target === 'main') {\n replace = replace || hrefToUrl(page.url).href === window.location.href\n replace ? this.replaceState(page) : this.pushState(page)\n }\n else {\n page.target = target\n }\n \n this.swapComponent({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n this.resetScrollPositions()\n }\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n }\n return page\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: '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, preserveURL: 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: '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: '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: 'patch', data })\n }\n\n public delete(url: URL | string, options: Exclude<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, 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", "export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F {\n let timeoutID: NodeJS.Timeout\n return function (...args: unknown[]) {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(() => fn.apply(this, args), delay)\n } as F\n}\n", "import { GlobalEventDetails, GlobalEventNames, GlobalEventTrigger } from './types'\n\nfunction fireEvent<TEventName extends GlobalEventNames>(\n name: TEventName,\n options: CustomEventInit<GlobalEventDetails<TEventName>>,\n): boolean {\n return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options))\n}\n\nexport const fireBeforeEvent: GlobalEventTrigger<'before'> = (visit) => {\n return fireEvent('before', { cancelable: true, detail: { visit } })\n}\n\nexport const fireErrorEvent: GlobalEventTrigger<'error'> = (errors) => {\n return fireEvent('error', { detail: { errors } })\n}\n\nexport const fireExceptionEvent: GlobalEventTrigger<'exception'> = (exception) => {\n return fireEvent('exception', { cancelable: true, detail: { exception } })\n}\n\nexport const fireFinishEvent: GlobalEventTrigger<'finish'> = (visit) => {\n return fireEvent('finish', { detail: { visit } })\n}\n\nexport const fireInvalidEvent: GlobalEventTrigger<'invalid'> = (response) => {\n return fireEvent('invalid', { cancelable: true, detail: { response } })\n}\n\nexport const fireNavigateEvent: GlobalEventTrigger<'navigate'> = (page) => {\n return fireEvent('navigate', { detail: { page } })\n}\n\nexport const fireProgressEvent: GlobalEventTrigger<'progress'> = (progress) => {\n return fireEvent('progress', { detail: { progress } })\n}\n\nexport const fireStartEvent: GlobalEventTrigger<'start'> = (visit) => {\n return fireEvent('start', { detail: { visit } })\n}\n\nexport const fireSuccessEvent: GlobalEventTrigger<'success'> = (page) => {\n return fireEvent('success', { detail: { page } })\n}\n", "import { FormDataConvertible, RequestPayload } from './types'\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n data instanceof File ||\n data instanceof Blob ||\n (data instanceof FileList && data.length > 0) ||\n (data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value))) ||\n (typeof data === 'object' && data !== null && Object.values(data).some((value) => hasFiles(value)))\n )\n}\n", "import { FormDataConvertible } from './types'\n\nexport 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", "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 deepmerge from 'deepmerge'\nimport * as qs from 'qs'\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 === 'get' && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === 'get' && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n", "import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n", "import NProgress from 'nprogress'\nimport { GlobalEvent } from './types'\n\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", "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 { default as createHeadManager } from './head'\nexport { default as setupProgress } from './progress'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport * from './types'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { type Router }\n\nexport const router = new Router()\n"],
5
+ "mappings": "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",
6
+ "names": ["Axios", "debounce", "fn", "delay", "timeoutID", "args", "fireEvent", "name", "options", "fireBeforeEvent", "visit", "fireErrorEvent", "errors", "fireExceptionEvent", "exception", "fireFinishEvent", "fireInvalidEvent", "response", "fireNavigateEvent", "page", "fireProgressEvent", "progress", "fireStartEvent", "fireSuccessEvent", "hasFiles", "data", "value", "objectToFormData", "source", "form", "parentKey", "key", "append", "composeKey", "parent", "value", "index", "modal_default", "html", "page", "a", "iframe", "event", "deepmerge", "qs", "hrefToUrl", "href", "mergeDataIntoQueryString", "method", "data", "qsArrayFormat", "hasHost", "hasAbsolutePath", "hasRelativePath", "hasSearch", "hasHash", "url", "urlWithoutHash", "isServer", "Router", "initialPage", "resolveComponent", "swapComponent", "page", "fireNavigateEvent", "debounce", "event", "target", "anchorElement", "frameId", "region", "index", "scrollPosition", "currentState", "url", "preserveScroll", "locationVisit", "urlWithoutHash", "response", "activeVisit", "cancelled", "interrupted", "fireFinishEvent", "visit", "value", "href", "method", "data", "replace", "preserveState", "preserveURL", "only", "headers", "errorBag", "forceFormData", "onCancelToken", "onBefore", "onStart", "onProgress", "onFinish", "onCancel", "onSuccess", "onError", "transformProps", "queryStringArrayFormat", "hrefToUrl", "hasFiles", "objectToFormData", "_href", "_data", "mergeDataIntoQueryString", "fireBeforeEvent", "visitId", "fireStartEvent", "Axios", "progress", "fireProgressEvent", "pageResponse", "requestUrl", "responseUrl", "errors", "scopedErrors", "fireErrorEvent", "fireSuccessEvent", "error", "locationUrl", "fireInvalidEvent", "modal_default", "throwException", "fireExceptionEvent", "component", "options", "key", "type", "callback", "listener", "Renderer", "tag", "template", "node", "script", "name", "element", "elements", "key", "debounce", "sourceElements", "targetElement", "index", "sourceElement", "createHeadManager", "isServer", "titleCallback", "onUpdate", "states", "lastProviderId", "connect", "id", "disconnect", "commit", "update", "collect", "title", "defaults", "carry", "match", "NProgress", "timeout", "addEventListeners", "delay", "start", "progress", "finish", "event", "injectCSS", "color", "element", "setupProgress", "includeCSS", "showSpinner", "shouldIntercept", "event", "isLink", "router", "Router"]
7
+ }
package/dist/index.js ADDED
@@ -0,0 +1,73 @@
1
+ "use strict";var le=Object.create;var I=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var pe=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty;var ue=(t,e)=>{for(var i in e)I(t,i,{get:e[i],enumerable:!0})},K=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of de(e))!he.call(t,n)&&n!==i&&I(t,n,{get:()=>e[n],enumerable:!(r=ce(e,n))||r.enumerable});return t};var O=(t,e,i)=>(i=t!=null?le(pe(t)):{},K(e||!t||!t.__esModule?I(i,"default",{value:t,enumerable:!0}):i,t)),fe=t=>K(I({},"__esModule",{value:!0}),t);var ye={};ue(ye,{createHeadManager:()=>j,hrefToUrl:()=>b,mergeDataIntoQueryString:()=>N,router:()=>xe,setupProgress:()=>H,shouldIntercept:()=>$,urlWithoutHash:()=>w});module.exports=fe(ye);var G=O(require("axios"),1);function T(t,e){let i;return function(...r){clearTimeout(i),i=setTimeout(()=>t.apply(this,r),e)}}function v(t,e){return document.dispatchEvent(new CustomEvent(`inertia:${t}`,e))}var X=t=>v("before",{cancelable:!0,detail:{visit:t}}),J=t=>v("error",{detail:{errors:t}}),z=t=>v("exception",{cancelable:!0,detail:{exception:t}}),U=t=>v("finish",{detail:{visit:t}}),B=t=>v("invalid",{cancelable:!0,detail:{response:t}}),S=t=>v("navigate",{detail:{page:t}}),Q=t=>v("progress",{detail:{progress:t}}),Y=t=>v("start",{detail:{visit:t}}),Z=t=>v("success",{detail:{page:t}});function C(t){return t instanceof File||t instanceof Blob||t instanceof FileList&&t.length>0||t instanceof FormData&&Array.from(t.values()).some(e=>C(e))||typeof t=="object"&&t!==null&&Object.values(t).some(e=>C(e))}function M(t,e=new FormData,i=null){t=t||{};for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&te(e,ee(i,r),t[r]);return e}function ee(t,e){return t?t+"["+e+"]":e}function te(t,e,i){if(Array.isArray(i))return Array.from(i.keys()).forEach(r=>te(t,ee(e,r.toString()),i[r]));if(i instanceof Date)return t.append(e,i.toISOString());if(i instanceof File)return t.append(e,i,i.name);if(i instanceof Blob)return t.append(e,i);if(typeof i=="boolean")return t.append(e,i?"1":"0");if(typeof i=="string")return t.append(e,i);if(typeof i=="number")return t.append(e,`${i}`);if(i==null)return t.append(e,"");M(i,t,e)}var ie={modal:null,listener:null,show(t){typeof t=="object"&&(t=`All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(t)}`);let e=document.createElement("html");e.innerHTML=t,e.querySelectorAll("a").forEach(r=>r.setAttribute("target","_top")),this.modal=document.createElement("div"),this.modal.style.position="fixed",this.modal.style.width="100vw",this.modal.style.height="100vh",this.modal.style.padding="50px",this.modal.style.boxSizing="border-box",this.modal.style.backgroundColor="rgba(0, 0, 0, .6)",this.modal.style.zIndex=2e5,this.modal.addEventListener("click",()=>this.hide());let i=document.createElement("iframe");if(i.style.backgroundColor="white",i.style.borderRadius="5px",i.style.width="100%",i.style.height="100%",this.modal.appendChild(i),document.body.prepend(this.modal),document.body.style.overflow="hidden",!i.contentWindow)throw new Error("iframe not yet ready.");i.contentWindow.document.open(),i.contentWindow.document.write(e.outerHTML),i.contentWindow.document.close(),this.listener=this.hideOnEscape.bind(this),document.addEventListener("keydown",this.listener)},hide(){this.modal.outerHTML="",this.modal=null,document.body.style.overflow="visible",document.removeEventListener("keydown",this.listener)},hideOnEscape(t){t.keyCode===27&&this.hide()}};var re=O(require("deepmerge"),1),F=O(require("qs"),1);function b(t){return new URL(t.toString(),window.location.toString())}function N(t,e,i,r="brackets"){let n=/^https?:\/\//.test(e.toString()),l=n||e.toString().startsWith("/"),u=!l&&!e.toString().startsWith("#")&&!e.toString().startsWith("?"),d=e.toString().includes("?")||t==="get"&&Object.keys(i).length,f=e.toString().includes("#"),c=new URL(e.toString(),"http://localhost");return t==="get"&&Object.keys(i).length&&(c.search=F.stringify((0,re.default)(F.parse(c.search,{ignoreQueryPrefix:!0}),i),{encodeValuesOnly:!0,arrayFormat:r}),i={}),[[n?`${c.protocol}//${c.host}`:"",l?c.pathname:"",u?c.pathname.substring(1):"",d?c.search:"",f?c.hash:""].join(""),i]}function w(t){return t=new URL(t.href),t.hash="",t}var ne=typeof window>"u",k=class{constructor(){this.visitId=null}init({initialPage:e,resolveComponent:i,swapComponent:r}){this.page=e,this.resolveComponent=i,this.swapComponent=r,this.setNavigationType(),this.clearRememberedStateOnReload(),this.isBackForwardVisit()?this.handleBackForwardVisit(this.page):this.isLocationVisit()?this.handleLocationVisit(this.page):this.handleInitialPageVisit(this.page),this.setupEventListeners()}setNavigationType(){this.navigationType=window.performance&&window.performance.getEntriesByType("navigation").length>0?window.performance.getEntriesByType("navigation")[0].type:"navigate"}clearRememberedStateOnReload(){this.navigationType==="reload"&&window.history.state?.rememberedState&&delete window.history.state.rememberedState}handleInitialPageVisit(e){this.page.url+=window.location.hash,this.setPage(e,{preserveScroll:!0,preserveState:!0}).then(()=>S(e))}setupEventListeners(){window.addEventListener("popstate",this.handlePopstateEvent.bind(this)),document.addEventListener("scroll",T(this.handleScrollEvent.bind(this),100),!0),document.addEventListener("click",e=>{let i=e.target,r=i.closest("a"),n=i.closest("[data-inertia-frame-id]")?.dataset.inertiaFrameId;!r||r.rel=="external"||r.target=="_blank"||r.href&&r.href.startsWith(location.origin)&&(e.preventDefault(),e.stopPropagation(),this.visit(r.href,{method:r.dataset.method,target:r.dataset.target||n}))})}scrollRegions(){return document.querySelectorAll("[scroll-region]")}handleScrollEvent(e){typeof e.target.hasAttribute=="function"&&e.target.hasAttribute("scroll-region")&&this.saveScrollPositions()}saveScrollPositions(){this.replaceState({...this.page,scrollRegions:Array.from(this.scrollRegions()).map(e=>({top:e.scrollTop,left:e.scrollLeft}))})}resetScrollPositions(){window.scrollTo(0,0),this.scrollRegions().forEach(e=>{typeof e.scrollTo=="function"?e.scrollTo(0,0):(e.scrollTop=0,e.scrollLeft=0)}),this.saveScrollPositions(),window.location.hash&&setTimeout(()=>document.getElementById(window.location.hash.slice(1))?.scrollIntoView())}restoreScrollPositions(){this.page.scrollRegions&&this.scrollRegions().forEach((e,i)=>{let r=this.page.scrollRegions[i];if(r)typeof e.scrollTo=="function"?e.scrollTo(r.left,r.top):(e.scrollTop=r.top,e.scrollLeft=r.left);else return})}isBackForwardVisit(){return window.history.state&&this.navigationType==="back_forward"}handleBackForwardVisit(e){let i;e.props?i=e:(window.history.state.version=e.version,i=window.history.state),this.setPage(i,{preserveScroll:!0,preserveState:!0}).then(()=>{this.restoreScrollPositions(),S(e)})}locationVisit(e,i){try{let r={preserveScroll:i};window.sessionStorage.setItem("inertiaLocationVisit",JSON.stringify(r)),window.location.href=e.href,w(window.location).href===w(e).href&&window.location.reload()}catch{return!1}}isLocationVisit(){try{return window.sessionStorage.getItem("inertiaLocationVisit")!==null}catch{return!1}}handleLocationVisit(e){let i=JSON.parse(window.sessionStorage.getItem("inertiaLocationVisit")||"");window.sessionStorage.removeItem("inertiaLocationVisit"),e.url+=window.location.hash,e.rememberedState=window.history.state?.rememberedState??{},e.scrollRegions=window.history.state?.scrollRegions??[],this.setPage(e,{preserveScroll:i.preserveScroll,preserveState:!0}).then(()=>{i.preserveScroll&&this.restoreScrollPositions(),S(e)})}isLocationVisitResponse(e){return!!(e&&e.status===409&&e.headers["x-inertia-location"])}isInertiaResponse(e){return!!e?.headers["x-inertia"]}createVisitId(){return this.visitId={},this.visitId}cancelVisit(e,{cancelled:i=!1,interrupted:r=!1}){e&&!e.completed&&!e.cancelled&&!e.interrupted&&(e.cancelToken.abort(),e.onCancel(),e.completed=!1,e.cancelled=i,e.interrupted=r,U(e),e.onFinish(e))}finishVisit(e){!e.cancelled&&!e.interrupted&&(e.completed=!0,e.cancelled=!1,e.interrupted=!1,U(e),e.onFinish(e))}resolvePreserveOption(e,i){return typeof e=="function"?e(i):e==="errors"?Object.keys(i.props.errors||{}).length>0:e}cancel(){this.activeVisit&&this.cancelVisit(this.activeVisit,{cancelled:!0})}visit(e,{method:i="get",data:r={},replace:n=!1,preserveScroll:l=!1,preserveState:u=!1,preserveURL:d=!1,only:f=[],headers:c={},errorBag:a="",forceFormData:E=!1,target:P=null,onCancelToken:p=()=>{},onBefore:h=()=>{},onStart:R=()=>{},onProgress:x=()=>{},onFinish:se=()=>{},onCancel:ae=()=>{},onSuccess:q=()=>{},onError:W=()=>{},transformProps:A=()=>{},queryStringArrayFormat:D="brackets"}={}){let y=typeof e=="string"?b(e):e;if((C(r)||E)&&!(r instanceof FormData)&&(r=M(r)),!(r instanceof FormData)){let[o,s]=N(i,y,r,D);y=b(o),r=s}let L={url:y,method:i,data:r,replace:n,preserveScroll:l,preserveState:u,preserveURL:d,only:f,headers:c,errorBag:a,target:P,forceFormData:E,transformProps:A,queryStringArrayFormat:D,cancelled:!1,completed:!1,interrupted:!1};if(h(L)===!1||!X(L))return;this.activeVisit&&this.cancelVisit(this.activeVisit,{interrupted:!0}),this.saveScrollPositions();let _=this.createVisitId();this.activeVisit={...L,onCancelToken:p,onBefore:h,onStart:R,onProgress:x,onFinish:se,onCancel:ae,onSuccess:q,onError:W,queryStringArrayFormat:D,cancelToken:new AbortController},p({cancel:()=>{this.activeVisit&&this.cancelVisit(this.activeVisit,{cancelled:!0})}}),Y(L),R(L),(0,G.default)({method:i,url:w(y).href,data:i==="get"?{}:r,params:i==="get"?r:{},signal:this.activeVisit.cancelToken.signal,headers:{...c,Accept:"text/html, application/xhtml+xml","X-Requested-With":"XMLHttpRequest","X-Inertia":!0,...f.length?{"X-Inertia-Partial-Component":this.page.component,"X-Inertia-Partial-Data":f.join(",")}:{},...a&&a.length?{"X-Inertia-Error-Bag":a}:{},...this.page.version?{"X-Inertia-Version":this.page.version}:{}},onUploadProgress:o=>{r instanceof FormData&&(o.percentage=o.progress?Math.round(o.progress*100):0,Q(o),x(o))}}).then(o=>{if(!this.isInertiaResponse(o))return Promise.reject({response:o});let s=o.data;o.headers["x-inertia-frame"]&&(P=o.headers["x-inertia-frame"]),f.length&&s.component===this.page.component&&(s.props={...this.page.props,...s.props}),l=this.resolvePreserveOption(l,s),u=this.resolvePreserveOption(u,s),u&&window.history.state?.rememberedState&&s.component===this.page.component&&(s.rememberedState=window.history.state.rememberedState);let g=y,V=b(s.url);return g.hash&&!V.hash&&w(g).href===V.href&&(V.hash=g.hash,s.url=V.href),A&&A(s.props),this.setPage(s,{target:P,visitId:_,replace:n,preserveScroll:l,preserveState:u,preserveURL:d})}).then(o=>{let s=o.props.errors||{};if(Object.keys(s).length>0){let g=a?s[a]?s[a]:{}:s;return J(g),W(g)}return Z(o),q(o)}).catch(o=>{if(this.isInertiaResponse(o.response))return this.setPage(o.response.data,{visitId:_});if(this.isLocationVisitResponse(o.response)){let s=b(o.response.headers["x-inertia-location"]),g=y;g.hash&&!s.hash&&w(g).href===s.href&&(s.hash=g.hash),this.locationVisit(s,l===!0)}else if(o.response)B(o.response)&&ie.show(o.response.data);else return Promise.reject(o)}).then(()=>{this.activeVisit&&this.finishVisit(this.activeVisit)}).catch(o=>{if(!G.default.isCancel(o)){let s=z(o);if(this.activeVisit&&this.finishVisit(this.activeVisit),s)return Promise.reject(o)}})}setPage(e,{visitId:i=this.createVisitId(),replace:r=!1,preserveURL:n=!1,preserveScroll:l=!1,preserveState:u=!1,target:d=null}={}){return Promise.resolve(this.resolveComponent(e.component)).then(f=>(i===this.visitId&&(e.scrollRegions=e.scrollRegions||[],e.rememberedState=e.rememberedState||{},n&&(e.url=window.location.href),!d||d==="_top"||d==="_parent"||d==="main"?(r=r||b(e.url).href===window.location.href,r?this.replaceState(e):this.pushState(e)):e.target=d,this.swapComponent({component:f,page:e,preserveState:u}).then(()=>{l||this.resetScrollPositions(),r||S(e)})),e))}pushState(e){this.page=e,window.history.pushState(e,"",e.url)}replaceState(e){this.page=e,window.history.replaceState(e,"",e.url)}handlePopstateEvent(e){if(e.state!==null){let i=e.state,r=this.createVisitId();Promise.resolve(this.resolveComponent(i.component)).then(n=>{r===this.visitId&&(this.page=i,this.swapComponent({component:n,page:i,preserveState:!1}).then(()=>{this.restoreScrollPositions(),S(i)}))})}else{let i=b(this.page.url);i.hash=window.location.hash,this.replaceState({...this.page,url:i.href}),this.resetScrollPositions()}}get(e,i={},r={}){return this.visit(e,{...r,method:"get",data:i})}reload(e={}){return this.visit(window.location.href,{...e,preserveScroll:!0,preserveState:!0,preserveURL:!0})}replace(e,i={}){return console.warn(`Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${i.method??"get"}() instead.`),this.visit(e,{preserveState:!0,...i,replace:!0})}post(e,i={},r={}){return this.visit(e,{preserveState:!0,...r,method:"post",data:i})}put(e,i={},r={}){return this.visit(e,{preserveState:!0,...r,method:"put",data:i})}patch(e,i={},r={}){return this.visit(e,{preserveState:!0,...r,method:"patch",data:i})}delete(e,i={}){return this.visit(e,{preserveState:!0,...i,method:"delete"})}remember(e,i="default"){ne||this.replaceState({...this.page,rememberedState:{...this.page?.rememberedState,[i]:e}})}restore(e="default"){if(!ne)return window.history.state?.rememberedState?.[e]}on(e,i){let r=n=>{let l=i(n);n.cancelable&&!n.defaultPrevented&&l===!1&&n.preventDefault()};return document.addEventListener(`inertia:${e}`,r),()=>document.removeEventListener(`inertia:${e}`,r)}};var me={buildDOMElement(t){let e=document.createElement("template");e.innerHTML=t;let i=e.content.firstChild;if(!t.startsWith("<script "))return i;let r=document.createElement("script");return r.innerHTML=i.innerHTML,i.getAttributeNames().forEach(n=>{r.setAttribute(n,i.getAttribute(n)||"")}),r},isInertiaManagedElement(t){return t.nodeType===Node.ELEMENT_NODE&&t.getAttribute("inertia")!==null},findMatchingElementIndex(t,e){let i=t.getAttribute("inertia");return i!==null?e.findIndex(r=>r.getAttribute("inertia")===i):-1},update:T(function(t){let e=t.map(r=>this.buildDOMElement(r));Array.from(document.head.childNodes).filter(r=>this.isInertiaManagedElement(r)).forEach(r=>{let n=this.findMatchingElementIndex(r,e);if(n===-1){r?.parentNode?.removeChild(r);return}let l=e.splice(n,1)[0];l&&!r.isEqualNode(l)&&r?.parentNode?.replaceChild(l,r)}),e.forEach(r=>document.head.appendChild(r))},1)};function j(t,e,i){let r={},n=0;function l(){let a=n+=1;return r[a]=[],a.toString()}function u(a){a===null||Object.keys(r).indexOf(a)===-1||(delete r[a],c())}function d(a,E=[]){a!==null&&Object.keys(r).indexOf(a)>-1&&(r[a]=E),c()}function f(){let a=e(""),E={...a?{title:`<title inertia="">${a}</title>`}:{}},P=Object.values(r).reduce((p,h)=>p.concat(h),[]).reduce((p,h)=>{if(h.indexOf("<")===-1)return p;if(h.indexOf("<title ")===0){let x=h.match(/(<title [^>]+>)(.*?)(<\/title>)/);return p.title=x?`${x[1]}${e(x[2])}${x[3]}`:h,p}let R=h.match(/ inertia="[^"]+"/);return R?p[R[0]]=h:p[Object.keys(p).length]=h,p},E);return Object.values(P)}function c(){t?i(f()):me.update(f())}return c(),{forceUpdate:c,createProvider:function(){let a=l();return{update:E=>d(a,E),disconnect:()=>u(a)}}}}var m=O(require("nprogress"),1),oe=null;function ge(t){document.addEventListener("inertia:start",ve.bind(null,t)),document.addEventListener("inertia:progress",be),document.addEventListener("inertia:finish",Ee)}function ve(t){oe=setTimeout(()=>m.default.start(),t)}function be(t){m.default.isStarted()&&t.detail.progress?.percentage&&m.default.set(Math.max(m.default.status,t.detail.progress.percentage/100*.9))}function Ee(t){if(clearTimeout(oe),m.default.isStarted())t.detail.visit.completed?m.default.done():t.detail.visit.interrupted?m.default.set(0):t.detail.visit.cancelled&&(m.default.done(),m.default.remove());else return}function we(t){let e=document.createElement("style");e.type="text/css",e.textContent=`
2
+ #nprogress {
3
+ pointer-events: none;
4
+ }
5
+
6
+ #nprogress .bar {
7
+ background: ${t};
8
+
9
+ position: fixed;
10
+ z-index: 1031;
11
+ top: 0;
12
+ left: 0;
13
+
14
+ width: 100%;
15
+ height: 2px;
16
+ }
17
+
18
+ #nprogress .peg {
19
+ display: block;
20
+ position: absolute;
21
+ right: 0px;
22
+ width: 100px;
23
+ height: 100%;
24
+ box-shadow: 0 0 10px ${t}, 0 0 5px ${t};
25
+ opacity: 1.0;
26
+
27
+ -webkit-transform: rotate(3deg) translate(0px, -4px);
28
+ -ms-transform: rotate(3deg) translate(0px, -4px);
29
+ transform: rotate(3deg) translate(0px, -4px);
30
+ }
31
+
32
+ #nprogress .spinner {
33
+ display: block;
34
+ position: fixed;
35
+ z-index: 1031;
36
+ top: 15px;
37
+ right: 15px;
38
+ }
39
+
40
+ #nprogress .spinner-icon {
41
+ width: 18px;
42
+ height: 18px;
43
+ box-sizing: border-box;
44
+
45
+ border: solid 2px transparent;
46
+ border-top-color: ${t};
47
+ border-left-color: ${t};
48
+ border-radius: 50%;
49
+
50
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
51
+ animation: nprogress-spinner 400ms linear infinite;
52
+ }
53
+
54
+ .nprogress-custom-parent {
55
+ overflow: hidden;
56
+ position: relative;
57
+ }
58
+
59
+ .nprogress-custom-parent #nprogress .spinner,
60
+ .nprogress-custom-parent #nprogress .bar {
61
+ position: absolute;
62
+ }
63
+
64
+ @-webkit-keyframes nprogress-spinner {
65
+ 0% { -webkit-transform: rotate(0deg); }
66
+ 100% { -webkit-transform: rotate(360deg); }
67
+ }
68
+ @keyframes nprogress-spinner {
69
+ 0% { transform: rotate(0deg); }
70
+ 100% { transform: rotate(360deg); }
71
+ }
72
+ `,document.head.appendChild(e)}function H({delay:t=250,color:e="#29d",includeCSS:i=!0,showSpinner:r=!1}={}){ge(t),m.default.configure({showSpinner:r}),i&&we(e)}function $(t){let e=t.currentTarget.tagName.toLowerCase()==="a";return!(t.target&&(t?.target).isContentEditable||t.defaultPrevented||e&&t.which>1||e&&t.altKey||e&&t.ctrlKey||e&&t.metaKey||e&&t.shiftKey)}var xe=new k;
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/router.ts", "../src/debounce.ts", "../src/events.ts", "../src/files.ts", "../src/formData.ts", "../src/modal.ts", "../src/url.ts", "../src/head.ts", "../src/progress.ts", "../src/shouldIntercept.ts"],
4
+ "sourcesContent": ["import { Router } from './router'\n\nexport { default as createHeadManager } from './head'\nexport { default as setupProgress } from './progress'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport * from './types'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { type Router }\n\nexport const router = new Router()\n", "import { AxiosResponse, default as Axios } from 'axios'\nimport debounce from './debounce'\nimport {\n fireBeforeEvent,\n fireErrorEvent,\n fireExceptionEvent,\n fireFinishEvent,\n fireInvalidEvent,\n fireNavigateEvent,\n fireProgressEvent,\n fireStartEvent,\n fireSuccessEvent,\n} from './events'\nimport { hasFiles } from './files'\nimport { objectToFormData } from './formData'\nimport modal from './modal'\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 { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\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, { preserveScroll: true, 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 document.addEventListener('click', (event) => {\n const target = event.target as Element\n const anchorElement = target.closest('a')\n const frameId = (target.closest('[data-inertia-frame-id]') as HTMLElement)?.dataset.inertiaFrameId\n if (!anchorElement || anchorElement.rel == 'external' || anchorElement.target == '_blank') return\n \n if (anchorElement.href && anchorElement.href.startsWith(location.origin)) {\n event.preventDefault()\n event.stopPropagation()\n this.visit(anchorElement.href, {\n method: anchorElement.dataset['method'] as Method,\n target: anchorElement.dataset['target'] || frameId,\n })\n }\n })\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 // We're using a setTimeout() here as a workaround for a bug in the React adapter where the\n // rendering isn't completing fast enough, causing the anchor link to not be scrolled to.\n setTimeout(() => document.getElementById(window.location.hash.slice(1))?.scrollIntoView())\n }\n }\n\n 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 let currentState\n\n /* This ensures we give precedence to a fresh state.\n 'page' here holds the props from the latest backend request.\n This prevents user A logging out and user B seeing sensitive data\n from user A by going back in the history (shared computer)\n */\n if (page.props) {\n currentState = page\n } else {\n window.history.state.version = page.version\n currentState = window.history.state\n }\n\n this.setPage(currentState, { 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.abort()\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 cancel(): void {\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { cancelled: true })\n }\n }\n\n public visit(\n href: string | URL,\n {\n method = 'get',\n data = {},\n replace = false,\n preserveScroll = false,\n preserveState = false,\n preserveURL = false,\n only = [],\n headers = {},\n errorBag = '',\n forceFormData = false,\n target = null,\n onCancelToken = () => {},\n onBefore = () => {},\n onStart = () => {},\n onProgress = () => {},\n onFinish = () => {},\n onCancel = () => {},\n onSuccess = () => {},\n onError = () => {},\n transformProps = () => {},\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 preserveURL, \n only,\n headers,\n errorBag,\n target,\n forceFormData,\n transformProps,\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: new AbortController(),\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 === 'get' ? {} : data,\n params: method === 'get' ? data : {},\n signal: this.activeVisit.cancelToken.signal,\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 = progress.progress ? Math.round(progress.progress * 100) : 0\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\n // if an X-Inertia-Frame header is present, use its value to override target frame id\n if (response.headers['x-inertia-frame']) {\n target = response.headers['x-inertia-frame']\n }\n\n if (only.length && pageResponse.component === this.page.component) {\n pageResponse.props = { ...this.page.props, ...pageResponse.props }\n }\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 if (transformProps) {\n transformProps(pageResponse.props)\n }\n return this.setPage(pageResponse, { target, visitId, replace, preserveScroll, preserveState, preserveURL })\n })\n .then((page: Page) => {\n const errors = 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(page)\n return onSuccess(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 preserveURL = false,\n preserveScroll = false,\n preserveState = false,\n target = null,\n }: {\n visitId?: VisitId\n replace?: boolean\n preserveURL?: boolean\n preserveScroll?: PreserveStateOption\n preserveState?: PreserveStateOption\n target?: string | null\n } = {},\n ): Promise<Page> {\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 if (preserveURL) {\n page.url = window.location.href\n }\n if (!target || target === '_top' || target === '_parent' || target === 'main') {\n replace = replace || hrefToUrl(page.url).href === window.location.href\n replace ? this.replaceState(page) : this.pushState(page)\n }\n else {\n page.target = target\n }\n \n this.swapComponent({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n this.resetScrollPositions()\n }\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n }\n return page\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: '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, preserveURL: 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: '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: '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: 'patch', data })\n }\n\n public delete(url: URL | string, options: Exclude<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, 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", "export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F {\n let timeoutID: NodeJS.Timeout\n return function (...args: unknown[]) {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(() => fn.apply(this, args), delay)\n } as F\n}\n", "import { GlobalEventDetails, GlobalEventNames, GlobalEventTrigger } from './types'\n\nfunction fireEvent<TEventName extends GlobalEventNames>(\n name: TEventName,\n options: CustomEventInit<GlobalEventDetails<TEventName>>,\n): boolean {\n return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options))\n}\n\nexport const fireBeforeEvent: GlobalEventTrigger<'before'> = (visit) => {\n return fireEvent('before', { cancelable: true, detail: { visit } })\n}\n\nexport const fireErrorEvent: GlobalEventTrigger<'error'> = (errors) => {\n return fireEvent('error', { detail: { errors } })\n}\n\nexport const fireExceptionEvent: GlobalEventTrigger<'exception'> = (exception) => {\n return fireEvent('exception', { cancelable: true, detail: { exception } })\n}\n\nexport const fireFinishEvent: GlobalEventTrigger<'finish'> = (visit) => {\n return fireEvent('finish', { detail: { visit } })\n}\n\nexport const fireInvalidEvent: GlobalEventTrigger<'invalid'> = (response) => {\n return fireEvent('invalid', { cancelable: true, detail: { response } })\n}\n\nexport const fireNavigateEvent: GlobalEventTrigger<'navigate'> = (page) => {\n return fireEvent('navigate', { detail: { page } })\n}\n\nexport const fireProgressEvent: GlobalEventTrigger<'progress'> = (progress) => {\n return fireEvent('progress', { detail: { progress } })\n}\n\nexport const fireStartEvent: GlobalEventTrigger<'start'> = (visit) => {\n return fireEvent('start', { detail: { visit } })\n}\n\nexport const fireSuccessEvent: GlobalEventTrigger<'success'> = (page) => {\n return fireEvent('success', { detail: { page } })\n}\n", "import { FormDataConvertible, RequestPayload } from './types'\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n data instanceof File ||\n data instanceof Blob ||\n (data instanceof FileList && data.length > 0) ||\n (data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value))) ||\n (typeof data === 'object' && data !== null && Object.values(data).some((value) => hasFiles(value)))\n )\n}\n", "import { FormDataConvertible } from './types'\n\nexport 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", "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 deepmerge from 'deepmerge'\nimport * as qs from 'qs'\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 === 'get' && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === 'get' && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n", "import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n", "import NProgress from 'nprogress'\nimport { GlobalEvent } from './types'\n\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", "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"],
5
+ "mappings": "skBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,uBAAAE,EAAA,cAAAC,EAAA,6BAAAC,EAAA,WAAAC,GAAA,kBAAAC,EAAA,oBAAAC,EAAA,mBAAAC,IAAA,eAAAC,GAAAT,ICAA,IAAAU,EAAgD,sBCAjC,SAARC,EAAyEC,EAAOC,EAAkB,CACvG,IAAIC,EACJ,OAAO,YAAaC,EAAiB,CACnC,aAAaD,CAAS,EACtBA,EAAY,WAAW,IAAMF,EAAG,MAAM,KAAMG,CAAI,EAAGF,CAAK,CAC1D,CACF,CCJA,SAASG,EACPC,EACAC,EACS,CACT,OAAO,SAAS,cAAc,IAAI,YAAY,WAAWD,IAAQC,CAAO,CAAC,CAC3E,CAEO,IAAMC,EAAiDC,GACrDJ,EAAU,SAAU,CAAE,WAAY,GAAM,OAAQ,CAAE,MAAAI,CAAM,CAAE,CAAC,EAGvDC,EAA+CC,GACnDN,EAAU,QAAS,CAAE,OAAQ,CAAE,OAAAM,CAAO,CAAE,CAAC,EAGrCC,EAAuDC,GAC3DR,EAAU,YAAa,CAAE,WAAY,GAAM,OAAQ,CAAE,UAAAQ,CAAU,CAAE,CAAC,EAG9DC,EAAiDL,GACrDJ,EAAU,SAAU,CAAE,OAAQ,CAAE,MAAAI,CAAM,CAAE,CAAC,EAGrCM,EAAmDC,GACvDX,EAAU,UAAW,CAAE,WAAY,GAAM,OAAQ,CAAE,SAAAW,CAAS,CAAE,CAAC,EAG3DC,EAAqDC,GACzDb,EAAU,WAAY,CAAE,OAAQ,CAAE,KAAAa,CAAK,CAAE,CAAC,EAGtCC,EAAqDC,GACzDf,EAAU,WAAY,CAAE,OAAQ,CAAE,SAAAe,CAAS,CAAE,CAAC,EAG1CC,EAA+CZ,GACnDJ,EAAU,QAAS,CAAE,OAAQ,CAAE,MAAAI,CAAM,CAAE,CAAC,EAGpCa,EAAmDJ,GACvDb,EAAU,UAAW,CAAE,OAAQ,CAAE,KAAAa,CAAK,CAAE,CAAC,ECxC3C,SAASK,EAASC,EAAqD,CAC5E,OACEA,aAAgB,MAChBA,aAAgB,MACfA,aAAgB,UAAYA,EAAK,OAAS,GAC1CA,aAAgB,UAAY,MAAM,KAAKA,EAAK,OAAO,CAAC,EAAE,KAAMC,GAAUF,EAASE,CAAK,CAAC,GACrF,OAAOD,GAAS,UAAYA,IAAS,MAAQ,OAAO,OAAOA,CAAI,EAAE,KAAMC,GAAUF,EAASE,CAAK,CAAC,CAErG,CCRO,SAASC,EACdC,EACAC,EAAiB,IAAI,SACrBC,EAA2B,KACjB,CACVF,EAASA,GAAU,CAAC,EAEpB,QAAWG,KAAOH,EACZ,OAAO,UAAU,eAAe,KAAKA,EAAQG,CAAG,GAClDC,GAAOH,EAAMI,GAAWH,EAAWC,CAAG,EAAGH,EAAOG,CAAG,CAAC,EAIxD,OAAOF,CACT,CAEA,SAASI,GAAWC,EAAuBH,EAAqB,CAC9D,OAAOG,EAASA,EAAS,IAAMH,EAAM,IAAMA,CAC7C,CAEA,SAASC,GAAOH,EAAgBE,EAAaI,EAAkC,CAC7E,GAAI,MAAM,QAAQA,CAAK,EACrB,OAAO,MAAM,KAAKA,EAAM,KAAK,CAAC,EAAE,QAASC,GAAUJ,GAAOH,EAAMI,GAAWF,EAAKK,EAAM,SAAS,CAAC,EAAGD,EAAMC,CAAK,CAAC,CAAC,EAC3G,GAAID,aAAiB,KAC1B,OAAON,EAAK,OAAOE,EAAKI,EAAM,YAAY,CAAC,EACtC,GAAIA,aAAiB,KAC1B,OAAON,EAAK,OAAOE,EAAKI,EAAOA,EAAM,IAAI,EACpC,GAAIA,aAAiB,KAC1B,OAAON,EAAK,OAAOE,EAAKI,CAAK,EACxB,GAAI,OAAOA,GAAU,UAC1B,OAAON,EAAK,OAAOE,EAAKI,EAAQ,IAAM,GAAG,EACpC,GAAI,OAAOA,GAAU,SAC1B,OAAON,EAAK,OAAOE,EAAKI,CAAK,EACxB,GAAI,OAAOA,GAAU,SAC1B,OAAON,EAAK,OAAOE,EAAK,GAAGI,GAAO,EAC7B,GAAIA,GAAU,KACnB,OAAON,EAAK,OAAOE,EAAK,EAAE,EAG5BJ,EAAiBQ,EAAON,EAAME,CAAG,CACnC,CC1CA,IAAOM,GAAQ,CACb,MAAO,KACP,SAAU,KAEV,KAAKC,EAA8C,CAC7C,OAAOA,GAAS,WAClBA,EAAO,8GAA8G,KAAK,UACxHA,CACF,KAGF,IAAMC,EAAO,SAAS,cAAc,MAAM,EAC1CA,EAAK,UAAYD,EACjBC,EAAK,iBAAiB,GAAG,EAAE,QAASC,GAAMA,EAAE,aAAa,SAAU,MAAM,CAAC,EAE1E,KAAK,MAAQ,SAAS,cAAc,KAAK,EACzC,KAAK,MAAM,MAAM,SAAW,QAC5B,KAAK,MAAM,MAAM,MAAQ,QACzB,KAAK,MAAM,MAAM,OAAS,QAC1B,KAAK,MAAM,MAAM,QAAU,OAC3B,KAAK,MAAM,MAAM,UAAY,aAC7B,KAAK,MAAM,MAAM,gBAAkB,oBACnC,KAAK,MAAM,MAAM,OAAS,IAC1B,KAAK,MAAM,iBAAiB,QAAS,IAAM,KAAK,KAAK,CAAC,EAEtD,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAS9C,GARAA,EAAO,MAAM,gBAAkB,QAC/BA,EAAO,MAAM,aAAe,MAC5BA,EAAO,MAAM,MAAQ,OACrBA,EAAO,MAAM,OAAS,OACtB,KAAK,MAAM,YAAYA,CAAM,EAE7B,SAAS,KAAK,QAAQ,KAAK,KAAK,EAChC,SAAS,KAAK,MAAM,SAAW,SAC3B,CAACA,EAAO,cACV,MAAM,IAAI,MAAM,uBAAuB,EAEzCA,EAAO,cAAc,SAAS,KAAK,EACnCA,EAAO,cAAc,SAAS,MAAMF,EAAK,SAAS,EAClDE,EAAO,cAAc,SAAS,MAAM,EAEpC,KAAK,SAAW,KAAK,aAAa,KAAK,IAAI,EAC3C,SAAS,iBAAiB,UAAW,KAAK,QAAQ,CACpD,EAEA,MAAa,CACX,KAAK,MAAM,UAAY,GACvB,KAAK,MAAQ,KACb,SAAS,KAAK,MAAM,SAAW,UAC/B,SAAS,oBAAoB,UAAW,KAAK,QAAQ,CACvD,EAEA,aAAaC,EAA4B,CACnCA,EAAM,UAAY,IACpB,KAAK,KAAK,CAEd,CACF,ECzDA,IAAAC,GAAsB,0BACtBC,EAAoB,mBAGb,SAASC,EAAUC,EAAyB,CACjD,OAAO,IAAI,IAAIA,EAAK,SAAS,EAAG,OAAO,SAAS,SAAS,CAAC,CAC5D,CAEO,SAASC,EACdC,EACAF,EACAG,EACAC,EAAwC,WACO,CAC/C,IAAMC,EAAU,eAAe,KAAKL,EAAK,SAAS,CAAC,EAC7CM,EAAkBD,GAAWL,EAAK,SAAS,EAAE,WAAW,GAAG,EAC3DO,EAAkB,CAACD,GAAmB,CAACN,EAAK,SAAS,EAAE,WAAW,GAAG,GAAK,CAACA,EAAK,SAAS,EAAE,WAAW,GAAG,EACzGQ,EAAYR,EAAK,SAAS,EAAE,SAAS,GAAG,GAAME,IAAW,OAAS,OAAO,KAAKC,CAAI,EAAE,OACpFM,EAAUT,EAAK,SAAS,EAAE,SAAS,GAAG,EAEtCU,EAAM,IAAI,IAAIV,EAAK,SAAS,EAAG,kBAAkB,EAEvD,OAAIE,IAAW,OAAS,OAAO,KAAKC,CAAI,EAAE,SACxCO,EAAI,OAAY,eAAU,GAAAC,SAAa,QAAMD,EAAI,OAAQ,CAAE,kBAAmB,EAAK,CAAC,EAAGP,CAAI,EAAG,CAC5F,iBAAkB,GAClB,YAAaC,CACf,CAAC,EACDD,EAAO,CAAC,GAGH,CACL,CACEE,EAAU,GAAGK,EAAI,aAAaA,EAAI,OAAS,GAC3CJ,EAAkBI,EAAI,SAAW,GACjCH,EAAkBG,EAAI,SAAS,UAAU,CAAC,EAAI,GAC9CF,EAAYE,EAAI,OAAS,GACzBD,EAAUC,EAAI,KAAO,EACvB,EAAE,KAAK,EAAE,EACTP,CACF,CACF,CAEO,SAASS,EAAeF,EAA0B,CACvD,OAAAA,EAAM,IAAI,IAAIA,EAAI,IAAI,EACtBA,EAAI,KAAO,GACJA,CACT,CNZA,IAAMG,GAAW,OAAO,OAAW,IAEtBC,EAAN,KAAa,CAAb,cAML,KAAU,QAAmB,KAEtB,KAAK,CACV,YAAAC,EACA,iBAAAC,EACA,cAAAC,CACF,EAIS,CACP,KAAK,KAAOF,EACZ,KAAK,iBAAmBC,EACxB,KAAK,cAAgBC,EAErB,KAAK,kBAAkB,EACvB,KAAK,6BAA6B,EAE9B,KAAK,mBAAmB,EAC1B,KAAK,uBAAuB,KAAK,IAAI,EAC5B,KAAK,gBAAgB,EAC9B,KAAK,oBAAoB,KAAK,IAAI,EAElC,KAAK,uBAAuB,KAAK,IAAI,EAGvC,KAAK,oBAAoB,CAC3B,CAEU,mBAA0B,CAClC,KAAK,eACH,OAAO,aAAe,OAAO,YAAY,iBAAiB,YAAY,EAAE,OAAS,EAC5E,OAAO,YAAY,iBAAiB,YAAY,EAAE,CAAC,EAAkC,KACtF,UACR,CAEU,8BAAqC,CACzC,KAAK,iBAAmB,UAAY,OAAO,QAAQ,OAAO,iBAC5D,OAAO,OAAO,QAAQ,MAAM,eAEhC,CAEU,uBAAuBC,EAAkB,CACjD,KAAK,KAAK,KAAO,OAAO,SAAS,KACjC,KAAK,QAAQA,EAAM,CAAE,eAAgB,GAAM,cAAe,EAAK,CAAC,EAAE,KAAK,IAAMC,EAAkBD,CAAI,CAAC,CACtG,CAEU,qBAA4B,CACpC,OAAO,iBAAiB,WAAY,KAAK,oBAAoB,KAAK,IAAI,CAAC,EACvE,SAAS,iBAAiB,SAAUE,EAAS,KAAK,kBAAkB,KAAK,IAAI,EAAG,GAAG,EAAG,EAAI,EAC1F,SAAS,iBAAiB,QAAUC,GAAU,CAC5C,IAAMC,EAASD,EAAM,OACfE,EAAgBD,EAAO,QAAQ,GAAG,EAClCE,EAAWF,EAAO,QAAQ,yBAAyB,GAAmB,QAAQ,eAChF,CAACC,GAAiBA,EAAc,KAAO,YAAcA,EAAc,QAAU,UAE7EA,EAAc,MAAQA,EAAc,KAAK,WAAW,SAAS,MAAM,IACrEF,EAAM,eAAe,EACrBA,EAAM,gBAAgB,EACtB,KAAK,MAAME,EAAc,KAAM,CAC7B,OAAQA,EAAc,QAAQ,OAC9B,OAAQA,EAAc,QAAQ,QAAaC,CAC7C,CAAC,EAEL,CAAC,CACH,CAEU,eAAqC,CAC7C,OAAO,SAAS,iBAAiB,iBAAiB,CACpD,CAEU,kBAAkBH,EAAoB,CAE5C,OAAQA,EAAM,OAAmB,cAAiB,YACjDA,EAAM,OAAmB,aAAa,eAAe,GAEtD,KAAK,oBAAoB,CAE7B,CAEU,qBAA4B,CACpC,KAAK,aAAa,CAChB,GAAG,KAAK,KACR,cAAe,MAAM,KAAK,KAAK,cAAc,CAAC,EAAE,IAAKI,IAC5C,CACL,IAAKA,EAAO,UACZ,KAAMA,EAAO,UACf,EACD,CACH,CAAC,CACH,CAEU,sBAA6B,CACrC,OAAO,SAAS,EAAG,CAAC,EACpB,KAAK,cAAc,EAAE,QAASA,GAAW,CACnC,OAAOA,EAAO,UAAa,WAC7BA,EAAO,SAAS,EAAG,CAAC,GAEpBA,EAAO,UAAY,EACnBA,EAAO,WAAa,EAExB,CAAC,EACD,KAAK,oBAAoB,EACrB,OAAO,SAAS,MAGlB,WAAW,IAAM,SAAS,eAAe,OAAO,SAAS,KAAK,MAAM,CAAC,CAAC,GAAG,eAAe,CAAC,CAE7F,CAEU,wBAA+B,CACnC,KAAK,KAAK,eACZ,KAAK,cAAc,EAAE,QAAQ,CAACA,EAAiBC,IAAkB,CAC/D,IAAMC,EAAiB,KAAK,KAAK,cAAcD,CAAK,EACpD,GAAKC,EAEM,OAAOF,EAAO,UAAa,WACpCA,EAAO,SAASE,EAAe,KAAMA,EAAe,GAAG,GAEvDF,EAAO,UAAYE,EAAe,IAClCF,EAAO,WAAaE,EAAe,UALnC,OAOJ,CAAC,CAEL,CAEU,oBAA8B,CACtC,OAAO,OAAO,QAAQ,OAAS,KAAK,iBAAmB,cACzD,CAEU,uBAAuBT,EAAkB,CACjD,IAAIU,EAOAV,EAAK,MACPU,EAAeV,GAEf,OAAO,QAAQ,MAAM,QAAUA,EAAK,QACpCU,EAAe,OAAO,QAAQ,OAGhC,KAAK,QAAQA,EAAc,CAAE,eAAgB,GAAM,cAAe,EAAK,CAAC,EAAE,KAAK,IAAM,CACnF,KAAK,uBAAuB,EAC5BT,EAAkBD,CAAI,CACxB,CAAC,CACH,CAEU,cAAcW,EAAUC,EAAiE,CACjG,GAAI,CACF,IAAMC,EAA+B,CAAE,eAAAD,CAAe,EACtD,OAAO,eAAe,QAAQ,uBAAwB,KAAK,UAAUC,CAAa,CAAC,EACnF,OAAO,SAAS,KAAOF,EAAI,KACvBG,EAAe,OAAO,QAAQ,EAAE,OAASA,EAAeH,CAAG,EAAE,MAC/D,OAAO,SAAS,OAAO,CAE3B,MAAE,CACA,MAAO,EACT,CACF,CAEU,iBAA2B,CACnC,GAAI,CACF,OAAO,OAAO,eAAe,QAAQ,sBAAsB,IAAM,IACnE,MAAE,CACA,MAAO,EACT,CACF,CAEU,oBAAoBX,EAAkB,CAC9C,IAAMa,EAA+B,KAAK,MAAM,OAAO,eAAe,QAAQ,sBAAsB,GAAK,EAAE,EAC3G,OAAO,eAAe,WAAW,sBAAsB,EACvDb,EAAK,KAAO,OAAO,SAAS,KAC5BA,EAAK,gBAAkB,OAAO,QAAQ,OAAO,iBAAmB,CAAC,EACjEA,EAAK,cAAgB,OAAO,QAAQ,OAAO,eAAiB,CAAC,EAC7D,KAAK,QAAQA,EAAM,CAAE,eAAgBa,EAAc,eAAgB,cAAe,EAAK,CAAC,EAAE,KAAK,IAAM,CAC/FA,EAAc,gBAChB,KAAK,uBAAuB,EAE9BZ,EAAkBD,CAAI,CACxB,CAAC,CACH,CAEU,wBAAwBe,EAAkC,CAClE,MAAO,CAAC,EAAEA,GAAYA,EAAS,SAAW,KAAOA,EAAS,QAAQ,oBAAoB,EACxF,CAEU,kBAAkBA,EAAkC,CAC5D,MAAO,CAAC,CAACA,GAAU,QAAQ,WAAW,CACxC,CAEU,eAAyB,CACjC,YAAK,QAAU,CAAC,EACT,KAAK,OACd,CAEU,YACRC,EACA,CAAE,UAAAC,EAAY,GAAO,YAAAC,EAAc,EAAM,EACnC,CACFF,GAAe,CAACA,EAAY,WAAa,CAACA,EAAY,WAAa,CAACA,EAAY,cAClFA,EAAY,YAAY,MAAM,EAC9BA,EAAY,SAAS,EACrBA,EAAY,UAAY,GACxBA,EAAY,UAAYC,EACxBD,EAAY,YAAcE,EAC1BC,EAAgBH,CAAW,EAC3BA,EAAY,SAASA,CAAW,EAEpC,CAEU,YAAYI,EAA0B,CAC1C,CAACA,EAAM,WAAa,CAACA,EAAM,cAC7BA,EAAM,UAAY,GAClBA,EAAM,UAAY,GAClBA,EAAM,YAAc,GACpBD,EAAgBC,CAAK,EACrBA,EAAM,SAASA,CAAK,EAExB,CAEU,sBAAsBC,EAA4BrB,EAA8B,CACxF,OAAI,OAAOqB,GAAU,WACZA,EAAMrB,CAAI,EACRqB,IAAU,SACZ,OAAO,KAAKrB,EAAK,MAAM,QAAU,CAAC,CAAC,EAAE,OAAS,EAE9CqB,CAEX,CAEO,QAAe,CAChB,KAAK,aACP,KAAK,YAAY,KAAK,YAAa,CAAE,UAAW,EAAK,CAAC,CAE1D,CAEO,MACLC,EACA,CACE,OAAAC,EAAS,MACT,KAAAC,EAAO,CAAC,EACR,QAAAC,EAAU,GACV,eAAAb,EAAiB,GACjB,cAAAc,EAAgB,GAChB,YAAAC,EAAc,GACd,KAAAC,EAAO,CAAC,EACR,QAAAC,EAAU,CAAC,EACX,SAAAC,EAAW,GACX,cAAAC,EAAgB,GAChB,OAAA3B,EAAS,KACT,cAAA4B,EAAgB,IAAM,CAAC,EACvB,SAAAC,EAAW,IAAM,CAAC,EAClB,QAAAC,EAAU,IAAM,CAAC,EACjB,WAAAC,EAAa,IAAM,CAAC,EACpB,SAAAC,GAAW,IAAM,CAAC,EAClB,SAAAC,GAAW,IAAM,CAAC,EAClB,UAAAC,EAAY,IAAM,CAAC,EACnB,QAAAC,EAAU,IAAM,CAAC,EACjB,eAAAC,EAAiB,IAAM,CAAC,EACxB,uBAAAC,EAAyB,UAC3B,EAAkB,CAAC,EACb,CACN,IAAI9B,EAAM,OAAOW,GAAS,SAAWoB,EAAUpB,CAAI,EAAIA,EAMvD,IAJKqB,EAASnB,CAAI,GAAKO,IAAkB,EAAEP,aAAgB,YACzDA,EAAOoB,EAAiBpB,CAAI,GAG1B,EAAEA,aAAgB,UAAW,CAC/B,GAAM,CAACqB,EAAOC,CAAK,EAAIC,EAAyBxB,EAAQZ,EAAKa,EAAMiB,CAAsB,EACzF9B,EAAM+B,EAAUG,CAAK,EACrBrB,EAAOsB,CACT,CAEA,IAAM1B,EAAsB,CAC1B,IAAAT,EACA,OAAAY,EACA,KAAAC,EACA,QAAAC,EACA,eAAAb,EACA,cAAAc,EACA,YAAAC,EACA,KAAAC,EACA,QAAAC,EACA,SAAAC,EACA,OAAA1B,EACA,cAAA2B,EACA,eAAAS,EACA,uBAAAC,EACA,UAAW,GACX,UAAW,GACX,YAAa,EACf,EAEA,GAAIR,EAASb,CAAK,IAAM,IAAS,CAAC4B,EAAgB5B,CAAK,EACrD,OAGE,KAAK,aACP,KAAK,YAAY,KAAK,YAAa,CAAE,YAAa,EAAK,CAAC,EAG1D,KAAK,oBAAoB,EAEzB,IAAM6B,EAAU,KAAK,cAAc,EACnC,KAAK,YAAc,CACjB,GAAG7B,EACH,cAAAY,EACA,SAAAC,EACA,QAAAC,EACA,WAAAC,EACA,SAAAC,GACA,SAAAC,GACA,UAAAC,EACA,QAAAC,EACA,uBAAAE,EACA,YAAa,IAAI,eACnB,EAEAT,EAAc,CACZ,OAAQ,IAAM,CACR,KAAK,aACP,KAAK,YAAY,KAAK,YAAa,CAAE,UAAW,EAAK,CAAC,CAE1D,CACF,CAAC,EAEDkB,EAAe9B,CAAK,EACpBc,EAAQd,CAAK,KAEb,EAAA+B,SAAM,CACJ,OAAA5B,EACA,IAAKT,EAAeH,CAAG,EAAE,KACzB,KAAMY,IAAW,MAAQ,CAAC,EAAIC,EAC9B,OAAQD,IAAW,MAAQC,EAAO,CAAC,EACnC,OAAQ,KAAK,YAAY,YAAY,OACrC,QAAS,CACP,GAAGK,EACH,OAAQ,mCACR,mBAAoB,iBACpB,YAAa,GACb,GAAID,EAAK,OACL,CACE,8BAA+B,KAAK,KAAK,UACzC,yBAA0BA,EAAK,KAAK,GAAG,CACzC,EACA,CAAC,EACL,GAAIE,GAAYA,EAAS,OAAS,CAAE,sBAAuBA,CAAS,EAAI,CAAC,EACzE,GAAI,KAAK,KAAK,QAAU,CAAE,oBAAqB,KAAK,KAAK,OAAQ,EAAI,CAAC,CACxE,EACA,iBAAmBsB,GAAa,CAC1B5B,aAAgB,WAClB4B,EAAS,WAAaA,EAAS,SAAW,KAAK,MAAMA,EAAS,SAAW,GAAG,EAAI,EAChFC,EAAkBD,CAAQ,EAC1BjB,EAAWiB,CAAQ,EAEvB,CACF,CAAC,EACE,KAAMrC,GAAa,CAClB,GAAI,CAAC,KAAK,kBAAkBA,CAAQ,EAClC,OAAO,QAAQ,OAAO,CAAE,SAAAA,CAAS,CAAC,EAGpC,IAAMuC,EAAqBvC,EAAS,KAGhCA,EAAS,QAAQ,iBAAiB,IACpCX,EAASW,EAAS,QAAQ,iBAAiB,GAGzCa,EAAK,QAAU0B,EAAa,YAAc,KAAK,KAAK,YACtDA,EAAa,MAAQ,CAAE,GAAG,KAAK,KAAK,MAAO,GAAGA,EAAa,KAAM,GAGnE1C,EAAiB,KAAK,sBAAsBA,EAAgB0C,CAAY,EACxE5B,EAAgB,KAAK,sBAAsBA,EAAe4B,CAAY,EAClE5B,GAAiB,OAAO,QAAQ,OAAO,iBAAmB4B,EAAa,YAAc,KAAK,KAAK,YACjGA,EAAa,gBAAkB,OAAO,QAAQ,MAAM,iBAEtD,IAAMC,EAAa5C,EACb6C,EAAcd,EAAUY,EAAa,GAAG,EAC9C,OAAIC,EAAW,MAAQ,CAACC,EAAY,MAAQ1C,EAAeyC,CAAU,EAAE,OAASC,EAAY,OAC1FA,EAAY,KAAOD,EAAW,KAC9BD,EAAa,IAAME,EAAY,MAE7BhB,GACFA,EAAec,EAAa,KAAK,EAE5B,KAAK,QAAQA,EAAc,CAAE,OAAAlD,EAAQ,QAAA6C,EAAS,QAAAxB,EAAS,eAAAb,EAAgB,cAAAc,EAAe,YAAAC,CAAY,CAAC,CAC5G,CAAC,EACA,KAAM3B,GAAe,CACpB,IAAMyD,EAASzD,EAAK,MAAM,QAAU,CAAC,EACrC,GAAI,OAAO,KAAKyD,CAAM,EAAE,OAAS,EAAG,CAClC,IAAMC,EAAe5B,EAAY2B,EAAO3B,CAAQ,EAAI2B,EAAO3B,CAAQ,EAAI,CAAC,EAAK2B,EAC7E,OAAAE,EAAeD,CAAY,EACpBnB,EAAQmB,CAAY,CAC7B,CACA,OAAAE,EAAiB5D,CAAI,EACdsC,EAAUtC,CAAI,CACvB,CAAC,EACA,MAAO6D,GAAU,CAChB,GAAI,KAAK,kBAAkBA,EAAM,QAAQ,EACvC,OAAO,KAAK,QAAQA,EAAM,SAAS,KAAM,CAAE,QAAAZ,CAAQ,CAAC,EAC/C,GAAI,KAAK,wBAAwBY,EAAM,QAAQ,EAAG,CACvD,IAAMC,EAAcpB,EAAUmB,EAAM,SAAS,QAAQ,oBAAoB,CAAC,EACpEN,EAAa5C,EACf4C,EAAW,MAAQ,CAACO,EAAY,MAAQhD,EAAeyC,CAAU,EAAE,OAASO,EAAY,OAC1FA,EAAY,KAAOP,EAAW,MAEhC,KAAK,cAAcO,EAAalD,IAAmB,EAAI,CACzD,SAAWiD,EAAM,SACXE,EAAiBF,EAAM,QAAQ,GACjCG,GAAM,KAAKH,EAAM,SAAS,IAAI,MAGhC,QAAO,QAAQ,OAAOA,CAAK,CAE/B,CAAC,EACA,KAAK,IAAM,CACN,KAAK,aACP,KAAK,YAAY,KAAK,WAAW,CAErC,CAAC,EACA,MAAOA,GAAU,CAChB,GAAI,CAAC,EAAAV,QAAM,SAASU,CAAK,EAAG,CAC1B,IAAMI,EAAiBC,EAAmBL,CAAK,EAI/C,GAHI,KAAK,aACP,KAAK,YAAY,KAAK,WAAW,EAE/BI,EACF,OAAO,QAAQ,OAAOJ,CAAK,CAE/B,CACF,CAAC,CACL,CAEU,QACR7D,EACA,CACE,QAAAiD,EAAU,KAAK,cAAc,EAC7B,QAAAxB,EAAU,GACV,YAAAE,EAAc,GACd,eAAAf,EAAiB,GACjB,cAAAc,EAAgB,GAChB,OAAAtB,EAAS,IACX,EAOI,CAAC,EACU,CACf,OAAO,QAAQ,QAAQ,KAAK,iBAAiBJ,EAAK,SAAS,CAAC,EAAE,KAAMmE,IAC9DlB,IAAY,KAAK,UACnBjD,EAAK,cAAgBA,EAAK,eAAiB,CAAC,EAC5CA,EAAK,gBAAkBA,EAAK,iBAAmB,CAAC,EAC5C2B,IACF3B,EAAK,IAAM,OAAO,SAAS,MAEzB,CAACI,GAAUA,IAAW,QAAUA,IAAW,WAAaA,IAAW,QACrEqB,EAAUA,GAAWiB,EAAU1C,EAAK,GAAG,EAAE,OAAS,OAAO,SAAS,KAClEyB,EAAU,KAAK,aAAazB,CAAI,EAAI,KAAK,UAAUA,CAAI,GAGvDA,EAAK,OAASI,EAGhB,KAAK,cAAc,CAAE,UAAA+D,EAAW,KAAAnE,EAAM,cAAA0B,CAAc,CAAC,EAAE,KAAK,IAAM,CAC3Dd,GACH,KAAK,qBAAqB,EAEvBa,GACHxB,EAAkBD,CAAI,CAE1B,CAAC,GAEIA,EACR,CACH,CAEU,UAAUA,EAAkB,CACpC,KAAK,KAAOA,EACZ,OAAO,QAAQ,UAAUA,EAAM,GAAIA,EAAK,GAAG,CAC7C,CAEU,aAAaA,EAAkB,CACvC,KAAK,KAAOA,EACZ,OAAO,QAAQ,aAAaA,EAAM,GAAIA,EAAK,GAAG,CAChD,CAEU,oBAAoBG,EAA4B,CACxD,GAAIA,EAAM,QAAU,KAAM,CACxB,IAAMH,EAAOG,EAAM,MACb8C,EAAU,KAAK,cAAc,EACnC,QAAQ,QAAQ,KAAK,iBAAiBjD,EAAK,SAAS,CAAC,EAAE,KAAMmE,GAAc,CACrElB,IAAY,KAAK,UACnB,KAAK,KAAOjD,EACZ,KAAK,cAAc,CAAE,UAAAmE,EAAW,KAAAnE,EAAM,cAAe,EAAM,CAAC,EAAE,KAAK,IAAM,CACvE,KAAK,uBAAuB,EAC5BC,EAAkBD,CAAI,CACxB,CAAC,EAEL,CAAC,CACH,KAAO,CACL,IAAMW,EAAM+B,EAAU,KAAK,KAAK,GAAG,EACnC/B,EAAI,KAAO,OAAO,SAAS,KAC3B,KAAK,aAAa,CAAE,GAAG,KAAK,KAAM,IAAKA,EAAI,IAAK,CAAC,EACjD,KAAK,qBAAqB,CAC5B,CACF,CAEO,IACLA,EACAa,EAAuB,CAAC,EACxB4C,EAAoD,CAAC,EAC/C,CACN,OAAO,KAAK,MAAMzD,EAAK,CAAE,GAAGyD,EAAS,OAAQ,MAAO,KAAA5C,CAAK,CAAC,CAC5D,CAEO,OAAO4C,EAAqE,CAAC,EAAS,CAC3F,OAAO,KAAK,MAAM,OAAO,SAAS,KAAM,CAAE,GAAGA,EAAS,eAAgB,GAAM,cAAe,GAAM,YAAa,EAAK,CAAC,CACtH,CAEO,QAAQzD,EAAmByD,EAA4C,CAAC,EAAS,CACtF,eAAQ,KACN,qGACEA,EAAQ,QAAU,kBAEtB,EACO,KAAK,MAAMzD,EAAK,CAAE,cAAe,GAAM,GAAGyD,EAAS,QAAS,EAAK,CAAC,CAC3E,CAEO,KACLzD,EACAa,EAAuB,CAAC,EACxB4C,EAAoD,CAAC,EAC/C,CACN,OAAO,KAAK,MAAMzD,EAAK,CAAE,cAAe,GAAM,GAAGyD,EAAS,OAAQ,OAAQ,KAAA5C,CAAK,CAAC,CAClF,CAEO,IACLb,EACAa,EAAuB,CAAC,EACxB4C,EAAoD,CAAC,EAC/C,CACN,OAAO,KAAK,MAAMzD,EAAK,CAAE,cAAe,GAAM,GAAGyD,EAAS,OAAQ,MAAO,KAAA5C,CAAK,CAAC,CACjF,CAEO,MACLb,EACAa,EAAuB,CAAC,EACxB4C,EAAoD,CAAC,EAC/C,CACN,OAAO,KAAK,MAAMzD,EAAK,CAAE,cAAe,GAAM,GAAGyD,EAAS,OAAQ,QAAS,KAAA5C,CAAK,CAAC,CACnF,CAEO,OAAOb,EAAmByD,EAA2C,CAAC,EAAS,CACpF,OAAO,KAAK,MAAMzD,EAAK,CAAE,cAAe,GAAM,GAAGyD,EAAS,OAAQ,QAAS,CAAC,CAC9E,CAEO,SAAS5C,EAAe6C,EAAM,UAAiB,CAChD1E,IAIJ,KAAK,aAAa,CAChB,GAAG,KAAK,KACR,gBAAiB,CACf,GAAG,KAAK,MAAM,gBACd,CAAC0E,CAAG,EAAG7C,CACT,CACF,CAAC,CACH,CAEO,QAAQ6C,EAAM,UAAoB,CACvC,GAAI,CAAA1E,GAIJ,OAAO,OAAO,QAAQ,OAAO,kBAAkB0E,CAAG,CACpD,CAEO,GACLC,EACAC,EACc,CACd,IAAMC,EAAarE,GAAmC,CACpD,IAAMY,EAAWwD,EAASpE,CAAK,EAC3BA,EAAM,YAAc,CAACA,EAAM,kBAAoBY,IAAa,IAC9DZ,EAAM,eAAe,CAEzB,EAEA,gBAAS,iBAAiB,WAAWmE,IAAQE,CAAQ,EAC9C,IAAM,SAAS,oBAAoB,WAAWF,IAAQE,CAAQ,CACvE,CACF,EOloBA,IAAMC,GAAW,CACf,gBAAgBC,EAAwB,CACtC,IAAMC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAYD,EACrB,IAAME,EAAOD,EAAS,QAAQ,WAE9B,GAAI,CAACD,EAAI,WAAW,UAAU,EAC5B,OAAOE,EAGT,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9C,OAAAA,EAAO,UAAYD,EAAK,UACxBA,EAAK,kBAAkB,EAAE,QAASE,GAAS,CACzCD,EAAO,aAAaC,EAAMF,EAAK,aAAaE,CAAI,GAAK,EAAE,CACzD,CAAC,EAEMD,CACT,EAEA,wBAAwBE,EAA2B,CACjD,OAAOA,EAAQ,WAAa,KAAK,cAAgBA,EAAQ,aAAa,SAAS,IAAM,IACvF,EAEA,yBAAyBA,EAAkBC,EAAkC,CAC3E,IAAMC,EAAMF,EAAQ,aAAa,SAAS,EAC1C,OAAIE,IAAQ,KACHD,EAAS,UAAWD,GAAYA,EAAQ,aAAa,SAAS,IAAME,CAAG,EAGzE,EACT,EAEA,OAAQC,EAAS,SAAUF,EAAyB,CAClD,IAAMG,EAAiBH,EAAS,IAAKD,GAAY,KAAK,gBAAgBA,CAAO,CAAC,EACvD,MAAM,KAAK,SAAS,KAAK,UAAU,EAAE,OAAQA,GAClE,KAAK,wBAAwBA,CAAkB,CACjD,EAEe,QAASK,GAAkB,CACxC,IAAMC,EAAQ,KAAK,yBAAyBD,EAA0BD,CAAc,EACpF,GAAIE,IAAU,GAAI,CAChBD,GAAe,YAAY,YAAYA,CAAa,EACpD,MACF,CAEA,IAAME,EAAgBH,EAAe,OAAOE,EAAO,CAAC,EAAE,CAAC,EACnDC,GAAiB,CAACF,EAAc,YAAYE,CAAa,GAC3DF,GAAe,YAAY,aAAaE,EAAeF,CAAa,CAExE,CAAC,EAEDD,EAAe,QAASJ,GAAY,SAAS,KAAK,YAAYA,CAAO,CAAC,CACxE,EAAG,CAAC,CACN,EAEe,SAARQ,EACLC,EACAC,EACAC,EAOA,CACA,IAAMC,EAAwC,CAAC,EAC3CC,EAAiB,EAErB,SAASC,GAAkB,CACzB,IAAMC,EAAMF,GAAkB,EAC9B,OAAAD,EAAOG,CAAE,EAAI,CAAC,EACPA,EAAG,SAAS,CACrB,CAEA,SAASC,EAAWD,EAAkB,CAChCA,IAAO,MAAQ,OAAO,KAAKH,CAAM,EAAE,QAAQG,CAAE,IAAM,KAIvD,OAAOH,EAAOG,CAAE,EAChBE,EAAO,EACT,CAEA,SAASC,EAAOH,EAAYd,EAA0B,CAAC,EAAS,CAC1Dc,IAAO,MAAQ,OAAO,KAAKH,CAAM,EAAE,QAAQG,CAAE,EAAI,KACnDH,EAAOG,CAAE,EAAId,GAGfgB,EAAO,CACT,CAEA,SAASE,GAAyB,CAChC,IAAMC,EAAQV,EAAc,EAAE,EAExBW,EAAmC,CACvC,GAAID,EAAQ,CAAE,MAAO,qBAAqBA,WAAgB,EAAI,CAAC,CACjE,EAEMnB,EAAW,OAAO,OAAOW,CAAM,EAClC,OAAO,CAACU,EAAOrB,IAAaqB,EAAM,OAAOrB,CAAQ,EAAG,CAAC,CAAC,EACtD,OAAO,CAACqB,EAAOtB,IAAY,CAC1B,GAAIA,EAAQ,QAAQ,GAAG,IAAM,GAC3B,OAAOsB,EAGT,GAAItB,EAAQ,QAAQ,SAAS,IAAM,EAAG,CACpC,IAAMoB,EAAQpB,EAAQ,MAAM,iCAAiC,EAC7D,OAAAsB,EAAM,MAAQF,EAAQ,GAAGA,EAAM,CAAC,IAAIV,EAAcU,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,IAAMpB,EACpEsB,CACT,CAEA,IAAMC,EAAQvB,EAAQ,MAAM,kBAAkB,EAC9C,OAAIuB,EACFD,EAAMC,EAAM,CAAC,CAAC,EAAIvB,EAElBsB,EAAM,OAAO,KAAKA,CAAK,EAAE,MAAM,EAAItB,EAG9BsB,CACT,EAAGD,CAAQ,EAEb,OAAO,OAAO,OAAOpB,CAAQ,CAC/B,CAEA,SAASgB,GAAe,CACtBR,EAAWE,EAASQ,EAAQ,CAAC,EAAIzB,GAAS,OAAOyB,EAAQ,CAAC,CAC5D,CAIA,OAAAF,EAAO,EAEA,CACL,YAAaA,EACb,eAAgB,UAAY,CAC1B,IAAMF,EAAKD,EAAQ,EAEnB,MAAO,CACL,OAASb,GAAaiB,EAAOH,EAAId,CAAQ,EACzC,WAAY,IAAMe,EAAWD,CAAE,CACjC,CACF,CACF,CACF,CClJA,IAAAS,EAAsB,0BAGlBC,GAAiC,KAErC,SAASC,GAAkBC,EAAqB,CAC9C,SAAS,iBAAiB,gBAAiBC,GAAM,KAAK,KAAMD,CAAK,CAAC,EAClE,SAAS,iBAAiB,mBAAoBE,EAAQ,EACtD,SAAS,iBAAiB,iBAAkBC,EAAM,CACpD,CAEA,SAASF,GAAMD,EAAqB,CAClCF,GAAU,WAAW,IAAM,EAAAM,QAAU,MAAM,EAAGJ,CAAK,CACrD,CAEA,SAASE,GAASG,EAAgC,CAC5C,EAAAD,QAAU,UAAU,GAAKC,EAAM,OAAO,UAAU,YAClD,EAAAD,QAAU,IAAI,KAAK,IAAI,EAAAA,QAAU,OAAUC,EAAM,OAAO,SAAS,WAAa,IAAO,EAAG,CAAC,CAE7F,CAEA,SAASF,GAAOE,EAA8B,CAE5C,GADA,aAAaP,EAAQ,EAChB,EAAAM,QAAU,UAAU,EAEdC,EAAM,OAAO,MAAM,UAC5B,EAAAD,QAAU,KAAK,EACNC,EAAM,OAAO,MAAM,YAC5B,EAAAD,QAAU,IAAI,CAAC,EACNC,EAAM,OAAO,MAAM,YAC5B,EAAAD,QAAU,KAAK,EACf,EAAAA,QAAU,OAAO,OAPjB,OASJ,CAEA,SAASE,GAAUC,EAAqB,CACtC,IAAMC,EAAU,SAAS,cAAc,OAAO,EAC9CA,EAAQ,KAAO,WACfA,EAAQ,YAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAMJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAiBSA,cAAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAsBrBA;AAAA,2BACCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BzB,SAAS,KAAK,YAAYC,CAAO,CACnC,CAEe,SAARC,EAA+B,CACpC,MAAAT,EAAQ,IACR,MAAAO,EAAQ,OACR,WAAAG,EAAa,GACb,YAAAC,EAAc,EAChB,EAAI,CAAC,EAAS,CACZZ,GAAkBC,CAAK,EACvB,EAAAI,QAAU,UAAU,CAAE,YAAAO,CAAY,CAAC,EAC/BD,GACFJ,GAAUC,CAAK,CAEnB,CC5He,SAARK,EAAiCC,EAA+B,CACrE,IAAMC,EAAUD,EAAM,cAA8B,QAAQ,YAAY,IAAM,IAC9E,MAAO,EACJA,EAAM,SAAWA,GAAO,QAAuB,mBAChDA,EAAM,kBACLC,GAAUD,EAAM,MAAQ,GACxBC,GAAUD,EAAM,QAChBC,GAAUD,EAAM,SAChBC,GAAUD,EAAM,SAChBC,GAAUD,EAAM,SAErB,CVFO,IAAME,GAAS,IAAIC",
6
+ "names": ["src_exports", "__export", "createHeadManager", "hrefToUrl", "mergeDataIntoQueryString", "router", "setupProgress", "shouldIntercept", "urlWithoutHash", "__toCommonJS", "import_axios", "debounce", "fn", "delay", "timeoutID", "args", "fireEvent", "name", "options", "fireBeforeEvent", "visit", "fireErrorEvent", "errors", "fireExceptionEvent", "exception", "fireFinishEvent", "fireInvalidEvent", "response", "fireNavigateEvent", "page", "fireProgressEvent", "progress", "fireStartEvent", "fireSuccessEvent", "hasFiles", "data", "value", "objectToFormData", "source", "form", "parentKey", "key", "append", "composeKey", "parent", "value", "index", "modal_default", "html", "page", "a", "iframe", "event", "import_deepmerge", "qs", "hrefToUrl", "href", "mergeDataIntoQueryString", "method", "data", "qsArrayFormat", "hasHost", "hasAbsolutePath", "hasRelativePath", "hasSearch", "hasHash", "url", "deepmerge", "urlWithoutHash", "isServer", "Router", "initialPage", "resolveComponent", "swapComponent", "page", "fireNavigateEvent", "debounce", "event", "target", "anchorElement", "frameId", "region", "index", "scrollPosition", "currentState", "url", "preserveScroll", "locationVisit", "urlWithoutHash", "response", "activeVisit", "cancelled", "interrupted", "fireFinishEvent", "visit", "value", "href", "method", "data", "replace", "preserveState", "preserveURL", "only", "headers", "errorBag", "forceFormData", "onCancelToken", "onBefore", "onStart", "onProgress", "onFinish", "onCancel", "onSuccess", "onError", "transformProps", "queryStringArrayFormat", "hrefToUrl", "hasFiles", "objectToFormData", "_href", "_data", "mergeDataIntoQueryString", "fireBeforeEvent", "visitId", "fireStartEvent", "Axios", "progress", "fireProgressEvent", "pageResponse", "requestUrl", "responseUrl", "errors", "scopedErrors", "fireErrorEvent", "fireSuccessEvent", "error", "locationUrl", "fireInvalidEvent", "modal_default", "throwException", "fireExceptionEvent", "component", "options", "key", "type", "callback", "listener", "Renderer", "tag", "template", "node", "script", "name", "element", "elements", "key", "debounce", "sourceElements", "targetElement", "index", "sourceElement", "createHeadManager", "isServer", "titleCallback", "onUpdate", "states", "lastProviderId", "connect", "id", "disconnect", "commit", "update", "collect", "title", "defaults", "carry", "match", "import_nprogress", "timeout", "addEventListeners", "delay", "start", "progress", "finish", "NProgress", "event", "injectCSS", "color", "element", "setupProgress", "includeCSS", "showSpinner", "shouldIntercept", "event", "isLink", "router", "Router"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{createServer as c}from"http";import*as s from"process";var g=t=>new Promise((o,n)=>{let r="";t.on("data",e=>r+=e),t.on("end",()=>o(r)),t.on("error",e=>n(e))}),d=(t,o)=>{let n=o||13714,r={"/health":async()=>({status:"OK",timestamp:Date.now()}),"/shutdown":()=>s.exit(),"/render":async e=>t(JSON.parse(await g(e))),"/404":async()=>({status:"NOT_FOUND",timestamp:Date.now()})};c(async(e,a)=>{let i=r[e.url]||r["/404"];try{a.writeHead(200,{"Content-Type":"application/json",Server:"Inertia.js SSR"}),a.write(JSON.stringify(await i(e)))}catch(p){console.error(p)}a.end()}).listen(n,()=>console.log("Inertia SSR server started.")),console.log(`Starting SSR server on port ${n}...`)};export{d as default};
2
+ //# sourceMappingURL=server.esm.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/server.ts"],
4
+ "sourcesContent": ["import { createServer, IncomingMessage } from 'http'\nimport * as process from 'process'\nimport { InertiaAppResponse, Page } 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"],
5
+ "mappings": "AAAA,OAAS,gBAAAA,MAAqC,OAC9C,UAAYC,MAAa,UAMzB,IAAMC,EAAoEC,GACxE,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC/B,IAAIC,EAAO,GACXH,EAAS,GAAG,OAASI,GAAWD,GAAQC,CAAM,EAC9CJ,EAAS,GAAG,MAAO,IAAMC,EAAQE,CAAI,CAAC,EACtCH,EAAS,GAAG,QAAUK,GAAQH,EAAOG,CAAG,CAAC,CAC3C,CAAC,EAEIC,EAAQ,CAACC,EAAqBC,IAAwB,CAC3D,IAAMC,EAAQD,GAAQ,MAEhBE,EAAuC,CAC3C,UAAW,UAAa,CAAE,OAAQ,KAAM,UAAW,KAAK,IAAI,CAAE,GAC9D,YAAa,IAAc,OAAK,EAChC,UAAW,MAAOC,GAAYJ,EAAO,KAAK,MAAM,MAAMR,EAAiBY,CAAO,CAAC,CAAC,EAChF,OAAQ,UAAa,CAAE,OAAQ,YAAa,UAAW,KAAK,IAAI,CAAE,EACpE,EAEAd,EAAa,MAAOc,EAASC,IAAa,CACxC,IAAMC,EAAgBH,EAAeC,EAAQ,GAAG,GAAKD,EAAO,MAAM,EAElE,GAAI,CACFE,EAAS,UAAU,IAAK,CAAE,eAAgB,mBAAoB,OAAQ,gBAAiB,CAAC,EACxFA,EAAS,MAAM,KAAK,UAAU,MAAMC,EAAcF,CAAO,CAAC,CAAC,CAC7D,OAASG,EAAP,CACA,QAAQ,MAAMA,CAAC,CACjB,CAEAF,EAAS,IAAI,CACf,CAAC,EAAE,OAAOH,EAAO,IAAM,QAAQ,IAAI,6BAA6B,CAAC,EAEjE,QAAQ,IAAI,+BAA+BA,MAAU,CACvD",
6
+ "names": ["createServer", "process", "readableToString", "readable", "resolve", "reject", "data", "chunk", "err", "server_default", "render", "port", "_port", "routes", "request", "response", "dispatchRoute", "e"]
7
+ }
package/dist/server.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.create;var a=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var y=(e,t)=>{for(var n in t)a(e,n,{get:t[n],enumerable:!0})},i=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of S(t))!w.call(e,r)&&r!==n&&a(e,r,{get:()=>t[r],enumerable:!(o=d(t,r))||o.enumerable});return e};var R=(e,t,n)=>(n=e!=null?m(u(e)):{},i(t||!e||!e.__esModule?a(n,"default",{value:e,enumerable:!0}):n,e)),I=e=>i(a({},"__esModule",{value:!0}),e);var v={};y(v,{default:()=>h});module.exports=I(v);var p=require("http"),c=R(require("process"),1),f=e=>new Promise((t,n)=>{let o="";e.on("data",r=>o+=r),e.on("end",()=>t(o)),e.on("error",r=>n(r))}),h=(e,t)=>{let n=t||13714,o={"/health":async()=>({status:"OK",timestamp:Date.now()}),"/shutdown":()=>c.exit(),"/render":async r=>e(JSON.parse(await f(r))),"/404":async()=>({status:"NOT_FOUND",timestamp:Date.now()})};(0,p.createServer)(async(r,s)=>{let g=o[r.url]||o["/404"];try{s.writeHead(200,{"Content-Type":"application/json",Server:"Inertia.js SSR"}),s.write(JSON.stringify(await g(r)))}catch(l){console.error(l)}s.end()}).listen(n,()=>console.log("Inertia SSR server started.")),console.log(`Starting SSR server on port ${n}...`)};0&&(module.exports={});
2
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/server.ts"],
4
+ "sourcesContent": ["import { createServer, IncomingMessage } from 'http'\nimport * as process from 'process'\nimport { InertiaAppResponse, Page } 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"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA8C,gBAC9CC,EAAyB,wBAMnBC,EAAoEC,GACxE,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC/B,IAAIC,EAAO,GACXH,EAAS,GAAG,OAASI,GAAWD,GAAQC,CAAM,EAC9CJ,EAAS,GAAG,MAAO,IAAMC,EAAQE,CAAI,CAAC,EACtCH,EAAS,GAAG,QAAUK,GAAQH,EAAOG,CAAG,CAAC,CAC3C,CAAC,EAEIV,EAAQ,CAACW,EAAqBC,IAAwB,CAC3D,IAAMC,EAAQD,GAAQ,MAEhBE,EAAuC,CAC3C,UAAW,UAAa,CAAE,OAAQ,KAAM,UAAW,KAAK,IAAI,CAAE,GAC9D,YAAa,IAAc,OAAK,EAChC,UAAW,MAAOC,GAAYJ,EAAO,KAAK,MAAM,MAAMP,EAAiBW,CAAO,CAAC,CAAC,EAChF,OAAQ,UAAa,CAAE,OAAQ,YAAa,UAAW,KAAK,IAAI,CAAE,EACpE,KAEA,gBAAa,MAAOA,EAASC,IAAa,CACxC,IAAMC,EAAgBH,EAAeC,EAAQ,GAAG,GAAKD,EAAO,MAAM,EAElE,GAAI,CACFE,EAAS,UAAU,IAAK,CAAE,eAAgB,mBAAoB,OAAQ,gBAAiB,CAAC,EACxFA,EAAS,MAAM,KAAK,UAAU,MAAMC,EAAcF,CAAO,CAAC,CAAC,CAC7D,OAASG,EAAP,CACA,QAAQ,MAAMA,CAAC,CACjB,CAEAF,EAAS,IAAI,CACf,CAAC,EAAE,OAAOH,EAAO,IAAM,QAAQ,IAAI,6BAA6B,CAAC,EAEjE,QAAQ,IAAI,+BAA+BA,MAAU,CACvD",
6
+ "names": ["server_exports", "__export", "server_default", "__toCommonJS", "import_http", "process", "readableToString", "readable", "resolve", "reject", "data", "chunk", "err", "render", "port", "_port", "routes", "request", "response", "dispatchRoute", "e"]
7
+ }
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "inertiax-core",
3
+ "version": "1.0.15",
4
+ "license": "MIT",
5
+ "description": "A framework for creating server-driven single page apps.",
6
+ "contributors": [
7
+ "Jonathan Reinink <jonathan@reinink.ca>",
8
+ "Claudio Dekker <claudio@ubient.net>",
9
+ "Sebastian De Deyne <sebastiandedeyne@gmail.com>"
10
+ ],
11
+ "homepage": "https://inertiajs.com/",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/inertiajs/inertia.git",
15
+ "directory": "packages/inertia"
16
+ },
17
+ "bugs": {
18
+ "url": "https://github.com/inertiajs/inertia/issues"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "types"
23
+ ],
24
+ "type": "module",
25
+ "main": "dist/index.js",
26
+ "types": "types/index.d.ts",
27
+ "exports": {
28
+ ".": {
29
+ "types": "./types/index.d.ts",
30
+ "import": "./dist/index.esm.js",
31
+ "require": "./dist/index.js"
32
+ },
33
+ "./server": {
34
+ "types": "./types/server.d.ts",
35
+ "import": "./dist/server.esm.js",
36
+ "require": "./dist/server.js"
37
+ }
38
+ },
39
+ "typesVersions": {
40
+ "*": {
41
+ "server": [
42
+ "types/server.d.ts"
43
+ ]
44
+ }
45
+ },
46
+ "scripts": {
47
+ "dev": "./build.js --watch",
48
+ "build": "npm run clean && ./build.js && tsc --emitDeclarationOnly",
49
+ "clean": "rm -rf types && rm -rf dist",
50
+ "prepublishOnly": "npm run build"
51
+ },
52
+ "dependencies": {
53
+ "axios": "^1.6.0",
54
+ "deepmerge": "^4.0.0",
55
+ "nprogress": "^0.2.0",
56
+ "qs": "^6.9.0"
57
+ },
58
+ "devDependencies": {
59
+ "@types/deepmerge": "^2.2.0",
60
+ "@types/node": "^14.0",
61
+ "@types/nprogress": "^0.2.0",
62
+ "@types/qs": "^6.9.0",
63
+ "esbuild": "^0.16.13",
64
+ "esbuild-node-externals": "^1.6.0",
65
+ "typescript": "^4.9.4"
66
+ }
67
+ }
package/readme.md ADDED
@@ -0,0 +1,5 @@
1
+ # Inertia.js
2
+
3
+ Inertia.js lets you quickly build modern single-page React, Vue and Svelte apps using classic server-side routing and controllers.
4
+
5
+ Visit [inertiajs.com](https://inertiajs.com/) to learn more.
@@ -0,0 +1 @@
1
+ export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F;
@@ -0,0 +1,10 @@
1
+ import { GlobalEventTrigger } from './types';
2
+ export declare const fireBeforeEvent: GlobalEventTrigger<'before'>;
3
+ export declare const fireErrorEvent: GlobalEventTrigger<'error'>;
4
+ export declare const fireExceptionEvent: GlobalEventTrigger<'exception'>;
5
+ export declare const fireFinishEvent: GlobalEventTrigger<'finish'>;
6
+ export declare const fireInvalidEvent: GlobalEventTrigger<'invalid'>;
7
+ export declare const fireNavigateEvent: GlobalEventTrigger<'navigate'>;
8
+ export declare const fireProgressEvent: GlobalEventTrigger<'progress'>;
9
+ export declare const fireStartEvent: GlobalEventTrigger<'start'>;
10
+ export declare const fireSuccessEvent: GlobalEventTrigger<'success'>;
@@ -0,0 +1,2 @@
1
+ import { FormDataConvertible, RequestPayload } from './types';
2
+ export declare function hasFiles(data: RequestPayload | FormDataConvertible): boolean;
@@ -0,0 +1,2 @@
1
+ import { FormDataConvertible } from './types';
2
+ export declare function objectToFormData(source: Record<string, FormDataConvertible>, form?: FormData, parentKey?: string | null): FormData;
@@ -0,0 +1,7 @@
1
+ export default function createHeadManager(isServer: boolean, titleCallback: (title: string) => string, onUpdate: (elements: string[]) => void): {
2
+ forceUpdate: () => void;
3
+ createProvider: () => {
4
+ update: (elements: string[]) => void;
5
+ disconnect: () => void;
6
+ };
7
+ };
@@ -0,0 +1,8 @@
1
+ import { Router } from './router';
2
+ export { default as createHeadManager } from './head';
3
+ export { default as setupProgress } from './progress';
4
+ export { default as shouldIntercept } from './shouldIntercept';
5
+ export * from './types';
6
+ export { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url';
7
+ export { type Router };
8
+ export declare const router: Router;
@@ -0,0 +1,8 @@
1
+ declare const _default: {
2
+ modal: null;
3
+ listener: null;
4
+ show(html: Record<string, unknown> | string): void;
5
+ hide(): void;
6
+ hideOnEscape(event: KeyboardEvent): void;
7
+ };
8
+ export default _default;
@@ -0,0 +1,6 @@
1
+ export default function setupProgress({ delay, color, includeCSS, showSpinner, }?: {
2
+ delay?: number | undefined;
3
+ color?: string | undefined;
4
+ includeCSS?: boolean | undefined;
5
+ showSpinner?: boolean | undefined;
6
+ }): void;
@@ -0,0 +1,61 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { ActiveVisit, GlobalEvent, GlobalEventNames, GlobalEventResult, LocationVisit, Page, PageHandler, PageResolver, PreserveStateOption, RequestPayload, VisitId, VisitOptions } from './types';
3
+ export declare class Router {
4
+ protected page: Page;
5
+ protected resolveComponent: PageResolver;
6
+ protected swapComponent: PageHandler;
7
+ protected navigationType?: string;
8
+ protected activeVisit?: ActiveVisit;
9
+ protected visitId: VisitId;
10
+ init({ initialPage, resolveComponent, swapComponent, }: {
11
+ initialPage: Page;
12
+ resolveComponent: PageResolver;
13
+ swapComponent: PageHandler;
14
+ }): void;
15
+ protected setNavigationType(): void;
16
+ protected clearRememberedStateOnReload(): void;
17
+ protected handleInitialPageVisit(page: Page): void;
18
+ protected setupEventListeners(): void;
19
+ protected scrollRegions(): NodeListOf<Element>;
20
+ protected handleScrollEvent(event: Event): void;
21
+ protected saveScrollPositions(): void;
22
+ protected resetScrollPositions(): void;
23
+ protected restoreScrollPositions(): void;
24
+ protected isBackForwardVisit(): boolean;
25
+ protected handleBackForwardVisit(page: Page): void;
26
+ protected locationVisit(url: URL, preserveScroll: LocationVisit['preserveScroll']): boolean | void;
27
+ protected isLocationVisit(): boolean;
28
+ protected handleLocationVisit(page: Page): void;
29
+ protected isLocationVisitResponse(response: AxiosResponse): boolean;
30
+ protected isInertiaResponse(response: AxiosResponse): boolean;
31
+ protected createVisitId(): VisitId;
32
+ protected cancelVisit(activeVisit: ActiveVisit, { cancelled, interrupted }: {
33
+ cancelled?: boolean;
34
+ interrupted?: boolean;
35
+ }): void;
36
+ protected finishVisit(visit: ActiveVisit): void;
37
+ protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean | string;
38
+ cancel(): void;
39
+ visit(href: string | URL, { method, data, replace, preserveScroll, preserveState, preserveURL, only, headers, errorBag, forceFormData, target, onCancelToken, onBefore, onStart, onProgress, onFinish, onCancel, onSuccess, onError, transformProps, queryStringArrayFormat, }?: VisitOptions): void;
40
+ protected setPage(page: Page, { visitId, replace, preserveURL, preserveScroll, preserveState, target, }?: {
41
+ visitId?: VisitId;
42
+ replace?: boolean;
43
+ preserveURL?: boolean;
44
+ preserveScroll?: PreserveStateOption;
45
+ preserveState?: PreserveStateOption;
46
+ target?: string | null;
47
+ }): Promise<Page>;
48
+ protected pushState(page: Page): void;
49
+ protected replaceState(page: Page): void;
50
+ protected handlePopstateEvent(event: PopStateEvent): void;
51
+ get(url: URL | string, data?: RequestPayload, options?: Exclude<VisitOptions, 'method' | 'data'>): void;
52
+ reload(options?: Exclude<VisitOptions, 'preserveScroll' | 'preserveState'>): void;
53
+ replace(url: URL | string, options?: Exclude<VisitOptions, 'replace'>): void;
54
+ post(url: URL | string, data?: RequestPayload, options?: Exclude<VisitOptions, 'method' | 'data'>): void;
55
+ put(url: URL | string, data?: RequestPayload, options?: Exclude<VisitOptions, 'method' | 'data'>): void;
56
+ patch(url: URL | string, data?: RequestPayload, options?: Exclude<VisitOptions, 'method' | 'data'>): void;
57
+ delete(url: URL | string, options?: Exclude<VisitOptions, 'method'>): void;
58
+ remember(data: unknown, key?: string): void;
59
+ restore(key?: string): unknown;
60
+ on<TEventName extends GlobalEventNames>(type: TEventName, callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>): VoidFunction;
61
+ }
@@ -0,0 +1,4 @@
1
+ import { InertiaAppResponse, Page } from './types';
2
+ type AppCallback = (page: Page) => InertiaAppResponse;
3
+ declare const _default: (render: AppCallback, port?: number) => void;
4
+ export default _default;
@@ -0,0 +1 @@
1
+ export default function shouldIntercept(event: KeyboardEvent): boolean;
@@ -0,0 +1,177 @@
1
+ import { AxiosProgressEvent, AxiosResponse } from 'axios';
2
+ declare module 'axios' {
3
+ interface AxiosProgressEvent {
4
+ percentage: number | undefined;
5
+ }
6
+ }
7
+ export type Errors = Record<string, string>;
8
+ export type ErrorBag = Record<string, Errors>;
9
+ export type FormDataConvertible = Array<FormDataConvertible> | {
10
+ [key: string]: FormDataConvertible;
11
+ } | Blob | FormDataEntryValue | Date | boolean | number | null | undefined;
12
+ export type Method = 'get' | 'post' | 'put' | 'patch' | 'delete';
13
+ export type RequestPayload = Record<string, FormDataConvertible> | FormData;
14
+ export interface PageProps {
15
+ [key: string]: unknown;
16
+ }
17
+ export interface Page<SharedProps extends PageProps = PageProps> {
18
+ component: string;
19
+ props: PageProps & SharedProps & {
20
+ errors: Errors & ErrorBag;
21
+ };
22
+ url: string;
23
+ target?: string | null;
24
+ version: string | null;
25
+ /** @internal */
26
+ scrollRegions: Array<{
27
+ top: number;
28
+ left: number;
29
+ }>;
30
+ /** @internal */
31
+ rememberedState: Record<string, unknown>;
32
+ }
33
+ export type PageResolver = (name: string) => Component;
34
+ export type PageHandler = ({ component, page, preserveState, }: {
35
+ component: Component;
36
+ page: Page;
37
+ preserveState: PreserveStateOption;
38
+ }) => Promise<unknown>;
39
+ export type PreserveStateOption = boolean | string | ((page: Page) => boolean);
40
+ export type Progress = AxiosProgressEvent;
41
+ export type LocationVisit = {
42
+ preserveScroll: boolean;
43
+ };
44
+ export type Visit = {
45
+ method: Method;
46
+ data: RequestPayload;
47
+ replace: boolean;
48
+ preserveURL: boolean;
49
+ preserveScroll: PreserveStateOption;
50
+ preserveState: PreserveStateOption;
51
+ transformProps: (props: PageProps) => void;
52
+ only: Array<string>;
53
+ headers: Record<string, string>;
54
+ errorBag: string | null;
55
+ forceFormData: boolean;
56
+ target: string | null;
57
+ queryStringArrayFormat: 'indices' | 'brackets';
58
+ };
59
+ export type GlobalEventsMap = {
60
+ before: {
61
+ parameters: [PendingVisit];
62
+ details: {
63
+ visit: PendingVisit;
64
+ };
65
+ result: boolean | void;
66
+ };
67
+ start: {
68
+ parameters: [PendingVisit];
69
+ details: {
70
+ visit: PendingVisit;
71
+ };
72
+ result: void;
73
+ };
74
+ progress: {
75
+ parameters: [Progress | undefined];
76
+ details: {
77
+ progress: Progress | undefined;
78
+ };
79
+ result: void;
80
+ };
81
+ finish: {
82
+ parameters: [ActiveVisit];
83
+ details: {
84
+ visit: ActiveVisit;
85
+ };
86
+ result: void;
87
+ };
88
+ cancel: {
89
+ parameters: [];
90
+ details: {};
91
+ result: void;
92
+ };
93
+ navigate: {
94
+ parameters: [Page];
95
+ details: {
96
+ page: Page;
97
+ };
98
+ result: void;
99
+ };
100
+ success: {
101
+ parameters: [Page];
102
+ details: {
103
+ page: Page;
104
+ };
105
+ result: void;
106
+ };
107
+ error: {
108
+ parameters: [Errors];
109
+ details: {
110
+ errors: Errors;
111
+ };
112
+ result: void;
113
+ };
114
+ invalid: {
115
+ parameters: [AxiosResponse];
116
+ details: {
117
+ response: AxiosResponse;
118
+ };
119
+ result: boolean | void;
120
+ };
121
+ exception: {
122
+ parameters: [Error];
123
+ details: {
124
+ exception: Error;
125
+ };
126
+ result: boolean | void;
127
+ };
128
+ };
129
+ export type GlobalEventNames = keyof GlobalEventsMap;
130
+ export type GlobalEvent<TEventName extends GlobalEventNames> = CustomEvent<GlobalEventDetails<TEventName>>;
131
+ export type GlobalEventParameters<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['parameters'];
132
+ export type GlobalEventResult<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['result'];
133
+ export type GlobalEventDetails<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['details'];
134
+ export type GlobalEventTrigger<TEventName extends GlobalEventNames> = (...params: GlobalEventParameters<TEventName>) => GlobalEventResult<TEventName>;
135
+ export type GlobalEventCallback<TEventName extends GlobalEventNames> = (...params: GlobalEventParameters<TEventName>) => GlobalEventResult<TEventName>;
136
+ export type VisitOptions = Partial<Visit & {
137
+ onCancelToken: {
138
+ ({ cancel }: {
139
+ cancel: VoidFunction;
140
+ }): void;
141
+ };
142
+ onBefore: GlobalEventCallback<'before'>;
143
+ onStart: GlobalEventCallback<'start'>;
144
+ onProgress: GlobalEventCallback<'progress'>;
145
+ onFinish: GlobalEventCallback<'finish'>;
146
+ onCancel: GlobalEventCallback<'cancel'>;
147
+ onSuccess: GlobalEventCallback<'success'>;
148
+ onError: GlobalEventCallback<'error'>;
149
+ }>;
150
+ export type PendingVisit = Visit & {
151
+ url: URL;
152
+ completed: boolean;
153
+ cancelled: boolean;
154
+ interrupted: boolean;
155
+ };
156
+ export type ActiveVisit = PendingVisit & Required<VisitOptions> & {
157
+ cancelToken: AbortController;
158
+ };
159
+ export type VisitId = unknown;
160
+ export type Component = unknown;
161
+ export type InertiaAppResponse = Promise<{
162
+ head: string[];
163
+ body: string;
164
+ } | void>;
165
+ declare global {
166
+ interface DocumentEventMap {
167
+ 'inertia:before': GlobalEvent<'before'>;
168
+ 'inertia:start': GlobalEvent<'start'>;
169
+ 'inertia:progress': GlobalEvent<'progress'>;
170
+ 'inertia:success': GlobalEvent<'success'>;
171
+ 'inertia:error': GlobalEvent<'error'>;
172
+ 'inertia:invalid': GlobalEvent<'invalid'>;
173
+ 'inertia:exception': GlobalEvent<'exception'>;
174
+ 'inertia:finish': GlobalEvent<'finish'>;
175
+ 'inertia:navigate': GlobalEvent<'navigate'>;
176
+ }
177
+ }
package/types/url.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { FormDataConvertible, Method } from './types';
2
+ export declare function hrefToUrl(href: string | URL): URL;
3
+ export declare function mergeDataIntoQueryString(method: Method, href: URL | string, data: Record<string, FormDataConvertible>, qsArrayFormat?: 'indices' | 'brackets'): [string, Record<string, FormDataConvertible>];
4
+ export declare function urlWithoutHash(url: URL | Location): URL;