@inertiajs/core 1.0.0-beta.1

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,2 @@
1
+ import e from"axios";import{stringify as t,parse as n}from"qs";import i from"deepmerge";import r from"nprogress";function o(){return(o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}var s,a={modal:null,listener:null,show:function(e){var t=this;"object"==typeof e&&(e="All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>"+JSON.stringify(e));var n=document.createElement("html");n.innerHTML=e,n.querySelectorAll("a").forEach(function(e){return e.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",function(){return t.hide()});var 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(n.outerHTML),i.contentWindow.document.close(),this.listener=this.hideOnEscape.bind(this),document.addEventListener("keydown",this.listener)},hide:function(){this.modal.outerHTML="",this.modal=null,document.body.style.overflow="visible",document.removeEventListener("keydown",this.listener)},hideOnEscape:function(e){27===e.keyCode&&this.hide()}};function l(e,t){var n;return function(){var i=arguments,r=this;clearTimeout(n),n=setTimeout(function(){return e.apply(r,[].slice.call(i))},t)}}function c(e,t,n){for(var i in void 0===t&&(t=new FormData),void 0===n&&(n=null),e=e||{})Object.prototype.hasOwnProperty.call(e,i)&&u(t,d(n,i),e[i]);return t}function d(e,t){return e?e+"["+t+"]":t}function u(e,t,n){return Array.isArray(n)?Array.from(n.keys()).forEach(function(i){return u(e,d(t,i.toString()),n[i])}):n instanceof Date?e.append(t,n.toISOString()):n instanceof File?e.append(t,n,n.name):n instanceof Blob?e.append(t,n):"boolean"==typeof n?e.append(t,n?"1":"0"):"string"==typeof n?e.append(t,n):"number"==typeof n?e.append(t,""+n):null==n?e.append(t,""):void c(n,e,t)}function p(e){return new URL(e.toString(),window.location.toString())}function h(e,r,o,a){void 0===a&&(a="brackets");var l=/^https?:\/\//.test(r.toString()),c=l||r.toString().startsWith("/"),d=!c&&!r.toString().startsWith("#")&&!r.toString().startsWith("?"),u=r.toString().includes("?")||e===s.GET&&Object.keys(o).length,p=r.toString().includes("#"),h=new URL(r.toString(),"http://localhost");return e===s.GET&&Object.keys(o).length&&(h.search=t(i(n(h.search,{ignoreQueryPrefix:!0}),o),{encodeValuesOnly:!0,arrayFormat:a}),o={}),[[l?h.protocol+"//"+h.host:"",c?h.pathname:"",d?h.pathname.substring(1):"",u?h.search:"",p?h.hash:""].join(""),o]}function f(e){return(e=new URL(e.href)).hash="",e}function v(e,t){return document.dispatchEvent(new CustomEvent("inertia:"+e,t))}!function(e){e.GET="get",e.POST="post",e.PUT="put",e.PATCH="patch",e.DELETE="delete"}(s||(s={}));var m=function(e){return v("finish",{detail:{visit:e}})},g=function(e){return v("navigate",{detail:{page:e}})},w="undefined"==typeof window,y=function(){function t(){this.visitId=null}var n=t.prototype;return n.init=function(e){var t=e.resolveComponent,n=e.swapComponent;this.page=e.initialPage,this.resolveComponent=t,this.swapComponent=n,this.setNavigationType(),this.clearRememberedStateOnReload(),this.isBackForwardVisit()?this.handleBackForwardVisit(this.page):this.isLocationVisit()?this.handleLocationVisit(this.page):this.handleInitialPageVisit(this.page),this.setupEventListeners()},n.setNavigationType=function(){this.navigationType=window.performance&&window.performance.getEntriesByType("navigation").length>0?window.performance.getEntriesByType("navigation")[0].type:"navigate"},n.clearRememberedStateOnReload=function(){var e;"reload"===this.navigationType&&null!=(e=window.history.state)&&e.rememberedState&&delete window.history.state.rememberedState},n.handleInitialPageVisit=function(e){this.page.url+=window.location.hash,this.setPage(e,{preserveState:!0}).then(function(){return g(e)})},n.setupEventListeners=function(){window.addEventListener("popstate",this.handlePopstateEvent.bind(this)),document.addEventListener("scroll",l(this.handleScrollEvent.bind(this),100),!0)},n.scrollRegions=function(){return document.querySelectorAll("[scroll-region]")},n.handleScrollEvent=function(e){"function"==typeof e.target.hasAttribute&&e.target.hasAttribute("scroll-region")&&this.saveScrollPositions()},n.saveScrollPositions=function(){this.replaceState(o({},this.page,{scrollRegions:Array.from(this.scrollRegions()).map(function(e){return{top:e.scrollTop,left:e.scrollLeft}})}))},n.resetScrollPositions=function(){var e;window.scrollTo(0,0),this.scrollRegions().forEach(function(e){"function"==typeof e.scrollTo?e.scrollTo(0,0):(e.scrollTop=0,e.scrollLeft=0)}),this.saveScrollPositions(),window.location.hash&&(null==(e=document.getElementById(window.location.hash.slice(1)))||e.scrollIntoView())},n.restoreScrollPositions=function(){var e=this;this.page.scrollRegions&&this.scrollRegions().forEach(function(t,n){var i=e.page.scrollRegions[n];i&&("function"==typeof t.scrollTo?t.scrollTo(i.left,i.top):(t.scrollTop=i.top,t.scrollLeft=i.left))})},n.isBackForwardVisit=function(){return window.history.state&&"back_forward"===this.navigationType},n.handleBackForwardVisit=function(e){var t=this;window.history.state.version=e.version,this.setPage(window.history.state,{preserveScroll:!0,preserveState:!0}).then(function(){t.restoreScrollPositions(),g(e)})},n.locationVisit=function(e,t){try{window.sessionStorage.setItem("inertiaLocationVisit",JSON.stringify({preserveScroll:t})),window.location.href=e.href,f(window.location).href===f(e).href&&window.location.reload()}catch(e){return!1}},n.isLocationVisit=function(){try{return null!==window.sessionStorage.getItem("inertiaLocationVisit")}catch(e){return!1}},n.handleLocationVisit=function(e){var t,n,i,r,o=this,s=JSON.parse(window.sessionStorage.getItem("inertiaLocationVisit")||"");window.sessionStorage.removeItem("inertiaLocationVisit"),e.url+=window.location.hash,e.rememberedState=null!=(t=null==(n=window.history.state)?void 0:n.rememberedState)?t:{},e.scrollRegions=null!=(i=null==(r=window.history.state)?void 0:r.scrollRegions)?i:[],this.setPage(e,{preserveScroll:s.preserveScroll,preserveState:!0}).then(function(){s.preserveScroll&&o.restoreScrollPositions(),g(e)})},n.isLocationVisitResponse=function(e){return!(!e||409!==e.status||!e.headers["x-inertia-location"])},n.isInertiaResponse=function(e){return!(null==e||!e.headers["x-inertia"])},n.createVisitId=function(){return this.visitId={},this.visitId},n.cancelVisit=function(e,t){var n=t.cancelled,i=void 0!==n&&n,r=t.interrupted,o=void 0!==r&&r;!e||e.completed||e.cancelled||e.interrupted||(e.cancelToken.cancel(),e.onCancel(),e.completed=!1,e.cancelled=i,e.interrupted=o,m(e),e.onFinish(e))},n.finishVisit=function(e){e.cancelled||e.interrupted||(e.completed=!0,e.cancelled=!1,e.interrupted=!1,m(e),e.onFinish(e))},n.resolvePreserveOption=function(e,t){return"function"==typeof e?e(t):"errors"===e?Object.keys(t.props.errors||{}).length>0:e},n.visit=function(t,n){var i=this,r=void 0===n?{}:n,l=r.method,d=void 0===l?s.GET:l,u=r.data,m=void 0===u?{}:u,g=r.replace,w=void 0!==g&&g,y=r.preserveScroll,S=void 0!==y&&y,b=r.preserveState,E=void 0!==b&&b,x=r.only,T=void 0===x?[]:x,P=r.headers,V=void 0===P?{}:P,L=r.errorBag,k=void 0===L?"":L,I=r.forceFormData,O=void 0!==I&&I,C=r.onCancelToken,R=void 0===C?function(){}:C,A=r.onBefore,F=void 0===A?function(){}:A,j=r.onStart,M=void 0===j?function(){}:j,D=r.onProgress,N=void 0===D?function(){}:D,B=r.onFinish,q=void 0===B?function(){}:B,H=r.onCancel,W=void 0===H?function(){}:H,G=r.onSuccess,U=void 0===G?function(){}:G,X=r.onError,z=void 0===X?function(){}:X,J=r.queryStringArrayFormat,K=void 0===J?"brackets":J,_="string"==typeof t?p(t):t;if(!function e(t){return t instanceof File||t instanceof Blob||t instanceof FileList&&t.length>0||t instanceof FormData&&Array.from(t.values()).some(function(t){return e(t)})||"object"==typeof t&&null!==t&&Object.values(t).some(function(t){return e(t)})}(m)&&!O||m instanceof FormData||(m=c(m)),!(m instanceof FormData)){var Q=h(d,_,m,K),Y=Q[1];_=p(Q[0]),m=Y}var Z={url:_,method:d,data:m,replace:w,preserveScroll:S,preserveState:E,only:T,headers:V,errorBag:k,forceFormData:O,queryStringArrayFormat:K,cancelled:!1,completed:!1,interrupted:!1};if(!1!==F(Z)&&function(e){return v("before",{cancelable:!0,detail:{visit:e}})}(Z)){this.activeVisit&&this.cancelVisit(this.activeVisit,{interrupted:!0}),this.saveScrollPositions();var $=this.createVisitId();this.activeVisit=o({},Z,{onCancelToken:R,onBefore:F,onStart:M,onProgress:N,onFinish:q,onCancel:W,onSuccess:U,onError:z,queryStringArrayFormat:K,cancelToken:e.CancelToken.source()}),R({cancel:function(){i.activeVisit&&i.cancelVisit(i.activeVisit,{cancelled:!0})}}),function(e){v("start",{detail:{visit:e}})}(Z),M(Z),e({method:d,url:f(_).href,data:d===s.GET?{}:m,params:d===s.GET?m:{},cancelToken:this.activeVisit.cancelToken.token,headers:o({},V,{Accept:"text/html, application/xhtml+xml","X-Requested-With":"XMLHttpRequest","X-Inertia":!0},T.length?{"X-Inertia-Partial-Component":this.page.component,"X-Inertia-Partial-Data":T.join(",")}:{},k&&k.length?{"X-Inertia-Error-Bag":k}:{},this.page.version?{"X-Inertia-Version":this.page.version}:{}),onUploadProgress:function(e){m instanceof FormData&&(e.percentage=Math.round(e.loaded/e.total*100),function(e){v("progress",{detail:{progress:e}})}(e),N(e))}}).then(function(e){var t;if(!i.isInertiaResponse(e))return Promise.reject({response:e});var n=e.data;T.length&&n.component===i.page.component&&(n.props=o({},i.page.props,n.props)),S=i.resolvePreserveOption(S,n),(E=i.resolvePreserveOption(E,n))&&null!=(t=window.history.state)&&t.rememberedState&&n.component===i.page.component&&(n.rememberedState=window.history.state.rememberedState);var r=_,s=p(n.url);return r.hash&&!s.hash&&f(r).href===s.href&&(s.hash=r.hash,n.url=s.href),i.setPage(n,{visitId:$,replace:w,preserveScroll:S,preserveState:E})}).then(function(){var e=i.page.props.errors||{};if(Object.keys(e).length>0){var t=k?e[k]?e[k]:{}:e;return function(e){v("error",{detail:{errors:e}})}(t),z(t)}return v("success",{detail:{page:i.page}}),U(i.page)}).catch(function(e){if(i.isInertiaResponse(e.response))return i.setPage(e.response.data,{visitId:$});if(i.isLocationVisitResponse(e.response)){var t=p(e.response.headers["x-inertia-location"]),n=_;n.hash&&!t.hash&&f(n).href===t.href&&(t.hash=n.hash),i.locationVisit(t,!0===S)}else{if(!e.response)return Promise.reject(e);v("invalid",{cancelable:!0,detail:{response:e.response}})&&a.show(e.response.data)}}).then(function(){i.activeVisit&&i.finishVisit(i.activeVisit)}).catch(function(t){if(!e.isCancel(t)){var n=v("exception",{cancelable:!0,detail:{exception:t}});if(i.activeVisit&&i.finishVisit(i.activeVisit),n)return Promise.reject(t)}})}},n.setPage=function(e,t){var n=this,i=void 0===t?{}:t,r=i.visitId,o=void 0===r?this.createVisitId():r,s=i.replace,a=void 0!==s&&s,l=i.preserveScroll,c=void 0!==l&&l,d=i.preserveState,u=void 0!==d&&d;return Promise.resolve(this.resolveComponent(e.component)).then(function(t){o===n.visitId&&(e.scrollRegions=e.scrollRegions||[],e.rememberedState=e.rememberedState||{},(a=a||p(e.url).href===window.location.href)?n.replaceState(e):n.pushState(e),n.swapComponent({component:t,page:e,preserveState:u}).then(function(){c||n.resetScrollPositions(),a||g(e)}))})},n.pushState=function(e){this.page=e,window.history.pushState(e,"",e.url)},n.replaceState=function(e){this.page=e,window.history.replaceState(e,"",e.url)},n.handlePopstateEvent=function(e){var t=this;if(null!==e.state){var n=e.state,i=this.createVisitId();Promise.resolve(this.resolveComponent(n.component)).then(function(e){i===t.visitId&&(t.page=n,t.swapComponent({component:e,page:n,preserveState:!1}).then(function(){t.restoreScrollPositions(),g(n)}))})}else{var r=p(this.page.url);r.hash=window.location.hash,this.replaceState(o({},this.page,{url:r.href})),this.resetScrollPositions()}},n.get=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),this.visit(e,o({},n,{method:s.GET,data:t}))},n.reload=function(e){return void 0===e&&(e={}),this.visit(window.location.href,o({},e,{preserveScroll:!0,preserveState:!0}))},n.replace=function(e,t){var n;return void 0===t&&(t={}),console.warn("Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia."+(null!=(n=t.method)?n:"get")+"() instead."),this.visit(e,o({preserveState:!0},t,{replace:!0}))},n.post=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),this.visit(e,o({preserveState:!0},n,{method:s.POST,data:t}))},n.put=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),this.visit(e,o({preserveState:!0},n,{method:s.PUT,data:t}))},n.patch=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),this.visit(e,o({preserveState:!0},n,{method:s.PATCH,data:t}))},n.delete=function(e,t){return void 0===t&&(t={}),this.visit(e,o({preserveState:!0},t,{method:s.DELETE}))},n.remember=function(e,t){var n,i;void 0===t&&(t="default"),w||this.replaceState(o({},this.page,{rememberedState:o({},null==(n=this.page)?void 0:n.rememberedState,(i={},i[t]=e,i))}))},n.restore=function(e){var t,n;if(void 0===e&&(e="default"),!w)return null==(t=window.history.state)||null==(n=t.rememberedState)?void 0:n[e]},n.on=function(e,t){var n=function(e){var n=t(e);e.cancelable&&!e.defaultPrevented&&!1===n&&e.preventDefault()};return document.addEventListener("inertia:"+e,n),function(){return document.removeEventListener("inertia:"+e,n)}},t}(),S=null;function b(e){document.addEventListener("inertia:start",E.bind(null,e)),document.addEventListener("inertia:progress",x),document.addEventListener("inertia:finish",T)}function E(e){S=setTimeout(function(){return r.start()},e)}function x(e){var t;r.isStarted()&&null!=(t=e.detail.progress)&&t.percentage&&r.set(Math.max(r.status,e.detail.progress.percentage/100*.9))}function T(e){clearTimeout(S),r.isStarted()&&(e.detail.visit.completed?r.done():e.detail.visit.interrupted?r.set(0):e.detail.visit.cancelled&&(r.done(),r.remove()))}function P(e){var t=void 0===e?{}:e,n=t.delay,i=t.color,o=void 0===i?"#29d":i,s=t.includeCSS,a=void 0===s||s,l=t.showSpinner,c=void 0!==l&&l;b(void 0===n?250:n),r.configure({showSpinner:c}),a&&function(e){var t=document.createElement("style");t.type="text/css",t.textContent="\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: "+e+";\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 "+e+", 0 0 5px "+e+";\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: "+e+";\n border-left-color: "+e+";\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 ",document.head.appendChild(t)}(o)}var V={buildDOMElement:function(e){var t=document.createElement("template");t.innerHTML=e;var n=t.content.firstChild;if(!e.startsWith("<script "))return n;var i=document.createElement("script");return i.innerHTML=n.innerHTML,n.getAttributeNames().forEach(function(e){i.setAttribute(e,n.getAttribute(e)||"")}),i},isInertiaManagedElement:function(e){return e.nodeType===Node.ELEMENT_NODE&&null!==e.getAttribute("inertia")},findMatchingElementIndex:function(e,t){var n=e.getAttribute("inertia");return null!==n?t.findIndex(function(e){return e.getAttribute("inertia")===n}):-1},update:l(function(e){var t=this,n=e.map(function(e){return t.buildDOMElement(e)});Array.from(document.head.childNodes).filter(function(e){return t.isInertiaManagedElement(e)}).forEach(function(e){var i=t.findMatchingElementIndex(e,n);if(-1!==i){var r,o=n.splice(i,1)[0];o&&!e.isEqualNode(o)&&(null==e||null==(r=e.parentNode)||r.replaceChild(o,e))}else{var s;null==e||null==(s=e.parentNode)||s.removeChild(e)}}),n.forEach(function(e){return document.head.appendChild(e)})},1)};function L(e,t,n){var i={},r=0;function s(){var e=t(""),n=o({},e?{title:'<title inertia="">'+e+"</title>"}:{}),r=Object.values(i).reduce(function(e,t){return e.concat(t)},[]).reduce(function(e,n){if(-1===n.indexOf("<"))return e;if(0===n.indexOf("<title ")){var i=n.match(/(<title [^>]+>)(.*?)(<\/title>)/);return e.title=i?""+i[1]+t(i[2])+i[3]:n,e}var r=n.match(/ inertia="[^"]+"/);return r?e[r[0]]=n:e[Object.keys(e).length]=n,e},n);return Object.values(r)}function a(){e?n(s()):V.update(s())}return a(),{forceUpdate:a,createProvider:function(){var e=function(){var e=r+=1;return i[e]=[],e.toString()}();return{update:function(t){return function(e,t){void 0===t&&(t=[]),null!==e&&Object.keys(i).indexOf(e)>-1&&(i[e]=t),a()}(e,t)},disconnect:function(){return function(e){null!==e&&-1!==Object.keys(i).indexOf(e)&&(delete i[e],a())}(e)}}}}}function k(e){var t="a"===e.currentTarget.tagName.toLowerCase();return!(e.target&&null!=e&&e.target.isContentEditable||e.defaultPrevented||t&&e.which>1||t&&e.altKey||t&&e.ctrlKey||t&&e.metaKey||t&&e.shiftKey)}var I=new y;export{s as Method,L as createHeadManager,p as hrefToUrl,h as mergeDataIntoQueryString,I as router,P as setupProgress,k as shouldIntercept,f as urlWithoutHash};
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/modal.ts","../src/debounce.ts","../src/formData.ts","../src/url.ts","../src/events.ts","../src/types.ts","../src/router.ts","../src/files.ts","../src/progress.ts","../src/head.ts","../src/shouldIntercept.ts","../src/index.ts"],"sourcesContent":["export default {\n modal: null,\n listener: null,\n\n show(html: Record<string, unknown> | string): void {\n if (typeof html === 'object') {\n html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(\n html,\n )}`\n }\n\n const page = document.createElement('html')\n page.innerHTML = html\n page.querySelectorAll('a').forEach((a) => a.setAttribute('target', '_top'))\n\n this.modal = document.createElement('div')\n this.modal.style.position = 'fixed'\n this.modal.style.width = '100vw'\n this.modal.style.height = '100vh'\n this.modal.style.padding = '50px'\n this.modal.style.boxSizing = 'border-box'\n this.modal.style.backgroundColor = 'rgba(0, 0, 0, .6)'\n this.modal.style.zIndex = 200000\n this.modal.addEventListener('click', () => this.hide())\n\n const iframe = document.createElement('iframe')\n iframe.style.backgroundColor = 'white'\n iframe.style.borderRadius = '5px'\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n this.modal.appendChild(iframe)\n\n document.body.prepend(this.modal)\n document.body.style.overflow = 'hidden'\n if (!iframe.contentWindow) {\n throw new Error('iframe not yet ready.')\n }\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n\n this.listener = this.hideOnEscape.bind(this)\n document.addEventListener('keydown', this.listener)\n },\n\n hide(): void {\n this.modal.outerHTML = ''\n this.modal = null\n document.body.style.overflow = 'visible'\n document.removeEventListener('keydown', this.listener)\n },\n\n hideOnEscape(event: KeyboardEvent): void {\n if (event.keyCode === 27) {\n this.hide()\n }\n },\n}\n","export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F {\n let timeoutID: NodeJS.Timeout\n return function (...args: unknown[]) {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(() => fn.apply(this, args), delay)\n } as F\n}\n","import { FormDataConvertible } from './types'\n\nexport function objectToFormData(\n source: Record<string, FormDataConvertible>,\n form: FormData = new FormData(),\n parentKey: string | null = null,\n): FormData {\n source = source || {}\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n append(form, composeKey(parentKey, key), source[key])\n }\n }\n\n return form\n}\n\nfunction composeKey(parent: string | null, key: string): string {\n return parent ? parent + '[' + key + ']' : key\n}\n\nfunction append(form: FormData, key: string, value: FormDataConvertible): void {\n if (Array.isArray(value)) {\n return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]))\n } else if (value instanceof Date) {\n return form.append(key, value.toISOString())\n } else if (value instanceof File) {\n return form.append(key, value, value.name)\n } else if (value instanceof Blob) {\n return form.append(key, value)\n } else if (typeof value === 'boolean') {\n return form.append(key, value ? '1' : '0')\n } else if (typeof value === 'string') {\n return form.append(key, value)\n } else if (typeof value === 'number') {\n return form.append(key, `${value}`)\n } else if (value === null || value === undefined) {\n return form.append(key, '')\n }\n\n objectToFormData(value, form, key)\n}\n","import * as qs from 'qs'\nimport deepmerge from 'deepmerge'\nimport { FormDataConvertible, Method } from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), window.location.toString())\n}\n\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === Method.GET && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === Method.GET && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n","import { GlobalEventDetails, GlobalEventNames, GlobalEventTrigger } from './types'\n\nfunction fireEvent<TEventName extends GlobalEventNames>(\n name: TEventName,\n options: CustomEventInit<GlobalEventDetails<TEventName>>,\n): boolean {\n return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options))\n}\n\nexport const fireBeforeEvent: GlobalEventTrigger<'before'> = (visit) => {\n return fireEvent('before', { cancelable: true, detail: { visit } })\n}\n\nexport const fireErrorEvent: GlobalEventTrigger<'error'> = (errors) => {\n return fireEvent('error', { detail: { errors } })\n}\n\nexport const fireExceptionEvent: GlobalEventTrigger<'exception'> = (exception) => {\n return fireEvent('exception', { cancelable: true, detail: { exception } })\n}\n\nexport const fireFinishEvent: GlobalEventTrigger<'finish'> = (visit) => {\n return fireEvent('finish', { detail: { visit } })\n}\n\nexport const fireInvalidEvent: GlobalEventTrigger<'invalid'> = (response) => {\n return fireEvent('invalid', { cancelable: true, detail: { response } })\n}\n\nexport const fireNavigateEvent: GlobalEventTrigger<'navigate'> = (page) => {\n return fireEvent('navigate', { detail: { page } })\n}\n\nexport const fireProgressEvent: GlobalEventTrigger<'progress'> = (progress) => {\n return fireEvent('progress', { detail: { progress } })\n}\n\nexport const fireStartEvent: GlobalEventTrigger<'start'> = (visit) => {\n return fireEvent('start', { detail: { visit } })\n}\n\nexport const fireSuccessEvent: GlobalEventTrigger<'success'> = (page) => {\n return fireEvent('success', { detail: { page } })\n}\n","import { AxiosResponse, CancelTokenSource } from 'axios'\n\nexport type Errors = Record<string, string>\nexport type ErrorBag = Record<string, Errors>\n\nexport type FormDataConvertible =\n | Array<FormDataConvertible>\n | Blob\n | FormDataEntryValue\n | Date\n | boolean\n | number\n | null\n | undefined\n\nexport enum Method {\n GET = 'get',\n POST = 'post',\n PUT = 'put',\n PATCH = 'patch',\n DELETE = 'delete',\n}\n\nexport type RequestPayload = Record<string, FormDataConvertible> | FormData\n\nexport interface PageProps {\n [key: string]: unknown\n}\n\nexport interface Page<SharedProps = PageProps> {\n component: string\n props: PageProps &\n SharedProps & {\n errors: Errors & ErrorBag\n }\n url: string\n version: string | null\n\n // Refactor away\n scrollRegions: Array<{ top: number; left: number }>\n rememberedState: Record<string, unknown>\n resolvedErrors: Errors\n}\n\nexport type PageResolver = (name: string) => Component\n\nexport type PageHandler = ({\n component,\n page,\n preserveState,\n}: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n}) => Promise<unknown>\n\nexport type PreserveStateOption = boolean | string | ((page: Page) => boolean)\n\nexport type Progress = ProgressEvent & { percentage: number }\n\nexport type LocationVisit = {\n preserveScroll: boolean\n}\n\nexport type Visit = {\n method: Method\n data: RequestPayload\n replace: boolean\n preserveScroll: PreserveStateOption\n preserveState: PreserveStateOption\n only: Array<string>\n headers: Record<string, string>\n errorBag: string | null\n forceFormData: boolean\n queryStringArrayFormat: 'indices' | 'brackets'\n}\n\nexport type GlobalEventsMap = {\n before: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: boolean | void\n }\n start: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: void\n }\n progress: {\n parameters: [Progress | undefined]\n details: {\n progress: Progress | undefined\n }\n result: void\n }\n finish: {\n parameters: [ActiveVisit]\n details: {\n visit: ActiveVisit\n }\n result: void\n }\n cancel: {\n parameters: []\n details: {}\n result: void\n }\n navigate: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n success: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n error: {\n parameters: [Errors]\n details: {\n errors: Errors\n }\n result: void\n }\n invalid: {\n parameters: [AxiosResponse]\n details: {\n response: AxiosResponse\n }\n result: boolean | void\n }\n exception: {\n parameters: [Error]\n details: {\n exception: Error\n }\n result: boolean | void\n }\n}\n\nexport type GlobalEventNames = keyof GlobalEventsMap\n\nexport type GlobalEvent<TEventName extends GlobalEventNames> = CustomEvent<GlobalEventDetails<TEventName>>\n\nexport type GlobalEventParameters<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['parameters']\n\nexport type GlobalEventResult<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['result']\n\nexport type GlobalEventDetails<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['details']\n\nexport type GlobalEventTrigger<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type GlobalEventCallback<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type VisitOptions = Partial<\n Visit & {\n onCancelToken: { ({ cancel }: { cancel: VoidFunction }): void }\n onBefore: GlobalEventCallback<'before'>\n onStart: GlobalEventCallback<'start'>\n onProgress: GlobalEventCallback<'progress'>\n onFinish: GlobalEventCallback<'finish'>\n onCancel: GlobalEventCallback<'cancel'>\n onSuccess: GlobalEventCallback<'success'>\n onError: GlobalEventCallback<'error'>\n }\n>\n\nexport type PendingVisit = Visit & {\n url: URL\n completed: boolean\n cancelled: boolean\n interrupted: boolean\n}\n\nexport type ActiveVisit = PendingVisit &\n Required<VisitOptions> & {\n cancelToken: CancelTokenSource\n }\n\nexport type VisitId = unknown\nexport type Component = unknown\n\nexport type InertiaAppResponse = Promise<{ head: string[]; body: string } | void>\n\ndeclare global {\n interface DocumentEventMap {\n 'inertia:before': GlobalEvent<'before'>\n 'inertia:start': GlobalEvent<'start'>\n 'inertia:progress': GlobalEvent<'progress'>\n 'inertia:success': GlobalEvent<'success'>\n 'inertia:error': GlobalEvent<'error'>\n 'inertia:invalid': GlobalEvent<'invalid'>\n 'inertia:exception': GlobalEvent<'exception'>\n 'inertia:finish': GlobalEvent<'finish'>\n 'inertia:navigate': GlobalEvent<'navigate'>\n }\n}\n","import modal from './modal'\nimport debounce from './debounce'\nimport { hasFiles } from './files'\nimport { objectToFormData } from './formData'\nimport { default as Axios, AxiosResponse } from 'axios'\nimport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nimport {\n ActiveVisit,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n LocationVisit,\n Method,\n Page,\n PageHandler,\n PageResolver,\n PendingVisit,\n PreserveStateOption,\n RequestPayload,\n VisitId,\n VisitOptions,\n} from './types'\nimport {\n fireBeforeEvent,\n fireErrorEvent,\n fireExceptionEvent,\n fireFinishEvent,\n fireInvalidEvent,\n fireNavigateEvent,\n fireProgressEvent,\n fireStartEvent,\n fireSuccessEvent,\n} from './events'\n\nconst isServer = typeof window === 'undefined'\n\nexport class Router {\n protected page!: Page\n protected resolveComponent!: PageResolver\n protected swapComponent!: PageHandler\n protected navigationType?: string\n protected activeVisit?: ActiveVisit\n protected visitId: VisitId = null\n\n public init({\n initialPage,\n resolveComponent,\n swapComponent,\n }: {\n initialPage: Page\n resolveComponent: PageResolver\n swapComponent: PageHandler\n }): void {\n this.page = initialPage\n this.resolveComponent = resolveComponent\n this.swapComponent = swapComponent\n\n this.setNavigationType()\n this.clearRememberedStateOnReload()\n\n if (this.isBackForwardVisit()) {\n this.handleBackForwardVisit(this.page)\n } else if (this.isLocationVisit()) {\n this.handleLocationVisit(this.page)\n } else {\n this.handleInitialPageVisit(this.page)\n }\n\n this.setupEventListeners()\n }\n\n protected setNavigationType(): void {\n this.navigationType =\n window.performance && window.performance.getEntriesByType('navigation').length > 0\n ? (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n : 'navigate'\n }\n\n protected clearRememberedStateOnReload(): void {\n if (this.navigationType === 'reload' && window.history.state?.rememberedState) {\n delete window.history.state.rememberedState\n }\n }\n\n protected handleInitialPageVisit(page: Page): void {\n this.page.url += window.location.hash\n this.setPage(page, { preserveState: true }).then(() => fireNavigateEvent(page))\n }\n\n protected setupEventListeners(): void {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n document.addEventListener('scroll', debounce(this.handleScrollEvent.bind(this), 100), true)\n }\n\n protected scrollRegions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n protected handleScrollEvent(event: Event): void {\n if (\n typeof (event.target as Element).hasAttribute === 'function' &&\n (event.target as Element).hasAttribute('scroll-region')\n ) {\n this.saveScrollPositions()\n }\n }\n\n protected saveScrollPositions(): void {\n this.replaceState({\n ...this.page,\n scrollRegions: Array.from(this.scrollRegions()).map((region) => {\n return {\n top: region.scrollTop,\n left: region.scrollLeft,\n }\n }),\n })\n }\n\n protected resetScrollPositions(): void {\n window.scrollTo(0, 0)\n this.scrollRegions().forEach((region) => {\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(0, 0)\n } else {\n region.scrollTop = 0\n region.scrollLeft = 0\n }\n })\n this.saveScrollPositions()\n if (window.location.hash) {\n document.getElementById(window.location.hash.slice(1))?.scrollIntoView()\n }\n }\n\n protected restoreScrollPositions(): void {\n if (this.page.scrollRegions) {\n this.scrollRegions().forEach((region: Element, index: number) => {\n const scrollPosition = this.page.scrollRegions[index]\n if (!scrollPosition) {\n return\n } else if (typeof region.scrollTo === 'function') {\n region.scrollTo(scrollPosition.left, scrollPosition.top)\n } else {\n region.scrollTop = scrollPosition.top\n region.scrollLeft = scrollPosition.left\n }\n })\n }\n }\n\n protected isBackForwardVisit(): boolean {\n return window.history.state && this.navigationType === 'back_forward'\n }\n\n protected handleBackForwardVisit(page: Page): void {\n window.history.state.version = page.version\n this.setPage(window.history.state, { preserveScroll: true, preserveState: true }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n\n protected locationVisit(url: URL, preserveScroll: LocationVisit['preserveScroll']): boolean | void {\n try {\n const locationVisit: LocationVisit = { preserveScroll }\n window.sessionStorage.setItem('inertiaLocationVisit', JSON.stringify(locationVisit))\n window.location.href = url.href\n if (urlWithoutHash(window.location).href === urlWithoutHash(url).href) {\n window.location.reload()\n }\n } catch (error) {\n return false\n }\n }\n\n protected isLocationVisit(): boolean {\n try {\n return window.sessionStorage.getItem('inertiaLocationVisit') !== null\n } catch (error) {\n return false\n }\n }\n\n protected handleLocationVisit(page: Page): void {\n const locationVisit: LocationVisit = JSON.parse(window.sessionStorage.getItem('inertiaLocationVisit') || '')\n window.sessionStorage.removeItem('inertiaLocationVisit')\n page.url += window.location.hash\n page.rememberedState = window.history.state?.rememberedState ?? {}\n page.scrollRegions = window.history.state?.scrollRegions ?? []\n this.setPage(page, { preserveScroll: locationVisit.preserveScroll, preserveState: true }).then(() => {\n if (locationVisit.preserveScroll) {\n this.restoreScrollPositions()\n }\n fireNavigateEvent(page)\n })\n }\n\n protected isLocationVisitResponse(response: AxiosResponse): boolean {\n return !!(response && response.status === 409 && response.headers['x-inertia-location'])\n }\n\n protected isInertiaResponse(response: AxiosResponse): boolean {\n return !!response?.headers['x-inertia']\n }\n\n protected createVisitId(): VisitId {\n this.visitId = {}\n return this.visitId\n }\n\n protected cancelVisit(\n activeVisit: ActiveVisit,\n { cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean },\n ): void {\n if (activeVisit && !activeVisit.completed && !activeVisit.cancelled && !activeVisit.interrupted) {\n activeVisit.cancelToken.cancel()\n activeVisit.onCancel()\n activeVisit.completed = false\n activeVisit.cancelled = cancelled\n activeVisit.interrupted = interrupted\n fireFinishEvent(activeVisit)\n activeVisit.onFinish(activeVisit)\n }\n }\n\n protected finishVisit(visit: ActiveVisit): void {\n if (!visit.cancelled && !visit.interrupted) {\n visit.completed = true\n visit.cancelled = false\n visit.interrupted = false\n fireFinishEvent(visit)\n visit.onFinish(visit)\n }\n }\n\n protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean | string {\n if (typeof value === 'function') {\n return value(page)\n } else if (value === 'errors') {\n return Object.keys(page.props.errors || {}).length > 0\n } else {\n return value\n }\n }\n\n public visit(\n href: string | URL,\n {\n method = Method.GET,\n data = {},\n replace = false,\n preserveScroll = false,\n preserveState = false,\n only = [],\n headers = {},\n errorBag = '',\n forceFormData = false,\n onCancelToken = () => {},\n onBefore = () => {},\n onStart = () => {},\n onProgress = () => {},\n onFinish = () => {},\n onCancel = () => {},\n onSuccess = () => {},\n onError = () => {},\n queryStringArrayFormat = 'brackets',\n }: VisitOptions = {},\n ): void {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !(data instanceof FormData)) {\n data = objectToFormData(data)\n }\n\n if (!(data instanceof FormData)) {\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n url = hrefToUrl(_href)\n data = _data\n }\n\n const visit: PendingVisit = {\n url,\n method,\n data,\n replace,\n preserveScroll,\n preserveState,\n only,\n headers,\n errorBag,\n forceFormData,\n queryStringArrayFormat,\n cancelled: false,\n completed: false,\n interrupted: false,\n }\n\n if (onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { interrupted: true })\n }\n\n this.saveScrollPositions()\n\n const visitId = this.createVisitId()\n this.activeVisit = {\n ...visit,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess,\n onError,\n queryStringArrayFormat,\n cancelToken: Axios.CancelToken.source(),\n }\n\n onCancelToken({\n cancel: () => {\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { cancelled: true })\n }\n },\n })\n\n fireStartEvent(visit)\n onStart(visit)\n\n Axios({\n method,\n url: urlWithoutHash(url).href,\n data: method === Method.GET ? {} : data,\n params: method === Method.GET ? data : {},\n cancelToken: this.activeVisit.cancelToken.token,\n headers: {\n ...headers,\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n ...(only.length\n ? {\n 'X-Inertia-Partial-Component': this.page.component,\n 'X-Inertia-Partial-Data': only.join(','),\n }\n : {}),\n ...(errorBag && errorBag.length ? { 'X-Inertia-Error-Bag': errorBag } : {}),\n ...(this.page.version ? { 'X-Inertia-Version': this.page.version } : {}),\n },\n onUploadProgress: (progress) => {\n if (data instanceof FormData) {\n progress.percentage = Math.round((progress.loaded / progress.total) * 100)\n fireProgressEvent(progress)\n onProgress(progress)\n }\n },\n })\n .then((response) => {\n if (!this.isInertiaResponse(response)) {\n return Promise.reject({ response })\n }\n\n const pageResponse: Page = response.data\n if (only.length && pageResponse.component === this.page.component) {\n pageResponse.props = { ...this.page.props, ...pageResponse.props }\n }\n preserveScroll = this.resolvePreserveOption(preserveScroll, pageResponse) as boolean\n preserveState = this.resolvePreserveOption(preserveState, pageResponse)\n if (preserveState && window.history.state?.rememberedState && pageResponse.component === this.page.component) {\n pageResponse.rememberedState = window.history.state.rememberedState\n }\n const requestUrl = url\n const responseUrl = hrefToUrl(pageResponse.url)\n if (requestUrl.hash && !responseUrl.hash && urlWithoutHash(requestUrl).href === responseUrl.href) {\n responseUrl.hash = requestUrl.hash\n pageResponse.url = responseUrl.href\n }\n return this.setPage(pageResponse, { visitId, replace, preserveScroll, preserveState })\n })\n .then(() => {\n const errors = this.page.props.errors || {}\n if (Object.keys(errors).length > 0) {\n const scopedErrors = errorBag ? (errors[errorBag] ? errors[errorBag] : {}) : errors\n fireErrorEvent(scopedErrors)\n return onError(scopedErrors)\n }\n fireSuccessEvent(this.page)\n return onSuccess(this.page)\n })\n .catch((error) => {\n if (this.isInertiaResponse(error.response)) {\n return this.setPage(error.response.data, { visitId })\n } else if (this.isLocationVisitResponse(error.response)) {\n const locationUrl = hrefToUrl(error.response.headers['x-inertia-location'])\n const requestUrl = url\n if (requestUrl.hash && !locationUrl.hash && urlWithoutHash(requestUrl).href === locationUrl.href) {\n locationUrl.hash = requestUrl.hash\n }\n this.locationVisit(locationUrl, preserveScroll === true)\n } else if (error.response) {\n if (fireInvalidEvent(error.response)) {\n modal.show(error.response.data)\n }\n } else {\n return Promise.reject(error)\n }\n })\n .then(() => {\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n })\n .catch((error) => {\n if (!Axios.isCancel(error)) {\n const throwException = fireExceptionEvent(error)\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n if (throwException) {\n return Promise.reject(error)\n }\n }\n })\n }\n\n protected setPage(\n page: Page,\n {\n visitId = this.createVisitId(),\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: {\n visitId?: VisitId\n replace?: boolean\n preserveScroll?: PreserveStateOption\n preserveState?: PreserveStateOption\n } = {},\n ): Promise<void> {\n return Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n page.scrollRegions = page.scrollRegions || []\n page.rememberedState = page.rememberedState || {}\n replace = replace || hrefToUrl(page.url).href === window.location.href\n replace ? this.replaceState(page) : this.pushState(page)\n this.swapComponent({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n this.resetScrollPositions()\n }\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n }\n })\n }\n\n protected pushState(page: Page): void {\n this.page = page\n window.history.pushState(page, '', page.url)\n }\n\n protected replaceState(page: Page): void {\n this.page = page\n window.history.replaceState(page, '', page.url)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n if (event.state !== null) {\n const page = event.state\n const visitId = this.createVisitId()\n Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n this.page = page\n this.swapComponent({ component, page, preserveState: false }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n })\n } else {\n const url = hrefToUrl(this.page.url)\n url.hash = window.location.hash\n this.replaceState({ ...this.page, url: url.href })\n this.resetScrollPositions()\n }\n }\n\n public get(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { ...options, method: Method.GET, data })\n }\n\n public reload(options: Exclude<VisitOptions, 'preserveScroll' | 'preserveState'> = {}): void {\n return this.visit(window.location.href, { ...options, preserveScroll: true, preserveState: true })\n }\n\n public replace(url: URL | string, options: Exclude<VisitOptions, 'replace'> = {}): void {\n console.warn(\n `Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${\n options.method ?? 'get'\n }() instead.`,\n )\n return this.visit(url, { preserveState: true, ...options, replace: true })\n }\n\n public post(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.POST, data })\n }\n\n public put(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PUT, data })\n }\n\n public patch(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PATCH, data })\n }\n\n public delete(url: URL | string, options: Exclude<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.DELETE })\n }\n\n public remember(data: unknown, key = 'default'): void {\n if (isServer) {\n return\n }\n\n this.replaceState({\n ...this.page,\n rememberedState: {\n ...this.page?.rememberedState,\n [key]: data,\n },\n })\n }\n\n public restore(key = 'default'): unknown {\n if (isServer) {\n return\n }\n\n return window.history.state?.rememberedState?.[key]\n }\n\n public on<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n const listener = ((event: GlobalEvent<TEventName>) => {\n const response = callback(event)\n if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n document.addEventListener(`inertia:${type}`, listener)\n return () => document.removeEventListener(`inertia:${type}`, listener)\n }\n}\n","import { FormDataConvertible, RequestPayload } from './types'\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n data instanceof File ||\n data instanceof Blob ||\n (data instanceof FileList && data.length > 0) ||\n (data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value))) ||\n (typeof data === 'object' && data !== null && Object.values(data).some((value) => hasFiles(value)))\n )\n}\n","import { GlobalEvent } from './types'\nimport NProgress from 'nprogress'\n\nlet timeout: NodeJS.Timeout | null = null\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', start.bind(null, delay))\n document.addEventListener('inertia:progress', progress)\n document.addEventListener('inertia:finish', finish)\n}\n\nfunction start(delay: number): void {\n timeout = setTimeout(() => NProgress.start(), delay)\n}\n\nfunction progress(event: GlobalEvent<'progress'>) {\n if (NProgress.isStarted() && event.detail.progress?.percentage) {\n NProgress.set(Math.max(NProgress.status!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>) {\n clearTimeout(timeout!)\n if (!NProgress.isStarted()) {\n return\n } else if (event.detail.visit.completed) {\n NProgress.done()\n } else if (event.detail.visit.interrupted) {\n NProgress.set(0)\n } else if (event.detail.visit.cancelled) {\n NProgress.done()\n NProgress.remove()\n }\n}\n\nfunction injectCSS(color: string): void {\n const element = document.createElement('style')\n element.type = 'text/css'\n element.textContent = `\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n NProgress.configure({ showSpinner })\n if (includeCSS) {\n injectCSS(color)\n }\n}\n","import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n","export default function shouldIntercept(event: KeyboardEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\n (isLink && event.which > 1) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey)\n )\n}\n","import { Router } from './router'\n\nexport * from './types'\n\nexport { default as setupProgress } from './progress'\nexport { default as createHeadManager } from './head'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\n\nexport const router = new Router()\n"],"names":["modal","listener","show","html","JSON","stringify","document","createElement","page","innerHTML","querySelectorAll","forEach","a","setAttribute","this","style","position","width","height","padding","boxSizing","backgroundColor","zIndex","addEventListener","hide","iframe","borderRadius","appendChild","body","prepend","overflow","contentWindow","open","write","outerHTML","close","hideOnEscape","bind","removeEventListener","event","keyCode","fn","delay","clearTimeout","timeoutID","setTimeout","apply","_this","source","form","parentKey","Object","prototype","hasOwnProperty","call","key","append","composeKey","parent","value","Array","isArray","from","keys","index","toString","toISOString","name","objectToFormData","href","window","location","method","data","qsArrayFormat","test","hasHost","startsWith","hasAbsolutePath","includes","Method","GET","length","url","search","qs","deepmerge","ignoreQueryPrefix","encodeValuesOnly","arrayFormat","protocol","host","pathname","hasRelativePath","substring","hasSearch","hasHash","hash","join","options","dispatchEvent","visit","detail","init","resolveComponent","swapComponent","initialPage","setNavigationType","clearRememberedStateOnReload","isBackForwardVisit","handleBackForwardVisit","isLocationVisit","handleLocationVisit","handleInitialPageVisit","setupEventListeners","navigationType","performance","getEntriesByType","type","history","state","_window$history$state","rememberedState","setPage","preserveState","then","handlePopstateEvent","debounce","handleScrollEvent","scrollRegions","target","hasAttribute","saveScrollPositions","replaceState","map","region","top","scrollTop","left","scrollLeft","resetScrollPositions","scrollTo","getElementById","slice","scrollIntoView","restoreScrollPositions","scrollPosition","version","preserveScroll","_this2","fireNavigateEvent","locationVisit","sessionStorage","setItem","urlWithoutHash","reload","error","getItem","parse","removeItem","_window$history$state3","_window$history$state5","_this3","isLocationVisitResponse","response","status","headers","isInertiaResponse","createVisitId","visitId","cancelVisit","activeVisit","cancelled","interrupted","completed","cancelToken","cancel","onCancel","fireFinishEvent","onFinish","finishVisit","resolvePreserveOption","props","errors","replace","only","errorBag","forceFormData","onCancelToken","onBefore","onStart","onProgress","onSuccess","onError","queryStringArrayFormat","hrefToUrl","values","some","hasFiles","mergeDataIntoQueryString","_data","cancelable","fireBeforeEvent","Axios","CancelToken","_this4","fireStartEvent","params","token","Accept","X-Requested-With","X-Inertia","X-Inertia-Partial-Component","component","X-Inertia-Partial-Data","X-Inertia-Error-Bag","X-Inertia-Version","onUploadProgress","progress","percentage","Math","round","loaded","total","fireProgressEvent","reject","pageResponse","_window$history$state6","requestUrl","responseUrl","fireErrorEvent","scopedErrors","locationUrl","isCancel","exception","throwException","resolve","_this5","pushState","Promise","_this6","get","console","warn","post","POST","put","PUT","patch","PATCH","DELETE","remember","isServer","_this$page","restore","_window$history$state7","_window$history$state8","on","callback","defaultPrevented","preventDefault","start","finish","timeout","NProgress","isStarted","_event$detail$progres","set","max","done","remove","color","includeCSS","showSpinner","addEventListeners","configure","element","textContent","head","injectCSS","buildDOMElement","tag","template","content","firstChild","script","node","getAttributeNames","getAttribute","isInertiaManagedElement","nodeType","Node","ELEMENT_NODE","findMatchingElementIndex","elements","findIndex","update","childNodes","filter","targetElement","sourceElements","splice","sourceElement","isEqualNode","parentNode","replaceChild","removeChild","titleCallback","onUpdate","title","states","reduce","carry","concat","indexOf","match","defaults","collect","Renderer","commit","forceUpdate","createProvider","lastProviderId","id","connect","disconnect","currentTarget","tagName","toLowerCase","isContentEditable","isLink","which","altKey","ctrlKey","metaKey","shiftKey","router"],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var t=e(require("axios")),n=require("qs"),r=e(require("deepmerge")),i=e(require("nprogress"));function o(){return(o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var s,a={modal:null,listener:null,show:function(e){var t=this;"object"==typeof e&&(e="All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>"+JSON.stringify(e));var n=document.createElement("html");n.innerHTML=e,n.querySelectorAll("a").forEach(function(e){return e.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",function(){return t.hide()});var r=document.createElement("iframe");if(r.style.backgroundColor="white",r.style.borderRadius="5px",r.style.width="100%",r.style.height="100%",this.modal.appendChild(r),document.body.prepend(this.modal),document.body.style.overflow="hidden",!r.contentWindow)throw new Error("iframe not yet ready.");r.contentWindow.document.open(),r.contentWindow.document.write(n.outerHTML),r.contentWindow.document.close(),this.listener=this.hideOnEscape.bind(this),document.addEventListener("keydown",this.listener)},hide:function(){this.modal.outerHTML="",this.modal=null,document.body.style.overflow="visible",document.removeEventListener("keydown",this.listener)},hideOnEscape:function(e){27===e.keyCode&&this.hide()}};function l(e,t){var n;return function(){var r=arguments,i=this;clearTimeout(n),n=setTimeout(function(){return e.apply(i,[].slice.call(r))},t)}}function c(e,t,n){for(var r in void 0===t&&(t=new FormData),void 0===n&&(n=null),e=e||{})Object.prototype.hasOwnProperty.call(e,r)&&u(t,d(n,r),e[r]);return t}function d(e,t){return e?e+"["+t+"]":t}function u(e,t,n){return Array.isArray(n)?Array.from(n.keys()).forEach(function(r){return u(e,d(t,r.toString()),n[r])}):n instanceof Date?e.append(t,n.toISOString()):n instanceof File?e.append(t,n,n.name):n instanceof Blob?e.append(t,n):"boolean"==typeof n?e.append(t,n?"1":"0"):"string"==typeof n?e.append(t,n):"number"==typeof n?e.append(t,""+n):null==n?e.append(t,""):void c(n,e,t)}function p(e){return new URL(e.toString(),window.location.toString())}function h(e,t,i,o){void 0===o&&(o="brackets");var s=/^https?:\/\//.test(t.toString()),a=s||t.toString().startsWith("/"),l=!a&&!t.toString().startsWith("#")&&!t.toString().startsWith("?"),c=t.toString().includes("?")||e===exports.Method.GET&&Object.keys(i).length,d=t.toString().includes("#"),u=new URL(t.toString(),"http://localhost");return e===exports.Method.GET&&Object.keys(i).length&&(u.search=n.stringify(r(n.parse(u.search,{ignoreQueryPrefix:!0}),i),{encodeValuesOnly:!0,arrayFormat:o}),i={}),[[s?u.protocol+"//"+u.host:"",a?u.pathname:"",l?u.pathname.substring(1):"",c?u.search:"",d?u.hash:""].join(""),i]}function f(e){return(e=new URL(e.href)).hash="",e}function v(e,t){return document.dispatchEvent(new CustomEvent("inertia:"+e,t))}(s=exports.Method||(exports.Method={})).GET="get",s.POST="post",s.PUT="put",s.PATCH="patch",s.DELETE="delete";var m=function(e){return v("finish",{detail:{visit:e}})},g=function(e){return v("navigate",{detail:{page:e}})},w="undefined"==typeof window,y=function(){function e(){this.visitId=null}var n=e.prototype;return n.init=function(e){var t=e.resolveComponent,n=e.swapComponent;this.page=e.initialPage,this.resolveComponent=t,this.swapComponent=n,this.setNavigationType(),this.clearRememberedStateOnReload(),this.isBackForwardVisit()?this.handleBackForwardVisit(this.page):this.isLocationVisit()?this.handleLocationVisit(this.page):this.handleInitialPageVisit(this.page),this.setupEventListeners()},n.setNavigationType=function(){this.navigationType=window.performance&&window.performance.getEntriesByType("navigation").length>0?window.performance.getEntriesByType("navigation")[0].type:"navigate"},n.clearRememberedStateOnReload=function(){var e;"reload"===this.navigationType&&null!=(e=window.history.state)&&e.rememberedState&&delete window.history.state.rememberedState},n.handleInitialPageVisit=function(e){this.page.url+=window.location.hash,this.setPage(e,{preserveState:!0}).then(function(){return g(e)})},n.setupEventListeners=function(){window.addEventListener("popstate",this.handlePopstateEvent.bind(this)),document.addEventListener("scroll",l(this.handleScrollEvent.bind(this),100),!0)},n.scrollRegions=function(){return document.querySelectorAll("[scroll-region]")},n.handleScrollEvent=function(e){"function"==typeof e.target.hasAttribute&&e.target.hasAttribute("scroll-region")&&this.saveScrollPositions()},n.saveScrollPositions=function(){this.replaceState(o({},this.page,{scrollRegions:Array.from(this.scrollRegions()).map(function(e){return{top:e.scrollTop,left:e.scrollLeft}})}))},n.resetScrollPositions=function(){var e;window.scrollTo(0,0),this.scrollRegions().forEach(function(e){"function"==typeof e.scrollTo?e.scrollTo(0,0):(e.scrollTop=0,e.scrollLeft=0)}),this.saveScrollPositions(),window.location.hash&&(null==(e=document.getElementById(window.location.hash.slice(1)))||e.scrollIntoView())},n.restoreScrollPositions=function(){var e=this;this.page.scrollRegions&&this.scrollRegions().forEach(function(t,n){var r=e.page.scrollRegions[n];r&&("function"==typeof t.scrollTo?t.scrollTo(r.left,r.top):(t.scrollTop=r.top,t.scrollLeft=r.left))})},n.isBackForwardVisit=function(){return window.history.state&&"back_forward"===this.navigationType},n.handleBackForwardVisit=function(e){var t=this;window.history.state.version=e.version,this.setPage(window.history.state,{preserveScroll:!0,preserveState:!0}).then(function(){t.restoreScrollPositions(),g(e)})},n.locationVisit=function(e,t){try{window.sessionStorage.setItem("inertiaLocationVisit",JSON.stringify({preserveScroll:t})),window.location.href=e.href,f(window.location).href===f(e).href&&window.location.reload()}catch(e){return!1}},n.isLocationVisit=function(){try{return null!==window.sessionStorage.getItem("inertiaLocationVisit")}catch(e){return!1}},n.handleLocationVisit=function(e){var t,n,r,i,o=this,s=JSON.parse(window.sessionStorage.getItem("inertiaLocationVisit")||"");window.sessionStorage.removeItem("inertiaLocationVisit"),e.url+=window.location.hash,e.rememberedState=null!=(t=null==(n=window.history.state)?void 0:n.rememberedState)?t:{},e.scrollRegions=null!=(r=null==(i=window.history.state)?void 0:i.scrollRegions)?r:[],this.setPage(e,{preserveScroll:s.preserveScroll,preserveState:!0}).then(function(){s.preserveScroll&&o.restoreScrollPositions(),g(e)})},n.isLocationVisitResponse=function(e){return!(!e||409!==e.status||!e.headers["x-inertia-location"])},n.isInertiaResponse=function(e){return!(null==e||!e.headers["x-inertia"])},n.createVisitId=function(){return this.visitId={},this.visitId},n.cancelVisit=function(e,t){var n=t.cancelled,r=void 0!==n&&n,i=t.interrupted,o=void 0!==i&&i;!e||e.completed||e.cancelled||e.interrupted||(e.cancelToken.cancel(),e.onCancel(),e.completed=!1,e.cancelled=r,e.interrupted=o,m(e),e.onFinish(e))},n.finishVisit=function(e){e.cancelled||e.interrupted||(e.completed=!0,e.cancelled=!1,e.interrupted=!1,m(e),e.onFinish(e))},n.resolvePreserveOption=function(e,t){return"function"==typeof e?e(t):"errors"===e?Object.keys(t.props.errors||{}).length>0:e},n.visit=function(e,n){var r=this,i=void 0===n?{}:n,s=i.method,l=void 0===s?exports.Method.GET:s,d=i.data,u=void 0===d?{}:d,m=i.replace,g=void 0!==m&&m,w=i.preserveScroll,y=void 0!==w&&w,S=i.preserveState,b=void 0!==S&&S,x=i.only,E=void 0===x?[]:x,T=i.headers,P=void 0===T?{}:T,I=i.errorBag,V=void 0===I?"":I,L=i.forceFormData,k=void 0!==L&&L,O=i.onCancelToken,C=void 0===O?function(){}:O,M=i.onBefore,R=void 0===M?function(){}:M,A=i.onStart,j=void 0===A?function(){}:A,F=i.onProgress,D=void 0===F?function(){}:F,N=i.onFinish,q=void 0===N?function(){}:N,B=i.onCancel,H=void 0===B?function(){}:B,W=i.onSuccess,U=void 0===W?function(){}:W,G=i.onError,X=void 0===G?function(){}:G,z=i.queryStringArrayFormat,J=void 0===z?"brackets":z,K="string"==typeof e?p(e):e;if(!function e(t){return t instanceof File||t instanceof Blob||t instanceof FileList&&t.length>0||t instanceof FormData&&Array.from(t.values()).some(function(t){return e(t)})||"object"==typeof t&&null!==t&&Object.values(t).some(function(t){return e(t)})}(u)&&!k||u instanceof FormData||(u=c(u)),!(u instanceof FormData)){var _=h(l,K,u,J),Q=_[1];K=p(_[0]),u=Q}var Y={url:K,method:l,data:u,replace:g,preserveScroll:y,preserveState:b,only:E,headers:P,errorBag:V,forceFormData:k,queryStringArrayFormat:J,cancelled:!1,completed:!1,interrupted:!1};if(!1!==R(Y)&&function(e){return v("before",{cancelable:!0,detail:{visit:e}})}(Y)){this.activeVisit&&this.cancelVisit(this.activeVisit,{interrupted:!0}),this.saveScrollPositions();var Z=this.createVisitId();this.activeVisit=o({},Y,{onCancelToken:C,onBefore:R,onStart:j,onProgress:D,onFinish:q,onCancel:H,onSuccess:U,onError:X,queryStringArrayFormat:J,cancelToken:t.CancelToken.source()}),C({cancel:function(){r.activeVisit&&r.cancelVisit(r.activeVisit,{cancelled:!0})}}),function(e){v("start",{detail:{visit:e}})}(Y),j(Y),t({method:l,url:f(K).href,data:l===exports.Method.GET?{}:u,params:l===exports.Method.GET?u:{},cancelToken:this.activeVisit.cancelToken.token,headers:o({},P,{Accept:"text/html, application/xhtml+xml","X-Requested-With":"XMLHttpRequest","X-Inertia":!0},E.length?{"X-Inertia-Partial-Component":this.page.component,"X-Inertia-Partial-Data":E.join(",")}:{},V&&V.length?{"X-Inertia-Error-Bag":V}:{},this.page.version?{"X-Inertia-Version":this.page.version}:{}),onUploadProgress:function(e){u instanceof FormData&&(e.percentage=Math.round(e.loaded/e.total*100),function(e){v("progress",{detail:{progress:e}})}(e),D(e))}}).then(function(e){var t;if(!r.isInertiaResponse(e))return Promise.reject({response:e});var n=e.data;E.length&&n.component===r.page.component&&(n.props=o({},r.page.props,n.props)),y=r.resolvePreserveOption(y,n),(b=r.resolvePreserveOption(b,n))&&null!=(t=window.history.state)&&t.rememberedState&&n.component===r.page.component&&(n.rememberedState=window.history.state.rememberedState);var i=K,s=p(n.url);return i.hash&&!s.hash&&f(i).href===s.href&&(s.hash=i.hash,n.url=s.href),r.setPage(n,{visitId:Z,replace:g,preserveScroll:y,preserveState:b})}).then(function(){var e=r.page.props.errors||{};if(Object.keys(e).length>0){var t=V?e[V]?e[V]:{}:e;return function(e){v("error",{detail:{errors:e}})}(t),X(t)}return v("success",{detail:{page:r.page}}),U(r.page)}).catch(function(e){if(r.isInertiaResponse(e.response))return r.setPage(e.response.data,{visitId:Z});if(r.isLocationVisitResponse(e.response)){var t=p(e.response.headers["x-inertia-location"]),n=K;n.hash&&!t.hash&&f(n).href===t.href&&(t.hash=n.hash),r.locationVisit(t,!0===y)}else{if(!e.response)return Promise.reject(e);v("invalid",{cancelable:!0,detail:{response:e.response}})&&a.show(e.response.data)}}).then(function(){r.activeVisit&&r.finishVisit(r.activeVisit)}).catch(function(e){if(!t.isCancel(e)){var n=v("exception",{cancelable:!0,detail:{exception:e}});if(r.activeVisit&&r.finishVisit(r.activeVisit),n)return Promise.reject(e)}})}},n.setPage=function(e,t){var n=this,r=void 0===t?{}:t,i=r.visitId,o=void 0===i?this.createVisitId():i,s=r.replace,a=void 0!==s&&s,l=r.preserveScroll,c=void 0!==l&&l,d=r.preserveState,u=void 0!==d&&d;return Promise.resolve(this.resolveComponent(e.component)).then(function(t){o===n.visitId&&(e.scrollRegions=e.scrollRegions||[],e.rememberedState=e.rememberedState||{},(a=a||p(e.url).href===window.location.href)?n.replaceState(e):n.pushState(e),n.swapComponent({component:t,page:e,preserveState:u}).then(function(){c||n.resetScrollPositions(),a||g(e)}))})},n.pushState=function(e){this.page=e,window.history.pushState(e,"",e.url)},n.replaceState=function(e){this.page=e,window.history.replaceState(e,"",e.url)},n.handlePopstateEvent=function(e){var t=this;if(null!==e.state){var n=e.state,r=this.createVisitId();Promise.resolve(this.resolveComponent(n.component)).then(function(e){r===t.visitId&&(t.page=n,t.swapComponent({component:e,page:n,preserveState:!1}).then(function(){t.restoreScrollPositions(),g(n)}))})}else{var i=p(this.page.url);i.hash=window.location.hash,this.replaceState(o({},this.page,{url:i.href})),this.resetScrollPositions()}},n.get=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),this.visit(e,o({},n,{method:exports.Method.GET,data:t}))},n.reload=function(e){return void 0===e&&(e={}),this.visit(window.location.href,o({},e,{preserveScroll:!0,preserveState:!0}))},n.replace=function(e,t){var n;return void 0===t&&(t={}),console.warn("Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia."+(null!=(n=t.method)?n:"get")+"() instead."),this.visit(e,o({preserveState:!0},t,{replace:!0}))},n.post=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),this.visit(e,o({preserveState:!0},n,{method:exports.Method.POST,data:t}))},n.put=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),this.visit(e,o({preserveState:!0},n,{method:exports.Method.PUT,data:t}))},n.patch=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),this.visit(e,o({preserveState:!0},n,{method:exports.Method.PATCH,data:t}))},n.delete=function(e,t){return void 0===t&&(t={}),this.visit(e,o({preserveState:!0},t,{method:exports.Method.DELETE}))},n.remember=function(e,t){var n,r;void 0===t&&(t="default"),w||this.replaceState(o({},this.page,{rememberedState:o({},null==(n=this.page)?void 0:n.rememberedState,(r={},r[t]=e,r))}))},n.restore=function(e){var t,n;if(void 0===e&&(e="default"),!w)return null==(t=window.history.state)||null==(n=t.rememberedState)?void 0:n[e]},n.on=function(e,t){var n=function(e){var n=t(e);e.cancelable&&!e.defaultPrevented&&!1===n&&e.preventDefault()};return document.addEventListener("inertia:"+e,n),function(){return document.removeEventListener("inertia:"+e,n)}},e}(),S=null;function b(e){document.addEventListener("inertia:start",x.bind(null,e)),document.addEventListener("inertia:progress",E),document.addEventListener("inertia:finish",T)}function x(e){S=setTimeout(function(){return i.start()},e)}function E(e){var t;i.isStarted()&&null!=(t=e.detail.progress)&&t.percentage&&i.set(Math.max(i.status,e.detail.progress.percentage/100*.9))}function T(e){clearTimeout(S),i.isStarted()&&(e.detail.visit.completed?i.done():e.detail.visit.interrupted?i.set(0):e.detail.visit.cancelled&&(i.done(),i.remove()))}var P={buildDOMElement:function(e){var t=document.createElement("template");t.innerHTML=e;var n=t.content.firstChild;if(!e.startsWith("<script "))return n;var r=document.createElement("script");return r.innerHTML=n.innerHTML,n.getAttributeNames().forEach(function(e){r.setAttribute(e,n.getAttribute(e)||"")}),r},isInertiaManagedElement:function(e){return e.nodeType===Node.ELEMENT_NODE&&null!==e.getAttribute("inertia")},findMatchingElementIndex:function(e,t){var n=e.getAttribute("inertia");return null!==n?t.findIndex(function(e){return e.getAttribute("inertia")===n}):-1},update:l(function(e){var t=this,n=e.map(function(e){return t.buildDOMElement(e)});Array.from(document.head.childNodes).filter(function(e){return t.isInertiaManagedElement(e)}).forEach(function(e){var r=t.findMatchingElementIndex(e,n);if(-1!==r){var i,o=n.splice(r,1)[0];o&&!e.isEqualNode(o)&&(null==e||null==(i=e.parentNode)||i.replaceChild(o,e))}else{var s;null==e||null==(s=e.parentNode)||s.removeChild(e)}}),n.forEach(function(e){return document.head.appendChild(e)})},1)},I=new y;exports.createHeadManager=function(e,t,n){var r={},i=0;function s(){var e=t(""),n=o({},e?{title:'<title inertia="">'+e+"</title>"}:{}),i=Object.values(r).reduce(function(e,t){return e.concat(t)},[]).reduce(function(e,n){if(-1===n.indexOf("<"))return e;if(0===n.indexOf("<title ")){var r=n.match(/(<title [^>]+>)(.*?)(<\/title>)/);return e.title=r?""+r[1]+t(r[2])+r[3]:n,e}var i=n.match(/ inertia="[^"]+"/);return i?e[i[0]]=n:e[Object.keys(e).length]=n,e},n);return Object.values(i)}function a(){e?n(s()):P.update(s())}return a(),{forceUpdate:a,createProvider:function(){var e=function(){var e=i+=1;return r[e]=[],e.toString()}();return{update:function(t){return function(e,t){void 0===t&&(t=[]),null!==e&&Object.keys(r).indexOf(e)>-1&&(r[e]=t),a()}(e,t)},disconnect:function(){return function(e){null!==e&&-1!==Object.keys(r).indexOf(e)&&(delete r[e],a())}(e)}}}}},exports.hrefToUrl=p,exports.mergeDataIntoQueryString=h,exports.router=I,exports.setupProgress=function(e){var t=void 0===e?{}:e,n=t.delay,r=t.color,o=void 0===r?"#29d":r,s=t.includeCSS,a=void 0===s||s,l=t.showSpinner,c=void 0!==l&&l;b(void 0===n?250:n),i.configure({showSpinner:c}),a&&function(e){var t=document.createElement("style");t.type="text/css",t.textContent="\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: "+e+";\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 "+e+", 0 0 5px "+e+";\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: "+e+";\n border-left-color: "+e+";\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 ",document.head.appendChild(t)}(o)},exports.shouldIntercept=function(e){var t="a"===e.currentTarget.tagName.toLowerCase();return!(e.target&&null!=e&&e.target.isContentEditable||e.defaultPrevented||t&&e.which>1||t&&e.altKey||t&&e.ctrlKey||t&&e.metaKey||t&&e.shiftKey)},exports.urlWithoutHash=f;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/modal.ts","../src/types.ts","../src/debounce.ts","../src/formData.ts","../src/url.ts","../src/events.ts","../src/router.ts","../src/files.ts","../src/progress.ts","../src/head.ts","../src/index.ts","../src/shouldIntercept.ts"],"sourcesContent":["export default {\n modal: null,\n listener: null,\n\n show(html: Record<string, unknown> | string): void {\n if (typeof html === 'object') {\n html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(\n html,\n )}`\n }\n\n const page = document.createElement('html')\n page.innerHTML = html\n page.querySelectorAll('a').forEach((a) => a.setAttribute('target', '_top'))\n\n this.modal = document.createElement('div')\n this.modal.style.position = 'fixed'\n this.modal.style.width = '100vw'\n this.modal.style.height = '100vh'\n this.modal.style.padding = '50px'\n this.modal.style.boxSizing = 'border-box'\n this.modal.style.backgroundColor = 'rgba(0, 0, 0, .6)'\n this.modal.style.zIndex = 200000\n this.modal.addEventListener('click', () => this.hide())\n\n const iframe = document.createElement('iframe')\n iframe.style.backgroundColor = 'white'\n iframe.style.borderRadius = '5px'\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n this.modal.appendChild(iframe)\n\n document.body.prepend(this.modal)\n document.body.style.overflow = 'hidden'\n if (!iframe.contentWindow) {\n throw new Error('iframe not yet ready.')\n }\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n\n this.listener = this.hideOnEscape.bind(this)\n document.addEventListener('keydown', this.listener)\n },\n\n hide(): void {\n this.modal.outerHTML = ''\n this.modal = null\n document.body.style.overflow = 'visible'\n document.removeEventListener('keydown', this.listener)\n },\n\n hideOnEscape(event: KeyboardEvent): void {\n if (event.keyCode === 27) {\n this.hide()\n }\n },\n}\n","import { AxiosResponse, CancelTokenSource } from 'axios'\n\nexport type Errors = Record<string, string>\nexport type ErrorBag = Record<string, Errors>\n\nexport type FormDataConvertible =\n | Array<FormDataConvertible>\n | Blob\n | FormDataEntryValue\n | Date\n | boolean\n | number\n | null\n | undefined\n\nexport enum Method {\n GET = 'get',\n POST = 'post',\n PUT = 'put',\n PATCH = 'patch',\n DELETE = 'delete',\n}\n\nexport type RequestPayload = Record<string, FormDataConvertible> | FormData\n\nexport interface PageProps {\n [key: string]: unknown\n}\n\nexport interface Page<SharedProps = PageProps> {\n component: string\n props: PageProps &\n SharedProps & {\n errors: Errors & ErrorBag\n }\n url: string\n version: string | null\n\n // Refactor away\n scrollRegions: Array<{ top: number; left: number }>\n rememberedState: Record<string, unknown>\n resolvedErrors: Errors\n}\n\nexport type PageResolver = (name: string) => Component\n\nexport type PageHandler = ({\n component,\n page,\n preserveState,\n}: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n}) => Promise<unknown>\n\nexport type PreserveStateOption = boolean | string | ((page: Page) => boolean)\n\nexport type Progress = ProgressEvent & { percentage: number }\n\nexport type LocationVisit = {\n preserveScroll: boolean\n}\n\nexport type Visit = {\n method: Method\n data: RequestPayload\n replace: boolean\n preserveScroll: PreserveStateOption\n preserveState: PreserveStateOption\n only: Array<string>\n headers: Record<string, string>\n errorBag: string | null\n forceFormData: boolean\n queryStringArrayFormat: 'indices' | 'brackets'\n}\n\nexport type GlobalEventsMap = {\n before: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: boolean | void\n }\n start: {\n parameters: [PendingVisit]\n details: {\n visit: PendingVisit\n }\n result: void\n }\n progress: {\n parameters: [Progress | undefined]\n details: {\n progress: Progress | undefined\n }\n result: void\n }\n finish: {\n parameters: [ActiveVisit]\n details: {\n visit: ActiveVisit\n }\n result: void\n }\n cancel: {\n parameters: []\n details: {}\n result: void\n }\n navigate: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n success: {\n parameters: [Page]\n details: {\n page: Page\n }\n result: void\n }\n error: {\n parameters: [Errors]\n details: {\n errors: Errors\n }\n result: void\n }\n invalid: {\n parameters: [AxiosResponse]\n details: {\n response: AxiosResponse\n }\n result: boolean | void\n }\n exception: {\n parameters: [Error]\n details: {\n exception: Error\n }\n result: boolean | void\n }\n}\n\nexport type GlobalEventNames = keyof GlobalEventsMap\n\nexport type GlobalEvent<TEventName extends GlobalEventNames> = CustomEvent<GlobalEventDetails<TEventName>>\n\nexport type GlobalEventParameters<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['parameters']\n\nexport type GlobalEventResult<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['result']\n\nexport type GlobalEventDetails<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['details']\n\nexport type GlobalEventTrigger<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type GlobalEventCallback<TEventName extends GlobalEventNames> = (\n ...params: GlobalEventParameters<TEventName>\n) => GlobalEventResult<TEventName>\n\nexport type VisitOptions = Partial<\n Visit & {\n onCancelToken: { ({ cancel }: { cancel: VoidFunction }): void }\n onBefore: GlobalEventCallback<'before'>\n onStart: GlobalEventCallback<'start'>\n onProgress: GlobalEventCallback<'progress'>\n onFinish: GlobalEventCallback<'finish'>\n onCancel: GlobalEventCallback<'cancel'>\n onSuccess: GlobalEventCallback<'success'>\n onError: GlobalEventCallback<'error'>\n }\n>\n\nexport type PendingVisit = Visit & {\n url: URL\n completed: boolean\n cancelled: boolean\n interrupted: boolean\n}\n\nexport type ActiveVisit = PendingVisit &\n Required<VisitOptions> & {\n cancelToken: CancelTokenSource\n }\n\nexport type VisitId = unknown\nexport type Component = unknown\n\nexport type InertiaAppResponse = Promise<{ head: string[]; body: string } | void>\n\ndeclare global {\n interface DocumentEventMap {\n 'inertia:before': GlobalEvent<'before'>\n 'inertia:start': GlobalEvent<'start'>\n 'inertia:progress': GlobalEvent<'progress'>\n 'inertia:success': GlobalEvent<'success'>\n 'inertia:error': GlobalEvent<'error'>\n 'inertia:invalid': GlobalEvent<'invalid'>\n 'inertia:exception': GlobalEvent<'exception'>\n 'inertia:finish': GlobalEvent<'finish'>\n 'inertia:navigate': GlobalEvent<'navigate'>\n }\n}\n","export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F {\n let timeoutID: NodeJS.Timeout\n return function (...args: unknown[]) {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(() => fn.apply(this, args), delay)\n } as F\n}\n","import { FormDataConvertible } from './types'\n\nexport function objectToFormData(\n source: Record<string, FormDataConvertible>,\n form: FormData = new FormData(),\n parentKey: string | null = null,\n): FormData {\n source = source || {}\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n append(form, composeKey(parentKey, key), source[key])\n }\n }\n\n return form\n}\n\nfunction composeKey(parent: string | null, key: string): string {\n return parent ? parent + '[' + key + ']' : key\n}\n\nfunction append(form: FormData, key: string, value: FormDataConvertible): void {\n if (Array.isArray(value)) {\n return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]))\n } else if (value instanceof Date) {\n return form.append(key, value.toISOString())\n } else if (value instanceof File) {\n return form.append(key, value, value.name)\n } else if (value instanceof Blob) {\n return form.append(key, value)\n } else if (typeof value === 'boolean') {\n return form.append(key, value ? '1' : '0')\n } else if (typeof value === 'string') {\n return form.append(key, value)\n } else if (typeof value === 'number') {\n return form.append(key, `${value}`)\n } else if (value === null || value === undefined) {\n return form.append(key, '')\n }\n\n objectToFormData(value, form, key)\n}\n","import * as qs from 'qs'\nimport deepmerge from 'deepmerge'\nimport { FormDataConvertible, Method } from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), window.location.toString())\n}\n\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === Method.GET && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === Method.GET && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n","import { GlobalEventDetails, GlobalEventNames, GlobalEventTrigger } from './types'\n\nfunction fireEvent<TEventName extends GlobalEventNames>(\n name: TEventName,\n options: CustomEventInit<GlobalEventDetails<TEventName>>,\n): boolean {\n return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options))\n}\n\nexport const fireBeforeEvent: GlobalEventTrigger<'before'> = (visit) => {\n return fireEvent('before', { cancelable: true, detail: { visit } })\n}\n\nexport const fireErrorEvent: GlobalEventTrigger<'error'> = (errors) => {\n return fireEvent('error', { detail: { errors } })\n}\n\nexport const fireExceptionEvent: GlobalEventTrigger<'exception'> = (exception) => {\n return fireEvent('exception', { cancelable: true, detail: { exception } })\n}\n\nexport const fireFinishEvent: GlobalEventTrigger<'finish'> = (visit) => {\n return fireEvent('finish', { detail: { visit } })\n}\n\nexport const fireInvalidEvent: GlobalEventTrigger<'invalid'> = (response) => {\n return fireEvent('invalid', { cancelable: true, detail: { response } })\n}\n\nexport const fireNavigateEvent: GlobalEventTrigger<'navigate'> = (page) => {\n return fireEvent('navigate', { detail: { page } })\n}\n\nexport const fireProgressEvent: GlobalEventTrigger<'progress'> = (progress) => {\n return fireEvent('progress', { detail: { progress } })\n}\n\nexport const fireStartEvent: GlobalEventTrigger<'start'> = (visit) => {\n return fireEvent('start', { detail: { visit } })\n}\n\nexport const fireSuccessEvent: GlobalEventTrigger<'success'> = (page) => {\n return fireEvent('success', { detail: { page } })\n}\n","import modal from './modal'\nimport debounce from './debounce'\nimport { hasFiles } from './files'\nimport { objectToFormData } from './formData'\nimport { default as Axios, AxiosResponse } from 'axios'\nimport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nimport {\n ActiveVisit,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n LocationVisit,\n Method,\n Page,\n PageHandler,\n PageResolver,\n PendingVisit,\n PreserveStateOption,\n RequestPayload,\n VisitId,\n VisitOptions,\n} from './types'\nimport {\n fireBeforeEvent,\n fireErrorEvent,\n fireExceptionEvent,\n fireFinishEvent,\n fireInvalidEvent,\n fireNavigateEvent,\n fireProgressEvent,\n fireStartEvent,\n fireSuccessEvent,\n} from './events'\n\nconst isServer = typeof window === 'undefined'\n\nexport class Router {\n protected page!: Page\n protected resolveComponent!: PageResolver\n protected swapComponent!: PageHandler\n protected navigationType?: string\n protected activeVisit?: ActiveVisit\n protected visitId: VisitId = null\n\n public init({\n initialPage,\n resolveComponent,\n swapComponent,\n }: {\n initialPage: Page\n resolveComponent: PageResolver\n swapComponent: PageHandler\n }): void {\n this.page = initialPage\n this.resolveComponent = resolveComponent\n this.swapComponent = swapComponent\n\n this.setNavigationType()\n this.clearRememberedStateOnReload()\n\n if (this.isBackForwardVisit()) {\n this.handleBackForwardVisit(this.page)\n } else if (this.isLocationVisit()) {\n this.handleLocationVisit(this.page)\n } else {\n this.handleInitialPageVisit(this.page)\n }\n\n this.setupEventListeners()\n }\n\n protected setNavigationType(): void {\n this.navigationType =\n window.performance && window.performance.getEntriesByType('navigation').length > 0\n ? (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n : 'navigate'\n }\n\n protected clearRememberedStateOnReload(): void {\n if (this.navigationType === 'reload' && window.history.state?.rememberedState) {\n delete window.history.state.rememberedState\n }\n }\n\n protected handleInitialPageVisit(page: Page): void {\n this.page.url += window.location.hash\n this.setPage(page, { preserveState: true }).then(() => fireNavigateEvent(page))\n }\n\n protected setupEventListeners(): void {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n document.addEventListener('scroll', debounce(this.handleScrollEvent.bind(this), 100), true)\n }\n\n protected scrollRegions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n protected handleScrollEvent(event: Event): void {\n if (\n typeof (event.target as Element).hasAttribute === 'function' &&\n (event.target as Element).hasAttribute('scroll-region')\n ) {\n this.saveScrollPositions()\n }\n }\n\n protected saveScrollPositions(): void {\n this.replaceState({\n ...this.page,\n scrollRegions: Array.from(this.scrollRegions()).map((region) => {\n return {\n top: region.scrollTop,\n left: region.scrollLeft,\n }\n }),\n })\n }\n\n protected resetScrollPositions(): void {\n window.scrollTo(0, 0)\n this.scrollRegions().forEach((region) => {\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(0, 0)\n } else {\n region.scrollTop = 0\n region.scrollLeft = 0\n }\n })\n this.saveScrollPositions()\n if (window.location.hash) {\n document.getElementById(window.location.hash.slice(1))?.scrollIntoView()\n }\n }\n\n protected restoreScrollPositions(): void {\n if (this.page.scrollRegions) {\n this.scrollRegions().forEach((region: Element, index: number) => {\n const scrollPosition = this.page.scrollRegions[index]\n if (!scrollPosition) {\n return\n } else if (typeof region.scrollTo === 'function') {\n region.scrollTo(scrollPosition.left, scrollPosition.top)\n } else {\n region.scrollTop = scrollPosition.top\n region.scrollLeft = scrollPosition.left\n }\n })\n }\n }\n\n protected isBackForwardVisit(): boolean {\n return window.history.state && this.navigationType === 'back_forward'\n }\n\n protected handleBackForwardVisit(page: Page): void {\n window.history.state.version = page.version\n this.setPage(window.history.state, { preserveScroll: true, preserveState: true }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n\n protected locationVisit(url: URL, preserveScroll: LocationVisit['preserveScroll']): boolean | void {\n try {\n const locationVisit: LocationVisit = { preserveScroll }\n window.sessionStorage.setItem('inertiaLocationVisit', JSON.stringify(locationVisit))\n window.location.href = url.href\n if (urlWithoutHash(window.location).href === urlWithoutHash(url).href) {\n window.location.reload()\n }\n } catch (error) {\n return false\n }\n }\n\n protected isLocationVisit(): boolean {\n try {\n return window.sessionStorage.getItem('inertiaLocationVisit') !== null\n } catch (error) {\n return false\n }\n }\n\n protected handleLocationVisit(page: Page): void {\n const locationVisit: LocationVisit = JSON.parse(window.sessionStorage.getItem('inertiaLocationVisit') || '')\n window.sessionStorage.removeItem('inertiaLocationVisit')\n page.url += window.location.hash\n page.rememberedState = window.history.state?.rememberedState ?? {}\n page.scrollRegions = window.history.state?.scrollRegions ?? []\n this.setPage(page, { preserveScroll: locationVisit.preserveScroll, preserveState: true }).then(() => {\n if (locationVisit.preserveScroll) {\n this.restoreScrollPositions()\n }\n fireNavigateEvent(page)\n })\n }\n\n protected isLocationVisitResponse(response: AxiosResponse): boolean {\n return !!(response && response.status === 409 && response.headers['x-inertia-location'])\n }\n\n protected isInertiaResponse(response: AxiosResponse): boolean {\n return !!response?.headers['x-inertia']\n }\n\n protected createVisitId(): VisitId {\n this.visitId = {}\n return this.visitId\n }\n\n protected cancelVisit(\n activeVisit: ActiveVisit,\n { cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean },\n ): void {\n if (activeVisit && !activeVisit.completed && !activeVisit.cancelled && !activeVisit.interrupted) {\n activeVisit.cancelToken.cancel()\n activeVisit.onCancel()\n activeVisit.completed = false\n activeVisit.cancelled = cancelled\n activeVisit.interrupted = interrupted\n fireFinishEvent(activeVisit)\n activeVisit.onFinish(activeVisit)\n }\n }\n\n protected finishVisit(visit: ActiveVisit): void {\n if (!visit.cancelled && !visit.interrupted) {\n visit.completed = true\n visit.cancelled = false\n visit.interrupted = false\n fireFinishEvent(visit)\n visit.onFinish(visit)\n }\n }\n\n protected resolvePreserveOption(value: PreserveStateOption, page: Page): boolean | string {\n if (typeof value === 'function') {\n return value(page)\n } else if (value === 'errors') {\n return Object.keys(page.props.errors || {}).length > 0\n } else {\n return value\n }\n }\n\n public visit(\n href: string | URL,\n {\n method = Method.GET,\n data = {},\n replace = false,\n preserveScroll = false,\n preserveState = false,\n only = [],\n headers = {},\n errorBag = '',\n forceFormData = false,\n onCancelToken = () => {},\n onBefore = () => {},\n onStart = () => {},\n onProgress = () => {},\n onFinish = () => {},\n onCancel = () => {},\n onSuccess = () => {},\n onError = () => {},\n queryStringArrayFormat = 'brackets',\n }: VisitOptions = {},\n ): void {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !(data instanceof FormData)) {\n data = objectToFormData(data)\n }\n\n if (!(data instanceof FormData)) {\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n url = hrefToUrl(_href)\n data = _data\n }\n\n const visit: PendingVisit = {\n url,\n method,\n data,\n replace,\n preserveScroll,\n preserveState,\n only,\n headers,\n errorBag,\n forceFormData,\n queryStringArrayFormat,\n cancelled: false,\n completed: false,\n interrupted: false,\n }\n\n if (onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { interrupted: true })\n }\n\n this.saveScrollPositions()\n\n const visitId = this.createVisitId()\n this.activeVisit = {\n ...visit,\n onCancelToken,\n onBefore,\n onStart,\n onProgress,\n onFinish,\n onCancel,\n onSuccess,\n onError,\n queryStringArrayFormat,\n cancelToken: Axios.CancelToken.source(),\n }\n\n onCancelToken({\n cancel: () => {\n if (this.activeVisit) {\n this.cancelVisit(this.activeVisit, { cancelled: true })\n }\n },\n })\n\n fireStartEvent(visit)\n onStart(visit)\n\n Axios({\n method,\n url: urlWithoutHash(url).href,\n data: method === Method.GET ? {} : data,\n params: method === Method.GET ? data : {},\n cancelToken: this.activeVisit.cancelToken.token,\n headers: {\n ...headers,\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n ...(only.length\n ? {\n 'X-Inertia-Partial-Component': this.page.component,\n 'X-Inertia-Partial-Data': only.join(','),\n }\n : {}),\n ...(errorBag && errorBag.length ? { 'X-Inertia-Error-Bag': errorBag } : {}),\n ...(this.page.version ? { 'X-Inertia-Version': this.page.version } : {}),\n },\n onUploadProgress: (progress) => {\n if (data instanceof FormData) {\n progress.percentage = Math.round((progress.loaded / progress.total) * 100)\n fireProgressEvent(progress)\n onProgress(progress)\n }\n },\n })\n .then((response) => {\n if (!this.isInertiaResponse(response)) {\n return Promise.reject({ response })\n }\n\n const pageResponse: Page = response.data\n if (only.length && pageResponse.component === this.page.component) {\n pageResponse.props = { ...this.page.props, ...pageResponse.props }\n }\n preserveScroll = this.resolvePreserveOption(preserveScroll, pageResponse) as boolean\n preserveState = this.resolvePreserveOption(preserveState, pageResponse)\n if (preserveState && window.history.state?.rememberedState && pageResponse.component === this.page.component) {\n pageResponse.rememberedState = window.history.state.rememberedState\n }\n const requestUrl = url\n const responseUrl = hrefToUrl(pageResponse.url)\n if (requestUrl.hash && !responseUrl.hash && urlWithoutHash(requestUrl).href === responseUrl.href) {\n responseUrl.hash = requestUrl.hash\n pageResponse.url = responseUrl.href\n }\n return this.setPage(pageResponse, { visitId, replace, preserveScroll, preserveState })\n })\n .then(() => {\n const errors = this.page.props.errors || {}\n if (Object.keys(errors).length > 0) {\n const scopedErrors = errorBag ? (errors[errorBag] ? errors[errorBag] : {}) : errors\n fireErrorEvent(scopedErrors)\n return onError(scopedErrors)\n }\n fireSuccessEvent(this.page)\n return onSuccess(this.page)\n })\n .catch((error) => {\n if (this.isInertiaResponse(error.response)) {\n return this.setPage(error.response.data, { visitId })\n } else if (this.isLocationVisitResponse(error.response)) {\n const locationUrl = hrefToUrl(error.response.headers['x-inertia-location'])\n const requestUrl = url\n if (requestUrl.hash && !locationUrl.hash && urlWithoutHash(requestUrl).href === locationUrl.href) {\n locationUrl.hash = requestUrl.hash\n }\n this.locationVisit(locationUrl, preserveScroll === true)\n } else if (error.response) {\n if (fireInvalidEvent(error.response)) {\n modal.show(error.response.data)\n }\n } else {\n return Promise.reject(error)\n }\n })\n .then(() => {\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n })\n .catch((error) => {\n if (!Axios.isCancel(error)) {\n const throwException = fireExceptionEvent(error)\n if (this.activeVisit) {\n this.finishVisit(this.activeVisit)\n }\n if (throwException) {\n return Promise.reject(error)\n }\n }\n })\n }\n\n protected setPage(\n page: Page,\n {\n visitId = this.createVisitId(),\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: {\n visitId?: VisitId\n replace?: boolean\n preserveScroll?: PreserveStateOption\n preserveState?: PreserveStateOption\n } = {},\n ): Promise<void> {\n return Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n page.scrollRegions = page.scrollRegions || []\n page.rememberedState = page.rememberedState || {}\n replace = replace || hrefToUrl(page.url).href === window.location.href\n replace ? this.replaceState(page) : this.pushState(page)\n this.swapComponent({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\n this.resetScrollPositions()\n }\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n }\n })\n }\n\n protected pushState(page: Page): void {\n this.page = page\n window.history.pushState(page, '', page.url)\n }\n\n protected replaceState(page: Page): void {\n this.page = page\n window.history.replaceState(page, '', page.url)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n if (event.state !== null) {\n const page = event.state\n const visitId = this.createVisitId()\n Promise.resolve(this.resolveComponent(page.component)).then((component) => {\n if (visitId === this.visitId) {\n this.page = page\n this.swapComponent({ component, page, preserveState: false }).then(() => {\n this.restoreScrollPositions()\n fireNavigateEvent(page)\n })\n }\n })\n } else {\n const url = hrefToUrl(this.page.url)\n url.hash = window.location.hash\n this.replaceState({ ...this.page, url: url.href })\n this.resetScrollPositions()\n }\n }\n\n public get(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { ...options, method: Method.GET, data })\n }\n\n public reload(options: Exclude<VisitOptions, 'preserveScroll' | 'preserveState'> = {}): void {\n return this.visit(window.location.href, { ...options, preserveScroll: true, preserveState: true })\n }\n\n public replace(url: URL | string, options: Exclude<VisitOptions, 'replace'> = {}): void {\n console.warn(\n `Inertia.replace() has been deprecated and will be removed in a future release. Please use Inertia.${\n options.method ?? 'get'\n }() instead.`,\n )\n return this.visit(url, { preserveState: true, ...options, replace: true })\n }\n\n public post(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.POST, data })\n }\n\n public put(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PUT, data })\n }\n\n public patch(\n url: URL | string,\n data: RequestPayload = {},\n options: Exclude<VisitOptions, 'method' | 'data'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.PATCH, data })\n }\n\n public delete(url: URL | string, options: Exclude<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: Method.DELETE })\n }\n\n public remember(data: unknown, key = 'default'): void {\n if (isServer) {\n return\n }\n\n this.replaceState({\n ...this.page,\n rememberedState: {\n ...this.page?.rememberedState,\n [key]: data,\n },\n })\n }\n\n public restore(key = 'default'): unknown {\n if (isServer) {\n return\n }\n\n return window.history.state?.rememberedState?.[key]\n }\n\n public on<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n const listener = ((event: GlobalEvent<TEventName>) => {\n const response = callback(event)\n if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n document.addEventListener(`inertia:${type}`, listener)\n return () => document.removeEventListener(`inertia:${type}`, listener)\n }\n}\n","import { FormDataConvertible, RequestPayload } from './types'\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n data instanceof File ||\n data instanceof Blob ||\n (data instanceof FileList && data.length > 0) ||\n (data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value))) ||\n (typeof data === 'object' && data !== null && Object.values(data).some((value) => hasFiles(value)))\n )\n}\n","import { GlobalEvent } from './types'\nimport NProgress from 'nprogress'\n\nlet timeout: NodeJS.Timeout | null = null\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', start.bind(null, delay))\n document.addEventListener('inertia:progress', progress)\n document.addEventListener('inertia:finish', finish)\n}\n\nfunction start(delay: number): void {\n timeout = setTimeout(() => NProgress.start(), delay)\n}\n\nfunction progress(event: GlobalEvent<'progress'>) {\n if (NProgress.isStarted() && event.detail.progress?.percentage) {\n NProgress.set(Math.max(NProgress.status!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>) {\n clearTimeout(timeout!)\n if (!NProgress.isStarted()) {\n return\n } else if (event.detail.visit.completed) {\n NProgress.done()\n } else if (event.detail.visit.interrupted) {\n NProgress.set(0)\n } else if (event.detail.visit.cancelled) {\n NProgress.done()\n NProgress.remove()\n }\n}\n\nfunction injectCSS(color: string): void {\n const element = document.createElement('style')\n element.type = 'text/css'\n element.textContent = `\n #nprogress {\n pointer-events: none;\n }\n\n #nprogress .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #nprogress .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n -webkit-transform: rotate(3deg) translate(0px, -4px);\n -ms-transform: rotate(3deg) translate(0px, -4px);\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #nprogress .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #nprogress .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n -webkit-animation: nprogress-spinner 400ms linear infinite;\n animation: nprogress-spinner 400ms linear infinite;\n }\n\n .nprogress-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .nprogress-custom-parent #nprogress .spinner,\n .nprogress-custom-parent #nprogress .bar {\n position: absolute;\n }\n\n @-webkit-keyframes nprogress-spinner {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n @keyframes nprogress-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n NProgress.configure({ showSpinner })\n if (includeCSS) {\n injectCSS(color)\n }\n}\n","import debounce from './debounce'\n\nconst Renderer = {\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(/ inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n","import { Router } from './router'\n\nexport * from './types'\n\nexport { default as setupProgress } from './progress'\nexport { default as createHeadManager } from './head'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\n\nexport const router = new Router()\n","export default function shouldIntercept(event: KeyboardEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\n (isLink && event.which > 1) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey)\n )\n}\n"],"names":["Method","modal","listener","show","html","JSON","stringify","document","createElement","page","innerHTML","querySelectorAll","forEach","a","setAttribute","this","style","position","width","height","padding","boxSizing","backgroundColor","zIndex","addEventListener","hide","iframe","borderRadius","appendChild","body","prepend","overflow","contentWindow","open","write","outerHTML","close","hideOnEscape","bind","removeEventListener","event","keyCode","fn","delay","clearTimeout","timeoutID","setTimeout","apply","_this","source","form","parentKey","Object","prototype","hasOwnProperty","call","key","append","composeKey","parent","value","Array","isArray","from","keys","index","toString","toISOString","name","objectToFormData","href","window","location","method","data","qsArrayFormat","test","hasHost","startsWith","hasAbsolutePath","includes","GET","length","url","search","qs","deepmerge","ignoreQueryPrefix","encodeValuesOnly","arrayFormat","protocol","host","pathname","hasRelativePath","substring","hasSearch","hasHash","hash","join","options","dispatchEvent","visit","detail","init","resolveComponent","swapComponent","initialPage","setNavigationType","clearRememberedStateOnReload","isBackForwardVisit","handleBackForwardVisit","isLocationVisit","handleLocationVisit","handleInitialPageVisit","setupEventListeners","navigationType","performance","getEntriesByType","type","history","state","_window$history$state","rememberedState","setPage","preserveState","then","handlePopstateEvent","debounce","handleScrollEvent","scrollRegions","target","hasAttribute","saveScrollPositions","replaceState","map","region","top","scrollTop","left","scrollLeft","resetScrollPositions","scrollTo","getElementById","slice","scrollIntoView","restoreScrollPositions","scrollPosition","version","preserveScroll","_this2","fireNavigateEvent","locationVisit","sessionStorage","setItem","urlWithoutHash","reload","error","getItem","parse","removeItem","_window$history$state3","_window$history$state5","_this3","isLocationVisitResponse","response","status","headers","isInertiaResponse","createVisitId","visitId","cancelVisit","activeVisit","cancelled","interrupted","completed","cancelToken","cancel","onCancel","fireFinishEvent","onFinish","finishVisit","resolvePreserveOption","props","errors","replace","only","errorBag","forceFormData","onCancelToken","onBefore","onStart","onProgress","onSuccess","onError","queryStringArrayFormat","hrefToUrl","values","some","hasFiles","mergeDataIntoQueryString","_data","cancelable","fireBeforeEvent","Axios","CancelToken","_this4","fireStartEvent","params","token","Accept","X-Requested-With","X-Inertia","X-Inertia-Partial-Component","component","X-Inertia-Partial-Data","X-Inertia-Error-Bag","X-Inertia-Version","onUploadProgress","progress","percentage","Math","round","loaded","total","fireProgressEvent","reject","pageResponse","_window$history$state6","requestUrl","responseUrl","fireErrorEvent","scopedErrors","locationUrl","isCancel","exception","throwException","resolve","_this5","pushState","Promise","_this6","get","console","warn","post","POST","put","PUT","patch","PATCH","DELETE","remember","isServer","_this$page","restore","_window$history$state7","_window$history$state8","on","callback","defaultPrevented","preventDefault","start","finish","timeout","NProgress","isStarted","_event$detail$progres","set","max","done","remove","buildDOMElement","tag","template","content","firstChild","script","node","getAttributeNames","getAttribute","isInertiaManagedElement","element","nodeType","Node","ELEMENT_NODE","findMatchingElementIndex","elements","findIndex","update","head","childNodes","filter","targetElement","sourceElements","splice","sourceElement","isEqualNode","parentNode","replaceChild","removeChild","titleCallback","onUpdate","title","states","reduce","carry","concat","indexOf","match","defaults","collect","Renderer","commit","forceUpdate","createProvider","lastProviderId","id","connect","disconnect","color","includeCSS","showSpinner","addEventListeners","configure","textContent","injectCSS","currentTarget","tagName","toLowerCase","isContentEditable","isLink","which","altKey","ctrlKey","metaKey","shiftKey"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { exit } from 'process';
2
+ import { createServer } from 'http';
3
+
4
+ const readableToString = readable => new Promise((resolve, reject) => {
5
+ let data = '';
6
+ readable.on('data', chunk => data += chunk);
7
+ readable.on('end', () => resolve(data));
8
+ readable.on('error', err => reject(err));
9
+ });
10
+
11
+ var server = ((render, port) => {
12
+ const _port = port || 13714;
13
+
14
+ const routes = {
15
+ '/health': async () => ({
16
+ status: 'OK',
17
+ timestamp: Date.now()
18
+ }),
19
+ '/shutdown': () => exit(),
20
+ '/render': async request => render(JSON.parse(await readableToString(request))),
21
+ '/404': async () => ({
22
+ status: 'NOT_FOUND',
23
+ timestamp: Date.now()
24
+ })
25
+ };
26
+ createServer(async (request, response) => {
27
+ const dispatchRoute = routes[request.url] || routes['/404'];
28
+
29
+ try {
30
+ response.writeHead(200, {
31
+ 'Content-Type': 'application/json',
32
+ Server: 'Inertia.js SSR'
33
+ });
34
+ response.write(JSON.stringify(await dispatchRoute(request)));
35
+ } catch (e) {
36
+ console.error(e);
37
+ }
38
+
39
+ response.end();
40
+ }).listen(_port, () => console.log('Inertia SSR server started.'));
41
+ console.log(`Starting SSR server on port ${_port}...`);
42
+ });
43
+
44
+ export default server;
45
+ //# sourceMappingURL=server.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.esm.js","sources":["../src/server.ts"],"sourcesContent":["import * as process from 'process'\nimport { createServer, IncomingMessage } from 'http'\nimport { Page, InertiaAppResponse } from './types'\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage) => Promise<unknown>\n\nconst readableToString: (readable: IncomingMessage) => Promise<string> = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, port?: number): void => {\n const _port = port || 13714\n\n const routes: Record<string, RouteHandler> = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': () => process.exit(),\n '/render': async (request) => render(JSON.parse(await readableToString(request))),\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[<string>request.url] || routes['/404']\n\n try {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(await dispatchRoute(request)))\n } catch (e) {\n console.error(e)\n }\n\n response.end()\n }).listen(_port, () => console.log('Inertia SSR server started.'))\n\n console.log(`Starting SSR server on port ${_port}...`)\n}\n"],"names":["readableToString","readable","Promise","resolve","reject","data","on","chunk","err","render","port","_port","routes","status","timestamp","Date","now","process","request","JSON","parse","createServer","response","dispatchRoute","url","writeHead","Server","write","stringify","e","console","error","end","listen","log"],"mappings":";;;AAOA,MAAMA,gBAAgB,GAAoDC,QAAD,IACvE,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV;EACV,IAAIC,IAAI,GAAG,EAAX;EACAJ,QAAQ,CAACK,EAAT,CAAY,MAAZ,EAAqBC,KAAD,IAAYF,IAAI,IAAIE,KAAxC;EACAN,QAAQ,CAACK,EAAT,CAAY,KAAZ,EAAmB,MAAMH,OAAO,CAACE,IAAD,CAAhC;EACAJ,QAAQ,CAACK,EAAT,CAAY,OAAZ,EAAsBE,GAAD,IAASJ,MAAM,CAACI,GAAD,CAApC;AACD,CALD,CADF;;AAQA,cAAe,CAACC,MAAD,EAAsBC,IAAtB;EACb,MAAMC,KAAK,GAAGD,IAAI,IAAI,KAAtB;;EAEA,MAAME,MAAM,GAAiC;IAC3C,WAAW,aAAa;MAAEC,MAAM,EAAE,IAAV;MAAgBC,SAAS,EAAEC,IAAI,CAACC,GAAL;KAAxC,CADgC;IAE3C,aAAa,MAAMC,IAAA,EAFwB;IAG3C,WAAW,MAAOC,OAAP,IAAmBT,MAAM,CAACU,IAAI,CAACC,KAAL,CAAW,MAAMpB,gBAAgB,CAACkB,OAAD,CAAjC,CAAD,CAHO;IAI3C,QAAQ,aAAa;MAAEL,MAAM,EAAE,WAAV;MAAuBC,SAAS,EAAEC,IAAI,CAACC,GAAL;KAA/C;GAJV;EAOAK,YAAY,CAAC,OAAOH,OAAP,EAAgBI,QAAhB;IACX,MAAMC,aAAa,GAAGX,MAAM,CAASM,OAAO,CAACM,GAAjB,CAAN,IAA+BZ,MAAM,CAAC,MAAD,CAA3D;;IAEA,IAAI;MACFU,QAAQ,CAACG,SAAT,CAAmB,GAAnB,EAAwB;QAAE,gBAAgB,kBAAlB;QAAsCC,MAAM,EAAE;OAAtE;MACAJ,QAAQ,CAACK,KAAT,CAAeR,IAAI,CAACS,SAAL,CAAe,MAAML,aAAa,CAACL,OAAD,CAAlC,CAAf;KAFF,CAGE,OAAOW,CAAP,EAAU;MACVC,OAAO,CAACC,KAAR,CAAcF,CAAd;;;IAGFP,QAAQ,CAACU,GAAT;GAVU,CAAZ,CAWGC,MAXH,CAWUtB,KAXV,EAWiB,MAAMmB,OAAO,CAACI,GAAR,CAAY,6BAAZ,CAXvB;EAaAJ,OAAO,CAACI,GAAR,gCAA2CvB,UAA3C;AACD,CAxBD;;;;"}
package/dist/server.js ADDED
@@ -0,0 +1,45 @@
1
+ var process = require('process');
2
+ var http = require('http');
3
+
4
+ const readableToString = readable => new Promise((resolve, reject) => {
5
+ let data = '';
6
+ readable.on('data', chunk => data += chunk);
7
+ readable.on('end', () => resolve(data));
8
+ readable.on('error', err => reject(err));
9
+ });
10
+
11
+ var server = ((render, port) => {
12
+ const _port = port || 13714;
13
+
14
+ const routes = {
15
+ '/health': async () => ({
16
+ status: 'OK',
17
+ timestamp: Date.now()
18
+ }),
19
+ '/shutdown': () => process.exit(),
20
+ '/render': async request => render(JSON.parse(await readableToString(request))),
21
+ '/404': async () => ({
22
+ status: 'NOT_FOUND',
23
+ timestamp: Date.now()
24
+ })
25
+ };
26
+ http.createServer(async (request, response) => {
27
+ const dispatchRoute = routes[request.url] || routes['/404'];
28
+
29
+ try {
30
+ response.writeHead(200, {
31
+ 'Content-Type': 'application/json',
32
+ Server: 'Inertia.js SSR'
33
+ });
34
+ response.write(JSON.stringify(await dispatchRoute(request)));
35
+ } catch (e) {
36
+ console.error(e);
37
+ }
38
+
39
+ response.end();
40
+ }).listen(_port, () => console.log('Inertia SSR server started.'));
41
+ console.log(`Starting SSR server on port ${_port}...`);
42
+ });
43
+
44
+ module.exports = server;
45
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sources":["../src/server.ts"],"sourcesContent":["import * as process from 'process'\nimport { createServer, IncomingMessage } from 'http'\nimport { Page, InertiaAppResponse } from './types'\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage) => Promise<unknown>\n\nconst readableToString: (readable: IncomingMessage) => Promise<string> = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, port?: number): void => {\n const _port = port || 13714\n\n const routes: Record<string, RouteHandler> = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': () => process.exit(),\n '/render': async (request) => render(JSON.parse(await readableToString(request))),\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[<string>request.url] || routes['/404']\n\n try {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(await dispatchRoute(request)))\n } catch (e) {\n console.error(e)\n }\n\n response.end()\n }).listen(_port, () => console.log('Inertia SSR server started.'))\n\n console.log(`Starting SSR server on port ${_port}...`)\n}\n"],"names":["readableToString","readable","Promise","resolve","reject","data","on","chunk","err","render","port","_port","routes","status","timestamp","Date","now","process","request","JSON","parse","createServer","response","dispatchRoute","url","writeHead","Server","write","stringify","e","console","error","end","listen","log"],"mappings":";;;AAOA,MAAMA,gBAAgB,GAAoDC,QAAD,IACvE,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV;EACV,IAAIC,IAAI,GAAG,EAAX;EACAJ,QAAQ,CAACK,EAAT,CAAY,MAAZ,EAAqBC,KAAD,IAAYF,IAAI,IAAIE,KAAxC;EACAN,QAAQ,CAACK,EAAT,CAAY,KAAZ,EAAmB,MAAMH,OAAO,CAACE,IAAD,CAAhC;EACAJ,QAAQ,CAACK,EAAT,CAAY,OAAZ,EAAsBE,GAAD,IAASJ,MAAM,CAACI,GAAD,CAApC;AACD,CALD,CADF;;AAQA,cAAe,CAACC,MAAD,EAAsBC,IAAtB;EACb,MAAMC,KAAK,GAAGD,IAAI,IAAI,KAAtB;;EAEA,MAAME,MAAM,GAAiC;IAC3C,WAAW,aAAa;MAAEC,MAAM,EAAE,IAAV;MAAgBC,SAAS,EAAEC,IAAI,CAACC,GAAL;KAAxC,CADgC;IAE3C,aAAa,MAAMC,YAAA,EAFwB;IAG3C,WAAW,MAAOC,OAAP,IAAmBT,MAAM,CAACU,IAAI,CAACC,KAAL,CAAW,MAAMpB,gBAAgB,CAACkB,OAAD,CAAjC,CAAD,CAHO;IAI3C,QAAQ,aAAa;MAAEL,MAAM,EAAE,WAAV;MAAuBC,SAAS,EAAEC,IAAI,CAACC,GAAL;KAA/C;GAJV;EAOAK,iBAAY,CAAC,OAAOH,OAAP,EAAgBI,QAAhB;IACX,MAAMC,aAAa,GAAGX,MAAM,CAASM,OAAO,CAACM,GAAjB,CAAN,IAA+BZ,MAAM,CAAC,MAAD,CAA3D;;IAEA,IAAI;MACFU,QAAQ,CAACG,SAAT,CAAmB,GAAnB,EAAwB;QAAE,gBAAgB,kBAAlB;QAAsCC,MAAM,EAAE;OAAtE;MACAJ,QAAQ,CAACK,KAAT,CAAeR,IAAI,CAACS,SAAL,CAAe,MAAML,aAAa,CAACL,OAAD,CAAlC,CAAf;KAFF,CAGE,OAAOW,CAAP,EAAU;MACVC,OAAO,CAACC,KAAR,CAAcF,CAAd;;;IAGFP,QAAQ,CAACU,GAAT;GAVU,CAAZ,CAWGC,MAXH,CAWUtB,KAXV,EAWiB,MAAMmB,OAAO,CAACI,GAAR,CAAY,6BAAZ,CAXvB;EAaAJ,OAAO,CAACI,GAAR,gCAA2CvB,UAA3C;AACD,CAxBD;;;;"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@inertiajs/core",
3
+ "version": "1.0.0-beta.1",
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
+ "source": "src/index.ts",
25
+ "main": "dist/index.js",
26
+ "unpkg": "dist/index.umd.js",
27
+ "types": "types/index.d.ts",
28
+ "exports": {
29
+ ".": "./dist/index.js",
30
+ "./server": "./dist/server.js"
31
+ },
32
+ "scripts": {
33
+ "build": "npm run clean && npm run build:browser && npm run build:server",
34
+ "build:browser": "microbundle --format es,cjs",
35
+ "build:server": "microbundle --format es,cjs --target node --output ./dist/server.js ./src/server.ts",
36
+ "clean": "rm -rf types && rm -rf dist",
37
+ "prepublishOnly": "npm run build",
38
+ "watch": "microbundle watch --format es,cjs"
39
+ },
40
+ "dependencies": {
41
+ "axios": "^0.27.0",
42
+ "deepmerge": "^4.0.0",
43
+ "nprogress": "^0.2.0",
44
+ "qs": "^6.9.0"
45
+ },
46
+ "devDependencies": {
47
+ "@types/deepmerge": "^2.2.0",
48
+ "@types/node": "^14.0",
49
+ "@types/nprogress": "^0.2.0",
50
+ "@types/qs": "^6.9.0",
51
+ "microbundle": "^0.12.0",
52
+ "typescript": "^4.2.4"
53
+ }
54
+ }
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,7 @@
1
+ import { Router } from './router';
2
+ export * from './types';
3
+ export { default as setupProgress } from './progress';
4
+ export { default as createHeadManager } from './head';
5
+ export { default as shouldIntercept } from './shouldIntercept';
6
+ export { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url';
7
+ 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,58 @@
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
+ visit(href: string | URL, { method, data, replace, preserveScroll, preserveState, only, headers, errorBag, forceFormData, onCancelToken, onBefore, onStart, onProgress, onFinish, onCancel, onSuccess, onError, queryStringArrayFormat, }?: VisitOptions): void;
39
+ protected setPage(page: Page, { visitId, replace, preserveScroll, preserveState, }?: {
40
+ visitId?: VisitId;
41
+ replace?: boolean;
42
+ preserveScroll?: PreserveStateOption;
43
+ preserveState?: PreserveStateOption;
44
+ }): Promise<void>;
45
+ protected pushState(page: Page): void;
46
+ protected replaceState(page: Page): void;
47
+ protected handlePopstateEvent(event: PopStateEvent): void;
48
+ get(url: URL | string, data?: RequestPayload, options?: Exclude<VisitOptions, 'method' | 'data'>): void;
49
+ reload(options?: Exclude<VisitOptions, 'preserveScroll' | 'preserveState'>): void;
50
+ replace(url: URL | string, options?: Exclude<VisitOptions, 'replace'>): void;
51
+ post(url: URL | string, data?: RequestPayload, options?: Exclude<VisitOptions, 'method' | 'data'>): void;
52
+ put(url: URL | string, data?: RequestPayload, options?: Exclude<VisitOptions, 'method' | 'data'>): void;
53
+ patch(url: URL | string, data?: RequestPayload, options?: Exclude<VisitOptions, 'method' | 'data'>): void;
54
+ delete(url: URL | string, options?: Exclude<VisitOptions, 'method'>): void;
55
+ remember(data: unknown, key?: string): void;
56
+ restore(key?: string): unknown;
57
+ on<TEventName extends GlobalEventNames>(type: TEventName, callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>): VoidFunction;
58
+ }
@@ -0,0 +1,4 @@
1
+ import { Page, InertiaAppResponse } from './types';
2
+ declare type AppCallback = (page: Page) => InertiaAppResponse;
3
+ declare const _default: (render: AppCallback, port?: number | undefined) => void;
4
+ export default _default;
@@ -0,0 +1 @@
1
+ export default function shouldIntercept(event: KeyboardEvent): boolean;
@@ -0,0 +1,173 @@
1
+ import { AxiosResponse, CancelTokenSource } from 'axios';
2
+ export declare type Errors = Record<string, string>;
3
+ export declare type ErrorBag = Record<string, Errors>;
4
+ export declare type FormDataConvertible = Array<FormDataConvertible> | Blob | FormDataEntryValue | Date | boolean | number | null | undefined;
5
+ export declare enum Method {
6
+ GET = "get",
7
+ POST = "post",
8
+ PUT = "put",
9
+ PATCH = "patch",
10
+ DELETE = "delete"
11
+ }
12
+ export declare type RequestPayload = Record<string, FormDataConvertible> | FormData;
13
+ export interface PageProps {
14
+ [key: string]: unknown;
15
+ }
16
+ export interface Page<SharedProps = PageProps> {
17
+ component: string;
18
+ props: PageProps & SharedProps & {
19
+ errors: Errors & ErrorBag;
20
+ };
21
+ url: string;
22
+ version: string | null;
23
+ scrollRegions: Array<{
24
+ top: number;
25
+ left: number;
26
+ }>;
27
+ rememberedState: Record<string, unknown>;
28
+ resolvedErrors: Errors;
29
+ }
30
+ export declare type PageResolver = (name: string) => Component;
31
+ export declare type PageHandler = ({ component, page, preserveState, }: {
32
+ component: Component;
33
+ page: Page;
34
+ preserveState: PreserveStateOption;
35
+ }) => Promise<unknown>;
36
+ export declare type PreserveStateOption = boolean | string | ((page: Page) => boolean);
37
+ export declare type Progress = ProgressEvent & {
38
+ percentage: number;
39
+ };
40
+ export declare type LocationVisit = {
41
+ preserveScroll: boolean;
42
+ };
43
+ export declare type Visit = {
44
+ method: Method;
45
+ data: RequestPayload;
46
+ replace: boolean;
47
+ preserveScroll: PreserveStateOption;
48
+ preserveState: PreserveStateOption;
49
+ only: Array<string>;
50
+ headers: Record<string, string>;
51
+ errorBag: string | null;
52
+ forceFormData: boolean;
53
+ queryStringArrayFormat: 'indices' | 'brackets';
54
+ };
55
+ export declare type GlobalEventsMap = {
56
+ before: {
57
+ parameters: [PendingVisit];
58
+ details: {
59
+ visit: PendingVisit;
60
+ };
61
+ result: boolean | void;
62
+ };
63
+ start: {
64
+ parameters: [PendingVisit];
65
+ details: {
66
+ visit: PendingVisit;
67
+ };
68
+ result: void;
69
+ };
70
+ progress: {
71
+ parameters: [Progress | undefined];
72
+ details: {
73
+ progress: Progress | undefined;
74
+ };
75
+ result: void;
76
+ };
77
+ finish: {
78
+ parameters: [ActiveVisit];
79
+ details: {
80
+ visit: ActiveVisit;
81
+ };
82
+ result: void;
83
+ };
84
+ cancel: {
85
+ parameters: [];
86
+ details: {};
87
+ result: void;
88
+ };
89
+ navigate: {
90
+ parameters: [Page];
91
+ details: {
92
+ page: Page;
93
+ };
94
+ result: void;
95
+ };
96
+ success: {
97
+ parameters: [Page];
98
+ details: {
99
+ page: Page;
100
+ };
101
+ result: void;
102
+ };
103
+ error: {
104
+ parameters: [Errors];
105
+ details: {
106
+ errors: Errors;
107
+ };
108
+ result: void;
109
+ };
110
+ invalid: {
111
+ parameters: [AxiosResponse];
112
+ details: {
113
+ response: AxiosResponse;
114
+ };
115
+ result: boolean | void;
116
+ };
117
+ exception: {
118
+ parameters: [Error];
119
+ details: {
120
+ exception: Error;
121
+ };
122
+ result: boolean | void;
123
+ };
124
+ };
125
+ export declare type GlobalEventNames = keyof GlobalEventsMap;
126
+ export declare type GlobalEvent<TEventName extends GlobalEventNames> = CustomEvent<GlobalEventDetails<TEventName>>;
127
+ export declare type GlobalEventParameters<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['parameters'];
128
+ export declare type GlobalEventResult<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['result'];
129
+ export declare type GlobalEventDetails<TEventName extends GlobalEventNames> = GlobalEventsMap[TEventName]['details'];
130
+ export declare type GlobalEventTrigger<TEventName extends GlobalEventNames> = (...params: GlobalEventParameters<TEventName>) => GlobalEventResult<TEventName>;
131
+ export declare type GlobalEventCallback<TEventName extends GlobalEventNames> = (...params: GlobalEventParameters<TEventName>) => GlobalEventResult<TEventName>;
132
+ export declare type VisitOptions = Partial<Visit & {
133
+ onCancelToken: {
134
+ ({ cancel }: {
135
+ cancel: VoidFunction;
136
+ }): void;
137
+ };
138
+ onBefore: GlobalEventCallback<'before'>;
139
+ onStart: GlobalEventCallback<'start'>;
140
+ onProgress: GlobalEventCallback<'progress'>;
141
+ onFinish: GlobalEventCallback<'finish'>;
142
+ onCancel: GlobalEventCallback<'cancel'>;
143
+ onSuccess: GlobalEventCallback<'success'>;
144
+ onError: GlobalEventCallback<'error'>;
145
+ }>;
146
+ export declare type PendingVisit = Visit & {
147
+ url: URL;
148
+ completed: boolean;
149
+ cancelled: boolean;
150
+ interrupted: boolean;
151
+ };
152
+ export declare type ActiveVisit = PendingVisit & Required<VisitOptions> & {
153
+ cancelToken: CancelTokenSource;
154
+ };
155
+ export declare type VisitId = unknown;
156
+ export declare type Component = unknown;
157
+ export declare type InertiaAppResponse = Promise<{
158
+ head: string[];
159
+ body: string;
160
+ } | void>;
161
+ declare global {
162
+ interface DocumentEventMap {
163
+ 'inertia:before': GlobalEvent<'before'>;
164
+ 'inertia:start': GlobalEvent<'start'>;
165
+ 'inertia:progress': GlobalEvent<'progress'>;
166
+ 'inertia:success': GlobalEvent<'success'>;
167
+ 'inertia:error': GlobalEvent<'error'>;
168
+ 'inertia:invalid': GlobalEvent<'invalid'>;
169
+ 'inertia:exception': GlobalEvent<'exception'>;
170
+ 'inertia:finish': GlobalEvent<'finish'>;
171
+ 'inertia:navigate': GlobalEvent<'navigate'>;
172
+ }
173
+ }
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;