signet
Version:
Signet type library
4 lines (3 loc) • 26.8 kB
JavaScript
/*! signet 05-02-2024 */
function signetParser(){"use strict";function a(a){if("string"!=typeof a)throw new Error("Macro Error: All macros must return a string; got "+a+" of type "+typeof a)}function b(b,c){for(var d=c,e=b.length,f=0;f<e;f++)d=b[f](d),a(d);return d}function c(a){B.push(a)}function d(a){C.push(a)}function e(a){var b=a.trim().split("<").slice(1).join("<");return b.substring(0,b.length-1)}function f(a){return";"===a||","===a}function g(a){var b=/^\[(.*)\]$/;return y(f,e(a.trim().replace(b,"$1"))).map(function(a){return a.trim()})}function h(a){for(var b=-1,c="",d=0;d<a.length&&"<"!==c&&-1===b;d++)":"===(c=a[d])&&(b=d);return b}function i(a){var c=b(B,a);return{type:c.split("<")[0].replace(/\[|\]/g,"").trim(),subtype:g(c),optional:null!==c.trim().match(/^\[[^\]]+\]$/)}}function j(a){return"object"==typeof a&&null!==a}function k(a){return j(a)&&"[object Array]"===Object.prototype.toString.call(a)}function l(a){for(var b=[],c=0;c<a.length;c++)b.push(m(a[c]));return b.dependent=k(a.dependent)?l(a.dependent):a.dependent,b}function m(a){return k(a)?l(a):j(a)?n(a):a}function n(a){for(var b=Object.keys(a),c={},d=0;d<b.length;d++){var e=b[d],f=a[e];c[e]=m(f)}return c}function o(a){var b={};return function(c){var d=b[c];return void 0===d&&(d=a(c),b[c]=d),k(d)?l(d):n(d)}}function p(a){var b=a.indexOf(":")>-1?h(a):-1,c=-1===b?null:a.substring(0,b).trim(),d=a.substring(b+1),e=D(d);return e.name=c,e}function q(a){var b=a.trim().split(/\s+/g);return{operator:b[1],left:b[0],right:b[2]}}function r(a){return a.split(/\,\s*/g).map(q)}function s(a){return","===a}function t(a){return"::"===a}function u(a){var b=y(t,a),c=b.length>1?b.shift():null,d=y(s,b[0]).map(p);return d.dependent=null===c?null:r(c),d}function v(){function a(a){"<"===a&&b.push("<"),">"===a&&b.pop(),"::"===a&&(b.length=0)}var b=[];return{update:a,get length(){return b.length}}}function w(a){return"="===a||"%"===a||":"===a}function x(a){return"%"===a[0]||"=>"===a||"::"===a}function y(a,b){for(var c=[],d="",e="",f=v(),g=0;g<b.length;g++)e=b[g],0!==f.length||"%"!==e?(w(e)&&x(e+b[g+1])&&(g++,e+=b[g]),f.update(e),a(e)&&0===f.length?(c.push(d),d=""):d+=e):(g++,d+=b[g]);return""!==d&&c.push(d),c}function z(a){return"=>"===a}function A(a){return y(z,b(C,a)).map(u)}var B=[],C=[],D=o(i);return{parseSignature:o(A),parseType:p,registerSignatureLevelMacro:d,registerTypeLevelMacro:c}}function signetDuckTypes(a,b,c,d){function e(b,c){var d=y(c),e=v(c);a.defineSubtypeOf("object")(b,d),E[b]=e}function f(a){var c=typeof a;return b("array")(a)?"array":c}function g(a,b){return a.reduce(function(a,c){if("constructor"!==c){var d=b[c],e=f(d);a[c]=e}return a},{})}function h(a){return"object"==typeof a.prototype}function i(a){if(!h(a)){var b="Function defineClassType expected a prototypal object or class, but got a value of type "+typeof a;throw new TypeError(b)}}function j(a,c){Object.keys(c).forEach(function(d){if(b("not<undefined>")(a[d])){var e="Cannot reassign property "+d+" on duck type object";throw new Error(e)}a[d]=c[d]})}function k(a,c){i(a);var d=a.prototype,e=Object.getOwnPropertyNames(d),f=g(e,d);return b("composite<not<null>, object>")(c)&&j(f,c),f}function l(a,b){e(a.name,k(a,b))}function m(a,b){return z(k(a,b))}function n(a,b){return"function"==typeof E[b]?E[b](a):a}function o(a,b){return"string"==typeof a[b]?a[b]:a[b].name}function p(a,b){for(var e={},f=0;f<a.length;f++){var g=a[f],h=b[g];e[g]=F(h)?d(c(h)):h}return e}function q(a){return"object"==typeof a&&null!==a}function r(a){return a}function s(a,b,c){return function(d,e){return c(e[a])||d.push([a,b,n(e[a],b)]),d}}function t(a,b){return function(c,d){return c=a(c,d),b(c,d)}}function u(a,c,d){for(var e=r,f=0;f<a.length;f++){var g=a[f],h=b(c[g]),i=o(d,g),j=s(g,i,h);e=t(e,j)}return function(a){return e([],a)}}function v(a){var b=Object.keys(a),c=p(b,a),d=u(b,a,c);return function(a){return q(a)?d(a):[["badDuckTypeValue","object",a]]}}function w(){return!0}function x(a,c,d){var e=b(d);return"function"!=typeof e&&(e=y(d)),function(b){return e(b[c])&&a(b)}}function y(a){for(var b=Object.keys(a),c=w,d=0;d<b.length;d++){var e=b[d];c=x(c,e,a[e])}return function(a){return G(a)&&c(a)}}function z(a){return y(a)}function A(a){var b=E[a];if(void 0===b)throw new Error('No duck type "'+a+'" exists.');return function(a){return b(a)}}function B(a){var b=Object.keys(a).length,c=z(a);return function(a){return b===Object.keys(a).length&&c(a)}}function C(b,c){var d=B(c),e=v(c);a.defineSubtypeOf("object")(b,d),E[b]=e}function D(a){return"function"==typeof E[a]}var E={},F=b("string"),G=b("composite<not<null>, variant<object, function>>");return{buildDuckTypeErrorChecker:v,classTypeFactory:m,defineClassType:l,defineDuckType:e,defineExactDuckType:C,duckTypeFactory:z,exactDuckTypeFactory:B,isRegisteredDuckType:D,reportDuckTypeErrors:A}}function signetCoreTypes(a,b,c,d,e,f,g,h){"use strict";function i(a){return function(b,c){return!a(b,c)}}function j(a,b){for(var c=Object.keys(b),d=c.length,e=!0,f=0;f<d&&e;f++){var g=c[f];e=a[g]===b[g]}return e}function k(a,b){return z(a)||z(b)||a===b?a===b:!(Object.keys(a).length!==Object.keys(b).length)&&j(a,b)}function l(a,b){return!(Object.keys(a).length<Object.keys(b).length)&&j(a,b)}function m(a,b){return l(b,a)}function n(a,b){return Object.keys(a).length===Object.keys(b).length&&j(a,b)}function o(a,b,c,d){return p(a,c)===p(b,d)}function p(a,b){return s(b.subtype)(a)}function q(b){return s(a.parseType(b).subtype)}function r(a,b){for(var c=b.length,d=null,e=0;e<c;e++)if(a(b[e])){d=b[e];break}return d}function s(a){return function(b){function d(a){return c(a)(b)}var e=r(d,a);return"string"!=typeof e?null:e}}function t(a,b,c,d){var f=p(a,c),g=p(b,d);return e(g)(f)}function u(a,b,c,d){return t(b,a,d,c)}function v(a,b){return a>b}function w(a,b){return a<b}function x(a,b){return a===b}function y(a){return function(b){return typeof b===a}}function z(a){return null===a}function A(a){return Math.abs(a)!==1/0}function B(a){return"number"==typeof a&&!Aa(a)}function C(a){return"bigint"==typeof a&&!Aa(a)}function D(a){return B(a)||C(a)}function E(a){return Ba(a)}function F(a){return"string"===a||Ca(a)}function G(a){return"array"===a||Da(a)}function H(b){return a.parseType(b).type}function I(a,b){var c=H(b[0]);if(!E(c)&&!F(c))throw new Error("A sequence may only be comprised of numbers, strings or their subtypes.");return Q(a,b)}function J(a){return v(a[0],a[1])?v:w}function K(a){for(var b=!0,c=J(a),d=1;d<a.length;d++)b=b&&c(a[d-1],a[d]);return b}function L(a,b){return I(a,b)&&K(a)}function M(a,b){var c=a.length<2||w(a[0],a[1]);return L(a,b)&&c}function N(a,b){var c=a.length<2||v(a[0],a[1]);return L(a,b)&&c}function O(a,b){for(var d=!0,e=c(b[0]),f=0;f<a.length&&(d=e(a[f]));f++);return d}function P(a){return"[object Array]"===Object.prototype.toString.call(a)}function Q(a,b){var c=b.length>0&&"*"!==b[0];return P(a)&&(!c||O(a,b))}function R(a){return C(a)||S(a)}function S(a){return Math.floor(a)===a&&a!==1/0}function T(a,b){var d=H(b[0]),e=V(b),f=G(d)||F(d);if(E(d)||f)return!!c(b[0])(a)&&U(f?a.length:a,e);throw new Error("Bounded type only accepts types of number, string, array or subtypes of these.")}function U(a,b){return b.min<=a&&a<=b.max}function V(a){return{min:Number(a[1]),max:Number(a[2])}}function W(a){return 1===a.length?a[0]:a.join(";")}function X(a,b){return null!==a.match(b)}function Y(a){return a.map(c)}function Z(a){return a.join(", ")}function $(a){return!z(a)}function _(a){return"[object RegExp]"===Object.prototype.toString.call(a)}function aa(a,b){var c=a===b?1:0;return e(a)(b)?-1:c}function ba(a,b){var c=0,d=0;for(c;c<a.length&&0===(d=aa(a[c],b));c++);return a.splice(c+d,0,b),a}function ca(a){return a.reduce(ba,[])}function da(a,b){for(var c=!1,d=0;d<b.length;d++)if(c=a(b[d])){b.splice(d,1);break}return c}function ea(a){var b=a.slice(0);return function(a){return!da(c(a),b)}}function fa(a,b,c){for(var d=b.length,e=c,f=0;f<d;f++)e=a(e,b[f]);return e}function ga(a){return function(b,c){return a(c)&&b.push(c),b}}function ha(a,b){return fa(ga(a),b,[])}function ia(a,b){var c=ca(b);return 0===ha(ea(a),c).length}function ja(a,b){return a.length===b.length&&ia(a,b)}function ka(a,b){function c(b,c,d){return b&&c(a[d])}return a.length===b.length&&b.reduce(c,!0)}function la(a,b){function c(b){return b(a)}return 0===b.length||ha(c,b).length>0}function ma(a,b){return console.warn("Tagged Union is deprecated, use variant instead."),la(a,b)}function na(a,b){return b.reduce(function(b,c){return b&&c(a)},!0)}function oa(a,b){return!b[0](a)}function pa(b){return"function"==typeof b||d(a.parseType(b).type)}function qa(a,b){return a.length===b.length}function ra(a,b){return a.length>b.length}function sa(a,b){return a.length<b.length}function ta(a){return new RegExp("^([^\\:]+\\:)?(\\[)?{{typePattern}}(\\])?$".replace("{{typePattern}}",a))}function ua(a,b,c){return b.test(a)?a.replace(b,c):a}function va(a,b){return""!==b?a.signature===b:"string"==typeof a.signature}function wa(a){var b=Function.prototype.toString.call(a);return Ea.test(b)}function xa(a,b){var c=void 0!==b?b.join(",").trim():"";return"function"==typeof a&&wa(a)&&va(a,c)}function ya(a,b){var c=Math.pow(10,b);return Math.floor(a*c)/c}function za(a,b){var c=parseFloat(b[0]);if(!S(c)||!U(c,{min:0,max:1/0}))throw new Error("Precision value must be of type leftBoundedInt<0>, but got: "+c+"of type "+typeof c);return a===ya(a,c)}var Aa=void 0===Number.isNaN?function(a){return a!==a}:function(a){return Number.isNaN(a)},Ba=e("nativeNumber"),Ca=e("string"),Da=e("array");a.registerTypeLevelMacro(function(a){return/^\(\s*\)$/.test(a.trim())?"*":a}),a.registerTypeLevelMacro(function(a){var b=ta("(\\!\\*)");return ua(a.trim(),b,"$1$2not<variant<undefined, null>>$4")}),a.registerTypeLevelMacro(function(a){var b=ta("\\?([^\\]]*)");return ua(a.trim(),b,"$1$2variant<undefined, null, $3>$4")}),a.registerTypeLevelMacro(function(a){var b=ta("\\^([^\\]]*)");return ua(a.trim(),b,"$1$2not<$3>$4")}),a.registerSignatureLevelMacro(function(a){var b=/(\()((.*\=\>)+(.*))(\))/;return b.test(a)?a.replace(b,"function<$2>"):a});var Ea=/enforceDecorator/gi;return b("boolean{0}",y("boolean")),b("function{0,1}",y("function"),Z),b("enforcedFunction{0,1}",xa),b("nativeNumber",D),b("object{0}",y("object")),b("string{0}",y("string")),b("symbol{0}",y("symbol")),b("undefined{0}",y("undefined")),b("not{1}",oa,Y),b("null{0}",z),b("variant{1,}",la,Y),b("taggedUnion{1,}",ma,Y),b("composite{1,}",na,Y),b("bounded{3}",T),f("nativeNumber")("number{0}",B),f("nativeNumber")("bigint{0}",C),f("nativeNumber")("int{0}",R),f("object")("array{0,}",Q),f("object")("regexp{0}",_),f("nativeNumber")("finiteNumber",A),f("number")("decimalPrecision{1}",za),f("finiteNumber")("finiteInt{0}",S),f("string")("formattedString{1}",X,W),f("array")("tuple{1,}",ka,Y),f("array")("unorderedProduct{1,}",ja),f("object")("arguments{0}",$),f("array")("sequence{1}",I),f("array")("monotoneSequence{1}",L),f("array")("increasingSequence{1}",M),f("array")("decreasingSequence{1}",N),g("leftBounded","bounded<_, _, Infinity>"),g("rightBounded","bounded<_, -Infinity, _>"),g("boundedString{2}","bounded<string, _, _>"),g("leftBoundedString{1}","leftBounded<string, _>"),g("rightBoundedString{1}","rightBounded<string, _>"),g("boundedNumber{2}","bounded<number, _, _>"),g("leftBoundedNumber{1}","leftBounded<number, _>"),g("rightBoundedNumber{1}","rightBounded<number, _>"),g("boundedFiniteNumber{2}","bounded<finiteNumber, _, _>"),g("leftBoundedFiniteNumber{1}","leftBounded<finiteNumber, _>"),g("rightBoundedFiniteNumber{1}","rightBounded<finiteNumber, _>"),g("boundedInt{2}","bounded<int, _, _>"),g("leftBoundedInt{1}","leftBounded<int, _>"),g("rightBoundedInt{1}","rightBounded<int, _>"),g("boundedFiniteInt{2}","bounded<finiteInt, _, _>"),g("leftBoundedFiniteInt{1}","leftBounded<finiteInt, _>"),g("rightBoundedFiniteInt{1}","rightBounded<finiteInt, _>"),g("typeValue{0}","variant<string, function>"),f("typeValue")("type{0}",pa),g("any{0}","*"),g("void{0}","*"),h("nativeNumber")(">",v),h("nativeNumber")("<",w),h("nativeNumber")("=",x),h("nativeNumber")(">=",i(w)),h("nativeNumber")("<=",i(v)),h("nativeNumber")("!=",i(x)),h("int")(">",v),h("int")("<",w),h("int")("=",x),h("int")(">=",i(w)),h("int")("<=",i(v)),h("int")("!=",i(x)),h("string")("=",x),h("string")("!=",i(x)),h("string")("#=",qa),h("string")("#<",sa),h("string")("#>",ra),h("array")("#=",qa),h("array")("#<",sa),h("array")("#>",ra),h("object")("=",k),h("object")("!=",i(k)),h("object")(":>",l),h("object")(":<",m),h("object")(":=",n),h("object")(":!=",i(n)),h("variant")("isTypeOf",o),h("variant")("=:",o),h("variant")("<:",t),h("variant")(">:",u),{whichType:s,whichVariantType:q}}function signetRecursiveTypes(a,b){function c(a,b){for(var c=a(),d=!0;d&&null!==c;)d=b(c),c=a();return d}function d(a,d){var e=b(d);return function b(d){var f=a(d);return e(d)&&c(f,b)}}function e(a){return function(b){var c=h(b[a])?b[a].slice(0):[b[a]];return function(){var a=c.shift();return i(a)?null:a}}}function f(a){var b=a.slice(0);return function(){var a=b.shift();return i(a)?null:a}}function g(b,c,e,f){var g=d(c,e);a(b,g,f)}var h=b("array"),i=b("undefined");return{defineRecursiveType:g,iterateOn:e,iterateOnArray:f,recursiveTypeFactory:d}}function signetBuilder(a,b,c,d,e,f,g,h){"use strict";function i(a){return U.test(a)}function j(a,b){return b.reduce(function(a,b){return a.replace(U,"$1"+b+"$3")},a)}function k(b){var c=a.isTypeOf(b);return function(a){return c(a)}}function l(a){return function(b,c){var e=j(a,c);return k(d.parseType(e))(b)}}function m(a,b){S(a,i(b)?l(b):k(d.parseType(b)))}function n(b){return"string"==typeof b?a.isTypeOf(d.parseType(b)):b}function o(a){var b=n(a);return function(c){if(!b(c))throw new TypeError("Expected value of type "+a+", but got "+String(c)+" of type "+typeof c);return c}}function p(a,b,c){return Object.defineProperty(a,b,{value:c,writeable:!1}),a}function q(a,b){return p(a,"signatureTree",b),Object.defineProperty(a,"signature",{writeable:!1,get:function(){return e.assembleSignature(a.signatureTree)}}),a}function r(a,b){var d=c.checkSignature(a),f=a.length-1;if(a.length<2)throw new SyntaxError("Signature must have both input and output types");if(a[0].length<b.length)throw new Error("Signature declaration too short for function with "+b.length+" arguments.");if(a[f].length>1)throw new SyntaxError("Signature can only have a single output type");if(null!==d){var g=d.map(e.assembleType);throw new TypeError("Signature contains invalid types: "+g.join(", "))}}function s(a,b){return q(b,a),p(b,"signatureTree",a)}function t(a,b){var c=d.parseSignature(a);return r(c,b),s(c,b)}function u(a,b,c){var d=a[0],e=a[1],f=typeof e;return c+" expected a "+b+"value of type "+d+" but got "+a[1]+" of type "+f}function v(a){return function(b,c,d,e,f){var g="";throw g="function"==typeof c?c(b,d,e,f):u(b,a,f),new TypeError(g)}}function w(a,b,c,d){return u(a,"",d)}function x(a,b,c,d){return u(a,"return ",d)}function y(a,c,d){var e=b.validateArguments(a.signatureTree[0],d)(c);null!==e&&V(e,null,c,a.signatureTree,A(a))}function z(a){return function(c){var e=Array.prototype.slice.call(c,0),f=a.map(d.parseType),g=b.validateArguments(f,void 0)(e);null!==g&&V(g,null,e,[f],"Called Function")}}function A(a){return""===a.name?"Anonymous":a.name}function B(a,b,c){var d=b.subtype.join(", ").trim();return""!==d?M(d,a,c):a}function C(a,b,c){var d="object"==typeof b?b:{};return"function"===d.type?B(a,d,c):a}function D(a,b,c){var d=[],e=0,f=0;for(e;e<a.length;e++){var g=a[e],h=void 0;for(f;f<b.length&&(h=b[f],!h.typeCheck(g));f++);d.push(C(g,h,c))}return d}function E(a,b){for(var c=[],d=a;d<b.length;d++)c.push(b[d]);return c}function F(a,c,d){var e=A(c);return function(){var f=E(0,arguments),g="object"==typeof a.environment?Object.create(a.environment):{},h=b.validateArguments(a[0],g)(f),i=E(1,a);null!==h&&V(h,d.inputErrorBuilder,f,a,e);var j=a.length>2,k=D(f,a[0],d),l=c.apply(this,k),m=1===i.length,n=i[0];n.dependent=a[0].dependent;var o=m?b.validateArguments(n,g)([l]):null;return null!==o&&W(o,d.outputErrorBuilder,k,a,e),i.environment=g,i[0].dependent=a[0].dependent,j?I(i,l,d):l}}function G(a){return function(){var b=E(0,arguments);return a.apply(this,b)}}function H(a,b){return Object.keys(a).reduce(function(b,c){return b[c]=a[c],b},b),b}function I(a,b,c){var d=F(a,b,c),e=G(d);return e.toString=Function.prototype.toString.bind(b),H(b,s(a,e))}function J(b){return b.typeCheck=a.isTypeOf(b),b}function K(a){var b=a.map(J);return b.dependent=a.dependent,b}function L(a){return a.map(K)}function M(a,b,c){return I(L(d.parseSignature(a)),b,"object"==typeof c&&null!==c?c:{})}function N(a,b){"function"==typeof b&&(a.preprocess=b)}function O(a,b){var c=b.replace(X,"$2"),d=c.split(/\,\s*/g),e=0,f=1/0;if(c!==b){if(e=parseInt(d[0]),f=1===d.length?e:parseInt(d[1]),e>f)throw new Error("Error in "+a+" arity declaration: min cannot be greater than max");e=isNaN(e)||e<0?0:e,f=isNaN(f)||f<0?1/0:f}return[e,f]}function P(a){return a.replace(X,"$1").trim()}function Q(a,b,c){var d="[object Array]"===Object.prototype.toString.call(c),e=null;if(d&&c.length<b[0]?e="Type "+a+" requires, at least, "+b[0]+" arguments":d&&c.length>b[1]&&(e="Type "+a+" accepts, at most, "+b[1]+" arguments"),null!==e)throw new Error(e)}function R(a,b,c){return function(d,e){return Q(a,b,e),c(d,e)}}function S(b,c,d){var e=P(b),f=O(e,b),g=R(e,f,c);N(g,d),a.define(e,g)}function T(b){var c=a.defineSubtypeOf(b);return function(a,b,d){var e=P(a),f=O(e,a),g=R(e,f,b);N(g,d),c(e,g)}}var U=/([<\;\,]\s*)(_)(\s*[>\;\,])/,V=v(""),W=v("return "),X=/^([^\{]+)\{([^\}]+)\}$/,Y=g(d,S,n,a.isType,a.isSubtypeOf,T,m,a.defineDependentOperatorOn),Z=f(a,n,d.parseType,e.assembleType),$=h(S,n);return{alias:M("aliasName != typeString :: aliasName:string, typeString:string => undefined",m),buildInputErrorMessage:M("validationResult:tuple<expectedType:type, actualValue:*>, args:array<*>, signatureTree:array<array<object>>, functionName:string => string",w),buildOutputErrorMessage:M("validationResult:tuple<expectedType:type, actualValue:*>, args:array<*>, signatureTree:array<array<object>>, functionName:string => string",x),classTypeFactory:M("class:function, otherProps:[composite<not<null>, object>] => function",Z.classTypeFactory),defineClassType:M("class:function, otherProps:[composite<not<null>, object>] => undefined",Z.defineClassType),defineDuckType:M("typeName:string, duckTypeDef:object => undefined",Z.defineDuckType),defineExactDuckType:M("typeName:string, duckTypeDef:object => undefined",Z.defineExactDuckType),defineDependentOperatorOn:M("typeName:string => operator:string, operatorCheck:function<valueA:*, valueB:*, typeDefinitionA:[object], typeDefinitionB:[object] => boolean> => undefined",a.defineDependentOperatorOn),defineRecursiveType:M("typeName:string, iteratorFactory:function, nodeType:type, typePreprocessor:[function] => undefined",$.defineRecursiveType),duckTypeFactory:M("duckTypeDef:object => function",Z.duckTypeFactory),enforce:M("signature:string, functionToEnforce:function, options:[object] => function",M),enforceArguments:M("array<string> => arguments => undefined",z),exactDuckTypeFactory:M("duckTypeDef:object => function",Z.exactDuckTypeFactory),extend:M("typeName:string, typeCheck:function, preprocessor:[function<string => string>] => undefined",S),isRegisteredDuckType:M("typeName:string => boolean",Z.isRegisteredDuckType),isSubtypeOf:M("rootTypeName:string => typeNameUnderTest:string => boolean",a.isSubtypeOf),isType:M("typeName:string => boolean",a.isType),isTypeOf:M("typeToCheck:type => value:* => boolean",n),iterateOn:M("propertyKey:string => value:* => undefined => *",$.iterateOn),iterateOnArray:M("iterationArray:array => undefined => *",$.iterateOnArray),recursiveTypeFactory:M("iteratorFactory:function, nodeType:type => valueToCheck:* => boolean",$.recursiveTypeFactory),registerTypeLevelMacro:M("macro:function => undefined",d.registerTypeLevelMacro),reportDuckTypeErrors:M("duckTypeName:string => valueToCheck:* => array<tuple<string, string, *>>",Z.reportDuckTypeErrors),sign:M("signature:string, functionToSign:function => function",t),subtype:M("rootTypeName:string => subtypeName:string, subtypeCheck:function, preprocessor:[function<string => string>] => undefined",T),typeChain:M("typeName:string => string",a.getTypeChain),verify:M("signedFunctionToVerify:function, functionArguments:arguments => undefined",y),verifyValueType:M("typeToCheck:type => value:* => result:*",o),whichType:M("typeNames:array<string> => value:* => variant<string, null>",Y.whichType),whichVariantType:M("variantString:string => value:* => variant<string, null>",Y.whichVariantType)}}var signetAssembler=function(){"use strict";function a(a){return a.subtype&&a.subtype.length>0}function b(b){return a(b)?"<"+b.subtype.join(";")+">":""}function c(a,b){return"string"==typeof a?a+":"+b:b}function d(a,b){return b?"["+a+"]":a}function e(a){return d(a.type+b(a),a.optional)}function f(a){var b=e(a);return c(a.name,b)}function g(a,b){return(""!==a?a+", ":a)+[b.left,b.operator,b.right].join(" ")}function h(a){return a.reduce(g,"")+" :: "}function i(a){var b=a.map(f).join(", ");return(null===a.dependent?"":h(a.dependent))+b}function j(a){return a.map(i).join(" => ")}return{assembleSignature:j,assembleType:f}}();"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetAssembler);var signetChecker=function(){"use strict";return function(a){function b(b){try{return"function"==typeof a.get(b.type)}catch(a){return!1}}function c(a,b){return a.concat(b)}function d(a){return function(b){return!a(b)}}function e(a){var e=a.reduce(c,[]).filter(d(b));return e.length>0?e:null}return{checkSignature:e,checkType:b}}}();"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetChecker),"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetParser);var signetRegistrar=function(){"use strict";return function(){function a(a,b){return typeof b===a}function b(b){return a("string",b)&&null!==b.match(/^[^\(\)\<\>\[\]\:\;\=\,\s]+$/)}function c(c,d){if(!b(c))throw new Error("Invalid type name: "+c);if(!a("undefined",f[c]))throw new Error("Type already registered with name "+c);if(!a("function",d))throw new Error("Type predicate parameter must be a function")}function d(a){var b=f[a];if(void 0===b)throw new Error('The given type "'+a+'" does not exist');return b}function e(a,b){c(a,b),f[a]=b}var f={};return{get:d,set:e}}}();"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetRegistrar);var signetTypelog=function(a){"use strict";function b(a){return function(b){return a.optional&&void 0===b}}function c(a){var c=b(a),d=a.predicate;return function(b){return d(b,a.subtype)||c(b)}}function d(a,b,c){Object.defineProperty(a,b,{value:c,writeable:!1})}function e(a,b){return function(c){return a===c||b(c)}}function f(a,b){return function(c,d){return a(c,[])&&b(c,d)}}function g(a,b){return Object.keys(b).reduce(function(a,c){return a[c]=b[c],a},a)}function h(){return!1}function i(a){return"function"==typeof a.isSubtypeOf?a.isSubtypeOf:h}function j(b){var c=a.get(b),h=i(c);return function(i,j){var k=f(c,j),l=e(b,h);g(k,j),d(k,"parentTypeName",b),d(k,"isSubtypeOf",l),a.set(i,k)}}function k(b){try{return"function"==typeof a.get(b)}catch(a){return!1}}function l(b){return m(function(c){return(0,a.get(c).isSubtypeOf)(b)})}function m(a){var b={};return function(c){var d=JSON.stringify(c);return void 0===b[d]&&(b[d]=a(c)),b[d]}}function n(a){var b=p(a);return function(a){return c(b)(a)}}function o(a){return a}function p(b){var c=a.get(b.type),d="function"==typeof c.preprocess?c.preprocess:o,e=g({},b);return e.subtype=d(b.subtype),e.predicate=c,e}function q(b){var c=a.get(b);return void 0!==c.parentTypeName?q(c.parentTypeName)+" -> "+b:b}function r(b){var c=a.get(b);return function(a,b){d(c,a,{operator:a,operation:b})}}function s(b){return function(c){var d=a.get(b);return"object"==typeof d[c]?d[c]:"*"==b?null:s(d.parentTypeName)(c)}}a.set("*",function(){return!0});var t=m(l),u=m(n);return{define:j("*"),defineDependentOperatorOn:r,defineSubtypeOf:j,getDependentOperatorOn:s,getTypeChain:q,isType:k,isTypeOf:u,isSubtypeOf:t}};"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetTypelog);var signetValidator=function(){"use strict";function a(a){return a[0]}function b(a){return a.slice(1)}return function(c,d,e){function f(a,b,c){return a.optional&&(c.length>1||void 0===b)}function g(a){return"function"==typeof a.typeCheck?a.typeCheck:c.isTypeOf(a)}function h(c,e){var h=a(c),i=a(e),j=g(h)(i),k=j?b(e):e,l=q(b(c));return j||f(h,i,c)?l(k):[d.assembleType(h),i]}function i(a,b,c,d){var e=null;if(!c.operation(a.value,b.value,a.typeNode,b.typeNode,d)){e=[[a.name,c.operator,b.name].join(" "),[a.name,"=",a.value,"and",b.name,"=",b.value].join(" ")]}return e}function j(){return!1}function k(a,b){var d=c.getDependentOperatorOn(a)(b);return null===d&&(d={operator:b,operation:j}),d}function l(a){function b(a){return f(a)}var d=e.parseType(a),f=c.isTypeOf(d);return b.toString=function(){return"[function typePredicate]"},{name:a,value:b,typeNode:d}}function m(a,b){var d=a[b];return void 0===d&&c.isType(b)&&(d=l(b)),d}function n(a){return function(b,c){b.leftTokens=b.left.split(":"),b.rightTokens=b.right.split(":");var d=b.leftTokens[0],e=a[d],f=b.rightTokens[0],g=m(a,f),h=null,j=void 0!==e&&void 0!==g;if(null===c&&j){h=i(e,g,k(e.typeNode.type,b.operator),b)}return null===h?c:h}}function o(a,b,c){for(var d,e,f=void 0===c?{}:c,g=a.length,h=0;h<g;h++)if(d=a[h],null!==(e=d.name)){if(void 0!==f[e]){var i='Signet evaluation error: Cannot overwrite value in existing variable: "'+e+'"';throw new Error(i)}f[e]={name:e,value:b[h],typeNode:a[h]}}return f}function p(a){return"[object Array]"===Object.prototype.toString.call(a)?a:[]}function q(a,b){var c=p(a.dependent);return function(d){var e=void 0===b?a.environment:b,f=o(a,d,e),g=n(f),i=0===a.length?null:h(a,d);return c.forEach(function(a){i=g(a,i)}),i}}return{validateArguments:q,validateType:g,buildEnvironment:o}}}();"undefined"!=typeof module&&void 0!==typeof module.exports&&(module.exports=signetValidator),"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetDuckTypes),"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetCoreTypes),"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetRecursiveTypes),"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=signetBuilder);var signet=function(){"use strict";function a(){var a=signetAssembler,b=signetParser(),c=signetRegistrar(),d=signetChecker(c),e=signetTypelog(c,b);return signetBuilder(e,signetValidator(e,a),d,b,a,signetDuckTypes,signetCoreTypes,signetRecursiveTypes)}"undefined"!=typeof module&&void 0!==module.exports&&(module.exports=a);var b=a();return b.new=a,b}();
//# sourceMappingURL=signet.min.js.map