ziggy-js 1.4.3 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.m.js +1 -1
- package/dist/vue.es.js +1 -1
- package/dist/vue.js +1 -1
- package/dist/vue.m.js +1 -1
- package/package.json +1 -1
- package/src/js/Route.js +23 -13
- package/src/js/Router.js +53 -60
- package/src/js/vue.js +13 -5
package/dist/index.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{parse as t,stringify as e}from"qs";function r(){return r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t},r.apply(this,arguments)}class i{constructor(t,e,r){var i,s;this.name=t,this.definition=e,this.bindings=null!=(i=e.bindings)?i:{},this.wheres=null!=(s=e.wheres)?s:{},this.config=r}get template(){return`${this.config.absolute?this.definition.domain?`${this.config.url.match(/^\w+:\/\//)[0]}${this.definition.domain}${this.config.port?`:${this.config.port}`:""}`:this.config.url:""}/${this.definition.uri}`.replace(/\/+$/,"")}get parameterSegments(){var t,e;return null!=(t=null==(e=this.template.match(/{[^}?]+\??}/g))?void 0:e.map(t=>({name:t.replace(/{|\??}/g,""),required:!/\?}$/.test(t)})))?t:[]}matchesUrl(e){if(!this.definition.methods.includes("GET"))return!1;const r=this.template.replace(/(\/?){([^}?]*)(\??)}/g,(t,e,r,i)=>{const s=`(?<${r}>${this.wheres[r]||"[^/?]+"})`;return i?`(${e}${s})?`:`${e}${s}`}).replace(/^\w+:\/\//,""),[i,s]=e.replace(/^\w+:\/\//,"").split("?"),n=new RegExp(`^${r}/?$`).exec(i);return!!n&&{params:n.groups,query:t(s)}}compile(t){const e=this.parameterSegments;return e.length?this.template.replace(/{([^}?]+)(\??)}/g,(r,i,s)=>{var n,o,h;if(!s&&[null,void 0].includes(t[i]))throw new Error(`Ziggy error: '${i}' parameter is required for route '${this.name}'.`);if(e[e.length-1].name===i&&".*"===this.wheres[i])return encodeURIComponent(null!=(h=t[i])?h:"").replaceAll("%2F","/");if(this.wheres[i]&&!new RegExp(`^${s?`(${this.wheres[i]})?`:this.wheres[i]}$`).test(null!=(n=t[i])?n:""))throw new Error(`Ziggy error: '${i}' parameter does not match required format '${this.wheres[i]}' for route '${this.name}'.`);return encodeURIComponent(null!=(o=t[i])?o:"")}).replace(/\/+$/,""):this.template}}class s extends String{constructor(t,e,s=!0,n){if(super(),this.t=null!=n?n:"undefined"!=typeof Ziggy?Ziggy:null==globalThis?void 0:globalThis.Ziggy,this.t=r({},this.t,{absolute:s}),t){if(!this.t.routes[t])throw new Error(`Ziggy error: route '${t}' is not in the route list.`);this.i=new i(t,this.t.routes[t],this.t),this.o=this.h(e)}}toString(){const t=Object.keys(this.o).filter(t=>!this.i.parameterSegments.some(({name:e})=>e===t)).filter(t=>"_query"!==t).reduce((t,e)=>r({},t,{[e]:this.o[e]}),{});return this.i.compile(this.o)+e(r({},t,this.o._query),{addQueryPrefix:!0,arrayFormat:"indices",encodeValuesOnly:!0,skipNulls:!0,encoder:(t,e)=>"boolean"==typeof t?Number(t):e(t)})}u(t){t?this.t.absolute&&t.startsWith("/")&&(t=this.l().host+t):t=this.m();let e={};const[s,n]=Object.entries(this.t.routes).find(([r,s])=>e=new i(r,s,this.t).matchesUrl(t))||[void 0,void 0];return r({name:s},e,{route:n})}m(){const{host:t,pathname:e,search:r}=this.l();return(this.t.absolute?t+e:e.replace(this.t.url.replace(/^\w*:\/\/[^/]+/,""),"").replace(/^\/+/,"/"))+r}current(t,e){const{name:s,params:n,query:o,route:h}=this.u();if(r({},n,o),!t)return s;const u=new RegExp(`^${t.replace(/\./g,"\\.").replace(/\*/g,".*")}$`).test(s);if([null,void 0].includes(e)||!u)return u;const a=new i(s,h,this.t);e=this.h(e,a);const l=r({},n,o);return Object.keys(l).forEach(t=>void 0===l[t]&&delete l[t]),!(!Object.values(e).every(t=>!t)||Object.values(l).length)||Object.entries(e).every(([t,e])=>l[t]==e)}l(){var t,e,r,i,s,n;const{host:o="",pathname:h="",search:u=""}="undefined"!=typeof window?window.location:{};return{host:null!=(t=null==(e=this.t.location)?void 0:e.host)?t:o,pathname:null!=(r=null==(i=this.t.location)?void 0:i.pathname)?r:h,search:null!=(s=null==(n=this.t.location)?void 0:n.search)?s:u}}get params(){const{params:t,query:e}=this.u();return r({},t,e)}has(t){return Object.keys(this.t.routes).includes(t)}h(t={},e=this.i){t=["string","number"].includes(typeof t)?[t]:t;const i=e.parameterSegments.filter(({name:t})=>!this.t.defaults[t]);return Array.isArray(t)?t=t.reduce((t,e,s)=>r({},t,i[s]?{[i[s].name]:e}:"object"==typeof e?e:{[e]:""}),{}):1!==i.length||t[i[0].name]||!t.hasOwnProperty(Object.values(e.bindings)[0])&&!t.hasOwnProperty("id")||(t={[i[0].name]:t}),r({},this.g(e),this.p(t,e))}g(t){return t.parameterSegments.filter(({name:t})=>this.t.defaults[t]).reduce((t,{name:e},i)=>r({},t,{[e]:this.t.defaults[e]}),{})}p(t,{bindings:e,parameterSegments:i}){return Object.entries(t).reduce((t,[s,n])=>{if(!n||"object"!=typeof n||Array.isArray(n)||!i.some(({name:t})=>t===s))return r({},t,{[s]:n});if(!n.hasOwnProperty(e[s])){if(!n.hasOwnProperty("id"))throw new Error(`Ziggy error: object passed as '${s}' parameter is missing route model binding key '${e[s]}'.`);e[s]="id"}return r({},t,{[s]:n[e[s]]})},{})}valueOf(){return this.toString()}check(t){return this.has(t)}}function n(t,e,r,i){const n=new s(t,e,r,i);return t?n.toString():n}export{n as default};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("qs")):"function"==typeof define&&define.amd?define(["qs"],t):(n||self).route=t(n.qs)}(this,function(n){function t(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}function r(n,r,e){return r&&t(n.prototype,r),e&&t(n,e),Object.defineProperty(n,"prototype",{writable:!1}),n}function e(){return e=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(n[e]=r[e])}return n},e.apply(this,arguments)}function i(n){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},i(n)}function u(n,t){return u=Object.setPrototypeOf||function(n,t){return n.__proto__=t,n},u(n,t)}function o(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(n){return!1}}function f(n,t,r){return f=o()?Reflect.construct:function(n,t,r){var e=[null];e.push.apply(e,t);var i=new(Function.bind.apply(n,e));return r&&u(i,r.prototype),i},f.apply(null,arguments)}function c(n){var t="function"==typeof Map?new Map:void 0;return c=function(n){if(null===n||-1===Function.toString.call(n).indexOf("[native code]"))return n;if("function"!=typeof n)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(n))return t.get(n);t.set(n,r)}function r(){return f(n,arguments,i(this).constructor)}return r.prototype=Object.create(n.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),u(r,n)},c(n)}var
|
|
1
|
+
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("qs")):"function"==typeof define&&define.amd?define(["qs"],t):(n||self).route=t(n.qs)}(this,function(n){function t(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}function r(n,r,e){return r&&t(n.prototype,r),e&&t(n,e),Object.defineProperty(n,"prototype",{writable:!1}),n}function e(){return e=Object.assign||function(n){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(n[e]=r[e])}return n},e.apply(this,arguments)}function i(n){return i=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},i(n)}function u(n,t){return u=Object.setPrototypeOf||function(n,t){return n.__proto__=t,n},u(n,t)}function o(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(n){return!1}}function f(n,t,r){return f=o()?Reflect.construct:function(n,t,r){var e=[null];e.push.apply(e,t);var i=new(Function.bind.apply(n,e));return r&&u(i,r.prototype),i},f.apply(null,arguments)}function c(n){var t="function"==typeof Map?new Map:void 0;return c=function(n){if(null===n||-1===Function.toString.call(n).indexOf("[native code]"))return n;if("function"!=typeof n)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(n))return t.get(n);t.set(n,r)}function r(){return f(n,arguments,i(this).constructor)}return r.prototype=Object.create(n.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),u(r,n)},c(n)}var a=/*#__PURE__*/function(){function t(n,t,r){var e,i;this.name=n,this.definition=t,this.bindings=null!=(e=t.bindings)?e:{},this.wheres=null!=(i=t.wheres)?i:{},this.config=r}var e=t.prototype;return e.matchesUrl=function(t){var r=this;if(!this.definition.methods.includes("GET"))return!1;var e=this.template.replace(/(\/?){([^}?]*)(\??)}/g,function(n,t,e,i){var u="(?<"+e+">"+(r.wheres[e]||"[^/?]+")+")";return i?"("+t+u+")?":""+t+u}).replace(/^\w+:\/\//,""),i=t.replace(/^\w+:\/\//,"").split("?"),u=i[0],o=i[1],f=new RegExp("^"+e+"/?$").exec(u);return!!f&&{params:f.groups,query:n.parse(o)}},e.compile=function(n){var t=this,r=this.parameterSegments;return r.length?this.template.replace(/{([^}?]+)(\??)}/g,function(e,i,u){var o,f,c;if(!u&&[null,void 0].includes(n[i]))throw new Error("Ziggy error: '"+i+"' parameter is required for route '"+t.name+"'.");if(r[r.length-1].name===i&&".*"===t.wheres[i])return encodeURIComponent(null!=(c=n[i])?c:"").replaceAll("%2F","/");if(t.wheres[i]&&!new RegExp("^"+(u?"("+t.wheres[i]+")?":t.wheres[i])+"$").test(null!=(o=n[i])?o:""))throw new Error("Ziggy error: '"+i+"' parameter does not match required format '"+t.wheres[i]+"' for route '"+t.name+"'.");return encodeURIComponent(null!=(f=n[i])?f:"")}).replace(/\/+$/,""):this.template},r(t,[{key:"template",get:function(){return((this.config.absolute?this.definition.domain?""+this.config.url.match(/^\w+:\/\//)[0]+this.definition.domain+(this.config.port?":"+this.config.port:""):this.config.url:"")+"/"+this.definition.uri).replace(/\/+$/,"")}},{key:"parameterSegments",get:function(){var n,t;return null!=(n=null==(t=this.template.match(/{[^}?]+\??}/g))?void 0:t.map(function(n){return{name:n.replace(/{|\??}/g,""),required:!/\?}$/.test(n)}}))?n:[]}}]),t}(),s=/*#__PURE__*/function(t){var i,o;function f(n,r,i,u){var o;if(void 0===i&&(i=!0),(o=t.call(this)||this).t=null!=u?u:"undefined"!=typeof Ziggy?Ziggy:null==globalThis?void 0:globalThis.Ziggy,o.t=e({},o.t,{absolute:i}),n){if(!o.t.routes[n])throw new Error("Ziggy error: route '"+n+"' is not in the route list.");o.i=new a(n,o.t.routes[n],o.t),o.u=o.o(r)}return o}o=t,(i=f).prototype=Object.create(o.prototype),i.prototype.constructor=i,u(i,o);var c=f.prototype;return c.toString=function(){var t=this,r=Object.keys(this.u).filter(function(n){return!t.i.parameterSegments.some(function(t){return t.name===n})}).filter(function(n){return"_query"!==n}).reduce(function(n,r){var i;return e({},n,((i={})[r]=t.u[r],i))},{});return this.i.compile(this.u)+n.stringify(e({},r,this.u._query),{addQueryPrefix:!0,arrayFormat:"indices",encodeValuesOnly:!0,skipNulls:!0,encoder:function(n,t){return"boolean"==typeof n?Number(n):t(n)}})},c.l=function(n){var t=this;n?this.t.absolute&&n.startsWith("/")&&(n=this.h().host+n):n=this.v();var r={},i=Object.entries(this.t.routes).find(function(e){return r=new a(e[0],e[1],t.t).matchesUrl(n)})||[void 0,void 0];return e({name:i[0]},r,{route:i[1]})},c.v=function(){var n=this.h(),t=n.pathname,r=n.search;return(this.t.absolute?n.host+t:t.replace(this.t.url.replace(/^\w*:\/\/[^/]+/,""),"").replace(/^\/+/,"/"))+r},c.current=function(n,t){var r=this.l(),i=r.name,u=r.params,o=r.query,f=r.route;if(e({},u,o),!n)return i;var c=new RegExp("^"+n.replace(/\./g,"\\.").replace(/\*/g,".*")+"$").test(i);if([null,void 0].includes(t)||!c)return c;var s=new a(i,f,this.t);t=this.o(t,s);var l=e({},u,o);return Object.keys(l).forEach(function(n){return void 0===l[n]&&delete l[n]}),!(!Object.values(t).every(function(n){return!n})||Object.values(l).length)||Object.entries(t).every(function(n){return l[n[0]]==n[1]})},c.h=function(){var n,t,r,e,i,u,o="undefined"!=typeof window?window.location:{},f=o.host,c=o.pathname,a=o.search;return{host:null!=(n=null==(t=this.t.location)?void 0:t.host)?n:void 0===f?"":f,pathname:null!=(r=null==(e=this.t.location)?void 0:e.pathname)?r:void 0===c?"":c,search:null!=(i=null==(u=this.t.location)?void 0:u.search)?i:void 0===a?"":a}},c.has=function(n){return Object.keys(this.t.routes).includes(n)},c.o=function(n,t){var r=this;void 0===n&&(n={}),void 0===t&&(t=this.i),n=["string","number"].includes(typeof n)?[n]:n;var i=t.parameterSegments.filter(function(n){return!r.t.defaults[n.name]});if(Array.isArray(n))n=n.reduce(function(n,t,r){var u,o;return e({},n,i[r]?((u={})[i[r].name]=t,u):"object"==typeof t?t:((o={})[t]="",o))},{});else if(1===i.length&&!n[i[0].name]&&(n.hasOwnProperty(Object.values(t.bindings)[0])||n.hasOwnProperty("id"))){var u;(u={})[i[0].name]=n,n=u}return e({},this.p(t),this.g(n,t))},c.p=function(n){var t=this;return n.parameterSegments.filter(function(n){return t.t.defaults[n.name]}).reduce(function(n,r,i){var u,o=r.name;return e({},n,((u={})[o]=t.t.defaults[o],u))},{})},c.g=function(n,t){var r=t.bindings,i=t.parameterSegments;return Object.entries(n).reduce(function(n,t){var u,o,f=t[0],c=t[1];if(!c||"object"!=typeof c||Array.isArray(c)||!i.some(function(n){return n.name===f}))return e({},n,((o={})[f]=c,o));if(!c.hasOwnProperty(r[f])){if(!c.hasOwnProperty("id"))throw new Error("Ziggy error: object passed as '"+f+"' parameter is missing route model binding key '"+r[f]+"'.");r[f]="id"}return e({},n,((u={})[f]=c[r[f]],u))},{})},c.valueOf=function(){return this.toString()},c.check=function(n){return this.has(n)},r(f,[{key:"params",get:function(){var n=this.l();return e({},n.params,n.query)}}]),f}(/*#__PURE__*/c(String));return function(n,t,r,e){var i=new s(n,t,r,e);return n?i.toString():i}});
|
package/dist/index.m.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{parse as t,stringify as n}from"qs";function r(t,n){for(var r=0;r<n.length;r++){var e=n[r];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(t,e.key,e)}}function e(t,n,e){return n&&r(t.prototype,n),e&&r(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}function i(){return i=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t},i.apply(this,arguments)}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function o(t,n){return o=Object.setPrototypeOf||function(t,n){return t.__proto__=n,t},o(t,n)}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function c(t,n,r){return c=f()?Reflect.construct:function(t,n,r){var e=[null];e.push.apply(e,n);var i=new(Function.bind.apply(t,e));return r&&o(i,r.prototype),i},c.apply(null,arguments)}function a(t){var n="function"==typeof Map?new Map:void 0;return a=function(t){if(null===t||-1===Function.toString.call(t).indexOf("[native code]"))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(t))return n.get(t);n.set(t,r)}function r(){return c(t,arguments,u(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),o(r,t)},a(t)}var s=/*#__PURE__*/function(){function n(t,n,r){var e,i;this.name=t,this.definition=n,this.bindings=null!=(e=n.bindings)?e:{},this.wheres=null!=(i=n.wheres)?i:{},this.config=r}var r=n.prototype;return r.matchesUrl=function(n){var r=this;if(!this.definition.methods.includes("GET"))return!1;var e=this.template.replace(/(\/?){([^}?]*)(\??)}/g,function(t,n,e,i){var u="(?<"+e+">"+(r.wheres[e]||"[^/?]+")+")";return i?"("+n+u+")?":""+n+u}).replace(/^\w+:\/\//,""),i=n.replace(/^\w+:\/\//,"").split("?"),u=i[0],o=i[1],f=new RegExp("^"+e+"/?$").exec(u);return!!f&&{params:f.groups,query:t(o)}},r.compile=function(t){var n=this,r=this.parameterSegments;return r.length?this.template.replace(/{([^}?]+)(\??)}/g,function(e,i,u){var o,f,c;if(!u&&[null,void 0].includes(t[i]))throw new Error("Ziggy error: '"+i+"' parameter is required for route '"+n.name+"'.");if(r[r.length-1].name===i&&".*"===n.wheres[i])return encodeURIComponent(null!=(c=t[i])?c:"").replaceAll("%2F","/");if(n.wheres[i]&&!new RegExp("^"+(u?"("+n.wheres[i]+")?":n.wheres[i])+"$").test(null!=(o=t[i])?o:""))throw new Error("Ziggy error: '"+i+"' parameter does not match required format '"+n.wheres[i]+"' for route '"+n.name+"'.");return encodeURIComponent(null!=(f=t[i])?f:"")}).replace(/\/+$/,""):this.template},e(n,[{key:"template",get:function(){return((this.config.absolute?this.definition.domain?""+this.config.url.match(/^\w+:\/\//)[0]+this.definition.domain+(this.config.port?":"+this.config.port:""):this.config.url:"")+"/"+this.definition.uri).replace(/\/+$/,"")}},{key:"parameterSegments",get:function(){var t,n;return null!=(t=null==(n=this.template.match(/{[^}?]+\??}/g))?void 0:n.map(function(t){return{name:t.replace(/{|\??}/g,""),required:!/\?}$/.test(t)}}))?t:[]}}]),n}(),l=/*#__PURE__*/function(t){var r,u;function f(n,r,e,u){var o;if(void 0===e&&(e=!0),(o=t.call(this)||this).t=null!=u?u:"undefined"!=typeof Ziggy?Ziggy:null==globalThis?void 0:globalThis.Ziggy,o.t=i({},o.t,{absolute:e}),n){if(!o.t.routes[n])throw new Error("Ziggy error: route '"+n+"' is not in the route list.");o.i=new s(n,o.t.routes[n],o.t),o.u=o.o(r)}return o}u=t,(r=f).prototype=Object.create(u.prototype),r.prototype.constructor=r,o(r,u);var c=f.prototype;return c.toString=function(){var t=this,r=Object.keys(this.u).filter(function(n){return!t.i.parameterSegments.some(function(t){return t.name===n})}).filter(function(t){return"_query"!==t}).reduce(function(n,r){var e;return i({},n,((e={})[r]=t.u[r],e))},{});return this.i.compile(this.u)+n(i({},r,this.u._query),{addQueryPrefix:!0,arrayFormat:"indices",encodeValuesOnly:!0,skipNulls:!0,encoder:function(t,n){return"boolean"==typeof t?Number(t):n(t)}})},c.l=function(t){var n=this;t?this.t.absolute&&t.startsWith("/")&&(t=this.h().host+t):t=this.v();var r={},e=Object.entries(this.t.routes).find(function(e){return r=new s(e[0],e[1],n.t).matchesUrl(t)})||[void 0,void 0];return i({name:e[0]},r,{route:e[1]})},c.v=function(){var t=this.h(),n=t.pathname,r=t.search;return(this.t.absolute?t.host+n:n.replace(this.t.url.replace(/^\w*:\/\/[^/]+/,""),"").replace(/^\/+/,"/"))+r},c.current=function(t,n){var r=this.l(),e=r.name,u=r.params,o=r.query,f=r.route;if(i({},u,o),!t)return e;var c=new RegExp("^"+t.replace(/\./g,"\\.").replace(/\*/g,".*")+"$").test(e);if([null,void 0].includes(n)||!c)return c;var a=new s(e,f,this.t);n=this.o(n,a);var l=i({},u,o);return Object.keys(l).forEach(function(t){return void 0===l[t]&&delete l[t]}),!(!Object.values(n).every(function(t){return!t})||Object.values(l).length)||Object.entries(n).every(function(t){return l[t[0]]==t[1]})},c.h=function(){var t,n,r,e,i,u,o="undefined"!=typeof window?window.location:{},f=o.host,c=o.pathname,a=o.search;return{host:null!=(t=null==(n=this.t.location)?void 0:n.host)?t:void 0===f?"":f,pathname:null!=(r=null==(e=this.t.location)?void 0:e.pathname)?r:void 0===c?"":c,search:null!=(i=null==(u=this.t.location)?void 0:u.search)?i:void 0===a?"":a}},c.has=function(t){return Object.keys(this.t.routes).includes(t)},c.o=function(t,n){var r=this;void 0===t&&(t={}),void 0===n&&(n=this.i),t=["string","number"].includes(typeof t)?[t]:t;var e=n.parameterSegments.filter(function(t){return!r.t.defaults[t.name]});if(Array.isArray(t))t=t.reduce(function(t,n,r){var u,o;return i({},t,e[r]?((u={})[e[r].name]=n,u):"object"==typeof n?n:((o={})[n]="",o))},{});else if(1===e.length&&!t[e[0].name]&&(t.hasOwnProperty(Object.values(n.bindings)[0])||t.hasOwnProperty("id"))){var u;(u={})[e[0].name]=t,t=u}return i({},this.p(n),this.g(t,n))},c.p=function(t){var n=this;return t.parameterSegments.filter(function(t){return n.t.defaults[t.name]}).reduce(function(t,r,e){var u,o=r.name;return i({},t,((u={})[o]=n.t.defaults[o],u))},{})},c.g=function(t,n){var r=n.bindings,e=n.parameterSegments;return Object.entries(t).reduce(function(t,n){var u,o,f=n[0],c=n[1];if(!c||"object"!=typeof c||Array.isArray(c)||!e.some(function(t){return t.name===f}))return i({},t,((o={})[f]=c,o));if(!c.hasOwnProperty(r[f])){if(!c.hasOwnProperty("id"))throw new Error("Ziggy error: object passed as '"+f+"' parameter is missing route model binding key '"+r[f]+"'.");r[f]="id"}return i({},t,((u={})[f]=c[r[f]],u))},{})},c.valueOf=function(){return this.toString()},c.check=function(t){return this.has(t)},e(f,[{key:"params",get:function(){var t=this.l();return i({},t.params,t.query)}}]),f}(/*#__PURE__*/a(String));function h(t,n,r,e){var i=new l(t,n,r,e);return t?i.toString():i}export{h as default};
|
package/dist/vue.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{parse as t,stringify as e}from"qs";function r(){return r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t},r.apply(this,arguments)}class i{constructor(t,e,r){var i,s;this.name=t,this.definition=e,this.bindings=null!=(i=e.bindings)?i:{},this.wheres=null!=(s=e.wheres)?s:{},this.config=r}get template(){return`${this.config.absolute?this.definition.domain?`${this.config.url.match(/^\w+:\/\//)[0]}${this.definition.domain}${this.config.port?`:${this.config.port}`:""}`:this.config.url:""}/${this.definition.uri}`.replace(/\/+$/,"")}get parameterSegments(){var t,e;return null!=(t=null==(e=this.template.match(/{[^}?]+\??}/g))?void 0:e.map(t=>({name:t.replace(/{|\??}/g,""),required:!/\?}$/.test(t)})))?t:[]}matchesUrl(e){if(!this.definition.methods.includes("GET"))return!1;const r=this.template.replace(/(\/?){([^}?]*)(\??)}/g,(t,e,r,i)=>{const s=`(?<${r}>${this.wheres[r]||"[^/?]+"})`;return i?`(${e}${s})?`:`${e}${s}`}).replace(/^\w+:\/\//,""),[i,s]=e.replace(/^\w+:\/\//,"").split("?"),n=new RegExp(`^${r}/?$`).exec(i);return!!n&&{params:n.groups,query:t(s)}}compile(t){const e=this.parameterSegments;return e.length?this.template.replace(/{([^}?]+)(\??)}/g,(r,i,s)=>{var n,o,h;if(!s&&[null,void 0].includes(t[i]))throw new Error(`Ziggy error: '${i}' parameter is required for route '${this.name}'.`);if(e[e.length-1].name===i&&".*"===this.wheres[i])return encodeURIComponent(null!=(h=t[i])?h:"").replaceAll("%2F","/");if(this.wheres[i]&&!new RegExp(`^${s?`(${this.wheres[i]})?`:this.wheres[i]}$`).test(null!=(n=t[i])?n:""))throw new Error(`Ziggy error: '${i}' parameter does not match required format '${this.wheres[i]}' for route '${this.name}'.`);return encodeURIComponent(null!=(o=t[i])?o:"")}).replace(/\/+$/,""):this.template}}class s extends String{constructor(t,e,s=!0,n){if(super(),this.t=null!=n?n:"undefined"!=typeof Ziggy?Ziggy:null==globalThis?void 0:globalThis.Ziggy,this.t=r({},this.t,{absolute:s}),t){if(!this.t.routes[t])throw new Error(`Ziggy error: route '${t}' is not in the route list.`);this.i=new i(t,this.t.routes[t],this.t),this.o=this.h(e)}}toString(){const t=Object.keys(this.o).filter(t=>!this.i.parameterSegments.some(({name:e})=>e===t)).filter(t=>"_query"!==t).reduce((t,e)=>r({},t,{[e]:this.o[e]}),{});return this.i.compile(this.o)+e(r({},t,this.o._query),{addQueryPrefix:!0,arrayFormat:"indices",encodeValuesOnly:!0,skipNulls:!0,encoder:(t,e)=>"boolean"==typeof t?Number(t):e(t)})}u(t){t?this.t.absolute&&t.startsWith("/")&&(t=this.l().host+t):t=this.m();let e={};const[s,n]=Object.entries(this.t.routes).find(([r,s])=>e=new i(r,s,this.t).matchesUrl(t))||[void 0,void 0];return r({name:s},e,{route:n})}m(){const{host:t,pathname:e,search:r}=this.l();return(this.t.absolute?t+e:e.replace(this.t.url.replace(/^\w*:\/\/[^/]+/,""),"").replace(/^\/+/,"/"))+r}current(t,e){const{name:s,params:n,query:o,route:h}=this.u();if(r({},n,o),!t)return s;const u=new RegExp(`^${t.replace(/\./g,"\\.").replace(/\*/g,".*")}$`).test(s);if([null,void 0].includes(e)||!u)return u;const a=new i(s,h,this.t);e=this.h(e,a);const l=r({},n,o);return Object.keys(l).forEach(t=>void 0===l[t]&&delete l[t]),!(!Object.values(e).every(t=>!t)||Object.values(l).length)||Object.entries(e).every(([t,e])=>l[t]==e)}l(){var t,e,r,i,s,n;const{host:o="",pathname:h="",search:u=""}="undefined"!=typeof window?window.location:{};return{host:null!=(t=null==(e=this.t.location)?void 0:e.host)?t:o,pathname:null!=(r=null==(i=this.t.location)?void 0:i.pathname)?r:h,search:null!=(s=null==(n=this.t.location)?void 0:n.search)?s:u}}get params(){const{params:t,query:e}=this.u();return r({},t,e)}has(t){return Object.keys(this.t.routes).includes(t)}h(t={},e=this.i){t=["string","number"].includes(typeof t)?[t]:t;const i=e.parameterSegments.filter(({name:t})=>!this.t.defaults[t]);return Array.isArray(t)?t=t.reduce((t,e,s)=>r({},t,i[s]?{[i[s].name]:e}:"object"==typeof e?e:{[e]:""}),{}):1!==i.length||t[i[0].name]||!t.hasOwnProperty(Object.values(e.bindings)[0])&&!t.hasOwnProperty("id")||(t={[i[0].name]:t}),r({},this.g(e),this.p(t,e))}g(t){return t.parameterSegments.filter(({name:t})=>this.t.defaults[t]).reduce((t,{name:e},i)=>r({},t,{[e]:this.t.defaults[e]}),{})}p(t,{bindings:e,parameterSegments:i}){return Object.entries(t).reduce((t,[s,n])=>{if(!n||"object"!=typeof n||Array.isArray(n)||!i.some(({name:t})=>t===s))return r({},t,{[s]:n});if(!n.hasOwnProperty(e[s])){if(!n.hasOwnProperty("id"))throw new Error(`Ziggy error: object passed as '${s}' parameter is missing route model binding key '${e[s]}'.`);e[s]="id"}return r({},t,{[s]:n[e[s]]})},{})}valueOf(){return this.toString()}check(t){return this.has(t)}}const n={install:(t,e)=>{const r=(t,r,i,n=e)=>function(t,e,r,i){const n=new s(t,e,r,i);return t?n.toString():n}(t,r,i,n);t.mixin({methods:{route:r}}),parseInt(t.version)>2&&t.provide("route",r)}};export{n as ZiggyVue};
|
package/dist/vue.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(n
|
|
1
|
+
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("qs")):"function"==typeof define&&define.amd?define(["exports","qs"],n):n((t||self).ZiggyVue={},t.qs)}(this,function(t,n){function r(t,n){for(var r=0;r<n.length;r++){var e=n[r];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(t,e.key,e)}}function e(t,n,e){return n&&r(t.prototype,n),e&&r(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}function i(){return i=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t},i.apply(this,arguments)}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function o(t,n){return o=Object.setPrototypeOf||function(t,n){return t.__proto__=n,t},o(t,n)}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function c(t,n,r){return c=f()?Reflect.construct:function(t,n,r){var e=[null];e.push.apply(e,n);var i=new(Function.bind.apply(t,e));return r&&o(i,r.prototype),i},c.apply(null,arguments)}function s(t){var n="function"==typeof Map?new Map:void 0;return s=function(t){if(null===t||-1===Function.toString.call(t).indexOf("[native code]"))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(t))return n.get(t);n.set(t,r)}function r(){return c(t,arguments,u(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),o(r,t)},s(t)}var a=/*#__PURE__*/function(){function t(t,n,r){var e,i;this.name=t,this.definition=n,this.bindings=null!=(e=n.bindings)?e:{},this.wheres=null!=(i=n.wheres)?i:{},this.config=r}var r=t.prototype;return r.matchesUrl=function(t){var r=this;if(!this.definition.methods.includes("GET"))return!1;var e=this.template.replace(/(\/?){([^}?]*)(\??)}/g,function(t,n,e,i){var u="(?<"+e+">"+(r.wheres[e]||"[^/?]+")+")";return i?"("+n+u+")?":""+n+u}).replace(/^\w+:\/\//,""),i=t.replace(/^\w+:\/\//,"").split("?"),u=i[0],o=i[1],f=new RegExp("^"+e+"/?$").exec(u);return!!f&&{params:f.groups,query:n.parse(o)}},r.compile=function(t){var n=this,r=this.parameterSegments;return r.length?this.template.replace(/{([^}?]+)(\??)}/g,function(e,i,u){var o,f,c;if(!u&&[null,void 0].includes(t[i]))throw new Error("Ziggy error: '"+i+"' parameter is required for route '"+n.name+"'.");if(r[r.length-1].name===i&&".*"===n.wheres[i])return encodeURIComponent(null!=(c=t[i])?c:"").replaceAll("%2F","/");if(n.wheres[i]&&!new RegExp("^"+(u?"("+n.wheres[i]+")?":n.wheres[i])+"$").test(null!=(o=t[i])?o:""))throw new Error("Ziggy error: '"+i+"' parameter does not match required format '"+n.wheres[i]+"' for route '"+n.name+"'.");return encodeURIComponent(null!=(f=t[i])?f:"")}).replace(/\/+$/,""):this.template},e(t,[{key:"template",get:function(){return((this.config.absolute?this.definition.domain?""+this.config.url.match(/^\w+:\/\//)[0]+this.definition.domain+(this.config.port?":"+this.config.port:""):this.config.url:"")+"/"+this.definition.uri).replace(/\/+$/,"")}},{key:"parameterSegments",get:function(){var t,n;return null!=(t=null==(n=this.template.match(/{[^}?]+\??}/g))?void 0:n.map(function(t){return{name:t.replace(/{|\??}/g,""),required:!/\?}$/.test(t)}}))?t:[]}}]),t}(),l=/*#__PURE__*/function(t){var r,u;function f(n,r,e,u){var o;if(void 0===e&&(e=!0),(o=t.call(this)||this).t=null!=u?u:"undefined"!=typeof Ziggy?Ziggy:null==globalThis?void 0:globalThis.Ziggy,o.t=i({},o.t,{absolute:e}),n){if(!o.t.routes[n])throw new Error("Ziggy error: route '"+n+"' is not in the route list.");o.i=new a(n,o.t.routes[n],o.t),o.u=o.o(r)}return o}u=t,(r=f).prototype=Object.create(u.prototype),r.prototype.constructor=r,o(r,u);var c=f.prototype;return c.toString=function(){var t=this,r=Object.keys(this.u).filter(function(n){return!t.i.parameterSegments.some(function(t){return t.name===n})}).filter(function(t){return"_query"!==t}).reduce(function(n,r){var e;return i({},n,((e={})[r]=t.u[r],e))},{});return this.i.compile(this.u)+n.stringify(i({},r,this.u._query),{addQueryPrefix:!0,arrayFormat:"indices",encodeValuesOnly:!0,skipNulls:!0,encoder:function(t,n){return"boolean"==typeof t?Number(t):n(t)}})},c.l=function(t){var n=this;t?this.t.absolute&&t.startsWith("/")&&(t=this.h().host+t):t=this.v();var r={},e=Object.entries(this.t.routes).find(function(e){return r=new a(e[0],e[1],n.t).matchesUrl(t)})||[void 0,void 0];return i({name:e[0]},r,{route:e[1]})},c.v=function(){var t=this.h(),n=t.pathname,r=t.search;return(this.t.absolute?t.host+n:n.replace(this.t.url.replace(/^\w*:\/\/[^/]+/,""),"").replace(/^\/+/,"/"))+r},c.current=function(t,n){var r=this.l(),e=r.name,u=r.params,o=r.query,f=r.route;if(i({},u,o),!t)return e;var c=new RegExp("^"+t.replace(/\./g,"\\.").replace(/\*/g,".*")+"$").test(e);if([null,void 0].includes(n)||!c)return c;var s=new a(e,f,this.t);n=this.o(n,s);var l=i({},u,o);return Object.keys(l).forEach(function(t){return void 0===l[t]&&delete l[t]}),!(!Object.values(n).every(function(t){return!t})||Object.values(l).length)||Object.entries(n).every(function(t){return l[t[0]]==t[1]})},c.h=function(){var t,n,r,e,i,u,o="undefined"!=typeof window?window.location:{},f=o.host,c=o.pathname,s=o.search;return{host:null!=(t=null==(n=this.t.location)?void 0:n.host)?t:void 0===f?"":f,pathname:null!=(r=null==(e=this.t.location)?void 0:e.pathname)?r:void 0===c?"":c,search:null!=(i=null==(u=this.t.location)?void 0:u.search)?i:void 0===s?"":s}},c.has=function(t){return Object.keys(this.t.routes).includes(t)},c.o=function(t,n){var r=this;void 0===t&&(t={}),void 0===n&&(n=this.i),t=["string","number"].includes(typeof t)?[t]:t;var e=n.parameterSegments.filter(function(t){return!r.t.defaults[t.name]});if(Array.isArray(t))t=t.reduce(function(t,n,r){var u,o;return i({},t,e[r]?((u={})[e[r].name]=n,u):"object"==typeof n?n:((o={})[n]="",o))},{});else if(1===e.length&&!t[e[0].name]&&(t.hasOwnProperty(Object.values(n.bindings)[0])||t.hasOwnProperty("id"))){var u;(u={})[e[0].name]=t,t=u}return i({},this.p(n),this.g(t,n))},c.p=function(t){var n=this;return t.parameterSegments.filter(function(t){return n.t.defaults[t.name]}).reduce(function(t,r,e){var u,o=r.name;return i({},t,((u={})[o]=n.t.defaults[o],u))},{})},c.g=function(t,n){var r=n.bindings,e=n.parameterSegments;return Object.entries(t).reduce(function(t,n){var u,o,f=n[0],c=n[1];if(!c||"object"!=typeof c||Array.isArray(c)||!e.some(function(t){return t.name===f}))return i({},t,((o={})[f]=c,o));if(!c.hasOwnProperty(r[f])){if(!c.hasOwnProperty("id"))throw new Error("Ziggy error: object passed as '"+f+"' parameter is missing route model binding key '"+r[f]+"'.");r[f]="id"}return i({},t,((u={})[f]=c[r[f]],u))},{})},c.valueOf=function(){return this.toString()},c.check=function(t){return this.has(t)},e(f,[{key:"params",get:function(){var t=this.l();return i({},t.params,t.query)}}]),f}(/*#__PURE__*/s(String));t.ZiggyVue={install:function(t,n){var r=function(t,r,e,i){return void 0===i&&(i=n),function(t,n,r,e){var i=new l(t,n,r,e);return t?i.toString():i}(t,r,e,i)};t.mixin({methods:{route:r}}),parseInt(t.version)>2&&t.provide("route",r)}}});
|
package/dist/vue.m.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{parse as t,stringify as n}from"qs";function r(t,n){for(var r=0;r<n.length;r++){var e=n[r];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(t,e.key,e)}}function e(t,n,e){return n&&r(t.prototype,n),e&&r(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t}function i(){return i=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t},i.apply(this,arguments)}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function o(t,n){return o=Object.setPrototypeOf||function(t,n){return t.__proto__=n,t},o(t,n)}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function c(t,n,r){return c=f()?Reflect.construct:function(t,n,r){var e=[null];e.push.apply(e,n);var i=new(Function.bind.apply(t,e));return r&&o(i,r.prototype),i},c.apply(null,arguments)}function a(t){var n="function"==typeof Map?new Map:void 0;return a=function(t){if(null===t||-1===Function.toString.call(t).indexOf("[native code]"))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(t))return n.get(t);n.set(t,r)}function r(){return c(t,arguments,u(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),o(r,t)},a(t)}var s=/*#__PURE__*/function(){function n(t,n,r){var e,i;this.name=t,this.definition=n,this.bindings=null!=(e=n.bindings)?e:{},this.wheres=null!=(i=n.wheres)?i:{},this.config=r}var r=n.prototype;return r.matchesUrl=function(n){var r=this;if(!this.definition.methods.includes("GET"))return!1;var e=this.template.replace(/(\/?){([^}?]*)(\??)}/g,function(t,n,e,i){var u="(?<"+e+">"+(r.wheres[e]||"[^/?]+")+")";return i?"("+n+u+")?":""+n+u}).replace(/^\w+:\/\//,""),i=n.replace(/^\w+:\/\//,"").split("?"),u=i[0],o=i[1],f=new RegExp("^"+e+"/?$").exec(u);return!!f&&{params:f.groups,query:t(o)}},r.compile=function(t){var n=this,r=this.parameterSegments;return r.length?this.template.replace(/{([^}?]+)(\??)}/g,function(e,i,u){var o,f,c;if(!u&&[null,void 0].includes(t[i]))throw new Error("Ziggy error: '"+i+"' parameter is required for route '"+n.name+"'.");if(r[r.length-1].name===i&&".*"===n.wheres[i])return encodeURIComponent(null!=(c=t[i])?c:"").replaceAll("%2F","/");if(n.wheres[i]&&!new RegExp("^"+(u?"("+n.wheres[i]+")?":n.wheres[i])+"$").test(null!=(o=t[i])?o:""))throw new Error("Ziggy error: '"+i+"' parameter does not match required format '"+n.wheres[i]+"' for route '"+n.name+"'.");return encodeURIComponent(null!=(f=t[i])?f:"")}).replace(/\/+$/,""):this.template},e(n,[{key:"template",get:function(){return((this.config.absolute?this.definition.domain?""+this.config.url.match(/^\w+:\/\//)[0]+this.definition.domain+(this.config.port?":"+this.config.port:""):this.config.url:"")+"/"+this.definition.uri).replace(/\/+$/,"")}},{key:"parameterSegments",get:function(){var t,n;return null!=(t=null==(n=this.template.match(/{[^}?]+\??}/g))?void 0:n.map(function(t){return{name:t.replace(/{|\??}/g,""),required:!/\?}$/.test(t)}}))?t:[]}}]),n}(),l=/*#__PURE__*/function(t){var r,u;function f(n,r,e,u){var o;if(void 0===e&&(e=!0),(o=t.call(this)||this).t=null!=u?u:"undefined"!=typeof Ziggy?Ziggy:null==globalThis?void 0:globalThis.Ziggy,o.t=i({},o.t,{absolute:e}),n){if(!o.t.routes[n])throw new Error("Ziggy error: route '"+n+"' is not in the route list.");o.i=new s(n,o.t.routes[n],o.t),o.u=o.o(r)}return o}u=t,(r=f).prototype=Object.create(u.prototype),r.prototype.constructor=r,o(r,u);var c=f.prototype;return c.toString=function(){var t=this,r=Object.keys(this.u).filter(function(n){return!t.i.parameterSegments.some(function(t){return t.name===n})}).filter(function(t){return"_query"!==t}).reduce(function(n,r){var e;return i({},n,((e={})[r]=t.u[r],e))},{});return this.i.compile(this.u)+n(i({},r,this.u._query),{addQueryPrefix:!0,arrayFormat:"indices",encodeValuesOnly:!0,skipNulls:!0,encoder:function(t,n){return"boolean"==typeof t?Number(t):n(t)}})},c.l=function(t){var n=this;t?this.t.absolute&&t.startsWith("/")&&(t=this.h().host+t):t=this.v();var r={},e=Object.entries(this.t.routes).find(function(e){return r=new s(e[0],e[1],n.t).matchesUrl(t)})||[void 0,void 0];return i({name:e[0]},r,{route:e[1]})},c.v=function(){var t=this.h(),n=t.pathname,r=t.search;return(this.t.absolute?t.host+n:n.replace(this.t.url.replace(/^\w*:\/\/[^/]+/,""),"").replace(/^\/+/,"/"))+r},c.current=function(t,n){var r=this.l(),e=r.name,u=r.params,o=r.query,f=r.route;if(i({},u,o),!t)return e;var c=new RegExp("^"+t.replace(/\./g,"\\.").replace(/\*/g,".*")+"$").test(e);if([null,void 0].includes(n)||!c)return c;var a=new s(e,f,this.t);n=this.o(n,a);var l=i({},u,o);return Object.keys(l).forEach(function(t){return void 0===l[t]&&delete l[t]}),!(!Object.values(n).every(function(t){return!t})||Object.values(l).length)||Object.entries(n).every(function(t){return l[t[0]]==t[1]})},c.h=function(){var t,n,r,e,i,u,o="undefined"!=typeof window?window.location:{},f=o.host,c=o.pathname,a=o.search;return{host:null!=(t=null==(n=this.t.location)?void 0:n.host)?t:void 0===f?"":f,pathname:null!=(r=null==(e=this.t.location)?void 0:e.pathname)?r:void 0===c?"":c,search:null!=(i=null==(u=this.t.location)?void 0:u.search)?i:void 0===a?"":a}},c.has=function(t){return Object.keys(this.t.routes).includes(t)},c.o=function(t,n){var r=this;void 0===t&&(t={}),void 0===n&&(n=this.i),t=["string","number"].includes(typeof t)?[t]:t;var e=n.parameterSegments.filter(function(t){return!r.t.defaults[t.name]});if(Array.isArray(t))t=t.reduce(function(t,n,r){var u,o;return i({},t,e[r]?((u={})[e[r].name]=n,u):"object"==typeof n?n:((o={})[n]="",o))},{});else if(1===e.length&&!t[e[0].name]&&(t.hasOwnProperty(Object.values(n.bindings)[0])||t.hasOwnProperty("id"))){var u;(u={})[e[0].name]=t,t=u}return i({},this.p(n),this.g(t,n))},c.p=function(t){var n=this;return t.parameterSegments.filter(function(t){return n.t.defaults[t.name]}).reduce(function(t,r,e){var u,o=r.name;return i({},t,((u={})[o]=n.t.defaults[o],u))},{})},c.g=function(t,n){var r=n.bindings,e=n.parameterSegments;return Object.entries(t).reduce(function(t,n){var u,o,f=n[0],c=n[1];if(!c||"object"!=typeof c||Array.isArray(c)||!e.some(function(t){return t.name===f}))return i({},t,((o={})[f]=c,o));if(!c.hasOwnProperty(r[f])){if(!c.hasOwnProperty("id"))throw new Error("Ziggy error: object passed as '"+f+"' parameter is missing route model binding key '"+r[f]+"'.");r[f]="id"}return i({},t,((u={})[f]=c[r[f]],u))},{})},c.valueOf=function(){return this.toString()},c.check=function(t){return this.has(t)},e(f,[{key:"params",get:function(){var t=this.l();return i({},t.params,t.query)}}]),f}(/*#__PURE__*/a(String)),h={install:function(t,n){var r=function(t,r,e,i){return void 0===i&&(i=n),function(t,n,r,e){var i=new l(t,n,r,e);return t?i.toString():i}(t,r,e,i)};t.mixin({methods:{route:r}}),parseInt(t.version)>2&&t.provide("route",r)}};export{h as ZiggyVue};
|
package/package.json
CHANGED
package/src/js/Route.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { parse } from 'qs';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* A Laravel route. This class represents one route and its configuration and metadata.
|
|
3
5
|
*/
|
|
@@ -52,7 +54,7 @@ export default class Route {
|
|
|
52
54
|
* Get whether this route's template matches the given URL.
|
|
53
55
|
*
|
|
54
56
|
* @param {String} url - URL to check.
|
|
55
|
-
* @return {
|
|
57
|
+
* @return {Object|false} - If this route matches, returns the matched parameters.
|
|
56
58
|
*/
|
|
57
59
|
matchesUrl(url) {
|
|
58
60
|
if (!this.definition.methods.includes('GET')) return false;
|
|
@@ -60,15 +62,17 @@ export default class Route {
|
|
|
60
62
|
// Transform the route's template into a regex that will match a hydrated URL,
|
|
61
63
|
// by replacing its parameter segments with matchers for parameter values
|
|
62
64
|
const pattern = this.template
|
|
63
|
-
.replace(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
.replace(/{[^}?]*\?}/g, '([^/?]+)?')
|
|
68
|
-
.replace(/{[^}]+}/g, '[^/?]+')
|
|
65
|
+
.replace(/(\/?){([^}?]*)(\??)}/g, (_, slash, segment, optional) => {
|
|
66
|
+
const regex = `(?<${segment}>${this.wheres[segment] || '[^/?]+'})`;
|
|
67
|
+
return optional ? `(${slash}${regex})?` : `${slash}${regex}`;
|
|
68
|
+
})
|
|
69
69
|
.replace(/^\w+:\/\//, '');
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
const [location, query] = url.replace(/^\w+:\/\//, '').split('?');
|
|
72
|
+
|
|
73
|
+
const matches = new RegExp(`^${pattern}/?$`).exec(location);
|
|
74
|
+
|
|
75
|
+
return matches ? { params: matches.groups, query: parse(query) } : false;
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
/**
|
|
@@ -78,16 +82,22 @@ export default class Route {
|
|
|
78
82
|
* @return {String}
|
|
79
83
|
*/
|
|
80
84
|
compile(params) {
|
|
81
|
-
|
|
85
|
+
const segments = this.parameterSegments;
|
|
82
86
|
|
|
83
|
-
return this.template
|
|
87
|
+
if (!segments.length) return this.template;
|
|
88
|
+
|
|
89
|
+
return this.template.replace(/{([^}?]+)(\??)}/g, (_, segment, optional) => {
|
|
84
90
|
// If the parameter is missing but is not optional, throw an error
|
|
85
|
-
if ([null, undefined].includes(params[segment])
|
|
91
|
+
if (!optional && [null, undefined].includes(params[segment])) {
|
|
86
92
|
throw new Error(`Ziggy error: '${segment}' parameter is required for route '${this.name}'.`)
|
|
87
93
|
}
|
|
88
94
|
|
|
89
|
-
if (
|
|
90
|
-
return params[segment] ?? '';
|
|
95
|
+
if (segments[segments.length - 1].name === segment && this.wheres[segment] === '.*') {
|
|
96
|
+
return encodeURIComponent(params[segment] ?? '').replaceAll('%2F', '/');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (this.wheres[segment] && !new RegExp(`^${optional ? `(${this.wheres[segment]})?` : this.wheres[segment]}$`).test(params[segment] ?? '')) {
|
|
100
|
+
throw new Error(`Ziggy error: '${segment}' parameter does not match required format '${this.wheres[segment]}' for route '${this.name}'.`)
|
|
91
101
|
}
|
|
92
102
|
|
|
93
103
|
return encodeURIComponent(params[segment] ?? '');
|
package/src/js/Router.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { stringify } from 'qs';
|
|
2
2
|
import Route from './Route';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,10 +6,10 @@ import Route from './Route';
|
|
|
6
6
|
*/
|
|
7
7
|
export default class Router extends String {
|
|
8
8
|
/**
|
|
9
|
-
* @param {String} name - Route name.
|
|
10
|
-
* @param {(String|Number|Array|Object)} params - Route parameters.
|
|
11
|
-
* @param {Boolean} absolute - Whether to include the URL origin.
|
|
12
|
-
* @param {Object} config - Ziggy configuration.
|
|
9
|
+
* @param {String} [name] - Route name.
|
|
10
|
+
* @param {(String|Number|Array|Object)} [params] - Route parameters.
|
|
11
|
+
* @param {Boolean} [absolute] - Whether to include the URL origin.
|
|
12
|
+
* @param {Object} [config] - Ziggy configuration.
|
|
13
13
|
*/
|
|
14
14
|
constructor(name, params, absolute = true, config) {
|
|
15
15
|
super();
|
|
@@ -52,6 +52,39 @@ export default class Router extends String {
|
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Get the parameters, values, and metadata from the given URL.
|
|
57
|
+
*
|
|
58
|
+
* @param {String} [url] - The URL to inspect, defaults to the current window URL.
|
|
59
|
+
* @return {{ name: string, params: Object, query: Object, route: Route }}
|
|
60
|
+
*/
|
|
61
|
+
_unresolve(url) {
|
|
62
|
+
if (!url) {
|
|
63
|
+
url = this._currentUrl();
|
|
64
|
+
} else if (this._config.absolute && url.startsWith('/')) {
|
|
65
|
+
// If we are using absolute URLs and a relative URL
|
|
66
|
+
// is passed, prefix the host to make it absolute
|
|
67
|
+
url = this._location().host + url;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
let matchedParams = {};
|
|
71
|
+
const [name, route] = Object.entries(this._config.routes).find(
|
|
72
|
+
([name, route]) => (matchedParams = new Route(name, route, this._config).matchesUrl(url))
|
|
73
|
+
) || [undefined, undefined];
|
|
74
|
+
|
|
75
|
+
return { name, ...matchedParams, route };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
_currentUrl() {
|
|
79
|
+
const { host, pathname, search } = this._location();
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
this._config.absolute
|
|
83
|
+
? host + pathname
|
|
84
|
+
: pathname.replace(this._config.url.replace(/^\w*:\/\/[^/]+/, ''), '').replace(/^\/+/, '/')
|
|
85
|
+
) + search;
|
|
86
|
+
}
|
|
87
|
+
|
|
55
88
|
/**
|
|
56
89
|
* Get the name of the route matching the current window URL, or, given a route name
|
|
57
90
|
* and parameters, check if the current window URL and parameters match that route.
|
|
@@ -64,19 +97,14 @@ export default class Router extends String {
|
|
|
64
97
|
* route().current('posts.show', { post: 1 }); // false
|
|
65
98
|
* route().current('posts.show', { post: 4 }); // true
|
|
66
99
|
*
|
|
67
|
-
* @param {String} name - Route name to check.
|
|
68
|
-
* @param {(String|Number|Array|Object)} params - Route parameters.
|
|
100
|
+
* @param {String} [name] - Route name to check.
|
|
101
|
+
* @param {(String|Number|Array|Object)} [params] - Route parameters.
|
|
69
102
|
* @return {(Boolean|String|undefined)}
|
|
70
103
|
*/
|
|
71
104
|
current(name, params) {
|
|
72
|
-
const
|
|
73
|
-
? this._location().host + this._location().pathname
|
|
74
|
-
: this._location().pathname.replace(this._config.url.replace(/^\w*:\/\/[^/]+/, ''), '').replace(/^\/+/, '/');
|
|
105
|
+
const { name: current, params: currentParams, query, route } = this._unresolve();
|
|
75
106
|
|
|
76
|
-
|
|
77
|
-
const [current, route] = Object.entries(this._config.routes).find(
|
|
78
|
-
([_, route]) => new Route(name, route, this._config).matchesUrl(url)
|
|
79
|
-
) || [undefined, undefined];
|
|
107
|
+
const matchedParams = { ...currentParams, ...query };
|
|
80
108
|
|
|
81
109
|
// If a name wasn't passed, return the name of the current route
|
|
82
110
|
if (!name) return current;
|
|
@@ -90,7 +118,9 @@ export default class Router extends String {
|
|
|
90
118
|
const routeObject = new Route(current, route, this._config);
|
|
91
119
|
|
|
92
120
|
params = this._parse(params, routeObject);
|
|
93
|
-
const routeParams =
|
|
121
|
+
const routeParams = { ...currentParams, ...query };
|
|
122
|
+
// Remove undefined params
|
|
123
|
+
Object.keys(routeParams).forEach((key) => routeParams[key] === undefined && delete routeParams[key]);
|
|
94
124
|
|
|
95
125
|
// If the current window URL has no route parameters, and the passed parameters are empty, return true
|
|
96
126
|
if (Object.values(params).every(p => !p) && !Object.values(routeParams).length) return true;
|
|
@@ -126,7 +156,9 @@ export default class Router extends String {
|
|
|
126
156
|
* @return {Object}
|
|
127
157
|
*/
|
|
128
158
|
get params() {
|
|
129
|
-
|
|
159
|
+
const { params, query } = this._unresolve();
|
|
160
|
+
|
|
161
|
+
return { ...params, ...query };
|
|
130
162
|
}
|
|
131
163
|
|
|
132
164
|
/**
|
|
@@ -163,7 +195,11 @@ export default class Router extends String {
|
|
|
163
195
|
if (Array.isArray(params)) {
|
|
164
196
|
// If the parameters are an array they have to be in order, so we can transform them into
|
|
165
197
|
// an object by keying them with the template segment names in the order they appear
|
|
166
|
-
params = params.reduce((result, current, i) =>
|
|
198
|
+
params = params.reduce((result, current, i) => segments[i]
|
|
199
|
+
? ({ ...result, [segments[i].name]: current })
|
|
200
|
+
: typeof current === 'object'
|
|
201
|
+
? ({ ...result, ...current })
|
|
202
|
+
: ({ ...result, [current]: '' }), {});
|
|
167
203
|
} else if (
|
|
168
204
|
segments.length === 1
|
|
169
205
|
&& !params[segments[0].name]
|
|
@@ -228,49 +264,6 @@ export default class Router extends String {
|
|
|
228
264
|
}, {});
|
|
229
265
|
}
|
|
230
266
|
|
|
231
|
-
/**
|
|
232
|
-
* Get all parameters and their values from the current window URL, based on the given route definition.
|
|
233
|
-
*
|
|
234
|
-
* @example
|
|
235
|
-
* // at URL https://tighten.ziggy.dev/events/8/venues/chicago?zoom=true
|
|
236
|
-
* _dehydrate({ domain: '{team}.ziggy.dev', uri: 'events/{event}/venues/{venue?}' }); // { team: 'tighten', event: 8, venue: 'chicago', zoom: true }
|
|
237
|
-
*
|
|
238
|
-
* @param {Object} route - Route definition.
|
|
239
|
-
* @return {Object} Parameters.
|
|
240
|
-
*/
|
|
241
|
-
_dehydrate(route) {
|
|
242
|
-
let pathname = this._location().pathname
|
|
243
|
-
// If this Laravel app is in a subdirectory, trim the subdirectory from the path
|
|
244
|
-
.replace(this._config.url.replace(/^\w*:\/\/[^/]+/, ''), '')
|
|
245
|
-
.replace(/^\/+/, '');
|
|
246
|
-
|
|
247
|
-
// Given part of a valid 'hydrated' URL containing all its parameter values,
|
|
248
|
-
// a route template, and a delimiter, extract the parameters as an object
|
|
249
|
-
// E.g. dehydrate('events/2/chicago', 'events/{event}/{venue}', '/'); // { event: 2, venue: 'chicago' }
|
|
250
|
-
const dehydrate = (hydrated, template = '', delimiter) => {
|
|
251
|
-
const [values, segments] = [hydrated, template].map(s => s.split(delimiter));
|
|
252
|
-
|
|
253
|
-
return segments.reduce((result, current, i) => {
|
|
254
|
-
// Only include template segments that are route parameters
|
|
255
|
-
// AND have a value present in the passed hydrated string
|
|
256
|
-
return /{[^}?]+\??}/.test(current) && values[i]
|
|
257
|
-
? {
|
|
258
|
-
...result,
|
|
259
|
-
[current.replace(/.*{|\??}.*/g, '')]: values[i]
|
|
260
|
-
.replace(current.match(/^[^{]*/g), '')
|
|
261
|
-
.replace(current.match(/[^}]*$/g), ''),
|
|
262
|
-
}
|
|
263
|
-
: result;
|
|
264
|
-
}, {});
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
return {
|
|
268
|
-
...dehydrate(this._location().host, route.domain, '.'), // Domain parameters
|
|
269
|
-
...dehydrate(pathname, route.uri, '/'), // Path parameters
|
|
270
|
-
...parse(this._location().search?.replace(/^\?/, '')), // Query parameters
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
267
|
valueOf() {
|
|
275
268
|
return this.toString();
|
|
276
269
|
}
|
package/src/js/vue.js
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import route from './index.js';
|
|
2
2
|
|
|
3
3
|
export const ZiggyVue = {
|
|
4
|
-
install: (v, options) =>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
install: (v, options) => {
|
|
5
|
+
const r = (name, params, absolute, config = options) => route(name, params, absolute, config);
|
|
6
|
+
|
|
7
|
+
v.mixin({
|
|
8
|
+
methods: {
|
|
9
|
+
route: r,
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
if (parseInt(v.version) > 2) {
|
|
14
|
+
v.provide('route', r);
|
|
15
|
+
}
|
|
16
|
+
},
|
|
9
17
|
};
|