Build 555975stable
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 h,f=n,p=r,E=[],m=0;m<t.length;m++)E.push(e(t[m],f,p).source);return(h=RegExp("(?:"+E.join("|")+")",u(p))).keys=f,h}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 h=e[a],f=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!=f&&null!=h&&h!==f,T="+"===g||"*"===g,S="?"===g||"*"===g,y=n[2]||u,N=E||m;i.push({name:p||s++,prefix:f||"",delimiter:y,optional:S,repeat:T,partial:I,asterisk:!!A,pattern:N?N.replace(/([=!:$\/()])/g,"\\$1"):A?".*":"[^"+l(y)+"]+?"})}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 h=0;h<_.length;h++){if(c=l(_[h]),!t[u].test(c))throw TypeError('Expected all "'+d.name+'" to match "'+d.pattern+'", but received `'+JSON.stringify(c)+"`");s+=(0===h?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),h="(?:"+d.pattern+")";t.push(d),d.repeat&&(h+="(?:"+_+h+")*"),o+=h=d.optional?d.partial?_+"("+h+")?":"(?:"+_+"("+h+"))?":_+"("+h+")"}}var f=l(n.delimiter||"/"),p=o.slice(-f.length)===f;return s||(o=(p?o.slice(0,-f.length):o)+"(?:"+f+"(?=$))?"),a?o+="$":o+=s&&p?"":"(?="+f+"|$)",(r=RegExp("^"+o,u(n))).keys=t,r}}