-
Notifications
You must be signed in to change notification settings - Fork 21
/
uri-templates.min.js
1 lines (1 loc) · 4.53 KB
/
uri-templates.min.js
1
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):(a="undefined"!=typeof globalThis?globalThis:a||self,a.UriTemplate=b())}(this,function(){"use strict";function a(a){return encodeURI(a).replace(/%25[0-9][0-9]/g,function(a){return"%"+a.substring(3)})}function b(b){var c="";d[b.charAt(0)]&&(c=b.charAt(0),b=b.substring(1));var f="",g="",h=!0,i=!1,j=!1;"+"==c?h=!1:"."==c?(g=".",f="."):"/"==c?(g="/",f="/"):"#"==c?(g="#",h=!1):";"==c?(g=";",f=";",i=!0,j=!0):"?"==c?(g="?",f="&",i=!0):"&"==c&&(g="&",f="&",i=!0);for(var k=[],l=b.split(","),m=[],n={},o=0;o<l.length;o++){var p=l[o],q=null;if(-1!=p.indexOf(":")){var r=p.split(":");p=r[0],q=parseInt(r[1])}for(var s={};e[p.charAt(p.length-1)];)s[p.charAt(p.length-1)]=!0,p=p.substring(0,p.length-1);var t={truncate:q,name:p,suffices:s};m.push(t),n[p]=t,k.push(p)}var u=function(b){for(var c="",d=0,e=0;e<m.length;e++){var k=m[e],l=b(k.name);if(null==l||Array.isArray(l)&&0==l.length||"object"==typeof l&&0==Object.keys(l).length)d++;else if(c+=e==d?g:f||",",Array.isArray(l)){i&&(c+=k.name+"=");for(var n=0;n<l.length;n++)n>0&&(c+=k.suffices["*"]?f||",":",",k.suffices["*"]&&i&&(c+=k.name+"=")),c+=h?encodeURIComponent(l[n]).replace(/!/g,"%21"):a(l[n])}else if("object"==typeof l){i&&!k.suffices["*"]&&(c+=k.name+"=");var o=!0;for(var p in l)o||(c+=k.suffices["*"]?f||",":","),o=!1,c+=h?encodeURIComponent(p).replace(/!/g,"%21"):a(p),c+=k.suffices["*"]?"=":",",c+=h?encodeURIComponent(l[p]).replace(/!/g,"%21"):a(l[p])}else i&&(c+=k.name,j&&""==l||(c+="=")),null!=k.truncate&&(l=l.substring(0,k.truncate)),c+=h?encodeURIComponent(l).replace(/!/g,"%21"):a(l)}return c},v=function(a,b){if(g){if(a.substring(0,g.length)!=g)return null;a=a.substring(g.length)}if(1==m.length&&m[0].suffices["*"]){for(var c=m[0],d=c.name,e=c.suffices["*"]?a.split(f||","):[a],j=h&&-1!=a.indexOf("="),k=1;k<e.length;k++){var a=e[k];j&&-1==a.indexOf("=")&&(e[k-1]+=(f||",")+a,e.splice(k,1),k--)}for(var k=0;k<e.length;k++){var a=e[k];h&&-1!=a.indexOf("=")&&(j=!0);for(var l=a.split(","),o=0;o<l.length;o++)h&&(l[o]=decodeURIComponent(l[o]));1==l.length?e[k]=l[0]:e[k]=l}if(i||j){for(var p=b[d]||{},o=0;o<e.length;o++){var q=a;if(!i||q){if("string"==typeof e[o]){var a=e[o],r=a.split("=",1)[0],a=a.substring(r.length+1);q=a}else{var a=e[o][0],r=a.split("=",1)[0],a=a.substring(r.length+1);e[o][0]=a,q=e[o]}void 0!==p[r]?Array.isArray(p[r])?p[r].push(q):p[r]=[p[r],q]:p[r]=q}}1==Object.keys(p).length&&void 0!==p[d]?b[d]=p[d]:b[d]=p}else void 0!==b[d]?Array.isArray(b[d])?b[d]=b[d].concat(e):b[d]=[b[d]].concat(e):1!=e.length||c.suffices["*"]?b[d]=e:b[d]=e[0]}else{for(var e=1==m.length?[a]:a.split(f||","),s={},k=0;k<e.length;k++){for(var t=0;t<m.length-1&&k>t&&!m[t].suffices["*"];t++);if(t!=k){for(var u=m.length-1;u>0&&m.length-u<e.length-k&&!m[u].suffices["*"];u--);m.length-u!=e.length-k?s[k]=t:s[k]=u}else s[k]=k}for(var k=0;k<e.length;k++){var a=e[k];if(a||!i){var l=a.split(","),j=!1;if(i){var a=l[0],d=a.split("=",1)[0],a=a.substring(d.length+1);l[0]=a;var c=n[d]||m[0]}else var c=m[s[k]],d=c.name;for(var o=0;o<l.length;o++)h&&(l[o]=decodeURIComponent(l[o]));(i||c.suffices["*"])&&void 0!==b[d]?Array.isArray(b[d])?b[d]=b[d].concat(l):b[d]=[b[d]].concat(l):1!=l.length||c.suffices["*"]?b[d]=l:b[d]=l[0]}}}};return u.varNames=k,{prefix:g,substitution:u,unSubstitution:v}}function c(a){if(!(this instanceof c))return new c(a);for(var d=a.split("{"),e=[d.shift()],f=[],g=[],h=[],i=[];d.length>0;){var j=d.shift(),k=j.split("}")[0],l=j.substring(k.length+1),m=b(k);g.push(m.substitution),h.push(m.unSubstitution),f.push(m.prefix),e.push(l),i=i.concat(m.substitution.varNames)}this.fill=function(a){if(a&&"function"!=typeof a){var b=a;a=function(a){return b[a]}}for(var c=e[0],d=0;d<g.length;d++){var f=g[d];c+=f(a),c+=e[d+1]}return c},this.fromUri=function(a){for(var b={},c=0;c<e.length;c++){var d=e[c];if(a.substring(0,d.length)!==d)return void 0;if(a=a.substring(d.length),c>=e.length-1){if(""==a)break;return void 0}for(var g=e[c+1],i=c;;){if(i==e.length-2){var j=a.substring(a.length-g.length);if(j!==g)return void 0;var k=a.substring(0,a.length-g.length);a=j}else if(g){var l=a.indexOf(g),k=a.substring(0,l);a=a.substring(l)}else if(f[i+1]){var l=a.indexOf(f[i+1]);-1===l&&(l=a.length);var k=a.substring(0,l);a=a.substring(l)}else{if(e.length>i+2){i++,g=e[i+1];continue}var k=a;a=""}break}h[c](k,b)}return b},this.varNames=i,this.template=a}var d={"+":!0,"#":!0,".":!0,"/":!0,";":!0,"?":!0,"&":!0},e={"*":!0};return c.prototype={toString:function(){return this.template},fillFromObject:function(a){return this.fill(a)}},c});