Build 545032stable
Module 353719
3,035 characters · in no known chunkDependencies
Source Raw
function(e,t,n){var i=n(271434);e.exports=function e(t,n,r){if(i(n)||(r=n||r,n=[]),r=r||{},t instanceof RegExp){var a,o,l=n,d=t.source.match(/\((?!\?)/g);if(d)for(var _=0;_<d.length;_++)l.push({name:_,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return t.keys=l,t}if(i(t)){for(var f,h=n,p=r,E=[],m=0;m<t.length;m++)E.push(e(t[m],h,p).source);return(f=RegExp("(?:"+E.join("|")+")",u(p))).keys=h,f}return a=n,c(s(t,o=r),a,o)},e.exports.parse=s,e.exports.compile=function(e,t){return o(s(e,t))},e.exports.tokensToFunction=o,e.exports.tokensToRegExp=c;var r=RegExp("(\\\\.)|([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))","g");function s(e,t){for(var n,i=[],s=0,a=0,o="",u=t&&t.delimiter||"/";null!=(n=r.exec(e));){var c=n[0],d=n[1],_=n.index;if(o+=e.slice(a,_),a=_+c.length,d){o+=d[1];continue}var f=e[a],h=n[2],p=n[3],E=n[4],m=n[5],g=n[6],A=n[7];o&&(i.push(o),o="");var I=null!=h&&null!=f&&f!==h,T="+"===g||"*"===g,S="?"===g||"*"===g,N=n[2]||u,y=E||m;i.push({name:p||s++,prefix:h||"",delimiter:N,optional:S,repeat:T,partial:I,asterisk:!!A,pattern:y?y.replace(/([=!:$\/()])/g,"\\$1"):A?".*":"[^"+l(N)+"]+?"})}return a<e.length&&(o+=e.substr(a)),o&&i.push(o),i}function a(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function o(e){for(var t=Array(e.length),n=0;n<e.length;n++)"object"==typeof e[n]&&(t[n]=RegExp("^(?:"+e[n].pattern+")$"));return function(n,r){for(var s="",o=n||{},l=(r||{}).pretty?a:encodeURIComponent,u=0;u<e.length;u++){var c,d=e[u];if("string"==typeof d){s+=d;continue}var _=o[d.name];if(null==_)if(d.optional){d.partial&&(s+=d.prefix);continue}else throw TypeError('Expected "'+d.name+'" to be defined');if(i(_)){if(!d.repeat)throw TypeError('Expected "'+d.name+'" to not repeat, but received `'+JSON.stringify(_)+"`");if(0===_.length)if(d.optional)continue;else throw TypeError('Expected "'+d.name+'" to not be empty');for(var f=0;f<_.length;f++){if(c=l(_[f]),!t[u].test(c))throw TypeError('Expected all "'+d.name+'" to match "'+d.pattern+'", but received `'+JSON.stringify(c)+"`");s+=(0===f?d.prefix:d.delimiter)+c}continue}if(c=d.asterisk?encodeURI(_).replace(/[?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}):l(_),!t[u].test(c))throw TypeError('Expected "'+d.name+'" to match "'+d.pattern+'", but received "'+c+'"');s+=d.prefix+c}return s}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.sensitive?"":"i"}function c(e,t,n){i(t)||(n=t||n,t=[]);for(var r,s=(n=n||{}).strict,a=!1!==n.end,o="",c=0;c<e.length;c++){var d=e[c];if("string"==typeof d)o+=l(d);else{var _=l(d.prefix),f="(?:"+d.pattern+")";t.push(d),d.repeat&&(f+="(?:"+_+f+")*"),o+=f=d.optional?d.partial?_+"("+f+")?":"(?:"+_+"("+f+"))?":_+"("+f+")"}}var h=l(n.delimiter||"/"),p=o.slice(-h.length)===h;return s||(o=(p?o.slice(0,-h.length):o)+"(?:"+h+"(?=$))?"),a?o+="$":o+=s&&p?"":"(?="+h+"|$)",(r=RegExp("^"+o,u(n))).keys=t,r}}