@inertiajs/vue3 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{router as e,createHeadManager as r,setupProgress as t,mergeDataIntoQueryString as n,shouldIntercept as o}from"@inertiajs/core";export{router}from"@inertiajs/core";import{reactive as i,watch as u,ref as s,shallowRef as a,computed as c,markRaw as l,h as f,createSSRApp as p,isReactive as d}from"vue";import m from"lodash.clonedeep";import h from"lodash.isequal";function v(){return(v=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var y={created:function(){var r=this;if(this.$options.remember){Array.isArray(this.$options.remember)&&(this.$options.remember={data:this.$options.remember}),"string"==typeof this.$options.remember&&(this.$options.remember={data:[this.$options.remember]}),"string"==typeof this.$options.remember.data&&(this.$options.remember={data:[this.$options.remember.data]});var t=this.$options.remember.key instanceof Function?this.$options.remember.key.call(this):this.$options.remember.key,n=e.restore(t),o=this.$options.remember.data.filter(function(e){return!(null!==r[e]&&"object"==typeof r[e]&&!1===r[e].__rememberable)}),i=function(e){return null!==r[e]&&"object"==typeof r[e]&&"function"==typeof r[e].__remember&&"function"==typeof r[e].__restore};o.forEach(function(u){void 0!==r[u]&&void 0!==n&&void 0!==n[u]&&(i(u)?r[u].__restore(n[u]):r[u]=n[u]),r.$watch(u,function(){e.remember(o.reduce(function(e,t){var n;return v({},e,((n={})[t]=m(i(t)?r[t].__remember():r[t]),n))},{}),t)},{immediate:!0,deep:!0})})}}};function g(){var r=[].slice.call(arguments),t="string"==typeof r[0]?r[0]:null,n=("string"==typeof r[0]?r[1]:r[0])||{},o=t?e.restore(t):null,s=m(n),a=null,c=null,l=function(e){return e},f=i(v({},o?o.data:n,{isDirty:!1,errors:o?o.errors:{},hasErrors:!1,processing:!1,progress:null,wasSuccessful:!1,recentlySuccessful:!1,data:function(){var e=this;return Object.keys(n).reduce(function(r,t){return r[t]=e[t],r},{})},transform:function(e){return l=e,this},defaults:function(e,r){var t;return s=void 0===e?this.data():Object.assign({},m(s),r?((t={})[e]=r,t):e),this},reset:function(){var e=[].slice.call(arguments),r=m(s);return Object.assign(this,0===e.length?r:Object.keys(r).filter(function(r){return e.includes(r)}).reduce(function(e,t){return e[t]=r[t],e},{})),this},setError:function(e,r){var t;return Object.assign(this.errors,r?((t={})[e]=r,t):e),this.hasErrors=Object.keys(this.errors).length>0,this},clearErrors:function(){var e=this,r=[].slice.call(arguments);return this.errors=Object.keys(this.errors).reduce(function(t,n){var o;return v({},t,r.length>0&&!r.includes(n)?((o={})[n]=e.errors[n],o):{})},{}),this.hasErrors=Object.keys(this.errors).length>0,this},submit:function(r,t,n){var o=this,i=this;void 0===n&&(n={});var u=l(this.data()),f=v({},n,{onCancelToken:function(e){if(a=e,n.onCancelToken)return n.onCancelToken(e)},onBefore:function(e){if(i.wasSuccessful=!1,i.recentlySuccessful=!1,clearTimeout(c),n.onBefore)return n.onBefore(e)},onStart:function(e){if(i.processing=!0,n.onStart)return n.onStart(e)},onProgress:function(e){if(i.progress=e,n.onProgress)return n.onProgress(e)},onSuccess:function(e){try{var r=function(e){return s=m(o.data()),o.isDirty=!1,e};return o.processing=!1,o.progress=null,o.clearErrors(),o.wasSuccessful=!0,o.recentlySuccessful=!0,c=setTimeout(function(){return o.recentlySuccessful=!1},2e3),Promise.resolve(n.onSuccess?Promise.resolve(n.onSuccess(e)).then(r):r(null))}catch(e){return Promise.reject(e)}},onError:function(e){if(i.processing=!1,i.progress=null,i.clearErrors().setError(e),n.onError)return n.onError(e)},onCancel:function(){if(i.processing=!1,i.progress=null,n.onCancel)return n.onCancel()},onFinish:function(){if(i.processing=!1,i.progress=null,a=null,n.onFinish)return n.onFinish()}});"delete"===r?e.delete(t,v({},f,{data:u})):e[r](t,u,f)},get:function(e,r){this.submit("get",e,r)},post:function(e,r){this.submit("post",e,r)},put:function(e,r){this.submit("put",e,r)},patch:function(e,r){this.submit("patch",e,r)},delete:function(e,r){this.submit("delete",e,r)},cancel:function(){a&&a.cancel()},__rememberable:null===t,__remember:function(){return{data:this.data(),errors:this.errors}},__restore:function(e){Object.assign(this,e.data),this.setError(e.errors)}}));return u(f,function(r){f.isDirty=!h(f.data(),s),t&&e.remember(m(r.__remember()),t)},{immediate:!0,deep:!0}),f}var b=s(null),S=s({}),k=a(null),P=s(null),C=null,j={name:"Inertia",props:{initialPage:{type:Object,required:!0},initialComponent:{type:Object,required:!1},resolveComponent:{type:Function,required:!1},titleCallback:{type:Function,required:!1,default:function(e){return e}},onHeadUpdate:{type:Function,required:!1,default:function(){return function(){}}}},setup:function(t){var n=t.initialPage,o=t.initialComponent,i=t.resolveComponent,u=t.titleCallback,s=t.onHeadUpdate;b.value=o?l(o):null,S.value=n,P.value=null;var a="undefined"==typeof window;return C=r(a,u,s),a||(e.init({initialPage:n,resolveComponent:i,swapComponent:function(e){try{return b.value=l(e.component),S.value=e.page,P.value=e.preserveState?P.value:Date.now(),Promise.resolve()}catch(e){return Promise.reject(e)}}}),e.on("navigate",function(){return C.forceUpdate()})),function(){if(b.value){b.value.inheritAttrs=!!b.value.inheritAttrs;var e=f(b.value,v({},S.value.props,{key:P.value}));return k.value&&(b.value.layout=k.value,k.value=null),b.value.layout?"function"==typeof b.value.layout?b.value.layout(f,e):(Array.isArray(b.value.layout)?b.value.layout:[b.value.layout]).concat(e).reverse().reduce(function(e,r){return r.inheritAttrs=!!r.inheritAttrs,f(r,v({},S.value.props),function(){return e})}):e}}}},_={install:function(r){e.form=g,Object.defineProperty(r.config.globalProperties,"$inertia",{get:function(){return e}}),Object.defineProperty(r.config.globalProperties,"$page",{get:function(){return S.value}}),Object.defineProperty(r.config.globalProperties,"$headManager",{get:function(){return C}}),r.mixin(y)}};function O(){return{props:c(function(){return S.value.props}),url:c(function(){return S.value.url}),component:c(function(){return S.value.component}),version:c(function(){return S.value.version})}}function T(e){k.value=e}var E=function(e){try{var r,n,o,i,u,s,a,c,l;n=void 0===(r=e.id)?"app":r,o=e.resolve,i=e.setup,u=e.title,a=void 0===(s=e.progress)?{}:s,c=e.page,l=e.render;var d="undefined"==typeof window,m=d?null:document.getElementById(n),h=c||JSON.parse(m.dataset.page),v=function(e){return Promise.resolve(o(e)).then(function(e){return e.default||e})},y=[];return Promise.resolve(v(h.component).then(function(e){return i({el:m,App:j,props:{initialPage:h,initialComponent:e,resolveComponent:v,titleCallback:u,onHeadUpdate:d?function(e){return y=e}:null},plugin:_})})).then(function(e){return!d&&a&&t(a),function(){if(d)return Promise.resolve(l(p({render:function(){return f("div",{id:n,"data-page":JSON.stringify(h),innerHTML:l(e)})}}))).then(function(e){return{head:y,body:e}})}()})}catch(e){return Promise.reject(e)}},$={props:{title:{type:String,required:!1}},data:function(){return{provider:this.$headManager.createProvider()}},beforeUnmount:function(){this.provider.disconnect()},methods:{isUnaryTag:function(e){return["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"].indexOf(e.type)>-1},renderTagStart:function(e){e.props=e.props||{},e.props.inertia=void 0!==e.props["head-key"]?e.props["head-key"]:"";var r=Object.keys(e.props).reduce(function(r,t){var n=e.props[t];return["key","head-key"].includes(t)?r:""===n?r+" "+t:r+" "+t+'="'+n+'"'},"");return"<"+e.type+r+">"},renderTagChildren:function(e){var r=this;return"string"==typeof e.children?e.children:e.children.reduce(function(e,t){return e+r.renderTag(t)},"")},renderTag:function(e){if("Symbol(Text)"===e.type.toString())return e.children;if("Symbol()"===e.type.toString())return"";if("Symbol(Comment)"===e.type.toString())return"";var r=this.renderTagStart(e);return e.children&&(r+=this.renderTagChildren(e)),this.isUnaryTag(e)||(r+="</"+e.type+">"),r},addTitleElement:function(e){return this.title&&!e.find(function(e){return e.startsWith("<title")})&&e.push("<title inertia>"+this.title+"</title>"),e},renderNodes:function(e){var r=this;return this.addTitleElement(e.flatMap(function(e){return"Symbol(Fragment)"===e.type.toString()?e.children:e}).map(function(e){return r.renderTag(e)}).filter(function(e){return e}))}},render:function(){this.provider.update(this.renderNodes(this.$slots.default?this.$slots.default():[]))}},w={name:"Link",props:{as:{type:String,default:"a"},data:{type:Object,default:function(){return{}}},href:{type:String},method:{type:String,default:"get"},replace:{type:Boolean,default:!1},preserveScroll:{type:Boolean,default:!1},preserveState:{type:Boolean,default:null},only:{type:Array,default:function(){return[]}},headers:{type:Object,default:function(){return{}}},queryStringArrayFormat:{type:String,default:"brackets"}},setup:function(r,t){var i=t.slots,u=t.attrs;return function(r){var t=r.as.toLowerCase(),s=r.method.toLowerCase(),a=n(s,r.href||"",r.data,r.queryStringArrayFormat),c=a[0],l=a[1];return"a"===t&&"get"!==s&&console.warn('Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes "Open Link in New Tab/Window" accessibility issues.\n\nPlease specify a more appropriate element using the "as" attribute. For example:\n\n<Link href="'+c+'" method="'+s+'" as="button">...</Link>'),f(r.as,v({},u,"a"===t?{href:c}:{},{onClick:function(t){var n;o(t)&&(t.preventDefault(),e.visit(c,{data:l,method:s,replace:r.replace,preserveScroll:r.preserveScroll,preserveState:null!=(n=r.preserveState)?n:"get"!==s,only:r.only,headers:r.headers,onCancelToken:u.onCancelToken||function(){return{}},onBefore:u.onBefore||function(){return{}},onStart:u.onStart||function(){return{}},onProgress:u.onProgress||function(){return{}},onFinish:u.onFinish||function(){return{}},onCancel:u.onCancel||function(){return{}},onSuccess:u.onSuccess||function(){return{}},onError:u.onError||function(){return{}}}))}}),i)}}};function A(r,t){if("object"==typeof r&&null!==r&&!1===r.__rememberable)return r;var n=e.restore(t),o=d(r)?i:s,a="function"==typeof r.__remember&&"function"==typeof r.__restore,c=void 0===n?r:o(a?r.__restore(n):n);return u(c,function(n){e.remember(m(a?r.__remember():n),t)},{immediate:!0,deep:!0}),c}export{$ as Head,w as Link,E as createInertiaApp,T as defineLayout,g as useForm,O as usePage,A as useRemember};
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/remember.js","../src/useForm.js","../src/app.js","../src/createInertiaApp.js","../src/head.js","../src/link.js","../src/useRemember.js"],"sourcesContent":["import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\n\nexport default {\n created() {\n if (!this.$options.remember) {\n return\n }\n\n if (Array.isArray(this.$options.remember)) {\n this.$options.remember = { data: this.$options.remember }\n }\n\n if (typeof this.$options.remember === 'string') {\n this.$options.remember = { data: [this.$options.remember] }\n }\n\n if (typeof this.$options.remember.data === 'string') {\n this.$options.remember = { data: [this.$options.remember.data] }\n }\n\n const rememberKey =\n this.$options.remember.key instanceof Function\n ? this.$options.remember.key.call(this)\n : this.$options.remember.key\n\n const restored = router.restore(rememberKey)\n\n const rememberable = this.$options.remember.data.filter((key) => {\n return !(this[key] !== null && typeof this[key] === 'object' && this[key].__rememberable === false)\n })\n\n const hasCallbacks = (key) => {\n return (\n this[key] !== null &&\n typeof this[key] === 'object' &&\n typeof this[key].__remember === 'function' &&\n typeof this[key].__restore === 'function'\n )\n }\n\n rememberable.forEach((key) => {\n if (this[key] !== undefined && restored !== undefined && restored[key] !== undefined) {\n hasCallbacks(key) ? this[key].__restore(restored[key]) : (this[key] = restored[key])\n }\n\n this.$watch(\n key,\n () => {\n router.remember(\n rememberable.reduce(\n (data, key) => ({\n ...data,\n [key]: cloneDeep(hasCallbacks(key) ? this[key].__remember() : this[key]),\n }),\n {},\n ),\n rememberKey,\n )\n },\n { immediate: true, deep: true },\n )\n })\n },\n}\n","import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\nimport isEqual from 'lodash.isequal'\nimport { reactive, watch } from 'vue'\n\nexport default function useForm(...args) {\n const rememberKey = typeof args[0] === 'string' ? args[0] : null\n const data = (typeof args[0] === 'string' ? args[1] : args[0]) || {}\n const restored = rememberKey ? router.restore(rememberKey) : null\n let defaults = cloneDeep(data)\n let cancelToken = null\n let recentlySuccessfulTimeoutId = null\n let transform = (data) => data\n\n let form = reactive({\n ...(restored ? restored.data : data),\n isDirty: false,\n errors: restored ? restored.errors : {},\n hasErrors: false,\n processing: false,\n progress: null,\n wasSuccessful: false,\n recentlySuccessful: false,\n data() {\n return Object.keys(data).reduce((carry, key) => {\n carry[key] = this[key]\n return carry\n }, {})\n },\n transform(callback) {\n transform = callback\n\n return this\n },\n defaults(key, value) {\n if (typeof key === 'undefined') {\n defaults = this.data()\n } else {\n defaults = Object.assign({}, cloneDeep(defaults), value ? { [key]: value } : key)\n }\n\n return this\n },\n reset(...fields) {\n let clonedDefaults = cloneDeep(defaults)\n if (fields.length === 0) {\n Object.assign(this, clonedDefaults)\n } else {\n Object.assign(\n this,\n Object.keys(clonedDefaults)\n .filter((key) => fields.includes(key))\n .reduce((carry, key) => {\n carry[key] = clonedDefaults[key]\n return carry\n }, {}),\n )\n }\n\n return this\n },\n setError(key, value) {\n Object.assign(this.errors, value ? { [key]: value } : key)\n\n this.hasErrors = Object.keys(this.errors).length > 0\n\n return this\n },\n clearErrors(...fields) {\n this.errors = Object.keys(this.errors).reduce(\n (carry, field) => ({\n ...carry,\n ...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}),\n }),\n {},\n )\n\n this.hasErrors = Object.keys(this.errors).length > 0\n\n return this\n },\n submit(method, url, options = {}) {\n const data = transform(this.data())\n const _options = {\n ...options,\n onCancelToken: (token) => {\n cancelToken = token\n\n if (options.onCancelToken) {\n return options.onCancelToken(token)\n }\n },\n onBefore: (visit) => {\n this.wasSuccessful = false\n this.recentlySuccessful = false\n clearTimeout(recentlySuccessfulTimeoutId)\n\n if (options.onBefore) {\n return options.onBefore(visit)\n }\n },\n onStart: (visit) => {\n this.processing = true\n\n if (options.onStart) {\n return options.onStart(visit)\n }\n },\n onProgress: (event) => {\n this.progress = event\n\n if (options.onProgress) {\n return options.onProgress(event)\n }\n },\n onSuccess: async (page) => {\n this.processing = false\n this.progress = null\n this.clearErrors()\n this.wasSuccessful = true\n this.recentlySuccessful = true\n recentlySuccessfulTimeoutId = setTimeout(() => (this.recentlySuccessful = false), 2000)\n\n const onSuccess = options.onSuccess ? await options.onSuccess(page) : null\n defaults = cloneDeep(this.data())\n this.isDirty = false\n return onSuccess\n },\n onError: (errors) => {\n this.processing = false\n this.progress = null\n this.clearErrors().setError(errors)\n\n if (options.onError) {\n return options.onError(errors)\n }\n },\n onCancel: () => {\n this.processing = false\n this.progress = null\n\n if (options.onCancel) {\n return options.onCancel()\n }\n },\n onFinish: () => {\n this.processing = false\n this.progress = null\n cancelToken = null\n\n if (options.onFinish) {\n return options.onFinish()\n }\n },\n }\n\n if (method === 'delete') {\n router.delete(url, { ..._options, data })\n } else {\n router[method](url, data, _options)\n }\n },\n get(url, options) {\n this.submit('get', url, options)\n },\n post(url, options) {\n this.submit('post', url, options)\n },\n put(url, options) {\n this.submit('put', url, options)\n },\n patch(url, options) {\n this.submit('patch', url, options)\n },\n delete(url, options) {\n this.submit('delete', url, options)\n },\n cancel() {\n if (cancelToken) {\n cancelToken.cancel()\n }\n },\n __rememberable: rememberKey === null,\n __remember() {\n return { data: this.data(), errors: this.errors }\n },\n __restore(restored) {\n Object.assign(this, restored.data)\n this.setError(restored.errors)\n },\n })\n\n watch(\n form,\n (newValue) => {\n form.isDirty = !isEqual(form.data(), defaults)\n if (rememberKey) {\n router.remember(cloneDeep(newValue.__remember()), rememberKey)\n }\n },\n { immediate: true, deep: true },\n )\n\n return form\n}\n","import { createHeadManager, router } from '@inertiajs/core'\nimport { computed, h, markRaw, ref, shallowRef } from 'vue'\nimport remember from './remember'\nimport useForm from './useForm'\n\nconst component = ref(null)\nconst page = ref({})\nconst layout = shallowRef(null)\nconst key = ref(null)\nlet headManager = null\n\nexport default {\n name: 'Inertia',\n props: {\n initialPage: {\n type: Object,\n required: true,\n },\n initialComponent: {\n type: Object,\n required: false,\n },\n resolveComponent: {\n type: Function,\n required: false,\n },\n titleCallback: {\n type: Function,\n required: false,\n default: (title) => title,\n },\n onHeadUpdate: {\n type: Function,\n required: false,\n default: () => () => {},\n },\n },\n setup({ initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate }) {\n component.value = initialComponent ? markRaw(initialComponent) : null\n page.value = initialPage\n key.value = null\n\n const isServer = typeof window === 'undefined'\n headManager = createHeadManager(isServer, titleCallback, onHeadUpdate)\n\n if (!isServer) {\n router.init({\n initialPage,\n resolveComponent,\n swapComponent: async (args) => {\n component.value = markRaw(args.component)\n page.value = args.page\n key.value = args.preserveState ? key.value : Date.now()\n },\n })\n\n router.on('navigate', () => headManager.forceUpdate())\n }\n\n return () => {\n if (component.value) {\n component.value.inheritAttrs = !!component.value.inheritAttrs\n\n const child = h(component.value, {\n ...page.value.props,\n key: key.value,\n })\n\n if (layout.value) {\n component.value.layout = layout.value\n layout.value = null\n }\n\n if (component.value.layout) {\n if (typeof component.value.layout === 'function') {\n return component.value.layout(h, child)\n }\n\n return (Array.isArray(component.value.layout) ? component.value.layout : [component.value.layout])\n .concat(child)\n .reverse()\n .reduce((child, layout) => {\n layout.inheritAttrs = !!layout.inheritAttrs\n return h(layout, { ...page.value.props }, () => child)\n })\n }\n\n return child\n }\n }\n },\n}\n\nexport const plugin = {\n install(app) {\n router.form = useForm\n\n Object.defineProperty(app.config.globalProperties, '$inertia', { get: () => router })\n Object.defineProperty(app.config.globalProperties, '$page', { get: () => page.value })\n Object.defineProperty(app.config.globalProperties, '$headManager', { get: () => headManager })\n\n app.mixin(remember)\n },\n}\n\nexport function usePage() {\n return {\n props: computed(() => page.value.props),\n url: computed(() => page.value.url),\n component: computed(() => page.value.component),\n version: computed(() => page.value.version),\n }\n}\n\nexport function defineLayout(component) {\n layout.value = component\n}\n","import { setupProgress } from '@inertiajs/core'\nimport { createSSRApp, h } from 'vue'\nimport App, { plugin } from './app'\n\nexport default async function createInertiaApp({ id = 'app', resolve, setup, title, progress = {}, page, render }) {\n const isServer = typeof window === 'undefined'\n const el = isServer ? null : document.getElementById(id)\n const initialPage = page || JSON.parse(el.dataset.page)\n const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)\n\n let head = []\n\n const vueApp = await resolveComponent(initialPage.component).then((initialComponent) => {\n return setup({\n el,\n App,\n props: {\n initialPage,\n initialComponent,\n resolveComponent,\n titleCallback: title,\n onHeadUpdate: isServer ? (elements) => (head = elements) : null,\n },\n plugin,\n })\n })\n\n if (!isServer && progress) {\n setupProgress(progress)\n }\n\n if (isServer) {\n const body = await render(\n createSSRApp({\n render: () =>\n h('div', {\n id,\n 'data-page': JSON.stringify(initialPage),\n innerHTML: render(vueApp),\n }),\n }),\n )\n\n return { head, body }\n }\n}\n","export default {\n props: {\n title: {\n type: String,\n required: false,\n },\n },\n data() {\n return {\n provider: this.$headManager.createProvider(),\n }\n },\n beforeUnmount() {\n this.provider.disconnect()\n },\n methods: {\n isUnaryTag(node) {\n return (\n [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n ].indexOf(node.type) > -1\n )\n },\n renderTagStart(node) {\n node.props = node.props || {}\n node.props.inertia = node.props['head-key'] !== undefined ? node.props['head-key'] : ''\n const attrs = Object.keys(node.props).reduce((carry, name) => {\n const value = node.props[name]\n if (['key', 'head-key'].includes(name)) {\n return carry\n } else if (value === '') {\n return carry + ` ${name}`\n } else {\n return carry + ` ${name}=\"${value}\"`\n }\n }, '')\n return `<${node.type}${attrs}>`\n },\n renderTagChildren(node) {\n return typeof node.children === 'string'\n ? node.children\n : node.children.reduce((html, child) => html + this.renderTag(child), '')\n },\n renderTag(node) {\n if (node.type.toString() === 'Symbol(Text)') {\n return node.children\n } else if (node.type.toString() === 'Symbol()') {\n return ''\n } else if (node.type.toString() === 'Symbol(Comment)') {\n return ''\n }\n let html = this.renderTagStart(node)\n if (node.children) {\n html += this.renderTagChildren(node)\n }\n if (!this.isUnaryTag(node)) {\n html += `</${node.type}>`\n }\n return html\n },\n addTitleElement(elements) {\n if (this.title && !elements.find((tag) => tag.startsWith('<title'))) {\n elements.push(`<title inertia>${this.title}</title>`)\n }\n return elements\n },\n renderNodes(nodes) {\n return this.addTitleElement(\n nodes\n .flatMap((node) => (node.type.toString() === 'Symbol(Fragment)' ? node.children : node))\n .map((node) => this.renderTag(node))\n .filter((node) => node),\n )\n },\n },\n render() {\n this.provider.update(this.renderNodes(this.$slots.default ? this.$slots.default() : []))\n },\n}\n","import { mergeDataIntoQueryString, router, shouldIntercept } from '@inertiajs/core'\nimport { h } from 'vue'\n\nexport default {\n name: 'Link',\n props: {\n as: {\n type: String,\n default: 'a',\n },\n data: {\n type: Object,\n default: () => ({}),\n },\n href: {\n type: String,\n },\n method: {\n type: String,\n default: 'get',\n },\n replace: {\n type: Boolean,\n default: false,\n },\n preserveScroll: {\n type: Boolean,\n default: false,\n },\n preserveState: {\n type: Boolean,\n default: null,\n },\n only: {\n type: Array,\n default: () => [],\n },\n headers: {\n type: Object,\n default: () => ({}),\n },\n queryStringArrayFormat: {\n type: String,\n default: 'brackets',\n },\n },\n setup(props, { slots, attrs }) {\n return (props) => {\n const as = props.as.toLowerCase()\n const method = props.method.toLowerCase()\n const [href, data] = mergeDataIntoQueryString(method, props.href || '', props.data, props.queryStringArrayFormat)\n\n if (as === 'a' && method !== 'get') {\n console.warn(\n `Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes \"Open Link in New Tab/Window\" accessibility issues.\\n\\nPlease specify a more appropriate element using the \"as\" attribute. For example:\\n\\n<Link href=\"${href}\" method=\"${method}\" as=\"button\">...</Link>`,\n )\n }\n\n return h(\n props.as,\n {\n ...attrs,\n ...(as === 'a' ? { href } : {}),\n onClick: (event) => {\n if (shouldIntercept(event)) {\n event.preventDefault()\n\n router.visit(href, {\n data: data,\n method: method,\n replace: props.replace,\n preserveScroll: props.preserveScroll,\n preserveState: props.preserveState ?? method !== 'get',\n only: props.only,\n headers: props.headers,\n onCancelToken: attrs.onCancelToken || (() => ({})),\n onBefore: attrs.onBefore || (() => ({})),\n onStart: attrs.onStart || (() => ({})),\n onProgress: attrs.onProgress || (() => ({})),\n onFinish: attrs.onFinish || (() => ({})),\n onCancel: attrs.onCancel || (() => ({})),\n onSuccess: attrs.onSuccess || (() => ({})),\n onError: attrs.onError || (() => ({})),\n })\n }\n },\n },\n slots,\n )\n }\n },\n}\n","import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\nimport { isReactive, reactive, ref, watch } from 'vue'\n\nexport default function useRemember(data, key) {\n if (typeof data === 'object' && data !== null && data.__rememberable === false) {\n return data\n }\n\n const restored = router.restore(key)\n const type = isReactive(data) ? reactive : ref\n const hasCallbacks = typeof data.__remember === 'function' && typeof data.__restore === 'function'\n const remembered = restored === undefined ? data : type(hasCallbacks ? data.__restore(restored) : restored)\n\n watch(\n remembered,\n (newValue) => {\n router.remember(cloneDeep(hasCallbacks ? data.__remember() : newValue), key)\n },\n { immediate: true, deep: true },\n )\n\n return remembered\n}\n"],"names":["created","this","$options","remember","Array","isArray","data","key","call","router","restore","rememberKey","filter","_this","__rememberable","__remember","__restore","rememberable","forEach","undefined","restored","hasCallbacks","$watch","reduce","cloneDeep","immediate","deep","args","reactive","isDirty","errors","hasErrors","processing","progress","wasSuccessful","recentlySuccessful","keys","carry","transform","callback","defaults","value","Object","assign","reset","fields","length","clonedDefaults","includes","setError","clearErrors","field","_this2","submit","method","url","options","onCancelToken","token","cancelToken","onBefore","visit","_this3","clearTimeout","recentlySuccessfulTimeoutId","onStart","onProgress","event","onSuccess","page","_this4","setTimeout","onError","onCancel","onFinish","_options","get","post","put","patch","cancel","watch","form","newValue","isEqual","ref","shallowRef","name","props","initialPage","type","required","initialComponent","resolveComponent","Function","titleCallback","default","title","onHeadUpdate","setup","component","markRaw","headManager","createHeadManager","isServer","init","swapComponent","preserveState","Date","now","on","forceUpdate","inheritAttrs","h","layout","child","concat","reverse","install","app","useForm","defineProperty","config","globalProperties","mixin","computed","version","id","resolve","render","document","getElementById","JSON","parse","el","dataset","then","module","App","elements","plugin","vueApp","setupProgress","createSSRApp","data-page","stringify","innerHTML","head","body","String","provider","$headManager","createProvider","beforeUnmount","disconnect","methods","isUnaryTag","node","indexOf","renderTagStart","inertia","attrs","renderTagChildren","children","html","renderTag","toString","addTitleElement","find","tag","startsWith","push","renderNodes","nodes","flatMap","map","update","$slots","as","href","replace","Boolean","preserveScroll","only","headers","queryStringArrayFormat","slots","toLowerCase","mergeDataIntoQueryString","console","warn","onClick","shouldIntercept","preventDefault","isReactive","remembered"],"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 r=require("@inertiajs/core"),t=require("vue"),n=e(require("lodash.clonedeep")),o=e(require("lodash.isequal"));function i(){return(i=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var u={created:function(){var e=this;if(this.$options.remember){Array.isArray(this.$options.remember)&&(this.$options.remember={data:this.$options.remember}),"string"==typeof this.$options.remember&&(this.$options.remember={data:[this.$options.remember]}),"string"==typeof this.$options.remember.data&&(this.$options.remember={data:[this.$options.remember.data]});var t=this.$options.remember.key instanceof Function?this.$options.remember.key.call(this):this.$options.remember.key,o=r.router.restore(t),u=this.$options.remember.data.filter(function(r){return!(null!==e[r]&&"object"==typeof e[r]&&!1===e[r].__rememberable)}),a=function(r){return null!==e[r]&&"object"==typeof e[r]&&"function"==typeof e[r].__remember&&"function"==typeof e[r].__restore};u.forEach(function(s){void 0!==e[s]&&void 0!==o&&void 0!==o[s]&&(a(s)?e[s].__restore(o[s]):e[s]=o[s]),e.$watch(s,function(){r.router.remember(u.reduce(function(r,t){var o;return i({},r,((o={})[t]=n(a(t)?e[t].__remember():e[t]),o))},{}),t)},{immediate:!0,deep:!0})})}}};function a(){var e=[].slice.call(arguments),u="string"==typeof e[0]?e[0]:null,a=("string"==typeof e[0]?e[1]:e[0])||{},s=u?r.router.restore(u):null,c=n(a),l=null,f=null,p=function(e){return e},d=t.reactive(i({},s?s.data:a,{isDirty:!1,errors:s?s.errors:{},hasErrors:!1,processing:!1,progress:null,wasSuccessful:!1,recentlySuccessful:!1,data:function(){var e=this;return Object.keys(a).reduce(function(r,t){return r[t]=e[t],r},{})},transform:function(e){return p=e,this},defaults:function(e,r){var t;return c=void 0===e?this.data():Object.assign({},n(c),r?((t={})[e]=r,t):e),this},reset:function(){var e=[].slice.call(arguments),r=n(c);return Object.assign(this,0===e.length?r:Object.keys(r).filter(function(r){return e.includes(r)}).reduce(function(e,t){return e[t]=r[t],e},{})),this},setError:function(e,r){var t;return Object.assign(this.errors,r?((t={})[e]=r,t):e),this.hasErrors=Object.keys(this.errors).length>0,this},clearErrors:function(){var e=this,r=[].slice.call(arguments);return this.errors=Object.keys(this.errors).reduce(function(t,n){var o;return i({},t,r.length>0&&!r.includes(n)?((o={})[n]=e.errors[n],o):{})},{}),this.hasErrors=Object.keys(this.errors).length>0,this},submit:function(e,t,o){var u=this,a=this;void 0===o&&(o={});var s=p(this.data()),d=i({},o,{onCancelToken:function(e){if(l=e,o.onCancelToken)return o.onCancelToken(e)},onBefore:function(e){if(a.wasSuccessful=!1,a.recentlySuccessful=!1,clearTimeout(f),o.onBefore)return o.onBefore(e)},onStart:function(e){if(a.processing=!0,o.onStart)return o.onStart(e)},onProgress:function(e){if(a.progress=e,o.onProgress)return o.onProgress(e)},onSuccess:function(e){try{var r=function(e){return c=n(u.data()),u.isDirty=!1,e};return u.processing=!1,u.progress=null,u.clearErrors(),u.wasSuccessful=!0,u.recentlySuccessful=!0,f=setTimeout(function(){return u.recentlySuccessful=!1},2e3),Promise.resolve(o.onSuccess?Promise.resolve(o.onSuccess(e)).then(r):r(null))}catch(e){return Promise.reject(e)}},onError:function(e){if(a.processing=!1,a.progress=null,a.clearErrors().setError(e),o.onError)return o.onError(e)},onCancel:function(){if(a.processing=!1,a.progress=null,o.onCancel)return o.onCancel()},onFinish:function(){if(a.processing=!1,a.progress=null,l=null,o.onFinish)return o.onFinish()}});"delete"===e?r.router.delete(t,i({},d,{data:s})):r.router[e](t,s,d)},get:function(e,r){this.submit("get",e,r)},post:function(e,r){this.submit("post",e,r)},put:function(e,r){this.submit("put",e,r)},patch:function(e,r){this.submit("patch",e,r)},delete:function(e,r){this.submit("delete",e,r)},cancel:function(){l&&l.cancel()},__rememberable:null===u,__remember:function(){return{data:this.data(),errors:this.errors}},__restore:function(e){Object.assign(this,e.data),this.setError(e.errors)}}));return t.watch(d,function(e){d.isDirty=!o(d.data(),c),u&&r.router.remember(n(e.__remember()),u)},{immediate:!0,deep:!0}),d}var s=t.ref(null),c=t.ref({}),l=t.shallowRef(null),f=t.ref(null),p=null,d={name:"Inertia",props:{initialPage:{type:Object,required:!0},initialComponent:{type:Object,required:!1},resolveComponent:{type:Function,required:!1},titleCallback:{type:Function,required:!1,default:function(e){return e}},onHeadUpdate:{type:Function,required:!1,default:function(){return function(){}}}},setup:function(e){var n=e.initialPage,o=e.initialComponent,u=e.resolveComponent,a=e.titleCallback,d=e.onHeadUpdate;s.value=o?t.markRaw(o):null,c.value=n,f.value=null;var h="undefined"==typeof window;return p=r.createHeadManager(h,a,d),h||(r.router.init({initialPage:n,resolveComponent:u,swapComponent:function(e){try{return s.value=t.markRaw(e.component),c.value=e.page,f.value=e.preserveState?f.value:Date.now(),Promise.resolve()}catch(e){return Promise.reject(e)}}}),r.router.on("navigate",function(){return p.forceUpdate()})),function(){if(s.value){s.value.inheritAttrs=!!s.value.inheritAttrs;var e=t.h(s.value,i({},c.value.props,{key:f.value}));return l.value&&(s.value.layout=l.value,l.value=null),s.value.layout?"function"==typeof s.value.layout?s.value.layout(t.h,e):(Array.isArray(s.value.layout)?s.value.layout:[s.value.layout]).concat(e).reverse().reduce(function(e,r){return r.inheritAttrs=!!r.inheritAttrs,t.h(r,i({},c.value.props),function(){return e})}):e}}}},h={install:function(e){r.router.form=a,Object.defineProperty(e.config.globalProperties,"$inertia",{get:function(){return r.router}}),Object.defineProperty(e.config.globalProperties,"$page",{get:function(){return c.value}}),Object.defineProperty(e.config.globalProperties,"$headManager",{get:function(){return p}}),e.mixin(u)}},m={props:{title:{type:String,required:!1}},data:function(){return{provider:this.$headManager.createProvider()}},beforeUnmount:function(){this.provider.disconnect()},methods:{isUnaryTag:function(e){return["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"].indexOf(e.type)>-1},renderTagStart:function(e){e.props=e.props||{},e.props.inertia=void 0!==e.props["head-key"]?e.props["head-key"]:"";var r=Object.keys(e.props).reduce(function(r,t){var n=e.props[t];return["key","head-key"].includes(t)?r:""===n?r+" "+t:r+" "+t+'="'+n+'"'},"");return"<"+e.type+r+">"},renderTagChildren:function(e){var r=this;return"string"==typeof e.children?e.children:e.children.reduce(function(e,t){return e+r.renderTag(t)},"")},renderTag:function(e){if("Symbol(Text)"===e.type.toString())return e.children;if("Symbol()"===e.type.toString())return"";if("Symbol(Comment)"===e.type.toString())return"";var r=this.renderTagStart(e);return e.children&&(r+=this.renderTagChildren(e)),this.isUnaryTag(e)||(r+="</"+e.type+">"),r},addTitleElement:function(e){return this.title&&!e.find(function(e){return e.startsWith("<title")})&&e.push("<title inertia>"+this.title+"</title>"),e},renderNodes:function(e){var r=this;return this.addTitleElement(e.flatMap(function(e){return"Symbol(Fragment)"===e.type.toString()?e.children:e}).map(function(e){return r.renderTag(e)}).filter(function(e){return e}))}},render:function(){this.provider.update(this.renderNodes(this.$slots.default?this.$slots.default():[]))}},v={name:"Link",props:{as:{type:String,default:"a"},data:{type:Object,default:function(){return{}}},href:{type:String},method:{type:String,default:"get"},replace:{type:Boolean,default:!1},preserveScroll:{type:Boolean,default:!1},preserveState:{type:Boolean,default:null},only:{type:Array,default:function(){return[]}},headers:{type:Object,default:function(){return{}}},queryStringArrayFormat:{type:String,default:"brackets"}},setup:function(e,n){var o=n.slots,u=n.attrs;return function(e){var n=e.as.toLowerCase(),a=e.method.toLowerCase(),s=r.mergeDataIntoQueryString(a,e.href||"",e.data,e.queryStringArrayFormat),c=s[0],l=s[1];return"a"===n&&"get"!==a&&console.warn('Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes "Open Link in New Tab/Window" accessibility issues.\n\nPlease specify a more appropriate element using the "as" attribute. For example:\n\n<Link href="'+c+'" method="'+a+'" as="button">...</Link>'),t.h(e.as,i({},u,"a"===n?{href:c}:{},{onClick:function(t){var n;r.shouldIntercept(t)&&(t.preventDefault(),r.router.visit(c,{data:l,method:a,replace:e.replace,preserveScroll:e.preserveScroll,preserveState:null!=(n=e.preserveState)?n:"get"!==a,only:e.only,headers:e.headers,onCancelToken:u.onCancelToken||function(){return{}},onBefore:u.onBefore||function(){return{}},onStart:u.onStart||function(){return{}},onProgress:u.onProgress||function(){return{}},onFinish:u.onFinish||function(){return{}},onCancel:u.onCancel||function(){return{}},onSuccess:u.onSuccess||function(){return{}},onError:u.onError||function(){return{}}}))}}),o)}}};Object.defineProperty(exports,"router",{enumerable:!0,get:function(){return r.router}}),exports.Head=m,exports.Link=v,exports.createInertiaApp=function(e){try{var n,o,i,u,a,s,c,l,f;o=void 0===(n=e.id)?"app":n,i=e.resolve,u=e.setup,a=e.title,c=void 0===(s=e.progress)?{}:s,l=e.page,f=e.render;var p="undefined"==typeof window,m=p?null:document.getElementById(o),v=l||JSON.parse(m.dataset.page),y=function(e){return Promise.resolve(i(e)).then(function(e){return e.default||e})},g=[];return Promise.resolve(y(v.component).then(function(e){return u({el:m,App:d,props:{initialPage:v,initialComponent:e,resolveComponent:y,titleCallback:a,onHeadUpdate:p?function(e){return g=e}:null},plugin:h})})).then(function(e){return!p&&c&&r.setupProgress(c),function(){if(p)return Promise.resolve(f(t.createSSRApp({render:function(){return t.h("div",{id:o,"data-page":JSON.stringify(v),innerHTML:f(e)})}}))).then(function(e){return{head:g,body:e}})}()})}catch(e){return Promise.reject(e)}},exports.defineLayout=function(e){l.value=e},exports.useForm=a,exports.usePage=function(){return{props:t.computed(function(){return c.value.props}),url:t.computed(function(){return c.value.url}),component:t.computed(function(){return c.value.component}),version:t.computed(function(){return c.value.version})}},exports.useRemember=function(e,o){if("object"==typeof e&&null!==e&&!1===e.__rememberable)return e;var i=r.router.restore(o),u=t.isReactive(e)?t.reactive:t.ref,a="function"==typeof e.__remember&&"function"==typeof e.__restore,s=void 0===i?e:u(a?e.__restore(i):i);return t.watch(s,function(t){r.router.remember(n(a?e.__remember():t),o)},{immediate:!0,deep:!0}),s};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/remember.js","../src/useForm.js","../src/app.js","../src/head.js","../src/link.js","../src/createInertiaApp.js","../src/useRemember.js"],"sourcesContent":["import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\n\nexport default {\n created() {\n if (!this.$options.remember) {\n return\n }\n\n if (Array.isArray(this.$options.remember)) {\n this.$options.remember = { data: this.$options.remember }\n }\n\n if (typeof this.$options.remember === 'string') {\n this.$options.remember = { data: [this.$options.remember] }\n }\n\n if (typeof this.$options.remember.data === 'string') {\n this.$options.remember = { data: [this.$options.remember.data] }\n }\n\n const rememberKey =\n this.$options.remember.key instanceof Function\n ? this.$options.remember.key.call(this)\n : this.$options.remember.key\n\n const restored = router.restore(rememberKey)\n\n const rememberable = this.$options.remember.data.filter((key) => {\n return !(this[key] !== null && typeof this[key] === 'object' && this[key].__rememberable === false)\n })\n\n const hasCallbacks = (key) => {\n return (\n this[key] !== null &&\n typeof this[key] === 'object' &&\n typeof this[key].__remember === 'function' &&\n typeof this[key].__restore === 'function'\n )\n }\n\n rememberable.forEach((key) => {\n if (this[key] !== undefined && restored !== undefined && restored[key] !== undefined) {\n hasCallbacks(key) ? this[key].__restore(restored[key]) : (this[key] = restored[key])\n }\n\n this.$watch(\n key,\n () => {\n router.remember(\n rememberable.reduce(\n (data, key) => ({\n ...data,\n [key]: cloneDeep(hasCallbacks(key) ? this[key].__remember() : this[key]),\n }),\n {},\n ),\n rememberKey,\n )\n },\n { immediate: true, deep: true },\n )\n })\n },\n}\n","import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\nimport isEqual from 'lodash.isequal'\nimport { reactive, watch } from 'vue'\n\nexport default function useForm(...args) {\n const rememberKey = typeof args[0] === 'string' ? args[0] : null\n const data = (typeof args[0] === 'string' ? args[1] : args[0]) || {}\n const restored = rememberKey ? router.restore(rememberKey) : null\n let defaults = cloneDeep(data)\n let cancelToken = null\n let recentlySuccessfulTimeoutId = null\n let transform = (data) => data\n\n let form = reactive({\n ...(restored ? restored.data : data),\n isDirty: false,\n errors: restored ? restored.errors : {},\n hasErrors: false,\n processing: false,\n progress: null,\n wasSuccessful: false,\n recentlySuccessful: false,\n data() {\n return Object.keys(data).reduce((carry, key) => {\n carry[key] = this[key]\n return carry\n }, {})\n },\n transform(callback) {\n transform = callback\n\n return this\n },\n defaults(key, value) {\n if (typeof key === 'undefined') {\n defaults = this.data()\n } else {\n defaults = Object.assign({}, cloneDeep(defaults), value ? { [key]: value } : key)\n }\n\n return this\n },\n reset(...fields) {\n let clonedDefaults = cloneDeep(defaults)\n if (fields.length === 0) {\n Object.assign(this, clonedDefaults)\n } else {\n Object.assign(\n this,\n Object.keys(clonedDefaults)\n .filter((key) => fields.includes(key))\n .reduce((carry, key) => {\n carry[key] = clonedDefaults[key]\n return carry\n }, {}),\n )\n }\n\n return this\n },\n setError(key, value) {\n Object.assign(this.errors, value ? { [key]: value } : key)\n\n this.hasErrors = Object.keys(this.errors).length > 0\n\n return this\n },\n clearErrors(...fields) {\n this.errors = Object.keys(this.errors).reduce(\n (carry, field) => ({\n ...carry,\n ...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}),\n }),\n {},\n )\n\n this.hasErrors = Object.keys(this.errors).length > 0\n\n return this\n },\n submit(method, url, options = {}) {\n const data = transform(this.data())\n const _options = {\n ...options,\n onCancelToken: (token) => {\n cancelToken = token\n\n if (options.onCancelToken) {\n return options.onCancelToken(token)\n }\n },\n onBefore: (visit) => {\n this.wasSuccessful = false\n this.recentlySuccessful = false\n clearTimeout(recentlySuccessfulTimeoutId)\n\n if (options.onBefore) {\n return options.onBefore(visit)\n }\n },\n onStart: (visit) => {\n this.processing = true\n\n if (options.onStart) {\n return options.onStart(visit)\n }\n },\n onProgress: (event) => {\n this.progress = event\n\n if (options.onProgress) {\n return options.onProgress(event)\n }\n },\n onSuccess: async (page) => {\n this.processing = false\n this.progress = null\n this.clearErrors()\n this.wasSuccessful = true\n this.recentlySuccessful = true\n recentlySuccessfulTimeoutId = setTimeout(() => (this.recentlySuccessful = false), 2000)\n\n const onSuccess = options.onSuccess ? await options.onSuccess(page) : null\n defaults = cloneDeep(this.data())\n this.isDirty = false\n return onSuccess\n },\n onError: (errors) => {\n this.processing = false\n this.progress = null\n this.clearErrors().setError(errors)\n\n if (options.onError) {\n return options.onError(errors)\n }\n },\n onCancel: () => {\n this.processing = false\n this.progress = null\n\n if (options.onCancel) {\n return options.onCancel()\n }\n },\n onFinish: () => {\n this.processing = false\n this.progress = null\n cancelToken = null\n\n if (options.onFinish) {\n return options.onFinish()\n }\n },\n }\n\n if (method === 'delete') {\n router.delete(url, { ..._options, data })\n } else {\n router[method](url, data, _options)\n }\n },\n get(url, options) {\n this.submit('get', url, options)\n },\n post(url, options) {\n this.submit('post', url, options)\n },\n put(url, options) {\n this.submit('put', url, options)\n },\n patch(url, options) {\n this.submit('patch', url, options)\n },\n delete(url, options) {\n this.submit('delete', url, options)\n },\n cancel() {\n if (cancelToken) {\n cancelToken.cancel()\n }\n },\n __rememberable: rememberKey === null,\n __remember() {\n return { data: this.data(), errors: this.errors }\n },\n __restore(restored) {\n Object.assign(this, restored.data)\n this.setError(restored.errors)\n },\n })\n\n watch(\n form,\n (newValue) => {\n form.isDirty = !isEqual(form.data(), defaults)\n if (rememberKey) {\n router.remember(cloneDeep(newValue.__remember()), rememberKey)\n }\n },\n { immediate: true, deep: true },\n )\n\n return form\n}\n","import { createHeadManager, router } from '@inertiajs/core'\nimport { computed, h, markRaw, ref, shallowRef } from 'vue'\nimport remember from './remember'\nimport useForm from './useForm'\n\nconst component = ref(null)\nconst page = ref({})\nconst layout = shallowRef(null)\nconst key = ref(null)\nlet headManager = null\n\nexport default {\n name: 'Inertia',\n props: {\n initialPage: {\n type: Object,\n required: true,\n },\n initialComponent: {\n type: Object,\n required: false,\n },\n resolveComponent: {\n type: Function,\n required: false,\n },\n titleCallback: {\n type: Function,\n required: false,\n default: (title) => title,\n },\n onHeadUpdate: {\n type: Function,\n required: false,\n default: () => () => {},\n },\n },\n setup({ initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate }) {\n component.value = initialComponent ? markRaw(initialComponent) : null\n page.value = initialPage\n key.value = null\n\n const isServer = typeof window === 'undefined'\n headManager = createHeadManager(isServer, titleCallback, onHeadUpdate)\n\n if (!isServer) {\n router.init({\n initialPage,\n resolveComponent,\n swapComponent: async (args) => {\n component.value = markRaw(args.component)\n page.value = args.page\n key.value = args.preserveState ? key.value : Date.now()\n },\n })\n\n router.on('navigate', () => headManager.forceUpdate())\n }\n\n return () => {\n if (component.value) {\n component.value.inheritAttrs = !!component.value.inheritAttrs\n\n const child = h(component.value, {\n ...page.value.props,\n key: key.value,\n })\n\n if (layout.value) {\n component.value.layout = layout.value\n layout.value = null\n }\n\n if (component.value.layout) {\n if (typeof component.value.layout === 'function') {\n return component.value.layout(h, child)\n }\n\n return (Array.isArray(component.value.layout) ? component.value.layout : [component.value.layout])\n .concat(child)\n .reverse()\n .reduce((child, layout) => {\n layout.inheritAttrs = !!layout.inheritAttrs\n return h(layout, { ...page.value.props }, () => child)\n })\n }\n\n return child\n }\n }\n },\n}\n\nexport const plugin = {\n install(app) {\n router.form = useForm\n\n Object.defineProperty(app.config.globalProperties, '$inertia', { get: () => router })\n Object.defineProperty(app.config.globalProperties, '$page', { get: () => page.value })\n Object.defineProperty(app.config.globalProperties, '$headManager', { get: () => headManager })\n\n app.mixin(remember)\n },\n}\n\nexport function usePage() {\n return {\n props: computed(() => page.value.props),\n url: computed(() => page.value.url),\n component: computed(() => page.value.component),\n version: computed(() => page.value.version),\n }\n}\n\nexport function defineLayout(component) {\n layout.value = component\n}\n","export default {\n props: {\n title: {\n type: String,\n required: false,\n },\n },\n data() {\n return {\n provider: this.$headManager.createProvider(),\n }\n },\n beforeUnmount() {\n this.provider.disconnect()\n },\n methods: {\n isUnaryTag(node) {\n return (\n [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n ].indexOf(node.type) > -1\n )\n },\n renderTagStart(node) {\n node.props = node.props || {}\n node.props.inertia = node.props['head-key'] !== undefined ? node.props['head-key'] : ''\n const attrs = Object.keys(node.props).reduce((carry, name) => {\n const value = node.props[name]\n if (['key', 'head-key'].includes(name)) {\n return carry\n } else if (value === '') {\n return carry + ` ${name}`\n } else {\n return carry + ` ${name}=\"${value}\"`\n }\n }, '')\n return `<${node.type}${attrs}>`\n },\n renderTagChildren(node) {\n return typeof node.children === 'string'\n ? node.children\n : node.children.reduce((html, child) => html + this.renderTag(child), '')\n },\n renderTag(node) {\n if (node.type.toString() === 'Symbol(Text)') {\n return node.children\n } else if (node.type.toString() === 'Symbol()') {\n return ''\n } else if (node.type.toString() === 'Symbol(Comment)') {\n return ''\n }\n let html = this.renderTagStart(node)\n if (node.children) {\n html += this.renderTagChildren(node)\n }\n if (!this.isUnaryTag(node)) {\n html += `</${node.type}>`\n }\n return html\n },\n addTitleElement(elements) {\n if (this.title && !elements.find((tag) => tag.startsWith('<title'))) {\n elements.push(`<title inertia>${this.title}</title>`)\n }\n return elements\n },\n renderNodes(nodes) {\n return this.addTitleElement(\n nodes\n .flatMap((node) => (node.type.toString() === 'Symbol(Fragment)' ? node.children : node))\n .map((node) => this.renderTag(node))\n .filter((node) => node),\n )\n },\n },\n render() {\n this.provider.update(this.renderNodes(this.$slots.default ? this.$slots.default() : []))\n },\n}\n","import { mergeDataIntoQueryString, router, shouldIntercept } from '@inertiajs/core'\nimport { h } from 'vue'\n\nexport default {\n name: 'Link',\n props: {\n as: {\n type: String,\n default: 'a',\n },\n data: {\n type: Object,\n default: () => ({}),\n },\n href: {\n type: String,\n },\n method: {\n type: String,\n default: 'get',\n },\n replace: {\n type: Boolean,\n default: false,\n },\n preserveScroll: {\n type: Boolean,\n default: false,\n },\n preserveState: {\n type: Boolean,\n default: null,\n },\n only: {\n type: Array,\n default: () => [],\n },\n headers: {\n type: Object,\n default: () => ({}),\n },\n queryStringArrayFormat: {\n type: String,\n default: 'brackets',\n },\n },\n setup(props, { slots, attrs }) {\n return (props) => {\n const as = props.as.toLowerCase()\n const method = props.method.toLowerCase()\n const [href, data] = mergeDataIntoQueryString(method, props.href || '', props.data, props.queryStringArrayFormat)\n\n if (as === 'a' && method !== 'get') {\n console.warn(\n `Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes \"Open Link in New Tab/Window\" accessibility issues.\\n\\nPlease specify a more appropriate element using the \"as\" attribute. For example:\\n\\n<Link href=\"${href}\" method=\"${method}\" as=\"button\">...</Link>`,\n )\n }\n\n return h(\n props.as,\n {\n ...attrs,\n ...(as === 'a' ? { href } : {}),\n onClick: (event) => {\n if (shouldIntercept(event)) {\n event.preventDefault()\n\n router.visit(href, {\n data: data,\n method: method,\n replace: props.replace,\n preserveScroll: props.preserveScroll,\n preserveState: props.preserveState ?? method !== 'get',\n only: props.only,\n headers: props.headers,\n onCancelToken: attrs.onCancelToken || (() => ({})),\n onBefore: attrs.onBefore || (() => ({})),\n onStart: attrs.onStart || (() => ({})),\n onProgress: attrs.onProgress || (() => ({})),\n onFinish: attrs.onFinish || (() => ({})),\n onCancel: attrs.onCancel || (() => ({})),\n onSuccess: attrs.onSuccess || (() => ({})),\n onError: attrs.onError || (() => ({})),\n })\n }\n },\n },\n slots,\n )\n }\n },\n}\n","import { setupProgress } from '@inertiajs/core'\nimport { createSSRApp, h } from 'vue'\nimport App, { plugin } from './app'\n\nexport default async function createInertiaApp({ id = 'app', resolve, setup, title, progress = {}, page, render }) {\n const isServer = typeof window === 'undefined'\n const el = isServer ? null : document.getElementById(id)\n const initialPage = page || JSON.parse(el.dataset.page)\n const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)\n\n let head = []\n\n const vueApp = await resolveComponent(initialPage.component).then((initialComponent) => {\n return setup({\n el,\n App,\n props: {\n initialPage,\n initialComponent,\n resolveComponent,\n titleCallback: title,\n onHeadUpdate: isServer ? (elements) => (head = elements) : null,\n },\n plugin,\n })\n })\n\n if (!isServer && progress) {\n setupProgress(progress)\n }\n\n if (isServer) {\n const body = await render(\n createSSRApp({\n render: () =>\n h('div', {\n id,\n 'data-page': JSON.stringify(initialPage),\n innerHTML: render(vueApp),\n }),\n }),\n )\n\n return { head, body }\n }\n}\n","import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\nimport { isReactive, reactive, ref, watch } from 'vue'\n\nexport default function useRemember(data, key) {\n if (typeof data === 'object' && data !== null && data.__rememberable === false) {\n return data\n }\n\n const restored = router.restore(key)\n const type = isReactive(data) ? reactive : ref\n const hasCallbacks = typeof data.__remember === 'function' && typeof data.__restore === 'function'\n const remembered = restored === undefined ? data : type(hasCallbacks ? data.__restore(restored) : restored)\n\n watch(\n remembered,\n (newValue) => {\n router.remember(cloneDeep(hasCallbacks ? data.__remember() : newValue), key)\n },\n { immediate: true, deep: true },\n )\n\n return remembered\n}\n"],"names":["created","this","$options","remember","Array","isArray","data","key","call","router","restore","rememberKey","filter","_this","__rememberable","__remember","__restore","rememberable","forEach","undefined","restored","hasCallbacks","$watch","reduce","cloneDeep","immediate","deep","args","reactive","isDirty","errors","hasErrors","processing","progress","wasSuccessful","recentlySuccessful","keys","carry","transform","callback","defaults","value","Object","assign","reset","fields","length","clonedDefaults","includes","setError","clearErrors","field","_this2","submit","method","url","options","onCancelToken","token","cancelToken","onBefore","visit","_this3","clearTimeout","recentlySuccessfulTimeoutId","onStart","onProgress","event","onSuccess","page","_this4","setTimeout","onError","onCancel","onFinish","_options","get","post","put","patch","cancel","watch","form","newValue","isEqual","ref","shallowRef","name","props","initialPage","type","required","initialComponent","resolveComponent","Function","titleCallback","default","title","onHeadUpdate","setup","component","markRaw","headManager","createHeadManager","isServer","init","swapComponent","preserveState","Date","now","on","forceUpdate","inheritAttrs","h","layout","child","concat","reverse","install","app","useForm","defineProperty","config","globalProperties","mixin","String","provider","$headManager","createProvider","beforeUnmount","disconnect","methods","isUnaryTag","node","indexOf","renderTagStart","inertia","attrs","renderTagChildren","children","html","renderTag","toString","addTitleElement","elements","find","tag","startsWith","push","renderNodes","nodes","flatMap","map","render","update","$slots","as","href","replace","Boolean","preserveScroll","only","headers","queryStringArrayFormat","slots","toLowerCase","mergeDataIntoQueryString","console","warn","onClick","shouldIntercept","preventDefault","id","resolve","document","getElementById","JSON","parse","el","dataset","then","module","App","plugin","vueApp","setupProgress","createSSRApp","data-page","stringify","innerHTML","head","body","computed","version","isReactive","remembered"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { default } from '@inertiajs/core/server';
2
+ //# sourceMappingURL=server.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/dist/server.js ADDED
@@ -0,0 +1,8 @@
1
+ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2
+
3
+ var server = _interopDefault(require('@inertiajs/core/server'));
4
+
5
+
6
+
7
+ module.exports = server;
8
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
package/index.d.ts ADDED
@@ -0,0 +1,117 @@
1
+ import * as Inertia from '@inertiajs/core'
2
+ import { Ref, ComputedRef, App as VueApp, DefineComponent, Plugin } from 'vue'
3
+
4
+ export interface InertiaAppProps {
5
+ initialPage: Inertia.Page
6
+ initialComponent?: object
7
+ resolveComponent?: (name: string) => DefineComponent | Promise<DefineComponent>
8
+ onHeadUpdate?: (elements: string[]) => void
9
+ }
10
+
11
+ type InertiaApp = DefineComponent<InertiaAppProps>
12
+
13
+ export declare const App: InertiaApp
14
+
15
+ export declare const plugin: Plugin
16
+
17
+ export interface CreateInertiaAppProps {
18
+ id?: string
19
+ resolve: (name: string) => DefineComponent | Promise<DefineComponent> | { default: DefineComponent }
20
+ setup: (props: { el: Element; app: InertiaApp; props: InertiaAppProps; plugin: Plugin }) => void | VueApp
21
+ title?: (title: string) => string
22
+ page?: Inertia.Page
23
+ render?: (app: VueApp) => Promise<string>
24
+ }
25
+
26
+ export declare function createInertiaApp(props: CreateInertiaAppProps): Promise<{ head: string[]; body: string } | void>
27
+
28
+ export interface InertiaLinkProps {
29
+ as?: string
30
+ data?: object
31
+ href: string
32
+ method?: string
33
+ headers?: object
34
+ onClick?: (event: MouseEvent | KeyboardEvent) => void
35
+ preserveScroll?: boolean | ((props: Inertia.PageProps) => boolean)
36
+ preserveState?: boolean | ((props: Inertia.PageProps) => boolean) | null
37
+ replace?: boolean
38
+ only?: string[]
39
+ onCancelToken?: (cancelToken: import('axios').CancelTokenSource) => void
40
+ onBefore?: () => void
41
+ onStart?: () => void
42
+ onProgress?: (progress: Inertia.Progress) => void
43
+ onFinish?: () => void
44
+ onCancel?: () => void
45
+ onSuccess?: () => void
46
+ }
47
+
48
+ export type InertiaLink = DefineComponent<InertiaLinkProps>
49
+
50
+ export declare const Link: InertiaLink
51
+
52
+ export interface InertiaFormProps<TForm> {
53
+ isDirty: boolean
54
+ errors: Record<keyof TForm, string>
55
+ hasErrors: boolean
56
+ processing: boolean
57
+ progress: Inertia.Progress | null
58
+ wasSuccessful: boolean
59
+ recentlySuccessful: boolean
60
+ data(): TForm
61
+ transform(callback: (data: TForm) => object): this
62
+ defaults(): this
63
+ defaults(field: keyof TForm, value: string): this
64
+ defaults(fields: Record<keyof TForm, string>): this
65
+ reset(...fields: (keyof TForm)[]): this
66
+ clearErrors(...fields: (keyof TForm)[]): this
67
+ setError(field: keyof TForm, value: string): this
68
+ setError(errors: Record<keyof TForm, string>): this
69
+ submit(method: string, url: string, options?: Partial<Inertia.VisitOptions>): void
70
+ get(url: string, options?: Partial<Inertia.VisitOptions>): void
71
+ post(url: string, options?: Partial<Inertia.VisitOptions>): void
72
+ put(url: string, options?: Partial<Inertia.VisitOptions>): void
73
+ patch(url: string, options?: Partial<Inertia.VisitOptions>): void
74
+ delete(url: string, options?: Partial<Inertia.VisitOptions>): void
75
+ cancel(): void
76
+ }
77
+
78
+ export type InertiaForm<TForm> = TForm & InertiaFormProps<TForm>
79
+
80
+ export declare function useForm<TForm>(data: TForm): InertiaForm<TForm>
81
+
82
+ export declare function useForm<TForm>(rememberKey: string, data: TForm): InertiaForm<TForm>
83
+
84
+ export declare function useRemember(data: object, key?: string): Ref<object>
85
+
86
+ export declare function usePage<PageProps>(): {
87
+ props: ComputedRef<PageProps & Inertia.PageProps>
88
+ url: ComputedRef<string>
89
+ component: ComputedRef<string>
90
+ version: ComputedRef<string | null>
91
+ }
92
+
93
+ export declare function defineLayout(component: object): void
94
+
95
+ export type InertiaHead = DefineComponent<{
96
+ title?: string
97
+ }>
98
+
99
+ export declare const Head: InertiaHead
100
+
101
+ declare module '@vue/runtime-core' {
102
+ export interface ComponentCustomProperties {
103
+ $inertia: typeof Inertia.Inertia
104
+ $page: Inertia.Page
105
+ $headManager: ReturnType<typeof Inertia.createHeadManager>
106
+ }
107
+
108
+ export interface ComponentCustomOptions {
109
+ remember?:
110
+ | string
111
+ | string[]
112
+ | {
113
+ data: string | string[]
114
+ key?: string | (() => string)
115
+ }
116
+ }
117
+ }
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@inertiajs/vue3",
3
+ "version": "1.0.0-beta.1",
4
+ "license": "MIT",
5
+ "description": "The Vue 3 adapter for Inertia.js",
6
+ "contributors": [
7
+ "Jonathan Reinink <jonathan@reinink.ca>"
8
+ ],
9
+ "homepage": "https://inertiajs.com/",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/inertiajs/inertia.git",
13
+ "directory": "packages/vue3"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/inertiajs/inertia/issues"
17
+ },
18
+ "source": "src/index.js",
19
+ "main": "dist/index.js",
20
+ "typings": "index.d.ts",
21
+ "exports": {
22
+ ".": "./dist/index.js",
23
+ "./server": "./dist/server.js"
24
+ },
25
+ "scripts": {
26
+ "build": "npm run clean && npm run build:browser && npm run build:server",
27
+ "build:browser": "microbundle --format es,cjs",
28
+ "build:server": "microbundle --format es,cjs --target node --output ./dist/server.js ./src/server.js",
29
+ "clean": "rm -rf dist",
30
+ "prepublishOnly": "npm run build",
31
+ "watch": "microbundle watch --format es,cjs"
32
+ },
33
+ "devDependencies": {
34
+ "microbundle": "^0.12.0",
35
+ "vue": "^3.0.0"
36
+ },
37
+ "peerDependencies": {
38
+ "vue": "^3.0.0"
39
+ },
40
+ "dependencies": {
41
+ "@inertiajs/core": "1.0.0-beta.1",
42
+ "lodash.clonedeep": "^4.5.0",
43
+ "lodash.isequal": "^4.5.0"
44
+ }
45
+ }
package/readme.md ADDED
@@ -0,0 +1,3 @@
1
+ # Inertia.js Vue 3 Adapter
2
+
3
+ Visit [inertiajs.com](https://inertiajs.com/) to learn more.
package/src/app.js ADDED
@@ -0,0 +1,117 @@
1
+ import { createHeadManager, router } from '@inertiajs/core'
2
+ import { computed, h, markRaw, ref, shallowRef } from 'vue'
3
+ import remember from './remember'
4
+ import useForm from './useForm'
5
+
6
+ const component = ref(null)
7
+ const page = ref({})
8
+ const layout = shallowRef(null)
9
+ const key = ref(null)
10
+ let headManager = null
11
+
12
+ export default {
13
+ name: 'Inertia',
14
+ props: {
15
+ initialPage: {
16
+ type: Object,
17
+ required: true,
18
+ },
19
+ initialComponent: {
20
+ type: Object,
21
+ required: false,
22
+ },
23
+ resolveComponent: {
24
+ type: Function,
25
+ required: false,
26
+ },
27
+ titleCallback: {
28
+ type: Function,
29
+ required: false,
30
+ default: (title) => title,
31
+ },
32
+ onHeadUpdate: {
33
+ type: Function,
34
+ required: false,
35
+ default: () => () => {},
36
+ },
37
+ },
38
+ setup({ initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate }) {
39
+ component.value = initialComponent ? markRaw(initialComponent) : null
40
+ page.value = initialPage
41
+ key.value = null
42
+
43
+ const isServer = typeof window === 'undefined'
44
+ headManager = createHeadManager(isServer, titleCallback, onHeadUpdate)
45
+
46
+ if (!isServer) {
47
+ router.init({
48
+ initialPage,
49
+ resolveComponent,
50
+ swapComponent: async (args) => {
51
+ component.value = markRaw(args.component)
52
+ page.value = args.page
53
+ key.value = args.preserveState ? key.value : Date.now()
54
+ },
55
+ })
56
+
57
+ router.on('navigate', () => headManager.forceUpdate())
58
+ }
59
+
60
+ return () => {
61
+ if (component.value) {
62
+ component.value.inheritAttrs = !!component.value.inheritAttrs
63
+
64
+ const child = h(component.value, {
65
+ ...page.value.props,
66
+ key: key.value,
67
+ })
68
+
69
+ if (layout.value) {
70
+ component.value.layout = layout.value
71
+ layout.value = null
72
+ }
73
+
74
+ if (component.value.layout) {
75
+ if (typeof component.value.layout === 'function') {
76
+ return component.value.layout(h, child)
77
+ }
78
+
79
+ return (Array.isArray(component.value.layout) ? component.value.layout : [component.value.layout])
80
+ .concat(child)
81
+ .reverse()
82
+ .reduce((child, layout) => {
83
+ layout.inheritAttrs = !!layout.inheritAttrs
84
+ return h(layout, { ...page.value.props }, () => child)
85
+ })
86
+ }
87
+
88
+ return child
89
+ }
90
+ }
91
+ },
92
+ }
93
+
94
+ export const plugin = {
95
+ install(app) {
96
+ router.form = useForm
97
+
98
+ Object.defineProperty(app.config.globalProperties, '$inertia', { get: () => router })
99
+ Object.defineProperty(app.config.globalProperties, '$page', { get: () => page.value })
100
+ Object.defineProperty(app.config.globalProperties, '$headManager', { get: () => headManager })
101
+
102
+ app.mixin(remember)
103
+ },
104
+ }
105
+
106
+ export function usePage() {
107
+ return {
108
+ props: computed(() => page.value.props),
109
+ url: computed(() => page.value.url),
110
+ component: computed(() => page.value.component),
111
+ version: computed(() => page.value.version),
112
+ }
113
+ }
114
+
115
+ export function defineLayout(component) {
116
+ layout.value = component
117
+ }
@@ -0,0 +1,46 @@
1
+ import { setupProgress } from '@inertiajs/core'
2
+ import { createSSRApp, h } from 'vue'
3
+ import App, { plugin } from './app'
4
+
5
+ export default async function createInertiaApp({ id = 'app', resolve, setup, title, progress = {}, page, render }) {
6
+ const isServer = typeof window === 'undefined'
7
+ const el = isServer ? null : document.getElementById(id)
8
+ const initialPage = page || JSON.parse(el.dataset.page)
9
+ const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)
10
+
11
+ let head = []
12
+
13
+ const vueApp = await resolveComponent(initialPage.component).then((initialComponent) => {
14
+ return setup({
15
+ el,
16
+ App,
17
+ props: {
18
+ initialPage,
19
+ initialComponent,
20
+ resolveComponent,
21
+ titleCallback: title,
22
+ onHeadUpdate: isServer ? (elements) => (head = elements) : null,
23
+ },
24
+ plugin,
25
+ })
26
+ })
27
+
28
+ if (!isServer && progress) {
29
+ setupProgress(progress)
30
+ }
31
+
32
+ if (isServer) {
33
+ const body = await render(
34
+ createSSRApp({
35
+ render: () =>
36
+ h('div', {
37
+ id,
38
+ 'data-page': JSON.stringify(initialPage),
39
+ innerHTML: render(vueApp),
40
+ }),
41
+ }),
42
+ )
43
+
44
+ return { head, body }
45
+ }
46
+ }
package/src/head.js ADDED
@@ -0,0 +1,93 @@
1
+ export default {
2
+ props: {
3
+ title: {
4
+ type: String,
5
+ required: false,
6
+ },
7
+ },
8
+ data() {
9
+ return {
10
+ provider: this.$headManager.createProvider(),
11
+ }
12
+ },
13
+ beforeUnmount() {
14
+ this.provider.disconnect()
15
+ },
16
+ methods: {
17
+ isUnaryTag(node) {
18
+ return (
19
+ [
20
+ 'area',
21
+ 'base',
22
+ 'br',
23
+ 'col',
24
+ 'embed',
25
+ 'hr',
26
+ 'img',
27
+ 'input',
28
+ 'keygen',
29
+ 'link',
30
+ 'meta',
31
+ 'param',
32
+ 'source',
33
+ 'track',
34
+ 'wbr',
35
+ ].indexOf(node.type) > -1
36
+ )
37
+ },
38
+ renderTagStart(node) {
39
+ node.props = node.props || {}
40
+ node.props.inertia = node.props['head-key'] !== undefined ? node.props['head-key'] : ''
41
+ const attrs = Object.keys(node.props).reduce((carry, name) => {
42
+ const value = node.props[name]
43
+ if (['key', 'head-key'].includes(name)) {
44
+ return carry
45
+ } else if (value === '') {
46
+ return carry + ` ${name}`
47
+ } else {
48
+ return carry + ` ${name}="${value}"`
49
+ }
50
+ }, '')
51
+ return `<${node.type}${attrs}>`
52
+ },
53
+ renderTagChildren(node) {
54
+ return typeof node.children === 'string'
55
+ ? node.children
56
+ : node.children.reduce((html, child) => html + this.renderTag(child), '')
57
+ },
58
+ renderTag(node) {
59
+ if (node.type.toString() === 'Symbol(Text)') {
60
+ return node.children
61
+ } else if (node.type.toString() === 'Symbol()') {
62
+ return ''
63
+ } else if (node.type.toString() === 'Symbol(Comment)') {
64
+ return ''
65
+ }
66
+ let html = this.renderTagStart(node)
67
+ if (node.children) {
68
+ html += this.renderTagChildren(node)
69
+ }
70
+ if (!this.isUnaryTag(node)) {
71
+ html += `</${node.type}>`
72
+ }
73
+ return html
74
+ },
75
+ addTitleElement(elements) {
76
+ if (this.title && !elements.find((tag) => tag.startsWith('<title'))) {
77
+ elements.push(`<title inertia>${this.title}</title>`)
78
+ }
79
+ return elements
80
+ },
81
+ renderNodes(nodes) {
82
+ return this.addTitleElement(
83
+ nodes
84
+ .flatMap((node) => (node.type.toString() === 'Symbol(Fragment)' ? node.children : node))
85
+ .map((node) => this.renderTag(node))
86
+ .filter((node) => node),
87
+ )
88
+ },
89
+ },
90
+ render() {
91
+ this.provider.update(this.renderNodes(this.$slots.default ? this.$slots.default() : []))
92
+ },
93
+ }
package/src/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { router } from '@inertiajs/core'
2
+ export { defineLayout, usePage } from './app'
3
+ export { default as createInertiaApp } from './createInertiaApp'
4
+ export { default as Head } from './head'
5
+ export { default as Link } from './link'
6
+ export { default as useForm } from './useForm'
7
+ export { default as useRemember } from './useRemember'
package/src/link.js ADDED
@@ -0,0 +1,92 @@
1
+ import { mergeDataIntoQueryString, router, shouldIntercept } from '@inertiajs/core'
2
+ import { h } from 'vue'
3
+
4
+ export default {
5
+ name: 'Link',
6
+ props: {
7
+ as: {
8
+ type: String,
9
+ default: 'a',
10
+ },
11
+ data: {
12
+ type: Object,
13
+ default: () => ({}),
14
+ },
15
+ href: {
16
+ type: String,
17
+ },
18
+ method: {
19
+ type: String,
20
+ default: 'get',
21
+ },
22
+ replace: {
23
+ type: Boolean,
24
+ default: false,
25
+ },
26
+ preserveScroll: {
27
+ type: Boolean,
28
+ default: false,
29
+ },
30
+ preserveState: {
31
+ type: Boolean,
32
+ default: null,
33
+ },
34
+ only: {
35
+ type: Array,
36
+ default: () => [],
37
+ },
38
+ headers: {
39
+ type: Object,
40
+ default: () => ({}),
41
+ },
42
+ queryStringArrayFormat: {
43
+ type: String,
44
+ default: 'brackets',
45
+ },
46
+ },
47
+ setup(props, { slots, attrs }) {
48
+ return (props) => {
49
+ const as = props.as.toLowerCase()
50
+ const method = props.method.toLowerCase()
51
+ const [href, data] = mergeDataIntoQueryString(method, props.href || '', props.data, props.queryStringArrayFormat)
52
+
53
+ if (as === 'a' && method !== 'get') {
54
+ console.warn(
55
+ `Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes "Open Link in New Tab/Window" accessibility issues.\n\nPlease specify a more appropriate element using the "as" attribute. For example:\n\n<Link href="${href}" method="${method}" as="button">...</Link>`,
56
+ )
57
+ }
58
+
59
+ return h(
60
+ props.as,
61
+ {
62
+ ...attrs,
63
+ ...(as === 'a' ? { href } : {}),
64
+ onClick: (event) => {
65
+ if (shouldIntercept(event)) {
66
+ event.preventDefault()
67
+
68
+ router.visit(href, {
69
+ data: data,
70
+ method: method,
71
+ replace: props.replace,
72
+ preserveScroll: props.preserveScroll,
73
+ preserveState: props.preserveState ?? method !== 'get',
74
+ only: props.only,
75
+ headers: props.headers,
76
+ onCancelToken: attrs.onCancelToken || (() => ({})),
77
+ onBefore: attrs.onBefore || (() => ({})),
78
+ onStart: attrs.onStart || (() => ({})),
79
+ onProgress: attrs.onProgress || (() => ({})),
80
+ onFinish: attrs.onFinish || (() => ({})),
81
+ onCancel: attrs.onCancel || (() => ({})),
82
+ onSuccess: attrs.onSuccess || (() => ({})),
83
+ onError: attrs.onError || (() => ({})),
84
+ })
85
+ }
86
+ },
87
+ },
88
+ slots,
89
+ )
90
+ }
91
+ },
92
+ }
@@ -0,0 +1,65 @@
1
+ import { router } from '@inertiajs/core'
2
+ import cloneDeep from 'lodash.clonedeep'
3
+
4
+ export default {
5
+ created() {
6
+ if (!this.$options.remember) {
7
+ return
8
+ }
9
+
10
+ if (Array.isArray(this.$options.remember)) {
11
+ this.$options.remember = { data: this.$options.remember }
12
+ }
13
+
14
+ if (typeof this.$options.remember === 'string') {
15
+ this.$options.remember = { data: [this.$options.remember] }
16
+ }
17
+
18
+ if (typeof this.$options.remember.data === 'string') {
19
+ this.$options.remember = { data: [this.$options.remember.data] }
20
+ }
21
+
22
+ const rememberKey =
23
+ this.$options.remember.key instanceof Function
24
+ ? this.$options.remember.key.call(this)
25
+ : this.$options.remember.key
26
+
27
+ const restored = router.restore(rememberKey)
28
+
29
+ const rememberable = this.$options.remember.data.filter((key) => {
30
+ return !(this[key] !== null && typeof this[key] === 'object' && this[key].__rememberable === false)
31
+ })
32
+
33
+ const hasCallbacks = (key) => {
34
+ return (
35
+ this[key] !== null &&
36
+ typeof this[key] === 'object' &&
37
+ typeof this[key].__remember === 'function' &&
38
+ typeof this[key].__restore === 'function'
39
+ )
40
+ }
41
+
42
+ rememberable.forEach((key) => {
43
+ if (this[key] !== undefined && restored !== undefined && restored[key] !== undefined) {
44
+ hasCallbacks(key) ? this[key].__restore(restored[key]) : (this[key] = restored[key])
45
+ }
46
+
47
+ this.$watch(
48
+ key,
49
+ () => {
50
+ router.remember(
51
+ rememberable.reduce(
52
+ (data, key) => ({
53
+ ...data,
54
+ [key]: cloneDeep(hasCallbacks(key) ? this[key].__remember() : this[key]),
55
+ }),
56
+ {},
57
+ ),
58
+ rememberKey,
59
+ )
60
+ },
61
+ { immediate: true, deep: true },
62
+ )
63
+ })
64
+ },
65
+ }
package/src/server.js ADDED
@@ -0,0 +1 @@
1
+ export { default as default } from '@inertiajs/core/server'
package/src/useForm.js ADDED
@@ -0,0 +1,205 @@
1
+ import { router } from '@inertiajs/core'
2
+ import cloneDeep from 'lodash.clonedeep'
3
+ import isEqual from 'lodash.isequal'
4
+ import { reactive, watch } from 'vue'
5
+
6
+ export default function useForm(...args) {
7
+ const rememberKey = typeof args[0] === 'string' ? args[0] : null
8
+ const data = (typeof args[0] === 'string' ? args[1] : args[0]) || {}
9
+ const restored = rememberKey ? router.restore(rememberKey) : null
10
+ let defaults = cloneDeep(data)
11
+ let cancelToken = null
12
+ let recentlySuccessfulTimeoutId = null
13
+ let transform = (data) => data
14
+
15
+ let form = reactive({
16
+ ...(restored ? restored.data : data),
17
+ isDirty: false,
18
+ errors: restored ? restored.errors : {},
19
+ hasErrors: false,
20
+ processing: false,
21
+ progress: null,
22
+ wasSuccessful: false,
23
+ recentlySuccessful: false,
24
+ data() {
25
+ return Object.keys(data).reduce((carry, key) => {
26
+ carry[key] = this[key]
27
+ return carry
28
+ }, {})
29
+ },
30
+ transform(callback) {
31
+ transform = callback
32
+
33
+ return this
34
+ },
35
+ defaults(key, value) {
36
+ if (typeof key === 'undefined') {
37
+ defaults = this.data()
38
+ } else {
39
+ defaults = Object.assign({}, cloneDeep(defaults), value ? { [key]: value } : key)
40
+ }
41
+
42
+ return this
43
+ },
44
+ reset(...fields) {
45
+ let clonedDefaults = cloneDeep(defaults)
46
+ if (fields.length === 0) {
47
+ Object.assign(this, clonedDefaults)
48
+ } else {
49
+ Object.assign(
50
+ this,
51
+ Object.keys(clonedDefaults)
52
+ .filter((key) => fields.includes(key))
53
+ .reduce((carry, key) => {
54
+ carry[key] = clonedDefaults[key]
55
+ return carry
56
+ }, {}),
57
+ )
58
+ }
59
+
60
+ return this
61
+ },
62
+ setError(key, value) {
63
+ Object.assign(this.errors, value ? { [key]: value } : key)
64
+
65
+ this.hasErrors = Object.keys(this.errors).length > 0
66
+
67
+ return this
68
+ },
69
+ clearErrors(...fields) {
70
+ this.errors = Object.keys(this.errors).reduce(
71
+ (carry, field) => ({
72
+ ...carry,
73
+ ...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}),
74
+ }),
75
+ {},
76
+ )
77
+
78
+ this.hasErrors = Object.keys(this.errors).length > 0
79
+
80
+ return this
81
+ },
82
+ submit(method, url, options = {}) {
83
+ const data = transform(this.data())
84
+ const _options = {
85
+ ...options,
86
+ onCancelToken: (token) => {
87
+ cancelToken = token
88
+
89
+ if (options.onCancelToken) {
90
+ return options.onCancelToken(token)
91
+ }
92
+ },
93
+ onBefore: (visit) => {
94
+ this.wasSuccessful = false
95
+ this.recentlySuccessful = false
96
+ clearTimeout(recentlySuccessfulTimeoutId)
97
+
98
+ if (options.onBefore) {
99
+ return options.onBefore(visit)
100
+ }
101
+ },
102
+ onStart: (visit) => {
103
+ this.processing = true
104
+
105
+ if (options.onStart) {
106
+ return options.onStart(visit)
107
+ }
108
+ },
109
+ onProgress: (event) => {
110
+ this.progress = event
111
+
112
+ if (options.onProgress) {
113
+ return options.onProgress(event)
114
+ }
115
+ },
116
+ onSuccess: async (page) => {
117
+ this.processing = false
118
+ this.progress = null
119
+ this.clearErrors()
120
+ this.wasSuccessful = true
121
+ this.recentlySuccessful = true
122
+ recentlySuccessfulTimeoutId = setTimeout(() => (this.recentlySuccessful = false), 2000)
123
+
124
+ const onSuccess = options.onSuccess ? await options.onSuccess(page) : null
125
+ defaults = cloneDeep(this.data())
126
+ this.isDirty = false
127
+ return onSuccess
128
+ },
129
+ onError: (errors) => {
130
+ this.processing = false
131
+ this.progress = null
132
+ this.clearErrors().setError(errors)
133
+
134
+ if (options.onError) {
135
+ return options.onError(errors)
136
+ }
137
+ },
138
+ onCancel: () => {
139
+ this.processing = false
140
+ this.progress = null
141
+
142
+ if (options.onCancel) {
143
+ return options.onCancel()
144
+ }
145
+ },
146
+ onFinish: () => {
147
+ this.processing = false
148
+ this.progress = null
149
+ cancelToken = null
150
+
151
+ if (options.onFinish) {
152
+ return options.onFinish()
153
+ }
154
+ },
155
+ }
156
+
157
+ if (method === 'delete') {
158
+ router.delete(url, { ..._options, data })
159
+ } else {
160
+ router[method](url, data, _options)
161
+ }
162
+ },
163
+ get(url, options) {
164
+ this.submit('get', url, options)
165
+ },
166
+ post(url, options) {
167
+ this.submit('post', url, options)
168
+ },
169
+ put(url, options) {
170
+ this.submit('put', url, options)
171
+ },
172
+ patch(url, options) {
173
+ this.submit('patch', url, options)
174
+ },
175
+ delete(url, options) {
176
+ this.submit('delete', url, options)
177
+ },
178
+ cancel() {
179
+ if (cancelToken) {
180
+ cancelToken.cancel()
181
+ }
182
+ },
183
+ __rememberable: rememberKey === null,
184
+ __remember() {
185
+ return { data: this.data(), errors: this.errors }
186
+ },
187
+ __restore(restored) {
188
+ Object.assign(this, restored.data)
189
+ this.setError(restored.errors)
190
+ },
191
+ })
192
+
193
+ watch(
194
+ form,
195
+ (newValue) => {
196
+ form.isDirty = !isEqual(form.data(), defaults)
197
+ if (rememberKey) {
198
+ router.remember(cloneDeep(newValue.__remember()), rememberKey)
199
+ }
200
+ },
201
+ { immediate: true, deep: true },
202
+ )
203
+
204
+ return form
205
+ }
@@ -0,0 +1,24 @@
1
+ import { router } from '@inertiajs/core'
2
+ import cloneDeep from 'lodash.clonedeep'
3
+ import { isReactive, reactive, ref, watch } from 'vue'
4
+
5
+ export default function useRemember(data, key) {
6
+ if (typeof data === 'object' && data !== null && data.__rememberable === false) {
7
+ return data
8
+ }
9
+
10
+ const restored = router.restore(key)
11
+ const type = isReactive(data) ? reactive : ref
12
+ const hasCallbacks = typeof data.__remember === 'function' && typeof data.__restore === 'function'
13
+ const remembered = restored === undefined ? data : type(hasCallbacks ? data.__restore(restored) : restored)
14
+
15
+ watch(
16
+ remembered,
17
+ (newValue) => {
18
+ router.remember(cloneDeep(hasCallbacks ? data.__remember() : newValue), key)
19
+ },
20
+ { immediate: true, deep: true },
21
+ )
22
+
23
+ return remembered
24
+ }