superouter
Version:
superouter ----------
3 lines (2 loc) • 12.1 kB
JavaScript
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.superouter={})}(this,function(t){"use strict";function n(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function e(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){var e=[],r=!0,a=!1,u=void 0;try{for(var i,c=t[Symbol.iterator]();!(r=(i=c.next()).done)&&(e.push(i.value),!n||e.length!==n);r=!0);}catch(t){a=!0,u=t}finally{try{r||null==c.return||c.return()}finally{if(a)throw u}}return e}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var r={name:"Valid",Y:function(t){return{case:"Y",type:"Valid",value:t}},N:function(t){return{case:"N",type:"Valid",value:t}},bifold:function(t,n){return function(e){return{Y:n,N:t}[e.case](e.value)}},fold:function(t){var n=t.Y,e=t.N;return function(t){return{Y:n,N:e}[t.case](t.value)}},map:function(t){return function(n){return{Y:function(n){return r.Y(t(n))},N:function(){return n}}[n.case](n.value)}}},a={name:"PatternToken",Path:function(t){return{case:"Path",value:t,type:"PatternToken"}},Part:function(t){return{case:"Part",value:t,type:"PatternToken"}},Variadic:function(t){return{case:"Variadic",value:t,type:"PatternToken"}},specificity:function(t){return a.fold({Path:function(){return 2},Part:function(){return 1},Variadic:function(){return 0}})(t)},groupSpecificity:function(t){return t.map(a.specificity).reduce(function(t,n){return t+n},0)},fold:function(t){var n=t.Path,e=t.Part,r=t.Variadic;return function(t){return{Path:n,Part:e,Variadic:r}[t.case](t.value)}},infer:function(t){return t.startsWith(":")?a.Part(t.slice(1)):t.startsWith("...")?a.Variadic(t.split("...")[1]):a.Path(t)},groupValidations:{duplicateDef:function(t){var n=t.map(function(t){var n=e(t,2),r=n[0],u=n[1];return[r,a.toPattern(u)]}).reduce(function(t,n){var r=e(n,2),a=r[0],u=r[1];return t[u]=t[u]||[],t[u].push(a),t},{}),u=Object.entries(n).reduce(function(t,n){var r=e(n,2),a=r[0],u=r[1];return u.length>1&&u.forEach(function(n){t[n]={caseNames:u,patternStr:a}}),t},{});return Object.keys(u).length?r.N(Object.entries(u).map(function(t){var n=e(t,2),r=n[0],u=n[1],i=u.caseNames,c=u.patternStr;return[r,a.Error.DuplicateDef({caseNames:i,patternStr:c})]})):r.Y(t)}},singleValidations:{variadicPosition:function(t){var n=t.findIndex(a.isVariadic);return n>-1&&n!=t.length-1?r.N(a.Error.VariadicPosition({tokens:t,index:n})):r.Y(t)},variadicCount:function(t){var n=t.filter(a.isVariadic);return n.length>1?r.N(a.Error.VariadicCount({variadics:n,tokens:t})):r.Y(t)},duplicatePart:function(t){var n=[t.flatMap(a.fold({Path:function(){return[]},Part:function(t){return[t]},Variadic:function(t){return[t]}})).reduce(function(t,n){return t[n]=t[n]||0,t[n]=t[n]+1,t},{})].flatMap(function(t){return Object.entries(t).flatMap(function(t){var n=e(t,2),r=n[0];return n[1]>1?[r]:[]})});return n.length?r.N(a.Error.DuplicatePart({dupeParts:n})):r.Y(t)}},Error:{name:"PatternToken.Error",VariadicPosition:function(t){var n=t.tokens,e=t.index;return{type:"PatternToken.Error",case:"VariadicPosition",value:new TypeError("Variadic "+JSON.stringify(a.toString(n[e]))+" found at position "+e+" of "+n.length+" of pattern "+JSON.stringify(a.toPattern(n))+". Variadics can only be in the final position.")}},VariadicCount:function(t){var n=t.variadics,e=t.tokens;return{type:"PatternToken.Error",case:"VariadicCount",value:new TypeError("Found "+n.length+" variadics in pattern "+a.toPattern(e)+". A maxiumum of 1 variadic is allowed.")}},DuplicateDef:function(t){var n=t.caseNames,e=t.patternStr;return{type:"PatternToken.Error",case:"DuplicateDef",value:new TypeError("Found duplicate pattern definitions for routes: "+n.join(", ")+". They all have equivalent pattern strings: "+e+". Duplicated patterns lead to ambiguous matches.")}},DuplicatePart:function(t){var n=t.dupeParts;return{type:"PatternToken.Error",case:"DuplicatePart",value:new TypeError("Found duplicate variable bindings: "+n.join(", ")+". Duplicated names lead to ambiguous bindings.")}}},isVariadic:function(t){return"Variadic"===t.case},validate:function(t){var n=Object.values(a.singleValidations).map(function(n){return n(t)}).filter(function(t){return"N"===t.case}).map(function(t){return t.value});return n.length>0?r.N(n):r.Y(t)},validateGroup:function(t){var n=t.filter(function(t){return"Y"===e(t,2)[1].case}),u=Object.values(a.groupValidations).map(function(t){return t(n.map(function(t){var n=e(t,2);return[n[0],n[1].value]}))}).filter(function(t){return"N"===t.case}).map(function(t){return t.value});return u.length>0?r.N(u):r.Y(t)},toString:function(t){return{Path:function(t){return t},Part:function(t){return":"+t},Variadic:function(t){return"..."+t}}[t.case](t.value)},toPattern:function(t){return t.map(a.toString).join("/")}},u={Path:function(t){return{case:"Path",value:t,type:"URLToken"}},Part:function(t){return{case:"Part",value:{key:t.key,value:t.value},type:"URLToken"}},Variadic:function(t){return{case:"Variadic",value:{key:t.key,value:t.value},type:"URLToken"}},Unmatched:function(t){return{case:"Unmatched",value:{expected:t.expected,actual:t.actual},type:"URLToken"}},ExcessSegment:function(t){return{case:"ExcessSegment",value:t,type:"URLToken"}},fold:function(t){var n=t.Path,e=t.Part,r=t.Variadic,a=t.Unmatched,u=t.ExcessSegment;return function(t){return{Path:n,Part:e,Variadic:r,Unmatched:a,ExcessSegment:u}[t.case](t.value)}},toString:function(t){return u.fold({Path:function(t){return t},Part:function(t){return t.value},Variadic:function(t){return t.value},Unmatched:function(t){return t.actual},ExcessSegment:function(t){return t}})(t)},toURL:function(t){return t.map(u.toString).join("/")},toArgs:function(t){return t.reduce(function(t,e){return u.fold({ExcessSegment:function(){return t},Part:function(e){var r=e.key,a=e.value;return Object.assign(t,n({},r,a))},Path:function(){return t},Unmatched:function(){return t},Variadic:function(e){var r=e.key,a=e.value;return Object.assign(t,n({},r,a))}})(e)},{})},fromPattern:function(t){return function(n){return a.fold({Path:function(t){return n===t?u.Path(n):u.Unmatched({expected:t,actual:n})},Part:function(t){return u.Part({key:t,value:n})},Variadic:function(t){return u.Variadic({key:t,value:n})}})(t)}},isVariadic:function(t){return"Variadic"===t.case},validations:{excessPatterns:function(t){return function(n){var e=n.length,a=t.length>e?t.slice(e):[];return a.length?r.N(u.Error.ExcessPattern({urlTokens:n,patternTokens:t,excessPatterns:a})):r.Y(n)}},excessSegments:function(t){return function(n){var e=n.filter(function(t){return"ExcessSegment"===t.case});return e.length&&"Variadic"!==t.slice(-1)[0].case?r.N(u.Error.ExcessSegment({patternTokens:t,extraSegments:e})):r.Y(n)}},unmatchedPaths:function(t){return function(n){return n.filter(function(t){return"Unmatched"===t.case}).length?r.N(u.Error.UnmatchedPaths({patternTokens:t,urlTokens:n})):r.Y(n)}}},Error:{UnmatchedPaths:function(t){var n=t.patternTokens,e=t.urlTokens;return{type:"URLToken.Error",case:"UnmatchedPaths",value:new TypeError("Pattern "+a.toPattern(n)+" could not match URL "+u.toURL(e)+" due to unmatched path segments: "+e.map(function(t){return"Unmatched"===t.case?u.toString(t):"..."}).join("/"))}},ExcessSegment:function(t){var n=t.patternTokens,e=t.extraSegments;return{type:"URLToken.Error",case:"ExcessSegment",value:new TypeError("Excess tokens ("+JSON.stringify("/"+e.map(function(t){return t.value}).join("/"))+") were found and the URLPattern:"+JSON.stringify(a.toPattern(n))+" did not contain a variadic for the additional values.")}},ExcessPattern:function(t){var n=t.urlTokens,e=t.excessPatterns,r=t.patternTokens;return{type:"URLToken.Error",case:"ExcessPattern",value:new TypeError("The URL "+u.toURL(n)+" had excess patterns ("+a.toPattern(e)+") when parsed as part of pattern: "+a.toPattern(r))}}},transforms:{collectVariadics:function(t){return function(n){return function(e){if((e.length>n.length?e.slice(n.length):[]).length){var r=e.findIndex(u.isVariadic);if(-1==r)return e;var a=e[r].value,i=a.key,c=a.value;return e.slice(0,n.length-1).concat(u.Variadic({key:i,value:c+"/"+t.split("/").slice(n.length).join("/")}))}return e}}}},transform:function(t,n,e){return Object.values(u.transforms).reduce(function(n,r){return r(t)(e)(n)},n)},validate:function(t,n){var e=Object.values(u.validations).map(function(e){return e(t)(n)}).filter(function(t){return"N"===t.case}).map(function(t){return t.value});return e.length>0?r.N(e):r.Y(n)}};function i(t){return[t.split("/").map(a.infer)].map(a.validate).shift()}var c=function(t,n){var e=t.slice(-1).map(a.isVariadic).shift(),r="/"==n[n.length-1];return e&&!r?n+"/":n};function o(t,n){var e=c(t,n),a=e.split("/").slice(0,t.length).map(function(n,e){return u.fromPattern(t[e])(n)}),i=e.split("/"),o=i.length,f=t.length,s=o>f?i.slice(f).map(u.ExcessSegment):[],l=a.concat(s);return[u.validate(t,l)].map(r.map(function(){return u.transform(e,l,t)})).shift()}var f=function(t){var u=t.tokenized,i=t.url,c=Object.entries(u).map(function(t){var n=e(t,2);return[n[0],o(n[1].value,i)]}),f=c.filter(function(t){return"N"===e(t,2)[1].case}).map(function(t){var r=e(t,2);return n({},r[0],r[1].value)}).reduce(function(t,n){return Object.assign(t,n)},{}),s=c.filter(function(t){return"Y"===e(t,2)[1].case}).sort(function(t,n){var r=e(t,2)[1].value,u=e(n,2)[1].value;return a.groupSpecificity(u)-a.groupSpecificity(r)});return s.length?r.Y(s):r.N(f)},s=function(t){var n=t.routeType;return function(t){return r.bifold(r.N,function(t){return 0==t.length?r.N({}):r.Y(t.map(function(t){var r=e(t,2),a=r[0],i=r[1].value;return n[a](u.toArgs(i))}))})(t)}};function l(t,u){var c=Object.entries(u).map(function(t){var r=e(t,2);return n({},r[0],i(r[1]))}).reduce(function(t,n){return Object.assign(t,n)},{}),o=function(t){var n=t.tokenized,u=[a.validateGroup(Object.entries(n))].flatMap(r.bifold(function(t){return t},function(){return[]})),i=Object.entries(n).filter(function(t){return"N"===e(t,2)[1].case}).map(function(t){var n=e(t,2);return[n[0],n[1].value]}).concat(u.reduce(function(t,n){return t.concat(n)},[]));return i.length?r.N(Object.entries(n).map(function(t){return[e(t,1)[0],[]]}).concat(i).reduce(function(t,n){var r=e(n,2),a=r[0],u=r[1];return t[a]=t[a]||[],t[a]=t[a].concat(u),t},{})):r.Y(n)}({tokenized:c});if("N"===o.case)return o;var l=function(t){var u=t.typeName,i=t.tokenized;return Object.entries(i).map(function(t){var i=e(t,2),c=i[0],o=i[1].value.reduce(function(t,n){return a.fold({Path:function(){return t},Part:function(n){return t.concat(n)},Variadic:function(n){return t.concat(n)}})(n)},[]).sort();return n({},c,function(t){var n=Object.keys(t||{}).sort();return n.join("|")!==o.join("|")?r.N(new TypeError("Property mismatch for "+u+"."+c+". Expected: {"+o.join(",")+"} but found: {"+n.join()+"}")):r.Y({type:u,case:c,value:t})})}).reduce(function(t,n){return Object.assign(t,n)})}({typeName:t,tokenized:c}),d=function(t){var a=t.typeName,u=t.safeRouteType;return Object.entries(u).map(function(t){var a=e(t,2),u=a[0],i=a[1];return n({},u,function(t){return r.fold({Y:function(t){return t},N:function(t){throw t}})(i(t))})}).reduce(function(t,n){return Object.assign(t,n)},{name:a})}({typeName:t,safeRouteType:l}),p=function(t){var n=f({tokenized:c,url:t});return s({routeType:d})(n)};return r.Y({safe:l,of:d,fold:function(t){return function(n){return t[n.case](n.value)}},matches:p,matchOr:function(t,n){return[n].map(p).flatMap(r.bifold(t,function(t){return t})).slice(0,1).concat(t({})).shift()},toURL:function(t){return c[t.case].value.map(a.fold({Part:function(n){return t.value[n]},Path:function(t){return t},Variadic:function(n){return t.value[n]}})).join("/")}})}t.tokenizePattern=i,t.tokenizeURL=o,t.PatternToken=a,t.URLToken=u,t.Valid=r,t.type$safe=l,t.type=function(t,n){return r.bifold(function(t){throw Object.values(t).flatMap(function(t){return t}).map(function(t){return t.value}).shift()},function(t){return t})(l(t,n))},Object.defineProperty(t,"__esModule",{value:!0})});
//# sourceMappingURL=superouter.min.js.map