diff --git a/404.html b/404.html index 9b3772d0f1..7f38261d2d 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/404/index.html b/404/index.html index 9b3772d0f1..7f38261d2d 100644 --- a/404/index.html +++ b/404/index.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/_next/static/chunks/583-a0f2958c7a363206.js b/_next/static/chunks/583-a0f2958c7a363206.js deleted file mode 100644 index 72702d38f8..0000000000 --- a/_next/static/chunks/583-a0f2958c7a363206.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[583],{69450:function(e){"use strict";let SubRange=class SubRange{constructor(e,t){this.low=e,this.high=t,this.length=1+t-e}overlaps(e){return!(this.highe.high)}touches(e){return!(this.high+1e.high)}add(e){return new SubRange(Math.min(this.low,e.low),Math.max(this.high,e.high))}subtract(e){return e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.highe+t.length,0)}add(e,t){var _add=e=>{for(var t=0;t{for(var t=0;t{for(var t=0;t{for(var r=t.low;r<=t.high;)e.push(r),r++;return e},[])}subranges(){return this.ranges.map(e=>({low:e.low,high:e.high,length:1+e.high-e.low}))}};e.exports=DRange},26961:function(e,t,r){var n,a=function(){var e=String.fromCharCode,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",n={};function getBaseValue(e,t){if(!n[e]){n[e]={};for(var r=0;r>>8,r[2*n+1]=i%256}return r},decompressFromUint8Array:function(t){if(null==t)return a.decompress(t);for(var r=Array(t.length/2),n=0,o=r.length;ns.charCodeAt(0)){for(n=0;n>=1}else{for(n=0,a=1;n>=1}0==--d&&(d=Math.pow(2,p),p++),delete u[s]}else for(n=0,a=i[s];n>=1;0==--d&&(d=Math.pow(2,p),p++),i[f]=y++,s=String(c)}if(""!==s){if(Object.prototype.hasOwnProperty.call(u,s)){if(256>s.charCodeAt(0)){for(n=0;n>=1}else{for(n=0,a=1;n>=1}0==--d&&(d=Math.pow(2,p),p++),delete u[s]}else for(n=0,a=i[s];n>=1;0==--d&&(d=Math.pow(2,p),p++)}for(n=0,a=2;n>=1;for(;;){if(v<<=1,g==t-1){m.push(r(v));break}g++}return m.join("")},decompress:function(e){return null==e?"":""==e?null:a._decompress(e.length,32768,function(t){return e.charCodeAt(t)})},_decompress:function(t,r,n){var a,o,i,u,c,f,s,d=[],y=4,p=4,m=3,v="",g=[],_={val:n(0),position:r,index:1};for(a=0;a<3;a+=1)d[a]=a;for(i=0,c=4,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;switch(i){case 0:for(i=0,c=256,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;s=e(i);break;case 1:for(i=0,c=65536,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;s=e(i);break;case 2:return""}for(d[3]=s,o=s,g.push(s);;){if(_.index>t)return"";for(i=0,c=Math.pow(2,m),f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;switch(s=i){case 0:for(i=0,c=256,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;d[p++]=e(i),s=p-1,y--;break;case 1:for(i=0,c=65536,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;d[p++]=e(i),s=p-1,y--;break;case 2:return g.join("")}if(0==y&&(y=Math.pow(2,m),m++),d[s])v=d[s];else{if(s!==p)return null;v=o+o.charAt(0)}g.push(v),d[p++]=o+v.charAt(0),y--,o=v,0==y&&(y=Math.pow(2,m),m++)}}};return a}();void 0!==(n=(function(){return a}).call(t,r,t,e))&&(e.exports=n)},14419:function(e,t,r){let n=r(60697),a=r(69450),o=n.types;e.exports=class RandExp{constructor(e,t){if(this._setDefaults(e),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,e=e.source;else if("string"==typeof e)this.ignoreCase=t&&-1!==t.indexOf("i"),this.multiline=t&&-1!==t.indexOf("m");else throw Error("Expected a regexp or string");this.tokens=n(e)}_setDefaults(e){this.max=null!=e.max?e.max:null!=RandExp.prototype.max?RandExp.prototype.max:100,this.defaultRange=e.defaultRange?e.defaultRange:this.defaultRange.clone(),e.randInt&&(this.randInt=e.randInt)}gen(){return this._gen(this.tokens,[])}_gen(e,t){var r,n,a,i,u;switch(e.type){case o.ROOT:case o.GROUP:if(e.followedBy||e.notFollowedBy)return"";for(e.remember&&void 0===e.groupNumber&&(e.groupNumber=t.push(null)-1),r=e.options?this._randSelect(e.options):e.stack,n="",i=0,u=r.length;i{var t,r,u=0,c={type:a.ROOT,stack:[]},f=c,s=c.stack,d=[],repeatErr=t=>{n.error(e,`Nothing to repeat at column ${t-1}`)},y=n.strToChars(e);for(t=y.length;u({type:n.POSITION,value:"b"}),t.nonWordBoundary=()=>({type:n.POSITION,value:"B"}),t.begin=()=>({type:n.POSITION,value:"^"}),t.end=()=>({type:n.POSITION,value:"$"})},94992:function(e,t,r){let n=r(30504),INTS=()=>[{type:n.RANGE,from:48,to:57}],WORDS=()=>[{type:n.CHAR,value:95},{type:n.RANGE,from:97,to:122},{type:n.RANGE,from:65,to:90}].concat(INTS()),WHITESPACE=()=>[{type:n.CHAR,value:9},{type:n.CHAR,value:10},{type:n.CHAR,value:11},{type:n.CHAR,value:12},{type:n.CHAR,value:13},{type:n.CHAR,value:32},{type:n.CHAR,value:160},{type:n.CHAR,value:5760},{type:n.RANGE,from:8192,to:8202},{type:n.CHAR,value:8232},{type:n.CHAR,value:8233},{type:n.CHAR,value:8239},{type:n.CHAR,value:8287},{type:n.CHAR,value:12288},{type:n.CHAR,value:65279}],NOTANYCHAR=()=>[{type:n.CHAR,value:10},{type:n.CHAR,value:13},{type:n.CHAR,value:8232},{type:n.CHAR,value:8233}];t.words=()=>({type:n.SET,set:WORDS(),not:!1}),t.notWords=()=>({type:n.SET,set:WORDS(),not:!0}),t.ints=()=>({type:n.SET,set:INTS(),not:!1}),t.notInts=()=>({type:n.SET,set:INTS(),not:!0}),t.whitespace=()=>({type:n.SET,set:WHITESPACE(),not:!1}),t.notWhitespace=()=>({type:n.SET,set:WHITESPACE(),not:!0}),t.anyChar=()=>({type:n.SET,set:NOTANYCHAR(),not:!0})},30504:function(e){e.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},86245:function(e,t,r){let n=r(30504),a=r(94992),o={0:0,t:9,n:10,v:11,f:12,r:13};t.strToChars=function(e){return e=e.replace(/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\]^?])|([0tnvfr]))/g,function(e,t,r,n,a,i,u,c){if(r)return e;var f=String.fromCharCode(t?8:n?parseInt(n,16):a?parseInt(a,16):i?parseInt(i,8):u?"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?".indexOf(u):o[c]);return/[[\]{}^$.|?*+()]/.test(f)&&(f="\\"+f),f})},t.tokenizeClass=(e,r)=>{for(var o,i,u=[],c=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?([^])/g;null!=(o=c.exec(e));)if(o[1])u.push(a.words());else if(o[2])u.push(a.ints());else if(o[3])u.push(a.whitespace());else if(o[4])u.push(a.notWords());else if(o[5])u.push(a.notInts());else if(o[6])u.push(a.notWhitespace());else if(o[7])u.push({type:n.RANGE,from:(o[8]||o[9]).charCodeAt(0),to:o[10].charCodeAt(0)});else{if(!(i=o[12]))return[u,c.lastIndex];u.push({type:n.CHAR,value:i.charCodeAt(0)})}t.error(r,"Unterminated character class")},t.error=(e,t)=>{throw SyntaxError("Invalid regular expression: /"+e+"/: "+t)}},37297:function(e,t,r){"use strict";var n,a,o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CommentFactory=void 0;var c=u(r(55423));(n=a||(t.CommentFactory=a={})).description=function(e,t){void 0===t&&(t=!1);var r,n,a,u,f,s,d,y,p,m=null===(d=e.declarations)||void 0===d?void 0:d[0];if(m){var v=o(c.default.versionMajorMinor.split(".").map(Number),2),g=v[0],_=v[1];if(g<5||5===g&&_<1){var b=[],x=c.default.displayPartsToString(e.getDocumentationComment(void 0));if(x.length&&(b.push(x),t&&e.getJsDocTags().length&&b.push("")),t)try{for(var S=i(e.getJsDocTags()),T=S.next();!T.done;T=S.next()){var E=T.value;b.push(E.text?"@".concat(E.name," ").concat(c.default.displayPartsToString(E.text)):"@".concat(E.name))}}catch(e){r={error:e}}finally{try{T&&!T.done&&(n=S.return)&&n.call(S)}finally{if(r)throw r.error}}return b.length?b.map(function(e){return e.split("\r\n").join("\n")}).join("\n"):void 0}var w=c.default.getJSDocCommentsAndTags(m);if(0!==w.length){var P=[];try{for(var j=i(w),I=j.next();!I.done;I=j.next()){var A=I.value;if(c.default.isJSDoc(A)){var F=c.default.getTextOfJSDocComment(A.comment);if((null==F?void 0:F.length)&&(P.push(F),t&&(null===(y=A.tags)||void 0===y?void 0:y.length)&&P.push("")),t)try{for(var M=(f=void 0,i(null!==(p=A.tags)&&void 0!==p?p:[])),O=M.next();!O.done;O=M.next()){var E=O.value;P.push(parseJSDocTag(E))}}catch(e){f={error:e}}finally{try{O&&!O.done&&(s=M.return)&&s.call(M)}finally{if(f)throw f.error}}}else t&&P.push(parseJSDocTag(A))}}catch(e){a={error:e}}finally{try{I&&!I.done&&(u=j.return)&&u.call(j)}finally{if(a)throw a.error}}var C=P.map(function(e){return e.split("\r\n").join("\n")}).join("\n");return C.length?C:void 0}}},n.merge=function(e){return e.map(function(e){return e.text}).map(function(e){return e.split("\r\n").join("\n")}).join("")};var parseJSDocTag=function(e){var t,r=null===(t=e.name)||void 0===t?void 0:t.getText(),n=c.default.getTextOfJSDocComment(e.comment);return["@".concat(e.tagName.text),r,n].filter(function(e){return!!(null==e?void 0:e.length)}).join(" ")}},73906:function(e,t,r){"use strict";var n,a,o=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ExpressionFactory=void 0;var u=i(r(55423)),c=r(46657);(n=a||(t.ExpressionFactory=a={})).number=function(e){return e<0?u.default.factory.createPrefixUnaryExpression(u.default.SyntaxKind.MinusToken,u.default.factory.createNumericLiteral(Math.abs(e))):u.default.factory.createNumericLiteral(e)},n.bigint=function(e){return u.default.factory.createCallExpression(u.default.factory.createIdentifier("BigInt"),void 0,[u.default.factory.createIdentifier(e.toString())])},n.isRequired=function(e){return u.default.factory.createStrictInequality(u.default.factory.createIdentifier("undefined"),e)},n.isArray=function(e){return u.default.factory.createCallExpression(u.default.factory.createIdentifier("Array.isArray"),void 0,[e])},n.isObject=function(e){return function(t){var r=[u.default.factory.createStrictEquality(u.default.factory.createStringLiteral("object"),u.default.factory.createTypeOfExpression(t))];return!0===e.checkNull&&r.push(u.default.factory.createStrictInequality(u.default.factory.createNull(),t)),!0===e.checkArray&&r.push(u.default.factory.createStrictEquality(u.default.factory.createFalse(),u.default.factory.createCallExpression(u.default.factory.createIdentifier("Array.isArray"),void 0,[t]))),1===r.length?r[0]:r.reduce(function(e,t){return u.default.factory.createLogicalAnd(e,t)})}},n.isInstanceOf=function(e){return function(t){return u.default.factory.createBinaryExpression(t,u.default.factory.createToken(u.default.SyntaxKind.InstanceOfKeyword),u.default.factory.createIdentifier(e))}},n.coalesce=function(e){return function(t){return u.default.factory.createBinaryExpression(e,u.default.factory.createToken(u.default.SyntaxKind.QuestionQuestionToken),t)}},n.currying=function(e){return function(t){if(0===t.length)return u.default.factory.createCallExpression(e,void 0,void 0);var r,n,a=u.default.factory.createCallExpression(e,void 0,[t[0]]);try{for(var i=o(t.slice(1)),c=i.next();!c.done;c=i.next()){var f=c.value;a=u.default.factory.createCallExpression(a,void 0,[f])}}catch(e){r={error:e}}finally{try{c&&!c.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return a}},n.selfCall=function(e){return u.default.isCallExpression(e)?e:u.default.factory.createCallExpression(u.default.factory.createParenthesizedExpression(u.default.factory.createArrowFunction(void 0,void 0,[],void 0,void 0,e)),void 0,void 0)},n.getEscapedText=function(e){return function(t){return e.printNode(u.default.EmitHint.Expression,t,t.getSourceFile())}},n.transpile=function(e){return function(t){var r=u.default.createSourceFile("".concat(c.RandomGenerator.uuid(),".ts"),t,u.default.ScriptTarget.ESNext,!0,u.default.ScriptKind.TS).statements[0];if(void 0===r)throw ReferenceError("Error on ExpressionFactory.transpile(): no statement exists.");if(!u.default.isExpressionStatement(r))throw TypeError("Error on ExpressionFactory.transpile(): statement is not an expression statement.");return function(t){var visitor=function(r){return u.default.isIdentifier(r)&&"$input"===r.text?t:u.default.visitEachChild(u.default.factory.cloneNode(r),visitor,e)};return visitor(r.expression)}}}},61387:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IdentifierFactory=void 0;var i=o(r(55423)),u=r(5724),c=r(12301);(n=a||(t.IdentifierFactory=a={})).identifier=function(e){return u.Escaper.variable(e)?i.default.factory.createIdentifier(e):i.default.factory.createStringLiteral(e)},n.access=function(e){return function(t){var r=n.identifier(t);return i.default.isStringLiteral(r)?i.default.factory.createElementAccessExpression(e,r):i.default.factory.createPropertyAccessExpression(e,r)}},n.getName=function(e){var t,r=null===(t=e.escapedText)||void 0===t?void 0:t.toString();return"string"==typeof r?r:i.default.isPropertyAccessExpression(e)?"".concat(n.getName(e.expression),".").concat(e.name.escapedText.toString()):i.default.isElementAccessExpression(e)?"".concat(n.getName(e.expression),"[").concat(n.getName(e.argumentExpression),"]"):"uknown"},n.postfix=function(e){return u.Escaper.variable(e)?'".'.concat(e,'"'):'"['.concat(JSON.stringify(e).split('"').join('\\"'),']"')},n.parameter=function(e,t,r){return void 0!==i.default.getDecorators?i.default.factory.createParameterDeclaration(void 0,void 0,e,(null==r?void 0:r.kind)===i.default.SyntaxKind.QuestionToken?i.default.factory.createToken(i.default.SyntaxKind.QuestionToken):void 0,null!=t?t:c.TypeFactory.keyword("any"),r&&r.kind!==i.default.SyntaxKind.QuestionToken?r:void 0):i.default.factory.createParameterDeclaration(void 0,void 0,void 0,e,(null==r?void 0:r.kind)===i.default.SyntaxKind.QuestionToken?i.default.factory.createToken(i.default.SyntaxKind.QuestionToken):void 0,t,r&&r.kind!==i.default.SyntaxKind.QuestionToken?r:void 0)}},67711:function(e,t,r){"use strict";var n,a,o=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.JsonMetadataFactory=void 0;var i=r(86752),u=r(63664),c=r(92595),f=r(43390);(n=a||(t.JsonMetadataFactory=a={})).analyze=function(e){return function(t,r){return function(a){var o=new c.MetadataCollection,i=f.MetadataFactory.analyze(t,r)({escape:!0,constant:!0,absorb:!0,validate:n.validate})(o)(a);if(!1===i.success)throw u.TransformerError.from(e)(i.errors);return[o,i.data]}}},n.validate=function(e){var t,r,n=[];(e.atomics.some(function(e){return"bigint"===e.type})||e.constants.some(function(e){return"bigint"===e.type}))&&n.push("JSON does not support bigint type."),(e.tuples.some(function(e){return e.type.elements.some(function(e){return!1===e.isRequired()})})||e.arrays.some(function(e){return!1===e.type.value.isRequired()}))&&n.push("JSON does not support undefined type in array."),e.maps.length&&n.push("JSON does not support Map type."),e.sets.length&&n.push("JSON does not support Set type.");try{for(var a=o(e.natives),u=a.next();!u.done;u=a.next()){var c=u.value;!1===i.AtomicPredicator.native(c)&&"Date"!==c&&n.push("JSON does not support ".concat(c," type."))}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n}},97846:function(e,t,r){"use strict";var n,a,o,i,u,c,f,s=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},d=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LiteralFactory=void 0;var y=d(r(55423)),p=r(73906),m=r(61387);(n=f||(t.LiteralFactory=f={})).generate=function(e){if(null===e)return y.default.factory.createNull();if(y.default.isIdentifier(e))return e;if(e instanceof Array)return o(e);if("object"==typeof e)return a(e);if("string"==typeof e)return c(e);if("boolean"==typeof e)return i(e);if("number"==typeof e)return i(e);else if("bigint"==typeof e)return u(e);else if("function"==typeof e)return y.default.factory.createIdentifier("undefined");else throw TypeError("Error on LiteralFactory.generate(): unknown type.")},a=function(e){return y.default.factory.createObjectLiteralExpression(Object.entries(e).filter(function(e){return void 0!==e[1]}).map(function(e){var t=s(e,2),r=t[0],a=t[1];return y.default.factory.createPropertyAssignment(m.IdentifierFactory.identifier(r),n.generate(a))}),!0)},o=function(e){return y.default.factory.createArrayLiteralExpression(e.map(n.generate),!0)},i=function(e){return y.default.factory.createIdentifier(e.toString())},u=function(e){return p.ExpressionFactory.bigint(e)},c=function(e){return y.default.factory.createStringLiteral(e)}},92595:function(e,t,r){"use strict";var n,a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataCollection=void 0;var u=r(49596),c=r(63860),f=r(58962),s=r(84530),d=r(61261),y=r(63224),p=r(37297),m=r(12301),v=function(){function MetadataCollection(e){this.options=e,this.objects_=new Map,this.object_unions_=new Map,this.aliases_=new Map,this.arrays_=new Map,this.tuples_=new Map,this.names_=new Map,this.object_index_=0,this.recursive_array_index_=0,this.recursive_tuple_index_=0}return MetadataCollection.prototype.aliases=function(){return o([],a(this.aliases_.values()),!1)},MetadataCollection.prototype.objects=function(){return o([],a(this.objects_.values()),!1)},MetadataCollection.prototype.unions=function(){return o([],a(this.object_unions_.values()),!1)},MetadataCollection.prototype.arrays=function(){return o([],a(this.arrays_.values()),!1)},MetadataCollection.prototype.tuples=function(){return o([],a(this.tuples_.values()),!1)},MetadataCollection.prototype.getName=function(e,t){var r,n,a=(n=m.TypeFactory.getFullName(e)(t),(null===(r=this.options)||void 0===r?void 0:r.replace)?this.options.replace(n):n),o=y.MapUtil.take(this.names_)(a,function(){return new Map}),i=o.get(t);if(void 0!==i)return i;var u=o.size?"".concat(a,".o").concat(o.size):a;return o.set(t,u),u},MetadataCollection.prototype.getUnionIndex=function(e){var t=e.objects.map(function(e){return e.name}).join(" | ");return y.MapUtil.take(this.object_unions_)(t,function(){return e.objects}),o([],a(this.object_unions_.keys()),!1).indexOf(t)},MetadataCollection.prototype.emplace=function(e,t){var r,n,a,o,i,u,c=this.objects_.get(t);if(void 0!==c)return[c,!1];var s=this.getName(e,t),d=f.MetadataObject.create({name:s,properties:[],description:null!==(n=null!==(r=t.aliasSymbol&&p.CommentFactory.description(t.aliasSymbol))&&void 0!==r?r:t.symbol&&p.CommentFactory.description(t.symbol))&&void 0!==n?n:void 0,jsDocTags:null!==(u=null!==(o=null===(a=t.aliasSymbol)||void 0===a?void 0:a.getJsDocTags())&&void 0!==o?o:null===(i=t.symbol)||void 0===i?void 0:i.getJsDocTags())&&void 0!==u?u:[],validated:!1,index:this.object_index_++,recursive:null,nullables:[]});return this.objects_.set(t,d),[d,!0]},MetadataCollection.prototype.emplaceAlias=function(e,t,r){var n,a,o=this.aliases_.get(t);if(void 0!==o)return[o,!1,function(){}];var i=this.getName(e,t),c=u.MetadataAlias.create({name:i,value:null,description:null!==(n=p.CommentFactory.description(r))&&void 0!==n?n:null,recursive:null,nullables:[],jsDocTags:null!==(a=r.getJsDocTags())&&void 0!==a?a:[]});return this.aliases_.set(t,c),[c,!0,function(e){return(0,d.Writable)(c).value=e}]},MetadataCollection.prototype.emplaceArray=function(e,t){var r=this.arrays_.get(t);if(void 0!==r)return[r,!1,function(){}];var n=this.getName(e,t),a=c.MetadataArrayType.create({name:n,value:null,index:null,recursive:null,nullables:[]});return this.arrays_.set(t,a),[a,!0,function(e){return(0,d.Writable)(a).value=e}]},MetadataCollection.prototype.emplaceTuple=function(e,t){var r=this.tuples_.get(t);if(void 0!==r)return[r,!1,function(){}];var n=this.getName(e,t),a=s.MetadataTupleType.create({name:n,elements:null,index:null,recursive:null,nullables:[]});return this.tuples_.set(t,a),[a,!0,function(e){return(0,d.Writable)(a).elements=e}]},MetadataCollection.prototype.setObjectRecursive=function(e,t){(0,d.Writable)(e).recursive=t},MetadataCollection.prototype.setAliasRecursive=function(e,t){(0,d.Writable)(e).recursive=t},MetadataCollection.prototype.setArrayRecursive=function(e,t){(0,d.Writable)(e).recursive=t,t&&((0,d.Writable)(e).index=this.recursive_array_index_++)},MetadataCollection.prototype.setTupleRecursive=function(e,t){(0,d.Writable)(e).recursive=t,t&&((0,d.Writable)(e).index=this.recursive_tuple_index_++)},MetadataCollection.prototype.toJSON=function(){return{objects:this.objects().map(function(e){return e.toJSON()}),aliases:this.aliases().map(function(e){return e.toJSON()}),arrays:o([],a(this.arrays_.values()),!1).map(function(e){return e.toJSON()}),tuples:o([],a(this.tuples_.values()),!1).map(function(e){return e.toJSON()})}},MetadataCollection}();t.MetadataCollection=v,(n=v||(t.MetadataCollection=v={})).replace=function(e){var t,r,n,o,u=e;try{for(var c=i(g),f=c.next();!f.done;f=c.next()){var s=a(f.value,1)[0];u=u.split(s).join("")}}catch(e){t={error:e}}finally{try{f&&!f.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}if(0!==u.length)return u;try{for(var d=i(g),y=d.next();!y.done;y=d.next()){var p=a(y.value,2),s=p[0],m=p[1];e=e.split(s).join(m)}}catch(e){n={error:e}}finally{try{y&&!y.done&&(o=d.return)&&o.call(d)}finally{if(n)throw n.error}}return e},n.escape=function(e){var t,r;try{for(var n=i(g),o=n.next();!o.done;o=n.next()){var u=a(o.value,2),c=u[0],f=u[1];""!==f&&(e=e.split(f).join(c))}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return e};var g=[["$","_dollar_"],["&","_and_"],["|","_or_"],["{","_blt_"],["}","_bgt_"],["<","_lt_"],[">","_gt_"],["[","_alt_"],["]","_agt_"],[",","_comma_"],["`","_backquote_"],["'","_singlequote_"],['"',"_doublequote_"],[" ","_space_"],["?","_question_"],[":","_colon_"],[";","_semicolon_"]]},7825:function(e,t,r){"use strict";var n,a,o=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a"),target:"array",kind:"minItems",value:parse_integer(e)(!0)(t),validate:"".concat(t," <= $input.length"),exclusive:!0},{name:"MaxItems<".concat(t,">"),target:"array",kind:"maxItems",value:parse_integer(e)(!0)(t),validate:"$input.length <= ".concat(t),exclusive:!0}]}}},minItems:function(e){return function(t){return{array:[{name:"MinItems<".concat(t,">"),target:"array",kind:"minItems",value:parse_integer(e)(!0)(t),validate:"".concat(t," <= $input.length"),exclusive:!0}]}}},maxItems:function(e){return function(t){return{array:[{name:"MaxItems<".concat(t,">"),target:"array",kind:"maxItems",value:parse_integer(e)(!0)(t),validate:"$input.length <= ".concat(t),exclusive:!0}]}}},type:function(){return function(e){return(e.startsWith("{")&&e.endsWith("}")&&(e=e.substring(1,e.length-1)),"int"===e?e="int32":"uint"===e&&(e="uint32"),!1===["int32","uint32","int64","uint64","float","double"].includes(e))?{}:{number:[{name:"Type<".concat(JSON.stringify(e),">"),target:"number",kind:"type",value:e,validate:"int32"===e?"Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647":"uint32"===e?"Math.floor($input) === $input && 0 <= $input && $input <= 4294967295":"int64"===e?"Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807":"uint64"===e?"Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615":"float"===e?"-1.175494351e38 <= $input && $input <= 3.4028235e38":"true",exclusive:!0}],bigint:[{name:"Type<".concat(JSON.stringify(e),">"),target:"bigint",kind:"type",value:e,validate:"int64"===e?"true":"BigInt(0) <= $input",exclusive:!0}]}}},minimum:function(e){return function(t){var r;return{number:[{name:"Minimum<".concat(t,">"),target:"number",kind:"minimum",value:parse_number(e)(t),validate:"".concat(t," <= $input"),exclusive:["minimum","exclusiveMinimum"]}],bigint:[{name:"Minimum<".concat(t,"n>"),target:"bigint",kind:"minimum",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"".concat(t," <= $input"),exclusive:["minimum","exclusiveMinimum"]}]}}},maximum:function(e){return function(t){var r;return{number:[{name:"Maximum<".concat(t,">"),target:"number",kind:"maximum",value:parse_number(e)(t),validate:"$input <= ".concat(t),exclusive:["maximum","exclusiveMaximum"]}],bigint:[{name:"Maximum<".concat(t,"n>"),target:"bigint",kind:"maximum",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"$input <= ".concat(t),exclusive:["maximum","exclusiveMaximum"]}]}}},exclusiveMinimum:function(e){return function(t){var r;return{number:[{name:"ExclusiveMinimum<".concat(t,">"),target:"number",kind:"exclusiveMinimum",value:parse_number(e)(t),validate:"".concat(t," < $input"),exclusive:["minimum","exclusiveMinimum"]}],bigint:[{name:"ExclusiveMinimum<".concat(t,"n>"),target:"bigint",kind:"exclusiveMinimum",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"".concat(t," < $input"),exclusive:["minimum","exclusiveMinimum"]}]}}},exclusiveMaximum:function(e){return function(t){var r;return{number:[{name:"ExclusiveMaximum<".concat(t,">"),target:"number",kind:"exclusiveMaximum",value:parse_number(e)(t),validate:"$input < ".concat(t),exclusive:["maximum","exclusiveMaximum"]}],bigint:[{name:"ExclusiveMaximum<".concat(t,"n>"),target:"bigint",kind:"exclusiveMaximum",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"$input < ".concat(t),exclusive:["maximum","exclusiveMaximum"]}]}}},multipleOf:function(e){return function(t){var r;return{number:[{name:"MultipleOf<".concat(t,">"),target:"number",kind:"multipleOf",value:parse_number(e)(t),validate:"$input % ".concat(t," === 0"),exclusive:!0}],bigint:[{name:"MultipleOf<".concat(t,"n>"),target:"bigint",kind:"multipleOf",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"$input % ".concat(t,"n === 0n"),exclusive:!0}]}}},format:function(){return function(e){var t=y.get(e);return void 0===t?{}:{string:[{name:"Format<".concat(JSON.stringify(t[0]),">"),target:"string",kind:"format",value:t[0],validate:t[1],exclusive:!0}]}}},pattern:function(){return function(e){return{string:[{name:"Pattern<".concat(JSON.stringify(e),">"),target:"string",kind:"pattern",value:e,validate:"RegExp(/".concat(e,"/).test($input)"),exclusive:["format"]}]}}},length:function(e){return function(t){return{string:[{name:"MinLength<".concat(t,">"),target:"string",kind:"minLength",value:parse_number(e)(t),validate:"".concat(t," <= $input.length"),exclusive:!0},{name:"MaxLength<".concat(t,">"),target:"string",kind:"maxLength",value:parse_number(e)(t),validate:"$input.length <= ".concat(t),exclusive:!0}]}}},minLength:function(e){return function(t){return{string:[{name:"MinLength<".concat(t,">"),target:"string",kind:"minLength",value:parse_number(e)(t),validate:"".concat(t," <= $input.length"),exclusive:!0}]}}},maxLength:function(e){return function(t){return{string:[{name:"MaxLength<".concat(t,">"),target:"string",kind:"maxLength",value:parse_number(e)(t),validate:"$input.length <= ".concat(t),exclusive:!0}]}}}},parse_number=function(e){return function(t){var r=Number(t);return!0===isNaN(r)?e("invalid number"):r}},parse_integer=function(e){return function(t){return function(r){var n=parse_number(e)(r);return null===n?null:Math.floor(n)!==n?e("invalid integer"):!0===t&&n<0?e("invalid unsigned integer"):n}}},y=new Map(u(u([],i(Object.entries(f.FormatCheatSheet).map(function(e){var t=i(e,2),r=t[0];return[r,[r,t[1]]]})),!1),[["datetime",["date-time","!isNaN(new Date($input).getTime())"]],["dateTime",["date-time","!isNaN(new Date($input).getTime())"]]],!1))},43390:function(e,t,r){"use strict";var n,a,o,i,u,c,f,s,d=this&&this.__assign||function(){return(d=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},p=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},v=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataFactory=void 0;var g=v(r(55423)),_=r(3078),b=r(51665),x=r(71903),S=r(30628),T=r(56896),E=r(73906);(n=s||(t.MetadataFactory=s={})).analyze=function(e,t){return function(r){return function(n){return function(o){var i=[],u=(0,x.explore_metadata)(e)(r)(n)(i)(o,{top:!0,object:null,property:null,nested:null,escaped:!1,aliased:!1});return(0,S.iterate_metadata_collection)(i)(n),(0,T.iterate_metadata_sort)(n)(u),r.validate&&i.push.apply(i,p([],y(a(t)(r)(r.validate)(u)),!1)),i.length?{success:!1,errors:i}:{success:!0,data:u}}}}},n.soleLiteral=function(e){var t=_.Metadata.initialize();return t.constants.push(b.MetadataConstant.from({values:[e],type:"string"})),t},a=function(e){return function(t){return function(r){return function(n){var a={functor:r,errors:[],objects:new Set,arrays:new Set,tuples:new Set,aliases:new Set};return o(e)(t)(a)(n,{object:null,property:null,nested:null,top:!0,aliased:!1,escaped:!1}),a.errors}}}},o=function(e){return function(t){return function(r){return function(n,a){var s,v,_,b,x,S,T,w,P,j,I,A,F,M,O,C,N,R,L=[];if(void 0!==e)try{for(var U=m(n.atomics),q=U.next();!q.done;q=U.next()){var z=q.value;try{for(var B=(_=void 0,m(z.tags)),H=B.next();!H.done;H=B.next()){var V=H.value;try{for(var J=(x=void 0,m(V.filter(function(e){return void 0!==e.validate&&void 0===e.predicate}))),G=J.next();!G.done;G=J.next()){var Q=G.value;try{Q.predicate=E.ExpressionFactory.transpile(e)(Q.validate)}catch(e){L.push("Unable to transpile type tag script: ".concat(JSON.stringify(Q.validate))),Q.predicate=function(){return g.default.factory.createTrue()}}}}catch(e){x={error:e}}finally{try{G&&!G.done&&(S=J.return)&&S.call(J)}finally{if(x)throw x.error}}}}catch(e){_={error:e}}finally{try{H&&!H.done&&(b=B.return)&&b.call(B)}finally{if(_)throw _.error}}}}catch(e){s={error:e}}finally{try{q&&!q.done&&(v=U.return)&&v.call(U)}finally{if(s)throw s.error}}L.push.apply(L,p([],y(r.functor(n,a)),!1)),L.length&&r.errors.push({name:n.getName(),explore:d({},a),messages:p([],y(new Set(L)),!1)});try{for(var W=m(n.aliases),K=W.next();!K.done;K=W.next()){var Y=K.value;i(e)(t)(r)(Y,a)}}catch(e){T={error:e}}finally{try{K&&!K.done&&(w=W.return)&&w.call(W)}finally{if(T)throw T.error}}try{for(var Z=m(n.arrays),X=Z.next();!X.done;X=Z.next()){var ee=X.value;u(e)(t)(r)(ee.type,a)}}catch(e){P={error:e}}finally{try{X&&!X.done&&(j=Z.return)&&j.call(Z)}finally{if(P)throw P.error}}try{for(var et=m(n.tuples),er=et.next();!er.done;er=et.next()){var en=er.value;c(e)(t)(r)(en.type,a)}}catch(e){I={error:e}}finally{try{er&&!er.done&&(A=et.return)&&A.call(et)}finally{if(I)throw I.error}}try{for(var ea=m(n.objects),eo=ea.next();!eo.done;eo=ea.next()){var ei=eo.value;f(e)(t)(r)(ei)}}catch(e){F={error:e}}finally{try{eo&&!eo.done&&(M=ea.return)&&M.call(ea)}finally{if(F)throw F.error}}try{for(var eu=m(n.sets),ec=eu.next();!ec.done;ec=eu.next()){var el=ec.value;o(e)(t)(r)(el,a)}}catch(e){O={error:e}}finally{try{ec&&!ec.done&&(C=eu.return)&&C.call(eu)}finally{if(O)throw O.error}}try{for(var ef=m(n.maps),es=ef.next();!es.done;es=ef.next()){var ed=es.value;o(e)(t)(r)(ed.key,a),o(e)(t)(r)(ed.value,a)}}catch(e){N={error:e}}finally{try{es&&!es.done&&(R=ef.return)&&R.call(ef)}finally{if(N)throw N.error}}!0===t.escape&&null!==n.escaped&&o(e)(t)(r)(n.escaped.returns,d(d({},a),{escaped:!0}))}}}},i=function(e){return function(t){return function(r){return function(n,a){r.aliases.has(n)||(r.aliases.add(n),o(e)(t)(r)(n.value,d(d({},a),{nested:n,aliased:!0})))}}}},u=function(e){return function(t){return function(r){return function(n,a){r.arrays.has(n)||(r.arrays.add(n),o(e)(t)(r)(n.value,d(d({},a),{nested:n,top:!1})))}}}},c=function(e){return function(t){return function(r){return function(n,a){var i,u;if(!r.tuples.has(n)){r.tuples.add(n);try{for(var c=m(n.elements),f=c.next();!f.done;f=c.next()){var s=f.value;o(e)(t)(r)(s,d(d({},a),{nested:n,top:!1}))}}catch(e){i={error:e}}finally{try{f&&!f.done&&(u=c.return)&&u.call(c)}finally{if(i)throw i.error}}}}}}},f=function(e){return function(t){return function(r){return function(n){var a,i;if(!r.objects.has(n)){if(r.objects.add(n),t.validate){var u={object:n,top:!1,property:null,nested:null,escaped:!1,aliased:!1},c=t.validate(_.Metadata.create(d(d({},_.Metadata.initialize()),{objects:[n]})),u);c.length&&r.errors.push({name:n.name,explore:u,messages:p([],y(new Set(c)),!1)})}try{for(var f=m(n.properties),s=f.next();!s.done;s=f.next()){var v=s.value;o(e)(t)(r)(v.value,{object:n,property:v.key.isSoleLiteral()?v.key.getSoleLiteral():{},nested:null,top:!1,aliased:!1,escaped:!1})}}catch(e){a={error:e}}finally{try{s&&!s.done&&(i=f.return)&&i.call(f)}finally{if(a)throw a.error}}}}}}}},76331:function(e,t){"use strict";var r,n,a,o,i,u=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},f=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)?(e.push({name:f([t],c(o.map(function(e){return e.name})),!1).join(" & "),explore:i,messages:m}),[]):_}}},r.validate=function(e){return function(t){return function(r){var n,a,o=!0;try{for(var i=u(r),c=i.next();!c.done;c=i.next())c.value.target!==t&&o&&(o=e(null)("target must constains ".concat(t," type")))}catch(e){n={error:e}}finally{try{c&&!c.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}return r.forEach(function(t,n){if(!1!==t.exclusive){if(!0===t.exclusive){var a=r.some(function(e,r){return n!==r&&e.kind===t.kind});!0===a&&o&&(o=e(null)("kind '".concat(t.kind,"' can't be duplicated")))}else if(Array.isArray(t.exclusive)){var a=r.find(function(e,r){return n!==r&&e.kind===t.kind&&t.exclusive.includes(e.name)});void 0!==a&&(null!=o||(o=e(null)("kind '".concat(t.kind,"' can't be used with '").concat(a.name,"'"))))}}}),o}}},n=function(e){return function(t,r){var n;if("target"===t&&(1!==r.constants.length||r.constants[0].values.length!==r.size()||r.constants[0].values.some(function(e){return"boolean"!==e&&"bigint"!==e&&"number"!==e&&"string"!==e&&"array"!==e})))return e(t)("must be one of 'boolean', 'bigint', 'number', 'string', 'array'");if("kind"===t&&(1!==r.size()||1!==r.constants.length||"string"!==r.constants[0].type||1!==r.constants[0].values.length))return e(t)("must be a string literal type");if("value"===t&&(r.size()>1||0!==r.size()&&(1!==r.constants.length||1!==r.constants[0].values.length)))return e(t)("must be a constant literal type or undefined value");if("exclusive"===t)return null!==o(e)(t)(r);if("validate"===t){if(0===r.size()&&!1===r.isRequired()&&!1===r.nullable||1===r.size()&&1===r.constants.length&&"string"===r.constants[0].type&&1===r.constants[0].values.length==!0)return!0;var a=null===(n=r.objects[0])||void 0===n?void 0:n.properties.map(function(e){return e.key.getSoleLiteral()}).filter(function(e){return null!==e});if(void 0===a)return e("target")("must be one of 'boolean', 'bigint', 'number', 'string', 'array'");if(!1===(1===r.size()&&1===r.objects.length&&r.objects[0].properties.every(function(e){return 1===e.value.size()&&e.value.isRequired()&&!1===e.value.nullable&&1===e.value.constants.length&&"string"===e.value.constants[0].type&&1===e.value.constants[0].values.length&&a.includes(e.key.getSoleLiteral())})))return e(t)("must be a string literal type or Record type.")}return!0}},a=function(e){return function(t){var r,n,a,i,u,find=function(e){var r,n;return null===(n=null===(r=t.properties[0])||void 0===r?void 0:r.value.objects[0])||void 0===n?void 0:n.properties.find(function(t){return t.key.getSoleLiteral()===e})},c=find("target").value.constants[0].values,f=find("kind").value.constants[0].values[0],s=null===(i=null===(a=find("value"))||void 0===a?void 0:a.value.constants[0])||void 0===i?void 0:i.values[0],d=o(e)("exclusive")(null===(u=find("exclusive"))||void 0===u?void 0:u.value);if(null===d)return null;var y=(n=null===(r=find("validate"))||void 0===r?void 0:r.value)&&0!==n.size()?n.constants.length?Object.fromEntries(c.map(function(e){return[e,n.constants[0].values[0]]})):Object.fromEntries(n.objects[0].properties.map(function(e){return[e.key.getSoleLiteral(),e.value.constants[0].values[0]]})):{};return{name:t.name,target:c,kind:f,value:s,validate:y,exclusive:null!=d&&d}}},o=function(e){return function(t){return function(r){return void 0!==r&&(1===r.size()&&1===r.constants.length&&"boolean"===r.constants[0].type&&1===r.constants[0].values.length?r.constants[0].values[0]:1===r.size()&&1===r.tuples.length&&r.tuples[0].type.elements.every(function(e){return 1===e.size()&&1===e.constants.length&&"string"===e.constants[0].type&&1===e.constants[0].values.length})?r.tuples[0].type.elements.map(function(e){return e.constants[0].values[0]}):(e(t)("must a boolean literal type or a tuple of string literal types."),null))}}};var s=["target","kind","value"],d=f(f([],c(s),!1),["validate","exclusive"],!1)},84981:function(e,t,r){"use strict";var n,a,o,i,u,c,f=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NumericRangeFactory=void 0;var s=f(r(55423)),d=r(73906);(n=i||(t.NumericRangeFactory=i={})).number=function(e){return function(t){return u[e](t)}},n.bigint=function(e){return function(t){return c[e](t)}},(a=u||(u={})).int32=function(e){return s.default.factory.createLogicalAnd(integer(e),between("-2147483648","2147483647")(e))},a.uint32=function(e){return s.default.factory.createLogicalAnd(integer(e),between("0","4294967295")(e))},a.int64=function(e){return s.default.factory.createLogicalAnd(integer(e),between("-9223372036854775808","9223372036854775807")(e))},a.uint64=function(e){return s.default.factory.createLogicalAnd(integer(e),between("0","18446744073709551615")(e))},a.float=function(e){return between("-1.175494351e38","3.4028235e38")(e)},a.double=function(){return s.default.factory.createTrue()},(o=c||(c={})).int64=function(){return s.default.factory.createTrue()},o.uint64=function(e){return s.default.factory.createLessThanEquals(s.default.factory.createCallExpression(s.default.factory.createIdentifier("BigInt"),void 0,[d.ExpressionFactory.number(0)]),e)};var integer=function(e){return s.default.factory.createStrictEquality(s.default.factory.createCallExpression(s.default.factory.createIdentifier("Math.floor"),void 0,[e]),e)},between=function(e,t){return function(r){return s.default.factory.createLogicalAnd(s.default.factory.createLessThanEquals(s.default.factory.createIdentifier(e),r),s.default.factory.createLessThanEquals(r,s.default.factory.createIdentifier(t)))}}},74123:function(e,t,r){"use strict";var n,a,o=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a cannot be used in both number and bigint types. Recommend to remove from number type'))};try{for(var _=o(["int64","uint64"]),b=_.next();!b.done;b=_.next()){var x=b.value;_loop_1(x)}}catch(e){a={error:e}}finally{try{b&&!b.done&&(i=_.return)&&i.call(_)}finally{if(a)throw a.error}}}return e.arrays.length&&e.arrays.some(function(e){return!!e.type.value.arrays.length})&&noSupport("over two dimenstional array type"),e.arrays.length&&e.arrays.some(function(e){return!1===e.type.value.isRequired()||!0===e.type.value.nullable})&&noSupport("optional type in array"),e.arrays.length&&e.arrays.some(function(e){return e.type.value.size()>1})&&noSupport("union type in array"),e.arrays.length&&e.arrays.some(function(e){return e.type.value.maps.length||e.type.value.objects.length&&e.type.value.objects.some(function(e){return!1===c.ProtobufUtil.isStaticObject(e)})})&&noSupport("dynamic object in array"),e.size()>1&&e.arrays.length&&noSupport("union type with array type"),e.objects.length&&e.objects.some(function(e){return 0===e.properties.length})&&noSupport("empty object type"),e.objects.length&&e.objects.some(function(e){return e.properties.filter(function(e){return!e.key.isSoleLiteral()}).length>1})&&noSupport("object type with multiple dynamic key typed properties. Keep only one."),e.objects.length&&e.objects.some(function(e){return e.properties.some(function(e){return e.key.isSoleLiteral()})&&e.properties.some(function(e){return!e.key.isSoleLiteral()})})&&noSupport("object type with mixed static and dynamic key typed properties. Keep statics or dynamic only."),e.objects.length&&e.objects.some(function(e){return e.properties.some(function(e){return!0===e.key.isSoleLiteral()&&!1===s.Escaper.variable(e.key.getSoleLiteral())})})&&noSupport("object type with invalid static key name."),e.objects.length&&isDynamicObject(e.objects[0])&&e.objects[0].properties.some(function(e){return!!e.value.arrays.length})&&noSupport("dynamic object with array value type"),e.size()>1&&e.objects.length&&isDynamicObject(e.objects[0])&&noSupport("union type with dynamic object type"),e.objects.length&&e.objects.some(function(e){return isDynamicObject(e)&&e.properties.some(function(e){return c.ProtobufUtil.isUnion(e.value)})})&&noSupport("union type in dynamic property"),e.maps.length&&e.maps.some(function(e){return c.ProtobufUtil.isUnion(e.key)})&&noSupport("union key typed map"),e.maps.length&&e.maps.some(function(e){return 1!==c.ProtobufUtil.getAtomics(e.key).length})&&noSupport("non-atomic key typed map"),e.maps.length&&e.maps.some(function(e){return!1===e.key.isRequired()||e.key.nullable})&&noSupport("optional key typed map"),e.maps.length&&e.maps.some(function(e){return!!e.value.arrays.length})&&noSupport("map type with array value type"),e.size()>1&&e.maps.length&&noSupport("union type with map type"),e.maps.length&&e.maps.some(function(e){return c.ProtobufUtil.isUnion(e.value)})&&noSupport("union type in map value type"),u};var isDynamicObject=function(e){return!1===e.properties[0].key.isSoleLiteral()},y=new Map(u(u([["Date","string"],["Boolean","boolean"],["BigInt","bigint"],["Number","number"],["String","string"]],i(["Buffer","Uint8ClampedArray","Uint16Array","Uint32Array","BigUint64Array","Int8Array","Int16Array","Int32Array","BigInt64Array","Float32Array","Float64Array","DataView","ArrayBuffer","SharedArrayBuffer"].map(function(e){return[e,"Uint8Array"]})),!1),[["WeakSet","Array"],["WeakMap","Map"]],!1))},6152:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.StatementFactory=void 0;var i=o(r(55423));(n=a||(t.StatementFactory=a={})).mut=function(e,t){return i.default.factory.createVariableStatement(void 0,i.default.factory.createVariableDeclarationList([i.default.factory.createVariableDeclaration(e,void 0,void 0,t)],i.default.NodeFlags.Let))},n.constant=function(e,t){return i.default.factory.createVariableStatement(void 0,i.default.factory.createVariableDeclarationList([i.default.factory.createVariableDeclaration(e,void 0,void 0,t)],i.default.NodeFlags.Const))},n.entry=function(e){return function(t){return i.default.factory.createVariableDeclarationList([i.default.factory.createVariableDeclaration(i.default.factory.createArrayBindingPattern([i.default.factory.createBindingElement(void 0,void 0,i.default.factory.createIdentifier(e),void 0),i.default.factory.createBindingElement(void 0,void 0,i.default.factory.createIdentifier(t),void 0)]),void 0,void 0,void 0)],i.default.NodeFlags.Const)}},n.transpile=function(e){return i.default.factory.createExpressionStatement(i.default.factory.createIdentifier(i.default.transpile(e)))},n.block=function(e){return i.default.factory.createBlock([i.default.factory.createExpressionStatement(e)],!0)}},95374:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TemplateFactory=void 0;var i=o(r(55423));(a||(t.TemplateFactory=a={})).generate=function(e){if(e.every(function(e){return i.default.isStringLiteral(e)}))return i.default.factory.createStringLiteral(e.map(function(e){return e.text}).join(""));var t={value:"",index:0};n(e)(t);for(var r=i.default.factory.createTemplateHead(t.value),a=[];;){var o=e[t.index++];n(e)(t);var u=t.index===e.length;if(a.push(i.default.factory.createTemplateSpan(o,u?i.default.factory.createTemplateTail(t.value):i.default.factory.createTemplateMiddle(t.value))),!0===u)break}return i.default.factory.createTemplateExpression(r,a)},n=function(e){return function(t){var r=e.findIndex(function(e,r){return r>=t.index&&!i.default.isStringLiteral(e)}),n=-1!==r?r:e.length;t.value=e.slice(t.index,n).map(function(e){return e.text}).reduce(function(e,t){return e+t},""),t.index=n}}},12301:function(e,t,r){"use strict";var n,a,o,i,u,c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TypeFactory=void 0;var f=c(r(55423));(n=u||(t.TypeFactory=u={})).isFunction=function(e){return null!==a(e)},a=function(e){var t,r,n=null===(r=null===(t=e.symbol)||void 0===t?void 0:t.declarations)||void 0===r?void 0:r[0];return void 0===n?null:f.default.isFunctionLike(n)?n:(f.default.isPropertyAssignment(n)||f.default.isPropertyDeclaration(n))&&f.default.isFunctionLike(n.initializer)?n.initializer:null},n.getReturnType=function(e){return function(t){return function(r){var n=t.getProperty(r);if(!n||!n.valueDeclaration)return null;var a=e.getTypeOfSymbolAtLocation(n,n.valueDeclaration),o=e.getSignaturesOfType(a,f.default.SignatureKind.Call)[0];return o?o.getReturnType():null}}},n.getFullName=function(e){return function(t,r){if(null!=r||(r=null!==(a=t.aliasSymbol)&&void 0!==a?a:t.getSymbol()),void 0===r)return e.typeToString(t);if(void 0===t.aliasSymbol&&t.isUnionOrIntersection()){var a,o=t.isIntersection()?" & ":" | ";return t.types.map(function(t){return n.getFullName(e)(t)}).join(o)}var u=i(r),c=t.aliasSymbol?t.aliasTypeArguments||[]:e.getTypeArguments(t);return c.length?"Promise"===u?n.getFullName(e)(c[0]):"".concat(u,"<").concat(c.map(function(t){return n.getFullName(e)(t)}).join(", "),">"):u}},o=function(e){return function(t){return f.default.isModuleBlock(e)?o(e.parent.parent)("".concat(e.parent.name.getFullText().trim(),".").concat(t)):t}},i=function(e){var t,r,n=null===(r=null===(t=e.getDeclarations())||void 0===t?void 0:t[0])||void 0===r?void 0:r.parent;return n?o(n)(e.escapedName.toString()):"__type"},n.keyword=function(e){return f.default.factory.createKeywordTypeNode("void"===e?f.default.SyntaxKind.VoidKeyword:"any"===e?f.default.SyntaxKind.AnyKeyword:"unknown"===e?f.default.SyntaxKind.UnknownKeyword:"boolean"===e?f.default.SyntaxKind.BooleanKeyword:"number"===e?f.default.SyntaxKind.NumberKeyword:"bigint"===e?f.default.SyntaxKind.BigIntKeyword:f.default.SyntaxKind.StringKeyword)}},84411:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ValueFactory=void 0;var i=o(r(55423));(n=a||(t.ValueFactory=a={})).NULL=function(){return i.default.factory.createNull()},n.UNDEFINED=function(){return i.default.factory.createIdentifier("undefined")},n.BOOLEAN=function(e){return e?i.default.factory.createTrue():i.default.factory.createFalse()},n.INPUT=function(e){return void 0===e&&(e="input"),i.default.factory.createIdentifier(e)},n.TYPEOF=function(e){return i.default.factory.createTypeOfExpression(e)}},19614:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataHelper=void 0;var n,a=r(3078),o=r(51665);(n||(t.MetadataHelper=n={})).literal_to_metadata=function(e){var t=a.Metadata.initialize();return t.constants.push(o.MetadataConstant.create({type:"string",values:[e]})),t}},30500:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.emend_metadata_atomics=void 0;var a=r(45041),o=r(73346);t.emend_metadata_atomics=function(e){var t,r,_loop_1=function(t){var r=e.constants.findIndex(function(e){return e.type===t.type});-1!==r&&e.constants.splice(r,1)};try{for(var i=n(e.atomics),u=i.next();!u.done;u=i.next()){var c=u.value;_loop_1(c)}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}var f=e.constants.findIndex(function(e){return"boolean"===e.type});if(-1!==f&&2===e.constants[f].values.length){var s=e.constants.splice(f,1)[0];o.ArrayUtil.take(e.atomics,function(e){return"boolean"===e.type},function(){var e;return a.MetadataAtomic.create({type:"boolean",tags:null!==(e=s.tags)&&void 0!==e?e:[]})}),s.tags=void 0}e.templates.length&&void 0!==e.atomics.find(function(e){return"string"===e.type})&&e.templates.splice(0,e.templates.length)}},33389:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.emplace_metadata_alias=void 0;var o=r(73346),i=r(71903);t.emplace_metadata_alias=function(e){return function(t){return function(r){return function(u){return function(c,f,s){var d=a(r.emplaceAlias(e,c,c.aliasSymbol),3),y=d[0],p=d[1],m=d[2];return o.ArrayUtil.add(y.nullables,f),!1===p||m((0,i.explore_metadata)(e)(t)(r)(u)(c,n(n({},s),{escaped:!1,aliased:!0}))),y}}}}}},33455:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.emplace_metadata_array_type=void 0;var o=r(73346),i=r(71903);t.emplace_metadata_array_type=function(e){return function(t){return function(r){return function(u){return function(c,f,s){var d=a(r.emplaceArray(e,c),3),y=d[0],p=d[1],m=d[2];return o.ArrayUtil.add(y.nullables,f),!1===p||m((0,i.explore_metadata)(e)(t)(r)(u)(c.getNumberIndexType(),n(n({},s),{escaped:!1,aliased:!1}))),y}}}}}},18083:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.emplace_metadata_object=void 0;var i=o(r(55423)),u=r(56724),c=r(61261),f=r(73346),s=r(37297),d=r(19614),y=r(71903);r(78167),t.emplace_metadata_object=function(e){return function(t){return function(r){return function(o){return function(p,m){var v,g,_,b,x,S,T=n(r.emplace(e,p),2),E=T[0],w=T[1];if(f.ArrayUtil.add(E.nullables,m,function(e){return e===m}),!1===w)return E;var P=p.isClass()?function(e){var t,r,n=null===(r=null===(t=e.getChildren()[0])||void 0===t?void 0:t.getChildren()[0])||void 0===r?void 0:r.kind;return n!==i.default.SyntaxKind.PrivateKeyword&&n!==i.default.SyntaxKind.ProtectedKeyword&&(i.default.isParameter(e)||isProperty(e))}:function(e){return isProperty(e)},insert=function(e){return function(t){return function(r,n){var a,o,i=r&&null!==(a=s.CommentFactory.description(r))&&void 0!==a?a:null,c=(null!==(o=null==r?void 0:r.getJsDocTags())&&void 0!==o?o:[]).filter(null!=n?n:function(){return!0}),f=u.MetadataProperty.create({key:e,value:t,description:i,jsDocTags:c});return E.properties.push(f),f}}};try{for(var j=a(p.getApparentProperties()),I=j.next();!I.done;I=j.next()){var A=I.value;!function(a){if(void 0===(null!==(x=a.getJsDocTags(e))&&void 0!==x?x:[]).find(function(e){return"internal"===e.name})){var u,f,s,m=n((s=(f=null===(u=a.getDeclarations())||void 0===u?void 0:u[0])?e.getTypeOfSymbolAtLocation(a,f):e.getTypeOfPropertyOfType(p,a.name),[f,s]),2),v=m[0],g=m[1];if((!v||!1!==P(v))&&void 0!==g){var _=d.MetadataHelper.literal_to_metadata(a.name),b=(0,y.explore_metadata)(e)(t)(r)(o)(g,{top:!1,object:E,property:a.name,nested:null,escaped:!1,aliased:!1});(0,c.Writable)(b).optional=(a.flags&i.default.SymbolFlags.Optional)!=0,insert(_)(b)(a)}}}(A)}}catch(e){v={error:e}}finally{try{I&&!I.done&&(g=j.return)&&g.call(j)}finally{if(v)throw v.error}}try{for(var F=a(e.getIndexInfosOfType(p)),M=F.next();!M.done;M=F.next()){var O=M.value,analyzer=function(n){return function(a){return(0,y.explore_metadata)(e)(t)(r)(o)(n,{top:!1,object:E,property:a,nested:null,escaped:!1,aliased:!1})}},C=analyzer(O.keyType)(null),N=analyzer(O.type)({});C.atomics.length+C.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0)+C.templates.length+C.natives.filter(function(e){return"Boolean"===e||"BigInt"===e||"Number"===e||"String"===e}).length!==C.size()&&o.push({name:C.getName(),explore:{top:!1,object:E,property:"[key]",nested:null,escaped:!1,aliased:!1},messages:[]}),insert(C)(N)((null===(S=O.declaration)||void 0===S?void 0:S.parent)?e.getSymbolAtLocation(O.declaration.parent):void 0,function(e){return"default"!==e.name})}}catch(e){_={error:e}}finally{try{M&&!M.done&&(b=F.return)&&b.call(F)}finally{if(_)throw _.error}}return E}}}}};var isProperty=function(e){return i.default.isPropertyDeclaration(e)||i.default.isPropertyAssignment(e)||i.default.isPropertySignature(e)||i.default.isTypeLiteralNode(e)}},70373:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.emplace_metadata_tuple=void 0;var i=o(r(55423)),u=r(3078),c=r(61261),f=r(73346),s=r(71903);t.emplace_metadata_tuple=function(e){return function(t){return function(r){return function(o){return function(d,y,p){var m,v,g,_=a(r.emplaceTuple(e,d),3),b=_[0],x=_[1],S=_[2];if(f.ArrayUtil.add(b.nullables,y),!1===x)return b;var T=null!==(g=null!==(m=d.elementFlags)&&void 0!==m?m:null===(v=d.target)||void 0===v?void 0:v.elementFlags)&&void 0!==g?g:[];return S(e.getTypeArguments(d).map(function(a,f){var d=(0,s.explore_metadata)(e)(t)(r)(o)(a,n(n({},p),{nested:b,aliased:!1,escaped:!1})),y=T[f];if(y===i.default.ElementFlags.Optional&&((0,c.Writable)(d).optional=!0),y!==i.default.ElementFlags.Rest)return d;var m=u.Metadata.initialize();return(0,c.Writable)(m).rest=d,m})),b}}}}}},71903:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.explore_metadata=void 0;var n=r(3078),a=r(30500),o=r(24149);t.explore_metadata=function(e){return function(t){return function(r){return function(i){return function(u,c){var f=n.Metadata.initialize(c.escaped);return null===u||((0,o.iterate_metadata)(e)(t)(r)(i)(f,u,c),(0,a.emend_metadata_atomics)(f),f.escaped&&((0,a.emend_metadata_atomics)(f.escaped.original),(0,a.emend_metadata_atomics)(f.escaped.returns))),f}}}}}},24149:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_collection=void 0;var a=r(18521);t.iterate_metadata_collection=function(e){return function(t){try{for(var r,o,i,u,c,f,s=n(t.arrays()),d=s.next();!d.done;d=s.next()){var y=d.value;null===y.recursive&&t.setArrayRecursive(y,isArrayRecursive(new Set)(y)(y.value))}}catch(e){r={error:e}}finally{try{d&&!d.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}try{for(var p=n(t.tuples()),m=p.next();!m.done;m=p.next()){var v=m.value;if(null===v.recursive){var g=new Set;t.setTupleRecursive(v,v.elements.some(isTupleRecursive(g)(v)))}}}catch(e){i={error:e}}finally{try{m&&!m.done&&(u=p.return)&&u.call(p)}finally{if(i)throw i.error}}var _loop_1=function(r){if((0,a.iterate_metadata_comment_tags)(e)(r),null===r.recursive){var n=new Set;t.setObjectRecursive(r,r.properties.some(function(e){return isObjectRecursive(n)(r)(e.value)}))}};try{for(var _=n(t.objects()),b=_.next();!b.done;b=_.next()){var x=b.value;_loop_1(x)}}catch(e){c={error:e}}finally{try{b&&!b.done&&(f=_.return)&&f.call(_)}finally{if(c)throw c.error}}}};var isArrayRecursive=function(e){return function(t){return function(r){return!e.has(r)&&(e.add(r),r.arrays.some(function(r){return r.type===t||isArrayRecursive(e)(t)(r.type.value)})||r.aliases.some(function(r){return isArrayRecursive(e)(t)(r.value)})||r.tuples.some(function(r){return!r.type.recursive&&r.type.elements.some(function(r){return isArrayRecursive(e)(t)(r)})})||r.maps.some(function(r){return isArrayRecursive(e)(t)(r.value)})||r.sets.some(function(r){return isArrayRecursive(e)(t)(r)})||null!==r.escaped&&isArrayRecursive(e)(t)(r.escaped.returns)||null!==r.rest&&isArrayRecursive(e)(t)(r.rest))}}},isTupleRecursive=function(e){return function(t){return function(r){return!e.has(r)&&(e.add(r),r.tuples.some(function(r){return r.type===t||r.type.elements.some(function(r){return isTupleRecursive(e)(t)(r)})})||r.arrays.some(function(r){return!r.type.recursive&&isTupleRecursive(e)(t)(r.type.value)})||r.maps.some(function(r){return isTupleRecursive(e)(t)(r.value)})||r.sets.some(function(r){return isTupleRecursive(e)(t)(r)})||r.aliases.some(function(r){return isTupleRecursive(e)(t)(r.value)})||null!==r.escaped&&isTupleRecursive(e)(t)(r.escaped.returns)||null!==r.rest&&isTupleRecursive(e)(t)(r.rest))}}},isObjectRecursive=function(e){return function(t){return function(r){return!e.has(r)&&(e.add(r),r.objects.some(function(r){return t===r||r.properties.some(function(r){return isObjectRecursive(e)(t)(r.value)})})||r.aliases.some(function(r){return isObjectRecursive(e)(t)(r.value)})||r.arrays.some(function(r){return!r.type.recursive&&isObjectRecursive(e)(t)(r.type.value)})||r.tuples.some(function(r){return!r.type.recursive&&r.type.elements.some(function(r){return isObjectRecursive(e)(t)(r)})})||r.maps.some(function(r){return isObjectRecursive(e)(t)(r.value)})||r.sets.some(function(r){return isObjectRecursive(e)(t)(r)})||null!==r.escaped&&isObjectRecursive(e)(t)(r.escaped.returns)||null!==r.rest&&isObjectRecursive(e)(t)(r.rest))}}}},18521:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_comment_tags=void 0;var a=r(7825);t.iterate_metadata_comment_tags=function(e){return function(t){var r,o;if(!0!==t.tagged_){t.tagged_=!0;try{for(var i=n(t.properties),u=i.next();!u.done;u=i.next()){var c=u.value;a.MetadataCommentTagFactory.analyze(e)(c.value)(c.jsDocTags,{top:!1,object:t,property:c.key.isSoleLiteral()?c.key.getSoleLiteral():{},nested:null,escaped:!1,aliased:!1})}}catch(e){r={error:e}}finally{try{u&&!u.done&&(o=i.return)&&o.call(i)}finally{if(r)throw r.error}}}}}},95032:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_constant=void 0;var a=n(r(55423)),o=r(51665),i=r(73346);t.iterate_metadata_constant=function(e){return function(t){return function(r,n){if(!t.constant)return!1;if(n.isLiteral()){var u,c="object"==typeof n.value?BigInt("".concat(n.value.negative?"-":"").concat(n.value.base10Value)):n.value,f=i.ArrayUtil.take(r.constants,function(e){return e.type===typeof c},function(){return o.MetadataConstant.create({type:typeof c,values:[]})});return i.ArrayUtil.add(f.values,c,function(e,t){return e===t}),!0}if(u=a.default.TypeFlags.BooleanLiteral,(n.getFlags()&u)!=0){var s="true"===e.typeToString(n),f=i.ArrayUtil.take(r.constants,function(e){return"boolean"===e.type},function(){return o.MetadataConstant.create({type:"boolean",values:[]})});return i.ArrayUtil.add(f.values,s,function(e,t){return e===t}),!0}return!1}}}},84991:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_intersection=void 0;var c=u(r(55423)),f=r(45041),s=r(51665),d=r(73346),y=r(92595),p=r(76331),m=r(71903),v=r(24149),g=r(22481);t.iterate_metadata_intersection=function(e){return function(t){return function(r){return function(u){return function(_,b,x){if(!b.isIntersection()||b.types.every(function(t){return(t.getFlags()&c.default.TypeFlags.Object)!=0&&!e.isArrayType(t)&&!e.isTupleType(t)}))return!1;var S,T,E,w,P,j,I,A,F,M,O=new y.MetadataCollection,C=[],N=o([],a(new Map(b.types.map(function(r){var a=(0,m.explore_metadata)(e)(n(n({},t),{absorb:!0}))(O)(C)(r,n(n({},x),{aliased:!1}));return[a.getName(),a]})).values()),!1);if(C.length)return u.push.apply(u,o([],a(C),!1)),!0;if(1===N.length)return(0,v.iterate_metadata)(e)(t)(r)(u)(_,b.types[0],x),!0;if(N.every(function(e){return e.objects.length===e.size()}))return!1;var R=void 0===(E=null===(T=null===(S=N.find(function(e){return 1===e.size()&&1===e.constants.length&&"boolean"===e.constants[0].type}))||void 0===S?void 0:S.constants[0])||void 0===T?void 0:T.values[0])?null:N.every(function(e){return 0===e.atomics.length||e.atomics.every(function(e){return"boolean"!==e.type})})?E:null;if(null!==R&&!0===_.boolean_literal_intersected_)return _.constants.find(function(e){return"boolean"===e.type}).values.push(R),!0;var L=N.map(function(e,t){return[e,t]}).filter(function(e){var t=a(e,1)[0];return 1===t.size()&&(1===t.atomics.length||1===t.constants.length&&"boolean"===t.constants[0].type||1===t.arrays.length)}),U=N.filter(function(e){return e.size()===e.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0)+e.templates.length&&!(1===e.size()&&"boolean"===e.constants[0].type)}),q=N.filter(function(e){return!1===e.nullable&&!0===e.isRequired()&&e.objects.length&&e.objects.length===e.size()&&e.objects.every(function(e){return e.properties.every(function(e){return e.value.optional})})}),z=new Set(L.map(function(e){var t=a(e,1)[0];return o(o([],a(t.atomics.map(function(e){return e.type})),!1),a(t.constants.filter(function(e){return"boolean"===e.type}).map(function(e){return e.type})),!1)}).flat()),B=new Set(L.map(function(e){return a(e,1)[0].arrays.map(function(e){return e.type.name})}).flat());if(z.size+B.size>1||L.length+q.length+U.length!==N.length)return u.push({name:N.map(function(e){return e.getName()}).join(" & "),explore:n({},x),messages:["nonsensible intersection"]}),!0;if(0===z.size&&0===B.size&&U.length){try{for(var H=i(U),V=H.next();!V.done;V=H.next()){var J=V.value;try{for(var G=(j=void 0,i(J.templates)),Q=G.next();!Q.done;Q=G.next()){var W=Q.value;d.ArrayUtil.add(_.templates,W,function(e,t){return e.map(function(e){return e.getName()}).join(" | ")===t.map(function(e){return e.getName()}).join(" | ")})}}catch(e){j={error:e}}finally{try{Q&&!Q.done&&(I=G.return)&&I.call(G)}finally{if(j)throw j.error}}var _loop_1=function(e){var t,r,n=_.constants.find(function(t){return t.type===e.type});if(n)try{for(var a=(t=void 0,i(e.values)),o=a.next();!o.done;o=a.next()){var u=o.value;d.ArrayUtil.add(n.values,u,function(e,t){return e===t})}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else _.constants.push(s.MetadataConstant.create(e))};try{for(var K=(A=void 0,i(J.constants)),Y=K.next();!Y.done;Y=K.next()){var Z=Y.value;_loop_1(Z)}}catch(e){A={error:e}}finally{try{Y&&!Y.done&&(F=K.return)&&F.call(K)}finally{if(A)throw A.error}}}}catch(e){w={error:e}}finally{try{V&&!V.done&&(P=H.return)&&P.call(H)}finally{if(w)throw w.error}}return!0}var X=R?"boolean":z.size?z.values().next().value:"array";if("boolean"===X||"bigint"===X||"number"===X||"string"===X)null===R?d.ArrayUtil.add(_.atomics,f.MetadataAtomic.create({type:z.values().next().value,tags:[]}),function(e,t){return e.type===t.type}):d.ArrayUtil.take(_.constants,function(e){return"boolean"===e.type},function(){return s.MetadataConstant.create({type:"boolean",values:[R]})});else if("array"===X){var ee=B.values().next().value;_.arrays.some(function(e){return e.type.name===ee})||(0,g.iterate_metadata_array)(e)(t)(r)(u)(_,b.types[L.find(function(e){return 1===e[0].arrays.length})[1]],n(n({},x),{aliased:!1,escaped:!1}))}if(q.length){var et=p.MetadataTypeTagFactory.analyze(u)(X)(q.map(function(e){return e.objects}).flat(),x);if(et.length){if("array"===X)_.arrays.at(-1).tags.push(et);else if(null===R)_.atomics.find(function(e){return e.type===X}).tags.push(et);else{var er=_.constants.find(function(e){return"boolean"===e.type});null!==(M=er.tags)&&void 0!==M||(er.tags=[]),er.tags.push(et)}}}return null!==R&&(_.boolean_literal_intersected_=!0),!0}}}}}},57540:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")}),!0}}}}}},54053:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_sort=void 0;var a=r(3078),o=r(58962);t.iterate_metadata_sort=function(e){return function(t){var r,a,o,i,u,c,f,s,d,y,p=new Set;try{for(var m=n(e.arrays()),v=m.next();!v.done;v=m.next()){var g=v.value;iterate(p)(e)(g.value)}}catch(e){r={error:e}}finally{try{v&&!v.done&&(a=m.return)&&a.call(m)}finally{if(r)throw r.error}}try{for(var _=n(e.tuples()),b=_.next();!b.done;b=_.next()){var x=b.value;try{for(var S=(u=void 0,n(x.elements)),T=S.next();!T.done;T=S.next()){var E=T.value;iterate(p)(e)(E)}}catch(e){u={error:e}}finally{try{T&&!T.done&&(c=S.return)&&c.call(S)}finally{if(u)throw u.error}}}}catch(e){o={error:e}}finally{try{b&&!b.done&&(i=_.return)&&i.call(_)}finally{if(o)throw o.error}}try{for(var w=n(e.objects()),P=w.next();!P.done;P=w.next()){var j=P.value;try{for(var I=(d=void 0,n(j.properties)),A=I.next();!A.done;A=I.next()){var F=A.value;iterate(p)(e)(F.value)}}catch(e){d={error:e}}finally{try{A&&!A.done&&(y=I.return)&&y.call(I)}finally{if(d)throw d.error}}}}catch(e){f={error:e}}finally{try{P&&!P.done&&(s=w.return)&&s.call(w)}finally{if(f)throw f.error}}iterate(p)(e)(t)}};var iterate=function(e){return function(t){return function(r){var i,u,c,f;if(!e.has(r)){e.add(r);try{for(var s=n(r.maps),d=s.next();!d.done;d=s.next()){var y=d.value;iterate(e)(t)(y.value)}}catch(e){i={error:e}}finally{try{d&&!d.done&&(u=s.return)&&u.call(s)}finally{if(i)throw i.error}}try{for(var p=n(r.sets),m=p.next();!m.done;m=p.next()){var v=m.value;iterate(e)(t)(v)}}catch(e){c={error:e}}finally{try{m&&!m.done&&(f=p.return)&&f.call(p)}finally{if(c)throw c.error}}null!==r.escaped&&iterate(e)(t)(r.escaped.returns),null!==r.rest&&iterate(e)(t)(r.rest),r.objects.length>1&&(r.objects.sort(function(e,t){return o.MetadataObject.covers(e,t)?-1:o.MetadataObject.covers(t,e)?1:0}),r.union_index=t.getUnionIndex(r)),r.arrays.length>1&&r.arrays.sort(function(e,t){return a.Metadata.covers(e.type.value,t.type.value)?-1:a.Metadata.covers(t.type.value,e.type.value)?1:0}),r.tuples.length>1&&r.tuples.sort(function(e,t){var r=a.Metadata.initialize(),n=a.Metadata.initialize();return r.tuples.push(e),n.tuples.push(t),a.Metadata.covers(r,n)?-1:a.Metadata.covers(n,r)?1:0})}}}}},92861:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},f=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},x=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},S=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")}).join(" | "));ea(a.sets.some(function(e){return e.any})?null:f(e)(t)(r)(n,a.sets,_(_({},i),{from:"array"})))}if(a.maps.length){var ea=prepare((0,H.check_native)("Map")(n),a.maps.map(function(e){var t=e.key,r=e.value;return"Map<".concat(t,", ").concat(r,">")}).join(" | "));ea(a.maps.some(function(e){return e.key.any&&e.value.any})?null:s(e)(t)(r)(n,a.maps,_(_({},i),{from:"array"})))}if(a.tuples.length+a.arrays.length>0){var ea=prepare(t.atomist(i)({expected:S(S([],x(a.tuples.map(function(e){return e.type.name})),!1),x(a.arrays.map(function(e){return e.getName()})),!1).join(" | "),expression:w.ExpressionFactory.isArray(n),conditions:[]})(n),S(S([],x(a.tuples),!1),x(a.arrays),!1).map(function(e){return e.type.name}).join(" | "));ea(0===a.arrays.length?1===a.tuples.length?u(e)(t)(r)(n,a.tuples[0],_(_({},i),{from:"array"})):d(e)(t)(r)(n,a.tuples,_(_({},i),{from:"array"})):a.arrays.some(function(e){return e.type.value.any})?null:0===a.tuples.length?1===a.arrays.length?o(e)(t)(r)(n,a.arrays[0],_(_({},i),{from:"array"})):y(e)(t)(r)(n,a.arrays,_(_({},i),{from:"array"})):p(e)(t)(r)(n,S(S([],x(a.tuples),!1),x(a.arrays),!1),i))}if(a.objects.length>0&&prepare(w.ExpressionFactory.isObject({checkNull:!0,checkArray:a.objects.some(function(e){return e.properties.every(function(e){return!e.key.isSoleLiteral()||!e.value.isRequired()})})})(n),a.objects.map(function(e){return e.name}).join(" | "))(v(t)(r)(n,a,_(_({},i),{from:"object"}))),en.length){var transformer=function(e){return function(t){return t.body?{expression:e(t.pre,t.body),combined:!0}:{expression:t.pre,combined:!1}}};1===en.length?O.push(transformer(function(e,r){return t.combiner(i)("and")(n,[e,r].map(function(t){return{expression:t,combined:t!==e}}),a.getName())})(en[0])):O.push({expression:t.combiner(i)("or")(n,en.map(transformer(E.default.factory.createLogicalAnd)),a.getName()),combined:!0})}return F.length&&O.length?t.combiner(i)("and")(n,S(S([],x(F),!1),[{expression:t.combiner(i)("or")(n,O,a.getName()),combined:!0}],!1),a.getName()):O.length?t.combiner(i)("or")(n,O,a.getName()):t.success}}}},n.decode_object=function(e){return function(t){var r=R.FeatureProgrammer.decode_object(e)(t);return function(e,t,n){return t.validated=!0,r(e,t,n)}}},o=function(e){return function(t){return function(r){return function(n,a,o){return!1===a.type.recursive?i(e)(t)(r)(n,a,o):(o=_(_({},o),{source:"function",from:"array"}),E.default.factory.createLogicalOr(E.default.factory.createCallExpression(E.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"a").concat(a.type.index))),void 0,R.FeatureProgrammer.argumentsArray(t)(_(_({},o),{source:"function",from:"array"}))(n)),t.joiner.failure(n,a.type.name,o)))}}}},i=function(e){return function(t){return function(r){return function(a,o,i){var u=(0,z.check_array_length)(e)(o)(a),c=R.FeatureProgrammer.decode_array({prefix:t.prefix,trace:t.trace,path:t.path,decoder:function(){return n.decode(e)(t)(r)}})(r)(t.joiner.array)(a,o,i);return null===u.expression&&0===u.conditions.length?c:E.default.factory.createLogicalAnd(t.atomist(i)(u)(a),c)}}}},u=function(e){return function(t){return function(r){return function(n,a,o){return!1===a.type.recursive?c(e)(t)(r)(n,a.type,o):(o=_(_({},o),{source:"function",from:"array"}),E.default.factory.createLogicalOr(E.default.factory.createCallExpression(E.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,R.FeatureProgrammer.argumentsArray(t)(_(_({},o),{source:"function"}))(n)),t.joiner.failure(n,a.type.name,o)))}}}},c=function(e){return function(t){return function(r){return function(a,o,i){var u=o.elements.filter(function(e){return null===e.rest}).map(function(o,u){return n.decode(e)(t)(r)(E.default.factory.createElementAccessExpression(a,u),o,_(_({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(u,']"'):'"['.concat(u,']"')}))}),c=o.elements.length&&null!==o.elements.at(-1).rest?n.decode(e)(t)(r)(E.default.factory.createCallExpression(P.IdentifierFactory.access(a)("slice"),void 0,[w.ExpressionFactory.number(o.elements.length-1)]),(0,W.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),_(_({},i),{start:o.elements.length-1})):null,f=E.default.factory.createPropertyAccessExpression(a,"length");return t.combiner(i)("and")(a,S(S(S([],x(null===c?o.elements.every(function(e){return!1===e.optional})?[{combined:!1,expression:E.default.factory.createStrictEquality(f,w.ExpressionFactory.number(o.elements.length))}]:[{combined:!1,expression:E.default.factory.createLogicalAnd(E.default.factory.createLessThanEquals(w.ExpressionFactory.number(o.elements.filter(function(e){return!1===e.optional}).length),f),E.default.factory.createGreaterThanEquals(w.ExpressionFactory.number(o.elements.length),f))}]:[]),!1),x(t.joiner.tuple?[{expression:t.joiner.tuple(u),combined:!0}]:u.map(function(e){return{expression:e,combined:!0}})),!1),x(null!==c?[{expression:c,combined:!0}]:[]),!1),"[".concat(o.elements.map(function(e){return e.getName()}).join(", "),"]"))}}}},f=function(e){return function(t){return function(r){return function(a,i,u){return E.default.factory.createCallExpression(q.UnionExplorer.set({checker:n.decode(e)(t)(r),decoder:o(e)(t)(r),empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}})([])(a,i,u),void 0,void 0)}}}},s=function(e){return function(t){return function(r){return function(a,i,u){return E.default.factory.createCallExpression(q.UnionExplorer.map({checker:function(a,o,i){var u=n.decode(e)(t)(r);return E.default.factory.createLogicalAnd(u(E.default.factory.createElementAccessExpression(a,0),o[0],_(_({},i),{postfix:"".concat(i.postfix,"[0]")})),u(E.default.factory.createElementAccessExpression(a,1),o[1],_(_({},i),{postfix:"".concat(i.postfix,"[1]")})))},decoder:o(e)(t)(r),empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}})([])(a,i,u),void 0,void 0)}}}},d=function(e){return function(t){return function(r){return function(n,a,o){return m(t)(r)(q.UnionExplorer.tuple({checker:u(e)(t)(r),decoder:u(e)(t)(r),empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}}))(n,a,o)}}}},y=function(e){return function(t){return function(r){return function(a,i,u){return m(t)(r)(q.UnionExplorer.array({checker:n.decode(e)(t)(r),decoder:o(e)(t)(r),empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}}))(a,i,u)}}}},p=function(e){return function(t){return function(r){return function(a,i,c){return m(t)(r)(q.UnionExplorer.array_or_tuple({checker:function(a,o,c,f){return o instanceof C.MetadataTuple?u(e)(t)(r)(a,o,c):t.atomist(c)({expected:i.map(function(e){return e instanceof O.MetadataArray?e.getName():e.type.name}).join(" | "),expression:n.decode(e)(t)(r)(a,o,c),conditions:[]})(f)},decoder:function(n,a,i){return a instanceof C.MetadataTuple?u(e)(t)(r)(n,a,i):o(e)(t)(r)(n,a,i)},empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}}))(a,i,c)}}}},m=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&E.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=_(_({},o),{source:"function",from:"array"}),E.default.factory.createLogicalOr(E.default.factory.createCallExpression(E.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(R.FeatureProgrammer.parameterDeclarations(e)(F.TypeFactory.keyword("any"))(E.default.factory.createIdentifier("input")))(_(_({},o),{postfix:""}))(E.default.factory.createIdentifier("input"))})),void 0,R.FeatureProgrammer.argumentsArray(e)(o)(n)),e.joiner.failure(n,a.map(function(e){return e.type.name}).join(" | "),o))}}}},v=function(e){return function(t){return function(r,a,o){return 1===a.objects.length?n.decode_object(e)(t)(r,a.objects[0],o):E.default.factory.createCallExpression(E.default.factory.createIdentifier(t.useLocal("".concat(e.prefix,"u").concat(a.union_index))),void 0,R.FeatureProgrammer.argumentsArray(e)(o)(r))}}};var create_add=function(e){return function(t){return function(r,n,a){void 0===a&&(a=t);var o=r?E.default.factory.createStrictEquality:E.default.factory.createStrictInequality;e.push({expression:o(n,a),combined:!1})}}}},12114:function(e,t,r){"use strict";var n,a,o,i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},I=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},F=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RandomProgrammer=void 0;var M=F(r(55423)),O=r(73906),C=r(61387),N=r(92595),R=r(43390),L=r(6152),U=r(95374),q=r(12301),z=r(3078),B=r(23879),H=r(63860),V=r(45041),J=r(35191),G=r(84530),Q=r(63664),W=r(5724),K=r(31959),Y=r(2112),Z=r(63114),X=r(59573);(w||(t.RandomProgrammer=w={})).write=function(e){return function(t){return function(r){var u=new K.FunctionImporter(t.getText());return function(c,f){var s=new N.MetadataCollection,d=R.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0,validate:function(e){var t=[];return e.natives.some(function(e){return"WeakSet"===e})?t.push("WeakSet is not supported."):e.natives.some(function(e){return"WeakMap"===e})&&t.push("WeakMap is not supported."),t}})(s)(c);if(!1===d.success)throw Q.TransformerError.from("typia.".concat(u.method))(d.errors);var y={objects:n(u)(s),arrays:a(u)(s),tuples:o(u)(s)},p=i(u)({function:!1,recursive:!1})(d.data);return M.default.factory.createArrowFunction(void 0,void 0,[C.IdentifierFactory.parameter("generator",M.default.factory.createTypeReferenceNode("Partial"),null!=r?r:M.default.factory.createToken(M.default.SyntaxKind.QuestionToken))],M.default.factory.createTypeReferenceNode("typia.Resolved<".concat(null!=f?f:q.TypeFactory.getFullName(e.checker)(c),">")),void 0,M.default.factory.createBlock(I(I(I(I(I([],j(u.declare(t)),!1),j(y.objects),!1),j(y.arrays),!1),j(y.tuples),!1),[M.default.factory.createReturnStatement(p)],!1),!0))}}}},n=function(e){return function(t){return t.objects().map(function(t,r){return L.StatementFactory.constant(ee.object(r),M.default.factory.createArrowFunction(void 0,void 0,[C.IdentifierFactory.parameter("_recursive",q.TypeFactory.keyword("boolean"),M.default.factory.createIdentifier(String(t.recursive))),C.IdentifierFactory.parameter("_depth",q.TypeFactory.keyword("number"),O.ExpressionFactory.number(0))],q.TypeFactory.keyword("any"),void 0,Y.RandomJoiner.object(COALESCE(e))(i(e)({recursive:t.recursive,function:!0}))(t)))})}},a=function(e){return function(t){return t.arrays().filter(function(e){return e.recursive}).map(function(t,r){return L.StatementFactory.constant(ee.array(r),M.default.factory.createArrowFunction(void 0,void 0,[C.IdentifierFactory.parameter("length",q.TypeFactory.keyword("number")),C.IdentifierFactory.parameter("_recursive",q.TypeFactory.keyword("boolean"),M.default.factory.createTrue()),C.IdentifierFactory.parameter("_depth",q.TypeFactory.keyword("number"),O.ExpressionFactory.number(0))],q.TypeFactory.keyword("any"),void 0,Y.RandomJoiner.array(COALESCE(e))(i(e)({recursive:!0,function:!0}))({recursive:!0,function:!0})(M.default.factory.createIdentifier("length"))(t.value)))})}},o=function(e){return function(t){return t.tuples().filter(function(e){return e.recursive}).map(function(t,r){return L.StatementFactory.constant(ee.tuple(r),M.default.factory.createArrowFunction(void 0,void 0,[C.IdentifierFactory.parameter("_recursive",q.TypeFactory.keyword("boolean"),M.default.factory.createTrue()),C.IdentifierFactory.parameter("_depth",q.TypeFactory.keyword("number"),O.ExpressionFactory.number(0))],q.TypeFactory.keyword("any"),void 0,Y.RandomJoiner.tuple(i(e)({function:!0,recursive:!0}))(t.elements)))})}},i=function(e){return function(t){return function(r){var n,a,o,x,S,T,E,w,P,F,O,C,N,R,L,U,q,z,B,H,V=[];r.any&&V.push(M.default.factory.createStringLiteral("any type used...")),(!1===r.isRequired()||!0===r.functional)&&V.push(M.default.factory.createIdentifier("undefined")),!0===r.nullable&&V.push(M.default.factory.createNull());try{for(var J=A(r.constants),G=J.next();!G.done;G=J.next()){var Q=G.value;try{for(var W=(o=void 0,A(Q.values)),K=W.next();!K.done;K=W.next()){var Y=K.value;V.push(c(Y))}}catch(e){o={error:e}}finally{try{K&&!K.done&&(x=W.return)&&x.call(W)}finally{if(o)throw o.error}}}}catch(e){n={error:e}}finally{try{G&&!G.done&&(a=J.return)&&a.call(J)}finally{if(n)throw n.error}}try{for(var Z=A(r.templates),X=Z.next();!X.done;X=Z.next()){var ee=X.value;V.push(f(e)(t)(ee))}}catch(e){S={error:e}}finally{try{X&&!X.done&&(T=Z.return)&&T.call(Z)}finally{if(S)throw S.error}}try{for(var et=A(r.atomics),er=et.next();!er.done;er=et.next()){var en=er.value;"boolean"===en.type?V.push(u(e)):"number"===en.type?V.push.apply(V,I([],j(s(e)(en)),!1)):"string"===en.type?V.push.apply(V,I([],j(y(e)(en)),!1)):"bigint"===en.type&&V.push.apply(V,I([],j(d(e)(en)),!1))}}catch(e){E={error:e}}finally{try{er&&!er.done&&(w=et.return)&&w.call(et)}finally{if(E)throw E.error}}r.escaped&&V.push(i(e)(t)(r.escaped.returns));try{for(var ea=A(r.arrays),eo=ea.next();!eo.done;eo=ea.next()){var ei=eo.value;V.push.apply(V,I([],j(p(e)(t)(ei)),!1))}}catch(e){P={error:e}}finally{try{eo&&!eo.done&&(F=ea.return)&&F.call(ea)}finally{if(P)throw P.error}}try{for(var eu=A(r.tuples),ec=eu.next();!ec.done;ec=eu.next()){var el=ec.value;V.push(m(e)(t)(el))}}catch(e){O={error:e}}finally{try{ec&&!ec.done&&(C=eu.return)&&C.call(eu)}finally{if(O)throw O.error}}try{for(var ef=A(r.objects),es=ef.next();!es.done;es=ef.next()){var ed=es.value;V.push(v(e)(t)(ed))}}catch(e){N={error:e}}finally{try{es&&!es.done&&(R=ef.return)&&R.call(ef)}finally{if(N)throw N.error}}try{for(var ey=A(r.natives),ep=ey.next();!ep.done;ep=ey.next()){var em=ep.value;V.push(b(e)(em))}}catch(e){L={error:e}}finally{try{ep&&!ep.done&&(U=ey.return)&&U.call(ey)}finally{if(L)throw L.error}}try{for(var ev=A(r.sets),eh=ev.next();!eh.done;eh=ev.next()){var eg=eh.value;V.push(g(e)(t)(eg))}}catch(e){q={error:e}}finally{try{eh&&!eh.done&&(z=ev.return)&&z.call(ev)}finally{if(q)throw q.error}}try{for(var e_=A(r.maps),eb=e_.next();!eb.done;eb=e_.next()){var ex=eb.value;V.push(_(e)(t)(ex))}}catch(e){B={error:e}}finally{try{eb&&!eb.done&&(H=e_.return)&&H.call(e_)}finally{if(B)throw B.error}}return 1===V.length?V[0]:M.default.factory.createCallExpression(M.default.factory.createCallExpression(e.use("pick"),void 0,[M.default.factory.createArrayLiteralExpression(V.map(function(e){return M.default.factory.createArrowFunction(void 0,void 0,[],void 0,void 0,e)}),!0)]),void 0,void 0)}}},u=function(e){return M.default.factory.createCallExpression(COALESCE(e)("boolean"),void 0,void 0)},c=function(e){return"boolean"==typeof e?M.default.factory.createIdentifier(e.toString()):"number"==typeof e?O.ExpressionFactory.number(e):"string"==typeof e?M.default.factory.createStringLiteral(e):O.ExpressionFactory.bigint(Number(e))},f=function(e){return function(t){return function(r){return U.TemplateFactory.generate(r.map(function(r){return i(e)(t)(r)}))}}},s=function(e){return function(t){return(t.tags.length?t.tags:[[]]).map(function(t){var r=t.find(function(e){return"type"===e.kind&&("int32"===e.value||"int64"===e.value)})?"int":t.find(function(e){return"type"===e.kind&&("uint32"===e.value||"uint64"===e.value)})?"uint":"double",n=t.find(function(e){return"multipleOf"===e.kind});return(0,X.random_custom)(COALESCE(e))("number")(t)(Z.RandomRanger.number({type:r,transform:function(e){return O.ExpressionFactory.number(e)},setter:function(t){return M.default.factory.createCallExpression("double"!==r||void 0!==n?COALESCE(e)("integer"):COALESCE(e)("number"),void 0,t.map(function(e){return O.ExpressionFactory.number(e)}))}})({minimum:0,maximum:100,gap:10})(t))})}},d=function(e){return function(t){return(t.tags.length?t.tags:[[]]).map(function(t){return(0,X.random_custom)(COALESCE(e))("bigint")(t)(Z.RandomRanger.number({type:t.find(function(e){return"type"===e.kind&&("uint"===e.value||"uint64"===e.value)})?"uint":"int",transform:function(e){return O.ExpressionFactory.bigint(e)},setter:function(t){return M.default.factory.createCallExpression(COALESCE(e)("bigint"),void 0,t.map(function(e){return O.ExpressionFactory.bigint(e)}))}})({minimum:0,maximum:100,gap:10})(t))})}},y=function(e){return function(t){return(t.tags.length?t.tags:[[]]).map(function(t){return(0,X.random_custom)(COALESCE(e))("string")(t)(function(){try{for(var r,n,a=A(t),o=a.next();!o.done;o=a.next()){var i=o.value;if("format"===i.kind)return M.default.factory.createCallExpression(COALESCE(e)(emendFormat(i.value)),void 0,void 0);if("pattern"===i.kind)return M.default.factory.createCallExpression(COALESCE(e)("pattern"),void 0,[M.default.factory.createIdentifier("/".concat(i.value,"/"))])}}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}var u=Z.RandomRanger.length(COALESCE(e))({minimum:5,maximum:25,gap:5})({minimum:"minLength",maximum:"maxLength"})(t);return M.default.factory.createCallExpression(COALESCE(e)("string"),void 0,u?[u]:void 0)}())})}},p=function(e){return function(t){return function(r){var n=(r.tags.length?r.tags:[[]]).map(function(t){return Z.RandomRanger.length(COALESCE(e))({minimum:0,maximum:3,gap:3})({minimum:"minItems",maximum:"maxItems"})(t)});return r.type.recursive?n.map(function(n){return M.default.factory.createCallExpression(M.default.factory.createIdentifier(e.useLocal(ee.array(r.type.index))),void 0,[null!=n?n:COALESCE(e)("length"),M.default.factory.createTrue(),t.recursive?M.default.factory.createAdd(O.ExpressionFactory.number(1),M.default.factory.createIdentifier("_depth")):O.ExpressionFactory.number(0)])}):n.map(function(n){var a=Y.RandomJoiner.array(COALESCE(e))(i(e)(t))(t)(n)(r.type.value);return t.recursive?M.default.factory.createConditionalExpression(M.default.factory.createLogicalAnd(M.default.factory.createIdentifier("_recursive"),M.default.factory.createLessThan(O.ExpressionFactory.number(5),M.default.factory.createIdentifier("_depth"))),void 0,M.default.factory.createIdentifier("[]"),void 0,a):a})}}},m=function(e){return function(t){return function(r){return r.type.recursive?M.default.factory.createCallExpression(M.default.factory.createIdentifier(e.useLocal(ee.tuple(r.type.index))),void 0,[M.default.factory.createTrue(),t.recursive?M.default.factory.createAdd(O.ExpressionFactory.number(1),M.default.factory.createIdentifier("_depth")):O.ExpressionFactory.number(0)]):Y.RandomJoiner.tuple(i(e)(t))(r.type.elements)}}},v=function(e){return function(t){return function(r){return M.default.factory.createCallExpression(M.default.factory.createIdentifier(e.useLocal(ee.object(r.index))),void 0,t.function?[t.recursive?M.default.factory.createTrue():M.default.factory.createIdentifier("_recursive"),M.default.factory.createConditionalExpression(M.default.factory.createIdentifier("_recursive"),void 0,M.default.factory.createAdd(O.ExpressionFactory.number(1),M.default.factory.createIdentifier("_depth")),void 0,M.default.factory.createIdentifier("_depth"))]:void 0)}}},g=function(e){return function(t){return function(r){return M.default.factory.createNewExpression(M.default.factory.createIdentifier("Set"),void 0,[p(e)(t)(B.MetadataArray.create({tags:[],type:H.MetadataArrayType.create({value:r,recursive:!1,index:null,nullables:[],name:"Set<".concat(r.getName(),">")})}))[0]])}}},_=function(e){return function(t){return function(r){var n;return M.default.factory.createNewExpression(M.default.factory.createIdentifier("Map"),void 0,[p(e)(t)(B.MetadataArray.create({tags:[],type:H.MetadataArrayType.create({name:"Map<".concat(r.key.getName(),", ").concat(r.value.getName(),">"),index:null,recursive:!1,nullables:[],value:z.Metadata.create(P(P({},z.Metadata.initialize()),{tuples:[((n=G.MetadataTupleType.create({name:"[".concat(r.key.getName(),", ").concat(r.value.getName(),"]"),index:null,recursive:!1,nullables:[],elements:[r.key,r.value]})).of_map=!0,J.MetadataTuple.create({type:n,tags:[]}))]}))})}))[0]])}}},b=function(e){return function(t){if("Boolean"===t)return u(e);if("Number"===t)return s(e)(V.MetadataAtomic.create({type:"number",tags:[]}))[0];if("String"===t)return y(e)(V.MetadataAtomic.create({type:"string",tags:[]}))[0];if("Date"===t)return x(e);if("Uint8Array"===t||"Uint8ClampedArray"===t||"Uint16Array"===t||"Uint32Array"===t||"BigUint64Array"===t||"Int8Array"===t||"Int16Array"===t||"Int32Array"===t||"BigInt64Array"===t||"Float32Array"===t||"Float64Array"===t)return S(e)(t);if("ArrayBuffer"===t||"SharedArrayBuffer"===t)return T(e)(t);if("DataView"===t)return E(e);else return M.default.factory.createNewExpression(M.default.factory.createIdentifier(t),void 0,[])}},x=function(e){return M.default.factory.createNewExpression(M.default.factory.createIdentifier("Date"),void 0,[M.default.factory.createCallExpression(COALESCE(e)("datetime"),void 0,[])])},S=function(e){return function(t){new BigInt64Array;var r=j(function(){if("Uint8Array"===t||"Uint8ClampedArray"===t)return[0,255];if("Uint16Array"===t)return[0,65535];if("Uint32Array"===t)return[0,4294967295];if("BigUint64Array"===t)return[0,18446744073709552e3];if("Int8Array"===t)return[-128,127];if("Int16Array"===t)return[-32768,32767];if("Int32Array"===t)return[-2147483648,2147483647];else if("BigInt64Array"===t)return[-0x8000000000000000,0x7fffffffffffffff];else if("Float32Array"===t)return[-1175494351e29,34028235e31];return[Number.MIN_VALUE,Number.MAX_VALUE]}(),2),n=r[0],a=r[1],o="BigInt64Array"===t||"BigUint64Array"===t?O.ExpressionFactory.bigint:O.ExpressionFactory.number;return M.default.factory.createNewExpression(M.default.factory.createIdentifier(t),[],[M.default.factory.createCallExpression(COALESCE(e)("array"),void 0,[M.default.factory.createArrowFunction(void 0,void 0,[],q.TypeFactory.keyword("any"),void 0,M.default.factory.createCallExpression(COALESCE(e)("Float32Array"===t||"Float64Array"===t?"number":"BigInt64Array"===t||"BigUint64Array"===t?"bigint":"integer"),void 0,[o(n),o(a)]))])])}},T=function(e){return function(t){return"ArrayBuffer"===t?C.IdentifierFactory.access(S(e)("Uint8Array"))("buffer"):O.ExpressionFactory.selfCall(M.default.factory.createBlock([L.StatementFactory.constant("length",M.default.factory.createCallExpression(COALESCE(e)("integer"),void 0,[])),L.StatementFactory.constant("buffer",M.default.factory.createNewExpression(M.default.factory.createIdentifier("SharedArrayBuffer"),[],[M.default.factory.createIdentifier("length")])),L.StatementFactory.constant("bytes",M.default.factory.createNewExpression(M.default.factory.createIdentifier("Uint8Array"),[],[M.default.factory.createIdentifier("buffer")])),M.default.factory.createExpressionStatement(M.default.factory.createCallExpression(C.IdentifierFactory.access(M.default.factory.createIdentifier("bytes"))("set"),void 0,[M.default.factory.createCallExpression(COALESCE(e)("array"),void 0,[M.default.factory.createArrowFunction(void 0,void 0,[],q.TypeFactory.keyword("any"),void 0,M.default.factory.createCallExpression(COALESCE(e)("integer"),void 0,[O.ExpressionFactory.number(0),O.ExpressionFactory.number(255)])),M.default.factory.createIdentifier("length")]),O.ExpressionFactory.number(0)])),M.default.factory.createReturnStatement(M.default.factory.createIdentifier("buffer"))],!0))}},E=function(e){return M.default.factory.createNewExpression(M.default.factory.createIdentifier("DataView"),[],[C.IdentifierFactory.access(S(e)("Uint8Array"))("buffer")])};var ee={object:function(e){return"$ro".concat(e)},array:function(e){return"$ra".concat(e)},tuple:function(e){return"$rt".concat(e)}},COALESCE=function(e){return function(t){return O.ExpressionFactory.coalesce(W.Escaper.variable(t)?M.default.factory.createPropertyAccessChain(M.default.factory.createIdentifier("generator"),M.default.factory.createToken(M.default.SyntaxKind.QuestionDotToken),M.default.factory.createIdentifier(t)):M.default.factory.createElementAccessChain(M.default.factory.createIdentifier("generator"),M.default.factory.createToken(M.default.SyntaxKind.QuestionDotToken),M.default.factory.createStringLiteral(t)))(C.IdentifierFactory.access(e.use("generator"))(t))}},emendFormat=function(e){return"date-time"===e?"datetime":e.split("-").map(function(e,t){return 0===t||0===e.length?e:e[0].toUpperCase()+e.substring(1)}).join("")}},89345:function(e,t,r){"use strict";var n,a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")),void 0,u.default.factory.createBlock([s.StatementFactory.constant("errors",u.default.factory.createAsExpression(u.default.factory.createArrayLiteralExpression([]),u.default.factory.createArrayTypeNode(d.TypeFactory.keyword("any")))),s.StatementFactory.constant("__is",_),u.default.factory.createIfStatement(u.default.factory.createStrictEquality(u.default.factory.createFalse(),u.default.factory.createCallExpression(u.default.factory.createIdentifier("__is"),void 0,[u.default.factory.createIdentifier("input")])),u.default.factory.createBlock([s.StatementFactory.constant("$report",u.default.factory.createCallExpression(f.IdentifierFactory.access(u.default.factory.createParenthesizedExpression(u.default.factory.createAsExpression(t,d.TypeFactory.keyword("any"))))("report"),[],[u.default.factory.createIdentifier("errors")])),u.default.factory.createExpressionStatement(u.default.factory.createCallExpression(b,void 0,[u.default.factory.createIdentifier("input"),u.default.factory.createStringLiteral("$input"),u.default.factory.createTrue()]))])),s.StatementFactory.constant("success",u.default.factory.createStrictEquality(c.ExpressionFactory.number(0),u.default.factory.createIdentifier("errors.length"))),u.default.factory.createReturnStatement(u.default.factory.createAsExpression(create_output(),d.TypeFactory.keyword("any")))],!0))}}}};var combine=function(e){return function(t){return function(r){return function(n){if(!1===n.tracable)return p.IsProgrammer.configure({object:validate_object(e)(t)(r),numeric:!0})(t)(r).combiner(n);var a=n.postfix?"_path + ".concat(n.postfix):"_path";return function(e){return function(t,r,o){return"and"===e?r.map(function(e){return e.combined?e.expression:u.default.factory.createLogicalOr(e.expression,create_report_call("top"===n.source?u.default.factory.createTrue():u.default.factory.createIdentifier("_exceptionable"))(u.default.factory.createIdentifier(a),o,t))}).reduce(u.default.factory.createLogicalAnd):u.default.factory.createLogicalOr(r.map(function(e){return e.expression}).reduce(u.default.factory.createLogicalOr),create_report_call("top"===n.source?u.default.factory.createTrue():u.default.factory.createIdentifier("_exceptionable"))(u.default.factory.createIdentifier(a),o,t))}}}}}},validate_object=function(e){return function(t){return function(r){return(0,_.check_object)({equals:e,undefined:!0,assert:!1,reduce:u.default.factory.createLogicalAnd,positive:u.default.factory.createTrue(),superfluous:function(e){return create_report_call()(u.default.factory.createAdd(u.default.factory.createIdentifier("_path"),u.default.factory.createCallExpression(r.use("join"),void 0,[u.default.factory.createIdentifier("key")])),"undefined",e)},halt:function(e){return u.default.factory.createLogicalOr(u.default.factory.createStrictEquality(u.default.factory.createFalse(),u.default.factory.createIdentifier("_exceptionable")),e)}})(t)(r)}}},joiner=function(e){return function(t){return function(r){return{object:validate_object(e)(t)(r),array:function(e,t){return(0,g.check_everything)(u.default.factory.createCallExpression(f.IdentifierFactory.access(e)("map"),void 0,[t]))},failure:function(e,t,r){return create_report_call((null==r?void 0:r.from)==="top"?u.default.factory.createTrue():u.default.factory.createIdentifier("_exceptionable"))(u.default.factory.createIdentifier((null==r?void 0:r.postfix)?"_path + ".concat(r.postfix):"_path"),t,e)},tuple:function(e){return(0,g.check_everything)(u.default.factory.createArrayLiteralExpression(e,!0))}}}}},create_output=function(){return u.default.factory.createObjectLiteralExpression([u.default.factory.createShorthandPropertyAssignment("success"),u.default.factory.createShorthandPropertyAssignment("errors"),u.default.factory.createPropertyAssignment("data",u.default.factory.createConditionalExpression(u.default.factory.createIdentifier("success"),void 0,u.default.factory.createIdentifier("input"),void 0,u.default.factory.createIdentifier("undefined")))],!0)},create_report_call=function(e){return function(t,r,n){return u.default.factory.createCallExpression(u.default.factory.createIdentifier("$report"),void 0,[null!=e?e:u.default.factory.createIdentifier("_exceptionable"),u.default.factory.createObjectLiteralExpression([u.default.factory.createPropertyAssignment("path",t),u.default.factory.createPropertyAssignment("expected",u.default.factory.createStringLiteral(r)),u.default.factory.createPropertyAssignment("value",n)],!0)])}}},86752:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AtomicPredicator=void 0;var n,a,o=r(73346);(n=a||(t.AtomicPredicator=a={})).constant=function(e){return function(t){return!o.ArrayUtil.has(e.atomics,function(e){return e.type===t})&&!o.ArrayUtil.has(e.natives,function(e){return e.toLowerCase()===t})}},n.atomic=function(e){return function(t){return!o.ArrayUtil.has(e.natives,function(e){return e.toLowerCase()===t})}},n.native=function(e){return i.has(e.toLowerCase())},n.template=function(e){return!o.ArrayUtil.has(e.atomics,function(e){return"string"===e.type})};var i=new Set(["boolean","bigint","number","string"])},1739:function(e,t,r){"use strict";var n,a,o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a1}},94492:function(e,t,r){"use strict";var n,a,o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=1&&e.properties.every(function(e){return e.key.isSoleLiteral()})},r.size=function(e){return r.getAtomics(e).length+e.arrays.length+e.tuples.length+e.natives.length+e.objects.length+e.maps.length},r.isUnion=function(e){return r.size(e)>1},r.getAtomics=function(e){var t,r,a,c,f=new Set;e.templates.length&&f.add("string");try{for(var s=o(e.constants),d=s.next();!d.done;d=s.next()){var y=d.value;"boolean"===y.type?f.add("bool"):"bigint"===y.type?f.add("uint64"):"number"===y.type?f.add(deduce_numeric_type(y.values)):"string"===y.type&&f.add("string")}}catch(e){t={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}try{for(var p=o(e.atomics),m=p.next();!m.done;m=p.next()){var v=m.value;"boolean"===v.type?f.add("bool"):"bigint"===v.type?decode_bigint(v.tags).forEach(function(e){return f.add(e)}):"number"===v.type?decode_number(v.tags).forEach(function(e){return f.add(e)}):"string"===v.type&&f.add("string")}}catch(e){a={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(a)throw a.error}}return u([],i(f),!1).sort(n)},r.getNumbers=function(e){var t,r,a,c,f=new Set;try{for(var s=o(e.constants),d=s.next();!d.done;d=s.next()){var y=d.value;"number"===y.type&&f.add(deduce_numeric_type(y.values))}}catch(e){t={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}try{for(var p=o(e.atomics),m=p.next();!m.done;m=p.next()){var v=m.value;"number"===v.type&&decode_number(v.tags).forEach(function(e){return f.add(e)})}}catch(e){a={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(a)throw a.error}}return u([],i(f),!1).sort(n)},r.getBigints=function(e){var t,r,a,c,f=new Set;try{for(var s=o(e.constants),d=s.next();!d.done;d=s.next()){var y=d.value;"bigint"===y.type&&f.add("uint64")}}catch(e){t={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}try{for(var p=o(e.atomics),m=p.next();!m.done;m=p.next()){var v=m.value;"bigint"===v.type&&decode_bigint(v.tags).forEach(function(e){return f.add(e)})}}catch(e){a={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(a)throw a.error}}return u([],i(f),!1).sort(n)},n=function(e,t){return c.get(e)-c.get(t)};var c=new Map(["bool","int32","uint32","int64","uint64","float","double","string"].map(function(e,t){return[e,t]})),deduce_numeric_type=function(e){return e.every(function(e){return Math.floor(e)===e})?e.every(function(e){return -2147483648<=e&&e<=2147483647})?"int32":"int64":"double"},decode_bigint=function(e){if(0===e.length)return["int64"];var t,r,n,a=new Set;try{for(var c=o(e),f=c.next();!f.done;f=c.next()){var s=f.value,d=null===(n=s.find(function(e){return"type"===e.kind&&("int64"===e.value||"uint64"===e.value)}))||void 0===n?void 0:n.value;a.add(null!=d?d:"int64")}}catch(e){t={error:e}}finally{try{f&&!f.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}return u([],i(a),!1)},decode_number=function(e){if(0===e.length)return["double"];var t,r,n,a=new Set;try{for(var c=o(e),f=c.next();!f.done;f=c.next()){var s=f.value,d=null===(n=s.find(function(e){return"type"===e.kind&&("int32"===e.value||"uint32"===e.value||"int64"===e.value||"uint64"===e.value||"float"===e.value||"double"===e.value)}))||void 0===n?void 0:n.value;a.add(null!=d?d:"double")}}catch(e){t={error:e}}finally{try{f&&!f.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}return u([],i(a),!1)}},3065:function(e,t,r){"use strict";var n,a,o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.UnionExplorer=void 0;var c=u(r(55423)),f=r(73906),s=r(61387),d=r(3078),y=r(23879),p=r(63860),m=r(35191),v=r(84530),g=r(45826),_=r(99560);(n=a||(t.UnionExplorer=a={})).object=function(e,t){return void 0===t&&(t=0),function(r,a,i){if(1===a.length)return e.objector.decoder()(r,a[0],i);var u="(".concat(a.map(function(e){return e.name}).join(" | "),")"),d=_.UnionPredicator.object(a);if(0===d.length){var y=e.objector.unionizer(r,a,o(o({},i),{tracable:!1}));return e.objector.full?e.objector.full(y)(r,u,i):y}var p=a.filter(function(e){return void 0===d.find(function(t){return t.object===e})}),m=d.filter(function(e){return null!==e.property.key.getSoleLiteral()}).map(function(a,d,y){var m=a.property.key.getSoleLiteral(),v=s.IdentifierFactory.access(r)(m),g=a.neighbour?e.objector.checker()(v,a.property.value,o(o({},i),{tracable:!1,postfix:s.IdentifierFactory.postfix(m)})):(e.objector.required||function(e){return e})(f.ExpressionFactory.isRequired(v));return c.default.factory.createIfStatement((e.objector.is||function(e){return e})(g),c.default.factory.createReturnStatement(e.objector.decoder()(r,a.object,i)),d===y.length-1?p.length?c.default.factory.createReturnStatement(n.object(e,t+1)(r,p,i)):e.objector.failure(r,u,i):void 0)}).reverse().reduce(function(e,t){return c.default.factory.createIfStatement(t.expression,t.thenStatement,e)});return c.default.factory.createCallExpression(c.default.factory.createArrowFunction(void 0,void 0,[],void 0,void 0,c.default.factory.createBlock([m],!0)),void 0,void 0)}},n.tuple=function(e){return(0,g.check_union_array_like)({transform:function(e){return e},element:function(e){return e},size:null,front:function(e){return e},array:function(e){return e},name:function(e){return e.type.name}})(e)},n.array=function(e){return(0,g.check_union_array_like)({transform:function(e){return e},element:function(e){return e.type.value},size:function(e){return s.IdentifierFactory.access(e)("length")},front:function(e){return c.default.factory.createElementAccessExpression(e,0)},array:function(e){return e},name:function(e){return e.type.name}})(e)},n.array_or_tuple=function(e){return(0,g.check_union_array_like)({transform:function(e){return e},element:function(e){return e instanceof y.MetadataArray?e.type.value:e},size:function(e){return s.IdentifierFactory.access(e)("length")},front:function(e){return c.default.factory.createElementAccessExpression(e,0)},array:function(e){return e},name:function(e){return e.type.name}})(e)},n.set=function(e){return(0,g.check_union_array_like)({transform:function(e){return y.MetadataArray.create({tags:[],type:p.MetadataArrayType.create({name:"Set<".concat(e.getName(),">"),index:null,recursive:!1,nullables:[],value:e})})},element:function(e){return e.type.value},size:function(e){return s.IdentifierFactory.access(e)("size")},front:function(e){return s.IdentifierFactory.access(c.default.factory.createCallExpression(s.IdentifierFactory.access(c.default.factory.createCallExpression(s.IdentifierFactory.access(e)("values"),void 0,void 0))("next"),void 0,void 0))("value")},array:function(e){return c.default.factory.createArrayLiteralExpression([c.default.factory.createSpreadElement(e)],!1)},name:function(e,t){return"Set<".concat(t.getName(),">")}})(e)},n.map=function(e){return(0,g.check_union_array_like)({element:function(e){return e.type.value.tuples[0].type.elements},size:function(e){return s.IdentifierFactory.access(e)("size")},front:function(e){return s.IdentifierFactory.access(c.default.factory.createCallExpression(s.IdentifierFactory.access(c.default.factory.createCallExpression(s.IdentifierFactory.access(e)("entries"),void 0,void 0))("next"),void 0,void 0))("value")},array:function(e){return c.default.factory.createArrayLiteralExpression([c.default.factory.createSpreadElement(e)],!1)},name:function(e,t){var r=i(t,2),n=r[0],a=r[1];return"Map<".concat(n.getName(),", ").concat(a.getName(),">")},transform:function(e){var t;return y.MetadataArray.create({tags:[],type:p.MetadataArrayType.create({name:"Map<".concat(e.key.getName(),", ").concat(e.value.getName(),">"),index:null,recursive:!1,nullables:[],value:d.Metadata.create(o(o({},d.Metadata.initialize()),{tuples:[((t=m.MetadataTuple.create({tags:[],type:v.MetadataTupleType.create({name:"[".concat(e.key.getName(),", ").concat(e.value.getName(),"]"),index:null,recursive:!1,nullables:[],elements:[e.key,e.value]})})).type.of_map=!0,t)]}))})})}})(e)}},99560:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.UnionPredicator=void 0;var i=r(3078),u=r(73346),c=r(63224);(n||(t.UnionPredicator=n={})).object=function(e){var t,r,n,f,s=new Map;try{for(var d=o(e),y=d.next();!y.done;y=d.next()){var p=y.value;try{for(var m=(n=void 0,o(p.properties)),v=m.next();!v.done;v=m.next()){var g=v.value.key.getSoleLiteral();null!==g&&c.MapUtil.take(s)(g,function(){return u.ArrayUtil.repeat(e.length,function(){return null})})}}catch(e){n={error:e}}finally{try{v&&!v.done&&(f=m.return)&&f.call(m)}finally{if(n)throw n.error}}}}catch(e){t={error:e}}finally{try{y&&!y.done&&(r=d.return)&&r.call(d)}finally{if(t)throw t.error}}e.forEach(function(e,t){var r,n;try{for(var a=o(e.properties),i=a.next();!i.done;i=a.next()){var u=i.value,c=u.key.getSoleLiteral();null!==c&&(s.get(c)[t]=u)}}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}});var _=[];return e.forEach(function(e,t){var r=[];if(e.properties.forEach(function(e){if(!1!==e.value.isRequired()){var n=e.key.getSoleLiteral();if(null!==n){var a=s.get(n).filter(function(e,r){return t!==r&&null!==e});!0===(0===a.length||a.every(function(t){return!i.Metadata.intersects(e.value,t.value)}))&&r.push({property:e,neighbour:0!==a.length})}}}),0!==r.length){var n=r.find(function(e){return e.property.value.isConstant()})||r[0];_.push(a({index:t,object:e},n))}}),_}},41510:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.disable_function_importer_declare=void 0,t.disable_function_importer_declare=function(e){return disable(e)};var disable=function(e){return{method:e.method,empty:function(){return e.empty()},use:function(t){return e.use(t)},useLocal:function(t){return e.useLocal(t)},hasLocal:function(t){return e.hasLocal(t)},declare:function(e){return[]},declareUnions:function(){return[]},increment:function(){return e.increment()},emplaceUnion:function(t,r,n){return e.emplaceUnion(t,r,n)},trace:function(){return e.trace()}}}},40225:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("decode",d.HttpHeadersProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("assert",s.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("output")]),f.TypeFactory.keyword("any")))]))}}}},87176:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("decode",d.HttpQueryProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("assert",s.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("output")]),f.TypeFactory.keyword("any")))]))}}}},94694:function(e,t,r){"use strict";var n,a,o,i,u,c,f=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},s=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},y=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HttpHeadersProgrammer=void 0;var p=y(r(55423)),m=r(73906),v=r(61387),g=r(92595),_=r(43390),b=r(6152),x=r(12301),S=r(63860),T=r(63664),E=r(5724),w=r(63224),P=r(31959),j=r(92273);(n=c||(t.HttpHeadersProgrammer=c={})).INPUT_TYPE="Record",n.write=function(e){return function(t){return function(r,o){var i=new P.FunctionImporter(t.getText()),u=new g.MetadataCollection,c=_.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0,validate:n.validate})(u)(r);if(!1===c.success)throw T.TransformerError.from("typia.http.".concat(i.method))(c.errors);var d=c.data.objects[0],y=a(i)(d);return p.default.factory.createArrowFunction(void 0,void 0,[v.IdentifierFactory.parameter("input",p.default.factory.createTypeReferenceNode(n.INPUT_TYPE))],p.default.factory.createTypeReferenceNode("typia.Resolved<".concat(null!=o?o:x.TypeFactory.getFullName(e.checker)(r),">")),void 0,p.default.factory.createBlock(s(s([],f(i.declare(t)),!1),f(y),!1),!0))}}},n.validate=function(e,t){var r,n,a,o,i=[],insert=function(e){return i.push(e)};if(!0===t.top)(1!==e.objects.length||1!==e.bucket())&&insert("only one object type is allowed."),!0===e.nullable&&insert("headers cannot be null."),!1===e.isRequired()&&insert("headers cannot be null.");else if(null!==t.nested&&t.nested instanceof S.MetadataArrayType){var u=j.HttpMetadataUtil.atomics(e),c=e.atomics.length+e.templates.length+e.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0);u.size>1&&insert("union type is not allowed in array."),e.size()!==c&&insert("only atomic or constant types are allowed in array."),!0===e.nullable&&insert("nullable type is not allowed in array."),!1===e.isRequired()&&insert("optional type is not allowed in array.")}else if(t.object&&null!==t.property){"object"==typeof t.property&&insert("dynamic property is not allowed."),e.tuples.length&&insert("tuple type is not allowed."),j.HttpMetadataUtil.isUnion(e)&&insert("union type is not allowed."),(e.objects.length||e.sets.length||e.maps.length||e.natives.length)&&insert("nested object type is not allowed."),!0===e.nullable&&insert("nullable type is not allowed.");var y=e.arrays.length>=1||e.tuples.length>=1;"string"==typeof t.property&&"set-cookie"===t.property.toLowerCase()&&!1===y&&insert("".concat(t.property," property must be array.")),"string"==typeof t.property&&I.has(t.property.toLowerCase())&&!0===y&&insert("property cannot be array.")}else if(t.object&&null===t.property){var p=new Map;try{for(var m=d(t.object.properties),v=m.next();!v.done;v=m.next()){var g=v.value.key.getSoleLiteral();null!==g&&w.MapUtil.take(p)(g.toLowerCase(),function(){return new Set}).add(g)}}catch(e){r={error:e}}finally{try{v&&!v.done&&(n=m.return)&&n.call(m)}finally{if(r)throw r.error}}try{for(var _=d(p),b=_.next();!b.done;b=_.next()){var x=f(b.value,2),g=x[0],T=x[1];T.size>1&&insert("duplicated keys when converting to lowercase letters: [".concat(s([],f(T),!1).join(", "),"] -> ").concat(g))}}catch(e){a={error:e}}finally{try{b&&!b.done&&(o=_.return)&&o.call(_)}finally{if(a)throw a.error}}}return i},a=function(e){return function(t){var r=p.default.factory.createIdentifier("output"),n=[];return s(s([b.StatementFactory.constant("output",p.default.factory.createObjectLiteralExpression(t.properties.map(function(t){return!t.value.isRequired()&&t.value.arrays.length+t.value.tuples.length>0&&n.push(t.key.constants[0].values[0]),o(e)(t)}),!0))],f(n.map(function(e){var t=v.IdentifierFactory.access(r)(e);return p.default.factory.createIfStatement(p.default.factory.createStrictEquality(m.ExpressionFactory.number(0),v.IdentifierFactory.access(t)("length")),p.default.factory.createExpressionStatement(p.default.factory.createDeleteExpression(t)))})),!1),[p.default.factory.createReturnStatement(p.default.factory.createAsExpression(r,x.TypeFactory.keyword("any")))],!1)}},o=function(e){return function(t){var r,n,a,o=t.key.constants[0].values[0],c=t.value,s=f(c.atomics.length?[c.atomics[0].type,!1]:c.constants.length?[c.constants[0].type,!1]:c.templates.length?["string",!1]:(a=null!==(n=null===(r=c.arrays[0])||void 0===r?void 0:r.type.value)&&void 0!==n?n:c.tuples[0].type.elements[0]).atomics.length?[a.atomics[0].type,!0]:a.templates.length?["string",!0]:[a.constants[0].type,!0],2),d=s[0],y=s[1],m=v.IdentifierFactory.access(p.default.factory.createIdentifier("input"))(o.toLowerCase());return p.default.factory.createPropertyAssignment(E.Escaper.variable(o)?o:p.default.factory.createStringLiteral(o),y?"set-cookie"===o?m:u(e)(d)(o)(c)(m):i(e)(d)(m))}},i=function(e){return function(t){return function(r){return"string"===t?r:p.default.factory.createCallExpression(e.use(t),void 0,[r])}}},u=function(e){return function(t){return function(r){return function(n){return function(a){var o=p.default.factory.createCallChain(p.default.factory.createPropertyAccessChain(p.default.factory.createCallChain(p.default.factory.createPropertyAccessChain(a,p.default.factory.createToken(p.default.SyntaxKind.QuestionDotToken),p.default.factory.createIdentifier("split")),void 0,void 0,[p.default.factory.createStringLiteral("cookie"===r?"; ":", ")]),p.default.factory.createToken(p.default.SyntaxKind.QuestionDotToken),p.default.factory.createIdentifier("map")),void 0,void 0,[e.use(t)]);return p.default.factory.createConditionalExpression(m.ExpressionFactory.isArray(a),void 0,p.default.factory.createCallExpression(v.IdentifierFactory.access(a)("map"),void 0,[e.use(t)]),void 0,!1===n.isRequired()?o:p.default.factory.createBinaryExpression(o,p.default.factory.createToken(p.default.SyntaxKind.QuestionQuestionToken),p.default.factory.createArrayLiteralExpression([],!1)))}}}}};var I=new Set(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","server","user-agent"])},4494:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("headers",d.HttpHeadersProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("headers"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("output")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},26334:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("query",d.HttpQueryProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("query"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("output")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},50457:function(e,t,r){"use strict";var n,a,o=this&&this.__assign||function(){return(o=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a1&&insert("do not allow union type"),t}},57330:function(e,t,r){"use strict";var n,a,o,i,u,c,f=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},s=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")),void 0,y.default.factory.createBlock(s(s([],f(i.declare(t)),!1),f(g),!1),!0))}}},n.validate=function(e,t){var r=[],insert=function(e){return r.push(e)};if(!0===t.top)(1!==e.objects.length||1!==e.bucket())&&insert("only one object type is allowed."),!0===e.nullable&&insert("query parameters cannot be null."),!1===e.isRequired()&&insert("query parameters cannot be undefined.");else if(null!==t.nested&&t.nested instanceof b.MetadataArrayType){var n=E.HttpMetadataUtil.atomics(e),a=e.atomics.length+e.templates.length+e.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0);n.size>1&&insert("union type is not allowed in array."),e.size()!==a&&insert("only atomic or constant types are allowed in array.")}else t.object&&null!==t.property&&("object"==typeof t.property&&insert("dynamic property is not allowed."),e.tuples.length&&insert("tuple type is not allowed."),E.HttpMetadataUtil.isUnion(e)&&insert("union type is not allowed."),(e.objects.length||e.sets.length||e.maps.length||e.natives.length)&&insert("nested object type is not allowed."));return r},a=function(e){return function(t){var r=y.default.factory.createIdentifier("input"),n=y.default.factory.createIdentifier("output");return[y.default.factory.createExpressionStatement(y.default.factory.createBinaryExpression(r,y.default.factory.createToken(y.default.SyntaxKind.EqualsToken),y.default.factory.createAsExpression(y.default.factory.createCallExpression(e.use("params"),void 0,[r]),y.default.factory.createTypeReferenceNode("URLSearchParams")))),g.StatementFactory.constant("output",y.default.factory.createObjectLiteralExpression(t.properties.map(function(t){return o(e)(t)}),!0)),y.default.factory.createReturnStatement(y.default.factory.createAsExpression(n,_.TypeFactory.keyword("any")))]}},o=function(e){return function(t){var r,n,a,o=t.key.constants[0].values[0],c=t.value,s=f(c.atomics.length?[c.atomics[0].type,!1]:c.constants.length?[c.constants[0].type,!1]:c.templates.length?["string",!1]:(a=null!==(n=null===(r=c.arrays[0])||void 0===r?void 0:r.type.value)&&void 0!==n?n:c.tuples[0].type.elements[0]).atomics.length?[a.atomics[0].type,!0]:a.templates.length?["string",!0]:[a.constants[0].type,!0],2),d=s[0],m=s[1];return y.default.factory.createPropertyAssignment(S.Escaper.variable(o)?o:y.default.factory.createStringLiteral(o),m?u(e)(c)(y.default.factory.createCallExpression(p.IdentifierFactory.access(y.default.factory.createCallExpression(y.default.factory.createIdentifier("input.getAll"),void 0,[y.default.factory.createStringLiteral(o)]))("map"),void 0,[y.default.factory.createArrowFunction(void 0,void 0,[p.IdentifierFactory.parameter("elem")],void 0,void 0,i(e)(d)(!1)(y.default.factory.createIdentifier("elem")))])):i(e)(d)(!1===c.nullable&&!1===c.isRequired())(y.default.factory.createCallExpression(y.default.factory.createIdentifier("input.get"),void 0,[y.default.factory.createStringLiteral(o)])))}},i=function(e){return function(t){return function(r){return function(n){var a=y.default.factory.createCallExpression(e.use(t),void 0,[n]);return r?y.default.factory.createBinaryExpression(a,y.default.factory.createToken(y.default.SyntaxKind.QuestionQuestionToken),y.default.factory.createIdentifier("undefined")):a}}}},u=function(e){return function(t){return function(r){return t.nullable||!1===t.isRequired()?y.default.factory.createCallExpression(e.use("array"),void 0,[r,t.nullable?y.default.factory.createNull():y.default.factory.createIdentifier("undefined")]):r}}}},24635:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("headers",d.HttpHeadersProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("headers"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},23262:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("query",d.HttpQueryProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("query"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},30535:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JSON_COMPONENTS_PREFIX=void 0,t.JSON_COMPONENTS_PREFIX="#/components"},38379:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_array=void 0;var u=r(15566);t.application_array=function(e){return function(t){return function(r){var i=(0,u.application_schema)(e)(!1)(t)(r.type.value)({}),c={type:"array",items:null},out=function(e){return e.items=i,e};if(0===r.tags.length)return[out(c)];var f=r.tags.map(function(t){return application_array_tags(e)(n({},c))(t)});return o([],a(new Map(f.map(function(e){return[JSON.stringify(e),e]})).values()),!1).map(function(e){return out(e)})}}};var application_array_tags=function(e){return function(t){return function(r){var n,a;try{for(var o=i(r.slice().sort(function(e,t){return e.kind.localeCompare(t.kind)})),u=o.next();!u.done;u=o.next()){var c=u.value;"minItems"===c.kind&&"number"==typeof c.value?t.minItems=c.value:"maxItems"===c.kind&&"number"==typeof c.value&&(t.maxItems=c.value)}}catch(e){n={error:e}}finally{try{u&&!u.done&&(a=o.return)&&a.call(o)}finally{if(n)throw n.error}}return e.surplus&&(t["x-typia-typeTags"]=r.map(function(e){return{target:e.target,name:e.name,kind:e.kind,value:e.value,validate:e.validate,exclusive:e.exclusive}})),t}}}},70141:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_default=void 0,t.application_default=function(e){return function(t){return function(n){var a,o,i,u,c=(null!==(i=e["x-typia-jsDocTags"])&&void 0!==i?i:[]).filter(function(e){return"default"===e.name});try{for(var f=r(c),s=f.next();!s.done;s=f.next()){var d=s.value;if((null===(u=d.text)||void 0===u?void 0:u.length)&&t(d.text[0].text))return n(d.text[0].text)}}catch(e){a={error:e}}finally{try{s&&!s.done&&(o=f.return)&&o.call(f)}finally{if(a)throw a.error}}}}}},21683:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_default_string=void 0;var a=r(1494);t.application_default_string=function(e){return function(t){return function(r){return(0,a.application_default)(t)(function(t){var a,o,i,u,c=[];e.atomics.find(function(e){return"number"===e.type||"bigint"===e.type})&&c.push(Number.isNaN(Number(t))),e.atomics.find(function(e){return"boolean"===e.type})&&c.push("true"!==t&&"false"!==t);try{for(var f=n(e.constants),s=f.next();!s.done;s=f.next()){var d=s.value;try{for(var y=(i=void 0,n(d.values)),p=y.next();!p.done;p=y.next()){var m=p.value;c.push(t!==m.toString())}}catch(e){i={error:e}}finally{try{p&&!p.done&&(u=y.return)&&u.call(y)}finally{if(i)throw i.error}}}}catch(e){a={error:e}}finally{try{s&&!s.done&&(o=f.return)&&o.call(f)}finally{if(a)throw a.error}}return void 0!==r.minLength&&c.push(t.length>=r.minLength),void 0!==r.maxLength&&c.push(t.length<=r.maxLength),void 0!==r.pattern&&c.push(new RegExp(r.pattern).test(t)),c.every(function(e){return e})})(function(e){return e})}}}},16229:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.application_escaped=void 0;var n=r(15566);t.application_escaped=function(e){return function(t){return function(r){return function(a){var o=(0,n.application_schema)(e)(t)(r)(a.returns)({});if(null===o)return[];if(is_date(new Set)(a.original)){var i=is_string(o)?o:is_one_of(o)?o.oneOf.find(is_string):void 0;void 0!==i&&"date"!==i.format&&"date-time"!==i.format&&(i.format="date-time")}return is_one_of(o)?o.oneOf:[o]}}}};var is_string=function(e){return"string"===e.type},is_one_of=function(e){return Array.isArray(e.oneOf)},is_date=function(e){return function(t){return!e.has(t)&&(e.add(t),t.natives.some(function(e){return"Date"===e})||t.arrays.some(function(t){return is_date(e)(t.type.value)})||t.tuples.some(function(t){return t.type.elements.some(is_date(e))})||t.aliases.some(function(t){return is_date(e)(t.value)}))}}},88072:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.application_native=void 0;var n=r(30535);t.application_native=function(e){return function(t){return function(r){return function(a){var o,i,u,c,f="ajv"===e.purpose?r:"".concat(r).concat(a?".Nullable":"");return(null===(o=t.schemas)||void 0===o?void 0:o[f])===void 0&&(null!==(i=t.schemas)&&void 0!==i||(t.schemas={}),null!==(u=(c=t.schemas)[f])&&void 0!==u||(c[f]={type:"object",$id:"ajv"===e.purpose?"".concat(n.JSON_COMPONENTS_PREFIX,"/objects/").concat(f):void 0,properties:{},nullable:"swagger"===e.purpose?a:void 0})),{$ref:"".concat(n.JSON_COMPONENTS_PREFIX,"/objects/").concat(f)}}}}}},44286:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_number=void 0;var u=r(1494);t.application_number=function(e){return function(t){return function(r){var i={type:"number"},out=function(e){var t;return null!==(t=e.default)&&void 0!==t||(e.default=(0,u.application_default)(r)(function(t){var r=Number(t),n=[!Number.isNaN(r)];return void 0!==e.minimum&&(!0===e.exclusiveMinimum?n.push(r>e.minimum):n.push(r>=e.minimum)),void 0!==e.maximum&&(!0===e.exclusiveMaximum?n.push(r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.application_object=void 0;var i=r(37297),u=r(3078),c=r(28868),f=r(30535),s=r(15566),d=r(76555);t.application_object=function(e){return function(t){return function(r){return function(n){if(!0===r._Is_literal())return create_object_schema(e)(t)(r)(n);var a,o,i="ajv"===e.purpose?r.name:"".concat(r.name).concat(n?".Nullable":""),u="".concat(f.JSON_COMPONENTS_PREFIX,"/schemas/").concat(i);if((null===(a=t.schemas)||void 0===a?void 0:a[i])!==void 0)return{$ref:u};var c={$id:"ajv"===e.purpose?u:void 0};return null!==(o=t.schemas)&&void 0!==o||(t.schemas={}),t.schemas[i]=c,Object.assign(c,create_object_schema(e)(t)(r)(n)),{$ref:u}}}}};var create_object_schema=function(e){return function(t){return function(r){return function(u){var f,y,p,m,v,g={},_={patternProperties:{},additionalProperties:void 0},b=[];try{for(var x=a(r.properties),S=x.next();!S.done;S=x.next()){var T=S.value;!function(r){if(!(!0===r.value.functional&&!1===r.value.nullable&&!0===r.value.isRequired()&&0===r.value.size()||r.jsDocTags.find(function(e){return"hidden"===e.name}))){var a,o,u,f=r.key.getSoleLiteral(),y=(0,s.application_schema)(e)(!0)(t)(r.value)(n(n({deprecated:r.jsDocTags.some(function(e){return"deprecated"===e.name})||void 0,title:(null===(a=null==(o=r.jsDocTags.find(function(e){return"title"===e.name}))?void 0:o.text)||void 0===a?void 0:a.length)?i.CommentFactory.merge(o.text):void 0,description:null!==(p=r.description)&&void 0!==p?p:void 0},e.surplus?{"x-typia-required":r.value.required,"x-typia-optional":r.value.optional}:{}),{"x-typia-jsDocTags":(u=r.jsDocTags.filter(function(e){return"title"!==e.name&&"deprecated"!==e.name&&"hidden"!==e.name})).length?u:void 0}));if(null!==y){if(!1===e.surplus&&(null===(m=y["x-typia-jsDocTags"])||void 0===m?void 0:m.length)&&delete y["x-typia-jsDocTags"],null!==f)g[f]=y,!0===r.value.isRequired()&&b.push(f);else{var v=(0,d.metadata_to_pattern)(!0)(r.key);v===c.PatternUtil.STRING?_.additionalProperties=[r.value,y]:_.patternProperties[v]=[r.value,y]}}}}(T)}}catch(e){f={error:e}}finally{try{S&&!S.done&&(y=x.return)&&y.call(x)}finally{if(f)throw f.error}}var E={additionalProperties:null===(v=_.additionalProperties)||void 0===v?void 0:v[1],patternProperties:function(){if(0!==Object.keys(_.patternProperties).length){var e,t,r={};try{for(var n=a(Object.entries(_.patternProperties)),i=n.next();!i.done;i=n.next()){var u=o(i.value,2),c=u[0],f=u[1];r[c]=f[1]}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r}}()};return n(n({type:"object",properties:g,nullable:"swagger"===e.purpose?u:void 0,required:b.length?b:void 0,description:r.description},e.surplus?{"x-typia-jsDocTags":r.jsDocTags}:{}),"ajv"===e.purpose?E:e.surplus?{"x-typia-additionalProperties":E.additionalProperties,"x-typia-patternProperties":E.patternProperties,additionalProperties:join(e)(t)(_)}:{})}}}},join=function(e){return function(t){return function(r){var n,a=Object.values(r.patternProperties||{});if(r.additionalProperties&&a.push(r.additionalProperties),0!==a.length){if(1===a.length)return a[0][1];var o=a.map(function(e){return e[0]}).reduce(function(e,t){return u.Metadata.merge(e,t)});return null!==(n=(0,s.application_schema)(e)(!0)(t)(o)(e.surplus?{"x-typia-required":!1}:{}))&&void 0!==n?n:void 0}}}}},15566:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_schema=void 0;var o=r(45041),i=r(86752),u=r(38379),c=r(95333),f=r(70141),s=r(59672),d=r(16229),y=r(88072),p=r(44286),m=r(68725),v=r(24014),g=r(33502),_=r(30829);t.application_schema=function(e){return function(t){return function(r){return function(x){return function(S){if(!0===x.any)return n(n({},S),{type:void 0});if(x.nullable&&x.empty())return n({type:"null"},S);var T,E,w,P,j,I,A,F,M,O,C,N,R,L,U=[];x.nullable&&"swagger"!==e.purpose&&U.push(n(n({},S),{type:"null"}));var q=x.nullable&&"swagger"===e.purpose?function(e){return U.push(n(n({},e),{nullable:!!e.type||void 0}))}:function(e){return U.push(e)};null!==x.escaped&&(0,d.application_escaped)(e)(t)(r)(x.escaped).forEach(q),x.templates.length&&i.AtomicPredicator.template(x)&&q((0,g.application_templates)(x)(S));try{for(var z=a(x.constants),B=z.next();!B.done;B=z.next()){var H=B.value;if("bigint"===H.type)throw TypeError(b);"string"===H.type&&x.templates.length||!1===i.AtomicPredicator.constant(x)(H.type)||q((0,s.application_constant)(H)(S))}}catch(e){T={error:e}}finally{try{B&&!B.done&&(E=z.return)&&E.call(z)}finally{if(T)throw T.error}}try{for(var V=a(x.atomics),J=V.next();!J.done;J=V.next()){var G=J.value;if("bigint"===G.type)throw TypeError(b);"boolean"===G.type?(0,f.application_boolean)(e)(G)(S).forEach(q):"number"===G.type?(0,p.application_number)(e)(G)(S).forEach(q):"string"===G.type&&(0,v.application_string)(e)(x)(G)(S).forEach(q)}}catch(e){w={error:e}}finally{try{J&&!J.done&&(P=V.return)&&P.call(V)}finally{if(w)throw w.error}}try{for(var Q=a(x.arrays),W=Q.next();!W.done;W=Q.next()){var K=W.value;(0,c.application_array)(e)(r)(K).forEach(q)}}catch(e){j={error:e}}finally{try{W&&!W.done&&(I=Q.return)&&I.call(Q)}finally{if(j)throw j.error}}try{for(var Y=a(x.tuples),Z=Y.next();!Z.done;Z=Y.next()){var X=Z.value;q((0,_.application_tuple)(e)(r)(X)(S))}}catch(e){A={error:e}}finally{try{Z&&!Z.done&&(F=Y.return)&&F.call(Y)}finally{if(A)throw A.error}}try{for(var ee=a(x.natives),et=ee.next();!et.done;et=ee.next()){var er=et.value;!function(t){if(i.AtomicPredicator.native(t)){var n=t.toLowerCase();if(!x.atomics.some(function(e){return e.type===n})){if("bigint"===n)throw TypeError(b);"boolean"===n?q((0,f.application_boolean)(e)(o.MetadataAtomic.create({type:"boolean",tags:[]}))(S)[0]):"number"===n?q((0,p.application_number)(e)(o.MetadataAtomic.create({type:"number",tags:[]}))(S)[0]):"string"===n&&q((0,v.application_string)(e)(x)(o.MetadataAtomic.create({type:"string",tags:[]}))(S)[0])}}else q((0,y.application_native)(e)(r)(t)(x.nullable))}(er)}}catch(e){M={error:e}}finally{try{et&&!et.done&&(O=ee.return)&&O.call(ee)}finally{if(M)throw M.error}}x.sets.length&&q((0,y.application_native)(e)(r)("Set")(x.nullable)),x.maps.length&&q((0,y.application_native)(e)(r)("Map")(x.nullable));try{for(var en=a(x.objects),ea=en.next();!ea.done;ea=en.next()){var eo=ea.value;q((0,m.application_object)(e)(r)(eo)(x.nullable))}}catch(e){C={error:e}}finally{try{ea&&!ea.done&&(N=en.return)&&N.call(en)}finally{if(C)throw C.error}}try{for(var ei=a(x.aliases),eu=ei.next();!eu.done;eu=ei.next()){var ec=eu.value;q((0,u.application_alias)(e)(t)(r)(ec)(x.nullable))}}catch(e){R={error:e}}finally{try{eu&&!eu.done&&(L=ei.return)&&L.call(ei)}finally{if(R)throw R.error}}return 0===U.length?!0===t?null:n(n({},S),{type:void 0}):1===U.length?n(n({},U[0]),S):n({oneOf:U},S)}}}}};var b="Error on typia.application(): does not allow bigint type."},24014:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_string=void 0;var u=r(21683);t.application_string=function(e){return function(t){return function(r){return function(i){var c={type:"string"},out=function(e){var r;return null!==(r=e.default)&&void 0!==r||(e.default=(0,u.application_default_string)(t)(i)(c)),e};if(0===r.tags.length)return[out(c)];var f=r.tags.map(function(t){return application_string_tags(e)(n({},c))(t)});return o([],a(new Map(f.map(function(e){return[JSON.stringify(e),e]})).values()),!1).map(function(e){return out(e)})}}}};var application_string_tags=function(e){return function(t){return function(r){var n,a;try{for(var o=i(r.slice().sort(function(e,t){return e.kind.localeCompare(t.kind)})),u=o.next();!u.done;u=o.next()){var c=u.value;"minLength"===c.kind&&"number"==typeof c.value?t.minLength=c.value:"maxLength"===c.kind&&"number"==typeof c.value?t.maxLength=c.value:"format"===c.kind&&"string"==typeof c.value?t.format=c.value:"pattern"===c.kind?t.pattern=c.value:"default"===c.kind&&"string"==typeof c.value&&(t.default=c.value)}}catch(e){n={error:e}}finally{try{u&&!u.done&&(a=o.return)&&a.call(o)}finally{if(n)throw n.error}}return e.surplus&&(t["x-typia-typeTags"]=r.map(function(e){return{target:e.target,name:e.name,kind:e.kind,value:e.value,validate:e.validate,exclusive:e.exclusive}})),t}}}},33502:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.application_templates=void 0;var n=r(21683),a=r(76555);t.application_templates=function(e){return function(t){var r={type:"string"};return r.pattern=(0,a.metadata_to_pattern)(!0)(e),r.default=(0,n.application_default_string)(e)(t)(r),r}}},30829:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r & ".concat(t.name),expression:(null!==(a=t.predicate)&&void 0!==a?a:n.ExpressionFactory.transpile(e.context)(t.validate))(r)}})})}}}},67790:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.check_bigint=void 0;var a=n(r(55423)),o=r(73906);t.check_bigint=function(e){return function(t){return function(r){var n=check_bigint_type_tags(e)(t)(r);return{expected:t.getName(),expression:a.default.factory.createStrictEquality(a.default.factory.createStringLiteral("bigint"),a.default.factory.createTypeOfExpression(r)),conditions:n}}}};var check_bigint_type_tags=function(e){return function(t){return function(r){return t.tags.map(function(e){return e.filter(function(e){return!!e.validate})}).filter(function(e){return!!e.length}).map(function(t){return t.map(function(t){var n;return{expected:"bigint & ".concat(t.name),expression:(null!==(n=t.predicate)&&void 0!==n?n:o.ExpressionFactory.transpile(e.context)(t.validate))(r)}})})}}}},95013:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.metadata_to_pattern=void 0;var a=r(73346),o=r(28868),i=r(26290);t.metadata_to_pattern=function(e){return function(t){if(void 0!==t.atomics.find(function(e){return"string"===e.type}))return"(.*)";var r,u,c,f,s=a.ArrayUtil.flat(t.constants.map(function(e){return"string"!==e.type?e.values.map(function(e){return e.toString()}):e.values.map(function(e){return o.PatternUtil.escape(e)})}));try{for(var d=n(t.atomics),y=d.next();!y.done;y=d.next()){var p=y.value;"number"===p.type||"bigint"===p.type?s.push(o.PatternUtil.NUMBER):"boolean"===p.type&&s.push(o.PatternUtil.BOOLEAN)}}catch(e){r={error:e}}finally{try{y&&!y.done&&(u=d.return)&&u.call(d)}finally{if(r)throw r.error}}try{for(var m=n(t.templates),v=m.next();!v.done;v=m.next()){var g=v.value;s.push("("+(0,i.template_to_pattern)(!1)(g)+")")}}catch(e){c={error:e}}finally{try{v&&!v.done&&(f=m.return)&&f.call(m)}finally{if(c)throw c.error}}var _=1===s.length?s[0]:"("+s.join("|")+")";return e?o.PatternUtil.fix(_):_}}},19973:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.prune_object_properties=void 0;var a=n(r(55423)),o=r(6152),i=r(76555);t.prune_object_properties=function(e){var t=a.default.factory.createIdentifier("input"),r=a.default.factory.createIdentifier("key"),n=e.properties.map(function(e){var t=e.key.getSoleLiteral();return null!==t?a.default.factory.createStrictEquality(a.default.factory.createStringLiteral(t),a.default.factory.createIdentifier("key")):a.default.factory.createCallExpression(a.default.factory.createIdentifier("RegExp(/".concat((0,i.metadata_to_pattern)(!0)(e.key),"/).test")),void 0,[r])}),u=[];return n.length&&u.push(a.default.factory.createIfStatement(n.reduce(function(e,t){return a.default.factory.createLogicalOr(e,t)}),a.default.factory.createContinueStatement())),u.push(a.default.factory.createExpressionStatement(a.default.factory.createDeleteExpression(a.default.factory.createElementAccessExpression(t,r)))),a.default.factory.createForOfStatement(void 0,o.StatementFactory.constant("key").declarationList,a.default.factory.createCallExpression(a.default.factory.createIdentifier("Object.keys"),void 0,[t]),1===u.length?u[0]:a.default.factory.createBlock(u,!0))}},59573:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.random_custom=void 0;var a=n(r(55423)),o=r(73906),i=r(97846);t.random_custom=function(e){return function(t){return function(r){return function(n){return o.ExpressionFactory.coalesce(a.default.factory.createCallChain(a.default.factory.createPropertyAccessChain(e("customs"),a.default.factory.createToken(a.default.SyntaxKind.QuestionDotToken),a.default.factory.createIdentifier(t)),a.default.factory.createToken(a.default.SyntaxKind.QuestionDotToken),void 0,[i.LiteralFactory.generate(r.map(function(e){return{name:e.name,kind:e.kind,value:e.value}}))]))(n)}}}}},11430:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.stringify_dynamic_properties=void 0;var o=a(r(55423)),i=r(61387),u=r(95374),c=r(76555);t.stringify_dynamic_properties=function(e,t){var r,a,u,f=[o.default.factory.createIfStatement(o.default.factory.createStrictEquality(o.default.factory.createIdentifier("undefined"),o.default.factory.createIdentifier("value")),o.default.factory.createReturnStatement(o.default.factory.createStringLiteral("")))],output=function(){var e=o.default.factory.createCallExpression(i.IdentifierFactory.access(o.default.factory.createCallExpression(o.default.factory.createIdentifier("Object.entries"),void 0,[o.default.factory.createIdentifier("input")]))("map"),void 0,[o.default.factory.createArrowFunction(void 0,void 0,[i.IdentifierFactory.parameter(o.default.factory.createArrayBindingPattern([o.default.factory.createBindingElement(void 0,void 0,"key"),o.default.factory.createBindingElement(void 0,void 0,"value")]),o.default.factory.createTypeReferenceNode("[string, any]"))],void 0,void 0,o.default.factory.createBlock(f))]),t=o.default.factory.createCallExpression(i.IdentifierFactory.access(e)("filter"),void 0,[o.default.factory.createArrowFunction(void 0,void 0,[i.IdentifierFactory.parameter("str")],void 0,void 0,o.default.factory.createStrictInequality(o.default.factory.createStringLiteral(""),o.default.factory.createIdentifier("str")))]);return o.default.factory.createCallExpression(i.IdentifierFactory.access(t)("join"),void 0,[o.default.factory.createStringLiteral(",")])};if(t.length&&f.push(o.default.factory.createIfStatement(o.default.factory.createCallExpression(i.IdentifierFactory.access(o.default.factory.createArrayLiteralExpression(t.map(function(e){return o.default.factory.createStringLiteral(e)})))("some"),void 0,[o.default.factory.createArrowFunction(void 0,void 0,[i.IdentifierFactory.parameter("regular")],void 0,void 0,o.default.factory.createStrictEquality(o.default.factory.createIdentifier("regular"),o.default.factory.createIdentifier("key")))]),o.default.factory.createReturnStatement(o.default.factory.createStringLiteral("")))),!0==(1===e.length&&1===e[0].key.size()&&(null===(u=e[0].key.atomics[0])||void 0===u?void 0:u.type)==="string"))return f.push(stringify(e[0])),output();try{for(var s=n(e),d=s.next();!d.done;d=s.next()){var y=d.value,p=o.default.factory.createIfStatement(o.default.factory.createCallExpression(o.default.factory.createIdentifier("RegExp(/".concat((0,c.metadata_to_pattern)(!0)(y.key),"/).test")),void 0,[o.default.factory.createIdentifier("key")]),stringify(y));f.push(p)}}catch(e){r={error:e}}finally{try{d&&!d.done&&(a=s.return)&&a.call(s)}finally{if(r)throw r.error}}return f.push(o.default.factory.createReturnStatement(o.default.factory.createStringLiteral(""))),output()};var stringify=function(e){return o.default.factory.createReturnStatement(u.TemplateFactory.generate([o.default.factory.createCallExpression(o.default.factory.createIdentifier("JSON.stringify"),[],[o.default.factory.createIdentifier("key")]),o.default.factory.createStringLiteral(":"),e.expression]))}},11606:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")),void 0,i.default.factory.createBlock([f.StatementFactory.constant("assert",d.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("input"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("JSON.parse"),void 0,[i.default.factory.createIdentifier("input")]))),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("input")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},20433:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([f.StatementFactory.constant("is",d.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("input"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("JSON.parse"),void 0,[i.default.factory.createIdentifier("input")]))),i.default.factory.createReturnStatement(i.default.factory.createConditionalExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("input")]),void 0,i.default.factory.createAsExpression(i.default.factory.createIdentifier("input"),s.TypeFactory.keyword("any")),void 0,i.default.factory.createNull()))]))}}}},5042:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},A=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},M=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.JsonStringifyProgrammer=void 0;var O=M(r(55423)),C=r(73906),N=r(61387),R=r(67711),L=r(6152),U=r(12301),q=r(84411),z=r(3078),B=r(23879),H=r(45041),V=r(73346),J=r(12114),G=r(63348),Q=r(86752),W=r(31959),K=r(3306),Y=r(38252),Z=r(91934),X=r(97144),ee=r(60572),et=r(39687),er=r(11058),en=r(59714);(P||(t.JsonStringifyProgrammer=P={})).write=function(e){return function(t){var r=new W.FunctionImporter(t.getText()),n=T(e)(r);return J.FeatureProgrammer.write(e)(j(j({},n),{addition:function(n){return A(A([],I(G.IsProgrammer.write_function_statements(e)(r)(n)),!1),I(r.declare(t)),!1)}}))(r)}},n=function(e){return function(t){return function(r){return function(a,i,c){if(!0===i.any)return g(a,i,c)(b(a,i,c)(O.default.factory.createCallExpression(O.default.factory.createIdentifier("JSON.stringify"),void 0,[a])));if(0===i.size()&&(!1===i.isRequired()||!0===i.nullable))return!1===i.isRequired()&&!0===i.nullable?"array"===c.from?O.default.factory.createStringLiteral("null"):O.default.factory.createConditionalExpression(O.default.factory.createStrictEquality(O.default.factory.createNull(),a),void 0,O.default.factory.createStringLiteral("null"),void 0,O.default.factory.createIdentifier("undefined")):!1===i.isRequired()?"array"===c.from?O.default.factory.createStringLiteral("null"):O.default.factory.createIdentifier("undefined"):O.default.factory.createStringLiteral("null");var v,S,T,E,w,P,M,N,R,L=[];if(null!==i.escaped?L.push({type:"resolved",is:function(){return G.IsProgrammer.decode_to_json(!1)(a)},value:function(){return d(e)(t)(r)(a,i.escaped.returns,c)}}):!0===i.functional&&L.push({type:"functional",is:function(){return G.IsProgrammer.decode_functional(a)},value:function(){return y(c)}}),(i.templates.length||V.ArrayUtil.has(i.constants,function(e){return"string"===e.type}))&&Q.AtomicPredicator.template(i)){var q=z.Metadata.initialize();q.atomics.push(H.MetadataAtomic.create({type:"string",tags:[]})),L.push({type:"template literal",is:function(){return G.IsProgrammer.decode(e)(r)(a,q,c)},value:function(){return f(e)(r)(a,"string",c)}})}var _loop_1=function(t){if(!1===Q.AtomicPredicator.constant(i)(t.type))return"continue";"string"!==t.type?L.push({type:"atomic",is:function(){var n;return G.IsProgrammer.decode(e)(r)(a,((n=z.Metadata.initialize()).atomics.push(H.MetadataAtomic.create({type:t.type,tags:[]})),n),c)},value:function(){return f(e)(r)(a,t.type,c)}}):0===i.templates.length&&L.push({type:"const string",is:function(){var t;return G.IsProgrammer.decode(e)(r)(a,((t=z.Metadata.initialize()).atomics.push(H.MetadataAtomic.create({type:"string",tags:[]})),t),c)},value:function(){return s(e)(r)(a,A([],I(t.values),!1),c)}})};try{for(var B=F(i.constants),J=B.next();!J.done;J=B.next()){var W=J.value;_loop_1(W)}}catch(e){S={error:e}}finally{try{J&&!J.done&&(T=B.return)&&T.call(B)}finally{if(S)throw S.error}}var _loop_2=function(t){Q.AtomicPredicator.atomic(i)(t.type)&&L.push({type:"atomic",is:function(){var n;return G.IsProgrammer.decode(e)(r)(a,((n=z.Metadata.initialize()).atomics.push(t),n),c)},value:function(){return f(e)(r)(a,t.type,c)}})};try{for(var K=F(i.atomics),Z=K.next();!Z.done;Z=K.next()){var X=Z.value;_loop_2(X)}}catch(e){E={error:e}}finally{try{Z&&!Z.done&&(w=K.return)&&w.call(K)}finally{if(E)throw E.error}}var _loop_3=function(n){L.push({type:"tuple",is:function(){var t;return G.IsProgrammer.decode(e)(r)(a,((t=z.Metadata.initialize()).tuples.push(n),t),c)},value:function(){return u(e)(t)(r)(a,n,c)}})};try{for(var et=F(i.tuples),en=et.next();!en.done;en=et.next()){var ea=en.value;_loop_3(ea)}}catch(e){P={error:e}}finally{try{en&&!en.done&&(M=et.return)&&M.call(et)}finally{if(P)throw P.error}}if(i.arrays.length){var eo=1===i.arrays.length?function(){return o(t)(r)(a,i.arrays[0],j(j({},c),{from:"array"}))}:i.arrays.some(function(e){return e.type.value.any})?function(){return O.default.factory.createCallExpression(O.default.factory.createIdentifier("JSON.stringify"),void 0,[a])}:function(){return m(e)(t)(r)(a,i.arrays,j(j({},c),{from:"array"}))};L.push({type:"array",is:function(){return C.ExpressionFactory.isArray(a)},value:eo})}if(i.natives.length){var _loop_4=function(t){L.push({type:"object",is:function(){return(0,ee.check_native)(t)(a)},value:function(){return Q.AtomicPredicator.native(t)?f(e)(r)(a,t.toLowerCase(),c):O.default.factory.createStringLiteral("{}")}})};try{for(var ei=F(i.natives),eu=ei.next();!eu.done;eu=ei.next()){var ec=eu.value;_loop_4(ec)}}catch(e){N={error:e}}finally{try{eu&&!eu.done&&(R=ei.return)&&R.call(ei)}finally{if(N)throw N.error}}}i.sets.length&&L.push({type:"object",is:function(){return C.ExpressionFactory.isInstanceOf("Set")(a)},value:function(){return O.default.factory.createStringLiteral("{}")}}),i.maps.length&&L.push({type:"object",is:function(){return C.ExpressionFactory.isInstanceOf("Map")(a)},value:function(){return O.default.factory.createStringLiteral("{}")}}),i.objects.length&&L.push({type:"object",is:function(){return C.ExpressionFactory.isObject({checkNull:!0,checkArray:i.objects.some(function(e){return e.properties.every(function(e){return!e.key.isSoleLiteral()||!e.value.isRequired()})})})(a)},value:function(){var o,u;return!1===i.isParentResolved()&&1===i.objects.length&&i.objects[0]._Is_simple("top"===c.from?0:1)?(o=i.objects[0],u=(0,er.feature_object_entries)({decoder:function(){return n(e)(t)(r)},trace:!1,path:!1})(r)(o)(O.default.factory.createAsExpression(a,U.TypeFactory.keyword("any"))),Y.StringifyJoiner.object(r)(O.default.factory.createAsExpression(a,U.TypeFactory.keyword("any")),u)):p(t)(r)(a,i,j(j({},c),{from:"object"}))}});return 0===L.length?O.default.factory.createCallExpression(O.default.factory.createIdentifier("JSON.stringify"),void 0,[a]):(v=1===L.length?L[0].value():O.default.factory.createCallExpression(O.default.factory.createArrowFunction(void 0,void 0,[],void 0,void 0,x(r,a,L,i.getName())),void 0,void 0),g(a,i,c)(_(a,i)(v)))}}}},a=function(e){return J.FeatureProgrammer.decode_object({trace:!1,path:!1,prefix:S})(e)},o=function(e){return function(t){return function(r,n,a){return n.type.recursive?O.default.factory.createCallExpression(O.default.factory.createIdentifier(t.useLocal("".concat(e.prefix,"a").concat(n.type.index))),void 0,J.FeatureProgrammer.argumentsArray(e)(j(j({},a),{source:"function",from:"array"}))(r)):i(e)(t)(r,n,a)}}},i=function(e){return function(t){return function(r,n,a){return J.FeatureProgrammer.decode_array(e)(t)(Y.StringifyJoiner.array)(r,n,a)}}},u=function(e){return function(t){return function(r){return function(n,a,o){return a.type.recursive?O.default.factory.createCallExpression(O.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,J.FeatureProgrammer.argumentsArray(t)(j(j({},o),{source:"function"}))(n)):c(e)(t)(r)(n,a.type,o)}}}},c=function(e){return function(t){return function(r){return function(a,o,i){var u=o.elements.filter(function(e){return null===e.rest}).map(function(o,u){return n(e)(t)(r)(O.default.factory.createElementAccessExpression(a,u),o,j(j({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(u,']"'):'"['.concat(u,']"')}))}),c=function(){if(0===o.elements.length||null===o.elements.at(-1).rest)return null;var u=n(e)(t)(r)(O.default.factory.createCallExpression(N.IdentifierFactory.access(a)("slice"),void 0,[C.ExpressionFactory.number(o.elements.length-1)]),(0,en.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),j(j({},i),{start:o.elements.length-1}));return O.default.factory.createCallExpression(r.use("rest"),void 0,[u])}();return Y.StringifyJoiner.tuple(u,c)}}}},f=function(e){return function(t){return function(r,n,a){return"string"===n?O.default.factory.createCallExpression(t.use("string"),void 0,[r]):("number"===n&&K.OptionPredicator.numeric(e.options)&&(r=O.default.factory.createCallExpression(t.use("number"),void 0,[r])),"top"!==a.from?r:O.default.factory.createCallExpression(N.IdentifierFactory.access(r)("toString"),void 0,void 0))}}},s=function(e){return function(t){return function(r,n,a){return n.every(function(e){return!Z.StringifyPredicator.require_escape(e)})?[O.default.factory.createStringLiteral('"'),r,O.default.factory.createStringLiteral('"')].reduce(function(e,t){return O.default.factory.createAdd(e,t)}):f(e)(t)(r,"string",a)}}},d=function(e){return function(t){return function(r){return function(a,o,i){return n(e)(t)(r)(O.default.factory.createCallExpression(N.IdentifierFactory.access(a)("toJSON"),void 0,[]),o,i)}}}},y=function(e){return"array"===e.from?O.default.factory.createStringLiteral("null"):O.default.factory.createIdentifier("undefined")},p=function(e){return function(t){return function(r,n,o){return 1===n.objects.length?a(t)(r,n.objects[0],o):O.default.factory.createCallExpression(O.default.factory.createIdentifier(t.useLocal("".concat(S,"u").concat(n.union_index))),void 0,J.FeatureProgrammer.argumentsArray(e)(o)(r))}}},m=function(e){return function(t){return function(r){return function(n,a,i){return v(t)(r)(X.UnionExplorer.array({checker:G.IsProgrammer.decode(e)(r),decoder:o(t)(r),empty:O.default.factory.createStringLiteral("[]"),success:O.default.factory.createTrue(),failure:function(e,t){return w(r)(t)(e)}}))(n,a,i)}}}},v=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&O.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=j(j({},o),{source:"function",from:"array"}),O.default.factory.createCallExpression(O.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(J.FeatureProgrammer.parameterDeclarations(e)(U.TypeFactory.keyword("any"))(O.default.factory.createIdentifier("input")))(j(j({},o),{postfix:""}))(O.default.factory.createIdentifier("input"))})),void 0,J.FeatureProgrammer.argumentsArray(e)(o)(n))}}}},g=function(e,t,r){return!0===t.isRequired()&&!1===t.any?function(e){return e}:function(t){return O.default.factory.createConditionalExpression(O.default.factory.createStrictInequality(O.default.factory.createIdentifier("undefined"),e),void 0,t,void 0,"array"===r.from?O.default.factory.createStringLiteral("null"):O.default.factory.createIdentifier("undefined"))}},_=function(e,t){return!1===t.nullable?function(e){return e}:function(t){return O.default.factory.createConditionalExpression(O.default.factory.createStrictInequality(O.default.factory.createNull(),e),void 0,t,void 0,O.default.factory.createStringLiteral("null"))}},b=function(e,t,r){return!1===t.functional?function(e){return e}:function(t){return O.default.factory.createConditionalExpression(O.default.factory.createStrictInequality(O.default.factory.createStringLiteral("function"),q.ValueFactory.TYPEOF(e)),void 0,t,void 0,y(r))}},x=function(e,t,r,n){return O.default.factory.createBlock(A(A([],I(r.map(function(e){return O.default.factory.createIfStatement(e.is(),O.default.factory.createReturnStatement(e.value()))})),!1),[w(e)(n)(t)],!1),!0)},S="$s",T=function(e){return function(t){var r={types:{input:function(t,r){return O.default.factory.createTypeReferenceNode(null!=r?r:U.TypeFactory.getFullName(e.checker)(t))},output:function(){return U.TypeFactory.keyword("string")}},prefix:S,trace:!1,path:!1,initializer:E,decoder:function(){return n(e)(r)(t)},objector:{checker:function(){return function(r,n,a){return G.IsProgrammer.decode(e)(t)(r,n,a)}},decoder:function(){return a(t)},joiner:Y.StringifyJoiner.object(t),unionizer:(0,et.decode_union_object)(G.IsProgrammer.decode_object(e)(t))(a(t))(function(e){return e})(function(e,r){return w(t)(r)(e)}),failure:function(e,r){return w(t)(r)(e)}},generator:{arrays:function(){return function(e){return e.arrays().filter(function(e){return e.recursive}).map(function(e,n){return L.StatementFactory.constant("".concat(r.prefix,"a").concat(n),O.default.factory.createArrowFunction(void 0,void 0,J.FeatureProgrammer.parameterDeclarations(r)(U.TypeFactory.keyword("any"))(O.default.factory.createIdentifier("input")),U.TypeFactory.keyword("any"),void 0,i(r)(t)(O.default.factory.createIdentifier("input"),B.MetadataArray.create({type:e,tags:[]}),{tracable:r.trace,source:"function",from:"array",postfix:""})))})}},tuples:function(){var n;return n=t,function(t){return t.tuples().filter(function(e){return e.recursive}).map(function(t,a){return L.StatementFactory.constant("".concat(r.prefix,"t").concat(a),O.default.factory.createArrowFunction(void 0,void 0,J.FeatureProgrammer.parameterDeclarations(r)(U.TypeFactory.keyword("any"))(O.default.factory.createIdentifier("input")),U.TypeFactory.keyword("any"),void 0,c(e)(r)(n)(O.default.factory.createIdentifier("input"),t,{tracable:r.trace,source:"function",from:"array",postfix:""})))})}}}};return r}},E=function(e){return function(t){return function(r){return R.JsonMetadataFactory.analyze("typia.json.".concat(t.method))(e.checker,e.context)(r)}}},w=function(e){return function(t){return function(r){return O.default.factory.createExpressionStatement(O.default.factory.createCallExpression(e.use("throws"),[],[O.default.factory.createObjectLiteralExpression([O.default.factory.createPropertyAssignment("expected",O.default.factory.createStringLiteral(t)),O.default.factory.createPropertyAssignment("value",r)],!0)]))}}}},78600:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([f.StatementFactory.constant("validate",d.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),f.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("JSON.parse"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},77284:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("stringify",d.JsonStringifyProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")]),f.TypeFactory.keyword("any"))),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("output.data"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("stringify"),void 0,[i.default.factory.createIdentifier("input")])))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},60962:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("assert",s.AssertProgrammer.write(e)(t)(!1)(r,n)),c.StatementFactory.constant("clone",d.MiscCloneProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),i.default.factory.createExpressionStatement(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("input")])),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("clone"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},98453:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},j=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},A=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MiscCloneProgrammer=void 0;var F=A(r(55423)),M=r(73906),O=r(61387),C=r(92595),N=r(43390),R=r(6152),L=r(12301),U=r(3078),q=r(23879),z=r(63664),B=r(12114),H=r(63348),V=r(1739),J=r(31959),G=r(97144),Q=r(39687),W=r(59714);(E||(t.MiscCloneProgrammer=E={})).write=function(e){return function(t){var r=new J.FunctionImporter(t.getText());return B.FeatureProgrammer.write(e)(w(w({},x(e)(r)),{addition:function(n){return j(j([],P(H.IsProgrammer.write_function_statements(e)(r)(n)),!1),P(r.declare(t)),!1)}}))(r)}},n=function(e){return function(t){return function(r){return function(n,a,o){if(a.any||a.arrays.some(function(e){return e.type.value.any})||a.tuples.some(function(e){return!!e.type.elements.length&&e.type.elements.every(function(e){return e.any})}))return F.default.factory.createCallExpression(r.use("any"),void 0,[n]);var i,c,s,d,y,_,b=[];a.functional&&b.push({type:"functional",is:function(){return F.default.factory.createStrictEquality(F.default.factory.createStringLiteral("function"),F.default.factory.createTypeOfExpression(n))},value:function(){return F.default.factory.createIdentifier("undefined")}});var _loop_1=function(a){b.push({type:"tuple",is:function(){var t;return H.IsProgrammer.decode(e)(r)(n,((t=U.Metadata.initialize()).tuples.push(a),t),o)},value:function(){return u(e)(t)(r)(n,a,o)}})};try{for(var x=I(a.tuples),S=x.next();!S.done;S=x.next()){var T=S.value;_loop_1(T)}}catch(e){i={error:e}}finally{try{S&&!S.done&&(c=x.return)&&c.call(x)}finally{if(i)throw i.error}}a.arrays.length&&b.push({type:"array",is:function(){return M.ExpressionFactory.isArray(n)},value:function(){return g(e)(t)(r)(n,a.arrays,w(w({},o),{from:"array"}))}}),a.sets.length&&b.push({type:"set",is:function(){return M.ExpressionFactory.isInstanceOf("Set")(n)},value:function(){return p(e)(t)(r)(n,a.sets,w(w({},o),{from:"array"}))}}),a.maps.length&&b.push({type:"map",is:function(){return M.ExpressionFactory.isInstanceOf("Map")(n)},value:function(){return m(e)(t)(r)(n,a.maps,w(w({},o),{from:"array"}))}});var _loop_2=function(e){b.push({type:"native",is:function(){return M.ExpressionFactory.isInstanceOf(e)(n)},value:function(){return"Boolean"===e||"Number"===e||"String"===e?F.default.factory.createCallExpression(O.IdentifierFactory.access(n)("valueOf"),void 0,void 0):f(e)(n)}})};try{for(var E=I(a.natives),P=E.next();!P.done;P=E.next()){var j=P.value;_loop_2(j)}}catch(e){s={error:e}}finally{try{P&&!P.done&&(d=E.return)&&d.call(E)}finally{if(s)throw s.error}}a.objects.length&&b.push({type:"object",is:function(){return M.ExpressionFactory.isObject({checkNull:!0,checkArray:!1})(n)},value:function(){return v(t)(r)(n,a,w(w({},o),{from:"object"}))}});var A=n;try{for(var C=I(b.reverse()),N=C.next();!N.done;N=C.next()){var R=N.value;A=F.default.factory.createConditionalExpression(R.is(),void 0,R.value(),void 0,A)}}catch(e){y={error:e}}finally{try{N&&!N.done&&(_=C.return)&&_.call(C)}finally{if(y)throw y.error}}return F.default.factory.createAsExpression(A,L.TypeFactory.keyword("any"))}}}},a=function(e){return B.FeatureProgrammer.decode_object({trace:!1,path:!1,prefix:b})(e)},o=function(e){return function(t){return function(r,n,a){return n.type.recursive?F.default.factory.createCallExpression(F.default.factory.createIdentifier(t.useLocal("".concat(e.prefix,"a").concat(n.type.index))),void 0,B.FeatureProgrammer.argumentsArray(e)(w(w({},a),{source:"function",from:"array"}))(r)):i(e)(t)(r,n,a)}}},i=function(e){return function(t){return function(r,n,a){return B.FeatureProgrammer.decode_array(e)(t)(V.CloneJoiner.array)(r,n,a)}}},u=function(e){return function(t){return function(r){return function(n,a,o){return a.type.recursive?F.default.factory.createCallExpression(F.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,B.FeatureProgrammer.argumentsArray(t)(w(w({},o),{source:"function"}))(n)):c(e)(t)(r)(n,a.type,o)}}}},c=function(e){return function(t){return function(r){return function(a,o,i){var u=o.elements.filter(function(e){return null===e.rest}).map(function(o,u){return n(e)(t)(r)(F.default.factory.createElementAccessExpression(a,u),o,w(w({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(u,']"'):'"['.concat(u,']"')}))}),c=0===o.elements.length||null===o.elements.at(-1).rest?null:n(e)(t)(r)(F.default.factory.createCallExpression(O.IdentifierFactory.access(a)("slice"),void 0,[M.ExpressionFactory.number(o.elements.length-1)]),(0,W.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),w(w({},i),{start:o.elements.length-1}));return V.CloneJoiner.tuple(u,c)}}}},f=function(e){return function(t){return"Date"===e||"Uint8Array"===e||"Uint8ClampedArray"===e||"Uint16Array"===e||"Uint32Array"===e||"BigUint64Array"===e||"Int8Array"===e||"Int16Array"===e||"Int32Array"===e||"BigInt64Array"===e||"Float32Array"===e||"Float64Array"===e?s(e)(t):"ArrayBuffer"===e||"SharedArrayBuffer"===e?d(e)(t):"DataView"===e?y(t):F.default.factory.createCallExpression(F.default.factory.createIdentifier(e),void 0,[])}},s=function(e){return function(t){return F.default.factory.createNewExpression(F.default.factory.createIdentifier(e),void 0,[t])}},d=function(e){return function(t){return M.ExpressionFactory.selfCall(F.default.factory.createBlock([R.StatementFactory.constant("buffer",F.default.factory.createNewExpression(F.default.factory.createIdentifier(e),void 0,[O.IdentifierFactory.access(t)("byteLength")])),F.default.factory.createExpressionStatement(F.default.factory.createCallExpression(O.IdentifierFactory.access(F.default.factory.createNewExpression(F.default.factory.createIdentifier("Uint8Array"),void 0,[F.default.factory.createIdentifier("buffer")]))("set"),void 0,[F.default.factory.createNewExpression(F.default.factory.createIdentifier("Uint8Array"),void 0,[t])])),F.default.factory.createReturnStatement(F.default.factory.createIdentifier("buffer"))],!0))}},y=function(e){return F.default.factory.createNewExpression(F.default.factory.createIdentifier("DataView"),void 0,[O.IdentifierFactory.access(e)("buffer")])},p=function(e){return function(t){return function(r){return function(n,a,i){return F.default.factory.createCallExpression(G.UnionExplorer.set({checker:H.IsProgrammer.decode(e)(r),decoder:function(e,n,a){return F.default.factory.createNewExpression(F.default.factory.createIdentifier("Set"),[L.TypeFactory.keyword("any")],[o(t)(r)(e,n,a)])},empty:F.default.factory.createNewExpression(F.default.factory.createIdentifier("Set"),[L.TypeFactory.keyword("any")],[]),success:F.default.factory.createTrue(),failure:function(e,t){return T(r)(t)(e)}})([])(n,a,i),void 0,void 0)}}}},m=function(e){return function(t){return function(r){return function(n,a,i){return F.default.factory.createCallExpression(G.UnionExplorer.map({checker:function(t,n,a){var o=H.IsProgrammer.decode(e)(r);return F.default.factory.createLogicalAnd(o(F.default.factory.createElementAccessExpression(t,0),n[0],w(w({},a),{postfix:"".concat(a.postfix,"[0]")})),o(F.default.factory.createElementAccessExpression(t,1),n[1],w(w({},a),{postfix:"".concat(a.postfix,"[1]")})))},decoder:function(e,n,a){return F.default.factory.createNewExpression(F.default.factory.createIdentifier("Map"),[L.TypeFactory.keyword("any"),L.TypeFactory.keyword("any")],[o(t)(r)(e,n,a)])},empty:F.default.factory.createNewExpression(F.default.factory.createIdentifier("Map"),[L.TypeFactory.keyword("any"),L.TypeFactory.keyword("any")],[]),success:F.default.factory.createTrue(),failure:function(e,t){return T(r)(t)(e)}})([])(n,a,i),void 0,void 0)}}}},v=function(e){return function(t){return function(r,n,o){return 1===n.objects.length?a(t)(r,n.objects[0],o):F.default.factory.createCallExpression(F.default.factory.createIdentifier(t.useLocal("".concat(b,"u").concat(n.union_index))),void 0,B.FeatureProgrammer.argumentsArray(e)(o)(r))}}},g=function(e){return function(t){return function(r){return function(n,a,i){return _(t)(r)(G.UnionExplorer.array({checker:H.IsProgrammer.decode(e)(r),decoder:o(t)(r),empty:F.default.factory.createIdentifier("[]"),success:F.default.factory.createTrue(),failure:function(e,t){return T(r)(t)(e)}}))(n,a,i)}}}},_=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&F.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=w(w({},o),{source:"function",from:"array"}),F.default.factory.createCallExpression(F.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(B.FeatureProgrammer.parameterDeclarations(e)(L.TypeFactory.keyword("any"))(F.default.factory.createIdentifier("input")))(w(w({},o),{postfix:""}))(F.default.factory.createIdentifier("input"))})),void 0,B.FeatureProgrammer.argumentsArray(e)(o)(n))}}}},b="$c",x=function(e){return function(t){var r={types:{input:function(t,r){return F.default.factory.createTypeReferenceNode(null!=r?r:L.TypeFactory.getFullName(e.checker)(t))},output:function(t,r){return F.default.factory.createTypeReferenceNode("typia.Resolved<".concat(null!=r?r:L.TypeFactory.getFullName(e.checker)(t),">"))}},prefix:b,trace:!1,path:!1,initializer:S,decoder:function(){return n(e)(r)(t)},objector:{checker:function(){return H.IsProgrammer.decode(e)(t)},decoder:function(){return a(t)},joiner:V.CloneJoiner.object,unionizer:(0,Q.decode_union_object)(H.IsProgrammer.decode_object(e)(t))(a(t))(function(e){return e})(function(e,r){return T(t)(r)(e)}),failure:function(e,r){return T(t)(r)(e)}},generator:{arrays:function(){return function(e){return e.arrays().filter(function(e){return e.recursive}).map(function(e,n){return R.StatementFactory.constant("".concat(r.prefix,"a").concat(n),F.default.factory.createArrowFunction(void 0,void 0,B.FeatureProgrammer.parameterDeclarations(r)(L.TypeFactory.keyword("any"))(F.default.factory.createIdentifier("input")),L.TypeFactory.keyword("any"),void 0,i(r)(t)(F.default.factory.createIdentifier("input"),q.MetadataArray.create({type:e,tags:[]}),{tracable:r.trace,source:"function",from:"array",postfix:""})))})}},tuples:function(){var n;return n=t,function(t){return t.tuples().filter(function(e){return e.recursive}).map(function(t,a){return R.StatementFactory.constant("".concat(r.prefix,"t").concat(a),F.default.factory.createArrowFunction(void 0,void 0,B.FeatureProgrammer.parameterDeclarations(r)(L.TypeFactory.keyword("any"))(F.default.factory.createIdentifier("input")),L.TypeFactory.keyword("any"),void 0,c(e)(r)(n)(F.default.factory.createIdentifier("input"),t,{tracable:r.trace,source:"function",from:"array",postfix:""})))})}}}};return r}},S=function(e){return function(t){return function(r){var n=new C.MetadataCollection,a=N.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0,validate:function(e){var t=[];return e.natives.some(function(e){return"WeakSet"===e})?t.push("unable to clone WeakSet"):e.natives.some(function(e){return"WeakMap"===e})&&t.push("unable to clone WeakMap"),t}})(n)(r);if(!1===a.success)throw z.TransformerError.from("typia.misc.".concat(t.method))(a.errors);return[n,a.data]}}},T=function(e){return function(t){return function(r){return F.default.factory.createExpressionStatement(F.default.factory.createCallExpression(e.use("throws"),[],[F.default.factory.createObjectLiteralExpression([F.default.factory.createPropertyAssignment("expected",F.default.factory.createStringLiteral(t)),F.default.factory.createPropertyAssignment("value",r)],!0)]))}}}},94286:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(e)(t)(!1)(r,n)),c.StatementFactory.constant("clone",d.MiscCloneProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("clone"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},12311:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},x=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},T=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MiscPruneProgrammer=void 0;var E=T(r(55423)),w=r(73906),P=r(61387),j=r(92595),I=r(43390),A=r(6152),F=r(12301),M=r(3078),O=r(23879),C=r(63664),N=r(12114),R=r(63348),L=r(31959),U=r(3065),q=r(97144),z=r(39687),B=r(59714);(g||(t.MiscPruneProgrammer=g={})).write=function(e){return function(t){var r=new L.FunctionImporter(t.getText());return N.FeatureProgrammer.write(e)(_(_({},p(e)(r)),{addition:function(n){return x(x([],b(R.IsProgrammer.write_function_statements(e)(r)(n)),!1),b(r.declare(t)),!1)}}))(r)}},n=function(e){return function(t){return function(r){return function(n,a,o){if(!1===d(a))return E.default.factory.createBlock([]);var u,s,y,p,m=[],_loop_1=function(a){m.push({type:"tuple",is:function(){var t;return R.IsProgrammer.decode(e)(r)(n,((t=M.Metadata.initialize()).tuples.push(a),t),o)},value:function(){return i(e)(t)(r)(n,a,o)}})};try{for(var v=S(a.tuples.filter(function(e){return e.type.elements.some(function(e){var t;return d(null!==(t=e.rest)&&void 0!==t?t:e)})})),g=v.next();!g.done;g=v.next()){var b=g.value;_loop_1(b)}}catch(e){u={error:e}}finally{try{g&&!g.done&&(s=v.return)&&s.call(v)}finally{if(u)throw u.error}}if(a.arrays.filter(function(e){return d(e.type.value)}).length&&m.push({type:"array",is:function(){return w.ExpressionFactory.isArray(n)},value:function(){return f(e)(t)(r)(n,a.arrays,_(_({},o),{from:"array"}))}}),a.natives.length){var _loop_2=function(e){m.push({type:"native",is:function(){return w.ExpressionFactory.isInstanceOf(e)(n)},value:function(){return E.default.factory.createReturnStatement()}})};try{for(var x=S(a.natives),T=x.next();!T.done;T=x.next()){var P=T.value;_loop_2(P)}}catch(e){y={error:e}}finally{try{T&&!T.done&&(p=x.return)&&p.call(x)}finally{if(y)throw y.error}}}a.sets.length&&m.push({type:"set",is:function(){return w.ExpressionFactory.isInstanceOf("Set")(n)},value:function(){return E.default.factory.createReturnStatement()}}),a.maps.length&&m.push({type:"map",is:function(){return w.ExpressionFactory.isInstanceOf("Map")(n)},value:function(){return E.default.factory.createReturnStatement()}}),a.objects.length&&m.push({type:"object",is:function(){return w.ExpressionFactory.isObject({checkNull:!0,checkArray:!1})(n)},value:function(){return c(t)(r)(n,a,_(_({},o),{from:"object"}))}});var j=m.map(function(e){var t;return E.default.factory.createIfStatement(e.is(),(t=e.value(),E.default.isReturnStatement(t)||E.default.isBlock(t)?t:E.default.factory.createExpressionStatement(t)))});return E.default.factory.createBlock(j,!0)}}}},a=function(e){return N.FeatureProgrammer.decode_object({trace:!1,path:!1,prefix:y})(e)},o=function(e){return function(t){return function(r,n,a){return N.FeatureProgrammer.decode_array(e)(t)(U.PruneJoiner.array)(r,n,a)}}},i=function(e){return function(t){return function(r){return function(n,a,o){return a.type.recursive?E.default.factory.createCallExpression(E.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,N.FeatureProgrammer.argumentsArray(t)(_(_({},o),{source:"function"}))(n)):u(e)(t)(r)(n,a.type,o)}}}},u=function(e){return function(t){return function(r){return function(a,o,i){var u=o.elements.map(function(e,t){return[e,t]}).filter(function(e){var t=b(e,1)[0];return d(t)&&null===t.rest}).map(function(o){var u=b(o,2),c=u[0],f=u[1];return n(e)(t)(r)(E.default.factory.createElementAccessExpression(a,f),c,_(_({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(f,']"'):'"['.concat(f,']"')}))}),c=function(){if(0===o.elements.length)return null;var u=o.elements.at(-1).rest;return null===u||!1===d(u)?null:n(e)(t)(r)(E.default.factory.createCallExpression(P.IdentifierFactory.access(a)("slice"),void 0,[w.ExpressionFactory.number(o.elements.length-1)]),(0,B.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),_(_({},i),{start:o.elements.length-1}))}();return U.PruneJoiner.tuple(u,c)}}}},c=function(e){return function(t){return function(r,n,o){return 1===n.objects.length?a(t)(r,n.objects[0],o):E.default.factory.createCallExpression(E.default.factory.createIdentifier(t.useLocal("".concat(y,"u").concat(n.union_index))),void 0,N.FeatureProgrammer.argumentsArray(e)(o)(r))}}},f=function(e){return function(t){return function(r){return function(n,a,i){return s(t)(r)(q.UnionExplorer.array({checker:R.IsProgrammer.decode(e)(r),decoder:function(e,n,a){return n.type.recursive?E.default.factory.createCallExpression(E.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"a").concat(n.type.index))),void 0,N.FeatureProgrammer.argumentsArray(t)(_(_({},a),{source:"function",from:"array"}))(e)):o(t)(r)(e,n,a)},empty:E.default.factory.createStringLiteral("[]"),success:E.default.factory.createTrue(),failure:function(e,t){return v(r)(t)(e)}}))(n,a,i)}}}},s=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&E.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=_(_({},o),{source:"function",from:"array"}),E.default.factory.createCallExpression(E.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(N.FeatureProgrammer.parameterDeclarations(e)(F.TypeFactory.keyword("any"))(E.default.factory.createIdentifier("input")))(_(_({},o),{postfix:""}))(E.default.factory.createIdentifier("input"))})),void 0,N.FeatureProgrammer.argumentsArray(e)(o)(n))}}}},d=function(e){return!1===e.any&&(0!==e.objects.length||e.tuples.some(function(e){return!!e.type.elements.length&&e.type.elements.some(function(e){var t;return d(null!==(t=e.rest)&&void 0!==t?t:e)})})||e.arrays.some(function(e){return d(e.type.value)}))},y="$p",p=function(e){return function(t){var r={types:{input:function(t,r){return E.default.factory.createTypeReferenceNode(null!=r?r:F.TypeFactory.getFullName(e.checker)(t))},output:function(){return F.TypeFactory.keyword("void")}},prefix:y,trace:!1,path:!1,initializer:m,decoder:function(){return n(e)(r)(t)},objector:{checker:function(){return R.IsProgrammer.decode(e)(t)},decoder:function(){return a(t)},joiner:U.PruneJoiner.object,unionizer:(0,z.decode_union_object)(R.IsProgrammer.decode_object(e)(t))(a(t))(function(e){return e})(function(e,r){return v(t)(r)(e)}),failure:function(e,r){return v(t)(r)(e)}},generator:{arrays:function(){return function(e){return e.arrays().filter(function(e){return e.recursive}).map(function(e,n){return A.StatementFactory.constant("".concat(r.prefix,"a").concat(n),E.default.factory.createArrowFunction(void 0,void 0,N.FeatureProgrammer.parameterDeclarations(r)(F.TypeFactory.keyword("any"))(E.default.factory.createIdentifier("input")),F.TypeFactory.keyword("any"),void 0,o(r)(t)(E.default.factory.createIdentifier("input"),O.MetadataArray.create({type:e,tags:[]}),{tracable:r.trace,source:"function",from:"array",postfix:""})))})}},tuples:function(){var n;return n=t,function(t){return t.tuples().filter(function(e){return e.recursive}).map(function(t,a){return A.StatementFactory.constant("".concat(r.prefix,"t").concat(a),E.default.factory.createArrowFunction(void 0,void 0,N.FeatureProgrammer.parameterDeclarations(r)(F.TypeFactory.keyword("any"))(E.default.factory.createIdentifier("input")),F.TypeFactory.keyword("any"),void 0,u(e)(r)(n)(E.default.factory.createIdentifier("input"),t,{tracable:r.trace,source:"function",from:"array",postfix:""})))})}}}};return r}},m=function(e){return function(t){return function(r){var n=new j.MetadataCollection,a=I.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0})(n)(r);if(!1===a.success)throw C.TransformerError.from("typia.misc.".concat(t.method))(a.errors);return[n,a.data]}}},v=function(e){return function(t){return function(r){return E.default.factory.createExpressionStatement(E.default.factory.createCallExpression(e.use("throws"),[],[E.default.factory.createObjectLiteralExpression([E.default.factory.createPropertyAssignment("expected",E.default.factory.createStringLiteral(t)),E.default.factory.createPropertyAssignment("value",r)],!0)]))}}}},66129:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("clone",d.MiscCloneProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")]),f.TypeFactory.keyword("any"))),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("output.data"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("clone"),void 0,[i.default.factory.createIdentifier("input")])))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},90705:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("prune",d.MiscPruneProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createCallExpression(i.default.factory.createIdentifier("prune"),void 0,[i.default.factory.createIdentifier("input")]))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},60454:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},w=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},j=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NotationGeneralProgrammer=void 0;var I=j(r(55423)),A=r(73906),F=r(61387),M=r(92595),O=r(43390),C=r(6152),N=r(12301),R=r(3078),L=r(23879),U=r(63664),q=r(85422),z=r(12114),B=r(63348),H=r(31959),V=r(94492),J=r(97144),G=r(39687),Q=r(59714);(n=S||(t.NotationGeneralProgrammer=S={})).returnType=function(e){return function(t){return"typia.".concat(q.StringUtil.capitalize(e.name),"Case<").concat(t,">")}},n.write=function(e){return function(t){return function(r){var n=new H.FunctionImporter(r.getText());return z.FeatureProgrammer.write(t)(T(T({},_(e)(t)(n)),{addition:function(e){return w(w([],E(B.IsProgrammer.write_function_statements(t)(n)(e)),!1),E(n.declare(r)),!1)}}))(n)}}},a=function(e){return function(t){return function(r){return function(n,a,o){if(a.any||a.arrays.some(function(e){return e.type.value.any})||a.tuples.some(function(e){return!!e.type.elements.length&&e.type.elements.every(function(e){return e.any})}))return I.default.factory.createCallExpression(r.use("any"),void 0,[n]);var i,u,f,v,g,_,b=[];a.functional&&b.push({type:"functional",is:function(){return I.default.factory.createStrictEquality(I.default.factory.createStringLiteral("function"),I.default.factory.createTypeOfExpression(n))},value:function(){return I.default.factory.createIdentifier("undefined")}});var _loop_1=function(a){b.push({type:"tuple",is:function(){var t;return B.IsProgrammer.decode(e)(r)(n,((t=R.Metadata.initialize()).tuples.push(a),t),o)},value:function(){return c(e)(t)(r)(n,a,o)}})};try{for(var x=P(a.tuples),S=x.next();!S.done;S=x.next()){var E=S.value;_loop_1(E)}}catch(e){i={error:e}}finally{try{S&&!S.done&&(u=x.return)&&u.call(x)}finally{if(i)throw i.error}}a.arrays.length&&b.push({type:"array",is:function(){return A.ExpressionFactory.isArray(n)},value:function(){return m(e)(t)(r)(n,a.arrays,T(T({},o),{from:"array"}))}}),a.sets.length&&b.push({type:"set",is:function(){return A.ExpressionFactory.isInstanceOf("Set")(n)},value:function(){return d(e)(t)(r)(n,a.sets,T(T({},o),{from:"array"}))}}),a.maps.length&&b.push({type:"map",is:function(){return A.ExpressionFactory.isInstanceOf("Map")(n)},value:function(){return y(e)(t)(r)(n,a.maps,T(T({},o),{from:"array"}))}});var _loop_2=function(e){if("WeakSet"===e||"WeakMap"===e)return"continue";b.push({type:"native",is:function(){return A.ExpressionFactory.isInstanceOf(e)(n)},value:function(){return"Boolean"===e||"Number"===e||"String"===e?I.default.factory.createCallExpression(F.IdentifierFactory.access(n)("valueOf"),void 0,void 0):s(e)(n)}})};try{for(var w=P(a.natives),j=w.next();!j.done;j=w.next()){var M=j.value;_loop_2(M)}}catch(e){f={error:e}}finally{try{j&&!j.done&&(v=w.return)&&v.call(w)}finally{if(f)throw f.error}}a.objects.length&&b.push({type:"object",is:function(){return A.ExpressionFactory.isObject({checkNull:!0,checkArray:!1})(n)},value:function(){return p(t)(r)(n,a,T(T({},o),{from:"object"}))}});var O=n;try{for(var C=P(b.reverse()),L=C.next();!L.done;L=C.next()){var U=L.value;O=I.default.factory.createConditionalExpression(U.is(),void 0,U.value(),void 0,O)}}catch(e){g={error:e}}finally{try{L&&!L.done&&(_=C.return)&&_.call(C)}finally{if(g)throw g.error}}return I.default.factory.createAsExpression(O,N.TypeFactory.keyword("any"))}}}},o=function(e){return z.FeatureProgrammer.decode_object({trace:!1,path:!1,prefix:g})(e)},i=function(e){return function(t){return function(r,n,a){return n.type.recursive?I.default.factory.createCallExpression(I.default.factory.createIdentifier(t.useLocal("".concat(e.prefix,"a").concat(n.type.index))),void 0,z.FeatureProgrammer.argumentsArray(e)(T(T({},a),{source:"function",from:"array"}))(r)):u(e)(t)(r,n,a)}}},u=function(e){return function(t){return function(r,n,a){return z.FeatureProgrammer.decode_array(e)(t)(V.NotationJoiner.array)(r,n,a)}}},c=function(e){return function(t){return function(r){return function(n,a,o){return a.type.recursive?I.default.factory.createCallExpression(I.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,z.FeatureProgrammer.argumentsArray(t)(T(T({},o),{source:"function"}))(n)):f(e)(t)(r)(n,a.type,o)}}}},f=function(e){return function(t){return function(r){return function(n,o,i){var u=o.elements.filter(function(e){return null===e.rest}).map(function(o,u){return a(e)(t)(r)(I.default.factory.createElementAccessExpression(n,u),o,T(T({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(u,']"'):'"['.concat(u,']"')}))}),c=0===o.elements.length||null===o.elements.at(-1).rest?null:a(e)(t)(r)(I.default.factory.createCallExpression(F.IdentifierFactory.access(n)("slice"),void 0,[A.ExpressionFactory.number(o.elements.length-1)]),(0,Q.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),T(T({},i),{start:o.elements.length-1}));return V.NotationJoiner.tuple(u,c)}}}},s=function(e){return function(t){return"Date"===e?I.default.factory.createNewExpression(I.default.factory.createIdentifier(e),void 0,[t]):t}},d=function(e){return function(t){return function(r){return function(n,a,o){return I.default.factory.createCallExpression(J.UnionExplorer.set({checker:B.IsProgrammer.decode(e)(r),decoder:function(e,n,a){return I.default.factory.createNewExpression(I.default.factory.createIdentifier("Set"),[N.TypeFactory.keyword("any")],[i(t)(r)(e,n,a)])},empty:I.default.factory.createNewExpression(I.default.factory.createIdentifier("Set"),[N.TypeFactory.keyword("any")],[]),success:I.default.factory.createTrue(),failure:function(e,t){return x(r)(t)(e)}})([])(n,a,o),void 0,void 0)}}}},y=function(e){return function(t){return function(r){return function(n,a,o){return I.default.factory.createCallExpression(J.UnionExplorer.map({checker:function(t,n,a){var o=B.IsProgrammer.decode(e)(r);return I.default.factory.createLogicalAnd(o(I.default.factory.createElementAccessExpression(t,0),n[0],T(T({},a),{postfix:"".concat(a.postfix,"[0]")})),o(I.default.factory.createElementAccessExpression(t,1),n[1],T(T({},a),{postfix:"".concat(a.postfix,"[1]")})))},decoder:function(e,n,a){return I.default.factory.createNewExpression(I.default.factory.createIdentifier("Map"),[N.TypeFactory.keyword("any"),N.TypeFactory.keyword("any")],[i(t)(r)(e,n,a)])},empty:I.default.factory.createNewExpression(I.default.factory.createIdentifier("Map"),[N.TypeFactory.keyword("any"),N.TypeFactory.keyword("any")],[]),success:I.default.factory.createTrue(),failure:function(e,t){return x(r)(t)(e)}})([])(n,a,o),void 0,void 0)}}}},p=function(e){return function(t){return function(r,n,a){return 1===n.objects.length?o(t)(r,n.objects[0],a):I.default.factory.createCallExpression(I.default.factory.createIdentifier(t.useLocal("".concat(g,"u").concat(n.union_index))),void 0,z.FeatureProgrammer.argumentsArray(e)(a)(r))}}},m=function(e){return function(t){return function(r){return function(n,a,o){return v(t)(r)(J.UnionExplorer.array({checker:B.IsProgrammer.decode(e)(r),decoder:i(t)(r),empty:I.default.factory.createIdentifier("[]"),success:I.default.factory.createTrue(),failure:function(e,t){return x(r)(t)(e)}}))(n,a,o)}}}},v=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&I.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=T(T({},o),{source:"function",from:"array"}),I.default.factory.createCallExpression(I.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(z.FeatureProgrammer.parameterDeclarations(e)(N.TypeFactory.keyword("any"))(I.default.factory.createIdentifier("input")))(T(T({},o),{postfix:""}))(I.default.factory.createIdentifier("input"))})),void 0,z.FeatureProgrammer.argumentsArray(e)(o)(n))}}}},g="$c",_=function(e){return function(t){return function(r){var i={types:{input:function(e,r){return I.default.factory.createTypeReferenceNode(null!=r?r:N.TypeFactory.getFullName(t.checker)(e))},output:function(r,a){return I.default.factory.createTypeReferenceNode(n.returnType(e)(null!=a?a:N.TypeFactory.getFullName(t.checker)(r)))}},prefix:g,trace:!1,path:!1,initializer:b,decoder:function(){return a(t)(i)(r)},objector:{checker:function(){return B.IsProgrammer.decode(t)(r)},decoder:function(){return o(r)},joiner:V.NotationJoiner.object(e),unionizer:(0,G.decode_union_object)(B.IsProgrammer.decode_object(t)(r))(o(r))(function(e){return e})(function(e,t){return x(r)(t)(e)}),failure:function(e,t){return x(r)(t)(e)}},generator:{arrays:function(){return function(e){return e.arrays().filter(function(e){return e.recursive}).map(function(e,t){return C.StatementFactory.constant("".concat(i.prefix,"a").concat(t),I.default.factory.createArrowFunction(void 0,void 0,z.FeatureProgrammer.parameterDeclarations(i)(N.TypeFactory.keyword("any"))(I.default.factory.createIdentifier("input")),N.TypeFactory.keyword("any"),void 0,u(i)(r)(I.default.factory.createIdentifier("input"),L.MetadataArray.create({type:e,tags:[]}),{tracable:i.trace,source:"function",from:"array",postfix:""})))})}},tuples:function(){var e;return e=r,function(r){return r.tuples().filter(function(e){return e.recursive}).map(function(r,n){return C.StatementFactory.constant("".concat(i.prefix,"t").concat(n),I.default.factory.createArrowFunction(void 0,void 0,z.FeatureProgrammer.parameterDeclarations(i)(N.TypeFactory.keyword("any"))(I.default.factory.createIdentifier("input")),N.TypeFactory.keyword("any"),void 0,f(t)(i)(e)(I.default.factory.createIdentifier("input"),r,{tracable:i.trace,source:"function",from:"array",postfix:""})))})}}}};return i}}},b=function(e){return function(t){return function(r){var n=new M.MetadataCollection,a=O.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0})(n)(r);if(!1===a.success)throw U.TransformerError.from("typia.misc.".concat(t.method))(a.errors);return[n,a.data]}}},x=function(e){return function(t){return function(r){return I.default.factory.createExpressionStatement(I.default.factory.createCallExpression(e.use("throws"),[],[I.default.factory.createObjectLiteralExpression([I.default.factory.createPropertyAssignment("expected",I.default.factory.createStringLiteral(t)),I.default.factory.createPropertyAssignment("value",r)],!0)]))}}}},97172:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},t),{options:a(a({},t.options),{functional:!1,numeric:!0})}))(r)(!1)(n,o)),c.StatementFactory.constant("general",d.NotationGeneralProgrammer.write(e)(a(a({},t),{options:a(a({},t.options),{functional:!1,numeric:!1})}))(r)(n,o)),c.StatementFactory.constant("output",i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")]),f.TypeFactory.keyword("any"))),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("output.data"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("general"),void 0,[i.default.factory.createIdentifier("input")])))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}}},38162:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("decode",d.ProtobufDecodeProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("assert",s.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("output")]),f.TypeFactory.keyword("any")))]))}}}},77717:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},_=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},x=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ProtobufDecodeProgrammer=void 0;var S=x(r(55423)),T=r(73906),E=r(61387),w=r(92595),P=r(43390),j=r(74123),I=r(6152),A=r(12301),F=r(3078),M=r(45041),O=r(56724),C=r(31959),N=r(96188);(m||(t.ProtobufDecodeProgrammer=m={})).write=function(e){return function(t){return function(r,a){var o=new C.FunctionImporter(t.getText()),i=new w.MetadataCollection,u=j.ProtobufFactory.metadata(t.getText())(e.checker,e.context)(i)(r),c=i.objects().filter(function(e){return N.ProtobufUtil.isStaticObject(e)}).map(function(t){return I.StatementFactory.constant("".concat(R,"o").concat(t.index),n(e)(o)(t))}),f=I.StatementFactory.constant("reader",S.default.factory.createNewExpression(o.use("Reader"),void 0,[S.default.factory.createIdentifier("input")]));return S.default.factory.createArrowFunction(void 0,void 0,[E.IdentifierFactory.parameter("input",S.default.factory.createTypeReferenceNode("Uint8Array"))],S.default.factory.createTypeReferenceNode("typia.Resolved<".concat(null!=a?a:A.TypeFactory.getFullName(e.checker)(r),">")),void 0,S.default.factory.createBlock(_(_(_([],g(o.declare(t)),!1),g(c),!1),[f,S.default.factory.createReturnStatement(s(!0)(u.objects[0]))],!1),!0))}}},n=function(e){return function(t){return function(r){return S.default.factory.createArrowFunction(void 0,void 0,[E.IdentifierFactory.parameter("reader"),E.IdentifierFactory.parameter("length",A.TypeFactory.keyword("number"),T.ExpressionFactory.number(-1))],A.TypeFactory.keyword("any"),void 0,S.default.factory.createBlock(_(_([S.default.factory.createExpressionStatement(S.default.factory.createBinaryExpression(S.default.factory.createIdentifier("length"),S.default.factory.createToken(S.default.SyntaxKind.EqualsToken),S.default.factory.createConditionalExpression(S.default.factory.createLessThan(S.default.factory.createIdentifier("length"),T.ExpressionFactory.number(0)),void 0,S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("size"),void 0,void 0),void 0,S.default.factory.createAdd(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0),S.default.factory.createIdentifier("length")))))],g(a(e)(t)({condition:S.default.factory.createLessThan(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0),S.default.factory.createIdentifier("length")),tag:"tag",output:"output"})(r.properties)),!1),[S.default.factory.createReturnStatement(S.default.factory.createIdentifier("output"))],!1),!0))}}},a=function(e){return function(t){return function(r){return function(n){var a=1,u=n.map(function(n){var o=i(e)(t)(a)(E.IdentifierFactory.access(S.default.factory.createIdentifier(r.output))(n.key.getSoleLiteral()),n.value);return a+=N.ProtobufUtil.size(n.value),o}).flat();return[I.StatementFactory.constant(r.output,S.default.factory.createAsExpression(S.default.factory.createObjectLiteralExpression(n.filter(function(t){return!(!0===e.compilerOptions.exactOptionalPropertyTypes&&!0===t.value.optional)}).map(function(e){return S.default.factory.createPropertyAssignment(E.IdentifierFactory.identifier(e.key.getSoleLiteral()),o(e.value))}),!0),A.TypeFactory.keyword("any"))),S.default.factory.createWhileStatement(r.condition,S.default.factory.createBlock([I.StatementFactory.constant(r.tag,S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("uint32"),void 0,void 0)),S.default.factory.createSwitchStatement(S.default.factory.createUnsignedRightShift(S.default.factory.createIdentifier(r.tag),T.ExpressionFactory.number(3)),S.default.factory.createCaseBlock(_(_([],g(u),!1),[S.default.factory.createDefaultClause([S.default.factory.createExpressionStatement(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("skipType"),void 0,[S.default.factory.createBitwiseAnd(S.default.factory.createIdentifier(r.tag),T.ExpressionFactory.number(7))])),S.default.factory.createBreakStatement()])],!1)))]))]}}}},o=function(e){return S.default.factory.createAsExpression(e.nullable?S.default.factory.createNull():!1===e.isRequired()?S.default.factory.createIdentifier("undefined"):e.arrays.length?S.default.factory.createArrayLiteralExpression():e.maps.length?S.default.factory.createNewExpression(S.default.factory.createIdentifier("Map"),void 0,[]):e.natives.length?S.default.factory.createNewExpression(S.default.factory.createIdentifier("Uint8Array"),void 0,[]):e.atomics.some(function(e){return"string"===e.type})||e.constants.some(function(e){return"string"===e.type&&e.values.some(function(e){return""===e})})||e.templates.some(function(e){return 1===e.length&&"string"===e[0].getName()})?S.default.factory.createStringLiteral(""):e.objects.length&&e.objects.some(function(e){return!N.ProtobufUtil.isStaticObject(e)})?S.default.factory.createObjectLiteralExpression():S.default.factory.createIdentifier("undefined"),A.TypeFactory.keyword("any"))},i=function(e){return function(t){return function(r){return function(n,a){var o,i,p,m,v,x,E,w,P=[],emplace=function(e){return function(t){return P.push(S.default.factory.createCaseClause(T.ExpressionFactory.number(r++),Array.isArray(t)?_(_([S.default.factory.createExpressionStatement(S.default.factory.createIdentifier("// type: ".concat(e)))],g(t),!1),[S.default.factory.createBreakStatement()],!1):[S.default.factory.createExpressionStatement(S.default.factory.createIdentifier("// ".concat(e))),S.default.factory.createExpressionStatement(S.default.factory.createBinaryExpression(n,S.default.factory.createToken(S.default.SyntaxKind.EqualsToken),t)),S.default.factory.createBreakStatement()]))}},j=a.isRequired()&&!a.nullable;try{for(var I=b(N.ProtobufUtil.getAtomics(a)),A=I.next();!A.done;A=I.next()){var F=A.value;emplace(F)(u(a)(F))}}catch(e){o={error:e}}finally{try{A&&!A.done&&(i=I.return)&&i.call(I)}finally{if(o)throw o.error}}a.natives.length&&emplace("bytes")(c("bytes"));try{for(var M=b(a.arrays),O=M.next();!O.done;O=M.next()){var C=O.value;emplace("Array<".concat(C.type.value.getName(),">"))(f(n,C,j))}}catch(e){p={error:e}}finally{try{O&&!O.done&&(m=M.return)&&m.call(M)}finally{if(p)throw p.error}}try{for(var R=b(a.maps),L=R.next();!L.done;L=R.next()){var U=L.value;emplace("Map"))(y(e)(t)(n,U,j))}}catch(e){v={error:e}}finally{try{L&&!L.done&&(x=R.return)&&x.call(R)}finally{if(v)throw v.error}}try{for(var q=b(a.objects),z=q.next();!z.done;z=q.next()){var B=z.value;emplace(B.name)(N.ProtobufUtil.isStaticObject(B)?s(!1)(B):d(e)(t)(n,B,j))}}catch(e){E={error:e}}finally{try{z&&!z.done&&(w=q.return)&&w.call(q)}finally{if(E)throw E.error}}return P}}}},u=function(e){return function(t){if("string"===t)return c("string");var r=S.default.factory.createCallExpression(E.IdentifierFactory.access(S.default.factory.createIdentifier("reader"))(t),void 0,void 0);return"int64"!==t&&"uint64"!==t?r:N.ProtobufUtil.getNumbers(e).some(function(e){return e===t})?S.default.factory.createCallExpression(S.default.factory.createIdentifier("Number"),void 0,[r]):r}},c=function(e){return S.default.factory.createCallExpression(E.IdentifierFactory.access(S.default.factory.createIdentifier("reader"))(e),void 0,void 0)},f=function(e,t,r){var n=[];!1===r&&n.push(S.default.factory.createBinaryExpression(e,S.default.factory.createToken(S.default.SyntaxKind.QuestionQuestionEqualsToken),S.default.factory.createAsExpression(S.default.factory.createArrayLiteralExpression(),S.default.factory.createTypeReferenceNode("any[]"))));var a=N.ProtobufUtil.getAtomics(t.type.value),o=a.length?function(){return u(t.type.value)(a[0])}:t.type.value.natives.length?function(){return c("bytes")}:t.type.value.objects.length?function(){return s(!1)(t.type.value.objects[0])}:null;if(null===o)throw Error("Never reach here.");return a.length&&"string"!==a[0]?n.push(S.default.factory.createIfStatement(S.default.factory.createStrictEquality(T.ExpressionFactory.number(2),S.default.factory.createBitwiseAnd(S.default.factory.createIdentifier("tag"),T.ExpressionFactory.number(7))),S.default.factory.createBlock([I.StatementFactory.constant("piece",S.default.factory.createAdd(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("uint32"),void 0,void 0),S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0))),S.default.factory.createWhileStatement(S.default.factory.createLessThan(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0),S.default.factory.createIdentifier("piece")),S.default.factory.createExpressionStatement(S.default.factory.createCallExpression(E.IdentifierFactory.access(e)("push"),void 0,[o()])))],!0),S.default.factory.createExpressionStatement(S.default.factory.createCallExpression(E.IdentifierFactory.access(e)("push"),void 0,[o()])))):n.push(S.default.factory.createCallExpression(E.IdentifierFactory.access(e)("push"),void 0,[o()])),n.map(function(e){return S.default.isExpression(e)?S.default.factory.createExpressionStatement(e):e})},s=function(e){return function(t){return S.default.factory.createCallExpression(S.default.factory.createIdentifier("".concat(R,"o").concat(t.index)),void 0,_([S.default.factory.createIdentifier("reader")],g(e?[]:[S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("uint32"),void 0,void 0)]),!1))}},d=function(e){return function(t){return function(r,n,a){var o,i=n.properties[0];return p(e)(t)({initializer:function(){return S.default.factory.createBinaryExpression(r,S.default.factory.createToken(S.default.SyntaxKind.QuestionQuestionEqualsToken),S.default.factory.createObjectLiteralExpression())},setter:function(){return S.default.factory.createBinaryExpression(S.default.factory.createElementAccessExpression(r,S.default.factory.createIdentifier("entry.key")),S.default.factory.createToken(S.default.SyntaxKind.EqualsToken),S.default.factory.createIdentifier("entry.value"))}})(O.MetadataProperty.create(v(v({},i),{key:((o=F.Metadata.initialize()).atomics.push(M.MetadataAtomic.create({type:"string",tags:[]})),o)})),a)}}},y=function(e){return function(t){return function(r,n,a){return p(e)(t)({initializer:function(){return S.default.factory.createBinaryExpression(r,S.default.factory.createToken(S.default.SyntaxKind.QuestionQuestionEqualsToken),S.default.factory.createNewExpression(S.default.factory.createIdentifier("Map"),[A.TypeFactory.keyword("any"),A.TypeFactory.keyword("any")],[]))},setter:function(){return S.default.factory.createCallExpression(E.IdentifierFactory.access(r)("set"),void 0,[S.default.factory.createIdentifier("entry.key"),S.default.factory.createIdentifier("entry.value")])}})(n,a)}}},p=function(e){return function(t){return function(r){return function(n,o){var i=_(_(_(_([],g(o?[]:[S.default.factory.createExpressionStatement(r.initializer())]),!1),[I.StatementFactory.constant("piece",S.default.factory.createAdd(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("uint32"),void 0,void 0),S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0)))],!1),g(a(e)(t)({condition:S.default.factory.createLessThan(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0),S.default.factory.createIdentifier("piece")),tag:"kind",output:"entry"})([O.MetadataProperty.create({key:P.MetadataFactory.soleLiteral("key"),value:n.key,description:null,jsDocTags:[]}),O.MetadataProperty.create({key:P.MetadataFactory.soleLiteral("value"),value:n.value,description:null,jsDocTags:[]})])),!1),[S.default.factory.createExpressionStatement(r.setter())],!1);return[S.default.factory.createExpressionStatement(T.ExpressionFactory.selfCall(S.default.factory.createBlock(i,!0)))]}}}};var R="$pd",READER=function(){return S.default.factory.createIdentifier("reader")}},84282:function(e,t,r){"use strict";var n,a,o,i,u,c,f,s,d,y,p,m,v,g,_,b,x,S,T=this&&this.__assign||function(){return(T=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},w=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},j=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ProtobufEncodeProgrammer=void 0;var I=j(r(55423)),A=r(73906),F=r(61387),M=r(92595),O=r(84981),C=r(74123),N=r(6152),R=r(12301),L=r(3078),U=r(45041),q=r(56724),z=r(63348),B=r(31959),H=r(96188),V=r(99560),J=r(39687);(S||(t.ProtobufEncodeProgrammer=S={})).write=function(e){return function(t){return function(r,a){var o=new B.FunctionImporter(t.getText()),i=new M.MetadataCollection,u=C.ProtobufFactory.metadata(t.getText())(e.checker,e.context)(i)(r),callEncoder=function(e){return function(t){return N.StatementFactory.constant(e,I.default.factory.createCallExpression(I.default.factory.createIdentifier("encoder"),void 0,[t]))}},c=[N.StatementFactory.constant("encoder",n(e)(o)(i)(u)),callEncoder("sizer")(I.default.factory.createNewExpression(o.use("Sizer"),void 0,[])),callEncoder("writer")(I.default.factory.createNewExpression(o.use("Writer"),void 0,[I.default.factory.createIdentifier("sizer")])),I.default.factory.createReturnStatement(I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("buffer"),void 0,void 0))];return I.default.factory.createArrowFunction(void 0,void 0,[F.IdentifierFactory.parameter("input",I.default.factory.createTypeReferenceNode(null!=a?a:R.TypeFactory.getFullName(e.checker)(r)))],I.default.factory.createTypeReferenceNode("Uint8Array"),void 0,I.default.factory.createBlock(w(w([],E(o.declare(t,!1)),!1),E(c),!1),!0))}}},n=function(e){return function(t){return function(r){return function(n){var i=r.objects().filter(function(e){return H.ProtobufUtil.isStaticObject(e)}).map(function(r){return N.StatementFactory.constant("".concat(b,"o").concat(r.index),a(e)(t)(I.default.factory.createIdentifier("input"),r,{source:"function",from:"object",tracable:!1,postfix:""}))}),u=o(e)(t)(null)(I.default.factory.createIdentifier("input"),n,{source:"top",from:"top",tracable:!1,postfix:""});return I.default.factory.createArrowFunction(void 0,void 0,[F.IdentifierFactory.parameter("writer")],R.TypeFactory.keyword("any"),void 0,I.default.factory.createBlock(w(w(w(w(w([],E(t.declareUnions()),!1),E(i),!1),E(z.IsProgrammer.write_function_statements(e)(t)(r)),!1),E(u.statements),!1),[I.default.factory.createReturnStatement(I.default.factory.createIdentifier("writer"))],!1),!0))}}}},a=function(e){return function(t){return function(r,n,a){var i=1,u=n.properties.map(function(n){var u=o(e)(t)(i)(F.IdentifierFactory.access(r)(n.key.getSoleLiteral()),n.value,a);return i+=H.ProtobufUtil.size(n.value),w([I.default.factory.createExpressionStatement(I.default.factory.createIdentifier('// property "'.concat(n.key.getSoleLiteral(),'"')))],E(u.statements),!1)}).flat();return I.default.factory.createArrowFunction(void 0,void 0,[F.IdentifierFactory.parameter("input")],R.TypeFactory.keyword("any"),void 0,I.default.factory.createBlock(u,!0))}}},o=function(e){return function(t){return function(r){return function(n,a,o){var c,m,v=a.isRequired()&&!1===a.nullable?function(e){return e}:!1===a.isRequired()&&!0===a.nullable?function(e){return I.default.factory.createBlock([I.default.factory.createIfStatement(I.default.factory.createLogicalAnd(I.default.factory.createStrictInequality(I.default.factory.createIdentifier("undefined"),n),I.default.factory.createStrictInequality(I.default.factory.createNull(),n)),e)],!0)}:!1===a.isRequired()?function(e){return I.default.factory.createBlock([I.default.factory.createIfStatement(I.default.factory.createStrictInequality(I.default.factory.createIdentifier("undefined"),n),e)],!0)}:function(e){return I.default.factory.createBlock([I.default.factory.createIfStatement(I.default.factory.createStrictInequality(I.default.factory.createNull(),n),e)],!0)},g=[],b=H.ProtobufUtil.getNumbers(a),x=H.ProtobufUtil.getBigints(a),_loop_1=function(e){"bool"===e?g.push({type:"bool",is:function(){return I.default.factory.createStrictEquality(I.default.factory.createStringLiteral("boolean"),I.default.factory.createTypeOfExpression(n))},value:function(e){return s(e)(n)}}):"int32"===e||"uint32"===e||"float"===e||"double"===e?g.push(d(b)(e)(n)):"int64"===e||"uint64"===e?b.some(function(t){return t===e})?g.push(d(b)(e)(n)):g.push(y(x)(e)(n)):"string"===e&&g.push({type:"string",is:function(){return I.default.factory.createStrictEquality(I.default.factory.createStringLiteral("string"),I.default.factory.createTypeOfExpression(n))},value:function(e){return p("string")(e)(n)}})};try{for(var S=P(H.ProtobufUtil.getAtomics(a)),E=S.next();!E.done;E=S.next()){var w=E.value;_loop_1(w)}}catch(e){c={error:e}}finally{try{E&&!E.done&&(m=S.return)&&m.call(S)}finally{if(c)throw c.error}}return v((a.natives.length&&g.push({type:"bytes",is:function(){return A.ExpressionFactory.isInstanceOf("Uint8Array")(n)},value:function(e){return p("bytes")(e)(n)}}),a.arrays.length&&g.push({type:"array",is:function(){return A.ExpressionFactory.isArray(n)},value:function(r){return f(e)(t)(r)(n,a.arrays[0],T(T({},o),{from:"array"}))}}),a.maps.length&&g.push({type:"map",is:function(){return A.ExpressionFactory.isInstanceOf("Map")(n)},value:function(r){return u(e)(t)(r)(n,a.maps[0],T(T({},o),{from:"array"}))}}),a.objects.length&&g.push({type:"object",is:function(){return A.ExpressionFactory.isObject({checkNull:!0,checkArray:!1})(n)},value:function(r){return _(e)(t)(0)(r)(n,a.objects,T(T({},o),{from:"object"}))}}),1===g.length)?g[0].value(r):i(t)(r)(g)(a.getName())(n))}}}},i=function(e){return function(t){return function(r){return function(n){return function(a){return I.default.factory.createBlock([r.map(function(o,i){return I.default.factory.createIfStatement(o.is(),o.value(t?t+i:null),i===r.length-1?x(e)(n)(a):void 0)}).reverse().reduce(function(e,t){return I.default.factory.createIfStatement(t.expression,t.thenStatement,e)})],!0)}}}}},u=function(e){return function(t){return function(r){return function(n,a,i){var u=w(w(w([I.default.factory.createExpressionStatement(m(2)(r)),I.default.factory.createExpressionStatement(I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("fork"),void 0,void 0))],E(o(e)(t)(1)(I.default.factory.createIdentifier("key"),a.key,i).statements),!1),E(o(e)(t)(2)(I.default.factory.createIdentifier("value"),a.value,i).statements),!1),[I.default.factory.createExpressionStatement(I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("ldelim"),void 0,void 0))],!1);return I.default.factory.createBlock([I.default.factory.createForOfStatement(void 0,N.StatementFactory.entry("key")("value"),n,I.default.factory.createBlock(u))],!0)}}}},c=function(e){return function(t){return function(r){return function(n,a,o){var i,c=a.properties[0];return!1===c.key.isSoleLiteral()?u(e)(t)(r)(I.default.factory.createCallExpression(I.default.factory.createIdentifier("Object.entries"),[],[n]),q.MetadataProperty.create(T(T({},c),{key:((i=L.Metadata.initialize()).atomics.push(U.MetadataAtomic.create({type:"string",tags:[]})),i)})),o):I.default.factory.createBlock(w(w(w([I.default.factory.createIdentifier("//".concat(null!==r?" ".concat(r," -> "):"").concat(a.name))],E(null!==r?[m(2)(r),I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("fork"),void 0,void 0)]:[]),!1),[I.default.factory.createCallExpression(I.default.factory.createIdentifier(t.useLocal("".concat(b,"o").concat(a.index))),[],[n])],!1),E(null!==r?[I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("ldelim"),void 0,void 0)]:[]),!1).map(function(e){return I.default.factory.createExpressionStatement(e)}),!0)}}}},f=function(e){return function(t){return function(r){return function(n,a,i){var u,c=v(a.type.value),forLoop=function(r){return I.default.factory.createForOfStatement(void 0,I.default.factory.createVariableDeclarationList([I.default.factory.createVariableDeclaration("elem")],I.default.NodeFlags.Const),n,o(e)(t)(r)(I.default.factory.createIdentifier("elem"),a.type.value,i))};return u=2===c?I.default.factory.createBlock([forLoop(r)],!0):I.default.factory.createBlock([I.default.factory.createExpressionStatement(m(2)(r)),I.default.factory.createExpressionStatement(I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("fork"),void 0,void 0)),forLoop(null),I.default.factory.createExpressionStatement(I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("ldelim"),void 0,void 0))],!0),I.default.factory.createBlock([I.default.factory.createIfStatement(I.default.factory.createStrictInequality(A.ExpressionFactory.number(0),F.IdentifierFactory.access(n)("length")),u)],!0)}}}},s=function(e){return function(t){return I.default.factory.createBlock(w(w([],E(null!==e?[m(0)(e)]:[]),!1),[I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("bool"),void 0,[t])],!1).map(function(e){return I.default.factory.createExpressionStatement(e)}),!0)}},d=function(e){return function(t){return function(r){return{type:t,is:function(){return 1===e.length?I.default.factory.createStrictEquality(I.default.factory.createStringLiteral("number"),I.default.factory.createTypeOfExpression(r)):I.default.factory.createLogicalAnd(I.default.factory.createStrictEquality(I.default.factory.createStringLiteral("number"),I.default.factory.createTypeOfExpression(r)),O.NumericRangeFactory.number(t)(r))},value:function(e){return I.default.factory.createBlock(w(w([],E(null!==e?[m(g(t))(e)]:[]),!1),[I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())(t),void 0,[r])],!1).map(function(e){return I.default.factory.createExpressionStatement(e)}),!0)}}}}},y=function(e){return function(t){return function(r){return{type:t,is:function(){return 1===e.length?I.default.factory.createStrictEquality(I.default.factory.createStringLiteral("bigint"),I.default.factory.createTypeOfExpression(r)):I.default.factory.createLogicalAnd(I.default.factory.createStrictEquality(I.default.factory.createStringLiteral("bigint"),I.default.factory.createTypeOfExpression(r)),O.NumericRangeFactory.bigint(t)(r))},value:function(e){return I.default.factory.createBlock(w(w([],E(null!==e?[m(0)(e)]:[]),!1),[I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())(t),void 0,[r])],!1).map(function(e){return I.default.factory.createExpressionStatement(e)}),!0)}}}}},p=function(e){return function(t){return function(r){return I.default.factory.createBlock([m(2)(t),I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())(e),void 0,[r])].map(function(e){return I.default.factory.createExpressionStatement(e)}),!0)}}},m=function(e){return function(t){return I.default.factory.createCallExpression(F.IdentifierFactory.access(WRITER())("uint32"),void 0,[A.ExpressionFactory.number(t<<3|e)])}},v=function(e){if(e.arrays.length||e.objects.length||e.maps.length||e.natives.length)return 2;var t=H.ProtobufUtil.getAtomics(e)[0];return"string"===t?2:"bool"===t||"int32"===t||"uint32"===t||"int64"===t||"uint64"===t?0:"float"===t?5:1},g=function(e){return"double"===e?1:"float"===e?5:0},_=function(e){return function(t){return function(r){return function(n){return function(a,o,i,u){if(1===o.length)return c(e)(t)(u?u.get(o[0]):n)(a,o[0],i);var f="(".concat(o.map(function(e){return e.name}).join(" | "),")"),s=V.UnionPredicator.object(o);if(null!=u||(u=new Map(o.map(function(e,t){return[e,n+t]}))),0===s.length){var d=(0,J.decode_union_object)(z.IsProgrammer.decode_object(e)(t))(function(r,n,a){return A.ExpressionFactory.selfCall(c(e)(t)(u.get(n))(r,n,a))})(function(e){return e})(function(e,r){return x(t)(r)(e)})(a,o,i);return N.StatementFactory.block(d)}var y=o.filter(function(e){return void 0===s.find(function(t){return t.object===e})}),p=s.filter(function(e){return null!==e.property.key.getSoleLiteral()}).map(function(o,s,d){var p=o.property.key.getSoleLiteral(),m=F.IdentifierFactory.access(a)(p),v=o.neighbour?z.IsProgrammer.decode(e)(t)(m,o.property.value,T(T({},i),{tracable:!1,postfix:F.IdentifierFactory.postfix(p)})):A.ExpressionFactory.isRequired(m);return I.default.factory.createIfStatement(v,I.default.factory.createExpressionStatement(A.ExpressionFactory.selfCall(c(e)(t)(u.get(o.object))(a,o.object,i))),s===d.length-1?y.length?I.default.factory.createExpressionStatement(A.ExpressionFactory.selfCall(_(e)(t)(r+1)(n)(a,y,i,u))):x(t)(f)(a):void 0)}).reverse().reduce(function(e,t){return I.default.factory.createIfStatement(t.expression,t.thenStatement,e)});return I.default.factory.createBlock([p],!0)}}}}},b="$pe",x=function(e){return function(t){return function(r){return I.default.factory.createExpressionStatement(I.default.factory.createCallExpression(e.use("throws"),[],[I.default.factory.createObjectLiteralExpression([I.default.factory.createPropertyAssignment("expected",I.default.factory.createStringLiteral(t)),I.default.factory.createPropertyAssignment("value",r)],!0)]))}}};var WRITER=function(){return I.default.factory.createIdentifier("writer")}},49466:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.ProtobufDecodeProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("output")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},8266:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},y=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},p=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")}};var P=" ".repeat(4)},87500:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.ProtobufDecodeProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},87229:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("encode",d.ProtobufEncodeProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")]),f.TypeFactory.keyword("any"))),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("output.data"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("encode"),void 0,[i.default.factory.createIdentifier("input")])))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},3078:function(e,t,r){"use strict";var n,a=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a1},Metadata.prototype.getSoleLiteral=function(){return 1===this.size()&&1===this.constants.length&&"string"===this.constants[0].type&&1===this.constants[0].values.length?this.constants[0].values[0]:null},Metadata.prototype.isSoleLiteral=function(){return null!==this.getSoleLiteral()},Metadata.prototype.isParentResolved=function(){return this.parent_resolved_},Metadata}();t.Metadata=m,(n=m||(t.Metadata=m={})).intersects=function(e,t){if(e.any||t.any||!1===e.isRequired()&&!1===t.isRequired()||!0===e.nullable&&!0===t.nullable||!0===e.functional&&!0===t.functional||e.arrays.length&&t.arrays.length||e.tuples.length&&t.tuples.length||e.objects.length&&t.objects.length||e.aliases.length&&t.aliases.length||e.natives.length&&t.natives.length&&e.natives.some(function(e){return t.natives.some(function(t){return e===t})}))return!0;var r,n,u,c,_loop_1=function(e){if(t.atomics.some(function(t){return e.type===t.type})||t.constants.some(function(t){return e.type===t.type}))return{value:!0}};try{for(var f=a(e.atomics),s=f.next();!s.done;s=f.next()){var d=s.value,y=_loop_1(d);if("object"==typeof y)return y.value}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}var _loop_2=function(e){if(void 0!==t.atomics.find(function(t){return t.type===e.type}))return{value:!0};var r=t.constants.find(function(t){return t.type===e.type});return void 0===r?"continue":new Set(i(i([],o(e.values),!1),o(r.values),!1)).size!==e.values.length+r.values.length?{value:!0}:void 0};try{for(var p=a(e.constants),m=p.next();!m.done;m=p.next()){var v=m.value,g=_loop_2(v);if("object"==typeof g)return g.value}}catch(e){u={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(u)throw u.error}}return!!(e.templates.length&&t.atomics.some(function(e){return"string"===e.type}))||!!(t.templates.length&&e.atomics.some(function(e){return"string"===e.type}))},n.covers=function(e,t,r){if(void 0===r&&(r=0),e===t)return!1;if(e.any)return!0;if(t.any)return!1;if(0===r){var o,i,u,c,f,s,d,p,m,v,g,_,b,x,_loop_3=function(t){if(!e.arrays.some(function(e){return n.covers(e.type.value,t.type.value,r+1)}))return{value:!1}};try{for(var S=a(t.arrays),T=S.next();!T.done;T=S.next()){var E=T.value,w=_loop_3(E);if("object"==typeof w)return w.value}}catch(e){o={error:e}}finally{try{T&&!T.done&&(i=S.return)&&i.call(S)}finally{if(o)throw o.error}}var _loop_4=function(t){if(0!==t.type.elements.length&&!1===e.tuples.some(function(e){return e.type.elements.length>=t.type.elements.length&&e.type.elements.slice(t.type.elements.length).every(function(e,a){return n.covers(e,t.type.elements[a],r+1)})}))return{value:!1}};try{for(var P=a(t.tuples),j=P.next();!j.done;j=P.next()){var I=j.value,A=_loop_4(I);if("object"==typeof A)return A.value}}catch(e){u={error:e}}finally{try{j&&!j.done&&(c=P.return)&&c.call(P)}finally{if(u)throw u.error}}}var _loop_5=function(t){if(!1===e.objects.some(function(e){return y.MetadataObject.covers(e,t)}))return{value:!1}};try{for(var F=a(t.objects),M=F.next();!M.done;M=F.next()){var O=M.value,C=_loop_5(O);if("object"==typeof C)return C.value}}catch(e){f={error:e}}finally{try{M&&!M.done&&(s=F.return)&&s.call(F)}finally{if(f)throw f.error}}var _loop_6=function(t){if(!1===e.aliases.some(function(e){return e.name===t.name}))return{value:!1}};try{for(var N=a(t.aliases),R=N.next();!R.done;R=N.next()){var L=R.value,U=_loop_6(L);if("object"==typeof U)return U.value}}catch(e){d={error:e}}finally{try{R&&!R.done&&(p=N.return)&&p.call(N)}finally{if(d)throw d.error}}var _loop_7=function(t){if(!1===e.natives.some(function(e){return e===t}))return{value:!1}};try{for(var q=a(t.natives),z=q.next();!z.done;z=q.next()){var B=z.value,H=_loop_7(B);if("object"==typeof H)return H.value}}catch(e){m={error:e}}finally{try{z&&!z.done&&(v=q.return)&&v.call(q)}finally{if(m)throw m.error}}var _loop_8=function(t){if(!1===e.sets.some(function(e){return n.covers(e,t)}))return{value:!1}};try{for(var V=a(t.sets),J=V.next();!J.done;J=V.next()){var G=J.value,Q=_loop_8(G);if("object"==typeof Q)return Q.value}}catch(e){g={error:e}}finally{try{J&&!J.done&&(_=V.return)&&_.call(V)}finally{if(g)throw g.error}}if(t.atomics.some(function(t){return!1===e.atomics.some(function(e){return e.type===t.type})}))return!1;var _loop_9=function(t){if(e.atomics.some(function(e){return t.type===e.type}))return"continue";var r=e.constants.find(function(e){return e.type===t.type});return void 0===r?{value:!1}:t.values.some(function(e){return!1===r.values.includes(e)})?{value:!1}:void 0};try{for(var W=a(t.constants),K=W.next();!K.done;K=W.next()){var Y=K.value,Z=_loop_9(Y);if("object"==typeof Z)return Z.value}}catch(e){b={error:e}}finally{try{K&&!K.done&&(x=W.return)&&x.call(W)}finally{if(b)throw b.error}}return!1!==e.functional||!t.functional},n.merge=function(e,t){var r,c,f,y,p,m,v,g,_=n.create({any:e.any||t.any,nullable:e.nullable||t.nullable,required:e.required&&t.required,optional:e.optional||t.optional,functional:e.functional||t.functional,escaped:null!==e.escaped&&null!==t.escaped?d.MetadataEscaped.create({original:n.merge(e.escaped.original,t.escaped.original),returns:n.merge(e.escaped.returns,t.escaped.returns)}):null!==(v=e.escaped)&&void 0!==v?v:t.escaped,atomics:mergeTaggedTypes({container:e.atomics,equals:function(e,t){return e.type===t.type},getter:function(e){return e.tags}})(t.atomics),constants:i([],o(e.constants),!1),templates:e.templates.slice(),rest:null!==e.rest&&null!==t.rest?n.merge(e.rest,t.rest):null!==(g=e.rest)&&void 0!==g?g:t.rest,arrays:mergeTaggedTypes({container:e.arrays,equals:function(e,t){return e.type.name===t.type.name},getter:function(e){return e.tags}})(t.arrays),tuples:mergeTaggedTypes({container:e.tuples,equals:function(e,t){return e.type.name===t.type.name},getter:function(e){return e.tags}})(t.tuples),objects:e.objects.slice(),aliases:e.aliases.slice(),natives:i([],o(new Set(i(i([],o(e.natives),!1),o(t.natives),!1))),!1),sets:e.sets.slice(),maps:e.maps.slice()}),_loop_10=function(e){var t,r,n=u.ArrayUtil.take(_.constants,function(t){return t.type===e.type},function(){return s.MetadataConstant.create({type:e.type,values:[]})});try{for(var o=(t=void 0,a(e.values)),i=o.next();!i.done;i=o.next()){var c=i.value;u.ArrayUtil.add(n.values,c)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}};try{for(var b=a(t.constants),x=b.next();!x.done;x=b.next()){var S=x.value;_loop_10(S)}}catch(e){r={error:e}}finally{try{x&&!x.done&&(c=b.return)&&c.call(b)}finally{if(r)throw r.error}}try{for(var T=a(t.objects),E=T.next();!E.done;E=T.next()){var w=E.value;u.ArrayUtil.set(_.objects,w,function(e){return e.name})}}catch(e){f={error:e}}finally{try{E&&!E.done&&(y=T.return)&&y.call(T)}finally{if(f)throw f.error}}try{for(var P=a(t.aliases),j=P.next();!j.done;j=P.next()){var I=j.value;u.ArrayUtil.set(_.aliases,I,function(e){return e.name})}}catch(e){p={error:e}}finally{try{j&&!j.done&&(m=P.return)&&m.call(P)}finally{if(p)throw p.error}}return _};var getName=function(e){if(!0===e.any)return"any";var t,r,n,o,i,u,c,f,s,d,y,p,m,v,g,_,b,x,S,T,E,w,P=[];!0===e.nullable&&P.push("null"),!1===e.isRequired()&&P.push("undefined");try{for(var j=a(e.atomics),I=j.next();!I.done;I=j.next()){var A=I.value;P.push(A.getName())}}catch(e){t={error:e}}finally{try{I&&!I.done&&(r=j.return)&&r.call(j)}finally{if(t)throw t.error}}try{for(var F=a(e.constants),M=F.next();!M.done;M=F.next()){var O=M.value;try{for(var C=(i=void 0,a(O.values)),N=C.next();!N.done;N=C.next()){var R=N.value;P.push("string"===O.type?JSON.stringify(R):R.toString())}}catch(e){i={error:e}}finally{try{N&&!N.done&&(u=C.return)&&u.call(C)}finally{if(i)throw i.error}}}}catch(e){n={error:e}}finally{try{M&&!M.done&&(o=F.return)&&o.call(F)}finally{if(n)throw n.error}}try{for(var L=a(e.templates),U=L.next();!U.done;U=L.next()){var q=U.value;P.push("`"+q.map(function(e){return e.isConstant()&&1===e.size()?e.constants[0].values[0]:"${".concat(e.getName(),"}")}).join("").split("`").join("\\`")+"`")}}catch(e){c={error:e}}finally{try{U&&!U.done&&(f=L.return)&&f.call(L)}finally{if(c)throw c.error}}try{for(var z=a(e.natives),B=z.next();!B.done;B=z.next()){var H=B.value;P.push(H)}}catch(e){s={error:e}}finally{try{B&&!B.done&&(d=z.return)&&d.call(z)}finally{if(s)throw s.error}}try{for(var V=a(e.sets),J=V.next();!J.done;J=V.next()){var G=J.value;P.push("Set<".concat(G.getName(),">"))}}catch(e){y={error:e}}finally{try{J&&!J.done&&(p=V.return)&&p.call(V)}finally{if(y)throw y.error}}try{for(var Q=a(e.maps),W=Q.next();!W.done;W=Q.next()){var K=W.value;P.push("Map<".concat(K.key.getName(),", ").concat(K.value.getName(),">"))}}catch(e){m={error:e}}finally{try{W&&!W.done&&(v=Q.return)&&v.call(Q)}finally{if(m)throw m.error}}null!==e.rest&&P.push("...".concat(e.rest.getName()));try{for(var Y=a(e.tuples),Z=Y.next();!Z.done;Z=Y.next()){var X=Z.value;P.push(X.type.name)}}catch(e){g={error:e}}finally{try{Z&&!Z.done&&(_=Y.return)&&_.call(Y)}finally{if(g)throw g.error}}try{for(var ee=a(e.arrays),et=ee.next();!et.done;et=ee.next()){var er=et.value;P.push(er.getName())}}catch(e){b={error:e}}finally{try{et&&!et.done&&(x=ee.return)&&x.call(ee)}finally{if(b)throw b.error}}try{for(var en=a(e.objects),ea=en.next();!ea.done;ea=en.next()){var eo=ea.value;P.push(eo.name)}}catch(e){S={error:e}}finally{try{ea&&!ea.done&&(T=en.return)&&T.call(en)}finally{if(S)throw S.error}}try{for(var ei=a(e.aliases),eu=ei.next();!eu.done;eu=ei.next()){var ec=eu.value;P.push(ec.name)}}catch(e){E={error:e}}finally{try{eu&&!eu.done&&(w=ei.return)&&w.call(ei)}finally{if(E)throw E.error}}return(null!==e.escaped&&P.push(e.escaped.getName()),0===P.length)?"unknown":1===P.length?P[0]:(P.sort(),"(".concat(P.join(" | "),")"))},mergeTaggedTypes=function(e){return function(t){var r,n,u=i([],o(e.container),!1),_loop_11=function(t){var r,n,o=e.container.find(function(r){return e.equals(r,t)});if(void 0===o)return u.push(t),"continue";var i=e.getter(o).map(function(e){return e.map(function(e){return e.name})}).sort();try{for(var c=(r=void 0,a(e.getter(t))),f=c.next();!f.done;f=c.next()){var s=f.value;!function(t){var r=t.map(function(e){return e.name}).sort();!i.some(function(e){return e.length===r.length&&e.every(function(e,t){return e===r[t]})})&&e.getter(o).push(t)}(s)}}catch(e){r={error:e}}finally{try{f&&!f.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}};try{for(var c=a(t),f=c.next();!f.done;f=c.next()){var s=f.value;_loop_11(s)}}catch(e){r={error:e}}finally{try{f&&!f.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return u}}},49596:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataAlias=void 0;var r=function(){function MetadataAlias(e){this.name=e.name,this.value=e.value,this.description=e.description,this.jsDocTags=e.jsDocTags,this.recursive=e.recursive,this.nullables=e.nullables}return MetadataAlias.create=function(e){return new MetadataAlias(e)},MetadataAlias._From_without_value=function(e){return MetadataAlias.create({name:e.name,value:null,description:e.description,recursive:e.recursive,jsDocTags:e.jsDocTags.slice(),nullables:e.nullables.slice()})},MetadataAlias.prototype.toJSON=function(){return{name:this.name,value:this.value.toJSON(),description:this.description,recursive:this.recursive,jsDocTags:this.jsDocTags.slice(),nullables:this.nullables.slice()}},MetadataAlias}();t.MetadataAlias=r},23879:function(e,t){"use strict";var r=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},n=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},n=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=1&&this.properties.every(function(e){return e.key.isSoleLiteral()})},MetadataObject.prototype._Is_simple=function(e){return void 0===e&&(e=0),!1===this.recursive&&this.properties.length<10&&this.properties.every(function(t){return t.key.isSoleLiteral()&&1===t.value.size()&&!0===t.value.isRequired()&&!1===t.value.nullable&&(1===t.value.atomics.length||e<1&&1===t.value.objects.length&&t.value.objects[0]._Is_simple(e+1))})},MetadataObject.prototype._Is_literal=function(){var e,t=this;return null!==(e=this.literal_)&&void 0!==e?e:this.literal_=function(){if(!0===t.recursive)return!1;if("__type"===t.name)return!0;if(!1===t.name.startsWith("__type.o"))return!1;var e=Number(t.name.substr(8));return!1===isNaN(e)&&Number.isInteger(e)}()},MetadataObject.prototype.toJSON=function(){return{name:this.name,properties:this.properties.map(function(e){return e.toJSON()}),description:this.description,jsDocTags:this.jsDocTags,index:this.index,recursive:this.recursive,nullables:this.nullables.slice()}},MetadataObject}();t.MetadataObject=n,(r=n||(t.MetadataObject=n={})).intersects=function(e,t){return e.properties.some(function(e){return void 0!==t.properties.find(function(t){return e.key.getName()===t.key.getName()})})},r.covers=function(e,t){return e.properties.length>=t.properties.length&&e.properties.every(function(e){return void 0!==t.properties.find(function(t){return e.key.getName()===t.key.getName()})})}},56724:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataProperty=void 0;var n=r(3078),a=function(){function MetadataProperty(e){this.key=e.key,this.value=e.value,this.description=e.description,this.jsDocTags=e.jsDocTags}return MetadataProperty.create=function(e){return new MetadataProperty(e)},MetadataProperty.from=function(e,t){return MetadataProperty.create({key:n.Metadata.from(e.key,t),value:n.Metadata.from(e.value,t),description:e.description,jsDocTags:e.jsDocTags.slice()})},MetadataProperty.prototype.toJSON=function(){return{key:this.key.toJSON(),value:this.value.toJSON(),description:this.description,jsDocTags:this.jsDocTags}},MetadataProperty}();t.MetadataProperty=a},35191:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataTuple=void 0;var r=function(){function MetadataTuple(e){this.type=e.type,this.tags=e.tags}return MetadataTuple.create=function(e){return new MetadataTuple(e)},MetadataTuple.prototype.toJSON=function(){return{type:this.type.toJSON(),tags:this.tags.map(function(e){return e.slice()})}},MetadataTuple}();t.MetadataTuple=r},84530:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataTupleType=void 0;var r=function(){function MetadataTupleType(e){this.name=e.name,this.elements=e.elements,this.index=e.index,this.recursive=e.recursive,this.nullables=e.nullables}return MetadataTupleType._From_without_elements=function(e){return MetadataTupleType.create({name:e.name,index:e.index,elements:null,recursive:e.recursive,nullables:e.nullables.slice()})},MetadataTupleType.create=function(e){return new MetadataTupleType(e)},MetadataTupleType.prototype.isRest=function(){return this.elements.length>0&&null!==this.elements[this.elements.length-1].rest},MetadataTupleType.prototype.toJSON=function(){return{name:this.name,index:this.index,elements:this.elements.map(function(e){return e.toJSON()}),recursive:this.recursive,nullables:this.nullables.slice()}},MetadataTupleType}();t.MetadataTupleType=r},97420:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FormatCheatSheet=void 0;var RegexCall=function(e){return"".concat(e,".test($input)")};t.FormatCheatSheet={byte:RegexCall("/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm"),password:"true",regex:"(() => { try { new RegExp($input); return true; } catch { return false; } })()",uuid:RegexCall("/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i"),email:RegexCall("/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i"),hostname:RegexCall("/^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i"),"idn-email":RegexCall('/^(([^<>()[\\]\\.,;:\\s@\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\"]+)*)|(\\".+\\"))@(([^<>()[\\]\\.,;:\\s@\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\"]{2,})$/i'),"idn-hostname":RegexCall("/^([a-z0-9\\u00a1-\\uffff0-9]+(-[a-z0-9\\u00a1-\\uffff0-9]+)*\\.)+[a-z\\u00a1-\\uffff]{2,}$/i"),iri:RegexCall('/^[A-Za-z][\\d+-.A-Za-z]*:[^\\u0000-\\u0020"<>\\\\^`{|}]*$/u'),"iri-reference":RegexCall('/^[A-Za-z][\\d+-.A-Za-z]*:[^\\u0000-\\u0020"<>\\\\^`{|}]*$/u'),ipv4:RegexCall("/^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/"),ipv6:RegexCall("/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))$/i"),uri:"".concat(RegexCall("/\\/|:/")," && ").concat(RegexCall("/^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i")),"uri-reference":RegexCall("/^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i"),"uri-template":RegexCall("/^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i"),url:RegexCall("/^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu"),"date-time":"!isNaN(new Date($input).getTime())",date:RegexCall("/^(\\d{4})-(\\d{2})-(\\d{2})$/"),time:RegexCall("/^(\\d\\d):(\\d\\d):(\\d\\d(?:\\.\\d+)?)(z|([+-])(\\d\\d)(?::?(\\d\\d))?)?$/i"),duration:RegexCall("/^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/"),"json-pointer":RegexCall("/^(?:\\/(?:[^~/]|~0|~1)*)*$/"),"relative-json-pointer":RegexCall("/^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/")}},88781:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.transform=void 0;var a=n(r(55423)),o=r(58451);t.transform=function(e,t,r){var n=e.getCompilerOptions();return!1==(void 0!==n.strictNullChecks?!!n.strictNullChecks:!!n.strict)&&r.addDiagnostic({category:a.default.DiagnosticCategory.Error,code:"(typia)",file:void 0,start:void 0,length:void 0,messageText:"strict mode is required."}),o.FileTransformer.transform({program:e,compilerOptions:n,checker:e.getTypeChecker(),printer:a.default.createPrinter(),options:null!=t?t:{},extras:r})},t.default=t.transform},72546:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CallExpressionTransformer=void 0;var i=o(r(1864)),u=r(58741),c=r(57589),f=r(38545),s=r(45791),d=r(78970),y=r(69473),p=r(28499),m=r(56246),v=r(81393),g=r(12232),_=r(5385),b=r(46502),x=r(51160),S=r(21230),T=r(69314),E=r(70501),w=r(81238),P=r(42025),j=r(69858),I=r(44953),A=r(59706),F=r(81550),M=r(77464),O=r(88556),C=r(20122),N=r(99103),R=r(7072),L=r(91092),U=r(92438),q=r(62037),z=r(31173),B=r(46323),H=r(8200),V=r(20097),J=r(61237),G=r(91654),Q=r(69539),W=r(37273),K=r(30951),Y=r(29763),Z=r(30098),X=r(62521),ee=r(28059),et=r(13184),er=r(82245),en=r(79645),ea=r(79790),eo=r(50561),ei=r(97199),eu=r(73624),ec=r(86864),el=r(51027),ef=r(50692),es=r(54021),ed=r(81739),ey=r(31897),ep=r(5071),em=r(30533),ev=r(93105),eh=r(34514),eg=r(91319),e_=r(22894),eb=r(14315),ex=r(8996),eS=r(84724),eT=r(53555),eE=r(90114),ew=r(91108),eP=r(72233),ej=r(31549),eI=r(9018),eA=r(31783),eF=r(33851),eM=r(50083),eO=r(52474),ek=r(71233),eC=r(60125),eN=r(96903),eR=r(46436),eL=r(68649),eD=r(63295),eU=r(23312),eq=r(81131),ez=r(38027),eB=r(20743);(a||(t.CallExpressionTransformer=a={})).transform=function(e){return function(t){var r,a,o=null===(r=e.checker.getResolvedSignature(t))||void 0===r?void 0:r.declaration;if(!o)return t;var u=i.default.resolve(o.getSourceFile().fileName);if(!1===n(u))return t;var c=u.split(i.default.sep).at(-1).split(".")[0],f=e.checker.getTypeAtLocation(o).symbol.name,s=null===(a=eH[c])||void 0===a?void 0:a[f];if(void 0===s)return t;var d=s()(e)(t.expression)(t);return null!=d?d:t}},n=function(e){return Object.keys(eH).some(function(t){return e.includes(i.default.join("node_modules","typia","lib","".concat(t,".d.ts")))})};var eH={module:{assert:function(){return c.AssertTransformer.transform({equals:!1,guard:!1})},assertGuard:function(){return c.AssertTransformer.transform({equals:!1,guard:!0})},assertType:function(){return c.AssertTransformer.transform({equals:!1,guard:!1})},is:function(){return p.IsTransformer.transform(!1)},validate:function(){return v.ValidateTransformer.transform(!1)},assertEquals:function(){return c.AssertTransformer.transform({equals:!0,guard:!1})},assertGuardEquals:function(){return c.AssertTransformer.transform({equals:!0,guard:!0})},equals:function(){return p.IsTransformer.transform(!0)},validateEquals:function(){return v.ValidateTransformer.transform(!0)},random:function(){return m.RandomTransformer.transform},metadata:function(){return eB.ReflectMetadataTransformer.transform},createAssert:function(){return f.CreateAssertTransformer.transform({equals:!1,guard:!1})},createAssertGuard:function(){return f.CreateAssertTransformer.transform({equals:!1,guard:!0})},createAssertType:function(){return f.CreateAssertTransformer.transform({equals:!1,guard:!1})},createIs:function(){return s.CreateIsTransformer.transform(!1)},createValidate:function(){return y.CreateValidateTransformer.transform(!1)},createAssertEquals:function(){return f.CreateAssertTransformer.transform({equals:!0,guard:!1})},createAssertGuardEquals:function(){return f.CreateAssertTransformer.transform({equals:!0,guard:!0})},createEquals:function(){return s.CreateIsTransformer.transform(!0)},createValidateEquals:function(){return y.CreateValidateTransformer.transform(!0)},createRandom:function(){return d.CreateRandomTransformer.transform}},http:{headers:function(){return A.HttpHeadersTransformer.transform},isHeaders:function(){return F.HttpIsHeadersTransformer.transform},assertHeaders:function(){return j.HttpAssertHeadersTransformer.transform},validateHeaders:function(){return N.HttpValidateHeadersTransformer.transform},parameter:function(){return O.HttpParameterTransformer.transform},query:function(){return C.HttpQueryTransformer.transform},isQuery:function(){return M.HttpIsQueryTransformer.transform},assertQuery:function(){return I.HttpAssertQueryTransformer.transform},validateQuery:function(){return R.HttpValidateQueryTransformer.transform},createHeaders:function(){return b.CreateHttpHeadersTransformer.transform},createIsHeaders:function(){return x.CreateHttpIsHeadersTransformer.transform},createAssertHeaders:function(){return g.CreateHttpAssertHeadersTransformer.transform},createValidateHeaders:function(){return w.CreateHttpValidateHeadersTransformer.transform},createParameter:function(){return T.CreateHttpParameterTransformer.transform},createQuery:function(){return E.CreateHttpQueryTransformer.transform},createIsQuery:function(){return S.CreateHttpIsQueryTransformer.transform},createAssertQuery:function(){return _.CreateHttpAssertQueryTransformer.transform},createValidateQuery:function(){return P.CreateHttpValidateQueryTransformer.transform}},json:{application:function(){return function(e){return function(){return L.JsonApplicationTransformer.transform(e)}}},isParse:function(){return W.JsonIsParseTransformer.transform},assertParse:function(){return U.JsonAssertParseTransformer.transform},validateParse:function(){return Z.JsonValidateParseTransformer.transform},stringify:function(){return Y.JsonStringifyTransformer.transform},assertStringify:function(){return q.JsonAssertStringifyTransformer.transform},isStringify:function(){return K.JsonIsStringifyTransformer.transform},validateStringify:function(){return X.JsonValidateStringifyTransformer.transform},createIsParse:function(){return H.JsonCreateIsParseTransformer.transform},createAssertParse:function(){return z.JsonCreateAssertParseTransformer.transform},createValidateParse:function(){return G.JsonCreateValidateParseTransformer.transform},createStringify:function(){return J.JsonCreateStringifyTransformer.transform},createAssertStringify:function(){return B.JsonCreateAssertStringifyTransformer.transform},createIsStringify:function(){return V.JsonCreateIsStringifyTransformer.transform},createValidateStringify:function(){return Q.JsonCreateValidateStringifyTransformer.transform}},protobuf:{message:function(){return eU.ProtobufMessageTransformer.transform},encode:function(){return eR.ProtobufEncodeTransformer.transform},assertEncode:function(){return eP.ProtobufAssertEncodeTransformer.transform},isEncode:function(){return eD.ProtobufIsEncodeTransformer.transform},validateEncode:function(){return ez.ProtobufValidateEncodeTransformer.transform},decode:function(){return eN.ProtobufDecodeTransformer.transform},assertDecode:function(){return ew.ProtobufAssertDecodeTransformer.transform},isDecode:function(){return eL.ProtobufIsDecodeTransformer.transform},validateDecode:function(){return eq.ProtobufValidateDecodeTransformer.transform},createEncode:function(){return eF.ProtobufCreateEncodeTransformer.transform},createAssertEncode:function(){return eI.ProtobufCreateAssertEncodeTransformer.transform},createIsEncode:function(){return eO.ProtobufCreateIsEncodeTransformer.transform},createValidateEncode:function(){return eC.ProtobufCreateValidateEncodeTransformer.transform},createDecode:function(){return eA.ProtobufCreateDecodeTransformer.transform},createAssertDecode:function(){return ej.ProtobufCreateAssertDecodeTransformer.transform},createIsDecode:function(){return eM.ProtobufCreateIsDecodeTransformer.transform},createValidateDecode:function(){return ek.ProtobufCreateValidateDecodeTransformer.transform}},reflect:{metadata:function(){return eB.ReflectMetadataTransformer.transform}},misc:{literals:function(){return function(e){return function(){return ey.MiscLiteralsTransformer.transform(e)}}},clone:function(){return er.MiscCloneTransformer.transform},assertClone:function(){return ee.MiscAssertCloneTransformer.transform},isClone:function(){return es.MiscIsCloneTransformer.transform},validateClone:function(){return em.MiscValidateCloneTransformer.transform},prune:function(){return ep.MiscPruneTransformer.transform},assertPrune:function(){return et.MiscAssertPruneTransformer.transform},isPrune:function(){return ed.MiscIsPruneTransformer.transform},validatePrune:function(){return ev.MiscValidatePruneTransformer.transform},createClone:function(){return eo.MiscCreateCloneTransformer.transform},createAssertClone:function(){return en.MiscCreateAssertCloneTransformer.transform},createIsClone:function(){return ei.MiscCreateIsCloneTransformer.transform},createValidateClone:function(){return el.MiscCreateValidateCloneTransformer.transform},createPrune:function(){return ec.MiscCreatePruneTransformer.transform},createAssertPrune:function(){return ea.MiscCreateAssertPruneTransformer.transform},createIsPrune:function(){return eu.MiscCreateIsPruneTransformer.transform},createValidatePrune:function(){return ef.MiscCreateValidatePruneTransformer.transform}},notations:{camel:function(){return eS.NotationGeneralTransformer.transform(u.NamingConvention.camel)},assertCamel:function(){return eh.NotationAssertGeneralTransformer.transform(u.NamingConvention.camel)},isCamel:function(){return eT.NotationIsGeneralTransformer.transform(u.NamingConvention.camel)},validateCamel:function(){return eE.NotationValidateGeneralTransformer.transform(u.NamingConvention.camel)},pascal:function(){return eS.NotationGeneralTransformer.transform(u.NamingConvention.pascal)},assertPascal:function(){return eh.NotationAssertGeneralTransformer.transform(u.NamingConvention.pascal)},isPascal:function(){return eT.NotationIsGeneralTransformer.transform(u.NamingConvention.pascal)},validatePascal:function(){return eE.NotationValidateGeneralTransformer.transform(u.NamingConvention.pascal)},snake:function(){return eS.NotationGeneralTransformer.transform(u.NamingConvention.snake)},assertSnake:function(){return eh.NotationAssertGeneralTransformer.transform(u.NamingConvention.snake)},isSnake:function(){return eT.NotationIsGeneralTransformer.transform(u.NamingConvention.snake)},validateSnake:function(){return eE.NotationValidateGeneralTransformer.transform(u.NamingConvention.snake)},createCamel:function(){return e_.NotationCreateGeneralTransformer.transform(u.NamingConvention.camel)},createAssertCamel:function(){return eg.NotationCreateAssertGeneralTransformer.transform(u.NamingConvention.camel)},createIsCamel:function(){return eb.NotationCreateIsGeneralTransformer.transform(u.NamingConvention.camel)},createValidateCamel:function(){return ex.NotationCreateValidateGeneralTransformer.transform(u.NamingConvention.camel)},createPascal:function(){return e_.NotationCreateGeneralTransformer.transform(u.NamingConvention.pascal)},createAssertPascal:function(){return eg.NotationCreateAssertGeneralTransformer.transform(u.NamingConvention.pascal)},createIsPascal:function(){return eb.NotationCreateIsGeneralTransformer.transform(u.NamingConvention.pascal)},createValidatePascal:function(){return ex.NotationCreateValidateGeneralTransformer.transform(u.NamingConvention.pascal)},createSnake:function(){return e_.NotationCreateGeneralTransformer.transform(u.NamingConvention.snake)},createAssertSnake:function(){return eg.NotationCreateAssertGeneralTransformer.transform(u.NamingConvention.snake)},createIsSnake:function(){return eb.NotationCreateIsGeneralTransformer.transform(u.NamingConvention.snake)},createValidateSnake:function(){return ex.NotationCreateValidateGeneralTransformer.transform(u.NamingConvention.snake)}}}},58451:function(e,t,r){"use strict";var n,a,o,i=this&&this.__assign||function(){return(i=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GenericTransformer=void 0;var c=u(r(55423)),f=r(63664);(n=o||(t.GenericTransformer=o={})).scalar=function(e){return function(t){return function(r){return function(n){return function(o){if(1!==o.arguments.length)throw new f.TransformerError({code:"typia.".concat(e),message:"no input value."});var u=i(o.typeArguments&&o.typeArguments[0]?[r.checker.getTypeFromTypeNode(o.typeArguments[0]),o.typeArguments[0],!0]:[r.checker.getTypeAtLocation(o.arguments[0]),o.arguments[0],!1],3),s=u[0],d=u[1],y=u[2];if(s.isTypeParameter())throw new f.TransformerError({code:"typia.".concat(e),message:"non-specified generic argument."});return c.default.factory.createCallExpression(t(r)(n)(s,y?d.getFullText().trim():a(r.checker)(s)(d)),void 0,[o.arguments[0]])}}}}},n.factory=function(e){return function(t){return function(r){return function(n){return function(a){if(!(null===(o=a.typeArguments)||void 0===o?void 0:o[0]))throw new f.TransformerError({code:"typia.".concat(e),message:"generic argument is not specified."});var o,i=a.typeArguments[0],u=r.checker.getTypeFromTypeNode(i);if(u.isTypeParameter())throw new f.TransformerError({code:"typia.".concat(e),message:"non-specified generic argument."});return t(r)(n)(u,i.getFullText().trim())}}}}},a=function(e){return function(t){return function(r){return e.typeToString(t,r,c.default.TypeFormatFlags.NodeBuilderFlagsMask)}}}},61261:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Writable=void 0,t.Writable=function(e){return e}},73346:function(e,t){"use strict";var r,n,a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.NameEncoder=void 0,(r=n||(t.NameEncoder=n={})).encode=function(e){var t,r;try{for(var n=a(i),u=n.next();!u.done;u=n.next()){var c=o(u.value,2),f=c[0],s=c[1];e=e.split(f).join(s)}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return e},r.decode=function(e){var t,r;try{for(var n=a(i),u=n.next();!u.done;u=n.next()){var c=o(u.value,2),f=c[0],s=c[1];""!==s&&(e=e.split(s).join(f))}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return e};var i=[["$","_dollar_"],["&","_and_"],["|","_or_"],["{","_blt_"],["}","_bgt_"],["<","_lt_"],[">","_gt_"],["(","_lp_"],[")","_rp_"],["[","_alt_"],["]","_agt_"],[",","_comma_"],["`","_backquote_"],["'","_singlequote_"],['"',"_doublequote_"],[" ","_space_"]]},70505:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.pascal=t.camel=t.snake=void 0;var a=r(85422);t.snake=function(e){for(var t=[],r=0;r0;--r)t[r]-t[r-1]==1&&t.splice(r,1);if(0!==t.length&&0===t[0]&&t.splice(0,1),0===t.length)return e.toLowerCase();for(var a="",r=0;r1&&e[1]===e[1].toLowerCase()?"_"+e[1].toUpperCase()+e.substring(2):e},t.pascal=function(e){return 0===(e=removeSnake(e)).length?e:e[0]===e[0].toLowerCase()?e[0].toUpperCase()+e.substring(1):"_"===e[0]&&e.length>1&&e[1]===e[1].toLowerCase()?"_"+e[1].toUpperCase()+e.substring(2):e};var removeSnake=function(e){for(var t=[],r=0;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.PatternUtil=void 0,(r=n||(t.PatternUtil=n={})).fix=function(e){var t=e.indexOf(r.STRING),n=e.lastIndexOf(r.STRING);return[-1===t||none("(")(e.slice(0,t))?"^":"",e,-1===n||none(")")(e.slice(n+r.STRING.length))?"$":""].join("")},r.escape=function(e){return e.replace(/[|\\/{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")},r.NUMBER="[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?",r.BOOLEAN="true|false",r.STRING="(.*)";var none=function(e){return function(t){var r,n;try{for(var o=a(t),i=o.next();!i.done;i=o.next())if(i.value!==e)return!0}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!1}}},92989:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.relativeJsonPointer=t.jsonPointer=t.duration=t.time=t.date=t.datetime=t.url=t.uriTemplate=t.uriReference=t.uri=t.ipv6=t.ipv4=t.iriReference=t.iri=t.idnHostname=t.idnEmail=t.hostname=t.email=t.uuid=t.regex=t.password=t.byte=t.pattern=t.length=t.pick=t.array=t.string=t.number=t.bigint=t.integer=t.boolean=void 0;var o=a(r(14419)),i="abcdefghijklmnopqrstuvwxyz";t.boolean=function(){return .5>Math.random()},t.integer=function(e,t){return null!=e||(e=0),null!=t||(t=100),Math.floor(Math.random()*(t-e+1))+e},t.bigint=function(e,r){return BigInt((0,t.integer)(Number(null!=e?e:BigInt(0)),Number(null!=r?r:BigInt(100))))},t.number=function(e,t){return null!=e||(e=0),null!=t||(t=100),Math.random()*(t-e)+e},t.string=function(e){return Array(null!=e?e:(0,t.integer)(5,10)).fill(0).map(function(){return i[(0,t.integer)(0,i.length-1)]}).join("")},t.array=function(e,r){return Array(null!=r?r:(0,t.length)()).fill(0).map(function(t,r){return e(r)})},t.pick=function(e){return e[(0,t.integer)(0,e.length-1)]},t.length=function(){return(0,t.integer)(0,3)},t.pattern=function(e){return new o.default(e).gen()},t.byte=function(){return"vt7ekz4lIoNTTS9sDQYdWKharxIFAR54+z/umIxSgUM="},t.password=function(){return(0,t.string)((0,t.integer)(4,16))},t.regex=function(){return"/^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/"},t.uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},t.email=function(){return"".concat((0,t.string)(10),"@").concat((0,t.string)(10),".").concat((0,t.string)(3))},t.hostname=function(){return"".concat((0,t.string)(10),".").concat((0,t.string)(3))},t.idnEmail=function(){return(0,t.email)()},t.idnHostname=function(){return(0,t.hostname)()},t.iri=function(){return(0,t.url)()},t.iriReference=function(){return(0,t.url)()},t.ipv4=function(){return(0,t.array)(function(){return(0,t.integer)(0,255)},4).join(".")},t.ipv6=function(){return(0,t.array)(function(){return(0,t.integer)(0,65535).toString(16)},8).join(":")},t.uri=function(){return(0,t.url)()},t.uriReference=function(){return(0,t.url)()},t.uriTemplate=function(){return(0,t.url)()},t.url=function(){return"https://".concat((0,t.string)(10),".").concat((0,t.string)(3))},t.datetime=function(e,r){return new Date((0,t.number)(null!=e?e:Date.now()-30*u,null!=r?r:Date.now()+7*u)).toISOString()},t.date=function(e,r){return new Date((0,t.number)(null!=e?e:0,null!=r?r:2*Date.now())).toISOString().substring(0,10)},t.time=function(){return new Date((0,t.number)(0,u)).toISOString().substring(11,23)},t.duration=function(){var e=durate([["Y",(0,t.integer)(0,100)],["M",(0,t.integer)(0,12)],["D",(0,t.integer)(0,31)]]),r=durate([["H",(0,t.integer)(0,24)],["M",(0,t.integer)(0,60)],["S",(0,t.integer)(0,60)]]);return e.length+r.length===0?"PT0S":"P".concat(e).concat(r.length?"T":"").concat(r)},t.jsonPointer=function(){return"/components/schemas/".concat((0,t.string)(10))},t.relativeJsonPointer=function(){return"".concat((0,t.integer)(0,10),"#")};var u=864e5,durate=function(e){return e.filter(function(e){var t=n(e,2);return 0!==(t[0],t[1])}).map(function(e){var t=n(e,2),r=t[0],a=t[1];return"".concat(a).concat(r)}).join("")}},46657:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var a=Object.getOwnPropertyDescriptor(t,r);(!a||("get"in a?!t.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,a)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.RandomGenerator=void 0,t.RandomGenerator=o(r(92989))},81061:function(e,t){"use strict";var r=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},n=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;ae.length)&&(t=e.length);for(var r=0,n=Array(t);r=e.length?e.apply(this,n):function(){for(var e=arguments.length,r=Array(e),a=0;a=n.length?n.apply(this,r):function(){for(var t=arguments.length,n=Array(t),a=0;a1&&void 0!==arguments[1]?arguments[1]:{};i.initial(e),i.handler(t);var r={current:e},n=curry(didStateUpdate)(r,t),a=curry(updateState)(r),o=curry(i.changes)(e),u=curry(extractChanges)(r);return[function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(e){return e};return i.selector(e),e(r.current)},function(e){(function(){for(var e=arguments.length,t=Array(e),r=0;r=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(t,["monaco"]);p(function(e){return{config:function merge(e,t){return Object.keys(t).forEach(function(r){t[r]instanceof Object&&e[r]&&Object.assign(t[r],merge(e[r],t[r]))}),_objectSpread2(_objectSpread2({},e),t)}(e.config,n),monaco:r}})},init:function(){var e=y(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(p({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),utils_makeCancelable(m);if(window.monaco&&window.monaco.editor)return storeMonacoInstance(window.monaco),e.resolve(window.monaco),utils_makeCancelable(m);utils_compose(injectScripts,getMonacoLoaderScript)(configureLoader)}return utils_makeCancelable(m)},__getMonacoInstance:function(){return y(function(e){return e.monaco})}},g=r(67294),_={wrapper:{display:"flex",position:"relative",textAlign:"initial"},fullWidth:{width:"100%"},hide:{display:"none"}},b={container:{display:"flex",height:"100%",width:"100%",justifyContent:"center",alignItems:"center"}},$=function({children:e}){return g.createElement("div",{style:b.container},e)},x=(0,g.memo)(function({width:e,height:t,isEditorReady:r,loading:n,_ref:a,className:o,wrapperProps:i}){return g.createElement("section",{style:{..._.wrapper,width:e,height:t},...i},!r&&g.createElement($,null,n),g.createElement("div",{ref:a,style:{..._.fullWidth,...!r&&_.hide},className:o}))}),k=function(e){(0,g.useEffect)(e,[])},l=function(e,t,r=!0){let n=(0,g.useRef)(!0);(0,g.useEffect)(n.current||!r?()=>{n.current=!1}:e,t)};function D(){}function h(e,t,r,n){return e.editor.getModel(te(e,n))||e.editor.createModel(t,r,n?te(e,n):void 0)}function te(e,t){return e.Uri.parse(t)}(0,g.memo)(function({original:e,modified:t,language:r,originalLanguage:n,modifiedLanguage:a,originalModelPath:o,modifiedModelPath:i,keepCurrentOriginalModel:u=!1,keepCurrentModifiedModel:c=!1,theme:f="light",loading:s="Loading...",options:d={},height:y="100%",width:p="100%",className:m,wrapperProps:_={},beforeMount:b=D,onMount:S=D}){let[T,E]=(0,g.useState)(!1),[w,P]=(0,g.useState)(!0),j=(0,g.useRef)(null),I=(0,g.useRef)(null),A=(0,g.useRef)(null),F=(0,g.useRef)(S),M=(0,g.useRef)(b),O=(0,g.useRef)(!1);k(()=>{let e=v.init();return e.then(e=>(I.current=e)&&P(!1)).catch(e=>e?.type!=="cancelation"&&console.error("Monaco initialization: error:",e)),()=>{let t;return j.current?(t=j.current?.getModel(),void(u||t?.original?.dispose(),c||t?.modified?.dispose(),j.current?.dispose())):e.cancel()}}),l(()=>{if(j.current&&I.current){let t=j.current.getOriginalEditor(),a=h(I.current,e||"",n||r||"text",o||"");a!==t.getModel()&&t.setModel(a)}},[o],T),l(()=>{if(j.current&&I.current){let e=j.current.getModifiedEditor(),n=h(I.current,t||"",a||r||"text",i||"");n!==e.getModel()&&e.setModel(n)}},[i],T),l(()=>{let e=j.current.getModifiedEditor();e.getOption(I.current.editor.EditorOption.readOnly)?e.setValue(t||""):t!==e.getValue()&&(e.executeEdits("",[{range:e.getModel().getFullModelRange(),text:t||"",forceMoveMarkers:!0}]),e.pushUndoStop())},[t],T),l(()=>{j.current?.getModel()?.original.setValue(e||"")},[e],T),l(()=>{let{original:e,modified:t}=j.current.getModel();I.current.editor.setModelLanguage(e,n||r||"text"),I.current.editor.setModelLanguage(t,a||r||"text")},[r,n,a],T),l(()=>{I.current?.editor.setTheme(f)},[f],T),l(()=>{j.current?.updateOptions(d)},[d],T);let C=(0,g.useCallback)(()=>{if(!I.current)return;M.current(I.current);let u=h(I.current,e||"",n||r||"text",o||""),c=h(I.current,t||"",a||r||"text",i||"");j.current?.setModel({original:u,modified:c})},[r,t,a,e,n,o,i]),N=(0,g.useCallback)(()=>{!O.current&&A.current&&(j.current=I.current.editor.createDiffEditor(A.current,{automaticLayout:!0,...d}),C(),I.current?.editor.setTheme(f),E(!0),O.current=!0)},[d,f,C]);return(0,g.useEffect)(()=>{T&&F.current(j.current,I.current)},[T]),(0,g.useEffect)(()=>{w||T||N()},[w,T,N]),g.createElement(x,{width:p,height:y,isEditorReady:T,loading:s,_ref:A,className:m,wrapperProps:_})});var se=function(e){let t=(0,g.useRef)();return(0,g.useEffect)(()=>{t.current=e},[e]),t.current},S=new Map,T=(0,g.memo)(function({defaultValue:e,defaultLanguage:t,defaultPath:r,value:n,language:a,path:o,theme:i="light",line:u,loading:c="Loading...",options:f={},overrideServices:s={},saveViewState:d=!0,keepCurrentModel:y=!1,width:p="100%",height:m="100%",className:_,wrapperProps:b={},beforeMount:T=D,onMount:E=D,onChange:w,onValidate:P=D}){let[j,I]=(0,g.useState)(!1),[A,F]=(0,g.useState)(!0),M=(0,g.useRef)(null),O=(0,g.useRef)(null),C=(0,g.useRef)(null),N=(0,g.useRef)(E),R=(0,g.useRef)(T),L=(0,g.useRef)(),U=(0,g.useRef)(n),q=se(o),z=(0,g.useRef)(!1),B=(0,g.useRef)(!1);k(()=>{let e=v.init();return e.then(e=>(M.current=e)&&F(!1)).catch(e=>e?.type!=="cancelation"&&console.error("Monaco initialization: error:",e)),()=>O.current?void(L.current?.dispose(),y?d&&S.set(o,O.current.saveViewState()):O.current.getModel()?.dispose(),O.current.dispose()):e.cancel()}),l(()=>{let i=h(M.current,e||n||"",t||a||"",o||r||"");i!==O.current?.getModel()&&(d&&S.set(q,O.current?.saveViewState()),O.current?.setModel(i),d&&O.current?.restoreViewState(S.get(o)))},[o],j),l(()=>{O.current?.updateOptions(f)},[f],j),l(()=>{O.current&&void 0!==n&&(O.current.getOption(M.current.editor.EditorOption.readOnly)?O.current.setValue(n):n===O.current.getValue()||(B.current=!0,O.current.executeEdits("",[{range:O.current.getModel().getFullModelRange(),text:n,forceMoveMarkers:!0}]),O.current.pushUndoStop(),B.current=!1))},[n],j),l(()=>{let e=O.current?.getModel();e&&a&&M.current?.editor.setModelLanguage(e,a)},[a],j),l(()=>{void 0!==u&&O.current?.revealLine(u)},[u],j),l(()=>{M.current?.editor.setTheme(i)},[i],j);let H=(0,g.useCallback)(()=>{if(!(!C.current||!M.current)&&!z.current){R.current(M.current);let c=o||r,y=h(M.current,n||e||"",t||a||"",c||"");O.current=M.current?.editor.create(C.current,{model:y,automaticLayout:!0,...f},s),d&&O.current.restoreViewState(S.get(c)),M.current.editor.setTheme(i),void 0!==u&&O.current.revealLine(u),I(!0),z.current=!0}},[e,t,r,n,a,o,f,s,d,i,u]);return(0,g.useEffect)(()=>{j&&N.current(O.current,M.current)},[j]),(0,g.useEffect)(()=>{A||j||H()},[A,j,H]),U.current=n,(0,g.useEffect)(()=>{j&&w&&(L.current?.dispose(),L.current=O.current?.onDidChangeModelContent(e=>{B.current||w(O.current.getValue(),e)}))},[j,w]),(0,g.useEffect)(()=>{if(j){let e=M.current.editor.onDidChangeMarkers(e=>{let t=O.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=M.current.editor.getModelMarkers({resource:t});P?.(e)}});return()=>{e?.dispose()}}return()=>{}},[j,P]),g.createElement(x,{width:p,height:m,isEditorReady:j,loading:c,_ref:C,className:_,wrapperProps:b})})}}]); \ No newline at end of file diff --git a/_next/static/chunks/583-d6de9980fd54d302.js b/_next/static/chunks/583-d6de9980fd54d302.js new file mode 100644 index 0000000000..d02dad51ac --- /dev/null +++ b/_next/static/chunks/583-d6de9980fd54d302.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[583],{69450:function(e){"use strict";let SubRange=class SubRange{constructor(e,t){this.low=e,this.high=t,this.length=1+t-e}overlaps(e){return!(this.highe.high)}touches(e){return!(this.high+1e.high)}add(e){return new SubRange(Math.min(this.low,e.low),Math.max(this.high,e.high))}subtract(e){return e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.highe+t.length,0)}add(e,t){var _add=e=>{for(var t=0;t{for(var t=0;t{for(var t=0;t{for(var r=t.low;r<=t.high;)e.push(r),r++;return e},[])}subranges(){return this.ranges.map(e=>({low:e.low,high:e.high,length:1+e.high-e.low}))}};e.exports=DRange},26961:function(e,t,r){var n,a=function(){var e=String.fromCharCode,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",n={};function getBaseValue(e,t){if(!n[e]){n[e]={};for(var r=0;r>>8,r[2*n+1]=i%256}return r},decompressFromUint8Array:function(t){if(null==t)return a.decompress(t);for(var r=Array(t.length/2),n=0,o=r.length;ns.charCodeAt(0)){for(n=0;n>=1}else{for(n=0,a=1;n>=1}0==--d&&(d=Math.pow(2,p),p++),delete u[s]}else for(n=0,a=i[s];n>=1;0==--d&&(d=Math.pow(2,p),p++),i[f]=y++,s=String(c)}if(""!==s){if(Object.prototype.hasOwnProperty.call(u,s)){if(256>s.charCodeAt(0)){for(n=0;n>=1}else{for(n=0,a=1;n>=1}0==--d&&(d=Math.pow(2,p),p++),delete u[s]}else for(n=0,a=i[s];n>=1;0==--d&&(d=Math.pow(2,p),p++)}for(n=0,a=2;n>=1;for(;;){if(v<<=1,g==t-1){m.push(r(v));break}g++}return m.join("")},decompress:function(e){return null==e?"":""==e?null:a._decompress(e.length,32768,function(t){return e.charCodeAt(t)})},_decompress:function(t,r,n){var a,o,i,u,c,f,s,d=[],y=4,p=4,m=3,v="",g=[],_={val:n(0),position:r,index:1};for(a=0;a<3;a+=1)d[a]=a;for(i=0,c=4,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;switch(i){case 0:for(i=0,c=256,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;s=e(i);break;case 1:for(i=0,c=65536,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;s=e(i);break;case 2:return""}for(d[3]=s,o=s,g.push(s);;){if(_.index>t)return"";for(i=0,c=Math.pow(2,m),f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;switch(s=i){case 0:for(i=0,c=256,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;d[p++]=e(i),s=p-1,y--;break;case 1:for(i=0,c=65536,f=1;f!=c;)u=_.val&_.position,_.position>>=1,0==_.position&&(_.position=r,_.val=n(_.index++)),i|=(u>0?1:0)*f,f<<=1;d[p++]=e(i),s=p-1,y--;break;case 2:return g.join("")}if(0==y&&(y=Math.pow(2,m),m++),d[s])v=d[s];else{if(s!==p)return null;v=o+o.charAt(0)}g.push(v),d[p++]=o+v.charAt(0),y--,o=v,0==y&&(y=Math.pow(2,m),m++)}}};return a}();void 0!==(n=(function(){return a}).call(t,r,t,e))&&(e.exports=n)},14419:function(e,t,r){let n=r(60697),a=r(69450),o=n.types;e.exports=class RandExp{constructor(e,t){if(this._setDefaults(e),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,e=e.source;else if("string"==typeof e)this.ignoreCase=t&&-1!==t.indexOf("i"),this.multiline=t&&-1!==t.indexOf("m");else throw Error("Expected a regexp or string");this.tokens=n(e)}_setDefaults(e){this.max=null!=e.max?e.max:null!=RandExp.prototype.max?RandExp.prototype.max:100,this.defaultRange=e.defaultRange?e.defaultRange:this.defaultRange.clone(),e.randInt&&(this.randInt=e.randInt)}gen(){return this._gen(this.tokens,[])}_gen(e,t){var r,n,a,i,u;switch(e.type){case o.ROOT:case o.GROUP:if(e.followedBy||e.notFollowedBy)return"";for(e.remember&&void 0===e.groupNumber&&(e.groupNumber=t.push(null)-1),r=e.options?this._randSelect(e.options):e.stack,n="",i=0,u=r.length;i{var t,r,u=0,c={type:a.ROOT,stack:[]},f=c,s=c.stack,d=[],repeatErr=t=>{n.error(e,`Nothing to repeat at column ${t-1}`)},y=n.strToChars(e);for(t=y.length;u({type:n.POSITION,value:"b"}),t.nonWordBoundary=()=>({type:n.POSITION,value:"B"}),t.begin=()=>({type:n.POSITION,value:"^"}),t.end=()=>({type:n.POSITION,value:"$"})},94992:function(e,t,r){let n=r(30504),INTS=()=>[{type:n.RANGE,from:48,to:57}],WORDS=()=>[{type:n.CHAR,value:95},{type:n.RANGE,from:97,to:122},{type:n.RANGE,from:65,to:90}].concat(INTS()),WHITESPACE=()=>[{type:n.CHAR,value:9},{type:n.CHAR,value:10},{type:n.CHAR,value:11},{type:n.CHAR,value:12},{type:n.CHAR,value:13},{type:n.CHAR,value:32},{type:n.CHAR,value:160},{type:n.CHAR,value:5760},{type:n.RANGE,from:8192,to:8202},{type:n.CHAR,value:8232},{type:n.CHAR,value:8233},{type:n.CHAR,value:8239},{type:n.CHAR,value:8287},{type:n.CHAR,value:12288},{type:n.CHAR,value:65279}],NOTANYCHAR=()=>[{type:n.CHAR,value:10},{type:n.CHAR,value:13},{type:n.CHAR,value:8232},{type:n.CHAR,value:8233}];t.words=()=>({type:n.SET,set:WORDS(),not:!1}),t.notWords=()=>({type:n.SET,set:WORDS(),not:!0}),t.ints=()=>({type:n.SET,set:INTS(),not:!1}),t.notInts=()=>({type:n.SET,set:INTS(),not:!0}),t.whitespace=()=>({type:n.SET,set:WHITESPACE(),not:!1}),t.notWhitespace=()=>({type:n.SET,set:WHITESPACE(),not:!0}),t.anyChar=()=>({type:n.SET,set:NOTANYCHAR(),not:!0})},30504:function(e){e.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},86245:function(e,t,r){let n=r(30504),a=r(94992),o={0:0,t:9,n:10,v:11,f:12,r:13};t.strToChars=function(e){return e=e.replace(/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\]^?])|([0tnvfr]))/g,function(e,t,r,n,a,i,u,c){if(r)return e;var f=String.fromCharCode(t?8:n?parseInt(n,16):a?parseInt(a,16):i?parseInt(i,8):u?"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?".indexOf(u):o[c]);return/[[\]{}^$.|?*+()]/.test(f)&&(f="\\"+f),f})},t.tokenizeClass=(e,r)=>{for(var o,i,u=[],c=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?([^])/g;null!=(o=c.exec(e));)if(o[1])u.push(a.words());else if(o[2])u.push(a.ints());else if(o[3])u.push(a.whitespace());else if(o[4])u.push(a.notWords());else if(o[5])u.push(a.notInts());else if(o[6])u.push(a.notWhitespace());else if(o[7])u.push({type:n.RANGE,from:(o[8]||o[9]).charCodeAt(0),to:o[10].charCodeAt(0)});else{if(!(i=o[12]))return[u,c.lastIndex];u.push({type:n.CHAR,value:i.charCodeAt(0)})}t.error(r,"Unterminated character class")},t.error=(e,t)=>{throw SyntaxError("Invalid regular expression: /"+e+"/: "+t)}},37297:function(e,t,r){"use strict";var n,a,o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CommentFactory=void 0;var c=u(r(55423));(n=a||(t.CommentFactory=a={})).description=function(e,t){void 0===t&&(t=!1);var r,n,a,u,f,s,d,y,p,m=null===(d=e.declarations)||void 0===d?void 0:d[0];if(m){var v=o(c.default.versionMajorMinor.split(".").map(Number),2),g=v[0],_=v[1];if(g<5||5===g&&_<1){var b=[],x=c.default.displayPartsToString(e.getDocumentationComment(void 0));if(x.length&&(b.push(x),t&&e.getJsDocTags().length&&b.push("")),t)try{for(var S=i(e.getJsDocTags()),T=S.next();!T.done;T=S.next()){var E=T.value;b.push(E.text?"@".concat(E.name," ").concat(c.default.displayPartsToString(E.text)):"@".concat(E.name))}}catch(e){r={error:e}}finally{try{T&&!T.done&&(n=S.return)&&n.call(S)}finally{if(r)throw r.error}}return b.length?b.map(function(e){return e.split("\r\n").join("\n")}).join("\n"):void 0}var w=c.default.getJSDocCommentsAndTags(m);if(0!==w.length){var P=[];try{for(var I=i(w),j=I.next();!j.done;j=I.next()){var F=j.value;if(c.default.isJSDoc(F)){var A=c.default.getTextOfJSDocComment(F.comment);if((null==A?void 0:A.length)&&(P.push(A),t&&(null===(y=F.tags)||void 0===y?void 0:y.length)&&P.push("")),t)try{for(var M=(f=void 0,i(null!==(p=F.tags)&&void 0!==p?p:[])),O=M.next();!O.done;O=M.next()){var E=O.value;P.push(parseJSDocTag(E))}}catch(e){f={error:e}}finally{try{O&&!O.done&&(s=M.return)&&s.call(M)}finally{if(f)throw f.error}}}else t&&P.push(parseJSDocTag(F))}}catch(e){a={error:e}}finally{try{j&&!j.done&&(u=I.return)&&u.call(I)}finally{if(a)throw a.error}}var C=P.map(function(e){return e.split("\r\n").join("\n")}).join("\n");return C.length?C:void 0}}},n.merge=function(e){return e.map(function(e){return e.text}).map(function(e){return e.split("\r\n").join("\n")}).join("")};var parseJSDocTag=function(e){var t,r=null===(t=e.name)||void 0===t?void 0:t.getText(),n=c.default.getTextOfJSDocComment(e.comment);return["@".concat(e.tagName.text),r,n].filter(function(e){return!!(null==e?void 0:e.length)}).join(" ")}},73906:function(e,t,r){"use strict";var n,a,o=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ExpressionFactory=void 0;var u=i(r(55423)),c=r(46657);(n=a||(t.ExpressionFactory=a={})).number=function(e){return e<0?u.default.factory.createPrefixUnaryExpression(u.default.SyntaxKind.MinusToken,u.default.factory.createNumericLiteral(Math.abs(e))):u.default.factory.createNumericLiteral(e)},n.bigint=function(e){return u.default.factory.createCallExpression(u.default.factory.createIdentifier("BigInt"),void 0,[u.default.factory.createIdentifier(e.toString())])},n.isRequired=function(e){return u.default.factory.createStrictInequality(u.default.factory.createIdentifier("undefined"),e)},n.isArray=function(e){return u.default.factory.createCallExpression(u.default.factory.createIdentifier("Array.isArray"),void 0,[e])},n.isObject=function(e){return function(t){var r=[u.default.factory.createStrictEquality(u.default.factory.createStringLiteral("object"),u.default.factory.createTypeOfExpression(t))];return!0===e.checkNull&&r.push(u.default.factory.createStrictInequality(u.default.factory.createNull(),t)),!0===e.checkArray&&r.push(u.default.factory.createStrictEquality(u.default.factory.createFalse(),u.default.factory.createCallExpression(u.default.factory.createIdentifier("Array.isArray"),void 0,[t]))),1===r.length?r[0]:r.reduce(function(e,t){return u.default.factory.createLogicalAnd(e,t)})}},n.isInstanceOf=function(e){return function(t){return u.default.factory.createBinaryExpression(t,u.default.factory.createToken(u.default.SyntaxKind.InstanceOfKeyword),u.default.factory.createIdentifier(e))}},n.coalesce=function(e){return function(t){return u.default.factory.createBinaryExpression(e,u.default.factory.createToken(u.default.SyntaxKind.QuestionQuestionToken),t)}},n.currying=function(e){return function(t){if(0===t.length)return u.default.factory.createCallExpression(e,void 0,void 0);var r,n,a=u.default.factory.createCallExpression(e,void 0,[t[0]]);try{for(var i=o(t.slice(1)),c=i.next();!c.done;c=i.next()){var f=c.value;a=u.default.factory.createCallExpression(a,void 0,[f])}}catch(e){r={error:e}}finally{try{c&&!c.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return a}},n.selfCall=function(e){return u.default.isCallExpression(e)?e:u.default.factory.createCallExpression(u.default.factory.createParenthesizedExpression(u.default.factory.createArrowFunction(void 0,void 0,[],void 0,void 0,e)),void 0,void 0)},n.getEscapedText=function(e){return function(t){return e.printNode(u.default.EmitHint.Expression,t,t.getSourceFile())}},n.transpile=function(e){return function(t){var r=u.default.createSourceFile("".concat(c.RandomGenerator.uuid(),".ts"),t,u.default.ScriptTarget.ESNext,!0,u.default.ScriptKind.TS).statements[0];if(void 0===r)throw ReferenceError("Error on ExpressionFactory.transpile(): no statement exists.");if(!u.default.isExpressionStatement(r))throw TypeError("Error on ExpressionFactory.transpile(): statement is not an expression statement.");return function(t){var visitor=function(r){return u.default.isIdentifier(r)&&"$input"===r.text?t:u.default.visitEachChild(u.default.factory.cloneNode(r),visitor,e)};return visitor(r.expression)}}}},61387:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IdentifierFactory=void 0;var i=o(r(55423)),u=r(5724),c=r(12301);(n=a||(t.IdentifierFactory=a={})).identifier=function(e){return u.Escaper.variable(e)?i.default.factory.createIdentifier(e):i.default.factory.createStringLiteral(e)},n.access=function(e){return function(t){var r=n.identifier(t);return i.default.isStringLiteral(r)?i.default.factory.createElementAccessExpression(e,r):i.default.factory.createPropertyAccessExpression(e,r)}},n.getName=function(e){var t,r=null===(t=e.escapedText)||void 0===t?void 0:t.toString();return"string"==typeof r?r:i.default.isPropertyAccessExpression(e)?"".concat(n.getName(e.expression),".").concat(e.name.escapedText.toString()):i.default.isElementAccessExpression(e)?"".concat(n.getName(e.expression),"[").concat(n.getName(e.argumentExpression),"]"):"uknown"},n.postfix=function(e){return u.Escaper.variable(e)?'".'.concat(e,'"'):'"['.concat(JSON.stringify(e).split('"').join('\\"'),']"')},n.parameter=function(e,t,r){return void 0!==i.default.getDecorators?i.default.factory.createParameterDeclaration(void 0,void 0,e,(null==r?void 0:r.kind)===i.default.SyntaxKind.QuestionToken?i.default.factory.createToken(i.default.SyntaxKind.QuestionToken):void 0,null!=t?t:c.TypeFactory.keyword("any"),r&&r.kind!==i.default.SyntaxKind.QuestionToken?r:void 0):i.default.factory.createParameterDeclaration(void 0,void 0,void 0,e,(null==r?void 0:r.kind)===i.default.SyntaxKind.QuestionToken?i.default.factory.createToken(i.default.SyntaxKind.QuestionToken):void 0,t,r&&r.kind!==i.default.SyntaxKind.QuestionToken?r:void 0)}},67711:function(e,t,r){"use strict";var n,a,o=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.JsonMetadataFactory=void 0;var i=r(86752),u=r(63664),c=r(92595),f=r(43390);(n=a||(t.JsonMetadataFactory=a={})).analyze=function(e){return function(t,r){return function(a){var o=new c.MetadataCollection,i=f.MetadataFactory.analyze(t,r)({escape:!0,constant:!0,absorb:!0,validate:n.validate})(o)(a);if(!1===i.success)throw u.TransformerError.from(e)(i.errors);return[o,i.data]}}},n.validate=function(e){var t,r,n=[];(e.atomics.some(function(e){return"bigint"===e.type})||e.constants.some(function(e){return"bigint"===e.type}))&&n.push("JSON does not support bigint type."),(e.tuples.some(function(e){return e.type.elements.some(function(e){return!1===e.isRequired()})})||e.arrays.some(function(e){return!1===e.type.value.isRequired()}))&&n.push("JSON does not support undefined type in array."),e.maps.length&&n.push("JSON does not support Map type."),e.sets.length&&n.push("JSON does not support Set type.");try{for(var a=o(e.natives),u=a.next();!u.done;u=a.next()){var c=u.value;!1===i.AtomicPredicator.native(c)&&"Date"!==c&&n.push("JSON does not support ".concat(c," type."))}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n}},97846:function(e,t,r){"use strict";var n,a,o,i,u,c,f,s=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},d=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LiteralFactory=void 0;var y=d(r(55423)),p=r(73906),m=r(61387);(n=f||(t.LiteralFactory=f={})).generate=function(e){if(null===e)return y.default.factory.createNull();if(y.default.isIdentifier(e))return e;if(e instanceof Array)return o(e);if("object"==typeof e)return a(e);if("string"==typeof e)return c(e);if("boolean"==typeof e)return i(e);if("number"==typeof e)return i(e);else if("bigint"==typeof e)return u(e);else if("function"==typeof e)return y.default.factory.createIdentifier("undefined");else throw TypeError("Error on LiteralFactory.generate(): unknown type.")},a=function(e){return y.default.factory.createObjectLiteralExpression(Object.entries(e).filter(function(e){return void 0!==e[1]}).map(function(e){var t=s(e,2),r=t[0],a=t[1];return y.default.factory.createPropertyAssignment(m.IdentifierFactory.identifier(r),n.generate(a))}),!0)},o=function(e){return y.default.factory.createArrayLiteralExpression(e.map(n.generate),!0)},i=function(e){return y.default.factory.createIdentifier(e.toString())},u=function(e){return p.ExpressionFactory.bigint(e)},c=function(e){return y.default.factory.createStringLiteral(e)}},92595:function(e,t,r){"use strict";var n,a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataCollection=void 0;var u=r(49596),c=r(63860),f=r(58962),s=r(84530),d=r(61261),y=r(63224),p=r(37297),m=r(12301),v=function(){function MetadataCollection(e){this.options=e,this.objects_=new Map,this.object_unions_=new Map,this.aliases_=new Map,this.arrays_=new Map,this.tuples_=new Map,this.names_=new Map,this.object_index_=0,this.recursive_array_index_=0,this.recursive_tuple_index_=0}return MetadataCollection.prototype.aliases=function(){return o([],a(this.aliases_.values()),!1)},MetadataCollection.prototype.objects=function(){return o([],a(this.objects_.values()),!1)},MetadataCollection.prototype.unions=function(){return o([],a(this.object_unions_.values()),!1)},MetadataCollection.prototype.arrays=function(){return o([],a(this.arrays_.values()),!1)},MetadataCollection.prototype.tuples=function(){return o([],a(this.tuples_.values()),!1)},MetadataCollection.prototype.getName=function(e,t){var r,n,a=(n=m.TypeFactory.getFullName(e)(t),(null===(r=this.options)||void 0===r?void 0:r.replace)?this.options.replace(n):n),o=y.MapUtil.take(this.names_)(a,function(){return new Map}),i=o.get(t);if(void 0!==i)return i;var u=o.size?"".concat(a,".o").concat(o.size):a;return o.set(t,u),u},MetadataCollection.prototype.getUnionIndex=function(e){var t=e.objects.map(function(e){return e.name}).join(" | ");return y.MapUtil.take(this.object_unions_)(t,function(){return e.objects}),o([],a(this.object_unions_.keys()),!1).indexOf(t)},MetadataCollection.prototype.emplace=function(e,t){var r,n,a,o,i,u,c=this.objects_.get(t);if(void 0!==c)return[c,!1];var s=this.getName(e,t),d=f.MetadataObject.create({name:s,properties:[],description:null!==(n=null!==(r=t.aliasSymbol&&p.CommentFactory.description(t.aliasSymbol))&&void 0!==r?r:t.symbol&&p.CommentFactory.description(t.symbol))&&void 0!==n?n:void 0,jsDocTags:null!==(u=null!==(o=null===(a=t.aliasSymbol)||void 0===a?void 0:a.getJsDocTags())&&void 0!==o?o:null===(i=t.symbol)||void 0===i?void 0:i.getJsDocTags())&&void 0!==u?u:[],validated:!1,index:this.object_index_++,recursive:null,nullables:[]});return this.objects_.set(t,d),[d,!0]},MetadataCollection.prototype.emplaceAlias=function(e,t,r){var n,a,o=this.aliases_.get(t);if(void 0!==o)return[o,!1,function(){}];var i=this.getName(e,t),c=u.MetadataAlias.create({name:i,value:null,description:null!==(n=p.CommentFactory.description(r))&&void 0!==n?n:null,recursive:null,nullables:[],jsDocTags:null!==(a=r.getJsDocTags())&&void 0!==a?a:[]});return this.aliases_.set(t,c),[c,!0,function(e){return(0,d.Writable)(c).value=e}]},MetadataCollection.prototype.emplaceArray=function(e,t){var r=this.arrays_.get(t);if(void 0!==r)return[r,!1,function(){}];var n=this.getName(e,t),a=c.MetadataArrayType.create({name:n,value:null,index:null,recursive:null,nullables:[]});return this.arrays_.set(t,a),[a,!0,function(e){return(0,d.Writable)(a).value=e}]},MetadataCollection.prototype.emplaceTuple=function(e,t){var r=this.tuples_.get(t);if(void 0!==r)return[r,!1,function(){}];var n=this.getName(e,t),a=s.MetadataTupleType.create({name:n,elements:null,index:null,recursive:null,nullables:[]});return this.tuples_.set(t,a),[a,!0,function(e){return(0,d.Writable)(a).elements=e}]},MetadataCollection.prototype.setObjectRecursive=function(e,t){(0,d.Writable)(e).recursive=t},MetadataCollection.prototype.setAliasRecursive=function(e,t){(0,d.Writable)(e).recursive=t},MetadataCollection.prototype.setArrayRecursive=function(e,t){(0,d.Writable)(e).recursive=t,t&&((0,d.Writable)(e).index=this.recursive_array_index_++)},MetadataCollection.prototype.setTupleRecursive=function(e,t){(0,d.Writable)(e).recursive=t,t&&((0,d.Writable)(e).index=this.recursive_tuple_index_++)},MetadataCollection.prototype.toJSON=function(){return{objects:this.objects().map(function(e){return e.toJSON()}),aliases:this.aliases().map(function(e){return e.toJSON()}),arrays:o([],a(this.arrays_.values()),!1).map(function(e){return e.toJSON()}),tuples:o([],a(this.tuples_.values()),!1).map(function(e){return e.toJSON()})}},MetadataCollection}();t.MetadataCollection=v,(n=v||(t.MetadataCollection=v={})).replace=function(e){var t,r,n,o,u=e;try{for(var c=i(g),f=c.next();!f.done;f=c.next()){var s=a(f.value,1)[0];u=u.split(s).join("")}}catch(e){t={error:e}}finally{try{f&&!f.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}if(0!==u.length)return u;try{for(var d=i(g),y=d.next();!y.done;y=d.next()){var p=a(y.value,2),s=p[0],m=p[1];e=e.split(s).join(m)}}catch(e){n={error:e}}finally{try{y&&!y.done&&(o=d.return)&&o.call(d)}finally{if(n)throw n.error}}return e},n.escape=function(e){var t,r;try{for(var n=i(g),o=n.next();!o.done;o=n.next()){var u=a(o.value,2),c=u[0],f=u[1];""!==f&&(e=e.split(f).join(c))}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return e};var g=[["$","_dollar_"],["&","_and_"],["|","_or_"],["{","_blt_"],["}","_bgt_"],["<","_lt_"],[">","_gt_"],["[","_alt_"],["]","_agt_"],[",","_comma_"],["`","_backquote_"],["'","_singlequote_"],['"',"_doublequote_"],[" ","_space_"],["?","_question_"],[":","_colon_"],[";","_semicolon_"]]},7825:function(e,t,r){"use strict";var n,a,o=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a"),target:"array",kind:"minItems",value:parse_integer(e)(!0)(t),validate:"".concat(t," <= $input.length"),exclusive:!0},{name:"MaxItems<".concat(t,">"),target:"array",kind:"maxItems",value:parse_integer(e)(!0)(t),validate:"$input.length <= ".concat(t),exclusive:!0}]}}},minItems:function(e){return function(t){return{array:[{name:"MinItems<".concat(t,">"),target:"array",kind:"minItems",value:parse_integer(e)(!0)(t),validate:"".concat(t," <= $input.length"),exclusive:!0}]}}},maxItems:function(e){return function(t){return{array:[{name:"MaxItems<".concat(t,">"),target:"array",kind:"maxItems",value:parse_integer(e)(!0)(t),validate:"$input.length <= ".concat(t),exclusive:!0}]}}},type:function(){return function(e){return(e.startsWith("{")&&e.endsWith("}")&&(e=e.substring(1,e.length-1)),"int"===e?e="int32":"uint"===e&&(e="uint32"),!1===["int32","uint32","int64","uint64","float","double"].includes(e))?{}:{number:[{name:"Type<".concat(JSON.stringify(e),">"),target:"number",kind:"type",value:e,validate:"int32"===e?"Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647":"uint32"===e?"Math.floor($input) === $input && 0 <= $input && $input <= 4294967295":"int64"===e?"Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807":"uint64"===e?"Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615":"float"===e?"-1.175494351e38 <= $input && $input <= 3.4028235e38":"true",exclusive:!0}],bigint:[{name:"Type<".concat(JSON.stringify(e),">"),target:"bigint",kind:"type",value:e,validate:"int64"===e?"true":"BigInt(0) <= $input",exclusive:!0}]}}},minimum:function(e){return function(t){var r;return{number:[{name:"Minimum<".concat(t,">"),target:"number",kind:"minimum",value:parse_number(e)(t),validate:"".concat(t," <= $input"),exclusive:["minimum","exclusiveMinimum"]}],bigint:[{name:"Minimum<".concat(t,"n>"),target:"bigint",kind:"minimum",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"".concat(t," <= $input"),exclusive:["minimum","exclusiveMinimum"]}]}}},maximum:function(e){return function(t){var r;return{number:[{name:"Maximum<".concat(t,">"),target:"number",kind:"maximum",value:parse_number(e)(t),validate:"$input <= ".concat(t),exclusive:["maximum","exclusiveMaximum"]}],bigint:[{name:"Maximum<".concat(t,"n>"),target:"bigint",kind:"maximum",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"$input <= ".concat(t),exclusive:["maximum","exclusiveMaximum"]}]}}},exclusiveMinimum:function(e){return function(t){var r;return{number:[{name:"ExclusiveMinimum<".concat(t,">"),target:"number",kind:"exclusiveMinimum",value:parse_number(e)(t),validate:"".concat(t," < $input"),exclusive:["minimum","exclusiveMinimum"]}],bigint:[{name:"ExclusiveMinimum<".concat(t,"n>"),target:"bigint",kind:"exclusiveMinimum",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"".concat(t," < $input"),exclusive:["minimum","exclusiveMinimum"]}]}}},exclusiveMaximum:function(e){return function(t){var r;return{number:[{name:"ExclusiveMaximum<".concat(t,">"),target:"number",kind:"exclusiveMaximum",value:parse_number(e)(t),validate:"$input < ".concat(t),exclusive:["maximum","exclusiveMaximum"]}],bigint:[{name:"ExclusiveMaximum<".concat(t,"n>"),target:"bigint",kind:"exclusiveMaximum",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"$input < ".concat(t),exclusive:["maximum","exclusiveMaximum"]}]}}},multipleOf:function(e){return function(t){var r;return{number:[{name:"MultipleOf<".concat(t,">"),target:"number",kind:"multipleOf",value:parse_number(e)(t),validate:"$input % ".concat(t," === 0"),exclusive:!0}],bigint:[{name:"MultipleOf<".concat(t,"n>"),target:"bigint",kind:"multipleOf",value:null===(r=parse_integer(e)(!1)(t))?null:BigInt(r),validate:"$input % ".concat(t,"n === 0n"),exclusive:!0}]}}},format:function(){return function(e){var t=y.get(e);return void 0===t?{}:{string:[{name:"Format<".concat(JSON.stringify(t[0]),">"),target:"string",kind:"format",value:t[0],validate:t[1],exclusive:!0}]}}},pattern:function(){return function(e){return{string:[{name:"Pattern<".concat(JSON.stringify(e),">"),target:"string",kind:"pattern",value:e,validate:"RegExp(/".concat(e,"/).test($input)"),exclusive:["format"]}]}}},length:function(e){return function(t){return{string:[{name:"MinLength<".concat(t,">"),target:"string",kind:"minLength",value:parse_number(e)(t),validate:"".concat(t," <= $input.length"),exclusive:!0},{name:"MaxLength<".concat(t,">"),target:"string",kind:"maxLength",value:parse_number(e)(t),validate:"$input.length <= ".concat(t),exclusive:!0}]}}},minLength:function(e){return function(t){return{string:[{name:"MinLength<".concat(t,">"),target:"string",kind:"minLength",value:parse_number(e)(t),validate:"".concat(t," <= $input.length"),exclusive:!0}]}}},maxLength:function(e){return function(t){return{string:[{name:"MaxLength<".concat(t,">"),target:"string",kind:"maxLength",value:parse_number(e)(t),validate:"$input.length <= ".concat(t),exclusive:!0}]}}}},parse_number=function(e){return function(t){var r=Number(t);return!0===isNaN(r)?e("invalid number"):r}},parse_integer=function(e){return function(t){return function(r){var n=parse_number(e)(r);return null===n?null:Math.floor(n)!==n?e("invalid integer"):!0===t&&n<0?e("invalid unsigned integer"):n}}},y=new Map(u(u([],i(Object.entries(f.FormatCheatSheet).map(function(e){var t=i(e,2),r=t[0];return[r,[r,t[1]]]})),!1),[["datetime",["date-time","!isNaN(new Date($input).getTime())"]],["dateTime",["date-time","!isNaN(new Date($input).getTime())"]]],!1))},43390:function(e,t,r){"use strict";var n,a,o,i,u,c,f,s,d=this&&this.__assign||function(){return(d=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},p=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},v=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataFactory=void 0;var g=v(r(55423)),_=r(3078),b=r(51665),x=r(71903),S=r(30628),T=r(56896),E=r(73906);(n=s||(t.MetadataFactory=s={})).analyze=function(e,t){return function(r){return function(n){return function(o){var i=[],u=(0,x.explore_metadata)(e)(r)(n)(i)(o,{top:!0,object:null,property:null,nested:null,escaped:!1,aliased:!1});return(0,S.iterate_metadata_collection)(i)(n),(0,T.iterate_metadata_sort)(n)(u),r.validate&&i.push.apply(i,p([],y(a(t)(r)(r.validate)(u)),!1)),i.length?{success:!1,errors:i}:{success:!0,data:u}}}}},n.soleLiteral=function(e){var t=_.Metadata.initialize();return t.constants.push(b.MetadataConstant.from({values:[e],type:"string"})),t},a=function(e){return function(t){return function(r){return function(n){var a={functor:r,errors:[],objects:new Set,arrays:new Set,tuples:new Set,aliases:new Set};return o(e)(t)(a)(n,{object:null,property:null,nested:null,top:!0,aliased:!1,escaped:!1}),a.errors}}}},o=function(e){return function(t){return function(r){return function(n,a){var s,v,_,b,x,S,T,w,P,I,j,F,A,M,O,C,N,R,L=[];if(void 0!==e)try{for(var U=m(n.atomics),H=U.next();!H.done;H=U.next()){var q=H.value;try{for(var z=(_=void 0,m(q.tags)),B=z.next();!B.done;B=z.next()){var V=B.value;try{for(var J=(x=void 0,m(V.filter(function(e){return void 0!==e.validate&&void 0===e.predicate}))),G=J.next();!G.done;G=J.next()){var Q=G.value;try{Q.predicate=E.ExpressionFactory.transpile(e)(Q.validate)}catch(e){L.push("Unable to transpile type tag script: ".concat(JSON.stringify(Q.validate))),Q.predicate=function(){return g.default.factory.createTrue()}}}}catch(e){x={error:e}}finally{try{G&&!G.done&&(S=J.return)&&S.call(J)}finally{if(x)throw x.error}}}}catch(e){_={error:e}}finally{try{B&&!B.done&&(b=z.return)&&b.call(z)}finally{if(_)throw _.error}}}}catch(e){s={error:e}}finally{try{H&&!H.done&&(v=U.return)&&v.call(U)}finally{if(s)throw s.error}}L.push.apply(L,p([],y(r.functor(n,a)),!1)),L.length&&r.errors.push({name:n.getName(),explore:d({},a),messages:p([],y(new Set(L)),!1)});try{for(var W=m(n.aliases),K=W.next();!K.done;K=W.next()){var Y=K.value;i(e)(t)(r)(Y,a)}}catch(e){T={error:e}}finally{try{K&&!K.done&&(w=W.return)&&w.call(W)}finally{if(T)throw T.error}}try{for(var Z=m(n.arrays),X=Z.next();!X.done;X=Z.next()){var ee=X.value;u(e)(t)(r)(ee.type,a)}}catch(e){P={error:e}}finally{try{X&&!X.done&&(I=Z.return)&&I.call(Z)}finally{if(P)throw P.error}}try{for(var et=m(n.tuples),er=et.next();!er.done;er=et.next()){var en=er.value;c(e)(t)(r)(en.type,a)}}catch(e){j={error:e}}finally{try{er&&!er.done&&(F=et.return)&&F.call(et)}finally{if(j)throw j.error}}try{for(var ea=m(n.objects),eo=ea.next();!eo.done;eo=ea.next()){var ei=eo.value;f(e)(t)(r)(ei)}}catch(e){A={error:e}}finally{try{eo&&!eo.done&&(M=ea.return)&&M.call(ea)}finally{if(A)throw A.error}}try{for(var eu=m(n.sets),ec=eu.next();!ec.done;ec=eu.next()){var el=ec.value;o(e)(t)(r)(el,a)}}catch(e){O={error:e}}finally{try{ec&&!ec.done&&(C=eu.return)&&C.call(eu)}finally{if(O)throw O.error}}try{for(var ef=m(n.maps),es=ef.next();!es.done;es=ef.next()){var ed=es.value;o(e)(t)(r)(ed.key,a),o(e)(t)(r)(ed.value,a)}}catch(e){N={error:e}}finally{try{es&&!es.done&&(R=ef.return)&&R.call(ef)}finally{if(N)throw N.error}}!0===t.escape&&null!==n.escaped&&o(e)(t)(r)(n.escaped.returns,d(d({},a),{escaped:!0}))}}}},i=function(e){return function(t){return function(r){return function(n,a){r.aliases.has(n)||(r.aliases.add(n),o(e)(t)(r)(n.value,d(d({},a),{nested:n,aliased:!0})))}}}},u=function(e){return function(t){return function(r){return function(n,a){r.arrays.has(n)||(r.arrays.add(n),o(e)(t)(r)(n.value,d(d({},a),{nested:n,top:!1})))}}}},c=function(e){return function(t){return function(r){return function(n,a){var i,u;if(!r.tuples.has(n)){r.tuples.add(n);try{for(var c=m(n.elements),f=c.next();!f.done;f=c.next()){var s=f.value;o(e)(t)(r)(s,d(d({},a),{nested:n,top:!1}))}}catch(e){i={error:e}}finally{try{f&&!f.done&&(u=c.return)&&u.call(c)}finally{if(i)throw i.error}}}}}}},f=function(e){return function(t){return function(r){return function(n){var a,i;if(!r.objects.has(n)){if(r.objects.add(n),t.validate){var u={object:n,top:!1,property:null,nested:null,escaped:!1,aliased:!1},c=t.validate(_.Metadata.create(d(d({},_.Metadata.initialize()),{objects:[n]})),u);c.length&&r.errors.push({name:n.name,explore:u,messages:p([],y(new Set(c)),!1)})}try{for(var f=m(n.properties),s=f.next();!s.done;s=f.next()){var v=s.value;o(e)(t)(r)(v.value,{object:n,property:v.key.isSoleLiteral()?v.key.getSoleLiteral():{},nested:null,top:!1,aliased:!1,escaped:!1})}}catch(e){a={error:e}}finally{try{s&&!s.done&&(i=f.return)&&i.call(f)}finally{if(a)throw a.error}}}}}}}},76331:function(e,t){"use strict";var r,n,a,o,i,u=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},f=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)?(e.push({name:f([t],c(o.map(function(e){return e.name})),!1).join(" & "),explore:i,messages:m}),[]):_}}},r.validate=function(e){return function(t){return function(r){var n,a,o=!0;try{for(var i=u(r),c=i.next();!c.done;c=i.next())c.value.target!==t&&o&&(o=e(null)("target must constains ".concat(t," type")))}catch(e){n={error:e}}finally{try{c&&!c.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}return r.forEach(function(t,n){if(!1!==t.exclusive){if(!0===t.exclusive){var a=r.some(function(e,r){return n!==r&&e.kind===t.kind});!0===a&&o&&(o=e(null)("kind '".concat(t.kind,"' can't be duplicated")))}else if(Array.isArray(t.exclusive)){var a=r.find(function(e,r){return n!==r&&e.kind===t.kind&&t.exclusive.includes(e.name)});void 0!==a&&(null!=o||(o=e(null)("kind '".concat(t.kind,"' can't be used with '").concat(a.name,"'"))))}}}),o}}},n=function(e){return function(t,r){var n;if("target"===t&&(1!==r.constants.length||r.constants[0].values.length!==r.size()||r.constants[0].values.some(function(e){return"boolean"!==e&&"bigint"!==e&&"number"!==e&&"string"!==e&&"array"!==e})))return e(t)("must be one of 'boolean', 'bigint', 'number', 'string', 'array'");if("kind"===t&&(1!==r.size()||1!==r.constants.length||"string"!==r.constants[0].type||1!==r.constants[0].values.length))return e(t)("must be a string literal type");if("value"===t&&(r.size()>1||0!==r.size()&&(1!==r.constants.length||1!==r.constants[0].values.length)))return e(t)("must be a constant literal type or undefined value");if("exclusive"===t)return null!==o(e)(t)(r);if("validate"===t){if(0===r.size()&&!1===r.isRequired()&&!1===r.nullable||1===r.size()&&1===r.constants.length&&"string"===r.constants[0].type&&1===r.constants[0].values.length==!0)return!0;var a=null===(n=r.objects[0])||void 0===n?void 0:n.properties.map(function(e){return e.key.getSoleLiteral()}).filter(function(e){return null!==e});if(void 0===a)return e("target")("must be one of 'boolean', 'bigint', 'number', 'string', 'array'");if(!1===(1===r.size()&&1===r.objects.length&&r.objects[0].properties.every(function(e){return 1===e.value.size()&&e.value.isRequired()&&!1===e.value.nullable&&1===e.value.constants.length&&"string"===e.value.constants[0].type&&1===e.value.constants[0].values.length&&a.includes(e.key.getSoleLiteral())})))return e(t)("must be a string literal type or Record type.")}return!0}},a=function(e){return function(t){var r,n,a,i,u,find=function(e){var r,n;return null===(n=null===(r=t.properties[0])||void 0===r?void 0:r.value.objects[0])||void 0===n?void 0:n.properties.find(function(t){return t.key.getSoleLiteral()===e})},c=find("target").value.constants[0].values,f=find("kind").value.constants[0].values[0],s=null===(i=null===(a=find("value"))||void 0===a?void 0:a.value.constants[0])||void 0===i?void 0:i.values[0],d=o(e)("exclusive")(null===(u=find("exclusive"))||void 0===u?void 0:u.value);if(null===d)return null;var y=(n=null===(r=find("validate"))||void 0===r?void 0:r.value)&&0!==n.size()?n.constants.length?Object.fromEntries(c.map(function(e){return[e,n.constants[0].values[0]]})):Object.fromEntries(n.objects[0].properties.map(function(e){return[e.key.getSoleLiteral(),e.value.constants[0].values[0]]})):{};return{name:t.name,target:c,kind:f,value:s,validate:y,exclusive:null!=d&&d}}},o=function(e){return function(t){return function(r){return void 0!==r&&(1===r.size()&&1===r.constants.length&&"boolean"===r.constants[0].type&&1===r.constants[0].values.length?r.constants[0].values[0]:1===r.size()&&1===r.tuples.length&&r.tuples[0].type.elements.every(function(e){return 1===e.size()&&1===e.constants.length&&"string"===e.constants[0].type&&1===e.constants[0].values.length})?r.tuples[0].type.elements.map(function(e){return e.constants[0].values[0]}):(e(t)("must a boolean literal type or a tuple of string literal types."),null))}}};var s=["target","kind","value"],d=f(f([],c(s),!1),["validate","exclusive"],!1)},84981:function(e,t,r){"use strict";var n,a,o,i,u,c,f=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NumericRangeFactory=void 0;var s=f(r(55423)),d=r(73906);(n=i||(t.NumericRangeFactory=i={})).number=function(e){return function(t){return u[e](t)}},n.bigint=function(e){return function(t){return c[e](t)}},(a=u||(u={})).int32=function(e){return s.default.factory.createLogicalAnd(integer(e),between("-2147483648","2147483647")(e))},a.uint32=function(e){return s.default.factory.createLogicalAnd(integer(e),between("0","4294967295")(e))},a.int64=function(e){return s.default.factory.createLogicalAnd(integer(e),between("-9223372036854775808","9223372036854775807")(e))},a.uint64=function(e){return s.default.factory.createLogicalAnd(integer(e),between("0","18446744073709551615")(e))},a.float=function(e){return between("-1.175494351e38","3.4028235e38")(e)},a.double=function(){return s.default.factory.createTrue()},(o=c||(c={})).int64=function(){return s.default.factory.createTrue()},o.uint64=function(e){return s.default.factory.createLessThanEquals(s.default.factory.createCallExpression(s.default.factory.createIdentifier("BigInt"),void 0,[d.ExpressionFactory.number(0)]),e)};var integer=function(e){return s.default.factory.createStrictEquality(s.default.factory.createCallExpression(s.default.factory.createIdentifier("Math.floor"),void 0,[e]),e)},between=function(e,t){return function(r){return s.default.factory.createLogicalAnd(s.default.factory.createLessThanEquals(s.default.factory.createIdentifier(e),r),s.default.factory.createLessThanEquals(r,s.default.factory.createIdentifier(t)))}}},74123:function(e,t,r){"use strict";var n,a,o=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a cannot be used in both number and bigint types. Recommend to remove from number type'))};try{for(var _=o(["int64","uint64"]),b=_.next();!b.done;b=_.next()){var x=b.value;_loop_1(x)}}catch(e){a={error:e}}finally{try{b&&!b.done&&(i=_.return)&&i.call(_)}finally{if(a)throw a.error}}}return e.arrays.length&&e.arrays.some(function(e){return!!e.type.value.arrays.length})&&noSupport("over two dimenstional array type"),e.arrays.length&&e.arrays.some(function(e){return!1===e.type.value.isRequired()||!0===e.type.value.nullable})&&noSupport("optional type in array"),e.arrays.length&&e.arrays.some(function(e){return e.type.value.size()>1})&&noSupport("union type in array"),e.arrays.length&&e.arrays.some(function(e){return e.type.value.maps.length||e.type.value.objects.length&&e.type.value.objects.some(function(e){return!1===c.ProtobufUtil.isStaticObject(e)})})&&noSupport("dynamic object in array"),e.size()>1&&e.arrays.length&&noSupport("union type with array type"),e.objects.length&&e.objects.some(function(e){return 0===e.properties.length})&&noSupport("empty object type"),e.objects.length&&e.objects.some(function(e){return e.properties.filter(function(e){return!e.key.isSoleLiteral()}).length>1})&&noSupport("object type with multiple dynamic key typed properties. Keep only one."),e.objects.length&&e.objects.some(function(e){return e.properties.some(function(e){return e.key.isSoleLiteral()})&&e.properties.some(function(e){return!e.key.isSoleLiteral()})})&&noSupport("object type with mixed static and dynamic key typed properties. Keep statics or dynamic only."),e.objects.length&&e.objects.some(function(e){return e.properties.some(function(e){return!0===e.key.isSoleLiteral()&&!1===s.Escaper.variable(e.key.getSoleLiteral())})})&&noSupport("object type with invalid static key name."),e.objects.length&&isDynamicObject(e.objects[0])&&e.objects[0].properties.some(function(e){return!!e.value.arrays.length})&&noSupport("dynamic object with array value type"),e.size()>1&&e.objects.length&&isDynamicObject(e.objects[0])&&noSupport("union type with dynamic object type"),e.objects.length&&e.objects.some(function(e){return isDynamicObject(e)&&e.properties.some(function(e){return c.ProtobufUtil.isUnion(e.value)})})&&noSupport("union type in dynamic property"),e.maps.length&&e.maps.some(function(e){return c.ProtobufUtil.isUnion(e.key)})&&noSupport("union key typed map"),e.maps.length&&e.maps.some(function(e){return 1!==c.ProtobufUtil.getAtomics(e.key).length})&&noSupport("non-atomic key typed map"),e.maps.length&&e.maps.some(function(e){return!1===e.key.isRequired()||e.key.nullable})&&noSupport("optional key typed map"),e.maps.length&&e.maps.some(function(e){return!!e.value.arrays.length})&&noSupport("map type with array value type"),e.size()>1&&e.maps.length&&noSupport("union type with map type"),e.maps.length&&e.maps.some(function(e){return c.ProtobufUtil.isUnion(e.value)})&&noSupport("union type in map value type"),u};var isDynamicObject=function(e){return!1===e.properties[0].key.isSoleLiteral()},y=new Map(u(u([["Date","string"],["Boolean","boolean"],["BigInt","bigint"],["Number","number"],["String","string"]],i(["Buffer","Uint8ClampedArray","Uint16Array","Uint32Array","BigUint64Array","Int8Array","Int16Array","Int32Array","BigInt64Array","Float32Array","Float64Array","DataView","ArrayBuffer","SharedArrayBuffer"].map(function(e){return[e,"Uint8Array"]})),!1),[["WeakSet","Array"],["WeakMap","Map"]],!1))},6152:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.StatementFactory=void 0;var i=o(r(55423));(n=a||(t.StatementFactory=a={})).mut=function(e,t){return i.default.factory.createVariableStatement(void 0,i.default.factory.createVariableDeclarationList([i.default.factory.createVariableDeclaration(e,void 0,void 0,t)],i.default.NodeFlags.Let))},n.constant=function(e,t){return i.default.factory.createVariableStatement(void 0,i.default.factory.createVariableDeclarationList([i.default.factory.createVariableDeclaration(e,void 0,void 0,t)],i.default.NodeFlags.Const))},n.entry=function(e){return function(t){return i.default.factory.createVariableDeclarationList([i.default.factory.createVariableDeclaration(i.default.factory.createArrayBindingPattern([i.default.factory.createBindingElement(void 0,void 0,i.default.factory.createIdentifier(e),void 0),i.default.factory.createBindingElement(void 0,void 0,i.default.factory.createIdentifier(t),void 0)]),void 0,void 0,void 0)],i.default.NodeFlags.Const)}},n.transpile=function(e){return i.default.factory.createExpressionStatement(i.default.factory.createIdentifier(i.default.transpile(e)))},n.block=function(e){return i.default.factory.createBlock([i.default.factory.createExpressionStatement(e)],!0)}},95374:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TemplateFactory=void 0;var i=o(r(55423));(a||(t.TemplateFactory=a={})).generate=function(e){if(e.every(function(e){return i.default.isStringLiteral(e)}))return i.default.factory.createStringLiteral(e.map(function(e){return e.text}).join(""));var t={value:"",index:0};n(e)(t);for(var r=i.default.factory.createTemplateHead(t.value),a=[];;){var o=e[t.index++];n(e)(t);var u=t.index===e.length;if(a.push(i.default.factory.createTemplateSpan(o,u?i.default.factory.createTemplateTail(t.value):i.default.factory.createTemplateMiddle(t.value))),!0===u)break}return i.default.factory.createTemplateExpression(r,a)},n=function(e){return function(t){var r=e.findIndex(function(e,r){return r>=t.index&&!i.default.isStringLiteral(e)}),n=-1!==r?r:e.length;t.value=e.slice(t.index,n).map(function(e){return e.text}).reduce(function(e,t){return e+t},""),t.index=n}}},12301:function(e,t,r){"use strict";var n,a,o,i,u,c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TypeFactory=void 0;var f=c(r(55423));(n=u||(t.TypeFactory=u={})).isFunction=function(e){return null!==a(e)},a=function(e){var t,r,n=null===(r=null===(t=e.symbol)||void 0===t?void 0:t.declarations)||void 0===r?void 0:r[0];return void 0===n?null:f.default.isFunctionLike(n)?n:(f.default.isPropertyAssignment(n)||f.default.isPropertyDeclaration(n))&&f.default.isFunctionLike(n.initializer)?n.initializer:null},n.getReturnType=function(e){return function(t){return function(r){var n=t.getProperty(r);if(!n||!n.valueDeclaration)return null;var a=e.getTypeOfSymbolAtLocation(n,n.valueDeclaration),o=e.getSignaturesOfType(a,f.default.SignatureKind.Call)[0];return o?o.getReturnType():null}}},n.getFullName=function(e){return function(t,r){if(null!=r||(r=null!==(a=t.aliasSymbol)&&void 0!==a?a:t.getSymbol()),void 0===r)return e.typeToString(t);if(void 0===t.aliasSymbol&&t.isUnionOrIntersection()){var a,o=t.isIntersection()?" & ":" | ";return t.types.map(function(t){return n.getFullName(e)(t)}).join(o)}var u=i(r),c=t.aliasSymbol?t.aliasTypeArguments||[]:e.getTypeArguments(t);return c.length?"Promise"===u?n.getFullName(e)(c[0]):"".concat(u,"<").concat(c.map(function(t){return n.getFullName(e)(t)}).join(", "),">"):u}},o=function(e){return function(t){return f.default.isModuleBlock(e)?o(e.parent.parent)("".concat(e.parent.name.getFullText().trim(),".").concat(t)):t}},i=function(e){var t,r,n=null===(r=null===(t=e.getDeclarations())||void 0===t?void 0:t[0])||void 0===r?void 0:r.parent;return n?o(n)(e.escapedName.toString()):"__type"},n.keyword=function(e){return f.default.factory.createKeywordTypeNode("void"===e?f.default.SyntaxKind.VoidKeyword:"any"===e?f.default.SyntaxKind.AnyKeyword:"unknown"===e?f.default.SyntaxKind.UnknownKeyword:"boolean"===e?f.default.SyntaxKind.BooleanKeyword:"number"===e?f.default.SyntaxKind.NumberKeyword:"bigint"===e?f.default.SyntaxKind.BigIntKeyword:f.default.SyntaxKind.StringKeyword)}},84411:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ValueFactory=void 0;var i=o(r(55423));(n=a||(t.ValueFactory=a={})).NULL=function(){return i.default.factory.createNull()},n.UNDEFINED=function(){return i.default.factory.createIdentifier("undefined")},n.BOOLEAN=function(e){return e?i.default.factory.createTrue():i.default.factory.createFalse()},n.INPUT=function(e){return void 0===e&&(e="input"),i.default.factory.createIdentifier(e)},n.TYPEOF=function(e){return i.default.factory.createTypeOfExpression(e)}},19614:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataHelper=void 0;var n,a=r(3078),o=r(51665);(n||(t.MetadataHelper=n={})).literal_to_metadata=function(e){var t=a.Metadata.initialize();return t.constants.push(o.MetadataConstant.create({type:"string",values:[e]})),t}},30500:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.emend_metadata_atomics=void 0;var a=r(45041),o=r(73346);t.emend_metadata_atomics=function(e){var t,r,_loop_1=function(t){var r=e.constants.findIndex(function(e){return e.type===t.type});-1!==r&&e.constants.splice(r,1)};try{for(var i=n(e.atomics),u=i.next();!u.done;u=i.next()){var c=u.value;_loop_1(c)}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}var f=e.constants.findIndex(function(e){return"boolean"===e.type});if(-1!==f&&2===e.constants[f].values.length){var s=e.constants.splice(f,1)[0];o.ArrayUtil.take(e.atomics,function(e){return"boolean"===e.type},function(){var e;return a.MetadataAtomic.create({type:"boolean",tags:null!==(e=s.tags)&&void 0!==e?e:[]})}),s.tags=void 0}e.templates.length&&void 0!==e.atomics.find(function(e){return"string"===e.type})&&e.templates.splice(0,e.templates.length)}},33389:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.emplace_metadata_alias=void 0;var o=r(73346),i=r(71903);t.emplace_metadata_alias=function(e){return function(t){return function(r){return function(u){return function(c,f,s){var d=a(r.emplaceAlias(e,c,c.aliasSymbol),3),y=d[0],p=d[1],m=d[2];return o.ArrayUtil.add(y.nullables,f),!1===p||m((0,i.explore_metadata)(e)(t)(r)(u)(c,n(n({},s),{escaped:!1,aliased:!0}))),y}}}}}},33455:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.emplace_metadata_array_type=void 0;var o=r(73346),i=r(71903);t.emplace_metadata_array_type=function(e){return function(t){return function(r){return function(u){return function(c,f,s){var d=a(r.emplaceArray(e,c),3),y=d[0],p=d[1],m=d[2];return o.ArrayUtil.add(y.nullables,f),!1===p||m((0,i.explore_metadata)(e)(t)(r)(u)(c.getNumberIndexType(),n(n({},s),{escaped:!1,aliased:!1}))),y}}}}}},18083:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.emplace_metadata_object=void 0;var i=o(r(55423)),u=r(56724),c=r(61261),f=r(73346),s=r(37297),d=r(19614),y=r(71903);r(78167),t.emplace_metadata_object=function(e){return function(t){return function(r){return function(o){return function(p,m){var v,g,_,b,x,S,T=n(r.emplace(e,p),2),E=T[0],w=T[1];if(f.ArrayUtil.add(E.nullables,m,function(e){return e===m}),!1===w)return E;var P=p.isClass()?function(e){var t,r,n=null===(r=null===(t=e.getChildren()[0])||void 0===t?void 0:t.getChildren()[0])||void 0===r?void 0:r.kind;return n!==i.default.SyntaxKind.PrivateKeyword&&n!==i.default.SyntaxKind.ProtectedKeyword&&(i.default.isParameter(e)||isProperty(e))}:function(e){return isProperty(e)},insert=function(e){return function(t){return function(r,n){var a,o,i=r&&null!==(a=s.CommentFactory.description(r))&&void 0!==a?a:null,c=(null!==(o=null==r?void 0:r.getJsDocTags())&&void 0!==o?o:[]).filter(null!=n?n:function(){return!0}),f=u.MetadataProperty.create({key:e,value:t,description:i,jsDocTags:c});return E.properties.push(f),f}}};try{for(var I=a(p.getApparentProperties()),j=I.next();!j.done;j=I.next()){var F=j.value;!function(a){if(void 0===(null!==(x=a.getJsDocTags(e))&&void 0!==x?x:[]).find(function(e){return"internal"===e.name})){var u,f,s,m=n((s=(f=null===(u=a.getDeclarations())||void 0===u?void 0:u[0])?e.getTypeOfSymbolAtLocation(a,f):e.getTypeOfPropertyOfType(p,a.name),[f,s]),2),v=m[0],g=m[1];if((!v||!1!==P(v))&&void 0!==g){var _=d.MetadataHelper.literal_to_metadata(a.name),b=(0,y.explore_metadata)(e)(t)(r)(o)(g,{top:!1,object:E,property:a.name,nested:null,escaped:!1,aliased:!1});(0,c.Writable)(b).optional=(a.flags&i.default.SymbolFlags.Optional)!=0,insert(_)(b)(a)}}}(F)}}catch(e){v={error:e}}finally{try{j&&!j.done&&(g=I.return)&&g.call(I)}finally{if(v)throw v.error}}try{for(var A=a(e.getIndexInfosOfType(p)),M=A.next();!M.done;M=A.next()){var O=M.value,analyzer=function(n){return function(a){return(0,y.explore_metadata)(e)(t)(r)(o)(n,{top:!1,object:E,property:a,nested:null,escaped:!1,aliased:!1})}},C=analyzer(O.keyType)(null),N=analyzer(O.type)({});C.atomics.length+C.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0)+C.templates.length+C.natives.filter(function(e){return"Boolean"===e||"BigInt"===e||"Number"===e||"String"===e}).length!==C.size()&&o.push({name:C.getName(),explore:{top:!1,object:E,property:"[key]",nested:null,escaped:!1,aliased:!1},messages:[]}),insert(C)(N)((null===(S=O.declaration)||void 0===S?void 0:S.parent)?e.getSymbolAtLocation(O.declaration.parent):void 0,function(e){return"default"!==e.name})}}catch(e){_={error:e}}finally{try{M&&!M.done&&(b=A.return)&&b.call(A)}finally{if(_)throw _.error}}return E}}}}};var isProperty=function(e){return i.default.isPropertyDeclaration(e)||i.default.isPropertyAssignment(e)||i.default.isPropertySignature(e)||i.default.isTypeLiteralNode(e)}},70373:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.emplace_metadata_tuple=void 0;var i=o(r(55423)),u=r(3078),c=r(61261),f=r(73346),s=r(71903);t.emplace_metadata_tuple=function(e){return function(t){return function(r){return function(o){return function(d,y,p){var m,v,g,_=a(r.emplaceTuple(e,d),3),b=_[0],x=_[1],S=_[2];if(f.ArrayUtil.add(b.nullables,y),!1===x)return b;var T=null!==(g=null!==(m=d.elementFlags)&&void 0!==m?m:null===(v=d.target)||void 0===v?void 0:v.elementFlags)&&void 0!==g?g:[];return S(e.getTypeArguments(d).map(function(a,f){var d=(0,s.explore_metadata)(e)(t)(r)(o)(a,n(n({},p),{nested:b,aliased:!1,escaped:!1})),y=T[f];if(y===i.default.ElementFlags.Optional&&((0,c.Writable)(d).optional=!0),y!==i.default.ElementFlags.Rest)return d;var m=u.Metadata.initialize();return(0,c.Writable)(m).rest=d,m})),b}}}}}},71903:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.explore_metadata=void 0;var n=r(3078),a=r(30500),o=r(24149);t.explore_metadata=function(e){return function(t){return function(r){return function(i){return function(u,c){var f=n.Metadata.initialize(c.escaped);return null===u||((0,o.iterate_metadata)(e)(t)(r)(i)(f,u,c),(0,a.emend_metadata_atomics)(f),f.escaped&&((0,a.emend_metadata_atomics)(f.escaped.original),(0,a.emend_metadata_atomics)(f.escaped.returns))),f}}}}}},24149:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_collection=void 0;var a=r(18521);t.iterate_metadata_collection=function(e){return function(t){try{for(var r,o,i,u,c,f,s=n(t.arrays()),d=s.next();!d.done;d=s.next()){var y=d.value;null===y.recursive&&t.setArrayRecursive(y,isArrayRecursive(new Set)(y)(y.value))}}catch(e){r={error:e}}finally{try{d&&!d.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}try{for(var p=n(t.tuples()),m=p.next();!m.done;m=p.next()){var v=m.value;if(null===v.recursive){var g=new Set;t.setTupleRecursive(v,v.elements.some(isTupleRecursive(g)(v)))}}}catch(e){i={error:e}}finally{try{m&&!m.done&&(u=p.return)&&u.call(p)}finally{if(i)throw i.error}}var _loop_1=function(r){if((0,a.iterate_metadata_comment_tags)(e)(r),null===r.recursive){var n=new Set;t.setObjectRecursive(r,r.properties.some(function(e){return isObjectRecursive(n)(r)(e.value)}))}};try{for(var _=n(t.objects()),b=_.next();!b.done;b=_.next()){var x=b.value;_loop_1(x)}}catch(e){c={error:e}}finally{try{b&&!b.done&&(f=_.return)&&f.call(_)}finally{if(c)throw c.error}}}};var isArrayRecursive=function(e){return function(t){return function(r){return!e.has(r)&&(e.add(r),r.arrays.some(function(r){return r.type===t||isArrayRecursive(e)(t)(r.type.value)})||r.aliases.some(function(r){return isArrayRecursive(e)(t)(r.value)})||r.tuples.some(function(r){return!r.type.recursive&&r.type.elements.some(function(r){return isArrayRecursive(e)(t)(r)})})||r.maps.some(function(r){return isArrayRecursive(e)(t)(r.value)})||r.sets.some(function(r){return isArrayRecursive(e)(t)(r)})||null!==r.escaped&&isArrayRecursive(e)(t)(r.escaped.returns)||null!==r.rest&&isArrayRecursive(e)(t)(r.rest))}}},isTupleRecursive=function(e){return function(t){return function(r){return!e.has(r)&&(e.add(r),r.tuples.some(function(r){return r.type===t||r.type.elements.some(function(r){return isTupleRecursive(e)(t)(r)})})||r.arrays.some(function(r){return!r.type.recursive&&isTupleRecursive(e)(t)(r.type.value)})||r.maps.some(function(r){return isTupleRecursive(e)(t)(r.value)})||r.sets.some(function(r){return isTupleRecursive(e)(t)(r)})||r.aliases.some(function(r){return isTupleRecursive(e)(t)(r.value)})||null!==r.escaped&&isTupleRecursive(e)(t)(r.escaped.returns)||null!==r.rest&&isTupleRecursive(e)(t)(r.rest))}}},isObjectRecursive=function(e){return function(t){return function(r){return!e.has(r)&&(e.add(r),r.objects.some(function(r){return t===r||r.properties.some(function(r){return isObjectRecursive(e)(t)(r.value)})})||r.aliases.some(function(r){return isObjectRecursive(e)(t)(r.value)})||r.arrays.some(function(r){return!r.type.recursive&&isObjectRecursive(e)(t)(r.type.value)})||r.tuples.some(function(r){return!r.type.recursive&&r.type.elements.some(function(r){return isObjectRecursive(e)(t)(r)})})||r.maps.some(function(r){return isObjectRecursive(e)(t)(r.value)})||r.sets.some(function(r){return isObjectRecursive(e)(t)(r)})||null!==r.escaped&&isObjectRecursive(e)(t)(r.escaped.returns)||null!==r.rest&&isObjectRecursive(e)(t)(r.rest))}}}},18521:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_comment_tags=void 0;var a=r(7825);t.iterate_metadata_comment_tags=function(e){return function(t){var r,o;if(!0!==t.tagged_){t.tagged_=!0;try{for(var i=n(t.properties),u=i.next();!u.done;u=i.next()){var c=u.value;a.MetadataCommentTagFactory.analyze(e)(c.value)(c.jsDocTags,{top:!1,object:t,property:c.key.isSoleLiteral()?c.key.getSoleLiteral():{},nested:null,escaped:!1,aliased:!1})}}catch(e){r={error:e}}finally{try{u&&!u.done&&(o=i.return)&&o.call(i)}finally{if(r)throw r.error}}}}}},95032:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_constant=void 0;var a=n(r(55423)),o=r(51665),i=r(73346);t.iterate_metadata_constant=function(e){return function(t){return function(r,n){if(!t.constant)return!1;if(n.isLiteral()){var u,c="object"==typeof n.value?BigInt("".concat(n.value.negative?"-":"").concat(n.value.base10Value)):n.value,f=i.ArrayUtil.take(r.constants,function(e){return e.type===typeof c},function(){return o.MetadataConstant.create({type:typeof c,values:[]})});return i.ArrayUtil.add(f.values,c,function(e,t){return e===t}),!0}if(u=a.default.TypeFlags.BooleanLiteral,(n.getFlags()&u)!=0){var s="true"===e.typeToString(n),f=i.ArrayUtil.take(r.constants,function(e){return"boolean"===e.type},function(){return o.MetadataConstant.create({type:"boolean",values:[]})});return i.ArrayUtil.add(f.values,s,function(e,t){return e===t}),!0}return!1}}}},84991:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_intersection=void 0;var c=u(r(55423)),f=r(45041),s=r(51665),d=r(73346),y=r(92595),p=r(76331),m=r(71903),v=r(24149),g=r(22481);t.iterate_metadata_intersection=function(e){return function(t){return function(r){return function(u){return function(_,b,x){if(!b.isIntersection()||b.types.every(function(t){return(t.getFlags()&c.default.TypeFlags.Object)!=0&&!e.isArrayType(t)&&!e.isTupleType(t)}))return!1;var S,T,E,w,P,I,j,F,A,M,O=new y.MetadataCollection,C=[],N=o([],a(new Map(b.types.map(function(r){var a=(0,m.explore_metadata)(e)(n(n({},t),{absorb:!0}))(O)(C)(r,n(n({},x),{aliased:!1}));return[a.getName(),a]})).values()),!1);if(C.length)return u.push.apply(u,o([],a(C),!1)),!0;if(1===N.length)return(0,v.iterate_metadata)(e)(t)(r)(u)(_,b.types[0],x),!0;if(N.every(function(e){return e.objects.length===e.size()}))return!1;var R=void 0===(E=null===(T=null===(S=N.find(function(e){return 1===e.size()&&1===e.constants.length&&"boolean"===e.constants[0].type}))||void 0===S?void 0:S.constants[0])||void 0===T?void 0:T.values[0])?null:N.every(function(e){return 0===e.atomics.length||e.atomics.every(function(e){return"boolean"!==e.type})})?E:null;if(null!==R&&!0===_.boolean_literal_intersected_)return _.constants.find(function(e){return"boolean"===e.type}).values.push(R),!0;var L=N.map(function(e,t){return[e,t]}).filter(function(e){var t=a(e,1)[0];return 1===t.size()&&(1===t.atomics.length||1===t.constants.length&&"boolean"===t.constants[0].type||1===t.arrays.length)}),U=N.filter(function(e){return e.size()===e.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0)+e.templates.length&&!(1===e.size()&&"boolean"===e.constants[0].type)}),H=N.filter(function(e){return!1===e.nullable&&!0===e.isRequired()&&e.objects.length&&e.objects.length===e.size()&&e.objects.every(function(e){return e.properties.every(function(e){return e.value.optional})})}),q=new Set(L.map(function(e){var t=a(e,1)[0];return o(o([],a(t.atomics.map(function(e){return e.type})),!1),a(t.constants.filter(function(e){return"boolean"===e.type}).map(function(e){return e.type})),!1)}).flat()),z=new Set(L.map(function(e){return a(e,1)[0].arrays.map(function(e){return e.type.name})}).flat());if(q.size+z.size>1||L.length+H.length+U.length!==N.length)return u.push({name:N.map(function(e){return e.getName()}).join(" & "),explore:n({},x),messages:["nonsensible intersection"]}),!0;if(0===q.size&&0===z.size&&U.length){try{for(var B=i(U),V=B.next();!V.done;V=B.next()){var J=V.value;try{for(var G=(I=void 0,i(J.templates)),Q=G.next();!Q.done;Q=G.next()){var W=Q.value;d.ArrayUtil.add(_.templates,W,function(e,t){return e.map(function(e){return e.getName()}).join(" | ")===t.map(function(e){return e.getName()}).join(" | ")})}}catch(e){I={error:e}}finally{try{Q&&!Q.done&&(j=G.return)&&j.call(G)}finally{if(I)throw I.error}}var _loop_1=function(e){var t,r,n=_.constants.find(function(t){return t.type===e.type});if(n)try{for(var a=(t=void 0,i(e.values)),o=a.next();!o.done;o=a.next()){var u=o.value;d.ArrayUtil.add(n.values,u,function(e,t){return e===t})}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else _.constants.push(s.MetadataConstant.create(e))};try{for(var K=(F=void 0,i(J.constants)),Y=K.next();!Y.done;Y=K.next()){var Z=Y.value;_loop_1(Z)}}catch(e){F={error:e}}finally{try{Y&&!Y.done&&(A=K.return)&&A.call(K)}finally{if(F)throw F.error}}}}catch(e){w={error:e}}finally{try{V&&!V.done&&(P=B.return)&&P.call(B)}finally{if(w)throw w.error}}return!0}var X=R?"boolean":q.size?q.values().next().value:"array";if("boolean"===X||"bigint"===X||"number"===X||"string"===X)null===R?d.ArrayUtil.add(_.atomics,f.MetadataAtomic.create({type:q.values().next().value,tags:[]}),function(e,t){return e.type===t.type}):d.ArrayUtil.take(_.constants,function(e){return"boolean"===e.type},function(){return s.MetadataConstant.create({type:"boolean",values:[R]})});else if("array"===X){var ee=z.values().next().value;_.arrays.some(function(e){return e.type.name===ee})||(0,g.iterate_metadata_array)(e)(t)(r)(u)(_,b.types[L.find(function(e){return 1===e[0].arrays.length})[1]],n(n({},x),{aliased:!1,escaped:!1}))}if(H.length){var et=p.MetadataTypeTagFactory.analyze(u)(X)(H.map(function(e){return e.objects}).flat(),x);if(et.length){if("array"===X)_.arrays.at(-1).tags.push(et);else if(null===R)_.atomics.find(function(e){return e.type===X}).tags.push(et);else{var er=_.constants.find(function(e){return"boolean"===e.type});null!==(M=er.tags)&&void 0!==M||(er.tags=[]),er.tags.push(et)}}}return null!==R&&(_.boolean_literal_intersected_=!0),!0}}}}}},57540:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")}),!0}}}}}},54053:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a"},{name:"slice",return:"Blob"},{name:"text",return:"Promise"}],properties:[{name:"size",type:"number"},{name:"type",type:"string"}]}]})),!1),[["DataView",{methods:["getFloat32","getFloat64","getInt8","getInt16","getInt32","getUint8","getUint16","getUint32"].map(function(e){return{name:e,return:"number"}})}]],!1)),f=["WeakMap","WeakSet"].map(function(e){return{name:e,methods:["has","delete"].map(function(e){return{name:e,return:"boolean"}})}})},9859:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_object=void 0;var a=n(r(55423)),o=r(73346),i=r(18083);t.iterate_metadata_object=function(e){return function(t){return function(r){return function(n){return function(u,c,f){if(void 0===f&&(f=!1),!1===f){var s;if(s=a.default.TypeFlags.Object,(c.getFlags()&s)==0&&!c.isIntersection()&&"object"!==c.intrinsicName)return!1}var d=(0,i.emplace_metadata_object)(e)(t)(r)(n)(c,u.nullable);return o.ArrayUtil.add(u.objects,d,function(e){return e.name===d.name}),!0}}}}}},16322:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.iterate_metadata_sort=void 0;var a=r(3078),o=r(58962);t.iterate_metadata_sort=function(e){return function(t){var r,a,o,i,u,c,f,s,d,y,p=new Set;try{for(var m=n(e.arrays()),v=m.next();!v.done;v=m.next()){var g=v.value;iterate(p)(e)(g.value)}}catch(e){r={error:e}}finally{try{v&&!v.done&&(a=m.return)&&a.call(m)}finally{if(r)throw r.error}}try{for(var _=n(e.tuples()),b=_.next();!b.done;b=_.next()){var x=b.value;try{for(var S=(u=void 0,n(x.elements)),T=S.next();!T.done;T=S.next()){var E=T.value;iterate(p)(e)(E)}}catch(e){u={error:e}}finally{try{T&&!T.done&&(c=S.return)&&c.call(S)}finally{if(u)throw u.error}}}}catch(e){o={error:e}}finally{try{b&&!b.done&&(i=_.return)&&i.call(_)}finally{if(o)throw o.error}}try{for(var w=n(e.objects()),P=w.next();!P.done;P=w.next()){var I=P.value;try{for(var j=(d=void 0,n(I.properties)),F=j.next();!F.done;F=j.next()){var A=F.value;iterate(p)(e)(A.value)}}catch(e){d={error:e}}finally{try{F&&!F.done&&(y=j.return)&&y.call(j)}finally{if(d)throw d.error}}}}catch(e){f={error:e}}finally{try{P&&!P.done&&(s=w.return)&&s.call(w)}finally{if(f)throw f.error}}iterate(p)(e)(t)}};var iterate=function(e){return function(t){return function(r){var i,u,c,f;if(!e.has(r)){e.add(r);try{for(var s=n(r.maps),d=s.next();!d.done;d=s.next()){var y=d.value;iterate(e)(t)(y.value)}}catch(e){i={error:e}}finally{try{d&&!d.done&&(u=s.return)&&u.call(s)}finally{if(i)throw i.error}}try{for(var p=n(r.sets),m=p.next();!m.done;m=p.next()){var v=m.value;iterate(e)(t)(v)}}catch(e){c={error:e}}finally{try{m&&!m.done&&(f=p.return)&&f.call(p)}finally{if(c)throw c.error}}null!==r.escaped&&iterate(e)(t)(r.escaped.returns),null!==r.rest&&iterate(e)(t)(r.rest),r.objects.length>1&&(r.objects.sort(function(e,t){return o.MetadataObject.covers(e,t)?-1:o.MetadataObject.covers(t,e)?1:0}),r.union_index=t.getUnionIndex(r)),r.arrays.length>1&&r.arrays.sort(function(e,t){return a.Metadata.covers(e.type.value,t.type.value)?-1:a.Metadata.covers(t.type.value,e.type.value)?1:0}),r.tuples.length>1&&r.tuples.sort(function(e,t){var r=a.Metadata.initialize(),n=a.Metadata.initialize();return r.tuples.push(e),n.tuples.push(t),a.Metadata.covers(r,n)?-1:a.Metadata.covers(n,r)?1:0})}}}}},92861:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},f=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},x=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},S=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")}).join(" | "));ea(a.sets.some(function(e){return e.any})?null:f(e)(t)(r)(n,a.sets,_(_({},i),{from:"array"})))}if(a.maps.length){var ea=prepare((0,B.check_native)("Map")(n),a.maps.map(function(e){var t=e.key,r=e.value;return"Map<".concat(t,", ").concat(r,">")}).join(" | "));ea(a.maps.some(function(e){return e.key.any&&e.value.any})?null:s(e)(t)(r)(n,a.maps,_(_({},i),{from:"array"})))}if(a.tuples.length+a.arrays.length>0){var ea=prepare(t.atomist(i)({expected:S(S([],x(a.tuples.map(function(e){return e.type.name})),!1),x(a.arrays.map(function(e){return e.getName()})),!1).join(" | "),expression:w.ExpressionFactory.isArray(n),conditions:[]})(n),S(S([],x(a.tuples),!1),x(a.arrays),!1).map(function(e){return e.type.name}).join(" | "));ea(0===a.arrays.length?1===a.tuples.length?u(e)(t)(r)(n,a.tuples[0],_(_({},i),{from:"array"})):d(e)(t)(r)(n,a.tuples,_(_({},i),{from:"array"})):a.arrays.some(function(e){return e.type.value.any})?null:0===a.tuples.length?1===a.arrays.length?o(e)(t)(r)(n,a.arrays[0],_(_({},i),{from:"array"})):y(e)(t)(r)(n,a.arrays,_(_({},i),{from:"array"})):p(e)(t)(r)(n,S(S([],x(a.tuples),!1),x(a.arrays),!1),i))}if(a.objects.length>0&&prepare(w.ExpressionFactory.isObject({checkNull:!0,checkArray:a.objects.some(function(e){return e.properties.every(function(e){return!e.key.isSoleLiteral()||!e.value.isRequired()})})})(n),a.objects.map(function(e){return e.name}).join(" | "))(v(t)(r)(n,a,_(_({},i),{from:"object"}))),en.length){var transformer=function(e){return function(t){return t.body?{expression:e(t.pre,t.body),combined:!0}:{expression:t.pre,combined:!1}}};1===en.length?O.push(transformer(function(e,r){return t.combiner(i)("and")(n,[e,r].map(function(t){return{expression:t,combined:t!==e}}),a.getName())})(en[0])):O.push({expression:t.combiner(i)("or")(n,en.map(transformer(E.default.factory.createLogicalAnd)),a.getName()),combined:!0})}return A.length&&O.length?t.combiner(i)("and")(n,S(S([],x(A),!1),[{expression:t.combiner(i)("or")(n,O,a.getName()),combined:!0}],!1),a.getName()):O.length?t.combiner(i)("or")(n,O,a.getName()):t.success}}}},n.decode_object=function(e){return function(t){var r=R.FeatureProgrammer.decode_object(e)(t);return function(e,t,n){return t.validated=!0,r(e,t,n)}}},o=function(e){return function(t){return function(r){return function(n,a,o){return!1===a.type.recursive?i(e)(t)(r)(n,a,o):(o=_(_({},o),{source:"function",from:"array"}),E.default.factory.createLogicalOr(E.default.factory.createCallExpression(E.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"a").concat(a.type.index))),void 0,R.FeatureProgrammer.argumentsArray(t)(_(_({},o),{source:"function",from:"array"}))(n)),t.joiner.failure(n,a.type.name,o)))}}}},i=function(e){return function(t){return function(r){return function(a,o,i){var u=(0,q.check_array_length)(e)(o)(a),c=R.FeatureProgrammer.decode_array({prefix:t.prefix,trace:t.trace,path:t.path,decoder:function(){return n.decode(e)(t)(r)}})(r)(t.joiner.array)(a,o,i);return null===u.expression&&0===u.conditions.length?c:E.default.factory.createLogicalAnd(t.atomist(i)(u)(a),c)}}}},u=function(e){return function(t){return function(r){return function(n,a,o){return!1===a.type.recursive?c(e)(t)(r)(n,a.type,o):(o=_(_({},o),{source:"function",from:"array"}),E.default.factory.createLogicalOr(E.default.factory.createCallExpression(E.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,R.FeatureProgrammer.argumentsArray(t)(_(_({},o),{source:"function"}))(n)),t.joiner.failure(n,a.type.name,o)))}}}},c=function(e){return function(t){return function(r){return function(a,o,i){var u=o.elements.filter(function(e){return null===e.rest}).map(function(o,u){return n.decode(e)(t)(r)(E.default.factory.createElementAccessExpression(a,u),o,_(_({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(u,']"'):'"['.concat(u,']"')}))}),c=o.elements.length&&null!==o.elements.at(-1).rest?n.decode(e)(t)(r)(E.default.factory.createCallExpression(P.IdentifierFactory.access(a)("slice"),void 0,[w.ExpressionFactory.number(o.elements.length-1)]),(0,W.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),_(_({},i),{start:o.elements.length-1})):null,f=E.default.factory.createPropertyAccessExpression(a,"length");return t.combiner(i)("and")(a,S(S(S([],x(null===c?o.elements.every(function(e){return!1===e.optional})?[{combined:!1,expression:E.default.factory.createStrictEquality(f,w.ExpressionFactory.number(o.elements.length))}]:[{combined:!1,expression:E.default.factory.createLogicalAnd(E.default.factory.createLessThanEquals(w.ExpressionFactory.number(o.elements.filter(function(e){return!1===e.optional}).length),f),E.default.factory.createGreaterThanEquals(w.ExpressionFactory.number(o.elements.length),f))}]:[]),!1),x(t.joiner.tuple?[{expression:t.joiner.tuple(u),combined:!0}]:u.map(function(e){return{expression:e,combined:!0}})),!1),x(null!==c?[{expression:c,combined:!0}]:[]),!1),"[".concat(o.elements.map(function(e){return e.getName()}).join(", "),"]"))}}}},f=function(e){return function(t){return function(r){return function(a,i,u){return E.default.factory.createCallExpression(H.UnionExplorer.set({checker:n.decode(e)(t)(r),decoder:o(e)(t)(r),empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}})([])(a,i,u),void 0,void 0)}}}},s=function(e){return function(t){return function(r){return function(a,i,u){return E.default.factory.createCallExpression(H.UnionExplorer.map({checker:function(a,o,i){var u=n.decode(e)(t)(r);return E.default.factory.createLogicalAnd(u(E.default.factory.createElementAccessExpression(a,0),o[0],_(_({},i),{postfix:"".concat(i.postfix,"[0]")})),u(E.default.factory.createElementAccessExpression(a,1),o[1],_(_({},i),{postfix:"".concat(i.postfix,"[1]")})))},decoder:o(e)(t)(r),empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}})([])(a,i,u),void 0,void 0)}}}},d=function(e){return function(t){return function(r){return function(n,a,o){return m(t)(r)(H.UnionExplorer.tuple({checker:u(e)(t)(r),decoder:u(e)(t)(r),empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}}))(n,a,o)}}}},y=function(e){return function(t){return function(r){return function(a,i,u){return m(t)(r)(H.UnionExplorer.array({checker:n.decode(e)(t)(r),decoder:o(e)(t)(r),empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}}))(a,i,u)}}}},p=function(e){return function(t){return function(r){return function(a,i,c){return m(t)(r)(H.UnionExplorer.array_or_tuple({checker:function(a,o,c,f){return o instanceof C.MetadataTuple?u(e)(t)(r)(a,o,c):t.atomist(c)({expected:i.map(function(e){return e instanceof O.MetadataArray?e.getName():e.type.name}).join(" | "),expression:n.decode(e)(t)(r)(a,o,c),conditions:[]})(f)},decoder:function(n,a,i){return a instanceof C.MetadataTuple?u(e)(t)(r)(n,a,i):o(e)(t)(r)(n,a,i)},empty:t.success,success:t.success,failure:function(e,r,n){return E.default.factory.createReturnStatement(t.joiner.failure(e,r,n))}}))(a,i,c)}}}},m=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&E.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=_(_({},o),{source:"function",from:"array"}),E.default.factory.createLogicalOr(E.default.factory.createCallExpression(E.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(R.FeatureProgrammer.parameterDeclarations(e)(A.TypeFactory.keyword("any"))(E.default.factory.createIdentifier("input")))(_(_({},o),{postfix:""}))(E.default.factory.createIdentifier("input"))})),void 0,R.FeatureProgrammer.argumentsArray(e)(o)(n)),e.joiner.failure(n,a.map(function(e){return e.type.name}).join(" | "),o))}}}},v=function(e){return function(t){return function(r,a,o){return 1===a.objects.length?n.decode_object(e)(t)(r,a.objects[0],o):E.default.factory.createCallExpression(E.default.factory.createIdentifier(t.useLocal("".concat(e.prefix,"u").concat(a.union_index))),void 0,R.FeatureProgrammer.argumentsArray(e)(o)(r))}}};var create_add=function(e){return function(t){return function(r,n,a){void 0===a&&(a=t);var o=r?E.default.factory.createStrictEquality:E.default.factory.createStrictInequality;e.push({expression:o(n,a),combined:!1})}}}},12114:function(e,t,r){"use strict";var n,a,o,i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},A=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},O=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RandomProgrammer=void 0;var C=O(r(55423)),N=r(73906),R=r(61387),L=r(92595),U=r(43390),H=r(6152),q=r(95374),z=r(12301),B=r(3078),V=r(23879),J=r(63860),G=r(45041),Q=r(35191),W=r(84530),K=r(63664),Y=r(5724),Z=r(31959),X=r(2112),ee=r(63114),et=r(59573);(I||(t.RandomProgrammer=I={})).write=function(e){return function(t){return function(r){var u=new Z.FunctionImporter(t.getText());return function(c,f){var s=new L.MetadataCollection,d=U.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0,validate:function(e){var t=[];return e.natives.some(function(e){return"WeakSet"===e})?t.push("WeakSet is not supported."):e.natives.some(function(e){return"WeakMap"===e})&&t.push("WeakMap is not supported."),t}})(s)(c);if(!1===d.success)throw K.TransformerError.from("typia.".concat(u.method))(d.errors);var y={objects:n(u)(s),arrays:a(u)(s),tuples:o(u)(s)},p=i(u)({function:!1,recursive:!1})(d.data);return C.default.factory.createArrowFunction(void 0,void 0,[R.IdentifierFactory.parameter("generator",C.default.factory.createTypeReferenceNode("Partial"),null!=r?r:C.default.factory.createToken(C.default.SyntaxKind.QuestionToken))],C.default.factory.createTypeReferenceNode("typia.Resolved<".concat(null!=f?f:z.TypeFactory.getFullName(e.checker)(c),">")),void 0,C.default.factory.createBlock(A(A(A(A(A([],F(u.declare(t)),!1),F(y.objects),!1),F(y.arrays),!1),F(y.tuples),!1),[C.default.factory.createReturnStatement(p)],!1),!0))}}}},n=function(e){return function(t){return t.objects().map(function(t,r){return H.StatementFactory.constant(er.object(r),C.default.factory.createArrowFunction(void 0,void 0,[R.IdentifierFactory.parameter("_recursive",z.TypeFactory.keyword("boolean"),C.default.factory.createIdentifier(String(t.recursive))),R.IdentifierFactory.parameter("_depth",z.TypeFactory.keyword("number"),N.ExpressionFactory.number(0))],z.TypeFactory.keyword("any"),void 0,X.RandomJoiner.object(COALESCE(e))(i(e)({recursive:t.recursive,function:!0}))(t)))})}},a=function(e){return function(t){return t.arrays().filter(function(e){return e.recursive}).map(function(t,r){return H.StatementFactory.constant(er.array(r),C.default.factory.createArrowFunction(void 0,void 0,[R.IdentifierFactory.parameter("length",z.TypeFactory.keyword("number")),R.IdentifierFactory.parameter("_recursive",z.TypeFactory.keyword("boolean"),C.default.factory.createTrue()),R.IdentifierFactory.parameter("_depth",z.TypeFactory.keyword("number"),N.ExpressionFactory.number(0))],z.TypeFactory.keyword("any"),void 0,X.RandomJoiner.array(COALESCE(e))(i(e)({recursive:!0,function:!0}))({recursive:!0,function:!0})(C.default.factory.createIdentifier("length"))(t.value)))})}},o=function(e){return function(t){return t.tuples().filter(function(e){return e.recursive}).map(function(t,r){return H.StatementFactory.constant(er.tuple(r),C.default.factory.createArrowFunction(void 0,void 0,[R.IdentifierFactory.parameter("_recursive",z.TypeFactory.keyword("boolean"),C.default.factory.createTrue()),R.IdentifierFactory.parameter("_depth",z.TypeFactory.keyword("number"),N.ExpressionFactory.number(0))],z.TypeFactory.keyword("any"),void 0,X.RandomJoiner.tuple(i(e)({function:!0,recursive:!0}))(t.elements)))})}},i=function(e){return function(t){return function(r){var n,a,o,x,S,T,E,w,P,I,j,O,N,R,L,U,H,q,z,B,V=[];r.any&&V.push(C.default.factory.createStringLiteral("any type used...")),(!1===r.isRequired()||!0===r.functional)&&V.push(C.default.factory.createIdentifier("undefined")),!0===r.nullable&&V.push(C.default.factory.createNull());try{for(var J=M(r.constants),G=J.next();!G.done;G=J.next()){var Q=G.value;try{for(var W=(o=void 0,M(Q.values)),K=W.next();!K.done;K=W.next()){var Y=K.value;V.push(c(Y))}}catch(e){o={error:e}}finally{try{K&&!K.done&&(x=W.return)&&x.call(W)}finally{if(o)throw o.error}}}}catch(e){n={error:e}}finally{try{G&&!G.done&&(a=J.return)&&a.call(J)}finally{if(n)throw n.error}}try{for(var Z=M(r.templates),X=Z.next();!X.done;X=Z.next()){var ee=X.value;V.push(f(e)(t)(ee))}}catch(e){S={error:e}}finally{try{X&&!X.done&&(T=Z.return)&&T.call(Z)}finally{if(S)throw S.error}}try{for(var et=M(r.atomics),er=et.next();!er.done;er=et.next()){var en=er.value;"boolean"===en.type?V.push(u(e)):"number"===en.type?V.push.apply(V,A([],F(s(e)(en)),!1)):"string"===en.type?V.push.apply(V,A([],F(y(e)(en)),!1)):"bigint"===en.type&&V.push.apply(V,A([],F(d(e)(en)),!1))}}catch(e){E={error:e}}finally{try{er&&!er.done&&(w=et.return)&&w.call(et)}finally{if(E)throw E.error}}r.escaped&&V.push(i(e)(t)(r.escaped.returns));try{for(var ea=M(r.arrays),eo=ea.next();!eo.done;eo=ea.next()){var ei=eo.value;V.push.apply(V,A([],F(p(e)(t)(ei)),!1))}}catch(e){P={error:e}}finally{try{eo&&!eo.done&&(I=ea.return)&&I.call(ea)}finally{if(P)throw P.error}}try{for(var eu=M(r.tuples),ec=eu.next();!ec.done;ec=eu.next()){var el=ec.value;V.push(m(e)(t)(el))}}catch(e){j={error:e}}finally{try{ec&&!ec.done&&(O=eu.return)&&O.call(eu)}finally{if(j)throw j.error}}try{for(var ef=M(r.objects),es=ef.next();!es.done;es=ef.next()){var ed=es.value;V.push(v(e)(t)(ed))}}catch(e){N={error:e}}finally{try{es&&!es.done&&(R=ef.return)&&R.call(ef)}finally{if(N)throw N.error}}try{for(var ey=M(r.natives),ep=ey.next();!ep.done;ep=ey.next()){var em=ep.value;V.push(b(e)(em))}}catch(e){L={error:e}}finally{try{ep&&!ep.done&&(U=ey.return)&&U.call(ey)}finally{if(L)throw L.error}}try{for(var ev=M(r.sets),eh=ev.next();!eh.done;eh=ev.next()){var eg=eh.value;V.push(g(e)(t)(eg))}}catch(e){H={error:e}}finally{try{eh&&!eh.done&&(q=ev.return)&&q.call(ev)}finally{if(H)throw H.error}}try{for(var e_=M(r.maps),eb=e_.next();!eb.done;eb=e_.next()){var ex=eb.value;V.push(_(e)(t)(ex))}}catch(e){z={error:e}}finally{try{eb&&!eb.done&&(B=e_.return)&&B.call(e_)}finally{if(z)throw z.error}}return 1===V.length?V[0]:C.default.factory.createCallExpression(C.default.factory.createCallExpression(e.use("pick"),void 0,[C.default.factory.createArrayLiteralExpression(V.map(function(e){return C.default.factory.createArrowFunction(void 0,void 0,[],void 0,void 0,e)}),!0)]),void 0,void 0)}}},u=function(e){return C.default.factory.createCallExpression(COALESCE(e)("boolean"),void 0,void 0)},c=function(e){return"boolean"==typeof e?C.default.factory.createIdentifier(e.toString()):"number"==typeof e?N.ExpressionFactory.number(e):"string"==typeof e?C.default.factory.createStringLiteral(e):N.ExpressionFactory.bigint(Number(e))},f=function(e){return function(t){return function(r){return q.TemplateFactory.generate(r.map(function(r){return i(e)(t)(r)}))}}},s=function(e){return function(t){return(t.tags.length?t.tags:[[]]).map(function(t){var r=t.find(function(e){return"type"===e.kind&&("int32"===e.value||"int64"===e.value)})?"int":t.find(function(e){return"type"===e.kind&&("uint32"===e.value||"uint64"===e.value)})?"uint":"double",n=t.find(function(e){return"multipleOf"===e.kind});return(0,et.random_custom)(COALESCE(e))("number")(t)(ee.RandomRanger.number({type:r,transform:function(e){return N.ExpressionFactory.number(e)},setter:function(t){return C.default.factory.createCallExpression("double"!==r||void 0!==n?COALESCE(e)("integer"):COALESCE(e)("number"),void 0,t.map(function(e){return N.ExpressionFactory.number(e)}))}})({minimum:0,maximum:100,gap:10})(t))})}},d=function(e){return function(t){return(t.tags.length?t.tags:[[]]).map(function(t){return(0,et.random_custom)(COALESCE(e))("bigint")(t)(ee.RandomRanger.number({type:t.find(function(e){return"type"===e.kind&&("uint"===e.value||"uint64"===e.value)})?"uint":"int",transform:function(e){return N.ExpressionFactory.bigint(e)},setter:function(t){return C.default.factory.createCallExpression(COALESCE(e)("bigint"),void 0,t.map(function(e){return N.ExpressionFactory.bigint(e)}))}})({minimum:0,maximum:100,gap:10})(t))})}},y=function(e){return function(t){return(t.tags.length?t.tags:[[]]).map(function(t){return(0,et.random_custom)(COALESCE(e))("string")(t)(function(){try{for(var r,n,a=M(t),o=a.next();!o.done;o=a.next()){var i=o.value;if("format"===i.kind)return C.default.factory.createCallExpression(COALESCE(e)(emendFormat(i.value)),void 0,void 0);if("pattern"===i.kind)return C.default.factory.createCallExpression(COALESCE(e)("pattern"),void 0,[C.default.factory.createIdentifier("/".concat(i.value,"/"))])}}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}var u=ee.RandomRanger.length(COALESCE(e))({minimum:5,maximum:25,gap:5})({minimum:"minLength",maximum:"maxLength"})(t);return C.default.factory.createCallExpression(COALESCE(e)("string"),void 0,u?[u]:void 0)}())})}},p=function(e){return function(t){return function(r){var n=(r.tags.length?r.tags:[[]]).map(function(t){return ee.RandomRanger.length(COALESCE(e))({minimum:0,maximum:3,gap:3})({minimum:"minItems",maximum:"maxItems"})(t)});return r.type.recursive?n.map(function(n){return C.default.factory.createCallExpression(C.default.factory.createIdentifier(e.useLocal(er.array(r.type.index))),void 0,[null!=n?n:COALESCE(e)("length"),C.default.factory.createTrue(),t.recursive?C.default.factory.createAdd(N.ExpressionFactory.number(1),C.default.factory.createIdentifier("_depth")):N.ExpressionFactory.number(0)])}):n.map(function(n){var a=X.RandomJoiner.array(COALESCE(e))(i(e)(t))(t)(n)(r.type.value);return t.recursive?C.default.factory.createConditionalExpression(C.default.factory.createLogicalAnd(C.default.factory.createIdentifier("_recursive"),C.default.factory.createLessThan(N.ExpressionFactory.number(5),C.default.factory.createIdentifier("_depth"))),void 0,C.default.factory.createIdentifier("[]"),void 0,a):a})}}},m=function(e){return function(t){return function(r){return r.type.recursive?C.default.factory.createCallExpression(C.default.factory.createIdentifier(e.useLocal(er.tuple(r.type.index))),void 0,[C.default.factory.createTrue(),t.recursive?C.default.factory.createAdd(N.ExpressionFactory.number(1),C.default.factory.createIdentifier("_depth")):N.ExpressionFactory.number(0)]):X.RandomJoiner.tuple(i(e)(t))(r.type.elements)}}},v=function(e){return function(t){return function(r){return C.default.factory.createCallExpression(C.default.factory.createIdentifier(e.useLocal(er.object(r.index))),void 0,t.function?[t.recursive?C.default.factory.createTrue():C.default.factory.createIdentifier("_recursive"),C.default.factory.createConditionalExpression(C.default.factory.createIdentifier("_recursive"),void 0,C.default.factory.createAdd(N.ExpressionFactory.number(1),C.default.factory.createIdentifier("_depth")),void 0,C.default.factory.createIdentifier("_depth"))]:void 0)}}},g=function(e){return function(t){return function(r){return C.default.factory.createNewExpression(C.default.factory.createIdentifier("Set"),void 0,[p(e)(t)(V.MetadataArray.create({tags:[],type:J.MetadataArrayType.create({value:r,recursive:!1,index:null,nullables:[],name:"Set<".concat(r.getName(),">")})}))[0]])}}},_=function(e){return function(t){return function(r){var n;return C.default.factory.createNewExpression(C.default.factory.createIdentifier("Map"),void 0,[p(e)(t)(V.MetadataArray.create({tags:[],type:J.MetadataArrayType.create({name:"Map<".concat(r.key.getName(),", ").concat(r.value.getName(),">"),index:null,recursive:!1,nullables:[],value:B.Metadata.create(j(j({},B.Metadata.initialize()),{tuples:[((n=W.MetadataTupleType.create({name:"[".concat(r.key.getName(),", ").concat(r.value.getName(),"]"),index:null,recursive:!1,nullables:[],elements:[r.key,r.value]})).of_map=!0,Q.MetadataTuple.create({type:n,tags:[]}))]}))})}))[0]])}}},b=function(e){return function(t){if("Boolean"===t)return u(e);if("Number"===t)return s(e)(G.MetadataAtomic.create({type:"number",tags:[]}))[0];if("String"===t)return y(e)(G.MetadataAtomic.create({type:"string",tags:[]}))[0];if("Date"===t)return x(e);if("Uint8Array"===t||"Uint8ClampedArray"===t||"Uint16Array"===t||"Uint32Array"===t||"BigUint64Array"===t||"Int8Array"===t||"Int16Array"===t||"Int32Array"===t||"BigInt64Array"===t||"Float32Array"===t||"Float64Array"===t)return S(e)(t);if("ArrayBuffer"===t||"SharedArrayBuffer"===t)return w(e)(t);if("DataView"===t)return P(e);else if("Blob"===t)return T(e);else if("File"===t)return E(e);else return C.default.factory.createNewExpression(C.default.factory.createIdentifier(t),void 0,[])}},x=function(e){return C.default.factory.createNewExpression(C.default.factory.createIdentifier("Date"),void 0,[C.default.factory.createCallExpression(COALESCE(e)("datetime"),void 0,[])])},S=function(e){return function(t){new BigInt64Array;var r=F(function(){if("Uint8Array"===t||"Uint8ClampedArray"===t)return[0,255];if("Uint16Array"===t)return[0,65535];if("Uint32Array"===t)return[0,4294967295];if("BigUint64Array"===t)return[0,18446744073709552e3];if("Int8Array"===t)return[-128,127];if("Int16Array"===t)return[-32768,32767];if("Int32Array"===t)return[-2147483648,2147483647];else if("BigInt64Array"===t)return[-0x8000000000000000,0x7fffffffffffffff];else if("Float32Array"===t)return[-1175494351e29,34028235e31];return[Number.MIN_VALUE,Number.MAX_VALUE]}(),2),n=r[0],a=r[1],o="BigInt64Array"===t||"BigUint64Array"===t?N.ExpressionFactory.bigint:N.ExpressionFactory.number;return C.default.factory.createNewExpression(C.default.factory.createIdentifier(t),[],[C.default.factory.createCallExpression(COALESCE(e)("array"),void 0,[C.default.factory.createArrowFunction(void 0,void 0,[],z.TypeFactory.keyword("any"),void 0,C.default.factory.createCallExpression(COALESCE(e)("Float32Array"===t||"Float64Array"===t?"number":"BigInt64Array"===t||"BigUint64Array"===t?"bigint":"integer"),void 0,[o(n),o(a)]))])])}},T=function(e){return C.default.factory.createNewExpression(C.default.factory.createIdentifier("Blob"),void 0,[C.default.factory.createArrayLiteralExpression([S(e)("Uint8Array")],!0)])},E=function(e){return C.default.factory.createNewExpression(C.default.factory.createIdentifier("File"),void 0,[C.default.factory.createArrayLiteralExpression([S(e)("Uint8Array")],!0),C.default.factory.createTemplateExpression(C.default.factory.createTemplateHead(""),[C.default.factory.createTemplateSpan(C.default.factory.createCallExpression(COALESCE(e)("string"),void 0,[C.default.factory.createNumericLiteral(8)]),C.default.factory.createTemplateMiddle(".")),C.default.factory.createTemplateSpan(C.default.factory.createCallExpression(COALESCE(e)("string"),void 0,[C.default.factory.createNumericLiteral(3)]),C.default.factory.createTemplateTail(""))])])},w=function(e){return function(t){return"ArrayBuffer"===t?R.IdentifierFactory.access(S(e)("Uint8Array"))("buffer"):N.ExpressionFactory.selfCall(C.default.factory.createBlock([H.StatementFactory.constant("length",C.default.factory.createCallExpression(COALESCE(e)("integer"),void 0,[])),H.StatementFactory.constant("buffer",C.default.factory.createNewExpression(C.default.factory.createIdentifier("SharedArrayBuffer"),[],[C.default.factory.createIdentifier("length")])),H.StatementFactory.constant("bytes",C.default.factory.createNewExpression(C.default.factory.createIdentifier("Uint8Array"),[],[C.default.factory.createIdentifier("buffer")])),C.default.factory.createExpressionStatement(C.default.factory.createCallExpression(R.IdentifierFactory.access(C.default.factory.createIdentifier("bytes"))("set"),void 0,[C.default.factory.createCallExpression(COALESCE(e)("array"),void 0,[C.default.factory.createArrowFunction(void 0,void 0,[],z.TypeFactory.keyword("any"),void 0,C.default.factory.createCallExpression(COALESCE(e)("integer"),void 0,[N.ExpressionFactory.number(0),N.ExpressionFactory.number(255)])),C.default.factory.createIdentifier("length")]),N.ExpressionFactory.number(0)])),C.default.factory.createReturnStatement(C.default.factory.createIdentifier("buffer"))],!0))}},P=function(e){return C.default.factory.createNewExpression(C.default.factory.createIdentifier("DataView"),[],[R.IdentifierFactory.access(S(e)("Uint8Array"))("buffer")])};var er={object:function(e){return"$ro".concat(e)},array:function(e){return"$ra".concat(e)},tuple:function(e){return"$rt".concat(e)}},COALESCE=function(e){return function(t){return N.ExpressionFactory.coalesce(Y.Escaper.variable(t)?C.default.factory.createPropertyAccessChain(C.default.factory.createIdentifier("generator"),C.default.factory.createToken(C.default.SyntaxKind.QuestionDotToken),C.default.factory.createIdentifier(t)):C.default.factory.createElementAccessChain(C.default.factory.createIdentifier("generator"),C.default.factory.createToken(C.default.SyntaxKind.QuestionDotToken),C.default.factory.createStringLiteral(t)))(R.IdentifierFactory.access(e.use("generator"))(t))}},emendFormat=function(e){return"date-time"===e?"datetime":e.split("-").map(function(e,t){return 0===t||0===e.length?e:e[0].toUpperCase()+e.substring(1)}).join("")}},89345:function(e,t,r){"use strict";var n,a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")),void 0,u.default.factory.createBlock([s.StatementFactory.constant("errors",u.default.factory.createAsExpression(u.default.factory.createArrayLiteralExpression([]),u.default.factory.createArrayTypeNode(d.TypeFactory.keyword("any")))),s.StatementFactory.constant("__is",_),u.default.factory.createIfStatement(u.default.factory.createStrictEquality(u.default.factory.createFalse(),u.default.factory.createCallExpression(u.default.factory.createIdentifier("__is"),void 0,[u.default.factory.createIdentifier("input")])),u.default.factory.createBlock([s.StatementFactory.constant("$report",u.default.factory.createCallExpression(f.IdentifierFactory.access(u.default.factory.createParenthesizedExpression(u.default.factory.createAsExpression(t,d.TypeFactory.keyword("any"))))("report"),[],[u.default.factory.createIdentifier("errors")])),u.default.factory.createExpressionStatement(u.default.factory.createCallExpression(b,void 0,[u.default.factory.createIdentifier("input"),u.default.factory.createStringLiteral("$input"),u.default.factory.createTrue()]))])),s.StatementFactory.constant("success",u.default.factory.createStrictEquality(c.ExpressionFactory.number(0),u.default.factory.createIdentifier("errors.length"))),u.default.factory.createReturnStatement(u.default.factory.createAsExpression(create_output(),d.TypeFactory.keyword("any")))],!0))}}}};var combine=function(e){return function(t){return function(r){return function(n){if(!1===n.tracable)return p.IsProgrammer.configure({object:validate_object(e)(t)(r),numeric:!0})(t)(r).combiner(n);var a=n.postfix?"_path + ".concat(n.postfix):"_path";return function(e){return function(t,r,o){return"and"===e?r.map(function(e){return e.combined?e.expression:u.default.factory.createLogicalOr(e.expression,create_report_call("top"===n.source?u.default.factory.createTrue():u.default.factory.createIdentifier("_exceptionable"))(u.default.factory.createIdentifier(a),o,t))}).reduce(u.default.factory.createLogicalAnd):u.default.factory.createLogicalOr(r.map(function(e){return e.expression}).reduce(u.default.factory.createLogicalOr),create_report_call("top"===n.source?u.default.factory.createTrue():u.default.factory.createIdentifier("_exceptionable"))(u.default.factory.createIdentifier(a),o,t))}}}}}},validate_object=function(e){return function(t){return function(r){return(0,_.check_object)({equals:e,undefined:!0,assert:!1,reduce:u.default.factory.createLogicalAnd,positive:u.default.factory.createTrue(),superfluous:function(e){return create_report_call()(u.default.factory.createAdd(u.default.factory.createIdentifier("_path"),u.default.factory.createCallExpression(r.use("join"),void 0,[u.default.factory.createIdentifier("key")])),"undefined",e)},halt:function(e){return u.default.factory.createLogicalOr(u.default.factory.createStrictEquality(u.default.factory.createFalse(),u.default.factory.createIdentifier("_exceptionable")),e)}})(t)(r)}}},joiner=function(e){return function(t){return function(r){return{object:validate_object(e)(t)(r),array:function(e,t){return(0,g.check_everything)(u.default.factory.createCallExpression(f.IdentifierFactory.access(e)("map"),void 0,[t]))},failure:function(e,t,r){return create_report_call((null==r?void 0:r.from)==="top"?u.default.factory.createTrue():u.default.factory.createIdentifier("_exceptionable"))(u.default.factory.createIdentifier((null==r?void 0:r.postfix)?"_path + ".concat(r.postfix):"_path"),t,e)},tuple:function(e){return(0,g.check_everything)(u.default.factory.createArrayLiteralExpression(e,!0))}}}}},create_output=function(){return u.default.factory.createObjectLiteralExpression([u.default.factory.createShorthandPropertyAssignment("success"),u.default.factory.createShorthandPropertyAssignment("errors"),u.default.factory.createPropertyAssignment("data",u.default.factory.createConditionalExpression(u.default.factory.createIdentifier("success"),void 0,u.default.factory.createIdentifier("input"),void 0,u.default.factory.createIdentifier("undefined")))],!0)},create_report_call=function(e){return function(t,r,n){return u.default.factory.createCallExpression(u.default.factory.createIdentifier("$report"),void 0,[null!=e?e:u.default.factory.createIdentifier("_exceptionable"),u.default.factory.createObjectLiteralExpression([u.default.factory.createPropertyAssignment("path",t),u.default.factory.createPropertyAssignment("expected",u.default.factory.createStringLiteral(r)),u.default.factory.createPropertyAssignment("value",n)],!0)])}}},86752:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AtomicPredicator=void 0;var n,a,o=r(73346);(n=a||(t.AtomicPredicator=a={})).constant=function(e){return function(t){return!o.ArrayUtil.has(e.atomics,function(e){return e.type===t})&&!o.ArrayUtil.has(e.natives,function(e){return e.toLowerCase()===t})}},n.atomic=function(e){return function(t){return!o.ArrayUtil.has(e.natives,function(e){return e.toLowerCase()===t})}},n.native=function(e){return i.has(e.toLowerCase())},n.template=function(e){return!o.ArrayUtil.has(e.atomics,function(e){return"string"===e.type})};var i=new Set(["boolean","bigint","number","string"])},1739:function(e,t,r){"use strict";var n,a,o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a1}},94492:function(e,t,r){"use strict";var n,a,o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=1&&e.properties.every(function(e){return e.key.isSoleLiteral()})},r.size=function(e){return r.getAtomics(e).length+e.arrays.length+e.tuples.length+e.natives.length+e.objects.length+e.maps.length},r.isUnion=function(e){return r.size(e)>1},r.getAtomics=function(e){var t,r,a,c,f=new Set;e.templates.length&&f.add("string");try{for(var s=o(e.constants),d=s.next();!d.done;d=s.next()){var y=d.value;"boolean"===y.type?f.add("bool"):"bigint"===y.type?f.add("uint64"):"number"===y.type?f.add(deduce_numeric_type(y.values)):"string"===y.type&&f.add("string")}}catch(e){t={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}try{for(var p=o(e.atomics),m=p.next();!m.done;m=p.next()){var v=m.value;"boolean"===v.type?f.add("bool"):"bigint"===v.type?decode_bigint(v.tags).forEach(function(e){return f.add(e)}):"number"===v.type?decode_number(v.tags).forEach(function(e){return f.add(e)}):"string"===v.type&&f.add("string")}}catch(e){a={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(a)throw a.error}}return u([],i(f),!1).sort(n)},r.getNumbers=function(e){var t,r,a,c,f=new Set;try{for(var s=o(e.constants),d=s.next();!d.done;d=s.next()){var y=d.value;"number"===y.type&&f.add(deduce_numeric_type(y.values))}}catch(e){t={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}try{for(var p=o(e.atomics),m=p.next();!m.done;m=p.next()){var v=m.value;"number"===v.type&&decode_number(v.tags).forEach(function(e){return f.add(e)})}}catch(e){a={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(a)throw a.error}}return u([],i(f),!1).sort(n)},r.getBigints=function(e){var t,r,a,c,f=new Set;try{for(var s=o(e.constants),d=s.next();!d.done;d=s.next()){var y=d.value;"bigint"===y.type&&f.add("uint64")}}catch(e){t={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}try{for(var p=o(e.atomics),m=p.next();!m.done;m=p.next()){var v=m.value;"bigint"===v.type&&decode_bigint(v.tags).forEach(function(e){return f.add(e)})}}catch(e){a={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(a)throw a.error}}return u([],i(f),!1).sort(n)},n=function(e,t){return c.get(e)-c.get(t)};var c=new Map(["bool","int32","uint32","int64","uint64","float","double","string"].map(function(e,t){return[e,t]})),deduce_numeric_type=function(e){return e.every(function(e){return Math.floor(e)===e})?e.every(function(e){return -2147483648<=e&&e<=2147483647})?"int32":"int64":"double"},decode_bigint=function(e){if(0===e.length)return["int64"];var t,r,n,a=new Set;try{for(var c=o(e),f=c.next();!f.done;f=c.next()){var s=f.value,d=null===(n=s.find(function(e){return"type"===e.kind&&("int64"===e.value||"uint64"===e.value)}))||void 0===n?void 0:n.value;a.add(null!=d?d:"int64")}}catch(e){t={error:e}}finally{try{f&&!f.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}return u([],i(a),!1)},decode_number=function(e){if(0===e.length)return["double"];var t,r,n,a=new Set;try{for(var c=o(e),f=c.next();!f.done;f=c.next()){var s=f.value,d=null===(n=s.find(function(e){return"type"===e.kind&&("int32"===e.value||"uint32"===e.value||"int64"===e.value||"uint64"===e.value||"float"===e.value||"double"===e.value)}))||void 0===n?void 0:n.value;a.add(null!=d?d:"double")}}catch(e){t={error:e}}finally{try{f&&!f.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}return u([],i(a),!1)}},3065:function(e,t,r){"use strict";var n,a,o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.UnionExplorer=void 0;var c=u(r(55423)),f=r(73906),s=r(61387),d=r(3078),y=r(23879),p=r(63860),m=r(35191),v=r(84530),g=r(45826),_=r(99560);(n=a||(t.UnionExplorer=a={})).object=function(e,t){return void 0===t&&(t=0),function(r,a,i){if(1===a.length)return e.objector.decoder()(r,a[0],i);var u="(".concat(a.map(function(e){return e.name}).join(" | "),")"),d=_.UnionPredicator.object(a);if(0===d.length){var y=e.objector.unionizer(r,a,o(o({},i),{tracable:!1}));return e.objector.full?e.objector.full(y)(r,u,i):y}var p=a.filter(function(e){return void 0===d.find(function(t){return t.object===e})}),m=d.filter(function(e){return null!==e.property.key.getSoleLiteral()}).map(function(a,d,y){var m=a.property.key.getSoleLiteral(),v=s.IdentifierFactory.access(r)(m),g=a.neighbour?e.objector.checker()(v,a.property.value,o(o({},i),{tracable:!1,postfix:s.IdentifierFactory.postfix(m)})):(e.objector.required||function(e){return e})(f.ExpressionFactory.isRequired(v));return c.default.factory.createIfStatement((e.objector.is||function(e){return e})(g),c.default.factory.createReturnStatement(e.objector.decoder()(r,a.object,i)),d===y.length-1?p.length?c.default.factory.createReturnStatement(n.object(e,t+1)(r,p,i)):e.objector.failure(r,u,i):void 0)}).reverse().reduce(function(e,t){return c.default.factory.createIfStatement(t.expression,t.thenStatement,e)});return c.default.factory.createCallExpression(c.default.factory.createArrowFunction(void 0,void 0,[],void 0,void 0,c.default.factory.createBlock([m],!0)),void 0,void 0)}},n.tuple=function(e){return(0,g.check_union_array_like)({transform:function(e){return e},element:function(e){return e},size:null,front:function(e){return e},array:function(e){return e},name:function(e){return e.type.name}})(e)},n.array=function(e){return(0,g.check_union_array_like)({transform:function(e){return e},element:function(e){return e.type.value},size:function(e){return s.IdentifierFactory.access(e)("length")},front:function(e){return c.default.factory.createElementAccessExpression(e,0)},array:function(e){return e},name:function(e){return e.type.name}})(e)},n.array_or_tuple=function(e){return(0,g.check_union_array_like)({transform:function(e){return e},element:function(e){return e instanceof y.MetadataArray?e.type.value:e},size:function(e){return s.IdentifierFactory.access(e)("length")},front:function(e){return c.default.factory.createElementAccessExpression(e,0)},array:function(e){return e},name:function(e){return e.type.name}})(e)},n.set=function(e){return(0,g.check_union_array_like)({transform:function(e){return y.MetadataArray.create({tags:[],type:p.MetadataArrayType.create({name:"Set<".concat(e.getName(),">"),index:null,recursive:!1,nullables:[],value:e})})},element:function(e){return e.type.value},size:function(e){return s.IdentifierFactory.access(e)("size")},front:function(e){return s.IdentifierFactory.access(c.default.factory.createCallExpression(s.IdentifierFactory.access(c.default.factory.createCallExpression(s.IdentifierFactory.access(e)("values"),void 0,void 0))("next"),void 0,void 0))("value")},array:function(e){return c.default.factory.createArrayLiteralExpression([c.default.factory.createSpreadElement(e)],!1)},name:function(e,t){return"Set<".concat(t.getName(),">")}})(e)},n.map=function(e){return(0,g.check_union_array_like)({element:function(e){return e.type.value.tuples[0].type.elements},size:function(e){return s.IdentifierFactory.access(e)("size")},front:function(e){return s.IdentifierFactory.access(c.default.factory.createCallExpression(s.IdentifierFactory.access(c.default.factory.createCallExpression(s.IdentifierFactory.access(e)("entries"),void 0,void 0))("next"),void 0,void 0))("value")},array:function(e){return c.default.factory.createArrayLiteralExpression([c.default.factory.createSpreadElement(e)],!1)},name:function(e,t){var r=i(t,2),n=r[0],a=r[1];return"Map<".concat(n.getName(),", ").concat(a.getName(),">")},transform:function(e){var t;return y.MetadataArray.create({tags:[],type:p.MetadataArrayType.create({name:"Map<".concat(e.key.getName(),", ").concat(e.value.getName(),">"),index:null,recursive:!1,nullables:[],value:d.Metadata.create(o(o({},d.Metadata.initialize()),{tuples:[((t=m.MetadataTuple.create({tags:[],type:v.MetadataTupleType.create({name:"[".concat(e.key.getName(),", ").concat(e.value.getName(),"]"),index:null,recursive:!1,nullables:[],elements:[e.key,e.value]})})).type.of_map=!0,t)]}))})})}})(e)}},99560:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.UnionPredicator=void 0;var i=r(3078),u=r(73346),c=r(63224);(n||(t.UnionPredicator=n={})).object=function(e){var t,r,n,f,s=new Map;try{for(var d=o(e),y=d.next();!y.done;y=d.next()){var p=y.value;try{for(var m=(n=void 0,o(p.properties)),v=m.next();!v.done;v=m.next()){var g=v.value.key.getSoleLiteral();null!==g&&c.MapUtil.take(s)(g,function(){return u.ArrayUtil.repeat(e.length,function(){return null})})}}catch(e){n={error:e}}finally{try{v&&!v.done&&(f=m.return)&&f.call(m)}finally{if(n)throw n.error}}}}catch(e){t={error:e}}finally{try{y&&!y.done&&(r=d.return)&&r.call(d)}finally{if(t)throw t.error}}e.forEach(function(e,t){var r,n;try{for(var a=o(e.properties),i=a.next();!i.done;i=a.next()){var u=i.value,c=u.key.getSoleLiteral();null!==c&&(s.get(c)[t]=u)}}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}});var _=[];return e.forEach(function(e,t){var r=[];if(e.properties.forEach(function(e){if(!1!==e.value.isRequired()){var n=e.key.getSoleLiteral();if(null!==n){var a=s.get(n).filter(function(e,r){return t!==r&&null!==e});!0===(0===a.length||a.every(function(t){return!i.Metadata.intersects(e.value,t.value)}))&&r.push({property:e,neighbour:0!==a.length})}}}),0!==r.length){var n=r.find(function(e){return e.property.value.isConstant()})||r[0];_.push(a({index:t,object:e},n))}}),_}},41510:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.disable_function_importer_declare=void 0,t.disable_function_importer_declare=function(e){return disable(e)};var disable=function(e){return{method:e.method,empty:function(){return e.empty()},use:function(t){return e.use(t)},useLocal:function(t){return e.useLocal(t)},hasLocal:function(t){return e.hasLocal(t)},declare:function(e){return[]},declareUnions:function(){return[]},increment:function(){return e.increment()},emplaceUnion:function(t,r,n){return e.emplaceUnion(t,r,n)},trace:function(){return e.trace()}}}},87097:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("decode",d.HttpFormDataProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("assert",s.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("output")]),f.TypeFactory.keyword("any")))]))}}}},40225:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("decode",d.HttpHeadersProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("assert",s.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("output")]),f.TypeFactory.keyword("any")))]))}}}},87176:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("decode",d.HttpQueryProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("assert",s.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("output")]),f.TypeFactory.keyword("any")))]))}}}},85766:function(e,t,r){"use strict";var n,a,o,i,u,c,f=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},s=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")),void 0,y.default.factory.createBlock(s(s([],f(i.declare(t)),!1),f(g),!1),!0))}}},n.validate=function(e,t){var r=[],insert=function(e){return r.push(e)};if(!0===t.top)(1!==e.objects.length||1!==e.bucket())&&insert("only one object type is allowed."),!0===e.nullable&&insert("formdata parameters cannot be null."),!1===e.isRequired()&&insert("formdata parameters cannot be undefined.");else if(null!==t.nested&&t.nested instanceof b.MetadataArrayType){var n=E.HttpMetadataUtil.atomics(e),a=e.atomics.length+e.templates.length+e.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0)+e.natives.filter(function(e){return"Blob"===e||"File"===e}).length;n.size>1&&insert("union type is not allowed in array."),e.size()!==a&&insert("only atomic, constant or blob (file) types are allowed in array.")}else t.object&&null!==t.property&&("object"==typeof t.property&&insert("dynamic property is not allowed."),e.tuples.length&&insert("tuple type is not allowed."),E.HttpMetadataUtil.isUnion(e)&&insert("union type is not allowed."),(e.objects.length||e.sets.length||e.maps.length||e.natives.length)&&insert("nested object type is not allowed."));return r},a=function(e){return function(t){var r=y.default.factory.createIdentifier("output");return[g.StatementFactory.constant("output",y.default.factory.createObjectLiteralExpression(t.properties.map(function(t){return o(e)(t)}),!0)),y.default.factory.createReturnStatement(y.default.factory.createAsExpression(r,_.TypeFactory.keyword("any")))]}},o=function(e){return function(t){var r,n,a,o=t.key.constants[0].values[0],c=t.value,s=f(c.atomics.length?[c.atomics[0].type,!1]:c.constants.length?[c.constants[0].type,!1]:c.templates.length?["string",!1]:c.natives.includes("Blob")?["blob",!1]:c.natives.includes("File")?["file",!1]:(a=null!==(n=null===(r=c.arrays[0])||void 0===r?void 0:r.type.value)&&void 0!==n?n:c.tuples[0].type.elements[0]).atomics.length?[a.atomics[0].type,!0]:a.templates.length?["string",!0]:a.natives.includes("Blob")?["blob",!0]:a.natives.includes("File")?["file",!0]:[a.constants[0].type,!0],2),d=s[0],m=s[1];return y.default.factory.createPropertyAssignment(S.Escaper.variable(o)?o:y.default.factory.createStringLiteral(o),m?u(e)(c)(y.default.factory.createCallExpression(p.IdentifierFactory.access(y.default.factory.createCallExpression(y.default.factory.createIdentifier("input.getAll"),void 0,[y.default.factory.createStringLiteral(o)]))("map"),void 0,[y.default.factory.createArrowFunction(void 0,void 0,[p.IdentifierFactory.parameter("elem")],void 0,void 0,i(e)(d)(!1)(y.default.factory.createIdentifier("elem")))])):i(e)(d)(!1===c.nullable&&!1===c.isRequired())(y.default.factory.createCallExpression(y.default.factory.createIdentifier("input.get"),void 0,[y.default.factory.createStringLiteral(o)])))}},i=function(e){return function(t){return function(r){return function(n){var a=y.default.factory.createCallExpression(e.use(t),void 0,[n]);return r?y.default.factory.createBinaryExpression(a,y.default.factory.createToken(y.default.SyntaxKind.QuestionQuestionToken),y.default.factory.createIdentifier("undefined")):a}}}},u=function(e){return function(t){return function(r){return t.nullable||!1===t.isRequired()?y.default.factory.createCallExpression(e.use("array"),void 0,[r,t.nullable?y.default.factory.createNull():y.default.factory.createIdentifier("undefined")]):r}}}},94694:function(e,t,r){"use strict";var n,a,o,i,u,c,f=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},s=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},y=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HttpHeadersProgrammer=void 0;var p=y(r(55423)),m=r(73906),v=r(61387),g=r(92595),_=r(43390),b=r(6152),x=r(12301),S=r(63860),T=r(63664),E=r(5724),w=r(63224),P=r(31959),I=r(92273);(n=c||(t.HttpHeadersProgrammer=c={})).INPUT_TYPE="Record",n.write=function(e){return function(t){return function(r,o){var i=new P.FunctionImporter(t.getText()),u=new g.MetadataCollection,c=_.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0,validate:n.validate})(u)(r);if(!1===c.success)throw T.TransformerError.from("typia.http.".concat(i.method))(c.errors);var d=c.data.objects[0],y=a(i)(d);return p.default.factory.createArrowFunction(void 0,void 0,[v.IdentifierFactory.parameter("input",p.default.factory.createTypeReferenceNode(n.INPUT_TYPE))],p.default.factory.createTypeReferenceNode("typia.Resolved<".concat(null!=o?o:x.TypeFactory.getFullName(e.checker)(r),">")),void 0,p.default.factory.createBlock(s(s([],f(i.declare(t)),!1),f(y),!1),!0))}}},n.validate=function(e,t){var r,n,a,o,i=[],insert=function(e){return i.push(e)};if(!0===t.top)(1!==e.objects.length||1!==e.bucket())&&insert("only one object type is allowed."),!0===e.nullable&&insert("headers cannot be null."),!1===e.isRequired()&&insert("headers cannot be null.");else if(null!==t.nested&&t.nested instanceof S.MetadataArrayType){var u=I.HttpMetadataUtil.atomics(e),c=e.atomics.length+e.templates.length+e.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0);u.size>1&&insert("union type is not allowed in array."),e.size()!==c&&insert("only atomic or constant types are allowed in array."),!0===e.nullable&&insert("nullable type is not allowed in array."),!1===e.isRequired()&&insert("optional type is not allowed in array.")}else if(t.object&&null!==t.property){"object"==typeof t.property&&insert("dynamic property is not allowed."),e.tuples.length&&insert("tuple type is not allowed."),I.HttpMetadataUtil.isUnion(e)&&insert("union type is not allowed."),(e.objects.length||e.sets.length||e.maps.length||e.natives.length)&&insert("nested object type is not allowed."),!0===e.nullable&&insert("nullable type is not allowed.");var y=e.arrays.length>=1||e.tuples.length>=1;"string"==typeof t.property&&"set-cookie"===t.property.toLowerCase()&&!1===y&&insert("".concat(t.property," property must be array.")),"string"==typeof t.property&&j.has(t.property.toLowerCase())&&!0===y&&insert("property cannot be array.")}else if(t.object&&null===t.property){var p=new Map;try{for(var m=d(t.object.properties),v=m.next();!v.done;v=m.next()){var g=v.value.key.getSoleLiteral();null!==g&&w.MapUtil.take(p)(g.toLowerCase(),function(){return new Set}).add(g)}}catch(e){r={error:e}}finally{try{v&&!v.done&&(n=m.return)&&n.call(m)}finally{if(r)throw r.error}}try{for(var _=d(p),b=_.next();!b.done;b=_.next()){var x=f(b.value,2),g=x[0],T=x[1];T.size>1&&insert("duplicated keys when converting to lowercase letters: [".concat(s([],f(T),!1).join(", "),"] -> ").concat(g))}}catch(e){a={error:e}}finally{try{b&&!b.done&&(o=_.return)&&o.call(_)}finally{if(a)throw a.error}}}return i},a=function(e){return function(t){var r=p.default.factory.createIdentifier("output"),n=[];return s(s([b.StatementFactory.constant("output",p.default.factory.createObjectLiteralExpression(t.properties.map(function(t){return!t.value.isRequired()&&t.value.arrays.length+t.value.tuples.length>0&&n.push(t.key.constants[0].values[0]),o(e)(t)}),!0))],f(n.map(function(e){var t=v.IdentifierFactory.access(r)(e);return p.default.factory.createIfStatement(p.default.factory.createStrictEquality(m.ExpressionFactory.number(0),v.IdentifierFactory.access(t)("length")),p.default.factory.createExpressionStatement(p.default.factory.createDeleteExpression(t)))})),!1),[p.default.factory.createReturnStatement(p.default.factory.createAsExpression(r,x.TypeFactory.keyword("any")))],!1)}},o=function(e){return function(t){var r,n,a,o=t.key.constants[0].values[0],c=t.value,s=f(c.atomics.length?[c.atomics[0].type,!1]:c.constants.length?[c.constants[0].type,!1]:c.templates.length?["string",!1]:(a=null!==(n=null===(r=c.arrays[0])||void 0===r?void 0:r.type.value)&&void 0!==n?n:c.tuples[0].type.elements[0]).atomics.length?[a.atomics[0].type,!0]:a.templates.length?["string",!0]:[a.constants[0].type,!0],2),d=s[0],y=s[1],m=v.IdentifierFactory.access(p.default.factory.createIdentifier("input"))(o.toLowerCase());return p.default.factory.createPropertyAssignment(E.Escaper.variable(o)?o:p.default.factory.createStringLiteral(o),y?"set-cookie"===o?m:u(e)(d)(o)(c)(m):i(e)(d)(m))}},i=function(e){return function(t){return function(r){return"string"===t?r:p.default.factory.createCallExpression(e.use(t),void 0,[r])}}},u=function(e){return function(t){return function(r){return function(n){return function(a){var o=p.default.factory.createCallChain(p.default.factory.createPropertyAccessChain(p.default.factory.createCallChain(p.default.factory.createPropertyAccessChain(a,p.default.factory.createToken(p.default.SyntaxKind.QuestionDotToken),p.default.factory.createIdentifier("split")),void 0,void 0,[p.default.factory.createStringLiteral("cookie"===r?"; ":", ")]),p.default.factory.createToken(p.default.SyntaxKind.QuestionDotToken),p.default.factory.createIdentifier("map")),void 0,void 0,[e.use(t)]);return p.default.factory.createConditionalExpression(m.ExpressionFactory.isArray(a),void 0,p.default.factory.createCallExpression(v.IdentifierFactory.access(a)("map"),void 0,[e.use(t)]),void 0,!1===n.isRequired()?o:p.default.factory.createBinaryExpression(o,p.default.factory.createToken(p.default.SyntaxKind.QuestionQuestionToken),p.default.factory.createArrayLiteralExpression([],!1)))}}}}};var j=new Set(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","server","user-agent"])},93067:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.HttpFormDataProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("output")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},4494:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.HttpHeadersProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("output")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},26334:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.HttpQueryProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("output")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},50457:function(e,t,r){"use strict";var n,a,o=this&&this.__assign||function(){return(o=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a1&&insert("do not allow union type"),t}},57330:function(e,t,r){"use strict";var n,a,o,i,u,c,f=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},s=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")),void 0,y.default.factory.createBlock(s(s([],f(i.declare(t)),!1),f(g),!1),!0))}}},n.validate=function(e,t){var r=[],insert=function(e){return r.push(e)};if(!0===t.top)(1!==e.objects.length||1!==e.bucket())&&insert("only one object type is allowed."),!0===e.nullable&&insert("query parameters cannot be null."),!1===e.isRequired()&&insert("query parameters cannot be undefined.");else if(null!==t.nested&&t.nested instanceof b.MetadataArrayType){var n=E.HttpMetadataUtil.atomics(e),a=e.atomics.length+e.templates.length+e.constants.map(function(e){return e.values.length}).reduce(function(e,t){return e+t},0);n.size>1&&insert("union type is not allowed in array."),e.size()!==a&&insert("only atomic or constant types are allowed in array.")}else t.object&&null!==t.property&&("object"==typeof t.property&&insert("dynamic property is not allowed."),e.tuples.length&&insert("tuple type is not allowed."),E.HttpMetadataUtil.isUnion(e)&&insert("union type is not allowed."),(e.objects.length||e.sets.length||e.maps.length||e.natives.length)&&insert("nested object type is not allowed."));return r},a=function(e){return function(t){var r=y.default.factory.createIdentifier("input"),n=y.default.factory.createIdentifier("output");return[y.default.factory.createExpressionStatement(y.default.factory.createBinaryExpression(r,y.default.factory.createToken(y.default.SyntaxKind.EqualsToken),y.default.factory.createAsExpression(y.default.factory.createCallExpression(e.use("params"),void 0,[r]),y.default.factory.createTypeReferenceNode("URLSearchParams")))),g.StatementFactory.constant("output",y.default.factory.createObjectLiteralExpression(t.properties.map(function(t){return o(e)(t)}),!0)),y.default.factory.createReturnStatement(y.default.factory.createAsExpression(n,_.TypeFactory.keyword("any")))]}},o=function(e){return function(t){var r,n,a,o=t.key.constants[0].values[0],c=t.value,s=f(c.atomics.length?[c.atomics[0].type,!1]:c.constants.length?[c.constants[0].type,!1]:c.templates.length?["string",!1]:(a=null!==(n=null===(r=c.arrays[0])||void 0===r?void 0:r.type.value)&&void 0!==n?n:c.tuples[0].type.elements[0]).atomics.length?[a.atomics[0].type,!0]:a.templates.length?["string",!0]:[a.constants[0].type,!0],2),d=s[0],m=s[1];return y.default.factory.createPropertyAssignment(S.Escaper.variable(o)?o:y.default.factory.createStringLiteral(o),m?u(e)(c)(y.default.factory.createCallExpression(p.IdentifierFactory.access(y.default.factory.createCallExpression(y.default.factory.createIdentifier("input.getAll"),void 0,[y.default.factory.createStringLiteral(o)]))("map"),void 0,[y.default.factory.createArrowFunction(void 0,void 0,[p.IdentifierFactory.parameter("elem")],void 0,void 0,i(e)(d)(!1)(y.default.factory.createIdentifier("elem")))])):i(e)(d)(!1===c.nullable&&!1===c.isRequired())(y.default.factory.createCallExpression(y.default.factory.createIdentifier("input.get"),void 0,[y.default.factory.createStringLiteral(o)])))}},i=function(e){return function(t){return function(r){return function(n){var a=y.default.factory.createCallExpression(e.use(t),void 0,[n]);return r?y.default.factory.createBinaryExpression(a,y.default.factory.createToken(y.default.SyntaxKind.QuestionQuestionToken),y.default.factory.createIdentifier("undefined")):a}}}},u=function(e){return function(t){return function(r){return t.nullable||!1===t.isRequired()?y.default.factory.createCallExpression(e.use("array"),void 0,[r,t.nullable?y.default.factory.createNull():y.default.factory.createIdentifier("undefined")]):r}}}},2351:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.HttpFormDataProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},24635:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.HttpHeadersProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},23262:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.HttpQueryProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},30535:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JSON_COMPONENTS_PREFIX=void 0,t.JSON_COMPONENTS_PREFIX="#/components"},38379:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_array=void 0;var u=r(15566);t.application_array=function(e){return function(t){return function(r){var i=(0,u.application_schema)(e)(!1)(t)(r.type.value)({}),c={type:"array",items:null},out=function(e){return e.items=i,e};if(0===r.tags.length)return[out(c)];var f=r.tags.map(function(t){return application_array_tags(e)(n({},c))(t)});return o([],a(new Map(f.map(function(e){return[JSON.stringify(e),e]})).values()),!1).map(function(e){return out(e)})}}};var application_array_tags=function(e){return function(t){return function(r){var n,a;try{for(var o=i(r.slice().sort(function(e,t){return e.kind.localeCompare(t.kind)})),u=o.next();!u.done;u=o.next()){var c=u.value;"minItems"===c.kind&&"number"==typeof c.value?t.minItems=c.value:"maxItems"===c.kind&&"number"==typeof c.value&&(t.maxItems=c.value)}}catch(e){n={error:e}}finally{try{u&&!u.done&&(a=o.return)&&a.call(o)}finally{if(n)throw n.error}}return e.surplus&&(t["x-typia-typeTags"]=r.map(function(e){return{target:e.target,name:e.name,kind:e.kind,value:e.value,validate:e.validate,exclusive:e.exclusive}})),t}}}},70141:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_default=void 0,t.application_default=function(e){return function(t){return function(n){var a,o,i,u,c=(null!==(i=e["x-typia-jsDocTags"])&&void 0!==i?i:[]).filter(function(e){return"default"===e.name});try{for(var f=r(c),s=f.next();!s.done;s=f.next()){var d=s.value;if((null===(u=d.text)||void 0===u?void 0:u.length)&&t(d.text[0].text))return n(d.text[0].text)}}catch(e){a={error:e}}finally{try{s&&!s.done&&(o=f.return)&&o.call(f)}finally{if(a)throw a.error}}}}}},21683:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_default_string=void 0;var a=r(1494);t.application_default_string=function(e){return function(t){return function(r){return(0,a.application_default)(t)(function(t){var a,o,i,u,c=[];e.atomics.find(function(e){return"number"===e.type||"bigint"===e.type})&&c.push(Number.isNaN(Number(t))),e.atomics.find(function(e){return"boolean"===e.type})&&c.push("true"!==t&&"false"!==t);try{for(var f=n(e.constants),s=f.next();!s.done;s=f.next()){var d=s.value;try{for(var y=(i=void 0,n(d.values)),p=y.next();!p.done;p=y.next()){var m=p.value;c.push(t!==m.toString())}}catch(e){i={error:e}}finally{try{p&&!p.done&&(u=y.return)&&u.call(y)}finally{if(i)throw i.error}}}}catch(e){a={error:e}}finally{try{s&&!s.done&&(o=f.return)&&o.call(f)}finally{if(a)throw a.error}}return void 0!==r.minLength&&c.push(t.length>=r.minLength),void 0!==r.maxLength&&c.push(t.length<=r.maxLength),void 0!==r.pattern&&c.push(new RegExp(r.pattern).test(t)),c.every(function(e){return e})})(function(e){return e})}}}},16229:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.application_escaped=void 0;var n=r(15566);t.application_escaped=function(e){return function(t){return function(r){return function(a){var o=(0,n.application_schema)(e)(t)(r)(a.returns)({});if(null===o)return[];if(is_date(new Set)(a.original)){var i=is_string(o)?o:is_one_of(o)?o.oneOf.find(is_string):void 0;void 0!==i&&"date"!==i.format&&"date-time"!==i.format&&(i.format="date-time")}return is_one_of(o)?o.oneOf:[o]}}}};var is_string=function(e){return"string"===e.type},is_one_of=function(e){return Array.isArray(e.oneOf)},is_date=function(e){return function(t){return!e.has(t)&&(e.add(t),t.natives.some(function(e){return"Date"===e})||t.arrays.some(function(t){return is_date(e)(t.type.value)})||t.tuples.some(function(t){return t.type.elements.some(is_date(e))})||t.aliases.some(function(t){return is_date(e)(t.value)}))}}},88072:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.application_native=void 0;var n=r(30535);t.application_native=function(e){return function(t){return function(r){return function(a){if("Blob"===r||"File"===r)return{type:"string",format:"binary",nullable:a};var o,i,u,c,f="ajv"===e.purpose?r:"".concat(r).concat(a?".Nullable":"");return(null===(o=t.schemas)||void 0===o?void 0:o[f])===void 0&&(null!==(i=t.schemas)&&void 0!==i||(t.schemas={}),null!==(u=(c=t.schemas)[f])&&void 0!==u||(c[f]={type:"object",$id:"ajv"===e.purpose?"".concat(n.JSON_COMPONENTS_PREFIX,"/objects/").concat(f):void 0,properties:{},nullable:"swagger"===e.purpose?a:void 0})),{$ref:"".concat(n.JSON_COMPONENTS_PREFIX,"/objects/").concat(f)}}}}}},44286:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_number=void 0;var u=r(1494);t.application_number=function(e){return function(t){return function(r){var i={type:"number"},out=function(e){var t;return null!==(t=e.default)&&void 0!==t||(e.default=(0,u.application_default)(r)(function(t){var r=Number(t),n=[!Number.isNaN(r)];return void 0!==e.minimum&&(!0===e.exclusiveMinimum?n.push(r>e.minimum):n.push(r>=e.minimum)),void 0!==e.maximum&&(!0===e.exclusiveMaximum?n.push(r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.application_object=void 0;var i=r(37297),u=r(3078),c=r(28868),f=r(30535),s=r(15566),d=r(76555);t.application_object=function(e){return function(t){return function(r){return function(n){if(!0===r._Is_literal())return create_object_schema(e)(t)(r)(n);var a,o,i="ajv"===e.purpose?r.name:"".concat(r.name).concat(n?".Nullable":""),u="".concat(f.JSON_COMPONENTS_PREFIX,"/schemas/").concat(i);if((null===(a=t.schemas)||void 0===a?void 0:a[i])!==void 0)return{$ref:u};var c={$id:"ajv"===e.purpose?u:void 0};return null!==(o=t.schemas)&&void 0!==o||(t.schemas={}),t.schemas[i]=c,Object.assign(c,create_object_schema(e)(t)(r)(n)),{$ref:u}}}}};var create_object_schema=function(e){return function(t){return function(r){return function(u){var f,y,p,m,v,g={},_={patternProperties:{},additionalProperties:void 0},b=[];try{for(var x=a(r.properties),S=x.next();!S.done;S=x.next()){var T=S.value;!function(r){if(!(!0===r.value.functional&&!1===r.value.nullable&&!0===r.value.isRequired()&&0===r.value.size()||r.jsDocTags.find(function(e){return"hidden"===e.name}))){var a,o,u,f=r.key.getSoleLiteral(),y=(0,s.application_schema)(e)(!0)(t)(r.value)(n(n({deprecated:r.jsDocTags.some(function(e){return"deprecated"===e.name})||void 0,title:(null===(a=null==(o=r.jsDocTags.find(function(e){return"title"===e.name}))?void 0:o.text)||void 0===a?void 0:a.length)?i.CommentFactory.merge(o.text):void 0,description:null!==(p=r.description)&&void 0!==p?p:void 0},e.surplus?{"x-typia-required":r.value.required,"x-typia-optional":r.value.optional}:{}),{"x-typia-jsDocTags":(u=r.jsDocTags.filter(function(e){return"title"!==e.name&&"deprecated"!==e.name&&"hidden"!==e.name})).length?u:void 0}));if(null!==y){if(!1===e.surplus&&(null===(m=y["x-typia-jsDocTags"])||void 0===m?void 0:m.length)&&delete y["x-typia-jsDocTags"],null!==f)g[f]=y,!0===r.value.isRequired()&&b.push(f);else{var v=(0,d.metadata_to_pattern)(!0)(r.key);v===c.PatternUtil.STRING?_.additionalProperties=[r.value,y]:_.patternProperties[v]=[r.value,y]}}}}(T)}}catch(e){f={error:e}}finally{try{S&&!S.done&&(y=x.return)&&y.call(x)}finally{if(f)throw f.error}}var E={additionalProperties:null===(v=_.additionalProperties)||void 0===v?void 0:v[1],patternProperties:function(){if(0!==Object.keys(_.patternProperties).length){var e,t,r={};try{for(var n=a(Object.entries(_.patternProperties)),i=n.next();!i.done;i=n.next()){var u=o(i.value,2),c=u[0],f=u[1];r[c]=f[1]}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return r}}()};return n(n({type:"object",properties:g,nullable:"swagger"===e.purpose?u:void 0,required:b.length?b:void 0,description:r.description},e.surplus?{"x-typia-jsDocTags":r.jsDocTags}:{}),"ajv"===e.purpose?E:e.surplus?{"x-typia-additionalProperties":E.additionalProperties,"x-typia-patternProperties":E.patternProperties,additionalProperties:join(e)(t)(_)}:{})}}}},join=function(e){return function(t){return function(r){var n,a=Object.values(r.patternProperties||{});if(r.additionalProperties&&a.push(r.additionalProperties),0!==a.length){if(1===a.length)return a[0][1];var o=a.map(function(e){return e[0]}).reduce(function(e,t){return u.Metadata.merge(e,t)});return null!==(n=(0,s.application_schema)(e)(!0)(t)(o)(e.surplus?{"x-typia-required":!1}:{}))&&void 0!==n?n:void 0}}}}},15566:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_schema=void 0;var o=r(45041),i=r(86752),u=r(38379),c=r(95333),f=r(70141),s=r(59672),d=r(16229),y=r(88072),p=r(44286),m=r(68725),v=r(24014),g=r(33502),_=r(30829);t.application_schema=function(e){return function(t){return function(r){return function(x){return function(S){if(!0===x.any)return n(n({},S),{type:void 0});if(x.nullable&&x.empty())return n({type:"null"},S);var T,E,w,P,I,j,F,A,M,O,C,N,R,L,U=[];x.nullable&&"swagger"!==e.purpose&&U.push(n(n({},S),{type:"null"}));var H=x.nullable&&"swagger"===e.purpose?function(e){return U.push(n(n({},e),{nullable:!!e.type||void 0}))}:function(e){return U.push(e)};null!==x.escaped&&(0,d.application_escaped)(e)(t)(r)(x.escaped).forEach(H),x.templates.length&&i.AtomicPredicator.template(x)&&H((0,g.application_templates)(x)(S));try{for(var q=a(x.constants),z=q.next();!z.done;z=q.next()){var B=z.value;if("bigint"===B.type)throw TypeError(b);"string"===B.type&&x.templates.length||!1===i.AtomicPredicator.constant(x)(B.type)||H((0,s.application_constant)(B)(S))}}catch(e){T={error:e}}finally{try{z&&!z.done&&(E=q.return)&&E.call(q)}finally{if(T)throw T.error}}try{for(var V=a(x.atomics),J=V.next();!J.done;J=V.next()){var G=J.value;if("bigint"===G.type)throw TypeError(b);"boolean"===G.type?(0,f.application_boolean)(e)(G)(S).forEach(H):"number"===G.type?(0,p.application_number)(e)(G)(S).forEach(H):"string"===G.type&&(0,v.application_string)(e)(x)(G)(S).forEach(H)}}catch(e){w={error:e}}finally{try{J&&!J.done&&(P=V.return)&&P.call(V)}finally{if(w)throw w.error}}try{for(var Q=a(x.arrays),W=Q.next();!W.done;W=Q.next()){var K=W.value;(0,c.application_array)(e)(r)(K).forEach(H)}}catch(e){I={error:e}}finally{try{W&&!W.done&&(j=Q.return)&&j.call(Q)}finally{if(I)throw I.error}}try{for(var Y=a(x.tuples),Z=Y.next();!Z.done;Z=Y.next()){var X=Z.value;H((0,_.application_tuple)(e)(r)(X)(S))}}catch(e){F={error:e}}finally{try{Z&&!Z.done&&(A=Y.return)&&A.call(Y)}finally{if(F)throw F.error}}try{for(var ee=a(x.natives),et=ee.next();!et.done;et=ee.next()){var er=et.value;!function(t){if(i.AtomicPredicator.native(t)){var n=t.toLowerCase();if(!x.atomics.some(function(e){return e.type===n})){if("bigint"===n)throw TypeError(b);"boolean"===n?H((0,f.application_boolean)(e)(o.MetadataAtomic.create({type:"boolean",tags:[]}))(S)[0]):"number"===n?H((0,p.application_number)(e)(o.MetadataAtomic.create({type:"number",tags:[]}))(S)[0]):"string"===n&&H((0,v.application_string)(e)(x)(o.MetadataAtomic.create({type:"string",tags:[]}))(S)[0])}}else H((0,y.application_native)(e)(r)(t)(x.nullable))}(er)}}catch(e){M={error:e}}finally{try{et&&!et.done&&(O=ee.return)&&O.call(ee)}finally{if(M)throw M.error}}x.sets.length&&H((0,y.application_native)(e)(r)("Set")(x.nullable)),x.maps.length&&H((0,y.application_native)(e)(r)("Map")(x.nullable));try{for(var en=a(x.objects),ea=en.next();!ea.done;ea=en.next()){var eo=ea.value;H((0,m.application_object)(e)(r)(eo)(x.nullable))}}catch(e){C={error:e}}finally{try{ea&&!ea.done&&(N=en.return)&&N.call(en)}finally{if(C)throw C.error}}try{for(var ei=a(x.aliases),eu=ei.next();!eu.done;eu=ei.next()){var ec=eu.value;H((0,u.application_alias)(e)(t)(r)(ec)(x.nullable))}}catch(e){R={error:e}}finally{try{eu&&!eu.done&&(L=ei.return)&&L.call(ei)}finally{if(R)throw R.error}}return 0===U.length?!0===t?null:n(n({},S),{type:void 0}):1===U.length?n(n({},U[0]),S):n({oneOf:U},S)}}}}};var b="Error on typia.application(): does not allow bigint type."},24014:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.application_string=void 0;var u=r(21683);t.application_string=function(e){return function(t){return function(r){return function(i){var c={type:"string"},out=function(e){var r;return null!==(r=e.default)&&void 0!==r||(e.default=(0,u.application_default_string)(t)(i)(c)),e};if(0===r.tags.length)return[out(c)];var f=r.tags.map(function(t){return application_string_tags(e)(n({},c))(t)});return o([],a(new Map(f.map(function(e){return[JSON.stringify(e),e]})).values()),!1).map(function(e){return out(e)})}}}};var application_string_tags=function(e){return function(t){return function(r){var n,a;try{for(var o=i(r.slice().sort(function(e,t){return e.kind.localeCompare(t.kind)})),u=o.next();!u.done;u=o.next()){var c=u.value;"minLength"===c.kind&&"number"==typeof c.value?t.minLength=c.value:"maxLength"===c.kind&&"number"==typeof c.value?t.maxLength=c.value:"format"===c.kind&&"string"==typeof c.value?t.format=c.value:"pattern"===c.kind?t.pattern=c.value:"default"===c.kind&&"string"==typeof c.value&&(t.default=c.value)}}catch(e){n={error:e}}finally{try{u&&!u.done&&(a=o.return)&&a.call(o)}finally{if(n)throw n.error}}return e.surplus&&(t["x-typia-typeTags"]=r.map(function(e){return{target:e.target,name:e.name,kind:e.kind,value:e.value,validate:e.validate,exclusive:e.exclusive}})),t}}}},33502:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.application_templates=void 0;var n=r(21683),a=r(76555);t.application_templates=function(e){return function(t){var r={type:"string"};return r.pattern=(0,a.metadata_to_pattern)(!0)(e),r.default=(0,n.application_default_string)(e)(t)(r),r}}},30829:function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;r & ".concat(t.name),expression:(null!==(a=t.predicate)&&void 0!==a?a:n.ExpressionFactory.transpile(e.context)(t.validate))(r)}})})}}}},67790:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.check_bigint=void 0;var a=n(r(55423)),o=r(73906);t.check_bigint=function(e){return function(t){return function(r){var n=check_bigint_type_tags(e)(t)(r);return{expected:t.getName(),expression:a.default.factory.createStrictEquality(a.default.factory.createStringLiteral("bigint"),a.default.factory.createTypeOfExpression(r)),conditions:n}}}};var check_bigint_type_tags=function(e){return function(t){return function(r){return t.tags.map(function(e){return e.filter(function(e){return!!e.validate})}).filter(function(e){return!!e.length}).map(function(t){return t.map(function(t){var n;return{expected:"bigint & ".concat(t.name),expression:(null!==(n=t.predicate)&&void 0!==n?n:o.ExpressionFactory.transpile(e.context)(t.validate))(r)}})})}}}},95013:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.metadata_to_pattern=void 0;var a=r(73346),o=r(28868),i=r(26290);t.metadata_to_pattern=function(e){return function(t){if(void 0!==t.atomics.find(function(e){return"string"===e.type}))return"(.*)";var r,u,c,f,s=a.ArrayUtil.flat(t.constants.map(function(e){return"string"!==e.type?e.values.map(function(e){return e.toString()}):e.values.map(function(e){return o.PatternUtil.escape(e)})}));try{for(var d=n(t.atomics),y=d.next();!y.done;y=d.next()){var p=y.value;"number"===p.type||"bigint"===p.type?s.push(o.PatternUtil.NUMBER):"boolean"===p.type&&s.push(o.PatternUtil.BOOLEAN)}}catch(e){r={error:e}}finally{try{y&&!y.done&&(u=d.return)&&u.call(d)}finally{if(r)throw r.error}}try{for(var m=n(t.templates),v=m.next();!v.done;v=m.next()){var g=v.value;s.push("("+(0,i.template_to_pattern)(!1)(g)+")")}}catch(e){c={error:e}}finally{try{v&&!v.done&&(f=m.return)&&f.call(m)}finally{if(c)throw c.error}}var _=1===s.length?s[0]:"("+s.join("|")+")";return e?o.PatternUtil.fix(_):_}}},19973:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.prune_object_properties=void 0;var a=n(r(55423)),o=r(6152),i=r(76555);t.prune_object_properties=function(e){var t=a.default.factory.createIdentifier("input"),r=a.default.factory.createIdentifier("key"),n=e.properties.map(function(e){var t=e.key.getSoleLiteral();return null!==t?a.default.factory.createStrictEquality(a.default.factory.createStringLiteral(t),a.default.factory.createIdentifier("key")):a.default.factory.createCallExpression(a.default.factory.createIdentifier("RegExp(/".concat((0,i.metadata_to_pattern)(!0)(e.key),"/).test")),void 0,[r])}),u=[];return n.length&&u.push(a.default.factory.createIfStatement(n.reduce(function(e,t){return a.default.factory.createLogicalOr(e,t)}),a.default.factory.createContinueStatement())),u.push(a.default.factory.createExpressionStatement(a.default.factory.createDeleteExpression(a.default.factory.createElementAccessExpression(t,r)))),a.default.factory.createForOfStatement(void 0,o.StatementFactory.constant("key").declarationList,a.default.factory.createCallExpression(a.default.factory.createIdentifier("Object.keys"),void 0,[t]),1===u.length?u[0]:a.default.factory.createBlock(u,!0))}},59573:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.random_custom=void 0;var a=n(r(55423)),o=r(73906),i=r(97846);t.random_custom=function(e){return function(t){return function(r){return function(n){return o.ExpressionFactory.coalesce(a.default.factory.createCallChain(a.default.factory.createPropertyAccessChain(e("customs"),a.default.factory.createToken(a.default.SyntaxKind.QuestionDotToken),a.default.factory.createIdentifier(t)),a.default.factory.createToken(a.default.SyntaxKind.QuestionDotToken),void 0,[i.LiteralFactory.generate(r.map(function(e){return{name:e.name,kind:e.kind,value:e.value}}))]))(n)}}}}},11430:function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.stringify_dynamic_properties=void 0;var o=a(r(55423)),i=r(61387),u=r(95374),c=r(76555);t.stringify_dynamic_properties=function(e,t){var r,a,u,f=[o.default.factory.createIfStatement(o.default.factory.createStrictEquality(o.default.factory.createIdentifier("undefined"),o.default.factory.createIdentifier("value")),o.default.factory.createReturnStatement(o.default.factory.createStringLiteral("")))],output=function(){var e=o.default.factory.createCallExpression(i.IdentifierFactory.access(o.default.factory.createCallExpression(o.default.factory.createIdentifier("Object.entries"),void 0,[o.default.factory.createIdentifier("input")]))("map"),void 0,[o.default.factory.createArrowFunction(void 0,void 0,[i.IdentifierFactory.parameter(o.default.factory.createArrayBindingPattern([o.default.factory.createBindingElement(void 0,void 0,"key"),o.default.factory.createBindingElement(void 0,void 0,"value")]),o.default.factory.createTypeReferenceNode("[string, any]"))],void 0,void 0,o.default.factory.createBlock(f))]),t=o.default.factory.createCallExpression(i.IdentifierFactory.access(e)("filter"),void 0,[o.default.factory.createArrowFunction(void 0,void 0,[i.IdentifierFactory.parameter("str")],void 0,void 0,o.default.factory.createStrictInequality(o.default.factory.createStringLiteral(""),o.default.factory.createIdentifier("str")))]);return o.default.factory.createCallExpression(i.IdentifierFactory.access(t)("join"),void 0,[o.default.factory.createStringLiteral(",")])};if(t.length&&f.push(o.default.factory.createIfStatement(o.default.factory.createCallExpression(i.IdentifierFactory.access(o.default.factory.createArrayLiteralExpression(t.map(function(e){return o.default.factory.createStringLiteral(e)})))("some"),void 0,[o.default.factory.createArrowFunction(void 0,void 0,[i.IdentifierFactory.parameter("regular")],void 0,void 0,o.default.factory.createStrictEquality(o.default.factory.createIdentifier("regular"),o.default.factory.createIdentifier("key")))]),o.default.factory.createReturnStatement(o.default.factory.createStringLiteral("")))),!0==(1===e.length&&1===e[0].key.size()&&(null===(u=e[0].key.atomics[0])||void 0===u?void 0:u.type)==="string"))return f.push(stringify(e[0])),output();try{for(var s=n(e),d=s.next();!d.done;d=s.next()){var y=d.value,p=o.default.factory.createIfStatement(o.default.factory.createCallExpression(o.default.factory.createIdentifier("RegExp(/".concat((0,c.metadata_to_pattern)(!0)(y.key),"/).test")),void 0,[o.default.factory.createIdentifier("key")]),stringify(y));f.push(p)}}catch(e){r={error:e}}finally{try{d&&!d.done&&(a=s.return)&&a.call(s)}finally{if(r)throw r.error}}return f.push(o.default.factory.createReturnStatement(o.default.factory.createStringLiteral(""))),output()};var stringify=function(e){return o.default.factory.createReturnStatement(u.TemplateFactory.generate([o.default.factory.createCallExpression(o.default.factory.createIdentifier("JSON.stringify"),[],[o.default.factory.createIdentifier("key")]),o.default.factory.createStringLiteral(":"),e.expression]))}},11606:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.JsonApplicationProgrammer=void 0;var c=r(63664),f=r(86752),s=r(15566);(a=(n=o||(t.JsonApplicationProgrammer=o={})).IOptions||(n.IOptions={})).complement=function(e){var t,r;return{purpose:null!==(t=null==e?void 0:e.purpose)&&void 0!==t?t:"swagger",surplus:null!==(r=null==e?void 0:e.surplus)&&void 0!==r&&r}},n.write=function(e){return function(t){var r=a.complement(e),n={schemas:{}},o=(0,s.application_schema)(r)(!0)(n);return i({schemas:t.map(function(e,t){var r=o(e)({});if(null===r)throw new c.TransformerError({code:"typia.json.application",message:"invalid type on argument - (".concat(e.getName(),", ").concat(t,")")});return r}),components:n},r)}},n.validate=function(e){var t,r,n=[];(e.atomics.some(function(e){return"bigint"===e.type})||e.constants.some(function(e){return"bigint"===e.type}))&&n.push("JSON schema does not support bigint type."),(e.tuples.some(function(e){return e.type.elements.some(function(e){return!1===e.isRequired()})})||e.arrays.some(function(e){return!1===e.type.value.isRequired()}))&&n.push("JSON schema does not support undefined type in array."),e.maps.length&&n.push("JSON schema does not support Map type."),e.sets.length&&n.push("JSON schema does not support Set type.");try{for(var a=u(e.natives),o=a.next();!o.done;o=a.next()){var i=o.value;!1===f.AtomicPredicator.native(i)&&"Date"!==i&&"Blob"!==i&&"File"!==i&&n.push("JSON schema does not support ".concat(i," type."))}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n}},29057:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([f.StatementFactory.constant("assert",d.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("input"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("JSON.parse"),void 0,[i.default.factory.createIdentifier("input")]))),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("input")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},20433:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([f.StatementFactory.constant("is",d.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("input"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("JSON.parse"),void 0,[i.default.factory.createIdentifier("input")]))),i.default.factory.createReturnStatement(i.default.factory.createConditionalExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("input")]),void 0,i.default.factory.createAsExpression(i.default.factory.createIdentifier("input"),s.TypeFactory.keyword("any")),void 0,i.default.factory.createNull()))]))}}}},5042:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},F=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},M=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.JsonStringifyProgrammer=void 0;var O=M(r(55423)),C=r(73906),N=r(61387),R=r(67711),L=r(6152),U=r(12301),H=r(84411),q=r(3078),z=r(23879),B=r(45041),V=r(73346),J=r(12114),G=r(63348),Q=r(86752),W=r(31959),K=r(3306),Y=r(38252),Z=r(91934),X=r(97144),ee=r(60572),et=r(39687),er=r(11058),en=r(59714);(P||(t.JsonStringifyProgrammer=P={})).write=function(e){return function(t){var r=new W.FunctionImporter(t.getText()),n=T(e)(r);return J.FeatureProgrammer.write(e)(I(I({},n),{addition:function(n){return F(F([],j(G.IsProgrammer.write_function_statements(e)(r)(n)),!1),j(r.declare(t)),!1)}}))(r)}},n=function(e){return function(t){return function(r){return function(a,i,c){if(!0===i.any)return g(a,i,c)(b(a,i,c)(O.default.factory.createCallExpression(O.default.factory.createIdentifier("JSON.stringify"),void 0,[a])));if(0===i.size()&&(!1===i.isRequired()||!0===i.nullable))return!1===i.isRequired()&&!0===i.nullable?"array"===c.from?O.default.factory.createStringLiteral("null"):O.default.factory.createConditionalExpression(O.default.factory.createStrictEquality(O.default.factory.createNull(),a),void 0,O.default.factory.createStringLiteral("null"),void 0,O.default.factory.createIdentifier("undefined")):!1===i.isRequired()?"array"===c.from?O.default.factory.createStringLiteral("null"):O.default.factory.createIdentifier("undefined"):O.default.factory.createStringLiteral("null");var v,S,T,E,w,P,M,N,R,L=[];if(null!==i.escaped?L.push({type:"resolved",is:function(){return G.IsProgrammer.decode_to_json(!1)(a)},value:function(){return d(e)(t)(r)(a,i.escaped.returns,c)}}):!0===i.functional&&L.push({type:"functional",is:function(){return G.IsProgrammer.decode_functional(a)},value:function(){return y(c)}}),(i.templates.length||V.ArrayUtil.has(i.constants,function(e){return"string"===e.type}))&&Q.AtomicPredicator.template(i)){var H=q.Metadata.initialize();H.atomics.push(B.MetadataAtomic.create({type:"string",tags:[]})),L.push({type:"template literal",is:function(){return G.IsProgrammer.decode(e)(r)(a,H,c)},value:function(){return f(e)(r)(a,"string",c)}})}var _loop_1=function(t){if(!1===Q.AtomicPredicator.constant(i)(t.type))return"continue";"string"!==t.type?L.push({type:"atomic",is:function(){var n;return G.IsProgrammer.decode(e)(r)(a,((n=q.Metadata.initialize()).atomics.push(B.MetadataAtomic.create({type:t.type,tags:[]})),n),c)},value:function(){return f(e)(r)(a,t.type,c)}}):0===i.templates.length&&L.push({type:"const string",is:function(){var t;return G.IsProgrammer.decode(e)(r)(a,((t=q.Metadata.initialize()).atomics.push(B.MetadataAtomic.create({type:"string",tags:[]})),t),c)},value:function(){return s(e)(r)(a,F([],j(t.values),!1),c)}})};try{for(var z=A(i.constants),J=z.next();!J.done;J=z.next()){var W=J.value;_loop_1(W)}}catch(e){S={error:e}}finally{try{J&&!J.done&&(T=z.return)&&T.call(z)}finally{if(S)throw S.error}}var _loop_2=function(t){Q.AtomicPredicator.atomic(i)(t.type)&&L.push({type:"atomic",is:function(){var n;return G.IsProgrammer.decode(e)(r)(a,((n=q.Metadata.initialize()).atomics.push(t),n),c)},value:function(){return f(e)(r)(a,t.type,c)}})};try{for(var K=A(i.atomics),Z=K.next();!Z.done;Z=K.next()){var X=Z.value;_loop_2(X)}}catch(e){E={error:e}}finally{try{Z&&!Z.done&&(w=K.return)&&w.call(K)}finally{if(E)throw E.error}}var _loop_3=function(n){L.push({type:"tuple",is:function(){var t;return G.IsProgrammer.decode(e)(r)(a,((t=q.Metadata.initialize()).tuples.push(n),t),c)},value:function(){return u(e)(t)(r)(a,n,c)}})};try{for(var et=A(i.tuples),en=et.next();!en.done;en=et.next()){var ea=en.value;_loop_3(ea)}}catch(e){P={error:e}}finally{try{en&&!en.done&&(M=et.return)&&M.call(et)}finally{if(P)throw P.error}}if(i.arrays.length){var eo=1===i.arrays.length?function(){return o(t)(r)(a,i.arrays[0],I(I({},c),{from:"array"}))}:i.arrays.some(function(e){return e.type.value.any})?function(){return O.default.factory.createCallExpression(O.default.factory.createIdentifier("JSON.stringify"),void 0,[a])}:function(){return m(e)(t)(r)(a,i.arrays,I(I({},c),{from:"array"}))};L.push({type:"array",is:function(){return C.ExpressionFactory.isArray(a)},value:eo})}if(i.natives.length){var _loop_4=function(t){L.push({type:"object",is:function(){return(0,ee.check_native)(t)(a)},value:function(){return Q.AtomicPredicator.native(t)?f(e)(r)(a,t.toLowerCase(),c):O.default.factory.createStringLiteral("{}")}})};try{for(var ei=A(i.natives),eu=ei.next();!eu.done;eu=ei.next()){var ec=eu.value;_loop_4(ec)}}catch(e){N={error:e}}finally{try{eu&&!eu.done&&(R=ei.return)&&R.call(ei)}finally{if(N)throw N.error}}}i.sets.length&&L.push({type:"object",is:function(){return C.ExpressionFactory.isInstanceOf("Set")(a)},value:function(){return O.default.factory.createStringLiteral("{}")}}),i.maps.length&&L.push({type:"object",is:function(){return C.ExpressionFactory.isInstanceOf("Map")(a)},value:function(){return O.default.factory.createStringLiteral("{}")}}),i.objects.length&&L.push({type:"object",is:function(){return C.ExpressionFactory.isObject({checkNull:!0,checkArray:i.objects.some(function(e){return e.properties.every(function(e){return!e.key.isSoleLiteral()||!e.value.isRequired()})})})(a)},value:function(){var o,u;return!1===i.isParentResolved()&&1===i.objects.length&&i.objects[0]._Is_simple("top"===c.from?0:1)?(o=i.objects[0],u=(0,er.feature_object_entries)({decoder:function(){return n(e)(t)(r)},trace:!1,path:!1})(r)(o)(O.default.factory.createAsExpression(a,U.TypeFactory.keyword("any"))),Y.StringifyJoiner.object(r)(O.default.factory.createAsExpression(a,U.TypeFactory.keyword("any")),u)):p(t)(r)(a,i,I(I({},c),{from:"object"}))}});return 0===L.length?O.default.factory.createCallExpression(O.default.factory.createIdentifier("JSON.stringify"),void 0,[a]):(v=1===L.length?L[0].value():O.default.factory.createCallExpression(O.default.factory.createArrowFunction(void 0,void 0,[],void 0,void 0,x(r,a,L,i.getName())),void 0,void 0),g(a,i,c)(_(a,i)(v)))}}}},a=function(e){return J.FeatureProgrammer.decode_object({trace:!1,path:!1,prefix:S})(e)},o=function(e){return function(t){return function(r,n,a){return n.type.recursive?O.default.factory.createCallExpression(O.default.factory.createIdentifier(t.useLocal("".concat(e.prefix,"a").concat(n.type.index))),void 0,J.FeatureProgrammer.argumentsArray(e)(I(I({},a),{source:"function",from:"array"}))(r)):i(e)(t)(r,n,a)}}},i=function(e){return function(t){return function(r,n,a){return J.FeatureProgrammer.decode_array(e)(t)(Y.StringifyJoiner.array)(r,n,a)}}},u=function(e){return function(t){return function(r){return function(n,a,o){return a.type.recursive?O.default.factory.createCallExpression(O.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,J.FeatureProgrammer.argumentsArray(t)(I(I({},o),{source:"function"}))(n)):c(e)(t)(r)(n,a.type,o)}}}},c=function(e){return function(t){return function(r){return function(a,o,i){var u=o.elements.filter(function(e){return null===e.rest}).map(function(o,u){return n(e)(t)(r)(O.default.factory.createElementAccessExpression(a,u),o,I(I({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(u,']"'):'"['.concat(u,']"')}))}),c=function(){if(0===o.elements.length||null===o.elements.at(-1).rest)return null;var u=n(e)(t)(r)(O.default.factory.createCallExpression(N.IdentifierFactory.access(a)("slice"),void 0,[C.ExpressionFactory.number(o.elements.length-1)]),(0,en.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),I(I({},i),{start:o.elements.length-1}));return O.default.factory.createCallExpression(r.use("rest"),void 0,[u])}();return Y.StringifyJoiner.tuple(u,c)}}}},f=function(e){return function(t){return function(r,n,a){return"string"===n?O.default.factory.createCallExpression(t.use("string"),void 0,[r]):("number"===n&&K.OptionPredicator.numeric(e.options)&&(r=O.default.factory.createCallExpression(t.use("number"),void 0,[r])),"top"!==a.from?r:O.default.factory.createCallExpression(N.IdentifierFactory.access(r)("toString"),void 0,void 0))}}},s=function(e){return function(t){return function(r,n,a){return n.every(function(e){return!Z.StringifyPredicator.require_escape(e)})?[O.default.factory.createStringLiteral('"'),r,O.default.factory.createStringLiteral('"')].reduce(function(e,t){return O.default.factory.createAdd(e,t)}):f(e)(t)(r,"string",a)}}},d=function(e){return function(t){return function(r){return function(a,o,i){return n(e)(t)(r)(O.default.factory.createCallExpression(N.IdentifierFactory.access(a)("toJSON"),void 0,[]),o,i)}}}},y=function(e){return"array"===e.from?O.default.factory.createStringLiteral("null"):O.default.factory.createIdentifier("undefined")},p=function(e){return function(t){return function(r,n,o){return 1===n.objects.length?a(t)(r,n.objects[0],o):O.default.factory.createCallExpression(O.default.factory.createIdentifier(t.useLocal("".concat(S,"u").concat(n.union_index))),void 0,J.FeatureProgrammer.argumentsArray(e)(o)(r))}}},m=function(e){return function(t){return function(r){return function(n,a,i){return v(t)(r)(X.UnionExplorer.array({checker:G.IsProgrammer.decode(e)(r),decoder:o(t)(r),empty:O.default.factory.createStringLiteral("[]"),success:O.default.factory.createTrue(),failure:function(e,t){return w(r)(t)(e)}}))(n,a,i)}}}},v=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&O.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=I(I({},o),{source:"function",from:"array"}),O.default.factory.createCallExpression(O.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(J.FeatureProgrammer.parameterDeclarations(e)(U.TypeFactory.keyword("any"))(O.default.factory.createIdentifier("input")))(I(I({},o),{postfix:""}))(O.default.factory.createIdentifier("input"))})),void 0,J.FeatureProgrammer.argumentsArray(e)(o)(n))}}}},g=function(e,t,r){return!0===t.isRequired()&&!1===t.any?function(e){return e}:function(t){return O.default.factory.createConditionalExpression(O.default.factory.createStrictInequality(O.default.factory.createIdentifier("undefined"),e),void 0,t,void 0,"array"===r.from?O.default.factory.createStringLiteral("null"):O.default.factory.createIdentifier("undefined"))}},_=function(e,t){return!1===t.nullable?function(e){return e}:function(t){return O.default.factory.createConditionalExpression(O.default.factory.createStrictInequality(O.default.factory.createNull(),e),void 0,t,void 0,O.default.factory.createStringLiteral("null"))}},b=function(e,t,r){return!1===t.functional?function(e){return e}:function(t){return O.default.factory.createConditionalExpression(O.default.factory.createStrictInequality(O.default.factory.createStringLiteral("function"),H.ValueFactory.TYPEOF(e)),void 0,t,void 0,y(r))}},x=function(e,t,r,n){return O.default.factory.createBlock(F(F([],j(r.map(function(e){return O.default.factory.createIfStatement(e.is(),O.default.factory.createReturnStatement(e.value()))})),!1),[w(e)(n)(t)],!1),!0)},S="$s",T=function(e){return function(t){var r={types:{input:function(t,r){return O.default.factory.createTypeReferenceNode(null!=r?r:U.TypeFactory.getFullName(e.checker)(t))},output:function(){return U.TypeFactory.keyword("string")}},prefix:S,trace:!1,path:!1,initializer:E,decoder:function(){return n(e)(r)(t)},objector:{checker:function(){return function(r,n,a){return G.IsProgrammer.decode(e)(t)(r,n,a)}},decoder:function(){return a(t)},joiner:Y.StringifyJoiner.object(t),unionizer:(0,et.decode_union_object)(G.IsProgrammer.decode_object(e)(t))(a(t))(function(e){return e})(function(e,r){return w(t)(r)(e)}),failure:function(e,r){return w(t)(r)(e)}},generator:{arrays:function(){return function(e){return e.arrays().filter(function(e){return e.recursive}).map(function(e,n){return L.StatementFactory.constant("".concat(r.prefix,"a").concat(n),O.default.factory.createArrowFunction(void 0,void 0,J.FeatureProgrammer.parameterDeclarations(r)(U.TypeFactory.keyword("any"))(O.default.factory.createIdentifier("input")),U.TypeFactory.keyword("any"),void 0,i(r)(t)(O.default.factory.createIdentifier("input"),z.MetadataArray.create({type:e,tags:[]}),{tracable:r.trace,source:"function",from:"array",postfix:""})))})}},tuples:function(){var n;return n=t,function(t){return t.tuples().filter(function(e){return e.recursive}).map(function(t,a){return L.StatementFactory.constant("".concat(r.prefix,"t").concat(a),O.default.factory.createArrowFunction(void 0,void 0,J.FeatureProgrammer.parameterDeclarations(r)(U.TypeFactory.keyword("any"))(O.default.factory.createIdentifier("input")),U.TypeFactory.keyword("any"),void 0,c(e)(r)(n)(O.default.factory.createIdentifier("input"),t,{tracable:r.trace,source:"function",from:"array",postfix:""})))})}}}};return r}},E=function(e){return function(t){return function(r){return R.JsonMetadataFactory.analyze("typia.json.".concat(t.method))(e.checker,e.context)(r)}}},w=function(e){return function(t){return function(r){return O.default.factory.createExpressionStatement(O.default.factory.createCallExpression(e.use("throws"),[],[O.default.factory.createObjectLiteralExpression([O.default.factory.createPropertyAssignment("expected",O.default.factory.createStringLiteral(t)),O.default.factory.createPropertyAssignment("value",r)],!0)]))}}}},78600:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([f.StatementFactory.constant("validate",d.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),f.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("JSON.parse"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},77284:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("stringify",d.JsonStringifyProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")]),f.TypeFactory.keyword("any"))),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("output.data"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("stringify"),void 0,[i.default.factory.createIdentifier("input")])))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},60962:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("assert",s.AssertProgrammer.write(e)(t)(!1)(r,n)),c.StatementFactory.constant("clone",d.MiscCloneProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),i.default.factory.createExpressionStatement(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("input")])),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("clone"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},98453:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},I=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},F=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MiscCloneProgrammer=void 0;var A=F(r(55423)),M=r(73906),O=r(61387),C=r(92595),N=r(43390),R=r(6152),L=r(12301),U=r(3078),H=r(23879),q=r(63664),z=r(12114),B=r(63348),V=r(1739),J=r(31959),G=r(97144),Q=r(39687),W=r(59714);(E||(t.MiscCloneProgrammer=E={})).write=function(e){return function(t){var r=new J.FunctionImporter(t.getText());return z.FeatureProgrammer.write(e)(w(w({},x(e)(r)),{addition:function(n){return I(I([],P(B.IsProgrammer.write_function_statements(e)(r)(n)),!1),P(r.declare(t)),!1)}}))(r)}},n=function(e){return function(t){return function(r){return function(n,a,o){if(a.any||a.arrays.some(function(e){return e.type.value.any})||a.tuples.some(function(e){return!!e.type.elements.length&&e.type.elements.every(function(e){return e.any})}))return A.default.factory.createCallExpression(r.use("any"),void 0,[n]);var i,c,s,d,y,_,b=[];a.functional&&b.push({type:"functional",is:function(){return A.default.factory.createStrictEquality(A.default.factory.createStringLiteral("function"),A.default.factory.createTypeOfExpression(n))},value:function(){return A.default.factory.createIdentifier("undefined")}});var _loop_1=function(a){b.push({type:"tuple",is:function(){var t;return B.IsProgrammer.decode(e)(r)(n,((t=U.Metadata.initialize()).tuples.push(a),t),o)},value:function(){return u(e)(t)(r)(n,a,o)}})};try{for(var x=j(a.tuples),S=x.next();!S.done;S=x.next()){var T=S.value;_loop_1(T)}}catch(e){i={error:e}}finally{try{S&&!S.done&&(c=x.return)&&c.call(x)}finally{if(i)throw i.error}}a.arrays.length&&b.push({type:"array",is:function(){return M.ExpressionFactory.isArray(n)},value:function(){return g(e)(t)(r)(n,a.arrays,w(w({},o),{from:"array"}))}}),a.sets.length&&b.push({type:"set",is:function(){return M.ExpressionFactory.isInstanceOf("Set")(n)},value:function(){return p(e)(t)(r)(n,a.sets,w(w({},o),{from:"array"}))}}),a.maps.length&&b.push({type:"map",is:function(){return M.ExpressionFactory.isInstanceOf("Map")(n)},value:function(){return m(e)(t)(r)(n,a.maps,w(w({},o),{from:"array"}))}});var _loop_2=function(e){b.push({type:"native",is:function(){return M.ExpressionFactory.isInstanceOf(e)(n)},value:function(){return"Boolean"===e||"Number"===e||"String"===e?A.default.factory.createCallExpression(O.IdentifierFactory.access(n)("valueOf"),void 0,void 0):f(e)(n)}})};try{for(var E=j(a.natives),P=E.next();!P.done;P=E.next()){var I=P.value;_loop_2(I)}}catch(e){s={error:e}}finally{try{P&&!P.done&&(d=E.return)&&d.call(E)}finally{if(s)throw s.error}}a.objects.length&&b.push({type:"object",is:function(){return M.ExpressionFactory.isObject({checkNull:!0,checkArray:!1})(n)},value:function(){return v(t)(r)(n,a,w(w({},o),{from:"object"}))}});var F=n;try{for(var C=j(b.reverse()),N=C.next();!N.done;N=C.next()){var R=N.value;F=A.default.factory.createConditionalExpression(R.is(),void 0,R.value(),void 0,F)}}catch(e){y={error:e}}finally{try{N&&!N.done&&(_=C.return)&&_.call(C)}finally{if(y)throw y.error}}return A.default.factory.createAsExpression(F,L.TypeFactory.keyword("any"))}}}},a=function(e){return z.FeatureProgrammer.decode_object({trace:!1,path:!1,prefix:b})(e)},o=function(e){return function(t){return function(r,n,a){return n.type.recursive?A.default.factory.createCallExpression(A.default.factory.createIdentifier(t.useLocal("".concat(e.prefix,"a").concat(n.type.index))),void 0,z.FeatureProgrammer.argumentsArray(e)(w(w({},a),{source:"function",from:"array"}))(r)):i(e)(t)(r,n,a)}}},i=function(e){return function(t){return function(r,n,a){return z.FeatureProgrammer.decode_array(e)(t)(V.CloneJoiner.array)(r,n,a)}}},u=function(e){return function(t){return function(r){return function(n,a,o){return a.type.recursive?A.default.factory.createCallExpression(A.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,z.FeatureProgrammer.argumentsArray(t)(w(w({},o),{source:"function"}))(n)):c(e)(t)(r)(n,a.type,o)}}}},c=function(e){return function(t){return function(r){return function(a,o,i){var u=o.elements.filter(function(e){return null===e.rest}).map(function(o,u){return n(e)(t)(r)(A.default.factory.createElementAccessExpression(a,u),o,w(w({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(u,']"'):'"['.concat(u,']"')}))}),c=0===o.elements.length||null===o.elements.at(-1).rest?null:n(e)(t)(r)(A.default.factory.createCallExpression(O.IdentifierFactory.access(a)("slice"),void 0,[M.ExpressionFactory.number(o.elements.length-1)]),(0,W.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),w(w({},i),{start:o.elements.length-1}));return V.CloneJoiner.tuple(u,c)}}}},f=function(e){return function(t){return"Date"===e||"Uint8Array"===e||"Uint8ClampedArray"===e||"Uint16Array"===e||"Uint32Array"===e||"BigUint64Array"===e||"Int8Array"===e||"Int16Array"===e||"Int32Array"===e||"BigInt64Array"===e||"Float32Array"===e||"Float64Array"===e?s(e)(t):"ArrayBuffer"===e||"SharedArrayBuffer"===e?d(e)(t):"DataView"===e?y(t):A.default.factory.createCallExpression(A.default.factory.createIdentifier(e),void 0,[])}},s=function(e){return function(t){return A.default.factory.createNewExpression(A.default.factory.createIdentifier(e),void 0,[t])}},d=function(e){return function(t){return M.ExpressionFactory.selfCall(A.default.factory.createBlock([R.StatementFactory.constant("buffer",A.default.factory.createNewExpression(A.default.factory.createIdentifier(e),void 0,[O.IdentifierFactory.access(t)("byteLength")])),A.default.factory.createExpressionStatement(A.default.factory.createCallExpression(O.IdentifierFactory.access(A.default.factory.createNewExpression(A.default.factory.createIdentifier("Uint8Array"),void 0,[A.default.factory.createIdentifier("buffer")]))("set"),void 0,[A.default.factory.createNewExpression(A.default.factory.createIdentifier("Uint8Array"),void 0,[t])])),A.default.factory.createReturnStatement(A.default.factory.createIdentifier("buffer"))],!0))}},y=function(e){return A.default.factory.createNewExpression(A.default.factory.createIdentifier("DataView"),void 0,[O.IdentifierFactory.access(e)("buffer")])},p=function(e){return function(t){return function(r){return function(n,a,i){return A.default.factory.createCallExpression(G.UnionExplorer.set({checker:B.IsProgrammer.decode(e)(r),decoder:function(e,n,a){return A.default.factory.createNewExpression(A.default.factory.createIdentifier("Set"),[L.TypeFactory.keyword("any")],[o(t)(r)(e,n,a)])},empty:A.default.factory.createNewExpression(A.default.factory.createIdentifier("Set"),[L.TypeFactory.keyword("any")],[]),success:A.default.factory.createTrue(),failure:function(e,t){return T(r)(t)(e)}})([])(n,a,i),void 0,void 0)}}}},m=function(e){return function(t){return function(r){return function(n,a,i){return A.default.factory.createCallExpression(G.UnionExplorer.map({checker:function(t,n,a){var o=B.IsProgrammer.decode(e)(r);return A.default.factory.createLogicalAnd(o(A.default.factory.createElementAccessExpression(t,0),n[0],w(w({},a),{postfix:"".concat(a.postfix,"[0]")})),o(A.default.factory.createElementAccessExpression(t,1),n[1],w(w({},a),{postfix:"".concat(a.postfix,"[1]")})))},decoder:function(e,n,a){return A.default.factory.createNewExpression(A.default.factory.createIdentifier("Map"),[L.TypeFactory.keyword("any"),L.TypeFactory.keyword("any")],[o(t)(r)(e,n,a)])},empty:A.default.factory.createNewExpression(A.default.factory.createIdentifier("Map"),[L.TypeFactory.keyword("any"),L.TypeFactory.keyword("any")],[]),success:A.default.factory.createTrue(),failure:function(e,t){return T(r)(t)(e)}})([])(n,a,i),void 0,void 0)}}}},v=function(e){return function(t){return function(r,n,o){return 1===n.objects.length?a(t)(r,n.objects[0],o):A.default.factory.createCallExpression(A.default.factory.createIdentifier(t.useLocal("".concat(b,"u").concat(n.union_index))),void 0,z.FeatureProgrammer.argumentsArray(e)(o)(r))}}},g=function(e){return function(t){return function(r){return function(n,a,i){return _(t)(r)(G.UnionExplorer.array({checker:B.IsProgrammer.decode(e)(r),decoder:o(t)(r),empty:A.default.factory.createIdentifier("[]"),success:A.default.factory.createTrue(),failure:function(e,t){return T(r)(t)(e)}}))(n,a,i)}}}},_=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&A.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=w(w({},o),{source:"function",from:"array"}),A.default.factory.createCallExpression(A.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(z.FeatureProgrammer.parameterDeclarations(e)(L.TypeFactory.keyword("any"))(A.default.factory.createIdentifier("input")))(w(w({},o),{postfix:""}))(A.default.factory.createIdentifier("input"))})),void 0,z.FeatureProgrammer.argumentsArray(e)(o)(n))}}}},b="$c",x=function(e){return function(t){var r={types:{input:function(t,r){return A.default.factory.createTypeReferenceNode(null!=r?r:L.TypeFactory.getFullName(e.checker)(t))},output:function(t,r){return A.default.factory.createTypeReferenceNode("typia.Resolved<".concat(null!=r?r:L.TypeFactory.getFullName(e.checker)(t),">"))}},prefix:b,trace:!1,path:!1,initializer:S,decoder:function(){return n(e)(r)(t)},objector:{checker:function(){return B.IsProgrammer.decode(e)(t)},decoder:function(){return a(t)},joiner:V.CloneJoiner.object,unionizer:(0,Q.decode_union_object)(B.IsProgrammer.decode_object(e)(t))(a(t))(function(e){return e})(function(e,r){return T(t)(r)(e)}),failure:function(e,r){return T(t)(r)(e)}},generator:{arrays:function(){return function(e){return e.arrays().filter(function(e){return e.recursive}).map(function(e,n){return R.StatementFactory.constant("".concat(r.prefix,"a").concat(n),A.default.factory.createArrowFunction(void 0,void 0,z.FeatureProgrammer.parameterDeclarations(r)(L.TypeFactory.keyword("any"))(A.default.factory.createIdentifier("input")),L.TypeFactory.keyword("any"),void 0,i(r)(t)(A.default.factory.createIdentifier("input"),H.MetadataArray.create({type:e,tags:[]}),{tracable:r.trace,source:"function",from:"array",postfix:""})))})}},tuples:function(){var n;return n=t,function(t){return t.tuples().filter(function(e){return e.recursive}).map(function(t,a){return R.StatementFactory.constant("".concat(r.prefix,"t").concat(a),A.default.factory.createArrowFunction(void 0,void 0,z.FeatureProgrammer.parameterDeclarations(r)(L.TypeFactory.keyword("any"))(A.default.factory.createIdentifier("input")),L.TypeFactory.keyword("any"),void 0,c(e)(r)(n)(A.default.factory.createIdentifier("input"),t,{tracable:r.trace,source:"function",from:"array",postfix:""})))})}}}};return r}},S=function(e){return function(t){return function(r){var n=new C.MetadataCollection,a=N.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0,validate:function(e){var t=[];return e.natives.some(function(e){return"WeakSet"===e})?t.push("unable to clone WeakSet"):e.natives.some(function(e){return"WeakMap"===e})&&t.push("unable to clone WeakMap"),t}})(n)(r);if(!1===a.success)throw q.TransformerError.from("typia.misc.".concat(t.method))(a.errors);return[n,a.data]}}},T=function(e){return function(t){return function(r){return A.default.factory.createExpressionStatement(A.default.factory.createCallExpression(e.use("throws"),[],[A.default.factory.createObjectLiteralExpression([A.default.factory.createPropertyAssignment("expected",A.default.factory.createStringLiteral(t)),A.default.factory.createPropertyAssignment("value",r)],!0)]))}}}},94286:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(e)(t)(!1)(r,n)),c.StatementFactory.constant("clone",d.MiscCloneProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("clone"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},12311:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},x=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},T=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MiscPruneProgrammer=void 0;var E=T(r(55423)),w=r(73906),P=r(61387),I=r(92595),j=r(43390),F=r(6152),A=r(12301),M=r(3078),O=r(23879),C=r(63664),N=r(12114),R=r(63348),L=r(31959),U=r(3065),H=r(97144),q=r(39687),z=r(59714);(g||(t.MiscPruneProgrammer=g={})).write=function(e){return function(t){var r=new L.FunctionImporter(t.getText());return N.FeatureProgrammer.write(e)(_(_({},p(e)(r)),{addition:function(n){return x(x([],b(R.IsProgrammer.write_function_statements(e)(r)(n)),!1),b(r.declare(t)),!1)}}))(r)}},n=function(e){return function(t){return function(r){return function(n,a,o){if(!1===d(a))return E.default.factory.createBlock([]);var u,s,y,p,m=[],_loop_1=function(a){m.push({type:"tuple",is:function(){var t;return R.IsProgrammer.decode(e)(r)(n,((t=M.Metadata.initialize()).tuples.push(a),t),o)},value:function(){return i(e)(t)(r)(n,a,o)}})};try{for(var v=S(a.tuples.filter(function(e){return e.type.elements.some(function(e){var t;return d(null!==(t=e.rest)&&void 0!==t?t:e)})})),g=v.next();!g.done;g=v.next()){var b=g.value;_loop_1(b)}}catch(e){u={error:e}}finally{try{g&&!g.done&&(s=v.return)&&s.call(v)}finally{if(u)throw u.error}}if(a.arrays.filter(function(e){return d(e.type.value)}).length&&m.push({type:"array",is:function(){return w.ExpressionFactory.isArray(n)},value:function(){return f(e)(t)(r)(n,a.arrays,_(_({},o),{from:"array"}))}}),a.natives.length){var _loop_2=function(e){m.push({type:"native",is:function(){return w.ExpressionFactory.isInstanceOf(e)(n)},value:function(){return E.default.factory.createReturnStatement()}})};try{for(var x=S(a.natives),T=x.next();!T.done;T=x.next()){var P=T.value;_loop_2(P)}}catch(e){y={error:e}}finally{try{T&&!T.done&&(p=x.return)&&p.call(x)}finally{if(y)throw y.error}}}a.sets.length&&m.push({type:"set",is:function(){return w.ExpressionFactory.isInstanceOf("Set")(n)},value:function(){return E.default.factory.createReturnStatement()}}),a.maps.length&&m.push({type:"map",is:function(){return w.ExpressionFactory.isInstanceOf("Map")(n)},value:function(){return E.default.factory.createReturnStatement()}}),a.objects.length&&m.push({type:"object",is:function(){return w.ExpressionFactory.isObject({checkNull:!0,checkArray:!1})(n)},value:function(){return c(t)(r)(n,a,_(_({},o),{from:"object"}))}});var I=m.map(function(e){var t;return E.default.factory.createIfStatement(e.is(),(t=e.value(),E.default.isReturnStatement(t)||E.default.isBlock(t)?t:E.default.factory.createExpressionStatement(t)))});return E.default.factory.createBlock(I,!0)}}}},a=function(e){return N.FeatureProgrammer.decode_object({trace:!1,path:!1,prefix:y})(e)},o=function(e){return function(t){return function(r,n,a){return N.FeatureProgrammer.decode_array(e)(t)(U.PruneJoiner.array)(r,n,a)}}},i=function(e){return function(t){return function(r){return function(n,a,o){return a.type.recursive?E.default.factory.createCallExpression(E.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,N.FeatureProgrammer.argumentsArray(t)(_(_({},o),{source:"function"}))(n)):u(e)(t)(r)(n,a.type,o)}}}},u=function(e){return function(t){return function(r){return function(a,o,i){var u=o.elements.map(function(e,t){return[e,t]}).filter(function(e){var t=b(e,1)[0];return d(t)&&null===t.rest}).map(function(o){var u=b(o,2),c=u[0],f=u[1];return n(e)(t)(r)(E.default.factory.createElementAccessExpression(a,f),c,_(_({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(f,']"'):'"['.concat(f,']"')}))}),c=function(){if(0===o.elements.length)return null;var u=o.elements.at(-1).rest;return null===u||!1===d(u)?null:n(e)(t)(r)(E.default.factory.createCallExpression(P.IdentifierFactory.access(a)("slice"),void 0,[w.ExpressionFactory.number(o.elements.length-1)]),(0,z.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),_(_({},i),{start:o.elements.length-1}))}();return U.PruneJoiner.tuple(u,c)}}}},c=function(e){return function(t){return function(r,n,o){return 1===n.objects.length?a(t)(r,n.objects[0],o):E.default.factory.createCallExpression(E.default.factory.createIdentifier(t.useLocal("".concat(y,"u").concat(n.union_index))),void 0,N.FeatureProgrammer.argumentsArray(e)(o)(r))}}},f=function(e){return function(t){return function(r){return function(n,a,i){return s(t)(r)(H.UnionExplorer.array({checker:R.IsProgrammer.decode(e)(r),decoder:function(e,n,a){return n.type.recursive?E.default.factory.createCallExpression(E.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"a").concat(n.type.index))),void 0,N.FeatureProgrammer.argumentsArray(t)(_(_({},a),{source:"function",from:"array"}))(e)):o(t)(r)(e,n,a)},empty:E.default.factory.createStringLiteral("[]"),success:E.default.factory.createTrue(),failure:function(e,t){return v(r)(t)(e)}}))(n,a,i)}}}},s=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&E.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=_(_({},o),{source:"function",from:"array"}),E.default.factory.createCallExpression(E.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(N.FeatureProgrammer.parameterDeclarations(e)(A.TypeFactory.keyword("any"))(E.default.factory.createIdentifier("input")))(_(_({},o),{postfix:""}))(E.default.factory.createIdentifier("input"))})),void 0,N.FeatureProgrammer.argumentsArray(e)(o)(n))}}}},d=function(e){return!1===e.any&&(0!==e.objects.length||e.tuples.some(function(e){return!!e.type.elements.length&&e.type.elements.some(function(e){var t;return d(null!==(t=e.rest)&&void 0!==t?t:e)})})||e.arrays.some(function(e){return d(e.type.value)}))},y="$p",p=function(e){return function(t){var r={types:{input:function(t,r){return E.default.factory.createTypeReferenceNode(null!=r?r:A.TypeFactory.getFullName(e.checker)(t))},output:function(){return A.TypeFactory.keyword("void")}},prefix:y,trace:!1,path:!1,initializer:m,decoder:function(){return n(e)(r)(t)},objector:{checker:function(){return R.IsProgrammer.decode(e)(t)},decoder:function(){return a(t)},joiner:U.PruneJoiner.object,unionizer:(0,q.decode_union_object)(R.IsProgrammer.decode_object(e)(t))(a(t))(function(e){return e})(function(e,r){return v(t)(r)(e)}),failure:function(e,r){return v(t)(r)(e)}},generator:{arrays:function(){return function(e){return e.arrays().filter(function(e){return e.recursive}).map(function(e,n){return F.StatementFactory.constant("".concat(r.prefix,"a").concat(n),E.default.factory.createArrowFunction(void 0,void 0,N.FeatureProgrammer.parameterDeclarations(r)(A.TypeFactory.keyword("any"))(E.default.factory.createIdentifier("input")),A.TypeFactory.keyword("any"),void 0,o(r)(t)(E.default.factory.createIdentifier("input"),O.MetadataArray.create({type:e,tags:[]}),{tracable:r.trace,source:"function",from:"array",postfix:""})))})}},tuples:function(){var n;return n=t,function(t){return t.tuples().filter(function(e){return e.recursive}).map(function(t,a){return F.StatementFactory.constant("".concat(r.prefix,"t").concat(a),E.default.factory.createArrowFunction(void 0,void 0,N.FeatureProgrammer.parameterDeclarations(r)(A.TypeFactory.keyword("any"))(E.default.factory.createIdentifier("input")),A.TypeFactory.keyword("any"),void 0,u(e)(r)(n)(E.default.factory.createIdentifier("input"),t,{tracable:r.trace,source:"function",from:"array",postfix:""})))})}}}};return r}},m=function(e){return function(t){return function(r){var n=new I.MetadataCollection,a=j.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0})(n)(r);if(!1===a.success)throw C.TransformerError.from("typia.misc.".concat(t.method))(a.errors);return[n,a.data]}}},v=function(e){return function(t){return function(r){return E.default.factory.createExpressionStatement(E.default.factory.createCallExpression(e.use("throws"),[],[E.default.factory.createObjectLiteralExpression([E.default.factory.createPropertyAssignment("expected",E.default.factory.createStringLiteral(t)),E.default.factory.createPropertyAssignment("value",r)],!0)]))}}}},66129:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("clone",d.MiscCloneProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")]),f.TypeFactory.keyword("any"))),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("output.data"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("clone"),void 0,[i.default.factory.createIdentifier("input")])))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},90705:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("prune",d.MiscPruneProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createCallExpression(i.default.factory.createIdentifier("prune"),void 0,[i.default.factory.createIdentifier("input")]))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},60454:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},w=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},I=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.NotationGeneralProgrammer=void 0;var j=I(r(55423)),F=r(73906),A=r(61387),M=r(92595),O=r(43390),C=r(6152),N=r(12301),R=r(3078),L=r(23879),U=r(63664),H=r(85422),q=r(12114),z=r(63348),B=r(31959),V=r(94492),J=r(97144),G=r(39687),Q=r(59714);(n=S||(t.NotationGeneralProgrammer=S={})).returnType=function(e){return function(t){return"typia.".concat(H.StringUtil.capitalize(e.name),"Case<").concat(t,">")}},n.write=function(e){return function(t){return function(r){var n=new B.FunctionImporter(r.getText());return q.FeatureProgrammer.write(t)(T(T({},_(e)(t)(n)),{addition:function(e){return w(w([],E(z.IsProgrammer.write_function_statements(t)(n)(e)),!1),E(n.declare(r)),!1)}}))(n)}}},a=function(e){return function(t){return function(r){return function(n,a,o){if(a.any||a.arrays.some(function(e){return e.type.value.any})||a.tuples.some(function(e){return!!e.type.elements.length&&e.type.elements.every(function(e){return e.any})}))return j.default.factory.createCallExpression(r.use("any"),void 0,[n]);var i,u,f,v,g,_,b=[];a.functional&&b.push({type:"functional",is:function(){return j.default.factory.createStrictEquality(j.default.factory.createStringLiteral("function"),j.default.factory.createTypeOfExpression(n))},value:function(){return j.default.factory.createIdentifier("undefined")}});var _loop_1=function(a){b.push({type:"tuple",is:function(){var t;return z.IsProgrammer.decode(e)(r)(n,((t=R.Metadata.initialize()).tuples.push(a),t),o)},value:function(){return c(e)(t)(r)(n,a,o)}})};try{for(var x=P(a.tuples),S=x.next();!S.done;S=x.next()){var E=S.value;_loop_1(E)}}catch(e){i={error:e}}finally{try{S&&!S.done&&(u=x.return)&&u.call(x)}finally{if(i)throw i.error}}a.arrays.length&&b.push({type:"array",is:function(){return F.ExpressionFactory.isArray(n)},value:function(){return m(e)(t)(r)(n,a.arrays,T(T({},o),{from:"array"}))}}),a.sets.length&&b.push({type:"set",is:function(){return F.ExpressionFactory.isInstanceOf("Set")(n)},value:function(){return d(e)(t)(r)(n,a.sets,T(T({},o),{from:"array"}))}}),a.maps.length&&b.push({type:"map",is:function(){return F.ExpressionFactory.isInstanceOf("Map")(n)},value:function(){return y(e)(t)(r)(n,a.maps,T(T({},o),{from:"array"}))}});var _loop_2=function(e){if("WeakSet"===e||"WeakMap"===e)return"continue";b.push({type:"native",is:function(){return F.ExpressionFactory.isInstanceOf(e)(n)},value:function(){return"Boolean"===e||"Number"===e||"String"===e?j.default.factory.createCallExpression(A.IdentifierFactory.access(n)("valueOf"),void 0,void 0):s(e)(n)}})};try{for(var w=P(a.natives),I=w.next();!I.done;I=w.next()){var M=I.value;_loop_2(M)}}catch(e){f={error:e}}finally{try{I&&!I.done&&(v=w.return)&&v.call(w)}finally{if(f)throw f.error}}a.objects.length&&b.push({type:"object",is:function(){return F.ExpressionFactory.isObject({checkNull:!0,checkArray:!1})(n)},value:function(){return p(t)(r)(n,a,T(T({},o),{from:"object"}))}});var O=n;try{for(var C=P(b.reverse()),L=C.next();!L.done;L=C.next()){var U=L.value;O=j.default.factory.createConditionalExpression(U.is(),void 0,U.value(),void 0,O)}}catch(e){g={error:e}}finally{try{L&&!L.done&&(_=C.return)&&_.call(C)}finally{if(g)throw g.error}}return j.default.factory.createAsExpression(O,N.TypeFactory.keyword("any"))}}}},o=function(e){return q.FeatureProgrammer.decode_object({trace:!1,path:!1,prefix:g})(e)},i=function(e){return function(t){return function(r,n,a){return n.type.recursive?j.default.factory.createCallExpression(j.default.factory.createIdentifier(t.useLocal("".concat(e.prefix,"a").concat(n.type.index))),void 0,q.FeatureProgrammer.argumentsArray(e)(T(T({},a),{source:"function",from:"array"}))(r)):u(e)(t)(r,n,a)}}},u=function(e){return function(t){return function(r,n,a){return q.FeatureProgrammer.decode_array(e)(t)(V.NotationJoiner.array)(r,n,a)}}},c=function(e){return function(t){return function(r){return function(n,a,o){return a.type.recursive?j.default.factory.createCallExpression(j.default.factory.createIdentifier(r.useLocal("".concat(t.prefix,"t").concat(a.type.index))),void 0,q.FeatureProgrammer.argumentsArray(t)(T(T({},o),{source:"function"}))(n)):f(e)(t)(r)(n,a.type,o)}}}},f=function(e){return function(t){return function(r){return function(n,o,i){var u=o.elements.filter(function(e){return null===e.rest}).map(function(o,u){return a(e)(t)(r)(j.default.factory.createElementAccessExpression(n,u),o,T(T({},i),{from:"array",postfix:i.postfix.length?"".concat(i.postfix.slice(0,-1),"[").concat(u,']"'):'"['.concat(u,']"')}))}),c=0===o.elements.length||null===o.elements.at(-1).rest?null:a(e)(t)(r)(j.default.factory.createCallExpression(A.IdentifierFactory.access(n)("slice"),void 0,[F.ExpressionFactory.number(o.elements.length-1)]),(0,Q.wrap_metadata_rest_tuple)(o.elements.at(-1).rest),T(T({},i),{start:o.elements.length-1}));return V.NotationJoiner.tuple(u,c)}}}},s=function(e){return function(t){return"Date"===e?j.default.factory.createNewExpression(j.default.factory.createIdentifier(e),void 0,[t]):t}},d=function(e){return function(t){return function(r){return function(n,a,o){return j.default.factory.createCallExpression(J.UnionExplorer.set({checker:z.IsProgrammer.decode(e)(r),decoder:function(e,n,a){return j.default.factory.createNewExpression(j.default.factory.createIdentifier("Set"),[N.TypeFactory.keyword("any")],[i(t)(r)(e,n,a)])},empty:j.default.factory.createNewExpression(j.default.factory.createIdentifier("Set"),[N.TypeFactory.keyword("any")],[]),success:j.default.factory.createTrue(),failure:function(e,t){return x(r)(t)(e)}})([])(n,a,o),void 0,void 0)}}}},y=function(e){return function(t){return function(r){return function(n,a,o){return j.default.factory.createCallExpression(J.UnionExplorer.map({checker:function(t,n,a){var o=z.IsProgrammer.decode(e)(r);return j.default.factory.createLogicalAnd(o(j.default.factory.createElementAccessExpression(t,0),n[0],T(T({},a),{postfix:"".concat(a.postfix,"[0]")})),o(j.default.factory.createElementAccessExpression(t,1),n[1],T(T({},a),{postfix:"".concat(a.postfix,"[1]")})))},decoder:function(e,n,a){return j.default.factory.createNewExpression(j.default.factory.createIdentifier("Map"),[N.TypeFactory.keyword("any"),N.TypeFactory.keyword("any")],[i(t)(r)(e,n,a)])},empty:j.default.factory.createNewExpression(j.default.factory.createIdentifier("Map"),[N.TypeFactory.keyword("any"),N.TypeFactory.keyword("any")],[]),success:j.default.factory.createTrue(),failure:function(e,t){return x(r)(t)(e)}})([])(n,a,o),void 0,void 0)}}}},p=function(e){return function(t){return function(r,n,a){return 1===n.objects.length?o(t)(r,n.objects[0],a):j.default.factory.createCallExpression(j.default.factory.createIdentifier(t.useLocal("".concat(g,"u").concat(n.union_index))),void 0,q.FeatureProgrammer.argumentsArray(e)(a)(r))}}},m=function(e){return function(t){return function(r){return function(n,a,o){return v(t)(r)(J.UnionExplorer.array({checker:z.IsProgrammer.decode(e)(r),decoder:i(t)(r),empty:j.default.factory.createIdentifier("[]"),success:j.default.factory.createTrue(),failure:function(e,t){return x(r)(t)(e)}}))(n,a,o)}}}},v=function(e){return function(t){return function(r){return function(n,a,o){var arrow=function(e){return function(t){return function(n){return r(e)(n,a,t)}}};return a.every(function(e){return!1===e.type.recursive})&&j.default.factory.createCallExpression(arrow([])(o)(n),void 0,[]),o=T(T({},o),{source:"function",from:"array"}),j.default.factory.createCallExpression(j.default.factory.createIdentifier(t.emplaceUnion(e.prefix,a.map(function(e){return e.type.name}).join(" | "),function(){return arrow(q.FeatureProgrammer.parameterDeclarations(e)(N.TypeFactory.keyword("any"))(j.default.factory.createIdentifier("input")))(T(T({},o),{postfix:""}))(j.default.factory.createIdentifier("input"))})),void 0,q.FeatureProgrammer.argumentsArray(e)(o)(n))}}}},g="$c",_=function(e){return function(t){return function(r){var i={types:{input:function(e,r){return j.default.factory.createTypeReferenceNode(null!=r?r:N.TypeFactory.getFullName(t.checker)(e))},output:function(r,a){return j.default.factory.createTypeReferenceNode(n.returnType(e)(null!=a?a:N.TypeFactory.getFullName(t.checker)(r)))}},prefix:g,trace:!1,path:!1,initializer:b,decoder:function(){return a(t)(i)(r)},objector:{checker:function(){return z.IsProgrammer.decode(t)(r)},decoder:function(){return o(r)},joiner:V.NotationJoiner.object(e),unionizer:(0,G.decode_union_object)(z.IsProgrammer.decode_object(t)(r))(o(r))(function(e){return e})(function(e,t){return x(r)(t)(e)}),failure:function(e,t){return x(r)(t)(e)}},generator:{arrays:function(){return function(e){return e.arrays().filter(function(e){return e.recursive}).map(function(e,t){return C.StatementFactory.constant("".concat(i.prefix,"a").concat(t),j.default.factory.createArrowFunction(void 0,void 0,q.FeatureProgrammer.parameterDeclarations(i)(N.TypeFactory.keyword("any"))(j.default.factory.createIdentifier("input")),N.TypeFactory.keyword("any"),void 0,u(i)(r)(j.default.factory.createIdentifier("input"),L.MetadataArray.create({type:e,tags:[]}),{tracable:i.trace,source:"function",from:"array",postfix:""})))})}},tuples:function(){var e;return e=r,function(r){return r.tuples().filter(function(e){return e.recursive}).map(function(r,n){return C.StatementFactory.constant("".concat(i.prefix,"t").concat(n),j.default.factory.createArrowFunction(void 0,void 0,q.FeatureProgrammer.parameterDeclarations(i)(N.TypeFactory.keyword("any"))(j.default.factory.createIdentifier("input")),N.TypeFactory.keyword("any"),void 0,f(t)(i)(e)(j.default.factory.createIdentifier("input"),r,{tracable:i.trace,source:"function",from:"array",postfix:""})))})}}}};return i}}},b=function(e){return function(t){return function(r){var n=new M.MetadataCollection,a=O.MetadataFactory.analyze(e.checker,e.context)({escape:!1,constant:!0,absorb:!0})(n)(r);if(!1===a.success)throw U.TransformerError.from("typia.misc.".concat(t.method))(a.errors);return[n,a.data]}}},x=function(e){return function(t){return function(r){return j.default.factory.createExpressionStatement(j.default.factory.createCallExpression(e.use("throws"),[],[j.default.factory.createObjectLiteralExpression([j.default.factory.createPropertyAssignment("expected",j.default.factory.createStringLiteral(t)),j.default.factory.createPropertyAssignment("value",r)],!0)]))}}}},97172:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},t),{options:a(a({},t.options),{functional:!1,numeric:!0})}))(r)(!1)(n,o)),c.StatementFactory.constant("general",d.NotationGeneralProgrammer.write(e)(a(a({},t),{options:a(a({},t.options),{functional:!1,numeric:!1})}))(r)(n,o)),c.StatementFactory.constant("output",i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")]),f.TypeFactory.keyword("any"))),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("output.data"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("general"),void 0,[i.default.factory.createIdentifier("input")])))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}}},38162:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("decode",d.ProtobufDecodeProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("assert",s.AssertProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("assert"),void 0,[i.default.factory.createIdentifier("output")]),f.TypeFactory.keyword("any")))]))}}}},77717:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},_=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},x=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ProtobufDecodeProgrammer=void 0;var S=x(r(55423)),T=r(73906),E=r(61387),w=r(92595),P=r(43390),I=r(74123),j=r(6152),F=r(12301),A=r(3078),M=r(45041),O=r(56724),C=r(31959),N=r(96188);(m||(t.ProtobufDecodeProgrammer=m={})).write=function(e){return function(t){return function(r,a){var o=new C.FunctionImporter(t.getText()),i=new w.MetadataCollection,u=I.ProtobufFactory.metadata(t.getText())(e.checker,e.context)(i)(r),c=i.objects().filter(function(e){return N.ProtobufUtil.isStaticObject(e)}).map(function(t){return j.StatementFactory.constant("".concat(R,"o").concat(t.index),n(e)(o)(t))}),f=j.StatementFactory.constant("reader",S.default.factory.createNewExpression(o.use("Reader"),void 0,[S.default.factory.createIdentifier("input")]));return S.default.factory.createArrowFunction(void 0,void 0,[E.IdentifierFactory.parameter("input",S.default.factory.createTypeReferenceNode("Uint8Array"))],S.default.factory.createTypeReferenceNode("typia.Resolved<".concat(null!=a?a:F.TypeFactory.getFullName(e.checker)(r),">")),void 0,S.default.factory.createBlock(_(_(_([],g(o.declare(t)),!1),g(c),!1),[f,S.default.factory.createReturnStatement(s(!0)(u.objects[0]))],!1),!0))}}},n=function(e){return function(t){return function(r){return S.default.factory.createArrowFunction(void 0,void 0,[E.IdentifierFactory.parameter("reader"),E.IdentifierFactory.parameter("length",F.TypeFactory.keyword("number"),T.ExpressionFactory.number(-1))],F.TypeFactory.keyword("any"),void 0,S.default.factory.createBlock(_(_([S.default.factory.createExpressionStatement(S.default.factory.createBinaryExpression(S.default.factory.createIdentifier("length"),S.default.factory.createToken(S.default.SyntaxKind.EqualsToken),S.default.factory.createConditionalExpression(S.default.factory.createLessThan(S.default.factory.createIdentifier("length"),T.ExpressionFactory.number(0)),void 0,S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("size"),void 0,void 0),void 0,S.default.factory.createAdd(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0),S.default.factory.createIdentifier("length")))))],g(a(e)(t)({condition:S.default.factory.createLessThan(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0),S.default.factory.createIdentifier("length")),tag:"tag",output:"output"})(r.properties)),!1),[S.default.factory.createReturnStatement(S.default.factory.createIdentifier("output"))],!1),!0))}}},a=function(e){return function(t){return function(r){return function(n){var a=1,u=n.map(function(n){var o=i(e)(t)(a)(E.IdentifierFactory.access(S.default.factory.createIdentifier(r.output))(n.key.getSoleLiteral()),n.value);return a+=N.ProtobufUtil.size(n.value),o}).flat();return[j.StatementFactory.constant(r.output,S.default.factory.createAsExpression(S.default.factory.createObjectLiteralExpression(n.filter(function(t){return!(!0===e.compilerOptions.exactOptionalPropertyTypes&&!0===t.value.optional)}).map(function(e){return S.default.factory.createPropertyAssignment(E.IdentifierFactory.identifier(e.key.getSoleLiteral()),o(e.value))}),!0),F.TypeFactory.keyword("any"))),S.default.factory.createWhileStatement(r.condition,S.default.factory.createBlock([j.StatementFactory.constant(r.tag,S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("uint32"),void 0,void 0)),S.default.factory.createSwitchStatement(S.default.factory.createUnsignedRightShift(S.default.factory.createIdentifier(r.tag),T.ExpressionFactory.number(3)),S.default.factory.createCaseBlock(_(_([],g(u),!1),[S.default.factory.createDefaultClause([S.default.factory.createExpressionStatement(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("skipType"),void 0,[S.default.factory.createBitwiseAnd(S.default.factory.createIdentifier(r.tag),T.ExpressionFactory.number(7))])),S.default.factory.createBreakStatement()])],!1)))]))]}}}},o=function(e){return S.default.factory.createAsExpression(e.nullable?S.default.factory.createNull():!1===e.isRequired()?S.default.factory.createIdentifier("undefined"):e.arrays.length?S.default.factory.createArrayLiteralExpression():e.maps.length?S.default.factory.createNewExpression(S.default.factory.createIdentifier("Map"),void 0,[]):e.natives.length?S.default.factory.createNewExpression(S.default.factory.createIdentifier("Uint8Array"),void 0,[]):e.atomics.some(function(e){return"string"===e.type})||e.constants.some(function(e){return"string"===e.type&&e.values.some(function(e){return""===e})})||e.templates.some(function(e){return 1===e.length&&"string"===e[0].getName()})?S.default.factory.createStringLiteral(""):e.objects.length&&e.objects.some(function(e){return!N.ProtobufUtil.isStaticObject(e)})?S.default.factory.createObjectLiteralExpression():S.default.factory.createIdentifier("undefined"),F.TypeFactory.keyword("any"))},i=function(e){return function(t){return function(r){return function(n,a){var o,i,p,m,v,x,E,w,P=[],emplace=function(e){return function(t){return P.push(S.default.factory.createCaseClause(T.ExpressionFactory.number(r++),Array.isArray(t)?_(_([S.default.factory.createExpressionStatement(S.default.factory.createIdentifier("// type: ".concat(e)))],g(t),!1),[S.default.factory.createBreakStatement()],!1):[S.default.factory.createExpressionStatement(S.default.factory.createIdentifier("// ".concat(e))),S.default.factory.createExpressionStatement(S.default.factory.createBinaryExpression(n,S.default.factory.createToken(S.default.SyntaxKind.EqualsToken),t)),S.default.factory.createBreakStatement()]))}},I=a.isRequired()&&!a.nullable;try{for(var j=b(N.ProtobufUtil.getAtomics(a)),F=j.next();!F.done;F=j.next()){var A=F.value;emplace(A)(u(a)(A))}}catch(e){o={error:e}}finally{try{F&&!F.done&&(i=j.return)&&i.call(j)}finally{if(o)throw o.error}}a.natives.length&&emplace("bytes")(c("bytes"));try{for(var M=b(a.arrays),O=M.next();!O.done;O=M.next()){var C=O.value;emplace("Array<".concat(C.type.value.getName(),">"))(f(n,C,I))}}catch(e){p={error:e}}finally{try{O&&!O.done&&(m=M.return)&&m.call(M)}finally{if(p)throw p.error}}try{for(var R=b(a.maps),L=R.next();!L.done;L=R.next()){var U=L.value;emplace("Map"))(y(e)(t)(n,U,I))}}catch(e){v={error:e}}finally{try{L&&!L.done&&(x=R.return)&&x.call(R)}finally{if(v)throw v.error}}try{for(var H=b(a.objects),q=H.next();!q.done;q=H.next()){var z=q.value;emplace(z.name)(N.ProtobufUtil.isStaticObject(z)?s(!1)(z):d(e)(t)(n,z,I))}}catch(e){E={error:e}}finally{try{q&&!q.done&&(w=H.return)&&w.call(H)}finally{if(E)throw E.error}}return P}}}},u=function(e){return function(t){if("string"===t)return c("string");var r=S.default.factory.createCallExpression(E.IdentifierFactory.access(S.default.factory.createIdentifier("reader"))(t),void 0,void 0);return"int64"!==t&&"uint64"!==t?r:N.ProtobufUtil.getNumbers(e).some(function(e){return e===t})?S.default.factory.createCallExpression(S.default.factory.createIdentifier("Number"),void 0,[r]):r}},c=function(e){return S.default.factory.createCallExpression(E.IdentifierFactory.access(S.default.factory.createIdentifier("reader"))(e),void 0,void 0)},f=function(e,t,r){var n=[];!1===r&&n.push(S.default.factory.createBinaryExpression(e,S.default.factory.createToken(S.default.SyntaxKind.QuestionQuestionEqualsToken),S.default.factory.createAsExpression(S.default.factory.createArrayLiteralExpression(),S.default.factory.createTypeReferenceNode("any[]"))));var a=N.ProtobufUtil.getAtomics(t.type.value),o=a.length?function(){return u(t.type.value)(a[0])}:t.type.value.natives.length?function(){return c("bytes")}:t.type.value.objects.length?function(){return s(!1)(t.type.value.objects[0])}:null;if(null===o)throw Error("Never reach here.");return a.length&&"string"!==a[0]?n.push(S.default.factory.createIfStatement(S.default.factory.createStrictEquality(T.ExpressionFactory.number(2),S.default.factory.createBitwiseAnd(S.default.factory.createIdentifier("tag"),T.ExpressionFactory.number(7))),S.default.factory.createBlock([j.StatementFactory.constant("piece",S.default.factory.createAdd(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("uint32"),void 0,void 0),S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0))),S.default.factory.createWhileStatement(S.default.factory.createLessThan(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0),S.default.factory.createIdentifier("piece")),S.default.factory.createExpressionStatement(S.default.factory.createCallExpression(E.IdentifierFactory.access(e)("push"),void 0,[o()])))],!0),S.default.factory.createExpressionStatement(S.default.factory.createCallExpression(E.IdentifierFactory.access(e)("push"),void 0,[o()])))):n.push(S.default.factory.createCallExpression(E.IdentifierFactory.access(e)("push"),void 0,[o()])),n.map(function(e){return S.default.isExpression(e)?S.default.factory.createExpressionStatement(e):e})},s=function(e){return function(t){return S.default.factory.createCallExpression(S.default.factory.createIdentifier("".concat(R,"o").concat(t.index)),void 0,_([S.default.factory.createIdentifier("reader")],g(e?[]:[S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("uint32"),void 0,void 0)]),!1))}},d=function(e){return function(t){return function(r,n,a){var o,i=n.properties[0];return p(e)(t)({initializer:function(){return S.default.factory.createBinaryExpression(r,S.default.factory.createToken(S.default.SyntaxKind.QuestionQuestionEqualsToken),S.default.factory.createObjectLiteralExpression())},setter:function(){return S.default.factory.createBinaryExpression(S.default.factory.createElementAccessExpression(r,S.default.factory.createIdentifier("entry.key")),S.default.factory.createToken(S.default.SyntaxKind.EqualsToken),S.default.factory.createIdentifier("entry.value"))}})(O.MetadataProperty.create(v(v({},i),{key:((o=A.Metadata.initialize()).atomics.push(M.MetadataAtomic.create({type:"string",tags:[]})),o)})),a)}}},y=function(e){return function(t){return function(r,n,a){return p(e)(t)({initializer:function(){return S.default.factory.createBinaryExpression(r,S.default.factory.createToken(S.default.SyntaxKind.QuestionQuestionEqualsToken),S.default.factory.createNewExpression(S.default.factory.createIdentifier("Map"),[F.TypeFactory.keyword("any"),F.TypeFactory.keyword("any")],[]))},setter:function(){return S.default.factory.createCallExpression(E.IdentifierFactory.access(r)("set"),void 0,[S.default.factory.createIdentifier("entry.key"),S.default.factory.createIdentifier("entry.value")])}})(n,a)}}},p=function(e){return function(t){return function(r){return function(n,o){var i=_(_(_(_([],g(o?[]:[S.default.factory.createExpressionStatement(r.initializer())]),!1),[j.StatementFactory.constant("piece",S.default.factory.createAdd(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("uint32"),void 0,void 0),S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0)))],!1),g(a(e)(t)({condition:S.default.factory.createLessThan(S.default.factory.createCallExpression(E.IdentifierFactory.access(READER())("index"),void 0,void 0),S.default.factory.createIdentifier("piece")),tag:"kind",output:"entry"})([O.MetadataProperty.create({key:P.MetadataFactory.soleLiteral("key"),value:n.key,description:null,jsDocTags:[]}),O.MetadataProperty.create({key:P.MetadataFactory.soleLiteral("value"),value:n.value,description:null,jsDocTags:[]})])),!1),[S.default.factory.createExpressionStatement(r.setter())],!1);return[S.default.factory.createExpressionStatement(T.ExpressionFactory.selfCall(S.default.factory.createBlock(i,!0)))]}}}};var R="$pd",READER=function(){return S.default.factory.createIdentifier("reader")}},84282:function(e,t,r){"use strict";var n,a,o,i,u,c,f,s,d,y,p,m,v,g,_,b,x,S,T=this&&this.__assign||function(){return(T=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},w=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},I=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ProtobufEncodeProgrammer=void 0;var j=I(r(55423)),F=r(73906),A=r(61387),M=r(92595),O=r(84981),C=r(74123),N=r(6152),R=r(12301),L=r(3078),U=r(45041),H=r(56724),q=r(63348),z=r(31959),B=r(96188),V=r(99560),J=r(39687);(S||(t.ProtobufEncodeProgrammer=S={})).write=function(e){return function(t){return function(r,a){var o=new z.FunctionImporter(t.getText()),i=new M.MetadataCollection,u=C.ProtobufFactory.metadata(t.getText())(e.checker,e.context)(i)(r),callEncoder=function(e){return function(t){return N.StatementFactory.constant(e,j.default.factory.createCallExpression(j.default.factory.createIdentifier("encoder"),void 0,[t]))}},c=[N.StatementFactory.constant("encoder",n(e)(o)(i)(u)),callEncoder("sizer")(j.default.factory.createNewExpression(o.use("Sizer"),void 0,[])),callEncoder("writer")(j.default.factory.createNewExpression(o.use("Writer"),void 0,[j.default.factory.createIdentifier("sizer")])),j.default.factory.createReturnStatement(j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("buffer"),void 0,void 0))];return j.default.factory.createArrowFunction(void 0,void 0,[A.IdentifierFactory.parameter("input",j.default.factory.createTypeReferenceNode(null!=a?a:R.TypeFactory.getFullName(e.checker)(r)))],j.default.factory.createTypeReferenceNode("Uint8Array"),void 0,j.default.factory.createBlock(w(w([],E(o.declare(t,!1)),!1),E(c),!1),!0))}}},n=function(e){return function(t){return function(r){return function(n){var i=r.objects().filter(function(e){return B.ProtobufUtil.isStaticObject(e)}).map(function(r){return N.StatementFactory.constant("".concat(b,"o").concat(r.index),a(e)(t)(j.default.factory.createIdentifier("input"),r,{source:"function",from:"object",tracable:!1,postfix:""}))}),u=o(e)(t)(null)(j.default.factory.createIdentifier("input"),n,{source:"top",from:"top",tracable:!1,postfix:""});return j.default.factory.createArrowFunction(void 0,void 0,[A.IdentifierFactory.parameter("writer")],R.TypeFactory.keyword("any"),void 0,j.default.factory.createBlock(w(w(w(w(w([],E(t.declareUnions()),!1),E(i),!1),E(q.IsProgrammer.write_function_statements(e)(t)(r)),!1),E(u.statements),!1),[j.default.factory.createReturnStatement(j.default.factory.createIdentifier("writer"))],!1),!0))}}}},a=function(e){return function(t){return function(r,n,a){var i=1,u=n.properties.map(function(n){var u=o(e)(t)(i)(A.IdentifierFactory.access(r)(n.key.getSoleLiteral()),n.value,a);return i+=B.ProtobufUtil.size(n.value),w([j.default.factory.createExpressionStatement(j.default.factory.createIdentifier('// property "'.concat(n.key.getSoleLiteral(),'"')))],E(u.statements),!1)}).flat();return j.default.factory.createArrowFunction(void 0,void 0,[A.IdentifierFactory.parameter("input")],R.TypeFactory.keyword("any"),void 0,j.default.factory.createBlock(u,!0))}}},o=function(e){return function(t){return function(r){return function(n,a,o){var c,m,v=a.isRequired()&&!1===a.nullable?function(e){return e}:!1===a.isRequired()&&!0===a.nullable?function(e){return j.default.factory.createBlock([j.default.factory.createIfStatement(j.default.factory.createLogicalAnd(j.default.factory.createStrictInequality(j.default.factory.createIdentifier("undefined"),n),j.default.factory.createStrictInequality(j.default.factory.createNull(),n)),e)],!0)}:!1===a.isRequired()?function(e){return j.default.factory.createBlock([j.default.factory.createIfStatement(j.default.factory.createStrictInequality(j.default.factory.createIdentifier("undefined"),n),e)],!0)}:function(e){return j.default.factory.createBlock([j.default.factory.createIfStatement(j.default.factory.createStrictInequality(j.default.factory.createNull(),n),e)],!0)},g=[],b=B.ProtobufUtil.getNumbers(a),x=B.ProtobufUtil.getBigints(a),_loop_1=function(e){"bool"===e?g.push({type:"bool",is:function(){return j.default.factory.createStrictEquality(j.default.factory.createStringLiteral("boolean"),j.default.factory.createTypeOfExpression(n))},value:function(e){return s(e)(n)}}):"int32"===e||"uint32"===e||"float"===e||"double"===e?g.push(d(b)(e)(n)):"int64"===e||"uint64"===e?b.some(function(t){return t===e})?g.push(d(b)(e)(n)):g.push(y(x)(e)(n)):"string"===e&&g.push({type:"string",is:function(){return j.default.factory.createStrictEquality(j.default.factory.createStringLiteral("string"),j.default.factory.createTypeOfExpression(n))},value:function(e){return p("string")(e)(n)}})};try{for(var S=P(B.ProtobufUtil.getAtomics(a)),E=S.next();!E.done;E=S.next()){var w=E.value;_loop_1(w)}}catch(e){c={error:e}}finally{try{E&&!E.done&&(m=S.return)&&m.call(S)}finally{if(c)throw c.error}}return v((a.natives.length&&g.push({type:"bytes",is:function(){return F.ExpressionFactory.isInstanceOf("Uint8Array")(n)},value:function(e){return p("bytes")(e)(n)}}),a.arrays.length&&g.push({type:"array",is:function(){return F.ExpressionFactory.isArray(n)},value:function(r){return f(e)(t)(r)(n,a.arrays[0],T(T({},o),{from:"array"}))}}),a.maps.length&&g.push({type:"map",is:function(){return F.ExpressionFactory.isInstanceOf("Map")(n)},value:function(r){return u(e)(t)(r)(n,a.maps[0],T(T({},o),{from:"array"}))}}),a.objects.length&&g.push({type:"object",is:function(){return F.ExpressionFactory.isObject({checkNull:!0,checkArray:!1})(n)},value:function(r){return _(e)(t)(0)(r)(n,a.objects,T(T({},o),{from:"object"}))}}),1===g.length)?g[0].value(r):i(t)(r)(g)(a.getName())(n))}}}},i=function(e){return function(t){return function(r){return function(n){return function(a){return j.default.factory.createBlock([r.map(function(o,i){return j.default.factory.createIfStatement(o.is(),o.value(t?t+i:null),i===r.length-1?x(e)(n)(a):void 0)}).reverse().reduce(function(e,t){return j.default.factory.createIfStatement(t.expression,t.thenStatement,e)})],!0)}}}}},u=function(e){return function(t){return function(r){return function(n,a,i){var u=w(w(w([j.default.factory.createExpressionStatement(m(2)(r)),j.default.factory.createExpressionStatement(j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("fork"),void 0,void 0))],E(o(e)(t)(1)(j.default.factory.createIdentifier("key"),a.key,i).statements),!1),E(o(e)(t)(2)(j.default.factory.createIdentifier("value"),a.value,i).statements),!1),[j.default.factory.createExpressionStatement(j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("ldelim"),void 0,void 0))],!1);return j.default.factory.createBlock([j.default.factory.createForOfStatement(void 0,N.StatementFactory.entry("key")("value"),n,j.default.factory.createBlock(u))],!0)}}}},c=function(e){return function(t){return function(r){return function(n,a,o){var i,c=a.properties[0];return!1===c.key.isSoleLiteral()?u(e)(t)(r)(j.default.factory.createCallExpression(j.default.factory.createIdentifier("Object.entries"),[],[n]),H.MetadataProperty.create(T(T({},c),{key:((i=L.Metadata.initialize()).atomics.push(U.MetadataAtomic.create({type:"string",tags:[]})),i)})),o):j.default.factory.createBlock(w(w(w([j.default.factory.createIdentifier("//".concat(null!==r?" ".concat(r," -> "):"").concat(a.name))],E(null!==r?[m(2)(r),j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("fork"),void 0,void 0)]:[]),!1),[j.default.factory.createCallExpression(j.default.factory.createIdentifier(t.useLocal("".concat(b,"o").concat(a.index))),[],[n])],!1),E(null!==r?[j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("ldelim"),void 0,void 0)]:[]),!1).map(function(e){return j.default.factory.createExpressionStatement(e)}),!0)}}}},f=function(e){return function(t){return function(r){return function(n,a,i){var u,c=v(a.type.value),forLoop=function(r){return j.default.factory.createForOfStatement(void 0,j.default.factory.createVariableDeclarationList([j.default.factory.createVariableDeclaration("elem")],j.default.NodeFlags.Const),n,o(e)(t)(r)(j.default.factory.createIdentifier("elem"),a.type.value,i))};return u=2===c?j.default.factory.createBlock([forLoop(r)],!0):j.default.factory.createBlock([j.default.factory.createExpressionStatement(m(2)(r)),j.default.factory.createExpressionStatement(j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("fork"),void 0,void 0)),forLoop(null),j.default.factory.createExpressionStatement(j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("ldelim"),void 0,void 0))],!0),j.default.factory.createBlock([j.default.factory.createIfStatement(j.default.factory.createStrictInequality(F.ExpressionFactory.number(0),A.IdentifierFactory.access(n)("length")),u)],!0)}}}},s=function(e){return function(t){return j.default.factory.createBlock(w(w([],E(null!==e?[m(0)(e)]:[]),!1),[j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("bool"),void 0,[t])],!1).map(function(e){return j.default.factory.createExpressionStatement(e)}),!0)}},d=function(e){return function(t){return function(r){return{type:t,is:function(){return 1===e.length?j.default.factory.createStrictEquality(j.default.factory.createStringLiteral("number"),j.default.factory.createTypeOfExpression(r)):j.default.factory.createLogicalAnd(j.default.factory.createStrictEquality(j.default.factory.createStringLiteral("number"),j.default.factory.createTypeOfExpression(r)),O.NumericRangeFactory.number(t)(r))},value:function(e){return j.default.factory.createBlock(w(w([],E(null!==e?[m(g(t))(e)]:[]),!1),[j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())(t),void 0,[r])],!1).map(function(e){return j.default.factory.createExpressionStatement(e)}),!0)}}}}},y=function(e){return function(t){return function(r){return{type:t,is:function(){return 1===e.length?j.default.factory.createStrictEquality(j.default.factory.createStringLiteral("bigint"),j.default.factory.createTypeOfExpression(r)):j.default.factory.createLogicalAnd(j.default.factory.createStrictEquality(j.default.factory.createStringLiteral("bigint"),j.default.factory.createTypeOfExpression(r)),O.NumericRangeFactory.bigint(t)(r))},value:function(e){return j.default.factory.createBlock(w(w([],E(null!==e?[m(0)(e)]:[]),!1),[j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())(t),void 0,[r])],!1).map(function(e){return j.default.factory.createExpressionStatement(e)}),!0)}}}}},p=function(e){return function(t){return function(r){return j.default.factory.createBlock([m(2)(t),j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())(e),void 0,[r])].map(function(e){return j.default.factory.createExpressionStatement(e)}),!0)}}},m=function(e){return function(t){return j.default.factory.createCallExpression(A.IdentifierFactory.access(WRITER())("uint32"),void 0,[F.ExpressionFactory.number(t<<3|e)])}},v=function(e){if(e.arrays.length||e.objects.length||e.maps.length||e.natives.length)return 2;var t=B.ProtobufUtil.getAtomics(e)[0];return"string"===t?2:"bool"===t||"int32"===t||"uint32"===t||"int64"===t||"uint64"===t?0:"float"===t?5:1},g=function(e){return"double"===e?1:"float"===e?5:0},_=function(e){return function(t){return function(r){return function(n){return function(a,o,i,u){if(1===o.length)return c(e)(t)(u?u.get(o[0]):n)(a,o[0],i);var f="(".concat(o.map(function(e){return e.name}).join(" | "),")"),s=V.UnionPredicator.object(o);if(null!=u||(u=new Map(o.map(function(e,t){return[e,n+t]}))),0===s.length){var d=(0,J.decode_union_object)(q.IsProgrammer.decode_object(e)(t))(function(r,n,a){return F.ExpressionFactory.selfCall(c(e)(t)(u.get(n))(r,n,a))})(function(e){return e})(function(e,r){return x(t)(r)(e)})(a,o,i);return N.StatementFactory.block(d)}var y=o.filter(function(e){return void 0===s.find(function(t){return t.object===e})}),p=s.filter(function(e){return null!==e.property.key.getSoleLiteral()}).map(function(o,s,d){var p=o.property.key.getSoleLiteral(),m=A.IdentifierFactory.access(a)(p),v=o.neighbour?q.IsProgrammer.decode(e)(t)(m,o.property.value,T(T({},i),{tracable:!1,postfix:A.IdentifierFactory.postfix(p)})):F.ExpressionFactory.isRequired(m);return j.default.factory.createIfStatement(v,j.default.factory.createExpressionStatement(F.ExpressionFactory.selfCall(c(e)(t)(u.get(o.object))(a,o.object,i))),s===d.length-1?y.length?j.default.factory.createExpressionStatement(F.ExpressionFactory.selfCall(_(e)(t)(r+1)(n)(a,y,i,u))):x(t)(f)(a):void 0)}).reverse().reduce(function(e,t){return j.default.factory.createIfStatement(t.expression,t.thenStatement,e)});return j.default.factory.createBlock([p],!0)}}}}},b="$pe",x=function(e){return function(t){return function(r){return j.default.factory.createExpressionStatement(j.default.factory.createCallExpression(e.use("throws"),[],[j.default.factory.createObjectLiteralExpression([j.default.factory.createPropertyAssignment("expected",j.default.factory.createStringLiteral(t)),j.default.factory.createPropertyAssignment("value",r)],!0)]))}}};var WRITER=function(){return j.default.factory.createIdentifier("writer")}},49466:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r")),i.default.factory.createLiteralTypeNode(i.default.factory.createNull())]),void 0,i.default.factory.createBlock([c.StatementFactory.constant("is",s.IsProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.ProtobufDecodeProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createIfStatement(i.default.factory.createPrefixUnaryExpression(i.default.SyntaxKind.ExclamationToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("is"),void 0,[i.default.factory.createIdentifier("output")])),i.default.factory.createReturnStatement(i.default.factory.createNull())),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},8266:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},y=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},p=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a")}};var P=" ".repeat(4)},87500:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r>")),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("decode",d.ProtobufDecodeProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createCallExpression(i.default.factory.createIdentifier("decode"),void 0,[i.default.factory.createIdentifier("input")])),i.default.factory.createReturnStatement(i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("output")]),i.default.factory.createTypeReferenceNode("any")))]))}}}},87229:function(e,t,r){"use strict";var n,a=this&&this.__assign||function(){return(a=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"),void 0,i.default.factory.createBlock([c.StatementFactory.constant("validate",s.ValidateProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!0})}))(t)(!1)(r,n)),c.StatementFactory.constant("encode",d.ProtobufEncodeProgrammer.write(a(a({},e),{options:a(a({},e.options),{functional:!1,numeric:!1})}))(t)(r,n)),c.StatementFactory.constant("output",i.default.factory.createAsExpression(i.default.factory.createCallExpression(i.default.factory.createIdentifier("validate"),void 0,[i.default.factory.createIdentifier("input")]),f.TypeFactory.keyword("any"))),i.default.factory.createIfStatement(i.default.factory.createIdentifier("output.success"),i.default.factory.createExpressionStatement(i.default.factory.createBinaryExpression(i.default.factory.createIdentifier("output.data"),i.default.SyntaxKind.EqualsToken,i.default.factory.createCallExpression(i.default.factory.createIdentifier("encode"),void 0,[i.default.factory.createIdentifier("input")])))),i.default.factory.createReturnStatement(i.default.factory.createIdentifier("output"))]))}}}},3078:function(e,t,r){"use strict";var n,a=this&&this.__values||function(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},i=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a1},Metadata.prototype.getSoleLiteral=function(){return 1===this.size()&&1===this.constants.length&&"string"===this.constants[0].type&&1===this.constants[0].values.length?this.constants[0].values[0]:null},Metadata.prototype.isSoleLiteral=function(){return null!==this.getSoleLiteral()},Metadata.prototype.isParentResolved=function(){return this.parent_resolved_},Metadata}();t.Metadata=m,(n=m||(t.Metadata=m={})).intersects=function(e,t){if(e.any||t.any||!1===e.isRequired()&&!1===t.isRequired()||!0===e.nullable&&!0===t.nullable||!0===e.functional&&!0===t.functional||e.arrays.length&&t.arrays.length||e.tuples.length&&t.tuples.length||e.objects.length&&t.objects.length||e.aliases.length&&t.aliases.length||e.natives.length&&t.natives.length&&e.natives.some(function(e){return t.natives.some(function(t){return e===t})}))return!0;var r,n,u,c,_loop_1=function(e){if(t.atomics.some(function(t){return e.type===t.type})||t.constants.some(function(t){return e.type===t.type}))return{value:!0}};try{for(var f=a(e.atomics),s=f.next();!s.done;s=f.next()){var d=s.value,y=_loop_1(d);if("object"==typeof y)return y.value}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}var _loop_2=function(e){if(void 0!==t.atomics.find(function(t){return t.type===e.type}))return{value:!0};var r=t.constants.find(function(t){return t.type===e.type});return void 0===r?"continue":new Set(i(i([],o(e.values),!1),o(r.values),!1)).size!==e.values.length+r.values.length?{value:!0}:void 0};try{for(var p=a(e.constants),m=p.next();!m.done;m=p.next()){var v=m.value,g=_loop_2(v);if("object"==typeof g)return g.value}}catch(e){u={error:e}}finally{try{m&&!m.done&&(c=p.return)&&c.call(p)}finally{if(u)throw u.error}}return!!(e.templates.length&&t.atomics.some(function(e){return"string"===e.type}))||!!(t.templates.length&&e.atomics.some(function(e){return"string"===e.type}))},n.covers=function(e,t,r){if(void 0===r&&(r=0),e===t)return!1;if(e.any)return!0;if(t.any)return!1;if(0===r){var o,i,u,c,f,s,d,p,m,v,g,_,b,x,_loop_3=function(t){if(!e.arrays.some(function(e){return n.covers(e.type.value,t.type.value,r+1)}))return{value:!1}};try{for(var S=a(t.arrays),T=S.next();!T.done;T=S.next()){var E=T.value,w=_loop_3(E);if("object"==typeof w)return w.value}}catch(e){o={error:e}}finally{try{T&&!T.done&&(i=S.return)&&i.call(S)}finally{if(o)throw o.error}}var _loop_4=function(t){if(0!==t.type.elements.length&&!1===e.tuples.some(function(e){return e.type.elements.length>=t.type.elements.length&&e.type.elements.slice(t.type.elements.length).every(function(e,a){return n.covers(e,t.type.elements[a],r+1)})}))return{value:!1}};try{for(var P=a(t.tuples),I=P.next();!I.done;I=P.next()){var j=I.value,F=_loop_4(j);if("object"==typeof F)return F.value}}catch(e){u={error:e}}finally{try{I&&!I.done&&(c=P.return)&&c.call(P)}finally{if(u)throw u.error}}}var _loop_5=function(t){if(!1===e.objects.some(function(e){return y.MetadataObject.covers(e,t)}))return{value:!1}};try{for(var A=a(t.objects),M=A.next();!M.done;M=A.next()){var O=M.value,C=_loop_5(O);if("object"==typeof C)return C.value}}catch(e){f={error:e}}finally{try{M&&!M.done&&(s=A.return)&&s.call(A)}finally{if(f)throw f.error}}var _loop_6=function(t){if(!1===e.aliases.some(function(e){return e.name===t.name}))return{value:!1}};try{for(var N=a(t.aliases),R=N.next();!R.done;R=N.next()){var L=R.value,U=_loop_6(L);if("object"==typeof U)return U.value}}catch(e){d={error:e}}finally{try{R&&!R.done&&(p=N.return)&&p.call(N)}finally{if(d)throw d.error}}var _loop_7=function(t){if(!1===e.natives.some(function(e){return e===t}))return{value:!1}};try{for(var H=a(t.natives),q=H.next();!q.done;q=H.next()){var z=q.value,B=_loop_7(z);if("object"==typeof B)return B.value}}catch(e){m={error:e}}finally{try{q&&!q.done&&(v=H.return)&&v.call(H)}finally{if(m)throw m.error}}var _loop_8=function(t){if(!1===e.sets.some(function(e){return n.covers(e,t)}))return{value:!1}};try{for(var V=a(t.sets),J=V.next();!J.done;J=V.next()){var G=J.value,Q=_loop_8(G);if("object"==typeof Q)return Q.value}}catch(e){g={error:e}}finally{try{J&&!J.done&&(_=V.return)&&_.call(V)}finally{if(g)throw g.error}}if(t.atomics.some(function(t){return!1===e.atomics.some(function(e){return e.type===t.type})}))return!1;var _loop_9=function(t){if(e.atomics.some(function(e){return t.type===e.type}))return"continue";var r=e.constants.find(function(e){return e.type===t.type});return void 0===r?{value:!1}:t.values.some(function(e){return!1===r.values.includes(e)})?{value:!1}:void 0};try{for(var W=a(t.constants),K=W.next();!K.done;K=W.next()){var Y=K.value,Z=_loop_9(Y);if("object"==typeof Z)return Z.value}}catch(e){b={error:e}}finally{try{K&&!K.done&&(x=W.return)&&x.call(W)}finally{if(b)throw b.error}}return!1!==e.functional||!t.functional},n.merge=function(e,t){var r,c,f,y,p,m,v,g,_=n.create({any:e.any||t.any,nullable:e.nullable||t.nullable,required:e.required&&t.required,optional:e.optional||t.optional,functional:e.functional||t.functional,escaped:null!==e.escaped&&null!==t.escaped?d.MetadataEscaped.create({original:n.merge(e.escaped.original,t.escaped.original),returns:n.merge(e.escaped.returns,t.escaped.returns)}):null!==(v=e.escaped)&&void 0!==v?v:t.escaped,atomics:mergeTaggedTypes({container:e.atomics,equals:function(e,t){return e.type===t.type},getter:function(e){return e.tags}})(t.atomics),constants:i([],o(e.constants),!1),templates:e.templates.slice(),rest:null!==e.rest&&null!==t.rest?n.merge(e.rest,t.rest):null!==(g=e.rest)&&void 0!==g?g:t.rest,arrays:mergeTaggedTypes({container:e.arrays,equals:function(e,t){return e.type.name===t.type.name},getter:function(e){return e.tags}})(t.arrays),tuples:mergeTaggedTypes({container:e.tuples,equals:function(e,t){return e.type.name===t.type.name},getter:function(e){return e.tags}})(t.tuples),objects:e.objects.slice(),aliases:e.aliases.slice(),natives:i([],o(new Set(i(i([],o(e.natives),!1),o(t.natives),!1))),!1),sets:e.sets.slice(),maps:e.maps.slice()}),_loop_10=function(e){var t,r,n=u.ArrayUtil.take(_.constants,function(t){return t.type===e.type},function(){return s.MetadataConstant.create({type:e.type,values:[]})});try{for(var o=(t=void 0,a(e.values)),i=o.next();!i.done;i=o.next()){var c=i.value;u.ArrayUtil.add(n.values,c)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}};try{for(var b=a(t.constants),x=b.next();!x.done;x=b.next()){var S=x.value;_loop_10(S)}}catch(e){r={error:e}}finally{try{x&&!x.done&&(c=b.return)&&c.call(b)}finally{if(r)throw r.error}}try{for(var T=a(t.objects),E=T.next();!E.done;E=T.next()){var w=E.value;u.ArrayUtil.set(_.objects,w,function(e){return e.name})}}catch(e){f={error:e}}finally{try{E&&!E.done&&(y=T.return)&&y.call(T)}finally{if(f)throw f.error}}try{for(var P=a(t.aliases),I=P.next();!I.done;I=P.next()){var j=I.value;u.ArrayUtil.set(_.aliases,j,function(e){return e.name})}}catch(e){p={error:e}}finally{try{I&&!I.done&&(m=P.return)&&m.call(P)}finally{if(p)throw p.error}}return _};var getName=function(e){if(!0===e.any)return"any";var t,r,n,o,i,u,c,f,s,d,y,p,m,v,g,_,b,x,S,T,E,w,P=[];!0===e.nullable&&P.push("null"),!1===e.isRequired()&&P.push("undefined");try{for(var I=a(e.atomics),j=I.next();!j.done;j=I.next()){var F=j.value;P.push(F.getName())}}catch(e){t={error:e}}finally{try{j&&!j.done&&(r=I.return)&&r.call(I)}finally{if(t)throw t.error}}try{for(var A=a(e.constants),M=A.next();!M.done;M=A.next()){var O=M.value;try{for(var C=(i=void 0,a(O.values)),N=C.next();!N.done;N=C.next()){var R=N.value;P.push("string"===O.type?JSON.stringify(R):R.toString())}}catch(e){i={error:e}}finally{try{N&&!N.done&&(u=C.return)&&u.call(C)}finally{if(i)throw i.error}}}}catch(e){n={error:e}}finally{try{M&&!M.done&&(o=A.return)&&o.call(A)}finally{if(n)throw n.error}}try{for(var L=a(e.templates),U=L.next();!U.done;U=L.next()){var H=U.value;P.push("`"+H.map(function(e){return e.isConstant()&&1===e.size()?e.constants[0].values[0]:"${".concat(e.getName(),"}")}).join("").split("`").join("\\`")+"`")}}catch(e){c={error:e}}finally{try{U&&!U.done&&(f=L.return)&&f.call(L)}finally{if(c)throw c.error}}try{for(var q=a(e.natives),z=q.next();!z.done;z=q.next()){var B=z.value;P.push(B)}}catch(e){s={error:e}}finally{try{z&&!z.done&&(d=q.return)&&d.call(q)}finally{if(s)throw s.error}}try{for(var V=a(e.sets),J=V.next();!J.done;J=V.next()){var G=J.value;P.push("Set<".concat(G.getName(),">"))}}catch(e){y={error:e}}finally{try{J&&!J.done&&(p=V.return)&&p.call(V)}finally{if(y)throw y.error}}try{for(var Q=a(e.maps),W=Q.next();!W.done;W=Q.next()){var K=W.value;P.push("Map<".concat(K.key.getName(),", ").concat(K.value.getName(),">"))}}catch(e){m={error:e}}finally{try{W&&!W.done&&(v=Q.return)&&v.call(Q)}finally{if(m)throw m.error}}null!==e.rest&&P.push("...".concat(e.rest.getName()));try{for(var Y=a(e.tuples),Z=Y.next();!Z.done;Z=Y.next()){var X=Z.value;P.push(X.type.name)}}catch(e){g={error:e}}finally{try{Z&&!Z.done&&(_=Y.return)&&_.call(Y)}finally{if(g)throw g.error}}try{for(var ee=a(e.arrays),et=ee.next();!et.done;et=ee.next()){var er=et.value;P.push(er.getName())}}catch(e){b={error:e}}finally{try{et&&!et.done&&(x=ee.return)&&x.call(ee)}finally{if(b)throw b.error}}try{for(var en=a(e.objects),ea=en.next();!ea.done;ea=en.next()){var eo=ea.value;P.push(eo.name)}}catch(e){S={error:e}}finally{try{ea&&!ea.done&&(T=en.return)&&T.call(en)}finally{if(S)throw S.error}}try{for(var ei=a(e.aliases),eu=ei.next();!eu.done;eu=ei.next()){var ec=eu.value;P.push(ec.name)}}catch(e){E={error:e}}finally{try{eu&&!eu.done&&(w=ei.return)&&w.call(ei)}finally{if(E)throw E.error}}return(null!==e.escaped&&P.push(e.escaped.getName()),0===P.length)?"unknown":1===P.length?P[0]:(P.sort(),"(".concat(P.join(" | "),")"))},mergeTaggedTypes=function(e){return function(t){var r,n,u=i([],o(e.container),!1),_loop_11=function(t){var r,n,o=e.container.find(function(r){return e.equals(r,t)});if(void 0===o)return u.push(t),"continue";var i=e.getter(o).map(function(e){return e.map(function(e){return e.name})}).sort();try{for(var c=(r=void 0,a(e.getter(t))),f=c.next();!f.done;f=c.next()){var s=f.value;!function(t){var r=t.map(function(e){return e.name}).sort();!i.some(function(e){return e.length===r.length&&e.every(function(e,t){return e===r[t]})})&&e.getter(o).push(t)}(s)}}catch(e){r={error:e}}finally{try{f&&!f.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}};try{for(var c=a(t),f=c.next();!f.done;f=c.next()){var s=f.value;_loop_11(s)}}catch(e){r={error:e}}finally{try{f&&!f.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return u}}},49596:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataAlias=void 0;var r=function(){function MetadataAlias(e){this.name=e.name,this.value=e.value,this.description=e.description,this.jsDocTags=e.jsDocTags,this.recursive=e.recursive,this.nullables=e.nullables}return MetadataAlias.create=function(e){return new MetadataAlias(e)},MetadataAlias._From_without_value=function(e){return MetadataAlias.create({name:e.name,value:null,description:e.description,recursive:e.recursive,jsDocTags:e.jsDocTags.slice(),nullables:e.nullables.slice()})},MetadataAlias.prototype.toJSON=function(){return{name:this.name,value:this.value.toJSON(),description:this.description,recursive:this.recursive,jsDocTags:this.jsDocTags.slice(),nullables:this.nullables.slice()}},MetadataAlias}();t.MetadataAlias=r},23879:function(e,t){"use strict";var r=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},n=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},n=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=1&&this.properties.every(function(e){return e.key.isSoleLiteral()})},MetadataObject.prototype._Is_simple=function(e){return void 0===e&&(e=0),!1===this.recursive&&this.properties.length<10&&this.properties.every(function(t){return t.key.isSoleLiteral()&&1===t.value.size()&&!0===t.value.isRequired()&&!1===t.value.nullable&&(1===t.value.atomics.length||e<1&&1===t.value.objects.length&&t.value.objects[0]._Is_simple(e+1))})},MetadataObject.prototype._Is_literal=function(){var e,t=this;return null!==(e=this.literal_)&&void 0!==e?e:this.literal_=function(){if(!0===t.recursive)return!1;if("__type"===t.name)return!0;if(!1===t.name.startsWith("__type.o"))return!1;var e=Number(t.name.substr(8));return!1===isNaN(e)&&Number.isInteger(e)}()},MetadataObject.prototype.toJSON=function(){return{name:this.name,properties:this.properties.map(function(e){return e.toJSON()}),description:this.description,jsDocTags:this.jsDocTags,index:this.index,recursive:this.recursive,nullables:this.nullables.slice()}},MetadataObject}();t.MetadataObject=n,(r=n||(t.MetadataObject=n={})).intersects=function(e,t){return e.properties.some(function(e){return void 0!==t.properties.find(function(t){return e.key.getName()===t.key.getName()})})},r.covers=function(e,t){return e.properties.length>=t.properties.length&&e.properties.every(function(e){return void 0!==t.properties.find(function(t){return e.key.getName()===t.key.getName()})})}},56724:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataProperty=void 0;var n=r(3078),a=function(){function MetadataProperty(e){this.key=e.key,this.value=e.value,this.description=e.description,this.jsDocTags=e.jsDocTags}return MetadataProperty.create=function(e){return new MetadataProperty(e)},MetadataProperty.from=function(e,t){return MetadataProperty.create({key:n.Metadata.from(e.key,t),value:n.Metadata.from(e.value,t),description:e.description,jsDocTags:e.jsDocTags.slice()})},MetadataProperty.prototype.toJSON=function(){return{key:this.key.toJSON(),value:this.value.toJSON(),description:this.description,jsDocTags:this.jsDocTags}},MetadataProperty}();t.MetadataProperty=a},35191:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataTuple=void 0;var r=function(){function MetadataTuple(e){this.type=e.type,this.tags=e.tags}return MetadataTuple.create=function(e){return new MetadataTuple(e)},MetadataTuple.prototype.toJSON=function(){return{type:this.type.toJSON(),tags:this.tags.map(function(e){return e.slice()})}},MetadataTuple}();t.MetadataTuple=r},84530:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataTupleType=void 0;var r=function(){function MetadataTupleType(e){this.name=e.name,this.elements=e.elements,this.index=e.index,this.recursive=e.recursive,this.nullables=e.nullables}return MetadataTupleType._From_without_elements=function(e){return MetadataTupleType.create({name:e.name,index:e.index,elements:null,recursive:e.recursive,nullables:e.nullables.slice()})},MetadataTupleType.create=function(e){return new MetadataTupleType(e)},MetadataTupleType.prototype.isRest=function(){return this.elements.length>0&&null!==this.elements[this.elements.length-1].rest},MetadataTupleType.prototype.toJSON=function(){return{name:this.name,index:this.index,elements:this.elements.map(function(e){return e.toJSON()}),recursive:this.recursive,nullables:this.nullables.slice()}},MetadataTupleType}();t.MetadataTupleType=r},97420:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FormatCheatSheet=void 0;var RegexCall=function(e){return"".concat(e,".test($input)")};t.FormatCheatSheet={byte:RegexCall("/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm"),password:"true",regex:"(() => { try { new RegExp($input); return true; } catch { return false; } })()",uuid:RegexCall("/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i"),email:RegexCall("/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i"),hostname:RegexCall("/^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i"),"idn-email":RegexCall('/^(([^<>()[\\]\\.,;:\\s@\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\"]+)*)|(\\".+\\"))@(([^<>()[\\]\\.,;:\\s@\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\"]{2,})$/i'),"idn-hostname":RegexCall("/^([a-z0-9\\u00a1-\\uffff0-9]+(-[a-z0-9\\u00a1-\\uffff0-9]+)*\\.)+[a-z\\u00a1-\\uffff]{2,}$/i"),iri:RegexCall('/^[A-Za-z][\\d+-.A-Za-z]*:[^\\u0000-\\u0020"<>\\\\^`{|}]*$/u'),"iri-reference":RegexCall('/^[A-Za-z][\\d+-.A-Za-z]*:[^\\u0000-\\u0020"<>\\\\^`{|}]*$/u'),ipv4:RegexCall("/^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/"),ipv6:RegexCall("/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))$/i"),uri:"".concat(RegexCall("/\\/|:/")," && ").concat(RegexCall("/^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i")),"uri-reference":RegexCall("/^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i"),"uri-template":RegexCall("/^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i"),url:RegexCall("/^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu"),"date-time":"!isNaN(new Date($input).getTime())",date:RegexCall("/^(\\d{4})-(\\d{2})-(\\d{2})$/"),time:RegexCall("/^(\\d\\d):(\\d\\d):(\\d\\d(?:\\.\\d+)?)(z|([+-])(\\d\\d)(?::?(\\d\\d))?)?$/i"),duration:RegexCall("/^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/"),"json-pointer":RegexCall("/^(?:\\/(?:[^~/]|~0|~1)*)*$/"),"relative-json-pointer":RegexCall("/^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/")}},88781:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.transform=void 0;var a=n(r(55423)),o=r(58451);t.transform=function(e,t,r){var n=e.getCompilerOptions();return!1==(void 0!==n.strictNullChecks?!!n.strictNullChecks:!!n.strict)&&r.addDiagnostic({category:a.default.DiagnosticCategory.Error,code:"(typia)",file:void 0,start:void 0,length:void 0,messageText:"strict mode is required."}),o.FileTransformer.transform({program:e,compilerOptions:n,checker:e.getTypeChecker(),printer:a.default.createPrinter(),options:null!=t?t:{},extras:r})},t.default=t.transform},72546:function(e,t,r){"use strict";var n,a,o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CallExpressionTransformer=void 0;var i=o(r(1864)),u=r(58741),c=r(57589),f=r(38545),s=r(45791),d=r(78970),y=r(69473),p=r(28499),m=r(56246),v=r(81393),g=r(12232),_=r(5385),b=r(46502),x=r(51160),S=r(21230),T=r(69314),E=r(70501),w=r(81238),P=r(42025),I=r(69858),j=r(44953),F=r(59706),A=r(81550),M=r(77464),O=r(88556),C=r(20122),N=r(99103),R=r(7072),L=r(91092),U=r(92438),H=r(62037),q=r(31173),z=r(46323),B=r(8200),V=r(20097),J=r(61237),G=r(91654),Q=r(69539),W=r(37273),K=r(30951),Y=r(29763),Z=r(30098),X=r(62521),ee=r(28059),et=r(13184),er=r(82245),en=r(79645),ea=r(79790),eo=r(50561),ei=r(97199),eu=r(73624),ec=r(86864),el=r(51027),ef=r(50692),es=r(54021),ed=r(81739),ey=r(31897),ep=r(5071),em=r(30533),ev=r(93105),eh=r(34514),eg=r(91319),e_=r(22894),eb=r(14315),ex=r(8996),eS=r(84724),eT=r(53555),eE=r(90114),ew=r(91108),eP=r(72233),eI=r(31549),ej=r(9018),eF=r(31783),eA=r(33851),eM=r(50083),eO=r(52474),ek=r(71233),eC=r(60125),eN=r(96903),eR=r(46436),eL=r(68649),eD=r(63295),eU=r(23312),eH=r(81131),eq=r(38027),ez=r(20743),eB=r(29968),eV=r(98525),eJ=r(64270),eG=r(14948),e$=r(45753),eQ=r(20505),eW=r(23196),eK=r(6479);(a||(t.CallExpressionTransformer=a={})).transform=function(e){return function(t){var r,a,o=null===(r=e.checker.getResolvedSignature(t))||void 0===r?void 0:r.declaration;if(!o)return t;var u=i.default.resolve(o.getSourceFile().fileName);if(!1===n(u))return t;var c=u.split(i.default.sep).at(-1).split(".")[0],f=e.checker.getTypeAtLocation(o).symbol.name,s=null===(a=eY[c])||void 0===a?void 0:a[f];if(void 0===s)return t;var d=s()(e)(t.expression)(t);return null!=d?d:t}},n=function(e){return Object.keys(eY).some(function(t){return e.includes(i.default.join("node_modules","typia","lib","".concat(t,".d.ts")))})};var eY={module:{assert:function(){return c.AssertTransformer.transform({equals:!1,guard:!1})},assertGuard:function(){return c.AssertTransformer.transform({equals:!1,guard:!0})},assertType:function(){return c.AssertTransformer.transform({equals:!1,guard:!1})},is:function(){return p.IsTransformer.transform(!1)},validate:function(){return v.ValidateTransformer.transform(!1)},assertEquals:function(){return c.AssertTransformer.transform({equals:!0,guard:!1})},assertGuardEquals:function(){return c.AssertTransformer.transform({equals:!0,guard:!0})},equals:function(){return p.IsTransformer.transform(!0)},validateEquals:function(){return v.ValidateTransformer.transform(!0)},random:function(){return m.RandomTransformer.transform},metadata:function(){return ez.ReflectMetadataTransformer.transform},createAssert:function(){return f.CreateAssertTransformer.transform({equals:!1,guard:!1})},createAssertGuard:function(){return f.CreateAssertTransformer.transform({equals:!1,guard:!0})},createAssertType:function(){return f.CreateAssertTransformer.transform({equals:!1,guard:!1})},createIs:function(){return s.CreateIsTransformer.transform(!1)},createValidate:function(){return y.CreateValidateTransformer.transform(!1)},createAssertEquals:function(){return f.CreateAssertTransformer.transform({equals:!0,guard:!1})},createAssertGuardEquals:function(){return f.CreateAssertTransformer.transform({equals:!0,guard:!0})},createEquals:function(){return s.CreateIsTransformer.transform(!0)},createValidateEquals:function(){return y.CreateValidateTransformer.transform(!0)},createRandom:function(){return d.CreateRandomTransformer.transform}},http:{formData:function(){return eV.HttpFormDataTransformer.transform},isFormData:function(){return eJ.HttpIsFormDataTransformer.transform},assertFormData:function(){return eB.HttpAssertFormDataTransformer.transform},validateFormData:function(){return eG.HttpValidateFormDataTransformer.transform},headers:function(){return F.HttpHeadersTransformer.transform},isHeaders:function(){return A.HttpIsHeadersTransformer.transform},assertHeaders:function(){return I.HttpAssertHeadersTransformer.transform},validateHeaders:function(){return N.HttpValidateHeadersTransformer.transform},parameter:function(){return O.HttpParameterTransformer.transform},query:function(){return C.HttpQueryTransformer.transform},isQuery:function(){return M.HttpIsQueryTransformer.transform},assertQuery:function(){return j.HttpAssertQueryTransformer.transform},validateQuery:function(){return R.HttpValidateQueryTransformer.transform},createFormData:function(){return eQ.CreateHttpFormDataTransformer.transform},createIsFormData:function(){return eW.CreateHttpIsFormDataTransformer.transform},createAssertFormData:function(){return e$.CreateHttpAssertFormDataTransformer.transform},createValidateFormData:function(){return eK.CreateHttpValidateFormDataTransformer.transform},createHeaders:function(){return b.CreateHttpHeadersTransformer.transform},createIsHeaders:function(){return x.CreateHttpIsHeadersTransformer.transform},createAssertHeaders:function(){return g.CreateHttpAssertHeadersTransformer.transform},createValidateHeaders:function(){return w.CreateHttpValidateHeadersTransformer.transform},createParameter:function(){return T.CreateHttpParameterTransformer.transform},createQuery:function(){return E.CreateHttpQueryTransformer.transform},createIsQuery:function(){return S.CreateHttpIsQueryTransformer.transform},createAssertQuery:function(){return _.CreateHttpAssertQueryTransformer.transform},createValidateQuery:function(){return P.CreateHttpValidateQueryTransformer.transform}},json:{application:function(){return function(e){return function(){return L.JsonApplicationTransformer.transform(e)}}},isParse:function(){return W.JsonIsParseTransformer.transform},assertParse:function(){return U.JsonAssertParseTransformer.transform},validateParse:function(){return Z.JsonValidateParseTransformer.transform},stringify:function(){return Y.JsonStringifyTransformer.transform},assertStringify:function(){return H.JsonAssertStringifyTransformer.transform},isStringify:function(){return K.JsonIsStringifyTransformer.transform},validateStringify:function(){return X.JsonValidateStringifyTransformer.transform},createIsParse:function(){return B.JsonCreateIsParseTransformer.transform},createAssertParse:function(){return q.JsonCreateAssertParseTransformer.transform},createValidateParse:function(){return G.JsonCreateValidateParseTransformer.transform},createStringify:function(){return J.JsonCreateStringifyTransformer.transform},createAssertStringify:function(){return z.JsonCreateAssertStringifyTransformer.transform},createIsStringify:function(){return V.JsonCreateIsStringifyTransformer.transform},createValidateStringify:function(){return Q.JsonCreateValidateStringifyTransformer.transform}},protobuf:{message:function(){return eU.ProtobufMessageTransformer.transform},encode:function(){return eR.ProtobufEncodeTransformer.transform},assertEncode:function(){return eP.ProtobufAssertEncodeTransformer.transform},isEncode:function(){return eD.ProtobufIsEncodeTransformer.transform},validateEncode:function(){return eq.ProtobufValidateEncodeTransformer.transform},decode:function(){return eN.ProtobufDecodeTransformer.transform},assertDecode:function(){return ew.ProtobufAssertDecodeTransformer.transform},isDecode:function(){return eL.ProtobufIsDecodeTransformer.transform},validateDecode:function(){return eH.ProtobufValidateDecodeTransformer.transform},createEncode:function(){return eA.ProtobufCreateEncodeTransformer.transform},createAssertEncode:function(){return ej.ProtobufCreateAssertEncodeTransformer.transform},createIsEncode:function(){return eO.ProtobufCreateIsEncodeTransformer.transform},createValidateEncode:function(){return eC.ProtobufCreateValidateEncodeTransformer.transform},createDecode:function(){return eF.ProtobufCreateDecodeTransformer.transform},createAssertDecode:function(){return eI.ProtobufCreateAssertDecodeTransformer.transform},createIsDecode:function(){return eM.ProtobufCreateIsDecodeTransformer.transform},createValidateDecode:function(){return ek.ProtobufCreateValidateDecodeTransformer.transform}},reflect:{metadata:function(){return ez.ReflectMetadataTransformer.transform}},misc:{literals:function(){return function(e){return function(){return ey.MiscLiteralsTransformer.transform(e)}}},clone:function(){return er.MiscCloneTransformer.transform},assertClone:function(){return ee.MiscAssertCloneTransformer.transform},isClone:function(){return es.MiscIsCloneTransformer.transform},validateClone:function(){return em.MiscValidateCloneTransformer.transform},prune:function(){return ep.MiscPruneTransformer.transform},assertPrune:function(){return et.MiscAssertPruneTransformer.transform},isPrune:function(){return ed.MiscIsPruneTransformer.transform},validatePrune:function(){return ev.MiscValidatePruneTransformer.transform},createClone:function(){return eo.MiscCreateCloneTransformer.transform},createAssertClone:function(){return en.MiscCreateAssertCloneTransformer.transform},createIsClone:function(){return ei.MiscCreateIsCloneTransformer.transform},createValidateClone:function(){return el.MiscCreateValidateCloneTransformer.transform},createPrune:function(){return ec.MiscCreatePruneTransformer.transform},createAssertPrune:function(){return ea.MiscCreateAssertPruneTransformer.transform},createIsPrune:function(){return eu.MiscCreateIsPruneTransformer.transform},createValidatePrune:function(){return ef.MiscCreateValidatePruneTransformer.transform}},notations:{camel:function(){return eS.NotationGeneralTransformer.transform(u.NamingConvention.camel)},assertCamel:function(){return eh.NotationAssertGeneralTransformer.transform(u.NamingConvention.camel)},isCamel:function(){return eT.NotationIsGeneralTransformer.transform(u.NamingConvention.camel)},validateCamel:function(){return eE.NotationValidateGeneralTransformer.transform(u.NamingConvention.camel)},pascal:function(){return eS.NotationGeneralTransformer.transform(u.NamingConvention.pascal)},assertPascal:function(){return eh.NotationAssertGeneralTransformer.transform(u.NamingConvention.pascal)},isPascal:function(){return eT.NotationIsGeneralTransformer.transform(u.NamingConvention.pascal)},validatePascal:function(){return eE.NotationValidateGeneralTransformer.transform(u.NamingConvention.pascal)},snake:function(){return eS.NotationGeneralTransformer.transform(u.NamingConvention.snake)},assertSnake:function(){return eh.NotationAssertGeneralTransformer.transform(u.NamingConvention.snake)},isSnake:function(){return eT.NotationIsGeneralTransformer.transform(u.NamingConvention.snake)},validateSnake:function(){return eE.NotationValidateGeneralTransformer.transform(u.NamingConvention.snake)},createCamel:function(){return e_.NotationCreateGeneralTransformer.transform(u.NamingConvention.camel)},createAssertCamel:function(){return eg.NotationCreateAssertGeneralTransformer.transform(u.NamingConvention.camel)},createIsCamel:function(){return eb.NotationCreateIsGeneralTransformer.transform(u.NamingConvention.camel)},createValidateCamel:function(){return ex.NotationCreateValidateGeneralTransformer.transform(u.NamingConvention.camel)},createPascal:function(){return e_.NotationCreateGeneralTransformer.transform(u.NamingConvention.pascal)},createAssertPascal:function(){return eg.NotationCreateAssertGeneralTransformer.transform(u.NamingConvention.pascal)},createIsPascal:function(){return eb.NotationCreateIsGeneralTransformer.transform(u.NamingConvention.pascal)},createValidatePascal:function(){return ex.NotationCreateValidateGeneralTransformer.transform(u.NamingConvention.pascal)},createSnake:function(){return e_.NotationCreateGeneralTransformer.transform(u.NamingConvention.snake)},createAssertSnake:function(){return eg.NotationCreateAssertGeneralTransformer.transform(u.NamingConvention.snake)},createIsSnake:function(){return eb.NotationCreateIsGeneralTransformer.transform(u.NamingConvention.snake)},createValidateSnake:function(){return ex.NotationCreateValidateGeneralTransformer.transform(u.NamingConvention.snake)}}}},58451:function(e,t,r){"use strict";var n,a,o,i=this&&this.__assign||function(){return(i=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GenericTransformer=void 0;var c=u(r(55423)),f=r(63664);(n=o||(t.GenericTransformer=o={})).scalar=function(e){return function(t){return function(r){return function(n){return function(o){if(1!==o.arguments.length)throw new f.TransformerError({code:"typia.".concat(e),message:"no input value."});var u=i(o.typeArguments&&o.typeArguments[0]?[r.checker.getTypeFromTypeNode(o.typeArguments[0]),o.typeArguments[0],!0]:[r.checker.getTypeAtLocation(o.arguments[0]),o.arguments[0],!1],3),s=u[0],d=u[1],y=u[2];if(s.isTypeParameter())throw new f.TransformerError({code:"typia.".concat(e),message:"non-specified generic argument."});return c.default.factory.createCallExpression(t(r)(n)(s,y?d.getFullText().trim():a(r.checker)(s)(d)),void 0,[o.arguments[0]])}}}}},n.factory=function(e){return function(t){return function(r){return function(n){return function(a){if(!(null===(o=a.typeArguments)||void 0===o?void 0:o[0]))throw new f.TransformerError({code:"typia.".concat(e),message:"generic argument is not specified."});var o,i=a.typeArguments[0],u=r.checker.getTypeFromTypeNode(i);if(u.isTypeParameter())throw new f.TransformerError({code:"typia.".concat(e),message:"non-specified generic argument."});return t(r)(n)(u,i.getFullText().trim())}}}}},a=function(e){return function(t){return function(r){return e.typeToString(t,r,c.default.TypeFormatFlags.NodeBuilderFlagsMask)}}}},61261:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Writable=void 0,t.Writable=function(e){return e}},73346:function(e,t){"use strict";var r,n,a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},o=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;a=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.NameEncoder=void 0,(r=n||(t.NameEncoder=n={})).encode=function(e){var t,r;try{for(var n=a(i),u=n.next();!u.done;u=n.next()){var c=o(u.value,2),f=c[0],s=c[1];e=e.split(f).join(s)}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return e},r.decode=function(e){var t,r;try{for(var n=a(i),u=n.next();!u.done;u=n.next()){var c=o(u.value,2),f=c[0],s=c[1];""!==s&&(e=e.split(s).join(f))}}catch(e){t={error:e}}finally{try{u&&!u.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return e};var i=[["$","_dollar_"],["&","_and_"],["|","_or_"],["{","_blt_"],["}","_bgt_"],["<","_lt_"],[">","_gt_"],["(","_lp_"],[")","_rp_"],["[","_alt_"],["]","_agt_"],[",","_comma_"],["`","_backquote_"],["'","_singlequote_"],['"',"_doublequote_"],[" ","_space_"]]},70505:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i};Object.defineProperty(t,"__esModule",{value:!0}),t.pascal=t.camel=t.snake=void 0;var a=r(85422);t.snake=function(e){for(var t=[],r=0;r0;--r)t[r]-t[r-1]==1&&t.splice(r,1);if(0!==t.length&&0===t[0]&&t.splice(0,1),0===t.length)return e.toLowerCase();for(var a="",r=0;r1&&e[1]===e[1].toLowerCase()?"_"+e[1].toUpperCase()+e.substring(2):e},t.pascal=function(e){return 0===(e=removeSnake(e)).length?e:e[0]===e[0].toLowerCase()?e[0].toUpperCase()+e.substring(1):"_"===e[0]&&e.length>1&&e[1]===e[1].toLowerCase()?"_"+e[1].toUpperCase()+e.substring(2):e};var removeSnake=function(e){for(var t=[],r=0;r=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(t,"__esModule",{value:!0}),t.PatternUtil=void 0,(r=n||(t.PatternUtil=n={})).fix=function(e){var t=e.indexOf(r.STRING),n=e.lastIndexOf(r.STRING);return[-1===t||none("(")(e.slice(0,t))?"^":"",e,-1===n||none(")")(e.slice(n+r.STRING.length))?"$":""].join("")},r.escape=function(e){return e.replace(/[|\\/{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")},r.NUMBER="[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?",r.BOOLEAN="true|false",r.STRING="(.*)";var none=function(e){return function(t){var r,n;try{for(var o=a(t),i=o.next();!i.done;i=o.next())if(i.value!==e)return!0}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!1}}},92989:function(e,t,r){"use strict";var n=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.relativeJsonPointer=t.jsonPointer=t.duration=t.time=t.date=t.datetime=t.url=t.uriTemplate=t.uriReference=t.uri=t.ipv6=t.ipv4=t.iriReference=t.iri=t.idnHostname=t.idnEmail=t.hostname=t.email=t.uuid=t.regex=t.password=t.byte=t.pattern=t.length=t.pick=t.array=t.string=t.number=t.bigint=t.integer=t.boolean=void 0;var o=a(r(14419)),i="abcdefghijklmnopqrstuvwxyz";t.boolean=function(){return .5>Math.random()},t.integer=function(e,t){return null!=e||(e=0),null!=t||(t=100),Math.floor(Math.random()*(t-e+1))+e},t.bigint=function(e,r){return BigInt((0,t.integer)(Number(null!=e?e:BigInt(0)),Number(null!=r?r:BigInt(100))))},t.number=function(e,t){return null!=e||(e=0),null!=t||(t=100),Math.random()*(t-e)+e},t.string=function(e){return Array(null!=e?e:(0,t.integer)(5,10)).fill(0).map(function(){return i[(0,t.integer)(0,i.length-1)]}).join("")},t.array=function(e,r){return Array(null!=r?r:(0,t.length)()).fill(0).map(function(t,r){return e(r)})},t.pick=function(e){return e[(0,t.integer)(0,e.length-1)]},t.length=function(){return(0,t.integer)(0,3)},t.pattern=function(e){return new o.default(e).gen()},t.byte=function(){return"vt7ekz4lIoNTTS9sDQYdWKharxIFAR54+z/umIxSgUM="},t.password=function(){return(0,t.string)((0,t.integer)(4,16))},t.regex=function(){return"/^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/"},t.uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})},t.email=function(){return"".concat((0,t.string)(10),"@").concat((0,t.string)(10),".").concat((0,t.string)(3))},t.hostname=function(){return"".concat((0,t.string)(10),".").concat((0,t.string)(3))},t.idnEmail=function(){return(0,t.email)()},t.idnHostname=function(){return(0,t.hostname)()},t.iri=function(){return(0,t.url)()},t.iriReference=function(){return(0,t.url)()},t.ipv4=function(){return(0,t.array)(function(){return(0,t.integer)(0,255)},4).join(".")},t.ipv6=function(){return(0,t.array)(function(){return(0,t.integer)(0,65535).toString(16)},8).join(":")},t.uri=function(){return(0,t.url)()},t.uriReference=function(){return(0,t.url)()},t.uriTemplate=function(){return(0,t.url)()},t.url=function(){return"https://".concat((0,t.string)(10),".").concat((0,t.string)(3))},t.datetime=function(e,r){return new Date((0,t.number)(null!=e?e:Date.now()-30*u,null!=r?r:Date.now()+7*u)).toISOString()},t.date=function(e,r){return new Date((0,t.number)(null!=e?e:0,null!=r?r:2*Date.now())).toISOString().substring(0,10)},t.time=function(){return new Date((0,t.number)(0,u)).toISOString().substring(11,23)},t.duration=function(){var e=durate([["Y",(0,t.integer)(0,100)],["M",(0,t.integer)(0,12)],["D",(0,t.integer)(0,31)]]),r=durate([["H",(0,t.integer)(0,24)],["M",(0,t.integer)(0,60)],["S",(0,t.integer)(0,60)]]);return e.length+r.length===0?"PT0S":"P".concat(e).concat(r.length?"T":"").concat(r)},t.jsonPointer=function(){return"/components/schemas/".concat((0,t.string)(10))},t.relativeJsonPointer=function(){return"".concat((0,t.integer)(0,10),"#")};var u=864e5,durate=function(e){return e.filter(function(e){var t=n(e,2);return 0!==(t[0],t[1])}).map(function(e){var t=n(e,2),r=t[0],a=t[1];return"".concat(a).concat(r)}).join("")}},46657:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var a=Object.getOwnPropertyDescriptor(t,r);(!a||("get"in a?!t.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,a)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.RandomGenerator=void 0,t.RandomGenerator=o(r(92989))},81061:function(e,t){"use strict";var r=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,a,o=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(e){a={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(a)throw a.error}}return i},n=this&&this.__spreadArray||function(e,t,r){if(r||2==arguments.length)for(var n,a=0,o=t.length;ae.length)&&(t=e.length);for(var r=0,n=Array(t);r=e.length?e.apply(this,n):function(){for(var e=arguments.length,r=Array(e),a=0;a=n.length?n.apply(this,r):function(){for(var t=arguments.length,n=Array(t),a=0;a1&&void 0!==arguments[1]?arguments[1]:{};i.initial(e),i.handler(t);var r={current:e},n=curry(didStateUpdate)(r,t),a=curry(updateState)(r),o=curry(i.changes)(e),u=curry(extractChanges)(r);return[function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(e){return e};return i.selector(e),e(r.current)},function(e){(function(){for(var e=arguments.length,t=Array(e),r=0;r=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(t,["monaco"]);p(function(e){return{config:function merge(e,t){return Object.keys(t).forEach(function(r){t[r]instanceof Object&&e[r]&&Object.assign(t[r],merge(e[r],t[r]))}),_objectSpread2(_objectSpread2({},e),t)}(e.config,n),monaco:r}})},init:function(){var e=y(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(p({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),utils_makeCancelable(m);if(window.monaco&&window.monaco.editor)return storeMonacoInstance(window.monaco),e.resolve(window.monaco),utils_makeCancelable(m);utils_compose(injectScripts,getMonacoLoaderScript)(configureLoader)}return utils_makeCancelable(m)},__getMonacoInstance:function(){return y(function(e){return e.monaco})}},g=r(67294),_={wrapper:{display:"flex",position:"relative",textAlign:"initial"},fullWidth:{width:"100%"},hide:{display:"none"}},b={container:{display:"flex",height:"100%",width:"100%",justifyContent:"center",alignItems:"center"}},$=function({children:e}){return g.createElement("div",{style:b.container},e)},x=(0,g.memo)(function({width:e,height:t,isEditorReady:r,loading:n,_ref:a,className:o,wrapperProps:i}){return g.createElement("section",{style:{..._.wrapper,width:e,height:t},...i},!r&&g.createElement($,null,n),g.createElement("div",{ref:a,style:{..._.fullWidth,...!r&&_.hide},className:o}))}),k=function(e){(0,g.useEffect)(e,[])},l=function(e,t,r=!0){let n=(0,g.useRef)(!0);(0,g.useEffect)(n.current||!r?()=>{n.current=!1}:e,t)};function D(){}function h(e,t,r,n){return e.editor.getModel(te(e,n))||e.editor.createModel(t,r,n?te(e,n):void 0)}function te(e,t){return e.Uri.parse(t)}(0,g.memo)(function({original:e,modified:t,language:r,originalLanguage:n,modifiedLanguage:a,originalModelPath:o,modifiedModelPath:i,keepCurrentOriginalModel:u=!1,keepCurrentModifiedModel:c=!1,theme:f="light",loading:s="Loading...",options:d={},height:y="100%",width:p="100%",className:m,wrapperProps:_={},beforeMount:b=D,onMount:S=D}){let[T,E]=(0,g.useState)(!1),[w,P]=(0,g.useState)(!0),I=(0,g.useRef)(null),j=(0,g.useRef)(null),F=(0,g.useRef)(null),A=(0,g.useRef)(S),M=(0,g.useRef)(b),O=(0,g.useRef)(!1);k(()=>{let e=v.init();return e.then(e=>(j.current=e)&&P(!1)).catch(e=>e?.type!=="cancelation"&&console.error("Monaco initialization: error:",e)),()=>{let t;return I.current?(t=I.current?.getModel(),void(u||t?.original?.dispose(),c||t?.modified?.dispose(),I.current?.dispose())):e.cancel()}}),l(()=>{if(I.current&&j.current){let t=I.current.getOriginalEditor(),a=h(j.current,e||"",n||r||"text",o||"");a!==t.getModel()&&t.setModel(a)}},[o],T),l(()=>{if(I.current&&j.current){let e=I.current.getModifiedEditor(),n=h(j.current,t||"",a||r||"text",i||"");n!==e.getModel()&&e.setModel(n)}},[i],T),l(()=>{let e=I.current.getModifiedEditor();e.getOption(j.current.editor.EditorOption.readOnly)?e.setValue(t||""):t!==e.getValue()&&(e.executeEdits("",[{range:e.getModel().getFullModelRange(),text:t||"",forceMoveMarkers:!0}]),e.pushUndoStop())},[t],T),l(()=>{I.current?.getModel()?.original.setValue(e||"")},[e],T),l(()=>{let{original:e,modified:t}=I.current.getModel();j.current.editor.setModelLanguage(e,n||r||"text"),j.current.editor.setModelLanguage(t,a||r||"text")},[r,n,a],T),l(()=>{j.current?.editor.setTheme(f)},[f],T),l(()=>{I.current?.updateOptions(d)},[d],T);let C=(0,g.useCallback)(()=>{if(!j.current)return;M.current(j.current);let u=h(j.current,e||"",n||r||"text",o||""),c=h(j.current,t||"",a||r||"text",i||"");I.current?.setModel({original:u,modified:c})},[r,t,a,e,n,o,i]),N=(0,g.useCallback)(()=>{!O.current&&F.current&&(I.current=j.current.editor.createDiffEditor(F.current,{automaticLayout:!0,...d}),C(),j.current?.editor.setTheme(f),E(!0),O.current=!0)},[d,f,C]);return(0,g.useEffect)(()=>{T&&A.current(I.current,j.current)},[T]),(0,g.useEffect)(()=>{w||T||N()},[w,T,N]),g.createElement(x,{width:p,height:y,isEditorReady:T,loading:s,_ref:F,className:m,wrapperProps:_})});var se=function(e){let t=(0,g.useRef)();return(0,g.useEffect)(()=>{t.current=e},[e]),t.current},S=new Map,T=(0,g.memo)(function({defaultValue:e,defaultLanguage:t,defaultPath:r,value:n,language:a,path:o,theme:i="light",line:u,loading:c="Loading...",options:f={},overrideServices:s={},saveViewState:d=!0,keepCurrentModel:y=!1,width:p="100%",height:m="100%",className:_,wrapperProps:b={},beforeMount:T=D,onMount:E=D,onChange:w,onValidate:P=D}){let[I,j]=(0,g.useState)(!1),[F,A]=(0,g.useState)(!0),M=(0,g.useRef)(null),O=(0,g.useRef)(null),C=(0,g.useRef)(null),N=(0,g.useRef)(E),R=(0,g.useRef)(T),L=(0,g.useRef)(),U=(0,g.useRef)(n),H=se(o),q=(0,g.useRef)(!1),z=(0,g.useRef)(!1);k(()=>{let e=v.init();return e.then(e=>(M.current=e)&&A(!1)).catch(e=>e?.type!=="cancelation"&&console.error("Monaco initialization: error:",e)),()=>O.current?void(L.current?.dispose(),y?d&&S.set(o,O.current.saveViewState()):O.current.getModel()?.dispose(),O.current.dispose()):e.cancel()}),l(()=>{let i=h(M.current,e||n||"",t||a||"",o||r||"");i!==O.current?.getModel()&&(d&&S.set(H,O.current?.saveViewState()),O.current?.setModel(i),d&&O.current?.restoreViewState(S.get(o)))},[o],I),l(()=>{O.current?.updateOptions(f)},[f],I),l(()=>{O.current&&void 0!==n&&(O.current.getOption(M.current.editor.EditorOption.readOnly)?O.current.setValue(n):n===O.current.getValue()||(z.current=!0,O.current.executeEdits("",[{range:O.current.getModel().getFullModelRange(),text:n,forceMoveMarkers:!0}]),O.current.pushUndoStop(),z.current=!1))},[n],I),l(()=>{let e=O.current?.getModel();e&&a&&M.current?.editor.setModelLanguage(e,a)},[a],I),l(()=>{void 0!==u&&O.current?.revealLine(u)},[u],I),l(()=>{M.current?.editor.setTheme(i)},[i],I);let B=(0,g.useCallback)(()=>{if(!(!C.current||!M.current)&&!q.current){R.current(M.current);let c=o||r,y=h(M.current,n||e||"",t||a||"",c||"");O.current=M.current?.editor.create(C.current,{model:y,automaticLayout:!0,...f},s),d&&O.current.restoreViewState(S.get(c)),M.current.editor.setTheme(i),void 0!==u&&O.current.revealLine(u),j(!0),q.current=!0}},[e,t,r,n,a,o,f,s,d,i,u]);return(0,g.useEffect)(()=>{I&&N.current(O.current,M.current)},[I]),(0,g.useEffect)(()=>{F||I||B()},[F,I,B]),U.current=n,(0,g.useEffect)(()=>{I&&w&&(L.current?.dispose(),L.current=O.current?.onDidChangeModelContent(e=>{z.current||w(O.current.getValue(),e)}))},[I,w]),(0,g.useEffect)(()=>{if(I){let e=M.current.editor.onDidChangeMarkers(e=>{let t=O.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=M.current.editor.getModelMarkers({resource:t});P?.(e)}});return()=>{e?.dispose()}}return()=>{}},[I,P]),g.createElement(x,{width:p,height:m,isEditorReady:I,loading:c,_ref:C,className:_,wrapperProps:b})})}}]); \ No newline at end of file diff --git a/_next/static/chunks/nextra-data-en-US.json b/_next/static/chunks/nextra-data-en-US.json index 56c4bd78ba..0abe69d9e0 100644 --- a/_next/static/chunks/nextra-data-en-US.json +++ b/_next/static/chunks/nextra-data-en-US.json @@ -1 +1 @@ -{"/docs":{"title":"Index","data":{"outline#Outline":"// RUNTIME VALIDATORS\r\nexport function is(input: unknown): input is T; // returns boolean\r\nexport function assert(input: unknown): T; // throws TypeGuardError\r\nexport function assertGuard(input: unknown): asserts input is T;\r\nexport function validate(input: unknown): IValidation; // detailed\r\n\r\n// JSON FUNCTIONS\r\nexport namespace json {\r\n export function application(): IJsonApplication; // JSON schema\r\n export function assertParse(input: string): T; // type safe parser\r\n export function assertStringify(input: T): string; // safe and faster\r\n}\r\n\r\n// PROTOCOL BUFFER\r\nexport namespace protobuf {\r\n export function message(): string; // Protocol Buffer message\r\n export function assertDecode(buffer: Uint8Array): T; // safe decoder\r\n export function assertEncode(input: T): Uint8Array; // safe encoder\r\n}\r\n\r\n// RANDOM GENERATOR\r\nexport function random(g?: Partial): T;\nTypia is a transformer library supporting below features:\nSuper-fast Runtime Validators\nEnhanced JSON functions\nProtocol Buffer encoder and decoder\nRandom data generator\nOnly one line required, with pure TypeScript type\nRuntime validator is 20,000x faster than class-validator\nJSON serialization is 200x faster than class-transformer","sponsors#Sponsors":"Thanks for your support.Your donation would encourage typia development."}},"/docs/misc":{"title":"Misc","data":{"misc-module#misc module":"","clone-functions#clone() functions":"export namespace misc {\r\n export function clone(input: T): T;\r\n export function assertClone(input: T | unknown): Resolved;\r\n export function isClone(input: T | unknown): Resolved | null;\r\n export function validateClone(input: T | unknown): IValidation>;\r\n\r\n export function createClone(): (input: T) => Resolved;\r\n export function createAssertClone(): (input: T | unknown) => Resolved;\r\n export function createIsClone(): (input: T | unknown) => Resolved | null;\r\n export function createValidateClone(): (\r\n input: T | unknown\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nDeep copy functions.When you want to copy an instance, just call typia.misc.clone() function. It would perform deep copy including nested objects, so you can get a new instance with same values. Also, if you want type safe deep copy function, you can use typia.misc.isClone(), typia.misc.assertClone() or typia.misc.validateClone() functions instead.\ntypia.misc.assertClone(): typia.assert() + typia.misc.clone()\ntypia.misc.isClone(): typia.is() + typia.misc.clone()\ntypia.misc.validateClone(): typia.validate() + typia.misc.clone()\nimport typia from \"typia\";\r\n\r\nconst department: IDepartment = typia.misc.random();\r\nconst cloned: IDepartment = typia.misc.assertClone(department);\r\n\r\nconsole.log(cloned);\r\n\r\ninterface IDepartment {\r\n /**\r\n * @format uuid\r\n */\r\n id: string;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n name: string;\r\n\r\n /**\r\n * @type int\r\n */\r\n limit: number;\r\n\r\n clerks: IClerk[];\r\n}\r\ninterface IClerk {\r\n name: string;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n age: number;\r\n\r\n authority: number;\r\n\r\n /**\r\n * @format date\r\n */\r\n joined_at: string;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst department = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s; return ({\r\n id: (_d = (_c = (_b = ((_a = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _a !== void 0 ? _a : $generator.customs)) === null || _b === void 0 ? void 0 : _b.string) === null || _c === void 0 ? void 0 : _c.call(_b, [\r\n {\r\n name: \"format\",\r\n value: \"uuid\"\r\n }\r\n ])) !== null && _d !== void 0 ? _d : ((_e = generator === null || generator === void 0 ? void 0 : generator.uuid) !== null && _e !== void 0 ? _e : $generator.uuid)(),\r\n name: (_j = (_h = (_g = ((_f = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _f !== void 0 ? _f : $generator.customs)) === null || _g === void 0 ? void 0 : _g.string) === null || _h === void 0 ? void 0 : _h.call(_g, [\r\n {\r\n name: \"minLength\",\r\n value: \"3\"\r\n }\r\n ])) !== null && _j !== void 0 ? _j : ((_k = generator === null || generator === void 0 ? void 0 : generator.string) !== null && _k !== void 0 ? _k : $generator.string)(((_l = generator === null || generator === void 0 ? void 0 : generator.integer) !== null && _l !== void 0 ? _l : $generator.integer)(3, 25)),\r\n limit: (_q = (_p = (_o = ((_m = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _m !== void 0 ? _m : $generator.customs)) === null || _o === void 0 ? void 0 : _o.number) === null || _p === void 0 ? void 0 : _p.call(_o, [\r\n {\r\n name: \"type\",\r\n value: \"int\"\r\n }\r\n ])) !== null && _q !== void 0 ? _q : ((_r = generator === null || generator === void 0 ? void 0 : generator.integer) !== null && _r !== void 0 ? _r : $generator.integer)(0, 100),\r\n clerks: ((_s = generator === null || generator === void 0 ? void 0 : generator.array) !== null && _s !== void 0 ? _s : $generator.array)(() => $ro1(_recursive, _recursive ? 1 + _depth : _depth))\r\n }); };\r\n const $ro1 = (_recursive = false, _depth = 0) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v; return ({\r\n name: (_d = (_c = (_b = ((_a = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _a !== void 0 ? _a : $generator.customs)) === null || _b === void 0 ? void 0 : _b.string) === null || _c === void 0 ? void 0 : _c.call(_b, [])) !== null && _d !== void 0 ? _d : ((_e = generator === null || generator === void 0 ? void 0 : generator.string) !== null && _e !== void 0 ? _e : $generator.string)(),\r\n age: (_j = (_h = (_g = ((_f = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _f !== void 0 ? _f : $generator.customs)) === null || _g === void 0 ? void 0 : _g.number) === null || _h === void 0 ? void 0 : _h.call(_g, [\r\n {\r\n name: \"exclusiveMinimum\",\r\n value: \"19\"\r\n },\r\n {\r\n name: \"maximum\",\r\n value: \"100\"\r\n }\r\n ])) !== null && _j !== void 0 ? _j : ((_k = generator === null || generator === void 0 ? void 0 : generator.number) !== null && _k !== void 0 ? _k : $generator.number)(19, 100),\r\n authority: (_p = (_o = (_m = ((_l = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _l !== void 0 ? _l : $generator.customs)) === null || _m === void 0 ? void 0 : _m.number) === null || _o === void 0 ? void 0 : _o.call(_m, [])) !== null && _p !== void 0 ? _p : ((_q = generator === null || generator === void 0 ? void 0 : generator.number) !== null && _q !== void 0 ? _q : $generator.number)(0, 100),\r\n joined_at: (_u = (_t = (_s = ((_r = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _r !== void 0 ? _r : $generator.customs)) === null || _s === void 0 ? void 0 : _s.string) === null || _t === void 0 ? void 0 : _t.call(_s, [\r\n {\r\n name: \"format\",\r\n value: \"date\"\r\n }\r\n ])) !== null && _u !== void 0 ? _u : ((_v = generator === null || generator === void 0 ? void 0 : generator.date) !== null && _v !== void 0 ? _v : $generator.date)()\r\n }); };\r\n return $ro0();\r\n})();\r\nconst cloned = (input => { const assert = input => {\r\n const __is = input => {\r\n const $is_uuid = typia_1.default.assertClone.is_uuid;\r\n const $is_date = typia_1.default.assertClone.is_date;\r\n const $io0 = input => \"string\" === typeof input.id && $is_uuid(input.id) && (\"string\" === typeof input.name && 3 <= input.name.length) && (\"number\" === typeof input.limit && parseInt(input.limit) === input.limit) && (Array.isArray(input.clerks) && input.clerks.every(elem => \"object\" === typeof elem && null !== elem && $io1(elem)));\r\n const $io1 = input => \"string\" === typeof input.name && (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age) && \"number\" === typeof input.authority && (\"string\" === typeof input.joined_at && $is_date(input.joined_at));\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.assertClone.guard;\r\n const $is_uuid = typia_1.default.assertClone.is_uuid;\r\n const $is_date = typia_1.default.assertClone.is_date;\r\n const $ao0 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.id && ($is_uuid(input.id) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string (@format uuid)\",\r\n value: input.id\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string\",\r\n value: input.id\r\n })) && (\"string\" === typeof input.name && (3 <= input.name.length || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string (@minLength 3)\",\r\n value: input.name\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name\r\n })) && (\"number\" === typeof input.limit && (parseInt(input.limit) === input.limit || $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: \"number (@type int)\",\r\n value: input.limit\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: \"number\",\r\n value: input.limit\r\n })) && ((Array.isArray(input.clerks) || $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks\r\n })) && input.clerks.every((elem, _index1) => (\"object\" === typeof elem && null !== elem || $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem\r\n })) && $ao1(elem, _path + \".clerks[\" + _index1 + \"]\", true && _exceptionable) || $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks\r\n }));\r\n const $ao1 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.name || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name\r\n })) && (\"number\" === typeof input.age && (19 < input.age || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number (@exclusiveMinimum 19)\",\r\n value: input.age\r\n })) && (100 >= input.age || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number (@maximum 100)\",\r\n value: input.age\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number\",\r\n value: input.age\r\n })) && (\"number\" === typeof input.authority || $guard(_exceptionable, {\r\n path: _path + \".authority\",\r\n expected: \"number\",\r\n value: input.authority\r\n })) && (\"string\" === typeof input.joined_at && ($is_date(input.joined_at) || $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: \"string (@format date)\",\r\n value: input.joined_at\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: \"string\",\r\n value: input.joined_at\r\n }));\r\n return (\"object\" === typeof input && null !== input || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input\r\n })) && $ao0(input, _path + \"\", true) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n}; const clone = input => {\r\n const $io1 = input => \"string\" === typeof input.name && (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age) && \"number\" === typeof input.authority && (\"string\" === typeof input.joined_at && $is_date(input.joined_at));\r\n const $is_uuid = typia_1.default.assertClone.is_uuid;\r\n const $is_date = typia_1.default.assertClone.is_date;\r\n const $cp0 = input => input.map(elem => \"object\" === typeof elem && null !== elem ? $co1(elem) : elem);\r\n const $co0 = input => ({\r\n id: input.id,\r\n name: input.name,\r\n limit: input.limit,\r\n clerks: Array.isArray(input.clerks) ? $cp0(input.clerks) : input.clerks\r\n });\r\n const $co1 = input => ({\r\n name: input.name,\r\n age: input.age,\r\n authority: input.authority,\r\n joined_at: input.joined_at\r\n });\r\n return \"object\" === typeof input && null !== input ? $co0(input) : input;\r\n}; assert(input); const output = clone(input); return output; })(department);\r\nconsole.log(cloned);","prune-functions#prune() functions":"export function prune(input: T): void;\r\nexport function assertPrune(input: T | unknown): T;\r\nexport function isPrune(input: T | unknown): T | null;\r\nexport function validatePrune(input: T | unknown): IValidation;\r\n\r\nexport function createPrune(): (input: T) => void;\r\nexport function createAssertPrune(): (input: T | unknown) => T;\r\nexport function createIsPrune(): (input: T | unknown) => T | null;\r\nexport function createValidatePrune(): (input: T | unknown) => IValidation;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nDeep prune functions.When you want to remove every extra properties that are not defined in the type including nested objects, you can use typia.misc.prune() function. Also, if you want to perform type safe pruning, you can use typia.misc.isPrune(), typia.misc.assertPrune() or typia.misc.validatePrune() functions instead.\ntypia.misc.isPrune(): typia.is() + typia.misc.prune()\ntypia.misc.assertPrune(): typia.assert() + typia.misc.prune()\ntypia.misc.validatePrune(): typia.validate() + typia.misc.prune()\nimport typia from \"typia\";\r\n\r\nconst department: IDepartment = typia.misc.random();\r\nconst pruned: IDepartment = typia.misc.assertPrune(department);\r\nconsole.log(pruned);\r\n\r\ninterface IDepartment {\r\n /**\r\n * @format uuid\r\n */\r\n id: string;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n name: string;\r\n\r\n /**\r\n * @type int\r\n */\r\n limit: number;\r\n\r\n clerks: IClerk[];\r\n}\r\ninterface IClerk {\r\n name: string;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n age: number;\r\n\r\n authority: number;\r\n\r\n /**\r\n * @format date\r\n */\r\n joined_at: string;\r\n}\n\r\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst department = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s; return ({\r\n id: (_d = (_c = (_b = ((_a = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _a !== void 0 ? _a : $generator.customs)) === null || _b === void 0 ? void 0 : _b.string) === null || _c === void 0 ? void 0 : _c.call(_b, [\r\n {\r\n name: \"format\",\r\n value: \"uuid\"\r\n }\r\n ])) !== null && _d !== void 0 ? _d : ((_e = generator === null || generator === void 0 ? void 0 : generator.uuid) !== null && _e !== void 0 ? _e : $generator.uuid)(),\r\n name: (_j = (_h = (_g = ((_f = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _f !== void 0 ? _f : $generator.customs)) === null || _g === void 0 ? void 0 : _g.string) === null || _h === void 0 ? void 0 : _h.call(_g, [\r\n {\r\n name: \"minLength\",\r\n value: \"3\"\r\n }\r\n ])) !== null && _j !== void 0 ? _j : ((_k = generator === null || generator === void 0 ? void 0 : generator.string) !== null && _k !== void 0 ? _k : $generator.string)(((_l = generator === null || generator === void 0 ? void 0 : generator.integer) !== null && _l !== void 0 ? _l : $generator.integer)(3, 25)),\r\n limit: (_q = (_p = (_o = ((_m = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _m !== void 0 ? _m : $generator.customs)) === null || _o === void 0 ? void 0 : _o.number) === null || _p === void 0 ? void 0 : _p.call(_o, [\r\n {\r\n name: \"type\",\r\n value: \"int\"\r\n }\r\n ])) !== null && _q !== void 0 ? _q : ((_r = generator === null || generator === void 0 ? void 0 : generator.integer) !== null && _r !== void 0 ? _r : $generator.integer)(0, 100),\r\n clerks: ((_s = generator === null || generator === void 0 ? void 0 : generator.array) !== null && _s !== void 0 ? _s : $generator.array)(() => $ro1(_recursive, _recursive ? 1 + _depth : _depth))\r\n }); };\r\n const $ro1 = (_recursive = false, _depth = 0) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v; return ({\r\n name: (_d = (_c = (_b = ((_a = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _a !== void 0 ? _a : $generator.customs)) === null || _b === void 0 ? void 0 : _b.string) === null || _c === void 0 ? void 0 : _c.call(_b, [])) !== null && _d !== void 0 ? _d : ((_e = generator === null || generator === void 0 ? void 0 : generator.string) !== null && _e !== void 0 ? _e : $generator.string)(),\r\n age: (_j = (_h = (_g = ((_f = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _f !== void 0 ? _f : $generator.customs)) === null || _g === void 0 ? void 0 : _g.number) === null || _h === void 0 ? void 0 : _h.call(_g, [\r\n {\r\n name: \"exclusiveMinimum\",\r\n value: \"19\"\r\n },\r\n {\r\n name: \"maximum\",\r\n value: \"100\"\r\n }\r\n ])) !== null && _j !== void 0 ? _j : ((_k = generator === null || generator === void 0 ? void 0 : generator.number) !== null && _k !== void 0 ? _k : $generator.number)(19, 100),\r\n authority: (_p = (_o = (_m = ((_l = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _l !== void 0 ? _l : $generator.customs)) === null || _m === void 0 ? void 0 : _m.number) === null || _o === void 0 ? void 0 : _o.call(_m, [])) !== null && _p !== void 0 ? _p : ((_q = generator === null || generator === void 0 ? void 0 : generator.number) !== null && _q !== void 0 ? _q : $generator.number)(0, 100),\r\n joined_at: (_u = (_t = (_s = ((_r = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _r !== void 0 ? _r : $generator.customs)) === null || _s === void 0 ? void 0 : _s.string) === null || _t === void 0 ? void 0 : _t.call(_s, [\r\n {\r\n name: \"format\",\r\n value: \"date\"\r\n }\r\n ])) !== null && _u !== void 0 ? _u : ((_v = generator === null || generator === void 0 ? void 0 : generator.date) !== null && _v !== void 0 ? _v : $generator.date)()\r\n }); };\r\n return $ro0();\r\n})();\r\nconst pruned = (input => { const assert = input => {\r\n const __is = input => {\r\n const $is_uuid = typia_1.default.assertPrune.is_uuid;\r\n const $is_date = typia_1.default.assertPrune.is_date;\r\n const $io0 = input => \"string\" === typeof input.id && $is_uuid(input.id) && (\"string\" === typeof input.name && 3 <= input.name.length) && (\"number\" === typeof input.limit && parseInt(input.limit) === input.limit) && (Array.isArray(input.clerks) && input.clerks.every(elem => \"object\" === typeof elem && null !== elem && $io1(elem)));\r\n const $io1 = input => \"string\" === typeof input.name && (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age) && \"number\" === typeof input.authority && (\"string\" === typeof input.joined_at && $is_date(input.joined_at));\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.assertPrune.guard;\r\n const $is_uuid = typia_1.default.assertPrune.is_uuid;\r\n const $is_date = typia_1.default.assertPrune.is_date;\r\n const $ao0 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.id && ($is_uuid(input.id) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string (@format uuid)\",\r\n value: input.id\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string\",\r\n value: input.id\r\n })) && (\"string\" === typeof input.name && (3 <= input.name.length || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string (@minLength 3)\",\r\n value: input.name\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name\r\n })) && (\"number\" === typeof input.limit && (parseInt(input.limit) === input.limit || $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: \"number (@type int)\",\r\n value: input.limit\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: \"number\",\r\n value: input.limit\r\n })) && ((Array.isArray(input.clerks) || $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks\r\n })) && input.clerks.every((elem, _index1) => (\"object\" === typeof elem && null !== elem || $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem\r\n })) && $ao1(elem, _path + \".clerks[\" + _index1 + \"]\", true && _exceptionable) || $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks\r\n }));\r\n const $ao1 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.name || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name\r\n })) && (\"number\" === typeof input.age && (19 < input.age || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number (@exclusiveMinimum 19)\",\r\n value: input.age\r\n })) && (100 >= input.age || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number (@maximum 100)\",\r\n value: input.age\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number\",\r\n value: input.age\r\n })) && (\"number\" === typeof input.authority || $guard(_exceptionable, {\r\n path: _path + \".authority\",\r\n expected: \"number\",\r\n value: input.authority\r\n })) && (\"string\" === typeof input.joined_at && ($is_date(input.joined_at) || $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: \"string (@format date)\",\r\n value: input.joined_at\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: \"string\",\r\n value: input.joined_at\r\n }));\r\n return (\"object\" === typeof input && null !== input || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input\r\n })) && $ao0(input, _path + \"\", true) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n}; const prune = input => {\r\n const $io1 = input => \"string\" === typeof input.name && (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age) && \"number\" === typeof input.authority && (\"string\" === typeof input.joined_at && $is_date(input.joined_at));\r\n const $is_uuid = typia_1.default.assertPrune.is_uuid;\r\n const $is_date = typia_1.default.assertPrune.is_date;\r\n const $pp0 = input => input.forEach(elem => {\r\n if (\"object\" === typeof elem && null !== elem)\r\n $po1(elem);\r\n });\r\n const $po0 = input => {\r\n if (Array.isArray(input.clerks))\r\n $pp0(input.clerks);\r\n for (const key of Object.keys(input)) {\r\n if (\"id\" === key || \"name\" === key || \"limit\" === key || \"clerks\" === key)\r\n continue;\r\n delete input[key];\r\n }\r\n };\r\n const $po1 = input => {\r\n for (const key of Object.keys(input)) {\r\n if (\"name\" === key || \"age\" === key || \"authority\" === key || \"joined_at\" === key)\r\n continue;\r\n delete input[key];\r\n }\r\n };\r\n if (\"object\" === typeof input && null !== input)\r\n $po0(input);\r\n}; assert(input); prune(input); return input; })(department);\r\nconsole.log(pruned);","literals-function#literals() function":"export namespace misc {\r\n export function literals<\r\n T extends boolean | number | string | bigint | null\r\n >(): T[];\r\n}\nUnion literal type to array.When you call typia.misc.literals() function with union literal type, it returns an array of literal values listed in the generic T argument. This typia.misc.literals function is useful when you are developing test program, especially handling some discriminated union types.\nimport typia from \"typia\";\r\n\r\ntypia.misc.literals<\"A\" | \"B\" | \"C\" | 1 | 2n>();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n[\r\n \"A\",\r\n \"B\",\r\n \"C\",\r\n 1,\r\n BigInt(2)\r\n];","notations-module#notations module":"","camel-functions#camel() functions":"export namespace notations {\r\n export function camel(input: T): CamelCase;\r\n export function assertCamel(input: T | unknown): CamelCase;\r\n export function isCamel(input: T | unknown): CamelCase | null;\r\n export function validateCamel(input: T | unknown): IValidation>;\r\n\r\n export function createCamel(): (input: T) => CamelCase;\r\n export function createAssertCamel(): (input: T | unknown) => CamelCase;\r\n export function createIsCamel(): (input: T | unknown) => CamelCase | null;\r\n export function createValidateCamel(): (\r\n input: T | unknown\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Camel case type.\r\n *\r\n * `CamelCase` type is a type that all keys of an object are camelized.\r\n *\r\n * It also erase every method properties like {@link Resolved} type.\r\n *\r\n * @template T Target type to be camelized\r\n * @author Jeongho Nam - https://github.com/samchon\r\n */\r\nexport type CamelCase = Equal> extends true\r\n ? T\r\n : CamelizeMain;\r\n\r\n/* -----------------------------------------------------------\r\n OBJECT CONVERSION\r\n----------------------------------------------------------- */\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype CamelizeMain = T extends [never]\r\n ? never // special trick for (jsonable | null) type\r\n : T extends { valueOf(): boolean | bigint | number | string }\r\n ? ValueOf\r\n : T extends Function\r\n ? never\r\n : T extends object\r\n ? CamelizeObject\r\n : T;\r\n\r\ntype CamelizeObject = T extends Array\r\n ? IsTuple extends true\r\n ? CamelizeTuple\r\n : CamelizeMain[]\r\n : T extends Set\r\n ? Set>\r\n : T extends Map\r\n ? Map, CamelizeMain>\r\n : T extends WeakSet | WeakMap\r\n ? never\r\n : T extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? T\r\n : {\r\n [Key in keyof T as CamelizeString]: CamelizeMain<\r\n T[Key]\r\n >;\r\n };\r\n\r\n/* -----------------------------------------------------------\r\n SPECIAL CASES\r\n----------------------------------------------------------- */\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\ntype CamelizeTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [CamelizeMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [CamelizeMain, ...CamelizeTuple]\r\n : T extends [(infer F)?]\r\n ? [CamelizeMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [CamelizeMain?, ...CamelizeTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\n/* -----------------------------------------------------------\r\n STRING CONVERTER\r\n----------------------------------------------------------- */\r\ntype CamelizeString = Key extends `${infer F}${infer R}`\r\n ? `${Lowercase}${CamelizeStringRepeatedly}`\r\n : Key;\r\ntype CamelizeStringRepeatedly =\r\n Key extends `${infer F}_${infer R}`\r\n ? `${F}${Capitalize>}`\r\n : Key;\nCamel case converters.Convert every property names of nested objects to be camel case notation.When you need type safe functions, you can utilize below them.\ntypia.notations.assertCamel(): typia.assert() + typia.notations.camel()\ntypia.notations.isCamel: typia.is() + typia.notations.camel()\ntypia.notations.validateCamel: typia.validate() + typia.notations.camel()\nimport typia from \"typia\";\r\n\r\ninterface IPerson {\r\n is_my_name_samchon?: boolean;\r\n HelloTheNewWorld: string;\r\n ToHTML: string;\r\n}\r\ntypia.notations.createCamel();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $co0 = input => ({\r\n isMyNameSamchon: input.is_my_name_samchon,\r\n helloTheNewWorld: input.HelloTheNewWorld,\r\n toHTML: input.ToHTML\r\n });\r\n return \"object\" === typeof input && null !== input ? $co0(input) : input;\r\n};","pascal-functions#pascal() functions":"export namespace notations {\r\n export function pascal(input: T): PascalCase;\r\n export function assertPascal(input: T | unknown): PascalCase;\r\n export function isPascal(input: T | unknown): PascalCase | null;\r\n export function validatePascal(input: T | unknown): IValidation>;\r\n\r\n export function createPascal(): (input: T) => PascalCase;\r\n export function createAssertPascal(): (input: T | unknown) => PascalCase;\r\n export function createIsPascal(): (input: T | unknown) => PascalCase | null;\r\n export function createValidatePascal(): (\r\n input: T | unknown\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Pascal case type.\r\n *\r\n * `PascalCase` type is a type that all keys of an object are pascalized.\r\n *\r\n * It also erase every method properties like {@link Resolved} type.\r\n *\r\n * @template T Target type to be pascalized\r\n * @author Jeongho Nam - https://github.com/samchon\r\n */\r\nexport type PascalCase = Equal> extends true\r\n ? T\r\n : PascalizeMain;\r\n\r\n/* -----------------------------------------------------------\r\n OBJECT CONVERSION\r\n----------------------------------------------------------- */\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype PascalizeMain = T extends [never]\r\n ? never // special trick for (jsonable | null) type\r\n : T extends { valueOf(): boolean | bigint | number | string }\r\n ? ValueOf\r\n : T extends Function\r\n ? never\r\n : T extends object\r\n ? PascalizeObject\r\n : T;\r\n\r\ntype PascalizeObject = T extends Array\r\n ? IsTuple extends true\r\n ? PascalizeTuple\r\n : PascalizeMain[]\r\n : T extends Set\r\n ? Set>\r\n : T extends Map\r\n ? Map, PascalizeMain>\r\n : T extends WeakSet | WeakMap\r\n ? never\r\n : T extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? T\r\n : {\r\n [Key in keyof T as PascalizeString]: PascalizeMain<\r\n T[Key]\r\n >;\r\n };\r\n\r\n/* -----------------------------------------------------------\r\n SPECIAL CASES\r\n----------------------------------------------------------- */\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\ntype PascalizeTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [PascalizeMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [PascalizeMain, ...PascalizeTuple]\r\n : T extends [(infer F)?]\r\n ? [PascalizeMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [PascalizeMain?, ...PascalizeTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\n/* -----------------------------------------------------------\r\n STRING CONVERTER\r\n----------------------------------------------------------- */\r\ntype PascalizeString = Key extends `${infer F}${infer R}`\r\n ? `${Uppercase}${PascalizeStringRepeatedly}`\r\n : Key;\r\ntype PascalizeStringRepeatedly =\r\n Key extends `${infer F}_${infer R}`\r\n ? `${F}${Capitalize>}`\r\n : Key;\nPascal case converters.Convert every property names of nested objects to be pascal case notation.When you need type safe functions, you can utilize below them.\ntypia.notations.assertPascal(): typia.assert() + typia.notations.pascal()\ntypia.notations.isPascal: typia.is() + typia.notations.pascal()\ntypia.notations.validatePascal: typia.validate() + typia.notations.pascal()\nimport typia from \"typia\";\r\n\r\ninterface IPerson {\r\n is_my_name_samchon?: boolean;\r\n helloTheNewWorld: string;\r\n toHTML: string;\r\n}\r\ntypia.notations.createPascal();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $co0 = input => ({\r\n IsMyNameSamchon: input.is_my_name_samchon,\r\n HelloTheNewWorld: input.helloTheNewWorld,\r\n ToHTML: input.toHTML\r\n });\r\n return \"object\" === typeof input && null !== input ? $co0(input) : input;\r\n};","snake-functions#snake() functions":"export namespace notations {\r\n export function snake(input: T): SnakeCase;\r\n export function assertSnake(input: T | unknown): SnakeCase;\r\n export function isSnake(input: T | unknown): SnakeCase | null;\r\n export function validateSnake(input: T | unknown): IValidation>;\r\n\r\n export function createSnake(): (input: T) => SnakeCase;\r\n export function createAssertSnake(): (input: T | unknown) => SnakeCase;\r\n export function createIsSnake(): (input: T | unknown) => SnakeCase | null;\r\n export function createValidateSnake(): (\r\n input: T | unknown\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Snake case type.\r\n *\r\n * `SnakeCase` type is a type that all keys of an object are converted to snake case.\r\n *\r\n * It also erase every method properties like {@link Resolved} type.\r\n *\r\n * @template T Target type to be snake cased\r\n * @author Jeongho Nam - https://github.com/samchon\r\n */\r\nexport type SnakeCase = Equal> extends true\r\n ? T\r\n : SnakageMain;\r\n\r\n/* -----------------------------------------------------------\r\n OBJECT CONVERSION\r\n----------------------------------------------------------- */\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype SnakageMain = T extends [never]\r\n ? never // special trick for (jsonable | null) type\r\n : T extends { valueOf(): boolean | bigint | number | string }\r\n ? ValueOf\r\n : T extends Function\r\n ? never\r\n : T extends object\r\n ? SnakageObject\r\n : T;\r\n\r\ntype SnakageObject = T extends Array\r\n ? IsTuple extends true\r\n ? SnakageTuple\r\n : SnakageMain[]\r\n : T extends Set\r\n ? Set>\r\n : T extends Map\r\n ? Map, SnakageMain>\r\n : T extends WeakSet | WeakMap\r\n ? never\r\n : T extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? T\r\n : {\r\n [Key in keyof T as SnakageString]: SnakageMain;\r\n };\r\n\r\n/* -----------------------------------------------------------\r\n SPECIAL CASES\r\n----------------------------------------------------------- */\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\ntype SnakageTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [SnakageMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [SnakageMain, ...SnakageTuple]\r\n : T extends [(infer F)?]\r\n ? [SnakageMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [SnakageMain?, ...SnakageTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\n/* -----------------------------------------------------------\r\n STRING CONVERTER\r\n----------------------------------------------------------- */\r\ntype SnakageString = Key extends `${infer _}`\r\n ? SnakageStringRepeatedly\r\n : Key;\r\ntype SnakageStringRepeatedly<\r\n S extends string,\r\n Previous extends string,\r\n> = S extends `${infer First}${infer Second}${infer Rest}`\r\n ? `${Underscore}${Lowercase}${Underscore<\r\n First,\r\n Second\r\n >}${Lowercase}${SnakageStringRepeatedly}`\r\n : S extends `${infer First}`\r\n ? `${Underscore}${Lowercase}`\r\n : \"\";\r\ntype Underscore = First extends\r\n | UpperAlphabetic\r\n | \"\"\r\n | \"_\"\r\n ? \"\"\r\n : Second extends UpperAlphabetic\r\n ? \"_\"\r\n : \"\";\r\ntype UpperAlphabetic =\r\n | \"A\"\r\n | \"B\"\r\n | \"C\"\r\n | \"D\"\r\n | \"E\"\r\n | \"F\"\r\n | \"G\"\r\n | \"H\"\r\n | \"I\"\r\n | \"J\"\r\n | \"K\"\r\n | \"L\"\r\n | \"M\"\r\n | \"N\"\r\n | \"O\"\r\n | \"P\"\r\n | \"Q\"\r\n | \"R\"\r\n | \"S\"\r\n | \"T\"\r\n | \"U\"\r\n | \"V\"\r\n | \"W\"\r\n | \"X\"\r\n | \"Y\"\r\n | \"Z\";\nSnake case converters.Convert every property names of nested objects to be snake case notation.When you need type safe functions, you can utilize below them.\ntypia.notations.assertSnake(): typia.assert() + typia.notations.snake()\ntypia.notations.isSnake: typia.is() + typia.notations.snake()\ntypia.notations.validateSnake: typia.validate() + typia.notations.snake()\nimport typia from \"typia\";\r\n\r\ninterface IPerson {\r\n isMyNameSamchon?: boolean;\r\n HelloTheNewWorld: string;\r\n ToHTML: string;\r\n}\r\ntypia.notations.createSnake();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $co0 = input => ({\r\n is_my_name_samchon: input.isMyNameSamchon,\r\n hello_the_new_world: input.HelloTheNewWorld,\r\n to_html: input.ToHTML\r\n });\r\n return \"object\" === typeof input && null !== input ? $co0(input) : input;\r\n};","http-module#http module":"Nestia Supporting\nhttp module has been designed to support the nestia project.\nquery() functions -> @TypedQuery()\nheaders() functions -> @TypedHeaders()\nparameter() function -> @TypedParam()","query-functions#query() functions":"export namespace http {\r\n export function query(input: Query): Resolved;\r\n export function assertQuery(input: Query): Resolved;\r\n export function isQuery(input: Query): Resolved | null;\r\n export function validateQuery(\r\n input: Query\r\n ): IValidation>;\r\n\r\n export function createQuery(): (input: Query) => Resolved;\r\n export function createAssertQuery(): (\r\n input: Query\r\n ) => Resolved;\r\n export function createIsQuery(): (\r\n input: Query\r\n ) => Resolved | null;\r\n export function createValidateQuery(): (\r\n input: Query\r\n ) => IValidation>;\r\n}\r\ntype Query = string | URLSearchParams;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nURL query decoder functions.typia.http.query() is a function decoding a query string or an URLSearchParams instance, with automatic type casting to the expected type. When property type be defined as boolean or number type, typia.http.query() will cast the value to the expected type when decoding.By the way, as URL query is not enough to express complex data structures, typia.http.query() function has some limitations. If target type T is not following those restrictions, compilation errors would be occured.\nType T must be an object type\nDo not allow dynamic property\nOnly boolean, bigint, number, string or their array types are allowed\nBy the way, union type never be not allowed\nAlso, typia.http.query() function does not perform validation about the decoded value. Therefore, if you can't sure that input data is following the T type, it would better to call one of below functions intead.\ntypia.http.assertQuery(): typia.assert() + typia.http.query()\ntypia.http.isQuery(): typia.is() + typia.http.query()\ntypia.http.validateQuery(): typia.validate() + typia.http.query()\nimport typia from \"typia\";\r\n\r\ninterface IQuery {\r\n limit?: number;\r\n enforce: boolean;\r\n values?: string[];\r\n atomic: string | null;\r\n indexes: number[];\r\n}\r\ntypia.http.createQuery();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $params = typia_1.default.http.createQuery.params;\r\n const $number = typia_1.default.http.createQuery.number;\r\n const $boolean = typia_1.default.http.createQuery.boolean;\r\n const $string = typia_1.default.http.createQuery.string;\r\n const $array = typia_1.default.http.createQuery.array;\r\n input = $params(input);\r\n const output = {\r\n limit: $number(input.get(\"limit\")) ?? undefined,\r\n enforce: $boolean(input.get(\"enforce\")),\r\n values: $array(input.getAll(\"values\").map(elem => $string(elem)), undefined),\r\n atomic: $string(input.get(\"atomic\")),\r\n indexes: input.getAll(\"indexes\").map(elem => $number(elem))\r\n };\r\n return output;\r\n};","headers-functions#headers() functions":"export namespace http {\r\n export function headers(input: Headers): Resolved;\r\n export function assertHeaders(input: Headers): Resolved;\r\n export function isHeaders(input: Headers): Resolved | null;\r\n export function validateHeaders(\r\n input: Headers\r\n ): IValidation>;\r\n\r\n export function createHeaders(): (\r\n input: Headers\r\n ) => Resolved;\r\n export function createAssertHeaders(): (\r\n input: Headers\r\n ) => Resolved;\r\n export function createIsHeaders(): (\r\n input: Headers\r\n ) => Resolved | null;\r\n export function createValidateHeaders(): (\r\n input: Headers\r\n ) => IValidation>;\r\n}\r\ntype Headers = Record;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nHeaders decoder (for express and fastify).typia.http.headers() is a function decoding an header instance, with automatic type casting to the expected type. When property type be defined as boolean or number type, typia.http.headers() will cast the value to the expected type.By the way, as HTTP headers are not enough to express complex data structures, typia.http.headers() function has some limitations. If target type T is not following those restrictions, compilation errors would be occured.\nType T must be an object type\nDo not allow dynamic property\nProperty key must be lower case\nProperty value cannot be null, but undefined is possible\nOnly boolean, bigint, number, string or their array types are allowed\nBy the way, union type never be not allowed\nProperty set-cookie must be array type\nThose properties cannot be array type\nage\nauthorization\ncontent-length\ncontent-type\netag\nexpires\nfrom\nhost\nif-modified-since\nif-unmodified-since\nlast-modified\nlocation\nmax-forwards\nproxy-authorization\nreferer\nretry-after\nserver\nuser-agent\nAlso, typia.http.headers() function does not perform validation about the decoded value. Therefore, if you can't sure that input data is following the T type, it would better to call one of below functions intead.\ntypia.http.assertHeaders(): typia.assert() + typia.http.headers()\ntypia.http.isHeaders(): typia.is() + typia.http.headers()\ntypia.http.validateHeaders(): typia.validate() + typia.http.headers()\nimport typia from \"typia\";\r\n\r\ninterface IHeaders {\r\n \"x-Category\": \"x\" | \"y\" | \"z\";\r\n \"x-MEMO\"?: string;\r\n \"x-nAmE\"?: string;\r\n \"x-ValUes\": number[];\r\n \"x-FlAgS\": boolean[];\r\n \"X-Descriptions\": string[];\r\n}\r\ntypia.http.createHeaders();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $number = typia_1.default.http.createHeaders.number;\r\n const $boolean = typia_1.default.http.createHeaders.boolean;\r\n const $string = typia_1.default.http.createHeaders.string;\r\n const output = {\r\n \"x-Category\": input[\"x-category\"],\r\n \"x-MEMO\": input[\"x-memo\"],\r\n \"x-nAmE\": input[\"x-name\"],\r\n \"x-ValUes\": Array.isArray(input[\"x-values\"]) ? input[\"x-values\"].map($number) : input[\"x-values\"]?.split(\", \")?.map($number) ?? [],\r\n \"x-FlAgS\": Array.isArray(input[\"x-flags\"]) ? input[\"x-flags\"].map($boolean) : input[\"x-flags\"]?.split(\", \")?.map($boolean) ?? [],\r\n \"X-Descriptions\": Array.isArray(input[\"x-descriptions\"]) ? input[\"x-descriptions\"].map($string) : input[\"x-descriptions\"]?.split(\", \")?.map($string) ?? []\r\n };\r\n return output;\r\n};","parameter-functions#parameter() functions":"export namespace http {\r\n export function parameter(input: string): T;\r\n export function createParameter(): (\r\n input: string\r\n ) => T;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nURL path parameter decoder.typia.http.parameter() is a function decoding a path parameter, with automatic type casting to the expected type. When type T has beeen defined as boolean or number type, typia.http.parameter() will cast the value to the expected type.Also, typia.http.parameter() performs type assertion to the decoded value by combining with assert function. Therefore, when the decoded value is not following the T type, TypeGuardError would be thrown.\nimport typia, { tags } from \"typia\";\r\n\r\ntypia.http.createParameter>();\r\ntypia.http.createParameter>();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $string = typia_1.default.http.createParameter.string;\r\n const assert = input => {\r\n const __is = input => {\r\n return \"string\" === typeof input && /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.http.createParameter.guard;\r\n return \"string\" === typeof input && (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(input) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"string & Format<\\\"uuid\\\">\",\r\n value: input\r\n })) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"(string & Format<\\\"uuid\\\">)\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n };\r\n const value = $string(input);\r\n return assert(value);\r\n};\r\ninput => {\r\n const $number = typia_1.default.http.createParameter.number;\r\n const assert = input => {\r\n const __is = input => {\r\n return \"number\" === typeof input && (Math.floor(input) === input && 0 <= input && input <= 4294967295);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.http.createParameter.guard;\r\n return \"number\" === typeof input && (Math.floor(input) === input && 0 <= input && input <= 4294967295 || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"number & Type<\\\"uint32\\\">\",\r\n value: input\r\n })) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"(number & Type<\\\"uint32\\\">)\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n };\r\n const value = $number(input);\r\n return assert(value);\r\n};"}},"/docs/utilization/nestjs":{"title":"Nestjs","data":{"":"Nestia is a set of helper libraries for NestJS, supporting below features:\n@nestia/core: superfast decorators using typia\n@nestia/sdk: evolved SDK and Swagger generators\n@nestia/migrate: Swagger to NestJS\nnestia: just CLI (command line interface) tool\nimport { Controller } from \"@nestjs/common\";\r\nimport { TypedBody, TypedRoute } from \"@nestia/core\";\r\n\r\nimport type { IBbsArticle } from \"@bbs-api/structures/IBbsArticle\";\r\n\r\n@Controller(\"bbs/articles\")\r\nexport class BbsArticlesController {\r\n /** \r\n * Store a new content.\r\n * \r\n * @param input Content to store\r\n * @returns Newly archived article\r\n */\r\n @TypedRoute.Post() // 200x faster and safer JSON.stringify()\r\n public async store(\r\n @TypedBody() input: IBbsArticle.IStore // 20,000x faster validator\r\n ): Promise; \r\n // do not need DTO class definition, \r\n // just fine with interface\r\n}\nLeft: NestJS server code\nRight: Client code using SDK"}},"/docs/utilization/prisma":{"title":"Prisma","data":{"":"model bbs_articles {\r\n id String @id @db.Uuid /// @format uuid\r\n created_at DateTime @db.Timestamptz\r\n\r\n /// @minItems 1\r\n snapshots bbs_article_snapshots[]\r\n}\r\n\r\nmodel bbs_article_snapshots {\r\n id String @id @db.Uuid /// @format uuid\r\n bbs_article_id String @db.Uuid /// @format uuid\r\n format String @db.VarChar\r\n\r\n /// @minLength 5\r\n /// @maxLength 80\r\n title String @db.VarChar\r\n body String\r\n created_at DateTime @db.Timestamptz\r\n\r\n article bbs_articles @relation(fields: [bbs_article_id], references: [id])\r\n}\n/**\r\n * Model bbs_articles\r\n */\r\nexport type bbs_articles = {\r\n /**\r\n * @format uuid\r\n */\r\n id: string\r\n created_at: Date\r\n}\r\n\r\n/**\r\n * Model bbs_article_snapshots\r\n */\r\nexport type bbs_article_snapshots = {\r\n /**\r\n * @format uuid\r\n */\r\n id: string\r\n /**\r\n * @format uuid\r\n */\r\n bbs_article_id: string\r\n format: string\r\n /**\r\n * @minLength 5\r\n * @maxLength 80\r\n */\r\n title: string\r\n body: string\r\n created_at: Date\r\n}\nWhen defining prisma.schema file, you can write comment tags just by using /// statement.After the definition, you utillize some validate function like typia.assert(), for type safe insertion."}},"/":{"title":"Index","data":{"key-features#Key Features":"","sponsors#Sponsors":"Thanks for your support.Your donation would encourage typia development."}},"/playground":{"title":"Index","data":{}},"/docs/json/stringify":{"title":"Stringify","data":{"stringify-functions#stringify() functions":"export namespace json {\r\n export function stringify(input: T): string;\r\n export function isStringify(input: T | unknown): string | null;\r\n export function assertStringify(input: T | unknown): string;\r\n export function validateStringify(input: T | unknown): IValidation;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nYou can boost up JSON serialization speed just by calling typia.json.stringify() function. Also, you even can ensure type safety of JSON serialization by calling other functions like typia.json.isStringify() and typia.json.assertStringify() functions.As typia.json.stringify() function writes dedicated JSON serialization code only for the target type T, its performance is much faster than native JSON.stringify() function. However, because of the dedicated optimal JSON serialization code, when wrong typed data comes, unexpected error be occured.Instead, typia supports type safe JSON serialization functions like typia.json.isStringify(). The typia.json.isStringify() is a combination function of typia.is() and typia.json.stringify() function. It checks whether the input value is valid for the target type T or not first, and operate JSON serialization later. If the input value is not matched with the type T, it returns null value.\ntypia.json.isStringify(): typia.is() + typia.json.stringify()\ntypia.json.assertStringify(): typia.assert() + typia.json.stringify()\ntypia.json.validateStringify(): typia.validate() + typia.json.stringify()\nAOT compliation\ntypia.json.isStringify() and other similar functions are still much faster than native JSON.stringify() function, even though they include type checking process. This is the power of AOT compilation, writing optimal dedicated code by analyzing TypeScript type, in the compilation level.\nimport typia, { tags } from \"typia\";\r\n\r\nconst department: IDepartment = typia.random();\r\nconst json: string | null = typia.json.isStringify(department);\r\n\r\nconsole.log(json); // not null, but string\r\n\r\ninterface IDepartment {\r\n id: string & tags.Format<\"uuid\">;\r\n name: string & tags.MinLength<3>;\r\n limit: number & tags.Type<\"int32\">;\r\n clerks: IClerk[];\r\n}\r\ninterface IClerk {\r\n name: string;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n authority: number;\r\n joined_at: string & tags.Format<\"date\">;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst department = ((generator) => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: 'Format<\"uuid\">',\r\n kind: \"format\",\r\n value: \"uuid\",\r\n },\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n name:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"MinLength<3>\",\r\n kind: \"minLength\",\r\n value: 3,\r\n },\r\n ]) ??\r\n (generator?.string ?? $generator.string)(\r\n (generator?.integer ?? $generator.integer)(3, 25),\r\n ),\r\n limit:\r\n (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: 'Type<\"int32\">',\r\n kind: \"type\",\r\n value: \"int32\",\r\n },\r\n ]) ?? (generator?.integer ?? $generator.integer)(0, 100),\r\n clerks: (generator?.array ?? $generator.array)(() =>\r\n $ro1(_recursive, _recursive ? 1 + _depth : _depth),\r\n ),\r\n });\r\n const $ro1 = (_recursive = false, _depth = 0) => ({\r\n name:\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ??\r\n (generator?.string ?? $generator.string)(),\r\n age:\r\n (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: 'Type<\"uint32\">',\r\n kind: \"type\",\r\n value: \"uint32\",\r\n },\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19,\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100,\r\n },\r\n ]) ?? (generator?.integer ?? $generator.integer)(19, 100),\r\n authority:\r\n (generator?.customs ?? $generator.customs)?.number?.([]) ??\r\n (generator?.number ?? $generator.number)(0, 100),\r\n joined_at:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: 'Format<\"date\">',\r\n kind: \"format\",\r\n value: \"date\",\r\n },\r\n ]) ?? (generator?.date ?? $generator.date)(),\r\n });\r\n return $ro0();\r\n})();\r\nconst json = ((input) => {\r\n const is = (input) => {\r\n const $io0 = (input) =>\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.name &&\r\n 3 <= input.name.length &&\r\n \"number\" === typeof input.limit &&\r\n Math.floor(input.limit) === input.limit &&\r\n -2147483648 <= input.limit &&\r\n input.limit <= 2147483647 &&\r\n Array.isArray(input.clerks) &&\r\n input.clerks.every(\r\n (elem) =>\r\n \"object\" === typeof elem && null !== elem && $io1(elem),\r\n );\r\n const $io1 = (input) =>\r\n \"string\" === typeof input.name &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n \"number\" === typeof input.authority &&\r\n !Number.isNaN(input.authority) &&\r\n \"string\" === typeof input.joined_at &&\r\n /^(d{4})-(d{2})-(d{2})$/.test(input.joined_at);\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n const stringify = (input) => {\r\n const $io1 = (input) =>\r\n \"string\" === typeof input.name &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n \"number\" === typeof input.authority &&\r\n \"string\" === typeof input.joined_at &&\r\n /^(d{4})-(d{2})-(d{2})$/.test(input.joined_at);\r\n const $string = typia_1.default.json.isStringify.string;\r\n const $so0 = (input) =>\r\n `{\"id\":${$string(input.id)},\"name\":${$string(input.name)},\"limit\":${\r\n input.limit\r\n },\"clerks\":${`[${input.clerks\r\n .map(\r\n (elem) =>\r\n `{\"name\":${$string(elem.name)},\"age\":${\r\n elem.age\r\n },\"authority\":${elem.authority},\"joined_at\":${$string(\r\n elem.joined_at,\r\n )}}`,\r\n )\r\n .join(\",\")}]`}}`;\r\n return $so0(input);\r\n };\r\n return is(input) ? stringify(input) : null;\r\n})(department);\r\nconsole.log(json); // not null, but string","reusable-functions#Reusable functions":"export namespace json {\r\n export function createStringify: (input: T) => string;\r\n export function createIsStringify: (\r\n input: T | unknown\r\n ) => string | null;\r\n export function createAssertStringify: (\r\n input: T | unknown\r\n ) => string;\r\n export function createValidateStringify: (\r\n input: T | unknown\r\n ) => IValidation;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nReusable typia.json.stringify() function generators.If you repeat to call typia.json.stringify() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.json.createStringify() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const assertDepartment = typia.json.createAssertStringify();\r\n\r\ninterface IDepartment {\r\n id: string & tags.Format<\"uuid\">;\r\n name: string & tags.MinLength<3>;\r\n limit: number & tags.Type<\"int32\">;\r\n clerks: IClerk[];\r\n}\r\ninterface IClerk {\r\n name: string;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n authority: number;\r\n joined_at: string & tags.Format<\"date\">;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.assertDepartment = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst assertDepartment = (input) => {\r\n const assert = (input) => {\r\n const __is = (input) => {\r\n const $io0 = (input) =>\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.name &&\r\n 3 <= input.name.length &&\r\n \"number\" === typeof input.limit &&\r\n Math.floor(input.limit) === input.limit &&\r\n -2147483648 <= input.limit &&\r\n input.limit <= 2147483647 &&\r\n Array.isArray(input.clerks) &&\r\n input.clerks.every(\r\n (elem) =>\r\n \"object\" === typeof elem && null !== elem && $io1(elem),\r\n );\r\n const $io1 = (input) =>\r\n \"string\" === typeof input.name &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n \"number\" === typeof input.authority &&\r\n !Number.isNaN(input.authority) &&\r\n \"string\" === typeof input.joined_at &&\r\n /^(d{4})-(d{2})-(d{2})$/.test(input.joined_at);\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.json.createAssertStringify.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.name &&\r\n (3 <= input.name.length ||\r\n $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string & MinLength<3>\",\r\n value: input.name,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"(string & MinLength<3>)\",\r\n value: input.name,\r\n })) &&\r\n ((\"number\" === typeof input.limit &&\r\n ((Math.floor(input.limit) === input.limit &&\r\n -2147483648 <= input.limit &&\r\n input.limit <= 2147483647) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: 'number & Type<\"int32\">',\r\n value: input.limit,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: '(number & Type<\"int32\">)',\r\n value: input.limit,\r\n })) &&\r\n (((Array.isArray(input.clerks) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks,\r\n })) &&\r\n input.clerks.every(\r\n (elem, _index1) =>\r\n (((\"object\" === typeof elem && null !== elem) ||\r\n $guard(_exceptionable, {\r\n path:\r\n _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem,\r\n })) &&\r\n $ao1(\r\n elem,\r\n _path + \".clerks[\" + _index1 + \"]\",\r\n true && _exceptionable,\r\n )) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem,\r\n }),\r\n )) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks,\r\n }));\r\n const $ao1 = (input, _path, _exceptionable = true) =>\r\n (\"string\" === typeof input.name ||\r\n $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n })) &&\r\n ((\"number\" === typeof input.authority &&\r\n !Number.isNaN(input.authority)) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".authority\",\r\n expected: \"number\",\r\n value: input.authority,\r\n })) &&\r\n ((\"string\" === typeof input.joined_at &&\r\n (/^(d{4})-(d{2})-(d{2})$/.test(input.joined_at) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: 'string & Format<\"date\">',\r\n value: input.joined_at,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: '(string & Format<\"date\">)',\r\n value: input.joined_at,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n };\r\n const stringify = (input) => {\r\n const $io1 = (input) =>\r\n \"string\" === typeof input.name &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n \"number\" === typeof input.authority &&\r\n \"string\" === typeof input.joined_at &&\r\n /^(d{4})-(d{2})-(d{2})$/.test(input.joined_at);\r\n const $string = typia_1.default.json.createAssertStringify.string;\r\n const $so0 = (input) =>\r\n `{\"id\":${$string(input.id)},\"name\":${$string(input.name)},\"limit\":${\r\n input.limit\r\n },\"clerks\":${`[${input.clerks\r\n .map(\r\n (elem) =>\r\n `{\"name\":${$string(elem.name)},\"age\":${\r\n elem.age\r\n },\"authority\":${elem.authority},\"joined_at\":${$string(\r\n elem.joined_at,\r\n )}}`,\r\n )\r\n .join(\",\")}]`}}`;\r\n return $so0(input);\r\n };\r\n return stringify(assert(input));\r\n};\r\nexports.assertDepartment = assertDepartment;","performance#Performance":"Comparing JSON serialization speed with others, it is maximum 200x faster than class-transformer.For reference, class-transformer is the most famous library used in NestJS with class-validator. Also, fast-json-stringify is another famous one used in fastify. However, whether they are fast or slow, both of them require extra schema definition, that is different with TypeScript type. If you see the code below without experience of them, you may get shocked: how complicate and inefficient they are:\nfast-json-stringify requires JSON schema definition.\nclass-validator requires DTO class with decorator function calls.\nMeasured on Intel i5-1135g7, Surface Pro 8","server-performance#Server Performance":"Someone may ask:\nJSON serialization speed affects on the server performance?I think that the JSON serialization is just a tiny thing in the server side, isn't it?\nMy answer is, \"Yes, it affects on the server performance\".Most operations in NodeJS server are asynchronously executed in background thread, what are called \"event based non-blocking I/O model\". However, JSON serialization is a synchronous operation running on the main thread. Therefore, if the JSON serialization speed is slow, it makes the entire server program slow.I'll show you the benchmark result that, how JSON serizliation speed affects on the server performance.\nMeasured on Intel i5-1135g7, Surface Pro 8"}},"/docs/json/schema":{"title":"Schema","data":{"application-function#application() function":"export namespace json {\r\n export function application<\r\n Schemas extends unknown[],\r\n Purpose extends \"ajv\" | \"swagger\" = \"swagger\",\r\n Surplus extends boolean = false,\r\n >(): IJsonApplication;\r\n}\nexport interface IJsonApplication {\r\n schemas: IJsonSchema[];\r\n components: IJsonComponents;\r\n purpose: \"swagger\" | \"ajv\";\r\n surplus: boolean;\r\n}\nexport interface IJsonComponents {\r\n schemas: Record;\r\n}\r\nexport namespace IJsonComponents {\r\n export type IAlias = IJsonSchema & IIndentified;\r\n interface IIdentified {\r\n $id?: undefined | string;\r\n $recursiveAnchor?: undefined | boolean;\r\n }\r\n}\nexport type IJsonSchema = IJsonSchema.NotUnknown | IJsonSchema.IUnknown;\r\nexport namespace IJsonSchema {\r\n export type NotUnknown =\r\n | IEnumeration<\"boolean\">\r\n | IEnumeration<\"number\">\r\n | IEnumeration<\"string\">\r\n | IBoolean\r\n | IInteger\r\n | INumber\r\n | IString\r\n | IArray\r\n | ITuple\r\n | IObject\r\n | IReference\r\n | INullOnly\r\n | IOneOf;\r\n\r\n /* -----------------------------------------------------------\r\n ATOMICS\r\n ----------------------------------------------------------- */\r\n export interface IEnumeration<\r\n Literal extends Exclude,\r\n > extends IAtomic {\r\n enum: Array;\r\n }\r\n export interface IAtomic>\r\n extends ISignificant {\r\n default?: Atomic.Mapper[Literal];\r\n }\r\n export interface IString extends IAtomic<\"string\"> {\r\n /**\r\n * @type uint\r\n */\r\n minLength?: number;\r\n /**\r\n * @type uint\r\n */\r\n maxLength?: number;\r\n pattern?: string;\r\n format?: string;\r\n }\r\n export interface INumber extends IAtomic<\"number\"> {\r\n minimum?: number;\r\n maximum?: number;\r\n exclusiveMinimum?: boolean;\r\n exclusiveMaximum?: boolean;\r\n multipleOf?: number;\r\n }\r\n export interface IInteger extends IAtomic<\"integer\"> {\r\n /**\r\n * @type int\r\n */\r\n minimum?: number;\r\n /**\r\n * @type int\r\n */\r\n maximum?: number;\r\n exclusiveMinimum?: boolean;\r\n exclusiveMaximum?: boolean;\r\n /**\r\n * @type int\r\n */\r\n multipleOf?: number;\r\n }\r\n export interface IBoolean extends IAtomic<\"boolean\"> {}\r\n\r\n /* -----------------------------------------------------------\r\n OBJECTS\r\n ----------------------------------------------------------- */\r\n export interface IArray extends ISignificant<\"array\"> {\r\n items: IJsonSchema;\r\n /**\r\n * @type uint\r\n */\r\n minItems?: number;\r\n /**\r\n * @type uint\r\n */\r\n maxItems?: number;\r\n \"x-typia-tuple\"?: ITuple;\r\n }\r\n export interface ITuple extends ISignificant<\"array\"> {\r\n items: IJsonSchema[];\r\n }\r\n export interface IObject extends ISignificant<\"object\"> {\r\n properties: Record;\r\n required?: undefined | string[];\r\n patternProperties?: undefined | Record;\r\n additionalProperties?: undefined | IJsonSchema;\r\n \"x-typia-patternProperties\"?: undefined | Record;\r\n \"x-typia-additionalProperties\"?: undefined | IJsonSchema;\r\n }\r\n export interface IReference extends IAttribute {\r\n $ref: string;\r\n }\r\n export interface IRecursiveReference extends IAttribute {\r\n $recursiveRef: string;\r\n }\r\n export interface INullOnly extends IAttribute {\r\n type: \"null\";\r\n }\r\n\r\n /* -----------------------------------------------------------\r\n MISCELLANEOUS\r\n ----------------------------------------------------------- */\r\n export interface IOneOf extends IAttribute {\r\n oneOf: IJsonSchema[];\r\n }\r\n export interface IUnknown {\r\n type: undefined;\r\n }\r\n\r\n export interface ISignificant extends IAttribute {\r\n type: Literal;\r\n nullable: boolean;\r\n }\r\n export interface IAttribute {\r\n deprecated?: boolean;\r\n title?: string;\r\n description?: string;\r\n \"x-typia-jsDocTags\"?: IJsDocTagInfo[];\r\n \"x-typia-required\"?: boolean;\r\n \"x-typia-rest\"?: boolean;\r\n }\r\n}\nJSON schema generator.\nDefinitions:\nIJsonApplication\nIJsonComponents\nIJsonSchema\nWhen you need JSON schema, do not write it by yourself, but just call typia.application() function.If you call the typia.application() with specialization of target Schemas, typia will analyze your Schemas and generate JSON schema definition in the compilation level. However, note that, JSON schema definitions of AJV and Swagger are a little bit different. Therefore, you have to consider which value to assign in the Purpose argument.\nSwagger can't express tuple type\nSwagger can't express pattern property\nimport typia, { tags } from \"typia\";\r\n\r\nexport const MemberSchema = typia.application<[IMember], \"ajv\">();\r\n\r\ninterface IMember {\r\n /**\r\n * Unique user ID generated by server.\r\n */\r\n id: string & tags.Format<\"uuid\">;\r\n\r\n /**\r\n * Email address of the member.\r\n */\r\n email: string & tags.Format<\"email\">;\r\n\r\n /**\r\n * Age of the member.\r\n * \r\n * For reference, only adult can be a member.\r\n */\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MemberSchema = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nexports.MemberSchema = {\r\n schemas: [\r\n {\r\n $ref: \"#/components/schemas/IMember\"\r\n }\r\n ],\r\n components: {\r\n schemas: {\r\n IMember: {\r\n $id: \"#/components/schemas/IMember\",\r\n type: \"object\",\r\n properties: {\r\n id: {\r\n description: \"Unique user ID generated by server.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n email: {\r\n description: \"Email address of the member.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n age: {\r\n description: \"Age of the member.\\n\\nFor reference, only adult can be a member.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n }\r\n },\r\n required: [\r\n \"id\",\r\n \"email\",\r\n \"age\"\r\n ],\r\n \"x-typia-jsDocTags\": []\r\n }\r\n }\r\n },\r\n purpose: \"ajv\"\r\n};","specialization#Specialization":"You can utilize type tags (or validator's comment tags) to constructing special fields of JSON schema.If you write any comment on a property, it would fill the IJsonSchema.description value. Also, there're special comment tags only for JSON schema definition that are different with validator's comment tags like below.\n@deprecated\n@hidden\n@internal\n@title {string}\n@default {value}\nLet's see how those type tags, comment tags and description comments are working with example code.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const SpecialTagSchema = typia.json.application<[Special], \"swagger\">();\r\n\r\ninterface Special {\r\n /**\r\n * Deprecated tags are just used for marking.\r\n * \r\n * @title Unsigned integer\r\n * @deprecated\r\n */\r\n type: number & tags.Type<\"int32\">;\r\n\r\n /**\r\n * Internal tagged property never be shown in JSON schema.\r\n * \r\n * It even doesn't be shown in other `typia` functions like `assert()`.\r\n * \r\n * @internal\r\n */\r\n internal: number[];\r\n\r\n /**\r\n * Hidden tagged property never be shown in JSON schema.\r\n * \r\n * However, it would be shown in other `typia` functions like `stringify()`.\r\n * \r\n * @hidden\r\n */\r\n hidden: boolean;\r\n\r\n /**\r\n * You can limit the range of number.\r\n * \r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n * @default 30\r\n */\r\n number?: number;\r\n\r\n /**\r\n * You can limit the length of string.\r\n * \r\n * Also, multiple range conditions are also possible.\r\n */\r\n string: string & (\r\n | (tags.MinLength<3> & tags.MaxLength<24>)\r\n | (tags.MinLength<40> & tags.MaxLength<100>)\r\n );\r\n\r\n /**\r\n * You can limit the pattern of string.\r\n * \r\n * @pattern ^[a-z]+$\r\n */\r\n pattern: string;\r\n\r\n /**\r\n * You can limit the format of string.\r\n * \r\n * @format date-time\r\n */\r\n format: string | null;\r\n \r\n /**\r\n * In the Array case, possible to restrict its elements.\r\n */\r\n array: Array> & tags.MinItems<3>;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SpecialTagSchema = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nexports.SpecialTagSchema = {\r\n schemas: [\r\n {\r\n $ref: \"#/components/schemas/Special\"\r\n }\r\n ],\r\n components: {\r\n schemas: {\r\n Special: {\r\n type: \"object\",\r\n properties: {\r\n type: {\r\n deprecated: true,\r\n title: \"Unsigned integer\",\r\n description: \"Deprecated tags are just used for marking.\",\r\n type: \"integer\"\r\n },\r\n number: {\r\n description: \"You can limit the range of number.\",\r\n type: \"number\",\r\n minimum: 19,\r\n exclusiveMinimum: true,\r\n maximum: 100,\r\n \"default\": 30\r\n },\r\n string: {\r\n oneOf: [\r\n {\r\n description: \"You can limit the length of string.\\n\\nAlso, multiple range conditions are also possible.\",\r\n type: \"string\",\r\n maxLength: 24,\r\n minLength: 3\r\n },\r\n {\r\n description: \"You can limit the length of string.\\n\\nAlso, multiple range conditions are also possible.\",\r\n type: \"string\",\r\n maxLength: 100,\r\n minLength: 40\r\n }\r\n ],\r\n description: \"You can limit the length of string.\\n\\nAlso, multiple range conditions are also possible.\"\r\n },\r\n pattern: {\r\n description: \"You can limit the pattern of string.\",\r\n type: \"string\",\r\n pattern: \"^[a-z]+$\"\r\n },\r\n format: {\r\n description: \"You can limit the format of string.\",\r\n type: \"string\",\r\n format: \"date-time\",\r\n nullable: true\r\n },\r\n array: {\r\n description: \"In the Array case, possible to restrict its elements.\",\r\n type: \"array\",\r\n items: {\r\n description: \"In the Array case, possible to restrict its elements.\",\r\n type: \"string\",\r\n format: \"uuid\"\r\n },\r\n minItems: 3\r\n }\r\n },\r\n nullable: false,\r\n required: [\r\n \"type\",\r\n \"string\",\r\n \"pattern\",\r\n \"format\",\r\n \"array\"\r\n ]\r\n }\r\n }\r\n },\r\n purpose: \"swagger\"\r\n};","restrictions#Restrictions":"JSON schema does not support bigint type.So if you use bigint type in one of your onetarget schemas, typia will make compile error like below.\nimport typia, { tags } from \"typia\";\r\n\r\ninterface Something {\r\n bigint: bigint;\r\n array: bigint[];\r\n nested: Nested;\r\n}\r\ninterface Nested {\r\n uint64: bigint & tags.Type<\"uint64\">;\r\n}\r\n\r\ntypia.json.application<[Something], \"ajv\">();\nmain.ts:12:1 - error TS(typia.json.application): unsupported type detected\r\n\r\n- Something.bigint: bigint\r\n - JSON does not support bigint type.\r\n\r\n- Something.array: bigint\r\n - JSON does not support bigint type.\r\n\r\n- Nested.uint64: (bigint & Type<\"uint64\">)\r\n - JSON does not support bigint type.\nAlso, if you put any type of native classes like Map or Uint8Array, it would be considered as an empty object. By the way, only Date class is exceptional, and it would be considered as string & Format<\"date-time\"> type like below.\nimport typia from \"typia\";\r\n\r\ninterface Native {\r\n date: Date;\r\n bytes: Uint8Array;\r\n map: Map;\r\n}\r\ntypia.json.application<[Native], \"ajv\">();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n({\r\n schemas: [\r\n {\r\n $ref: \"#/components/schemas/Native\"\r\n }\r\n ],\r\n components: {\r\n schemas: {\r\n Native: {\r\n $id: \"#/components/schemas/Native\",\r\n type: \"object\",\r\n properties: {\r\n date: {\r\n type: \"string\",\r\n format: \"date-time\"\r\n },\r\n bytes: {\r\n $ref: \"#/components/objects/Uint8Array\"\r\n },\r\n map: {\r\n $ref: \"#/components/objects/Map\"\r\n }\r\n },\r\n required: [\r\n \"date\",\r\n \"bytes\",\r\n \"map\"\r\n ]\r\n },\r\n Uint8Array: {\r\n type: \"object\",\r\n $id: \"#/components/objects/Uint8Array\",\r\n properties: {}\r\n },\r\n Map: {\r\n type: \"object\",\r\n $id: \"#/components/objects/Map\",\r\n properties: {}\r\n }\r\n }\r\n },\r\n purpose: \"ajv\"\r\n});"}},"/docs/json/parse":{"title":"Parse","data":{"parse-functions#parse() functions":"export namespace json {\r\n export function isParse(input: string): Primitive | null;\r\n export function assertParse(input: string): Primitive;\r\n export function validateParse(\r\n input: string\r\n ): IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Primitive type of JSON.\r\n *\r\n * `Primitive` is a TMP (Type Meta Programming) type which converts\r\n * its argument as a primitive type within framework JSON.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be an empty object (`{}`).\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom method\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the primitive object.\r\n *\r\n * In addition, if the target argument is a type of custom class and it has a special\r\n * method `toJSON()`, return type of this `Primitive` would be not `Primitive`\r\n * but `Primitive>`.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `String` | `string`\r\n * `Class` | `object`\r\n * `Class` with `toJSON()` | `Primitive>`\r\n * Native Class | `{}`\r\n * Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n * @author Michael - https://github.com/8471919\r\n */\r\nexport type Primitive = Equal> extends true\r\n ? T\r\n : PrimitiveMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype PrimitiveMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends bigint\r\n ? never\r\n : ValueOf extends boolean | number | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : ValueOf extends object\r\n ? Instance extends object\r\n ? Instance extends NativeClass\r\n ? {}\r\n : Instance extends IJsonable\r\n ? ValueOf extends object\r\n ? Raw extends object\r\n ? PrimitiveObject // object would be primitified\r\n : never // cannot be\r\n : ValueOf // atomic value\r\n : PrimitiveObject // object would be primitified\r\n : never // cannot be\r\n : ValueOf;\r\n\r\ntype PrimitiveObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? PrimitiveTuple\r\n : PrimitiveMain[]\r\n : {\r\n [P in keyof Instance]: PrimitiveMain;\r\n };\r\n\r\ntype PrimitiveTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [PrimitiveMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [PrimitiveMain, ...PrimitiveTuple]\r\n : T extends [(infer F)?]\r\n ? [PrimitiveMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [PrimitiveMain?, ...PrimitiveTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype NativeClass =\r\n | Set\r\n | Map\r\n | WeakSet\r\n | WeakMap\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends U\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\ninterface IJsonable {\r\n toJSON(): T;\r\n}\nType safe JSON parser.Unlike native JSON.parse() function which returns any typed instance without type checking, typia.json.assertParse() function validates instance type after the parsing. If the parsed value is not following the promised type T, it throws TypeGuardError with the first type error info.If you want to know every type error infos detaily, you can use typia.json.validateParse() function instead. Otherwise, you just only want to know whether the parsed value is following the type T or not, just call typia.json.isParse() function.\ntypia.json.isParse(): JSON.parse() + typia.is()\ntypia.json.assertParse(): JSON.parse() + typia.assert()\ntypia.json.validateParse(): JSON.parse() + typia.validate()\nLook at the below code, then you may understand how the typia.json.assertParse() function works.\nimport typia, { tags } from \"typia\";\r\n\r\nconst json: string = JSON.stringify(typia.random());\r\nconst parsed: IMember = typia.json.assertParse(json);\r\n\r\nconsole.log(json === JSON.stringify(parsed)); // true\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst json = JSON.stringify(\r\n ((generator) => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: 'Format<\"uuid\">',\r\n kind: \"format\",\r\n value: \"uuid\",\r\n },\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n email:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: 'Format<\"email\">',\r\n kind: \"format\",\r\n value: \"email\",\r\n },\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n age:\r\n (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: 'Type<\"uint32\">',\r\n kind: \"type\",\r\n value: \"uint32\",\r\n },\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19,\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100,\r\n },\r\n ]) ?? (generator?.integer ?? $generator.integer)(19, 100),\r\n });\r\n return $ro0();\r\n })(),\r\n);\r\nconst parsed = ((input) => {\r\n const assert = (input) => {\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.json.assertParse.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n };\r\n input = JSON.parse(input);\r\n return assert(input);\r\n})(json);\r\nconsole.log(json === JSON.stringify(parsed)); // true\n/**\r\n * Primitive type of JSON.\r\n *\r\n * `Primitive` is a TMP (Type Meta Programming) type which converts\r\n * its argument as a primitive type within framework JSON.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be an empty object (`{}`).\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom method\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the primitive object.\r\n *\r\n * In addition, if the target argument is a type of custom class and it has a special\r\n * method `toJSON()`, return type of this `Primitive` would be not `Primitive`\r\n * but `Primitive>`.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `String` | `string`\r\n * `Class` | `object`\r\n * `Class` with `toJSON()` | `Primitive>`\r\n * Native Class | `{}`\r\n * Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n * @author Michael - https://github.com/8471919\r\n */\r\nexport type Primitive = Equal> extends true\r\n ? T\r\n : PrimitiveMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype PrimitiveMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends bigint\r\n ? never\r\n : ValueOf extends boolean | number | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : ValueOf extends object\r\n ? Instance extends object\r\n ? Instance extends NativeClass\r\n ? {}\r\n : Instance extends IJsonable\r\n ? ValueOf extends object\r\n ? Raw extends object\r\n ? PrimitiveObject // object would be primitified\r\n : never // cannot be\r\n : ValueOf // atomic value\r\n : PrimitiveObject // object would be primitified\r\n : never // cannot be\r\n : ValueOf;\r\n\r\ntype PrimitiveObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? PrimitiveTuple\r\n : PrimitiveMain[]\r\n : {\r\n [P in keyof Instance]: PrimitiveMain;\r\n };\r\n\r\ntype PrimitiveTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [PrimitiveMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [PrimitiveMain, ...PrimitiveTuple]\r\n : T extends [(infer F)?]\r\n ? [PrimitiveMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [PrimitiveMain?, ...PrimitiveTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype NativeClass =\r\n | Set\r\n | Map\r\n | WeakSet\r\n | WeakMap\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends U\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\ninterface IJsonable {\r\n toJSON(): T;\r\n}","reusable-functions#Reusable functions":"export namespace json {\r\n export function createIsParse(): (\r\n input: string\r\n ) => Primitive | null;\r\n export function createAssertParse(): (\r\n input: string\r\n ) => Primitive;\r\n export function createValidateParse(): (\r\n input: string\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nReusable typia.json.isParse() function generators.If you repeat to call typia.json.isParse() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createIsParse() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const parseMember = typia.json.createIsParse();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.parseMember = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst parseMember = (input) => {\r\n const is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n input = JSON.parse(input);\r\n return is(input) ? input : null;\r\n};\r\nexports.parseMember = parseMember;"}},"/docs/protobuf/message":{"title":"Message","data":{"message-function#message() function":"export namespace protobuf {\r\n export function message(): string;\r\n}\ntypia.protobuf.message() function returns a Protocol Buffer message (structure) as a string value.With this message() function, you can share *.proto files with other languages. If you want to customize byte order or define specific type (that is not supported in the TypeScript) like uint32, use comment tags by following comment tags section.\nimport typia, { tags } from \"typia\";\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\r\n\r\ntypia.protobuf.message();\nsyntax = \"proto3\";\r\n\r\nmessage ICustomer {\r\n required int32 id = 1;\r\n required string email = 2;\r\n required string name = 3;\r\n oneof pet {\r\n ICat v4 = 4;\r\n IDog v5 = 5;\r\n }\r\n map memo = 6;\r\n repeated ICustomerLogin logins = 7;\r\n}\r\n\r\nmessage ICat {\r\n required string type = 1;\r\n required string name = 2;\r\n required bool ribbon = 3;\r\n}\r\n\r\nmessage IDog {\r\n required string type = 1;\r\n required string name = 2;\r\n required bool hunt = 3;\r\n}\r\n\r\nmessage ICustomerLogin {\r\n required bool success = 1;\r\n required string href = 2;\r\n required string referrer = 3;\r\n required string ip = 4;\r\n required string time = 5;\r\n}","type-tags#Type Tags":"By using type tags, you can use special numeric types that are not supported in the TypeScript.Just import Type (or typia.tags.Type) type, and combine it with number or bigint type through intersection symbol number & typia.tagsType<\"float\"> case. If you want to declare an union numeric type, combine | and bracket (()) symbols properly like below.When you take a mistake that choosing different target type, TypeScript compiler would block it with compliation error message. Therefore, have a confidence when using the Type tag. For such type safety reason, I recommend to use Type tag instead of using comment tags as much as possible.\nnumber & (Type<\"uint32\"> | Type<\"double\">)\nnumber type can be both uint32 and double\n(number & Type<\"int32\">) | (bigint & Type<\"uint64\">)\nnumber is int32\nbigint is uint64\n(number & (Type<\"int32\">)| Type<\"float\">) | (bigint & Type<\"uint64\">)\nnumber can be both int32 and float\nbigint is uint64\nimport typia, { tags } from \"typia\";\r\n\r\nexport interface TypeTagExample {\r\n // ATOMIC TYPES\r\n int32: number & tags.Type<\"int32\">;\r\n uint32: number & tags.Type<\"uint32\">;\r\n uint64: bigint & tags.Type<\"uint64\">;\r\n int64: number & tags.Type<\"int64\">;\r\n float: number & tags.Type<\"float\">;\r\n double: number | undefined;\r\n string: string | null;\r\n\r\n // UNION TYPES\r\n uint32_or_double: number & (tags.Type<\"uint32\"> | tags.Type<\"double\">);\r\n int32_or_uint64: \r\n | (number & tags.Type<\"int32\">) \r\n | (bigint & tags.Type<\"uint64\">);\r\n int32_or_float_or_uint64: \r\n | (number & (tags.Type<\"int32\"> | tags.Type<\"float\">)) \r\n | (bigint & tags.Type<\"uint64\">);\r\n\r\n // ARRAY AND MAP\r\n uint64_array: Array>;\r\n int32_map?: Map, string> | null;\r\n}\r\n\r\n//----\r\n// PROTOBUF MESSAGE SCHEMA\r\n//----\r\ntypia.protobuf.message();\r\n\r\n//----\r\n// DECODE FUNCTION\r\n//----\r\ntypia.protobuf.createDecode();\r\n\r\n//----\r\n// ENCODE FUNCTION\r\n//----\r\ntypia.protobuf.createEncode();\nsyntax = \"proto3\";\r\n\r\nmessage TypeTagExample {\r\n required int32 int32 = 1;\r\n required uint32 uint32 = 2;\r\n required uint64 uint64 = 3;\r\n required int64 int64 = 4;\r\n required float float = 5;\r\n optional double double = 6;\r\n optional string string = 7;\r\n oneof uint32_or_double {\r\n uint32 v8 = 8;\r\n double v9 = 9;\r\n }\r\n oneof int32_or_uint64 {\r\n int32 v10 = 10;\r\n uint64 v11 = 11;\r\n }\r\n oneof int32_or_float_or_uint64 {\r\n int32 v12 = 12;\r\n uint64 v13 = 13;\r\n float v14 = 14;\r\n }\r\n repeated uint64 uint64_array = 15;\r\n map int32_map = 16;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n//----\r\n// PROTOBUF MESSAGE SCHEMA\r\n//----\r\n\"syntax = \\\"proto3\\\";\\n\\nmessage TypeTagExample {\\n required int32 int32 = 1;\\n required uint32 uint32 = 2;\\n required uint64 uint64 = 3;\\n required int64 int64 = 4;\\n required float float = 5;\\n optional double double = 6;\\n optional string string = 7;\\n oneof uint32_or_double {\\n uint32 v8 = 8;\\n double v9 = 9;\\n }\\n oneof int32_or_uint64 {\\n int32 v10 = 10;\\n uint64 v11 = 11;\\n }\\n oneof int32_or_float_or_uint64 {\\n int32 v12 = 12;\\n uint64 v13 = 13;\\n float v14 = 14;\\n }\\n repeated uint64 uint64_array = 15;\\n map int32_map = 16;\\n}\";\r\n//----\r\n// DECODE FUNCTION\r\n//----\r\ninput => {\r\n const $Reader = typia_1.default.protobuf.createDecode.Reader;\r\n const $pdo0 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n int32: undefined,\r\n uint32: undefined,\r\n uint64: undefined,\r\n int64: undefined,\r\n float: undefined,\r\n double: undefined,\r\n string: null,\r\n uint32_or_double: undefined,\r\n int32_or_uint64: undefined,\r\n int32_or_float_or_uint64: undefined,\r\n uint64_array: [],\r\n int32_map: null\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // int32;\r\n output.int32 = reader.int32();\r\n break;\r\n case 2:\r\n // uint32;\r\n output.uint32 = reader.uint32();\r\n break;\r\n case 3:\r\n // uint64;\r\n output.uint64 = reader.uint64();\r\n break;\r\n case 4:\r\n // int64;\r\n output.int64 = Number(reader.int64());\r\n break;\r\n case 5:\r\n // float;\r\n output.float = reader.float();\r\n break;\r\n case 6:\r\n // double;\r\n output.double = reader.double();\r\n break;\r\n case 7:\r\n // string;\r\n output.string = reader.string();\r\n break;\r\n case 8:\r\n // uint32;\r\n output.uint32_or_double = reader.uint32();\r\n break;\r\n case 9:\r\n // double;\r\n output.uint32_or_double = reader.double();\r\n break;\r\n case 10:\r\n // int32;\r\n output.int32_or_uint64 = reader.int32();\r\n break;\r\n case 11:\r\n // uint64;\r\n output.int32_or_uint64 = reader.uint64();\r\n break;\r\n case 12:\r\n // int32;\r\n output.int32_or_float_or_uint64 = reader.int32();\r\n break;\r\n case 13:\r\n // uint64;\r\n output.int32_or_float_or_uint64 = reader.uint64();\r\n break;\r\n case 14:\r\n // float;\r\n output.int32_or_float_or_uint64 = reader.float();\r\n break;\r\n case 15:\r\n // type: Array<(bigint & Type<\"uint64\">)>;\r\n if (2 === (tag & 7)) {\r\n const piece = reader.uint32() + reader.index();\r\n while (reader.index() < piece)\r\n output.uint64_array.push(reader.uint64());\r\n }\r\n else\r\n output.uint64_array.push(reader.uint64());\r\n break;\r\n case 16:\r\n // type: Map;\r\n (() => {\r\n output.int32_map ??= new Map();\r\n const piece = reader.uint32() + reader.index();\r\n const entry = {\r\n key: undefined,\r\n value: \"\"\r\n };\r\n while (reader.index() < piece) {\r\n const kind = reader.uint32();\r\n switch (kind >>> 3) {\r\n case 1:\r\n // int32;\r\n entry.key = reader.int32();\r\n break;\r\n case 2:\r\n // string;\r\n entry.value = reader.string();\r\n break;\r\n default:\r\n reader.skipType(kind & 7);\r\n break;\r\n }\r\n }\r\n output.int32_map.set(entry.key, entry.value);\r\n })();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const reader = new $Reader(input);\r\n return $pdo0(reader);\r\n};\r\n//----\r\n// ENCODE FUNCTION\r\n//----\r\ninput => {\r\n const $throws = typia_1.default.protobuf.createEncode.throws;\r\n const $Sizer = typia_1.default.protobuf.createEncode.Sizer;\r\n const $Writer = typia_1.default.protobuf.createEncode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"int32\";\r\n writer.uint32(8);\r\n writer.int32(input.int32);\r\n // property \"uint32\";\r\n writer.uint32(16);\r\n writer.uint32(input.uint32);\r\n // property \"uint64\";\r\n writer.uint32(24);\r\n writer.uint64(input.uint64);\r\n // property \"int64\";\r\n writer.uint32(32);\r\n writer.int64(input.int64);\r\n // property \"float\";\r\n writer.uint32(45);\r\n writer.float(input.float);\r\n // property \"double\";\r\n if (undefined !== input.double) {\r\n writer.uint32(49);\r\n writer.double(input.double);\r\n }\r\n // property \"string\";\r\n if (null !== input.string) {\r\n writer.uint32(58);\r\n writer.string(input.string);\r\n }\r\n // property \"uint32_or_double\";\r\n if (\"number\" === typeof input.uint32_or_double && (Math.floor(input.uint32_or_double) === input.uint32_or_double && 0 <= input.uint32_or_double && input.uint32_or_double <= 4294967295)) {\r\n writer.uint32(64);\r\n writer.uint32(input.uint32_or_double);\r\n }\r\n else if (\"number\" === typeof input.uint32_or_double && true) {\r\n writer.uint32(73);\r\n writer.double(input.uint32_or_double);\r\n }\r\n else\r\n $throws({\r\n expected: \"(number & (Type<\\\"uint32\\\"> | Type<\\\"double\\\">))\",\r\n value: input.uint32_or_double\r\n });\r\n // property \"int32_or_uint64\";\r\n if (\"number\" === typeof input.int32_or_uint64) {\r\n writer.uint32(80);\r\n writer.int32(input.int32_or_uint64);\r\n }\r\n else if (\"bigint\" === typeof input.int32_or_uint64) {\r\n writer.uint32(88);\r\n writer.uint64(input.int32_or_uint64);\r\n }\r\n else\r\n $throws({\r\n expected: \"((bigint & Type<\\\"uint64\\\">) | (number & Type<\\\"int32\\\">))\",\r\n value: input.int32_or_uint64\r\n });\r\n // property \"int32_or_float_or_uint64\";\r\n if (\"number\" === typeof input.int32_or_float_or_uint64 && (Math.floor(input.int32_or_float_or_uint64) === input.int32_or_float_or_uint64 && -2147483648 <= input.int32_or_float_or_uint64 && input.int32_or_float_or_uint64 <= 2147483647)) {\r\n writer.uint32(96);\r\n writer.int32(input.int32_or_float_or_uint64);\r\n }\r\n else if (\"bigint\" === typeof input.int32_or_float_or_uint64) {\r\n writer.uint32(104);\r\n writer.uint64(input.int32_or_float_or_uint64);\r\n }\r\n else if (\"number\" === typeof input.int32_or_float_or_uint64 && (-1.175494351e+38 <= input.int32_or_float_or_uint64 && input.int32_or_float_or_uint64 <= 3.4028235e+38)) {\r\n writer.uint32(117);\r\n writer.float(input.int32_or_float_or_uint64);\r\n }\r\n else\r\n $throws({\r\n expected: \"((bigint & Type<\\\"uint64\\\">) | (number & (Type<\\\"int32\\\"> | Type<\\\"float\\\">)))\",\r\n value: input.int32_or_float_or_uint64\r\n });\r\n // property \"uint64_array\";\r\n if (0 !== input.uint64_array.length) {\r\n writer.uint32(122);\r\n writer.fork();\r\n for (const elem of input.uint64_array) {\r\n writer.uint64(elem);\r\n }\r\n writer.ldelim();\r\n }\r\n // property \"int32_map\";\r\n if (undefined !== input.int32_map && null !== input.int32_map) {\r\n for (const [key, value] of input.int32_map) {\r\n writer.uint32(130);\r\n writer.fork();\r\n writer.uint32(8);\r\n writer.int32(key);\r\n writer.uint32(18);\r\n writer.string(value);\r\n writer.ldelim();\r\n }\r\n }\r\n };\r\n //TypeTagExample;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n};","comment-tags#Comment Tags":"By using @type {target} comment tag, you also can use special numeric types.However, this way is not recommended, because it can't perform union numeric types, and cannot be used in Array and Map types. When you declare @type int32 statement, target number type be fixed as int32 type, and never can have another numeric type by declaring union statements.Also, those comment tags are not type safe. If you take a mistake when writing a comment tag, it will not be detected by the compiler, and will cause an error at runtime. For example, if you write a mis-spelled keyword like @type unit32, the target number type would be double type, and you can identify it just by running the program (or visiting playground website).\nWhy supports comment tags?\nDespite these disadvantages, the reason for maintaining comment tags is as follows.First, it is to support the legacy JSDoc style that had been used in the JS camp for a long time. If you had developed a legacy project and JSDoc being used, you can use it as is.Second, to support Prisma. If a comment is created in the Prisma Schema through the /// statement as shown below and a type is created, it is converted to a TS comment as it is. And since there is no way that union types, numeric Arrays or Maps are used in Prisma (database) schema, these comment tags are surprisingly compatible with Prisma.\nimport typia from \"typia\";\r\n\r\nexport interface CommentTagExample {\r\n /**\r\n * @type int32\r\n */\r\n int32: number;\r\n\r\n /**\r\n * @type uint32\r\n */\r\n uint32?: number | null;\r\n\r\n /**\r\n * @type uint64\r\n */\r\n uint64?: number;\r\n\r\n /**\r\n * @type int64\r\n */\r\n int64: number;\r\n\r\n /**\r\n * @type float\r\n */\r\n float: number | null;\r\n\r\n double: number;\r\n\r\n string: string;\r\n}\r\n\r\n//----\r\n// PROTOBUF MESSAGE SCHEMA\r\n//----\r\ntypia.protobuf.message();\r\n\r\n//----\r\n// DECODE FUNCTION\r\n//----\r\ntypia.protobuf.createDecode();\r\n\r\n//----\r\n// ENCODE FUNCTION\r\n//----\r\ntypia.protobuf.createEncode();\nsyntax = \"proto3\";\r\n\r\nmessage CommentTagExample {\r\n required int32 int32 = 1;\r\n optional uint32 uint32 = 2;\r\n optional uint64 uint64 = 3;\r\n required int64 int64 = 4;\r\n optional float float = 5;\r\n required double double = 6;\r\n required string string = 7;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n//----\r\n// PROTOBUF MESSAGE SCHEMA\r\n//----\r\n\"syntax = \\\"proto3\\\";\\n\\nmessage CommentTagExample {\\n required int32 int32 = 1;\\n optional uint32 uint32 = 2;\\n optional uint64 uint64 = 3;\\n required int64 int64 = 4;\\n optional float float = 5;\\n required double double = 6;\\n required string string = 7;\\n}\";\r\n//----\r\n// DECODE FUNCTION\r\n//----\r\ninput => {\r\n const $Reader = typia_1.default.protobuf.createDecode.Reader;\r\n const $pdo0 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n int32: undefined,\r\n uint32: null,\r\n uint64: undefined,\r\n int64: undefined,\r\n float: null,\r\n double: undefined,\r\n string: \"\"\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // int32;\r\n output.int32 = reader.int32();\r\n break;\r\n case 2:\r\n // uint32;\r\n output.uint32 = reader.uint32();\r\n break;\r\n case 3:\r\n // uint64;\r\n output.uint64 = Number(reader.uint64());\r\n break;\r\n case 4:\r\n // int64;\r\n output.int64 = Number(reader.int64());\r\n break;\r\n case 5:\r\n // float;\r\n output.float = reader.float();\r\n break;\r\n case 6:\r\n // double;\r\n output.double = reader.double();\r\n break;\r\n case 7:\r\n // string;\r\n output.string = reader.string();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const reader = new $Reader(input);\r\n return $pdo0(reader);\r\n};\r\n//----\r\n// ENCODE FUNCTION\r\n//----\r\ninput => {\r\n const $Sizer = typia_1.default.protobuf.createEncode.Sizer;\r\n const $Writer = typia_1.default.protobuf.createEncode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"int32\";\r\n writer.uint32(8);\r\n writer.int32(input.int32);\r\n // property \"uint32\";\r\n if (undefined !== input.uint32 && null !== input.uint32) {\r\n writer.uint32(16);\r\n writer.uint32(input.uint32);\r\n }\r\n // property \"uint64\";\r\n if (undefined !== input.uint64) {\r\n writer.uint32(24);\r\n writer.uint64(input.uint64);\r\n }\r\n // property \"int64\";\r\n writer.uint32(32);\r\n writer.int64(input.int64);\r\n // property \"float\";\r\n if (null !== input.float) {\r\n writer.uint32(45);\r\n writer.float(input.float);\r\n }\r\n // property \"double\";\r\n writer.uint32(49);\r\n writer.double(input.double);\r\n // property \"string\";\r\n writer.uint32(58);\r\n writer.string(input.string);\r\n };\r\n //CommentTagExample;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n};","restrictions#Restrictions":"You know what? Expression power of Protocol Buffer is extremely narrower than type system of TypeScript. For example, Protocol Buffer can't express complicate union type containing array. Also, Protocol Buffer can't express multi dimensional array type, either.In such reason, when converting TypeScript type to Protocol buffer message schema, lots of restrictions are exist. Let's study which types of TyeScript are not supported in Protocol Buffer. For reference, if you try to call typia.protobuf.message() function with unsupported type, typia will generate compile errors like below example cases.At first, top level type must be a sole and static object.If you try to use number or Array type as a top level type, typia will generate compile error like below. Dynamic object types like Record, or Map types are not allowed either. For reference, the sole object means that, union of object types is not allowed, either.\nimport typia from \"typia\";\r\n\r\ninterface Cat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface Dog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\n\r\ntypia.protobuf.message();\r\ntypia.protobuf.createDecode>();\r\ntypia.protobuf.createDecode, Dog>>();\r\ntypia.protobuf.createEncode();\r\ntypia.protobuf.createEncode();\nmain.ts:14:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- bigint\r\n - target type must be a sole and static object type\r\n\r\nmain.ts:15:1 - error TS(typia.protobuf.typia.protobuf.createDecode): unsupported type detected\r\n\r\n- Record\r\n - target type must be a sole and static object type\r\n\r\nmain.ts:16:1 - error TS(typia.protobuf.typia.protobuf.createDecode): unsupported type detected\r\n\r\n- Map<(number & Type<\"float\">), Dog>\r\n - target type must be a sole and static object type\r\n\r\n- (number & Type<\"float\">)\r\n - target type must be a sole and static object type\r\n\r\nmain.ts:17:1 - error TS(typia.protobuf.typia.protobuf.createEncode): unsupported type detected\r\n\r\n- Array\r\n - target type must be a sole and static object type\r\n\r\nmain.ts:18:1 - error TS(typia.protobuf.typia.protobuf.createEncode): unsupported type detected\r\n\r\n- (Cat | Dog)\r\n - target type must be a sole and static object type\nAt next, in Protocol Buffer, those types are categorized as container types.\nArray\nMap\nRecord (dynamic object)\nAlso, those container types does not allow over two-dimensional stacking. Therefore, it is not possible to declaring two dimensional array like number[][], or Array type in Map like Map. Besides, value type of those container also do not support union type either.Additionally, about Map type, key type must be an atomic type. It means that, only boolean, number, bigint and string types are allowed. Also, key type cannot be union type, either.\nimport typia from \"typia\";\r\n\r\ninterface IPointer {\r\n value: T;\r\n}\r\ninterface Cat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface Dog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\n\r\ntypia.protobuf.message>();\r\ntypia.protobuf.createEncode>>();\r\ntypia.protobuf.createDecode>>();\r\n\r\ntypia.protobuf.message>>();\r\ntypia.protobuf.message>>();\nmain.ts:17:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- IPointer>>[key]: Array>\r\n - does not support over two dimenstional array type\r\n\r\nmain.ts:18:1 - error TS(typia.protobuf.typia.protobuf.createEncode): unsupported type detected\r\n\r\n- IPointer>>[key]: Record>\r\n - does not support dynamic object with array value type\r\n\r\nmain.ts:19:1 - error TS(typia.protobuf.typia.protobuf.createDecode): unsupported type detected\r\n\r\n- IPointer>[key]: Map\r\n - does not support union type in map value type\r\n\r\nmain.ts:21:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- IPointer>[key]: Map\r\n - does not support non-atomic key typed map\r\n\r\nmain.ts:22:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- IPointer>[key]: Map<(number | string), Dog>\r\n - does not support union key typed map\r\n - does not support non-atomic key typed map\nAt last, those types are all not allowed.\nany\nfunctional type\nSet, WeakSet and WeakMap\nDate, Boolean, BigInt, Number, String\nBinary classes except Uint8Array\nUint8ClampedArray, Uint16Array, Uint32Array, BigUint64Array\nInt8Array, Int16Array, Int32Array, BigInt64Array\nArrayBuffer, SharedArrayBuffer and DataView\nimport typia from \"typia\";\r\n\r\ninterface Something {\r\n any: any;\r\n unknown: unknown;\r\n closure: () => void;\r\n dict: Set | WeakSet | WeakMap;\r\n date: Date;\r\n classic: String;\r\n buffer: ArrayBuffer;\r\n}\r\n\r\ntypia.protobuf.message();\nmain.ts:13:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- Something.any: any\r\n - does not support any type\r\n\r\n- Something.unknown: any\r\n - does not support any type\r\n\r\n- Something.closure: unknown\r\n - does not support functional type\r\n\r\n- Something.dict: (Set | WeakMap | WeakSet)\r\n - does not support Set type\r\n - does not support WeakSet type. Use Array type instead.\r\n - does not support WeakMap type. Use Map type instead.\r\n\r\n- Something.date: Date\r\n - does not support Date type. Use string type instead.\r\n\r\n- Something.classic: String\r\n - does not support String type. Use string type instead.\r\n\r\n- Something.buffer: ArrayBuffer\r\n - does not support ArrayBuffer type. Use Uint8Array type instead."}},"/docs/protobuf/encode":{"title":"Encode","data":{"encode-functions#encode() functions":"export namespace protobuf {\r\n export function encode(input: T): Uint8Array;\r\n export function isEncode(input: T): Uint8Array | null;\r\n export function assertEncode(input: T): Uint8Array;\r\n export function validateEncode(input: T): IValidation;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nProtocol Buffer Encoder.You can easily convert a JavaScript object to a binary data of Protocol Buffer, without any extra Protocol Buffer Message Schema definition. typia.protobuf.encode() function analyzes your type T, and generates a Protocol Buffer Message Schema internally. And then, it converts the input instance to the binary data of Protocol Buffer format.By the way, typia.protobuf.encode() function does not validate the input value. It just believes user and input value, and converts to the Protocol Buffer binary data directly without any validation. By the way, if the input value was not validate, the encoded binary data never can be decoded. So, if you can't sure the input value type, you should use below functions instead.\ntypia.protobuf.isEncode(): typia.is() + typia.protobuf.encode()\ntypia.protobuf.assertEncode(): typia.assert() + typia.protobuf.encode()\ntypia.protobuf.validateEncode(): typia.validate() + typia.protobuf.encode()\nAOT compliation\ntypia.protobuf.encode() and other similar functions are still much faster than any other competitive libraries, even though they include type checking process. This is the power of AOT compilation, writing optimal dedicated code by analyzing TypeScript type, in the compilation level.\nimport typia, { tags } from \"typia\";\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\r\n\r\nconst customer: ICustomer = typia.random();\r\ntypia.protobuf.encode(customer);\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst customer = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $pick = typia_1.default.random.pick;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"int32\\\">\",\r\n kind: \"type\",\r\n value: \"int32\",\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(0, 100),\r\n email: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"email\\\">\",\r\n kind: \"format\",\r\n value: \"email\",\r\n }\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n pet: $pick([\r\n () => null,\r\n () => $ro1(_recursive, _recursive ? 1 + _depth : _depth),\r\n () => $ro2(_recursive, _recursive ? 1 + _depth : _depth)\r\n ])(),\r\n memo: $pick([\r\n () => null,\r\n () => new Map((generator?.array ?? $generator.array)(() => [\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)()\r\n ]))\r\n ])(),\r\n logins: (generator?.array ?? $generator.array)(() => $ro3(_recursive, _recursive ? 1 + _depth : _depth))\r\n });\r\n const $ro1 = (_recursive = false, _depth = 0) => ({\r\n type: \"cat\",\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n ribbon: (generator?.boolean ?? $generator.boolean)()\r\n });\r\n const $ro2 = (_recursive = false, _depth = 0) => ({\r\n type: \"dog\",\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n hunt: (generator?.boolean ?? $generator.boolean)()\r\n });\r\n const $ro3 = (_recursive = false, _depth = 0) => ({\r\n success: (generator?.boolean ?? $generator.boolean)(),\r\n href: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"url\\\">\",\r\n kind: \"format\",\r\n value: \"url\",\r\n }\r\n ]) ?? (generator?.url ?? $generator.url)(),\r\n referrer: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"url\\\">\",\r\n kind: \"format\",\r\n value: \"url\",\r\n }\r\n ]) ?? (generator?.url ?? $generator.url)(),\r\n ip: $pick([\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"ipv4\\\">\",\r\n kind: \"format\",\r\n value: \"ipv4\",\r\n }\r\n ]) ?? (generator?.ipv4 ?? $generator.ipv4)(),\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"ipv6\\\">\",\r\n kind: \"format\",\r\n value: \"ipv6\",\r\n }\r\n ]) ?? (generator?.ipv6 ?? $generator.ipv6)()\r\n ])(),\r\n time: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"date-time\\\">\",\r\n kind: \"format\",\r\n value: \"date-time\",\r\n }\r\n ]) ?? (generator?.datetime ?? $generator.datetime)()\r\n });\r\n return $ro0();\r\n})();\r\n(input => {\r\n const $throws = typia_1.default.protobuf.encode.throws;\r\n const $Sizer = typia_1.default.protobuf.encode.Sizer;\r\n const $Writer = typia_1.default.protobuf.encode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"id\";\r\n writer.uint32(8);\r\n writer.int32(input.id);\r\n // property \"email\";\r\n writer.uint32(18);\r\n writer.string(input.email);\r\n // property \"name\";\r\n writer.uint32(26);\r\n writer.string(input.name);\r\n // property \"pet\";\r\n if (null !== input.pet) {\r\n if (\"cat\" === input.pet.type)\r\n return (() => {\r\n // 4 -> ICat;\r\n writer.uint32(34);\r\n writer.fork();\r\n $peo1(input.pet);\r\n writer.ldelim();\r\n })();\r\n else if (\"dog\" === input.pet.type)\r\n return (() => {\r\n // 5 -> IDog;\r\n writer.uint32(42);\r\n writer.fork();\r\n $peo2(input.pet);\r\n writer.ldelim();\r\n })();\r\n else\r\n $throws({\r\n expected: \"(ICat | IDog)\",\r\n value: input.pet\r\n });\r\n }\r\n // property \"memo\";\r\n if (null !== input.memo) {\r\n for (const [key, value] of input.memo) {\r\n writer.uint32(50);\r\n writer.fork();\r\n writer.uint32(10);\r\n writer.string(key);\r\n writer.uint32(18);\r\n writer.string(value);\r\n writer.ldelim();\r\n }\r\n }\r\n // property \"logins\";\r\n if (0 !== input.logins.length) {\r\n for (const elem of input.logins) {\r\n // 7 -> ICustomerLogin;\r\n writer.uint32(58);\r\n writer.fork();\r\n $peo3(elem);\r\n writer.ldelim();\r\n }\r\n }\r\n };\r\n const $peo1 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"ribbon\";\r\n writer.uint32(24);\r\n writer.bool(input.ribbon);\r\n };\r\n const $peo2 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"hunt\";\r\n writer.uint32(24);\r\n writer.bool(input.hunt);\r\n };\r\n const $peo3 = input => {\r\n // property \"success\";\r\n writer.uint32(8);\r\n writer.bool(input.success);\r\n // property \"href\";\r\n writer.uint32(18);\r\n writer.string(input.href);\r\n // property \"referrer\";\r\n writer.uint32(26);\r\n writer.string(input.referrer);\r\n // property \"ip\";\r\n writer.uint32(34);\r\n writer.string(input.ip);\r\n // property \"time\";\r\n writer.uint32(42);\r\n writer.string(input.time);\r\n };\r\n const $io1 = input => \"cat\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.ribbon;\r\n const $io2 = input => \"dog\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.hunt;\r\n const $io3 = input => \"boolean\" === typeof input.success && (\"string\" === typeof input.href && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.referrer && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.ip && (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(input.ip) || /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test(input.ip))) && (\"string\" === typeof input.time && !isNaN(new Date(input.time).getTime()));\r\n const $iu0 = input => (() => {\r\n if (\"cat\" === input.type)\r\n return $io1(input);\r\n else if (\"dog\" === input.type)\r\n return $io2(input);\r\n else\r\n return false;\r\n })();\r\n //ICustomer;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n})(customer);\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}","reusable-functions#Reusable Functions":"export namespace protobuf {\r\n export function encode(): (input: T) => Uint8Array;\r\n export function isEncode(): (input: T) => Uint8Array | null;\r\n export function assertEncode(): (input: T) => Uint8Array;\r\n export function validateEncode(): (\r\n input: T\r\n ) => IValidation;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nReusable typia.protobuf.encode() function generators.If you repeat to call typia.protobuf.encode() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.protobuf.createEncode() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const encode = typia.protobuf.createEncode();\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.encode = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst encode = input => {\r\n const $throws = typia_1.default.protobuf.createEncode.throws;\r\n const $Sizer = typia_1.default.protobuf.createEncode.Sizer;\r\n const $Writer = typia_1.default.protobuf.createEncode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"id\";\r\n writer.uint32(8);\r\n writer.int32(input.id);\r\n // property \"email\";\r\n writer.uint32(18);\r\n writer.string(input.email);\r\n // property \"name\";\r\n writer.uint32(26);\r\n writer.string(input.name);\r\n // property \"pet\";\r\n if (null !== input.pet) {\r\n if (\"cat\" === input.pet.type)\r\n return (() => {\r\n // 4 -> ICat;\r\n writer.uint32(34);\r\n writer.fork();\r\n $peo1(input.pet);\r\n writer.ldelim();\r\n })();\r\n else if (\"dog\" === input.pet.type)\r\n return (() => {\r\n // 5 -> IDog;\r\n writer.uint32(42);\r\n writer.fork();\r\n $peo2(input.pet);\r\n writer.ldelim();\r\n })();\r\n else\r\n $throws({\r\n expected: \"(ICat | IDog)\",\r\n value: input.pet\r\n });\r\n }\r\n // property \"memo\";\r\n if (null !== input.memo) {\r\n for (const [key, value] of input.memo) {\r\n writer.uint32(50);\r\n writer.fork();\r\n writer.uint32(10);\r\n writer.string(key);\r\n writer.uint32(18);\r\n writer.string(value);\r\n writer.ldelim();\r\n }\r\n }\r\n // property \"logins\";\r\n if (0 !== input.logins.length) {\r\n for (const elem of input.logins) {\r\n // 7 -> ICustomerLogin;\r\n writer.uint32(58);\r\n writer.fork();\r\n $peo3(elem);\r\n writer.ldelim();\r\n }\r\n }\r\n };\r\n const $peo1 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"ribbon\";\r\n writer.uint32(24);\r\n writer.bool(input.ribbon);\r\n };\r\n const $peo2 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"hunt\";\r\n writer.uint32(24);\r\n writer.bool(input.hunt);\r\n };\r\n const $peo3 = input => {\r\n // property \"success\";\r\n writer.uint32(8);\r\n writer.bool(input.success);\r\n // property \"href\";\r\n writer.uint32(18);\r\n writer.string(input.href);\r\n // property \"referrer\";\r\n writer.uint32(26);\r\n writer.string(input.referrer);\r\n // property \"ip\";\r\n writer.uint32(34);\r\n writer.string(input.ip);\r\n // property \"time\";\r\n writer.uint32(42);\r\n writer.string(input.time);\r\n };\r\n const $io1 = input => \"cat\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.ribbon;\r\n const $io2 = input => \"dog\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.hunt;\r\n const $io3 = input => \"boolean\" === typeof input.success && (\"string\" === typeof input.href && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.referrer && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.ip && (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(input.ip) || /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test(input.ip))) && (\"string\" === typeof input.time && !isNaN(new Date(input.time).getTime()));\r\n const $iu0 = input => (() => {\r\n if (\"cat\" === input.type)\r\n return $io1(input);\r\n else if (\"dog\" === input.type)\r\n return $io2(input);\r\n else\r\n return false;\r\n })();\r\n //ICustomer;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n};\r\nexports.encode = encode;","references#References":"Protocol Buffer supports special numeric types like int32 or uint64 that are not supported in TypeScript. Also, types of Protocol Buffer cannot fully meet TypeScript type specs either, as expression power of TypeScript types are much stronger than Protocol Buffer.To know how to define special numeric types like uint64, and to understand which TypeScript types are not supported in Protocol Buffer specs, it would better to read below documents. I recommend you to read them before using typia.protobuf.encode() related functions.\nTypia Guide Documents > Protocol Buffer > Message Schema\nmessage() function\nType Tags\nComment Tags\nRestrictions"}},"/docs/protobuf/decode":{"title":"Decode","data":{"decode-functions#decode() functions":"export namespace protobuf {\r\n export function decode(buffer: Uint8Array): Resolved;\r\n export function isDecode(buffer: Uint8Array): Resolved | null;\r\n export function assertDecode(buffer: Uint8Array): Resolved;\r\n export function validateDecode(\r\n buffer: Uint8Array\r\n ): IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nProtocol Buffer Decoder.You can easily convert a Protocol Buffer's binary data to a JavaScript object, without any extra Protocol Buffer Message Schema definition. typia.protobuf.decode() function analyzes your type T, and generates a Protocol Buffer Message Schema internally.And then, it converts the binary data to a JavaScript object.By the way, as Protocol Buffer handles binary data directly, there's no way when input binary data was not encoded from the T typed value. In that case, unexpected behavior or internal error would be occured. Therefore, I recommend you to encode binary data of Protocol Buffer from type safe encode functions like below, Use typia.protobuf.encode() function only when you can trust it.\ntypia.protobuf.isEncode()\ntypia.protobuf.assertEncode()\ntypia.protobuf.validateEncode()\nFor reference, typia provides type safe decorators like below, but they are just for additional type validation like number & Minimum<7> or string & Format<\"uuid\"> cases, that are represented by Special Tags. Thus, I repeat that, you've to ensure type safety when using decoder function.\ntypia.protobuf.isDecode(): typia.is() + typia.protobuf.decode()\ntypia.protobuf.assertDecode(): typia.assert() + typia.protobuf.decode()\ntypia.protobuf.validateDecode(): typia.validate() + typia.protobuf.decode()\nAOT compliation\ntypia.protobuf.decode() and other similar functions are still much faster than any other competitive libraries, even though they include type checking process. This is the power of AOT compilation, writing optimal dedicated code by analyzing TypeScript type, in the compilation level.\nimport typia, { tags } from \"typia\";\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\r\n\r\nconst data: ICustomer = typia.random();\r\nconst encoded: Uint8Array = typia.protobuf.encode(data);\r\ntypia.protobuf.decode(encoded);\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst data = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $pick = typia_1.default.random.pick;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"int32\\\">\",\r\n kind: \"type\",\r\n value: \"int32\",\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(0, 100),\r\n email: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"email\\\">\",\r\n kind: \"format\",\r\n value: \"email\",\r\n }\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n pet: $pick([\r\n () => null,\r\n () => $ro1(_recursive, _recursive ? 1 + _depth : _depth),\r\n () => $ro2(_recursive, _recursive ? 1 + _depth : _depth)\r\n ])(),\r\n memo: $pick([\r\n () => null,\r\n () => new Map((generator?.array ?? $generator.array)(() => [\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)()\r\n ]))\r\n ])(),\r\n logins: (generator?.array ?? $generator.array)(() => $ro3(_recursive, _recursive ? 1 + _depth : _depth))\r\n });\r\n const $ro1 = (_recursive = false, _depth = 0) => ({\r\n type: \"cat\",\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n ribbon: (generator?.boolean ?? $generator.boolean)()\r\n });\r\n const $ro2 = (_recursive = false, _depth = 0) => ({\r\n type: \"dog\",\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n hunt: (generator?.boolean ?? $generator.boolean)()\r\n });\r\n const $ro3 = (_recursive = false, _depth = 0) => ({\r\n success: (generator?.boolean ?? $generator.boolean)(),\r\n href: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"url\\\">\",\r\n kind: \"format\",\r\n value: \"url\",\r\n }\r\n ]) ?? (generator?.url ?? $generator.url)(),\r\n referrer: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"url\\\">\",\r\n kind: \"format\",\r\n value: \"url\",\r\n }\r\n ]) ?? (generator?.url ?? $generator.url)(),\r\n ip: $pick([\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"ipv4\\\">\",\r\n kind: \"format\",\r\n value: \"ipv4\",\r\n }\r\n ]) ?? (generator?.ipv4 ?? $generator.ipv4)(),\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"ipv6\\\">\",\r\n kind: \"format\",\r\n value: \"ipv6\",\r\n }\r\n ]) ?? (generator?.ipv6 ?? $generator.ipv6)()\r\n ])(),\r\n time: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"date-time\\\">\",\r\n kind: \"format\",\r\n value: \"date-time\",\r\n }\r\n ]) ?? (generator?.datetime ?? $generator.datetime)()\r\n });\r\n return $ro0();\r\n})();\r\nconst encoded = (input => {\r\n const $throws = typia_1.default.protobuf.encode.throws;\r\n const $Sizer = typia_1.default.protobuf.encode.Sizer;\r\n const $Writer = typia_1.default.protobuf.encode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"id\";\r\n writer.uint32(8);\r\n writer.int32(input.id);\r\n // property \"email\";\r\n writer.uint32(18);\r\n writer.string(input.email);\r\n // property \"name\";\r\n writer.uint32(26);\r\n writer.string(input.name);\r\n // property \"pet\";\r\n if (null !== input.pet) {\r\n if (\"cat\" === input.pet.type)\r\n return (() => {\r\n // 4 -> ICat;\r\n writer.uint32(34);\r\n writer.fork();\r\n $peo1(input.pet);\r\n writer.ldelim();\r\n })();\r\n else if (\"dog\" === input.pet.type)\r\n return (() => {\r\n // 5 -> IDog;\r\n writer.uint32(42);\r\n writer.fork();\r\n $peo2(input.pet);\r\n writer.ldelim();\r\n })();\r\n else\r\n $throws({\r\n expected: \"(ICat | IDog)\",\r\n value: input.pet\r\n });\r\n }\r\n // property \"memo\";\r\n if (null !== input.memo) {\r\n for (const [key, value] of input.memo) {\r\n writer.uint32(50);\r\n writer.fork();\r\n writer.uint32(10);\r\n writer.string(key);\r\n writer.uint32(18);\r\n writer.string(value);\r\n writer.ldelim();\r\n }\r\n }\r\n // property \"logins\";\r\n if (0 !== input.logins.length) {\r\n for (const elem of input.logins) {\r\n // 7 -> ICustomerLogin;\r\n writer.uint32(58);\r\n writer.fork();\r\n $peo3(elem);\r\n writer.ldelim();\r\n }\r\n }\r\n };\r\n const $peo1 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"ribbon\";\r\n writer.uint32(24);\r\n writer.bool(input.ribbon);\r\n };\r\n const $peo2 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"hunt\";\r\n writer.uint32(24);\r\n writer.bool(input.hunt);\r\n };\r\n const $peo3 = input => {\r\n // property \"success\";\r\n writer.uint32(8);\r\n writer.bool(input.success);\r\n // property \"href\";\r\n writer.uint32(18);\r\n writer.string(input.href);\r\n // property \"referrer\";\r\n writer.uint32(26);\r\n writer.string(input.referrer);\r\n // property \"ip\";\r\n writer.uint32(34);\r\n writer.string(input.ip);\r\n // property \"time\";\r\n writer.uint32(42);\r\n writer.string(input.time);\r\n };\r\n const $io1 = input => \"cat\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.ribbon;\r\n const $io2 = input => \"dog\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.hunt;\r\n const $io3 = input => \"boolean\" === typeof input.success && (\"string\" === typeof input.href && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.referrer && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.ip && (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(input.ip) || /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test(input.ip))) && (\"string\" === typeof input.time && !isNaN(new Date(input.time).getTime()));\r\n const $iu0 = input => (() => {\r\n if (\"cat\" === input.type)\r\n return $io1(input);\r\n else if (\"dog\" === input.type)\r\n return $io2(input);\r\n else\r\n return false;\r\n })();\r\n //ICustomer;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n})(data);\r\n(input => {\r\n const $Reader = typia_1.default.protobuf.decode.Reader;\r\n const $pdo0 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n id: undefined,\r\n email: \"\",\r\n name: \"\",\r\n pet: null,\r\n memo: null,\r\n logins: []\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // int32;\r\n output.id = reader.int32();\r\n break;\r\n case 2:\r\n // string;\r\n output.email = reader.string();\r\n break;\r\n case 3:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 4:\r\n // ICat;\r\n output.pet = $pdo1(reader, reader.uint32());\r\n break;\r\n case 5:\r\n // IDog;\r\n output.pet = $pdo2(reader, reader.uint32());\r\n break;\r\n case 6:\r\n // type: Map;\r\n (() => {\r\n output.memo ??= new Map();\r\n const piece = reader.uint32() + reader.index();\r\n const entry = {\r\n key: \"\",\r\n value: \"\"\r\n };\r\n while (reader.index() < piece) {\r\n const kind = reader.uint32();\r\n switch (kind >>> 3) {\r\n case 1:\r\n // string;\r\n entry.key = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n entry.value = reader.string();\r\n break;\r\n default:\r\n reader.skipType(kind & 7);\r\n break;\r\n }\r\n }\r\n output.memo.set(entry.key, entry.value);\r\n })();\r\n break;\r\n case 7:\r\n // type: Array;\r\n output.logins.push($pdo3(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo1 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n type: undefined,\r\n name: \"\",\r\n ribbon: undefined\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // string;\r\n output.type = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 3:\r\n // bool;\r\n output.ribbon = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo2 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n type: undefined,\r\n name: \"\",\r\n hunt: undefined\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // string;\r\n output.type = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 3:\r\n // bool;\r\n output.hunt = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo3 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n success: undefined,\r\n href: \"\",\r\n referrer: \"\",\r\n ip: \"\",\r\n time: \"\"\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // bool;\r\n output.success = reader.bool();\r\n break;\r\n case 2:\r\n // string;\r\n output.href = reader.string();\r\n break;\r\n case 3:\r\n // string;\r\n output.referrer = reader.string();\r\n break;\r\n case 4:\r\n // string;\r\n output.ip = reader.string();\r\n break;\r\n case 5:\r\n // string;\r\n output.time = reader.string();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const reader = new $Reader(input);\r\n return $pdo0(reader);\r\n})(encoded);","reusable-functions#Reusable functions":"export namespace protobuf {\r\n export function createDecode(): (buffer: Uint8Array) => Resolved;\r\n export function createIsDecode: (buffer: Uint8Array) => Resolved | null;\r\n export function createAssertDecode(): (buffer: Uint8Array) => Resolved;\r\n export function createValidateDecode(): (\r\n buffer: Uint8Array\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nReusable typia.protobuf.decode() function generators.If you repeat to call typia.protobuf.decode() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.protobuf.createDecode() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const encode = typia.protobuf.createDecode();\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.encode = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst encode = input => {\r\n const $Reader = typia_1.default.protobuf.createDecode.Reader;\r\n const $pdo0 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n id: undefined,\r\n email: \"\",\r\n name: \"\",\r\n pet: null,\r\n memo: null,\r\n logins: []\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // int32;\r\n output.id = reader.int32();\r\n break;\r\n case 2:\r\n // string;\r\n output.email = reader.string();\r\n break;\r\n case 3:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 4:\r\n // ICat;\r\n output.pet = $pdo1(reader, reader.uint32());\r\n break;\r\n case 5:\r\n // IDog;\r\n output.pet = $pdo2(reader, reader.uint32());\r\n break;\r\n case 6:\r\n // type: Map;\r\n (() => {\r\n output.memo ??= new Map();\r\n const piece = reader.uint32() + reader.index();\r\n const entry = {\r\n key: \"\",\r\n value: \"\"\r\n };\r\n while (reader.index() < piece) {\r\n const kind = reader.uint32();\r\n switch (kind >>> 3) {\r\n case 1:\r\n // string;\r\n entry.key = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n entry.value = reader.string();\r\n break;\r\n default:\r\n reader.skipType(kind & 7);\r\n break;\r\n }\r\n }\r\n output.memo.set(entry.key, entry.value);\r\n })();\r\n break;\r\n case 7:\r\n // type: Array;\r\n output.logins.push($pdo3(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo1 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n type: undefined,\r\n name: \"\",\r\n ribbon: undefined\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // string;\r\n output.type = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 3:\r\n // bool;\r\n output.ribbon = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo2 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n type: undefined,\r\n name: \"\",\r\n hunt: undefined\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // string;\r\n output.type = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 3:\r\n // bool;\r\n output.hunt = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo3 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n success: undefined,\r\n href: \"\",\r\n referrer: \"\",\r\n ip: \"\",\r\n time: \"\"\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // bool;\r\n output.success = reader.bool();\r\n break;\r\n case 2:\r\n // string;\r\n output.href = reader.string();\r\n break;\r\n case 3:\r\n // string;\r\n output.referrer = reader.string();\r\n break;\r\n case 4:\r\n // string;\r\n output.ip = reader.string();\r\n break;\r\n case 5:\r\n // string;\r\n output.time = reader.string();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const reader = new $Reader(input);\r\n return $pdo0(reader);\r\n};\r\nexports.encode = encode;","references#References":"Protocol Buffer supports special numeric types like int32 or uint64 that are not supported in TypeScript. Also, types of Protocol Buffer cannot fully meet TypeScript type specs either, as expression power of TypeScript types are much stronger than Protocol Buffer.To know how to define special numeric types like uint64, and to understand which TypeScript types are not supported in Protocol Buffer specs, it would better to read below documents. I recommend you to read them before using typia.protobuf.decode() related functions.\nTypia Guide Documents > Protocol Buffer > Message Schema\nmessage() function\nType Tags\nComment Tags\nRestrictions"}},"/docs/pure":{"title":"Pure TypeScript","data":{"outline#Outline":"typia.assert(article);\ntypia needs only one line with pure TypeScript type.You know what? Every other validator libraries need extra schema definition, that is different with pure TypeScript type. For an example, class-validator is the most famous validator due to used in NestJS. However, NestJS and class-validator force you to define triple duplicated DTO schema.\nTypeScript Type\nclass-validator decorators\n@nestjs/swagger decorators\nAnother famous validator library ajv requires JSON schema definition. Move to the #Demonstration, and click the ajv (JSON Schema) tab, then you may understand how it terrible. It requires hundreds of lines of JSON schema definition even just for a simple DTO.Those duplicated schema definitions are not only annoying, but also error-prone. If you take any mistake on the extra schema definition, such mistake can't be detected by TypeScript compiler. It will be detected only at runtime, therefore become a critical runtime error. Another words, it is not type safe.Besides, typia only needs pure TypeScript type. You don't need to define any extra schema like class-validator or ajv. Just define pure TypeScript type only (especially recommend to use interface type), then typia will do all the rest.","demonstration#Demonstration":"If you're confusing how typia is different with others, just see example codes below.At first, look at the first (class-validator) tab, and find the BbsArticle.files property, enhanced by blue coloured blocks. Looking at the files property, how do you feel? Just defining an array object type, you've to call 7 decorator functions. If you take any mistake when using the decorator like omitting isArray property, it would be a critical runtime erorr.Besides, typia needs only one line. Click the third (typia) tab, and find the IAttachmentFile.files property. Only one line being used, and they are even not class, but just interface types. Comparing it to the first and second tabs, how do you feel? Isn't it more simple and readable?This is the power of typia, with pure TypeScript type.\nimport { ApiProperty } from \"@nestjs/swagger\";\r\nimport { ArrayNotEmpty, IsArray, IsObject, IsOptional, IsString, Match, MaxLength, Type, ValidateNested } from \"class-validator\";\r\n\r\nexport class BbsArticle {\r\n @ApiProperty({\r\n format: \"uuid\",\r\n })\r\n @IsString()\r\n id!: string;\r\n\r\n // DUPLICATED SCHEMA DEFINITION\r\n // - duplicated function call + property type\r\n // - have to specify `isArray` and `nullable` props by yourself\r\n @ApiProperty({\r\n type: () => AttachmentFile,\r\n nullable: true,\r\n isArray: true,\r\n minItems: 1,\r\n description: \"List of attached files.\",\r\n })\r\n @Type(() => AttachmentFile)\r\n @IsArray()\r\n @ArrayNotEmpty()\r\n @IsOptional()\r\n @IsObject({ each: true })\r\n @ValidateNested({ each: true })\r\n files!: AttachmentFile[] | null;\r\n\r\n @ApiProperty({\r\n type: \"string\",\r\n nullable: true,\r\n minLength: 5,\r\n maxLength: 100,\r\n description: \"Title of the article.\",\r\n })\r\n @IsOptional()\r\n @IsString()\r\n title!: string | null;\r\n\r\n @ApiProperty({\r\n description: \"Main content body of the article.\"\r\n })\r\n @IsString()\r\n body!: string;\r\n\r\n @ApiProperty({\r\n format: \"date-time\",\r\n description: \"Creation time of article\",\r\n })\r\n @IsString()\r\n created_at!: string;\r\n}\r\n\r\nexport class AttachmentFile {\r\n @ApiProperty({\r\n type: \"string\",\r\n nullable: true,\r\n maxLength: 255,\r\n pattern: \"^[a-zA-Z0-9-_]+$\",\r\n description: \"File name.\",\r\n })\r\n @Matches(/^[a-z0-9]+$/)\r\n @MaxLength(255)\r\n @IsOptional()\r\n @IsString()\r\n name!: string | null;\r\n\r\n @ApiProperty({\r\n type: \"string\",\r\n nullable: true,\r\n maxLength: 255,\r\n pattern: \"^[a-zA-Z0-9-_]+$\",\r\n description: \"File extension.\",\r\n })\r\n @Matches(/^[a-z0-9]+$/)\r\n @MaxLength(8)\r\n @IsOptional()\r\n @IsString()\r\n extension!: string | null;\r\n\r\n @ApiProperty({\r\n format: \"url\",\r\n description: \"URL of the file.\",\r\n })\r\n @IsString()\r\n url!: string;\r\n}\n{\r\n \"schemas\": [\r\n {\r\n \"$ref\": \"components#/schemas/IBbsArticle\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {\r\n \"IBbsArticle\": {\r\n \"$id\": \"components#/schemas/IBbsArticle\",\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"nullable\": false,\r\n \"description\": \"Primary Key.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"format\",\r\n \"value\": \"uuid\"\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"format\",\r\n \"text\": [\r\n {\r\n \"text\": \"uuid\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"format\": \"uuid\"\r\n },\r\n \"files\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"components#/schemas/IAttachmentFile\",\r\n \"description\": \"List of attached files.\",\r\n \"minItems\": 1,\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n \"nullable\": true,\r\n \"description\": \"List of attached files.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"nullable\": true,\r\n \"description\": \"Title of the article.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"minLength\",\r\n \"value\": 5\r\n },\r\n {\r\n \"kind\": \"maxLength\",\r\n \"value\": 100\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"minLength\",\r\n \"text\": [\r\n {\r\n \"text\": \"5\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"maxLength\",\r\n \"text\": [\r\n {\r\n \"text\": \"100\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"minLength\": 5,\r\n \"maxLength\": 100\r\n },\r\n \"body\": {\r\n \"type\": \"string\",\r\n \"nullable\": false,\r\n \"description\": \"Main content body of the article.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n \"created_at\": {\r\n \"type\": \"string\",\r\n \"nullable\": false,\r\n \"description\": \"Creation time of article.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"format\",\r\n \"value\": \"datetime\"\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"format\",\r\n \"text\": [\r\n {\r\n \"text\": \"date-time\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"format\": \"date-time\"\r\n }\r\n },\r\n \"nullable\": false,\r\n \"required\": [\r\n \"id\",\r\n \"files\",\r\n \"title\",\r\n \"body\",\r\n \"created_at\"\r\n ],\r\n \"x-typia-jsDocTags\": []\r\n },\r\n \"IAttachmentFile\": {\r\n \"$id\": \"components#/schemas/IAttachmentFile\",\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true,\r\n \"description\": \"File name.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"pattern\",\r\n \"value\": \"^[a-z0-9]+$\"\r\n },\r\n {\r\n \"kind\": \"maxLength\",\r\n \"value\": 255\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"pattern\",\r\n \"text\": [\r\n {\r\n \"text\": \"^[a-z0-9]+$\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"maxLength\",\r\n \"text\": [\r\n {\r\n \"text\": \"255\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"pattern\": \"^[a-z0-9]+$\",\r\n \"maxLength\": 255\r\n },\r\n \"extension\": {\r\n \"type\": \"string\",\r\n \"nullable\": true,\r\n \"description\": \"File extension.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"pattern\",\r\n \"value\": \"^[a-z0-9]+$\"\r\n },\r\n {\r\n \"kind\": \"maxLength\",\r\n \"value\": 8\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"pattern\",\r\n \"text\": [\r\n {\r\n \"text\": \"^[a-z0-9]+$\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"maxLength\",\r\n \"text\": [\r\n {\r\n \"text\": \"8\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"pattern\": \"^[a-z0-9]+$\",\r\n \"maxLength\": 8\r\n },\r\n \"url\": {\r\n \"type\": \"string\",\r\n \"nullable\": false,\r\n \"description\": \"URL of the file.\",\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"format\",\r\n \"text\": [\r\n {\r\n \"text\": \"uri\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"format\": \"uri\"\r\n }\r\n },\r\n \"nullable\": false,\r\n \"required\": [\r\n \"name\",\r\n \"extension\",\r\n \"url\"\r\n ],\r\n \"x-typia-jsDocTags\": []\r\n }\r\n }\r\n },\r\n \"purpose\": \"ajv\",\r\n \"prefix\": \"components#/schemas\"\r\n}\nimport { tags } from \"typia\";\r\n\r\nexport interface IBbsArticle {\r\n /**\r\n * Primary Key.\r\n */\r\n id: string & tags.Format<\"uuid\">;\r\n\r\n /**\r\n * List of attached files.\r\n */\r\n files: null | (IAttachmentFile[] & tags.MinItems<1>);\r\n\r\n /**\r\n * Title of the article.\r\n */\r\n title: null | (string & tags.MinLength<5> & tags.MaxLength<100>);\r\n\r\n /**\r\n * Main content body of the article.\r\n */\r\n body: string;\r\n\r\n /**\r\n * Creation time of article.\r\n */\r\n created_at: string & tags.Format<\"datetime\">;\r\n}\r\n\r\nexport interface IAttachmentFile {\r\n /**\r\n * File name.\r\n */\r\n name: \r\n | null \r\n | (string & tags.Pattern<\"^[a-z0-9]+$\"> & tags.MaxLength<255>);\r\n\r\n /**\r\n * File extension.\r\n */\r\n extension: \r\n | null \r\n | (string & tags.Pattern<\"^[a-z0-9]+$\"> & tags.MaxLength<8>);\r\n\r\n /**\r\n * URL of the file.\r\n */\r\n url: string & tags.Format<\"uri\">;\r\n}","aot-compilation#AOT Compilation":"Someone may be suspicious of the phrase \"Pure TypeScript Type\".\n\"As you know, TypeScript types do not have any tangible instance when compiled to JS.However, with only these fictitious TypeScript types, how can typia validates types at runtime? How typia builds much faster JSON serializer only with these types? Are these things really possible without extra schema definition like class-validator or ajv?\"\nMy answer is: \"Yes, it is possible due to typia analyzes your server code, and performs AOT compilation\".Such compile time optimization is called AOT (Ahead of Time) compilation. And this is the secret why typia can do everything with only pure TypeScript type. Read below example codes, and just look how JavaScript file being compiled. Then you may understand why typia is much easier, and futhermore much faster.\nRuntime validator is 20,000x faster than class-validator\nJSON serialization is 200x faster than class-transformer\nexport interface IBbsArticle {\r\n /**\r\n * Primary Key.\r\n * \r\n * @format uuid\r\n */\r\n id: string;\r\n\r\n /**\r\n * List of attached files.\r\n * \r\n * @minItems 1\r\n */\r\n files: IAttachmentFile[] | null;\r\n\r\n /**\r\n * Title of the article.\r\n * \r\n * @minLength 5\r\n * @maxLength 100\r\n */\r\n title: string | null;\r\n\r\n /**\r\n * Main content body of the article.\r\n */\r\n body: string;\r\n\r\n /**\r\n * Creation time of article.\r\n * \r\n * @format date-time\r\n */\r\n created_at: string;\r\n}\r\n\r\nexport interface IAttachmentFile {\r\n /**\r\n * File name.\r\n * \r\n * @pattern ^[a-z0-9]+$\r\n * @maxLength 255\r\n */\r\n name: string | null;\r\n\r\n /**\r\n * File extension.\r\n * \r\n * @pattern ^[a-z0-9]+$\r\n * @maxLength 8\r\n */\r\n extension: string | null;\r\n\r\n /**\r\n * URL of the file.\r\n * \r\n * @format uri\r\n */\r\n url: string;\r\n}\nimport typia from \"typia\";\r\n\r\nimport { IBbsArticle } from \"./IBbsArticle\";\r\n\r\nexport const assertArticle = typia.createAssert();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.assertArticle = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst assertArticle = input => {\r\n const $guard = typia_1.default.createAssert.guard;\r\n const $is_uuid = typia_1.default.createAssert.is_uuid;\r\n const $is_datetime = typia_1.default.createAssert.is_datetime;\r\n const __is = input => {\r\n const $is_uuid = typia_1.default.createAssert.is_uuid;\r\n const $is_datetime = typia_1.default.createAssert.is_datetime;\r\n const $io0 = input => \"string\" === typeof input.id && $is_uuid(input.id) && (null === input.files || Array.isArray(input.files) && 1 <= input.files.length && input.files.every(elem => \"object\" === typeof elem && null !== elem && $io1(elem))) && (null === input.title || \"string\" === typeof input.title && 5 <= input.title.length && 100 >= input.title.length) && \"string\" === typeof input.body && (\"string\" === typeof input.created_at && $is_datetime(input.created_at));\r\n const $io1 = input => (null === input.name || \"string\" === typeof input.name && RegExp(/^[a-z0-9]+$/).test(input.name) && 255 >= input.name.length) && (null === input.extension || \"string\" === typeof input.extension && RegExp(/^[a-z0-9]+$/).test(input.extension) && 8 >= input.extension.length) && \"string\" === typeof input.url;\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $ao0 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.id && ($is_uuid(input.id) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string (@format uuid)\",\r\n value: input.id\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string\",\r\n value: input.id\r\n })) && (null === input.files || (Array.isArray(input.files) && (1 <= input.files.length || $guard(_exceptionable, {\r\n path: _path + \".files\",\r\n expected: \"Array.length (@minItems 1)\",\r\n value: input.files\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".files\",\r\n expected: \"(Array | null)\",\r\n value: input.files\r\n })) && input.files.every((elem, _index1) => (\"object\" === typeof elem && null !== elem || $guard(_exceptionable, {\r\n path: _path + \".files[\" + _index1 + \"]\",\r\n expected: \"IAttachmentFile\",\r\n value: elem\r\n })) && $ao1(elem, _path + \".files[\" + _index1 + \"]\", true && _exceptionable))) && (null === input.title || \"string\" === typeof input.title && (5 <= input.title.length || $guard(_exceptionable, {\r\n path: _path + \".title\",\r\n expected: \"string (@minLength 5)\",\r\n value: input.title\r\n })) && (100 >= input.title.length || $guard(_exceptionable, {\r\n path: _path + \".title\",\r\n expected: \"string (@maxLength 100)\",\r\n value: input.title\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".title\",\r\n expected: \"(null | string)\",\r\n value: input.title\r\n })) && (\"string\" === typeof input.body || $guard(_exceptionable, {\r\n path: _path + \".body\",\r\n expected: \"string\",\r\n value: input.body\r\n })) && (\"string\" === typeof input.created_at && ($is_datetime(input.created_at) || $guard(_exceptionable, {\r\n path: _path + \".created_at\",\r\n expected: \"string (@format datetime)\",\r\n value: input.created_at\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".created_at\",\r\n expected: \"string\",\r\n value: input.created_at\r\n }));\r\n const $ao1 = (input, _path, _exceptionable = true) => (null === input.name || \"string\" === typeof input.name && (RegExp(/^[a-z0-9]+$/).test(input.name) || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string (@pattern ^[a-z0-9]+$)\",\r\n value: input.name\r\n })) && (255 >= input.name.length || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string (@maxLength 255)\",\r\n value: input.name\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"(null | string)\",\r\n value: input.name\r\n })) && (null === input.extension || \"string\" === typeof input.extension && (RegExp(/^[a-z0-9]+$/).test(input.extension) || $guard(_exceptionable, {\r\n path: _path + \".extension\",\r\n expected: \"string (@pattern ^[a-z0-9]+$)\",\r\n value: input.extension\r\n })) && (8 >= input.extension.length || $guard(_exceptionable, {\r\n path: _path + \".extension\",\r\n expected: \"string (@maxLength 8)\",\r\n value: input.extension\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".extension\",\r\n expected: \"(null | string)\",\r\n value: input.extension\r\n })) && (\"string\" === typeof input.url || $guard(_exceptionable, {\r\n path: _path + \".url\",\r\n expected: \"string\",\r\n value: input.url\r\n }));\r\n return (\"object\" === typeof input && null !== input || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IBbsArticle\",\r\n value: input\r\n })) && $ao0(input, _path + \"\", true);\r\n })(input, \"$input\", true);\r\n return input;\r\n};\r\nexports.assertArticle = assertArticle;\nMeasured on Intel i5-1135g7, Surface Pro 8"}},"/docs/setup":{"title":"Setup","data":{"summary#Summary":"npm install typia\r\nnpx typia setup\npnpm install typia\r\npnpm typia setup --manager pnpm\n# YARN BERRY IS NOT SUPPORTED\r\nyarn add typia\r\nyarn typia setup --manager yarn\nIf you're using standard TypeScript compiler, you can use transform mode.Just run npx typia setup command, then everything be prepared.\nStandard TypeScript Compiler: Microsoft/TypeScript\nnpm install typia\r\nnpm install --save-dev typescript\r\n\r\nnpx typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\npnpm install typia\r\npnpm install --save-dev typescript\r\n\r\npnpm typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\nyarn add typia\r\nyarn add -D typescript\r\n\r\nyarn typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\nOtherwise you are using non-standard TypeScript compiler, then you can't use transformation mode.Instead, you can use generation mode.Run typia generate command with input directory, then transformed TypeScript files would be generated into the output directory.\nNon-standard TypeScript Compilers\nSWC\nESBuild\nBabel","transformation#Transformation":"","concepts#Concepts":"AOT (Ahead of Time) compilation mode.When you write a TypeScript code calling typia.createIs() function and compile it through tsc command, typia will replace the typia.createIs() statement to optimal validation code in the compiled JavaScript file, for the IMember type.This is the transform mode performing AOT (Ahead of Time) compilation.\nimport typia from \"typia\";\r\n\r\nexport const check = typia.createIs();\r\n\r\ninterface IMember {\r\n /**\r\n * @format uuid\r\n */\r\n id: string;\r\n \r\n /**\r\n * @format email\r\n */\r\n email: string;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n age: number;\r\n}\nimport typia from \"typia\";\r\nexport const check = input => {\r\n const $is_uuid = typia.createIs.is_uuid;\r\n const $is_email = typia.createIs.is_email;\r\n return \"object\" === typeof input && \r\n null !== input && \r\n (\r\n \"string\" === typeof input.id && $is_uuid(input.id) && \r\n (\"string\" === typeof input.email && $is_email(input.email)) && \r\n (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age)\r\n );\r\n};","setup-wizard#Setup Wizard":"npm install --save typia\r\nnpx typia setup\npnpm install --save typia\r\npnpm typia setup --manager pnpm\n# YARN BERRY IS NOT SUPPORTED\r\nyarn add typia\r\nyarn typia setup --manager yarn\nYou can turn on transformation mode just by running npx typia setup command.Setup wizard would be executed, and it will do everything for the transformation.","manual-setup#Manual Setup":"npm install --save typia\r\nnpm install --save-dev typescript ts-patch ts-node\npnpm install --save typia\r\npnpm install --save-dev typescript ts-patch ts-node\n# YARN BERRY IS NOT SUPPORTED\r\nyarn add typia\r\nyarn add -D typescript ts-patch ts-node\nIf you want to install typia manually, just follow the steps.At first, install typia as depepdency. And then, install typescript, ts-patch and ts-node as devDependencies.\n{\r\n \"strict\": true,\r\n \"strictNullChecks\": true,\r\n \"compilerOptions\": {\r\n \"plugins\": [\r\n { \"transform\": \"typia/lib/transform\" }\r\n ]\r\n }\r\n}\nAt second, open your tsconfig.json file and configure like above.As typia generates optimal operation code through transformation, you've to configure it as a plugin. Also, never forget to configure strict (or strictNullChecks) to be true. It is essential option for modern TypeScript development.\n{\r\n \"scripts\": {\r\n \"prepare\": \"ts-patch install && typia patch\"\r\n },\r\n \"dependencies\": {\r\n \"typia\": \"^4.1.8\"\r\n },\r\n \"devDependencies\": {\r\n \"ts-node\": \"^10.9.1\",\r\n \"ts-patch\": \"^3.0.2\",\r\n \"typescript\": \"^5.1.6\"\r\n }\r\n}\nnpm run prepare\npnpm prepare\n# YARN BERRY IS NOT SUPPORTED\r\nyarn prepare\nAt last, open package.json file and configure npm run prepare command like above.Of course, you've to run the npm run prepare command after the configuration.For reference, ts-patch is an helper library of TypeScript compiler that supporting custom transformations by plugins. From now on, whenever you run tsc command, your typia function call statements would be transformed to the optimal operation codes in the compiled JavaScript files.\nnpx typia patch\nSince TypeScript v5.3 update, tsc no more parses JSDocComments. Therefore, typia also cannot utilize those JSDocComment related features too, especially \"Comment Tags\" and \"JSON schema generator\".The npx typia patch command has been developed to revive the JSDocComment parsing feature of tsc. It is temporary solution for the TypeScript v5.3 update instead of ts-patch, and will be disabled after ts-patch starts supporting such TypeScript v5.3 update.Of course, if you don't use any \"Comment Tags\" and \"JSON schema generator\", you don't need to run npx typia patch command. This is not mandatory command, but just optional command.","generation#Generation":"# INSTALL TYPIA\r\nnpm install --save typia\r\nnpm install --save-dev typescript\r\n\r\n# GENERATE TRANSFORMED TYPESCRIPT CODES\r\nnpx typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\n# INSTALL TYPIA\r\npnpm install --save typia\r\npnpm install --save-dev typescript\r\n\r\n# GENERATE TRANSFORMED TYPESCRIPT CODES\r\npnpm typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\n# INSTALL TYPIA\r\nyarn add typia\r\nyarn add -D typescript\r\n\r\n# GENERATE TRANSFORMED TYPESCRIPT CODES\r\nyarn typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\nFor frontend projects.If you're using non-standard TypeScript compiler, you can't use transform mode\nNon-standard TypeScript compilers:\nSWC in Next.JS\nESBuild in Vite\nBabel in Create-React-App\nInstead, you should utilize the generation mode.Install typia through npm install command, and run typia generate command. Then, generator of typia reads your TypeScript codes of --input, and writes transformed TypeScript files into the --output directory, like below.If you want to specify other TypeScript project file instead of tsconfig.json, you can use --project option.\nimport typia from \"typia\";\r\n\r\nimport { IMember } from \"../structures/IMember\";\r\n\r\nexport const check = typia.createIs();\nimport typia from \"typia\";\r\nimport { IMember } from \"../structures/IMember\";\r\nexport const check = (input: any): input is IMember => {\r\n const $is_uuid = (typia.createIs as any).is_uuid;\r\n const $is_email = (typia.createIs as any).is_email;\r\n return \"object\" === typeof input && \r\n null !== input && \r\n (\r\n \"string\" === typeof input.id && is_uuid(input.id) && \r\n (\"string\" === typeof input.email && $is_email(input.email)) && \r\n (\"number\" === typeof input.age && 19 <= input.age && 100 >= input.age)\r\n );\r\n};\nWhy not support non-standard compilers?\nNon-standard TypeScript compilers are removing every type informations, and skipping type checkings for rapid compilation. By the way, without those type informations, typia can't do anything. This is the reason why typia doesn't support non-standard TypeScript compilers.By the way, SWC is preparing a new project STC keeping type informations. Therefore, typia will support it.","vite#Vite":"If you've made your frontend project through vite, you can still utilize the transformation mode.Just configure vite.config.ts file below, that's all.\nimport { defineConfig } from 'vite'\r\nimport react from '@vitejs/plugin-react'\r\nimport typescript from \"rollup-plugin-typescript2\";\r\n\r\n// https://vitejs.dev/config/\r\nexport default defineConfig({\r\n esbuild: false,\r\n plugins: [\r\n react(),\r\n typescript(),\r\n ],\r\n});\nBy the way, if you're composing monorepo, and need to import some external TypeScript files from the other package of the monorepo, you've to configure the vite.config.ts a little bit different. When declaring typescript plugin, you've to specify include and exclude options like below.\nimport { defineConfig } from 'vite'\r\nimport react from '@vitejs/plugin-react'\r\nimport typescript from \"rollup-plugin-typescript2\";\r\n\r\n// https://vitejs.dev/config/\r\nexport default defineConfig({\r\n esbuild: false,\r\n plugins: [\r\n react(),\r\n typescript({\r\n // WHEN MONOREPO\r\n include: [\r\n \"./**/*.ts+(|x)\",\r\n \"../../core/**/*.ts+(|x)\",\r\n \"../../util/**/*.ts+(|x)\",\r\n ],\r\n exclude: [\"../../node_modules\"],\r\n }),\r\n ],\r\n});","webpack#Webpack":"# TYPIA\r\nnpm install typia\r\nnpx typia setup\r\n\r\n# WEBPACK + TS-LOADER\r\nnpm install --save-dev ts-loader\r\nnpm install --save-dev webpack webpack-cli\n# TYPIA\r\npnpm install typia\r\npnpm typia setup --manager pnpm\r\n\r\n# WEBPACK + TS-LOADER\r\npnpm install --save-dev ts-loader\r\npnpm install --save-dev webpack webpack-cli\n###########################################\r\n# YARN BERRY IS NOT SUPPORTED\r\n###########################################\r\n# TYPIA\r\nyarn add typia\r\nyarn typia setup --manager yarn\r\n\r\n# WEBPACK + TS-LOADER\r\nyarn add -D ts-loader\r\nyarn add -D webpack webpack-cli\nWhen you're using webpack as a bundler, you can still utilize the transformation mode.Just install ts-loader as well as webpack, and configure webpack.config.js file like below.\nconst path = require(\"path\");\r\nconst nodeExternals = require('webpack-node-externals');\r\n \r\nmodule.exports = {\r\n // CUSTOMIZE HERE\r\n entry: ['./src/index.tsx'],\r\n output: {\r\n path: path.join(__dirname, 'dist'),\r\n filename: 'index.js',\r\n },\r\n optimization: {\r\n minimize: false\r\n },\r\n \r\n // JUST KEEP THEM\r\n mode: 'development',\r\n target: 'node',\r\n module: {\r\n rules: [\r\n {\r\n test: /\\.ts$/,\r\n exclude: /node_modules/,\r\n loader: 'ts-loader',\r\n }\r\n ]\r\n },\r\n resolve: {\r\n extensions: ['.tsx', '.ts', '.js'],\r\n },\r\n};\nFrom now on, you can build the single JS file just by running the npx webpack command. By the way, when removing devDependencies for --production install, never forget to add the --ignore-scripts option to prevent the prepare script.\nnpx webpack\r\nnpm ci --omit=dev --ignore-scripts\npnpm webpack\r\npnpm install --production --ignore-scripts\nyarn webpack\r\nrm -rf node_modules\r\nyarn install --production --ignore-scripts --immutable\nAdditionally, if you're using typia in the NodeJS project especially for the backend development, Setup Guide Documents of nestia would be helpful. Even though you're not using NestJS, you can still utilize below documents, and \"Single JS file only\" mode would be especially helpful for you.\nNestia > Setup > Webpack\nWith node_modules\nSingle JS file only","nx#NX":"npm install --save typia\r\nnpx typia setup\npnpm install --save typia\r\npnpm typia setup --manager pnpm\n# YARN BERRY IS NOT SUPPORTED\r\nyarn add typia\r\nyarn typia setup --manager yarn\nAfter install typia like above, you have to modify project.json on each app like below.\n \"targets\": {\r\n \"build\": {\r\n ...\r\n \"options\": {\r\n ...\r\n \"target\": \"node\",\r\n \"compiler\": \"tsc\",\r\n \"transformers\": [\r\n \"typia/lib/transform\",\r\n ]\r\n }\r\n },\r\n ...\r\n }"}},"/docs/random":{"title":"Random","data":{"random-function#random() function":"export function random(g?: IRandomGenerator): Resolved;\nexport interface IRandomGenerator {\r\n boolean(): boolean;\r\n integer(minimum?: number, maximum?: number): number;\r\n number(minimum?: number, maximum?: number): number;\r\n bigint(minimum?: bigint, maximum?: bigint): bigint;\r\n string(length?: number): string;\r\n array(closure: (index: number) => T, count?: number): T[];\r\n length(): number;\r\n\r\n uuid(): string;\r\n email(): string;\r\n url(): string;\r\n ipv4(): string;\r\n ipv6(): string;\r\n pattern(regex: RegExp): string;\r\n date(minimum?: number, maximum?: number): string;\r\n datetime(minimum?: number, maximum?: number): string;\r\n\r\n customs?: IRandomGenerator.CustomMap;\r\n}\r\nexport namespace IRandomGenerator {\r\n export type CustomMap = {\r\n [Type in keyof Customizable]?: (\r\n tags: ITypeTag[],\r\n ) => Customizable[Type] | undefined;\r\n };\r\n\r\n export interface ITypeTag {\r\n name: string;\r\n kind: string;\r\n value: any;\r\n }\r\n}\nexport interface Customizable {\r\n number: number;\r\n string: string;\r\n bigint: bigint;\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nYou can make every random data just by calling typia.random() function.When you call the typia.random() function, typia will analyze your type T, and writes optimal random generation code for the type T, in the compilation level. This is called AOT (Ahead of Time) compliation, and you may understand what it is just by reading below example code.\nimport typia, { tags } from \"typia\";\r\n\r\nconst member: IMember = typia.random();\r\nconsole.log(member);\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst member = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"uuid\\\">\",\r\n kind: \"format\",\r\n value: \"uuid\",\r\n }\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n email: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"email\\\">\",\r\n kind: \"format\",\r\n value: \"email\",\r\n }\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n age: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"uint32\\\">\",\r\n kind: \"type\",\r\n value: \"uint32\",\r\n },\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19,\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100,\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(19, 100)\r\n });\r\n return $ro0();\r\n})();\r\nconsole.log(member);","reusable-function#Reusable function":"export function createRandom(): (g?: IRandomGenerator) => Resolved;\nexport interface IRandomGenerator {\r\n boolean(): boolean;\r\n integer(minimum?: number, maximum?: number): number;\r\n number(minimum?: number, maximum?: number): number;\r\n bigint(minimum?: bigint, maximum?: bigint): bigint;\r\n string(length?: number): string;\r\n array(closure: (index: number) => T, count?: number): T[];\r\n\r\n uuid(): string;\r\n email(): string;\r\n url(): string;\r\n ipv4(): string;\r\n ipv6(): string;\r\n pattern(regex: RegExp): string;\r\n date(minimum?: number, maximum?: number): string;\r\n datetime(minimum?: number, maximum?: number): string;\r\n\r\n customs?: IRandomGenerator.CustomMap;\r\n}\r\nexport namespace IRandomGenerator {\r\n export type CustomMap = {\r\n [Type in keyof Customizable]?: \r\n (tags: ICommentTag[]) => Customizable[Type] | undefined;\r\n };\r\n\r\n export interface ICommentTag {\r\n name: string;\r\n value?: string;\r\n }\r\n}\nexport interface Customizable {\r\n number: number;\r\n string: string;\r\n bigint: bigint;\r\n}\nReusable typia.random() function generators.If you repeat to call typia.random() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createRandom() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const createRandomMember = typia.createRandom();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.createRandomMember = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst createRandomMember = generator => {\r\n const $generator = typia_1.default.createRandom.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"uuid\\\">\",\r\n kind: \"format\",\r\n value: \"uuid\",\r\n }\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n email: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"email\\\">\",\r\n kind: \"format\",\r\n value: \"email\",\r\n }\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n age: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"uint32\\\">\",\r\n kind: \"type\",\r\n value: \"uint32\",\r\n },\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19,\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100,\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(19, 100)\r\n });\r\n return $ro0();\r\n};\r\nexports.createRandomMember = createRandomMember;\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}","special-tags#Special Tags":"Runtime validators of typia provides additional type checking logic through Type Tags and Comment Tags. typia.random() function also like that. typia.random() function can utilize those tags to specialize the behavior of random data generation.For reference, whether you choose Type Tags or Comment Tags. typia.random(), it is not a matter for typia.random() function. Below two TypeScript codes are generating exactly same JavaScript code. Therefore, you can choose whatever you want considering your preference.\nimport typia, { tags } from \"typia\";\r\n\r\nconst data: TypeTag = typia.random();\r\n\r\nconsole.log(data);\r\n\r\ninterface TypeTag {\r\n type: number & tags.Type<\"int32\">;\r\n number?: number & tags.ExclusiveMinimum<19> & tags.Maximum<100>;\r\n string: string & tags.MinLength<3>;\r\n pattern: string & tags.Pattern<\"^[a-z]+$\">;\r\n format: (string & tags.Format<\"date-time\">) | null;\r\n}\nimport typia from \"typia\";\r\n\r\nconst data: CommentTag = typia.random();\r\n\r\nconsole.log(data);\r\n\r\ninterface CommentTag {\r\n /**\r\n * @type int\r\n */\r\n type: number;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n number?: number;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n string: string;\r\n\r\n /**\r\n * @pattern ^[a-z]+$\r\n */\r\n pattern: string;\r\n\r\n /**\r\n * @format date-time\r\n */\r\n format: string | null;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst data = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $pick = typia_1.default.random.pick;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n type: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"int32\\\">\",\r\n kind: \"type\",\r\n value: \"int32\"\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(0, 100),\r\n number: $pick([\r\n () => undefined,\r\n () => (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100\r\n }\r\n ]) ?? (generator?.number ?? $generator.number)(19, 100)\r\n ])(),\r\n string: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"MinLength<3>\",\r\n kind: \"minLength\",\r\n value: 3\r\n }\r\n ]) ?? (generator?.string ?? $generator.string)((generator?.integer ?? $generator.integer)(3, 25)),\r\n pattern: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Pattern<\\\"^[a-z]+$\\\">\",\r\n kind: \"pattern\",\r\n value: \"^[a-z]+$\"\r\n }\r\n ]) ?? (generator?.pattern ?? $generator.pattern)(/^[a-z]+$/),\r\n format: $pick([\r\n () => null,\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"date-time\\\">\",\r\n kind: \"format\",\r\n value: \"date-time\"\r\n }\r\n ]) ?? (generator?.datetime ?? $generator.datetime)()\r\n ])()\r\n });\r\n return $ro0();\r\n})();\r\nconsole.log(data);","customization#Customization":"export function random(g?: IRandomGenerator): Resolved;\r\nexport function createRandom: (g?: IRandomGenerator) => Resolved;\nexport interface IRandomGenerator {\r\n boolean(): boolean;\r\n integer(minimum?: number, maximum?: number): number;\r\n number(minimum?: number, maximum?: number): number;\r\n bigint(minimum?: bigint, maximum?: bigint): bigint;\r\n string(length?: number): string;\r\n array(closure: (index: number) => T, count?: number): T[];\r\n\r\n uuid(): string;\r\n email(): string;\r\n url(): string;\r\n ipv4(): string;\r\n ipv6(): string;\r\n pattern(regex: RegExp): string;\r\n date(minimum?: number, maximum?: number): string;\r\n datetime(minimum?: number, maximum?: number): string;\r\n\r\n customs?: IRandomGenerator.CustomMap;\r\n}\r\nexport namespace IRandomGenerator {\r\n export type CustomMap = {\r\n [Type in keyof Customizable]?: \r\n (tags: ICommentTag[]) => Customizable[Type] | undefined;\r\n };\r\n\r\n export interface ICommentTag {\r\n name: string;\r\n value?: string;\r\n }\r\n}\nexport interface Customizable {\r\n number: number;\r\n string: string;\r\n bigint: bigint;\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nYou can add custom type tags for random data generation.As above IRandomGenerator.CustomMap has a little bit complicate type, it may hard to understand for newcomers. However, such newcomers may easily understand, how to customize the random generation, just by reading the following example.Just define custom type tags like below, then everything would be done.For reference, when defining custom type tag, typia enforces user to define validate function literal for type safety. Never forget it when you define custom type tags for random generation. Such validation logic definition may enhance your random data generator logic when combining with typia.assert() function.\nimport typia from \"typia\";\r\nimport { RandomGenerator } from \"typia/lib/utils/RandomGenerator\";\r\n\r\nconst data: TagCustom = typia.random({\r\n customs: {\r\n string: (tags) => {\r\n if (tags.find((t) => t.kind === \"dollar\") !== undefined)\r\n return \"$\" + RandomGenerator.integer();\r\n const postfix = tags.find((t) => t.kind === \"postfix\");\r\n if (postfix !== undefined)\r\n return RandomGenerator.string() + postfix.value;\r\n },\r\n },\r\n});\r\n\r\nconsole.log(data);\r\n\r\ninterface TagCustom {\r\n id: string & typia.tags.Format<\"uuid\">;\r\n dollar: string & Dolloar;\r\n postfix: string & Postfix<\"abcd\">;\r\n powerOf: number & PowerOf<2>;\r\n}\r\n\r\ntype Dolloar = typia.tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n\r\ntype Postfix = typia.tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n\r\ntype PowerOf = typia.tags.TagBase<{\r\n kind: \"powerOf\";\r\n target: \"number\";\r\n value: Value;\r\n validate: `(() => {\r\n const denominator: number = Math.log(${Value});\r\n const value: number = Math.log($input) / denominator;\r\n return Math.abs(value - Math.round(value)) < 0.00000001;\r\n })()`;\r\n}>;\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst RandomGenerator_1 = require(\"typia/lib/utils/RandomGenerator\");\r\nconst data = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"uuid\\\">\",\r\n kind: \"format\",\r\n value: \"uuid\"\r\n }\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n dollar: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Dolloar\",\r\n kind: \"dollar\"\r\n }\r\n ]) ?? (generator?.string ?? $generator.string)(),\r\n postfix: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Postfix<\\\"abcd\\\">\",\r\n kind: \"postfix\",\r\n value: \"abcd\"\r\n }\r\n ]) ?? (generator?.string ?? $generator.string)(),\r\n powerOf: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"PowerOf<2>\",\r\n kind: \"powerOf\",\r\n value: 2\r\n }\r\n ]) ?? (generator?.number ?? $generator.number)(0, 100)\r\n });\r\n return $ro0();\r\n})({\r\n customs: {\r\n string: (tags) => {\r\n if (tags.find((t) => t.kind === \"dollar\") !== undefined)\r\n return \"$\" + RandomGenerator_1.RandomGenerator.integer();\r\n const postfix = tags.find((t) => t.kind === \"postfix\");\r\n if (postfix !== undefined)\r\n return RandomGenerator_1.RandomGenerator.string() + postfix.value;\r\n },\r\n },\r\n});\r\nconsole.log(data);"}},"/docs/utilization/trpc":{"title":"Trpc","data":{"":"import { initTRPC } from \"@trpc/server\";\r\nimport { v4 } from \"uuid\";\r\nimport typia from \"typia\";\r\n\r\nimport { IBbsArticle } from \"../structures/IBbsArticle\";\r\n\r\nconst server = initTRPC.create();\r\n\r\nexport const appRouter = server.router({\r\n store: server.procedure\r\n .input(typia.createAssert())\r\n .output(typia.createAssert())\r\n .query(({ input }) => {\r\n return {\r\n id: v4(),\r\n writer: input.writer,\r\n title: input.title,\r\n body: input.body,\r\n created_at: new Date().toString(),\r\n };\r\n })\r\n});\r\nexport type AppRouter = typeof appRouter;"}},"/docs/validators/is":{"title":"Is","data":{"is-function#is() function":"export function is(input: T): input is T;\r\nexport function is(input: unknown): input is T;\nTests a value type.When you need to test an instance type, just call typia.is() function.If the input value is following type T, true value would be returned. Otherwise, false would be returned.\nAOT compliation\nIf you'd used other competitive validator libraries like ajv or class-validator, you may found that typia does not require any extra schema definition. If you have not experienced them, I can sure that you may get shocked after reading below extra schema definition files.\najv requires JSON schema definition.\nclass-validator requires DTO class with decorator function calls.\nYeah, typia needs only pure TypeScript type. As typia is a compiler library, it can analyze TypeScript type by itself, and possible to write the optimal validation code like below. This is the key principle of typia, which needs only one line with pure TypeScript type.\nimport typia, { tags } from \"typia\";\r\nimport { v4 } from \"uuid\";\r\n\r\nconst matched: boolean = typia.is({\r\n id: v4(),\r\n email: \"samchon.github@gmai19l.com\",\r\n age: 30,\r\n});\r\n\r\nconsole.log(matched); // true\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst uuid_1 = require(\"uuid\");\r\nconst matched = ((input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n})({\r\n id: (0, uuid_1.v4)(),\r\n email: \"samchon.github@gmai19l.com\",\r\n age: 30,\r\n});\r\nconsole.log(matched); // true","equals-function#equals() function":"export function equals(input: T): input is T;\r\nexport function equals(input: unknown): input is T;\nMore strict checker prohibiting superfluous properties.typia.is() can test instance type, but it allows superfluous properties.If you want to prohibit those superfluous properties, you can use typia.equals() function instead.\nimport typia, { tags } from \"typia\";\r\nimport { v4 } from \"uuid\";\r\n\r\nconst input: unknown = {\r\n id: v4(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n extra: \"superfluous property\", // extra\r\n};\r\nconst is: boolean = typia.is(input);\r\nconst equals: boolean = typia.equals(input);\r\n\r\nconsole.log(is, equals); // true, false\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst uuid_1 = require(\"uuid\");\r\nconst input = {\r\n id: (0, uuid_1.v4)(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n extra: \"superfluous property\", // extra\r\n};\r\nconst is = ((input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n})(input);\r\nconst equals = ((input, _exceptionable = true) => {\r\n const $io0 = (input, _exceptionable = true) =>\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n (3 === Object.keys(input).length ||\r\n Object.keys(input).every((key) => {\r\n if ([\"id\", \"email\", \"age\"].some((prop) => key === prop))\r\n return true;\r\n const value = input[key];\r\n if (undefined === value) return true;\r\n return false;\r\n }));\r\n return \"object\" === typeof input && null !== input && $io0(input, true);\r\n})(input);\r\nconsole.log(is, equals); // true, false","reusable-functions#Reusable functions":"export function createIs(): (input: unknown) => input is T;\r\nexport function createEquals(): (input: unknown) => input is T;\nReusable typia.is() function generators.If you repeat to call typia.is() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createIs() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const check = typia.createIs();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.check = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst check = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n};\r\nexports.check = check;","auto-type-casting#Auto Type Casting":"export function is(input: unknown): input is T;\r\nexport function equals(input: unknown): input is T;\r\nexport function createIs(): (input: unknown) => input is T;\r\nexport function createEquals(): (input: unknown) => input is T;\ntypia.is() function can be used for type casting.When target input value is following the type T, therefore true value be returned, typia.is() function automatically casts the input value to the type T. Therefore, you can utilize the typia.is() function for safe type casting tool like below:\nconst input: unknown = {\r\n id: v4(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n} as any;\r\nif (typia.is(input)) // auto type casting\r\n console.log(input.id, input.email, input.age);","restrictions#Restrictions":"typia.is() function does not check function and user-defined class types.It validates only the primitive properties. Therefore, typia.is() function does not perform the instanceof ClassName for user-defined classes. If you want to validate the user-defined class type in addition to the property types, do it by yourself. Also, typia.is() function does not validate the function type either, unless configuring functional property of plugin option in the tsconfig.json file.\n{\r\n \"compilerOptions\": {\r\n \"plugins\": [\r\n {\r\n \"transform\": \"typia/lib/transform\",\r\n \"functional\": true\r\n }\r\n ]\r\n }\r\n}\nBy the way, there're some exception cases.If JS native class type like Date, Uint8Array, or Map being utilized, typia.is() function validates them. Especially about the Set, and Map class cases, typia.is() function validates all of their contained element types, too.Therefore, the instanceof statement does not be used only for the user-defined classes.\nimport typia from \"typia\";\r\n\r\ntypia.createIs>();\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n(input) => {\r\n return (\r\n input instanceof Map &&\r\n (() =>\r\n [...input].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"string\" === typeof elem[0] &&\r\n (\"string\" === typeof elem[1] ||\r\n \"number\" === typeof elem[1] ||\r\n \"boolean\" === typeof elem[1]),\r\n ))()\r\n );\r\n};","customization#Customization":"You can enhance validation logic by special tags.Also, with those tags, you can add your custom validation logic, too.If you want to know about such special tags detaily, read below article:\nSpecial Tags\nOutline\nType Tags\nComment Tags\nCustomization\nimport typia, { tags } from \"typia\";\r\n\r\nexport const checkSomething = typia.createIs();\r\n\r\n//----\r\n// DEFINE CUSTOM TYPE TAGS\r\n//----\r\ntype Dollar = tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n\r\ntype Postfix = tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n\r\ntype IsEven = tags.TagBase<{\r\n kind: \"isEven\";\r\n target: Value extends number ? \"number\" : \"bigint\";\r\n value: undefined;\r\n validate: `$input % ${Numeric<2>} === ${Numeric<0>}`;\r\n}>;\r\n\r\ntype Numeric = Value extends number\r\n ? Value\r\n : `BigInt(${Value})`;\r\n\r\n//----\r\n// VALIDATION\r\n//----\r\ninterface Something {\r\n dollar: string & Dollar;\r\n postfix: string & Postfix<\"!!!\">;\r\n isEven: number & IsEven;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkSomething = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkSomething = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.dollar &&\r\n input.dollar[0] === \"$\" &&\r\n !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\"))) &&\r\n \"string\" === typeof input.postfix &&\r\n input.postfix.endsWith(\"!!!\") &&\r\n \"number\" === typeof input.isEven &&\r\n input.isEven % 2 === 0\r\n );\r\n};\r\nexports.checkSomething = checkSomething;","performance#Performance":"Super-fast and super-safe.Comparing typia.is() function with other competitive libraries, maximum 20,000x faster.Furthermore, only typia can validate complicate union types.\nMeasured on Intel i5-1135g7, Surface Pro 8\nComponents\ttypia\tTypeBox\tajv\tio-ts\tzod\tC.V.\tEasy to use\t✅\t❌\t❌\t❌\t❌\t❌\tObject (simple)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (recursive)\t✔\t❌\t✔\t✔\t✔\t✔\t✔\tObject (union, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tObject (union, explicit)\t✔\t✔\t✔\t✔\t✔\t❌\tObject (additional tags)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (template literal types)\t✔\t✔\t✔\t❌\t❌\t❌\tObject (dynamic properties)\t✔\t✔\t✔\t❌\t❌\t❌\tArray (rest tuple)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tArray (recursive)\t✔\t✔\t✔\t✔\t✔\t❌\tArray (recursive, union)\t✔\t✔\t❌\t✔\t✔\t❌\tArray (R+U, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated, union)\t✅\t❌\t❌\t❌\t❌\t❌\tUltimate Union Type\t✅\t❌\t❌\t❌\t❌\t❌\t\nC.V. means class-validator"}},"/docs/validators/tags":{"title":"Tags","data":{"outline#Outline":"typia can perform additional validation through type tags and comment tags.When you need additional validation logic that is not supported in pure TypeScript type spec, you can use type tags and comment tags for it. For example, if you define a type with intersection symbol like number & typia.tags.Type<\"uint32\"> and validates it, typia will check the target numeric value is unsigned integer or not.Also, in TypeScript (and JavaScript), writing @ character in comment is called Comment Tag and typia utilizes such comment tags for enhancing type validation logic. As you can see from below example code, typia analyzes @tagName value patterned comment tags, and generates optimal validation logic in the compilation level.Therefore, don't be afraid typia uses only pure TypeScript types for type validation schema. Don't be afraid about TypeScript does not support integer type. With those type tags and comment tags, you can express every types in the world.\nQ: How to validate integer type? TypeScript does not support it\nA1: Use type tag number & typia.tags.Type<\"int32\">\nA2: Write a comment tag @type int32 on the target property\nQ: Type Tag vs Comment Tags, which one is better\nA1: Type Tag is recommended because it is much safer and generous\nA2: Comment Tag is designed for legacy JSDoc styled projects\nimport typia, { tags } from \"typia\";\r\n\r\nexport const checkCustomTag = typia.createIs();\r\n\r\ninterface CustomTag {\r\n /**\r\n * @type uint32\r\n */\r\n type: number;\r\n\r\n number?: number & tags.ExclusiveMinimum<19> & tags.Maximum<100>;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n string: string;\r\n\r\n pattern: string & tags.Pattern<\"^[a-z]+$\">;\r\n\r\n /**\r\n * Type tag can perform union type.\r\n * \r\n * In here case, format can be oneof `ipv4` or `ipv6` format.\r\n */\r\n format: (string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">)) | null;\r\n\r\n /**\r\n * In the Array case, only type tag can restrict element type.\r\n */\r\n array: Array> \r\n & tags.MinItems<3> \r\n & tags.MaxItems<100>;\r\n\r\n /**\r\n * Also, only type tag can handle map type.\r\n */\r\n map: Map<\r\n number & tags.Type<\"uint32\">, \r\n Array> & tags.MinItems<1>\r\n >;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkCustomTag = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkCustomTag = (input) => {\r\n const $io0 = (input) =>\r\n \"number\" === typeof input.type &&\r\n Math.floor(input.type) === input.type &&\r\n 0 <= input.type &&\r\n input.type <= 4294967295 &&\r\n (undefined === input.number ||\r\n (\"number\" === typeof input.number &&\r\n 19 < input.number &&\r\n input.number <= 100)) &&\r\n \"string\" === typeof input.string &&\r\n 3 <= input.string.length &&\r\n \"string\" === typeof input.pattern &&\r\n !isNaN(new Date(input.pattern).getTime()) &&\r\n (null === input.format ||\r\n (\"string\" === typeof input.format &&\r\n (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(\r\n input.format,\r\n ) ||\r\n !isNaN(new Date(input.format).getTime())))) &&\r\n Array.isArray(input.array) &&\r\n 3 <= input.array.length &&\r\n input.array.length <= 100 &&\r\n input.array.every(\r\n (elem) =>\r\n \"string\" === typeof elem &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n elem,\r\n ),\r\n ) &&\r\n input.map instanceof Map &&\r\n (() =>\r\n [...input.map].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"number\" === typeof elem[0] &&\r\n Math.floor(elem[0]) === elem[0] &&\r\n 0 <= elem[0] &&\r\n elem[0] <= 4294967295 &&\r\n Array.isArray(elem[1]) &&\r\n 1 <= elem[1].length &&\r\n elem[1].every(\r\n (elem) =>\r\n \"string\" === typeof elem &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n elem,\r\n ),\r\n ),\r\n ))();\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n};\r\nexports.checkCustomTag = checkCustomTag;","type-tags#Type Tags":"By using type tags, you can utilize additional validation logics.Just import one of type tags from typia, and combine it with target through intersection symbol like number & typia.tags.Type<\"uint32\"> case. If you want to declare an union validation logic, combine | and bracket (()) symbols properly like below:\nnumber & (Type<\"uint32\"> | Type<\"double\">)\nnumber type can be both uint32 and double\n(number & Type<\"int32\">) | (bigint & Type<\"uint64\">)\nnumber is int32\nbigint is uint64\n(number & (Type<\"int32\">)| Type<\"float\">) | (bigint & Type<\"uint64\">)\nnumber can be both int32 and float\nbigint is uint64\nHere is the entire list of type tags that typia basically supports.For reference, when you take a mistake that choosing different target type, TypeScript compiler would block it with compilation error message. Also, if you take a mistake that placing invalid argument on the type, it would also be blocked IDE and compiler. Therefore, have a confidence when using them.\nnumber\nnumber & Type<{keyword}>\nint32\nuint32\nuint64\nint64\nfloat\ndouble\nnumber & Minimum<{number}>\nnumber & Maximum<{number}>\nnumber & ExclusiveMaximum<{number}>\nnumber & ExclusiveMinimum<{number}>\nnumber & MultipleOf<{number}>\nbigint\nbigint & Type<{keyword}>\nint64\nuint64\nbigint & Minimum<{bigint}>\nbigint & Maximum<{bigint}>\nbigint & ExclusiveMaximum<{bigint}>\nbigint & ExclusiveMinimum<{bigint}>\nbigint & MultipleOf<{bigint}>\nstring\nstring & MinLength<{number}>\nstring & MaxLength<{number}>\nstring & Pattern<{regex}>\nstring & Format<{keyword}>\nbyte\npassword\nregex\nuuid\nemail\nhostname\nidn-email\nidn-hostname\niri\niri-reference\nipv4\nipv6\nuri\nuri-reference\nuri-template\nurl\ndate-time\ndate\ntime\nduration\njson-pointer\nrelative-json-pointer\nAlso, if you need custom validation logic, just make it by yourself referencing Customization section. It is easy to define. For such type safety and generous use case reasons even customization supporting, I recommend you to use type tags instead of comment tags, unless you are maintaining a legacy JSDoc styled project.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const checkCustomTag = typia.createIs();\r\n\r\ninterface CustomTag {\r\n type: number & tags.Type<\"uint32\">;\r\n\r\n number?: number & tags.ExclusiveMinimum<19> & tags.Maximum<100>;\r\n\r\n string: string & tags.MinLength<3>;\r\n\r\n pattern: string & tags.Pattern<\"^[a-z]+$\">;\r\n\r\n /**\r\n * Type tag can perform union type.\r\n * \r\n * In here case, format can be oneof `ipv4` or `ipv6` format.\r\n */\r\n format: (string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">)) | null;\r\n\r\n /**\r\n * In the Array case, only type tag can restrict element type.\r\n */\r\n array: Array> \r\n & tags.MinItems<3> \r\n & tags.MaxItems<100>;\r\n\r\n /**\r\n * Also, only type tag can handle map type.\r\n */\r\n map: Map<\r\n number & tags.Type<\"uint32\">, \r\n Array> & tags.MinItems<1>\r\n >;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkCustomTag = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkCustomTag = (input) => {\r\n const $io0 = (input) =>\r\n \"number\" === typeof input.type &&\r\n Math.floor(input.type) === input.type &&\r\n 0 <= input.type &&\r\n input.type <= 4294967295 &&\r\n (undefined === input.number ||\r\n (\"number\" === typeof input.number &&\r\n 19 < input.number &&\r\n input.number <= 100)) &&\r\n \"string\" === typeof input.string &&\r\n 3 <= input.string.length &&\r\n \"string\" === typeof input.pattern &&\r\n !isNaN(new Date(input.pattern).getTime()) &&\r\n (null === input.format ||\r\n (\"string\" === typeof input.format &&\r\n (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(\r\n input.format,\r\n ) ||\r\n !isNaN(new Date(input.format).getTime())))) &&\r\n Array.isArray(input.array) &&\r\n 3 <= input.array.length &&\r\n input.array.length <= 100 &&\r\n input.array.every(\r\n (elem) =>\r\n \"string\" === typeof elem &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n elem,\r\n ),\r\n ) &&\r\n input.map instanceof Map &&\r\n (() =>\r\n [...input.map].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"number\" === typeof elem[0] &&\r\n Math.floor(elem[0]) === elem[0] &&\r\n 0 <= elem[0] &&\r\n elem[0] <= 4294967295 &&\r\n Array.isArray(elem[1]) &&\r\n 1 <= elem[1].length &&\r\n elem[1].every(\r\n (elem) =>\r\n \"string\" === typeof elem &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n elem,\r\n ),\r\n ),\r\n ))();\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n};\r\nexports.checkCustomTag = checkCustomTag;","comment-tags#Comment Tags":"typia supports those comment tags, too.Here is the entire list of comment tags that typia supports.\nnumber\n@type {string}\nint / int32\nuint / uint32\nint64\nuint64\nfloat\n@minimum {number}\n@maximum {number}\n@exclusiveMinimum {number}\n@exclusiveMaximum {number}\n@multipleOf {number}\nbigint\n@type uint64\n@minimum {bigint}\n@maximum {bigint}\n@exclusiveMinimum {bigint}\n@exclusiveMaximum {bigint}\n@multipleOf {bigint}\nstring\n@minLength {number}\n@maxLength {number}\n@pattern {regex}\n@format {keyword}\nbyte\npassword\nregex\nuuid\nemail\nhostname\nidn-email\nidn-hostname\niri\niri-reference\nipv4\nipv6\nuri\nuri-reference\nuri-template\nurl\ndate-time\ndate\ntime\nduration\njson-pointer\nrelative-json-pointer\narray\n@minItems {number}\n@maxItems {number}\nBy the way, I do not recommend this way, because it can't perform union numeric types, and can be used for only object property type. It can't be used standalone, and cannot be used for element type of Array and Map even when they're declared on object property. Also, When you declare @type int32 statement, target number type be fixed as int32 type, and never can have another numeric type by declaring union statements.Also, those comment tags are not type safe. If you take a mistake when writing a comment tag, it will not be detected by the compiler, and will cause an error at runtime. For example, if you write a mis-spelled keyword like @type unit32, the target number type would be double type, and you can identify it just by running the program (or visiting playground website).\nWhy supports comment tags?\nDespite these disadvantages, the reason for maintaining comment tags is as follows.First, it is to support the legacy JSDoc style that had been used in the JS camp for a long time. If you had developed a legacy project and JSDoc being used, you can use it as is.Second, to support Prisma. If a comment is created in the Prisma Schema through the /// statement as shown below and a type is created, it is converted to a TS comment as it is. And since there is no way that union types, numeric Arrays or Maps are used in Prisma (database) schema, these comment tags are surprisingly compatible with Prisma.\nimport typia from \"typia\";\r\n\r\nexport const checkCustomTag = typia.createIs();\r\n\r\ninterface CustomTag {\r\n /**\r\n * @type uint32\r\n */\r\n type: number;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n number?: number;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n string: string;\r\n\r\n /**\r\n * @Pattern /^[a-z]+$/\r\n */\r\n pattern: string;\r\n\r\n // NO WAY WHEN COMMENT TAG\r\n // /**\r\n // * Type tag can perform union type.\r\n // * \r\n // * In here case, format can be oneof `ipv4` or `ipv6` format.\r\n // */\r\n // format: (string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">)) | null;\r\n\r\n // NO WAY WHEN COMMENT TAG\r\n // /**\r\n // * In the Array case, only type tag can restrict element type.\r\n // */\r\n // array: Array> \r\n // & tags.MinItems<3> \r\n // & tags.MaxItems<100>;\r\n\r\n // NO WAY WHEN COMMENT TAG\r\n // /**\r\n // * Also, only type tag can handle map type.\r\n // */\r\n // map: Map<\r\n // number & tags.Type<\"uint32\">, \r\n // Array> & tags.MinItems<1>\r\n // >;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkCustomTag = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkCustomTag = (input) => {\r\n const $io0 = (input) =>\r\n \"number\" === typeof input.type &&\r\n Math.floor(input.type) === input.type &&\r\n 0 <= input.type &&\r\n input.type <= 4294967295 &&\r\n (undefined === input.number ||\r\n (\"number\" === typeof input.number &&\r\n 19 < input.number &&\r\n input.number <= 100)) &&\r\n \"string\" === typeof input.string &&\r\n 3 <= input.string.length &&\r\n \"string\" === typeof input.pattern;\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n};\r\nexports.checkCustomTag = checkCustomTag;","customization#Customization":"export type TagBase> = {\r\n /**\r\n * This is a dummy property for compilation.\r\n * \r\n * It does not mean anything in runtime.\r\n */\r\n \"typia.tag\"?: Props;\r\n};\r\nexport namespace TagBase {\r\n export interface IProps<\r\n Target extends \"bigint\" | \"number\" | \"string\" | \"array\",\r\n Kind extends string,\r\n Value extends boolean | bigint | number | string | undefined,\r\n Validate extends\r\n | string\r\n | {\r\n [key in Target]?: string;\r\n },\r\n Exclusive extends boolean | string[],\r\n > {\r\n /**\r\n * Target type.\r\n *\r\n * If user tries to adapt this tag to a different type, it would be a compile\r\n * error.\r\n *\r\n * For example, you've configured target type as `string`, but user adapted it\r\n * onto a `number` type (`number & YourCustomTag`), then it would be\r\n * blocked by TypeScript compiler.\r\n */\r\n target: Target;\r\n\r\n /**\r\n * What kind of tag is this?\r\n */\r\n kind: Kind;\r\n\r\n /**\r\n * Value to be configured by user.\r\n */\r\n value: Value;\r\n\r\n /**\r\n * Validation code.\r\n *\r\n * This code would be inserted into the generated validation function.\r\n * In here script, target variable name must be `$input`. The variable name\r\n * `$input` would be transformed to the suitable when compilation.\r\n *\r\n * Also, If you've take a mistake on this script, compile error would be\r\n * occured. So, define it with confidence. Compiler will block all your\r\n * mistakes.\r\n */\r\n validate: Validate;\r\n\r\n /**\r\n * Exclusive option.\r\n *\r\n * If this property configured as `true`, same {@link kind} tag cannot be\r\n * duplicated in the target type. Otherwise, if you've configured this property\r\n * as string array, all of the {@link kind} value assigned tag cannot be\r\n * compatible in the target type.\r\n * \r\n * @default false\r\n */\r\n exclusive?: Exclusive | string[];\r\n }\r\n}\nimport { TagBase } from \"./TagBase\";\r\n\r\nexport type Minimum = TagBase<{\r\n target: Value extends number ? \"number\" : \"bigint\";\r\n kind: \"minimum\";\r\n value: Value;\r\n validate: `${Numeric} <= $input`;\r\n exclusive: [\"minimum\", \"exclusiveMinimum\"];\r\n}>;\r\n\r\ntype Numeric = Value extends number\r\n ? Value\r\n : `BigInt(${Value})`;\nimport { TagBase } from \"./TagBase\";\r\n\r\nexport type Type<\r\n Value extends \"int32\" | \"uint32\" | \"int64\" | \"uint64\" | \"float\" | \"double\",\r\n> = TagBase<{\r\n target: Value extends \"int64\" | \"uint64\" ? \"bigint\" | \"number\" : \"number\";\r\n kind: \"type\";\r\n value: Value;\r\n validate: Value extends \"int32\"\r\n ? `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`\r\n : Value extends \"uint32\"\r\n ? `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`\r\n : Value extends \"int64\"\r\n ? {\r\n number: `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`;\r\n bigint: `true`;\r\n }\r\n : Value extends \"uint64\"\r\n ? {\r\n number: `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`;\r\n bigint: `BigInt(0) <= $input`;\r\n }\r\n : Value extends \"float\"\r\n ? `-1.175494351e38 <= $input && $input <= 3.4028235e38`\r\n : `true`;\r\n exclusive: true;\r\n}>;\nimport { TagBase } from \"./TagBase\";\r\n\r\nexport type Pattern = TagBase<{\r\n target: \"string\";\r\n kind: \"pattern\";\r\n value: Value;\r\n validate: `/${Value}/.test($input)`;\r\n}>;\nAbove types are supported by typia basically.If you make a custom type tag extending typia.tags.TagBase type, and utilize it on your type with intersection symbol like number & Minimum<3>, its validation logic 3 <= $input would be inserted into the compiled JavaScript file.Also, as you can see from the typia.tags.TagBase type, you have to specify which target type is the tag for, and need to define the tag can be compatible with others or not through exclusive options. If your custom tag has multiple target types, you can support all of those target types by defining validate property as Record type like Type tag case.In the Korean proverb, there's a word that, \"it is much better to do it once than to hear it a hundred times\". Let's see how custom type tag of typia can be defined and utilized through an example code. I'll define three custom tag types, Postfix, Dollar and IsEven.Here is the example code, and I think that it may easy to understand.\nimport typia from \"typia\";\r\n\r\nexport const checkTagCustom = typia.createIs();\r\n \r\ninterface TagCustom {\r\n id: string & typia.tags.Format<\"uuid\">;\r\n dollar: string & Dolloar;\r\n postfix: string & Postfix<\"abcd\">;\r\n powerOf: number & PowerOf<2>;\r\n}\r\n \r\ntype Dolloar = typia.tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n \r\ntype Postfix = typia.tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n \r\ntype PowerOf = typia.tags.TagBase<{\r\n kind: \"powerOf\";\r\n target: \"number\";\r\n value: Value;\r\n validate: `(() => {\r\n const denominator: number = Math.log(${Value});\r\n const value: number = Math.log($input) / denominator;\r\n return Math.abs(value - Math.round(value)) < 0.00000001;\r\n })()`;\r\n}>;\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkTagCustom = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkTagCustom = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.dollar &&\r\n input.dollar[0] === \"$\" &&\r\n !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\"))) &&\r\n \"string\" === typeof input.postfix &&\r\n input.postfix.endsWith(\"abcd\") &&\r\n \"number\" === typeof input.powerOf &&\r\n (() => {\r\n const denominator = Math.log(2);\r\n const value = Math.log(input.powerOf) / denominator;\r\n return Math.abs(value - Math.round(value)) < 1e-8;\r\n })()\r\n );\r\n};\r\nexports.checkTagCustom = checkTagCustom;"}},"/docs/validators/assert":{"title":"Assert","data":{"assert-function#assert() function":"export function assert(input: T): T;\r\nexport function assert(input: unknown): T;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nAsserts a value type.typia.assert() function throws a TypeGuardError when wrong type comes.The TypeGuardError instance has only the first type error info, with access path and expected type. In the below example case, as the age property is wrong with its definition (@exclusiveMinimum), such TypeGuardError would be thrown:\nmethod: typia.assert()\npath: input.age\nvalue: 18,\nexpected: number & ExclusiveMinimum<19>\nAOT compliation\nIf you'd used other competitive validator libraries like ajv or class-validator, you may found that typia does not require any extra schema definition. If you have not experienced them, I can sure that you may get shocked after reading below extra schema definition files.\najv requires JSON schema definition.\nclass-validator requires DTO class with decorator function calls.\nYeah, typia needs only pure TypeScript type. As typia is a compiler library, it can analyze TypeScript type by itself, and possible to write the optimal validation code like below. This is the key principle of typia, which needs only one line with pure TypeScript type.\nimport typia, { tags } from \"typia\";\r\nimport { v4 } from \"uuid\";\r\n\r\ntypia.assert({\r\n id: v4(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 18, // wrong, must be greater than 19\r\n});\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst uuid_1 = require(\"uuid\");\r\n((input) => {\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.assert.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n})({\r\n id: (0, uuid_1.v4)(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 18, // wrong, must be greater than 19\r\n});","assertequals-function#assertEquals() function":"export function assertEquals(input: T): T;\r\nexport function assertEquals(input: unknown): T;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nMore strict assert function prohibiting superfluous properties.typia.assert() function inspects input value type and throws TypeGuardError when mismatched, however, it can't detect superfluous properties. If you want to prohibit those superfluous properties, therefore throws an TypeGuardError when superfluous property exists, use typia.assertEquals function instead.In the below example case, as sex property is not defined in the IMember type, such TypeGuardError would be thrown:\nmethod: typia.assertEquals()\npath: input.sex\nvalue: 1,\r\n expected: undefined\nimport typia, { tags } from \"typia\";\r\nimport { v4 } from \"uuid\";\r\n\r\ntypia.assert({\r\n id: v4(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n sex: 1, // extra\r\n});\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst uuid_1 = require(\"uuid\");\r\n((input) => {\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.assert.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n})({\r\n id: (0, uuid_1.v4)(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n sex: 1, // extra\r\n});","assertguard-functions#assertGuard() functions":"export function assertGurad(input: T): asserts inut is T;\r\nexport function assertGuard(input: unknown): asserts input is T;\r\n\r\nexport function assertGuardEquals(input: T): asserts inut is T;\r\nexport function assertGuardEquals(input: unknown): asserts input is T;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nAssertion guard of a value type.typia.assertGuard() is similar with typia.assert() throwing a TypeGuardError when wrong type.However, typia.assert() returns the paramteric input value itself when there's no type problem on the parametric input value, whereas the typia.assertGuard() function returns nothing. Instead, the parametric input value would be automatically cased to the type T. This is the concept of \"Assertion Guard\" of a value type.Such similarities and differences of typia.assertGuard() and typia.assert() functions are the same in the case of typia.assertGuardEquals() and typia.assertEquals() functions. If there's no type problem on the typia.assertGuardEquals() function, it also performs the \"Assertion Guard\".Look at the below code, then you may understand what the \"Assertion Guard\" means.\nimport typia from \"typia\";\r\n\r\ninterface IPoint {\r\n x: number;\r\n y: number;\r\n}\r\nconst input: unknown = { x: 1, y: 2 };\r\n\r\n// PERFORM THE ASSERTION GUARD\r\ntypia.assertGuard(input);\r\n\r\n// FROM NOW ON, \"input\" IS THE \"IPoint\" TYPE\r\ninput.x; // OK\r\ninput.y; // OK","reusable-functions#Reusable functions":"export function createAssert(): (input: unknown) => T;\r\nexport function createAssertEquals(): (input: unknown) => T;\r\n\r\nexport function createAssertGuard(): AssertionGuard;\r\nexport function createAssertGuardEquals(): AssertionGuard;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type AssertionGuard = (input: unknown) => asserts input is T;\nReusable typia.assert() function generators.If you repeat to call typia.assert() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createAssert() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const assertMember = typia.createAssert();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.assertMember = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst assertMember = (input) => {\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.createAssert.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n};\r\nexports.assertMember = assertMember;\nExplicity of Assertion Guard\nBe careful when using typia.createAssertGuard() or typia.createAssertGuardEquals() functions.When calling those functions, you've to declare the variable type explicit on the caller variable. If you don't do it, so that the caller variables come the implicit function type, TypeScript compiler throws an error like below. This is a special limitation of TypeScript compiler about the \"Assertion Guard\".\nimport typia, { AssertionGuard } from \"typia\";\r\n\r\n//MUST DECLARE THE VARIABLE TYPE\r\nconst explicit: AssertionGuard = typia.createAssertGuard();\r\n\r\n// IF NOT, COMPILATION ERROR BE OCCURED\r\nconst implicit = typia.createAssertGuard();\nAssertions require every name in the call target to be declared with an explicit type annotation.","restrictions#Restrictions":"typia.assert() function does not check function and user-defined class types.It validates only the primitive properties. Therefore, typia.assert() function does not perform the instanceof ClassName for user-defined classes. If you want to validate the user-defined class type in addition to the property types, do it by yourself. Also, typia.assert() function does not validate the function type either, unless configuring functional property of plugin option in the tsconfig.json file.\n{\r\n \"compilerOptions\": {\r\n \"plugins\": [\r\n {\r\n \"transform\": \"typia/lib/transform\",\r\n \"functional\": true\r\n }\r\n ]\r\n }\r\n}\nBy the way, there're some exception cases.If JS native class type like Date, Uint8Array, or Map being utilized, typia.assert() function validates them. Especially about the Set, and Map class cases, typia.assert() function validates all of their contained element types, too.Therefore, the instanceof statement does not be used only for the user-defined classes.\nimport typia from \"typia\";\r\n\r\ntypia.createIs>();\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n(input) => {\r\n return (\r\n input instanceof Map &&\r\n (() =>\r\n [...input].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"string\" === typeof elem[0] &&\r\n (\"string\" === typeof elem[1] ||\r\n \"number\" === typeof elem[1] ||\r\n \"boolean\" === typeof elem[1]),\r\n ))()\r\n );\r\n};","customization#Customization":"You can enhance validation logic by special tags.Also, with those tags, you can add your custom validation logic, too.If you want to know about such special tags detaily, read below article:\nSpecial Tags\nOutline\nType Tags\nComment Tags\nCustomization\nimport typia, { tags } from \"typia\";\r\n\r\nexport const assertSomething = typia.createAssert();\r\n\r\n//----\r\n// DEFINE CUSTOM TYPE TAGS\r\n//----\r\ntype Dollar = tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n\r\ntype Postfix = tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n\r\ntype IsEven = tags.TagBase<{\r\n kind: \"isEven\";\r\n target: Value extends number ? \"number\" : \"bigint\";\r\n value: undefined;\r\n validate: `$input % ${Numeric<2>} === ${Numeric<0>}`;\r\n}>;\r\n\r\ntype Numeric = Value extends number\r\n ? Value\r\n : `BigInt(${Value})`;\r\n\r\n//----\r\n// VALIDATION\r\n//----\r\ninterface Something {\r\n dollar: string & Dollar;\r\n postfix: string & Postfix<\"!!!\">;\r\n isEven: number & IsEven;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.assertSomething = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst assertSomething = input => {\r\n const __is = input => {\r\n return \"object\" === typeof input && null !== input && (\"string\" === typeof input.dollar && (input.dollar[0] === \"$\" && !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\")))) && (\"string\" === typeof input.postfix && input.postfix.endsWith(\"!!!\")) && (\"number\" === typeof input.isEven && input.isEven % 2 === 0));\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.createAssert.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.dollar && (input.dollar[0] === \"$\" && !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\"))) || $guard(_exceptionable, {\r\n path: _path + \".dollar\",\r\n expected: \"string & Dollar\",\r\n value: input.dollar\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".dollar\",\r\n expected: \"(string & Dollar)\",\r\n value: input.dollar\r\n })) && (\"string\" === typeof input.postfix && (input.postfix.endsWith(\"!!!\") || $guard(_exceptionable, {\r\n path: _path + \".postfix\",\r\n expected: \"string & Postfix<\\\"!!!\\\">\",\r\n value: input.postfix\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".postfix\",\r\n expected: \"(string & Postfix<\\\"!!!\\\">)\",\r\n value: input.postfix\r\n })) && (\"number\" === typeof input.isEven && (input.isEven % 2 === 0 || $guard(_exceptionable, {\r\n path: _path + \".isEven\",\r\n expected: \"number & IsEven\",\r\n value: input.isEven\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".isEven\",\r\n expected: \"(number & IsEven)\",\r\n value: input.isEven\r\n }));\r\n return (\"object\" === typeof input && null !== input || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"Something\",\r\n value: input\r\n })) && $ao0(input, _path + \"\", true) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"Something\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n};\r\nexports.assertSomething = assertSomething;","performance#Performance":"Super-fast and super-safe.Comparing typia.assert() function with other competitive libraries, maximum 20,000x faster.Furthermore, only typia can validate complicate union types.\nMeasured on Intel i5-1135g7, Surface Pro 8\nComponents\ttypia\tTypeBox\tajv\tio-ts\tzod\tC.V.\tEasy to use\t✅\t❌\t❌\t❌\t❌\t❌\tObject (simple)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (recursive)\t✔\t❌\t✔\t✔\t✔\t✔\t✔\tObject (union, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tObject (union, explicit)\t✔\t✔\t✔\t✔\t✔\t❌\tObject (additional tags)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (template literal types)\t✔\t✔\t✔\t❌\t❌\t❌\tObject (dynamic properties)\t✔\t✔\t✔\t❌\t❌\t❌\tArray (rest tuple)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tArray (recursive)\t✔\t✔\t✔\t✔\t✔\t❌\tArray (recursive, union)\t✔\t✔\t❌\t✔\t✔\t❌\tArray (R+U, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated, union)\t✅\t❌\t❌\t❌\t❌\t❌\tUltimate Union Type\t✅\t❌\t❌\t❌\t❌\t❌\t\nC.V. means class-validator"}},"/docs/validators/validate":{"title":"Validate","data":{"validate-function#validate() function":"export function validate(input: T): IValidation;\r\nexport function validate(input: unknown): IValidation;\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nValidates a value type.typia.validate() function validates input value type, and archives every type errors detaily into IValidation.IFailure.errors array, when the input value is not following the promised type T. Of course, if the parametric input value is following the type T, IValidation.ISuccess instance would be returned.In the below example case, as id and age values are different with its definition of IMember, such errors would be archived into the IValidation.IFailure.errors array.\nerrors[0]\npath: input.id\nexpected: string & Format<\"uuid\">\nvalue: 5\nerrors[1]\npath: input.age\nexpected: number & Format<\"uint32\">\nvalue: 20.75\nAOT compliation\nIf you'd used other competitive validator libraries like ajv or class-validator, you may found that typia does not require any extra schema definition. If you have not experienced them, I can sure that you may get shocked after reading below extra schema definition files.\najv requires JSON schema definition.\nclass-validator requires DTO class with decorator function calls.\nYeah, typia needs only pure TypeScript type. As typia is a compiler library, it can analyze TypeScript type by itself, and possible to write the optimal validation code like below. This is the key principle of typia, which needs only one line with pure TypeScript type.\nimport typia from \"typia\";\r\n\r\nconst res: typia.IValidation = typia.validate({\r\n id: 5, // wrong, must be string (uuid)\r\n age: 20.75, // wrong, not integer\r\n email: \"samchon.github@gmail.com\",\r\n});\r\n\r\nif (!res.success) console.log(res.errors);\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst res = ((input) => {\r\n const errors = [];\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input)) {\r\n const $report = typia_1.default.validate.report(errors);\r\n ((input, _path, _exceptionable = true) => {\r\n const $vo0 = (input, _path, _exceptionable = true) =>\r\n [\r\n (\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n }),\r\n (\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n }),\r\n (\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }),\r\n ].every((flag) => flag);\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $vo0(input, _path + \"\", true)) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n }\r\n const success = 0 === errors.length;\r\n return {\r\n success,\r\n errors,\r\n data: success ? input : undefined,\r\n };\r\n})({\r\n id: 5,\r\n age: 20.75,\r\n email: \"samchon.github@gmail.com\",\r\n});\r\nif (!res.success) console.log(res.errors);","validateequals-function#validateEquals() function":"export function validateEquals(input: T): IValidation;\r\nexport function validateEquals(input: unknown): IValidation;\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nMore strict validatae function prohibiting superfluous properties.typia.validate function detects every type errors of input value, however, it can't detect superfluous properties. If you want to prohibit those superfluous properties, so that archive them into IValidation.IFailure.errors array, use typia.validateEquals() function instead.In the below example case, as id property is different with its type definition and sex property is not defined in the IMember type, such errors would be archived into the IValidation.IFailure.errors array:\nerrors[0]\npath: input.id\nexpected: string (@format uuid)\nvalue: something\nerrors[1]\npath: input.sex\nexpected: undefined\nvalue: 1\nimport typia, { tags } from \"typia\";\r\n\r\nconst res: typia.IValidation = typia.validateEquals({\r\n age: 30,\r\n email: \"samchon.github@gmail.com\",\r\n id: \"something\", // wrong, must be string (uuid)\r\n sex: 1, // extra property\r\n});\r\n\r\nif (!res.success) console.log(res.errors);\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst res = ((input) => {\r\n const errors = [];\r\n const __is = (input, _exceptionable = true) => {\r\n const $io0 = (input, _exceptionable = true) =>\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n (3 === Object.keys(input).length ||\r\n Object.keys(input).every((key) => {\r\n if ([\"id\", \"email\", \"age\"].some((prop) => key === prop))\r\n return true;\r\n const value = input[key];\r\n if (undefined === value) return true;\r\n return false;\r\n }));\r\n return \"object\" === typeof input && null !== input && $io0(input, true);\r\n };\r\n if (false === __is(input)) {\r\n const $report = typia_1.default.validateEquals.report(errors);\r\n ((input, _path, _exceptionable = true) => {\r\n const $join = typia_1.default.validateEquals.join;\r\n const $vo0 = (input, _path, _exceptionable = true) =>\r\n [\r\n (\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n }),\r\n (\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n }),\r\n (\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }),\r\n 3 === Object.keys(input).length ||\r\n false === _exceptionable ||\r\n Object.keys(input)\r\n .map((key) => {\r\n if (\r\n [\"id\", \"email\", \"age\"].some(\r\n (prop) => key === prop,\r\n )\r\n )\r\n return true;\r\n const value = input[key];\r\n if (undefined === value) return true;\r\n return $report(_exceptionable, {\r\n path: _path + $join(key),\r\n expected: \"undefined\",\r\n value: value,\r\n });\r\n })\r\n .every((flag) => flag),\r\n ].every((flag) => flag);\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $vo0(input, _path + \"\", true)) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n }\r\n const success = 0 === errors.length;\r\n return {\r\n success,\r\n errors,\r\n data: success ? input : undefined,\r\n };\r\n})({\r\n age: 30,\r\n email: \"samchon.github@gmail.com\",\r\n id: \"something\",\r\n sex: 1, // extra property\r\n});\r\nif (!res.success) console.log(res.errors);","reusable-functions#Reusable functions":"export function createValidate = (input: unknown) => IValidation;\r\nexport function createValidateEquals = (input: unknown) => IValidation;\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nReusable typia.validate() function generators.If you repeat to call typia.validate() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createValidate() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const validateMember = typia.createValidate();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.validateMember = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst validateMember = (input) => {\r\n const errors = [];\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input)) {\r\n const $report = typia_1.default.createValidate.report(errors);\r\n ((input, _path, _exceptionable = true) => {\r\n const $vo0 = (input, _path, _exceptionable = true) =>\r\n [\r\n (\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n }),\r\n (\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n }),\r\n (\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }),\r\n ].every((flag) => flag);\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $vo0(input, _path + \"\", true)) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n }\r\n const success = 0 === errors.length;\r\n return {\r\n success,\r\n errors,\r\n data: success ? input : undefined,\r\n };\r\n};\r\nexports.validateMember = validateMember;","restrictions#Restrictions":"typia.validate() function does not check function and user-defined class types.It validates only the primitive properties. Therefore, typia.validate() function does not perform the instanceof ClassName for user-defined classes. If you want to validate the user-defined class type in addition to the property types, do it by yourself. Also, typia.validate() function does not validate the function type either, unless configuring functional property of plugin option in the tsconfig.json file.\n{\r\n \"compilerOptions\": {\r\n \"plugins\": [\r\n {\r\n \"transform\": \"typia/lib/transform\",\r\n \"functional\": true\r\n }\r\n ]\r\n }\r\n}\nBy the way, there're some exception cases.If JS native class type like Date, Uint8Array, or Map being utilized, typia.validate() function validates them. Especially about the Set, and Map class cases, typia.validate() function validates all of their contained element types, too.Therefore, the instanceof statement does not be used only for the user-defined classes.\nimport typia from \"typia\";\r\n\r\ntypia.createIs>();\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n(input) => {\r\n return (\r\n input instanceof Map &&\r\n (() =>\r\n [...input].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"string\" === typeof elem[0] &&\r\n (\"string\" === typeof elem[1] ||\r\n \"number\" === typeof elem[1] ||\r\n \"boolean\" === typeof elem[1]),\r\n ))()\r\n );\r\n};","discriminated-union#Discriminated Union":"export function validate(input: T): IValidation;\r\nexport function validate(input: unknown): IValidation;\r\nexport function createValidate(): (input: unknown) => IValidation;\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nSpecify type through if condition.typia.IValidation is an union type of typia.IValidation.ISuccess and typia.IValidation.IFailure. Also, they have a common property success of boolean type, but different literal values. In that case, if you write a if condition about the success property, you can specify the union type like below.In TypeScript, such union type specification through common property (of different literal value() is called \"Discriminated Union\". Therefore, when using typia.validate() function, let's utilize such discriminated union specification for convenience.\nimport typia from \"typia\";\r\n\r\nconst something: unknown = ...;\r\nconst result: typia.IValidation = typia.validate(something);\r\n\r\nif (results.success) {\r\n // become typia.IValidation.Success type\r\n result.data; // accessible\r\n}\r\nelse {\r\n // become typia.IValidation.Failure type\r\n result.errors; //accessible\r\n}","customization#Customization":"You can enhance validation logic by special tags.Also, with those tags, you can add your custom validation logic, too.If you want to know about such special tags detaily, read below article:\nSpecial Tags\nOutline\nType Tags\nComment Tags\nCustomization\nimport typia, { tags } from \"typia\";\r\n\r\nexport const validateSomething = typia.createValidate();\r\n\r\n//----\r\n// DEFINE CUSTOM TYPE TAGS\r\n//----\r\ntype Dollar = tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n\r\ntype Postfix = tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n\r\ntype IsEven = tags.TagBase<{\r\n kind: \"isEven\";\r\n target: Value extends number ? \"number\" : \"bigint\";\r\n value: undefined;\r\n validate: `$input % ${Numeric<2>} === ${Numeric<0>}`;\r\n}>;\r\n\r\ntype Numeric = Value extends number\r\n ? Value\r\n : `BigInt(${Value})`;\r\n\r\n//----\r\n// VALIDATION\r\n//----\r\ninterface Something {\r\n dollar: string & Dollar;\r\n postfix: string & Postfix<\"!!!\">;\r\n isEven: number & IsEven;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.validateSomething = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst validateSomething = (input) => {\r\n const errors = [];\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.dollar &&\r\n input.dollar[0] === \"$\" &&\r\n !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\"))) &&\r\n \"string\" === typeof input.postfix &&\r\n input.postfix.endsWith(\"!!!\") &&\r\n \"number\" === typeof input.isEven &&\r\n input.isEven % 2 === 0\r\n );\r\n };\r\n if (false === __is(input)) {\r\n const $report = typia_1.default.createValidate.report(errors);\r\n ((input, _path, _exceptionable = true) => {\r\n const $vo0 = (input, _path, _exceptionable = true) =>\r\n [\r\n (\"string\" === typeof input.dollar &&\r\n ((input.dollar[0] === \"$\" &&\r\n !isNaN(\r\n Number(\r\n input.dollar\r\n .substring(1)\r\n .split(\",\")\r\n .join(\"\"),\r\n ),\r\n )) ||\r\n $report(_exceptionable, {\r\n path: _path + \".dollar\",\r\n expected: \"string & Dollar\",\r\n value: input.dollar,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".dollar\",\r\n expected: \"(string & Dollar)\",\r\n value: input.dollar,\r\n }),\r\n (\"string\" === typeof input.postfix &&\r\n (input.postfix.endsWith(\"!!!\") ||\r\n $report(_exceptionable, {\r\n path: _path + \".postfix\",\r\n expected: 'string & Postfix<\"!!!\">',\r\n value: input.postfix,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".postfix\",\r\n expected: '(string & Postfix<\"!!!\">)',\r\n value: input.postfix,\r\n }),\r\n (\"number\" === typeof input.isEven &&\r\n (input.isEven % 2 === 0 ||\r\n $report(_exceptionable, {\r\n path: _path + \".isEven\",\r\n expected: \"number & IsEven\",\r\n value: input.isEven,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".isEven\",\r\n expected: \"(number & IsEven)\",\r\n value: input.isEven,\r\n }),\r\n ].every((flag) => flag);\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"Something\",\r\n value: input,\r\n })) &&\r\n $vo0(input, _path + \"\", true)) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"Something\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n }\r\n const success = 0 === errors.length;\r\n return {\r\n success,\r\n errors,\r\n data: success ? input : undefined,\r\n };\r\n};\r\nexports.validateSomething = validateSomething;","performance#Performance":"Super-fast and super-safe.Comparing typia.validate() function with other competitive libraries, maximum 20,000x faster.Furthermore, only typia can validate complicate union types.\nMeasured on Intel i5-1135g7, Surface Pro 8\nComponents\ttypia\tTypeBox\tajv\tio-ts\tzod\tC.V.\tEasy to use\t✅\t❌\t❌\t❌\t❌\t❌\tObject (simple)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (recursive)\t✔\t❌\t✔\t✔\t✔\t✔\t✔\tObject (union, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tObject (union, explicit)\t✔\t✔\t✔\t✔\t✔\t❌\tObject (additional tags)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (template literal types)\t✔\t✔\t✔\t❌\t❌\t❌\tObject (dynamic properties)\t✔\t✔\t✔\t❌\t❌\t❌\tArray (rest tuple)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tArray (recursive)\t✔\t✔\t✔\t✔\t✔\t❌\tArray (recursive, union)\t✔\t✔\t❌\t✔\t✔\t❌\tArray (R+U, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated, union)\t✅\t❌\t❌\t❌\t❌\t❌\tUltimate Union Type\t✅\t❌\t❌\t❌\t❌\t❌\t\nC.V. means class-validator"}}} \ No newline at end of file +{"/docs":{"title":"Index","data":{"outline#Outline":"// RUNTIME VALIDATORS\r\nexport function is(input: unknown): input is T; // returns boolean\r\nexport function assert(input: unknown): T; // throws TypeGuardError\r\nexport function assertGuard(input: unknown): asserts input is T;\r\nexport function validate(input: unknown): IValidation; // detailed\r\n\r\n// JSON FUNCTIONS\r\nexport namespace json {\r\n export function application(): IJsonApplication; // JSON schema\r\n export function assertParse(input: string): T; // type safe parser\r\n export function assertStringify(input: T): string; // safe and faster\r\n}\r\n\r\n// PROTOCOL BUFFER\r\nexport namespace protobuf {\r\n export function message(): string; // Protocol Buffer message\r\n export function assertDecode(buffer: Uint8Array): T; // safe decoder\r\n export function assertEncode(input: T): Uint8Array; // safe encoder\r\n}\r\n\r\n// RANDOM GENERATOR\r\nexport function random(g?: Partial): T;\nTypia is a transformer library supporting below features:\nSuper-fast Runtime Validators\nEnhanced JSON functions\nProtocol Buffer encoder and decoder\nRandom data generator\nOnly one line required, with pure TypeScript type\nRuntime validator is 20,000x faster than class-validator\nJSON serialization is 200x faster than class-transformer","sponsors#Sponsors":"Thanks for your support.Your donation would encourage typia development."}},"/docs/misc":{"title":"Misc","data":{"misc-module#misc module":"","clone-functions#clone() functions":"export namespace misc {\r\n export function clone(input: T): T;\r\n export function assertClone(input: T | unknown): Resolved;\r\n export function isClone(input: T | unknown): Resolved | null;\r\n export function validateClone(input: T | unknown): IValidation>;\r\n\r\n export function createClone(): (input: T) => Resolved;\r\n export function createAssertClone(): (input: T | unknown) => Resolved;\r\n export function createIsClone(): (input: T | unknown) => Resolved | null;\r\n export function createValidateClone(): (\r\n input: T | unknown\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nDeep copy functions.When you want to copy an instance, just call typia.misc.clone() function. It would perform deep copy including nested objects, so you can get a new instance with same values. Also, if you want type safe deep copy function, you can use typia.misc.isClone(), typia.misc.assertClone() or typia.misc.validateClone() functions instead.\ntypia.misc.assertClone(): typia.assert() + typia.misc.clone()\ntypia.misc.isClone(): typia.is() + typia.misc.clone()\ntypia.misc.validateClone(): typia.validate() + typia.misc.clone()\nimport typia from \"typia\";\r\n\r\nconst department: IDepartment = typia.misc.random();\r\nconst cloned: IDepartment = typia.misc.assertClone(department);\r\n\r\nconsole.log(cloned);\r\n\r\ninterface IDepartment {\r\n /**\r\n * @format uuid\r\n */\r\n id: string;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n name: string;\r\n\r\n /**\r\n * @type int\r\n */\r\n limit: number;\r\n\r\n clerks: IClerk[];\r\n}\r\ninterface IClerk {\r\n name: string;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n age: number;\r\n\r\n authority: number;\r\n\r\n /**\r\n * @format date\r\n */\r\n joined_at: string;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst department = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s; return ({\r\n id: (_d = (_c = (_b = ((_a = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _a !== void 0 ? _a : $generator.customs)) === null || _b === void 0 ? void 0 : _b.string) === null || _c === void 0 ? void 0 : _c.call(_b, [\r\n {\r\n name: \"format\",\r\n value: \"uuid\"\r\n }\r\n ])) !== null && _d !== void 0 ? _d : ((_e = generator === null || generator === void 0 ? void 0 : generator.uuid) !== null && _e !== void 0 ? _e : $generator.uuid)(),\r\n name: (_j = (_h = (_g = ((_f = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _f !== void 0 ? _f : $generator.customs)) === null || _g === void 0 ? void 0 : _g.string) === null || _h === void 0 ? void 0 : _h.call(_g, [\r\n {\r\n name: \"minLength\",\r\n value: \"3\"\r\n }\r\n ])) !== null && _j !== void 0 ? _j : ((_k = generator === null || generator === void 0 ? void 0 : generator.string) !== null && _k !== void 0 ? _k : $generator.string)(((_l = generator === null || generator === void 0 ? void 0 : generator.integer) !== null && _l !== void 0 ? _l : $generator.integer)(3, 25)),\r\n limit: (_q = (_p = (_o = ((_m = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _m !== void 0 ? _m : $generator.customs)) === null || _o === void 0 ? void 0 : _o.number) === null || _p === void 0 ? void 0 : _p.call(_o, [\r\n {\r\n name: \"type\",\r\n value: \"int\"\r\n }\r\n ])) !== null && _q !== void 0 ? _q : ((_r = generator === null || generator === void 0 ? void 0 : generator.integer) !== null && _r !== void 0 ? _r : $generator.integer)(0, 100),\r\n clerks: ((_s = generator === null || generator === void 0 ? void 0 : generator.array) !== null && _s !== void 0 ? _s : $generator.array)(() => $ro1(_recursive, _recursive ? 1 + _depth : _depth))\r\n }); };\r\n const $ro1 = (_recursive = false, _depth = 0) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v; return ({\r\n name: (_d = (_c = (_b = ((_a = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _a !== void 0 ? _a : $generator.customs)) === null || _b === void 0 ? void 0 : _b.string) === null || _c === void 0 ? void 0 : _c.call(_b, [])) !== null && _d !== void 0 ? _d : ((_e = generator === null || generator === void 0 ? void 0 : generator.string) !== null && _e !== void 0 ? _e : $generator.string)(),\r\n age: (_j = (_h = (_g = ((_f = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _f !== void 0 ? _f : $generator.customs)) === null || _g === void 0 ? void 0 : _g.number) === null || _h === void 0 ? void 0 : _h.call(_g, [\r\n {\r\n name: \"exclusiveMinimum\",\r\n value: \"19\"\r\n },\r\n {\r\n name: \"maximum\",\r\n value: \"100\"\r\n }\r\n ])) !== null && _j !== void 0 ? _j : ((_k = generator === null || generator === void 0 ? void 0 : generator.number) !== null && _k !== void 0 ? _k : $generator.number)(19, 100),\r\n authority: (_p = (_o = (_m = ((_l = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _l !== void 0 ? _l : $generator.customs)) === null || _m === void 0 ? void 0 : _m.number) === null || _o === void 0 ? void 0 : _o.call(_m, [])) !== null && _p !== void 0 ? _p : ((_q = generator === null || generator === void 0 ? void 0 : generator.number) !== null && _q !== void 0 ? _q : $generator.number)(0, 100),\r\n joined_at: (_u = (_t = (_s = ((_r = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _r !== void 0 ? _r : $generator.customs)) === null || _s === void 0 ? void 0 : _s.string) === null || _t === void 0 ? void 0 : _t.call(_s, [\r\n {\r\n name: \"format\",\r\n value: \"date\"\r\n }\r\n ])) !== null && _u !== void 0 ? _u : ((_v = generator === null || generator === void 0 ? void 0 : generator.date) !== null && _v !== void 0 ? _v : $generator.date)()\r\n }); };\r\n return $ro0();\r\n})();\r\nconst cloned = (input => { const assert = input => {\r\n const __is = input => {\r\n const $is_uuid = typia_1.default.assertClone.is_uuid;\r\n const $is_date = typia_1.default.assertClone.is_date;\r\n const $io0 = input => \"string\" === typeof input.id && $is_uuid(input.id) && (\"string\" === typeof input.name && 3 <= input.name.length) && (\"number\" === typeof input.limit && parseInt(input.limit) === input.limit) && (Array.isArray(input.clerks) && input.clerks.every(elem => \"object\" === typeof elem && null !== elem && $io1(elem)));\r\n const $io1 = input => \"string\" === typeof input.name && (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age) && \"number\" === typeof input.authority && (\"string\" === typeof input.joined_at && $is_date(input.joined_at));\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.assertClone.guard;\r\n const $is_uuid = typia_1.default.assertClone.is_uuid;\r\n const $is_date = typia_1.default.assertClone.is_date;\r\n const $ao0 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.id && ($is_uuid(input.id) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string (@format uuid)\",\r\n value: input.id\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string\",\r\n value: input.id\r\n })) && (\"string\" === typeof input.name && (3 <= input.name.length || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string (@minLength 3)\",\r\n value: input.name\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name\r\n })) && (\"number\" === typeof input.limit && (parseInt(input.limit) === input.limit || $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: \"number (@type int)\",\r\n value: input.limit\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: \"number\",\r\n value: input.limit\r\n })) && ((Array.isArray(input.clerks) || $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks\r\n })) && input.clerks.every((elem, _index1) => (\"object\" === typeof elem && null !== elem || $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem\r\n })) && $ao1(elem, _path + \".clerks[\" + _index1 + \"]\", true && _exceptionable) || $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks\r\n }));\r\n const $ao1 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.name || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name\r\n })) && (\"number\" === typeof input.age && (19 < input.age || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number (@exclusiveMinimum 19)\",\r\n value: input.age\r\n })) && (100 >= input.age || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number (@maximum 100)\",\r\n value: input.age\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number\",\r\n value: input.age\r\n })) && (\"number\" === typeof input.authority || $guard(_exceptionable, {\r\n path: _path + \".authority\",\r\n expected: \"number\",\r\n value: input.authority\r\n })) && (\"string\" === typeof input.joined_at && ($is_date(input.joined_at) || $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: \"string (@format date)\",\r\n value: input.joined_at\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: \"string\",\r\n value: input.joined_at\r\n }));\r\n return (\"object\" === typeof input && null !== input || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input\r\n })) && $ao0(input, _path + \"\", true) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n}; const clone = input => {\r\n const $io1 = input => \"string\" === typeof input.name && (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age) && \"number\" === typeof input.authority && (\"string\" === typeof input.joined_at && $is_date(input.joined_at));\r\n const $is_uuid = typia_1.default.assertClone.is_uuid;\r\n const $is_date = typia_1.default.assertClone.is_date;\r\n const $cp0 = input => input.map(elem => \"object\" === typeof elem && null !== elem ? $co1(elem) : elem);\r\n const $co0 = input => ({\r\n id: input.id,\r\n name: input.name,\r\n limit: input.limit,\r\n clerks: Array.isArray(input.clerks) ? $cp0(input.clerks) : input.clerks\r\n });\r\n const $co1 = input => ({\r\n name: input.name,\r\n age: input.age,\r\n authority: input.authority,\r\n joined_at: input.joined_at\r\n });\r\n return \"object\" === typeof input && null !== input ? $co0(input) : input;\r\n}; assert(input); const output = clone(input); return output; })(department);\r\nconsole.log(cloned);","prune-functions#prune() functions":"export function prune(input: T): void;\r\nexport function assertPrune(input: T | unknown): T;\r\nexport function isPrune(input: T | unknown): T | null;\r\nexport function validatePrune(input: T | unknown): IValidation;\r\n\r\nexport function createPrune(): (input: T) => void;\r\nexport function createAssertPrune(): (input: T | unknown) => T;\r\nexport function createIsPrune(): (input: T | unknown) => T | null;\r\nexport function createValidatePrune(): (input: T | unknown) => IValidation;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nDeep prune functions.When you want to remove every extra properties that are not defined in the type including nested objects, you can use typia.misc.prune() function. Also, if you want to perform type safe pruning, you can use typia.misc.isPrune(), typia.misc.assertPrune() or typia.misc.validatePrune() functions instead.\ntypia.misc.isPrune(): typia.is() + typia.misc.prune()\ntypia.misc.assertPrune(): typia.assert() + typia.misc.prune()\ntypia.misc.validatePrune(): typia.validate() + typia.misc.prune()\nimport typia from \"typia\";\r\n\r\nconst department: IDepartment = typia.misc.random();\r\nconst pruned: IDepartment = typia.misc.assertPrune(department);\r\nconsole.log(pruned);\r\n\r\ninterface IDepartment {\r\n /**\r\n * @format uuid\r\n */\r\n id: string;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n name: string;\r\n\r\n /**\r\n * @type int\r\n */\r\n limit: number;\r\n\r\n clerks: IClerk[];\r\n}\r\ninterface IClerk {\r\n name: string;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n age: number;\r\n\r\n authority: number;\r\n\r\n /**\r\n * @format date\r\n */\r\n joined_at: string;\r\n}\n\r\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst department = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s; return ({\r\n id: (_d = (_c = (_b = ((_a = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _a !== void 0 ? _a : $generator.customs)) === null || _b === void 0 ? void 0 : _b.string) === null || _c === void 0 ? void 0 : _c.call(_b, [\r\n {\r\n name: \"format\",\r\n value: \"uuid\"\r\n }\r\n ])) !== null && _d !== void 0 ? _d : ((_e = generator === null || generator === void 0 ? void 0 : generator.uuid) !== null && _e !== void 0 ? _e : $generator.uuid)(),\r\n name: (_j = (_h = (_g = ((_f = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _f !== void 0 ? _f : $generator.customs)) === null || _g === void 0 ? void 0 : _g.string) === null || _h === void 0 ? void 0 : _h.call(_g, [\r\n {\r\n name: \"minLength\",\r\n value: \"3\"\r\n }\r\n ])) !== null && _j !== void 0 ? _j : ((_k = generator === null || generator === void 0 ? void 0 : generator.string) !== null && _k !== void 0 ? _k : $generator.string)(((_l = generator === null || generator === void 0 ? void 0 : generator.integer) !== null && _l !== void 0 ? _l : $generator.integer)(3, 25)),\r\n limit: (_q = (_p = (_o = ((_m = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _m !== void 0 ? _m : $generator.customs)) === null || _o === void 0 ? void 0 : _o.number) === null || _p === void 0 ? void 0 : _p.call(_o, [\r\n {\r\n name: \"type\",\r\n value: \"int\"\r\n }\r\n ])) !== null && _q !== void 0 ? _q : ((_r = generator === null || generator === void 0 ? void 0 : generator.integer) !== null && _r !== void 0 ? _r : $generator.integer)(0, 100),\r\n clerks: ((_s = generator === null || generator === void 0 ? void 0 : generator.array) !== null && _s !== void 0 ? _s : $generator.array)(() => $ro1(_recursive, _recursive ? 1 + _depth : _depth))\r\n }); };\r\n const $ro1 = (_recursive = false, _depth = 0) => { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v; return ({\r\n name: (_d = (_c = (_b = ((_a = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _a !== void 0 ? _a : $generator.customs)) === null || _b === void 0 ? void 0 : _b.string) === null || _c === void 0 ? void 0 : _c.call(_b, [])) !== null && _d !== void 0 ? _d : ((_e = generator === null || generator === void 0 ? void 0 : generator.string) !== null && _e !== void 0 ? _e : $generator.string)(),\r\n age: (_j = (_h = (_g = ((_f = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _f !== void 0 ? _f : $generator.customs)) === null || _g === void 0 ? void 0 : _g.number) === null || _h === void 0 ? void 0 : _h.call(_g, [\r\n {\r\n name: \"exclusiveMinimum\",\r\n value: \"19\"\r\n },\r\n {\r\n name: \"maximum\",\r\n value: \"100\"\r\n }\r\n ])) !== null && _j !== void 0 ? _j : ((_k = generator === null || generator === void 0 ? void 0 : generator.number) !== null && _k !== void 0 ? _k : $generator.number)(19, 100),\r\n authority: (_p = (_o = (_m = ((_l = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _l !== void 0 ? _l : $generator.customs)) === null || _m === void 0 ? void 0 : _m.number) === null || _o === void 0 ? void 0 : _o.call(_m, [])) !== null && _p !== void 0 ? _p : ((_q = generator === null || generator === void 0 ? void 0 : generator.number) !== null && _q !== void 0 ? _q : $generator.number)(0, 100),\r\n joined_at: (_u = (_t = (_s = ((_r = generator === null || generator === void 0 ? void 0 : generator.customs) !== null && _r !== void 0 ? _r : $generator.customs)) === null || _s === void 0 ? void 0 : _s.string) === null || _t === void 0 ? void 0 : _t.call(_s, [\r\n {\r\n name: \"format\",\r\n value: \"date\"\r\n }\r\n ])) !== null && _u !== void 0 ? _u : ((_v = generator === null || generator === void 0 ? void 0 : generator.date) !== null && _v !== void 0 ? _v : $generator.date)()\r\n }); };\r\n return $ro0();\r\n})();\r\nconst pruned = (input => { const assert = input => {\r\n const __is = input => {\r\n const $is_uuid = typia_1.default.assertPrune.is_uuid;\r\n const $is_date = typia_1.default.assertPrune.is_date;\r\n const $io0 = input => \"string\" === typeof input.id && $is_uuid(input.id) && (\"string\" === typeof input.name && 3 <= input.name.length) && (\"number\" === typeof input.limit && parseInt(input.limit) === input.limit) && (Array.isArray(input.clerks) && input.clerks.every(elem => \"object\" === typeof elem && null !== elem && $io1(elem)));\r\n const $io1 = input => \"string\" === typeof input.name && (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age) && \"number\" === typeof input.authority && (\"string\" === typeof input.joined_at && $is_date(input.joined_at));\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.assertPrune.guard;\r\n const $is_uuid = typia_1.default.assertPrune.is_uuid;\r\n const $is_date = typia_1.default.assertPrune.is_date;\r\n const $ao0 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.id && ($is_uuid(input.id) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string (@format uuid)\",\r\n value: input.id\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string\",\r\n value: input.id\r\n })) && (\"string\" === typeof input.name && (3 <= input.name.length || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string (@minLength 3)\",\r\n value: input.name\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name\r\n })) && (\"number\" === typeof input.limit && (parseInt(input.limit) === input.limit || $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: \"number (@type int)\",\r\n value: input.limit\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: \"number\",\r\n value: input.limit\r\n })) && ((Array.isArray(input.clerks) || $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks\r\n })) && input.clerks.every((elem, _index1) => (\"object\" === typeof elem && null !== elem || $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem\r\n })) && $ao1(elem, _path + \".clerks[\" + _index1 + \"]\", true && _exceptionable) || $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks\r\n }));\r\n const $ao1 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.name || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name\r\n })) && (\"number\" === typeof input.age && (19 < input.age || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number (@exclusiveMinimum 19)\",\r\n value: input.age\r\n })) && (100 >= input.age || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number (@maximum 100)\",\r\n value: input.age\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number\",\r\n value: input.age\r\n })) && (\"number\" === typeof input.authority || $guard(_exceptionable, {\r\n path: _path + \".authority\",\r\n expected: \"number\",\r\n value: input.authority\r\n })) && (\"string\" === typeof input.joined_at && ($is_date(input.joined_at) || $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: \"string (@format date)\",\r\n value: input.joined_at\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: \"string\",\r\n value: input.joined_at\r\n }));\r\n return (\"object\" === typeof input && null !== input || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input\r\n })) && $ao0(input, _path + \"\", true) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n}; const prune = input => {\r\n const $io1 = input => \"string\" === typeof input.name && (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age) && \"number\" === typeof input.authority && (\"string\" === typeof input.joined_at && $is_date(input.joined_at));\r\n const $is_uuid = typia_1.default.assertPrune.is_uuid;\r\n const $is_date = typia_1.default.assertPrune.is_date;\r\n const $pp0 = input => input.forEach(elem => {\r\n if (\"object\" === typeof elem && null !== elem)\r\n $po1(elem);\r\n });\r\n const $po0 = input => {\r\n if (Array.isArray(input.clerks))\r\n $pp0(input.clerks);\r\n for (const key of Object.keys(input)) {\r\n if (\"id\" === key || \"name\" === key || \"limit\" === key || \"clerks\" === key)\r\n continue;\r\n delete input[key];\r\n }\r\n };\r\n const $po1 = input => {\r\n for (const key of Object.keys(input)) {\r\n if (\"name\" === key || \"age\" === key || \"authority\" === key || \"joined_at\" === key)\r\n continue;\r\n delete input[key];\r\n }\r\n };\r\n if (\"object\" === typeof input && null !== input)\r\n $po0(input);\r\n}; assert(input); prune(input); return input; })(department);\r\nconsole.log(pruned);","literals-function#literals() function":"export namespace misc {\r\n export function literals<\r\n T extends boolean | number | string | bigint | null\r\n >(): T[];\r\n}\nUnion literal type to array.When you call typia.misc.literals() function with union literal type, it returns an array of literal values listed in the generic T argument. This typia.misc.literals function is useful when you are developing test program, especially handling some discriminated union types.\nimport typia from \"typia\";\r\n\r\ntypia.misc.literals<\"A\" | \"B\" | \"C\" | 1 | 2n>();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n[\r\n \"A\",\r\n \"B\",\r\n \"C\",\r\n 1,\r\n BigInt(2)\r\n];","notations-module#notations module":"","camel-functions#camel() functions":"export namespace notations {\r\n export function camel(input: T): CamelCase;\r\n export function assertCamel(input: T | unknown): CamelCase;\r\n export function isCamel(input: T | unknown): CamelCase | null;\r\n export function validateCamel(input: T | unknown): IValidation>;\r\n\r\n export function createCamel(): (input: T) => CamelCase;\r\n export function createAssertCamel(): (input: T | unknown) => CamelCase;\r\n export function createIsCamel(): (input: T | unknown) => CamelCase | null;\r\n export function createValidateCamel(): (\r\n input: T | unknown\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Camel case type.\r\n *\r\n * `CamelCase` type is a type that all keys of an object are camelized.\r\n *\r\n * It also erase every method properties like {@link Resolved} type.\r\n *\r\n * @template T Target type to be camelized\r\n * @author Jeongho Nam - https://github.com/samchon\r\n */\r\nexport type CamelCase = Equal> extends true\r\n ? T\r\n : CamelizeMain;\r\n\r\n/* -----------------------------------------------------------\r\n OBJECT CONVERSION\r\n----------------------------------------------------------- */\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype CamelizeMain = T extends [never]\r\n ? never // special trick for (jsonable | null) type\r\n : T extends { valueOf(): boolean | bigint | number | string }\r\n ? ValueOf\r\n : T extends Function\r\n ? never\r\n : T extends object\r\n ? CamelizeObject\r\n : T;\r\n\r\ntype CamelizeObject = T extends Array\r\n ? IsTuple extends true\r\n ? CamelizeTuple\r\n : CamelizeMain[]\r\n : T extends Set\r\n ? Set>\r\n : T extends Map\r\n ? Map, CamelizeMain>\r\n : T extends WeakSet | WeakMap\r\n ? never\r\n : T extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? T\r\n : {\r\n [Key in keyof T as CamelizeString]: CamelizeMain<\r\n T[Key]\r\n >;\r\n };\r\n\r\n/* -----------------------------------------------------------\r\n SPECIAL CASES\r\n----------------------------------------------------------- */\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\ntype CamelizeTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [CamelizeMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [CamelizeMain, ...CamelizeTuple]\r\n : T extends [(infer F)?]\r\n ? [CamelizeMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [CamelizeMain?, ...CamelizeTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\n/* -----------------------------------------------------------\r\n STRING CONVERTER\r\n----------------------------------------------------------- */\r\ntype CamelizeString = Key extends `${infer F}${infer R}`\r\n ? `${Lowercase}${CamelizeStringRepeatedly}`\r\n : Key;\r\ntype CamelizeStringRepeatedly =\r\n Key extends `${infer F}_${infer R}`\r\n ? `${F}${Capitalize>}`\r\n : Key;\nCamel case converters.Convert every property names of nested objects to be camel case notation.When you need type safe functions, you can utilize below them.\ntypia.notations.assertCamel(): typia.assert() + typia.notations.camel()\ntypia.notations.isCamel: typia.is() + typia.notations.camel()\ntypia.notations.validateCamel: typia.validate() + typia.notations.camel()\nimport typia from \"typia\";\r\n\r\ninterface IPerson {\r\n is_my_name_samchon?: boolean;\r\n HelloTheNewWorld: string;\r\n ToHTML: string;\r\n}\r\ntypia.notations.createCamel();\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $co0 = input => ({\r\n isMyNameSamchon: input.is_my_name_samchon,\r\n helloTheNewWorld: input.HelloTheNewWorld,\r\n toHTML: input.ToHTML\r\n });\r\n return \"object\" === typeof input && null !== input ? $co0(input) : input;\r\n};","pascal-functions#pascal() functions":"export namespace notations {\r\n export function pascal(input: T): PascalCase;\r\n export function assertPascal(input: T | unknown): PascalCase;\r\n export function isPascal(input: T | unknown): PascalCase | null;\r\n export function validatePascal(input: T | unknown): IValidation>;\r\n\r\n export function createPascal(): (input: T) => PascalCase;\r\n export function createAssertPascal(): (input: T | unknown) => PascalCase;\r\n export function createIsPascal(): (input: T | unknown) => PascalCase | null;\r\n export function createValidatePascal(): (\r\n input: T | unknown\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Pascal case type.\r\n *\r\n * `PascalCase` type is a type that all keys of an object are pascalized.\r\n *\r\n * It also erase every method properties like {@link Resolved} type.\r\n *\r\n * @template T Target type to be pascalized\r\n * @author Jeongho Nam - https://github.com/samchon\r\n */\r\nexport type PascalCase = Equal> extends true\r\n ? T\r\n : PascalizeMain;\r\n\r\n/* -----------------------------------------------------------\r\n OBJECT CONVERSION\r\n----------------------------------------------------------- */\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype PascalizeMain = T extends [never]\r\n ? never // special trick for (jsonable | null) type\r\n : T extends { valueOf(): boolean | bigint | number | string }\r\n ? ValueOf\r\n : T extends Function\r\n ? never\r\n : T extends object\r\n ? PascalizeObject\r\n : T;\r\n\r\ntype PascalizeObject = T extends Array\r\n ? IsTuple extends true\r\n ? PascalizeTuple\r\n : PascalizeMain[]\r\n : T extends Set\r\n ? Set>\r\n : T extends Map\r\n ? Map, PascalizeMain>\r\n : T extends WeakSet | WeakMap\r\n ? never\r\n : T extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? T\r\n : {\r\n [Key in keyof T as PascalizeString]: PascalizeMain<\r\n T[Key]\r\n >;\r\n };\r\n\r\n/* -----------------------------------------------------------\r\n SPECIAL CASES\r\n----------------------------------------------------------- */\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\ntype PascalizeTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [PascalizeMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [PascalizeMain, ...PascalizeTuple]\r\n : T extends [(infer F)?]\r\n ? [PascalizeMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [PascalizeMain?, ...PascalizeTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\n/* -----------------------------------------------------------\r\n STRING CONVERTER\r\n----------------------------------------------------------- */\r\ntype PascalizeString = Key extends `${infer F}${infer R}`\r\n ? `${Uppercase}${PascalizeStringRepeatedly}`\r\n : Key;\r\ntype PascalizeStringRepeatedly =\r\n Key extends `${infer F}_${infer R}`\r\n ? `${F}${Capitalize>}`\r\n : Key;\nPascal case converters.Convert every property names of nested objects to be pascal case notation.When you need type safe functions, you can utilize below them.\ntypia.notations.assertPascal(): typia.assert() + typia.notations.pascal()\ntypia.notations.isPascal: typia.is() + typia.notations.pascal()\ntypia.notations.validatePascal: typia.validate() + typia.notations.pascal()\nimport typia from \"typia\";\r\n\r\ninterface IPerson {\r\n is_my_name_samchon?: boolean;\r\n helloTheNewWorld: string;\r\n toHTML: string;\r\n}\r\ntypia.notations.createPascal();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $co0 = input => ({\r\n IsMyNameSamchon: input.is_my_name_samchon,\r\n HelloTheNewWorld: input.helloTheNewWorld,\r\n ToHTML: input.toHTML\r\n });\r\n return \"object\" === typeof input && null !== input ? $co0(input) : input;\r\n};","snake-functions#snake() functions":"export namespace notations {\r\n export function snake(input: T): SnakeCase;\r\n export function assertSnake(input: T | unknown): SnakeCase;\r\n export function isSnake(input: T | unknown): SnakeCase | null;\r\n export function validateSnake(input: T | unknown): IValidation>;\r\n\r\n export function createSnake(): (input: T) => SnakeCase;\r\n export function createAssertSnake(): (input: T | unknown) => SnakeCase;\r\n export function createIsSnake(): (input: T | unknown) => SnakeCase | null;\r\n export function createValidateSnake(): (\r\n input: T | unknown\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Snake case type.\r\n *\r\n * `SnakeCase` type is a type that all keys of an object are converted to snake case.\r\n *\r\n * It also erase every method properties like {@link Resolved} type.\r\n *\r\n * @template T Target type to be snake cased\r\n * @author Jeongho Nam - https://github.com/samchon\r\n */\r\nexport type SnakeCase = Equal> extends true\r\n ? T\r\n : SnakageMain;\r\n\r\n/* -----------------------------------------------------------\r\n OBJECT CONVERSION\r\n----------------------------------------------------------- */\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype SnakageMain = T extends [never]\r\n ? never // special trick for (jsonable | null) type\r\n : T extends { valueOf(): boolean | bigint | number | string }\r\n ? ValueOf\r\n : T extends Function\r\n ? never\r\n : T extends object\r\n ? SnakageObject\r\n : T;\r\n\r\ntype SnakageObject = T extends Array\r\n ? IsTuple extends true\r\n ? SnakageTuple\r\n : SnakageMain[]\r\n : T extends Set\r\n ? Set>\r\n : T extends Map\r\n ? Map, SnakageMain>\r\n : T extends WeakSet | WeakMap\r\n ? never\r\n : T extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? T\r\n : {\r\n [Key in keyof T as SnakageString]: SnakageMain;\r\n };\r\n\r\n/* -----------------------------------------------------------\r\n SPECIAL CASES\r\n----------------------------------------------------------- */\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\ntype SnakageTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [SnakageMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [SnakageMain, ...SnakageTuple]\r\n : T extends [(infer F)?]\r\n ? [SnakageMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [SnakageMain?, ...SnakageTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\n/* -----------------------------------------------------------\r\n STRING CONVERTER\r\n----------------------------------------------------------- */\r\ntype SnakageString = Key extends `${infer _}`\r\n ? SnakageStringRepeatedly\r\n : Key;\r\ntype SnakageStringRepeatedly<\r\n S extends string,\r\n Previous extends string,\r\n> = S extends `${infer First}${infer Second}${infer Rest}`\r\n ? `${Underscore}${Lowercase}${Underscore<\r\n First,\r\n Second\r\n >}${Lowercase}${SnakageStringRepeatedly}`\r\n : S extends `${infer First}`\r\n ? `${Underscore}${Lowercase}`\r\n : \"\";\r\ntype Underscore = First extends\r\n | UpperAlphabetic\r\n | \"\"\r\n | \"_\"\r\n ? \"\"\r\n : Second extends UpperAlphabetic\r\n ? \"_\"\r\n : \"\";\r\ntype UpperAlphabetic =\r\n | \"A\"\r\n | \"B\"\r\n | \"C\"\r\n | \"D\"\r\n | \"E\"\r\n | \"F\"\r\n | \"G\"\r\n | \"H\"\r\n | \"I\"\r\n | \"J\"\r\n | \"K\"\r\n | \"L\"\r\n | \"M\"\r\n | \"N\"\r\n | \"O\"\r\n | \"P\"\r\n | \"Q\"\r\n | \"R\"\r\n | \"S\"\r\n | \"T\"\r\n | \"U\"\r\n | \"V\"\r\n | \"W\"\r\n | \"X\"\r\n | \"Y\"\r\n | \"Z\";\nSnake case converters.Convert every property names of nested objects to be snake case notation.When you need type safe functions, you can utilize below them.\ntypia.notations.assertSnake(): typia.assert() + typia.notations.snake()\ntypia.notations.isSnake: typia.is() + typia.notations.snake()\ntypia.notations.validateSnake: typia.validate() + typia.notations.snake()\nimport typia from \"typia\";\r\n\r\ninterface IPerson {\r\n isMyNameSamchon?: boolean;\r\n HelloTheNewWorld: string;\r\n ToHTML: string;\r\n}\r\ntypia.notations.createSnake();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $co0 = input => ({\r\n is_my_name_samchon: input.isMyNameSamchon,\r\n hello_the_new_world: input.HelloTheNewWorld,\r\n to_html: input.ToHTML\r\n });\r\n return \"object\" === typeof input && null !== input ? $co0(input) : input;\r\n};","http-module#http module":"Nestia Supporting\nhttp module has been designed to support the nestia project.\nquery() functions -> @TypedQuery()\nheaders() functions -> @TypedHeaders()\nparameter() function -> @TypedParam()","query-functions#query() functions":"export namespace http {\r\n export function query(input: Query): Resolved;\r\n export function assertQuery(input: Query): Resolved;\r\n export function isQuery(input: Query): Resolved | null;\r\n export function validateQuery(\r\n input: Query\r\n ): IValidation>;\r\n\r\n export function createQuery(): (input: Query) => Resolved;\r\n export function createAssertQuery(): (\r\n input: Query\r\n ) => Resolved;\r\n export function createIsQuery(): (\r\n input: Query\r\n ) => Resolved | null;\r\n export function createValidateQuery(): (\r\n input: Query\r\n ) => IValidation>;\r\n}\r\ntype Query = string | URLSearchParams;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nURL query decoder functions.typia.http.query() is a function decoding a query string or an URLSearchParams instance, with automatic type casting to the expected type. When property type be defined as boolean or number type, typia.http.query() will cast the value to the expected type when decoding.By the way, as URL query is not enough to express complex data structures, typia.http.query() function has some limitations. If target type T is not following those restrictions, compilation errors would be occured.\nType T must be an object type\nDo not allow dynamic property\nOnly boolean, bigint, number, string or their array types are allowed\nBy the way, union type never be not allowed\nAlso, typia.http.query() function does not perform validation about the decoded value. Therefore, if you can't sure that input data is following the T type, it would better to call one of below functions intead.\ntypia.http.assertQuery(): typia.assert() + typia.http.query()\ntypia.http.isQuery(): typia.is() + typia.http.query()\ntypia.http.validateQuery(): typia.validate() + typia.http.query()\nimport typia from \"typia\";\r\n\r\ninterface IQuery {\r\n limit?: number;\r\n enforce: boolean;\r\n values?: string[];\r\n atomic: string | null;\r\n indexes: number[];\r\n}\r\ntypia.http.createQuery();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $params = typia_1.default.http.createQuery.params;\r\n const $number = typia_1.default.http.createQuery.number;\r\n const $boolean = typia_1.default.http.createQuery.boolean;\r\n const $string = typia_1.default.http.createQuery.string;\r\n const $array = typia_1.default.http.createQuery.array;\r\n input = $params(input);\r\n const output = {\r\n limit: $number(input.get(\"limit\")) ?? undefined,\r\n enforce: $boolean(input.get(\"enforce\")),\r\n values: $array(input.getAll(\"values\").map(elem => $string(elem)), undefined),\r\n atomic: $string(input.get(\"atomic\")),\r\n indexes: input.getAll(\"indexes\").map(elem => $number(elem))\r\n };\r\n return output;\r\n};","headers-functions#headers() functions":"export namespace http {\r\n export function headers(input: Headers): Resolved;\r\n export function assertHeaders(input: Headers): Resolved;\r\n export function isHeaders(input: Headers): Resolved | null;\r\n export function validateHeaders(\r\n input: Headers\r\n ): IValidation>;\r\n\r\n export function createHeaders(): (\r\n input: Headers\r\n ) => Resolved;\r\n export function createAssertHeaders(): (\r\n input: Headers\r\n ) => Resolved;\r\n export function createIsHeaders(): (\r\n input: Headers\r\n ) => Resolved | null;\r\n export function createValidateHeaders(): (\r\n input: Headers\r\n ) => IValidation>;\r\n}\r\ntype Headers = Record;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nHeaders decoder (for express and fastify).typia.http.headers() is a function decoding an header instance, with automatic type casting to the expected type. When property type be defined as boolean or number type, typia.http.headers() will cast the value to the expected type.By the way, as HTTP headers are not enough to express complex data structures, typia.http.headers() function has some limitations. If target type T is not following those restrictions, compilation errors would be occured.\nType T must be an object type\nDo not allow dynamic property\nProperty key must be lower case\nProperty value cannot be null, but undefined is possible\nOnly boolean, bigint, number, string or their array types are allowed\nBy the way, union type never be not allowed\nProperty set-cookie must be array type\nThose properties cannot be array type\nage\nauthorization\ncontent-length\ncontent-type\netag\nexpires\nfrom\nhost\nif-modified-since\nif-unmodified-since\nlast-modified\nlocation\nmax-forwards\nproxy-authorization\nreferer\nretry-after\nserver\nuser-agent\nAlso, typia.http.headers() function does not perform validation about the decoded value. Therefore, if you can't sure that input data is following the T type, it would better to call one of below functions intead.\ntypia.http.assertHeaders(): typia.assert() + typia.http.headers()\ntypia.http.isHeaders(): typia.is() + typia.http.headers()\ntypia.http.validateHeaders(): typia.validate() + typia.http.headers()\nimport typia from \"typia\";\r\n\r\ninterface IHeaders {\r\n \"x-Category\": \"x\" | \"y\" | \"z\";\r\n \"x-MEMO\"?: string;\r\n \"x-nAmE\"?: string;\r\n \"x-ValUes\": number[];\r\n \"x-FlAgS\": boolean[];\r\n \"X-Descriptions\": string[];\r\n}\r\ntypia.http.createHeaders();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $number = typia_1.default.http.createHeaders.number;\r\n const $boolean = typia_1.default.http.createHeaders.boolean;\r\n const $string = typia_1.default.http.createHeaders.string;\r\n const output = {\r\n \"x-Category\": input[\"x-category\"],\r\n \"x-MEMO\": input[\"x-memo\"],\r\n \"x-nAmE\": input[\"x-name\"],\r\n \"x-ValUes\": Array.isArray(input[\"x-values\"]) ? input[\"x-values\"].map($number) : input[\"x-values\"]?.split(\", \")?.map($number) ?? [],\r\n \"x-FlAgS\": Array.isArray(input[\"x-flags\"]) ? input[\"x-flags\"].map($boolean) : input[\"x-flags\"]?.split(\", \")?.map($boolean) ?? [],\r\n \"X-Descriptions\": Array.isArray(input[\"x-descriptions\"]) ? input[\"x-descriptions\"].map($string) : input[\"x-descriptions\"]?.split(\", \")?.map($string) ?? []\r\n };\r\n return output;\r\n};","parameter-functions#parameter() functions":"export namespace http {\r\n export function parameter(input: string): T;\r\n export function createParameter(): (\r\n input: string\r\n ) => T;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nURL path parameter decoder.typia.http.parameter() is a function decoding a path parameter, with automatic type casting to the expected type. When type T has beeen defined as boolean or number type, typia.http.parameter() will cast the value to the expected type.Also, typia.http.parameter() performs type assertion to the decoded value by combining with assert function. Therefore, when the decoded value is not following the T type, TypeGuardError would be thrown.\nimport typia, { tags } from \"typia\";\r\n\r\ntypia.http.createParameter>();\r\ntypia.http.createParameter>();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\ninput => {\r\n const $string = typia_1.default.http.createParameter.string;\r\n const assert = input => {\r\n const __is = input => {\r\n return \"string\" === typeof input && /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.http.createParameter.guard;\r\n return \"string\" === typeof input && (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(input) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"string & Format<\\\"uuid\\\">\",\r\n value: input\r\n })) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"(string & Format<\\\"uuid\\\">)\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n };\r\n const value = $string(input);\r\n return assert(value);\r\n};\r\ninput => {\r\n const $number = typia_1.default.http.createParameter.number;\r\n const assert = input => {\r\n const __is = input => {\r\n return \"number\" === typeof input && (Math.floor(input) === input && 0 <= input && input <= 4294967295);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.http.createParameter.guard;\r\n return \"number\" === typeof input && (Math.floor(input) === input && 0 <= input && input <= 4294967295 || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"number & Type<\\\"uint32\\\">\",\r\n value: input\r\n })) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"(number & Type<\\\"uint32\\\">)\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n };\r\n const value = $number(input);\r\n return assert(value);\r\n};"}},"/docs/utilization/nestjs":{"title":"Nestjs","data":{"":"Nestia is a set of helper libraries for NestJS, supporting below features:\n@nestia/core: superfast decorators using typia\n@nestia/sdk: evolved SDK and Swagger generators\n@nestia/migrate: Swagger to NestJS\nnestia: just CLI (command line interface) tool\nimport { Controller } from \"@nestjs/common\";\r\nimport { TypedBody, TypedRoute } from \"@nestia/core\";\r\n\r\nimport type { IBbsArticle } from \"@bbs-api/structures/IBbsArticle\";\r\n\r\n@Controller(\"bbs/articles\")\r\nexport class BbsArticlesController {\r\n /** \r\n * Store a new content.\r\n * \r\n * @param input Content to store\r\n * @returns Newly archived article\r\n */\r\n @TypedRoute.Post() // 200x faster and safer JSON.stringify()\r\n public async store(\r\n @TypedBody() input: IBbsArticle.IStore // 20,000x faster validator\r\n ): Promise; \r\n // do not need DTO class definition, \r\n // just fine with interface\r\n}\nLeft: NestJS server code\nRight: Client code using SDK"}},"/playground":{"title":"Index","data":{}},"/":{"title":"Index","data":{"key-features#Key Features":"","sponsors#Sponsors":"Thanks for your support.Your donation would encourage typia development."}},"/docs/utilization/prisma":{"title":"Prisma","data":{"":"model bbs_articles {\r\n id String @id @db.Uuid /// @format uuid\r\n created_at DateTime @db.Timestamptz\r\n\r\n /// @minItems 1\r\n snapshots bbs_article_snapshots[]\r\n}\r\n\r\nmodel bbs_article_snapshots {\r\n id String @id @db.Uuid /// @format uuid\r\n bbs_article_id String @db.Uuid /// @format uuid\r\n format String @db.VarChar\r\n\r\n /// @minLength 5\r\n /// @maxLength 80\r\n title String @db.VarChar\r\n body String\r\n created_at DateTime @db.Timestamptz\r\n\r\n article bbs_articles @relation(fields: [bbs_article_id], references: [id])\r\n}\n/**\r\n * Model bbs_articles\r\n */\r\nexport type bbs_articles = {\r\n /**\r\n * @format uuid\r\n */\r\n id: string\r\n created_at: Date\r\n}\r\n\r\n/**\r\n * Model bbs_article_snapshots\r\n */\r\nexport type bbs_article_snapshots = {\r\n /**\r\n * @format uuid\r\n */\r\n id: string\r\n /**\r\n * @format uuid\r\n */\r\n bbs_article_id: string\r\n format: string\r\n /**\r\n * @minLength 5\r\n * @maxLength 80\r\n */\r\n title: string\r\n body: string\r\n created_at: Date\r\n}\nWhen defining prisma.schema file, you can write comment tags just by using /// statement.After the definition, you utillize some validate function like typia.assert(), for type safe insertion."}},"/docs/json/schema":{"title":"Schema","data":{"application-function#application() function":"export namespace json {\r\n export function application<\r\n Schemas extends unknown[],\r\n Purpose extends \"ajv\" | \"swagger\" = \"swagger\",\r\n Surplus extends boolean = false,\r\n >(): IJsonApplication;\r\n}\nexport interface IJsonApplication {\r\n schemas: IJsonSchema[];\r\n components: IJsonComponents;\r\n purpose: \"swagger\" | \"ajv\";\r\n surplus: boolean;\r\n}\nexport interface IJsonComponents {\r\n schemas: Record;\r\n}\r\nexport namespace IJsonComponents {\r\n export type IAlias = IJsonSchema & IIndentified;\r\n interface IIdentified {\r\n $id?: undefined | string;\r\n $recursiveAnchor?: undefined | boolean;\r\n }\r\n}\nexport type IJsonSchema = IJsonSchema.NotUnknown | IJsonSchema.IUnknown;\r\nexport namespace IJsonSchema {\r\n export type NotUnknown =\r\n | IEnumeration<\"boolean\">\r\n | IEnumeration<\"number\">\r\n | IEnumeration<\"string\">\r\n | IBoolean\r\n | IInteger\r\n | INumber\r\n | IString\r\n | IArray\r\n | ITuple\r\n | IObject\r\n | IReference\r\n | INullOnly\r\n | IOneOf;\r\n\r\n /* -----------------------------------------------------------\r\n ATOMICS\r\n ----------------------------------------------------------- */\r\n export interface IEnumeration<\r\n Literal extends Exclude,\r\n > extends IAtomic {\r\n enum: Array;\r\n }\r\n export interface IAtomic>\r\n extends ISignificant {\r\n default?: Atomic.Mapper[Literal];\r\n }\r\n export interface IString extends IAtomic<\"string\"> {\r\n /**\r\n * @type uint\r\n */\r\n minLength?: number;\r\n /**\r\n * @type uint\r\n */\r\n maxLength?: number;\r\n pattern?: string;\r\n format?: string;\r\n }\r\n export interface INumber extends IAtomic<\"number\"> {\r\n minimum?: number;\r\n maximum?: number;\r\n exclusiveMinimum?: boolean;\r\n exclusiveMaximum?: boolean;\r\n multipleOf?: number;\r\n }\r\n export interface IInteger extends IAtomic<\"integer\"> {\r\n /**\r\n * @type int\r\n */\r\n minimum?: number;\r\n /**\r\n * @type int\r\n */\r\n maximum?: number;\r\n exclusiveMinimum?: boolean;\r\n exclusiveMaximum?: boolean;\r\n /**\r\n * @type int\r\n */\r\n multipleOf?: number;\r\n }\r\n export interface IBoolean extends IAtomic<\"boolean\"> {}\r\n\r\n /* -----------------------------------------------------------\r\n OBJECTS\r\n ----------------------------------------------------------- */\r\n export interface IArray extends ISignificant<\"array\"> {\r\n items: IJsonSchema;\r\n /**\r\n * @type uint\r\n */\r\n minItems?: number;\r\n /**\r\n * @type uint\r\n */\r\n maxItems?: number;\r\n \"x-typia-tuple\"?: ITuple;\r\n }\r\n export interface ITuple extends ISignificant<\"array\"> {\r\n items: IJsonSchema[];\r\n }\r\n export interface IObject extends ISignificant<\"object\"> {\r\n properties: Record;\r\n required?: undefined | string[];\r\n patternProperties?: undefined | Record;\r\n additionalProperties?: undefined | IJsonSchema;\r\n \"x-typia-patternProperties\"?: undefined | Record;\r\n \"x-typia-additionalProperties\"?: undefined | IJsonSchema;\r\n }\r\n export interface IReference extends IAttribute {\r\n $ref: string;\r\n }\r\n export interface IRecursiveReference extends IAttribute {\r\n $recursiveRef: string;\r\n }\r\n export interface INullOnly extends IAttribute {\r\n type: \"null\";\r\n }\r\n\r\n /* -----------------------------------------------------------\r\n MISCELLANEOUS\r\n ----------------------------------------------------------- */\r\n export interface IOneOf extends IAttribute {\r\n oneOf: IJsonSchema[];\r\n }\r\n export interface IUnknown {\r\n type: undefined;\r\n }\r\n\r\n export interface ISignificant extends IAttribute {\r\n type: Literal;\r\n nullable: boolean;\r\n }\r\n export interface IAttribute {\r\n deprecated?: boolean;\r\n title?: string;\r\n description?: string;\r\n \"x-typia-jsDocTags\"?: IJsDocTagInfo[];\r\n \"x-typia-required\"?: boolean;\r\n \"x-typia-rest\"?: boolean;\r\n }\r\n}\nJSON schema generator.\nDefinitions:\nIJsonApplication\nIJsonComponents\nIJsonSchema\nWhen you need JSON schema, do not write it by yourself, but just call typia.application() function.If you call the typia.application() with specialization of target Schemas, typia will analyze your Schemas and generate JSON schema definition in the compilation level. However, note that, JSON schema definitions of AJV and Swagger are a little bit different. Therefore, you have to consider which value to assign in the Purpose argument.\nSwagger can't express tuple type\nSwagger can't express pattern property\nimport typia, { tags } from \"typia\";\r\n\r\nexport const MemberSchema = typia.application<[IMember], \"ajv\">();\r\n\r\ninterface IMember {\r\n /**\r\n * Unique user ID generated by server.\r\n */\r\n id: string & tags.Format<\"uuid\">;\r\n\r\n /**\r\n * Email address of the member.\r\n */\r\n email: string & tags.Format<\"email\">;\r\n\r\n /**\r\n * Age of the member.\r\n * \r\n * For reference, only adult can be a member.\r\n */\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MemberSchema = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nexports.MemberSchema = {\r\n schemas: [\r\n {\r\n $ref: \"#/components/schemas/IMember\"\r\n }\r\n ],\r\n components: {\r\n schemas: {\r\n IMember: {\r\n $id: \"#/components/schemas/IMember\",\r\n type: \"object\",\r\n properties: {\r\n id: {\r\n description: \"Unique user ID generated by server.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n email: {\r\n description: \"Email address of the member.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n age: {\r\n description: \"Age of the member.\\n\\nFor reference, only adult can be a member.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n }\r\n },\r\n required: [\r\n \"id\",\r\n \"email\",\r\n \"age\"\r\n ],\r\n \"x-typia-jsDocTags\": []\r\n }\r\n }\r\n },\r\n purpose: \"ajv\"\r\n};","specialization#Specialization":"You can utilize type tags (or validator's comment tags) to constructing special fields of JSON schema.If you write any comment on a property, it would fill the IJsonSchema.description value. Also, there're special comment tags only for JSON schema definition that are different with validator's comment tags like below.\n@deprecated\n@hidden\n@internal\n@title {string}\n@default {value}\nLet's see how those type tags, comment tags and description comments are working with example code.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const SpecialTagSchema = typia.json.application<[Special], \"swagger\">();\r\n\r\ninterface Special {\r\n /**\r\n * Deprecated tags are just used for marking.\r\n * \r\n * @title Unsigned integer\r\n * @deprecated\r\n */\r\n type: number & tags.Type<\"int32\">;\r\n\r\n /**\r\n * Internal tagged property never be shown in JSON schema.\r\n * \r\n * It even doesn't be shown in other `typia` functions like `assert()`.\r\n * \r\n * @internal\r\n */\r\n internal: number[];\r\n\r\n /**\r\n * Hidden tagged property never be shown in JSON schema.\r\n * \r\n * However, it would be shown in other `typia` functions like `stringify()`.\r\n * \r\n * @hidden\r\n */\r\n hidden: boolean;\r\n\r\n /**\r\n * You can limit the range of number.\r\n * \r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n * @default 30\r\n */\r\n number?: number;\r\n\r\n /**\r\n * You can limit the length of string.\r\n * \r\n * Also, multiple range conditions are also possible.\r\n */\r\n string: string & (\r\n | (tags.MinLength<3> & tags.MaxLength<24>)\r\n | (tags.MinLength<40> & tags.MaxLength<100>)\r\n );\r\n\r\n /**\r\n * You can limit the pattern of string.\r\n * \r\n * @pattern ^[a-z]+$\r\n */\r\n pattern: string;\r\n\r\n /**\r\n * You can limit the format of string.\r\n * \r\n * @format date-time\r\n */\r\n format: string | null;\r\n \r\n /**\r\n * In the Array case, possible to restrict its elements.\r\n */\r\n array: Array> & tags.MinItems<3>;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SpecialTagSchema = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nexports.SpecialTagSchema = {\r\n schemas: [\r\n {\r\n $ref: \"#/components/schemas/Special\"\r\n }\r\n ],\r\n components: {\r\n schemas: {\r\n Special: {\r\n type: \"object\",\r\n properties: {\r\n type: {\r\n deprecated: true,\r\n title: \"Unsigned integer\",\r\n description: \"Deprecated tags are just used for marking.\",\r\n type: \"integer\"\r\n },\r\n number: {\r\n description: \"You can limit the range of number.\",\r\n type: \"number\",\r\n minimum: 19,\r\n exclusiveMinimum: true,\r\n maximum: 100,\r\n \"default\": 30\r\n },\r\n string: {\r\n oneOf: [\r\n {\r\n description: \"You can limit the length of string.\\n\\nAlso, multiple range conditions are also possible.\",\r\n type: \"string\",\r\n maxLength: 24,\r\n minLength: 3\r\n },\r\n {\r\n description: \"You can limit the length of string.\\n\\nAlso, multiple range conditions are also possible.\",\r\n type: \"string\",\r\n maxLength: 100,\r\n minLength: 40\r\n }\r\n ],\r\n description: \"You can limit the length of string.\\n\\nAlso, multiple range conditions are also possible.\"\r\n },\r\n pattern: {\r\n description: \"You can limit the pattern of string.\",\r\n type: \"string\",\r\n pattern: \"^[a-z]+$\"\r\n },\r\n format: {\r\n description: \"You can limit the format of string.\",\r\n type: \"string\",\r\n format: \"date-time\",\r\n nullable: true\r\n },\r\n array: {\r\n description: \"In the Array case, possible to restrict its elements.\",\r\n type: \"array\",\r\n items: {\r\n description: \"In the Array case, possible to restrict its elements.\",\r\n type: \"string\",\r\n format: \"uuid\"\r\n },\r\n minItems: 3\r\n }\r\n },\r\n nullable: false,\r\n required: [\r\n \"type\",\r\n \"string\",\r\n \"pattern\",\r\n \"format\",\r\n \"array\"\r\n ]\r\n }\r\n }\r\n },\r\n purpose: \"swagger\"\r\n};","restrictions#Restrictions":"JSON schema does not support bigint type.So if you use bigint type in one of your onetarget schemas, typia will make compile error like below.\nimport typia, { tags } from \"typia\";\r\n\r\ninterface Something {\r\n bigint: bigint;\r\n array: bigint[];\r\n nested: Nested;\r\n}\r\ninterface Nested {\r\n uint64: bigint & tags.Type<\"uint64\">;\r\n}\r\n\r\ntypia.json.application<[Something], \"ajv\">();\nmain.ts:12:1 - error TS(typia.json.application): unsupported type detected\r\n\r\n- Something.bigint: bigint\r\n - JSON does not support bigint type.\r\n\r\n- Something.array: bigint\r\n - JSON does not support bigint type.\r\n\r\n- Nested.uint64: (bigint & Type<\"uint64\">)\r\n - JSON does not support bigint type.\nAlso, if you put any type of native classes like Map or Uint8Array, it would be considered as an empty object. By the way, only Date class is exceptional, and it would be considered as string & Format<\"date-time\"> type like below.\nimport typia from \"typia\";\r\n\r\ninterface Native {\r\n date: Date;\r\n bytes: Uint8Array;\r\n map: Map;\r\n}\r\ntypia.json.application<[Native], \"ajv\">();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n({\r\n schemas: [\r\n {\r\n $ref: \"#/components/schemas/Native\"\r\n }\r\n ],\r\n components: {\r\n schemas: {\r\n Native: {\r\n $id: \"#/components/schemas/Native\",\r\n type: \"object\",\r\n properties: {\r\n date: {\r\n type: \"string\",\r\n format: \"date-time\"\r\n },\r\n bytes: {\r\n $ref: \"#/components/objects/Uint8Array\"\r\n },\r\n map: {\r\n $ref: \"#/components/objects/Map\"\r\n }\r\n },\r\n required: [\r\n \"date\",\r\n \"bytes\",\r\n \"map\"\r\n ]\r\n },\r\n Uint8Array: {\r\n type: \"object\",\r\n $id: \"#/components/objects/Uint8Array\",\r\n properties: {}\r\n },\r\n Map: {\r\n type: \"object\",\r\n $id: \"#/components/objects/Map\",\r\n properties: {}\r\n }\r\n }\r\n },\r\n purpose: \"ajv\"\r\n});"}},"/docs/json/parse":{"title":"Parse","data":{"parse-functions#parse() functions":"export namespace json {\r\n export function isParse(input: string): Primitive | null;\r\n export function assertParse(input: string): Primitive;\r\n export function validateParse(\r\n input: string\r\n ): IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Primitive type of JSON.\r\n *\r\n * `Primitive` is a TMP (Type Meta Programming) type which converts\r\n * its argument as a primitive type within framework JSON.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be an empty object (`{}`).\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom method\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the primitive object.\r\n *\r\n * In addition, if the target argument is a type of custom class and it has a special\r\n * method `toJSON()`, return type of this `Primitive` would be not `Primitive`\r\n * but `Primitive>`.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `String` | `string`\r\n * `Class` | `object`\r\n * `Class` with `toJSON()` | `Primitive>`\r\n * Native Class | `{}`\r\n * Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n * @author Michael - https://github.com/8471919\r\n */\r\nexport type Primitive = Equal> extends true\r\n ? T\r\n : PrimitiveMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype PrimitiveMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends bigint\r\n ? never\r\n : ValueOf extends boolean | number | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : ValueOf extends object\r\n ? Instance extends object\r\n ? Instance extends NativeClass\r\n ? {}\r\n : Instance extends IJsonable\r\n ? ValueOf extends object\r\n ? Raw extends object\r\n ? PrimitiveObject // object would be primitified\r\n : never // cannot be\r\n : ValueOf // atomic value\r\n : PrimitiveObject // object would be primitified\r\n : never // cannot be\r\n : ValueOf;\r\n\r\ntype PrimitiveObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? PrimitiveTuple\r\n : PrimitiveMain[]\r\n : {\r\n [P in keyof Instance]: PrimitiveMain;\r\n };\r\n\r\ntype PrimitiveTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [PrimitiveMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [PrimitiveMain, ...PrimitiveTuple]\r\n : T extends [(infer F)?]\r\n ? [PrimitiveMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [PrimitiveMain?, ...PrimitiveTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype NativeClass =\r\n | Set\r\n | Map\r\n | WeakSet\r\n | WeakMap\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends U\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\ninterface IJsonable {\r\n toJSON(): T;\r\n}\nType safe JSON parser.Unlike native JSON.parse() function which returns any typed instance without type checking, typia.json.assertParse() function validates instance type after the parsing. If the parsed value is not following the promised type T, it throws TypeGuardError with the first type error info.If you want to know every type error infos detaily, you can use typia.json.validateParse() function instead. Otherwise, you just only want to know whether the parsed value is following the type T or not, just call typia.json.isParse() function.\ntypia.json.isParse(): JSON.parse() + typia.is()\ntypia.json.assertParse(): JSON.parse() + typia.assert()\ntypia.json.validateParse(): JSON.parse() + typia.validate()\nLook at the below code, then you may understand how the typia.json.assertParse() function works.\nimport typia, { tags } from \"typia\";\r\n\r\nconst json: string = JSON.stringify(typia.random());\r\nconst parsed: IMember = typia.json.assertParse(json);\r\n\r\nconsole.log(json === JSON.stringify(parsed)); // true\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst json = JSON.stringify(\r\n ((generator) => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: 'Format<\"uuid\">',\r\n kind: \"format\",\r\n value: \"uuid\",\r\n },\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n email:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: 'Format<\"email\">',\r\n kind: \"format\",\r\n value: \"email\",\r\n },\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n age:\r\n (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: 'Type<\"uint32\">',\r\n kind: \"type\",\r\n value: \"uint32\",\r\n },\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19,\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100,\r\n },\r\n ]) ?? (generator?.integer ?? $generator.integer)(19, 100),\r\n });\r\n return $ro0();\r\n })(),\r\n);\r\nconst parsed = ((input) => {\r\n const assert = (input) => {\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.json.assertParse.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n };\r\n input = JSON.parse(input);\r\n return assert(input);\r\n})(json);\r\nconsole.log(json === JSON.stringify(parsed)); // true\n/**\r\n * Primitive type of JSON.\r\n *\r\n * `Primitive` is a TMP (Type Meta Programming) type which converts\r\n * its argument as a primitive type within framework JSON.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be an empty object (`{}`).\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom method\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the primitive object.\r\n *\r\n * In addition, if the target argument is a type of custom class and it has a special\r\n * method `toJSON()`, return type of this `Primitive` would be not `Primitive`\r\n * but `Primitive>`.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `String` | `string`\r\n * `Class` | `object`\r\n * `Class` with `toJSON()` | `Primitive>`\r\n * Native Class | `{}`\r\n * Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n * @author Michael - https://github.com/8471919\r\n */\r\nexport type Primitive = Equal> extends true\r\n ? T\r\n : PrimitiveMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype PrimitiveMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends bigint\r\n ? never\r\n : ValueOf extends boolean | number | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : ValueOf extends object\r\n ? Instance extends object\r\n ? Instance extends NativeClass\r\n ? {}\r\n : Instance extends IJsonable\r\n ? ValueOf extends object\r\n ? Raw extends object\r\n ? PrimitiveObject // object would be primitified\r\n : never // cannot be\r\n : ValueOf // atomic value\r\n : PrimitiveObject // object would be primitified\r\n : never // cannot be\r\n : ValueOf;\r\n\r\ntype PrimitiveObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? PrimitiveTuple\r\n : PrimitiveMain[]\r\n : {\r\n [P in keyof Instance]: PrimitiveMain;\r\n };\r\n\r\ntype PrimitiveTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [PrimitiveMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [PrimitiveMain, ...PrimitiveTuple]\r\n : T extends [(infer F)?]\r\n ? [PrimitiveMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [PrimitiveMain?, ...PrimitiveTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype NativeClass =\r\n | Set\r\n | Map\r\n | WeakSet\r\n | WeakMap\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends U\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\r\n\r\ninterface IJsonable {\r\n toJSON(): T;\r\n}","reusable-functions#Reusable functions":"export namespace json {\r\n export function createIsParse(): (\r\n input: string\r\n ) => Primitive | null;\r\n export function createAssertParse(): (\r\n input: string\r\n ) => Primitive;\r\n export function createValidateParse(): (\r\n input: string\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nReusable typia.json.isParse() function generators.If you repeat to call typia.json.isParse() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createIsParse() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const parseMember = typia.json.createIsParse();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.parseMember = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst parseMember = (input) => {\r\n const is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n input = JSON.parse(input);\r\n return is(input) ? input : null;\r\n};\r\nexports.parseMember = parseMember;"}},"/docs/json/stringify":{"title":"Stringify","data":{"stringify-functions#stringify() functions":"export namespace json {\r\n export function stringify(input: T): string;\r\n export function isStringify(input: T | unknown): string | null;\r\n export function assertStringify(input: T | unknown): string;\r\n export function validateStringify(input: T | unknown): IValidation;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nYou can boost up JSON serialization speed just by calling typia.json.stringify() function. Also, you even can ensure type safety of JSON serialization by calling other functions like typia.json.isStringify() and typia.json.assertStringify() functions.As typia.json.stringify() function writes dedicated JSON serialization code only for the target type T, its performance is much faster than native JSON.stringify() function. However, because of the dedicated optimal JSON serialization code, when wrong typed data comes, unexpected error be occured.Instead, typia supports type safe JSON serialization functions like typia.json.isStringify(). The typia.json.isStringify() is a combination function of typia.is() and typia.json.stringify() function. It checks whether the input value is valid for the target type T or not first, and operate JSON serialization later. If the input value is not matched with the type T, it returns null value.\ntypia.json.isStringify(): typia.is() + typia.json.stringify()\ntypia.json.assertStringify(): typia.assert() + typia.json.stringify()\ntypia.json.validateStringify(): typia.validate() + typia.json.stringify()\nAOT compliation\ntypia.json.isStringify() and other similar functions are still much faster than native JSON.stringify() function, even though they include type checking process. This is the power of AOT compilation, writing optimal dedicated code by analyzing TypeScript type, in the compilation level.\nimport typia, { tags } from \"typia\";\r\n\r\nconst department: IDepartment = typia.random();\r\nconst json: string | null = typia.json.isStringify(department);\r\n\r\nconsole.log(json); // not null, but string\r\n\r\ninterface IDepartment {\r\n id: string & tags.Format<\"uuid\">;\r\n name: string & tags.MinLength<3>;\r\n limit: number & tags.Type<\"int32\">;\r\n clerks: IClerk[];\r\n}\r\ninterface IClerk {\r\n name: string;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n authority: number;\r\n joined_at: string & tags.Format<\"date\">;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst department = ((generator) => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: 'Format<\"uuid\">',\r\n kind: \"format\",\r\n value: \"uuid\",\r\n },\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n name:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"MinLength<3>\",\r\n kind: \"minLength\",\r\n value: 3,\r\n },\r\n ]) ??\r\n (generator?.string ?? $generator.string)(\r\n (generator?.integer ?? $generator.integer)(3, 25),\r\n ),\r\n limit:\r\n (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: 'Type<\"int32\">',\r\n kind: \"type\",\r\n value: \"int32\",\r\n },\r\n ]) ?? (generator?.integer ?? $generator.integer)(0, 100),\r\n clerks: (generator?.array ?? $generator.array)(() =>\r\n $ro1(_recursive, _recursive ? 1 + _depth : _depth),\r\n ),\r\n });\r\n const $ro1 = (_recursive = false, _depth = 0) => ({\r\n name:\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ??\r\n (generator?.string ?? $generator.string)(),\r\n age:\r\n (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: 'Type<\"uint32\">',\r\n kind: \"type\",\r\n value: \"uint32\",\r\n },\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19,\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100,\r\n },\r\n ]) ?? (generator?.integer ?? $generator.integer)(19, 100),\r\n authority:\r\n (generator?.customs ?? $generator.customs)?.number?.([]) ??\r\n (generator?.number ?? $generator.number)(0, 100),\r\n joined_at:\r\n (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: 'Format<\"date\">',\r\n kind: \"format\",\r\n value: \"date\",\r\n },\r\n ]) ?? (generator?.date ?? $generator.date)(),\r\n });\r\n return $ro0();\r\n})();\r\nconst json = ((input) => {\r\n const is = (input) => {\r\n const $io0 = (input) =>\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.name &&\r\n 3 <= input.name.length &&\r\n \"number\" === typeof input.limit &&\r\n Math.floor(input.limit) === input.limit &&\r\n -2147483648 <= input.limit &&\r\n input.limit <= 2147483647 &&\r\n Array.isArray(input.clerks) &&\r\n input.clerks.every(\r\n (elem) =>\r\n \"object\" === typeof elem && null !== elem && $io1(elem),\r\n );\r\n const $io1 = (input) =>\r\n \"string\" === typeof input.name &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n \"number\" === typeof input.authority &&\r\n !Number.isNaN(input.authority) &&\r\n \"string\" === typeof input.joined_at &&\r\n /^(d{4})-(d{2})-(d{2})$/.test(input.joined_at);\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n const stringify = (input) => {\r\n const $io1 = (input) =>\r\n \"string\" === typeof input.name &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n \"number\" === typeof input.authority &&\r\n \"string\" === typeof input.joined_at &&\r\n /^(d{4})-(d{2})-(d{2})$/.test(input.joined_at);\r\n const $string = typia_1.default.json.isStringify.string;\r\n const $so0 = (input) =>\r\n `{\"id\":${$string(input.id)},\"name\":${$string(input.name)},\"limit\":${\r\n input.limit\r\n },\"clerks\":${`[${input.clerks\r\n .map(\r\n (elem) =>\r\n `{\"name\":${$string(elem.name)},\"age\":${\r\n elem.age\r\n },\"authority\":${elem.authority},\"joined_at\":${$string(\r\n elem.joined_at,\r\n )}}`,\r\n )\r\n .join(\",\")}]`}}`;\r\n return $so0(input);\r\n };\r\n return is(input) ? stringify(input) : null;\r\n})(department);\r\nconsole.log(json); // not null, but string","reusable-functions#Reusable functions":"export namespace json {\r\n export function createStringify: (input: T) => string;\r\n export function createIsStringify: (\r\n input: T | unknown\r\n ) => string | null;\r\n export function createAssertStringify: (\r\n input: T | unknown\r\n ) => string;\r\n export function createValidateStringify: (\r\n input: T | unknown\r\n ) => IValidation;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nReusable typia.json.stringify() function generators.If you repeat to call typia.json.stringify() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.json.createStringify() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const assertDepartment = typia.json.createAssertStringify();\r\n\r\ninterface IDepartment {\r\n id: string & tags.Format<\"uuid\">;\r\n name: string & tags.MinLength<3>;\r\n limit: number & tags.Type<\"int32\">;\r\n clerks: IClerk[];\r\n}\r\ninterface IClerk {\r\n name: string;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n authority: number;\r\n joined_at: string & tags.Format<\"date\">;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.assertDepartment = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst assertDepartment = (input) => {\r\n const assert = (input) => {\r\n const __is = (input) => {\r\n const $io0 = (input) =>\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.name &&\r\n 3 <= input.name.length &&\r\n \"number\" === typeof input.limit &&\r\n Math.floor(input.limit) === input.limit &&\r\n -2147483648 <= input.limit &&\r\n input.limit <= 2147483647 &&\r\n Array.isArray(input.clerks) &&\r\n input.clerks.every(\r\n (elem) =>\r\n \"object\" === typeof elem && null !== elem && $io1(elem),\r\n );\r\n const $io1 = (input) =>\r\n \"string\" === typeof input.name &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n \"number\" === typeof input.authority &&\r\n !Number.isNaN(input.authority) &&\r\n \"string\" === typeof input.joined_at &&\r\n /^(d{4})-(d{2})-(d{2})$/.test(input.joined_at);\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.json.createAssertStringify.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.name &&\r\n (3 <= input.name.length ||\r\n $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string & MinLength<3>\",\r\n value: input.name,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"(string & MinLength<3>)\",\r\n value: input.name,\r\n })) &&\r\n ((\"number\" === typeof input.limit &&\r\n ((Math.floor(input.limit) === input.limit &&\r\n -2147483648 <= input.limit &&\r\n input.limit <= 2147483647) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: 'number & Type<\"int32\">',\r\n value: input.limit,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".limit\",\r\n expected: '(number & Type<\"int32\">)',\r\n value: input.limit,\r\n })) &&\r\n (((Array.isArray(input.clerks) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks,\r\n })) &&\r\n input.clerks.every(\r\n (elem, _index1) =>\r\n (((\"object\" === typeof elem && null !== elem) ||\r\n $guard(_exceptionable, {\r\n path:\r\n _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem,\r\n })) &&\r\n $ao1(\r\n elem,\r\n _path + \".clerks[\" + _index1 + \"]\",\r\n true && _exceptionable,\r\n )) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".clerks[\" + _index1 + \"]\",\r\n expected: \"IClerk\",\r\n value: elem,\r\n }),\r\n )) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".clerks\",\r\n expected: \"Array\",\r\n value: input.clerks,\r\n }));\r\n const $ao1 = (input, _path, _exceptionable = true) =>\r\n (\"string\" === typeof input.name ||\r\n $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string\",\r\n value: input.name,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n })) &&\r\n ((\"number\" === typeof input.authority &&\r\n !Number.isNaN(input.authority)) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".authority\",\r\n expected: \"number\",\r\n value: input.authority,\r\n })) &&\r\n ((\"string\" === typeof input.joined_at &&\r\n (/^(d{4})-(d{2})-(d{2})$/.test(input.joined_at) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: 'string & Format<\"date\">',\r\n value: input.joined_at,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".joined_at\",\r\n expected: '(string & Format<\"date\">)',\r\n value: input.joined_at,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IDepartment\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n };\r\n const stringify = (input) => {\r\n const $io1 = (input) =>\r\n \"string\" === typeof input.name &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n \"number\" === typeof input.authority &&\r\n \"string\" === typeof input.joined_at &&\r\n /^(d{4})-(d{2})-(d{2})$/.test(input.joined_at);\r\n const $string = typia_1.default.json.createAssertStringify.string;\r\n const $so0 = (input) =>\r\n `{\"id\":${$string(input.id)},\"name\":${$string(input.name)},\"limit\":${\r\n input.limit\r\n },\"clerks\":${`[${input.clerks\r\n .map(\r\n (elem) =>\r\n `{\"name\":${$string(elem.name)},\"age\":${\r\n elem.age\r\n },\"authority\":${elem.authority},\"joined_at\":${$string(\r\n elem.joined_at,\r\n )}}`,\r\n )\r\n .join(\",\")}]`}}`;\r\n return $so0(input);\r\n };\r\n return stringify(assert(input));\r\n};\r\nexports.assertDepartment = assertDepartment;","performance#Performance":"Comparing JSON serialization speed with others, it is maximum 200x faster than class-transformer.For reference, class-transformer is the most famous library used in NestJS with class-validator. Also, fast-json-stringify is another famous one used in fastify. However, whether they are fast or slow, both of them require extra schema definition, that is different with TypeScript type. If you see the code below without experience of them, you may get shocked: how complicate and inefficient they are:\nfast-json-stringify requires JSON schema definition.\nclass-validator requires DTO class with decorator function calls.\nMeasured on Intel i5-1135g7, Surface Pro 8","server-performance#Server Performance":"Someone may ask:\nJSON serialization speed affects on the server performance?I think that the JSON serialization is just a tiny thing in the server side, isn't it?\nMy answer is, \"Yes, it affects on the server performance\".Most operations in NodeJS server are asynchronously executed in background thread, what are called \"event based non-blocking I/O model\". However, JSON serialization is a synchronous operation running on the main thread. Therefore, if the JSON serialization speed is slow, it makes the entire server program slow.I'll show you the benchmark result that, how JSON serizliation speed affects on the server performance.\nMeasured on Intel i5-1135g7, Surface Pro 8"}},"/docs/protobuf/decode":{"title":"Decode","data":{"decode-functions#decode() functions":"export namespace protobuf {\r\n export function decode(buffer: Uint8Array): Resolved;\r\n export function isDecode(buffer: Uint8Array): Resolved | null;\r\n export function assertDecode(buffer: Uint8Array): Resolved;\r\n export function validateDecode(\r\n buffer: Uint8Array\r\n ): IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nProtocol Buffer Decoder.You can easily convert a Protocol Buffer's binary data to a JavaScript object, without any extra Protocol Buffer Message Schema definition. typia.protobuf.decode() function analyzes your type T, and generates a Protocol Buffer Message Schema internally.And then, it converts the binary data to a JavaScript object.By the way, as Protocol Buffer handles binary data directly, there's no way when input binary data was not encoded from the T typed value. In that case, unexpected behavior or internal error would be occured. Therefore, I recommend you to encode binary data of Protocol Buffer from type safe encode functions like below, Use typia.protobuf.encode() function only when you can trust it.\ntypia.protobuf.isEncode()\ntypia.protobuf.assertEncode()\ntypia.protobuf.validateEncode()\nFor reference, typia provides type safe decorators like below, but they are just for additional type validation like number & Minimum<7> or string & Format<\"uuid\"> cases, that are represented by Special Tags. Thus, I repeat that, you've to ensure type safety when using decoder function.\ntypia.protobuf.isDecode(): typia.is() + typia.protobuf.decode()\ntypia.protobuf.assertDecode(): typia.assert() + typia.protobuf.decode()\ntypia.protobuf.validateDecode(): typia.validate() + typia.protobuf.decode()\nAOT compliation\ntypia.protobuf.decode() and other similar functions are still much faster than any other competitive libraries, even though they include type checking process. This is the power of AOT compilation, writing optimal dedicated code by analyzing TypeScript type, in the compilation level.\nimport typia, { tags } from \"typia\";\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\r\n\r\nconst data: ICustomer = typia.random();\r\nconst encoded: Uint8Array = typia.protobuf.encode(data);\r\ntypia.protobuf.decode(encoded);\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst data = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $pick = typia_1.default.random.pick;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"int32\\\">\",\r\n kind: \"type\",\r\n value: \"int32\",\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(0, 100),\r\n email: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"email\\\">\",\r\n kind: \"format\",\r\n value: \"email\",\r\n }\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n pet: $pick([\r\n () => null,\r\n () => $ro1(_recursive, _recursive ? 1 + _depth : _depth),\r\n () => $ro2(_recursive, _recursive ? 1 + _depth : _depth)\r\n ])(),\r\n memo: $pick([\r\n () => null,\r\n () => new Map((generator?.array ?? $generator.array)(() => [\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)()\r\n ]))\r\n ])(),\r\n logins: (generator?.array ?? $generator.array)(() => $ro3(_recursive, _recursive ? 1 + _depth : _depth))\r\n });\r\n const $ro1 = (_recursive = false, _depth = 0) => ({\r\n type: \"cat\",\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n ribbon: (generator?.boolean ?? $generator.boolean)()\r\n });\r\n const $ro2 = (_recursive = false, _depth = 0) => ({\r\n type: \"dog\",\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n hunt: (generator?.boolean ?? $generator.boolean)()\r\n });\r\n const $ro3 = (_recursive = false, _depth = 0) => ({\r\n success: (generator?.boolean ?? $generator.boolean)(),\r\n href: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"url\\\">\",\r\n kind: \"format\",\r\n value: \"url\",\r\n }\r\n ]) ?? (generator?.url ?? $generator.url)(),\r\n referrer: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"url\\\">\",\r\n kind: \"format\",\r\n value: \"url\",\r\n }\r\n ]) ?? (generator?.url ?? $generator.url)(),\r\n ip: $pick([\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"ipv4\\\">\",\r\n kind: \"format\",\r\n value: \"ipv4\",\r\n }\r\n ]) ?? (generator?.ipv4 ?? $generator.ipv4)(),\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"ipv6\\\">\",\r\n kind: \"format\",\r\n value: \"ipv6\",\r\n }\r\n ]) ?? (generator?.ipv6 ?? $generator.ipv6)()\r\n ])(),\r\n time: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"date-time\\\">\",\r\n kind: \"format\",\r\n value: \"date-time\",\r\n }\r\n ]) ?? (generator?.datetime ?? $generator.datetime)()\r\n });\r\n return $ro0();\r\n})();\r\nconst encoded = (input => {\r\n const $throws = typia_1.default.protobuf.encode.throws;\r\n const $Sizer = typia_1.default.protobuf.encode.Sizer;\r\n const $Writer = typia_1.default.protobuf.encode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"id\";\r\n writer.uint32(8);\r\n writer.int32(input.id);\r\n // property \"email\";\r\n writer.uint32(18);\r\n writer.string(input.email);\r\n // property \"name\";\r\n writer.uint32(26);\r\n writer.string(input.name);\r\n // property \"pet\";\r\n if (null !== input.pet) {\r\n if (\"cat\" === input.pet.type)\r\n return (() => {\r\n // 4 -> ICat;\r\n writer.uint32(34);\r\n writer.fork();\r\n $peo1(input.pet);\r\n writer.ldelim();\r\n })();\r\n else if (\"dog\" === input.pet.type)\r\n return (() => {\r\n // 5 -> IDog;\r\n writer.uint32(42);\r\n writer.fork();\r\n $peo2(input.pet);\r\n writer.ldelim();\r\n })();\r\n else\r\n $throws({\r\n expected: \"(ICat | IDog)\",\r\n value: input.pet\r\n });\r\n }\r\n // property \"memo\";\r\n if (null !== input.memo) {\r\n for (const [key, value] of input.memo) {\r\n writer.uint32(50);\r\n writer.fork();\r\n writer.uint32(10);\r\n writer.string(key);\r\n writer.uint32(18);\r\n writer.string(value);\r\n writer.ldelim();\r\n }\r\n }\r\n // property \"logins\";\r\n if (0 !== input.logins.length) {\r\n for (const elem of input.logins) {\r\n // 7 -> ICustomerLogin;\r\n writer.uint32(58);\r\n writer.fork();\r\n $peo3(elem);\r\n writer.ldelim();\r\n }\r\n }\r\n };\r\n const $peo1 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"ribbon\";\r\n writer.uint32(24);\r\n writer.bool(input.ribbon);\r\n };\r\n const $peo2 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"hunt\";\r\n writer.uint32(24);\r\n writer.bool(input.hunt);\r\n };\r\n const $peo3 = input => {\r\n // property \"success\";\r\n writer.uint32(8);\r\n writer.bool(input.success);\r\n // property \"href\";\r\n writer.uint32(18);\r\n writer.string(input.href);\r\n // property \"referrer\";\r\n writer.uint32(26);\r\n writer.string(input.referrer);\r\n // property \"ip\";\r\n writer.uint32(34);\r\n writer.string(input.ip);\r\n // property \"time\";\r\n writer.uint32(42);\r\n writer.string(input.time);\r\n };\r\n const $io1 = input => \"cat\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.ribbon;\r\n const $io2 = input => \"dog\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.hunt;\r\n const $io3 = input => \"boolean\" === typeof input.success && (\"string\" === typeof input.href && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.referrer && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.ip && (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(input.ip) || /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test(input.ip))) && (\"string\" === typeof input.time && !isNaN(new Date(input.time).getTime()));\r\n const $iu0 = input => (() => {\r\n if (\"cat\" === input.type)\r\n return $io1(input);\r\n else if (\"dog\" === input.type)\r\n return $io2(input);\r\n else\r\n return false;\r\n })();\r\n //ICustomer;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n})(data);\r\n(input => {\r\n const $Reader = typia_1.default.protobuf.decode.Reader;\r\n const $pdo0 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n id: undefined,\r\n email: \"\",\r\n name: \"\",\r\n pet: null,\r\n memo: null,\r\n logins: []\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // int32;\r\n output.id = reader.int32();\r\n break;\r\n case 2:\r\n // string;\r\n output.email = reader.string();\r\n break;\r\n case 3:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 4:\r\n // ICat;\r\n output.pet = $pdo1(reader, reader.uint32());\r\n break;\r\n case 5:\r\n // IDog;\r\n output.pet = $pdo2(reader, reader.uint32());\r\n break;\r\n case 6:\r\n // type: Map;\r\n (() => {\r\n output.memo ??= new Map();\r\n const piece = reader.uint32() + reader.index();\r\n const entry = {\r\n key: \"\",\r\n value: \"\"\r\n };\r\n while (reader.index() < piece) {\r\n const kind = reader.uint32();\r\n switch (kind >>> 3) {\r\n case 1:\r\n // string;\r\n entry.key = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n entry.value = reader.string();\r\n break;\r\n default:\r\n reader.skipType(kind & 7);\r\n break;\r\n }\r\n }\r\n output.memo.set(entry.key, entry.value);\r\n })();\r\n break;\r\n case 7:\r\n // type: Array;\r\n output.logins.push($pdo3(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo1 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n type: undefined,\r\n name: \"\",\r\n ribbon: undefined\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // string;\r\n output.type = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 3:\r\n // bool;\r\n output.ribbon = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo2 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n type: undefined,\r\n name: \"\",\r\n hunt: undefined\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // string;\r\n output.type = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 3:\r\n // bool;\r\n output.hunt = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo3 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n success: undefined,\r\n href: \"\",\r\n referrer: \"\",\r\n ip: \"\",\r\n time: \"\"\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // bool;\r\n output.success = reader.bool();\r\n break;\r\n case 2:\r\n // string;\r\n output.href = reader.string();\r\n break;\r\n case 3:\r\n // string;\r\n output.referrer = reader.string();\r\n break;\r\n case 4:\r\n // string;\r\n output.ip = reader.string();\r\n break;\r\n case 5:\r\n // string;\r\n output.time = reader.string();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const reader = new $Reader(input);\r\n return $pdo0(reader);\r\n})(encoded);","reusable-functions#Reusable functions":"export namespace protobuf {\r\n export function createDecode(): (buffer: Uint8Array) => Resolved;\r\n export function createIsDecode: (buffer: Uint8Array) => Resolved | null;\r\n export function createAssertDecode(): (buffer: Uint8Array) => Resolved;\r\n export function createValidateDecode(): (\r\n buffer: Uint8Array\r\n ) => IValidation>;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nReusable typia.protobuf.decode() function generators.If you repeat to call typia.protobuf.decode() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.protobuf.createDecode() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const encode = typia.protobuf.createDecode();\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.encode = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst encode = input => {\r\n const $Reader = typia_1.default.protobuf.createDecode.Reader;\r\n const $pdo0 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n id: undefined,\r\n email: \"\",\r\n name: \"\",\r\n pet: null,\r\n memo: null,\r\n logins: []\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // int32;\r\n output.id = reader.int32();\r\n break;\r\n case 2:\r\n // string;\r\n output.email = reader.string();\r\n break;\r\n case 3:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 4:\r\n // ICat;\r\n output.pet = $pdo1(reader, reader.uint32());\r\n break;\r\n case 5:\r\n // IDog;\r\n output.pet = $pdo2(reader, reader.uint32());\r\n break;\r\n case 6:\r\n // type: Map;\r\n (() => {\r\n output.memo ??= new Map();\r\n const piece = reader.uint32() + reader.index();\r\n const entry = {\r\n key: \"\",\r\n value: \"\"\r\n };\r\n while (reader.index() < piece) {\r\n const kind = reader.uint32();\r\n switch (kind >>> 3) {\r\n case 1:\r\n // string;\r\n entry.key = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n entry.value = reader.string();\r\n break;\r\n default:\r\n reader.skipType(kind & 7);\r\n break;\r\n }\r\n }\r\n output.memo.set(entry.key, entry.value);\r\n })();\r\n break;\r\n case 7:\r\n // type: Array;\r\n output.logins.push($pdo3(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo1 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n type: undefined,\r\n name: \"\",\r\n ribbon: undefined\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // string;\r\n output.type = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 3:\r\n // bool;\r\n output.ribbon = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo2 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n type: undefined,\r\n name: \"\",\r\n hunt: undefined\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // string;\r\n output.type = reader.string();\r\n break;\r\n case 2:\r\n // string;\r\n output.name = reader.string();\r\n break;\r\n case 3:\r\n // bool;\r\n output.hunt = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const $pdo3 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n success: undefined,\r\n href: \"\",\r\n referrer: \"\",\r\n ip: \"\",\r\n time: \"\"\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // bool;\r\n output.success = reader.bool();\r\n break;\r\n case 2:\r\n // string;\r\n output.href = reader.string();\r\n break;\r\n case 3:\r\n // string;\r\n output.referrer = reader.string();\r\n break;\r\n case 4:\r\n // string;\r\n output.ip = reader.string();\r\n break;\r\n case 5:\r\n // string;\r\n output.time = reader.string();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const reader = new $Reader(input);\r\n return $pdo0(reader);\r\n};\r\nexports.encode = encode;","references#References":"Protocol Buffer supports special numeric types like int32 or uint64 that are not supported in TypeScript. Also, types of Protocol Buffer cannot fully meet TypeScript type specs either, as expression power of TypeScript types are much stronger than Protocol Buffer.To know how to define special numeric types like uint64, and to understand which TypeScript types are not supported in Protocol Buffer specs, it would better to read below documents. I recommend you to read them before using typia.protobuf.decode() related functions.\nTypia Guide Documents > Protocol Buffer > Message Schema\nmessage() function\nType Tags\nComment Tags\nRestrictions"}},"/docs/pure":{"title":"Pure TypeScript","data":{"outline#Outline":"typia.assert(article);\ntypia needs only one line with pure TypeScript type.You know what? Every other validator libraries need extra schema definition, that is different with pure TypeScript type. For an example, class-validator is the most famous validator due to used in NestJS. However, NestJS and class-validator force you to define triple duplicated DTO schema.\nTypeScript Type\nclass-validator decorators\n@nestjs/swagger decorators\nAnother famous validator library ajv requires JSON schema definition. Move to the #Demonstration, and click the ajv (JSON Schema) tab, then you may understand how it terrible. It requires hundreds of lines of JSON schema definition even just for a simple DTO.Those duplicated schema definitions are not only annoying, but also error-prone. If you take any mistake on the extra schema definition, such mistake can't be detected by TypeScript compiler. It will be detected only at runtime, therefore become a critical runtime error. Another words, it is not type safe.Besides, typia only needs pure TypeScript type. You don't need to define any extra schema like class-validator or ajv. Just define pure TypeScript type only (especially recommend to use interface type), then typia will do all the rest.","demonstration#Demonstration":"If you're confusing how typia is different with others, just see example codes below.At first, look at the first (class-validator) tab, and find the BbsArticle.files property, enhanced by blue coloured blocks. Looking at the files property, how do you feel? Just defining an array object type, you've to call 7 decorator functions. If you take any mistake when using the decorator like omitting isArray property, it would be a critical runtime erorr.Besides, typia needs only one line. Click the third (typia) tab, and find the IAttachmentFile.files property. Only one line being used, and they are even not class, but just interface types. Comparing it to the first and second tabs, how do you feel? Isn't it more simple and readable?This is the power of typia, with pure TypeScript type.\nimport { ApiProperty } from \"@nestjs/swagger\";\r\nimport { ArrayNotEmpty, IsArray, IsObject, IsOptional, IsString, Match, MaxLength, Type, ValidateNested } from \"class-validator\";\r\n\r\nexport class BbsArticle {\r\n @ApiProperty({\r\n format: \"uuid\",\r\n })\r\n @IsString()\r\n id!: string;\r\n\r\n // DUPLICATED SCHEMA DEFINITION\r\n // - duplicated function call + property type\r\n // - have to specify `isArray` and `nullable` props by yourself\r\n @ApiProperty({\r\n type: () => AttachmentFile,\r\n nullable: true,\r\n isArray: true,\r\n minItems: 1,\r\n description: \"List of attached files.\",\r\n })\r\n @Type(() => AttachmentFile)\r\n @IsArray()\r\n @ArrayNotEmpty()\r\n @IsOptional()\r\n @IsObject({ each: true })\r\n @ValidateNested({ each: true })\r\n files!: AttachmentFile[] | null;\r\n\r\n @ApiProperty({\r\n type: \"string\",\r\n nullable: true,\r\n minLength: 5,\r\n maxLength: 100,\r\n description: \"Title of the article.\",\r\n })\r\n @IsOptional()\r\n @IsString()\r\n title!: string | null;\r\n\r\n @ApiProperty({\r\n description: \"Main content body of the article.\"\r\n })\r\n @IsString()\r\n body!: string;\r\n\r\n @ApiProperty({\r\n format: \"date-time\",\r\n description: \"Creation time of article\",\r\n })\r\n @IsString()\r\n created_at!: string;\r\n}\r\n\r\nexport class AttachmentFile {\r\n @ApiProperty({\r\n type: \"string\",\r\n nullable: true,\r\n maxLength: 255,\r\n pattern: \"^[a-zA-Z0-9-_]+$\",\r\n description: \"File name.\",\r\n })\r\n @Matches(/^[a-z0-9]+$/)\r\n @MaxLength(255)\r\n @IsOptional()\r\n @IsString()\r\n name!: string | null;\r\n\r\n @ApiProperty({\r\n type: \"string\",\r\n nullable: true,\r\n maxLength: 255,\r\n pattern: \"^[a-zA-Z0-9-_]+$\",\r\n description: \"File extension.\",\r\n })\r\n @Matches(/^[a-z0-9]+$/)\r\n @MaxLength(8)\r\n @IsOptional()\r\n @IsString()\r\n extension!: string | null;\r\n\r\n @ApiProperty({\r\n format: \"url\",\r\n description: \"URL of the file.\",\r\n })\r\n @IsString()\r\n url!: string;\r\n}\n{\r\n \"schemas\": [\r\n {\r\n \"$ref\": \"components#/schemas/IBbsArticle\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {\r\n \"IBbsArticle\": {\r\n \"$id\": \"components#/schemas/IBbsArticle\",\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"nullable\": false,\r\n \"description\": \"Primary Key.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"format\",\r\n \"value\": \"uuid\"\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"format\",\r\n \"text\": [\r\n {\r\n \"text\": \"uuid\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"format\": \"uuid\"\r\n },\r\n \"files\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"components#/schemas/IAttachmentFile\",\r\n \"description\": \"List of attached files.\",\r\n \"minItems\": 1,\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n \"nullable\": true,\r\n \"description\": \"List of attached files.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"nullable\": true,\r\n \"description\": \"Title of the article.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"minLength\",\r\n \"value\": 5\r\n },\r\n {\r\n \"kind\": \"maxLength\",\r\n \"value\": 100\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"minLength\",\r\n \"text\": [\r\n {\r\n \"text\": \"5\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"maxLength\",\r\n \"text\": [\r\n {\r\n \"text\": \"100\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"minLength\": 5,\r\n \"maxLength\": 100\r\n },\r\n \"body\": {\r\n \"type\": \"string\",\r\n \"nullable\": false,\r\n \"description\": \"Main content body of the article.\",\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false\r\n },\r\n \"created_at\": {\r\n \"type\": \"string\",\r\n \"nullable\": false,\r\n \"description\": \"Creation time of article.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"format\",\r\n \"value\": \"datetime\"\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"format\",\r\n \"text\": [\r\n {\r\n \"text\": \"date-time\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"format\": \"date-time\"\r\n }\r\n },\r\n \"nullable\": false,\r\n \"required\": [\r\n \"id\",\r\n \"files\",\r\n \"title\",\r\n \"body\",\r\n \"created_at\"\r\n ],\r\n \"x-typia-jsDocTags\": []\r\n },\r\n \"IAttachmentFile\": {\r\n \"$id\": \"components#/schemas/IAttachmentFile\",\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"name\": {\r\n \"type\": \"string\",\r\n \"nullable\": true,\r\n \"description\": \"File name.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"pattern\",\r\n \"value\": \"^[a-z0-9]+$\"\r\n },\r\n {\r\n \"kind\": \"maxLength\",\r\n \"value\": 255\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"pattern\",\r\n \"text\": [\r\n {\r\n \"text\": \"^[a-z0-9]+$\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"maxLength\",\r\n \"text\": [\r\n {\r\n \"text\": \"255\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"pattern\": \"^[a-z0-9]+$\",\r\n \"maxLength\": 255\r\n },\r\n \"extension\": {\r\n \"type\": \"string\",\r\n \"nullable\": true,\r\n \"description\": \"File extension.\",\r\n \"x-typia-metaTags\": [\r\n {\r\n \"kind\": \"pattern\",\r\n \"value\": \"^[a-z0-9]+$\"\r\n },\r\n {\r\n \"kind\": \"maxLength\",\r\n \"value\": 8\r\n }\r\n ],\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"pattern\",\r\n \"text\": [\r\n {\r\n \"text\": \"^[a-z0-9]+$\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"maxLength\",\r\n \"text\": [\r\n {\r\n \"text\": \"8\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"pattern\": \"^[a-z0-9]+$\",\r\n \"maxLength\": 8\r\n },\r\n \"url\": {\r\n \"type\": \"string\",\r\n \"nullable\": false,\r\n \"description\": \"URL of the file.\",\r\n \"x-typia-jsDocTags\": [\r\n {\r\n \"name\": \"format\",\r\n \"text\": [\r\n {\r\n \"text\": \"uri\",\r\n \"kind\": \"text\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"x-typia-required\": true,\r\n \"x-typia-optional\": false,\r\n \"format\": \"uri\"\r\n }\r\n },\r\n \"nullable\": false,\r\n \"required\": [\r\n \"name\",\r\n \"extension\",\r\n \"url\"\r\n ],\r\n \"x-typia-jsDocTags\": []\r\n }\r\n }\r\n },\r\n \"purpose\": \"ajv\",\r\n \"prefix\": \"components#/schemas\"\r\n}\nimport { tags } from \"typia\";\r\n\r\nexport interface IBbsArticle {\r\n /**\r\n * Primary Key.\r\n */\r\n id: string & tags.Format<\"uuid\">;\r\n\r\n /**\r\n * List of attached files.\r\n */\r\n files: null | (IAttachmentFile[] & tags.MinItems<1>);\r\n\r\n /**\r\n * Title of the article.\r\n */\r\n title: null | (string & tags.MinLength<5> & tags.MaxLength<100>);\r\n\r\n /**\r\n * Main content body of the article.\r\n */\r\n body: string;\r\n\r\n /**\r\n * Creation time of article.\r\n */\r\n created_at: string & tags.Format<\"datetime\">;\r\n}\r\n\r\nexport interface IAttachmentFile {\r\n /**\r\n * File name.\r\n */\r\n name: \r\n | null \r\n | (string & tags.Pattern<\"^[a-z0-9]+$\"> & tags.MaxLength<255>);\r\n\r\n /**\r\n * File extension.\r\n */\r\n extension: \r\n | null \r\n | (string & tags.Pattern<\"^[a-z0-9]+$\"> & tags.MaxLength<8>);\r\n\r\n /**\r\n * URL of the file.\r\n */\r\n url: string & tags.Format<\"uri\">;\r\n}","aot-compilation#AOT Compilation":"Someone may be suspicious of the phrase \"Pure TypeScript Type\".\n\"As you know, TypeScript types do not have any tangible instance when compiled to JS.However, with only these fictitious TypeScript types, how can typia validates types at runtime? How typia builds much faster JSON serializer only with these types? Are these things really possible without extra schema definition like class-validator or ajv?\"\nMy answer is: \"Yes, it is possible due to typia analyzes your server code, and performs AOT compilation\".Such compile time optimization is called AOT (Ahead of Time) compilation. And this is the secret why typia can do everything with only pure TypeScript type. Read below example codes, and just look how JavaScript file being compiled. Then you may understand why typia is much easier, and futhermore much faster.\nRuntime validator is 20,000x faster than class-validator\nJSON serialization is 200x faster than class-transformer\nexport interface IBbsArticle {\r\n /**\r\n * Primary Key.\r\n * \r\n * @format uuid\r\n */\r\n id: string;\r\n\r\n /**\r\n * List of attached files.\r\n * \r\n * @minItems 1\r\n */\r\n files: IAttachmentFile[] | null;\r\n\r\n /**\r\n * Title of the article.\r\n * \r\n * @minLength 5\r\n * @maxLength 100\r\n */\r\n title: string | null;\r\n\r\n /**\r\n * Main content body of the article.\r\n */\r\n body: string;\r\n\r\n /**\r\n * Creation time of article.\r\n * \r\n * @format date-time\r\n */\r\n created_at: string;\r\n}\r\n\r\nexport interface IAttachmentFile {\r\n /**\r\n * File name.\r\n * \r\n * @pattern ^[a-z0-9]+$\r\n * @maxLength 255\r\n */\r\n name: string | null;\r\n\r\n /**\r\n * File extension.\r\n * \r\n * @pattern ^[a-z0-9]+$\r\n * @maxLength 8\r\n */\r\n extension: string | null;\r\n\r\n /**\r\n * URL of the file.\r\n * \r\n * @format uri\r\n */\r\n url: string;\r\n}\nimport typia from \"typia\";\r\n\r\nimport { IBbsArticle } from \"./IBbsArticle\";\r\n\r\nexport const assertArticle = typia.createAssert();\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.assertArticle = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst assertArticle = input => {\r\n const $guard = typia_1.default.createAssert.guard;\r\n const $is_uuid = typia_1.default.createAssert.is_uuid;\r\n const $is_datetime = typia_1.default.createAssert.is_datetime;\r\n const __is = input => {\r\n const $is_uuid = typia_1.default.createAssert.is_uuid;\r\n const $is_datetime = typia_1.default.createAssert.is_datetime;\r\n const $io0 = input => \"string\" === typeof input.id && $is_uuid(input.id) && (null === input.files || Array.isArray(input.files) && 1 <= input.files.length && input.files.every(elem => \"object\" === typeof elem && null !== elem && $io1(elem))) && (null === input.title || \"string\" === typeof input.title && 5 <= input.title.length && 100 >= input.title.length) && \"string\" === typeof input.body && (\"string\" === typeof input.created_at && $is_datetime(input.created_at));\r\n const $io1 = input => (null === input.name || \"string\" === typeof input.name && RegExp(/^[a-z0-9]+$/).test(input.name) && 255 >= input.name.length) && (null === input.extension || \"string\" === typeof input.extension && RegExp(/^[a-z0-9]+$/).test(input.extension) && 8 >= input.extension.length) && \"string\" === typeof input.url;\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $ao0 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.id && ($is_uuid(input.id) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string (@format uuid)\",\r\n value: input.id\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: \"string\",\r\n value: input.id\r\n })) && (null === input.files || (Array.isArray(input.files) && (1 <= input.files.length || $guard(_exceptionable, {\r\n path: _path + \".files\",\r\n expected: \"Array.length (@minItems 1)\",\r\n value: input.files\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".files\",\r\n expected: \"(Array | null)\",\r\n value: input.files\r\n })) && input.files.every((elem, _index1) => (\"object\" === typeof elem && null !== elem || $guard(_exceptionable, {\r\n path: _path + \".files[\" + _index1 + \"]\",\r\n expected: \"IAttachmentFile\",\r\n value: elem\r\n })) && $ao1(elem, _path + \".files[\" + _index1 + \"]\", true && _exceptionable))) && (null === input.title || \"string\" === typeof input.title && (5 <= input.title.length || $guard(_exceptionable, {\r\n path: _path + \".title\",\r\n expected: \"string (@minLength 5)\",\r\n value: input.title\r\n })) && (100 >= input.title.length || $guard(_exceptionable, {\r\n path: _path + \".title\",\r\n expected: \"string (@maxLength 100)\",\r\n value: input.title\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".title\",\r\n expected: \"(null | string)\",\r\n value: input.title\r\n })) && (\"string\" === typeof input.body || $guard(_exceptionable, {\r\n path: _path + \".body\",\r\n expected: \"string\",\r\n value: input.body\r\n })) && (\"string\" === typeof input.created_at && ($is_datetime(input.created_at) || $guard(_exceptionable, {\r\n path: _path + \".created_at\",\r\n expected: \"string (@format datetime)\",\r\n value: input.created_at\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".created_at\",\r\n expected: \"string\",\r\n value: input.created_at\r\n }));\r\n const $ao1 = (input, _path, _exceptionable = true) => (null === input.name || \"string\" === typeof input.name && (RegExp(/^[a-z0-9]+$/).test(input.name) || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string (@pattern ^[a-z0-9]+$)\",\r\n value: input.name\r\n })) && (255 >= input.name.length || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"string (@maxLength 255)\",\r\n value: input.name\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".name\",\r\n expected: \"(null | string)\",\r\n value: input.name\r\n })) && (null === input.extension || \"string\" === typeof input.extension && (RegExp(/^[a-z0-9]+$/).test(input.extension) || $guard(_exceptionable, {\r\n path: _path + \".extension\",\r\n expected: \"string (@pattern ^[a-z0-9]+$)\",\r\n value: input.extension\r\n })) && (8 >= input.extension.length || $guard(_exceptionable, {\r\n path: _path + \".extension\",\r\n expected: \"string (@maxLength 8)\",\r\n value: input.extension\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".extension\",\r\n expected: \"(null | string)\",\r\n value: input.extension\r\n })) && (\"string\" === typeof input.url || $guard(_exceptionable, {\r\n path: _path + \".url\",\r\n expected: \"string\",\r\n value: input.url\r\n }));\r\n return (\"object\" === typeof input && null !== input || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IBbsArticle\",\r\n value: input\r\n })) && $ao0(input, _path + \"\", true);\r\n })(input, \"$input\", true);\r\n return input;\r\n};\r\nexports.assertArticle = assertArticle;\nMeasured on Intel i5-1135g7, Surface Pro 8"}},"/docs/random":{"title":"Random","data":{"random-function#random() function":"export function random(g?: IRandomGenerator): Resolved;\nexport interface IRandomGenerator {\r\n boolean(): boolean;\r\n integer(minimum?: number, maximum?: number): number;\r\n number(minimum?: number, maximum?: number): number;\r\n bigint(minimum?: bigint, maximum?: bigint): bigint;\r\n string(length?: number): string;\r\n array(closure: (index: number) => T, count?: number): T[];\r\n length(): number;\r\n\r\n uuid(): string;\r\n email(): string;\r\n url(): string;\r\n ipv4(): string;\r\n ipv6(): string;\r\n pattern(regex: RegExp): string;\r\n date(minimum?: number, maximum?: number): string;\r\n datetime(minimum?: number, maximum?: number): string;\r\n\r\n customs?: IRandomGenerator.CustomMap;\r\n}\r\nexport namespace IRandomGenerator {\r\n export type CustomMap = {\r\n [Type in keyof Customizable]?: (\r\n tags: ITypeTag[],\r\n ) => Customizable[Type] | undefined;\r\n };\r\n\r\n export interface ITypeTag {\r\n name: string;\r\n kind: string;\r\n value: any;\r\n }\r\n}\nexport interface Customizable {\r\n number: number;\r\n string: string;\r\n bigint: bigint;\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nYou can make every random data just by calling typia.random() function.When you call the typia.random() function, typia will analyze your type T, and writes optimal random generation code for the type T, in the compilation level. This is called AOT (Ahead of Time) compliation, and you may understand what it is just by reading below example code.\nimport typia, { tags } from \"typia\";\r\n\r\nconst member: IMember = typia.random();\r\nconsole.log(member);\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst member = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"uuid\\\">\",\r\n kind: \"format\",\r\n value: \"uuid\",\r\n }\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n email: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"email\\\">\",\r\n kind: \"format\",\r\n value: \"email\",\r\n }\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n age: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"uint32\\\">\",\r\n kind: \"type\",\r\n value: \"uint32\",\r\n },\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19,\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100,\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(19, 100)\r\n });\r\n return $ro0();\r\n})();\r\nconsole.log(member);","reusable-function#Reusable function":"export function createRandom(): (g?: IRandomGenerator) => Resolved;\nexport interface IRandomGenerator {\r\n boolean(): boolean;\r\n integer(minimum?: number, maximum?: number): number;\r\n number(minimum?: number, maximum?: number): number;\r\n bigint(minimum?: bigint, maximum?: bigint): bigint;\r\n string(length?: number): string;\r\n array(closure: (index: number) => T, count?: number): T[];\r\n\r\n uuid(): string;\r\n email(): string;\r\n url(): string;\r\n ipv4(): string;\r\n ipv6(): string;\r\n pattern(regex: RegExp): string;\r\n date(minimum?: number, maximum?: number): string;\r\n datetime(minimum?: number, maximum?: number): string;\r\n\r\n customs?: IRandomGenerator.CustomMap;\r\n}\r\nexport namespace IRandomGenerator {\r\n export type CustomMap = {\r\n [Type in keyof Customizable]?: \r\n (tags: ICommentTag[]) => Customizable[Type] | undefined;\r\n };\r\n\r\n export interface ICommentTag {\r\n name: string;\r\n value?: string;\r\n }\r\n}\nexport interface Customizable {\r\n number: number;\r\n string: string;\r\n bigint: bigint;\r\n}\nReusable typia.random() function generators.If you repeat to call typia.random() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createRandom() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const createRandomMember = typia.createRandom();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.createRandomMember = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst createRandomMember = generator => {\r\n const $generator = typia_1.default.createRandom.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"uuid\\\">\",\r\n kind: \"format\",\r\n value: \"uuid\",\r\n }\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n email: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"email\\\">\",\r\n kind: \"format\",\r\n value: \"email\",\r\n }\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n age: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"uint32\\\">\",\r\n kind: \"type\",\r\n value: \"uint32\",\r\n },\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19,\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100,\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(19, 100)\r\n });\r\n return $ro0();\r\n};\r\nexports.createRandomMember = createRandomMember;\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}","special-tags#Special Tags":"Runtime validators of typia provides additional type checking logic through Type Tags and Comment Tags. typia.random() function also like that. typia.random() function can utilize those tags to specialize the behavior of random data generation.For reference, whether you choose Type Tags or Comment Tags. typia.random(), it is not a matter for typia.random() function. Below two TypeScript codes are generating exactly same JavaScript code. Therefore, you can choose whatever you want considering your preference.\nimport typia, { tags } from \"typia\";\r\n\r\nconst data: TypeTag = typia.random();\r\n\r\nconsole.log(data);\r\n\r\ninterface TypeTag {\r\n type: number & tags.Type<\"int32\">;\r\n number?: number & tags.ExclusiveMinimum<19> & tags.Maximum<100>;\r\n string: string & tags.MinLength<3>;\r\n pattern: string & tags.Pattern<\"^[a-z]+$\">;\r\n format: (string & tags.Format<\"date-time\">) | null;\r\n}\nimport typia from \"typia\";\r\n\r\nconst data: CommentTag = typia.random();\r\n\r\nconsole.log(data);\r\n\r\ninterface CommentTag {\r\n /**\r\n * @type int\r\n */\r\n type: number;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n number?: number;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n string: string;\r\n\r\n /**\r\n * @pattern ^[a-z]+$\r\n */\r\n pattern: string;\r\n\r\n /**\r\n * @format date-time\r\n */\r\n format: string | null;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst data = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $pick = typia_1.default.random.pick;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n type: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"int32\\\">\",\r\n kind: \"type\",\r\n value: \"int32\"\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(0, 100),\r\n number: $pick([\r\n () => undefined,\r\n () => (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"ExclusiveMinimum<19>\",\r\n kind: \"exclusiveMinimum\",\r\n value: 19\r\n },\r\n {\r\n name: \"Maximum<100>\",\r\n kind: \"maximum\",\r\n value: 100\r\n }\r\n ]) ?? (generator?.number ?? $generator.number)(19, 100)\r\n ])(),\r\n string: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"MinLength<3>\",\r\n kind: \"minLength\",\r\n value: 3\r\n }\r\n ]) ?? (generator?.string ?? $generator.string)((generator?.integer ?? $generator.integer)(3, 25)),\r\n pattern: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Pattern<\\\"^[a-z]+$\\\">\",\r\n kind: \"pattern\",\r\n value: \"^[a-z]+$\"\r\n }\r\n ]) ?? (generator?.pattern ?? $generator.pattern)(/^[a-z]+$/),\r\n format: $pick([\r\n () => null,\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"date-time\\\">\",\r\n kind: \"format\",\r\n value: \"date-time\"\r\n }\r\n ]) ?? (generator?.datetime ?? $generator.datetime)()\r\n ])()\r\n });\r\n return $ro0();\r\n})();\r\nconsole.log(data);","customization#Customization":"export function random(g?: IRandomGenerator): Resolved;\r\nexport function createRandom: (g?: IRandomGenerator) => Resolved;\nexport interface IRandomGenerator {\r\n boolean(): boolean;\r\n integer(minimum?: number, maximum?: number): number;\r\n number(minimum?: number, maximum?: number): number;\r\n bigint(minimum?: bigint, maximum?: bigint): bigint;\r\n string(length?: number): string;\r\n array(closure: (index: number) => T, count?: number): T[];\r\n\r\n uuid(): string;\r\n email(): string;\r\n url(): string;\r\n ipv4(): string;\r\n ipv6(): string;\r\n pattern(regex: RegExp): string;\r\n date(minimum?: number, maximum?: number): string;\r\n datetime(minimum?: number, maximum?: number): string;\r\n\r\n customs?: IRandomGenerator.CustomMap;\r\n}\r\nexport namespace IRandomGenerator {\r\n export type CustomMap = {\r\n [Type in keyof Customizable]?: \r\n (tags: ICommentTag[]) => Customizable[Type] | undefined;\r\n };\r\n\r\n export interface ICommentTag {\r\n name: string;\r\n value?: string;\r\n }\r\n}\nexport interface Customizable {\r\n number: number;\r\n string: string;\r\n bigint: bigint;\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nYou can add custom type tags for random data generation.As above IRandomGenerator.CustomMap has a little bit complicate type, it may hard to understand for newcomers. However, such newcomers may easily understand, how to customize the random generation, just by reading the following example.Just define custom type tags like below, then everything would be done.For reference, when defining custom type tag, typia enforces user to define validate function literal for type safety. Never forget it when you define custom type tags for random generation. Such validation logic definition may enhance your random data generator logic when combining with typia.assert() function.\nimport typia from \"typia\";\r\nimport { RandomGenerator } from \"typia/lib/utils/RandomGenerator\";\r\n\r\nconst data: TagCustom = typia.random({\r\n customs: {\r\n string: (tags) => {\r\n if (tags.find((t) => t.kind === \"dollar\") !== undefined)\r\n return \"$\" + RandomGenerator.integer();\r\n const postfix = tags.find((t) => t.kind === \"postfix\");\r\n if (postfix !== undefined)\r\n return RandomGenerator.string() + postfix.value;\r\n },\r\n },\r\n});\r\n\r\nconsole.log(data);\r\n\r\ninterface TagCustom {\r\n id: string & typia.tags.Format<\"uuid\">;\r\n dollar: string & Dolloar;\r\n postfix: string & Postfix<\"abcd\">;\r\n powerOf: number & PowerOf<2>;\r\n}\r\n\r\ntype Dolloar = typia.tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n\r\ntype Postfix = typia.tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n\r\ntype PowerOf = typia.tags.TagBase<{\r\n kind: \"powerOf\";\r\n target: \"number\";\r\n value: Value;\r\n validate: `(() => {\r\n const denominator: number = Math.log(${Value});\r\n const value: number = Math.log($input) / denominator;\r\n return Math.abs(value - Math.round(value)) < 0.00000001;\r\n })()`;\r\n}>;\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst RandomGenerator_1 = require(\"typia/lib/utils/RandomGenerator\");\r\nconst data = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"uuid\\\">\",\r\n kind: \"format\",\r\n value: \"uuid\"\r\n }\r\n ]) ?? (generator?.uuid ?? $generator.uuid)(),\r\n dollar: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Dolloar\",\r\n kind: \"dollar\"\r\n }\r\n ]) ?? (generator?.string ?? $generator.string)(),\r\n postfix: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Postfix<\\\"abcd\\\">\",\r\n kind: \"postfix\",\r\n value: \"abcd\"\r\n }\r\n ]) ?? (generator?.string ?? $generator.string)(),\r\n powerOf: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"PowerOf<2>\",\r\n kind: \"powerOf\",\r\n value: 2\r\n }\r\n ]) ?? (generator?.number ?? $generator.number)(0, 100)\r\n });\r\n return $ro0();\r\n})({\r\n customs: {\r\n string: (tags) => {\r\n if (tags.find((t) => t.kind === \"dollar\") !== undefined)\r\n return \"$\" + RandomGenerator_1.RandomGenerator.integer();\r\n const postfix = tags.find((t) => t.kind === \"postfix\");\r\n if (postfix !== undefined)\r\n return RandomGenerator_1.RandomGenerator.string() + postfix.value;\r\n },\r\n },\r\n});\r\nconsole.log(data);"}},"/docs/protobuf/message":{"title":"Message","data":{"message-function#message() function":"export namespace protobuf {\r\n export function message(): string;\r\n}\ntypia.protobuf.message() function returns a Protocol Buffer message (structure) as a string value.With this message() function, you can share *.proto files with other languages. If you want to customize byte order or define specific type (that is not supported in the TypeScript) like uint32, use comment tags by following comment tags section.\nimport typia, { tags } from \"typia\";\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\r\n\r\ntypia.protobuf.message();\nsyntax = \"proto3\";\r\n\r\nmessage ICustomer {\r\n required int32 id = 1;\r\n required string email = 2;\r\n required string name = 3;\r\n oneof pet {\r\n ICat v4 = 4;\r\n IDog v5 = 5;\r\n }\r\n map memo = 6;\r\n repeated ICustomerLogin logins = 7;\r\n}\r\n\r\nmessage ICat {\r\n required string type = 1;\r\n required string name = 2;\r\n required bool ribbon = 3;\r\n}\r\n\r\nmessage IDog {\r\n required string type = 1;\r\n required string name = 2;\r\n required bool hunt = 3;\r\n}\r\n\r\nmessage ICustomerLogin {\r\n required bool success = 1;\r\n required string href = 2;\r\n required string referrer = 3;\r\n required string ip = 4;\r\n required string time = 5;\r\n}","type-tags#Type Tags":"By using type tags, you can use special numeric types that are not supported in the TypeScript.Just import Type (or typia.tags.Type) type, and combine it with number or bigint type through intersection symbol number & typia.tagsType<\"float\"> case. If you want to declare an union numeric type, combine | and bracket (()) symbols properly like below.When you take a mistake that choosing different target type, TypeScript compiler would block it with compliation error message. Therefore, have a confidence when using the Type tag. For such type safety reason, I recommend to use Type tag instead of using comment tags as much as possible.\nnumber & (Type<\"uint32\"> | Type<\"double\">)\nnumber type can be both uint32 and double\n(number & Type<\"int32\">) | (bigint & Type<\"uint64\">)\nnumber is int32\nbigint is uint64\n(number & (Type<\"int32\">)| Type<\"float\">) | (bigint & Type<\"uint64\">)\nnumber can be both int32 and float\nbigint is uint64\nimport typia, { tags } from \"typia\";\r\n\r\nexport interface TypeTagExample {\r\n // ATOMIC TYPES\r\n int32: number & tags.Type<\"int32\">;\r\n uint32: number & tags.Type<\"uint32\">;\r\n uint64: bigint & tags.Type<\"uint64\">;\r\n int64: number & tags.Type<\"int64\">;\r\n float: number & tags.Type<\"float\">;\r\n double: number | undefined;\r\n string: string | null;\r\n\r\n // UNION TYPES\r\n uint32_or_double: number & (tags.Type<\"uint32\"> | tags.Type<\"double\">);\r\n int32_or_uint64: \r\n | (number & tags.Type<\"int32\">) \r\n | (bigint & tags.Type<\"uint64\">);\r\n int32_or_float_or_uint64: \r\n | (number & (tags.Type<\"int32\"> | tags.Type<\"float\">)) \r\n | (bigint & tags.Type<\"uint64\">);\r\n\r\n // ARRAY AND MAP\r\n uint64_array: Array>;\r\n int32_map?: Map, string> | null;\r\n}\r\n\r\n//----\r\n// PROTOBUF MESSAGE SCHEMA\r\n//----\r\ntypia.protobuf.message();\r\n\r\n//----\r\n// DECODE FUNCTION\r\n//----\r\ntypia.protobuf.createDecode();\r\n\r\n//----\r\n// ENCODE FUNCTION\r\n//----\r\ntypia.protobuf.createEncode();\nsyntax = \"proto3\";\r\n\r\nmessage TypeTagExample {\r\n required int32 int32 = 1;\r\n required uint32 uint32 = 2;\r\n required uint64 uint64 = 3;\r\n required int64 int64 = 4;\r\n required float float = 5;\r\n optional double double = 6;\r\n optional string string = 7;\r\n oneof uint32_or_double {\r\n uint32 v8 = 8;\r\n double v9 = 9;\r\n }\r\n oneof int32_or_uint64 {\r\n int32 v10 = 10;\r\n uint64 v11 = 11;\r\n }\r\n oneof int32_or_float_or_uint64 {\r\n int32 v12 = 12;\r\n uint64 v13 = 13;\r\n float v14 = 14;\r\n }\r\n repeated uint64 uint64_array = 15;\r\n map int32_map = 16;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n//----\r\n// PROTOBUF MESSAGE SCHEMA\r\n//----\r\n\"syntax = \\\"proto3\\\";\\n\\nmessage TypeTagExample {\\n required int32 int32 = 1;\\n required uint32 uint32 = 2;\\n required uint64 uint64 = 3;\\n required int64 int64 = 4;\\n required float float = 5;\\n optional double double = 6;\\n optional string string = 7;\\n oneof uint32_or_double {\\n uint32 v8 = 8;\\n double v9 = 9;\\n }\\n oneof int32_or_uint64 {\\n int32 v10 = 10;\\n uint64 v11 = 11;\\n }\\n oneof int32_or_float_or_uint64 {\\n int32 v12 = 12;\\n uint64 v13 = 13;\\n float v14 = 14;\\n }\\n repeated uint64 uint64_array = 15;\\n map int32_map = 16;\\n}\";\r\n//----\r\n// DECODE FUNCTION\r\n//----\r\ninput => {\r\n const $Reader = typia_1.default.protobuf.createDecode.Reader;\r\n const $pdo0 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n int32: undefined,\r\n uint32: undefined,\r\n uint64: undefined,\r\n int64: undefined,\r\n float: undefined,\r\n double: undefined,\r\n string: null,\r\n uint32_or_double: undefined,\r\n int32_or_uint64: undefined,\r\n int32_or_float_or_uint64: undefined,\r\n uint64_array: [],\r\n int32_map: null\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // int32;\r\n output.int32 = reader.int32();\r\n break;\r\n case 2:\r\n // uint32;\r\n output.uint32 = reader.uint32();\r\n break;\r\n case 3:\r\n // uint64;\r\n output.uint64 = reader.uint64();\r\n break;\r\n case 4:\r\n // int64;\r\n output.int64 = Number(reader.int64());\r\n break;\r\n case 5:\r\n // float;\r\n output.float = reader.float();\r\n break;\r\n case 6:\r\n // double;\r\n output.double = reader.double();\r\n break;\r\n case 7:\r\n // string;\r\n output.string = reader.string();\r\n break;\r\n case 8:\r\n // uint32;\r\n output.uint32_or_double = reader.uint32();\r\n break;\r\n case 9:\r\n // double;\r\n output.uint32_or_double = reader.double();\r\n break;\r\n case 10:\r\n // int32;\r\n output.int32_or_uint64 = reader.int32();\r\n break;\r\n case 11:\r\n // uint64;\r\n output.int32_or_uint64 = reader.uint64();\r\n break;\r\n case 12:\r\n // int32;\r\n output.int32_or_float_or_uint64 = reader.int32();\r\n break;\r\n case 13:\r\n // uint64;\r\n output.int32_or_float_or_uint64 = reader.uint64();\r\n break;\r\n case 14:\r\n // float;\r\n output.int32_or_float_or_uint64 = reader.float();\r\n break;\r\n case 15:\r\n // type: Array<(bigint & Type<\"uint64\">)>;\r\n if (2 === (tag & 7)) {\r\n const piece = reader.uint32() + reader.index();\r\n while (reader.index() < piece)\r\n output.uint64_array.push(reader.uint64());\r\n }\r\n else\r\n output.uint64_array.push(reader.uint64());\r\n break;\r\n case 16:\r\n // type: Map;\r\n (() => {\r\n output.int32_map ??= new Map();\r\n const piece = reader.uint32() + reader.index();\r\n const entry = {\r\n key: undefined,\r\n value: \"\"\r\n };\r\n while (reader.index() < piece) {\r\n const kind = reader.uint32();\r\n switch (kind >>> 3) {\r\n case 1:\r\n // int32;\r\n entry.key = reader.int32();\r\n break;\r\n case 2:\r\n // string;\r\n entry.value = reader.string();\r\n break;\r\n default:\r\n reader.skipType(kind & 7);\r\n break;\r\n }\r\n }\r\n output.int32_map.set(entry.key, entry.value);\r\n })();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const reader = new $Reader(input);\r\n return $pdo0(reader);\r\n};\r\n//----\r\n// ENCODE FUNCTION\r\n//----\r\ninput => {\r\n const $throws = typia_1.default.protobuf.createEncode.throws;\r\n const $Sizer = typia_1.default.protobuf.createEncode.Sizer;\r\n const $Writer = typia_1.default.protobuf.createEncode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"int32\";\r\n writer.uint32(8);\r\n writer.int32(input.int32);\r\n // property \"uint32\";\r\n writer.uint32(16);\r\n writer.uint32(input.uint32);\r\n // property \"uint64\";\r\n writer.uint32(24);\r\n writer.uint64(input.uint64);\r\n // property \"int64\";\r\n writer.uint32(32);\r\n writer.int64(input.int64);\r\n // property \"float\";\r\n writer.uint32(45);\r\n writer.float(input.float);\r\n // property \"double\";\r\n if (undefined !== input.double) {\r\n writer.uint32(49);\r\n writer.double(input.double);\r\n }\r\n // property \"string\";\r\n if (null !== input.string) {\r\n writer.uint32(58);\r\n writer.string(input.string);\r\n }\r\n // property \"uint32_or_double\";\r\n if (\"number\" === typeof input.uint32_or_double && (Math.floor(input.uint32_or_double) === input.uint32_or_double && 0 <= input.uint32_or_double && input.uint32_or_double <= 4294967295)) {\r\n writer.uint32(64);\r\n writer.uint32(input.uint32_or_double);\r\n }\r\n else if (\"number\" === typeof input.uint32_or_double && true) {\r\n writer.uint32(73);\r\n writer.double(input.uint32_or_double);\r\n }\r\n else\r\n $throws({\r\n expected: \"(number & (Type<\\\"uint32\\\"> | Type<\\\"double\\\">))\",\r\n value: input.uint32_or_double\r\n });\r\n // property \"int32_or_uint64\";\r\n if (\"number\" === typeof input.int32_or_uint64) {\r\n writer.uint32(80);\r\n writer.int32(input.int32_or_uint64);\r\n }\r\n else if (\"bigint\" === typeof input.int32_or_uint64) {\r\n writer.uint32(88);\r\n writer.uint64(input.int32_or_uint64);\r\n }\r\n else\r\n $throws({\r\n expected: \"((bigint & Type<\\\"uint64\\\">) | (number & Type<\\\"int32\\\">))\",\r\n value: input.int32_or_uint64\r\n });\r\n // property \"int32_or_float_or_uint64\";\r\n if (\"number\" === typeof input.int32_or_float_or_uint64 && (Math.floor(input.int32_or_float_or_uint64) === input.int32_or_float_or_uint64 && -2147483648 <= input.int32_or_float_or_uint64 && input.int32_or_float_or_uint64 <= 2147483647)) {\r\n writer.uint32(96);\r\n writer.int32(input.int32_or_float_or_uint64);\r\n }\r\n else if (\"bigint\" === typeof input.int32_or_float_or_uint64) {\r\n writer.uint32(104);\r\n writer.uint64(input.int32_or_float_or_uint64);\r\n }\r\n else if (\"number\" === typeof input.int32_or_float_or_uint64 && (-1.175494351e+38 <= input.int32_or_float_or_uint64 && input.int32_or_float_or_uint64 <= 3.4028235e+38)) {\r\n writer.uint32(117);\r\n writer.float(input.int32_or_float_or_uint64);\r\n }\r\n else\r\n $throws({\r\n expected: \"((bigint & Type<\\\"uint64\\\">) | (number & (Type<\\\"int32\\\"> | Type<\\\"float\\\">)))\",\r\n value: input.int32_or_float_or_uint64\r\n });\r\n // property \"uint64_array\";\r\n if (0 !== input.uint64_array.length) {\r\n writer.uint32(122);\r\n writer.fork();\r\n for (const elem of input.uint64_array) {\r\n writer.uint64(elem);\r\n }\r\n writer.ldelim();\r\n }\r\n // property \"int32_map\";\r\n if (undefined !== input.int32_map && null !== input.int32_map) {\r\n for (const [key, value] of input.int32_map) {\r\n writer.uint32(130);\r\n writer.fork();\r\n writer.uint32(8);\r\n writer.int32(key);\r\n writer.uint32(18);\r\n writer.string(value);\r\n writer.ldelim();\r\n }\r\n }\r\n };\r\n //TypeTagExample;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n};","comment-tags#Comment Tags":"By using @type {target} comment tag, you also can use special numeric types.However, this way is not recommended, because it can't perform union numeric types, and cannot be used in Array and Map types. When you declare @type int32 statement, target number type be fixed as int32 type, and never can have another numeric type by declaring union statements.Also, those comment tags are not type safe. If you take a mistake when writing a comment tag, it will not be detected by the compiler, and will cause an error at runtime. For example, if you write a mis-spelled keyword like @type unit32, the target number type would be double type, and you can identify it just by running the program (or visiting playground website).\nWhy supports comment tags?\nDespite these disadvantages, the reason for maintaining comment tags is as follows.First, it is to support the legacy JSDoc style that had been used in the JS camp for a long time. If you had developed a legacy project and JSDoc being used, you can use it as is.Second, to support Prisma. If a comment is created in the Prisma Schema through the /// statement as shown below and a type is created, it is converted to a TS comment as it is. And since there is no way that union types, numeric Arrays or Maps are used in Prisma (database) schema, these comment tags are surprisingly compatible with Prisma.\nimport typia from \"typia\";\r\n\r\nexport interface CommentTagExample {\r\n /**\r\n * @type int32\r\n */\r\n int32: number;\r\n\r\n /**\r\n * @type uint32\r\n */\r\n uint32?: number | null;\r\n\r\n /**\r\n * @type uint64\r\n */\r\n uint64?: number;\r\n\r\n /**\r\n * @type int64\r\n */\r\n int64: number;\r\n\r\n /**\r\n * @type float\r\n */\r\n float: number | null;\r\n\r\n double: number;\r\n\r\n string: string;\r\n}\r\n\r\n//----\r\n// PROTOBUF MESSAGE SCHEMA\r\n//----\r\ntypia.protobuf.message();\r\n\r\n//----\r\n// DECODE FUNCTION\r\n//----\r\ntypia.protobuf.createDecode();\r\n\r\n//----\r\n// ENCODE FUNCTION\r\n//----\r\ntypia.protobuf.createEncode();\nsyntax = \"proto3\";\r\n\r\nmessage CommentTagExample {\r\n required int32 int32 = 1;\r\n optional uint32 uint32 = 2;\r\n optional uint64 uint64 = 3;\r\n required int64 int64 = 4;\r\n optional float float = 5;\r\n required double double = 6;\r\n required string string = 7;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n//----\r\n// PROTOBUF MESSAGE SCHEMA\r\n//----\r\n\"syntax = \\\"proto3\\\";\\n\\nmessage CommentTagExample {\\n required int32 int32 = 1;\\n optional uint32 uint32 = 2;\\n optional uint64 uint64 = 3;\\n required int64 int64 = 4;\\n optional float float = 5;\\n required double double = 6;\\n required string string = 7;\\n}\";\r\n//----\r\n// DECODE FUNCTION\r\n//----\r\ninput => {\r\n const $Reader = typia_1.default.protobuf.createDecode.Reader;\r\n const $pdo0 = (reader, length = -1) => {\r\n length = length < 0 ? reader.size() : reader.index() + length;\r\n const output = {\r\n int32: undefined,\r\n uint32: null,\r\n uint64: undefined,\r\n int64: undefined,\r\n float: null,\r\n double: undefined,\r\n string: \"\"\r\n };\r\n while (reader.index() < length) {\r\n const tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n // int32;\r\n output.int32 = reader.int32();\r\n break;\r\n case 2:\r\n // uint32;\r\n output.uint32 = reader.uint32();\r\n break;\r\n case 3:\r\n // uint64;\r\n output.uint64 = Number(reader.uint64());\r\n break;\r\n case 4:\r\n // int64;\r\n output.int64 = Number(reader.int64());\r\n break;\r\n case 5:\r\n // float;\r\n output.float = reader.float();\r\n break;\r\n case 6:\r\n // double;\r\n output.double = reader.double();\r\n break;\r\n case 7:\r\n // string;\r\n output.string = reader.string();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return output;\r\n };\r\n const reader = new $Reader(input);\r\n return $pdo0(reader);\r\n};\r\n//----\r\n// ENCODE FUNCTION\r\n//----\r\ninput => {\r\n const $Sizer = typia_1.default.protobuf.createEncode.Sizer;\r\n const $Writer = typia_1.default.protobuf.createEncode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"int32\";\r\n writer.uint32(8);\r\n writer.int32(input.int32);\r\n // property \"uint32\";\r\n if (undefined !== input.uint32 && null !== input.uint32) {\r\n writer.uint32(16);\r\n writer.uint32(input.uint32);\r\n }\r\n // property \"uint64\";\r\n if (undefined !== input.uint64) {\r\n writer.uint32(24);\r\n writer.uint64(input.uint64);\r\n }\r\n // property \"int64\";\r\n writer.uint32(32);\r\n writer.int64(input.int64);\r\n // property \"float\";\r\n if (null !== input.float) {\r\n writer.uint32(45);\r\n writer.float(input.float);\r\n }\r\n // property \"double\";\r\n writer.uint32(49);\r\n writer.double(input.double);\r\n // property \"string\";\r\n writer.uint32(58);\r\n writer.string(input.string);\r\n };\r\n //CommentTagExample;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n};","restrictions#Restrictions":"You know what? Expression power of Protocol Buffer is extremely narrower than type system of TypeScript. For example, Protocol Buffer can't express complicate union type containing array. Also, Protocol Buffer can't express multi dimensional array type, either.In such reason, when converting TypeScript type to Protocol buffer message schema, lots of restrictions are exist. Let's study which types of TyeScript are not supported in Protocol Buffer. For reference, if you try to call typia.protobuf.message() function with unsupported type, typia will generate compile errors like below example cases.At first, top level type must be a sole and static object.If you try to use number or Array type as a top level type, typia will generate compile error like below. Dynamic object types like Record, or Map types are not allowed either. For reference, the sole object means that, union of object types is not allowed, either.\nimport typia from \"typia\";\r\n\r\ninterface Cat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface Dog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\n\r\ntypia.protobuf.message();\r\ntypia.protobuf.createDecode>();\r\ntypia.protobuf.createDecode, Dog>>();\r\ntypia.protobuf.createEncode();\r\ntypia.protobuf.createEncode();\nmain.ts:14:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- bigint\r\n - target type must be a sole and static object type\r\n\r\nmain.ts:15:1 - error TS(typia.protobuf.typia.protobuf.createDecode): unsupported type detected\r\n\r\n- Record\r\n - target type must be a sole and static object type\r\n\r\nmain.ts:16:1 - error TS(typia.protobuf.typia.protobuf.createDecode): unsupported type detected\r\n\r\n- Map<(number & Type<\"float\">), Dog>\r\n - target type must be a sole and static object type\r\n\r\n- (number & Type<\"float\">)\r\n - target type must be a sole and static object type\r\n\r\nmain.ts:17:1 - error TS(typia.protobuf.typia.protobuf.createEncode): unsupported type detected\r\n\r\n- Array\r\n - target type must be a sole and static object type\r\n\r\nmain.ts:18:1 - error TS(typia.protobuf.typia.protobuf.createEncode): unsupported type detected\r\n\r\n- (Cat | Dog)\r\n - target type must be a sole and static object type\nAt next, in Protocol Buffer, those types are categorized as container types.\nArray\nMap\nRecord (dynamic object)\nAlso, those container types does not allow over two-dimensional stacking. Therefore, it is not possible to declaring two dimensional array like number[][], or Array type in Map like Map. Besides, value type of those container also do not support union type either.Additionally, about Map type, key type must be an atomic type. It means that, only boolean, number, bigint and string types are allowed. Also, key type cannot be union type, either.\nimport typia from \"typia\";\r\n\r\ninterface IPointer {\r\n value: T;\r\n}\r\ninterface Cat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface Dog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\n\r\ntypia.protobuf.message>();\r\ntypia.protobuf.createEncode>>();\r\ntypia.protobuf.createDecode>>();\r\n\r\ntypia.protobuf.message>>();\r\ntypia.protobuf.message>>();\nmain.ts:17:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- IPointer>>[key]: Array>\r\n - does not support over two dimenstional array type\r\n\r\nmain.ts:18:1 - error TS(typia.protobuf.typia.protobuf.createEncode): unsupported type detected\r\n\r\n- IPointer>>[key]: Record>\r\n - does not support dynamic object with array value type\r\n\r\nmain.ts:19:1 - error TS(typia.protobuf.typia.protobuf.createDecode): unsupported type detected\r\n\r\n- IPointer>[key]: Map\r\n - does not support union type in map value type\r\n\r\nmain.ts:21:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- IPointer>[key]: Map\r\n - does not support non-atomic key typed map\r\n\r\nmain.ts:22:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- IPointer>[key]: Map<(number | string), Dog>\r\n - does not support union key typed map\r\n - does not support non-atomic key typed map\nAt last, those types are all not allowed.\nany\nfunctional type\nSet, WeakSet and WeakMap\nDate, Boolean, BigInt, Number, String\nBinary classes except Uint8Array\nUint8ClampedArray, Uint16Array, Uint32Array, BigUint64Array\nInt8Array, Int16Array, Int32Array, BigInt64Array\nArrayBuffer, SharedArrayBuffer and DataView\nimport typia from \"typia\";\r\n\r\ninterface Something {\r\n any: any;\r\n unknown: unknown;\r\n closure: () => void;\r\n dict: Set | WeakSet | WeakMap;\r\n date: Date;\r\n classic: String;\r\n buffer: ArrayBuffer;\r\n}\r\n\r\ntypia.protobuf.message();\nmain.ts:13:1 - error TS(typia.protobuf.message): unsupported type detected\r\n\r\n- Something.any: any\r\n - does not support any type\r\n\r\n- Something.unknown: any\r\n - does not support any type\r\n\r\n- Something.closure: unknown\r\n - does not support functional type\r\n\r\n- Something.dict: (Set | WeakMap | WeakSet)\r\n - does not support Set type\r\n - does not support WeakSet type. Use Array type instead.\r\n - does not support WeakMap type. Use Map type instead.\r\n\r\n- Something.date: Date\r\n - does not support Date type. Use string type instead.\r\n\r\n- Something.classic: String\r\n - does not support String type. Use string type instead.\r\n\r\n- Something.buffer: ArrayBuffer\r\n - does not support ArrayBuffer type. Use Uint8Array type instead."}},"/docs/setup":{"title":"Setup","data":{"summary#Summary":"npm install typia\r\nnpx typia setup\npnpm install typia\r\npnpm typia setup --manager pnpm\n# YARN BERRY IS NOT SUPPORTED\r\nyarn add typia\r\nyarn typia setup --manager yarn\nIf you're using standard TypeScript compiler, you can use transform mode.Just run npx typia setup command, then everything be prepared.\nStandard TypeScript Compiler: Microsoft/TypeScript\nnpm install typia\r\nnpm install --save-dev typescript\r\n\r\nnpx typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\npnpm install typia\r\npnpm install --save-dev typescript\r\n\r\npnpm typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\nyarn add typia\r\nyarn add -D typescript\r\n\r\nyarn typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\nOtherwise you are using non-standard TypeScript compiler, then you can't use transformation mode.Instead, you can use generation mode.Run typia generate command with input directory, then transformed TypeScript files would be generated into the output directory.\nNon-standard TypeScript Compilers\nSWC\nESBuild\nBabel","transformation#Transformation":"","concepts#Concepts":"AOT (Ahead of Time) compilation mode.When you write a TypeScript code calling typia.createIs() function and compile it through tsc command, typia will replace the typia.createIs() statement to optimal validation code in the compiled JavaScript file, for the IMember type.This is the transform mode performing AOT (Ahead of Time) compilation.\nimport typia from \"typia\";\r\n\r\nexport const check = typia.createIs();\r\n\r\ninterface IMember {\r\n /**\r\n * @format uuid\r\n */\r\n id: string;\r\n \r\n /**\r\n * @format email\r\n */\r\n email: string;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n age: number;\r\n}\nimport typia from \"typia\";\r\nexport const check = input => {\r\n const $is_uuid = typia.createIs.is_uuid;\r\n const $is_email = typia.createIs.is_email;\r\n return \"object\" === typeof input && \r\n null !== input && \r\n (\r\n \"string\" === typeof input.id && $is_uuid(input.id) && \r\n (\"string\" === typeof input.email && $is_email(input.email)) && \r\n (\"number\" === typeof input.age && 19 < input.age && 100 >= input.age)\r\n );\r\n};","setup-wizard#Setup Wizard":"npm install --save typia\r\nnpx typia setup\npnpm install --save typia\r\npnpm typia setup --manager pnpm\n# YARN BERRY IS NOT SUPPORTED\r\nyarn add typia\r\nyarn typia setup --manager yarn\nYou can turn on transformation mode just by running npx typia setup command.Setup wizard would be executed, and it will do everything for the transformation.","manual-setup#Manual Setup":"npm install --save typia\r\nnpm install --save-dev typescript ts-patch ts-node\npnpm install --save typia\r\npnpm install --save-dev typescript ts-patch ts-node\n# YARN BERRY IS NOT SUPPORTED\r\nyarn add typia\r\nyarn add -D typescript ts-patch ts-node\nIf you want to install typia manually, just follow the steps.At first, install typia as depepdency. And then, install typescript, ts-patch and ts-node as devDependencies.\n{\r\n \"strict\": true,\r\n \"strictNullChecks\": true,\r\n \"compilerOptions\": {\r\n \"plugins\": [\r\n { \"transform\": \"typia/lib/transform\" }\r\n ]\r\n }\r\n}\nAt second, open your tsconfig.json file and configure like above.As typia generates optimal operation code through transformation, you've to configure it as a plugin. Also, never forget to configure strict (or strictNullChecks) to be true. It is essential option for modern TypeScript development.\n{\r\n \"scripts\": {\r\n \"prepare\": \"ts-patch install && typia patch\"\r\n },\r\n \"dependencies\": {\r\n \"typia\": \"^4.1.8\"\r\n },\r\n \"devDependencies\": {\r\n \"ts-node\": \"^10.9.1\",\r\n \"ts-patch\": \"^3.0.2\",\r\n \"typescript\": \"^5.1.6\"\r\n }\r\n}\nnpm run prepare\npnpm prepare\n# YARN BERRY IS NOT SUPPORTED\r\nyarn prepare\nAt last, open package.json file and configure npm run prepare command like above.Of course, you've to run the npm run prepare command after the configuration.For reference, ts-patch is an helper library of TypeScript compiler that supporting custom transformations by plugins. From now on, whenever you run tsc command, your typia function call statements would be transformed to the optimal operation codes in the compiled JavaScript files.\nnpx typia patch\nSince TypeScript v5.3 update, tsc no more parses JSDocComments. Therefore, typia also cannot utilize those JSDocComment related features too, especially \"Comment Tags\" and \"JSON schema generator\".The npx typia patch command has been developed to revive the JSDocComment parsing feature of tsc. It is temporary solution for the TypeScript v5.3 update instead of ts-patch, and will be disabled after ts-patch starts supporting such TypeScript v5.3 update.Of course, if you don't use any \"Comment Tags\" and \"JSON schema generator\", you don't need to run npx typia patch command. This is not mandatory command, but just optional command.","generation#Generation":"# INSTALL TYPIA\r\nnpm install --save typia\r\nnpm install --save-dev typescript\r\n\r\n# GENERATE TRANSFORMED TYPESCRIPT CODES\r\nnpx typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\n# INSTALL TYPIA\r\npnpm install --save typia\r\npnpm install --save-dev typescript\r\n\r\n# GENERATE TRANSFORMED TYPESCRIPT CODES\r\npnpm typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\n# INSTALL TYPIA\r\nyarn add typia\r\nyarn add -D typescript\r\n\r\n# GENERATE TRANSFORMED TYPESCRIPT CODES\r\nyarn typia generate \\\r\n --input src/templates \\\r\n --output src/generated \\\r\n --project tsconfig.json\nFor frontend projects.If you're using non-standard TypeScript compiler, you can't use transform mode\nNon-standard TypeScript compilers:\nSWC in Next.JS\nESBuild in Vite\nBabel in Create-React-App\nInstead, you should utilize the generation mode.Install typia through npm install command, and run typia generate command. Then, generator of typia reads your TypeScript codes of --input, and writes transformed TypeScript files into the --output directory, like below.If you want to specify other TypeScript project file instead of tsconfig.json, you can use --project option.\nimport typia from \"typia\";\r\n\r\nimport { IMember } from \"../structures/IMember\";\r\n\r\nexport const check = typia.createIs();\nimport typia from \"typia\";\r\nimport { IMember } from \"../structures/IMember\";\r\nexport const check = (input: any): input is IMember => {\r\n const $is_uuid = (typia.createIs as any).is_uuid;\r\n const $is_email = (typia.createIs as any).is_email;\r\n return \"object\" === typeof input && \r\n null !== input && \r\n (\r\n \"string\" === typeof input.id && is_uuid(input.id) && \r\n (\"string\" === typeof input.email && $is_email(input.email)) && \r\n (\"number\" === typeof input.age && 19 <= input.age && 100 >= input.age)\r\n );\r\n};\nWhy not support non-standard compilers?\nNon-standard TypeScript compilers are removing every type informations, and skipping type checkings for rapid compilation. By the way, without those type informations, typia can't do anything. This is the reason why typia doesn't support non-standard TypeScript compilers.By the way, SWC is preparing a new project STC keeping type informations. Therefore, typia will support it.","vite#Vite":"If you've made your frontend project through vite, you can still utilize the transformation mode.Just configure vite.config.ts file below, that's all.\nimport { defineConfig } from 'vite'\r\nimport react from '@vitejs/plugin-react'\r\nimport typescript from \"rollup-plugin-typescript2\";\r\n\r\n// https://vitejs.dev/config/\r\nexport default defineConfig({\r\n esbuild: false,\r\n plugins: [\r\n react(),\r\n typescript(),\r\n ],\r\n});\nBy the way, if you're composing monorepo, and need to import some external TypeScript files from the other package of the monorepo, you've to configure the vite.config.ts a little bit different. When declaring typescript plugin, you've to specify include and exclude options like below.\nimport { defineConfig } from 'vite'\r\nimport react from '@vitejs/plugin-react'\r\nimport typescript from \"rollup-plugin-typescript2\";\r\n\r\n// https://vitejs.dev/config/\r\nexport default defineConfig({\r\n esbuild: false,\r\n plugins: [\r\n react(),\r\n typescript({\r\n // WHEN MONOREPO\r\n include: [\r\n \"./**/*.ts+(|x)\",\r\n \"../../core/**/*.ts+(|x)\",\r\n \"../../util/**/*.ts+(|x)\",\r\n ],\r\n exclude: [\"../../node_modules\"],\r\n }),\r\n ],\r\n});","webpack#Webpack":"# TYPIA\r\nnpm install typia\r\nnpx typia setup\r\n\r\n# WEBPACK + TS-LOADER\r\nnpm install --save-dev ts-loader\r\nnpm install --save-dev webpack webpack-cli\n# TYPIA\r\npnpm install typia\r\npnpm typia setup --manager pnpm\r\n\r\n# WEBPACK + TS-LOADER\r\npnpm install --save-dev ts-loader\r\npnpm install --save-dev webpack webpack-cli\n###########################################\r\n# YARN BERRY IS NOT SUPPORTED\r\n###########################################\r\n# TYPIA\r\nyarn add typia\r\nyarn typia setup --manager yarn\r\n\r\n# WEBPACK + TS-LOADER\r\nyarn add -D ts-loader\r\nyarn add -D webpack webpack-cli\nWhen you're using webpack as a bundler, you can still utilize the transformation mode.Just install ts-loader as well as webpack, and configure webpack.config.js file like below.\nconst path = require(\"path\");\r\nconst nodeExternals = require('webpack-node-externals');\r\n \r\nmodule.exports = {\r\n // CUSTOMIZE HERE\r\n entry: ['./src/index.tsx'],\r\n output: {\r\n path: path.join(__dirname, 'dist'),\r\n filename: 'index.js',\r\n },\r\n optimization: {\r\n minimize: false\r\n },\r\n \r\n // JUST KEEP THEM\r\n mode: 'development',\r\n target: 'node',\r\n module: {\r\n rules: [\r\n {\r\n test: /\\.ts$/,\r\n exclude: /node_modules/,\r\n loader: 'ts-loader',\r\n }\r\n ]\r\n },\r\n resolve: {\r\n extensions: ['.tsx', '.ts', '.js'],\r\n },\r\n};\nFrom now on, you can build the single JS file just by running the npx webpack command. By the way, when removing devDependencies for --production install, never forget to add the --ignore-scripts option to prevent the prepare script.\nnpx webpack\r\nnpm ci --omit=dev --ignore-scripts\npnpm webpack\r\npnpm install --production --ignore-scripts\nyarn webpack\r\nrm -rf node_modules\r\nyarn install --production --ignore-scripts --immutable\nAdditionally, if you're using typia in the NodeJS project especially for the backend development, Setup Guide Documents of nestia would be helpful. Even though you're not using NestJS, you can still utilize below documents, and \"Single JS file only\" mode would be especially helpful for you.\nNestia > Setup > Webpack\nWith node_modules\nSingle JS file only","nx#NX":"npm install --save typia\r\nnpx typia setup\npnpm install --save typia\r\npnpm typia setup --manager pnpm\n# YARN BERRY IS NOT SUPPORTED\r\nyarn add typia\r\nyarn typia setup --manager yarn\nAfter install typia like above, you have to modify project.json on each app like below.\n \"targets\": {\r\n \"build\": {\r\n ...\r\n \"options\": {\r\n ...\r\n \"target\": \"node\",\r\n \"compiler\": \"tsc\",\r\n \"transformers\": [\r\n \"typia/lib/transform\",\r\n ]\r\n }\r\n },\r\n ...\r\n }"}},"/docs/protobuf/encode":{"title":"Encode","data":{"encode-functions#encode() functions":"export namespace protobuf {\r\n export function encode(input: T): Uint8Array;\r\n export function isEncode(input: T): Uint8Array | null;\r\n export function assertEncode(input: T): Uint8Array;\r\n export function validateEncode(input: T): IValidation;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nProtocol Buffer Encoder.You can easily convert a JavaScript object to a binary data of Protocol Buffer, without any extra Protocol Buffer Message Schema definition. typia.protobuf.encode() function analyzes your type T, and generates a Protocol Buffer Message Schema internally. And then, it converts the input instance to the binary data of Protocol Buffer format.By the way, typia.protobuf.encode() function does not validate the input value. It just believes user and input value, and converts to the Protocol Buffer binary data directly without any validation. By the way, if the input value was not validate, the encoded binary data never can be decoded. So, if you can't sure the input value type, you should use below functions instead.\ntypia.protobuf.isEncode(): typia.is() + typia.protobuf.encode()\ntypia.protobuf.assertEncode(): typia.assert() + typia.protobuf.encode()\ntypia.protobuf.validateEncode(): typia.validate() + typia.protobuf.encode()\nAOT compliation\ntypia.protobuf.encode() and other similar functions are still much faster than any other competitive libraries, even though they include type checking process. This is the power of AOT compilation, writing optimal dedicated code by analyzing TypeScript type, in the compilation level.\nimport typia, { tags } from \"typia\";\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\r\n\r\nconst customer: ICustomer = typia.random();\r\ntypia.protobuf.encode(customer);\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst customer = (generator => {\r\n const $generator = typia_1.default.random.generator;\r\n const $pick = typia_1.default.random.pick;\r\n const $ro0 = (_recursive = false, _depth = 0) => ({\r\n id: (generator?.customs ?? $generator.customs)?.number?.([\r\n {\r\n name: \"Type<\\\"int32\\\">\",\r\n kind: \"type\",\r\n value: \"int32\",\r\n }\r\n ]) ?? (generator?.integer ?? $generator.integer)(0, 100),\r\n email: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"email\\\">\",\r\n kind: \"format\",\r\n value: \"email\",\r\n }\r\n ]) ?? (generator?.email ?? $generator.email)(),\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n pet: $pick([\r\n () => null,\r\n () => $ro1(_recursive, _recursive ? 1 + _depth : _depth),\r\n () => $ro2(_recursive, _recursive ? 1 + _depth : _depth)\r\n ])(),\r\n memo: $pick([\r\n () => null,\r\n () => new Map((generator?.array ?? $generator.array)(() => [\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)()\r\n ]))\r\n ])(),\r\n logins: (generator?.array ?? $generator.array)(() => $ro3(_recursive, _recursive ? 1 + _depth : _depth))\r\n });\r\n const $ro1 = (_recursive = false, _depth = 0) => ({\r\n type: \"cat\",\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n ribbon: (generator?.boolean ?? $generator.boolean)()\r\n });\r\n const $ro2 = (_recursive = false, _depth = 0) => ({\r\n type: \"dog\",\r\n name: (generator?.customs ?? $generator.customs)?.string?.([]) ?? (generator?.string ?? $generator.string)(),\r\n hunt: (generator?.boolean ?? $generator.boolean)()\r\n });\r\n const $ro3 = (_recursive = false, _depth = 0) => ({\r\n success: (generator?.boolean ?? $generator.boolean)(),\r\n href: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"url\\\">\",\r\n kind: \"format\",\r\n value: \"url\",\r\n }\r\n ]) ?? (generator?.url ?? $generator.url)(),\r\n referrer: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"url\\\">\",\r\n kind: \"format\",\r\n value: \"url\",\r\n }\r\n ]) ?? (generator?.url ?? $generator.url)(),\r\n ip: $pick([\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"ipv4\\\">\",\r\n kind: \"format\",\r\n value: \"ipv4\",\r\n }\r\n ]) ?? (generator?.ipv4 ?? $generator.ipv4)(),\r\n () => (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"ipv6\\\">\",\r\n kind: \"format\",\r\n value: \"ipv6\",\r\n }\r\n ]) ?? (generator?.ipv6 ?? $generator.ipv6)()\r\n ])(),\r\n time: (generator?.customs ?? $generator.customs)?.string?.([\r\n {\r\n name: \"Format<\\\"date-time\\\">\",\r\n kind: \"format\",\r\n value: \"date-time\",\r\n }\r\n ]) ?? (generator?.datetime ?? $generator.datetime)()\r\n });\r\n return $ro0();\r\n})();\r\n(input => {\r\n const $throws = typia_1.default.protobuf.encode.throws;\r\n const $Sizer = typia_1.default.protobuf.encode.Sizer;\r\n const $Writer = typia_1.default.protobuf.encode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"id\";\r\n writer.uint32(8);\r\n writer.int32(input.id);\r\n // property \"email\";\r\n writer.uint32(18);\r\n writer.string(input.email);\r\n // property \"name\";\r\n writer.uint32(26);\r\n writer.string(input.name);\r\n // property \"pet\";\r\n if (null !== input.pet) {\r\n if (\"cat\" === input.pet.type)\r\n return (() => {\r\n // 4 -> ICat;\r\n writer.uint32(34);\r\n writer.fork();\r\n $peo1(input.pet);\r\n writer.ldelim();\r\n })();\r\n else if (\"dog\" === input.pet.type)\r\n return (() => {\r\n // 5 -> IDog;\r\n writer.uint32(42);\r\n writer.fork();\r\n $peo2(input.pet);\r\n writer.ldelim();\r\n })();\r\n else\r\n $throws({\r\n expected: \"(ICat | IDog)\",\r\n value: input.pet\r\n });\r\n }\r\n // property \"memo\";\r\n if (null !== input.memo) {\r\n for (const [key, value] of input.memo) {\r\n writer.uint32(50);\r\n writer.fork();\r\n writer.uint32(10);\r\n writer.string(key);\r\n writer.uint32(18);\r\n writer.string(value);\r\n writer.ldelim();\r\n }\r\n }\r\n // property \"logins\";\r\n if (0 !== input.logins.length) {\r\n for (const elem of input.logins) {\r\n // 7 -> ICustomerLogin;\r\n writer.uint32(58);\r\n writer.fork();\r\n $peo3(elem);\r\n writer.ldelim();\r\n }\r\n }\r\n };\r\n const $peo1 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"ribbon\";\r\n writer.uint32(24);\r\n writer.bool(input.ribbon);\r\n };\r\n const $peo2 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"hunt\";\r\n writer.uint32(24);\r\n writer.bool(input.hunt);\r\n };\r\n const $peo3 = input => {\r\n // property \"success\";\r\n writer.uint32(8);\r\n writer.bool(input.success);\r\n // property \"href\";\r\n writer.uint32(18);\r\n writer.string(input.href);\r\n // property \"referrer\";\r\n writer.uint32(26);\r\n writer.string(input.referrer);\r\n // property \"ip\";\r\n writer.uint32(34);\r\n writer.string(input.ip);\r\n // property \"time\";\r\n writer.uint32(42);\r\n writer.string(input.time);\r\n };\r\n const $io1 = input => \"cat\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.ribbon;\r\n const $io2 = input => \"dog\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.hunt;\r\n const $io3 = input => \"boolean\" === typeof input.success && (\"string\" === typeof input.href && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.referrer && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.ip && (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(input.ip) || /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test(input.ip))) && (\"string\" === typeof input.time && !isNaN(new Date(input.time).getTime()));\r\n const $iu0 = input => (() => {\r\n if (\"cat\" === input.type)\r\n return $io1(input);\r\n else if (\"dog\" === input.type)\r\n return $io2(input);\r\n else\r\n return false;\r\n })();\r\n //ICustomer;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n})(customer);\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}","reusable-functions#Reusable Functions":"export namespace protobuf {\r\n export function encode(): (input: T) => Uint8Array;\r\n export function isEncode(): (input: T) => Uint8Array | null;\r\n export function assertEncode(): (input: T) => Uint8Array;\r\n export function validateEncode(): (\r\n input: T\r\n ) => IValidation;\r\n}\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\n/**\r\n * Resolved type erased every methods.\r\n *\r\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\r\n * its argument as a resolved type that erased every method properties.\r\n *\r\n * If the target argument is a built-in class which returns its origin primitive type\r\n * through the `valueOf()` method like the `String` or `Number`, its return type would\r\n * be the `string` or `number`. Otherwise, the built-in class does not have the\r\n * `valueOf()` method, the return type would be same with the target argument.\r\n *\r\n * Otherwise, the target argument is a type of custom class, all of its custom methods\r\n * would be erased and its prototype would be changed to the primitive `object`.\r\n * Therefore, return type of the TMP type finally be the resolved object.\r\n *\r\n * Before | After\r\n * ------------------------|----------------------------------------\r\n * `Boolean` | `boolean`\r\n * `Number` | `number`\r\n * `BigInt` | `bigint`\r\n * `String` | `string`\r\n * `Class` | `interface`\r\n * Native Class or Others | No change\r\n *\r\n * @template Instance Target argument type.\r\n * @author Jeongho Nam - https://github.com/samchon\r\n * @author Kyungsu Kang - https://github.com/kakasoo\r\n */\r\nexport type Resolved = Equal> extends true\r\n ? T\r\n : ResolvedMain;\r\n\r\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\r\n\r\ntype ResolvedMain = Instance extends [never]\r\n ? never // (special trick for jsonable | null) type\r\n : ValueOf extends boolean | number | bigint | string\r\n ? ValueOf\r\n : Instance extends Function\r\n ? never\r\n : Instance extends object\r\n ? ResolvedObject\r\n : ValueOf;\r\n\r\ntype ResolvedObject = Instance extends Array\r\n ? IsTuple extends true\r\n ? ResolvedTuple\r\n : ResolvedMain[]\r\n : Instance extends Set\r\n ? Set>\r\n : Instance extends Map\r\n ? Map, ResolvedMain>\r\n : Instance extends WeakSet | WeakMap\r\n ? never\r\n : Instance extends\r\n | Date\r\n | Uint8Array\r\n | Uint8ClampedArray\r\n | Uint16Array\r\n | Uint32Array\r\n | BigUint64Array\r\n | Int8Array\r\n | Int16Array\r\n | Int32Array\r\n | BigInt64Array\r\n | Float32Array\r\n | Float64Array\r\n | ArrayBuffer\r\n | SharedArrayBuffer\r\n | DataView\r\n ? Instance\r\n : {\r\n [P in keyof Instance]: ResolvedMain;\r\n };\r\n\r\ntype ResolvedTuple = T extends []\r\n ? []\r\n : T extends [infer F]\r\n ? [ResolvedMain]\r\n : T extends [infer F, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain, ...ResolvedTuple]\r\n : T extends [(infer F)?]\r\n ? [ResolvedMain?]\r\n : T extends [(infer F)?, ...infer Rest extends readonly any[]]\r\n ? [ResolvedMain?, ...ResolvedTuple]\r\n : [];\r\n\r\ntype ValueOf = IsValueOf extends true\r\n ? boolean\r\n : IsValueOf extends true\r\n ? number\r\n : IsValueOf extends true\r\n ? string\r\n : Instance;\r\n\r\ntype IsTuple = [T] extends [\r\n never,\r\n]\r\n ? false\r\n : T extends readonly any[]\r\n ? number extends T[\"length\"]\r\n ? false\r\n : true\r\n : false;\r\n\r\ntype IsValueOf> = Instance extends Object\r\n ? Object extends IValueOf\r\n ? Instance extends Primitive\r\n ? false\r\n : true // not Primitive, but Object\r\n : false // cannot be\r\n : false;\r\n\r\ninterface IValueOf {\r\n valueOf(): T;\r\n}\nReusable typia.protobuf.encode() function generators.If you repeat to call typia.protobuf.encode() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.protobuf.createEncode() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const encode = typia.protobuf.createEncode();\r\n\r\ninterface ICustomer {\r\n id: number & tags.Type<\"int32\">;\r\n email: string & tags.Format<\"email\">;\r\n name: string;\r\n pet: null | ICat | IDog;\r\n memo: null | Map;\r\n logins: Array;\r\n}\r\ninterface ICat {\r\n type: \"cat\";\r\n name: string;\r\n ribbon: boolean;\r\n}\r\ninterface IDog {\r\n type: \"dog\";\r\n name: string;\r\n hunt: boolean;\r\n}\r\ninterface ICustomerLogin {\r\n success: boolean;\r\n href: string & tags.Format<\"url\">;\r\n referrer: string & tags.Format<\"url\">;\r\n ip: string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">);\r\n time: string & tags.Format<\"date-time\">;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.encode = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst encode = input => {\r\n const $throws = typia_1.default.protobuf.createEncode.throws;\r\n const $Sizer = typia_1.default.protobuf.createEncode.Sizer;\r\n const $Writer = typia_1.default.protobuf.createEncode.Writer;\r\n const encoder = writer => {\r\n const $peo0 = input => {\r\n // property \"id\";\r\n writer.uint32(8);\r\n writer.int32(input.id);\r\n // property \"email\";\r\n writer.uint32(18);\r\n writer.string(input.email);\r\n // property \"name\";\r\n writer.uint32(26);\r\n writer.string(input.name);\r\n // property \"pet\";\r\n if (null !== input.pet) {\r\n if (\"cat\" === input.pet.type)\r\n return (() => {\r\n // 4 -> ICat;\r\n writer.uint32(34);\r\n writer.fork();\r\n $peo1(input.pet);\r\n writer.ldelim();\r\n })();\r\n else if (\"dog\" === input.pet.type)\r\n return (() => {\r\n // 5 -> IDog;\r\n writer.uint32(42);\r\n writer.fork();\r\n $peo2(input.pet);\r\n writer.ldelim();\r\n })();\r\n else\r\n $throws({\r\n expected: \"(ICat | IDog)\",\r\n value: input.pet\r\n });\r\n }\r\n // property \"memo\";\r\n if (null !== input.memo) {\r\n for (const [key, value] of input.memo) {\r\n writer.uint32(50);\r\n writer.fork();\r\n writer.uint32(10);\r\n writer.string(key);\r\n writer.uint32(18);\r\n writer.string(value);\r\n writer.ldelim();\r\n }\r\n }\r\n // property \"logins\";\r\n if (0 !== input.logins.length) {\r\n for (const elem of input.logins) {\r\n // 7 -> ICustomerLogin;\r\n writer.uint32(58);\r\n writer.fork();\r\n $peo3(elem);\r\n writer.ldelim();\r\n }\r\n }\r\n };\r\n const $peo1 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"ribbon\";\r\n writer.uint32(24);\r\n writer.bool(input.ribbon);\r\n };\r\n const $peo2 = input => {\r\n // property \"type\";\r\n writer.uint32(10);\r\n writer.string(input.type);\r\n // property \"name\";\r\n writer.uint32(18);\r\n writer.string(input.name);\r\n // property \"hunt\";\r\n writer.uint32(24);\r\n writer.bool(input.hunt);\r\n };\r\n const $peo3 = input => {\r\n // property \"success\";\r\n writer.uint32(8);\r\n writer.bool(input.success);\r\n // property \"href\";\r\n writer.uint32(18);\r\n writer.string(input.href);\r\n // property \"referrer\";\r\n writer.uint32(26);\r\n writer.string(input.referrer);\r\n // property \"ip\";\r\n writer.uint32(34);\r\n writer.string(input.ip);\r\n // property \"time\";\r\n writer.uint32(42);\r\n writer.string(input.time);\r\n };\r\n const $io1 = input => \"cat\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.ribbon;\r\n const $io2 = input => \"dog\" === input.type && \"string\" === typeof input.name && \"boolean\" === typeof input.hunt;\r\n const $io3 = input => \"boolean\" === typeof input.success && (\"string\" === typeof input.href && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.referrer && (/^[a-zA-Z0-9]+:/ / ( ? : www.) ? [-a - zA - Z0 - 9, (), % ._ + ~#] : )) && (\"string\" === typeof input.ip && (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(input.ip) || /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test(input.ip))) && (\"string\" === typeof input.time && !isNaN(new Date(input.time).getTime()));\r\n const $iu0 = input => (() => {\r\n if (\"cat\" === input.type)\r\n return $io1(input);\r\n else if (\"dog\" === input.type)\r\n return $io2(input);\r\n else\r\n return false;\r\n })();\r\n //ICustomer;\r\n $peo0(input);\r\n return writer;\r\n };\r\n const sizer = encoder(new $Sizer());\r\n const writer = encoder(new $Writer(sizer));\r\n return writer.buffer();\r\n};\r\nexports.encode = encode;","references#References":"Protocol Buffer supports special numeric types like int32 or uint64 that are not supported in TypeScript. Also, types of Protocol Buffer cannot fully meet TypeScript type specs either, as expression power of TypeScript types are much stronger than Protocol Buffer.To know how to define special numeric types like uint64, and to understand which TypeScript types are not supported in Protocol Buffer specs, it would better to read below documents. I recommend you to read them before using typia.protobuf.encode() related functions.\nTypia Guide Documents > Protocol Buffer > Message Schema\nmessage() function\nType Tags\nComment Tags\nRestrictions"}},"/docs/validators/assert":{"title":"Assert","data":{"assert-function#assert() function":"export function assert(input: T): T;\r\nexport function assert(input: unknown): T;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nAsserts a value type.typia.assert() function throws a TypeGuardError when wrong type comes.The TypeGuardError instance has only the first type error info, with access path and expected type. In the below example case, as the age property is wrong with its definition (@exclusiveMinimum), such TypeGuardError would be thrown:\nmethod: typia.assert()\npath: input.age\nvalue: 18,\nexpected: number & ExclusiveMinimum<19>\nAOT compliation\nIf you'd used other competitive validator libraries like ajv or class-validator, you may found that typia does not require any extra schema definition. If you have not experienced them, I can sure that you may get shocked after reading below extra schema definition files.\najv requires JSON schema definition.\nclass-validator requires DTO class with decorator function calls.\nYeah, typia needs only pure TypeScript type. As typia is a compiler library, it can analyze TypeScript type by itself, and possible to write the optimal validation code like below. This is the key principle of typia, which needs only one line with pure TypeScript type.\nimport typia, { tags } from \"typia\";\r\nimport { v4 } from \"uuid\";\r\n\r\ntypia.assert({\r\n id: v4(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 18, // wrong, must be greater than 19\r\n});\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst uuid_1 = require(\"uuid\");\r\n((input) => {\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.assert.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n})({\r\n id: (0, uuid_1.v4)(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 18, // wrong, must be greater than 19\r\n});","assertequals-function#assertEquals() function":"export function assertEquals(input: T): T;\r\nexport function assertEquals(input: unknown): T;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nMore strict assert function prohibiting superfluous properties.typia.assert() function inspects input value type and throws TypeGuardError when mismatched, however, it can't detect superfluous properties. If you want to prohibit those superfluous properties, therefore throws an TypeGuardError when superfluous property exists, use typia.assertEquals function instead.In the below example case, as sex property is not defined in the IMember type, such TypeGuardError would be thrown:\nmethod: typia.assertEquals()\npath: input.sex\nvalue: 1,\r\n expected: undefined\nimport typia, { tags } from \"typia\";\r\nimport { v4 } from \"uuid\";\r\n\r\ntypia.assert({\r\n id: v4(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n sex: 1, // extra\r\n});\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst uuid_1 = require(\"uuid\");\r\n((input) => {\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.assert.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n})({\r\n id: (0, uuid_1.v4)(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n sex: 1, // extra\r\n});","assertguard-functions#assertGuard() functions":"export function assertGurad(input: T): asserts inut is T;\r\nexport function assertGuard(input: unknown): asserts input is T;\r\n\r\nexport function assertGuardEquals(input: T): asserts inut is T;\r\nexport function assertGuardEquals(input: unknown): asserts input is T;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nAssertion guard of a value type.typia.assertGuard() is similar with typia.assert() throwing a TypeGuardError when wrong type.However, typia.assert() returns the paramteric input value itself when there's no type problem on the parametric input value, whereas the typia.assertGuard() function returns nothing. Instead, the parametric input value would be automatically cased to the type T. This is the concept of \"Assertion Guard\" of a value type.Such similarities and differences of typia.assertGuard() and typia.assert() functions are the same in the case of typia.assertGuardEquals() and typia.assertEquals() functions. If there's no type problem on the typia.assertGuardEquals() function, it also performs the \"Assertion Guard\".Look at the below code, then you may understand what the \"Assertion Guard\" means.\nimport typia from \"typia\";\r\n\r\ninterface IPoint {\r\n x: number;\r\n y: number;\r\n}\r\nconst input: unknown = { x: 1, y: 2 };\r\n\r\n// PERFORM THE ASSERTION GUARD\r\ntypia.assertGuard(input);\r\n\r\n// FROM NOW ON, \"input\" IS THE \"IPoint\" TYPE\r\ninput.x; // OK\r\ninput.y; // OK","reusable-functions#Reusable functions":"export function createAssert(): (input: unknown) => T;\r\nexport function createAssertEquals(): (input: unknown) => T;\r\n\r\nexport function createAssertGuard(): AssertionGuard;\r\nexport function createAssertGuardEquals(): AssertionGuard;\nexport class TypeGuardError extends Error {\r\n public readonly method: string;\r\n public readonly path: string | undefined;\r\n public readonly expected: string;\r\n public readonly value: any;\r\n}\nexport type AssertionGuard = (input: unknown) => asserts input is T;\nReusable typia.assert() function generators.If you repeat to call typia.assert() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createAssert() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const assertMember = typia.createAssert();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.assertMember = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst assertMember = (input) => {\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.createAssert.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) =>\r\n ((\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n })) &&\r\n ((\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n })) &&\r\n ((\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $guard(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }));\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $ao0(input, _path + \"\", true)) ||\r\n $guard(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n return input;\r\n};\r\nexports.assertMember = assertMember;\nExplicity of Assertion Guard\nBe careful when using typia.createAssertGuard() or typia.createAssertGuardEquals() functions.When calling those functions, you've to declare the variable type explicit on the caller variable. If you don't do it, so that the caller variables come the implicit function type, TypeScript compiler throws an error like below. This is a special limitation of TypeScript compiler about the \"Assertion Guard\".\nimport typia, { AssertionGuard } from \"typia\";\r\n\r\n//MUST DECLARE THE VARIABLE TYPE\r\nconst explicit: AssertionGuard = typia.createAssertGuard();\r\n\r\n// IF NOT, COMPILATION ERROR BE OCCURED\r\nconst implicit = typia.createAssertGuard();\nAssertions require every name in the call target to be declared with an explicit type annotation.","restrictions#Restrictions":"typia.assert() function does not check function and user-defined class types.It validates only the primitive properties. Therefore, typia.assert() function does not perform the instanceof ClassName for user-defined classes. If you want to validate the user-defined class type in addition to the property types, do it by yourself. Also, typia.assert() function does not validate the function type either, unless configuring functional property of plugin option in the tsconfig.json file.\n{\r\n \"compilerOptions\": {\r\n \"plugins\": [\r\n {\r\n \"transform\": \"typia/lib/transform\",\r\n \"functional\": true\r\n }\r\n ]\r\n }\r\n}\nBy the way, there're some exception cases.If JS native class type like Date, Uint8Array, or Map being utilized, typia.assert() function validates them. Especially about the Set, and Map class cases, typia.assert() function validates all of their contained element types, too.Therefore, the instanceof statement does not be used only for the user-defined classes.\nimport typia from \"typia\";\r\n\r\ntypia.createIs>();\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n(input) => {\r\n return (\r\n input instanceof Map &&\r\n (() =>\r\n [...input].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"string\" === typeof elem[0] &&\r\n (\"string\" === typeof elem[1] ||\r\n \"number\" === typeof elem[1] ||\r\n \"boolean\" === typeof elem[1]),\r\n ))()\r\n );\r\n};","customization#Customization":"You can enhance validation logic by special tags.Also, with those tags, you can add your custom validation logic, too.If you want to know about such special tags detaily, read below article:\nSpecial Tags\nOutline\nType Tags\nComment Tags\nCustomization\nimport typia, { tags } from \"typia\";\r\n\r\nexport const assertSomething = typia.createAssert();\r\n\r\n//----\r\n// DEFINE CUSTOM TYPE TAGS\r\n//----\r\ntype Dollar = tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n\r\ntype Postfix = tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n\r\ntype IsEven = tags.TagBase<{\r\n kind: \"isEven\";\r\n target: Value extends number ? \"number\" : \"bigint\";\r\n value: undefined;\r\n validate: `$input % ${Numeric<2>} === ${Numeric<0>}`;\r\n}>;\r\n\r\ntype Numeric = Value extends number\r\n ? Value\r\n : `BigInt(${Value})`;\r\n\r\n//----\r\n// VALIDATION\r\n//----\r\ninterface Something {\r\n dollar: string & Dollar;\r\n postfix: string & Postfix<\"!!!\">;\r\n isEven: number & IsEven;\r\n}\n\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.assertSomething = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst assertSomething = input => {\r\n const __is = input => {\r\n return \"object\" === typeof input && null !== input && (\"string\" === typeof input.dollar && (input.dollar[0] === \"$\" && !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\")))) && (\"string\" === typeof input.postfix && input.postfix.endsWith(\"!!!\")) && (\"number\" === typeof input.isEven && input.isEven % 2 === 0));\r\n };\r\n if (false === __is(input))\r\n ((input, _path, _exceptionable = true) => {\r\n const $guard = typia_1.default.createAssert.guard;\r\n const $ao0 = (input, _path, _exceptionable = true) => (\"string\" === typeof input.dollar && (input.dollar[0] === \"$\" && !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\"))) || $guard(_exceptionable, {\r\n path: _path + \".dollar\",\r\n expected: \"string & Dollar\",\r\n value: input.dollar\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".dollar\",\r\n expected: \"(string & Dollar)\",\r\n value: input.dollar\r\n })) && (\"string\" === typeof input.postfix && (input.postfix.endsWith(\"!!!\") || $guard(_exceptionable, {\r\n path: _path + \".postfix\",\r\n expected: \"string & Postfix<\\\"!!!\\\">\",\r\n value: input.postfix\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".postfix\",\r\n expected: \"(string & Postfix<\\\"!!!\\\">)\",\r\n value: input.postfix\r\n })) && (\"number\" === typeof input.isEven && (input.isEven % 2 === 0 || $guard(_exceptionable, {\r\n path: _path + \".isEven\",\r\n expected: \"number & IsEven\",\r\n value: input.isEven\r\n })) || $guard(_exceptionable, {\r\n path: _path + \".isEven\",\r\n expected: \"(number & IsEven)\",\r\n value: input.isEven\r\n }));\r\n return (\"object\" === typeof input && null !== input || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"Something\",\r\n value: input\r\n })) && $ao0(input, _path + \"\", true) || $guard(true, {\r\n path: _path + \"\",\r\n expected: \"Something\",\r\n value: input\r\n });\r\n })(input, \"$input\", true);\r\n return input;\r\n};\r\nexports.assertSomething = assertSomething;","performance#Performance":"Super-fast and super-safe.Comparing typia.assert() function with other competitive libraries, maximum 20,000x faster.Furthermore, only typia can validate complicate union types.\nMeasured on Intel i5-1135g7, Surface Pro 8\nComponents\ttypia\tTypeBox\tajv\tio-ts\tzod\tC.V.\tEasy to use\t✅\t❌\t❌\t❌\t❌\t❌\tObject (simple)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (recursive)\t✔\t❌\t✔\t✔\t✔\t✔\t✔\tObject (union, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tObject (union, explicit)\t✔\t✔\t✔\t✔\t✔\t❌\tObject (additional tags)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (template literal types)\t✔\t✔\t✔\t❌\t❌\t❌\tObject (dynamic properties)\t✔\t✔\t✔\t❌\t❌\t❌\tArray (rest tuple)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tArray (recursive)\t✔\t✔\t✔\t✔\t✔\t❌\tArray (recursive, union)\t✔\t✔\t❌\t✔\t✔\t❌\tArray (R+U, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated, union)\t✅\t❌\t❌\t❌\t❌\t❌\tUltimate Union Type\t✅\t❌\t❌\t❌\t❌\t❌\t\nC.V. means class-validator"}},"/docs/utilization/trpc":{"title":"Trpc","data":{"":"import { initTRPC } from \"@trpc/server\";\r\nimport { v4 } from \"uuid\";\r\nimport typia from \"typia\";\r\n\r\nimport { IBbsArticle } from \"../structures/IBbsArticle\";\r\n\r\nconst server = initTRPC.create();\r\n\r\nexport const appRouter = server.router({\r\n store: server.procedure\r\n .input(typia.createAssert())\r\n .output(typia.createAssert())\r\n .query(({ input }) => {\r\n return {\r\n id: v4(),\r\n writer: input.writer,\r\n title: input.title,\r\n body: input.body,\r\n created_at: new Date().toString(),\r\n };\r\n })\r\n});\r\nexport type AppRouter = typeof appRouter;"}},"/docs/validators/is":{"title":"Is","data":{"is-function#is() function":"export function is(input: T): input is T;\r\nexport function is(input: unknown): input is T;\nTests a value type.When you need to test an instance type, just call typia.is() function.If the input value is following type T, true value would be returned. Otherwise, false would be returned.\nAOT compliation\nIf you'd used other competitive validator libraries like ajv or class-validator, you may found that typia does not require any extra schema definition. If you have not experienced them, I can sure that you may get shocked after reading below extra schema definition files.\najv requires JSON schema definition.\nclass-validator requires DTO class with decorator function calls.\nYeah, typia needs only pure TypeScript type. As typia is a compiler library, it can analyze TypeScript type by itself, and possible to write the optimal validation code like below. This is the key principle of typia, which needs only one line with pure TypeScript type.\nimport typia, { tags } from \"typia\";\r\nimport { v4 } from \"uuid\";\r\n\r\nconst matched: boolean = typia.is({\r\n id: v4(),\r\n email: \"samchon.github@gmai19l.com\",\r\n age: 30,\r\n});\r\n\r\nconsole.log(matched); // true\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst uuid_1 = require(\"uuid\");\r\nconst matched = ((input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n})({\r\n id: (0, uuid_1.v4)(),\r\n email: \"samchon.github@gmai19l.com\",\r\n age: 30,\r\n});\r\nconsole.log(matched); // true","equals-function#equals() function":"export function equals(input: T): input is T;\r\nexport function equals(input: unknown): input is T;\nMore strict checker prohibiting superfluous properties.typia.is() can test instance type, but it allows superfluous properties.If you want to prohibit those superfluous properties, you can use typia.equals() function instead.\nimport typia, { tags } from \"typia\";\r\nimport { v4 } from \"uuid\";\r\n\r\nconst input: unknown = {\r\n id: v4(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n extra: \"superfluous property\", // extra\r\n};\r\nconst is: boolean = typia.is(input);\r\nconst equals: boolean = typia.equals(input);\r\n\r\nconsole.log(is, equals); // true, false\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst uuid_1 = require(\"uuid\");\r\nconst input = {\r\n id: (0, uuid_1.v4)(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n extra: \"superfluous property\", // extra\r\n};\r\nconst is = ((input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n})(input);\r\nconst equals = ((input, _exceptionable = true) => {\r\n const $io0 = (input, _exceptionable = true) =>\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n (3 === Object.keys(input).length ||\r\n Object.keys(input).every((key) => {\r\n if ([\"id\", \"email\", \"age\"].some((prop) => key === prop))\r\n return true;\r\n const value = input[key];\r\n if (undefined === value) return true;\r\n return false;\r\n }));\r\n return \"object\" === typeof input && null !== input && $io0(input, true);\r\n})(input);\r\nconsole.log(is, equals); // true, false","reusable-functions#Reusable functions":"export function createIs(): (input: unknown) => input is T;\r\nexport function createEquals(): (input: unknown) => input is T;\nReusable typia.is() function generators.If you repeat to call typia.is() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createIs() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const check = typia.createIs();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.check = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst check = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n};\r\nexports.check = check;","auto-type-casting#Auto Type Casting":"export function is(input: unknown): input is T;\r\nexport function equals(input: unknown): input is T;\r\nexport function createIs(): (input: unknown) => input is T;\r\nexport function createEquals(): (input: unknown) => input is T;\ntypia.is() function can be used for type casting.When target input value is following the type T, therefore true value be returned, typia.is() function automatically casts the input value to the type T. Therefore, you can utilize the typia.is() function for safe type casting tool like below:\nconst input: unknown = {\r\n id: v4(),\r\n email: \"samchon.github@gmail.com\",\r\n age: 30,\r\n} as any;\r\nif (typia.is(input)) // auto type casting\r\n console.log(input.id, input.email, input.age);","restrictions#Restrictions":"typia.is() function does not check function and user-defined class types.It validates only the primitive properties. Therefore, typia.is() function does not perform the instanceof ClassName for user-defined classes. If you want to validate the user-defined class type in addition to the property types, do it by yourself. Also, typia.is() function does not validate the function type either, unless configuring functional property of plugin option in the tsconfig.json file.\n{\r\n \"compilerOptions\": {\r\n \"plugins\": [\r\n {\r\n \"transform\": \"typia/lib/transform\",\r\n \"functional\": true\r\n }\r\n ]\r\n }\r\n}\nBy the way, there're some exception cases.If JS native class type like Date, Uint8Array, or Map being utilized, typia.is() function validates them. Especially about the Set, and Map class cases, typia.is() function validates all of their contained element types, too.Therefore, the instanceof statement does not be used only for the user-defined classes.\nimport typia from \"typia\";\r\n\r\ntypia.createIs>();\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n(input) => {\r\n return (\r\n input instanceof Map &&\r\n (() =>\r\n [...input].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"string\" === typeof elem[0] &&\r\n (\"string\" === typeof elem[1] ||\r\n \"number\" === typeof elem[1] ||\r\n \"boolean\" === typeof elem[1]),\r\n ))()\r\n );\r\n};","customization#Customization":"You can enhance validation logic by special tags.Also, with those tags, you can add your custom validation logic, too.If you want to know about such special tags detaily, read below article:\nSpecial Tags\nOutline\nType Tags\nComment Tags\nCustomization\nimport typia, { tags } from \"typia\";\r\n\r\nexport const checkSomething = typia.createIs();\r\n\r\n//----\r\n// DEFINE CUSTOM TYPE TAGS\r\n//----\r\ntype Dollar = tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n\r\ntype Postfix = tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n\r\ntype IsEven = tags.TagBase<{\r\n kind: \"isEven\";\r\n target: Value extends number ? \"number\" : \"bigint\";\r\n value: undefined;\r\n validate: `$input % ${Numeric<2>} === ${Numeric<0>}`;\r\n}>;\r\n\r\ntype Numeric = Value extends number\r\n ? Value\r\n : `BigInt(${Value})`;\r\n\r\n//----\r\n// VALIDATION\r\n//----\r\ninterface Something {\r\n dollar: string & Dollar;\r\n postfix: string & Postfix<\"!!!\">;\r\n isEven: number & IsEven;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkSomething = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkSomething = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.dollar &&\r\n input.dollar[0] === \"$\" &&\r\n !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\"))) &&\r\n \"string\" === typeof input.postfix &&\r\n input.postfix.endsWith(\"!!!\") &&\r\n \"number\" === typeof input.isEven &&\r\n input.isEven % 2 === 0\r\n );\r\n};\r\nexports.checkSomething = checkSomething;","performance#Performance":"Super-fast and super-safe.Comparing typia.is() function with other competitive libraries, maximum 20,000x faster.Furthermore, only typia can validate complicate union types.\nMeasured on Intel i5-1135g7, Surface Pro 8\nComponents\ttypia\tTypeBox\tajv\tio-ts\tzod\tC.V.\tEasy to use\t✅\t❌\t❌\t❌\t❌\t❌\tObject (simple)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (recursive)\t✔\t❌\t✔\t✔\t✔\t✔\t✔\tObject (union, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tObject (union, explicit)\t✔\t✔\t✔\t✔\t✔\t❌\tObject (additional tags)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (template literal types)\t✔\t✔\t✔\t❌\t❌\t❌\tObject (dynamic properties)\t✔\t✔\t✔\t❌\t❌\t❌\tArray (rest tuple)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tArray (recursive)\t✔\t✔\t✔\t✔\t✔\t❌\tArray (recursive, union)\t✔\t✔\t❌\t✔\t✔\t❌\tArray (R+U, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated, union)\t✅\t❌\t❌\t❌\t❌\t❌\tUltimate Union Type\t✅\t❌\t❌\t❌\t❌\t❌\t\nC.V. means class-validator"}},"/docs/validators/tags":{"title":"Tags","data":{"outline#Outline":"typia can perform additional validation through type tags and comment tags.When you need additional validation logic that is not supported in pure TypeScript type spec, you can use type tags and comment tags for it. For example, if you define a type with intersection symbol like number & typia.tags.Type<\"uint32\"> and validates it, typia will check the target numeric value is unsigned integer or not.Also, in TypeScript (and JavaScript), writing @ character in comment is called Comment Tag and typia utilizes such comment tags for enhancing type validation logic. As you can see from below example code, typia analyzes @tagName value patterned comment tags, and generates optimal validation logic in the compilation level.Therefore, don't be afraid typia uses only pure TypeScript types for type validation schema. Don't be afraid about TypeScript does not support integer type. With those type tags and comment tags, you can express every types in the world.\nQ: How to validate integer type? TypeScript does not support it\nA1: Use type tag number & typia.tags.Type<\"int32\">\nA2: Write a comment tag @type int32 on the target property\nQ: Type Tag vs Comment Tags, which one is better\nA1: Type Tag is recommended because it is much safer and generous\nA2: Comment Tag is designed for legacy JSDoc styled projects\nimport typia, { tags } from \"typia\";\r\n\r\nexport const checkCustomTag = typia.createIs();\r\n\r\ninterface CustomTag {\r\n /**\r\n * @type uint32\r\n */\r\n type: number;\r\n\r\n number?: number & tags.ExclusiveMinimum<19> & tags.Maximum<100>;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n string: string;\r\n\r\n pattern: string & tags.Pattern<\"^[a-z]+$\">;\r\n\r\n /**\r\n * Type tag can perform union type.\r\n * \r\n * In here case, format can be oneof `ipv4` or `ipv6` format.\r\n */\r\n format: (string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">)) | null;\r\n\r\n /**\r\n * In the Array case, only type tag can restrict element type.\r\n */\r\n array: Array> \r\n & tags.MinItems<3> \r\n & tags.MaxItems<100>;\r\n\r\n /**\r\n * Also, only type tag can handle map type.\r\n */\r\n map: Map<\r\n number & tags.Type<\"uint32\">, \r\n Array> & tags.MinItems<1>\r\n >;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkCustomTag = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkCustomTag = (input) => {\r\n const $io0 = (input) =>\r\n \"number\" === typeof input.type &&\r\n Math.floor(input.type) === input.type &&\r\n 0 <= input.type &&\r\n input.type <= 4294967295 &&\r\n (undefined === input.number ||\r\n (\"number\" === typeof input.number &&\r\n 19 < input.number &&\r\n input.number <= 100)) &&\r\n \"string\" === typeof input.string &&\r\n 3 <= input.string.length &&\r\n \"string\" === typeof input.pattern &&\r\n !isNaN(new Date(input.pattern).getTime()) &&\r\n (null === input.format ||\r\n (\"string\" === typeof input.format &&\r\n (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(\r\n input.format,\r\n ) ||\r\n !isNaN(new Date(input.format).getTime())))) &&\r\n Array.isArray(input.array) &&\r\n 3 <= input.array.length &&\r\n input.array.length <= 100 &&\r\n input.array.every(\r\n (elem) =>\r\n \"string\" === typeof elem &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n elem,\r\n ),\r\n ) &&\r\n input.map instanceof Map &&\r\n (() =>\r\n [...input.map].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"number\" === typeof elem[0] &&\r\n Math.floor(elem[0]) === elem[0] &&\r\n 0 <= elem[0] &&\r\n elem[0] <= 4294967295 &&\r\n Array.isArray(elem[1]) &&\r\n 1 <= elem[1].length &&\r\n elem[1].every(\r\n (elem) =>\r\n \"string\" === typeof elem &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n elem,\r\n ),\r\n ),\r\n ))();\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n};\r\nexports.checkCustomTag = checkCustomTag;","type-tags#Type Tags":"By using type tags, you can utilize additional validation logics.Just import one of type tags from typia, and combine it with target through intersection symbol like number & typia.tags.Type<\"uint32\"> case. If you want to declare an union validation logic, combine | and bracket (()) symbols properly like below:\nnumber & (Type<\"uint32\"> | Type<\"double\">)\nnumber type can be both uint32 and double\n(number & Type<\"int32\">) | (bigint & Type<\"uint64\">)\nnumber is int32\nbigint is uint64\n(number & (Type<\"int32\">)| Type<\"float\">) | (bigint & Type<\"uint64\">)\nnumber can be both int32 and float\nbigint is uint64\nHere is the entire list of type tags that typia basically supports.For reference, when you take a mistake that choosing different target type, TypeScript compiler would block it with compilation error message. Also, if you take a mistake that placing invalid argument on the type, it would also be blocked IDE and compiler. Therefore, have a confidence when using them.\nnumber\nnumber & Type<{keyword}>\nint32\nuint32\nuint64\nint64\nfloat\ndouble\nnumber & Minimum<{number}>\nnumber & Maximum<{number}>\nnumber & ExclusiveMaximum<{number}>\nnumber & ExclusiveMinimum<{number}>\nnumber & MultipleOf<{number}>\nbigint\nbigint & Type<{keyword}>\nint64\nuint64\nbigint & Minimum<{bigint}>\nbigint & Maximum<{bigint}>\nbigint & ExclusiveMaximum<{bigint}>\nbigint & ExclusiveMinimum<{bigint}>\nbigint & MultipleOf<{bigint}>\nstring\nstring & MinLength<{number}>\nstring & MaxLength<{number}>\nstring & Pattern<{regex}>\nstring & Format<{keyword}>\nbyte\npassword\nregex\nuuid\nemail\nhostname\nidn-email\nidn-hostname\niri\niri-reference\nipv4\nipv6\nuri\nuri-reference\nuri-template\nurl\ndate-time\ndate\ntime\nduration\njson-pointer\nrelative-json-pointer\nAlso, if you need custom validation logic, just make it by yourself referencing Customization section. It is easy to define. For such type safety and generous use case reasons even customization supporting, I recommend you to use type tags instead of comment tags, unless you are maintaining a legacy JSDoc styled project.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const checkCustomTag = typia.createIs();\r\n\r\ninterface CustomTag {\r\n type: number & tags.Type<\"uint32\">;\r\n\r\n number?: number & tags.ExclusiveMinimum<19> & tags.Maximum<100>;\r\n\r\n string: string & tags.MinLength<3>;\r\n\r\n pattern: string & tags.Pattern<\"^[a-z]+$\">;\r\n\r\n /**\r\n * Type tag can perform union type.\r\n * \r\n * In here case, format can be oneof `ipv4` or `ipv6` format.\r\n */\r\n format: (string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">)) | null;\r\n\r\n /**\r\n * In the Array case, only type tag can restrict element type.\r\n */\r\n array: Array> \r\n & tags.MinItems<3> \r\n & tags.MaxItems<100>;\r\n\r\n /**\r\n * Also, only type tag can handle map type.\r\n */\r\n map: Map<\r\n number & tags.Type<\"uint32\">, \r\n Array> & tags.MinItems<1>\r\n >;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkCustomTag = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkCustomTag = (input) => {\r\n const $io0 = (input) =>\r\n \"number\" === typeof input.type &&\r\n Math.floor(input.type) === input.type &&\r\n 0 <= input.type &&\r\n input.type <= 4294967295 &&\r\n (undefined === input.number ||\r\n (\"number\" === typeof input.number &&\r\n 19 < input.number &&\r\n input.number <= 100)) &&\r\n \"string\" === typeof input.string &&\r\n 3 <= input.string.length &&\r\n \"string\" === typeof input.pattern &&\r\n !isNaN(new Date(input.pattern).getTime()) &&\r\n (null === input.format ||\r\n (\"string\" === typeof input.format &&\r\n (/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(\r\n input.format,\r\n ) ||\r\n !isNaN(new Date(input.format).getTime())))) &&\r\n Array.isArray(input.array) &&\r\n 3 <= input.array.length &&\r\n input.array.length <= 100 &&\r\n input.array.every(\r\n (elem) =>\r\n \"string\" === typeof elem &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n elem,\r\n ),\r\n ) &&\r\n input.map instanceof Map &&\r\n (() =>\r\n [...input.map].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"number\" === typeof elem[0] &&\r\n Math.floor(elem[0]) === elem[0] &&\r\n 0 <= elem[0] &&\r\n elem[0] <= 4294967295 &&\r\n Array.isArray(elem[1]) &&\r\n 1 <= elem[1].length &&\r\n elem[1].every(\r\n (elem) =>\r\n \"string\" === typeof elem &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n elem,\r\n ),\r\n ),\r\n ))();\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n};\r\nexports.checkCustomTag = checkCustomTag;","comment-tags#Comment Tags":"typia supports those comment tags, too.Here is the entire list of comment tags that typia supports.\nnumber\n@type {string}\nint / int32\nuint / uint32\nint64\nuint64\nfloat\n@minimum {number}\n@maximum {number}\n@exclusiveMinimum {number}\n@exclusiveMaximum {number}\n@multipleOf {number}\nbigint\n@type uint64\n@minimum {bigint}\n@maximum {bigint}\n@exclusiveMinimum {bigint}\n@exclusiveMaximum {bigint}\n@multipleOf {bigint}\nstring\n@minLength {number}\n@maxLength {number}\n@pattern {regex}\n@format {keyword}\nbyte\npassword\nregex\nuuid\nemail\nhostname\nidn-email\nidn-hostname\niri\niri-reference\nipv4\nipv6\nuri\nuri-reference\nuri-template\nurl\ndate-time\ndate\ntime\nduration\njson-pointer\nrelative-json-pointer\narray\n@minItems {number}\n@maxItems {number}\nBy the way, I do not recommend this way, because it can't perform union numeric types, and can be used for only object property type. It can't be used standalone, and cannot be used for element type of Array and Map even when they're declared on object property. Also, When you declare @type int32 statement, target number type be fixed as int32 type, and never can have another numeric type by declaring union statements.Also, those comment tags are not type safe. If you take a mistake when writing a comment tag, it will not be detected by the compiler, and will cause an error at runtime. For example, if you write a mis-spelled keyword like @type unit32, the target number type would be double type, and you can identify it just by running the program (or visiting playground website).\nWhy supports comment tags?\nDespite these disadvantages, the reason for maintaining comment tags is as follows.First, it is to support the legacy JSDoc style that had been used in the JS camp for a long time. If you had developed a legacy project and JSDoc being used, you can use it as is.Second, to support Prisma. If a comment is created in the Prisma Schema through the /// statement as shown below and a type is created, it is converted to a TS comment as it is. And since there is no way that union types, numeric Arrays or Maps are used in Prisma (database) schema, these comment tags are surprisingly compatible with Prisma.\nimport typia from \"typia\";\r\n\r\nexport const checkCustomTag = typia.createIs();\r\n\r\ninterface CustomTag {\r\n /**\r\n * @type uint32\r\n */\r\n type: number;\r\n\r\n /**\r\n * @exclusiveMinimum 19\r\n * @maximum 100\r\n */\r\n number?: number;\r\n\r\n /**\r\n * @minLength 3\r\n */\r\n string: string;\r\n\r\n /**\r\n * @Pattern /^[a-z]+$/\r\n */\r\n pattern: string;\r\n\r\n // NO WAY WHEN COMMENT TAG\r\n // /**\r\n // * Type tag can perform union type.\r\n // * \r\n // * In here case, format can be oneof `ipv4` or `ipv6` format.\r\n // */\r\n // format: (string & (tags.Format<\"ipv4\"> | tags.Format<\"ipv6\">)) | null;\r\n\r\n // NO WAY WHEN COMMENT TAG\r\n // /**\r\n // * In the Array case, only type tag can restrict element type.\r\n // */\r\n // array: Array> \r\n // & tags.MinItems<3> \r\n // & tags.MaxItems<100>;\r\n\r\n // NO WAY WHEN COMMENT TAG\r\n // /**\r\n // * Also, only type tag can handle map type.\r\n // */\r\n // map: Map<\r\n // number & tags.Type<\"uint32\">, \r\n // Array> & tags.MinItems<1>\r\n // >;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkCustomTag = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkCustomTag = (input) => {\r\n const $io0 = (input) =>\r\n \"number\" === typeof input.type &&\r\n Math.floor(input.type) === input.type &&\r\n 0 <= input.type &&\r\n input.type <= 4294967295 &&\r\n (undefined === input.number ||\r\n (\"number\" === typeof input.number &&\r\n 19 < input.number &&\r\n input.number <= 100)) &&\r\n \"string\" === typeof input.string &&\r\n 3 <= input.string.length &&\r\n \"string\" === typeof input.pattern;\r\n return \"object\" === typeof input && null !== input && $io0(input);\r\n};\r\nexports.checkCustomTag = checkCustomTag;","customization#Customization":"export type TagBase> = {\r\n /**\r\n * This is a dummy property for compilation.\r\n * \r\n * It does not mean anything in runtime.\r\n */\r\n \"typia.tag\"?: Props;\r\n};\r\nexport namespace TagBase {\r\n export interface IProps<\r\n Target extends \"bigint\" | \"number\" | \"string\" | \"array\",\r\n Kind extends string,\r\n Value extends boolean | bigint | number | string | undefined,\r\n Validate extends\r\n | string\r\n | {\r\n [key in Target]?: string;\r\n },\r\n Exclusive extends boolean | string[],\r\n > {\r\n /**\r\n * Target type.\r\n *\r\n * If user tries to adapt this tag to a different type, it would be a compile\r\n * error.\r\n *\r\n * For example, you've configured target type as `string`, but user adapted it\r\n * onto a `number` type (`number & YourCustomTag`), then it would be\r\n * blocked by TypeScript compiler.\r\n */\r\n target: Target;\r\n\r\n /**\r\n * What kind of tag is this?\r\n */\r\n kind: Kind;\r\n\r\n /**\r\n * Value to be configured by user.\r\n */\r\n value: Value;\r\n\r\n /**\r\n * Validation code.\r\n *\r\n * This code would be inserted into the generated validation function.\r\n * In here script, target variable name must be `$input`. The variable name\r\n * `$input` would be transformed to the suitable when compilation.\r\n *\r\n * Also, If you've take a mistake on this script, compile error would be\r\n * occured. So, define it with confidence. Compiler will block all your\r\n * mistakes.\r\n */\r\n validate: Validate;\r\n\r\n /**\r\n * Exclusive option.\r\n *\r\n * If this property configured as `true`, same {@link kind} tag cannot be\r\n * duplicated in the target type. Otherwise, if you've configured this property\r\n * as string array, all of the {@link kind} value assigned tag cannot be\r\n * compatible in the target type.\r\n * \r\n * @default false\r\n */\r\n exclusive?: Exclusive | string[];\r\n }\r\n}\nimport { TagBase } from \"./TagBase\";\r\n\r\nexport type Minimum = TagBase<{\r\n target: Value extends number ? \"number\" : \"bigint\";\r\n kind: \"minimum\";\r\n value: Value;\r\n validate: `${Numeric} <= $input`;\r\n exclusive: [\"minimum\", \"exclusiveMinimum\"];\r\n}>;\r\n\r\ntype Numeric = Value extends number\r\n ? Value\r\n : `BigInt(${Value})`;\nimport { TagBase } from \"./TagBase\";\r\n\r\nexport type Type<\r\n Value extends \"int32\" | \"uint32\" | \"int64\" | \"uint64\" | \"float\" | \"double\",\r\n> = TagBase<{\r\n target: Value extends \"int64\" | \"uint64\" ? \"bigint\" | \"number\" : \"number\";\r\n kind: \"type\";\r\n value: Value;\r\n validate: Value extends \"int32\"\r\n ? `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`\r\n : Value extends \"uint32\"\r\n ? `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`\r\n : Value extends \"int64\"\r\n ? {\r\n number: `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`;\r\n bigint: `true`;\r\n }\r\n : Value extends \"uint64\"\r\n ? {\r\n number: `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`;\r\n bigint: `BigInt(0) <= $input`;\r\n }\r\n : Value extends \"float\"\r\n ? `-1.175494351e38 <= $input && $input <= 3.4028235e38`\r\n : `true`;\r\n exclusive: true;\r\n}>;\nimport { TagBase } from \"./TagBase\";\r\n\r\nexport type Pattern = TagBase<{\r\n target: \"string\";\r\n kind: \"pattern\";\r\n value: Value;\r\n validate: `/${Value}/.test($input)`;\r\n}>;\nAbove types are supported by typia basically.If you make a custom type tag extending typia.tags.TagBase type, and utilize it on your type with intersection symbol like number & Minimum<3>, its validation logic 3 <= $input would be inserted into the compiled JavaScript file.Also, as you can see from the typia.tags.TagBase type, you have to specify which target type is the tag for, and need to define the tag can be compatible with others or not through exclusive options. If your custom tag has multiple target types, you can support all of those target types by defining validate property as Record type like Type tag case.In the Korean proverb, there's a word that, \"it is much better to do it once than to hear it a hundred times\". Let's see how custom type tag of typia can be defined and utilized through an example code. I'll define three custom tag types, Postfix, Dollar and IsEven.Here is the example code, and I think that it may easy to understand.\nimport typia from \"typia\";\r\n\r\nexport const checkTagCustom = typia.createIs();\r\n \r\ninterface TagCustom {\r\n id: string & typia.tags.Format<\"uuid\">;\r\n dollar: string & Dolloar;\r\n postfix: string & Postfix<\"abcd\">;\r\n powerOf: number & PowerOf<2>;\r\n}\r\n \r\ntype Dolloar = typia.tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n \r\ntype Postfix = typia.tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n \r\ntype PowerOf = typia.tags.TagBase<{\r\n kind: \"powerOf\";\r\n target: \"number\";\r\n value: Value;\r\n validate: `(() => {\r\n const denominator: number = Math.log(${Value});\r\n const value: number = Math.log($input) / denominator;\r\n return Math.abs(value - Math.round(value)) < 0.00000001;\r\n })()`;\r\n}>;\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.checkTagCustom = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst checkTagCustom = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.dollar &&\r\n input.dollar[0] === \"$\" &&\r\n !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\"))) &&\r\n \"string\" === typeof input.postfix &&\r\n input.postfix.endsWith(\"abcd\") &&\r\n \"number\" === typeof input.powerOf &&\r\n (() => {\r\n const denominator = Math.log(2);\r\n const value = Math.log(input.powerOf) / denominator;\r\n return Math.abs(value - Math.round(value)) < 1e-8;\r\n })()\r\n );\r\n};\r\nexports.checkTagCustom = checkTagCustom;"}},"/docs/validators/validate":{"title":"Validate","data":{"validate-function#validate() function":"export function validate(input: T): IValidation;\r\nexport function validate(input: unknown): IValidation;\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nValidates a value type.typia.validate() function validates input value type, and archives every type errors detaily into IValidation.IFailure.errors array, when the input value is not following the promised type T. Of course, if the parametric input value is following the type T, IValidation.ISuccess instance would be returned.In the below example case, as id and age values are different with its definition of IMember, such errors would be archived into the IValidation.IFailure.errors array.\nerrors[0]\npath: input.id\nexpected: string & Format<\"uuid\">\nvalue: 5\nerrors[1]\npath: input.age\nexpected: number & Format<\"uint32\">\nvalue: 20.75\nAOT compliation\nIf you'd used other competitive validator libraries like ajv or class-validator, you may found that typia does not require any extra schema definition. If you have not experienced them, I can sure that you may get shocked after reading below extra schema definition files.\najv requires JSON schema definition.\nclass-validator requires DTO class with decorator function calls.\nYeah, typia needs only pure TypeScript type. As typia is a compiler library, it can analyze TypeScript type by itself, and possible to write the optimal validation code like below. This is the key principle of typia, which needs only one line with pure TypeScript type.\nimport typia from \"typia\";\r\n\r\nconst res: typia.IValidation = typia.validate({\r\n id: 5, // wrong, must be string (uuid)\r\n age: 20.75, // wrong, not integer\r\n email: \"samchon.github@gmail.com\",\r\n});\r\n\r\nif (!res.success) console.log(res.errors);\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst res = ((input) => {\r\n const errors = [];\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input)) {\r\n const $report = typia_1.default.validate.report(errors);\r\n ((input, _path, _exceptionable = true) => {\r\n const $vo0 = (input, _path, _exceptionable = true) =>\r\n [\r\n (\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n }),\r\n (\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n }),\r\n (\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }),\r\n ].every((flag) => flag);\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $vo0(input, _path + \"\", true)) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n }\r\n const success = 0 === errors.length;\r\n return {\r\n success,\r\n errors,\r\n data: success ? input : undefined,\r\n };\r\n})({\r\n id: 5,\r\n age: 20.75,\r\n email: \"samchon.github@gmail.com\",\r\n});\r\nif (!res.success) console.log(res.errors);","validateequals-function#validateEquals() function":"export function validateEquals(input: T): IValidation;\r\nexport function validateEquals(input: unknown): IValidation;\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nMore strict validatae function prohibiting superfluous properties.typia.validate function detects every type errors of input value, however, it can't detect superfluous properties. If you want to prohibit those superfluous properties, so that archive them into IValidation.IFailure.errors array, use typia.validateEquals() function instead.In the below example case, as id property is different with its type definition and sex property is not defined in the IMember type, such errors would be archived into the IValidation.IFailure.errors array:\nerrors[0]\npath: input.id\nexpected: string (@format uuid)\nvalue: something\nerrors[1]\npath: input.sex\nexpected: undefined\nvalue: 1\nimport typia, { tags } from \"typia\";\r\n\r\nconst res: typia.IValidation = typia.validateEquals({\r\n age: 30,\r\n email: \"samchon.github@gmail.com\",\r\n id: \"something\", // wrong, must be string (uuid)\r\n sex: 1, // extra property\r\n});\r\n\r\nif (!res.success) console.log(res.errors);\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst res = ((input) => {\r\n const errors = [];\r\n const __is = (input, _exceptionable = true) => {\r\n const $io0 = (input, _exceptionable = true) =>\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100 &&\r\n (3 === Object.keys(input).length ||\r\n Object.keys(input).every((key) => {\r\n if ([\"id\", \"email\", \"age\"].some((prop) => key === prop))\r\n return true;\r\n const value = input[key];\r\n if (undefined === value) return true;\r\n return false;\r\n }));\r\n return \"object\" === typeof input && null !== input && $io0(input, true);\r\n };\r\n if (false === __is(input)) {\r\n const $report = typia_1.default.validateEquals.report(errors);\r\n ((input, _path, _exceptionable = true) => {\r\n const $join = typia_1.default.validateEquals.join;\r\n const $vo0 = (input, _path, _exceptionable = true) =>\r\n [\r\n (\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n }),\r\n (\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n }),\r\n (\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }),\r\n 3 === Object.keys(input).length ||\r\n false === _exceptionable ||\r\n Object.keys(input)\r\n .map((key) => {\r\n if (\r\n [\"id\", \"email\", \"age\"].some(\r\n (prop) => key === prop,\r\n )\r\n )\r\n return true;\r\n const value = input[key];\r\n if (undefined === value) return true;\r\n return $report(_exceptionable, {\r\n path: _path + $join(key),\r\n expected: \"undefined\",\r\n value: value,\r\n });\r\n })\r\n .every((flag) => flag),\r\n ].every((flag) => flag);\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $vo0(input, _path + \"\", true)) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n }\r\n const success = 0 === errors.length;\r\n return {\r\n success,\r\n errors,\r\n data: success ? input : undefined,\r\n };\r\n})({\r\n age: 30,\r\n email: \"samchon.github@gmail.com\",\r\n id: \"something\",\r\n sex: 1, // extra property\r\n});\r\nif (!res.success) console.log(res.errors);","reusable-functions#Reusable functions":"export function createValidate = (input: unknown) => IValidation;\r\nexport function createValidateEquals = (input: unknown) => IValidation;\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nReusable typia.validate() function generators.If you repeat to call typia.validate() function on the same type, size of JavaScript files would be larger because of duplicated AOT compilation. To prevent it, you can generate reusable function through typia.createValidate() function.Just look at the code below, then you may understand how to use it.\nimport typia, { tags } from \"typia\";\r\n\r\nexport const validateMember = typia.createValidate();\r\n\r\ninterface IMember {\r\n id: string & tags.Format<\"uuid\">;\r\n email: string & tags.Format<\"email\">;\r\n age: number \r\n & tags.Type<\"uint32\"> \r\n & tags.ExclusiveMinimum<19> \r\n & tags.Maximum<100>;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.validateMember = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst validateMember = (input) => {\r\n const errors = [];\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.id &&\r\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) &&\r\n \"string\" === typeof input.email &&\r\n /^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) &&\r\n \"number\" === typeof input.age &&\r\n Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295 &&\r\n 19 < input.age &&\r\n input.age <= 100\r\n );\r\n };\r\n if (false === __is(input)) {\r\n const $report = typia_1.default.createValidate.report(errors);\r\n ((input, _path, _exceptionable = true) => {\r\n const $vo0 = (input, _path, _exceptionable = true) =>\r\n [\r\n (\"string\" === typeof input.id &&\r\n (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test(\r\n input.id,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: 'string & Format<\"uuid\">',\r\n value: input.id,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".id\",\r\n expected: '(string & Format<\"uuid\">)',\r\n value: input.id,\r\n }),\r\n (\"string\" === typeof input.email &&\r\n (/^(([^<>()[].,;:s@\"]+(.[^<>()[].,;:s@\"]+)*)|(\".+\"))@(([^<>()[].,;:s@\"]+.)+[^<>()[].,;:s@\"]{2,})$/i.test(\r\n input.email,\r\n ) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: 'string & Format<\"email\">',\r\n value: input.email,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".email\",\r\n expected: '(string & Format<\"email\">)',\r\n value: input.email,\r\n }),\r\n (\"number\" === typeof input.age &&\r\n ((Math.floor(input.age) === input.age &&\r\n 0 <= input.age &&\r\n input.age <= 4294967295) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: 'number & Type<\"uint32\">',\r\n value: input.age,\r\n })) &&\r\n (19 < input.age ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & ExclusiveMinimum<19>\",\r\n value: input.age,\r\n })) &&\r\n (input.age <= 100 ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected: \"number & Maximum<100>\",\r\n value: input.age,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".age\",\r\n expected:\r\n '(number & Type<\"uint32\"> & ExclusiveMinimum<19> & Maximum<100>)',\r\n value: input.age,\r\n }),\r\n ].every((flag) => flag);\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })) &&\r\n $vo0(input, _path + \"\", true)) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"IMember\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n }\r\n const success = 0 === errors.length;\r\n return {\r\n success,\r\n errors,\r\n data: success ? input : undefined,\r\n };\r\n};\r\nexports.validateMember = validateMember;","restrictions#Restrictions":"typia.validate() function does not check function and user-defined class types.It validates only the primitive properties. Therefore, typia.validate() function does not perform the instanceof ClassName for user-defined classes. If you want to validate the user-defined class type in addition to the property types, do it by yourself. Also, typia.validate() function does not validate the function type either, unless configuring functional property of plugin option in the tsconfig.json file.\n{\r\n \"compilerOptions\": {\r\n \"plugins\": [\r\n {\r\n \"transform\": \"typia/lib/transform\",\r\n \"functional\": true\r\n }\r\n ]\r\n }\r\n}\nBy the way, there're some exception cases.If JS native class type like Date, Uint8Array, or Map being utilized, typia.validate() function validates them. Especially about the Set, and Map class cases, typia.validate() function validates all of their contained element types, too.Therefore, the instanceof statement does not be used only for the user-defined classes.\nimport typia from \"typia\";\r\n\r\ntypia.createIs>();\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\n(input) => {\r\n return (\r\n input instanceof Map &&\r\n (() =>\r\n [...input].every(\r\n (elem) =>\r\n Array.isArray(elem) &&\r\n elem.length === 2 &&\r\n \"string\" === typeof elem[0] &&\r\n (\"string\" === typeof elem[1] ||\r\n \"number\" === typeof elem[1] ||\r\n \"boolean\" === typeof elem[1]),\r\n ))()\r\n );\r\n};","discriminated-union#Discriminated Union":"export function validate(input: T): IValidation;\r\nexport function validate(input: unknown): IValidation;\r\nexport function createValidate(): (input: unknown) => IValidation;\nexport type IValidation =\r\n | IValidation.ISuccess\r\n | IValidation.IFailure;\r\nexport namespace IValidation {\r\n export interface ISuccess {\r\n success: true;\r\n data: T;\r\n }\r\n export interface IFailure {\r\n success: false;\r\n errors: IError[];\r\n }\r\n export interface IError {\r\n path: string;\r\n expected: string;\r\n value: any;\r\n }\r\n}\nSpecify type through if condition.typia.IValidation is an union type of typia.IValidation.ISuccess and typia.IValidation.IFailure. Also, they have a common property success of boolean type, but different literal values. In that case, if you write a if condition about the success property, you can specify the union type like below.In TypeScript, such union type specification through common property (of different literal value() is called \"Discriminated Union\". Therefore, when using typia.validate() function, let's utilize such discriminated union specification for convenience.\nimport typia from \"typia\";\r\n\r\nconst something: unknown = ...;\r\nconst result: typia.IValidation = typia.validate(something);\r\n\r\nif (results.success) {\r\n // become typia.IValidation.Success type\r\n result.data; // accessible\r\n}\r\nelse {\r\n // become typia.IValidation.Failure type\r\n result.errors; //accessible\r\n}","customization#Customization":"You can enhance validation logic by special tags.Also, with those tags, you can add your custom validation logic, too.If you want to know about such special tags detaily, read below article:\nSpecial Tags\nOutline\nType Tags\nComment Tags\nCustomization\nimport typia, { tags } from \"typia\";\r\n\r\nexport const validateSomething = typia.createValidate();\r\n\r\n//----\r\n// DEFINE CUSTOM TYPE TAGS\r\n//----\r\ntype Dollar = tags.TagBase<{\r\n kind: \"dollar\";\r\n target: \"string\";\r\n value: undefined;\r\n validate: `$input[0] === \"$\" && !isNaN(Number($input.substring(1).split(\",\").join(\"\")))`;\r\n}>;\r\n\r\ntype Postfix = tags.TagBase<{\r\n kind: \"postfix\";\r\n target: \"string\";\r\n value: Value;\r\n validate: `$input.endsWith(\"${Value}\")`;\r\n}>;\r\n\r\ntype IsEven = tags.TagBase<{\r\n kind: \"isEven\";\r\n target: Value extends number ? \"number\" : \"bigint\";\r\n value: undefined;\r\n validate: `$input % ${Numeric<2>} === ${Numeric<0>}`;\r\n}>;\r\n\r\ntype Numeric = Value extends number\r\n ? Value\r\n : `BigInt(${Value})`;\r\n\r\n//----\r\n// VALIDATION\r\n//----\r\ninterface Something {\r\n dollar: string & Dollar;\r\n postfix: string & Postfix<\"!!!\">;\r\n isEven: number & IsEven;\r\n}\n\"use strict\";\r\nvar __importDefault =\r\n (this && this.__importDefault) ||\r\n function (mod) {\r\n return mod && mod.__esModule ? mod : { default: mod };\r\n };\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.validateSomething = void 0;\r\nconst typia_1 = __importDefault(require(\"typia\"));\r\nconst validateSomething = (input) => {\r\n const errors = [];\r\n const __is = (input) => {\r\n return (\r\n \"object\" === typeof input &&\r\n null !== input &&\r\n \"string\" === typeof input.dollar &&\r\n input.dollar[0] === \"$\" &&\r\n !isNaN(Number(input.dollar.substring(1).split(\",\").join(\"\"))) &&\r\n \"string\" === typeof input.postfix &&\r\n input.postfix.endsWith(\"!!!\") &&\r\n \"number\" === typeof input.isEven &&\r\n input.isEven % 2 === 0\r\n );\r\n };\r\n if (false === __is(input)) {\r\n const $report = typia_1.default.createValidate.report(errors);\r\n ((input, _path, _exceptionable = true) => {\r\n const $vo0 = (input, _path, _exceptionable = true) =>\r\n [\r\n (\"string\" === typeof input.dollar &&\r\n ((input.dollar[0] === \"$\" &&\r\n !isNaN(\r\n Number(\r\n input.dollar\r\n .substring(1)\r\n .split(\",\")\r\n .join(\"\"),\r\n ),\r\n )) ||\r\n $report(_exceptionable, {\r\n path: _path + \".dollar\",\r\n expected: \"string & Dollar\",\r\n value: input.dollar,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".dollar\",\r\n expected: \"(string & Dollar)\",\r\n value: input.dollar,\r\n }),\r\n (\"string\" === typeof input.postfix &&\r\n (input.postfix.endsWith(\"!!!\") ||\r\n $report(_exceptionable, {\r\n path: _path + \".postfix\",\r\n expected: 'string & Postfix<\"!!!\">',\r\n value: input.postfix,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".postfix\",\r\n expected: '(string & Postfix<\"!!!\">)',\r\n value: input.postfix,\r\n }),\r\n (\"number\" === typeof input.isEven &&\r\n (input.isEven % 2 === 0 ||\r\n $report(_exceptionable, {\r\n path: _path + \".isEven\",\r\n expected: \"number & IsEven\",\r\n value: input.isEven,\r\n }))) ||\r\n $report(_exceptionable, {\r\n path: _path + \".isEven\",\r\n expected: \"(number & IsEven)\",\r\n value: input.isEven,\r\n }),\r\n ].every((flag) => flag);\r\n return (\r\n (((\"object\" === typeof input && null !== input) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"Something\",\r\n value: input,\r\n })) &&\r\n $vo0(input, _path + \"\", true)) ||\r\n $report(true, {\r\n path: _path + \"\",\r\n expected: \"Something\",\r\n value: input,\r\n })\r\n );\r\n })(input, \"$input\", true);\r\n }\r\n const success = 0 === errors.length;\r\n return {\r\n success,\r\n errors,\r\n data: success ? input : undefined,\r\n };\r\n};\r\nexports.validateSomething = validateSomething;","performance#Performance":"Super-fast and super-safe.Comparing typia.validate() function with other competitive libraries, maximum 20,000x faster.Furthermore, only typia can validate complicate union types.\nMeasured on Intel i5-1135g7, Surface Pro 8\nComponents\ttypia\tTypeBox\tajv\tio-ts\tzod\tC.V.\tEasy to use\t✅\t❌\t❌\t❌\t❌\t❌\tObject (simple)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (recursive)\t✔\t❌\t✔\t✔\t✔\t✔\t✔\tObject (union, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tObject (union, explicit)\t✔\t✔\t✔\t✔\t✔\t❌\tObject (additional tags)\t✔\t✔\t✔\t✔\t✔\t✔\tObject (template literal types)\t✔\t✔\t✔\t❌\t❌\t❌\tObject (dynamic properties)\t✔\t✔\t✔\t❌\t❌\t❌\tArray (rest tuple)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (hierarchical)\t✔\t✔\t✔\t✔\t✔\t✔\tArray (recursive)\t✔\t✔\t✔\t✔\t✔\t❌\tArray (recursive, union)\t✔\t✔\t❌\t✔\t✔\t❌\tArray (R+U, implicit)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated)\t✅\t❌\t❌\t❌\t❌\t❌\tArray (repeated, union)\t✅\t❌\t❌\t❌\t❌\t❌\tUltimate Union Type\t✅\t❌\t❌\t❌\t❌\t❌\t\nC.V. means class-validator"}}} \ No newline at end of file diff --git a/_next/static/chunks/pages/playground-2743724cc4e958f6.js b/_next/static/chunks/pages/playground-2743724cc4e958f6.js deleted file mode 100644 index cdafc2b105..0000000000 --- a/_next/static/chunks/pages/playground-2743724cc4e958f6.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[311],{83589:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/playground",function(){return t(93215)}])},93215:function(e,n,t){"use strict";t.r(n),t.d(n,{__toc:function(){return T},default:function(){return S}});var r,o=t(85893),a=t(92673),i=t(48164),s=t(68426);t(29128);var l=t(82643),d=t(26961),c=t(67294),p=t(55423),m=t.n(p),u=t(88781),f=t.n(u);let h='{\n "name": "typia",\n "version": "5.4.2",\n "description": "Superfast runtime validators with only one line",\n "main": "lib/index.js",\n "typings": "lib/index.d.ts",\n "bin": {\n "typia": "./lib/executable/typia.js"\n },\n "tsp": {\n "tscOptions": {\n "parseAllJsDoc": true\n }\n },\n "scripts": {\n "test": "npm run package:tgz",\n "-------------------------------------------------": "",\n "build": "rimraf lib && tsc --declaration false && tsc --emitDeclarationOnly",\n "dev": "rimraf lib && tsc --watch",\n "eslint": "eslint ./**/*.ts",\n "eslint:fix": "eslint ./**/*.ts --fix",\n "prettier": "prettier src --write",\n "------------------------------------------------": "",\n "package:latest": "ts-node deploy latest",\n "package:next": "ts-node deploy next",\n "package:patch": "ts-node deploy patch",\n "package:tgz": "ts-node deploy tgz",\n "package:deprecate": "npm deprecate typescript-json \\"Renamed to typia\\""\n },\n "repository": {\n "type": "git",\n "url": "https://github.com/samchon/typia"\n },\n "keywords": [\n "fast",\n "json",\n "stringify",\n "typescript",\n "transform",\n "ajv",\n "io-ts",\n "schema",\n "jsonschema",\n "generator",\n "assert",\n "clone",\n "is",\n "validate",\n "equal",\n "runtime",\n "type",\n "typebox",\n "checker",\n "validator",\n "safe",\n "parse",\n "prune",\n "random"\n ],\n "author": "Jeongho Nam",\n "license": "MIT",\n "bugs": {\n "url": "https://github.com/samchon/typia/issues"\n },\n "homepage": "https://typia.io",\n "dependencies": {\n "commander": "^10.0.0",\n "comment-json": "^4.2.3",\n "inquirer": "^8.2.5",\n "randexp": "^0.5.3"\n },\n "peerDependencies": {\n "typescript": ">=4.8.0 <5.5.0"\n },\n "devDependencies": {\n "@trivago/prettier-plugin-sort-imports": "^3.3.0",\n "@types/inquirer": "^8.2.5",\n "@types/node": "^18.15.12",\n "@types/ts-expose-internals": "npm:ts-expose-internals@5.3.2",\n "@typescript-eslint/eslint-plugin": "^5.59.11",\n "@typescript-eslint/parser": "^5.59.11",\n "chalk": "^4.0.0",\n "prettier": "^2.6.2",\n "rimraf": "^5.0.5",\n "ts-node": "^10.9.1",\n "typescript": "^5.3.3"\n },\n "stackblitzs": {\n "startCommand": "npm install && npm run test"\n },\n "files": [\n "LICENSE",\n "README.md",\n "package.json",\n "lib",\n "src"\n ]\n}',y=[["file:///node_modules/typia/package.json",h],["file:///node_modules/typia/index.d.ts",'import * as typia from "./lib";\nexport * from "./lib";\nexport default typia;'],["file:///node_modules/typia/lib/AssertionGuard.d.ts","export type AssertionGuard = (input: unknown) => asserts input is T;\n"],["file:///node_modules/typia/lib/CamelCase.d.ts",'/**\n * Camel case type.\n *\n * `CamelCase` type is a type that all keys of an object are camelized.\n *\n * It also erase every method properties like {@link Resolved} type.\n *\n * @template T Target type to be camelized\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport type CamelCase = Equal> extends true ? T : CamelizeMain;\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\ntype CamelizeMain = T extends [never] ? never : T extends {\n valueOf(): boolean | bigint | number | string;\n} ? ValueOf : T extends Function ? never : T extends object ? CamelizeObject : T;\ntype CamelizeObject = T extends Array ? IsTuple extends true ? CamelizeTuple : CamelizeMain[] : T extends Set ? Set> : T extends Map ? Map, CamelizeMain> : T extends WeakSet | WeakMap ? never : T extends Date | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array | ArrayBuffer | SharedArrayBuffer | DataView ? T : {\n [Key in keyof T as CamelizeString]: CamelizeMain;\n};\ntype IsTuple = [T] extends [\n never\n] ? false : T extends readonly any[] ? number extends T["length"] ? false : true : false;\ntype CamelizeTuple = T extends [] ? [] : T extends [infer F] ? [CamelizeMain] : T extends [infer F, ...infer Rest extends readonly any[]] ? [CamelizeMain, ...CamelizeTuple] : T extends [(infer F)?] ? [CamelizeMain?] : T extends [(infer F)?, ...infer Rest extends readonly any[]] ? [CamelizeMain?, ...CamelizeTuple] : [];\ntype ValueOf = IsValueOf extends true ? boolean : IsValueOf extends true ? number : IsValueOf extends true ? string : Instance;\ntype IsValueOf> = Instance extends Object ? Object extends IValueOf ? Instance extends Primitive ? false : true : false : false;\ninterface IValueOf {\n valueOf(): T;\n}\ntype CamelizeString = Key extends `${infer F}${infer R}` ? `${Lowercase}${CamelizeStringRepeatedly}` : Key;\ntype CamelizeStringRepeatedly = Key extends `${infer F}_${infer R}` ? `${F}${Capitalize>}` : Key;\nexport {};\n'],["file:///node_modules/typia/lib/executable/setup/ArgumentParser.d.ts",'import commander from "commander";\nimport inquirer from "inquirer";\nimport { PackageManager } from "./PackageManager";\nexport declare namespace ArgumentParser {\n type Inquiry = (pack: PackageManager, command: commander.Command, prompt: (opt?: inquirer.StreamOptions) => inquirer.PromptModule, action: (closure: (options: Partial) => Promise) => Promise) => Promise;\n const parse: (pack: PackageManager) => (inquiry: (pack: PackageManager, command: commander.Command, prompt: (opt?: inquirer.StreamOptions) => inquirer.PromptModule, action: (closure: (options: Partial) => Promise) => Promise) => Promise) => Promise;\n}\n'],["file:///node_modules/typia/lib/executable/setup/CommandExecutor.d.ts","export declare namespace CommandExecutor {\n const run: (str: string) => void;\n}\n"],["file:///node_modules/typia/lib/executable/setup/FileRetriever.d.ts","export declare namespace FileRetriever {\n const directory: (name: string) => (dir: string, depth?: number) => string | null;\n const file: (name: string) => (directory: string, depth?: number) => string | null;\n}\n"],["file:///node_modules/typia/lib/executable/setup/PackageManager.d.ts","export declare class PackageManager {\n readonly directory: string;\n data: Package.Data;\n manager: string;\n get file(): string;\n static mount(): Promise;\n save(modifier: (data: Package.Data) => void): Promise;\n install(props: {\n dev: boolean;\n modulo: string;\n version: string;\n }): boolean;\n private constructor();\n private static load;\n}\nexport declare namespace Package {\n interface Data {\n scripts?: Record;\n dependencies?: Record;\n devDependencies?: Record;\n }\n}\n"],["file:///node_modules/typia/lib/executable/setup/PluginConfigurator.d.ts",'import { TypiaSetupWizard } from "../TypiaSetupWizard";\nexport declare namespace PluginConfigurator {\n function configure(args: TypiaSetupWizard.IArguments): Promise;\n}\n'],["file:///node_modules/typia/lib/executable/typia.d.ts",'#!/usr/bin/env node\ndeclare const USAGE = "Wrong command has been detected. Use like below:\\n\\n npx typia setup \\\\\\n --manager (npm|pnpm|yarn) \\\\\\n --project {tsconfig.json file path}\\n\\n - npx typia setup\\n - npx typia setup --manager pnpm\\n - npx typia setup --project tsconfig.test.json\\n\\n npx typia generate \\n --input {directory} \\\\\\n --output {directory}\\n\\n --npx typia generate --input src/templates --output src/functinoal\\n";\ndeclare const halt: (desc: string) => never;\ndeclare const main: () => Promise;\n'],["file:///node_modules/typia/lib/executable/TypiaGenerateWizard.d.ts","export declare namespace TypiaGenerateWizard {\n function generate(): Promise;\n interface IArguments {\n input: string;\n output: string;\n project: string;\n }\n}\n"],["file:///node_modules/typia/lib/executable/TypiaPatchWizard.d.ts","export declare namespace TypiaPatchWizard {\n const main: () => Promise;\n const patch: () => Promise;\n}\n"],["file:///node_modules/typia/lib/executable/TypiaSetupWizard.d.ts",'export declare namespace TypiaSetupWizard {\n interface IArguments {\n manager: "npm" | "pnpm" | "yarn";\n project: string | null;\n }\n function setup(): Promise;\n}\n'],["file:///node_modules/typia/lib/factories/CommentFactory.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace CommentFactory {\n const description: (symbol: ts.Symbol, includeTags?: boolean) => string | undefined;\n const merge: (comments: ts.SymbolDisplayPart[]) => string;\n}\n'],["file:///node_modules/typia/lib/factories/ExpressionFactory.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace ExpressionFactory {\n const number: (value: number) => ts.NumericLiteral | ts.PrefixUnaryExpression;\n const bigint: (value: number | bigint) => ts.CallExpression;\n const isRequired: (input: ts.Expression) => ts.Expression;\n const isArray: (input: ts.Expression) => ts.Expression;\n const isObject: (options: {\n checkNull: boolean;\n checkArray: boolean;\n }) => (input: ts.Expression) => ts.Expression;\n const isInstanceOf: (type: string) => (input: ts.Expression) => ts.Expression;\n const coalesce: (x: ts.Expression) => (y: ts.Expression) => ts.Expression;\n const currying: (target: ts.Expression) => (parameters: ts.Expression[]) => ts.CallExpression;\n const selfCall: (body: ts.ConciseBody) => ts.CallExpression;\n const getEscapedText: (printer: ts.Printer) => (input: ts.Expression) => string;\n const transpile: (context: ts.TransformationContext) => (script: string) => (input: ts.Expression) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/factories/IdentifierFactory.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace IdentifierFactory {\n const identifier: (name: string) => ts.Identifier | ts.StringLiteral;\n const access: (target: ts.Expression) => (property: string) => ts.PropertyAccessExpression | ts.ElementAccessExpression;\n const getName: (input: ts.Expression) => string;\n const postfix: (str: string) => string;\n const parameter: (name: string | ts.BindingName, type?: ts.TypeNode, init?: ts.Expression | ts.PunctuationToken) => any;\n}\n'],["file:///node_modules/typia/lib/factories/internal/metadata/emend_metadata_atomics.d.ts",'import { Metadata } from "../../../schemas/metadata/Metadata";\nexport declare const emend_metadata_atomics: (meta: Metadata) => void;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/emplace_metadata_alias.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataAlias } from "../../../schemas/metadata/MetadataAlias";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const emplace_metadata_alias: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (type: ts.Type, nullable: boolean, explore: MetadataFactory.IExplore) => MetadataAlias;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataArrayType } from "../../../schemas/metadata/MetadataArrayType";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const emplace_metadata_array_type: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (type: ts.Type, nullable: boolean, explore: MetadataFactory.IExplore) => MetadataArrayType;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/emplace_metadata_object.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataObject } from "../../../schemas/metadata/MetadataObject";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const emplace_metadata_object: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (parent: ts.Type, nullable: boolean) => MetadataObject;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataTupleType } from "../../../schemas/metadata/MetadataTupleType";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const emplace_metadata_tuple: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (type: ts.TupleType, nullable: boolean, explore: MetadataFactory.IExplore) => MetadataTupleType;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/explore_metadata.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const explore_metadata: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (type: ts.Type | null, explore: MetadataFactory.IExplore) => Metadata;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => void;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_alias.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_alias: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_array.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_array: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_atomic.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nexport declare const iterate_metadata_atomic: (meta: Metadata, type: ts.Type) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_coalesce.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nexport declare const iterate_metadata_coalesce: (meta: Metadata, type: ts.Type) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_collection.d.ts",'import { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_collection: (errors: MetadataFactory.IError[]) => (collection: MetadataCollection) => void;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts",'import { MetadataObject } from "../../../schemas/metadata/MetadataObject";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_comment_tags: (errors: MetadataFactory.IError[]) => (object: MetadataObject) => void;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_constant.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_constant: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (meta: Metadata, type: ts.Type) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_intersection.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_intersection: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_map.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_map: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_native.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nexport declare const iterate_metadata_native: (checker: ts.TypeChecker) => (meta: Metadata, type: ts.Type) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_object.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_object: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, ensure?: boolean) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_resolve.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_resolve: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_set.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_set: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_sort.d.ts",'import { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nexport declare const iterate_metadata_sort: (collection: MetadataCollection) => (meta: Metadata) => void;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_template.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_template: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_tuple.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_tuple: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.TupleType, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/iterate_metadata_union.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../../schemas/metadata/Metadata";\nimport { MetadataCollection } from "../../MetadataCollection";\nimport { MetadataFactory } from "../../MetadataFactory";\nexport declare const iterate_metadata_union: (checker: ts.TypeChecker) => (options: MetadataFactory.IOptions) => (collection: MetadataCollection) => (errors: MetadataFactory.IError[]) => (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore) => boolean;\n'],["file:///node_modules/typia/lib/factories/internal/metadata/MetadataHelper.d.ts",'import { Metadata } from "../../../schemas/metadata/Metadata";\nexport declare namespace MetadataHelper {\n const literal_to_metadata: (key: string) => Metadata;\n}\n'],["file:///node_modules/typia/lib/factories/JsonMetadataFactory.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../schemas/metadata/Metadata";\nimport { MetadataCollection } from "./MetadataCollection";\nexport declare namespace JsonMetadataFactory {\n const analyze: (method: string) => (checker: ts.TypeChecker, context?: ts.TransformationContext) => (type: ts.Type) => [MetadataCollection, Metadata];\n const validate: (meta: Metadata) => string[];\n}\n'],["file:///node_modules/typia/lib/factories/LiteralFactory.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace LiteralFactory {\n const generate: (input: any) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/factories/MetadataCollection.d.ts",'/// \nimport ts from "typescript";\nimport { IMetadataComponents } from "../schemas/metadata/IMetadataComponents";\nimport { Metadata } from "../schemas/metadata/Metadata";\nimport { MetadataAlias } from "../schemas/metadata/MetadataAlias";\nimport { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";\nimport { MetadataObject } from "../schemas/metadata/MetadataObject";\nimport { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";\nexport declare class MetadataCollection {\n private readonly options?;\n private readonly objects_;\n private readonly object_unions_;\n private readonly aliases_;\n private readonly arrays_;\n private readonly tuples_;\n private readonly names_;\n private object_index_;\n private recursive_array_index_;\n private recursive_tuple_index_;\n constructor(options?: Partial | undefined);\n aliases(): MetadataAlias[];\n objects(): MetadataObject[];\n unions(): MetadataObject[][];\n arrays(): MetadataArrayType[];\n tuples(): MetadataTupleType[];\n private getName;\n emplace(checker: ts.TypeChecker, type: ts.Type): [MetadataObject, boolean];\n emplaceAlias(checker: ts.TypeChecker, type: ts.Type, symbol: ts.Symbol): [MetadataAlias, boolean, (meta: Metadata) => void];\n emplaceArray(checker: ts.TypeChecker, type: ts.Type): [MetadataArrayType, boolean, (meta: Metadata) => void];\n emplaceTuple(checker: ts.TypeChecker, type: ts.TupleType): [MetadataTupleType, boolean, (elements: Metadata[]) => void];\n setTupleRecursive(tuple: MetadataTupleType, recursive: boolean): void;\n toJSON(): IMetadataComponents;\n}\nexport declare namespace MetadataCollection {\n interface IOptions {\n replace?(str: string): string;\n }\n const replace: (str: string) => string;\n const escape: (str: string) => string;\n}\n'],["file:///node_modules/typia/lib/factories/MetadataCommentTagFactory.d.ts","export {};\n"],["file:///node_modules/typia/lib/factories/MetadataFactory.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../schemas/metadata/Metadata";\nimport { MetadataAlias } from "../schemas/metadata/MetadataAlias";\nimport { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";\nimport { MetadataObject } from "../schemas/metadata/MetadataObject";\nimport { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";\nimport { ValidationPipe } from "../typings/ValidationPipe";\nimport { MetadataCollection } from "./MetadataCollection";\nexport declare namespace MetadataFactory {\n type Validator = (meta: Metadata, explore: IExplore) => string[];\n interface IOptions {\n escape: boolean;\n constant: boolean;\n absorb: boolean;\n validate?: Validator;\n onError?: (node: ts.Node | undefined, message: string) => void;\n }\n interface IExplore {\n top: boolean;\n object: MetadataObject | null;\n property: string | object | null;\n nested: null | MetadataAlias | MetadataArrayType | MetadataTupleType;\n escaped: boolean;\n aliased: boolean;\n }\n interface IError {\n name: string;\n explore: IExplore;\n messages: string[];\n }\n const analyze: (checker: ts.TypeChecker, context?: ts.TransformationContext) => (options: IOptions) => (collection: MetadataCollection) => (type: ts.Type | null) => ValidationPipe;\n}\n'],["file:///node_modules/typia/lib/factories/MetadataTypeTagFactory.d.ts",'import { IMetadataTypeTag } from "../schemas/metadata/IMetadataTypeTag";\nimport { MetadataObject } from "../schemas/metadata/MetadataObject";\nimport { MetadataFactory } from "./MetadataFactory";\nexport declare namespace MetadataTypeTagFactory {\n const analyze: (errors: MetadataFactory.IError[]) => (type: "boolean" | "bigint" | "number" | "string" | "array") => (objects: MetadataObject[], explore: MetadataFactory.IExplore) => IMetadataTypeTag[];\n const validate: (report: (property: string | null) => (msg: string) => false) => (type: "boolean" | "bigint" | "number" | "string" | "array") => (tagList: IMetadataTypeTag[]) => boolean;\n}\n'],["file:///node_modules/typia/lib/factories/NumericRangeFactory.d.ts",'/// \nimport ts from "typescript";\nimport { ProtobufAtomic } from "../typings/ProtobufAtomic";\nexport declare namespace NumericRangeFactory {\n const number: (type: ProtobufAtomic.Numeric) => (input: ts.Expression) => ts.Expression;\n const bigint: (type: ProtobufAtomic.BigNumeric) => (input: ts.Expression) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/factories/ProtobufFactory.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../schemas/metadata/Metadata";\nimport { MetadataCollection } from "./MetadataCollection";\nexport declare namespace ProtobufFactory {\n const metadata: (method: string) => (checker: ts.TypeChecker, context?: ts.TransformationContext) => (collection: MetadataCollection) => (type: ts.Type) => Metadata;\n}\n'],["file:///node_modules/typia/lib/factories/StatementFactory.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace StatementFactory {\n const mut: (name: string, initializer?: ts.Expression) => ts.VariableStatement;\n const constant: (name: string, initializer?: ts.Expression) => ts.VariableStatement;\n const entry: (key: string) => (value: string) => ts.VariableDeclarationList;\n const transpile: (script: string) => ts.ExpressionStatement;\n const block: (expression: ts.Expression) => ts.Block;\n}\n'],["file:///node_modules/typia/lib/factories/TemplateFactory.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace TemplateFactory {\n const generate: (expressions: ts.Expression[]) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/factories/TypeFactory.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace TypeFactory {\n const isFunction: (type: ts.Type) => boolean;\n const getReturnType: (checker: ts.TypeChecker) => (type: ts.Type) => (name: string) => ts.Type | null;\n const getFullName: (checker: ts.TypeChecker) => (type: ts.Type, symbol?: ts.Symbol) => string;\n const keyword: (type: "void" | "any" | "unknown" | "boolean" | "number" | "bigint" | "string") => ts.KeywordTypeNode;\n}\n'],["file:///node_modules/typia/lib/factories/ValueFactory.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace ValueFactory {\n const NULL: () => ts.NullLiteral;\n const UNDEFINED: () => ts.Identifier;\n const BOOLEAN: (value: boolean) => ts.FalseLiteral | ts.TrueLiteral;\n const INPUT: (str?: string) => ts.Identifier;\n const TYPEOF: (input: ts.Expression) => ts.TypeOfExpression;\n}\n'],["file:///node_modules/typia/lib/functional/$any.d.ts","export declare const $any: (val: any) => any;\n"],["file:///node_modules/typia/lib/functional/$clone.d.ts",'import { Primitive } from "../Primitive";\nexport declare const $clone: (value: T) => Primitive;\n'],["file:///node_modules/typia/lib/functional/$convention.d.ts","export declare const $convention: (rename: (str: string) => string) => (input: any) => any;\n"],["file:///node_modules/typia/lib/functional/$dictionary.d.ts",'import { Customizable } from "../typings/Customizable";\nexport declare const $dictionary: Map (value: any) => boolean>>;\n'],["file:///node_modules/typia/lib/functional/$every.d.ts",'import { TypeGuardError } from "../TypeGuardError";\nexport declare const $every: (array: T[], pred: (value: T, i: number) => null | Omit) => null | Omit;\n'],["file:///node_modules/typia/lib/functional/$guard.d.ts","export {};\n"],["file:///node_modules/typia/lib/functional/$HeadersReader/$HeadersReader.d.ts","export declare const boolean: (value: string | undefined) => string | boolean | undefined;\nexport declare const bigint: (value: string | undefined) => string | bigint | undefined;\nexport declare const number: (value: string | undefined) => string | number | undefined;\nexport declare const string: (value: string | undefined) => string | undefined;\n"],["file:///node_modules/typia/lib/functional/$HeadersReader/index.d.ts",'export * as $HeadersReader from "./$HeadersReader";\n'],["file:///node_modules/typia/lib/functional/$is_between.d.ts","export declare const $is_between: (value: number, minimum: number, maximum: number) => boolean;\n"],["file:///node_modules/typia/lib/functional/$join.d.ts","export declare const $join: (str: string) => string;\n"],["file:///node_modules/typia/lib/functional/$number.d.ts","export declare const $number: (value: number) => number;\n"],["file:///node_modules/typia/lib/functional/$ParameterReader/$ParameterReader.d.ts","export declare const boolean: (value: string) => string | boolean | null;\nexport declare const bigint: (value: string) => string | bigint | null;\nexport declare const number: (value: string) => string | number | null;\nexport declare const string: (value: string) => string | null;\n"],["file:///node_modules/typia/lib/functional/$ParameterReader/index.d.ts",'export * as $ParameterReader from "./$ParameterReader";\n'],["file:///node_modules/typia/lib/functional/$ProtobufReader.d.ts",'import { ProtobufWire } from "../programmers/helpers/ProtobufWire";\nexport declare class $ProtobufReader {\n /**\n * Read buffer\n */\n private buf;\n /**\n * Read buffer pointer.\n */\n private ptr;\n /**\n * DataView for buffer.\n */\n private view;\n constructor(buf: Uint8Array);\n index(): number;\n size(): number;\n uint32(): number;\n int32(): number;\n sint32(): number;\n uint64(): bigint;\n int64(): bigint;\n sint64(): bigint;\n bool(): boolean;\n float(): number;\n double(): number;\n bytes(): Uint8Array;\n string(): string;\n skip(length: number): void;\n skipType(wireType: ProtobufWire): void;\n private varint32;\n private varint64;\n private u8;\n private u8n;\n}\n'],["file:///node_modules/typia/lib/functional/$ProtobufSizer.d.ts",'import { IProtobufWriter } from "./IProtobufWriter";\nexport declare class $ProtobufSizer implements IProtobufWriter {\n /**\n * Total length.\n */\n len: number;\n /**\n * Position stack.\n */\n readonly pos: Array;\n /**\n * Variable length list.\n */\n readonly varlen: Array;\n /**\n * Variable length index stack.\n */\n readonly varlenidx: Array;\n constructor(length?: number);\n bool(): void;\n int32(value: number): void;\n sint32(value: number): void;\n uint32(value: number): void;\n int64(value: bigint | number): void;\n sint64(value: bigint | number): void;\n uint64(value: bigint | number): void;\n float(_value: number): void;\n double(_value: number): void;\n bytes(value: Uint8Array): void;\n string(value: string): void;\n fork(): void;\n ldelim(): void;\n reset(): void;\n private varint32;\n private varint64;\n}\n'],["file:///node_modules/typia/lib/functional/$ProtobufWriter.d.ts",'import { $ProtobufSizer } from "./$ProtobufSizer";\nimport { IProtobufWriter } from "./IProtobufWriter";\nexport declare class $ProtobufWriter implements IProtobufWriter {\n /**\n * Related sizer\n */\n private readonly sizer;\n /**\n * Current pointer.\n */\n private ptr;\n /**\n * Protobuf buffer.\n */\n private buf;\n /**\n * DataView for buffer.\n */\n private view;\n /**\n * Index in varlen array from sizer.\n */\n private varlenidx;\n constructor(sizer: $ProtobufSizer);\n buffer(): Uint8Array;\n bool(value: boolean): void;\n byte(value: number): void;\n int32(value: number): void;\n sint32(value: number): void;\n uint32(value: number): void;\n sint64(value: number | bigint): void;\n int64(value: number | bigint): void;\n uint64(value: number | bigint): void;\n float(val: number): void;\n double(val: number): void;\n bytes(value: Uint8Array): void;\n string(value: string): void;\n fork(): void;\n ldelim(): void;\n finish(): Uint8Array;\n reset(): void;\n private variant32;\n private variant64;\n private varlen;\n}\n'],["file:///node_modules/typia/lib/functional/$QueryReader/$QueryReader.d.ts","export declare const boolean: (str: string | null) => boolean | null | undefined;\nexport declare const number: (str: string | null) => number | null | undefined;\nexport declare const bigint: (str: string | null) => bigint | null | undefined;\nexport declare const string: (str: string | null) => string | null | undefined;\nexport declare const params: (input: string | URLSearchParams) => URLSearchParams;\nexport declare const array: (input: any[], alternative: null | undefined) => any[] | null | undefined;\n"],["file:///node_modules/typia/lib/functional/$QueryReader/index.d.ts",'export * as $QueryReader from "./$QueryReader";\n'],["file:///node_modules/typia/lib/functional/$report.d.ts",'import { IValidation } from "../IValidation";\nexport declare const $report: (array: IValidation.IError[]) => (exceptable: boolean, error: IValidation.IError) => false;\n'],["file:///node_modules/typia/lib/functional/$rest.d.ts","export declare const $rest: (str: string) => string;\n"],["file:///node_modules/typia/lib/functional/$stoll.d.ts","export declare const $is_bigint_string: (str: string) => boolean;\n"],["file:///node_modules/typia/lib/functional/$string.d.ts","export {};\n"],["file:///node_modules/typia/lib/functional/$strlen.d.ts","export declare const $strlen: (s: string) => number;\n"],["file:///node_modules/typia/lib/functional/$tail.d.ts","export {};\n"],["file:///node_modules/typia/lib/functional/$throws.d.ts",'import { TypeGuardError } from "../TypeGuardError";\nexport declare const $throws: (method: string) => (props: Pick) => never;\n'],["file:///node_modules/typia/lib/functional/$varint.d.ts","export declare function $varint_decode_i32(buf: Uint8Array, offset: number): [value: number, offset: number];\nexport declare function $varint_decode_u32(buf: Uint8Array, offset: number): [value: number, offset: number];\nexport declare function $varint_decode_i64(buf: Uint8Array, offset: number): [value: bigint, offset: number];\nexport declare function $varint_decode_u64(buf: Uint8Array, offset: number): [value: bigint, offset: number];\nexport declare function $varint_encode(dst: Uint8Array, offset: number, value: number): number;\nexport declare function $varint_encode(dst: Uint8Array, offset: number, value: bigint): number;\n"],["file:///node_modules/typia/lib/functional/$zigzag.d.ts","export declare function $zigzag_encode(value: number): number;\nexport declare function $zigzag_encode(value: bigint): bigint;\nexport declare function $zigzag_decode(value: number): number;\nexport declare function $zigzag_decode(value: bigint): bigint;\n"],["file:///node_modules/typia/lib/functional/IProtobufWriter.d.ts","export interface IProtobufWriter {\n bool(value: boolean): void;\n int32(value: number): void;\n sint32(value: number): void;\n uint32(value: number): void;\n int64(value: bigint | number): void;\n sint64(value: bigint | number): void;\n uint64(value: bigint | number): void;\n float(value: number): void;\n double(value: number): void;\n bytes(value: Uint8Array): void;\n string(value: string): void;\n fork(): void;\n ldelim(): void;\n}\n"],["file:///node_modules/typia/lib/functional/is.d.ts","export {};\n"],["file:///node_modules/typia/lib/functional/Namespace/http.d.ts",'import { $HeadersReader } from "../$HeadersReader";\nimport { $ParameterReader } from "../$ParameterReader";\nimport { $QueryReader } from "../$QueryReader";\nexport declare const query: () => typeof $QueryReader;\nexport declare const headers: () => typeof $HeadersReader;\nexport declare const parameter: () => typeof $ParameterReader;\n'],["file:///node_modules/typia/lib/functional/Namespace/index.d.ts",'import { RandomGenerator } from "../../utils/RandomGenerator";\nimport { IValidation } from "../../IValidation";\nimport { TypeGuardError } from "../../TypeGuardError";\nimport { is } from "../is";\nexport * as json from "./json";\nexport * as http from "./http";\nexport * as notations from "./notations";\nexport * as misc from "./misc";\nexport * as protobuf from "./protobuf";\nexport { is };\nexport declare const assert: (method: string) => {\n join: (str: string) => string;\n every: (array: T[], pred: (value: T, i: number) => Omit | null) => Omit | null;\n guard: (exceptionable: boolean, props: Omit) => boolean;\n predicate: (matched: boolean, exceptionable: boolean, closure: () => Omit) => boolean;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\nexport declare const validate: () => {\n join: (str: string) => string;\n report: (array: IValidation.IError[]) => (exceptable: boolean, error: IValidation.IError) => false;\n predicate: (res: IValidation) => (matched: boolean, exceptionable: boolean, closure: () => IValidation.IError) => boolean;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\nexport declare const random: () => {\n generator: typeof RandomGenerator;\n pick: (array: T[]) => T;\n};\n'],["file:///node_modules/typia/lib/functional/Namespace/json.d.ts",'export declare const stringify: (method: string) => {\n number: (value: number) => number;\n string: (str: string) => string;\n tail: (str: string) => string;\n rest: (str: string) => string;\n throws: (props: Pick) => never;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\n'],["file:///node_modules/typia/lib/functional/Namespace/misc.d.ts",'export declare const clone: (method: string) => {\n throws: (props: Pick) => never;\n any: (val: any) => any;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\nexport declare const prune: (method: string) => {\n throws: (props: Pick) => never;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\n'],["file:///node_modules/typia/lib/functional/Namespace/notations.d.ts",'export declare const camel: (method: string) => {\n any: (input: any) => any;\n throws: (props: Pick) => never;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\nexport declare const pascal: (method: string) => {\n any: (input: any) => any;\n throws: (props: Pick) => never;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\nexport declare const snake: (method: string) => {\n any: (input: any) => any;\n throws: (props: Pick) => never;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\n'],["file:///node_modules/typia/lib/functional/Namespace/protobuf.d.ts",'import { $ProtobufReader } from "../$ProtobufReader";\nimport { $ProtobufSizer } from "../$ProtobufSizer";\nimport { $ProtobufWriter } from "../$ProtobufWriter";\nexport declare const decode: (method: string) => {\n Reader: typeof $ProtobufReader;\n throws: (props: Pick) => never;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\nexport declare const encode: (method: string) => {\n Sizer: typeof $ProtobufSizer;\n Writer: typeof $ProtobufWriter;\n strlen: (s: string) => number;\n throws: (props: Pick) => never;\n is_between: (value: number, minimum: number, maximum: number) => boolean;\n is_bigint_string: (str: string) => boolean;\n};\n'],["file:///node_modules/typia/lib/http.d.ts",'import { Atomic } from "./typings/Atomic";\nimport { IValidation } from "./IValidation";\nimport { Resolved } from "./Resolved";\n/**\n * > You must configure the generic argument `T`.\n *\n * URL query decoder.\n *\n * `typia.http.query()` is a function decoding a query string or an `URLSearchParams`\n * instance, with automatic type casting to the expected type. When property type be\n * defined as `boolean` or `number` type, `typia.http.query()` will cast the value to\n * the expected type when decoding.\n *\n * By the way, as URL query is not enough to express complex data structures,\n * `typia.http.query()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 4. By the way, union type never be not allowed\n *\n * Also, `typia.http.query()` function does not perform validation about the decoded\n * value. Therefore, if you can\'t sure that input data is following the `T` type,\n * it would better to call one of below functions intead.\n *\n * - {@link assertQuery}\n * - {@link isQuery}\n * - {@link validateQuery}\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded query object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function query(): never;\n/**\n * URL query decoder.\n *\n * `typia.http.query()` is a function decoding a query string or an `URLSearchParams`\n * instance, with automatic type casting to the expected type. When property type be\n * defined as `boolean` or `number` type, `typia.http.query()` will cast the value to\n * the expected type when decoding.\n *\n * By the way, as URL query is not enough to express complex data structures,\n * `typia.http.query()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 4. By the way, union type never be not allowed\n *\n * Also, `typia.http.query()` function does not perform validation about the decoded\n * value. Therefore, if you can\'t sure that input data is following the `T` type,\n * it would better to call one of below functions intead.\n *\n * - {@link assertQuery}\n * - {@link isQuery}\n * - {@link validateQuery}\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded query object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function query(input: string | URLSearchParams): Resolved;\ndeclare const queryPure: typeof query;\nexport { queryPure as query };\n/**\n * > You must configure the generic argument `T`.\n *\n * URL query decoder with type assertion.\n *\n * `typia.http.assertQuery()` is a function decoding a query string or an\n * `URLSearchParams` instance, with automatic type casting to the expected type.\n * When property type be defined as `boolean` or `number` type,\n * `typia.http.assertQuery()` will cast the value to the expected type when decoding.\n *\n * Also, after decoding, `typia.http.assertQuery()` performs type assertion to the\n * decoded value by combining with {@link assert} function. Therefore, when the\n * decoded value is not following the `T` type, {@link TypeGuardError} would be\n * thrown.\n *\n * By the way, as URL query is not enough to express complex data structures,\n * `typia.http.assertQuery()` function has some limitations. If target type `T` is\n * notfollowing those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 4. By the way, union type never be not allowed\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded query object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertQuery(): never;\n/**\n * URL query decoder with type assertion.\n *\n * `typia.http.assertQuery()` is a function decoding a query string or an\n * `URLSearchParams` instance, with automatic type casting to the expected type.\n * When property type be defined as `boolean` or `number` type,\n * `typia.http.assertQuery()` will cast the value to the expected type when decoding.\n *\n * Also, after decoding, `typia.http.assertQuery()` performs type assertion to the\n * decoded value by combining with {@link assert} function. Therefore, when the\n * decoded value is not following the `T` type, {@link TypeGuardError} would be\n * thrown.\n *\n * By the way, as URL query is not enough to express complex data structures,\n * `typia.http.assertQuery()` function has some limitations. If target type `T` is\n * notfollowing those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 4. By the way, union type never be not allowed\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded query object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertQuery(input: string | URLSearchParams): Resolved;\ndeclare const assertQueryPure: typeof assertQuery;\nexport { assertQueryPure as assertQuery };\n/**\n * > You must configure the generic argument `T`.\n *\n * URL query decoder with type checking.\n *\n * `typia.http.isQuery()` is a function decoding a query string or an\n * `URLSearchParams` instance, with automatic type casting to the expected type.\n * When property type be defined as `boolean` or `number` type,\n * `typia.http.isQuery()` will cast the value to the expected type when decoding.\n *\n * Also, after decoding, `typia.http.isQuery()` performs type checking to the\n * decoded value by combining with {@link is} function. Therefore, when the\n * decoded value is not following the `T` type, `null` value would be returned.\n *\n * By the way, as URL query is not enough to express complex data structures,\n * `typia.http.isQuery()` function has some limitations. If target type `T` is\n * notfollowing those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 4. By the way, union type never be not allowed\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded query object or `null` value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isQuery(): never;\n/**\n * URL query decoder with type checking.\n *\n * `typia.http.isQuery()` is a function decoding a query string or an\n * `URLSearchParams` instance, with automatic type casting to the expected type.\n * When property type be defined as `boolean` or `number` type,\n * `typia.http.isQuery()` will cast the value to the expected type when decoding.\n *\n * Also, after decoding, `typia.http.isQuery()` performs type checking to the\n * decoded value by combining with {@link is} function. Therefore, when the\n * decoded value is not following the `T` type, `null` value would be returned.\n *\n * By the way, as URL query is not enough to express complex data structures,\n * `typia.http.isQuery()` function has some limitations. If target type `T` is\n * notfollowing those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 4. By the way, union type never be not allowed\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded query object or `null` value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isQuery(input: string | URLSearchParams): Resolved | null;\ndeclare const isQueryPure: typeof isQuery;\nexport { isQueryPure as isQuery };\n/**\n * > You must configure the generic argument `T`.\n *\n * URL query decoder with type validation.\n *\n * `typia.http.validateQuery()` is a function decoding a query string or an\n * `URLSearchParams` instance, with automatic type casting to the expected type.\n * When property type be defined as `boolean` or `number` type,\n * `typia.http.validateQuery()` will cast the value to the expected type when decoding.\n *\n * Also, after decoding, `typia.http.validateQuery()` performs type validation to the\n * decoded value by combining with {@link validate} function. Therefore, when the\n * decoded value is not following the `T` type, {@link IValidation.IFailure} would\n * be returned. Otherwise, {@link IValidation.ISuccess} would be returned.\n *\n * By the way, as URL query is not enough to express complex data structures,\n * `typia.http.validateQuery()` function has some limitations. If target type `T` is\n * notfollowing those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 4. By the way, union type never be not allowed\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Validation result with decoded query object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateQuery(): never;\n/**\n * URL query decoder with type validation.\n *\n * `typia.http.validateQuery()` is a function decoding a query string or an\n * `URLSearchParams` instance, with automatic type casting to the expected type.\n * When property type be defined as `boolean` or `number` type,\n * `typia.http.validateQuery()` will cast the value to the expected type when decoding.\n *\n * Also, after decoding, `typia.http.validateQuery()` performs type validation to the\n * decoded value by combining with {@link validate} function. Therefore, when the\n * decoded value is not following the `T` type, {@link IValidation.IFailure} would\n * be returned. Otherwise, {@link IValidation.ISuccess} would be returned.\n *\n * By the way, as URL query is not enough to express complex data structures,\n * `typia.http.validateQuery()` function has some limitations. If target type `T` is\n * notfollowing those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 4. By the way, union type never be not allowed\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Validation result with decoded query object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateQuery(input: string | URLSearchParams): IValidation>;\ndeclare const validateQueryPure: typeof validateQuery;\nexport { validateQueryPure as validateQuery };\n/**\n * > You must configure the generic argument `T`.\n *\n * Headers decoder (for express and fastify).\n *\n * `typia.http.headers()` is a function decoding an header instance, with automatic\n * type casting to the expected type. When property type be defined as `boolean` or\n * `number` type, `typia.http.headers()` will cast the value to the expected type.\n *\n * By the way, as HTTP headers are not enough to express complex data structures,\n * `typia.http.headers()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Property key must be lower case\n * 4. Property value cannot be `null`, but `undefined` is possible\n * 5. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 6. By the way, union type never be not allowed\n * 7. Property `set-cookie` must be array type\n * 8. Those properties cannot be array type\n * - age\n * - authorization\n * - content-length\n * - content-type\n * - etag\n * - expires\n * - from\n * - host\n * - if-modified-since\n * - if-unmodified-since\n * - last-modified\n * - location\n * - max-forwards\n * - proxy-authorization\n * - referer\n * - retry-after\n * - server\n * - user-agent\n *\n * Also, `typia.http.headers()` function does not perform validation about the decoded\n * value. Therefore, if you can\'t sure that input data is following the `T` type,\n * it would better to call one of below functions intead.\n *\n * - {@link assertHeaders}\n * - {@link isHeaders}\n * - {@link validateHeaders}\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded headers object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function headers(): never;\n/**\n * Headers decoder (for express and fastify).\n *\n * `typia.http.headers()` is a function decoding an header instance, with automatic\n * type casting to the expected type. When property type be defined as `boolean` or\n * `number` type, `typia.http.headers()` will cast the value to the expected type.\n *\n * By the way, as HTTP headers are not enough to express complex data structures,\n * `typia.http.headers()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Property key must be lower case\n * 4. Property value cannot be `null`, but `undefined` is possible\n * 5. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 6. By the way, union type never be not allowed\n * 7. Property `set-cookie` must be array type\n * 8. Those properties cannot be array type\n * - age\n * - authorization\n * - content-length\n * - content-type\n * - etag\n * - expires\n * - from\n * - host\n * - if-modified-since\n * - if-unmodified-since\n * - last-modified\n * - location\n * - max-forwards\n * - proxy-authorization\n * - referer\n * - retry-after\n * - server\n * - user-agent\n *\n * Also, `typia.http.headers()` function does not perform validation about the decoded\n * value. Therefore, if you can\'t sure that input data is following the `T` type,\n * it would better to call one of below functions intead.\n *\n * - {@link assertHeaders}\n * - {@link isHeaders}\n * - {@link validateHeaders}\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded headers object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function headers(input: Record): Resolved;\ndeclare const headersPure: typeof headers;\nexport { headersPure as headers };\n/**\n * > You must configure the generic argument `T`.\n *\n * Headers decoder with type assertion (for express and fastify).\n *\n * `typia.http.assertHeaders()` is a function decoding an header instance, with\n * automatic type casting to the expected type. When property type be defined as\n * `boolean` or `number` type, `typia.http.headers()` will cast the value to the\n * expected type.\n *\n * Also, after decoding, `typia.http.assertHeaders()` performs type assertion to the\n * decoded value by combining with {@link assert} function. Therefore, when the\n * decoded value is not following the `T` type, {@link TypeGuardError} would be\n * thrown.\n *\n * By the way, as HTTP headers are not enough to express complex data structures,\n * `typia.http.headers()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Property key must be lower case\n * 4. Property value cannot be `null`, but `undefined` is possible\n * 5. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 6. By the way, union type never be not allowed\n * 7. Property `set-cookie` must be array type\n * 8. Those properties cannot be array type\n * - age\n * - authorization\n * - content-length\n * - content-type\n * - etag\n * - expires\n * - from\n * - host\n * - if-modified-since\n * - if-unmodified-since\n * - last-modified\n * - location\n * - max-forwards\n * - proxy-authorization\n * - referer\n * - retry-after\n * - server\n * - user-agent\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded headers object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertHeaders(): never;\n/**\n * Headers decoder with type assertion (for express and fastify).\n *\n * `typia.http.assertHeaders()` is a function decoding an header instance, with\n * automatic type casting to the expected type. When property type be defined as\n * `boolean` or `number` type, `typia.http.headers()` will cast the value to the\n * expected type.\n *\n * Also, after decoding, `typia.http.assertHeaders()` performs type assertion to the\n * decoded value by combining with {@link assert} function. Therefore, when the\n * decoded value is not following the `T` type, {@link TypeGuardError} would be\n * thrown.\n *\n * By the way, as HTTP headers are not enough to express complex data structures,\n * `typia.http.headers()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Property key must be lower case\n * 4. Property value cannot be `null`, but `undefined` is possible\n * 5. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 6. By the way, union type never be not allowed\n * 7. Property `set-cookie` must be array type\n * 8. Those properties cannot be array type\n * - age\n * - authorization\n * - content-length\n * - content-type\n * - etag\n * - expires\n * - from\n * - host\n * - if-modified-since\n * - if-unmodified-since\n * - last-modified\n * - location\n * - max-forwards\n * - proxy-authorization\n * - referer\n * - retry-after\n * - server\n * - user-agent\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded headers object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertHeaders(input: Record): Resolved;\ndeclare const assertHeadersPure: typeof assertHeaders;\nexport { assertHeadersPure as assertHeaders };\n/**\n * > You must configure the generic argument `T`.\n *\n * Headers decoder with type checking (for express and fastify).\n *\n * `typia.http.isHeaders()` is a function decoding an header instance, with\n * automatic type casting to the expected type. When property type be defined as\n * `boolean` or `number` type, `typia.http.headers()` will cast the value to the\n * expected type.\n *\n * Also, after decoding, `typia.http.isHeaders()` performs type checking to the\n * decoded value by combining with {@link is} function. Therefore, when the\n * decoded value is not following the `T` type, `null` value would be returned.\n *\n * By the way, as HTTP headers are not enough to express complex data structures,\n * `typia.http.headers()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Property key must be lower case\n * 4. Property value cannot be `null`, but `undefined` is possible\n * 5. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 6. By the way, union type never be not allowed\n * 7. Property `set-cookie` must be array type\n * 8. Those properties cannot be array type\n * - age\n * - authorization\n * - content-length\n * - content-type\n * - etag\n * - expires\n * - from\n * - host\n * - if-modified-since\n * - if-unmodified-since\n * - last-modified\n * - location\n * - max-forwards\n * - proxy-authorization\n * - referer\n * - retry-after\n * - server\n * - user-agent\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded headers object or `null` value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isHeaders(): never;\n/**\n * > You must configure the generic argument `T`.\n *\n * Headers decoder with type checking (for express and fastify).\n *\n * `typia.http.isHeaders()` is a function decoding an header instance, with\n * automatic type casting to the expected type. When property type be defined as\n * `boolean` or `number` type, `typia.http.headers()` will cast the value to the\n * expected type.\n *\n * Also, after decoding, `typia.http.isHeaders()` performs type checking to the\n * decoded value by combining with {@link is} function. Therefore, when the\n * decoded value is not following the `T` type, `null` value would be returned.\n *\n * By the way, as HTTP headers are not enough to express complex data structures,\n * `typia.http.headers()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Property key must be lower case\n * 4. Property value cannot be `null`, but `undefined` is possible\n * 5. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 6. By the way, union type never be not allowed\n * 7. Property `set-cookie` must be array type\n * 8. Those properties cannot be array type\n * - age\n * - authorization\n * - content-length\n * - content-type\n * - etag\n * - expires\n * - from\n * - host\n * - if-modified-since\n * - if-unmodified-since\n * - last-modified\n * - location\n * - max-forwards\n * - proxy-authorization\n * - referer\n * - retry-after\n * - server\n * - user-agent\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded headers object or `null` value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isHeaders(input: Record): Resolved | null;\ndeclare const isHeadersPure: typeof isHeaders;\nexport { isHeadersPure as isHeaders };\n/**\n * > You must configure the generic argument `T`.\n *\n * Headers decoder with type validation (for express and fastify).\n *\n * `typia.http.validateHeaders()` is a function decoding an header instance, with\n * automatic type casting to the expected type. When property type be defined as\n * `boolean` or `number` type, `typia.http.headers()` will cast the value to the\n * expected type.\n *\n * Also, after decoding, `typia.http.validateHeaders()` performs type assertion to the\n * decoded value by combining with {@link validate} function. Therefore, when the\n * decoded value is not following the `T` type, {@link IValidation.IError} would be\n * returned. Otherwise, {@link IValidation.ISuccess} be returned.\n *\n * By the way, as HTTP headers are not enough to express complex data structures,\n * `typia.http.headers()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Property key must be lower case\n * 4. Property value cannot be `null`, but `undefined` is possible\n * 5. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 6. By the way, union type never be not allowed\n * 7. Property `set-cookie` must be array type\n * 8. Those properties cannot be array type\n * - age\n * - authorization\n * - content-length\n * - content-type\n * - etag\n * - expires\n * - from\n * - host\n * - if-modified-since\n * - if-unmodified-since\n * - last-modified\n * - location\n * - max-forwards\n * - proxy-authorization\n * - referer\n * - retry-after\n * - server\n * - user-agent\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded headers object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateHeaders(): never;\n/**\n * Headers decoder with type validation (for express and fastify).\n *\n * `typia.http.validateHeaders()` is a function decoding an header instance, with\n * automatic type casting to the expected type. When property type be defined as\n * `boolean` or `number` type, `typia.http.headers()` will cast the value to the\n * expected type.\n *\n * Also, after decoding, `typia.http.validateHeaders()` performs type assertion to the\n * decoded value by combining with {@link validate} function. Therefore, when the\n * decoded value is not following the `T` type, {@link IValidation.IError} would be\n * returned. Otherwise, {@link IValidation.ISuccess} be returned.\n *\n * By the way, as HTTP headers are not enough to express complex data structures,\n * `typia.http.headers()` function has some limitations. If target type `T` is not\n * following those restrictions, compilation errors would be occured.\n *\n * 1. Type `T` must be an object type\n * 2. Do not allow dynamic property\n * 3. Property key must be lower case\n * 4. Property value cannot be `null`, but `undefined` is possible\n * 5. Only `boolean`, `bigint`, `number`, `string` or their array types are allowed\n * 6. By the way, union type never be not allowed\n * 7. Property `set-cookie` must be array type\n * 8. Those properties cannot be array type\n * - age\n * - authorization\n * - content-length\n * - content-type\n * - etag\n * - expires\n * - from\n * - host\n * - if-modified-since\n * - if-unmodified-since\n * - last-modified\n * - location\n * - max-forwards\n * - proxy-authorization\n * - referer\n * - retry-after\n * - server\n * - user-agent\n *\n * @template T Expected type of decoded value\n * @param input Query string or URLSearchParams instance\n * @returns Decoded headers object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateHeaders(input: Record): IValidation>;\ndeclare const validateHeadersPure: typeof validateHeaders;\nexport { validateHeadersPure as validateHeaders };\n/**\n * > You must configure the generic argument `T`.\n *\n * URL path parameter decoder.\n *\n * `typia.http.parameter()` is a function decoding a path parameter, with automatic\n * type casting to the expected type. When type `T` has beeen defined as `boolean` or\n * `number` type, `typia.http.parameter()` will cast the value to the expected type.\n *\n * Also, `typia.http.parameter()` performs type assertion to the decoded value by\n * combining with {@link assert} function. Therefore, when the decoded value is not\n * following the `T` type, {@link TypeGuardError} would be thrown.\n *\n * @template T Expected type of decoded value\n * @param input Path parameter string\n * @returns Decoded path parameter value\n */\ndeclare function parameter(): never;\n/**\n * URL path parameter decoder.\n *\n * `typia.http.parameter()` is a function decoding a path parameter, with automatic\n * type casting to the expected type. When type `T` has beeen defined as `boolean` or\n * `number` type, `typia.http.parameter()` will cast the value to the expected type.\n *\n * Also, `typia.http.parameter()` performs type assertion to the decoded value by\n * combining with {@link assert} function. Therefore, when the decoded value is not\n * following the `T` type, {@link TypeGuardError} would be thrown.\n *\n * @template T Expected type of decoded value\n * @param input Path parameter string\n * @returns Decoded path parameter value\n */\ndeclare function parameter(input: string): Resolved;\ndeclare const parameterPure: typeof parameter;\nexport { parameterPure as parameter };\n/**\n * Creates a reusable {@link query} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the query object\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createQuery(): never;\n/**\n * Creates a reusable {@link query} function.\n *\n * @template T The type of the query object\n * @returns A reusable `query` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createQuery(): (input: string | URLSearchParams) => T;\ndeclare const createQueryPure: typeof createQuery;\nexport { createQueryPure as createQuery };\n/**\n * Creates a reusable {@link assertQuery} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the query object\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertQuery(): never;\n/**\n * Creates a reusable {@link assertQuery} function.\n *\n * @template T The type of the query object\n * @returns A reusable `assertQuery` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertQuery(): (input: string | URLSearchParams) => T;\ndeclare const createAssertQueryPure: typeof createAssertQuery;\nexport { createAssertQueryPure as createAssertQuery };\n/**\n * Creates a reusable {@link isQuery} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the query object\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsQuery(): never;\n/**\n * Creates a reusable {@link isQuery} function.\n *\n * @template T The type of the query object\n * @returns A reusable `isQuery` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsQuery(): (input: string | URLSearchParams) => T | null;\ndeclare const createIsQueryPure: typeof createIsQuery;\nexport { createIsQueryPure as createIsQuery };\n/**\n * Creates a reusable {@link validateQuery} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the query object\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateQuery(): never;\n/**\n * Creates a reusable {@link validateQuery} function.\n *\n * @template T The type of the query object\n * @returns A reusable `validateQuery` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateQuery(): (input: string | URLSearchParams) => IValidation>;\ndeclare const createValidateQueryPure: typeof createValidateQuery;\nexport { createValidateQueryPure as createValidateQuery };\n/**\n * Creates a reusable {@link headers} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the headers object\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createHeaders(): never;\n/**\n * Creates a reusable {@link headers} function.\n *\n * @template T The type of the headers object\n * @returns A reusable `headers` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createHeaders(): (input: Record) => T;\ndeclare const createHeadersPure: typeof createHeaders;\nexport { createHeadersPure as createHeaders };\n/**\n * Creates a reusable {@link assertHeaders} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the headers object\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertHeaders(): never;\n/**\n * Creates a reusable {@link assertHeaders} function.\n *\n * @template T The type of the headers object\n * @returns A reusable `assertHeaders` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertHeaders(): (input: Record) => T;\ndeclare const createAssertHeadersPure: typeof createAssertHeaders;\nexport { createAssertHeadersPure as createAssertHeaders };\n/**\n * Creates a reusable {@link isHeaders} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the headers object\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsHeaders(): never;\n/**\n * Creates a reusable {@link isHeaders} function.\n *\n * @template T The type of the headers object\n * @returns A reusable `isHeaders` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsHeaders(): (input: Record) => T | null;\ndeclare const createIsHeadersPure: typeof createIsHeaders;\nexport { createIsHeadersPure as createIsHeaders };\n/**\n * Creates a reusable {@link validateHeaders} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the headers object\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateHeaders(): never;\n/**\n * Creates a reusable {@link validateHeaders} function.\n *\n * @template T The type of the headers object\n * @returns A reusable `validateHeaders` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateHeaders(): (input: Record) => IValidation>;\ndeclare const createValidateHeadersPure: typeof createValidateHeaders;\nexport { createValidateHeadersPure as createValidateHeaders };\n/**\n * Creates a reusable {@link parameter} function.\n *\n * @danger You must configure the generic argument `T`\n * @template T The type of the parameter value\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createParameter(): never;\n/**\n * Creates a reusable {@link parameter} function.\n *\n * @template T The type of the parameter value\n * @returns A reusable `parameter` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createParameter(): (input: string) => T;\ndeclare const createParameterPure: typeof createParameter;\nexport { createParameterPure as createParameter };\n'],["file:///node_modules/typia/lib/index.d.ts",'import * as typia from "./module";\nexport default typia;\nexport * from "./module";\n'],["file:///node_modules/typia/lib/IRandomGenerator.d.ts",'import { Customizable } from "./typings/Customizable";\nexport interface IRandomGenerator {\n boolean(): boolean;\n integer(minimum?: number, maximum?: number): number;\n bigint(minimum?: bigint, maximum?: bigint): bigint;\n number(minimum?: number, maximum?: number): number;\n string(length?: number): string;\n array(closure: (index: number) => T, count?: number): T[];\n length(): number;\n pattern(regex: RegExp): string;\n byte(): string;\n password(): string;\n regex(): string;\n uuid(): string;\n email(): string;\n hostname(): string;\n idnEmail(): string;\n idnHostname(): string;\n iri(): string;\n iriReference(): string;\n ipv4(): string;\n ipv6(): string;\n uri(): string;\n uriReference(): string;\n uriTemplate(): string;\n url(): string;\n datetime(minimum?: number, maximum?: number): string;\n date(minimum?: number, maximum?: number): string;\n time(): string;\n duration(): string;\n jsonPointer(): string;\n relativeJsonPointer(): string;\n customs?: IRandomGenerator.CustomMap;\n}\nexport declare namespace IRandomGenerator {\n type CustomMap = {\n [Type in keyof Customizable]?: (tags: ITypeTag[]) => Customizable[Type] | undefined;\n };\n interface ITypeTag {\n name: string;\n kind: string;\n value: any;\n }\n}\n'],["file:///node_modules/typia/lib/IValidation.d.ts","export type IValidation = IValidation.ISuccess | IValidation.IFailure;\nexport declare namespace IValidation {\n interface ISuccess {\n success: true;\n data: T;\n errors: [];\n }\n interface IFailure {\n success: false;\n errors: IError[];\n }\n interface IError {\n path: string;\n expected: string;\n value: any;\n }\n}\n"],["file:///node_modules/typia/lib/json.d.ts",'import { IJsonApplication } from "./schemas/json/IJsonApplication";\nimport { IValidation } from "./IValidation";\nimport { Primitive } from "./Primitive";\n/**\n * > You must configure the generic argument `Types`.\n *\n * JSON Schema Application.\n *\n * Creates a JSON schema application which contains both main JSON schemas and\n * components. Note that, all of the named types are stored in the\n * {@link IJsonApplication.components} property for the `$ref` referencing.\n *\n * Also, `typia.json.application()` has two additional generic arguments.\n *\n * The 1st *Purpose* means the purpose determines the JSON schema definition spec.\n * For an example, `ajv` has an extra property "$recursiveRef" that are not\n * exists in the standard JSON schema definition spec. Otherwise, `swagger`\n * can\'t identify the tuple definition.\n *\n * The next *Surplus* means whether to allow surplus properties starting with\n * `x-typia-` or not. If `true`, the surplus properties like `x-typia-jsDocTags`\n * would be registered into the JSON schema, otherwise, not.\n *\n * @template Types Tuple of target types\n * @template Purpose Purpose of the JSON schema\n * @template Surplus Allow surplus properties starting with `x-typia-` or not\n * @return JSON schema application\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport declare function application(): never;\n/**\n * JSON Schema Application.\n *\n * Creates a JSON schema application which contains both main JSON schemas and\n * components. Note that, all of the named types are stored in the\n * {@link IJsonApplication.components} property for the `$ref` referencing.\n *\n * Also, `typia.json.application()` has two additional generic arguments.\n *\n * The 1st *Purpose* means the purpose determines the JSON schema definition spec.\n * For an example, `ajv` has an extra property "$recursiveRef" that are not\n * exists in the standard JSON schema definition spec. Otherwise, `swagger`\n * can\'t identify the tuple definition.\n *\n * The next *Surplus* means whether to allow surplus properties starting with\n * `x-typia-` or not. If `true`, the surplus properties like `x-typia-jsDocTags`\n * would be registered into the JSON schema, otherwise, not.\n *\n * @template Types Tuple of target types\n * @template Purpose Purpose of the JSON schema\n * @template Surplus Allow surplus properties starting with `x-typia-` or not\n * @return JSON schema application\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport declare function application(): IJsonApplication;\n/**\n * > You must configure the generic argument `T`.\n *\n * Safe `JSON.parse()` function with type assertion.\n *\n * `typia.json.assertParse()` is a combination function of `JSON.parse()` and\n * {@link assert}. Therefore, it convers a JSON (JavaScript Object Notation) string\n * to a `T` typed instance with type assertion.\n *\n * In such reason, when parsed JSON string value is not matched with the type `T`, it\n * throws {@link TypeGuardError}. Otherwise, there\'s no problem on the parsed value,\n * the parsed value would be returned.\n *\n * @template T Expected type of parsed value\n * @param input JSON string\n * @returns Parsed value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertParse(input: string): never;\n/**\n * Safe `JSON.parse()` function with type assertion.\n *\n * `typia.json.assertParse()` is a combination function of `JSON.parse()` and\n * {@link assert}. Therefore, it convers a JSON (JavaScript Object Notation) string\n * to a `T` typed instance with type assertion.\n *\n * In such reason, when parsed JSON string value is not matched with the type `T`,\n * it throws {@link TypeGuardError}. Otherwise, there\'s no problem on the parsed\n * value, the parsed value would be returned.\n *\n * @template T Expected type of parsed value\n * @param input JSON string\n * @returns Parsed value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertParse(input: string): Primitive;\ndeclare const assertParsePure: typeof assertParse;\nexport { assertParsePure as assertParse };\n/**\n * > You must configure the generic argument `T`.\n *\n * Safe `JSON.parse()` function with type checking.\n *\n * `typia.json.isParse()` is a combination function of `JSON.parse()` and {@link is}.\n * Therefore, it convers a JSON (JavaScript Object Notation) string to a `T` typed\n * instance with type checking.\n *\n * In such reason, when parsed JSON string value is not matched with the type `T`, it\n * returns `null` value. Otherwise, there\'s no problem on the parsed value, the parsed\n * value would be returned.\n *\n * @template T Expected type of parsed value\n * @param input JSON string\n * @returns Parsed value when exact type, otherwise `null`\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isParse(input: string): never;\n/**\n * Safe `JSON.parse()` function with type checking.\n *\n * `typia.json.isParse()` is a combination function of `JSON.parse()` and {@link is}.\n * Therefore, it convers a JSON (JavaScript Object Notation) string to a `T` typed\n * instance with type checking.\n *\n * In such reason, when parsed JSON string value is not matched with the type `T`, it\n * returns `null` value. Otherwise, there\'s no problem on the parsed value, the parsed\n * value would be returned.\n *\n * @template T Expected type of parsed value\n * @param input JSON string\n * @returns Parsed value when exact type, otherwise `null`\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isParse(input: string): Primitive | null;\ndeclare const isParsePure: typeof isParse;\nexport { isParsePure as isParse };\n/**\n * > You must configure the generic argument `T`.\n *\n * Safe `JSON.parse()` function with detailed type validation.\n *\n * `typia.json.validateParse()` is a combination function of `JSON.parse()` and\n * {@link validate}. Therefore, it convers a JSON (JavaScript Object Notation) string\n * to a `T` typed instance with detailed type validation.\n *\n * In such reason, when parsed JSON string value is not matched with the type `T`, it\n * returns {@link IValidation.IFailure} value with detailed error reasons. Otherwise,\n * there\'s no problem on the parsed value, the parsed value would be stored in `data`\n * property of the output {@link IValidation.ISuccess} instance.\n *\n * @template T Expected type of parsed value\n * @param input JSON string\n * @returns Validation result with JSON parsed value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateParse(input: string): never;\n/**\n * Safe `JSON.parse()` function with detailed type validation.\n *\n * `typia.json.validateParse()` is a combination function of `JSON.parse()` and\n * {@link validate}. Therefore, it convers a JSON (JavaScript Object Notation) string\n * to a `T` typed instance with detailed type validation.\n *\n * In such reason, when parsed JSON string value is not matched with the type `T`, it\n * returns {@link IValidation.IFailure} value with detailed error reasons. Otherwise,\n * there\'s no problem on the parsed value, the parsed value would be stored in `data`\n * property of the output {@link IValidation.ISuccess} instance.\n *\n * @template T Expected type of parsed value\n * @param input JSON string\n * @returns Validation result with JSON parsed value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateParse(input: string): IValidation>;\ndeclare const validateParsePure: typeof validateParse;\nexport { validateParsePure as validateParse };\n/**\n * 8x faster `JSON.stringify()` function.\n *\n * Converts an input value to a JSON (JavaScript Object Notation) string, about 8x\n * faster than the native `JSON.stringify()` function. The 5x faster principle is\n * because it writes an optimized JSON conversion plan, only for the type `T`.\n *\n * For reference, this `typia.json.stringify()` does not validate the input value type.\n * It just believes that the input value is following the type `T`. Therefore, if you\n * can\'t ensure the input value type, it would be better to call one of below\n * functions instead.\n *\n * - {@link assertStringify}\n * - {@link isStringify}\n * - {@link validateStringify}\n *\n * @template T Type of the input value\n * @param input A value to be converted\n * @return JSON string value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function stringify(input: T): string;\ndeclare const stringifyPure: typeof stringify;\nexport { stringifyPure as stringify };\n/**\n * 5x faster `JSON.stringify()` function with type assertion.\n *\n * `typia.json.assertStringify()` is a combination function of {@link assert} and\n * {@link stringify}. Therefore, it converts an input value to\n * JSON (JavaScript Object Notation) string, with type assertion.\n *\n * In such reason, when `input` value is not matched with the type `T`, it throws an\n * {@link TypeGuardError}. Otherwise, there\'s no problem on the `input` value, JSON\n * string would be returned.\n *\n * For reference, with type assertion, it is even 5x times faster than the native\n * `JSON.stringify()` function. So, just enjoy the safe and fast JSON conversion\n * with confidence.\n *\n * @template T Type of the input value\n * @param input A value to be asserted and converted\n * @return JSON string value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertStringify(input: T): string;\n/**\n * 5x faster `JSON.stringify()` function with type assertion.\n *\n * `typia.json.assertStringify()` is a combination function of {@link assert} and\n * {@link stringify}. Therefore, it converts an input value to\n * JSON (JavaScript Object Notation) string, with type assertion.\n *\n * In such reason, when `input` value is not matched with the type `T`, it throws an\n * {@link TypeGuardError}. Otherwise, there\'s no problem on the `input` value, JSON\n * string would be returned.\n *\n * For reference, with type assertion, it is even 5x times faster than the native\n * `JSON.stringify()` function. So, just enjoy the safe and fast JSON conversion\n * with confidence.\n *\n * @template T Type of the input value\n * @param input A value to be asserted and converted\n * @return JSON string value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertStringify(input: T): unknown;\ndeclare const assertStringifyPure: typeof assertStringify;\nexport { assertStringifyPure as assertStringify };\n/**\n * 7x faster `JSON.stringify()` function with type checking.\n *\n * `typia.json.stringify()` is a combination function of {@link is} and\n * {@link stringify}. Therefore, it converts an input value to JSON\n * (JavaScript Object Notation) string, with type checking.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * `null` value. Otherwise, there\'s no problem on the `input` value, JSON string\n * would be returned.\n *\n * For reference, with type checking, it is even 7x times faster than the native\n * `JSON.stringify()` function. So, just enjoy the safe and fast JSON conversion\n * with confidence.\n *\n * @template T Type of the input value\n * @param input A value to be checked and converted\n * @return JSON string value when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isStringify(input: T): string | null;\n/**\n * 7x faster `JSON.stringify()` function with type checking.\n *\n * `typia.json.isStringify()` is a combination function of {@link is} and\n * {@link stringify}. Therefore, it converts an input value to JSON\n * (JavaScript Object Notation) string, with type checking.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * `null` value. Otherwise, there\'s no problem on the `input` value, JSON string\n * would be returned.\n *\n * For reference, with type checking, it is even 7x times faster than the native\n * `JSON.stringify()` function. So, just enjoy the safe and fast JSON conversion\n * with confidence.\n *\n * @template T Type of the input value\n * @param input A value to be checked and converted\n * @return JSON string value when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isStringify(input: unknown): string | null;\ndeclare const isStringifyPure: typeof isStringify;\nexport { isStringifyPure as isStringify };\n/**\n * 5x faster `JSON.stringify()` function with detailed type validation.\n *\n * `typia.json.validateStringify()` is a combination function of {@link validate} and\n * {@link stringify}. Therefore, it converts an input value to JSON (JavaScript Object\n * Notation) string, with detailed type validation.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * {@link IValidation.IFailure} value with detailed error reasons. Otherwise,\n * there\'s no problem on the `input` value, JSON string would be stored in `data`\n * property of the output {@link IValidation.ISuccess} instance.\n *\n * For reference, with detailed type validation, it is even 5x times faster than the\n * native `JSON.stringify()` function. So, just enjoy the safe and fast JSON\n * conversion with confidence.\n *\n * @template T Type of the input value\n * @param input A value to be checked and converted\n * @returns Validation result with JSON string value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateStringify(input: T): IValidation;\n/**\n * 5x faster `JSON.stringify()` function with detailed type validation.\n *\n * `typia.json.validateStringify()` is a combination function of {@link validate} and\n * {@link stringify}. Therefore, it converts an input value to JSON (JavaScript Object\n * Notation) string, with detailed type validation.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * {@link IValidation.IFailure} value with detailed error reasons. Otherwise,\n * there\'s no problem on the `input` value, JSON string would be stored in `data`\n * property of the output {@link IValidation.ISuccess} instance.\n *\n * For reference, with detailed type validation, it is even 5x times faster than the\n * native `JSON.stringify()` function. So, just enjoy the safe and fast JSON\n * conversion with confidence.\n *\n * @template T Type of the input value\n * @param input A value to be checked and converted\n * @returns Validation result with JSON string value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateStringify(input: unknown): IValidation;\ndeclare const validateStringifyPure: typeof validateStringify;\nexport { validateStringifyPure as validateStringify };\n/**\n * Creates a reusable {@link isParse} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsParse(): never;\n/**\n * Creates a reusable {@link isParse} function.\n *\n * @template T Expected type of parsed value\n * @returns A reusable `isParse` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsParse(): (input: string) => Primitive | null;\ndeclare const createIsParsePure: typeof createIsParse;\nexport { createIsParsePure as createIsParse };\n/**\n * Creates a reusable {@link assertParse} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertParse(): never;\n/**\n * Creates a reusable {@link assertParse} function.\n *\n * @template T Expected type of parsed value\n * @returns A reusable `assertParse` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertParse(): (input: string) => Primitive;\ndeclare const createAssertParsePure: typeof createAssertParse;\nexport { createAssertParsePure as createAssertParse };\n/**\n * Creates a reusable {@link validateParse} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateParse(): never;\n/**\n * Creates a reusable {@link validateParse} function.\n *\n * @template T Expected type of parsed value\n * @returns A reusable `validateParse` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateParse(): (input: string) => IValidation>;\ndeclare const createValidateParsePure: typeof createValidateParse;\nexport { createValidateParsePure as createValidateParse };\n/**\n * Creates a reusable {@link stringify} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createStringify(): never;\n/**\n * Creates a reusable {@link stringify} function.\n *\n * @template T Type of the input value\n * @returns A reusable `stringify` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createStringify(): (input: T) => string;\ndeclare const createStringifyPure: typeof createStringify;\nexport { createStringifyPure as createStringify };\n/**\n * Creates a reusable {@link assertStringify} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertStringify(): never;\n/**\n * Creates a reusable {@link assertStringify} function.\n *\n * @template T Type of the input value\n * @returns A reusable `assertStringify` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertStringify(): (input: unknown) => string;\ndeclare const createAssertStringifyPure: typeof createAssertStringify;\nexport { createAssertStringifyPure as createAssertStringify };\n/**\n * Creates a reusable {@link isStringify} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsStringify(): never;\n/**\n * Creates a reusable {@link isStringify} function.\n *\n * @template T Type of the input value\n * @returns A reusable `isStringify` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsStringify(): (input: unknown) => string | null;\ndeclare const createIsStringifyPure: typeof createIsStringify;\nexport { createIsStringifyPure as createIsStringify };\n/**\n * Creates a reusable {@link validateStringify} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateStringify(): never;\n/**\n * Creates a reusable {@link validateStringify} function.\n *\n * @template T Type of the input value\n * @returns A reusable `validateStringify` function\n\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateStringify(): (input: unknown) => IValidation;\ndeclare const createValidateStringifyPure: typeof createValidateStringify;\nexport { createValidateStringifyPure as createValidateStringify };\n'],["file:///node_modules/typia/lib/misc.d.ts",'import { Atomic } from "./typings/Atomic";\nimport { IValidation } from "./IValidation";\nimport { Resolved } from "./Resolved";\n/**\n * > You must configure the generic argument `T`.\n *\n * Union literal type to array.\n *\n * Converts a union literal type to an array of its members.\n *\n * ```typescript\n * literals<"A" | "B" | 1>; // ["A", "B", 1]\n * ```\n *\n * @template T Union literal type\n * @return Array of union literal type\'s members\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport declare function literals(): never;\n/**\n * Union literal type to array.\n *\n * Converts a union literal type to an array of its members.\n *\n * ```typescript\n * literals<"A" | "B" | 1>; // ["A", "B", 1]\n * ```\n *\n * @template T Union literal type\n * @return Array of union literal type\'s members\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport declare function literals(): T[];\n/**\n * Clone a data.\n *\n * Clones an instance following type `T`. If the target *input* value or its member\n * variable contains a class instance having methods, those methods would not be\n * cloned.\n *\n * For reference, this `typia.misc.clone()` function does not validate the input value\n * type. It just believes that the input value is following the type `T`. Therefore,\n * if you can\'t ensure the input value type, it would be better to call\n * {@link assertClone} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be cloned\n * @return Cloned data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function clone(input: T): Resolved;\ndeclare const clonePure: typeof clone;\nexport { clonePure as clone };\n/**\n * Clone a data with type assertion.\n *\n * Clones an instance following type `T`, with type assertion. If the target `input`\n * value or its member variable contains a class instance having methods, those\n * methods would not be cloned.\n *\n * In such reason, when `input` value is not matched with the type `T`, it throws an\n * {@link TypeGuardError}. Otherwise, there\'s no problem on the `input` value, cloned\n * data would be returned.\n *\n * @template T Type of the input value\n * @param input A value to be cloned\n * @return Cloned data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertClone(input: T): Resolved;\n/**\n * Clone a data with type assertion.\n *\n * Clones an instance following type `T`, with type assertion. If the target `input`\n * value or its member variable contains a class instance having methods, those\n * methods would not be cloned.\n *\n * In such reason, when `input` value is not matched with the type `T`, it throws an\n * {@link TypeGuardError}. Otherwise, there\'s no problem on the `input` value, cloned\n * data would be returned.\n *\n * @template T Type of the input value\n * @param input A value to be cloned\n * @return Cloned data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertClone(input: unknown): Resolved;\ndeclare const assertClonePure: typeof assertClone;\nexport { assertClonePure as assertClone };\n/**\n * Clone a data with type checking.\n *\n * Clones an instance following type `T`, with type checking. If the target `input`\n * value or its member variable contains a class instance having methods, those\n * methods would not be cloned.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * `null` value instead. Otherwise, there\'s no problem on the `input` value, cloned\n * data would be returned.\n *\n * @template T Type of the input value\n * @param input A value to be cloned\n * @return Cloned data when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isClone(input: T): Resolved | null;\n/**\n * Clone a data with type checking.\n *\n * Clones an instance following type `T`, with type checking. If the target `input`\n * value or its member variable contains a class instance having methods, those\n * methods would not be cloned.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * `null` value instead. Otherwise, there\'s no problem on the `input` value, cloned\n * data would be returned.\n *\n * @template T Type of the input value\n * @param input A value to be cloned\n * @return Cloned data when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isClone(input: unknown): Resolved | null;\ndeclare const isClonePure: typeof isClone;\nexport { isClonePure as isClone };\n/**\n * Clone a data with detailed type validation.\n *\n * Clones an instance following type `T`, with detailed type validation. If the target\n * `input` value or its member variable contains a class instance having methods,\n * those methods would not be cloned.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * {@link IValidation.Failure} value. Otherwise, there\'s no problem on the `input`\n * value, cloned data would be stored in `data` property of the output\n * {@link IValidation.Success} instance.\n *\n * @template T Type of the input value\n * @param input A value to be cloned\n * @returns Validation result with cloned value\n */\ndeclare function validateClone(input: T): IValidation>;\n/**\n * Clone a data with detailed type validation.\n *\n * Clones an instance following type `T`, with detailed type validation. If the target\n * `input` value or its member variable contains a class instance having methods,\n * those methods would not be cloned.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * {@link IValidation.Failure} value. Otherwise, there\'s no problem on the `input`\n * value, cloned data would be stored in `data` property of the output\n * {@link IValidation.Success} instance.\n *\n * @template T Type of the input value\n * @param input A value to be cloned\n * @returns Validation result with cloned value\n */\ndeclare function validateClone(input: unknown): IValidation>;\ndeclare const validateClonePure: typeof validateClone;\nexport { validateClonePure as validateClone };\n/**\n * Prune, erase superfluous properties.\n *\n * Remove every superfluous properties from the `input` object, even including nested\n * objects. Note that, as every superfluous properties would be deleted, you never can\n * read those superfluous properties after calling this `prune()` function.\n *\n * For reference, this `typia.misc.prune()` function does not validate the input value\n * type. It just believes that the input value is following the type `T`. Therefore,\n * if you can\'t ensure the input value type, it would better to call one of below\n * functions instead.\n *\n * - {@link assertPrune}\n * - {@link isPrune}\n * - {@link validatePrune}\n *\n * @template T Type of the input value\n * @param input Target instance to prune\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function prune(input: T): void;\ndeclare const prunePure: typeof prune;\nexport { prunePure as prune };\n/**\n * Prune, erase superfluous properties, with type assertion.\n *\n * `typia.misc.assertPrune()` is a combination function of {@link assert} and\n * {@link prune}. Therefore, it removes every superfluous properties from the `input`\n * object including nested objects, with type assertion.\n *\n * In such reason, when `input` value is not matched with the type `T`, it throws an\n * {@link TypeGuardError}. Otherwise, there\'s no problem on the `input` value, its\n * every superfluous properties would be removed, including nested objects.\n *\n * @template T Type of the input value\n * @param input Target instance to assert and prune\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertPrune(input: T): T;\n/**\n * Prune, erase superfluous properties, with type assertion.\n *\n * `typia.misc.assertPrune()` is a combination function of {@link assert} and\n * {@link prune}. Therefore, it removes every superfluous properties from the `input`\n * object including nested objects, with type assertion.\n *\n * In such reason, when `input` value is not matched with the type `T`, it throws an\n * {@link TypeGuardError}. Otherwise, there\'s no problem on the `input` value, its\n * every superfluous properties would be removed, including nested objects.\n *\n * @template T Type of the input value\n * @param input Target instance to assert and prune\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertPrune(input: unknown): T;\ndeclare const assertPrunePure: typeof assertPrune;\nexport { assertPrunePure as assertPrune };\n/**\n * Prune, erase superfluous properties, with type checking.\n *\n * `typia.misc.assertPrune()` is a combination function of {@link is} and\n * {@link prune}. Therefore, it removes every superfluous properties from the `input`\n * object including nested objects, with type checking.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * `false` value. Otherwise, there\'s no problem on the `input` value, it returns\n * `true` after removing every superfluous properties, including nested objects.\n *\n * @template T Type of the input value\n * @param input Target instance to check and prune\n * @returns Whether the parametric value is following the type `T` or not\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isPrune(input: T): input is T;\n/**\n * Prune, erase superfluous properties, with type checking.\n *\n * `typia.misc.assertPrune()` is a combination function of {@link is} and\n * {@link prune}. Therefore, it removes every superfluous properties from the `input`\n * object including nested objects, with type checking.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * `false` value. Otherwise, there\'s no problem on the `input` value, it returns\n * `true` after removing every superfluous properties, including nested objects.\n *\n * @template T Type of the input value\n * @param input Target instance to check and prune\n * @returns Whether the parametric value is following the type `T` or not\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isPrune(input: unknown): input is T;\ndeclare const isPrunePure: typeof isPrune;\nexport { isPrunePure as isPrune };\n/**\n * Prune, erase superfluous properties, with type validation.\n *\n * `typia.misc.validatePrune()` is a combination function of {@link validate} and\n * {@link prune}. Therefore, it removes every superfluous properties from the `input`\n * object including nested objects, with type validation.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * {@link IValidation.IFailure} value with detailed error reasons. Otherwise, there\'s\n * no problem on the `input` value, it returns {@link IValidation.ISucess} value after\n * removing every superfluous properties, including nested objects.\n *\n * @template T Type of the input value\n * @param input Target instance to validate and prune\n * @returns Validation result\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validatePrune(input: T): IValidation;\n/**\n * Prune, erase superfluous properties, with type validation.\n *\n * `typia.misc.validatePrune()` is a combination function of {@link validate} and\n * {@link prune}. Therefore, it removes every superfluous properties from the `input`\n * object including nested objects, with type validation.\n *\n * In such reason, when `input` value is not matched with the type `T`, it returns\n * {@link IValidation.IFailure} value with detailed error reasons. Otherwise, there\'s\n * no problem on the `input` value, it returns {@link IValidation.ISucess} value after\n * removing every superfluous properties, including nested objects.\n *\n * @template T Type of the input value\n * @param input Target instance to validate and prune\n * @returns Validation result\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validatePrune(input: unknown): IValidation;\ndeclare const validatePrunePure: typeof validatePrune;\nexport { validatePrunePure as validatePrune };\n/**\n * Creates a reusable {@link clone} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createClone(): never;\n/**\n * Creates a resuable {@link clone} function.\n *\n * @template T Type of the input value\n * @returns A reusable `clone` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createClone(): (input: T) => Resolved;\ndeclare const createClonePure: typeof createClone;\nexport { createClonePure as createClone };\n/**\n * Creates a reusable {@link assertClone} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertClone(): never;\n/**\n * Creates a resuable {@link assertClone} function.\n *\n * @template T Type of the input value\n * @returns A reusable `clone` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertClone(): (input: unknown) => Resolved;\ndeclare const createAssertClonePure: typeof createAssertClone;\nexport { createAssertClonePure as createAssertClone };\n/**\n * Creates a reusable {@link isClone} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsClone(): never;\n/**\n * Creates a resuable {@link isClone} function.\n *\n * @template T Type of the input value\n * @returns A reusable `clone` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsClone(): (input: unknown) => Resolved | null;\ndeclare const createIsClonePure: typeof createIsClone;\nexport { createIsClonePure as createIsClone };\n/**\n * Creates a reusable {@link validateClone} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateClone(): never;\n/**\n * Creates a resuable {@link validateClone} function.\n *\n * @template T Type of the input value\n * @returns A reusable `clone` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateClone(): (input: unknown) => IValidation>;\ndeclare const createValidateClonePure: typeof createValidateClone;\nexport { createValidateClonePure as createValidateClone };\n/**\n * Creates a reusable {@link prune} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createPrune(): never;\n/**\n * Creates a resuable {@link prune} function.\n *\n * @template T Type of the input value\n * @returns A reusable `prune` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createPrune(): (input: T) => void;\ndeclare const createPrunePure: typeof createPrune;\nexport { createPrunePure as createPrune };\n/**\n * Creates a reusable {@link assertPrune} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertPrune(): never;\n/**\n * Creates a resuable {@link assertPrune} function.\n *\n * @template T Type of the input value\n * @returns A reusable `isPrune` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertPrune(): (input: T) => T;\ndeclare const createAssertPrunePure: typeof createAssertPrune;\nexport { createAssertPrunePure as createAssertPrune };\n/**\n * Creates a reusable {@link isPrune} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsPrune(): never;\n/**\n * Creates a resuable {@link isPrune} function.\n *\n * @template T Type of the input value\n * @returns A reusable `isPrune` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsPrune(): (input: T) => input is T;\ndeclare const createIsPrunePure: typeof createIsPrune;\nexport { createIsPrunePure as createIsPrune };\n/**\n * Creates a reusable {@link validatePrune} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidatePrune(): never;\n/**\n * Creates a resuable {@link validatePrune} function.\n *\n * @template T Type of the input value\n * @returns A reusable `validatePrune` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidatePrune(): (input: T) => IValidation;\ndeclare const createValidatePrunePure: typeof createValidatePrune;\nexport { createValidatePrunePure as createValidatePrune };\n'],["file:///node_modules/typia/lib/module.d.ts",'import { AssertionGuard } from "./AssertionGuard";\nimport { IRandomGenerator } from "./IRandomGenerator";\nimport { IValidation } from "./IValidation";\nimport { Resolved } from "./Resolved";\nexport * as http from "./http";\nexport * as json from "./json";\nexport * as misc from "./misc";\nexport * as notations from "./notations";\nexport * as protobuf from "./protobuf";\nexport * as reflect from "./reflect";\nexport * as tags from "./tags";\nexport * from "./schemas/metadata/IJsDocTagInfo";\nexport * from "./schemas/json/IJsonApplication";\nexport * from "./schemas/json/IJsonComponents";\nexport * from "./schemas/json/IJsonSchema";\nexport * from "./AssertionGuard";\nexport * from "./IRandomGenerator";\nexport * from "./IValidation";\nexport * from "./TypeGuardError";\nexport * from "./Primitive";\nexport * from "./Resolved";\nexport * from "./CamelCase";\nexport * from "./PascalCase";\nexport * from "./SnakeCase";\n/**\n * Asserts a value type.\n *\n * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed\n * reason, if the parametric value is not following the type `T`. Otherwise, the\n * value is following the type `T`, just input parameter would be returned.\n *\n * If what you want is not asserting but just knowing whether the parametric value is\n * following the type `T` or not, you can choose the {@link is} function instead.\n * Otherwise you want to know all the errors, {@link validate} is the way to go.\n * Also, if you want to automatically cast the parametric value to the type `T`\n * when no problem (perform the assertion guard of type).\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link assertEquals} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be asserted\n * @returns Parametric input value\n * @throws A {@link TypeGuardError} instance with detailed reason\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assert(input: T): T;\n/**\n * Asserts a value type.\n *\n * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed\n * reason, if the parametric value is not following the type `T`. Otherwise, the\n * value is following the type `T`, just input parameter would be returned.\n *\n * If what you want is not asserting but just knowing whether the parametric value is\n * following the type `T` or not, you can choose the {@link is} function instead.\n * Otherwise, you want to know all the errors, {@link validate} is the way to go.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link assertEquals} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be asserted\n * @returns Parametric input value casted as `T`\n * @throws A {@link TypeGuardError} instance with detailed reason\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assert(input: unknown): T;\ndeclare const assertPure: typeof assert;\nexport { assertPure as assert };\n/**\n * Assertion guard of a value type.\n *\n * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed\n * reason, if the parametric value is not following the type `T`. Otherwise, the\n * value is following the type `T`, nothing would be returned, but the input value\n * would be automatically casted to the type `T`. This is the concept of\n * "Assertion Guard" of a value type.\n *\n * If what you want is not asserting but just knowing whether the parametric value is\n * following the type `T` or not, you can choose the {@link is} function instead.\n * Otherwise you want to know all the errors, {@link validate} is the way to go.\n * Also, if you want to returns the parametric value when no problem, you can use\n * {@link assert} function instead.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link assertGuardEquals} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be asserted\n * @throws A {@link TypeGuardError} instance with detailed reason\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertGuard(input: T): asserts input is T;\n/**\n * Assertion guard of a value type.\n *\n * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed\n * reason, if the parametric value is not following the type `T`. Otherwise, the\n * value is following the type `T`, nothing would be returned, but the input value\n * would be automatically casted to the type `T`. This is the concept of\n * "Assertion Guard" of a value type.\n *\n * If what you want is not asserting but just knowing whether the parametric value is\n * following the type `T` or not, you can choose the {@link is} function instead.\n * Otherwise you want to know all the errors, {@link validate} is the way to go.\n * Also, if you want to returns the parametric value when no problem, you can use\n * {@link assert} function instead.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link assertGuardEquals} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be asserted\n * @throws A {@link TypeGuardError} instance with detailed reason\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertGuard(input: unknown): asserts input is T;\ndeclare const assertGuardPure: typeof assertGuard;\nexport { assertGuardPure as assertGuard };\n/**\n * Tests a value type.\n *\n * Tests a parametric value type and returns whether it\'s following the type `T` or not.\n * If the parametric value is matched with the type `T`, `true` value would be returned.\n * Otherwise, the parametric value is not following the type `T`, `false` value would be\n * returned.\n *\n * If what you want is not just knowing whether the parametric value is following the\n * type `T` or not, but throwing an exception with detailed reason, you can choose\n * {@link assert} function instead. Also, if you want to know all the errors with\n * detailed reasons, {@link validate} function would be useful.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link equals} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be tested\n * @returns Whether the parametric value is following the type `T` or not\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function is(input: T): input is T;\n/**\n * Tests a value type.\n *\n * Tests a parametric value type and returns whether it\'s following the type `T` or not.\n * If the parametric value is matched with the type `T`, `true` value would be returned.\n * Otherwise, the parametric value is not following the type `T`, `false` value would be\n * returned.\n *\n * If what you want is not just knowing whether the parametric value is following the\n * type `T` or not, but throwing an exception with detailed reason, you can choose\n * {@link assert} function instead. Also, if you want to know all the errors with\n * detailed reasons, {@link validate} function would be useful.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link equals} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be tested\n * @returns Whether the parametric value is following the type `T` or not\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function is(input: unknown): input is T;\ndeclare const isPure: typeof is;\nexport { isPure as is };\n/**\n * Validates a value type.\n *\n * Validates a parametric value type and archives all the type errors into an\n * {@link IValidation.errors} array, if the parametric value is not following the\n * type `T`. Of course, if the parametric value is following the type `T`, the\n * {@link IValidation.errors} array would be empty and {@link IValidation.success}\n * would have the `true` value.\n *\n * If what you want is not finding all the error, but asserting the parametric value\n * type with exception throwing, you can choose {@link assert} function instead.\n * Otherwise, you just want to know whether the parametric value is matched with the\n * type `T`, {@link is} function is the way to go.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link validateEquals} function instead.\n *\n * @template Type of the input value\n * @param input A value to be validated\n * @returns Validation result\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validate(input: T): IValidation;\n/**\n * Validates a value type.\n *\n * Validates a parametric value type and archives all the type errors into an\n * {@link IValidation.errors} array, if the parametric value is not following the\n * type `T`. Of course, if the parametric value is following the type `T`, the\n * {@link IValidation.errors} array would be empty and {@link IValidation.success}\n * would have the `true` value.\n *\n * If what you want is not finding all the error, but asserting the parametric value\n * type with exception throwing, you can choose {@link assert} function instead.\n * Otherwise, you just want to know whether the parametric value is matched with the\n * type `T`, {@link is} function is the way to go.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link validateEquals} function instead.\n *\n * @template Type of the input value\n * @param input A value to be validated\n * @returns Validation result\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validate(input: unknown): IValidation;\ndeclare const validatePure: typeof validate;\nexport { validatePure as validate };\n/**\n * Asserts equality between a value and its type.\n *\n * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed\n * reason, if the parametric value is not following the type `T` or some superfluous\n * property that is not listed on the type `T` has been found. Otherwise, the value is\n * following the type `T` without any superfluous property, just input parameter would\n * be returned.\n *\n * If what you want is not asserting but just knowing whether the parametric value is\n * following the type `T` or not, you can choose the {@link equals} function instead.\n * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.\n *\n * On the other hand, if you want to allow superfluous property that is not enrolled\n * to the type `T`, you can use {@link assert} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be asserted\n * @returns Parametric input value\n * @throws A {@link TypeGuardError} instance with detailed reason\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertEquals(input: T): T;\n/**\n * Asserts equality between a value and its type.\n *\n * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed\n * reason, if the parametric value is not following the type `T` or some superfluous\n * property that is not listed on the type `T` has been found. Otherwise, the value is\n * following the type `T` without any superfluous property, just input parameter would\n * be returned.\n *\n * If what you want is not asserting but just knowing whether the parametric value is\n * following the type `T` or not, you can choose the {@link equals} function instead.\n * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.\n *\n * On the other hand, if you want to allow superfluous property that is not enrolled\n * to the type `T`, you can use {@link assert} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be asserted\n * @returns Parametric input value casted as `T`\n * @throws A {@link TypeGuardError} instance with detailed reason\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertEquals(input: unknown): T;\ndeclare const assertEqualsPure: typeof assertEquals;\nexport { assertEqualsPure as assertEquals };\n/**\n * Assertion guard of a type with equality.\n *\n * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed\n * reason, if the parametric value is not following the type `T` or some superfluous\n * property that is not listed on the type `T` has been found.\n *\n * Otherwise, the value is following the type `T` without any superfluous property,\n * nothing would be returned, but the input value would be automatically casted to\n * the type `T`. This is the concept of "Assertion Guard" of a value type.\n *\n * If what you want is not asserting but just knowing whether the parametric value is\n * following the type `T` or not, you can choose the {@link equals} function instead.\n * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.\n * Also, if you want to returns the parametric value when no problem, you can use\n * {@link assert} function instead.\n *\n * On the other hand, if you want to allow superfluous property that is not enrolled\n * to the type `T`, you can use {@link assertEquals} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be asserted\n * @returns Parametric input value casted as `T`\n * @throws A {@link TypeGuardError} instance with detailed reason\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertGuardEquals(input: T): asserts input is T;\n/**\n * Assertion guard of a type with equality.\n *\n * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed\n * reason, if the parametric value is not following the type `T` or some superfluous\n * property that is not listed on the type `T` has been found.\n *\n * Otherwise, the value is following the type `T` without any superfluous property,\n * nothing would be returned, but the input value would be automatically casted to\n * the type `T`. This is the concept of "Assertion Guard" of a value type.\n *\n * If what you want is not asserting but just knowing whether the parametric value is\n * following the type `T` or not, you can choose the {@link equals} function instead.\n * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.\n * Also, if you want to returns the parametric value when no problem, you can use\n * {@link assertEquals} function instead.\n *\n * On the other hand, if you want to allow superfluous property that is not enrolled\n * to the type `T`, you can use {@link assertGuard} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be asserted\n * @returns Parametric input value casted as `T`\n * @throws A {@link TypeGuardError} instance with detailed reason\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertGuardEquals(input: unknown): asserts input is T;\ndeclare const assertGuardEqualsPure: typeof assertGuardEquals;\nexport { assertGuardEqualsPure as assertGuardEquals };\n/**\n * Tests equality between a value and its type.\n *\n * Tests a parametric value type and returns whether it\'s equivalent to the type `T`\n * or not. If the parametric value is matched with the type `T` and there\'s not any\n * superfluous property that is not listed on the type `T`, `true` value would be\n * returned. Otherwise, the parametric value is not following the type `T` or some\n * superfluous property exists, `false` value would be returned.\n *\n * If what you want is not just knowing whether the parametric value is following the\n * type `T` or not, but throwing an exception with detailed reason, you can choose\n * {@link assertEquals} function instead. Also, if you want to know all the errors with\n * detailed reasons, {@link validateEquals} function would be useful.\n *\n * On the other hand, if you want to allow superfluous property that is not enrolled\n * to the type `T`, you can use {@link is} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be tested\n * @returns Whether the parametric value is equivalent to the type `T` or not\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function equals(input: T): input is T;\n/**\n * Tests equality between a value and its type.\n *\n * Tests a parametric value type and returns whether it\'s equivalent to the type `T`\n * or not. If the parametric value is matched with the type `T` and there\'s not any\n * superfluous property that is not listed on the type `T`, `true` value would be\n * returned. Otherwise, the parametric value is not following the type `T` or some\n * superfluous property exists, `false` value would be returned.\n *\n * If what you want is not just knowing whether the parametric value is following the\n * type `T` or not, but throwing an exception with detailed reason, you can choose\n * {@link assertEquals} function instead. Also, if you want to know all the errors with\n * detailed reasons, {@link validateEquals} function would be useful.\n *\n * On the other hand, if you want to allow superfluous property that is not enrolled\n * to the type `T`, you can use {@link is} function instead.\n *\n * @template T Type of the input value\n * @param input A value to be tested\n * @returns Whether the parametric value is equivalent to the type `T` or not\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function equals(input: unknown): input is T;\ndeclare const equalsPure: typeof equals;\nexport { equalsPure as equals };\n/**\n * Validates equality between a value and its type.\n *\n * Validates a parametric value type and archives all the type errors into an\n * {@link IValidation.errors} array, if the parametric value is not following the\n * type `T` or some superfluous property that is not listed on the type `T` has been\n * found. Of course, if the parametric value is following the type `T` and no\n * superfluous property exists, the {@link IValidation.errors} array would be empty\n * and {@link IValidation.success} would have the `true` value.\n *\n * If what you want is not finding all the error, but asserting the parametric value\n * type with exception throwing, you can choose {@link assert} function instead.\n * Otherwise, you just want to know whether the parametric value is matched with the\n * type `T`, {@link is} function is the way to go.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link validateEquals} function instead.\n *\n * @template Type of the input value\n * @param input A value to be validated\n * @returns Validation result\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateEquals(input: T): IValidation;\n/**\n * Validates equality between a value and its type.\n *\n * Validates a parametric value type and archives all the type errors into an\n * {@link IValidation.errors} array, if the parametric value is not following the\n * type `T` or some superfluous property that is not listed on the type `T` has been\n * found. Of course, if the parametric value is following the type `T` and no\n * superfluous property exists, the {@link IValidation.errors} array would be empty\n * and {@link IValidation.success} would have the `true` value.\n *\n * If what you want is not finding all the error, but asserting the parametric value\n * type with exception throwing, you can choose {@link assert} function instead.\n * Otherwise, you just want to know whether the parametric value is matched with the\n * type `T`, {@link is} function is the way to go.\n *\n * On the other and, if you don\'t want to allow any superfluous property that is not\n * enrolled to the type `T`, you can use {@link validateEquals} function instead.\n *\n * @template Type of the input value\n * @param input A value to be validated\n * @returns Validation result\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateEquals(input: unknown): IValidation;\ndeclare const validateEqualsPure: typeof validateEquals;\nexport { validateEqualsPure as validateEquals };\n/**\n * > You must configure the generic argument `T`.\n *\n * Generate random data.\n *\n * Generates a random data following type the `T`.\n *\n * For reference, this `typia.random()` function generates only primitive type.\n * If there\'re some methods in the type `T` or its nested instances, those would\n * be ignored. Also, when the type `T` has a `toJSON()` method, its return type\n * would be generated instead.\n *\n * @template T Type of data to generate\n * @param generator Random data generator\n * @return Randomly generated data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function random(generator?: Partial): never;\n/**\n * Generate random data.\n *\n * Generates a random data following type the `T`.\n *\n * For reference, this `typia.random()` function generates only primitive type.\n * If there\'re some methods in the type `T` or its nested instances, those would\n * be ignored. Also, when the type `T` has a `toJSON()` method, its return type\n * would be generated instead.\n *\n * @template T Type of data to generate\n * @param generator Random data generator\n * @return Randomly generated data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function random(generator?: Partial): Resolved;\ndeclare const randomPure: typeof random;\nexport { randomPure as random };\n/**\n * Creates a reusable {@link assert} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssert(): never;\n/**\n * Creates a reusable {@link assert} function.\n *\n * @template T Type of the input value\n * @returns A reusable `assert` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssert(): (input: unknown) => T;\ndeclare const createAssertPure: typeof createAssert;\nexport { createAssertPure as createAssert };\n/**\n * Creates a reusable {@link assertGuard} function.\n *\n * Note that, you\'ve to declare the variable type of the factory function caller\n * like below. If you don\'t declare the variable type, compilation error be thrown.\n * This is the special rule of the TypeScript compiler.\n *\n * ```typescript\n * // MUST DECLARE THE VARIABLE TYPE\n * const func: typia.AssertionGuard = typia.createAssertGuard();\n *\n * // IF NOT, COMPILATION ERROR BE OCCURED\n * const func = typia.createAssertGuard();\n * ```\n *\n * > *Assertions require every name in the call target to be declared with an*\n * > *explicit type annotation.*\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertGuard(): never;\n/**\n * Creates a reusable {@link assertGuard} function.\n *\n * Note that, you\'ve to declare the variable type of the factory function caller\n * like below. If you don\'t declare the variable type, compilation error be thrown.\n * This is the special rule of the TypeScript compiler.\n *\n * ```typescript\n * // MUST DECLARE THE VARIABLE TYPE\n * const func: typia.AssertionGuard = typia.createAssertGuard();\n *\n * // IF NOT, COMPILATION ERROR BE OCCURED\n * const func = typia.createAssertGuard();\n * ```\n *\n * > *Assertions require every name in the call target to be declared with an*\n * > *explicit type annotation.*\n *\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertGuard(): (input: unknown) => AssertionGuard;\ndeclare const createAssertGuardPure: typeof createAssertGuard;\nexport { createAssertGuardPure as createAssertGuard };\n/**\n * Creates a reusable {@link is} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIs(): never;\n/**\n * Creates a reusable {@link is} function.\n *\n * @template T Type of the input value\n * @returns A reusable `is` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIs(): (input: unknown) => input is T;\ndeclare const createIsPure: typeof createIs;\nexport { createIsPure as createIs };\n/**\n * Creates a reusable {@link validate} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidate(): never;\n/**\n * Creates a reusable {@link validate} function.\n *\n * @template T Type of the input value\n * @returns A reusable `validate` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidate(): (input: unknown) => IValidation;\ndeclare const createValidatePure: typeof createValidate;\nexport { createValidatePure as createValidate };\n/**\n * Creates a reusable {@link assertEquals} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertEquals(): never;\n/**\n * Creates a reusable {@link assertEquals} function.\n *\n * @template T Type of the input value\n * @returns A reusable `assertEquals` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertEquals(): (input: unknown) => T;\ndeclare const createAssertEqualsPure: typeof createAssertEquals;\nexport { createAssertEqualsPure as createAssertEquals };\n/**\n * Creates a reusable {@link assertGuardEquals} function.\n *\n * Note that, you\'ve to declare the variable type of the factory function caller\n * like below. If you don\'t declare the variable type, compilation error be thrown.\n * This is the special rule of the TypeScript compiler.\n *\n * ```typescript\n * // MUST DECLARE THE VARIABLE TYPE\n * const func: typia.AssertionGuard = typia.createAssertGuardEquals();\n *\n * // IF NOT, COMPILATION ERROR BE OCCURED\n * const func = typia.createAssertGuardEquals();\n * ```\n *\n * > *Assertions require every name in the call target to be declared with an*\n * > *explicit type annotation.*\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertGuardEquals(): never;\n/**\n * Creates a reusable {@link assertGuardEquals} function.\n *\n * Note that, you\'ve to declare the variable type of the factory function caller\n * like below. If you don\'t declare the variable type, compilation error be thrown.\n * This is the special rule of the TypeScript compiler.\n *\n * ```typescript\n * // MUST DECLARE THE VARIABLE TYPE\n * const func: typia.AssertionGuard = typia.createAssertGuardEquals();\n *\n * // IF NOT, COMPILATION ERROR BE OCCURED\n * const func = typia.createAssertGuardEquals();\n * ```\n *\n * > *Assertions require every name in the call target to be declared with an*\n * > *explicit type annotation.*\n *\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertGuardEquals(): (input: unknown) => AssertionGuard;\ndeclare const createAssertGuardEqualsPure: typeof createAssertGuardEquals;\nexport { createAssertGuardEqualsPure as createAssertGuardEquals };\n/**\n * Creates a reusable {@link equals} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createEquals(): never;\n/**\n * Creates a reusable {@link equals} function.\n *\n * @template T Type of the input value\n * @returns A reusable `equals` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createEquals(): (input: unknown) => input is T;\ndeclare const createEqualsPure: typeof createEquals;\nexport { createEqualsPure as createEquals };\n/**\n * Creates a reusable {@link validateEquals} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateEquals(): never;\n/**\n * Creates a reusable {@link validateEquals} function.\n *\n * @template T Type of the input value\n * @returns A reusable `validateEquals` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateEquals(): (input: unknown) => IValidation;\ndeclare const createValidateEqualsPure: typeof createValidateEquals;\nexport { createValidateEqualsPure as createValidateEquals };\n/**\n * Creates a reusable {@link random} function.\n *\n * @danger You must configure the generic argument `T`\n * @param generator Random data generator\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createRandom(generator?: Partial): never;\n/**\n * Creates a resuable {@link random} function.\n *\n * @template T Type of the input value\n * @param generator Random data generator\n * @returns A reusable `random` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createRandom(generator?: Partial): () => Resolved;\ndeclare const createRandomPure: typeof createRandom;\nexport { createRandomPure as createRandom };\n'],["file:///node_modules/typia/lib/notations.d.ts","import { CamelCase } from \"./CamelCase\";\nimport { IValidation } from \"./IValidation\";\nimport { PascalCase } from \"./PascalCase\";\nimport { SnakeCase } from \"./SnakeCase\";\n/**\n * Convert to camel case.\n *\n * Convert every property names of nested objects to follow the camel case convention.\n *\n * For reference, this `typia.notations.camel()` function does not validate the input value\n * type. It just believes that the input value is following the type `T`. Therefore,\n * if you can't ensure the input value type, it would be better to call one of them below:\n *\n * - {@link assertCamel}\n * - {@link isCamel}\n * - {@link validateCamel}\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Camel case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function camel(input: T): CamelCase;\ndeclare const camelPure: typeof camel;\nexport { camelPure as camel };\n/**\n * Converts to camel case with type assertion.\n *\n * Convert every property names of nested objects to follow the camel case convention.\n * If the input value does not follow the type `T`, it throws {@link TypeGuardError}.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Camel case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertCamel(input: T): CamelCase;\n/**\n * Converts to camel case with type assertion.\n *\n * Convert every property names of nested objects to follow the camel case convention.\n * If the input value does not follow the type `T`, it throws {@link TypeGuardError}.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Camel case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertCamel(input: unknown): CamelCase;\ndeclare const assertCamelPure: typeof assertCamel;\nexport { assertCamelPure as assertCamel };\n/**\n * Converts to camel case with type checking.\n *\n * Convert every property names of nested objects to follow the camel case convention.\n * If the input value does not follow the type `T`, it returns `null` value instead.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Camel case object when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isCamel(input: T): CamelCase | null;\n/**\n * Converts to camel case with type checking.\n *\n * Convert every property names of nested objects to follow the camel case convention.\n * If the input value does not follow the type `T`, it returns `null` value instead.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Camel case object when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isCamel(input: unknown): CamelCase | null;\ndeclare const isCamelPure: typeof isCamel;\nexport { isCamelPure as isCamel };\n/**\n * Converts to camel case with type validation.\n *\n * Convert every property names of nested objects to follow the camel case convention.\n * If the input value does not follow the type `T`, it returns {@link IValidation.Failure}\n * object. Otherwise, there's no problem on the input value, camel cased converted data\n * would be stored in the `data` property of the output {@link IValidation.Success} object.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Validation result with camel case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateCamel(input: T): IValidation>;\n/**\n * Converts to camel case with type validation.\n *\n * Convert every property names of nested objects to follow the camel case convention.\n * If the input value does not follow the type `T`, it returns {@link IValidation.Failure}\n * object. Otherwise, there's no problem on the input value, camel cased converted data\n * would be stored in the `data` property of the output {@link IValidation.Success} object.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Validation result with camel case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateCamel(input: unknown): IValidation>;\ndeclare const validateCamelPure: typeof validateCamel;\nexport { validateCamelPure as validateCamel };\n/**\n * Convert to pascal case.\n *\n * Convert every property names of nested objects to follow the pascal case convention.\n *\n * For reference, this `typia.notations.pascal()` function does not validate the input value\n * type. It just believes that the input value is following the type `T`. Therefore,\n * if you can't ensure the input value type, it would be better to call one of them below:\n *\n * - {@link assertPascal}\n * - {@link isPascal}\n * - {@link validatePascal}\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Pascal case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function pascal(input: T): PascalCase;\ndeclare const pascalPure: typeof pascal;\nexport { pascalPure as pascal };\n/**\n * Converts to pascal case with type assertion.\n *\n * Convert every property names of nested objects to follow the pascal case convention.\n * If the input value does not follow the type `T`, it throws {@link TypeGuardError}.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Pascal case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertPascal(input: T): PascalCase;\n/**\n * Converts to pascal case with type assertion.\n *\n * Convert every property names of nested objects to follow the pascal case convention.\n * If the input value does not follow the type `T`, it throws {@link TypeGuardError}.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Pascal case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertPascal(input: unknown): PascalCase;\ndeclare const assertPascalPure: typeof assertPascal;\nexport { assertPascalPure as assertPascal };\n/**\n * Converts to pascal case with type checking.\n *\n * Convert every property names of nested objects to follow the pascal case convention.\n * If the input value does not follow the type `T`, it returns `null` value instead.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Pascal case object when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isPascal(input: T): PascalCase | null;\n/**\n * Converts to pascal case with type checking.\n *\n * Convert every property names of nested objects to follow the pascal case convention.\n * If the input value does not follow the type `T`, it returns `null` value instead.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Pascal case object when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isPascal(input: unknown): PascalCase | null;\ndeclare const isPascalPure: typeof isPascal;\nexport { isPascalPure as isPascal };\n/**\n * Converts to pascal case with type validation.\n *\n * Convert every property names of nested objects to follow the pascal case convention.\n * If the input value does not follow the type `T`, it returns {@link IValidation.Failure}\n * object. Otherwise, there's no problem on the input value, pascal cased converted data\n * would be stored in the `data` property of the output {@link IValidation.Success} object.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Validation result with pascal case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validatePascal(input: T): IValidation>;\n/**\n * Converts to pascal case with type validation.\n *\n * Convert every property names of nested objects to follow the pascal case convention.\n * If the input value does not follow the type `T`, it returns {@link IValidation.Failure}\n * object. Otherwise, there's no problem on the input value, pascal cased converted data\n * would be stored in the `data` property of the output {@link IValidation.Success} object.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Validation result with pascal case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validatePascal(input: unknown): IValidation>;\ndeclare const validatePascalPure: typeof validatePascal;\nexport { validatePascalPure as validatePascal };\n/**\n * Convert to snake case.\n *\n * Convert every property names of nested objects to follow the snake case convention.\n *\n * For reference, this `typia.notations.snake()` function does not validate the input value\n * type. It just believes that the input value is following the type `T`. Therefore,\n * if you can't ensure the input value type, it would be better to call one of them below:\n *\n * - {@link assertSnake}\n * - {@link isSnake}\n * - {@link validateSnake}\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Snake case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function snake(input: T): SnakeCase;\ndeclare const snakePure: typeof snake;\nexport { snakePure as snake };\n/**\n * Converts to snake case with type assertion.\n *\n * Convert every property names of nested objects to follow the snake case convention.\n * If the input value does not follow the type `T`, it throws {@link TypeGuardError}.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Snake case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertSnake(input: T): SnakeCase;\n/**\n * Converts to snake case with type assertion.\n *\n * Convert every property names of nested objects to follow the snake case convention.\n * If the input value does not follow the type `T`, it throws {@link TypeGuardError}.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Snake case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertSnake(input: unknown): SnakeCase;\ndeclare const assertSnakePure: typeof assertSnake;\nexport { assertSnakePure as assertSnake };\n/**\n * Converts to snake case with type checking.\n *\n * Convert every property names of nested objects to follow the snake case convention.\n * If the input value does not follow the type `T`, it returns `null` value instead.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Snake case object when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isSnake(input: T): SnakeCase | null;\n/**\n * Converts to snake case with type checking.\n *\n * Convert every property names of nested objects to follow the snake case convention.\n * If the input value does not follow the type `T`, it returns `null` value instead.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Snake case object when exact type, otherwise null\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isSnake(input: unknown): SnakeCase | null;\ndeclare const isSnakePure: typeof isSnake;\nexport { isSnakePure as isSnake };\n/**\n * Converts to snake case with type validation.\n *\n * Convert every property names of nested objects to follow the snake case convention.\n * If the input value does not follow the type `T`, it returns {@link IValidation.Failure}\n * object. Otherwise, there's no problem on the input value, snake cased converted data\n * would be stored in the `data` property of the output {@link IValidation.Success} object.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Validation result with snake case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateSnake(input: T): IValidation>;\n/**\n * Converts to snake case with type validation.\n *\n * Convert every property names of nested objects to follow the snake case convention.\n * If the input value does not follow the type `T`, it returns {@link IValidation.Failure}\n * object. Otherwise, there's no problem on the input value, snake cased converted data\n * would be stored in the `data` property of the output {@link IValidation.Success} object.\n *\n * @template T Type of the input value\n * @param input Target object\n * @returns Validation result with snake case object\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateSnake(input: unknown): IValidation>;\ndeclare const validateSnakePure: typeof validateSnake;\nexport { validateSnakePure as validateSnake };\n/**\n * Creates a reusable {@link camel} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createCamel(): never;\n/**\n * Creates a reusable {@link camel} function.\n *\n * @template T Type of the input value\n * @returns A reusable `camel` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createCamel(): (input: T) => CamelCase;\ndeclare const createCamelPure: typeof createCamel;\nexport { createCamelPure as createCamel };\n/**\n * Creates a reusable {@link assertCamel} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertCamel(): never;\n/**\n * Creates a reusable {@link assertCamel} function.\n *\n * @template T Type of the input value\n * @returns A reusable `assertCamel` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertCamel(): (input: T) => CamelCase;\ndeclare const createAssertCamelPure: typeof createAssertCamel;\nexport { createAssertCamelPure as createAssertCamel };\n/**\n * Creates a reusable {@link isCamel} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsCamel(): never;\n/**\n * Creates a reusable {@link isCamel} function.\n *\n * @template T Type of the input value\n * @returns A reusable `isCamel` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsCamel(): (input: T) => CamelCase | null;\ndeclare const createIsCamelPure: typeof createIsCamel;\nexport { createIsCamelPure as createIsCamel };\n/**\n * Creates a reusable {@link validateCamel} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateCamel(): never;\n/**\n * Creates a reusable {@link validateCamel} function.\n *\n * @template T Type of the input value\n * @returns A reusable `validateCamel` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateCamel(): (input: T) => IValidation>;\ndeclare const createValidateCamelPure: typeof createValidateCamel;\nexport { createValidateCamelPure as createValidateCamel };\n/**\n * Creates a reusable {@link pascal} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createPascal(): never;\n/**\n * Creates a reusable {@link pascal} function.\n *\n * @template T Type of the input value\n * @returns A reusable `pascal` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createPascal(): (input: T) => PascalCase;\ndeclare const createPascalPure: typeof createPascal;\nexport { createPascalPure as createPascal };\n/**\n * Creates a reusable {@link assertPascal} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertPascal(): never;\n/**\n * Creates a reusable {@link assertPascal} function.\n *\n * @template T Type of the input value\n * @returns A reusable `assertPascal` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertPascal(): (input: T) => PascalCase;\ndeclare const createAssertPascalPure: typeof createAssertPascal;\nexport { createAssertPascalPure as createAssertPascal };\n/**\n * Creates a reusable {@link isPascal} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsPascal(): never;\n/**\n * Creates a reusable {@link isPascal} function.\n *\n * @template T Type of the input value\n * @returns A reusable `isPascal` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsPascal(): (input: T) => PascalCase | null;\ndeclare const createIsPascalPure: typeof createIsPascal;\nexport { createIsPascalPure as createIsPascal };\n/**\n * Creates a reusable {@link validatePascal} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidatePascal(): never;\n/**\n * Creates a reusable {@link validatePascal} function.\n *\n * @template T Type of the input value\n * @returns A reusable `validatePascal` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidatePascal(): (input: T) => IValidation>;\ndeclare const createValidatePascalPure: typeof createValidatePascal;\nexport { createValidatePascalPure as createValidatePascal };\n/**\n * Creates a reusable {@link snake} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createSnake(): never;\n/**\n * Creates a reusable {@link snake} function.\n *\n * @template T Type of the input value\n * @returns A reusable `snake` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createSnake(): (input: T) => SnakeCase;\ndeclare const createSnakePure: typeof createSnake;\nexport { createSnakePure as createSnake };\n/**\n * Creates a reusable {@link assertSnake} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertSnake(): never;\n/**\n * Creates a reusable {@link assertSnake} function.\n *\n * @template T Type of the input value\n * @returns A reusable `assertSnake` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertSnake(): (input: T) => SnakeCase;\ndeclare const createAssertSnakePure: typeof createAssertSnake;\nexport { createAssertSnakePure as createAssertSnake };\n/**\n * Creates a reusable {@link isSnake} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsSnake(): never;\n/**\n * Creates a reusable {@link isSnake} function.\n *\n * @template T Type of the input value\n * @returns A reusable `isSnake` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsSnake(): (input: T) => SnakeCase | null;\ndeclare const createIsSnakePure: typeof createIsSnake;\nexport { createIsSnakePure as createIsSnake };\n/**\n * Creates a reusable {@link validateSnake} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until be configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateSnake(): never;\n/**\n * Creates a reusable {@link validateSnake} function.\n *\n * @template T Type of the input value\n * @returns A reusable `validateSnake` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateSnake(): (input: T) => IValidation>;\ndeclare const createValidateSnakePure: typeof createValidateSnake;\nexport { createValidateSnakePure as createValidateSnake };\n"],["file:///node_modules/typia/lib/PascalCase.d.ts",'/**\n * Pascal case type.\n *\n * `PascalCase` type is a type that all keys of an object are pascalized.\n *\n * It also erase every method properties like {@link Resolved} type.\n *\n * @template T Target type to be pascalized\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport type PascalCase = Equal> extends true ? T : PascalizeMain;\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\ntype PascalizeMain = T extends [never] ? never : T extends {\n valueOf(): boolean | bigint | number | string;\n} ? ValueOf : T extends Function ? never : T extends object ? PascalizeObject : T;\ntype PascalizeObject = T extends Array ? IsTuple extends true ? PascalizeTuple : PascalizeMain[] : T extends Set ? Set> : T extends Map ? Map, PascalizeMain> : T extends WeakSet | WeakMap ? never : T extends Date | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array | ArrayBuffer | SharedArrayBuffer | DataView ? T : {\n [Key in keyof T as PascalizeString]: PascalizeMain;\n};\ntype IsTuple = [T] extends [\n never\n] ? false : T extends readonly any[] ? number extends T["length"] ? false : true : false;\ntype PascalizeTuple = T extends [] ? [] : T extends [infer F] ? [PascalizeMain] : T extends [infer F, ...infer Rest extends readonly any[]] ? [PascalizeMain, ...PascalizeTuple] : T extends [(infer F)?] ? [PascalizeMain?] : T extends [(infer F)?, ...infer Rest extends readonly any[]] ? [PascalizeMain?, ...PascalizeTuple] : [];\ntype ValueOf = IsValueOf extends true ? boolean : IsValueOf extends true ? number : IsValueOf extends true ? string : Instance;\ntype IsValueOf> = Instance extends Object ? Object extends IValueOf ? Instance extends Primitive ? false : true : false : false;\ninterface IValueOf {\n valueOf(): T;\n}\ntype PascalizeString = Key extends `${infer F}${infer R}` ? `${Uppercase}${PascalizeStringRepeatedly}` : Key;\ntype PascalizeStringRepeatedly = Key extends `${infer F}_${infer R}` ? `${F}${Capitalize>}` : Key;\nexport {};\n'],["file:///node_modules/typia/lib/Primitive.d.ts",'/**\n * Primitive type of JSON.\n *\n * `Primitive` is a TMP (Type Meta Programming) type which converts\n * its argument as a primitive type within framework JSON.\n *\n * If the target argument is a built-in class which returns its origin primitive type\n * through the `valueOf()` method like the `String` or `Number`, its return type would\n * be the `string` or `number`. Otherwise, the built-in class does not have the\n * `valueOf()` method, the return type would be an empty object (`{}`).\n *\n * Otherwise, the target argument is a type of custom class, all of its custom method\n * would be erased and its prototype would be changed to the primitive `object`.\n * Therefore, return type of the TMP type finally be the primitive object.\n *\n * In addition, if the target argument is a type of custom class and it has a special\n * method `toJSON()`, return type of this `Primitive` would be not `Primitive`\n * but `Primitive>`.\n *\n * Before | After\n * ------------------------|----------------------------------------\n * `Boolean` | `boolean`\n * `Number` | `number`\n * `String` | `string`\n * `Class` | `object`\n * `Class` with `toJSON()` | `Primitive>`\n * Native Class | never\n * Others | No change\n *\n * @template T Target argument type.\n * @author Jeongho Nam - https://github.com/samchon\n * @author Kyungsu Kang - https://github.com/kakasoo\n * @author Michael - https://github.com/8471919\n */\nexport type Primitive = Equal> extends true ? T : PrimitiveMain;\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\ntype PrimitiveMain = Instance extends [never] ? never : ValueOf extends bigint ? never : ValueOf extends boolean | number | string ? ValueOf : Instance extends Function ? never : ValueOf extends object ? Instance extends object ? Instance extends NativeClass ? never : Instance extends IJsonable ? ValueOf extends object ? Raw extends object ? PrimitiveObject : never : ValueOf : PrimitiveObject : never : ValueOf;\ntype PrimitiveObject = Instance extends Array ? IsTuple extends true ? PrimitiveTuple : PrimitiveMain[] : {\n [P in keyof Instance]: PrimitiveMain;\n};\ntype PrimitiveTuple = T extends [] ? [] : T extends [infer F] ? [PrimitiveMain] : T extends [infer F, ...infer Rest extends readonly any[]] ? [PrimitiveMain, ...PrimitiveTuple] : T extends [(infer F)?] ? [PrimitiveMain?] : T extends [(infer F)?, ...infer Rest extends readonly any[]] ? [PrimitiveMain?, ...PrimitiveTuple] : [];\ntype ValueOf = IsValueOf extends true ? boolean : IsValueOf extends true ? number : IsValueOf extends true ? string : Instance;\ntype NativeClass = Set | Map | WeakSet | WeakMap | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array | ArrayBuffer | SharedArrayBuffer | DataView;\ntype IsTuple = [T] extends [\n never\n] ? false : T extends readonly any[] ? number extends T["length"] ? false : true : false;\ntype IsValueOf> = Instance extends Object ? Object extends IValueOf ? Instance extends U ? false : true : false : false;\ninterface IValueOf {\n valueOf(): T;\n}\ninterface IJsonable {\n toJSON(): T;\n}\nexport {};\n'],["file:///node_modules/typia/lib/programmers/AssertProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../transformers/IProject";\nexport declare namespace AssertProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (props: boolean | {\n equals: boolean;\n guard: boolean;\n }) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/CheckerProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataCollection } from "../factories/MetadataCollection";\nimport { Metadata } from "../schemas/metadata/Metadata";\nimport { MetadataObject } from "../schemas/metadata/MetadataObject";\nimport { IProject } from "../transformers/IProject";\nimport { FeatureProgrammer } from "./FeatureProgrammer";\nimport { FunctionImporter } from "./helpers/FunctionImporeter";\nimport { ICheckEntry } from "./helpers/ICheckEntry";\nimport { IExpressionEntry } from "./helpers/IExpressionEntry";\nexport declare namespace CheckerProgrammer {\n interface IConfig {\n prefix: string;\n path: boolean;\n trace: boolean;\n equals: boolean;\n numeric: boolean;\n addition?: () => ts.Statement[];\n decoder?: () => FeatureProgrammer.Decoder;\n combiner: IConfig.Combiner;\n atomist: (explore: IExplore) => (check: ICheckEntry) => (input: ts.Expression) => ts.Expression;\n joiner: IConfig.IJoiner;\n success: ts.Expression;\n }\n namespace IConfig {\n interface Combiner {\n (explorer: IExplore): {\n (logic: "and" | "or"): {\n (input: ts.Expression, binaries: IBinary[], expected: string): ts.Expression;\n };\n };\n }\n interface IJoiner {\n object(input: ts.Expression, entries: IExpressionEntry[]): ts.Expression;\n array(input: ts.Expression, arrow: ts.ArrowFunction): ts.Expression;\n tuple?: undefined | ((exprs: ts.Expression[]) => ts.Expression);\n failure(value: ts.Expression, expected: string, explore?: undefined | FeatureProgrammer.IExplore): ts.Expression;\n is?(expression: ts.Expression): ts.Expression;\n required?(exp: ts.Expression): ts.Expression;\n full?: undefined | ((condition: ts.Expression) => (input: ts.Expression, expected: string, explore: IExplore) => ts.Expression);\n }\n }\n type IExplore = FeatureProgrammer.IExplore;\n interface IBinary {\n expression: ts.Expression;\n combined: boolean;\n }\n const write: (project: IProject) => (config: IConfig) => (importer: FunctionImporter) => (type: ts.Type, name?: string | undefined) => ts.ArrowFunction;\n const write_object_functions: (project: IProject) => (config: IConfig) => (importer: FunctionImporter) => (collection: MetadataCollection) => ts.VariableStatement[];\n const write_union_functions: (project: IProject) => (config: IConfig) => (importer: FunctionImporter) => (collection: MetadataCollection) => ts.VariableStatement[];\n const write_array_functions: (project: IProject) => (config: IConfig) => (importer: FunctionImporter) => (collection: MetadataCollection) => ts.VariableStatement[];\n const write_tuple_functions: (project: IProject) => (config: IConfig) => (importer: FunctionImporter) => (collection: MetadataCollection) => ts.VariableStatement[];\n const decode_object: (config: IConfig) => (importer: FunctionImporter) => (input: ts.Expression, obj: MetadataObject, explore: IExplore) => ts.CallExpression;\n}\n'],["file:///node_modules/typia/lib/programmers/FeatureProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataCollection } from "../factories/MetadataCollection";\nimport { Metadata } from "../schemas/metadata/Metadata";\nimport { MetadataArray } from "../schemas/metadata/MetadataArray";\nimport { MetadataObject } from "../schemas/metadata/MetadataObject";\nimport { IProject } from "../transformers/IProject";\nimport { CheckerProgrammer } from "./CheckerProgrammer";\nimport { FunctionImporter } from "./helpers/FunctionImporeter";\nimport { IExpressionEntry } from "./helpers/IExpressionEntry";\nexport declare namespace FeatureProgrammer {\n interface IConfig {\n types: IConfig.ITypes;\n /**\n * Prefix name of internal functions for specific types.\n */\n prefix: string;\n /**\n * Whether to archive access path or not.\n */\n path: boolean;\n /**\n * Whether to trace exception or not.\n */\n trace: boolean;\n addition?: undefined | ((collection: MetadataCollection) => ts.Statement[]);\n /**\n * Initializer of metadata.\n */\n initializer: (project: IProject) => (importer: FunctionImporter) => (type: ts.Type) => [MetadataCollection, Metadata];\n /**\n * Decoder, station of every types.\n */\n decoder: () => Decoder;\n /**\n * Object configurator.\n */\n objector: IConfig.IObjector;\n /**\n * Generator of functions for object types.\n */\n generator: IConfig.IGenerator;\n }\n namespace IConfig {\n interface ITypes {\n input: (type: ts.Type, name?: undefined | string) => ts.TypeNode;\n output: (type: ts.Type, name?: undefined | string) => ts.TypeNode;\n }\n interface IObjector {\n /**\n * Type checker when union object type comes.\n */\n checker: () => Decoder;\n /**\n * Decoder, function call expression generator of specific typed objects.\n */\n decoder: () => Decoder;\n /**\n * Joiner of expressions from properties.\n */\n joiner(input: ts.Expression, entries: IExpressionEntry[], parent: MetadataObject): ts.ConciseBody;\n /**\n * Union type specificator.\n *\n * Expression of an algorithm specifying object type and calling\n * the `decoder` function of the specified object type.\n */\n unionizer: Decoder;\n /**\n * Handler of union type specification failure.\n *\n * @param value Expression of input parameter\n * @param expected Expected type name\n * @param explore Exploration info\n * @returns Statement of failure\n */\n failure(value: ts.Expression, expected: string, explore?: undefined | IExplore): ts.Statement;\n /**\n * Transformer of type checking expression by discrimination.\n *\n * When an object type has been specified by a discrimination without full\n * iteration, the `unionizer` will decode the object instance after\n * the last type checking.\n *\n * In such circumtance, you can transform the last type checking function.\n *\n * @param exp Current expression about type checking\n * @returns Transformed expression\n * @deprecated\n */\n is?: undefined | ((exp: ts.Expression) => ts.Expression);\n /**\n * Transformer of non-undefined type checking by discrimination.\n *\n * When specifying an union type of objects, `typia` tries to find\n * descrimination way just by checking only one property type.\n * If succeeded to find the discrimination way, `typia` will check the target\n * property type and in the checking, non-undefined type checking would be\n * done.\n *\n * In such process, you can transform the non-undefined type checking.\n *\n * @param exp\n * @returns Transformed expression\n * @deprecated\n */\n required?: undefined | ((exp: ts.Expression) => ts.Expression);\n /**\n * Conditon wrapper when unable to specify any object type.\n *\n * When failed to specify an object type through discrimination, full\n * iteration type checking would be happend. In such circumstance, you\n * can wrap the condition with additional function.\n *\n * @param condition Current condition\n * @returns A function wrapped current condition\n */\n full?: undefined | ((condition: ts.Expression) => (input: ts.Expression, expected: string, explore: IExplore) => ts.Expression);\n /**\n * Return type.\n */\n type?: undefined | ts.TypeNode;\n }\n interface IGenerator {\n objects?: undefined | (() => (col: MetadataCollection) => ts.VariableStatement[]);\n unions?: undefined | (() => (col: MetadataCollection) => ts.VariableStatement[]);\n arrays(): (col: MetadataCollection) => ts.VariableStatement[];\n tuples(): (col: MetadataCollection) => ts.VariableStatement[];\n }\n }\n interface IExplore {\n tracable: boolean;\n source: "top" | "function";\n from: "top" | "array" | "object";\n postfix: string;\n start?: undefined | number;\n }\n interface Decoder {\n (input: ts.Expression, target: T, explore: IExplore): Output;\n }\n const write: (project: IProject) => (config: IConfig) => (importer: FunctionImporter) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n const write_object_functions: (config: IConfig) => (importer: FunctionImporter) => (collection: MetadataCollection) => ts.VariableStatement[];\n const write_union_functions: (config: IConfig) => (collection: MetadataCollection) => ts.VariableStatement[];\n const decode_array: (config: Pick) => (importer: FunctionImporter) => (combiner: (input: ts.Expression, arrow: ts.ArrowFunction) => ts.Expression) => (input: ts.Expression, array: MetadataArray, explore: IExplore) => ts.Expression;\n const decode_object: (config: Pick) => (importer: FunctionImporter) => (input: ts.Expression, obj: MetadataObject, explore: IExplore) => ts.CallExpression;\n const index: (start: number | null) => (prev: string) => (rand: string) => string;\n const argumentsArray: (config: Pick) => (explore: FeatureProgrammer.IExplore) => (input: ts.Expression) => ts.Expression[];\n const parameterDeclarations: (props: Pick) => (type: ts.TypeNode) => (input: ts.Identifier) => ts.ParameterDeclaration[];\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/AtomicPredicator.d.ts",'import { Metadata } from "../../schemas/metadata/Metadata";\nimport { Atomic } from "../../typings/Atomic";\nexport declare namespace AtomicPredicator {\n const constant: (meta: Metadata) => (name: Atomic.Literal) => boolean;\n const atomic: (meta: Metadata) => (name: Atomic.Literal) => boolean;\n const native: (name: string) => boolean;\n const template: (meta: Metadata) => boolean;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/CloneJoiner.d.ts",'/// \nimport ts from "typescript";\nimport { IExpressionEntry } from "./IExpressionEntry";\nexport declare namespace CloneJoiner {\n const object: (input: ts.Expression, entries: IExpressionEntry[]) => ts.ConciseBody;\n const tuple: (children: ts.Expression[], rest: ts.Expression | null) => ts.Expression;\n const array: (input: ts.Expression, arrow: ts.Expression) => ts.CallExpression;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/disable_function_importer_declare.d.ts",'import { FunctionImporter } from "./FunctionImporeter";\nexport declare const disable_function_importer_declare: (importer: FunctionImporter) => FunctionImporter;\n'],["file:///node_modules/typia/lib/programmers/helpers/FunctionImporeter.d.ts",'/// \nimport ts from "typescript";\nexport declare class FunctionImporter {\n readonly method: string;\n private readonly used_;\n private readonly local_;\n private readonly unions_;\n private sequence_;\n constructor(method: string);\n empty(): boolean;\n use(name: string): ts.Identifier;\n useLocal(name: string): string;\n hasLocal(name: string): boolean;\n declare(modulo: ts.LeftHandSideExpression, includeUnions?: boolean): ts.Statement[];\n declareUnions(): ts.Statement[];\n increment(): number;\n emplaceUnion(prefix: string, name: string, factory: () => ts.ArrowFunction): string;\n trace(): void;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/HttpMetadataUtil.d.ts",'import { Metadata } from "../../schemas/metadata/Metadata";\nexport declare namespace HttpMetadataUtil {\n const atomics: (meta: Metadata) => Set<"boolean" | "bigint" | "number" | "string">;\n const isUnion: (meta: Metadata) => boolean;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/ICheckEntry.d.ts",'/// \nimport ts from "typescript";\nexport interface ICheckEntry {\n expected: string;\n expression: ts.Expression | null;\n conditions: ICheckEntry.ICondition[][];\n}\nexport declare namespace ICheckEntry {\n interface ICondition {\n expected: string;\n expression: ts.Expression;\n }\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/IExpressionEntry.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../schemas/metadata/Metadata";\nexport interface IExpressionEntry {\n input: ts.Expression;\n key: Metadata;\n meta: Metadata;\n expression: Expression;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/NotationJoiner.d.ts",'/// \nimport ts from "typescript";\nimport { IExpressionEntry } from "./IExpressionEntry";\nexport declare namespace NotationJoiner {\n const object: (rename: (str: string) => string) => (input: ts.Expression, entries: IExpressionEntry[]) => ts.ConciseBody;\n const tuple: (children: ts.Expression[], rest: ts.Expression | null) => ts.Expression;\n const array: (input: ts.Expression, arrow: ts.Expression) => ts.CallExpression;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/OptionPredicator.d.ts",'import { ITransformOptions } from "../../transformers/ITransformOptions";\nexport declare namespace OptionPredicator {\n const numeric: (options: ITransformOptions) => boolean;\n const functional: (options: ITransformOptions) => boolean;\n const finite: (options: ITransformOptions) => boolean;\n const undefined: (options: ITransformOptions) => boolean;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/ProtobufUtil.d.ts",'import { Metadata } from "../../schemas/metadata/Metadata";\nimport { MetadataObject } from "../../schemas/metadata/MetadataObject";\nimport { ProtobufAtomic } from "../../typings/ProtobufAtomic";\nexport declare namespace ProtobufUtil {\n const isStaticObject: (obj: MetadataObject) => boolean;\n const size: (meta: Metadata) => number;\n const isUnion: (meta: Metadata) => boolean;\n const getAtomics: (meta: Metadata) => ProtobufAtomic[];\n const getNumbers: (meta: Metadata) => ProtobufAtomic.Numeric[];\n const getBigints: (meta: Metadata) => ProtobufAtomic.BigNumeric[];\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/ProtobufWire.d.ts","export declare const enum ProtobufWire {\n /**\n * - integers\n * - bool\n * - enum\n */\n VARIANT = 0,\n /**\n * - fixed64\n * - sfixed64\n * - double\n */\n I64 = 1,\n /**\n * - string\n * - bytes\n * - mebedded messages\n * - packed repeated fields\n */\n LEN = 2,\n START_GROUP = 3,\n END_GROUP = 4,\n /**\n * - fixed\n * - sfixed32\n * - float\n */\n I32 = 5\n}\n"],["file:///node_modules/typia/lib/programmers/helpers/PruneJoiner.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataObject } from "../../schemas/metadata/MetadataObject";\nimport { IExpressionEntry } from "./IExpressionEntry";\nexport declare namespace PruneJoiner {\n const object: (input: ts.Expression, entries: IExpressionEntry[], obj: MetadataObject) => ts.ConciseBody;\n const array: (input: ts.Expression, arrow: ts.ArrowFunction) => ts.CallExpression;\n const tuple: (children: ts.ConciseBody[], rest: ts.ConciseBody | null) => ts.Block;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/RandomJoiner.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../schemas/metadata/Metadata";\nimport { MetadataObject } from "../../schemas/metadata/MetadataObject";\nexport declare namespace RandomJoiner {\n type Decoder = (meta: Metadata) => ts.Expression;\n const array: (coalesce: (method: string) => ts.Expression) => (decoder: Decoder) => (explore: IExplore) => (length: ts.Expression | undefined) => (item: Metadata) => ts.Expression;\n const tuple: (decoder: Decoder) => (elements: Metadata[]) => ts.ArrayLiteralExpression;\n const object: (coalesce: (method: string) => ts.Expression) => (decoder: Decoder) => (obj: MetadataObject) => ts.ConciseBody;\n}\ninterface IExplore {\n function: boolean;\n recursive: boolean;\n}\nexport {};\n'],["file:///node_modules/typia/lib/programmers/helpers/RandomRanger.d.ts",'/// \nimport ts from "typescript";\nimport { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";\nexport declare namespace RandomRanger {\n interface IDefaults {\n minimum: number;\n maximum: number;\n gap: number;\n }\n const length: (coalesce: (method: string) => ts.Expression) => (defs: IDefaults) => (acc: length.IAccessors) => (tags: IMetadataTypeTag[]) => ts.Expression | undefined;\n namespace length {\n interface IAccessors {\n minimum: string;\n maximum: string;\n }\n }\n const number: (config: number.IConfig) => (defs: IDefaults) => (tags: IMetadataTypeTag[]) => ts.Expression;\n namespace number {\n interface IConfig {\n setter: (args: number[]) => ts.Expression;\n transform: (value: number) => ts.Expression;\n type: "int" | "uint" | "double";\n }\n }\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/StringifyJoinder.d.ts",'/// \nimport ts from "typescript";\nimport { FunctionImporter } from "./FunctionImporeter";\nimport { IExpressionEntry } from "./IExpressionEntry";\nexport declare namespace StringifyJoiner {\n const object: (importer: FunctionImporter) => (_input: ts.Expression, entries: IExpressionEntry[]) => ts.Expression;\n const array: (input: ts.Expression, arrow: ts.ArrowFunction) => ts.Expression;\n const tuple: (children: ts.Expression[], rest: ts.Expression | null) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/StringifyPredicator.d.ts",'import { Metadata } from "../../schemas/metadata/Metadata";\nexport declare namespace StringifyPredicator {\n const require_escape: (value: string) => boolean;\n const undefindable: (meta: Metadata) => boolean;\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/UnionExplorer.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../schemas/metadata/Metadata";\nimport { MetadataArray } from "../../schemas/metadata/MetadataArray";\nimport { MetadataObject } from "../../schemas/metadata/MetadataObject";\nimport { MetadataTuple } from "../../schemas/metadata/MetadataTuple";\nimport { FeatureProgrammer } from "../FeatureProgrammer";\nimport { check_union_array_like } from "../internal/check_union_array_like";\nexport declare namespace UnionExplorer {\n interface Decoder {\n (input: ts.Expression, target: T, explore: FeatureProgrammer.IExplore): ts.Expression;\n }\n type ObjectCombiner = Decoder;\n const object: (config: FeatureProgrammer.IConfig, level?: number) => (input: ts.Expression, targets: MetadataObject[], explore: FeatureProgrammer.IExplore) => ts.Expression;\n const tuple: (props: check_union_array_like.IProps) => (parameters: ts.ParameterDeclaration[]) => (input: ts.Expression, origins: MetadataTuple[], explore: FeatureProgrammer.IExplore) => ts.ArrowFunction;\n namespace tuple {\n type IProps = check_union_array_like.IProps;\n }\n const array: (props: array.IProps) => (parameters: ts.ParameterDeclaration[]) => (input: ts.Expression, origins: MetadataArray[], explore: FeatureProgrammer.IExplore) => ts.ArrowFunction;\n namespace array {\n type IProps = check_union_array_like.IProps;\n }\n const array_or_tuple: (props: array_or_tuple.IProps) => (parameters: ts.ParameterDeclaration[]) => (input: ts.Expression, origins: (MetadataArray | MetadataTuple)[], explore: FeatureProgrammer.IExplore) => ts.ArrowFunction;\n namespace array_or_tuple {\n type IProps = check_union_array_like.IProps;\n }\n const set: (props: set.IProps) => (parameters: ts.ParameterDeclaration[]) => (input: ts.Expression, origins: Metadata[], explore: FeatureProgrammer.IExplore) => ts.ArrowFunction;\n namespace set {\n type IProps = check_union_array_like.IProps;\n }\n const map: (props: map.IProps) => (parameters: ts.ParameterDeclaration[]) => (input: ts.Expression, origins: Metadata.Entry[], explore: FeatureProgrammer.IExplore) => ts.ArrowFunction;\n namespace map {\n type IProps = check_union_array_like.IProps;\n }\n}\n'],["file:///node_modules/typia/lib/programmers/helpers/UnionPredicator.d.ts",'import { MetadataObject } from "../../schemas/metadata/MetadataObject";\nimport { MetadataProperty } from "../../schemas/metadata/MetadataProperty";\nexport declare namespace UnionPredicator {\n interface ISpecialized {\n index: number;\n object: MetadataObject;\n property: MetadataProperty;\n neighbour: boolean;\n }\n const object: (targets: MetadataObject[]) => Array;\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpAssertHeadersProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpAssertHeadersProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpAssertQueryProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpAssertQueryProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpHeadersProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataFactory } from "../../factories/MetadataFactory";\nimport { Metadata } from "../../schemas/metadata/Metadata";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpHeadersProgrammer {\n const INPUT_TYPE = "Record";\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n const validate: (meta: Metadata, explore: MetadataFactory.IExplore) => string[];\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpIsHeadersProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpIsHeadersProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpIsQueryProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpIsQueryProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpParameterProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../schemas/metadata/Metadata";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpParameterProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n const validate: (meta: Metadata) => string[];\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpQueryProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataFactory } from "../../factories/MetadataFactory";\nimport { Metadata } from "../../schemas/metadata/Metadata";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpQueryProgrammer {\n const INPUT_TYPE = "string | URLSearchParams";\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n const validate: (meta: Metadata, explore: MetadataFactory.IExplore) => string[];\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpValidateHeadersProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpValidateHeadersProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/http/HttpValidateQueryProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace HttpValidateQueryProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/internal/application_alias.d.ts",'import { IJsonComponents } from "../../schemas/json/IJsonComponents";\nimport { MetadataAlias } from "../../schemas/metadata/MetadataAlias";\nimport { IJsonSchema } from "../../module";\nimport { JsonApplicationProgrammer } from "../json/JsonApplicationProgrammer";\nexport declare const application_alias: (options: JsonApplicationProgrammer.IOptions) => (blockNever: BlockNever) => (components: IJsonComponents) => (alias: MetadataAlias) => (nullable: boolean) => IJsonSchema.IReference;\n'],["file:///node_modules/typia/lib/programmers/internal/application_array.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_boolean.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_constant.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_default.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_default_string.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_escaped.d.ts",'import { MetadataEscaped } from "../../schemas/metadata/MetadataEscaped";\nimport { IJsonComponents, IJsonSchema } from "../../module";\nimport { JsonApplicationProgrammer } from "../json/JsonApplicationProgrammer";\nexport declare const application_escaped: (options: JsonApplicationProgrammer.IOptions) => (blockNever: BlockNever) => (components: IJsonComponents) => (resolved: MetadataEscaped) => IJsonSchema[];\n'],["file:///node_modules/typia/lib/programmers/internal/application_native.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_number.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_object.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_schema.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_string.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_templates.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/application_tuple.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_array_length.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_bigint.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_dynamic_key.d.ts",'/// \nimport ts from "typescript";\nimport { Metadata } from "../../schemas/metadata/Metadata";\nimport { IProject } from "../../transformers/IProject";\nimport { FunctionImporter } from "../helpers/FunctionImporeter";\nexport declare const check_dynamic_key: (project: IProject) => (importer: FunctionImporter) => (input: ts.Expression, metadata: Metadata) => ts.Expression;\n'],["file:///node_modules/typia/lib/programmers/internal/check_dynamic_properties.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_everything.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_native.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_number.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_object.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_string.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_template.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/check_union_array_like.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/decode_union_object.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/feature_object_entries.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/JSON_SCHEMA_PREFIX.d.ts",'export declare const JSON_COMPONENTS_PREFIX = "#/components";\n'],["file:///node_modules/typia/lib/programmers/internal/metadata_to_pattern.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/prune_object_properties.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/random_custom.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/stringify_dynamic_properties.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/stringify_native.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/stringify_regular_properties.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/template_to_pattern.d.ts","export {};\n"],["file:///node_modules/typia/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts",'import { Metadata } from "../../schemas/metadata/Metadata";\nexport declare const wrap_metadata_rest_tuple: (rest: Metadata) => Metadata;\n'],["file:///node_modules/typia/lib/programmers/IsProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { MetadataCollection } from "../factories/MetadataCollection";\nimport { MetadataObject } from "../schemas/metadata/MetadataObject";\nimport { IProject } from "../transformers/IProject";\nimport { CheckerProgrammer } from "./CheckerProgrammer";\nimport { FunctionImporter } from "./helpers/FunctionImporeter";\nimport { IExpressionEntry } from "./helpers/IExpressionEntry";\nexport declare namespace IsProgrammer {\n const configure: (options?: Partial) => (project: IProject) => (importer: FunctionImporter) => CheckerProgrammer.IConfig;\n namespace CONFIG {\n interface IOptions {\n numeric: boolean;\n undefined: boolean;\n object: (input: ts.Expression, entries: IExpressionEntry[]) => ts.Expression;\n }\n }\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression, disable?: boolean) => (equals: boolean) => (type: ts.Type, name?: string | undefined) => ts.ArrowFunction;\n const write_function_statements: (project: IProject) => (importer: FunctionImporter) => (collection: MetadataCollection) => ts.VariableStatement[];\n const decode: (project: IProject) => (importer: FunctionImporter) => (input: ts.Expression, meta: import("../schemas/metadata/Metadata").Metadata, explore: import("./FeatureProgrammer").FeatureProgrammer.IExplore) => ts.Expression;\n const decode_object: (project: IProject) => (importer: FunctionImporter) => (input: ts.Expression, obj: MetadataObject, explore: import("./FeatureProgrammer").FeatureProgrammer.IExplore) => ts.CallExpression;\n const decode_to_json: (checkNull: boolean) => (input: ts.Expression) => ts.Expression;\n const decode_functional: (input: ts.Expression) => ts.BinaryExpression;\n}\n'],["file:///node_modules/typia/lib/programmers/json/JsonApplicationProgrammer.d.ts",'import { IJsonApplication } from "../../schemas/json/IJsonApplication";\nimport { Metadata } from "../../schemas/metadata/Metadata";\nexport declare namespace JsonApplicationProgrammer {\n interface IOptions {\n purpose: "ajv" | "swagger";\n surplus: boolean;\n }\n const write: (options?: Partial) => (metadatas: Array) => IJsonApplication;\n}\n'],["file:///node_modules/typia/lib/programmers/json/JsonAssertParseProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace JsonAssertParseProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/json/JsonAssertStringifyProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace JsonAssertStringifyProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/json/JsonIsParseProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace JsonIsParseProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/json/JsonIsStringifyProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace JsonIsStringifyProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/json/JsonStringifyProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace JsonStringifyProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string | undefined) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/json/JsonValidateParseProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace JsonValidateParseProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/json/JsonValidateStringifyProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace JsonValidateStringifyProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscAssertCloneProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscAssertCloneProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscAssertPruneProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscAssertPruneProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscCloneProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscCloneProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string | undefined) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscIsCloneProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscIsCloneProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscIsPruneProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscIsPruneProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscLiteralsProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscLiteralsProgrammer {\n const write: (project: IProject) => (type: ts.Type) => ts.AsExpression;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscPruneProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscPruneProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string | undefined) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscValidateCloneProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscValidateCloneProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/misc/MiscValidatePruneProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace MiscValidatePruneProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/notations/NotationAssertGeneralProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace NotationAssertGeneralProgrammer {\n const write: (rename: (str: string) => string) => (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/notations/NotationGeneralProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace NotationGeneralProgrammer {\n const returnType: (rename: (str: string) => string) => (type: string) => string;\n const write: (rename: (str: string) => string) => (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string | undefined) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/notations/NotationIsGeneralProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace NotationIsGeneralProgrammer {\n const write: (rename: (str: string) => string) => (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/notations/NotationValidateGeneralProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace NotationValidateGeneralProgrammer {\n const write: (rename: (str: string) => string) => (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufAssertDecodeProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufAssertEncodeProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufDecodeProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufDecodeProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufEncodeProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufEncodeProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufIsDecodeProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufIsEncodeProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufMessageProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufMessageProgrammer {\n const write: (project: IProject) => (type: ts.Type) => ts.StringLiteral;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufValidateDecodeProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../transformers/IProject";\nexport declare namespace ProtobufValidateEncodeProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/RandomProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../transformers/IProject";\nexport declare namespace RandomProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (init?: ts.Expression) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/programmers/TypiaProgrammer.d.ts","export declare namespace TypiaProgrammer {\n interface IProps {\n input: string;\n output: string;\n project: string;\n }\n const build: (props: TypiaProgrammer.IProps) => Promise;\n}\n"],["file:///node_modules/typia/lib/programmers/ValidateProgrammer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../transformers/IProject";\nexport declare namespace ValidateProgrammer {\n const write: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (equals: boolean) => (type: ts.Type, name?: string) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/protobuf.d.ts",'import { IValidation } from "./IValidation";\nimport { Resolved } from "./Resolved";\n/**\n * > You must configure the generic argument `T`.\n *\n * Protocol Buffer Message Schema.\n *\n * Creates a Protocol Buffer Message Schema from a TypeScript type. The message\n * schema would be returned as a string value, and it can be used to share with\n * other developers/languages/frameworks.\n *\n * For reference, Protocol Buffer has lots of restrictions, so that expression power\n * of Protocol Buffer is not enough strong to fully meet the TypeScript type specs.\n * In such reason, if you put a TypeScript type that is not compatible with Protocol\n * Buffer, this function would throw compilation errors.\n *\n * - [Restrictions of Protocol Buffer](https://typia.io/docs/protobuf/message/#restrictions)\n *\n * @template T Target type\n * @returns Protocol Buffer Message Schema.\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport declare function message(): never;\n/**\n * Protocol Buffer Message Schema.\n *\n * Creates a Protocol Buffer Message Schema from a TypeScript type. The message\n * schema would be returned as a string value, and it can be used to share with\n * other developers/languages/frameworks.\n *\n * For reference, Protocol Buffer has lots of restrictions, so that expression power\n * of Protocol Buffer is not enough strong to fully meet the TypeScript type specs.\n * In such reason, if you put a TypeScript type that is not compatible with Protocol\n * Buffer, this function would throw compilation errors.\n *\n * @template T Target type\n * @returns Protocol Buffer Message Schema.\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport declare function message(): string;\n/**\n * > You must configure the generic argument `T`.\n *\n * Protocol Buffer Decoder.\n *\n * `typia.protobuf.decode()` is a function decoding a binary data of Protocol Buffer\n * format to a TypeScript instance.\n *\n * For reference, as Protocol Buffer handles binary data directly, there\'s no way\n * when `input` binary data was not encoded from the `T` typed value. In that case,\n * unexpected behavior or internal error would be occured. Therefore, I recommend you\n * to encode binary data of Protocol Buffer from type safe encode functions like below.\n * Use {@link encode} function only when you can ensure it.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * Also, `typia` is providing type safe decoders like {@link assertDecode}, but it\n * is just for additional type validation like `number & Minimum<7>` or\n * `string & Format<"uuid">` cases, that are represented by\n * [custom tags](https://typia.io/docs/validators/tags). Thus, I repeat that,\n * you\'ve to ensure the type safety when using decoder functions.\n *\n * @template T Expected type of decoded value\n * @param input Protobuf Buffer binary data\n * @returns Decoded value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function decode(input: Uint8Array): never;\n/**\n * Protocol Buffer Decoder.\n *\n * `typia.protobuf.decode()` is a function decoding a binary data of Protocol Buffer\n * format to a TypeScript instance.\n *\n * For reference, as Protocol Buffer handles binary data directly, there\'s no way\n * when `input` binary data was not encoded from the `T` typed value. In that case,\n * unexpected behavior or internal error would be occured. Therefore, I recommend you\n * to encode binary data of Protocol Buffer from type safe encode functions like below.\n * Use {@link encode} function only when you can ensure it.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * Also, `typia` is providing type safe decoders like {@link assertDecode}, but it\n * is just for additional type validation like `number & Minimum<7>` or\n * `string & Format<"uuid">` cases, that are represented by\n * [custom tags](https://typia.io/docs/validators/tags). Thus, I repeat that,\n * you\'ve to ensure the type safety when using decoder functions.\n *\n * @template T Expected type of decoded value\n * @param input Protobuf Buffer binary data\n * @returns Decoded value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function decode(input: Uint8Array): Resolved;\ndeclare const decodePure: typeof decode;\nexport { decodePure as decode };\n/**\n * > You must configure the generic argument `T`.\n *\n * Protocol Buffer Decoder wity type assertion, but not safe.\n *\n * `typia.protobuf.assertDecode()` is a combination function of {@link decode} and\n * {@link assert} function. Therefore, it decodes a binary data of Protocol Buffer to\n * a TypeScript instance, and performs type assertion process. If decoded value is\n * following the type `T`, it returns the decoded value. Otherwise, it throws\n * {@link TypeGuardError} instead.\n *\n * However, note that, this validation is not always safe. It just performs additional\n * type assertion like `number & Minimum<7>` or `string & Format<"uuid">` cases,\n * that are represented by [custom tags](https://typia.io/docs/validators/tags).\n * Therefore, when using `typia.protobuf.assertDecode()` function, you have to\n * ensure the type safety by yourself.\n *\n * In such type safety reason, I recommend you to use type safe encode functions.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * @template T Expected type of decoded value\n * @param input Protobuf Buffer binary data\n * @returns Decoded value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertDecode(input: Uint8Array): never;\n/**\n * Protocol Buffer Decoder wity type assertion, but not safe.\n *\n * `typia.protobuf.assertDecode()` is a combination function of {@link decode} and\n * {@link assert} function. Therefore, it decodes a binary data of Protocol Buffer to\n * a TypeScript instance, and performs type assertion process. If decoded value is\n * following the type `T`, it returns the decoded value. Otherwise, it throws\n * {@link TypeGuardError} instead.\n *\n * However, note that, this validation is not always safe. It just performs additional\n * type assertion like `number & Minimum<7>` or `string & Format<"uuid">` cases,\n * that are represented by [custom tags](https://typia.io/docs/validators/tags).\n * Therefore, when using `typia.protobuf.assertDecode()` function, you have to\n * ensure the type safety by yourself.\n *\n * In such type safety reason, I recommend you to use type safe encode functions.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * @template T Expected type of decoded value\n * @param input Protobuf Buffer binary data\n * @returns Decoded value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertDecode(input: Uint8Array): Resolved;\ndeclare const assertDecodePure: typeof assertDecode;\nexport { assertDecodePure as assertDecode };\n/**\n * > You must configure the generic argument `T`.\n *\n * Protocol Buffer Decoder wity type checking, but not safe.\n *\n * `typia.protobuf.isDecode()` is a combination function of {@link decode} and\n * {@link is} function. Therefore, it decodes a binary data of Protocol Buffer to\n * a TypeScript instance, and performs type checking process. If decoded value is\n * following the type `T`, it returns the decoded value. Otherwise, it returns\n * `null` value instead.\n *\n * However, note that, this validation is not always safe. It just performs additional\n * type checking like `number & Minimum<7>` or `string & Format<"uuid">` cases,\n * that are represented by [custom tags](https://typia.io/docs/validators/tags).\n * Therefore, when using `typia.protobuf.isDecode()` function, you have to\n * ensure the type safety by yourself.\n *\n * In such type safety reason, I recommend you to use type safe encode functions.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * @template T Expected type of decoded value\n * @param input Protobuf Buffer binary data\n * @returns Decoded value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isDecode(input: Uint8Array): never;\n/**\n * Protocol Buffer Decoder wity type checking, but not safe.\n *\n * `typia.protobuf.isDecode()` is a combination function of {@link decode} and\n * {@link is} function. Therefore, it decodes a binary data of Protocol Buffer to\n * a TypeScript instance, and performs type checking process. If decoded value is\n * following the type `T`, it returns the decoded value. Otherwise, it returns\n * `null` value instead.\n *\n * However, note that, this validation is not always safe. It just performs additional\n * type checking like `number & Minimum<7>` or `string & Format<"uuid">` cases,\n * that are represented by [custom tags](https://typia.io/docs/validators/tags).\n * Therefore, when using `typia.protobuf.isDecode()` function, you have to\n * ensure the type safety by yourself.\n *\n * In such type safety reason, I recommend you to use type safe encode functions.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * @template T Expected type of decoded value\n * @param input Protobuf Buffer binary data\n * @returns Decoded value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isDecode(input: Uint8Array): Resolved | null;\ndeclare const isDecodePure: typeof isDecode;\nexport { isDecodePure as isDecode };\n/**\n * > You must configure the generic argument `T`.\n *\n * Protocol Buffer Decoder wity type validation, but not safe.\n *\n * `typia.protobuf.validateDecode()` is a combination function of {@link decode} and\n * {@link validate} function. Therefore, it decodes a binary data of Protocol Buffer to\n * a TypeScript instance, and performs type validation process. If decoded value is\n * following the type `T`, it returns the decoded value with\n * {@link IValidation.ISuccess} typed instance. Otherwise, it returns\n * {@link IValidation.IFailure} value instead with detailed error reasons.\n *\n * However, note that, this validation is not always safe. It just performs additional\n * type validation like `number & Minimum<7>` or `string & Format<"uuid">` cases,\n * that are represented by [custom tags](https://typia.io/docs/validators/tags).\n * Therefore, when using `typia.protobuf.validateDecode()` function, you have to\n * ensure the type safety by yourself.\n *\n * In such type safety reason, I recommend you to use type safe encode functions.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * @template T Expected type of decoded value\n * @param input Protobuf Buffer binary data\n * @returns Decoded value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateDecode(input: Uint8Array): never;\n/**\n * Protocol Buffer Decoder wity type validation, but not safe.\n *\n * `typia.protobuf.validateDecode()` is a combination function of {@link decode} and\n * {@link validate} function. Therefore, it decodes a binary data of Protocol Buffer to\n * a TypeScript instance, and performs type validation process. If decoded value is\n * following the type `T`, it returns the decoded value with\n * {@link IValidation.ISuccess} typed instance. Otherwise, it returns\n * {@link IValidation.IFailure} value instead with detailed error reasons.\n *\n * However, note that, this validation is not always safe. It just performs additional\n * type validation like `number & Minimum<7>` or `string & Format<"uuid">` cases,\n * that are represented by [custom tags](https://typia.io/docs/validators/tags).\n * Therefore, when using `typia.protobuf.validateDecode()` function, you have to\n * ensure the type safety by yourself.\n *\n * In such type safety reason, I recommend you to use type safe encode functions.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * @template T Expected type of decoded value\n * @param input Protobuf Buffer binary data\n * @returns Decoded value\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateDecode(input: Uint8Array): IValidation>;\ndeclare const validateDecodePure: typeof validateDecode;\nexport { validateDecodePure as validateDecode };\n/**\n * Protocol Buffer Encoder.\n *\n * Converts an input value to a binary data of Protocol Buffer format.\n *\n * For reference, this `typia.protobuf.encode()` does not validate the `input` value.\n * It just believes that the `input` value is valid and converts it to a binary data\n * directly. Therefore, if you can\'t ensure the `input` value type, it would better to\n * call one of below functions intead.\n *\n * - {@link assertEncode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * By the way, you know what? Expression power of Protocol Buffer is not enough strong\n * to fully meet the TypeScript type specs. In such reason, if you put a TypeScript\n * type that is not compatible with Protocol Buffer, this function would throw\n * compilation errors.\n *\n * - [Restrictions of Protocol Buffer](https://typia.io/docs/protobuf/message/#restrictions)\n *\n * @template T Type of the value input\n * @param input A value to encode\n * @returns Encoded binary data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function encode(input: T): Uint8Array;\ndeclare const encodePure: typeof encode;\nexport { encodePure as encode };\n/**\n * Protocol Buffer Encoder with type assertion.\n *\n * `typia.protobuf.assertEncode()` is a combination function of {@link assert} and\n * {@link encode}.\n *\n * Therefore, it converts an `input` value to a binary data of\n * Protocol Buffer, with type assertion. If `input` value is not valid, it throws\n * {@link TypeGuardError}. Otherwise, there\'s no problem on the `input` value,\n * Protocol Buffer binary data would be returned.\n *\n * If you can trust `input` value, or want to perform other type of validation, use\n * below functions intead.\n *\n * - {@link encode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * By the way, you know what? Expression power of Protocol Buffer is not enough strong\n * to fully meet the TypeScript type specs. In such reason, if you put a TypeScript\n * type that is not compatible with Protocol Buffer, this function would throw\n * compilation errors.\n *\n * - [Restrictions of Protocol Buffer](https://typia.io/docs/protobuf/message/#restrictions)\n *\n * @template T Type of the value input\n * @param input A value to encode\n * @returns Encoded binary data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertEncode(input: T): Uint8Array;\n/**\n * Protocol Buffer Encoder with type assertion.\n *\n * `typia.protobuf.assertEncode()` is a combination function of {@link assert} and\n * {@link encode}.\n *\n * Therefore, it converts an `input` value to a binary data of\n * Protocol Buffer, with type assertion. If `input` value is not valid, it throws\n * {@link TypeGuardError}. Otherwise, there\'s no problem on the `input` value,\n * Protocol Buffer binary data would be returned.\n *\n * If you can trust `input` value, or want to perform other type of validation, use\n * below functions intead.\n *\n * - {@link encode}\n * - {@link isEncode}\n * - {@link validateEncode}\n *\n * By the way, you know what? Expression power of Protocol Buffer is not enough strong\n * to fully meet the TypeScript type specs. In such reason, if you put a TypeScript\n * type that is not compatible with Protocol Buffer, this function would throw\n * compilation errors.\n *\n * - [Restrictions of Protocol Buffer](https://typia.io/docs/protobuf/message/#restrictions)\n *\n * @template T Type of the value input\n * @param input A value to encode\n * @returns Encoded binary data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function assertEncode(input: unknown): Uint8Array;\ndeclare const assertEncodePure: typeof assertEncode;\nexport { assertEncodePure as assertEncode };\n/**\n * Protocol Buffer Encoder with type checking.\n *\n * `typia.protobuf.isEncode()` is a combination function of {@link is} and\n * {@link encode}.\n *\n * Therefore, it converts an `input` value to a binary data of\n * Protocol Buffer, with type checking. If `input` value is not valid, it returns\n * `null` value. Otherwise, there\'s no problem on the `input` value, Protocol\n * Buffer binary data would be returned.\n *\n * If you can trust `input` value, or want to perform other type of validation, use\n * below functions intead.\n *\n * - {@link encode}\n * - {@link assertEncode}\n * - {@link validateEncode}\n *\n * By the way, you know what? Expression power of Protocol Buffer is not enough strong\n * to fully meet the TypeScript type specs. In such reason, if you put a TypeScript\n * type that is not compatible with Protocol Buffer, this function would throw\n * compilation errors.\n *\n * - [Restrictions of Protocol Buffer](https://typia.io/docs/protobuf/message/#restrictions)\n *\n * @template T Type of the value input\n * @param input A value to encode\n * @returns Encoded binary data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isEncode(input: T): Uint8Array | null;\n/**\n * Protocol Buffer Encoder with type checking.\n *\n * `typia.protobuf.isEncode()` is a combination function of {@link is} and\n * {@link encode}.\n *\n * Therefore, it converts an `input` value to a binary data of\n * Protocol Buffer, with type checking. If `input` value is not valid, it returns\n * `null` value. Otherwise, there\'s no problem on the `input` value, Protocol\n * Buffer binary data would be returned.\n *\n * If you can trust `input` value, or want to perform other type of validation, use\n * below functions intead.\n *\n * - {@link encode}\n * - {@link assertEncode}\n * - {@link validateEncode}\n *\n * By the way, you know what? Expression power of Protocol Buffer is not enough strong\n * to fully meet the TypeScript type specs. In such reason, if you put a TypeScript\n * type that is not compatible with Protocol Buffer, this function would throw\n * compilation errors.\n *\n * - [Restrictions of Protocol Buffer](https://typia.io/docs/protobuf/message/#restrictions)\n *\n * @template T Type of the value input\n * @param input A value to encode\n * @returns Encoded binary data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function isEncode(input: unknown): Uint8Array | null;\ndeclare const isEncodePure: typeof isEncode;\nexport { isEncodePure as isEncode };\n/**\n * Protocol Buffer Encoder with type validation.\n *\n * `typia.protobuf.validateEncode()` is a combination function of\n * {@link validation} and {@link encode}.\n *\n * Therefore, it converts an `input` value to a binary data of\n * Protocol Buffer, with type validation. If `input` value is not valid, it returns\n * {@link IValidation.IFailure} value with detailed error reasons. Otherwise, there\'s\n * no problem on the `input` value, Protocol Buffer binary data would be stored in\n * `data` property of the output {@link IValidation.ISuccess} instance.\n *\n * If you can trust `input` value, or want to perform other type of validation, use\n * below functions intead.\n *\n * - {@link encode}\n * - {@link assertEncode}\n * - {@link isEncode}\n *\n * By the way, you know what? Expression power of Protocol Buffer is not enough strong\n * to fully meet the TypeScript type specs. In such reason, if you put a TypeScript\n * type that is not compatible with Protocol Buffer, this function would throw\n * compilation errors.\n *\n * - [Restrictions of Protocol Buffer](https://typia.io/docs/protobuf/message/#restrictions)\n *\n * @template T Type of the value input\n * @param input A value to encode\n * @returns Encoded binary data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateEncode(input: T): IValidation;\n/**\n * Protocol Buffer Encoder with type validation.\n *\n * `typia.protobuf.validateEncode()` is a combination function of\n * {@link validation} and {@link encode}.\n *\n * Therefore, it converts an `input` value to a binary data of\n * Protocol Buffer, with type validation. If `input` value is not valid, it returns\n * {@link IValidation.IFailure} value with detailed error reasons. Otherwise, there\'s\n * no problem on the `input` value, Protocol Buffer binary data would be stored in\n * `data` property of the output {@link IValidation.ISuccess} instance.\n *\n * If you can trust `input` value, or want to perform other type of validation, use\n * below functions intead.\n *\n * - {@link encode}\n * - {@link assertEncode}\n * - {@link isEncode}\n *\n * By the way, you know what? Expression power of Protocol Buffer is not enough strong\n * to fully meet the TypeScript type specs. In such reason, if you put a TypeScript\n * type that is not compatible with Protocol Buffer, this function would throw\n * compilation errors.\n *\n * - [Restrictions of Protocol Buffer](https://typia.io/docs/protobuf/message/#restrictions)\n *\n * @template T Type of the value input\n * @param input A value to encode\n * @returns Encoded binary data\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function validateEncode(input: unknown): IValidation;\ndeclare const validateEncodePure: typeof validateEncode;\nexport { validateEncodePure as validateEncode };\n/**\n * Creates a reusable {@link decode} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createDecode(): never;\n/**\n * Creates a reusable {@link decode} function.\n *\n * @template T Target type\n * @returns A reusable `decode` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createDecode(): (input: Uint8Array) => Resolved;\ndeclare const createDecodePure: typeof createDecode;\nexport { createDecodePure as createDecode };\n/**\n * Creates a reusable {@link isDecode} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsDecode(): never;\n/**\n * Creates a reusable {@link isDecode} function.\n *\n * @template T Target type\n * @returns A reusable `isDecode` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsDecode(): (input: Uint8Array) => Resolved | null;\ndeclare const createIsDecodePure: typeof createIsDecode;\nexport { createIsDecodePure as createIsDecode };\n/**\n * Creates a reusable {@link assertDecode} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertDecode(): never;\n/**\n * Creates a reusable {@link assertDecode} function.\n *\n * @template T Target type\n * @returns A reusable `assertDecode` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertDecode(): (input: Uint8Array) => Resolved;\ndeclare const createAssertDecodePure: typeof createAssertDecode;\nexport { createAssertDecodePure as createAssertDecode };\n/**\n * Creates a reusable {@link validateDecode} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateDecode(): never;\n/**\n * Creates a reusable {@link validateDecode} function.\n *\n * @template T Target type\n * @returns A reusable `validateDecode` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateDecode(): (input: Uint8Array) => IValidation>;\ndeclare const createValidateDecodePure: typeof createValidateDecode;\nexport { createValidateDecodePure as createValidateDecode };\n/**\n * Creates a reusable {@link encode} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createEncode(): never;\n/**\n * Creates a reusable {@link encode} function.\n *\n * @template T Target type\n * @returns A reusable `encode` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createEncode(): (input: T) => Uint8Array;\ndeclare const createEncodePure: typeof createEncode;\nexport { createEncodePure as createEncode };\n/**\n * Creates a reusable {@link isEncode} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsEncode(): never;\n/**\n * Creates a reusable {@link isEncode} function.\n *\n * @template T Target type\n * @returns A reusable `isEncode` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createIsEncode(): (input: T) => Uint8Array | null;\ndeclare const createIsEncodePure: typeof createIsEncode;\nexport { createIsEncodePure as createIsEncode };\n/**\n * Creates a reusable {@link assertEncode} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertEncode(): never;\n/**\n * Creates a reusable {@link assertEncode} function.\n *\n * @template T Target type\n * @returns A reusable `assertEncode` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createAssertEncode(): (input: T) => Uint8Array;\ndeclare const createAssertEncodePure: typeof createAssertEncode;\nexport { createAssertEncodePure as createAssertEncode };\n/**\n * Creates a reusable {@link validateEncode} function.\n *\n * @danger You must configure the generic argument `T`\n * @returns Nothing until you configure the generic argument `T`\n * @throws compile error\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateEncode(): never;\n/**\n * Creates a reusable {@link validateEncode} function.\n *\n * @template T Target type\n * @returns A reusable `validateEncode` function\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function createValidateEncode(): (input: T) => IValidation;\ndeclare const createValidateEncodePure: typeof createValidateEncode;\nexport { createValidateEncodePure as createValidateEncode };\n'],["file:///node_modules/typia/lib/reflect.d.ts",'import { IMetadataApplication } from "./schemas/metadata/IMetadataApplication";\n/**\n * > You must configure the generic argument `Types`.\n *\n * Metadata Application.\n *\n * Creates a Metadata application which contains the metadata and components.\n *\n * Note that, all of the collection types like Array, Tuple and Objects are\n * stored in the {@link IMetadataApplication.components} property. Also, alias\n * types are stored in the {@link IMetadataApplication.aliases} property, too.\n *\n * @template Types Tuple of target types\n * @returns Metadata application\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function metadata(): never;\n/**\n * Metadata Application.\n *\n * Creates a Metadata application which contains the metadata and components.\n *\n * Note that, all of the collection types like Array, Tuple and Objects are\n * stored in the {@link IMetadataApplication.components} property. Also, alias\n * types are stored in the {@link IMetadataApplication.aliases} property, too.\n *\n * @template Types Tuple of target types\n * @returns Metadata application\n *\n * @author Jeongho Nam - https://github.com/samchon\n */\ndeclare function metadata(): IMetadataApplication;\ndeclare const metadataPure: typeof metadata;\nexport { metadataPure as metadata };\n'],["file:///node_modules/typia/lib/Resolved.d.ts",'/**\n * Resolved type erased every methods.\n *\n * `Resolved` is a type of TMP (Type Meta Programming) type which converts\n * its argument as a resolved type that erased every method properties.\n *\n * If the target argument is a built-in class which returns its origin primitive type\n * through the `valueOf()` method like the `String` or `Number`, its return type would\n * be the `string` or `number`. Otherwise, the built-in class does not have the\n * `valueOf()` method, the return type would be same with the target argument.\n *\n * Otherwise, the target argument is a type of custom class, all of its custom methods\n * would be erased and its prototype would be changed to the primitive `object`.\n * Therefore, return type of the TMP type finally be the resolved object.\n *\n * Before | After\n * ------------------------|----------------------------------------\n * `Boolean` | `boolean`\n * `Number` | `number`\n * `BigInt` | `bigint`\n * `String` | `string`\n * `Class` | `interface`\n * Native Class or Others | No change\n *\n * @template T Target argument type.\n * @author Jeongho Nam - https://github.com/samchon\n * @author Kyungsu Kang - https://github.com/kakasoo\n */\nexport type Resolved = Equal> extends true ? T : ResolvedMain;\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\ntype ResolvedMain = T extends [never] ? never : ValueOf extends boolean | number | bigint | string ? ValueOf : T extends Function ? never : T extends object ? ResolvedObject : ValueOf;\ntype ResolvedObject = T extends Array ? IsTuple extends true ? ResolvedTuple : ResolvedMain[] : T extends Set ? Set> : T extends Map ? Map, ResolvedMain> : T extends WeakSet | WeakMap ? never : T extends Date | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array | ArrayBuffer | SharedArrayBuffer | DataView ? T : {\n [P in keyof T]: ResolvedMain;\n};\ntype ResolvedTuple = T extends [] ? [] : T extends [infer F] ? [ResolvedMain] : T extends [infer F, ...infer Rest extends readonly any[]] ? [ResolvedMain, ...ResolvedTuple] : T extends [(infer F)?] ? [ResolvedMain?] : T extends [(infer F)?, ...infer Rest extends readonly any[]] ? [ResolvedMain?, ...ResolvedTuple] : [];\ntype IsTuple = [T] extends [\n never\n] ? false : T extends readonly any[] ? number extends T["length"] ? false : true : false;\ntype ValueOf = IsValueOf extends true ? boolean : IsValueOf extends true ? number : IsValueOf extends true ? string : Instance;\ntype IsValueOf> = Instance extends Object ? Object extends IValueOf ? Instance extends Primitive ? false : true : false : false;\ninterface IValueOf {\n valueOf(): T;\n}\nexport {};\n'],["file:///node_modules/typia/lib/schemas/json/IJsonApplication.d.ts",'import { IJsonComponents } from "./IJsonComponents";\nimport { IJsonSchema } from "./IJsonSchema";\nexport interface IJsonApplication {\n schemas: IJsonSchema[];\n components: IJsonComponents;\n purpose: "swagger" | "ajv";\n surplus: boolean;\n}\n'],["file:///node_modules/typia/lib/schemas/json/IJsonComponents.d.ts",'import { IJsonSchema } from "./IJsonSchema";\nexport interface IJsonComponents {\n schemas?: undefined | Record;\n}\nexport declare namespace IJsonComponents {\n /**\n * @deprecated\n */\n export interface IObject extends IJsonSchema.IObject {\n $id?: undefined | string;\n }\n export type IAlias = IJsonSchema & IIdentified;\n interface IIdentified {\n $id?: undefined | string;\n $recursiveAnchor?: undefined | boolean;\n }\n export {};\n}\n'],["file:///node_modules/typia/lib/schemas/json/IJsonSchema.d.ts",'import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";\nimport { IMetadataTypeTag } from "../metadata/IMetadataTypeTag";\nimport { Atomic } from "../../typings/Atomic";\nimport { Type } from "../../tags/Type";\nexport type IJsonSchema = IJsonSchema.Known | IJsonSchema.IUnknown;\nexport declare namespace IJsonSchema {\n type Known = IEnumeration<"boolean"> | IEnumeration<"number"> | IEnumeration<"string"> | IBoolean | IInteger | INumber | IString | IArray | ITuple | IObject | IReference | INullOnly | IOneOf;\n interface IUnknown extends IAttribute {\n type?: undefined | undefined;\n }\n interface IEnumeration> extends Omit, "x-typia-typeTags"> {\n enum: Array;\n }\n interface IAtomic> extends ISignificant {\n default?: undefined | Atomic.Mapper[Literal];\n }\n interface IString extends IAtomic<"string"> {\n minLength?: undefined | (number & Type<"uint32">);\n maxLength?: undefined | (number & Type<"uint32">);\n pattern?: undefined | string;\n format?: undefined | "byte" | "password" | "regex" | "uuid" | "email" | "hostname" | "idn-email" | "idn-hostname" | "iri" | "iri-reference" | "ipv4" | "ipv6" | "uri" | "uri-reference" | "uri-template" | "url" | "date-time" | "date" | "time" | "duration" | "json-pointer" | "relative-json-pointer" | (string & {});\n "x-typia-typeTags"?: undefined | IMetadataTypeTag[];\n }\n interface INumber extends IAtomic<"number"> {\n minimum?: undefined | number;\n maximum?: undefined | number;\n exclusiveMinimum?: undefined | boolean;\n exclusiveMaximum?: undefined | boolean;\n multipleOf?: undefined | number;\n "x-typia-typeTags"?: undefined | IMetadataTypeTag[];\n }\n interface IInteger extends IAtomic<"integer"> {\n minimum?: undefined | (number & Type<"int32">);\n maximum?: undefined | (number & Type<"int32">);\n exclusiveMinimum?: undefined | boolean;\n exclusiveMaximum?: undefined | boolean;\n multipleOf?: undefined | (number & Type<"int32">);\n "x-typia-typeTags"?: undefined | IMetadataTypeTag[];\n }\n interface IBoolean extends IAtomic<"boolean"> {\n "x-typia-typeTags"?: undefined | IMetadataTypeTag[];\n }\n interface IArray extends ISignificant<"array"> {\n items: IJsonSchema;\n minItems?: undefined | (number & Type<"uint32">);\n maxItems?: undefined | (number & Type<"uint32">);\n "x-typia-tuple"?: undefined | ITuple;\n "x-typia-typeTags"?: undefined | IMetadataTypeTag[];\n }\n interface ITuple extends ISignificant<"array"> {\n items: IJsonSchema[];\n minItems: number & Type<"uint32">;\n maxItems?: undefined | (number & Type<"uint32">);\n }\n interface IObject extends ISignificant<"object"> {\n properties: Record;\n required?: undefined | string[];\n patternProperties?: undefined | Record;\n additionalProperties?: undefined | IJsonSchema;\n "x-typia-patternProperties"?: undefined | Record;\n "x-typia-additionalProperties"?: undefined | IJsonSchema;\n }\n interface IReference extends IAttribute {\n $ref: string;\n }\n interface INullOnly extends IAttribute {\n type: "null";\n }\n interface IOneOf extends IAttribute {\n oneOf: IJsonSchema[];\n }\n interface ISignificant extends IAttribute {\n type: Literal;\n /**\n * Only when swagger mode.\n */\n nullable?: undefined | boolean;\n }\n interface IAttribute {\n deprecated?: undefined | boolean;\n title?: undefined | string;\n description?: undefined | string;\n "x-typia-jsDocTags"?: undefined | IJsDocTagInfo[];\n "x-typia-required"?: undefined | boolean;\n "x-typia-optional"?: undefined | boolean;\n "x-typia-rest"?: undefined | boolean;\n }\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IJsDocTagInfo.d.ts","export interface IJsDocTagInfo {\n name: string;\n text?: IJsDocTagInfo.IText[];\n}\nexport declare namespace IJsDocTagInfo {\n interface IText {\n text: string;\n kind: string;\n }\n}\n"],["file:///node_modules/typia/lib/schemas/metadata/IMetadata.d.ts",'import { IMetadataAtomic } from "./IMetadataAtomic";\nimport { IMetadataConstant } from "./IMetadataConstant";\nimport { IMetadataEntry } from "./IMetadataEntry";\nimport { IMetadataEscaped } from "./IMetadataEscaped";\nimport { IMetadataTypeTag } from "./IMetadataTypeTag";\nexport interface IMetadata {\n any: boolean;\n required: boolean;\n optional: boolean;\n nullable: boolean;\n functional: boolean;\n atomics: IMetadataAtomic[];\n constants: IMetadataConstant[];\n templates: IMetadata[][];\n escaped: IMetadataEscaped | null;\n rest: IMetadata | null;\n arrays: {\n name: string;\n tags: IMetadataTypeTag[][];\n }[];\n tuples: {\n name: string;\n tags: IMetadataTypeTag[][];\n }[];\n objects: string[];\n aliases: string[];\n natives: string[];\n sets: IMetadata[];\n maps: IMetadataEntry[];\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataAlias.d.ts",'import { IJsDocTagInfo } from "./IJsDocTagInfo";\nimport { IMetadata } from "./IMetadata";\nexport interface IMetadataAlias {\n name: string;\n value: IMetadata;\n nullables: boolean[];\n description: string | null;\n jsDocTags: IJsDocTagInfo[];\n recursive: boolean;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataApplication.d.ts",'import { IMetadata } from "./IMetadata";\nimport { IMetadataComponents } from "./IMetadataComponents";\nexport interface IMetadataApplication {\n metadatas: IMetadata[];\n components: IMetadataComponents;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataArray.d.ts",'import { IMetadataArrayType } from "./IMetadataArrayType";\nimport { IMetadataTypeTag } from "./IMetadataTypeTag";\nexport interface IMetadataArray {\n type: IMetadataArrayType;\n tags: IMetadataTypeTag[][];\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataArrayType.d.ts",'import { IMetadata } from "./IMetadata";\nexport interface IMetadataArrayType {\n name: string;\n value: IMetadata;\n nullables: boolean[];\n recursive: boolean;\n index: number | null;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataAtomic.d.ts",'import { IMetadataTypeTag } from "./IMetadataTypeTag";\nexport interface IMetadataAtomic {\n type: "boolean" | "bigint" | "number" | "string";\n tags: IMetadataTypeTag[][];\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataComponents.d.ts",'import { IMetadataAlias } from "./IMetadataAlias";\nimport { IMetadataArrayType } from "./IMetadataArrayType";\nimport { IMetadataObject } from "./IMetadataObject";\nimport { IMetadataTupleType } from "./IMetadataTupleType";\nexport interface IMetadataComponents {\n objects: IMetadataObject[];\n aliases: IMetadataAlias[];\n arrays: IMetadataArrayType[];\n tuples: IMetadataTupleType[];\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataConstant.d.ts",'import { Atomic } from "../../typings/Atomic";\nexport type IMetadataConstant = IMetadataConstant.IBase<"boolean", boolean> | IMetadataConstant.IBase<"number", number> | IMetadataConstant.IBase<"string", string> | IMetadataConstant.IBase<"bigint", string>;\nexport declare namespace IMetadataConstant {\n interface IBase {\n type: Type;\n values: Value[];\n }\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataDictionary.d.ts",'import { MetadataAlias } from "./MetadataAlias";\nimport { MetadataArrayType } from "./MetadataArrayType";\nimport { MetadataObject } from "./MetadataObject";\nimport { MetadataTupleType } from "./MetadataTupleType";\nexport interface IMetadataDictionary {\n objects: Map;\n aliases: Map;\n arrays: Map;\n tuples: Map;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataEntry.d.ts",'import { IMetadata } from "./IMetadata";\nexport interface IMetadataEntry {\n key: IMetadata;\n value: IMetadata;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataEscaped.d.ts",'import { IMetadata } from "./IMetadata";\nexport interface IMetadataEscaped {\n original: IMetadata;\n returns: IMetadata;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataObject.d.ts",'import { IJsDocTagInfo } from "./IJsDocTagInfo";\nimport { IMetadataProperty } from "./IMetadataProperty";\nexport interface IMetadataObject {\n name: string;\n properties: IMetadataProperty[];\n description?: undefined | string;\n jsDocTags: IJsDocTagInfo[];\n index: number;\n recursive: boolean;\n nullables: boolean[];\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataProperty.d.ts",'import { IJsDocTagInfo } from "./IJsDocTagInfo";\nimport { IMetadata } from "./IMetadata";\nexport interface IMetadataProperty {\n key: IMetadata;\n value: IMetadata;\n description: string | null;\n jsDocTags: IJsDocTagInfo[];\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataTuple.d.ts",'import { IMetadataTupleType } from "./IMetadataTupleType";\nimport { IMetadataTypeTag } from "./IMetadataTypeTag";\nexport interface IMetadataTuple {\n type: IMetadataTupleType;\n tags: IMetadataTypeTag[][];\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataTupleType.d.ts",'import { IMetadata } from "./IMetadata";\nexport interface IMetadataTupleType {\n name: string;\n elements: IMetadata[];\n index: number | null;\n recursive: boolean;\n nullables: boolean[];\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/IMetadataTypeTag.d.ts",'export interface IMetadataTypeTag {\n target: "boolean" | "bigint" | "number" | "string" | "array";\n name: string;\n kind: string;\n exclusive: boolean | string[];\n value?: any;\n validate?: string | undefined;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/Metadata.d.ts",'import { IMetadata } from "./IMetadata";\nimport { IMetadataDictionary } from "./IMetadataDictionary";\nimport { MetadataAlias } from "./MetadataAlias";\nimport { MetadataArray } from "./MetadataArray";\nimport { MetadataAtomic } from "./MetadataAtomic";\nimport { MetadataConstant } from "./MetadataConstant";\nimport { MetadataEscaped } from "./MetadataEscaped";\nimport { MetadataObject } from "./MetadataObject";\nimport { MetadataTuple } from "./MetadataTuple";\nexport declare class Metadata {\n any: boolean;\n required: boolean;\n optional: boolean;\n nullable: boolean;\n functional: boolean;\n escaped: MetadataEscaped | null;\n atomics: MetadataAtomic[];\n constants: MetadataConstant[];\n templates: Metadata[][];\n rest: Metadata | null;\n aliases: MetadataAlias[];\n arrays: MetadataArray[];\n tuples: MetadataTuple[];\n objects: MetadataObject[];\n natives: string[];\n sets: Metadata[];\n maps: Metadata.Entry[];\n /**\n * @hidden\n */\n private constructor();\n toJSON(): IMetadata;\n static from(meta: IMetadata, dict: IMetadataDictionary): Metadata;\n getName(): string;\n empty(): boolean;\n size(): number;\n bucket(): number;\n isConstant(): boolean;\n isRequired(): boolean;\n isSoleLiteral(): boolean;\n}\nexport declare namespace Metadata {\n const intersects: (x: Metadata, y: Metadata) => boolean;\n const covers: (x: Metadata, y: Metadata, level?: number) => boolean;\n}\nexport declare namespace Metadata {\n interface Entry {\n key: Metadata;\n value: Metadata;\n }\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataAlias.d.ts",'import { IJsDocTagInfo } from "./IJsDocTagInfo";\nimport { IMetadataAlias } from "./IMetadataAlias";\nimport { Metadata } from "./Metadata";\nexport declare class MetadataAlias {\n readonly name: string;\n readonly value: Metadata;\n readonly description: string | null;\n readonly jsDocTags: IJsDocTagInfo[];\n readonly recursive: boolean;\n readonly nullables: boolean[];\n /**\n * @hidden\n */\n private constructor();\n toJSON(): IMetadataAlias;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataApplication.d.ts",'import { IMetadataApplication } from "./IMetadataApplication";\nimport { Metadata } from "./Metadata";\nimport { MetadataComponents } from "./MetadataComponents";\nexport declare class MetadataApplication {\n readonly metadatas: Metadata[];\n readonly components: MetadataComponents;\n /**\n * @hidden\n */\n private constructor();\n static from(app: IMetadataApplication): MetadataApplication;\n toJSON(): IMetadataApplication;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataArray.d.ts",'import { ClassProperties } from "../../typings/ClassProperties";\nimport { IMetadataArray } from "./IMetadataArray";\nimport { IMetadataTypeTag } from "./IMetadataTypeTag";\nimport { MetadataArrayType } from "./MetadataArrayType";\nexport declare class MetadataArray {\n readonly type: MetadataArrayType;\n readonly tags: IMetadataTypeTag[][];\n private name_?;\n /**\n * @hidden\n */\n private constructor();\n static create(props: ClassProperties): MetadataArray;\n getName(): string;\n toJSON(): IMetadataArray;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataArrayType.d.ts",'import { IMetadataArrayType } from "./IMetadataArrayType";\nimport { Metadata } from "./Metadata";\nexport declare class MetadataArrayType {\n readonly name: string;\n readonly value: Metadata;\n readonly nullables: boolean[];\n readonly recursive: boolean;\n readonly index: number | null;\n /**\n * @hidden\n */\n private constructor();\n toJSON(): IMetadataArrayType;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataAtomic.d.ts",'import { ClassProperties } from "../../typings/ClassProperties";\nimport { IMetadataAtomic } from "./IMetadataAtomic";\nimport { IMetadataTypeTag } from "./IMetadataTypeTag";\nexport declare class MetadataAtomic {\n readonly type: "boolean" | "bigint" | "number" | "string";\n readonly tags: IMetadataTypeTag[][];\n private name_?;\n static create(props: ClassProperties): MetadataAtomic;\n static from(json: IMetadataAtomic): MetadataAtomic;\n getName(): string;\n toJSON(): IMetadataAtomic;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataComponents.d.ts",'import { IMetadataComponents } from "./IMetadataComponents";\nimport { IMetadataDictionary } from "./IMetadataDictionary";\nimport { MetadataAlias } from "./MetadataAlias";\nimport { MetadataArrayType } from "./MetadataArrayType";\nimport { MetadataObject } from "./MetadataObject";\nimport { MetadataTupleType } from "./MetadataTupleType";\nexport declare class MetadataComponents {\n readonly aliases: MetadataAlias[];\n readonly objects: MetadataObject[];\n readonly arrays: MetadataArrayType[];\n readonly tuples: MetadataTupleType[];\n readonly dictionary: IMetadataDictionary;\n private constructor();\n static from(json: IMetadataComponents): MetadataComponents;\n toJSON(): IMetadataComponents;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataConstant.d.ts",'import { ClassProperties } from "../../typings/ClassProperties";\nimport { IMetadataConstant } from "./IMetadataConstant";\nexport declare class MetadataConstant {\n readonly type: "boolean" | "bigint" | "number" | "string";\n readonly values: boolean[] | bigint[] | number[] | string[];\n private constructor();\n static create(props: ClassProperties): MetadataConstant;\n static from(json: IMetadataConstant): MetadataConstant;\n toJSON(): IMetadataConstant;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataEscaped.d.ts",'import { IMetadataEscaped } from "./IMetadataEscaped";\nimport { Metadata } from "./Metadata";\nexport declare class MetadataEscaped {\n readonly original: Metadata;\n readonly returns: Metadata;\n /**\n * @hidden\n */\n private constructor();\n getName(): string;\n toJSON(): IMetadataEscaped;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataObject.d.ts",'import { IJsDocTagInfo } from "./IJsDocTagInfo";\nimport { IMetadataObject } from "./IMetadataObject";\nimport { MetadataProperty } from "./MetadataProperty";\nexport declare class MetadataObject {\n readonly name: string;\n readonly properties: Array;\n readonly description: string | undefined;\n readonly jsDocTags: IJsDocTagInfo[];\n readonly index: number;\n validated: boolean;\n recursive: boolean;\n nullables: boolean[];\n /**\n * @hidden\n */\n private constructor();\n toJSON(): IMetadataObject;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataProperty.d.ts",'import { IJsDocTagInfo } from "./IJsDocTagInfo";\nimport { IMetadataProperty } from "./IMetadataProperty";\nimport { Metadata } from "./Metadata";\nexport declare class MetadataProperty {\n readonly key: Metadata;\n readonly value: Metadata;\n readonly description: string | null;\n readonly jsDocTags: IJsDocTagInfo[];\n /**\n * @hidden\n */\n private constructor();\n toJSON(): IMetadataProperty;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataTuple.d.ts",'import { IMetadataTuple } from "./IMetadataTuple";\nimport { IMetadataTypeTag } from "./IMetadataTypeTag";\nimport { MetadataTupleType } from "./MetadataTupleType";\nexport declare class MetadataTuple {\n readonly type: MetadataTupleType;\n readonly tags: IMetadataTypeTag[][];\n /**\n * @hidden\n */\n private constructor();\n toJSON(): IMetadataTuple;\n}\n'],["file:///node_modules/typia/lib/schemas/metadata/MetadataTupleType.d.ts",'import { ClassProperties } from "../../typings/ClassProperties";\nimport { IMetadataTupleType } from "./IMetadataTupleType";\nimport { Metadata } from "./Metadata";\nexport declare class MetadataTupleType {\n readonly name: string;\n readonly elements: Metadata[];\n readonly index: number | null;\n readonly recursive: boolean;\n readonly nullables: boolean[];\n static create(props: ClassProperties): MetadataTupleType;\n isRest(): boolean;\n toJSON(): IMetadataTupleType;\n}\n'],["file:///node_modules/typia/lib/SnakeCase.d.ts",'/**\n * Snake case type.\n *\n * `SnakeCase` type is a type that all keys of an object are converted to snake case.\n *\n * It also erase every method properties like {@link Resolved} type.\n *\n * @template T Target type to be snake cased\n * @author Jeongho Nam - https://github.com/samchon\n */\nexport type SnakeCase = Equal> extends true ? T : SnakageMain;\ntype Equal = X extends Y ? (Y extends X ? true : false) : false;\ntype SnakageMain = T extends [never] ? never : T extends {\n valueOf(): boolean | bigint | number | string;\n} ? ValueOf : T extends Function ? never : T extends object ? SnakageObject : T;\ntype SnakageObject = T extends Array ? IsTuple extends true ? SnakageTuple : SnakageMain[] : T extends Set ? Set> : T extends Map ? Map, SnakageMain> : T extends WeakSet | WeakMap ? never : T extends Date | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array | ArrayBuffer | SharedArrayBuffer | DataView ? T : {\n [Key in keyof T as SnakageString]: SnakageMain;\n};\ntype IsTuple = [T] extends [\n never\n] ? false : T extends readonly any[] ? number extends T["length"] ? false : true : false;\ntype SnakageTuple = T extends [] ? [] : T extends [infer F] ? [SnakageMain] : T extends [infer F, ...infer Rest extends readonly any[]] ? [SnakageMain, ...SnakageTuple] : T extends [(infer F)?] ? [SnakageMain?] : T extends [(infer F)?, ...infer Rest extends readonly any[]] ? [SnakageMain?, ...SnakageTuple] : [];\ntype ValueOf = IsValueOf extends true ? boolean : IsValueOf extends true ? number : IsValueOf extends true ? string : Instance;\ntype IsValueOf> = Instance extends Object ? Object extends IValueOf ? Instance extends Primitive ? false : true : false : false;\ninterface IValueOf {\n valueOf(): T;\n}\ntype SnakageString = Key extends `${infer _}` ? SnakageStringRepeatedly : Key;\ntype SnakageStringRepeatedly = S extends `${infer First}${infer Second}${infer Rest}` ? `${Underscore}${Lowercase}${Underscore}${Lowercase}${SnakageStringRepeatedly}` : S extends `${infer First}` ? `${Underscore}${Lowercase}` : "";\ntype Underscore = First extends UpperAlphabetic | "" | "_" ? "" : Second extends UpperAlphabetic ? "_" : "";\ntype UpperAlphabetic = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z";\nexport {};\n'],["file:///node_modules/typia/lib/tags/Default.d.ts",'import { TagBase } from "./TagBase";\nexport type Default = TagBase<{\n target: Value extends boolean ? "boolean" : Value extends bigint ? "bigint" : Value extends number ? "number" : "string";\n kind: "default";\n value: Value;\n exclusive: true;\n}>;\n'],["file:///node_modules/typia/lib/tags/ExclusiveMaximum.d.ts",'import { TagBase } from "./TagBase";\nexport type ExclusiveMaximum = TagBase<{\n target: Value extends number ? "number" : "bigint";\n kind: "exclusiveMaximum";\n value: Value;\n validate: `$input < ${Numeric}`;\n exclusive: ["exclusiveMaximum", "maximum"];\n}>;\ntype Numeric = Value extends number ? Value : `BigInt(${Value})`;\nexport {};\n'],["file:///node_modules/typia/lib/tags/ExclusiveMinimum.d.ts",'import { TagBase } from "./TagBase";\nexport type ExclusiveMinimum = TagBase<{\n target: Value extends number ? "number" : "bigint";\n kind: "exclusiveMinimum";\n value: Value;\n validate: `${Numeric} < $input`;\n exclusive: ["exclusiveMinimum", "minimum"];\n}>;\ntype Numeric = Value extends number ? Value : `BigInt(${Value})`;\nexport {};\n'],["file:///node_modules/typia/lib/tags/Format.d.ts",'import type { TagBase } from "./TagBase";\nimport type { FormatCheatSheet } from "./internal/FormatCheatSheet";\nexport type Format = TagBase<{\n target: "string";\n kind: "format";\n value: Value;\n validate: Format.Validator[Value];\n exclusive: ["format", "pattern"];\n}>;\nexport declare namespace Format {\n type Validator = typeof FormatCheatSheet;\n}\n'],["file:///node_modules/typia/lib/tags/index.d.ts",'export * from "./Default";\nexport * from "./ExclusiveMaximum";\nexport * from "./ExclusiveMinimum";\nexport * from "./Format";\nexport * from "./Maximum";\nexport * from "./MaxItems";\nexport * from "./MaxLength";\nexport * from "./Minimum";\nexport * from "./MinItems";\nexport * from "./MinLength";\nexport * from "./MultipleOf";\nexport * from "./Pattern";\nexport * from "./TagBase";\nexport * from "./Type";\n'],["file:///node_modules/typia/lib/tags/internal/FormatCheatSheet.d.ts",'/**\n * @reference https://github.dev/ajv-validator/ajv-formats/blob/master/src/formats.ts\n */\nexport declare const FormatCheatSheet: {\n readonly byte: "/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm.test($input)";\n readonly password: "true";\n readonly regex: "(() => { try { new RegExp($input); return true; } catch { return false; } })()";\n readonly uuid: "/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i.test($input)";\n readonly email: "/^[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\\\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test($input)";\n readonly hostname: "/^(?=.{1,253}\\\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\\\.?$/i.test($input)";\n readonly "idn-email": "/^(([^<>()[\\\\]\\\\.,;:\\\\s@\\\\\\"]+(\\\\.[^<>()[\\\\]\\\\.,;:\\\\s@\\\\\\"]+)*)|(\\\\\\".+\\\\\\"))@(([^<>()[\\\\]\\\\.,;:\\\\s@\\\\\\"]+\\\\.)+[^<>()[\\\\]\\\\.,;:\\\\s@\\\\\\"]{2,})$/i.test($input)";\n readonly "idn-hostname": "/^([a-z0-9\\\\u00a1-\\\\uffff0-9]+(-[a-z0-9\\\\u00a1-\\\\uffff0-9]+)*\\\\.)+[a-z\\\\u00a1-\\\\uffff]{2,}$/i.test($input)";\n readonly iri: "/^[A-Za-z][\\\\d+-.A-Za-z]*:[^\\\\u0000-\\\\u0020\\"<>\\\\\\\\^`{|}]*$/u.test($input)";\n readonly "iri-reference": "/^[A-Za-z][\\\\d+-.A-Za-z]*:[^\\\\u0000-\\\\u0020\\"<>\\\\\\\\^`{|}]*$/u.test($input)";\n readonly ipv4: "/^(?:(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]?\\\\d)$/.test($input)";\n readonly ipv6: "/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))$/i.test($input)";\n readonly uri: "/\\\\/|:/.test($input) && /^(?:[a-z][a-z0-9+\\\\-.]*:)(?:\\\\/?\\\\/(?:(?:[a-z0-9\\\\-._~!$&\'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\\\.[a-z0-9\\\\-._~!$&\'()*+,;=:]+)\\\\]|(?:(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)|(?:[a-z0-9\\\\-._~!$&\'()*+,;=]|%[0-9a-f]{2})*)(?::\\\\d*)?(?:\\\\/(?:[a-z0-9\\\\-._~!$&\'()*+,;=:@]|%[0-9a-f]{2})*)*|\\\\/(?:(?:[a-z0-9\\\\-._~!$&\'()*+,;=:@]|%[0-9a-f]{2})+(?:\\\\/(?:[a-z0-9\\\\-._~!$&\'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\\\-._~!$&\'()*+,;=:@]|%[0-9a-f]{2})+(?:\\\\/(?:[a-z0-9\\\\-._~!$&\'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\\\?(?:[a-z0-9\\\\-._~!$&\'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\\\-._~!$&\'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i.test($input)";\n readonly "uri-reference": "/^(?:[a-z][a-z0-9+\\\\-.]*:)?(?:\\\\/?\\\\/(?:(?:[a-z0-9\\\\-._~!$&\'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\\\.[a-z0-9\\\\-._~!$&\'()*+,;=:]+)\\\\]|(?:(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d?)|(?:[a-z0-9\\\\-._~!$&\'\\"()*+,;=]|%[0-9a-f]{2})*)(?::\\\\d*)?(?:\\\\/(?:[a-z0-9\\\\-._~!$&\'\\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\\\/(?:(?:[a-z0-9\\\\-._~!$&\'\\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\\\/(?:[a-z0-9\\\\-._~!$&\'\\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\\\-._~!$&\'\\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\\\/(?:[a-z0-9\\\\-._~!$&\'\\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\\\?(?:[a-z0-9\\\\-._~!$&\'\\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\\\-._~!$&\'\\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i.test($input)";\n readonly "uri-template": "/^(?:(?:[^\\\\x00-\\\\x20\\"\'<>%\\\\\\\\^`{|}]|%[0-9a-f]{2})|\\\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\\\*)?)*\\\\})*$/i.test($input)";\n readonly url: "/^(?:https?|ftp):\\\\/\\\\/(?:\\\\S+(?::\\\\S*)?@)?(?:(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z0-9\\\\u{00a1}-\\\\u{ffff}]+-)*[a-z0-9\\\\u{00a1}-\\\\u{ffff}]+)(?:\\\\.(?:[a-z0-9\\\\u{00a1}-\\\\u{ffff}]+-)*[a-z0-9\\\\u{00a1}-\\\\u{ffff}]+)*(?:\\\\.(?:[a-z\\\\u{00a1}-\\\\u{ffff}]{2,})))(?::\\\\d{2,5})?(?:\\\\/[^\\\\s]*)?$/iu.test($input)";\n readonly "date-time": "!isNaN(new Date($input).getTime())";\n readonly date: "/^(\\\\d{4})-(\\\\d{2})-(\\\\d{2})$/.test($input)";\n readonly time: "/^(\\\\d\\\\d):(\\\\d\\\\d):(\\\\d\\\\d(?:\\\\.\\\\d+)?)(z|([+-])(\\\\d\\\\d)(?::?(\\\\d\\\\d))?)?$/i.test($input)";\n readonly duration: "/^P(?!$)((\\\\d+Y)?(\\\\d+M)?(\\\\d+D)?(T(?=\\\\d)(\\\\d+H)?(\\\\d+M)?(\\\\d+S)?)?|(\\\\d+W)?)$/.test($input)";\n readonly "json-pointer": "/^(?:\\\\/(?:[^~/]|~0|~1)*)*$/.test($input)";\n readonly "relative-json-pointer": "/^(?:0|[1-9][0-9]*)(?:#|(?:\\\\/(?:[^~/]|~0|~1)*)*)$/.test($input)";\n};\n'],["file:///node_modules/typia/lib/tags/Maximum.d.ts",'import { TagBase } from "./TagBase";\nexport type Maximum = TagBase<{\n target: Value extends number ? "number" : "bigint";\n kind: "maximum";\n value: Value;\n validate: `$input <= ${Numeric}`;\n exclusive: ["maximum", "exclusiveMaximum"];\n}>;\ntype Numeric = Value extends number ? Value : `BigInt(${Value})`;\nexport {};\n'],["file:///node_modules/typia/lib/tags/MaxItems.d.ts",'import { TagBase } from "./TagBase";\nexport type MaxItems = TagBase<{\n target: "array";\n kind: "maxItems";\n value: Value;\n validate: `$input.length <= ${Value}`;\n exclusive: true;\n}>;\n'],["file:///node_modules/typia/lib/tags/MaxLength.d.ts",'import { TagBase } from "./TagBase";\nexport type MaxLength = TagBase<{\n target: "string";\n kind: "maxLength";\n value: Value;\n validate: `$input.length <= ${Value}`;\n exclusive: true;\n}>;\n'],["file:///node_modules/typia/lib/tags/Minimum.d.ts",'import { TagBase } from "./TagBase";\nexport type Minimum = TagBase<{\n target: Value extends number ? "number" : "bigint";\n kind: "minimum";\n value: Value;\n validate: `${Numeric} <= $input`;\n exclusive: ["minimum", "exclusiveMinimum"];\n}>;\ntype Numeric = Value extends number ? Value : `BigInt(${Value})`;\nexport {};\n'],["file:///node_modules/typia/lib/tags/MinItems.d.ts",'import { TagBase } from "./TagBase";\nexport type MinItems = TagBase<{\n target: "array";\n kind: "minItems";\n value: Value;\n validate: `${Value} <= $input.length`;\n exclusive: true;\n}>;\n'],["file:///node_modules/typia/lib/tags/MinLength.d.ts",'import { TagBase } from "./TagBase";\nexport type MinLength = TagBase<{\n target: "string";\n kind: "minLength";\n value: Value;\n validate: `${Value} <= $input.length`;\n exclusive: true;\n}>;\n'],["file:///node_modules/typia/lib/tags/MultipleOf.d.ts",'import { TagBase } from "./TagBase";\nexport type MultipleOf = TagBase<{\n target: Value extends bigint ? "bigint" : "number";\n kind: "multipleOf";\n value: Value;\n validate: `$input % ${Numeric} === ${Value extends bigint ? Numeric<0n> : 0}`;\n exclusive: true;\n}>;\ntype Numeric = Value extends number ? Value : `BigInt(${Value})`;\nexport {};\n'],["file:///node_modules/typia/lib/tags/Pattern.d.ts",'import { TagBase } from "./TagBase";\nexport type Pattern = TagBase<{\n target: "string";\n kind: "pattern";\n value: Value;\n validate: `/${Value}/.test($input)`;\n exclusive: ["format", "pattern"];\n}>;\n'],["file:///node_modules/typia/lib/tags/TagBase.d.ts",'export type TagBase> = {\n /**\n * This is a dummy property for compilation.\n *\n * It does not mean anything in runtime.\n */\n "typia.tag"?: Props;\n};\nexport declare namespace TagBase {\n interface IProps {\n /**\n * Target type.\n *\n * If user tries to adapt this tag to a different type, it would be a compile\n * error.\n *\n * For example, you\'ve configured target type as `string`, but user adapted it\n * onto a `number` type (`number & YourCustomTag`), then it would be\n * blocked by TypeScript compiler.\n */\n target: Target;\n /**\n * What kind of tag is this?\n */\n kind: Kind;\n /**\n * Value to be configured by user.\n */\n value: Value;\n /**\n * Validation script.\n *\n * This script would be inserted into the generated validation function.\n * In here script, target variable name must be `$input`. The variable name\n * `$input` would be transformed to the suitable when compilation.\n *\n * Also, If you\'ve take a mistake on this script, compile error would be\n * occured. So, define it with confidence. Compiler will block all your\n * mistakes.\n */\n validate?: Validate;\n /**\n * Exclusive option.\n *\n * If this property configured as `true`, same {@link kind} tag cannot be\n * duplicated in the target type. Otherwise, if you\'ve configured this\n * property as string array, all of the {@link kind} value assigned\n * tags cannot be compatible in the target type.\n *\n * @default false\n */\n exclusive?: Exclusive | string[];\n }\n}\n'],["file:///node_modules/typia/lib/tags/Type.d.ts",'import { TagBase } from "./TagBase";\nexport type Type = TagBase<{\n target: Value extends "int64" | "uint64" ? "bigint" | "number" : "number";\n kind: "type";\n value: Value;\n validate: Value extends "int32" ? `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647` : Value extends "uint32" ? `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295` : Value extends "int64" ? {\n number: `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`;\n bigint: `true`;\n } : Value extends "uint64" ? {\n number: `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`;\n bigint: `BigInt(0) <= $input`;\n } : Value extends "float" ? `-1.175494351e38 <= $input && $input <= 3.4028235e38` : `true`;\n exclusive: true;\n}>;\n'],["file:///node_modules/typia/lib/transform.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "./transformers/IProject";\nimport { ITransformOptions } from "./transformers/ITransformOptions";\nexport declare const transform: (program: ts.Program, options: ITransformOptions | undefined, extras: IProject["extras"]) => ts.TransformerFactory;\nexport default transform;\n'],["file:///node_modules/typia/lib/transformers/CallExpressionTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "./IProject";\nexport declare namespace CallExpressionTransformer {\n const transform: (project: IProject) => (expression: ts.CallExpression) => ts.Expression | null;\n}\n'],["file:///node_modules/typia/lib/transformers/features/AssertTransformer.d.ts",'/// \nexport declare namespace AssertTransformer {\n const transform: (props: {\n equals: boolean;\n guard: boolean;\n }) => (project: import("../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/CreateAssertTransformer.d.ts",'/// \nexport declare namespace CreateAssertTransformer {\n const transform: (props: {\n equals: boolean;\n guard: boolean;\n }) => (project: import("../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/CreateIsTransformer.d.ts",'/// \nexport declare namespace CreateIsTransformer {\n const transform: (equals: boolean) => (project: import("../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/CreateRandomTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../IProject";\nexport declare namespace CreateRandomTransformer {\n const transform: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (expression: ts.CallExpression) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/CreateValidateTransformer.d.ts",'/// \nexport declare namespace CreateValidateTransformer {\n const transform: (equals: boolean) => (project: import("../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpAssertHeadersTransformer.d.ts",'/// \nexport declare namespace CreateHttpAssertHeadersTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpAssertQueryTransformer.d.ts",'/// \nexport declare namespace CreateHttpAssertQueryTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpHeadersTransformer.d.ts",'/// \nexport declare namespace CreateHttpHeadersTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpIsHeadersTransformer.d.ts",'/// \nexport declare namespace CreateHttpIsHeadersTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpIsQueryTransformer.d.ts",'/// \nexport declare namespace CreateHttpIsQueryTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpParameterTransformer.d.ts",'/// \nexport declare namespace CreateHttpParameterTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpQueryTransformer.d.ts",'/// \nexport declare namespace CreateHttpQueryTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpValidateHeadersTransformer.d.ts",'/// \nexport declare namespace CreateHttpValidateHeadersTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/CreateHttpValidateQueryTransformer.d.ts",'/// \nexport declare namespace CreateHttpValidateQueryTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpAssertHeadersTransformer.d.ts",'/// \nexport declare namespace HttpAssertHeadersTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpAssertQueryTransformer.d.ts",'/// \nexport declare namespace HttpAssertQueryTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpHeadersTransformer.d.ts",'/// \nexport declare namespace HttpHeadersTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpIsHeadersTransformer.d.ts",'/// \nexport declare namespace HttpIsHeadersTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpIsQueryTransformer.d.ts",'/// \nexport declare namespace HttpIsQueryTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpParameterTransformer.d.ts",'/// \nexport declare namespace HttpParameterTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpQueryTransformer.d.ts",'/// \nexport declare namespace HttpQueryTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpValidateHeadersTransformer.d.ts",'/// \nexport declare namespace HttpValidateHeadersTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/http/HttpValidateQueryTransformer.d.ts",'/// \nexport declare namespace HttpValidateQueryTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/IsTransformer.d.ts",'/// \nexport declare namespace IsTransformer {\n const transform: (equals: boolean) => (project: import("../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonApplicationTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../IProject";\nexport declare namespace JsonApplicationTransformer {\n const transform: (project: IProject) => (expression: ts.CallExpression) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonAssertParseTransformer.d.ts",'/// \nexport declare namespace JsonAssertParseTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonAssertStringifyTransformer.d.ts",'/// \nexport declare namespace JsonAssertStringifyTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonCreateAssertParseTransformer.d.ts",'/// \nexport declare namespace JsonCreateAssertParseTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.d.ts",'/// \nexport declare namespace JsonCreateAssertStringifyTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonCreateIsParseTransformer.d.ts",'/// \nexport declare namespace JsonCreateIsParseTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonCreateIsStringifyTransformer.d.ts",'/// \nexport declare namespace JsonCreateIsStringifyTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonCreateStringifyTransformer.d.ts",'/// \nexport declare namespace JsonCreateStringifyTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonCreateValidateParseTransformer.d.ts",'/// \nexport declare namespace JsonCreateValidateParseTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.d.ts",'/// \nexport declare namespace JsonCreateValidateStringifyTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonIsParseTransformer.d.ts",'/// \nexport declare namespace JsonIsParseTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonIsStringifyTransformer.d.ts",'/// \nexport declare namespace JsonIsStringifyTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonStringifyTransformer.d.ts",'/// \nexport declare namespace JsonStringifyTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonValidateParseTransformer.d.ts",'/// \nexport declare namespace JsonValidateParseTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/json/JsonValidateStringifyTransformer.d.ts",'/// \nexport declare namespace JsonValidateStringifyTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscAssertCloneTransformer.d.ts",'/// \nexport declare namespace MiscAssertCloneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscAssertPruneTransformer.d.ts",'/// \nexport declare namespace MiscAssertPruneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCloneTransformer.d.ts",'/// \nexport declare namespace MiscCloneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.d.ts",'/// \nexport declare namespace MiscCreateAssertCloneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.d.ts",'/// \nexport declare namespace MiscCreateAssertPruneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCreateCloneTransformer.d.ts",'/// \nexport declare namespace MiscCreateCloneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCreateIsCloneTransformer.d.ts",'/// \nexport declare namespace MiscCreateIsCloneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCreateIsPruneTransformer.d.ts",'/// \nexport declare namespace MiscCreateIsPruneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCreatePruneTransformer.d.ts",'/// \nexport declare namespace MiscCreatePruneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.d.ts",'/// \nexport declare namespace MiscCreateValidateCloneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.d.ts",'/// \nexport declare namespace MiscCreateValidatePruneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscIsCloneTransformer.d.ts",'/// \nexport declare namespace MiscIsCloneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscIsPruneTransformer.d.ts",'/// \nexport declare namespace MiscIsPruneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscLiteralsTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../IProject";\nexport declare namespace MiscLiteralsTransformer {\n const transform: (project: IProject) => (expression: ts.CallExpression) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscPruneTransformer.d.ts",'/// \nexport declare namespace MiscPruneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscValidateCloneTransformer.d.ts",'/// \nexport declare namespace MiscValidateCloneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/misc/MiscValidatePruneTransformer.d.ts",'/// \nexport declare namespace MiscValidatePruneTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/notations/NotationAssertGeneralTransformer.d.ts",'/// \nexport declare namespace NotationAssertGeneralTransformer {\n const transform: (rename: (str: string) => string) => (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/notations/NotationCreateAssertGeneralTransformer.d.ts",'/// \nexport declare namespace NotationCreateAssertGeneralTransformer {\n const transform: (rename: (str: string) => string) => (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/notations/NotationCreateGeneralTransformer.d.ts",'/// \nexport declare namespace NotationCreateGeneralTransformer {\n const transform: (rename: (str: string) => string) => (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/notations/NotationCreateIsGeneralTransformer.d.ts",'/// \nexport declare namespace NotationCreateIsGeneralTransformer {\n const transform: (rename: (str: string) => string) => (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/notations/NotationCreateValidateGeneralTransformer.d.ts",'/// \nexport declare namespace NotationCreateValidateGeneralTransformer {\n const transform: (rename: (str: string) => string) => (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/notations/NotationGeneralTransformer.d.ts",'/// \nexport declare namespace NotationGeneralTransformer {\n const transform: (rename: (str: string) => string) => (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/notations/NotationIsGeneralTransformer.d.ts",'/// \nexport declare namespace NotationIsGeneralTransformer {\n const transform: (rename: (str: string) => string) => (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/notations/NotationValidateGeneralTransformer.d.ts",'/// \nexport declare namespace NotationValidateGeneralTransformer {\n const transform: (rename: (str: string) => string) => (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufAssertDecodeTransformer.d.ts",'/// \nexport declare namespace ProtobufAssertDecodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufAssertEncodeTransformer.d.ts",'/// \nexport declare namespace ProtobufAssertEncodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.d.ts",'/// \nexport declare namespace ProtobufCreateAssertDecodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.d.ts",'/// \nexport declare namespace ProtobufCreateAssertEncodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufCreateDecodeTransformer.d.ts",'/// \nexport declare namespace ProtobufCreateDecodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufCreateEncodeTransformer.d.ts",'/// \nexport declare namespace ProtobufCreateEncodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.d.ts",'/// \nexport declare namespace ProtobufCreateIsDecodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.d.ts",'/// \nexport declare namespace ProtobufCreateIsEncodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.d.ts",'/// \nexport declare namespace ProtobufCreateValidateDecodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.d.ts",'/// \nexport declare namespace ProtobufCreateValidateEncodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufDecodeTransformer.d.ts",'/// \nexport declare namespace ProtobufDecodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufEncodeTransformer.d.ts",'/// \nexport declare namespace ProtobufEncodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufIsDecodeTransformer.d.ts",'/// \nexport declare namespace ProtobufIsDecodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufIsEncodeTransformer.d.ts",'/// \nexport declare namespace ProtobufIsEncodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufMessageTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../IProject";\nexport declare namespace ProtobufMessageTransformer {\n const transform: (project: IProject) => (_modulo: ts.LeftHandSideExpression) => (expression: ts.CallExpression) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufValidateDecodeTransformer.d.ts",'/// \nexport declare namespace ProtobufValidateDecodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/protobuf/ProtobufValidateEncodeTransformer.d.ts",'/// \nexport declare namespace ProtobufValidateEncodeTransformer {\n const transform: (project: import("../../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/RandomTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../IProject";\nexport declare namespace RandomTransformer {\n const transform: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (expression: ts.CallExpression) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/reflect/ReflectMetadataTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../../IProject";\nexport declare namespace ReflectMetadataTransformer {\n const transform: (project: IProject) => (_modulo: ts.LeftHandSideExpression) => (expression: ts.CallExpression) => ts.Expression;\n}\n'],["file:///node_modules/typia/lib/transformers/features/ValidateTransformer.d.ts",'/// \nexport declare namespace ValidateTransformer {\n const transform: (equals: boolean) => (project: import("../IProject").IProject) => (modulo: import("typescript").LeftHandSideExpression) => (expression: import("typescript").CallExpression) => import("typescript").CallExpression;\n}\n'],["file:///node_modules/typia/lib/transformers/FileTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "./IProject";\nexport declare namespace FileTransformer {\n const transform: (environments: Omit) => (context: ts.TransformationContext) => (file: ts.SourceFile) => ts.SourceFile;\n}\n'],["file:///node_modules/typia/lib/transformers/ImportTransformer.d.ts",'/// \nimport ts from "typescript";\nexport declare namespace ImportTransformer {\n const transform: (from: string) => (to: string) => (context: ts.TransformationContext) => (file: ts.SourceFile) => ts.SourceFile;\n}\n'],["file:///node_modules/typia/lib/transformers/internal/GenericTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "../IProject";\nexport declare namespace GenericTransformer {\n const scalar: (method: string) => (programmer: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name: string) => ts.ArrowFunction) => (project: IProject) => (modulo: ts.LeftHandSideExpression) => (expression: ts.CallExpression) => ts.CallExpression;\n const factory: (method: string) => (programmer: (project: IProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type, name: string) => ts.ArrowFunction) => (project: IProject) => (modulo: ts.LeftHandSideExpression) => (expression: ts.CallExpression) => ts.ArrowFunction;\n}\n'],["file:///node_modules/typia/lib/transformers/IProject.d.ts",'/// \nimport ts from "typescript";\nimport { ITransformOptions } from "./ITransformOptions";\nexport interface IProject {\n program: ts.Program;\n compilerOptions: ts.CompilerOptions;\n checker: ts.TypeChecker;\n printer: ts.Printer;\n options: ITransformOptions;\n context: ts.TransformationContext;\n extras: {\n addDiagnostic: (diag: ts.Diagnostic) => number;\n };\n}\n'],["file:///node_modules/typia/lib/transformers/ITransformOptions.d.ts","export interface ITransformOptions {\n /**\n * Whether to validate finite number or not.\n *\n * If configured true, number typed values would be validated by Number.isNaN().\n *\n * However, whatever you configure, it would be ignored when marshaling or parsing.\n *\n * - when marshaling, always be true\n * - assertStringify()\n * - validateEncode()\n * - when parsing, always be false\n * - assertParse()\n * - isDecode()\n *\n * @default false\n */\n finite?: undefined | boolean;\n /**\n * Whether to validate finite number or not.\n *\n * If configured true, number typed values would be validated by Number.isFinite().\n *\n * However, whatever you configure, it can be ignored in below case.\n *\n * - when `finite` option is true, this option would be ignored\n * - when marshaling, always be true\n * - assertStringify()\n * - validateEncode()\n * - when parsing, always be false\n * - assertParse()\n * - isDecode()\n *\n * @default false\n */\n numeric?: undefined | boolean;\n /**\n * Whether to validate functional type or not.\n *\n * However, whatever you configure, it becomes false when marshaling or parsing.\n *\n * @default false\n */\n functional?: undefined | boolean;\n /**\n * Whether to check undefined value or not.\n *\n * JavaScript can assign `undefined` value to a specific property and it is an\n * issue when validating without allowing superfluous properties. Should undefined\n * value assigned superfluous property be allowed or not?\n *\n * Note that, this option only works on {@link equals} function. Other function\n * like {@link assertEquals} or {@link validateEquals} would ignore this option\n * value and always allow the `undefined` value.\n *\n * @default true\n */\n undefined?: undefined | boolean;\n}\n"],["file:///node_modules/typia/lib/transformers/NodeTransformer.d.ts",'/// \nimport ts from "typescript";\nimport { IProject } from "./IProject";\nexport declare namespace NodeTransformer {\n const transform: (project: IProject) => (expression: ts.Node) => ts.Node | null;\n}\n'],["file:///node_modules/typia/lib/transformers/TransformerError.d.ts",'import { MetadataFactory } from "../factories/MetadataFactory";\nexport declare class TransformerError extends Error {\n readonly code: string;\n constructor(props: TransformerError.IProps);\n}\nexport declare namespace TransformerError {\n interface IProps {\n code: string;\n message: string;\n }\n const from: (method: string) => (errors: MetadataFactory.IError[]) => TransformerError;\n}\n'],["file:///node_modules/typia/lib/TypeGuardError.d.ts","export declare class TypeGuardError extends Error {\n readonly method: string;\n readonly path: string | undefined;\n readonly expected: string;\n readonly value: any;\n constructor(props: TypeGuardError.IProps);\n}\nexport declare namespace TypeGuardError {\n interface IProps {\n method: string;\n path?: undefined | string;\n expected: string;\n value: any;\n message?: undefined | string;\n }\n}\n"],["file:///node_modules/typia/lib/typings/Atomic.d.ts",'export declare namespace Atomic {\n type Type = boolean | number | string | bigint;\n type Literal = "boolean" | "integer" | "number" | "string" | "bigint";\n type Mapper = {\n boolean: boolean;\n integer: number;\n number: number;\n string: string;\n bigint: bigint;\n };\n}\n'],["file:///node_modules/typia/lib/typings/ClassProperties.d.ts",'import { OmitNever } from "./OmitNever";\nexport type ClassProperties = OmitNever<{\n [K in keyof T]: T[K] extends Function ? never : T[K];\n}>;\n'],["file:///node_modules/typia/lib/typings/Customizable.d.ts","export type Customizable = {\n number: number;\n string: string;\n bigint: bigint;\n};\n"],["file:///node_modules/typia/lib/typings/OmitNever.d.ts",'import { SpecialFields } from "./SpecialFields";\nexport type OmitNever = Omit>;\n'],["file:///node_modules/typia/lib/typings/ProtobufAtomic.d.ts",'export type ProtobufAtomic = "bool" | "int32" | "uint32" | "int64" | "uint64" | "float" | "double" | "string";\nexport declare namespace ProtobufAtomic {\n type Numeric = "int32" | "uint32" | "int64" | "uint64" | "float" | "double";\n type BigNumeric = "int64" | "uint64";\n}\n'],["file:///node_modules/typia/lib/typings/SpecialFields.d.ts","export type SpecialFields = {\n [P in keyof Instance]: Instance[P] extends Target ? P : never;\n}[keyof Instance & string];\n"],["file:///node_modules/typia/lib/typings/ValidationPipe.d.ts","export type ValidationPipe = {\n success: true;\n data: T;\n} | {\n success: false;\n errors: E[];\n};\n"],["file:///node_modules/typia/lib/typings/Writable.d.ts",'import { ClassProperties } from "./ClassProperties";\nexport type Writable = {\n -readonly [P in keyof T]: T[P];\n};\nexport declare function Writable(elem: T): Writable>;\n'],["file:///node_modules/typia/lib/utils/ArrayUtil.d.ts","export declare namespace ArrayUtil {\n const has: (array: T[], pred: (elem: T) => boolean) => boolean;\n const add: (array: T[], value: T, pred?: (x: T, y: T) => boolean) => boolean;\n const set: (array: T[], value: T, key: (elem: T) => Key) => void;\n const take: (array: T[], pred: (elem: T) => boolean, init: () => T) => T;\n const repeat: (count: number, closure: (index: number, count: number) => T) => T[];\n const flat: (matrix: T[][]) => T[];\n}\n"],["file:///node_modules/typia/lib/utils/Escaper.d.ts","export declare namespace Escaper {\n const variable: (str: string) => boolean;\n const reserved: (str: string) => boolean;\n}\n"],["file:///node_modules/typia/lib/utils/MapUtil.d.ts","export declare namespace MapUtil {\n const take: (dict: Map) => (key: Key, generator: () => T) => T;\n}\n"],["file:///node_modules/typia/lib/utils/NameEncoder.d.ts","export declare namespace NameEncoder {\n function encode(str: string): string;\n function decode(str: string): string;\n}\n"],["file:///node_modules/typia/lib/utils/NamingConvention/index.d.ts",'export * as NamingConvention from "./NamingConvention";\n'],["file:///node_modules/typia/lib/utils/NamingConvention/NamingConvention.d.ts","export declare function snake(str: string): string;\nexport declare function camel(str: string): string;\nexport declare function pascal(str: string): string;\n"],["file:///node_modules/typia/lib/utils/PatternUtil.d.ts",'export declare namespace PatternUtil {\n const fix: (str: string) => string;\n const escape: (str: string) => string;\n const NUMBER: string;\n const BOOLEAN = "true|false";\n const STRING = "(.*)";\n}\n'],["file:///node_modules/typia/lib/utils/RandomGenerator/index.d.ts",'export * as RandomGenerator from "./RandomGenerator";\n'],["file:///node_modules/typia/lib/utils/RandomGenerator/RandomGenerator.d.ts","export declare const boolean: () => boolean;\nexport declare const integer: (min?: number, max?: number) => number;\nexport declare const bigint: (min?: bigint, max?: bigint) => bigint;\nexport declare const number: (min?: number, max?: number) => number;\nexport declare const string: (length?: number) => string;\nexport declare const array: (closure: (index: number) => T, count?: number) => T[];\nexport declare const pick: (array: T[]) => T;\nexport declare const length: () => number;\nexport declare const pattern: (regex: RegExp) => string;\nexport declare const byte: () => string;\nexport declare const password: () => string;\nexport declare const regex: () => string;\nexport declare const uuid: () => string;\nexport declare const email: () => string;\nexport declare const hostname: () => string;\nexport declare const idnEmail: () => string;\nexport declare const idnHostname: () => string;\nexport declare const iri: () => string;\nexport declare const iriReference: () => string;\nexport declare const ipv4: () => string;\nexport declare const ipv6: () => string;\nexport declare const uri: () => string;\nexport declare const uriReference: () => string;\nexport declare const uriTemplate: () => string;\nexport declare const url: () => string;\nexport declare const datetime: (min?: number, max?: number) => string;\nexport declare const date: (min?: number, max?: number) => string;\nexport declare const time: () => string;\nexport declare const duration: () => string;\nexport declare const jsonPointer: () => string;\nexport declare const relativeJsonPointer: () => string;\n"],["file:///node_modules/typia/lib/utils/Singleton.d.ts","export declare class Singleton {\n private readonly closure_;\n private value_;\n constructor(closure: (...args: Args) => T);\n get(...args: Args): T;\n}\n"],["file:///node_modules/typia/lib/utils/StringUtil/index.d.ts",'export * as StringUtil from "./StringUtil";\n'],["file:///node_modules/typia/lib/utils/StringUtil/StringUtil.d.ts","export declare const capitalize: (str: string) => string;\n"],["file:///node_modules/typescript/lib/lib.d.ts",'/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// \n\n/// \n/// \n/// \n/// \n'],["file:///node_modules/typescript/lib/lib.decorators.d.ts",'/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// \n\n/**\n * The decorator context types provided to class element decorators.\n */\ntype ClassMemberDecoratorContext =\n | ClassMethodDecoratorContext\n | ClassGetterDecoratorContext\n | ClassSetterDecoratorContext\n | ClassFieldDecoratorContext\n | ClassAccessorDecoratorContext;\n\n/**\n * The decorator context types provided to any decorator.\n */\ntype DecoratorContext =\n | ClassDecoratorContext\n | ClassMemberDecoratorContext;\n\ntype DecoratorMetadataObject = Record & object;\n\ntype DecoratorMetadata = typeof globalThis extends { Symbol: { readonly metadata: symbol; }; } ? DecoratorMetadataObject : DecoratorMetadataObject | undefined;\n\n/**\n * Context provided to a class decorator.\n * @template Class The type of the decorated class associated with this context.\n */\ninterface ClassDecoratorContext<\n Class extends abstract new (...args: any) => any = abstract new (...args: any) => any,\n> {\n /** The kind of element that was decorated. */\n readonly kind: "class";\n\n /** The name of the decorated class. */\n readonly name: string | undefined;\n\n /**\n * Adds a callback to be invoked after the class definition has been finalized.\n *\n * @example\n * ```ts\n * function customElement(name: string): ClassDecoratorFunction {\n * return (target, context) => {\n * context.addInitializer(function () {\n * customElements.define(name, this);\n * });\n * }\n * }\n *\n * @customElement("my-element")\n * class MyElement {}\n * ```\n */\n addInitializer(initializer: (this: Class) => void): void;\n\n readonly metadata: DecoratorMetadata;\n}\n\n/**\n * Context provided to a class method decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The type of the decorated class method.\n */\ninterface ClassMethodDecoratorContext<\n This = unknown,\n Value extends (this: This, ...args: any) => any = (this: This, ...args: any) => any,\n> {\n /** The kind of class element that was decorated. */\n readonly kind: "method";\n\n /** The name of the decorated class element. */\n readonly name: string | symbol;\n\n /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */\n readonly static: boolean;\n\n /** A value indicating whether the class element has a private name. */\n readonly private: boolean;\n\n /** An object that can be used to access the current value of the class element at runtime. */\n readonly access: {\n /**\n * Determines whether an object has a property with the same name as the decorated element.\n */\n has(object: This): boolean;\n /**\n * Gets the current value of the method from the provided object.\n *\n * @example\n * let fn = context.access.get(instance);\n */\n get(object: This): Value;\n };\n\n /**\n * Adds a callback to be invoked either before static initializers are run (when\n * decorating a `static` element), or before instance initializers are run (when\n * decorating a non-`static` element).\n *\n * @example\n * ```ts\n * const bound: ClassMethodDecoratorFunction = (value, context) {\n * if (context.private) throw new TypeError("Not supported on private methods.");\n * context.addInitializer(function () {\n * this[context.name] = this[context.name].bind(this);\n * });\n * }\n *\n * class C {\n * message = "Hello";\n *\n * @bound\n * m() {\n * console.log(this.message);\n * }\n * }\n * ```\n */\n addInitializer(initializer: (this: This) => void): void;\n\n readonly metadata: DecoratorMetadata;\n}\n\n/**\n * Context provided to a class getter decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The property type of the decorated class getter.\n */\ninterface ClassGetterDecoratorContext<\n This = unknown,\n Value = unknown,\n> {\n /** The kind of class element that was decorated. */\n readonly kind: "getter";\n\n /** The name of the decorated class element. */\n readonly name: string | symbol;\n\n /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */\n readonly static: boolean;\n\n /** A value indicating whether the class element has a private name. */\n readonly private: boolean;\n\n /** An object that can be used to access the current value of the class element at runtime. */\n readonly access: {\n /**\n * Determines whether an object has a property with the same name as the decorated element.\n */\n has(object: This): boolean;\n /**\n * Invokes the getter on the provided object.\n *\n * @example\n * let value = context.access.get(instance);\n */\n get(object: This): Value;\n };\n\n /**\n * Adds a callback to be invoked either before static initializers are run (when\n * decorating a `static` element), or before instance initializers are run (when\n * decorating a non-`static` element).\n */\n addInitializer(initializer: (this: This) => void): void;\n\n readonly metadata: DecoratorMetadata;\n}\n\n/**\n * Context provided to a class setter decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The type of the decorated class setter.\n */\ninterface ClassSetterDecoratorContext<\n This = unknown,\n Value = unknown,\n> {\n /** The kind of class element that was decorated. */\n readonly kind: "setter";\n\n /** The name of the decorated class element. */\n readonly name: string | symbol;\n\n /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */\n readonly static: boolean;\n\n /** A value indicating whether the class element has a private name. */\n readonly private: boolean;\n\n /** An object that can be used to access the current value of the class element at runtime. */\n readonly access: {\n /**\n * Determines whether an object has a property with the same name as the decorated element.\n */\n has(object: This): boolean;\n /**\n * Invokes the setter on the provided object.\n *\n * @example\n * context.access.set(instance, value);\n */\n set(object: This, value: Value): void;\n };\n\n /**\n * Adds a callback to be invoked either before static initializers are run (when\n * decorating a `static` element), or before instance initializers are run (when\n * decorating a non-`static` element).\n */\n addInitializer(initializer: (this: This) => void): void;\n\n readonly metadata: DecoratorMetadata;\n}\n\n/**\n * Context provided to a class `accessor` field decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The type of decorated class field.\n */\ninterface ClassAccessorDecoratorContext<\n This = unknown,\n Value = unknown,\n> {\n /** The kind of class element that was decorated. */\n readonly kind: "accessor";\n\n /** The name of the decorated class element. */\n readonly name: string | symbol;\n\n /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */\n readonly static: boolean;\n\n /** A value indicating whether the class element has a private name. */\n readonly private: boolean;\n\n /** An object that can be used to access the current value of the class element at runtime. */\n readonly access: {\n /**\n * Determines whether an object has a property with the same name as the decorated element.\n */\n has(object: This): boolean;\n\n /**\n * Invokes the getter on the provided object.\n *\n * @example\n * let value = context.access.get(instance);\n */\n get(object: This): Value;\n\n /**\n * Invokes the setter on the provided object.\n *\n * @example\n * context.access.set(instance, value);\n */\n set(object: This, value: Value): void;\n };\n\n /**\n * Adds a callback to be invoked either before static initializers are run (when\n * decorating a `static` element), or before instance initializers are run (when\n * decorating a non-`static` element).\n */\n addInitializer(initializer: (this: This) => void): void;\n\n readonly metadata: DecoratorMetadata;\n}\n\n/**\n * Describes the target provided to class `accessor` field decorators.\n * @template This The `this` type to which the target applies.\n * @template Value The property type for the class `accessor` field.\n */\ninterface ClassAccessorDecoratorTarget {\n /**\n * Invokes the getter that was defined prior to decorator application.\n *\n * @example\n * let value = target.get.call(instance);\n */\n get(this: This): Value;\n\n /**\n * Invokes the setter that was defined prior to decorator application.\n *\n * @example\n * target.set.call(instance, value);\n */\n set(this: This, value: Value): void;\n}\n\n/**\n * Describes the allowed return value from a class `accessor` field decorator.\n * @template This The `this` type to which the target applies.\n * @template Value The property type for the class `accessor` field.\n */\ninterface ClassAccessorDecoratorResult {\n /**\n * An optional replacement getter function. If not provided, the existing getter function is used instead.\n */\n get?(this: This): Value;\n\n /**\n * An optional replacement setter function. If not provided, the existing setter function is used instead.\n */\n set?(this: This, value: Value): void;\n\n /**\n * An optional initializer mutator that is invoked when the underlying field initializer is evaluated.\n * @param value The incoming initializer value.\n * @returns The replacement initializer value.\n */\n init?(this: This, value: Value): Value;\n}\n\n/**\n * Context provided to a class field decorator.\n * @template This The type on which the class element will be defined. For a static class element, this will be\n * the type of the constructor. For a non-static class element, this will be the type of the instance.\n * @template Value The type of the decorated class field.\n */\ninterface ClassFieldDecoratorContext<\n This = unknown,\n Value = unknown,\n> {\n /** The kind of class element that was decorated. */\n readonly kind: "field";\n\n /** The name of the decorated class element. */\n readonly name: string | symbol;\n\n /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */\n readonly static: boolean;\n\n /** A value indicating whether the class element has a private name. */\n readonly private: boolean;\n\n /** An object that can be used to access the current value of the class element at runtime. */\n readonly access: {\n /**\n * Determines whether an object has a property with the same name as the decorated element.\n */\n has(object: This): boolean;\n\n /**\n * Gets the value of the field on the provided object.\n */\n get(object: This): Value;\n\n /**\n * Sets the value of the field on the provided object.\n */\n set(object: This, value: Value): void;\n };\n\n /**\n * Adds a callback to be invoked either before static initializers are run (when\n * decorating a `static` element), or before instance initializers are run (when\n * decorating a non-`static` element).\n */\n addInitializer(initializer: (this: This) => void): void;\n\n readonly metadata: DecoratorMetadata;\n}\n'],["file:///node_modules/typescript/lib/lib.decorators.legacy.d.ts",'/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// \n\ndeclare type ClassDecorator = (target: TFunction) => TFunction | void;\ndeclare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;\ndeclare type MethodDecorator = (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor | void;\ndeclare type ParameterDecorator = (target: Object, propertyKey: string | symbol | undefined, parameterIndex: number) => void;\n'],["file:///node_modules/typescript/lib/lib.dom.d.ts",'/*! *****************************************************************************\nCopyright (c) Microsoft Corporation. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\n\n\n/// \n\n/////////////////////////////\n/// Window APIs\n/////////////////////////////\n\ninterface AddEventListenerOptions extends EventListenerOptions {\n once?: boolean;\n passive?: boolean;\n signal?: AbortSignal;\n}\n\ninterface AesCbcParams extends Algorithm {\n iv: BufferSource;\n}\n\ninterface AesCtrParams extends Algorithm {\n counter: BufferSource;\n length: number;\n}\n\ninterface AesDerivedKeyParams extends Algorithm {\n length: number;\n}\n\ninterface AesGcmParams extends Algorithm {\n additionalData?: BufferSource;\n iv: BufferSource;\n tagLength?: number;\n}\n\ninterface AesKeyAlgorithm extends KeyAlgorithm {\n length: number;\n}\n\ninterface AesKeyGenParams extends Algorithm {\n length: number;\n}\n\ninterface Algorithm {\n name: string;\n}\n\ninterface AnalyserOptions extends AudioNodeOptions {\n fftSize?: number;\n maxDecibels?: number;\n minDecibels?: number;\n smoothingTimeConstant?: number;\n}\n\ninterface AnimationEventInit extends EventInit {\n animationName?: string;\n elapsedTime?: number;\n pseudoElement?: string;\n}\n\ninterface AnimationPlaybackEventInit extends EventInit {\n currentTime?: CSSNumberish | null;\n timelineTime?: CSSNumberish | null;\n}\n\ninterface AssignedNodesOptions {\n flatten?: boolean;\n}\n\ninterface AudioBufferOptions {\n length: number;\n numberOfChannels?: number;\n sampleRate: number;\n}\n\ninterface AudioBufferSourceOptions {\n buffer?: AudioBuffer | null;\n detune?: number;\n loop?: boolean;\n loopEnd?: number;\n loopStart?: number;\n playbackRate?: number;\n}\n\ninterface AudioConfiguration {\n bitrate?: number;\n channels?: string;\n contentType: string;\n samplerate?: number;\n spatialRendering?: boolean;\n}\n\ninterface AudioContextOptions {\n latencyHint?: AudioContextLatencyCategory | number;\n sampleRate?: number;\n}\n\ninterface AudioNodeOptions {\n channelCount?: number;\n channelCountMode?: ChannelCountMode;\n channelInterpretation?: ChannelInterpretation;\n}\n\ninterface AudioProcessingEventInit extends EventInit {\n inputBuffer: AudioBuffer;\n outputBuffer: AudioBuffer;\n playbackTime: number;\n}\n\ninterface AudioTimestamp {\n contextTime?: number;\n performanceTime?: DOMHighResTimeStamp;\n}\n\ninterface AudioWorkletNodeOptions extends AudioNodeOptions {\n numberOfInputs?: number;\n numberOfOutputs?: number;\n outputChannelCount?: number[];\n parameterData?: Record;\n processorOptions?: any;\n}\n\ninterface AuthenticationExtensionsClientInputs {\n appid?: string;\n credProps?: boolean;\n hmacCreateSecret?: boolean;\n}\n\ninterface AuthenticationExtensionsClientOutputs {\n appid?: boolean;\n credProps?: CredentialPropertiesOutput;\n hmacCreateSecret?: boolean;\n}\n\ninterface AuthenticatorSelectionCriteria {\n authenticatorAttachment?: AuthenticatorAttachment;\n requireResidentKey?: boolean;\n residentKey?: ResidentKeyRequirement;\n userVerification?: UserVerificationRequirement;\n}\n\ninterface AvcEncoderConfig {\n format?: AvcBitstreamFormat;\n}\n\ninterface BiquadFilterOptions extends AudioNodeOptions {\n Q?: number;\n detune?: number;\n frequency?: number;\n gain?: number;\n type?: BiquadFilterType;\n}\n\ninterface BlobEventInit {\n data: Blob;\n timecode?: DOMHighResTimeStamp;\n}\n\ninterface BlobPropertyBag {\n endings?: EndingType;\n type?: string;\n}\n\ninterface CSSMatrixComponentOptions {\n is2D?: boolean;\n}\n\ninterface CSSNumericType {\n angle?: number;\n flex?: number;\n frequency?: number;\n length?: number;\n percent?: number;\n percentHint?: CSSNumericBaseType;\n resolution?: number;\n time?: number;\n}\n\ninterface CSSStyleSheetInit {\n baseURL?: string;\n disabled?: boolean;\n media?: MediaList | string;\n}\n\ninterface CacheQueryOptions {\n ignoreMethod?: boolean;\n ignoreSearch?: boolean;\n ignoreVary?: boolean;\n}\n\ninterface CanvasRenderingContext2DSettings {\n alpha?: boolean;\n colorSpace?: PredefinedColorSpace;\n desynchronized?: boolean;\n willReadFrequently?: boolean;\n}\n\ninterface ChannelMergerOptions extends AudioNodeOptions {\n numberOfInputs?: number;\n}\n\ninterface ChannelSplitterOptions extends AudioNodeOptions {\n numberOfOutputs?: number;\n}\n\ninterface CheckVisibilityOptions {\n checkOpacity?: boolean;\n checkVisibilityCSS?: boolean;\n}\n\ninterface ClientQueryOptions {\n includeUncontrolled?: boolean;\n type?: ClientTypes;\n}\n\ninterface ClipboardEventInit extends EventInit {\n clipboardData?: DataTransfer | null;\n}\n\ninterface ClipboardItemOptions {\n presentationStyle?: PresentationStyle;\n}\n\ninterface CloseEventInit extends EventInit {\n code?: number;\n reason?: string;\n wasClean?: boolean;\n}\n\ninterface CompositionEventInit extends UIEventInit {\n data?: string;\n}\n\ninterface ComputedEffectTiming extends EffectTiming {\n activeDuration?: CSSNumberish;\n currentIteration?: number | null;\n endTime?: CSSNumberish;\n localTime?: CSSNumberish | null;\n progress?: number | null;\n startTime?: CSSNumberish;\n}\n\ninterface ComputedKeyframe {\n composite: CompositeOperationOrAuto;\n computedOffset: number;\n easing: string;\n offset: number | null;\n [property: string]: string | number | null | undefined;\n}\n\ninterface ConstantSourceOptions {\n offset?: number;\n}\n\ninterface ConstrainBooleanParameters {\n exact?: boolean;\n ideal?: boolean;\n}\n\ninterface ConstrainDOMStringParameters {\n exact?: string | string[];\n ideal?: string | string[];\n}\n\ninterface ConstrainDoubleRange extends DoubleRange {\n exact?: number;\n ideal?: number;\n}\n\ninterface ConstrainULongRange extends ULongRange {\n exact?: number;\n ideal?: number;\n}\n\ninterface ConvolverOptions extends AudioNodeOptions {\n buffer?: AudioBuffer | null;\n disableNormalization?: boolean;\n}\n\ninterface CredentialCreationOptions {\n publicKey?: PublicKeyCredentialCreationOptions;\n signal?: AbortSignal;\n}\n\ninterface CredentialPropertiesOutput {\n rk?: boolean;\n}\n\ninterface CredentialRequestOptions {\n mediation?: CredentialMediationRequirement;\n publicKey?: PublicKeyCredentialRequestOptions;\n signal?: AbortSignal;\n}\n\ninterface CryptoKeyPair {\n privateKey: CryptoKey;\n publicKey: CryptoKey;\n}\n\ninterface CustomEventInit extends EventInit {\n detail?: T;\n}\n\ninterface DOMMatrix2DInit {\n a?: number;\n b?: number;\n c?: number;\n d?: number;\n e?: number;\n f?: number;\n m11?: number;\n m12?: number;\n m21?: number;\n m22?: number;\n m41?: number;\n m42?: number;\n}\n\ninterface DOMMatrixInit extends DOMMatrix2DInit {\n is2D?: boolean;\n m13?: number;\n m14?: number;\n m23?: number;\n m24?: number;\n m31?: number;\n m32?: number;\n m33?: number;\n m34?: number;\n m43?: number;\n m44?: number;\n}\n\ninterface DOMPointInit {\n w?: number;\n x?: number;\n y?: number;\n z?: number;\n}\n\ninterface DOMQuadInit {\n p1?: DOMPointInit;\n p2?: DOMPointInit;\n p3?: DOMPointInit;\n p4?: DOMPointInit;\n}\n\ninterface DOMRectInit {\n height?: number;\n width?: number;\n x?: number;\n y?: number;\n}\n\ninterface DelayOptions extends AudioNodeOptions {\n delayTime?: number;\n maxDelayTime?: number;\n}\n\ninterface DeviceMotionEventAccelerationInit {\n x?: number | null;\n y?: number | null;\n z?: number | null;\n}\n\ninterface DeviceMotionEventInit extends EventInit {\n acceleration?: DeviceMotionEventAccelerationInit;\n accelerationIncludingGravity?: DeviceMotionEventAccelerationInit;\n interval?: number;\n rotationRate?: DeviceMotionEventRotationRateInit;\n}\n\ninterface DeviceMotionEventRotationRateInit {\n alpha?: number | null;\n beta?: number | null;\n gamma?: number | null;\n}\n\ninterface DeviceOrientationEventInit extends EventInit {\n absolute?: boolean;\n alpha?: number | null;\n beta?: number | null;\n gamma?: number | null;\n}\n\ninterface DisplayMediaStreamOptions {\n audio?: boolean | MediaTrackConstraints;\n video?: boolean | MediaTrackConstraints;\n}\n\ninterface DocumentTimelineOptions {\n originTime?: DOMHighResTimeStamp;\n}\n\ninterface DoubleRange {\n max?: number;\n min?: number;\n}\n\ninterface DragEventInit extends MouseEventInit {\n dataTransfer?: DataTransfer | null;\n}\n\ninterface DynamicsCompressorOptions extends AudioNodeOptions {\n attack?: number;\n knee?: number;\n ratio?: number;\n release?: number;\n threshold?: number;\n}\n\ninterface EcKeyAlgorithm extends KeyAlgorithm {\n namedCurve: NamedCurve;\n}\n\ninterface EcKeyGenParams extends Algorithm {\n namedCurve: NamedCurve;\n}\n\ninterface EcKeyImportParams extends Algorithm {\n namedCurve: NamedCurve;\n}\n\ninterface EcdhKeyDeriveParams extends Algorithm {\n public: CryptoKey;\n}\n\ninterface EcdsaParams extends Algorithm {\n hash: HashAlgorithmIdentifier;\n}\n\ninterface EffectTiming {\n delay?: number;\n direction?: PlaybackDirection;\n duration?: number | CSSNumericValue | string;\n easing?: string;\n endDelay?: number;\n fill?: FillMode;\n iterationStart?: number;\n iterations?: number;\n playbackRate?: number;\n}\n\ninterface ElementCreationOptions {\n is?: string;\n}\n\ninterface ElementDefinitionOptions {\n extends?: string;\n}\n\ninterface EncodedVideoChunkInit {\n data: BufferSource;\n duration?: number;\n timestamp: number;\n type: EncodedVideoChunkType;\n}\n\ninterface EncodedVideoChunkMetadata {\n decoderConfig?: VideoDecoderConfig;\n}\n\ninterface ErrorEventInit extends EventInit {\n colno?: number;\n error?: any;\n filename?: string;\n lineno?: number;\n message?: string;\n}\n\ninterface EventInit {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n}\n\ninterface EventListenerOptions {\n capture?: boolean;\n}\n\ninterface EventModifierInit extends UIEventInit {\n altKey?: boolean;\n ctrlKey?: boolean;\n metaKey?: boolean;\n modifierAltGraph?: boolean;\n modifierCapsLock?: boolean;\n modifierFn?: boolean;\n modifierFnLock?: boolean;\n modifierHyper?: boolean;\n modifierNumLock?: boolean;\n modifierScrollLock?: boolean;\n modifierSuper?: boolean;\n modifierSymbol?: boolean;\n modifierSymbolLock?: boolean;\n shiftKey?: boolean;\n}\n\ninterface EventSourceInit {\n withCredentials?: boolean;\n}\n\ninterface FilePropertyBag extends BlobPropertyBag {\n lastModified?: number;\n}\n\ninterface FileSystemCreateWritableOptions {\n keepExistingData?: boolean;\n}\n\ninterface FileSystemFlags {\n create?: boolean;\n exclusive?: boolean;\n}\n\ninterface FileSystemGetDirectoryOptions {\n create?: boolean;\n}\n\ninterface FileSystemGetFileOptions {\n create?: boolean;\n}\n\ninterface FileSystemRemoveOptions {\n recursive?: boolean;\n}\n\ninterface FocusEventInit extends UIEventInit {\n relatedTarget?: EventTarget | null;\n}\n\ninterface FocusOptions {\n preventScroll?: boolean;\n}\n\ninterface FontFaceDescriptors {\n ascentOverride?: string;\n descentOverride?: string;\n display?: FontDisplay;\n featureSettings?: string;\n lineGapOverride?: string;\n stretch?: string;\n style?: string;\n unicodeRange?: string;\n variant?: string;\n weight?: string;\n}\n\ninterface FontFaceSetLoadEventInit extends EventInit {\n fontfaces?: FontFace[];\n}\n\ninterface FormDataEventInit extends EventInit {\n formData: FormData;\n}\n\ninterface FullscreenOptions {\n navigationUI?: FullscreenNavigationUI;\n}\n\ninterface GainOptions extends AudioNodeOptions {\n gain?: number;\n}\n\ninterface GamepadEffectParameters {\n duration?: number;\n startDelay?: number;\n strongMagnitude?: number;\n weakMagnitude?: number;\n}\n\ninterface GamepadEventInit extends EventInit {\n gamepad: Gamepad;\n}\n\ninterface GetAnimationsOptions {\n subtree?: boolean;\n}\n\ninterface GetNotificationOptions {\n tag?: string;\n}\n\ninterface GetRootNodeOptions {\n composed?: boolean;\n}\n\ninterface HashChangeEventInit extends EventInit {\n newURL?: string;\n oldURL?: string;\n}\n\ninterface HkdfParams extends Algorithm {\n hash: HashAlgorithmIdentifier;\n info: BufferSource;\n salt: BufferSource;\n}\n\ninterface HmacImportParams extends Algorithm {\n hash: HashAlgorithmIdentifier;\n length?: number;\n}\n\ninterface HmacKeyAlgorithm extends KeyAlgorithm {\n hash: KeyAlgorithm;\n length: number;\n}\n\ninterface HmacKeyGenParams extends Algorithm {\n hash: HashAlgorithmIdentifier;\n length?: number;\n}\n\ninterface IDBDatabaseInfo {\n name?: string;\n version?: number;\n}\n\ninterface IDBIndexParameters {\n multiEntry?: boolean;\n unique?: boolean;\n}\n\ninterface IDBObjectStoreParameters {\n autoIncrement?: boolean;\n keyPath?: string | string[] | null;\n}\n\ninterface IDBTransactionOptions {\n durability?: IDBTransactionDurability;\n}\n\ninterface IDBVersionChangeEventInit extends EventInit {\n newVersion?: number | null;\n oldVersion?: number;\n}\n\ninterface IIRFilterOptions extends AudioNodeOptions {\n feedback: number[];\n feedforward: number[];\n}\n\ninterface IdleRequestOptions {\n timeout?: number;\n}\n\ninterface ImageBitmapOptions {\n colorSpaceConversion?: ColorSpaceConversion;\n imageOrientation?: ImageOrientation;\n premultiplyAlpha?: PremultiplyAlpha;\n resizeHeight?: number;\n resizeQuality?: ResizeQuality;\n resizeWidth?: number;\n}\n\ninterface ImageBitmapRenderingContextSettings {\n alpha?: boolean;\n}\n\ninterface ImageDataSettings {\n colorSpace?: PredefinedColorSpace;\n}\n\ninterface ImageEncodeOptions {\n quality?: number;\n type?: string;\n}\n\ninterface ImportMeta {\n url: string;\n}\n\ninterface InputEventInit extends UIEventInit {\n data?: string | null;\n dataTransfer?: DataTransfer | null;\n inputType?: string;\n isComposing?: boolean;\n targetRanges?: StaticRange[];\n}\n\ninterface IntersectionObserverEntryInit {\n boundingClientRect: DOMRectInit;\n intersectionRatio: number;\n intersectionRect: DOMRectInit;\n isIntersecting: boolean;\n rootBounds: DOMRectInit | null;\n target: Element;\n time: DOMHighResTimeStamp;\n}\n\ninterface IntersectionObserverInit {\n root?: Element | Document | null;\n rootMargin?: string;\n threshold?: number | number[];\n}\n\ninterface JsonWebKey {\n alg?: string;\n crv?: string;\n d?: string;\n dp?: string;\n dq?: string;\n e?: string;\n ext?: boolean;\n k?: string;\n key_ops?: string[];\n kty?: string;\n n?: string;\n oth?: RsaOtherPrimesInfo[];\n p?: string;\n q?: string;\n qi?: string;\n use?: string;\n x?: string;\n y?: string;\n}\n\ninterface KeyAlgorithm {\n name: string;\n}\n\ninterface KeyboardEventInit extends EventModifierInit {\n /** @deprecated */\n charCode?: number;\n code?: string;\n isComposing?: boolean;\n key?: string;\n /** @deprecated */\n keyCode?: number;\n location?: number;\n repeat?: boolean;\n}\n\ninterface Keyframe {\n composite?: CompositeOperationOrAuto;\n easing?: string;\n offset?: number | null;\n [property: string]: string | number | null | undefined;\n}\n\ninterface KeyframeAnimationOptions extends KeyframeEffectOptions {\n id?: string;\n timeline?: AnimationTimeline | null;\n}\n\ninterface KeyframeEffectOptions extends EffectTiming {\n composite?: CompositeOperation;\n iterationComposite?: IterationCompositeOperation;\n pseudoElement?: string | null;\n}\n\ninterface LockInfo {\n clientId?: string;\n mode?: LockMode;\n name?: string;\n}\n\ninterface LockManagerSnapshot {\n held?: LockInfo[];\n pending?: LockInfo[];\n}\n\ninterface LockOptions {\n ifAvailable?: boolean;\n mode?: LockMode;\n signal?: AbortSignal;\n steal?: boolean;\n}\n\ninterface MIDIConnectionEventInit extends EventInit {\n port?: MIDIPort;\n}\n\ninterface MIDIMessageEventInit extends EventInit {\n data?: Uint8Array;\n}\n\ninterface MIDIOptions {\n software?: boolean;\n sysex?: boolean;\n}\n\ninterface MediaCapabilitiesDecodingInfo extends MediaCapabilitiesInfo {\n configuration?: MediaDecodingConfiguration;\n}\n\ninterface MediaCapabilitiesEncodingInfo extends MediaCapabilitiesInfo {\n configuration?: MediaEncodingConfiguration;\n}\n\ninterface MediaCapabilitiesInfo {\n powerEfficient: boolean;\n smooth: boolean;\n supported: boolean;\n}\n\ninterface MediaConfiguration {\n audio?: AudioConfiguration;\n video?: VideoConfiguration;\n}\n\ninterface MediaDecodingConfiguration extends MediaConfiguration {\n type: MediaDecodingType;\n}\n\ninterface MediaElementAudioSourceOptions {\n mediaElement: HTMLMediaElement;\n}\n\ninterface MediaEncodingConfiguration extends MediaConfiguration {\n type: MediaEncodingType;\n}\n\ninterface MediaEncryptedEventInit extends EventInit {\n initData?: ArrayBuffer | null;\n initDataType?: string;\n}\n\ninterface MediaImage {\n sizes?: string;\n src: string;\n type?: string;\n}\n\ninterface MediaKeyMessageEventInit extends EventInit {\n message: ArrayBuffer;\n messageType: MediaKeyMessageType;\n}\n\ninterface MediaKeySystemConfiguration {\n audioCapabilities?: MediaKeySystemMediaCapability[];\n distinctiveIdentifier?: MediaKeysRequirement;\n initDataTypes?: string[];\n label?: string;\n persistentState?: MediaKeysRequirement;\n sessionTypes?: string[];\n videoCapabilities?: MediaKeySystemMediaCapability[];\n}\n\ninterface MediaKeySystemMediaCapability {\n contentType?: string;\n encryptionScheme?: string | null;\n robustness?: string;\n}\n\ninterface MediaMetadataInit {\n album?: string;\n artist?: string;\n artwork?: MediaImage[];\n title?: string;\n}\n\ninterface MediaPositionState {\n duration?: number;\n playbackRate?: number;\n position?: number;\n}\n\ninterface MediaQueryListEventInit extends EventInit {\n matches?: boolean;\n media?: string;\n}\n\ninterface MediaRecorderOptions {\n audioBitsPerSecond?: number;\n bitsPerSecond?: number;\n mimeType?: string;\n videoBitsPerSecond?: number;\n}\n\ninterface MediaSessionActionDetails {\n action: MediaSessionAction;\n fastSeek?: boolean;\n seekOffset?: number;\n seekTime?: number;\n}\n\ninterface MediaStreamAudioSourceOptions {\n mediaStream: MediaStream;\n}\n\ninterface MediaStreamConstraints {\n audio?: boolean | MediaTrackConstraints;\n peerIdentity?: string;\n preferCurrentTab?: boolean;\n video?: boolean | MediaTrackConstraints;\n}\n\ninterface MediaStreamTrackEventInit extends EventInit {\n track: MediaStreamTrack;\n}\n\ninterface MediaTrackCapabilities {\n aspectRatio?: DoubleRange;\n autoGainControl?: boolean[];\n channelCount?: ULongRange;\n deviceId?: string;\n displaySurface?: string;\n echoCancellation?: boolean[];\n facingMode?: string[];\n frameRate?: DoubleRange;\n groupId?: string;\n height?: ULongRange;\n noiseSuppression?: boolean[];\n sampleRate?: ULongRange;\n sampleSize?: ULongRange;\n width?: ULongRange;\n}\n\ninterface MediaTrackConstraintSet {\n aspectRatio?: ConstrainDouble;\n autoGainControl?: ConstrainBoolean;\n channelCount?: ConstrainULong;\n deviceId?: ConstrainDOMString;\n displaySurface?: ConstrainDOMString;\n echoCancellation?: ConstrainBoolean;\n facingMode?: ConstrainDOMString;\n frameRate?: ConstrainDouble;\n groupId?: ConstrainDOMString;\n height?: ConstrainULong;\n noiseSuppression?: ConstrainBoolean;\n sampleRate?: ConstrainULong;\n sampleSize?: ConstrainULong;\n width?: ConstrainULong;\n}\n\ninterface MediaTrackConstraints extends MediaTrackConstraintSet {\n advanced?: MediaTrackConstraintSet[];\n}\n\ninterface MediaTrackSettings {\n aspectRatio?: number;\n autoGainControl?: boolean;\n channelCount?: number;\n deviceId?: string;\n displaySurface?: string;\n echoCancellation?: boolean;\n facingMode?: string;\n frameRate?: number;\n groupId?: string;\n height?: number;\n noiseSuppression?: boolean;\n sampleRate?: number;\n sampleSize?: number;\n width?: number;\n}\n\ninterface MediaTrackSupportedConstraints {\n aspectRatio?: boolean;\n autoGainControl?: boolean;\n channelCount?: boolean;\n deviceId?: boolean;\n displaySurface?: boolean;\n echoCancellation?: boolean;\n facingMode?: boolean;\n frameRate?: boolean;\n groupId?: boolean;\n height?: boolean;\n noiseSuppression?: boolean;\n sampleRate?: boolean;\n sampleSize?: boolean;\n width?: boolean;\n}\n\ninterface MessageEventInit extends EventInit {\n data?: T;\n lastEventId?: string;\n origin?: string;\n ports?: MessagePort[];\n source?: MessageEventSource | null;\n}\n\ninterface MouseEventInit extends EventModifierInit {\n button?: number;\n buttons?: number;\n clientX?: number;\n clientY?: number;\n movementX?: number;\n movementY?: number;\n relatedTarget?: EventTarget | null;\n screenX?: number;\n screenY?: number;\n}\n\ninterface MultiCacheQueryOptions extends CacheQueryOptions {\n cacheName?: string;\n}\n\ninterface MutationObserverInit {\n /** Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted. */\n attributeFilter?: string[];\n /** Set to true if attributes is true or omitted and target\'s attribute value before the mutation needs to be recorded. */\n attributeOldValue?: boolean;\n /** Set to true if mutations to target\'s attributes are to be observed. Can be omitted if attributeOldValue or attributeFilter is specified. */\n attributes?: boolean;\n /** Set to true if mutations to target\'s data are to be observed. Can be omitted if characterDataOldValue is specified. */\n characterData?: boolean;\n /** Set to true if characterData is set to true or omitted and target\'s data before the mutation needs to be recorded. */\n characterDataOldValue?: boolean;\n /** Set to true if mutations to target\'s children are to be observed. */\n childList?: boolean;\n /** Set to true if mutations to not just target, but also target\'s descendants are to be observed. */\n subtree?: boolean;\n}\n\ninterface NavigationPreloadState {\n enabled?: boolean;\n headerValue?: string;\n}\n\ninterface NotificationAction {\n action: string;\n icon?: string;\n title: string;\n}\n\ninterface NotificationOptions {\n actions?: NotificationAction[];\n badge?: string;\n body?: string;\n data?: any;\n dir?: NotificationDirection;\n icon?: string;\n image?: string;\n lang?: string;\n renotify?: boolean;\n requireInteraction?: boolean;\n silent?: boolean | null;\n tag?: string;\n timestamp?: EpochTimeStamp;\n vibrate?: VibratePattern;\n}\n\ninterface OfflineAudioCompletionEventInit extends EventInit {\n renderedBuffer: AudioBuffer;\n}\n\ninterface OfflineAudioContextOptions {\n length: number;\n numberOfChannels?: number;\n sampleRate: number;\n}\n\ninterface OptionalEffectTiming {\n delay?: number;\n direction?: PlaybackDirection;\n duration?: number | string;\n easing?: string;\n endDelay?: number;\n fill?: FillMode;\n iterationStart?: number;\n iterations?: number;\n playbackRate?: number;\n}\n\ninterface OscillatorOptions extends AudioNodeOptions {\n detune?: number;\n frequency?: number;\n periodicWave?: PeriodicWave;\n type?: OscillatorType;\n}\n\ninterface PageTransitionEventInit extends EventInit {\n persisted?: boolean;\n}\n\ninterface PannerOptions extends AudioNodeOptions {\n coneInnerAngle?: number;\n coneOuterAngle?: number;\n coneOuterGain?: number;\n distanceModel?: DistanceModelType;\n maxDistance?: number;\n orientationX?: number;\n orientationY?: number;\n orientationZ?: number;\n panningModel?: PanningModelType;\n positionX?: number;\n positionY?: number;\n positionZ?: number;\n refDistance?: number;\n rolloffFactor?: number;\n}\n\ninterface PaymentCurrencyAmount {\n currency: string;\n value: string;\n}\n\ninterface PaymentDetailsBase {\n displayItems?: PaymentItem[];\n modifiers?: PaymentDetailsModifier[];\n}\n\ninterface PaymentDetailsInit extends PaymentDetailsBase {\n id?: string;\n total: PaymentItem;\n}\n\ninterface PaymentDetailsModifier {\n additionalDisplayItems?: PaymentItem[];\n data?: any;\n supportedMethods: string;\n total?: PaymentItem;\n}\n\ninterface PaymentDetailsUpdate extends PaymentDetailsBase {\n paymentMethodErrors?: any;\n total?: PaymentItem;\n}\n\ninterface PaymentItem {\n amount: PaymentCurrencyAmount;\n label: string;\n pending?: boolean;\n}\n\ninterface PaymentMethodChangeEventInit extends PaymentRequestUpdateEventInit {\n methodDetails?: any;\n methodName?: string;\n}\n\ninterface PaymentMethodData {\n data?: any;\n supportedMethods: string;\n}\n\ninterface PaymentRequestUpdateEventInit extends EventInit {\n}\n\ninterface PaymentValidationErrors {\n error?: string;\n paymentMethod?: any;\n}\n\ninterface Pbkdf2Params extends Algorithm {\n hash: HashAlgorithmIdentifier;\n iterations: number;\n salt: BufferSource;\n}\n\ninterface PerformanceMarkOptions {\n detail?: any;\n startTime?: DOMHighResTimeStamp;\n}\n\ninterface PerformanceMeasureOptions {\n detail?: any;\n duration?: DOMHighResTimeStamp;\n end?: string | DOMHighResTimeStamp;\n start?: string | DOMHighResTimeStamp;\n}\n\ninterface PerformanceObserverInit {\n buffered?: boolean;\n entryTypes?: string[];\n type?: string;\n}\n\ninterface PeriodicWaveConstraints {\n disableNormalization?: boolean;\n}\n\ninterface PeriodicWaveOptions extends PeriodicWaveConstraints {\n imag?: number[] | Float32Array;\n real?: number[] | Float32Array;\n}\n\ninterface PermissionDescriptor {\n name: PermissionName;\n}\n\ninterface PictureInPictureEventInit extends EventInit {\n pictureInPictureWindow: PictureInPictureWindow;\n}\n\ninterface PlaneLayout {\n offset: number;\n stride: number;\n}\n\ninterface PointerEventInit extends MouseEventInit {\n coalescedEvents?: PointerEvent[];\n height?: number;\n isPrimary?: boolean;\n pointerId?: number;\n pointerType?: string;\n predictedEvents?: PointerEvent[];\n pressure?: number;\n tangentialPressure?: number;\n tiltX?: number;\n tiltY?: number;\n twist?: number;\n width?: number;\n}\n\ninterface PopStateEventInit extends EventInit {\n state?: any;\n}\n\ninterface PositionOptions {\n enableHighAccuracy?: boolean;\n maximumAge?: number;\n timeout?: number;\n}\n\ninterface ProgressEventInit extends EventInit {\n lengthComputable?: boolean;\n loaded?: number;\n total?: number;\n}\n\ninterface PromiseRejectionEventInit extends EventInit {\n promise: Promise;\n reason?: any;\n}\n\ninterface PropertyDefinition {\n inherits: boolean;\n initialValue?: string;\n name: string;\n syntax?: string;\n}\n\ninterface PropertyIndexedKeyframes {\n composite?: CompositeOperationOrAuto | CompositeOperationOrAuto[];\n easing?: string | string[];\n offset?: number | (number | null)[];\n [property: string]: string | string[] | number | null | (number | null)[] | undefined;\n}\n\ninterface PublicKeyCredentialCreationOptions {\n attestation?: AttestationConveyancePreference;\n authenticatorSelection?: AuthenticatorSelectionCriteria;\n challenge: BufferSource;\n excludeCredentials?: PublicKeyCredentialDescriptor[];\n extensions?: AuthenticationExtensionsClientInputs;\n pubKeyCredParams: PublicKeyCredentialParameters[];\n rp: PublicKeyCredentialRpEntity;\n timeout?: number;\n user: PublicKeyCredentialUserEntity;\n}\n\ninterface PublicKeyCredentialDescriptor {\n id: BufferSource;\n transports?: AuthenticatorTransport[];\n type: PublicKeyCredentialType;\n}\n\ninterface PublicKeyCredentialEntity {\n name: string;\n}\n\ninterface PublicKeyCredentialParameters {\n alg: COSEAlgorithmIdentifier;\n type: PublicKeyCredentialType;\n}\n\ninterface PublicKeyCredentialRequestOptions {\n allowCredentials?: PublicKeyCredentialDescriptor[];\n challenge: BufferSource;\n extensions?: AuthenticationExtensionsClientInputs;\n rpId?: string;\n timeout?: number;\n userVerification?: UserVerificationRequirement;\n}\n\ninterface PublicKeyCredentialRpEntity extends PublicKeyCredentialEntity {\n id?: string;\n}\n\ninterface PublicKeyCredentialUserEntity extends PublicKeyCredentialEntity {\n displayName: string;\n id: BufferSource;\n}\n\ninterface PushSubscriptionJSON {\n endpoint?: string;\n expirationTime?: EpochTimeStamp | null;\n keys?: Record;\n}\n\ninterface PushSubscriptionOptionsInit {\n applicationServerKey?: BufferSource | string | null;\n userVisibleOnly?: boolean;\n}\n\ninterface QueuingStrategy {\n highWaterMark?: number;\n size?: QueuingStrategySize;\n}\n\ninterface QueuingStrategyInit {\n /**\n * Creates a new ByteLengthQueuingStrategy with the provided high water mark.\n *\n * Note that the provided high water mark will not be validated ahead of time. Instead, if it is negative, NaN, or not a number, the resulting ByteLengthQueuingStrategy will cause the corresponding stream constructor to throw.\n */\n highWaterMark: number;\n}\n\ninterface RTCAnswerOptions extends RTCOfferAnswerOptions {\n}\n\ninterface RTCCertificateExpiration {\n expires?: number;\n}\n\ninterface RTCConfiguration {\n bundlePolicy?: RTCBundlePolicy;\n certificates?: RTCCertificate[];\n iceCandidatePoolSize?: number;\n iceServers?: RTCIceServer[];\n iceTransportPolicy?: RTCIceTransportPolicy;\n rtcpMuxPolicy?: RTCRtcpMuxPolicy;\n}\n\ninterface RTCDTMFToneChangeEventInit extends EventInit {\n tone?: string;\n}\n\ninterface RTCDataChannelEventInit extends EventInit {\n channel: RTCDataChannel;\n}\n\ninterface RTCDataChannelInit {\n id?: number;\n maxPacketLifeTime?: number;\n maxRetransmits?: number;\n negotiated?: boolean;\n ordered?: boolean;\n protocol?: string;\n}\n\ninterface RTCDtlsFingerprint {\n algorithm?: string;\n value?: string;\n}\n\ninterface RTCEncodedAudioFrameMetadata {\n contributingSources?: number[];\n synchronizationSource?: number;\n}\n\ninterface RTCEncodedVideoFrameMetadata {\n dependencies?: number[];\n frameId?: number;\n height?: number;\n spatialIndex?: number;\n synchronizationSource?: number;\n temporalIndex?: number;\n width?: number;\n}\n\ninterface RTCErrorEventInit extends EventInit {\n error: RTCError;\n}\n\ninterface RTCErrorInit {\n errorDetail: RTCErrorDetailType;\n httpRequestStatusCode?: number;\n receivedAlert?: number;\n sctpCauseCode?: number;\n sdpLineNumber?: number;\n sentAlert?: number;\n}\n\ninterface RTCIceCandidateInit {\n candidate?: string;\n sdpMLineIndex?: number | null;\n sdpMid?: string | null;\n usernameFragment?: string | null;\n}\n\ninterface RTCIceCandidatePair {\n local?: RTCIceCandidate;\n remote?: RTCIceCandidate;\n}\n\ninterface RTCIceCandidatePairStats extends RTCStats {\n availableIncomingBitrate?: number;\n availableOutgoingBitrate?: number;\n bytesReceived?: number;\n bytesSent?: number;\n currentRoundTripTime?: number;\n lastPacketReceivedTimestamp?: DOMHighResTimeStamp;\n lastPacketSentTimestamp?: DOMHighResTimeStamp;\n localCandidateId: string;\n nominated?: boolean;\n remoteCandidateId: string;\n requestsReceived?: number;\n requestsSent?: number;\n responsesReceived?: number;\n responsesSent?: number;\n state: RTCStatsIceCandidatePairState;\n totalRoundTripTime?: number;\n transportId: string;\n}\n\ninterface RTCIceServer {\n credential?: string;\n urls: string | string[];\n username?: string;\n}\n\ninterface RTCInboundRtpStreamStats extends RTCReceivedRtpStreamStats {\n audioLevel?: number;\n bytesReceived?: number;\n concealedSamples?: number;\n concealmentEvents?: number;\n decoderImplementation?: string;\n estimatedPlayoutTimestamp?: DOMHighResTimeStamp;\n fecPacketsDiscarded?: number;\n fecPacketsReceived?: number;\n firCount?: number;\n frameHeight?: number;\n frameWidth?: number;\n framesDecoded?: number;\n framesDropped?: number;\n framesPerSecond?: number;\n framesReceived?: number;\n headerBytesReceived?: number;\n insertedSamplesForDeceleration?: number;\n jitterBufferDelay?: number;\n jitterBufferEmittedCount?: number;\n keyFramesDecoded?: number;\n kind: string;\n lastPacketReceivedTimestamp?: DOMHighResTimeStamp;\n mid?: string;\n nackCount?: number;\n packetsDiscarded?: number;\n pliCount?: number;\n qpSum?: number;\n remoteId?: string;\n removedSamplesForAcceleration?: number;\n silentConcealedSamples?: number;\n totalAudioEnergy?: number;\n totalDecodeTime?: number;\n totalInterFrameDelay?: number;\n totalProcessingDelay?: number;\n totalSamplesDuration?: number;\n totalSamplesReceived?: number;\n totalSquaredInterFrameDelay?: number;\n trackIdentifier: string;\n}\n\ninterface RTCLocalSessionDescriptionInit {\n sdp?: string;\n type?: RTCSdpType;\n}\n\ninterface RTCOfferAnswerOptions {\n}\n\ninterface RTCOfferOptions extends RTCOfferAnswerOptions {\n iceRestart?: boolean;\n offerToReceiveAudio?: boolean;\n offerToReceiveVideo?: boolean;\n}\n\ninterface RTCOutboundRtpStreamStats extends RTCSentRtpStreamStats {\n firCount?: number;\n frameHeight?: number;\n frameWidth?: number;\n framesEncoded?: number;\n framesPerSecond?: number;\n framesSent?: number;\n headerBytesSent?: number;\n hugeFramesSent?: number;\n keyFramesEncoded?: number;\n mediaSourceId?: string;\n nackCount?: number;\n pliCount?: number;\n qpSum?: number;\n qualityLimitationResolutionChanges?: number;\n remoteId?: string;\n retransmittedBytesSent?: number;\n retransmittedPacketsSent?: number;\n rid?: string;\n targetBitrate?: number;\n totalEncodeTime?: number;\n totalEncodedBytesTarget?: number;\n totalPacketSendDelay?: number;\n}\n\ninterface RTCPeerConnectionIceErrorEventInit extends EventInit {\n address?: string | null;\n errorCode: number;\n errorText?: string;\n port?: number | null;\n url?: string;\n}\n\ninterface RTCPeerConnectionIceEventInit extends EventInit {\n candidate?: RTCIceCandidate | null;\n url?: string | null;\n}\n\ninterface RTCReceivedRtpStreamStats extends RTCRtpStreamStats {\n jitter?: number;\n packetsLost?: number;\n packetsReceived?: number;\n}\n\ninterface RTCRtcpParameters {\n cname?: string;\n reducedSize?: boolean;\n}\n\ninterface RTCRtpCapabilities {\n codecs: RTCRtpCodecCapability[];\n headerExtensions: RTCRtpHeaderExtensionCapability[];\n}\n\ninterface RTCRtpCodec {\n channels?: number;\n clockRate: number;\n mimeType: string;\n sdpFmtpLine?: string;\n}\n\ninterface RTCRtpCodecCapability extends RTCRtpCodec {\n}\n\ninterface RTCRtpCodecParameters extends RTCRtpCodec {\n payloadType: number;\n}\n\ninterface RTCRtpCodingParameters {\n rid?: string;\n}\n\ninterface RTCRtpContributingSource {\n audioLevel?: number;\n rtpTimestamp: number;\n source: number;\n timestamp: DOMHighResTimeStamp;\n}\n\ninterface RTCRtpEncodingParameters extends RTCRtpCodingParameters {\n active?: boolean;\n maxBitrate?: number;\n maxFramerate?: number;\n networkPriority?: RTCPriorityType;\n priority?: RTCPriorityType;\n scaleResolutionDownBy?: number;\n}\n\ninterface RTCRtpHeaderExtensionCapability {\n uri: string;\n}\n\ninterface RTCRtpHeaderExtensionParameters {\n encrypted?: boolean;\n id: number;\n uri: string;\n}\n\ninterface RTCRtpParameters {\n codecs: RTCRtpCodecParameters[];\n headerExtensions: RTCRtpHeaderExtensionParameters[];\n rtcp: RTCRtcpParameters;\n}\n\ninterface RTCRtpReceiveParameters extends RTCRtpParameters {\n}\n\ninterface RTCRtpSendParameters extends RTCRtpParameters {\n degradationPreference?: RTCDegradationPreference;\n encodings: RTCRtpEncodingParameters[];\n transactionId: string;\n}\n\ninterface RTCRtpStreamStats extends RTCStats {\n codecId?: string;\n kind: string;\n ssrc: number;\n transportId?: string;\n}\n\ninterface RTCRtpSynchronizationSource extends RTCRtpContributingSource {\n}\n\ninterface RTCRtpTransceiverInit {\n direction?: RTCRtpTransceiverDirection;\n sendEncodings?: RTCRtpEncodingParameters[];\n streams?: MediaStream[];\n}\n\ninterface RTCSentRtpStreamStats extends RTCRtpStreamStats {\n bytesSent?: number;\n packetsSent?: number;\n}\n\ninterface RTCSessionDescriptionInit {\n sdp?: string;\n type: RTCSdpType;\n}\n\ninterface RTCStats {\n id: string;\n timestamp: DOMHighResTimeStamp;\n type: RTCStatsType;\n}\n\ninterface RTCTrackEventInit extends EventInit {\n receiver: RTCRtpReceiver;\n streams?: MediaStream[];\n track: MediaStreamTrack;\n transceiver: RTCRtpTransceiver;\n}\n\ninterface RTCTransportStats extends RTCStats {\n bytesReceived?: number;\n bytesSent?: number;\n dtlsCipher?: string;\n dtlsState: RTCDtlsTransportState;\n localCertificateId?: string;\n remoteCertificateId?: string;\n selectedCandidatePairId?: string;\n srtpCipher?: string;\n tlsVersion?: string;\n}\n\ninterface ReadableStreamGetReaderOptions {\n /**\n * Creates a ReadableStreamBYOBReader and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams, i.e. streams which were constructed specifically with the ability to handle "bring your own buffer" reading. The returned BYOB reader provides the ability to directly read individual chunks from the stream via its read() method, into developer-supplied buffers, allowing more precise control over allocation.\n */\n mode?: ReadableStreamReaderMode;\n}\n\ninterface ReadableStreamReadDoneResult {\n done: true;\n value?: T;\n}\n\ninterface ReadableStreamReadValueResult {\n done: false;\n value: T;\n}\n\ninterface ReadableWritablePair {\n readable: ReadableStream;\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream (or any other { writable, readable } pair). It simply pipes the stream into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n writable: WritableStream;\n}\n\ninterface RegistrationOptions {\n scope?: string;\n type?: WorkerType;\n updateViaCache?: ServiceWorkerUpdateViaCache;\n}\n\ninterface ReportingObserverOptions {\n buffered?: boolean;\n types?: string[];\n}\n\ninterface RequestInit {\n /** A BodyInit object or null to set request\'s body. */\n body?: BodyInit | null;\n /** A string indicating how the request will interact with the browser\'s cache to set request\'s cache. */\n cache?: RequestCache;\n /** A string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. Sets request\'s credentials. */\n credentials?: RequestCredentials;\n /** A Headers object, an object literal, or an array of two-item arrays to set request\'s headers. */\n headers?: HeadersInit;\n /** A cryptographic hash of the resource to be fetched by request. Sets request\'s integrity. */\n integrity?: string;\n /** A boolean to set request\'s keepalive. */\n keepalive?: boolean;\n /** A string to set request\'s method. */\n method?: string;\n /** A string to indicate whether the request will use CORS, or will be restricted to same-origin URLs. Sets request\'s mode. */\n mode?: RequestMode;\n /** A string indicating whether request follows redirects, results in an error upon encountering a redirect, or returns the redirect (in an opaque fashion). Sets request\'s redirect. */\n redirect?: RequestRedirect;\n /** A string whose value is a same-origin URL, "about:client", or the empty string, to set request\'s referrer. */\n referrer?: string;\n /** A referrer policy to set request\'s referrerPolicy. */\n referrerPolicy?: ReferrerPolicy;\n /** An AbortSignal to set request\'s signal. */\n signal?: AbortSignal | null;\n /** Can only be null. Used to disassociate request from any Window. */\n window?: null;\n}\n\ninterface ResizeObserverOptions {\n box?: ResizeObserverBoxOptions;\n}\n\ninterface ResponseInit {\n headers?: HeadersInit;\n status?: number;\n statusText?: string;\n}\n\ninterface RsaHashedImportParams extends Algorithm {\n hash: HashAlgorithmIdentifier;\n}\n\ninterface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm {\n hash: KeyAlgorithm;\n}\n\ninterface RsaHashedKeyGenParams extends RsaKeyGenParams {\n hash: HashAlgorithmIdentifier;\n}\n\ninterface RsaKeyAlgorithm extends KeyAlgorithm {\n modulusLength: number;\n publicExponent: BigInteger;\n}\n\ninterface RsaKeyGenParams extends Algorithm {\n modulusLength: number;\n publicExponent: BigInteger;\n}\n\ninterface RsaOaepParams extends Algorithm {\n label?: BufferSource;\n}\n\ninterface RsaOtherPrimesInfo {\n d?: string;\n r?: string;\n t?: string;\n}\n\ninterface RsaPssParams extends Algorithm {\n saltLength: number;\n}\n\ninterface SVGBoundingBoxOptions {\n clipped?: boolean;\n fill?: boolean;\n markers?: boolean;\n stroke?: boolean;\n}\n\ninterface ScrollIntoViewOptions extends ScrollOptions {\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n}\n\ninterface ScrollOptions {\n behavior?: ScrollBehavior;\n}\n\ninterface ScrollToOptions extends ScrollOptions {\n left?: number;\n top?: number;\n}\n\ninterface SecurityPolicyViolationEventInit extends EventInit {\n blockedURI?: string;\n columnNumber?: number;\n disposition: SecurityPolicyViolationEventDisposition;\n documentURI: string;\n effectiveDirective: string;\n lineNumber?: number;\n originalPolicy: string;\n referrer?: string;\n sample?: string;\n sourceFile?: string;\n statusCode: number;\n violatedDirective: string;\n}\n\ninterface ShadowRootInit {\n delegatesFocus?: boolean;\n mode: ShadowRootMode;\n slotAssignment?: SlotAssignmentMode;\n}\n\ninterface ShareData {\n files?: File[];\n text?: string;\n title?: string;\n url?: string;\n}\n\ninterface SpeechSynthesisErrorEventInit extends SpeechSynthesisEventInit {\n error: SpeechSynthesisErrorCode;\n}\n\ninterface SpeechSynthesisEventInit extends EventInit {\n charIndex?: number;\n charLength?: number;\n elapsedTime?: number;\n name?: string;\n utterance: SpeechSynthesisUtterance;\n}\n\ninterface StaticRangeInit {\n endContainer: Node;\n endOffset: number;\n startContainer: Node;\n startOffset: number;\n}\n\ninterface StereoPannerOptions extends AudioNodeOptions {\n pan?: number;\n}\n\ninterface StorageEstimate {\n quota?: number;\n usage?: number;\n}\n\ninterface StorageEventInit extends EventInit {\n key?: string | null;\n newValue?: string | null;\n oldValue?: string | null;\n storageArea?: Storage | null;\n url?: string;\n}\n\ninterface StreamPipeOptions {\n preventAbort?: boolean;\n preventCancel?: boolean;\n /**\n * Pipes this readable stream to a given writable stream destination. The way in which the piping process behaves under various error conditions can be customized with a number of passed options. It returns a promise that fulfills when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n *\n * Errors and closures of the source and destination streams propagate as follows:\n *\n * An error in this source readable stream will abort destination, unless preventAbort is truthy. The returned promise will be rejected with the source\'s error, or with any error that occurs during aborting the destination.\n *\n * An error in destination will cancel this source readable stream, unless preventCancel is truthy. The returned promise will be rejected with the destination\'s error, or with any error that occurs during canceling the source.\n *\n * When this source readable stream closes, destination will be closed, unless preventClose is truthy. The returned promise will be fulfilled once this process completes, unless an error is encountered while closing the destination, in which case it will be rejected with that error.\n *\n * If destination starts out closed or closing, this source readable stream will be canceled, unless preventCancel is true. The returned promise will be rejected with an error indicating piping to a closed stream failed, or with any error that occurs during canceling the source.\n *\n * The signal option can be set to an AbortSignal to allow aborting an ongoing pipe operation via the corresponding AbortController. In this case, this source readable stream will be canceled, and destination aborted, unless the respective options preventCancel or preventAbort are set.\n */\n preventClose?: boolean;\n signal?: AbortSignal;\n}\n\ninterface StructuredSerializeOptions {\n transfer?: Transferable[];\n}\n\ninterface SubmitEventInit extends EventInit {\n submitter?: HTMLElement | null;\n}\n\ninterface TextDecodeOptions {\n stream?: boolean;\n}\n\ninterface TextDecoderOptions {\n fatal?: boolean;\n ignoreBOM?: boolean;\n}\n\ninterface TextEncoderEncodeIntoResult {\n read: number;\n written: number;\n}\n\ninterface ToggleEventInit extends EventInit {\n newState?: string;\n oldState?: string;\n}\n\ninterface TouchEventInit extends EventModifierInit {\n changedTouches?: Touch[];\n targetTouches?: Touch[];\n touches?: Touch[];\n}\n\ninterface TouchInit {\n altitudeAngle?: number;\n azimuthAngle?: number;\n clientX?: number;\n clientY?: number;\n force?: number;\n identifier: number;\n pageX?: number;\n pageY?: number;\n radiusX?: number;\n radiusY?: number;\n rotationAngle?: number;\n screenX?: number;\n screenY?: number;\n target: EventTarget;\n touchType?: TouchType;\n}\n\ninterface TrackEventInit extends EventInit {\n track?: TextTrack | null;\n}\n\ninterface Transformer {\n flush?: TransformerFlushCallback;\n readableType?: undefined;\n start?: TransformerStartCallback;\n transform?: TransformerTransformCallback;\n writableType?: undefined;\n}\n\ninterface TransitionEventInit extends EventInit {\n elapsedTime?: number;\n propertyName?: string;\n pseudoElement?: string;\n}\n\ninterface UIEventInit extends EventInit {\n detail?: number;\n view?: Window | null;\n /** @deprecated */\n which?: number;\n}\n\ninterface ULongRange {\n max?: number;\n min?: number;\n}\n\ninterface UnderlyingByteSource {\n autoAllocateChunkSize?: number;\n cancel?: UnderlyingSourceCancelCallback;\n pull?: (controller: ReadableByteStreamController) => void | PromiseLike;\n start?: (controller: ReadableByteStreamController) => any;\n type: "bytes";\n}\n\ninterface UnderlyingDefaultSource {\n cancel?: UnderlyingSourceCancelCallback;\n pull?: (controller: ReadableStreamDefaultController) => void | PromiseLike;\n start?: (controller: ReadableStreamDefaultController) => any;\n type?: undefined;\n}\n\ninterface UnderlyingSink {\n abort?: UnderlyingSinkAbortCallback;\n close?: UnderlyingSinkCloseCallback;\n start?: UnderlyingSinkStartCallback;\n type?: undefined;\n write?: UnderlyingSinkWriteCallback;\n}\n\ninterface UnderlyingSource {\n autoAllocateChunkSize?: number;\n cancel?: UnderlyingSourceCancelCallback;\n pull?: UnderlyingSourcePullCallback;\n start?: UnderlyingSourceStartCallback;\n type?: ReadableStreamType;\n}\n\ninterface ValidityStateFlags {\n badInput?: boolean;\n customError?: boolean;\n patternMismatch?: boolean;\n rangeOverflow?: boolean;\n rangeUnderflow?: boolean;\n stepMismatch?: boolean;\n tooLong?: boolean;\n tooShort?: boolean;\n typeMismatch?: boolean;\n valueMissing?: boolean;\n}\n\ninterface VideoColorSpaceInit {\n fullRange?: boolean | null;\n matrix?: VideoMatrixCoefficients | null;\n primaries?: VideoColorPrimaries | null;\n transfer?: VideoTransferCharacteristics | null;\n}\n\ninterface VideoConfiguration {\n bitrate: number;\n colorGamut?: ColorGamut;\n contentType: string;\n framerate: number;\n hdrMetadataType?: HdrMetadataType;\n height: number;\n scalabilityMode?: string;\n transferFunction?: TransferFunction;\n width: number;\n}\n\ninterface VideoDecoderConfig {\n codec: string;\n codedHeight?: number;\n codedWidth?: number;\n colorSpace?: VideoColorSpaceInit;\n description?: BufferSource;\n displayAspectHeight?: number;\n displayAspectWidth?: number;\n hardwareAcceleration?: HardwareAcceleration;\n optimizeForLatency?: boolean;\n}\n\ninterface VideoDecoderInit {\n error: WebCodecsErrorCallback;\n output: VideoFrameOutputCallback;\n}\n\ninterface VideoDecoderSupport {\n config?: VideoDecoderConfig;\n supported?: boolean;\n}\n\ninterface VideoEncoderConfig {\n alpha?: AlphaOption;\n avc?: AvcEncoderConfig;\n bitrate?: number;\n bitrateMode?: VideoEncoderBitrateMode;\n codec: string;\n displayHeight?: number;\n displayWidth?: number;\n framerate?: number;\n hardwareAcceleration?: HardwareAcceleration;\n height: number;\n latencyMode?: LatencyMode;\n scalabilityMode?: string;\n width: number;\n}\n\ninterface VideoEncoderEncodeOptions {\n keyFrame?: boolean;\n}\n\ninterface VideoEncoderInit {\n error: WebCodecsErrorCallback;\n output: EncodedVideoChunkOutputCallback;\n}\n\ninterface VideoEncoderSupport {\n config?: VideoEncoderConfig;\n supported?: boolean;\n}\n\ninterface VideoFrameBufferInit {\n codedHeight: number;\n codedWidth: number;\n colorSpace?: VideoColorSpaceInit;\n displayHeight?: number;\n displayWidth?: number;\n duration?: number;\n format: VideoPixelFormat;\n layout?: PlaneLayout[];\n timestamp: number;\n visibleRect?: DOMRectInit;\n}\n\ninterface VideoFrameCallbackMetadata {\n captureTime?: DOMHighResTimeStamp;\n expectedDisplayTime: DOMHighResTimeStamp;\n height: number;\n mediaTime: number;\n presentationTime: DOMHighResTimeStamp;\n presentedFrames: number;\n processingDuration?: number;\n receiveTime?: DOMHighResTimeStamp;\n rtpTimestamp?: number;\n width: number;\n}\n\ninterface VideoFrameCopyToOptions {\n layout?: PlaneLayout[];\n rect?: DOMRectInit;\n}\n\ninterface VideoFrameInit {\n alpha?: AlphaOption;\n displayHeight?: number;\n displayWidth?: number;\n duration?: number;\n timestamp?: number;\n visibleRect?: DOMRectInit;\n}\n\ninterface WaveShaperOptions extends AudioNodeOptions {\n curve?: number[] | Float32Array;\n oversample?: OverSampleType;\n}\n\ninterface WebGLContextAttributes {\n alpha?: boolean;\n antialias?: boolean;\n depth?: boolean;\n desynchronized?: boolean;\n failIfMajorPerformanceCaveat?: boolean;\n powerPreference?: WebGLPowerPreference;\n premultipliedAlpha?: boolean;\n preserveDrawingBuffer?: boolean;\n stencil?: boolean;\n}\n\ninterface WebGLContextEventInit extends EventInit {\n statusMessage?: string;\n}\n\ninterface WebTransportCloseInfo {\n closeCode?: number;\n reason?: string;\n}\n\ninterface WebTransportErrorOptions {\n source?: WebTransportErrorSource;\n streamErrorCode?: number | null;\n}\n\ninterface WebTransportHash {\n algorithm?: string;\n value?: BufferSource;\n}\n\ninterface WebTransportOptions {\n allowPooling?: boolean;\n congestionControl?: WebTransportCongestionControl;\n requireUnreliable?: boolean;\n serverCertificateHashes?: WebTransportHash[];\n}\n\ninterface WebTransportSendStreamOptions {\n sendOrder?: number | null;\n}\n\ninterface WheelEventInit extends MouseEventInit {\n deltaMode?: number;\n deltaX?: number;\n deltaY?: number;\n deltaZ?: number;\n}\n\ninterface WindowPostMessageOptions extends StructuredSerializeOptions {\n targetOrigin?: string;\n}\n\ninterface WorkerOptions {\n credentials?: RequestCredentials;\n name?: string;\n type?: WorkerType;\n}\n\ninterface WorkletOptions {\n credentials?: RequestCredentials;\n}\n\ninterface WriteParams {\n data?: BufferSource | Blob | string | null;\n position?: number | null;\n size?: number | null;\n type: WriteCommandType;\n}\n\ntype NodeFilter = ((node: Node) => number) | { acceptNode(node: Node): number; };\n\ndeclare var NodeFilter: {\n readonly FILTER_ACCEPT: 1;\n readonly FILTER_REJECT: 2;\n readonly FILTER_SKIP: 3;\n readonly SHOW_ALL: 0xFFFFFFFF;\n readonly SHOW_ELEMENT: 0x1;\n readonly SHOW_ATTRIBUTE: 0x2;\n readonly SHOW_TEXT: 0x4;\n readonly SHOW_CDATA_SECTION: 0x8;\n readonly SHOW_ENTITY_REFERENCE: 0x10;\n readonly SHOW_ENTITY: 0x20;\n readonly SHOW_PROCESSING_INSTRUCTION: 0x40;\n readonly SHOW_COMMENT: 0x80;\n readonly SHOW_DOCUMENT: 0x100;\n readonly SHOW_DOCUMENT_TYPE: 0x200;\n readonly SHOW_DOCUMENT_FRAGMENT: 0x400;\n readonly SHOW_NOTATION: 0x800;\n};\n\ntype XPathNSResolver = ((prefix: string | null) => string | null) | { lookupNamespaceURI(prefix: string | null): string | null; };\n\n/**\n * The ANGLE_instanced_arrays extension is part of the WebGL API and allows to draw the same object, or groups of similar objects multiple times, if they share the same vertex data, primitive count and type.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays)\n */\ninterface ANGLE_instanced_arrays {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawArraysInstancedANGLE) */\n drawArraysInstancedANGLE(mode: GLenum, first: GLint, count: GLsizei, primcount: GLsizei): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/drawElementsInstancedANGLE) */\n drawElementsInstancedANGLE(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, primcount: GLsizei): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ANGLE_instanced_arrays/vertexAttribDivisorANGLE) */\n vertexAttribDivisorANGLE(index: GLuint, divisor: GLuint): void;\n readonly VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88FE;\n}\n\ninterface ARIAMixin {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaAtomic) */\n ariaAtomic: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaAutoComplete) */\n ariaAutoComplete: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaBusy) */\n ariaBusy: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaChecked) */\n ariaChecked: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaColCount) */\n ariaColCount: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaColIndex) */\n ariaColIndex: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaColSpan) */\n ariaColSpan: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaCurrent) */\n ariaCurrent: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaDisabled) */\n ariaDisabled: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaExpanded) */\n ariaExpanded: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaHasPopup) */\n ariaHasPopup: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaHidden) */\n ariaHidden: string | null;\n ariaInvalid: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaKeyShortcuts) */\n ariaKeyShortcuts: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaLabel) */\n ariaLabel: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaLevel) */\n ariaLevel: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaLive) */\n ariaLive: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaModal) */\n ariaModal: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaMultiLine) */\n ariaMultiLine: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaMultiSelectable) */\n ariaMultiSelectable: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaOrientation) */\n ariaOrientation: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaPlaceholder) */\n ariaPlaceholder: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaPosInSet) */\n ariaPosInSet: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaPressed) */\n ariaPressed: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaReadOnly) */\n ariaReadOnly: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaRequired) */\n ariaRequired: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaRoleDescription) */\n ariaRoleDescription: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaRowCount) */\n ariaRowCount: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaRowIndex) */\n ariaRowIndex: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaRowSpan) */\n ariaRowSpan: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaSelected) */\n ariaSelected: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaSetSize) */\n ariaSetSize: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaSort) */\n ariaSort: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaValueMax) */\n ariaValueMax: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaValueMin) */\n ariaValueMin: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaValueNow) */\n ariaValueNow: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/ariaValueText) */\n ariaValueText: string | null;\n role: string | null;\n}\n\n/**\n * A controller object that allows you to abort one or more DOM requests as and when desired.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController)\n */\ninterface AbortController {\n /**\n * Returns the AbortSignal object associated with this object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController/signal)\n */\n readonly signal: AbortSignal;\n /**\n * Invoking this method will set this object\'s AbortSignal\'s aborted flag and signal to any observers that the associated activity is to be aborted.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController/abort)\n */\n abort(reason?: any): void;\n}\n\ndeclare var AbortController: {\n prototype: AbortController;\n new(): AbortController;\n};\n\ninterface AbortSignalEventMap {\n "abort": Event;\n}\n\n/**\n * A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal)\n */\ninterface AbortSignal extends EventTarget {\n /**\n * Returns true if this AbortSignal\'s AbortController has signaled to abort, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/aborted)\n */\n readonly aborted: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event) */\n onabort: ((this: AbortSignal, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/reason) */\n readonly reason: any;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/throwIfAborted) */\n throwIfAborted(): void;\n addEventListener(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AbortSignal: {\n prototype: AbortSignal;\n new(): AbortSignal;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_static) */\n abort(reason?: any): AbortSignal;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/timeout_static) */\n timeout(milliseconds: number): AbortSignal;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbstractRange) */\ninterface AbstractRange {\n /**\n * Returns true if range is collapsed, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbstractRange/collapsed)\n */\n readonly collapsed: boolean;\n /**\n * Returns range\'s end node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbstractRange/endContainer)\n */\n readonly endContainer: Node;\n /**\n * Returns range\'s end offset.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbstractRange/endOffset)\n */\n readonly endOffset: number;\n /**\n * Returns range\'s start node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbstractRange/startContainer)\n */\n readonly startContainer: Node;\n /**\n * Returns range\'s start offset.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbstractRange/startOffset)\n */\n readonly startOffset: number;\n}\n\ndeclare var AbstractRange: {\n prototype: AbstractRange;\n new(): AbstractRange;\n};\n\ninterface AbstractWorkerEventMap {\n "error": ErrorEvent;\n}\n\ninterface AbstractWorker {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorker/error_event) */\n onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;\n addEventListener(type: K, listener: (this: AbstractWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: AbstractWorker, ev: AbstractWorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/**\n * A node able to provide real-time frequency and time-domain analysis information. It is an AudioNode that passes the audio stream unchanged from the input to the output, but allows you to take the generated data, process it, and create audio visualizations.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode)\n */\ninterface AnalyserNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/fftSize) */\n fftSize: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/frequencyBinCount) */\n readonly frequencyBinCount: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/maxDecibels) */\n maxDecibels: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/minDecibels) */\n minDecibels: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/smoothingTimeConstant) */\n smoothingTimeConstant: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/getByteFrequencyData) */\n getByteFrequencyData(array: Uint8Array): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/getByteTimeDomainData) */\n getByteTimeDomainData(array: Uint8Array): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/getFloatFrequencyData) */\n getFloatFrequencyData(array: Float32Array): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnalyserNode/getFloatTimeDomainData) */\n getFloatTimeDomainData(array: Float32Array): void;\n}\n\ndeclare var AnalyserNode: {\n prototype: AnalyserNode;\n new(context: BaseAudioContext, options?: AnalyserOptions): AnalyserNode;\n};\n\ninterface Animatable {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/animate) */\n animate(keyframes: Keyframe[] | PropertyIndexedKeyframes | null, options?: number | KeyframeAnimationOptions): Animation;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getAnimations) */\n getAnimations(options?: GetAnimationsOptions): Animation[];\n}\n\ninterface AnimationEventMap {\n "cancel": AnimationPlaybackEvent;\n "finish": AnimationPlaybackEvent;\n "remove": Event;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation) */\ninterface Animation extends EventTarget {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/currentTime) */\n currentTime: CSSNumberish | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/effect) */\n effect: AnimationEffect | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/finished) */\n readonly finished: Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/id) */\n id: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/cancel_event) */\n oncancel: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/finish_event) */\n onfinish: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/remove_event) */\n onremove: ((this: Animation, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/pending) */\n readonly pending: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/playState) */\n readonly playState: AnimationPlayState;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/playbackRate) */\n playbackRate: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/ready) */\n readonly ready: Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/replaceState) */\n readonly replaceState: AnimationReplaceState;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/startTime) */\n startTime: CSSNumberish | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/timeline) */\n timeline: AnimationTimeline | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/cancel) */\n cancel(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/commitStyles) */\n commitStyles(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/finish) */\n finish(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/pause) */\n pause(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/persist) */\n persist(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/play) */\n play(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/reverse) */\n reverse(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/updatePlaybackRate) */\n updatePlaybackRate(playbackRate: number): void;\n addEventListener(type: K, listener: (this: Animation, ev: AnimationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: Animation, ev: AnimationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Animation: {\n prototype: Animation;\n new(effect?: AnimationEffect | null, timeline?: AnimationTimeline | null): Animation;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationEffect) */\ninterface AnimationEffect {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationEffect/getComputedTiming) */\n getComputedTiming(): ComputedEffectTiming;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationEffect/getTiming) */\n getTiming(): EffectTiming;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationEffect/updateTiming) */\n updateTiming(timing?: OptionalEffectTiming): void;\n}\n\ndeclare var AnimationEffect: {\n prototype: AnimationEffect;\n new(): AnimationEffect;\n};\n\n/**\n * Events providing information related to animations.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationEvent)\n */\ninterface AnimationEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationEvent/animationName) */\n readonly animationName: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationEvent/elapsedTime) */\n readonly elapsedTime: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationEvent/pseudoElement) */\n readonly pseudoElement: string;\n}\n\ndeclare var AnimationEvent: {\n prototype: AnimationEvent;\n new(type: string, animationEventInitDict?: AnimationEventInit): AnimationEvent;\n};\n\ninterface AnimationFrameProvider {\n cancelAnimationFrame(handle: number): void;\n requestAnimationFrame(callback: FrameRequestCallback): number;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationPlaybackEvent) */\ninterface AnimationPlaybackEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationPlaybackEvent/currentTime) */\n readonly currentTime: CSSNumberish | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationPlaybackEvent/timelineTime) */\n readonly timelineTime: CSSNumberish | null;\n}\n\ndeclare var AnimationPlaybackEvent: {\n prototype: AnimationPlaybackEvent;\n new(type: string, eventInitDict?: AnimationPlaybackEventInit): AnimationPlaybackEvent;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationTimeline) */\ninterface AnimationTimeline {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AnimationTimeline/currentTime) */\n readonly currentTime: CSSNumberish | null;\n}\n\ndeclare var AnimationTimeline: {\n prototype: AnimationTimeline;\n new(): AnimationTimeline;\n};\n\n/**\n * A DOM element\'s attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., Element.getAttribute(), but certain functions (e.g., Element.getAttributeNode()) or means of iterating give Attr types.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Attr)\n */\ninterface Attr extends Node {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Attr/localName) */\n readonly localName: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Attr/name) */\n readonly name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Attr/namespaceURI) */\n readonly namespaceURI: string | null;\n readonly ownerDocument: Document;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Attr/ownerElement) */\n readonly ownerElement: Element | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Attr/prefix) */\n readonly prefix: string | null;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Attr/specified)\n */\n readonly specified: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Attr/value) */\n value: string;\n}\n\ndeclare var Attr: {\n prototype: Attr;\n new(): Attr;\n};\n\n/**\n * A short audio asset residing in memory, created from an audio file using the AudioContext.decodeAudioData() method, or from raw data using AudioContext.createBuffer(). Once put into an AudioBuffer, the audio can then be played by being passed into an AudioBufferSourceNode.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBuffer)\n */\ninterface AudioBuffer {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBuffer/duration) */\n readonly duration: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBuffer/length) */\n readonly length: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBuffer/numberOfChannels) */\n readonly numberOfChannels: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBuffer/sampleRate) */\n readonly sampleRate: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBuffer/copyFromChannel) */\n copyFromChannel(destination: Float32Array, channelNumber: number, bufferOffset?: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBuffer/copyToChannel) */\n copyToChannel(source: Float32Array, channelNumber: number, bufferOffset?: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBuffer/getChannelData) */\n getChannelData(channel: number): Float32Array;\n}\n\ndeclare var AudioBuffer: {\n prototype: AudioBuffer;\n new(options: AudioBufferOptions): AudioBuffer;\n};\n\n/**\n * An AudioScheduledSourceNode which represents an audio source consisting of in-memory audio data, stored in an AudioBuffer. It\'s especially useful for playing back audio which has particularly stringent timing accuracy requirements, such as for sounds that must match a specific rhythm and can be kept in memory rather than being played from disk or the network.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode)\n */\ninterface AudioBufferSourceNode extends AudioScheduledSourceNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode/buffer) */\n buffer: AudioBuffer | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode/detune) */\n readonly detune: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode/loop) */\n loop: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode/loopEnd) */\n loopEnd: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode/loopStart) */\n loopStart: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode/playbackRate) */\n readonly playbackRate: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioBufferSourceNode/start) */\n start(when?: number, offset?: number, duration?: number): void;\n addEventListener(type: K, listener: (this: AudioBufferSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: AudioBufferSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AudioBufferSourceNode: {\n prototype: AudioBufferSourceNode;\n new(context: BaseAudioContext, options?: AudioBufferSourceOptions): AudioBufferSourceNode;\n};\n\n/**\n * An audio-processing graph built from audio modules linked together, each represented by an AudioNode.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext)\n */\ninterface AudioContext extends BaseAudioContext {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/baseLatency) */\n readonly baseLatency: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/outputLatency) */\n readonly outputLatency: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/close) */\n close(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/createMediaElementSource) */\n createMediaElementSource(mediaElement: HTMLMediaElement): MediaElementAudioSourceNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/createMediaStreamDestination) */\n createMediaStreamDestination(): MediaStreamAudioDestinationNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/createMediaStreamSource) */\n createMediaStreamSource(mediaStream: MediaStream): MediaStreamAudioSourceNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/getOutputTimestamp) */\n getOutputTimestamp(): AudioTimestamp;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/resume) */\n resume(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioContext/suspend) */\n suspend(): Promise;\n addEventListener(type: K, listener: (this: AudioContext, ev: BaseAudioContextEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: AudioContext, ev: BaseAudioContextEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AudioContext: {\n prototype: AudioContext;\n new(contextOptions?: AudioContextOptions): AudioContext;\n};\n\n/**\n * AudioDestinationNode has no output (as it is the output, no more AudioNode can be linked after it in the audio graph) and one input. The number of channels in the input must be between 0 and the maxChannelCount value or an exception is raised.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioDestinationNode)\n */\ninterface AudioDestinationNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioDestinationNode/maxChannelCount) */\n readonly maxChannelCount: number;\n}\n\ndeclare var AudioDestinationNode: {\n prototype: AudioDestinationNode;\n new(): AudioDestinationNode;\n};\n\n/**\n * The position and orientation of the unique person listening to the audio scene, and is used in audio spatialization. All PannerNodes spatialize in relation to the AudioListener stored in the BaseAudioContext.listener attribute.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener)\n */\ninterface AudioListener {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/forwardX) */\n readonly forwardX: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/forwardY) */\n readonly forwardY: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/forwardZ) */\n readonly forwardZ: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/positionX) */\n readonly positionX: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/positionY) */\n readonly positionY: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/positionZ) */\n readonly positionZ: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/upX) */\n readonly upX: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/upY) */\n readonly upY: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/upZ) */\n readonly upZ: AudioParam;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/setOrientation)\n */\n setOrientation(x: number, y: number, z: number, xUp: number, yUp: number, zUp: number): void;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioListener/setPosition)\n */\n setPosition(x: number, y: number, z: number): void;\n}\n\ndeclare var AudioListener: {\n prototype: AudioListener;\n new(): AudioListener;\n};\n\n/**\n * A generic interface for representing an audio processing module. Examples include:\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode)\n */\ninterface AudioNode extends EventTarget {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode/channelCount) */\n channelCount: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode/channelCountMode) */\n channelCountMode: ChannelCountMode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode/channelInterpretation) */\n channelInterpretation: ChannelInterpretation;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode/context) */\n readonly context: BaseAudioContext;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode/numberOfInputs) */\n readonly numberOfInputs: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode/numberOfOutputs) */\n readonly numberOfOutputs: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode/connect) */\n connect(destinationNode: AudioNode, output?: number, input?: number): AudioNode;\n connect(destinationParam: AudioParam, output?: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioNode/disconnect) */\n disconnect(): void;\n disconnect(output: number): void;\n disconnect(destinationNode: AudioNode): void;\n disconnect(destinationNode: AudioNode, output: number): void;\n disconnect(destinationNode: AudioNode, output: number, input: number): void;\n disconnect(destinationParam: AudioParam): void;\n disconnect(destinationParam: AudioParam, output: number): void;\n}\n\ndeclare var AudioNode: {\n prototype: AudioNode;\n new(): AudioNode;\n};\n\n/**\n * The Web Audio API\'s AudioParam interface represents an audio-related parameter, usually a parameter of an AudioNode (such as GainNode.gain).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam)\n */\ninterface AudioParam {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/automationRate) */\n automationRate: AutomationRate;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/defaultValue) */\n readonly defaultValue: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/maxValue) */\n readonly maxValue: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/minValue) */\n readonly minValue: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/value) */\n value: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/cancelAndHoldAtTime) */\n cancelAndHoldAtTime(cancelTime: number): AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/cancelScheduledValues) */\n cancelScheduledValues(cancelTime: number): AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/exponentialRampToValueAtTime) */\n exponentialRampToValueAtTime(value: number, endTime: number): AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/linearRampToValueAtTime) */\n linearRampToValueAtTime(value: number, endTime: number): AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/setTargetAtTime) */\n setTargetAtTime(target: number, startTime: number, timeConstant: number): AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/setValueAtTime) */\n setValueAtTime(value: number, startTime: number): AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/setValueCurveAtTime) */\n setValueCurveAtTime(values: number[] | Float32Array, startTime: number, duration: number): AudioParam;\n}\n\ndeclare var AudioParam: {\n prototype: AudioParam;\n new(): AudioParam;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParamMap) */\ninterface AudioParamMap {\n forEach(callbackfn: (value: AudioParam, key: string, parent: AudioParamMap) => void, thisArg?: any): void;\n}\n\ndeclare var AudioParamMap: {\n prototype: AudioParamMap;\n new(): AudioParamMap;\n};\n\n/**\n * The Web Audio API events that occur when a ScriptProcessorNode input buffer is ready to be processed.\n * @deprecated As of the August 29 2014 Web Audio API spec publication, this feature has been marked as deprecated, and is soon to be replaced by AudioWorklet.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioProcessingEvent)\n */\ninterface AudioProcessingEvent extends Event {\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioProcessingEvent/inputBuffer)\n */\n readonly inputBuffer: AudioBuffer;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioProcessingEvent/outputBuffer)\n */\n readonly outputBuffer: AudioBuffer;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioProcessingEvent/playbackTime)\n */\n readonly playbackTime: number;\n}\n\n/** @deprecated */\ndeclare var AudioProcessingEvent: {\n prototype: AudioProcessingEvent;\n new(type: string, eventInitDict: AudioProcessingEventInit): AudioProcessingEvent;\n};\n\ninterface AudioScheduledSourceNodeEventMap {\n "ended": Event;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioScheduledSourceNode) */\ninterface AudioScheduledSourceNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioScheduledSourceNode/ended_event) */\n onended: ((this: AudioScheduledSourceNode, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioScheduledSourceNode/start) */\n start(when?: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioScheduledSourceNode/stop) */\n stop(when?: number): void;\n addEventListener(type: K, listener: (this: AudioScheduledSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: AudioScheduledSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AudioScheduledSourceNode: {\n prototype: AudioScheduledSourceNode;\n new(): AudioScheduledSourceNode;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioWorklet)\n */\ninterface AudioWorklet extends Worklet {\n}\n\ndeclare var AudioWorklet: {\n prototype: AudioWorklet;\n new(): AudioWorklet;\n};\n\ninterface AudioWorkletNodeEventMap {\n "processorerror": Event;\n}\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioWorkletNode)\n */\ninterface AudioWorkletNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioWorkletNode/processorerror_event) */\n onprocessorerror: ((this: AudioWorkletNode, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioWorkletNode/parameters) */\n readonly parameters: AudioParamMap;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioWorkletNode/port) */\n readonly port: MessagePort;\n addEventListener(type: K, listener: (this: AudioWorkletNode, ev: AudioWorkletNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: AudioWorkletNode, ev: AudioWorkletNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var AudioWorkletNode: {\n prototype: AudioWorkletNode;\n new(context: BaseAudioContext, name: string, options?: AudioWorkletNodeOptions): AudioWorkletNode;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorAssertionResponse)\n */\ninterface AuthenticatorAssertionResponse extends AuthenticatorResponse {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorAssertionResponse/authenticatorData) */\n readonly authenticatorData: ArrayBuffer;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorAssertionResponse/signature) */\n readonly signature: ArrayBuffer;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorAssertionResponse/userHandle) */\n readonly userHandle: ArrayBuffer | null;\n}\n\ndeclare var AuthenticatorAssertionResponse: {\n prototype: AuthenticatorAssertionResponse;\n new(): AuthenticatorAssertionResponse;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorAttestationResponse)\n */\ninterface AuthenticatorAttestationResponse extends AuthenticatorResponse {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorAttestationResponse/attestationObject) */\n readonly attestationObject: ArrayBuffer;\n getAuthenticatorData(): ArrayBuffer;\n getPublicKey(): ArrayBuffer | null;\n getPublicKeyAlgorithm(): COSEAlgorithmIdentifier;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorAttestationResponse/getTransports) */\n getTransports(): string[];\n}\n\ndeclare var AuthenticatorAttestationResponse: {\n prototype: AuthenticatorAttestationResponse;\n new(): AuthenticatorAttestationResponse;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorResponse)\n */\ninterface AuthenticatorResponse {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AuthenticatorResponse/clientDataJSON) */\n readonly clientDataJSON: ArrayBuffer;\n}\n\ndeclare var AuthenticatorResponse: {\n prototype: AuthenticatorResponse;\n new(): AuthenticatorResponse;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BarProp) */\ninterface BarProp {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BarProp/visible) */\n readonly visible: boolean;\n}\n\ndeclare var BarProp: {\n prototype: BarProp;\n new(): BarProp;\n};\n\ninterface BaseAudioContextEventMap {\n "statechange": Event;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext) */\ninterface BaseAudioContext extends EventTarget {\n /**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/audioWorklet)\n */\n readonly audioWorklet: AudioWorklet;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/currentTime) */\n readonly currentTime: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/destination) */\n readonly destination: AudioDestinationNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/listener) */\n readonly listener: AudioListener;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/statechange_event) */\n onstatechange: ((this: BaseAudioContext, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/sampleRate) */\n readonly sampleRate: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/state) */\n readonly state: AudioContextState;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createAnalyser) */\n createAnalyser(): AnalyserNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createBiquadFilter) */\n createBiquadFilter(): BiquadFilterNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createBuffer) */\n createBuffer(numberOfChannels: number, length: number, sampleRate: number): AudioBuffer;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createBufferSource) */\n createBufferSource(): AudioBufferSourceNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createChannelMerger) */\n createChannelMerger(numberOfInputs?: number): ChannelMergerNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createChannelSplitter) */\n createChannelSplitter(numberOfOutputs?: number): ChannelSplitterNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createConstantSource) */\n createConstantSource(): ConstantSourceNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createConvolver) */\n createConvolver(): ConvolverNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createDelay) */\n createDelay(maxDelayTime?: number): DelayNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createDynamicsCompressor) */\n createDynamicsCompressor(): DynamicsCompressorNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createGain) */\n createGain(): GainNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createIIRFilter) */\n createIIRFilter(feedforward: number[], feedback: number[]): IIRFilterNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createOscillator) */\n createOscillator(): OscillatorNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createPanner) */\n createPanner(): PannerNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createPeriodicWave) */\n createPeriodicWave(real: number[] | Float32Array, imag: number[] | Float32Array, constraints?: PeriodicWaveConstraints): PeriodicWave;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createScriptProcessor)\n */\n createScriptProcessor(bufferSize?: number, numberOfInputChannels?: number, numberOfOutputChannels?: number): ScriptProcessorNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createStereoPanner) */\n createStereoPanner(): StereoPannerNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createWaveShaper) */\n createWaveShaper(): WaveShaperNode;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/decodeAudioData) */\n decodeAudioData(audioData: ArrayBuffer, successCallback?: DecodeSuccessCallback | null, errorCallback?: DecodeErrorCallback | null): Promise;\n addEventListener(type: K, listener: (this: BaseAudioContext, ev: BaseAudioContextEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: BaseAudioContext, ev: BaseAudioContextEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var BaseAudioContext: {\n prototype: BaseAudioContext;\n new(): BaseAudioContext;\n};\n\n/**\n * The beforeunload event is fired when the window, the document and its resources are about to be unloaded.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BeforeUnloadEvent)\n */\ninterface BeforeUnloadEvent extends Event {\n returnValue: any;\n}\n\ndeclare var BeforeUnloadEvent: {\n prototype: BeforeUnloadEvent;\n new(): BeforeUnloadEvent;\n};\n\n/**\n * A simple low-order filter, and is created using the AudioContext.createBiquadFilter() method. It is an AudioNode that can represent different kinds of filters, tone control devices, and graphic equalizers.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BiquadFilterNode)\n */\ninterface BiquadFilterNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BiquadFilterNode/Q) */\n readonly Q: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BiquadFilterNode/detune) */\n readonly detune: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BiquadFilterNode/frequency) */\n readonly frequency: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BiquadFilterNode/gain) */\n readonly gain: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BiquadFilterNode/type) */\n type: BiquadFilterType;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BiquadFilterNode/getFrequencyResponse) */\n getFrequencyResponse(frequencyHz: Float32Array, magResponse: Float32Array, phaseResponse: Float32Array): void;\n}\n\ndeclare var BiquadFilterNode: {\n prototype: BiquadFilterNode;\n new(context: BaseAudioContext, options?: BiquadFilterOptions): BiquadFilterNode;\n};\n\n/**\n * A file-like object of immutable, raw data. Blobs represent data that isn\'t necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user\'s system.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob)\n */\ninterface Blob {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size) */\n readonly size: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type) */\n readonly type: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/arrayBuffer) */\n arrayBuffer(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice) */\n slice(start?: number, end?: number, contentType?: string): Blob;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/stream) */\n stream(): ReadableStream;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text) */\n text(): Promise;\n}\n\ndeclare var Blob: {\n prototype: Blob;\n new(blobParts?: BlobPart[], options?: BlobPropertyBag): Blob;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BlobEvent) */\ninterface BlobEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BlobEvent/data) */\n readonly data: Blob;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BlobEvent/timecode) */\n readonly timecode: DOMHighResTimeStamp;\n}\n\ndeclare var BlobEvent: {\n prototype: BlobEvent;\n new(type: string, eventInitDict: BlobEventInit): BlobEvent;\n};\n\ninterface Body {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/body) */\n readonly body: ReadableStream | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bodyUsed) */\n readonly bodyUsed: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/arrayBuffer) */\n arrayBuffer(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/blob) */\n blob(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/formData) */\n formData(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/json) */\n json(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/text) */\n text(): Promise;\n}\n\ninterface BroadcastChannelEventMap {\n "message": MessageEvent;\n "messageerror": MessageEvent;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BroadcastChannel) */\ninterface BroadcastChannel extends EventTarget {\n /**\n * Returns the channel name (as passed to the constructor).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BroadcastChannel/name)\n */\n readonly name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BroadcastChannel/message_event) */\n onmessage: ((this: BroadcastChannel, ev: MessageEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/BroadcastChannel/messageerror_event) */\n onmessageerror: ((this: BroadcastChannel, ev: MessageEvent) => any) | null;\n /**\n * Closes the BroadcastChannel object, opening it up to garbage collection.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BroadcastChannel/close)\n */\n close(): void;\n /**\n * Sends the given message to other BroadcastChannel objects set up for this channel. Messages can be structured objects, e.g. nested objects and arrays.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BroadcastChannel/postMessage)\n */\n postMessage(message: any): void;\n addEventListener(type: K, listener: (this: BroadcastChannel, ev: BroadcastChannelEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: BroadcastChannel, ev: BroadcastChannelEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var BroadcastChannel: {\n prototype: BroadcastChannel;\n new(name: string): BroadcastChannel;\n};\n\n/**\n * This Streams API interface provides\xa0a built-in byte length queuing strategy that can be used when constructing streams.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ByteLengthQueuingStrategy)\n */\ninterface ByteLengthQueuingStrategy extends QueuingStrategy {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ByteLengthQueuingStrategy/highWaterMark) */\n readonly highWaterMark: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ByteLengthQueuingStrategy/size) */\n readonly size: QueuingStrategySize;\n}\n\ndeclare var ByteLengthQueuingStrategy: {\n prototype: ByteLengthQueuingStrategy;\n new(init: QueuingStrategyInit): ByteLengthQueuingStrategy;\n};\n\n/**\n * A CDATA section that can be used within XML to include extended portions of unescaped text. The symbols < and & don’t need escaping as they normally do when inside a CDATA section.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CDATASection)\n */\ninterface CDATASection extends Text {\n}\n\ndeclare var CDATASection: {\n prototype: CDATASection;\n new(): CDATASection;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSAnimation) */\ninterface CSSAnimation extends Animation {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSAnimation/animationName) */\n readonly animationName: string;\n addEventListener(type: K, listener: (this: CSSAnimation, ev: AnimationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: CSSAnimation, ev: AnimationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var CSSAnimation: {\n prototype: CSSAnimation;\n new(): CSSAnimation;\n};\n\n/**\n * A single condition CSS at-rule, which consists of a condition and a statement block. It is a child of CSSGroupingRule.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSConditionRule)\n */\ninterface CSSConditionRule extends CSSGroupingRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSConditionRule/conditionText) */\n readonly conditionText: string;\n}\n\ndeclare var CSSConditionRule: {\n prototype: CSSConditionRule;\n new(): CSSConditionRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSContainerRule) */\ninterface CSSContainerRule extends CSSConditionRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSContainerRule/containerName) */\n readonly containerName: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSContainerRule/containerQuery) */\n readonly containerQuery: string;\n}\n\ndeclare var CSSContainerRule: {\n prototype: CSSContainerRule;\n new(): CSSContainerRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule) */\ninterface CSSCounterStyleRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/additiveSymbols) */\n additiveSymbols: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/fallback) */\n fallback: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/name) */\n name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/negative) */\n negative: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/pad) */\n pad: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/prefix) */\n prefix: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/range) */\n range: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/speakAs) */\n speakAs: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/suffix) */\n suffix: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/symbols) */\n symbols: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSCounterStyleRule/system) */\n system: string;\n}\n\ndeclare var CSSCounterStyleRule: {\n prototype: CSSCounterStyleRule;\n new(): CSSCounterStyleRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontFaceRule) */\ninterface CSSFontFaceRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontFaceRule/style) */\n readonly style: CSSStyleDeclaration;\n}\n\ndeclare var CSSFontFaceRule: {\n prototype: CSSFontFaceRule;\n new(): CSSFontFaceRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontFeatureValuesRule) */\ninterface CSSFontFeatureValuesRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontFeatureValuesRule/fontFamily) */\n fontFamily: string;\n}\n\ndeclare var CSSFontFeatureValuesRule: {\n prototype: CSSFontFeatureValuesRule;\n new(): CSSFontFeatureValuesRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontPaletteValuesRule) */\ninterface CSSFontPaletteValuesRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontPaletteValuesRule/basePalette) */\n readonly basePalette: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontPaletteValuesRule/fontFamily) */\n readonly fontFamily: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontPaletteValuesRule/name) */\n readonly name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSFontPaletteValuesRule/overrideColors) */\n readonly overrideColors: string;\n}\n\ndeclare var CSSFontPaletteValuesRule: {\n prototype: CSSFontPaletteValuesRule;\n new(): CSSFontPaletteValuesRule;\n};\n\n/**\n * Any CSS at-rule that contains other rules nested within it.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSGroupingRule)\n */\ninterface CSSGroupingRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSGroupingRule/cssRules) */\n readonly cssRules: CSSRuleList;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSGroupingRule/deleteRule) */\n deleteRule(index: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSGroupingRule/insertRule) */\n insertRule(rule: string, index?: number): number;\n}\n\ndeclare var CSSGroupingRule: {\n prototype: CSSGroupingRule;\n new(): CSSGroupingRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImageValue) */\ninterface CSSImageValue extends CSSStyleValue {\n}\n\ndeclare var CSSImageValue: {\n prototype: CSSImageValue;\n new(): CSSImageValue;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule) */\ninterface CSSImportRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule/href) */\n readonly href: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule/layerName) */\n readonly layerName: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule/media) */\n readonly media: MediaList;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSImportRule/styleSheet) */\n readonly styleSheet: CSSStyleSheet | null;\n}\n\ndeclare var CSSImportRule: {\n prototype: CSSImportRule;\n new(): CSSImportRule;\n};\n\n/**\n * An object representing a set of style for a given keyframe. It corresponds to the contains of a single keyframe of a @keyframes at-rule. It implements the CSSRule interface with a type value of 8 (CSSRule.KEYFRAME_RULE).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframeRule)\n */\ninterface CSSKeyframeRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframeRule/keyText) */\n keyText: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframeRule/style) */\n readonly style: CSSStyleDeclaration;\n}\n\ndeclare var CSSKeyframeRule: {\n prototype: CSSKeyframeRule;\n new(): CSSKeyframeRule;\n};\n\n/**\n * An object representing a complete set of keyframes for a CSS animation. It corresponds to the contains of a whole @keyframes at-rule. It implements the CSSRule interface with a type value of 7 (CSSRule.KEYFRAMES_RULE).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframesRule)\n */\ninterface CSSKeyframesRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframesRule/cssRules) */\n readonly cssRules: CSSRuleList;\n readonly length: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframesRule/name) */\n name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframesRule/appendRule) */\n appendRule(rule: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframesRule/deleteRule) */\n deleteRule(select: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeyframesRule/findRule) */\n findRule(select: string): CSSKeyframeRule | null;\n [index: number]: CSSKeyframeRule;\n}\n\ndeclare var CSSKeyframesRule: {\n prototype: CSSKeyframesRule;\n new(): CSSKeyframesRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeywordValue) */\ninterface CSSKeywordValue extends CSSStyleValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSKeywordValue/value) */\n value: string;\n}\n\ndeclare var CSSKeywordValue: {\n prototype: CSSKeywordValue;\n new(value: string): CSSKeywordValue;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSLayerBlockRule) */\ninterface CSSLayerBlockRule extends CSSGroupingRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSLayerBlockRule/name) */\n readonly name: string;\n}\n\ndeclare var CSSLayerBlockRule: {\n prototype: CSSLayerBlockRule;\n new(): CSSLayerBlockRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSLayerStatementRule) */\ninterface CSSLayerStatementRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSLayerStatementRule/nameList) */\n readonly nameList: ReadonlyArray;\n}\n\ndeclare var CSSLayerStatementRule: {\n prototype: CSSLayerStatementRule;\n new(): CSSLayerStatementRule;\n};\n\ninterface CSSMathClamp extends CSSMathValue {\n readonly lower: CSSNumericValue;\n readonly upper: CSSNumericValue;\n readonly value: CSSNumericValue;\n}\n\ndeclare var CSSMathClamp: {\n prototype: CSSMathClamp;\n new(lower: CSSNumberish, value: CSSNumberish, upper: CSSNumberish): CSSMathClamp;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathInvert) */\ninterface CSSMathInvert extends CSSMathValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathInvert/value) */\n readonly value: CSSNumericValue;\n}\n\ndeclare var CSSMathInvert: {\n prototype: CSSMathInvert;\n new(arg: CSSNumberish): CSSMathInvert;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathMax) */\ninterface CSSMathMax extends CSSMathValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathMax/values) */\n readonly values: CSSNumericArray;\n}\n\ndeclare var CSSMathMax: {\n prototype: CSSMathMax;\n new(...args: CSSNumberish[]): CSSMathMax;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathMin) */\ninterface CSSMathMin extends CSSMathValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathMin/values) */\n readonly values: CSSNumericArray;\n}\n\ndeclare var CSSMathMin: {\n prototype: CSSMathMin;\n new(...args: CSSNumberish[]): CSSMathMin;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathNegate) */\ninterface CSSMathNegate extends CSSMathValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathNegate/value) */\n readonly value: CSSNumericValue;\n}\n\ndeclare var CSSMathNegate: {\n prototype: CSSMathNegate;\n new(arg: CSSNumberish): CSSMathNegate;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathProduct) */\ninterface CSSMathProduct extends CSSMathValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathProduct/values) */\n readonly values: CSSNumericArray;\n}\n\ndeclare var CSSMathProduct: {\n prototype: CSSMathProduct;\n new(...args: CSSNumberish[]): CSSMathProduct;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathSum) */\ninterface CSSMathSum extends CSSMathValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathSum/values) */\n readonly values: CSSNumericArray;\n}\n\ndeclare var CSSMathSum: {\n prototype: CSSMathSum;\n new(...args: CSSNumberish[]): CSSMathSum;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathValue) */\ninterface CSSMathValue extends CSSNumericValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMathValue/operator) */\n readonly operator: CSSMathOperator;\n}\n\ndeclare var CSSMathValue: {\n prototype: CSSMathValue;\n new(): CSSMathValue;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMatrixComponent) */\ninterface CSSMatrixComponent extends CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMatrixComponent/matrix) */\n matrix: DOMMatrix;\n}\n\ndeclare var CSSMatrixComponent: {\n prototype: CSSMatrixComponent;\n new(matrix: DOMMatrixReadOnly, options?: CSSMatrixComponentOptions): CSSMatrixComponent;\n};\n\n/**\n * A single CSS @media rule. It implements the CSSConditionRule interface, and therefore the CSSGroupingRule and the CSSRule interface with a type value of 4 (CSSRule.MEDIA_RULE).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMediaRule)\n */\ninterface CSSMediaRule extends CSSConditionRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSMediaRule/media) */\n readonly media: MediaList;\n}\n\ndeclare var CSSMediaRule: {\n prototype: CSSMediaRule;\n new(): CSSMediaRule;\n};\n\n/**\n * An object representing a single CSS @namespace at-rule. It implements the CSSRule interface, with a type value of 10 (CSSRule.NAMESPACE_RULE).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNamespaceRule)\n */\ninterface CSSNamespaceRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNamespaceRule/namespaceURI) */\n readonly namespaceURI: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNamespaceRule/prefix) */\n readonly prefix: string;\n}\n\ndeclare var CSSNamespaceRule: {\n prototype: CSSNamespaceRule;\n new(): CSSNamespaceRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericArray) */\ninterface CSSNumericArray {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericArray/length) */\n readonly length: number;\n forEach(callbackfn: (value: CSSNumericValue, key: number, parent: CSSNumericArray) => void, thisArg?: any): void;\n [index: number]: CSSNumericValue;\n}\n\ndeclare var CSSNumericArray: {\n prototype: CSSNumericArray;\n new(): CSSNumericArray;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue) */\ninterface CSSNumericValue extends CSSStyleValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/add) */\n add(...values: CSSNumberish[]): CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/div) */\n div(...values: CSSNumberish[]): CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/equals) */\n equals(...value: CSSNumberish[]): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/max) */\n max(...values: CSSNumberish[]): CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/min) */\n min(...values: CSSNumberish[]): CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/mul) */\n mul(...values: CSSNumberish[]): CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/sub) */\n sub(...values: CSSNumberish[]): CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/to) */\n to(unit: string): CSSUnitValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/toSum) */\n toSum(...units: string[]): CSSMathSum;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/type) */\n type(): CSSNumericType;\n}\n\ndeclare var CSSNumericValue: {\n prototype: CSSNumericValue;\n new(): CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSNumericValue/parse_static) */\n parse(cssText: string): CSSNumericValue;\n};\n\n/**\n * CSSPageRule is an interface representing a single CSS @page rule. It implements the CSSRule interface with a type value of 6 (CSSRule.PAGE_RULE).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPageRule)\n */\ninterface CSSPageRule extends CSSGroupingRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPageRule/selectorText) */\n selectorText: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPageRule/style) */\n readonly style: CSSStyleDeclaration;\n}\n\ndeclare var CSSPageRule: {\n prototype: CSSPageRule;\n new(): CSSPageRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPerspective) */\ninterface CSSPerspective extends CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPerspective/length) */\n length: CSSPerspectiveValue;\n}\n\ndeclare var CSSPerspective: {\n prototype: CSSPerspective;\n new(length: CSSPerspectiveValue): CSSPerspective;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule) */\ninterface CSSPropertyRule extends CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule/inherits) */\n readonly inherits: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule/initialValue) */\n readonly initialValue: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule/name) */\n readonly name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSPropertyRule/syntax) */\n readonly syntax: string;\n}\n\ndeclare var CSSPropertyRule: {\n prototype: CSSPropertyRule;\n new(): CSSPropertyRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRotate) */\ninterface CSSRotate extends CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRotate/angle) */\n angle: CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRotate/x) */\n x: CSSNumberish;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRotate/y) */\n y: CSSNumberish;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRotate/z) */\n z: CSSNumberish;\n}\n\ndeclare var CSSRotate: {\n prototype: CSSRotate;\n new(angle: CSSNumericValue): CSSRotate;\n new(x: CSSNumberish, y: CSSNumberish, z: CSSNumberish, angle: CSSNumericValue): CSSRotate;\n};\n\n/**\n * A single CSS rule. There are several types of rules, listed in the Type constants section below.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRule)\n */\ninterface CSSRule {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRule/cssText) */\n cssText: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRule/parentRule) */\n readonly parentRule: CSSRule | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRule/parentStyleSheet) */\n readonly parentStyleSheet: CSSStyleSheet | null;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRule/type)\n */\n readonly type: number;\n readonly STYLE_RULE: 1;\n readonly CHARSET_RULE: 2;\n readonly IMPORT_RULE: 3;\n readonly MEDIA_RULE: 4;\n readonly FONT_FACE_RULE: 5;\n readonly PAGE_RULE: 6;\n readonly NAMESPACE_RULE: 10;\n readonly KEYFRAMES_RULE: 7;\n readonly KEYFRAME_RULE: 8;\n readonly SUPPORTS_RULE: 12;\n}\n\ndeclare var CSSRule: {\n prototype: CSSRule;\n new(): CSSRule;\n readonly STYLE_RULE: 1;\n readonly CHARSET_RULE: 2;\n readonly IMPORT_RULE: 3;\n readonly MEDIA_RULE: 4;\n readonly FONT_FACE_RULE: 5;\n readonly PAGE_RULE: 6;\n readonly NAMESPACE_RULE: 10;\n readonly KEYFRAMES_RULE: 7;\n readonly KEYFRAME_RULE: 8;\n readonly SUPPORTS_RULE: 12;\n};\n\n/**\n * A CSSRuleList is an (indirect-modify only) array-like object containing an ordered collection of CSSRule objects.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRuleList)\n */\ninterface CSSRuleList {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRuleList/length) */\n readonly length: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSRuleList/item) */\n item(index: number): CSSRule | null;\n [index: number]: CSSRule;\n}\n\ndeclare var CSSRuleList: {\n prototype: CSSRuleList;\n new(): CSSRuleList;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSScale) */\ninterface CSSScale extends CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSScale/x) */\n x: CSSNumberish;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSScale/y) */\n y: CSSNumberish;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSScale/z) */\n z: CSSNumberish;\n}\n\ndeclare var CSSScale: {\n prototype: CSSScale;\n new(x: CSSNumberish, y: CSSNumberish, z?: CSSNumberish): CSSScale;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSSkew) */\ninterface CSSSkew extends CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSSkew/ax) */\n ax: CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSSkew/ay) */\n ay: CSSNumericValue;\n}\n\ndeclare var CSSSkew: {\n prototype: CSSSkew;\n new(ax: CSSNumericValue, ay: CSSNumericValue): CSSSkew;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSSkewX) */\ninterface CSSSkewX extends CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSSkewX/ax) */\n ax: CSSNumericValue;\n}\n\ndeclare var CSSSkewX: {\n prototype: CSSSkewX;\n new(ax: CSSNumericValue): CSSSkewX;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSSkewY) */\ninterface CSSSkewY extends CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSSkewY/ay) */\n ay: CSSNumericValue;\n}\n\ndeclare var CSSSkewY: {\n prototype: CSSSkewY;\n new(ay: CSSNumericValue): CSSSkewY;\n};\n\n/**\n * An object that is a CSS declaration block, and exposes style information and various style-related methods and properties.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration)\n */\ninterface CSSStyleDeclaration {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/accent-color) */\n accentColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/align-content) */\n alignContent: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/align-items) */\n alignItems: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/align-self) */\n alignSelf: string;\n alignmentBaseline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/all) */\n all: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation) */\n animation: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-composition) */\n animationComposition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-delay) */\n animationDelay: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-direction) */\n animationDirection: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-duration) */\n animationDuration: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode) */\n animationFillMode: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count) */\n animationIterationCount: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-name) */\n animationName: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-play-state) */\n animationPlayState: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-timing-function) */\n animationTimingFunction: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/appearance) */\n appearance: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/aspect-ratio) */\n aspectRatio: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/backdrop-filter) */\n backdropFilter: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/backface-visibility) */\n backfaceVisibility: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background) */\n background: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-attachment) */\n backgroundAttachment: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-blend-mode) */\n backgroundBlendMode: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-clip) */\n backgroundClip: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-color) */\n backgroundColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-image) */\n backgroundImage: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-origin) */\n backgroundOrigin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-position) */\n backgroundPosition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-position-x) */\n backgroundPositionX: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-position-y) */\n backgroundPositionY: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-repeat) */\n backgroundRepeat: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-size) */\n backgroundSize: string;\n baselineShift: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/block-size) */\n blockSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border) */\n border: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block) */\n borderBlock: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-color) */\n borderBlockColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-end) */\n borderBlockEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-end-color) */\n borderBlockEndColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-end-style) */\n borderBlockEndStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-end-width) */\n borderBlockEndWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-start) */\n borderBlockStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-start-color) */\n borderBlockStartColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-start-style) */\n borderBlockStartStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-start-width) */\n borderBlockStartWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-style) */\n borderBlockStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-block-width) */\n borderBlockWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-bottom) */\n borderBottom: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-bottom-color) */\n borderBottomColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius) */\n borderBottomLeftRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius) */\n borderBottomRightRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-bottom-style) */\n borderBottomStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-bottom-width) */\n borderBottomWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-collapse) */\n borderCollapse: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-color) */\n borderColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius) */\n borderEndEndRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius) */\n borderEndStartRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-image) */\n borderImage: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-image-outset) */\n borderImageOutset: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-image-repeat) */\n borderImageRepeat: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-image-slice) */\n borderImageSlice: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-image-source) */\n borderImageSource: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-image-width) */\n borderImageWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline) */\n borderInline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-color) */\n borderInlineColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-end) */\n borderInlineEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color) */\n borderInlineEndColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style) */\n borderInlineEndStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width) */\n borderInlineEndWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-start) */\n borderInlineStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color) */\n borderInlineStartColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style) */\n borderInlineStartStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width) */\n borderInlineStartWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-style) */\n borderInlineStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-inline-width) */\n borderInlineWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-left) */\n borderLeft: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-left-color) */\n borderLeftColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-left-style) */\n borderLeftStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-left-width) */\n borderLeftWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-radius) */\n borderRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-right) */\n borderRight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-right-color) */\n borderRightColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-right-style) */\n borderRightStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-right-width) */\n borderRightWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-spacing) */\n borderSpacing: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius) */\n borderStartEndRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius) */\n borderStartStartRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-style) */\n borderStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-top) */\n borderTop: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-top-color) */\n borderTopColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius) */\n borderTopLeftRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius) */\n borderTopRightRadius: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-top-style) */\n borderTopStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-top-width) */\n borderTopWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-width) */\n borderWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/bottom) */\n bottom: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-shadow) */\n boxShadow: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-sizing) */\n boxSizing: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/break-after) */\n breakAfter: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/break-before) */\n breakBefore: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/break-inside) */\n breakInside: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/caption-side) */\n captionSide: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/caret-color) */\n caretColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/clear) */\n clear: string;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/clip)\n */\n clip: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/clip-path) */\n clipPath: string;\n clipRule: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/color) */\n color: string;\n colorInterpolation: string;\n colorInterpolationFilters: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/color-scheme) */\n colorScheme: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-count) */\n columnCount: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-fill) */\n columnFill: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-gap) */\n columnGap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-rule) */\n columnRule: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-rule-color) */\n columnRuleColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-rule-style) */\n columnRuleStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-rule-width) */\n columnRuleWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-span) */\n columnSpan: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/column-width) */\n columnWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/columns) */\n columns: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain) */\n contain: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-contain-intrinsic-block-size) */\n containIntrinsicBlockSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-height) */\n containIntrinsicHeight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-contain-intrinsic-inline-size) */\n containIntrinsicInlineSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-size) */\n containIntrinsicSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-width) */\n containIntrinsicWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/container) */\n container: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/container-name) */\n containerName: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/container-type) */\n containerType: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/content) */\n content: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/counter-increment) */\n counterIncrement: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/counter-reset) */\n counterReset: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/counter-set) */\n counterSet: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/cssFloat) */\n cssFloat: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/cssText) */\n cssText: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/cursor) */\n cursor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/direction) */\n direction: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/display) */\n display: string;\n dominantBaseline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/empty-cells) */\n emptyCells: string;\n fill: string;\n fillOpacity: string;\n fillRule: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/filter) */\n filter: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex) */\n flex: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-basis) */\n flexBasis: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-direction) */\n flexDirection: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-flow) */\n flexFlow: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-grow) */\n flexGrow: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-shrink) */\n flexShrink: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-wrap) */\n flexWrap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/float) */\n float: string;\n floodColor: string;\n floodOpacity: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font) */\n font: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-family) */\n fontFamily: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-feature-settings) */\n fontFeatureSettings: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-kerning) */\n fontKerning: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing) */\n fontOpticalSizing: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-palette) */\n fontPalette: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-size) */\n fontSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-size-adjust) */\n fontSizeAdjust: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-stretch) */\n fontStretch: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-style) */\n fontStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-synthesis) */\n fontSynthesis: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-synthesis-small-caps) */\n fontSynthesisSmallCaps: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-synthesis-style) */\n fontSynthesisStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-synthesis-weight) */\n fontSynthesisWeight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-variant) */\n fontVariant: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-variant-alternates) */\n fontVariantAlternates: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-variant-caps) */\n fontVariantCaps: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian) */\n fontVariantEastAsian: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures) */\n fontVariantLigatures: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric) */\n fontVariantNumeric: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-variant-position) */\n fontVariantPosition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-variation-settings) */\n fontVariationSettings: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/font-weight) */\n fontWeight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/forced-color-adjust) */\n forcedColorAdjust: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/gap) */\n gap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid) */\n grid: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-area) */\n gridArea: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns) */\n gridAutoColumns: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow) */\n gridAutoFlow: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows) */\n gridAutoRows: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-column) */\n gridColumn: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-column-end) */\n gridColumnEnd: string;\n /** @deprecated This is a legacy alias of `columnGap`. */\n gridColumnGap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-column-start) */\n gridColumnStart: string;\n /** @deprecated This is a legacy alias of `gap`. */\n gridGap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-row) */\n gridRow: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-row-end) */\n gridRowEnd: string;\n /** @deprecated This is a legacy alias of `rowGap`. */\n gridRowGap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-row-start) */\n gridRowStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-template) */\n gridTemplate: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-template-areas) */\n gridTemplateAreas: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-template-columns) */\n gridTemplateColumns: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/grid-template-rows) */\n gridTemplateRows: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/height) */\n height: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/hyphenate-character) */\n hyphenateCharacter: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/hyphens) */\n hyphens: string;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/image-orientation)\n */\n imageOrientation: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/image-rendering) */\n imageRendering: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/inline-size) */\n inlineSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/inset) */\n inset: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/inset-block) */\n insetBlock: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/inset-block-end) */\n insetBlockEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/inset-block-start) */\n insetBlockStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/inset-inline) */\n insetInline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/inset-inline-end) */\n insetInlineEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/inset-inline-start) */\n insetInlineStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/isolation) */\n isolation: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/justify-content) */\n justifyContent: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/justify-items) */\n justifyItems: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/justify-self) */\n justifySelf: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/left) */\n left: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/length) */\n readonly length: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/letter-spacing) */\n letterSpacing: string;\n lightingColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/line-break) */\n lineBreak: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/line-height) */\n lineHeight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/list-style) */\n listStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/list-style-image) */\n listStyleImage: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/list-style-position) */\n listStylePosition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/list-style-type) */\n listStyleType: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin) */\n margin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-block) */\n marginBlock: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-block-end) */\n marginBlockEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-block-start) */\n marginBlockStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-bottom) */\n marginBottom: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-inline) */\n marginInline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-inline-end) */\n marginInlineEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-inline-start) */\n marginInlineStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-left) */\n marginLeft: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-right) */\n marginRight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/margin-top) */\n marginTop: string;\n marker: string;\n markerEnd: string;\n markerMid: string;\n markerStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask) */\n mask: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-clip) */\n maskClip: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-composite) */\n maskComposite: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-image) */\n maskImage: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-mode) */\n maskMode: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-origin) */\n maskOrigin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-position) */\n maskPosition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-repeat) */\n maskRepeat: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-size) */\n maskSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-type) */\n maskType: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/math-style) */\n mathStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/max-block-size) */\n maxBlockSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/max-height) */\n maxHeight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/max-inline-size) */\n maxInlineSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/max-width) */\n maxWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/min-block-size) */\n minBlockSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/min-height) */\n minHeight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/min-inline-size) */\n minInlineSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/min-width) */\n minWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode) */\n mixBlendMode: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/object-fit) */\n objectFit: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/object-position) */\n objectPosition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/offset) */\n offset: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/offset-distance) */\n offsetDistance: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/offset-path) */\n offsetPath: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/offset-rotate) */\n offsetRotate: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/opacity) */\n opacity: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/order) */\n order: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/orphans) */\n orphans: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/outline) */\n outline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/outline-color) */\n outlineColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/outline-offset) */\n outlineOffset: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/outline-style) */\n outlineStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/outline-width) */\n outlineWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overflow) */\n overflow: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overflow-anchor) */\n overflowAnchor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overflow-clip-margin) */\n overflowClipMargin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overflow-wrap) */\n overflowWrap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overflow-x) */\n overflowX: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overflow-y) */\n overflowY: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior) */\n overscrollBehavior: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block) */\n overscrollBehaviorBlock: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline) */\n overscrollBehaviorInline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x) */\n overscrollBehaviorX: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y) */\n overscrollBehaviorY: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding) */\n padding: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-block) */\n paddingBlock: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-block-end) */\n paddingBlockEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-block-start) */\n paddingBlockStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-bottom) */\n paddingBottom: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-inline) */\n paddingInline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-inline-end) */\n paddingInlineEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-inline-start) */\n paddingInlineStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-left) */\n paddingLeft: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-right) */\n paddingRight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/padding-top) */\n paddingTop: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/page) */\n page: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/page-break-after) */\n pageBreakAfter: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/page-break-before) */\n pageBreakBefore: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/page-break-inside) */\n pageBreakInside: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/paint-order) */\n paintOrder: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/parentRule) */\n readonly parentRule: CSSRule | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/perspective) */\n perspective: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/perspective-origin) */\n perspectiveOrigin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/place-content) */\n placeContent: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/place-items) */\n placeItems: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/place-self) */\n placeSelf: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/pointer-events) */\n pointerEvents: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/position) */\n position: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/print-color-adjust) */\n printColorAdjust: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/quotes) */\n quotes: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/resize) */\n resize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/right) */\n right: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/rotate) */\n rotate: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/row-gap) */\n rowGap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/ruby-position) */\n rubyPosition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scale) */\n scale: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-behavior) */\n scrollBehavior: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin) */\n scrollMargin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block) */\n scrollMarginBlock: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end) */\n scrollMarginBlockEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start) */\n scrollMarginBlockStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom) */\n scrollMarginBottom: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline) */\n scrollMarginInline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end) */\n scrollMarginInlineEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start) */\n scrollMarginInlineStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left) */\n scrollMarginLeft: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right) */\n scrollMarginRight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top) */\n scrollMarginTop: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding) */\n scrollPadding: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block) */\n scrollPaddingBlock: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end) */\n scrollPaddingBlockEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start) */\n scrollPaddingBlockStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom) */\n scrollPaddingBottom: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline) */\n scrollPaddingInline: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end) */\n scrollPaddingInlineEnd: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start) */\n scrollPaddingInlineStart: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left) */\n scrollPaddingLeft: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right) */\n scrollPaddingRight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top) */\n scrollPaddingTop: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align) */\n scrollSnapAlign: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop) */\n scrollSnapStop: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type) */\n scrollSnapType: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/scrollbar-gutter) */\n scrollbarGutter: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold) */\n shapeImageThreshold: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/shape-margin) */\n shapeMargin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/shape-outside) */\n shapeOutside: string;\n shapeRendering: string;\n stopColor: string;\n stopOpacity: string;\n stroke: string;\n strokeDasharray: string;\n strokeDashoffset: string;\n strokeLinecap: string;\n strokeLinejoin: string;\n strokeMiterlimit: string;\n strokeOpacity: string;\n strokeWidth: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/tab-size) */\n tabSize: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/table-layout) */\n tableLayout: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-align) */\n textAlign: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-align-last) */\n textAlignLast: string;\n textAnchor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-combine-upright) */\n textCombineUpright: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-decoration) */\n textDecoration: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-decoration-color) */\n textDecorationColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-decoration-line) */\n textDecorationLine: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink) */\n textDecorationSkipInk: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-decoration-style) */\n textDecorationStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness) */\n textDecorationThickness: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-emphasis) */\n textEmphasis: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color) */\n textEmphasisColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position) */\n textEmphasisPosition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style) */\n textEmphasisStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-indent) */\n textIndent: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-orientation) */\n textOrientation: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-overflow) */\n textOverflow: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-rendering) */\n textRendering: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-shadow) */\n textShadow: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-transform) */\n textTransform: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-underline-offset) */\n textUnderlineOffset: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-underline-position) */\n textUnderlinePosition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/top) */\n top: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/touch-action) */\n touchAction: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transform) */\n transform: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transform-box) */\n transformBox: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transform-origin) */\n transformOrigin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transform-style) */\n transformStyle: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition) */\n transition: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition-delay) */\n transitionDelay: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition-duration) */\n transitionDuration: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition-property) */\n transitionProperty: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition-timing-function) */\n transitionTimingFunction: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/translate) */\n translate: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/unicode-bidi) */\n unicodeBidi: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/user-select) */\n userSelect: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/vertical-align) */\n verticalAlign: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/visibility) */\n visibility: string;\n /**\n * @deprecated This is a legacy alias of `alignContent`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/align-content)\n */\n webkitAlignContent: string;\n /**\n * @deprecated This is a legacy alias of `alignItems`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/align-items)\n */\n webkitAlignItems: string;\n /**\n * @deprecated This is a legacy alias of `alignSelf`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/align-self)\n */\n webkitAlignSelf: string;\n /**\n * @deprecated This is a legacy alias of `animation`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation)\n */\n webkitAnimation: string;\n /**\n * @deprecated This is a legacy alias of `animationDelay`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-delay)\n */\n webkitAnimationDelay: string;\n /**\n * @deprecated This is a legacy alias of `animationDirection`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-direction)\n */\n webkitAnimationDirection: string;\n /**\n * @deprecated This is a legacy alias of `animationDuration`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-duration)\n */\n webkitAnimationDuration: string;\n /**\n * @deprecated This is a legacy alias of `animationFillMode`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode)\n */\n webkitAnimationFillMode: string;\n /**\n * @deprecated This is a legacy alias of `animationIterationCount`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count)\n */\n webkitAnimationIterationCount: string;\n /**\n * @deprecated This is a legacy alias of `animationName`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-name)\n */\n webkitAnimationName: string;\n /**\n * @deprecated This is a legacy alias of `animationPlayState`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-play-state)\n */\n webkitAnimationPlayState: string;\n /**\n * @deprecated This is a legacy alias of `animationTimingFunction`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/animation-timing-function)\n */\n webkitAnimationTimingFunction: string;\n /**\n * @deprecated This is a legacy alias of `appearance`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/appearance)\n */\n webkitAppearance: string;\n /**\n * @deprecated This is a legacy alias of `backfaceVisibility`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/backface-visibility)\n */\n webkitBackfaceVisibility: string;\n /**\n * @deprecated This is a legacy alias of `backgroundClip`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-clip)\n */\n webkitBackgroundClip: string;\n /**\n * @deprecated This is a legacy alias of `backgroundOrigin`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-origin)\n */\n webkitBackgroundOrigin: string;\n /**\n * @deprecated This is a legacy alias of `backgroundSize`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/background-size)\n */\n webkitBackgroundSize: string;\n /**\n * @deprecated This is a legacy alias of `borderBottomLeftRadius`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius)\n */\n webkitBorderBottomLeftRadius: string;\n /**\n * @deprecated This is a legacy alias of `borderBottomRightRadius`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius)\n */\n webkitBorderBottomRightRadius: string;\n /**\n * @deprecated This is a legacy alias of `borderRadius`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-radius)\n */\n webkitBorderRadius: string;\n /**\n * @deprecated This is a legacy alias of `borderTopLeftRadius`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius)\n */\n webkitBorderTopLeftRadius: string;\n /**\n * @deprecated This is a legacy alias of `borderTopRightRadius`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius)\n */\n webkitBorderTopRightRadius: string;\n /**\n * @deprecated This is a legacy alias of `boxAlign`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-align)\n */\n webkitBoxAlign: string;\n /**\n * @deprecated This is a legacy alias of `boxFlex`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-flex)\n */\n webkitBoxFlex: string;\n /**\n * @deprecated This is a legacy alias of `boxOrdinalGroup`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-ordinal-group)\n */\n webkitBoxOrdinalGroup: string;\n /**\n * @deprecated This is a legacy alias of `boxOrient`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-orient)\n */\n webkitBoxOrient: string;\n /**\n * @deprecated This is a legacy alias of `boxPack`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-pack)\n */\n webkitBoxPack: string;\n /**\n * @deprecated This is a legacy alias of `boxShadow`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-shadow)\n */\n webkitBoxShadow: string;\n /**\n * @deprecated This is a legacy alias of `boxSizing`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/box-sizing)\n */\n webkitBoxSizing: string;\n /**\n * @deprecated This is a legacy alias of `filter`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/filter)\n */\n webkitFilter: string;\n /**\n * @deprecated This is a legacy alias of `flex`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex)\n */\n webkitFlex: string;\n /**\n * @deprecated This is a legacy alias of `flexBasis`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-basis)\n */\n webkitFlexBasis: string;\n /**\n * @deprecated This is a legacy alias of `flexDirection`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-direction)\n */\n webkitFlexDirection: string;\n /**\n * @deprecated This is a legacy alias of `flexFlow`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-flow)\n */\n webkitFlexFlow: string;\n /**\n * @deprecated This is a legacy alias of `flexGrow`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-grow)\n */\n webkitFlexGrow: string;\n /**\n * @deprecated This is a legacy alias of `flexShrink`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-shrink)\n */\n webkitFlexShrink: string;\n /**\n * @deprecated This is a legacy alias of `flexWrap`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/flex-wrap)\n */\n webkitFlexWrap: string;\n /**\n * @deprecated This is a legacy alias of `justifyContent`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/justify-content)\n */\n webkitJustifyContent: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/-webkit-line-clamp) */\n webkitLineClamp: string;\n /**\n * @deprecated This is a legacy alias of `mask`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask)\n */\n webkitMask: string;\n /**\n * @deprecated This is a legacy alias of `maskBorder`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-border)\n */\n webkitMaskBoxImage: string;\n /**\n * @deprecated This is a legacy alias of `maskBorderOutset`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-border-outset)\n */\n webkitMaskBoxImageOutset: string;\n /**\n * @deprecated This is a legacy alias of `maskBorderRepeat`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-border-repeat)\n */\n webkitMaskBoxImageRepeat: string;\n /**\n * @deprecated This is a legacy alias of `maskBorderSlice`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-border-slice)\n */\n webkitMaskBoxImageSlice: string;\n /**\n * @deprecated This is a legacy alias of `maskBorderSource`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-border-source)\n */\n webkitMaskBoxImageSource: string;\n /**\n * @deprecated This is a legacy alias of `maskBorderWidth`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-border-width)\n */\n webkitMaskBoxImageWidth: string;\n /**\n * @deprecated This is a legacy alias of `maskClip`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-clip)\n */\n webkitMaskClip: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/-webkit-mask-composite) */\n webkitMaskComposite: string;\n /**\n * @deprecated This is a legacy alias of `maskImage`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-image)\n */\n webkitMaskImage: string;\n /**\n * @deprecated This is a legacy alias of `maskOrigin`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-origin)\n */\n webkitMaskOrigin: string;\n /**\n * @deprecated This is a legacy alias of `maskPosition`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-position)\n */\n webkitMaskPosition: string;\n /**\n * @deprecated This is a legacy alias of `maskRepeat`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-repeat)\n */\n webkitMaskRepeat: string;\n /**\n * @deprecated This is a legacy alias of `maskSize`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/mask-size)\n */\n webkitMaskSize: string;\n /**\n * @deprecated This is a legacy alias of `order`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/order)\n */\n webkitOrder: string;\n /**\n * @deprecated This is a legacy alias of `perspective`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/perspective)\n */\n webkitPerspective: string;\n /**\n * @deprecated This is a legacy alias of `perspectiveOrigin`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/perspective-origin)\n */\n webkitPerspectiveOrigin: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/-webkit-text-fill-color) */\n webkitTextFillColor: string;\n /**\n * @deprecated This is a legacy alias of `textSizeAdjust`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/text-size-adjust)\n */\n webkitTextSizeAdjust: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke) */\n webkitTextStroke: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke-color) */\n webkitTextStrokeColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/-webkit-text-stroke-width) */\n webkitTextStrokeWidth: string;\n /**\n * @deprecated This is a legacy alias of `transform`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transform)\n */\n webkitTransform: string;\n /**\n * @deprecated This is a legacy alias of `transformOrigin`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transform-origin)\n */\n webkitTransformOrigin: string;\n /**\n * @deprecated This is a legacy alias of `transformStyle`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transform-style)\n */\n webkitTransformStyle: string;\n /**\n * @deprecated This is a legacy alias of `transition`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition)\n */\n webkitTransition: string;\n /**\n * @deprecated This is a legacy alias of `transitionDelay`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition-delay)\n */\n webkitTransitionDelay: string;\n /**\n * @deprecated This is a legacy alias of `transitionDuration`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition-duration)\n */\n webkitTransitionDuration: string;\n /**\n * @deprecated This is a legacy alias of `transitionProperty`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition-property)\n */\n webkitTransitionProperty: string;\n /**\n * @deprecated This is a legacy alias of `transitionTimingFunction`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/transition-timing-function)\n */\n webkitTransitionTimingFunction: string;\n /**\n * @deprecated This is a legacy alias of `userSelect`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/user-select)\n */\n webkitUserSelect: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/white-space) */\n whiteSpace: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/widows) */\n widows: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/width) */\n width: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/will-change) */\n willChange: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/word-break) */\n wordBreak: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/word-spacing) */\n wordSpacing: string;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/overflow-wrap)\n */\n wordWrap: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/writing-mode) */\n writingMode: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/CSS/z-index) */\n zIndex: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/getPropertyPriority) */\n getPropertyPriority(property: string): string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/getPropertyValue) */\n getPropertyValue(property: string): string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/item) */\n item(index: number): string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/removeProperty) */\n removeProperty(property: string): string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleDeclaration/setProperty) */\n setProperty(property: string, value: string | null, priority?: string): void;\n [index: number]: string;\n}\n\ndeclare var CSSStyleDeclaration: {\n prototype: CSSStyleDeclaration;\n new(): CSSStyleDeclaration;\n};\n\n/**\n * CSSStyleRule represents a single CSS style rule. It implements the CSSRule interface with a type value of 1 (CSSRule.STYLE_RULE).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleRule)\n */\ninterface CSSStyleRule extends CSSRule {\n readonly cssRules: CSSRuleList;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleRule/selectorText) */\n selectorText: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleRule/style) */\n readonly style: CSSStyleDeclaration;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleRule/styleMap) */\n readonly styleMap: StylePropertyMap;\n deleteRule(index: number): void;\n insertRule(rule: string, index?: number): number;\n}\n\ndeclare var CSSStyleRule: {\n prototype: CSSStyleRule;\n new(): CSSStyleRule;\n};\n\n/**\n * A single CSS style sheet. It inherits properties and methods from its parent, StyleSheet.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet)\n */\ninterface CSSStyleSheet extends StyleSheet {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/cssRules) */\n readonly cssRules: CSSRuleList;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/ownerRule) */\n readonly ownerRule: CSSRule | null;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/rules)\n */\n readonly rules: CSSRuleList;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/addRule)\n */\n addRule(selector?: string, style?: string, index?: number): number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/deleteRule) */\n deleteRule(index: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/insertRule) */\n insertRule(rule: string, index?: number): number;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/removeRule)\n */\n removeRule(index?: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/replace) */\n replace(text: string): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleSheet/replaceSync) */\n replaceSync(text: string): void;\n}\n\ndeclare var CSSStyleSheet: {\n prototype: CSSStyleSheet;\n new(options?: CSSStyleSheetInit): CSSStyleSheet;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleValue) */\ninterface CSSStyleValue {\n toString(): string;\n}\n\ndeclare var CSSStyleValue: {\n prototype: CSSStyleValue;\n new(): CSSStyleValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleValue/parse_static) */\n parse(property: string, cssText: string): CSSStyleValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSStyleValue/parseAll_static) */\n parseAll(property: string, cssText: string): CSSStyleValue[];\n};\n\n/**\n * An object representing a single CSS @supports at-rule. It implements the CSSConditionRule interface, and therefore the CSSRule and CSSGroupingRule interfaces with a type value of 12 (CSSRule.SUPPORTS_RULE).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSSupportsRule)\n */\ninterface CSSSupportsRule extends CSSConditionRule {\n}\n\ndeclare var CSSSupportsRule: {\n prototype: CSSSupportsRule;\n new(): CSSSupportsRule;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransformComponent) */\ninterface CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransformComponent/is2D) */\n is2D: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransformComponent/toMatrix) */\n toMatrix(): DOMMatrix;\n toString(): string;\n}\n\ndeclare var CSSTransformComponent: {\n prototype: CSSTransformComponent;\n new(): CSSTransformComponent;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransformValue) */\ninterface CSSTransformValue extends CSSStyleValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransformValue/is2D) */\n readonly is2D: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransformValue/length) */\n readonly length: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransformValue/toMatrix) */\n toMatrix(): DOMMatrix;\n forEach(callbackfn: (value: CSSTransformComponent, key: number, parent: CSSTransformValue) => void, thisArg?: any): void;\n [index: number]: CSSTransformComponent;\n}\n\ndeclare var CSSTransformValue: {\n prototype: CSSTransformValue;\n new(transforms: CSSTransformComponent[]): CSSTransformValue;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransition) */\ninterface CSSTransition extends Animation {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTransition/transitionProperty) */\n readonly transitionProperty: string;\n addEventListener(type: K, listener: (this: CSSTransition, ev: AnimationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: CSSTransition, ev: AnimationEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var CSSTransition: {\n prototype: CSSTransition;\n new(): CSSTransition;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTranslate) */\ninterface CSSTranslate extends CSSTransformComponent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTranslate/x) */\n x: CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTranslate/y) */\n y: CSSNumericValue;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSTranslate/z) */\n z: CSSNumericValue;\n}\n\ndeclare var CSSTranslate: {\n prototype: CSSTranslate;\n new(x: CSSNumericValue, y: CSSNumericValue, z?: CSSNumericValue): CSSTranslate;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSUnitValue) */\ninterface CSSUnitValue extends CSSNumericValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSUnitValue/unit) */\n readonly unit: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSUnitValue/value) */\n value: number;\n}\n\ndeclare var CSSUnitValue: {\n prototype: CSSUnitValue;\n new(value: number, unit: string): CSSUnitValue;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSUnparsedValue) */\ninterface CSSUnparsedValue extends CSSStyleValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSUnparsedValue/length) */\n readonly length: number;\n forEach(callbackfn: (value: CSSUnparsedSegment, key: number, parent: CSSUnparsedValue) => void, thisArg?: any): void;\n [index: number]: CSSUnparsedSegment;\n}\n\ndeclare var CSSUnparsedValue: {\n prototype: CSSUnparsedValue;\n new(members: CSSUnparsedSegment[]): CSSUnparsedValue;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSVariableReferenceValue) */\ninterface CSSVariableReferenceValue {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSVariableReferenceValue/fallback) */\n readonly fallback: CSSUnparsedValue | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CSSVariableReferenceValue/variable) */\n variable: string;\n}\n\ndeclare var CSSVariableReferenceValue: {\n prototype: CSSVariableReferenceValue;\n new(variable: string, fallback?: CSSUnparsedValue | null): CSSVariableReferenceValue;\n};\n\n/**\n * Provides a storage mechanism for Request / Response object pairs that are cached, for example as part of the ServiceWorker life cycle. Note that the Cache interface is exposed to windowed scopes as well as workers. You don\'t have to use it in conjunction with service workers, even though it is defined in the service worker spec.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache)\n */\ninterface Cache {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache/add) */\n add(request: RequestInfo | URL): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache/addAll) */\n addAll(requests: RequestInfo[]): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache/delete) */\n delete(request: RequestInfo | URL, options?: CacheQueryOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache/keys) */\n keys(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise>;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache/match) */\n match(request: RequestInfo | URL, options?: CacheQueryOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache/matchAll) */\n matchAll(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise>;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache/put) */\n put(request: RequestInfo | URL, response: Response): Promise;\n}\n\ndeclare var Cache: {\n prototype: Cache;\n new(): Cache;\n};\n\n/**\n * The storage for Cache objects.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage)\n */\ninterface CacheStorage {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage/delete) */\n delete(cacheName: string): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage/has) */\n has(cacheName: string): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage/keys) */\n keys(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage/match) */\n match(request: RequestInfo | URL, options?: MultiCacheQueryOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage/open) */\n open(cacheName: string): Promise;\n}\n\ndeclare var CacheStorage: {\n prototype: CacheStorage;\n new(): CacheStorage;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasCaptureMediaStreamTrack) */\ninterface CanvasCaptureMediaStreamTrack extends MediaStreamTrack {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasCaptureMediaStreamTrack/canvas) */\n readonly canvas: HTMLCanvasElement;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasCaptureMediaStreamTrack/requestFrame) */\n requestFrame(): void;\n addEventListener(type: K, listener: (this: CanvasCaptureMediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: CanvasCaptureMediaStreamTrack, ev: MediaStreamTrackEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var CanvasCaptureMediaStreamTrack: {\n prototype: CanvasCaptureMediaStreamTrack;\n new(): CanvasCaptureMediaStreamTrack;\n};\n\ninterface CanvasCompositing {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/globalAlpha) */\n globalAlpha: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation) */\n globalCompositeOperation: GlobalCompositeOperation;\n}\n\ninterface CanvasDrawImage {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/drawImage) */\n drawImage(image: CanvasImageSource, dx: number, dy: number): void;\n drawImage(image: CanvasImageSource, dx: number, dy: number, dw: number, dh: number): void;\n drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;\n}\n\ninterface CanvasDrawPath {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/beginPath) */\n beginPath(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/clip) */\n clip(fillRule?: CanvasFillRule): void;\n clip(path: Path2D, fillRule?: CanvasFillRule): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/fill) */\n fill(fillRule?: CanvasFillRule): void;\n fill(path: Path2D, fillRule?: CanvasFillRule): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/isPointInPath) */\n isPointInPath(x: number, y: number, fillRule?: CanvasFillRule): boolean;\n isPointInPath(path: Path2D, x: number, y: number, fillRule?: CanvasFillRule): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/isPointInStroke) */\n isPointInStroke(x: number, y: number): boolean;\n isPointInStroke(path: Path2D, x: number, y: number): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/stroke) */\n stroke(): void;\n stroke(path: Path2D): void;\n}\n\ninterface CanvasFillStrokeStyles {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/fillStyle) */\n fillStyle: string | CanvasGradient | CanvasPattern;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/strokeStyle) */\n strokeStyle: string | CanvasGradient | CanvasPattern;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/createConicGradient) */\n createConicGradient(startAngle: number, x: number, y: number): CanvasGradient;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/createLinearGradient) */\n createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/createPattern) */\n createPattern(image: CanvasImageSource, repetition: string | null): CanvasPattern | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/createRadialGradient) */\n createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;\n}\n\ninterface CanvasFilters {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/filter) */\n filter: string;\n}\n\n/**\n * An opaque object describing a gradient. It is returned by the methods CanvasRenderingContext2D.createLinearGradient() or CanvasRenderingContext2D.createRadialGradient().\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasGradient)\n */\ninterface CanvasGradient {\n /**\n * Adds a color stop with the given color to the gradient at the given offset. 0.0 is the offset at one end of the gradient, 1.0 is the offset at the other end.\n *\n * Throws an "IndexSizeError" DOMException if the offset is out of range. Throws a "SyntaxError" DOMException if the color cannot be parsed.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasGradient/addColorStop)\n */\n addColorStop(offset: number, color: string): void;\n}\n\ndeclare var CanvasGradient: {\n prototype: CanvasGradient;\n new(): CanvasGradient;\n};\n\ninterface CanvasImageData {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/createImageData) */\n createImageData(sw: number, sh: number, settings?: ImageDataSettings): ImageData;\n createImageData(imagedata: ImageData): ImageData;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/getImageData) */\n getImageData(sx: number, sy: number, sw: number, sh: number, settings?: ImageDataSettings): ImageData;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/putImageData) */\n putImageData(imagedata: ImageData, dx: number, dy: number): void;\n putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void;\n}\n\ninterface CanvasImageSmoothing {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/imageSmoothingEnabled) */\n imageSmoothingEnabled: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/imageSmoothingQuality) */\n imageSmoothingQuality: ImageSmoothingQuality;\n}\n\ninterface CanvasPath {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/arc) */\n arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/arcTo) */\n arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/bezierCurveTo) */\n bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/closePath) */\n closePath(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/ellipse) */\n ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/lineTo) */\n lineTo(x: number, y: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/moveTo) */\n moveTo(x: number, y: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/quadraticCurveTo) */\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/rect) */\n rect(x: number, y: number, w: number, h: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/roundRect) */\n roundRect(x: number, y: number, w: number, h: number, radii?: number | DOMPointInit | (number | DOMPointInit)[]): void;\n}\n\ninterface CanvasPathDrawingStyles {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/lineCap) */\n lineCap: CanvasLineCap;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/lineDashOffset) */\n lineDashOffset: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/lineJoin) */\n lineJoin: CanvasLineJoin;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/lineWidth) */\n lineWidth: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/miterLimit) */\n miterLimit: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/getLineDash) */\n getLineDash(): number[];\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash) */\n setLineDash(segments: number[]): void;\n}\n\n/**\n * An opaque object describing a pattern, based on an image, a canvas, or a video, created by the CanvasRenderingContext2D.createPattern() method.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasPattern)\n */\ninterface CanvasPattern {\n /**\n * Sets the transformation matrix that will be used when rendering the pattern during a fill or stroke painting operation.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasPattern/setTransform)\n */\n setTransform(transform?: DOMMatrix2DInit): void;\n}\n\ndeclare var CanvasPattern: {\n prototype: CanvasPattern;\n new(): CanvasPattern;\n};\n\ninterface CanvasRect {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/clearRect) */\n clearRect(x: number, y: number, w: number, h: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/fillRect) */\n fillRect(x: number, y: number, w: number, h: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/strokeRect) */\n strokeRect(x: number, y: number, w: number, h: number): void;\n}\n\n/**\n * The CanvasRenderingContext2D interface, part of the Canvas API, provides the 2D rendering context for the drawing surface of a element. It is used for drawing shapes, text, images, and other objects.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D)\n */\ninterface CanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform, CanvasUserInterface {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/canvas) */\n readonly canvas: HTMLCanvasElement;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/getContextAttributes) */\n getContextAttributes(): CanvasRenderingContext2DSettings;\n}\n\ndeclare var CanvasRenderingContext2D: {\n prototype: CanvasRenderingContext2D;\n new(): CanvasRenderingContext2D;\n};\n\ninterface CanvasShadowStyles {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/shadowBlur) */\n shadowBlur: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/shadowColor) */\n shadowColor: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX) */\n shadowOffsetX: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY) */\n shadowOffsetY: number;\n}\n\ninterface CanvasState {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/reset) */\n reset(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/restore) */\n restore(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/save) */\n save(): void;\n}\n\ninterface CanvasText {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/fillText) */\n fillText(text: string, x: number, y: number, maxWidth?: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/measureText) */\n measureText(text: string): TextMetrics;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/strokeText) */\n strokeText(text: string, x: number, y: number, maxWidth?: number): void;\n}\n\ninterface CanvasTextDrawingStyles {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/direction) */\n direction: CanvasDirection;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/font) */\n font: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/fontKerning) */\n fontKerning: CanvasFontKerning;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/textAlign) */\n textAlign: CanvasTextAlign;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/textBaseline) */\n textBaseline: CanvasTextBaseline;\n}\n\ninterface CanvasTransform {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/getTransform) */\n getTransform(): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/resetTransform) */\n resetTransform(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/rotate) */\n rotate(angle: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/scale) */\n scale(x: number, y: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setTransform) */\n setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void;\n setTransform(transform?: DOMMatrix2DInit): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/transform) */\n transform(a: number, b: number, c: number, d: number, e: number, f: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/translate) */\n translate(x: number, y: number): void;\n}\n\ninterface CanvasUserInterface {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/drawFocusIfNeeded) */\n drawFocusIfNeeded(element: Element): void;\n drawFocusIfNeeded(path: Path2D, element: Element): void;\n}\n\n/**\n * The ChannelMergerNode interface, often used in conjunction with its opposite, ChannelSplitterNode, reunites different mono inputs into a single output. Each input is used to fill a channel of the output. This is useful for accessing each channels separately, e.g. for performing channel mixing where gain must be separately controlled on each channel.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ChannelMergerNode)\n */\ninterface ChannelMergerNode extends AudioNode {\n}\n\ndeclare var ChannelMergerNode: {\n prototype: ChannelMergerNode;\n new(context: BaseAudioContext, options?: ChannelMergerOptions): ChannelMergerNode;\n};\n\n/**\n * The ChannelSplitterNode interface, often used in conjunction with its opposite, ChannelMergerNode, separates the different channels of an audio source into a set of mono outputs. This is useful for accessing each channel separately, e.g. for performing channel mixing where gain must be separately controlled on each channel.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ChannelSplitterNode)\n */\ninterface ChannelSplitterNode extends AudioNode {\n}\n\ndeclare var ChannelSplitterNode: {\n prototype: ChannelSplitterNode;\n new(context: BaseAudioContext, options?: ChannelSplitterOptions): ChannelSplitterNode;\n};\n\n/**\n * The CharacterData abstract interface represents a Node object that contains characters. This is an abstract interface, meaning there aren\'t any object of type CharacterData: it is implemented by other interfaces, like Text, Comment, or ProcessingInstruction which aren\'t abstract.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData)\n */\ninterface CharacterData extends Node, ChildNode, NonDocumentTypeChildNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/data) */\n data: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/length) */\n readonly length: number;\n readonly ownerDocument: Document;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/appendData) */\n appendData(data: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/deleteData) */\n deleteData(offset: number, count: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/insertData) */\n insertData(offset: number, data: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/replaceData) */\n replaceData(offset: number, count: number, data: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/substringData) */\n substringData(offset: number, count: number): string;\n}\n\ndeclare var CharacterData: {\n prototype: CharacterData;\n new(): CharacterData;\n};\n\ninterface ChildNode extends Node {\n /**\n * Inserts nodes just after node, while replacing strings in nodes with equivalent Text nodes.\n *\n * Throws a "HierarchyRequestError" DOMException if the constraints of the node tree are violated.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/after)\n */\n after(...nodes: (Node | string)[]): void;\n /**\n * Inserts nodes just before node, while replacing strings in nodes with equivalent Text nodes.\n *\n * Throws a "HierarchyRequestError" DOMException if the constraints of the node tree are violated.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/before)\n */\n before(...nodes: (Node | string)[]): void;\n /**\n * Removes node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/remove)\n */\n remove(): void;\n /**\n * Replaces node with nodes, while replacing strings in nodes with equivalent Text nodes.\n *\n * Throws a "HierarchyRequestError" DOMException if the constraints of the node tree are violated.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CharacterData/replaceWith)\n */\n replaceWith(...nodes: (Node | string)[]): void;\n}\n\n/** @deprecated */\ninterface ClientRect extends DOMRect {\n}\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Clipboard)\n */\ninterface Clipboard extends EventTarget {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Clipboard/read) */\n read(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Clipboard/readText) */\n readText(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Clipboard/write) */\n write(data: ClipboardItems): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Clipboard/writeText) */\n writeText(data: string): Promise;\n}\n\ndeclare var Clipboard: {\n prototype: Clipboard;\n new(): Clipboard;\n};\n\n/**\n * Events providing information related to modification of the clipboard, that is cut, copy, and paste events.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardEvent)\n */\ninterface ClipboardEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardEvent/clipboardData) */\n readonly clipboardData: DataTransfer | null;\n}\n\ndeclare var ClipboardEvent: {\n prototype: ClipboardEvent;\n new(type: string, eventInitDict?: ClipboardEventInit): ClipboardEvent;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardItem)\n */\ninterface ClipboardItem {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardItem/types) */\n readonly types: ReadonlyArray;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ClipboardItem/getType) */\n getType(type: string): Promise;\n}\n\ndeclare var ClipboardItem: {\n prototype: ClipboardItem;\n new(items: Record>, options?: ClipboardItemOptions): ClipboardItem;\n};\n\n/**\n * A CloseEvent is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the WebSocket object\'s onclose attribute.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CloseEvent)\n */\ninterface CloseEvent extends Event {\n /**\n * Returns the WebSocket connection close code provided by the server.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CloseEvent/code)\n */\n readonly code: number;\n /**\n * Returns the WebSocket connection close reason provided by the server.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CloseEvent/reason)\n */\n readonly reason: string;\n /**\n * Returns true if the connection closed cleanly; false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CloseEvent/wasClean)\n */\n readonly wasClean: boolean;\n}\n\ndeclare var CloseEvent: {\n prototype: CloseEvent;\n new(type: string, eventInitDict?: CloseEventInit): CloseEvent;\n};\n\n/**\n * Textual notations within markup; although it is generally not visually shown, such comments are available to be read in the source view.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Comment)\n */\ninterface Comment extends CharacterData {\n}\n\ndeclare var Comment: {\n prototype: Comment;\n new(data?: string): Comment;\n};\n\n/**\n * The DOM CompositionEvent represents events that occur due to the user indirectly entering text.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompositionEvent)\n */\ninterface CompositionEvent extends UIEvent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompositionEvent/data) */\n readonly data: string;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompositionEvent/initCompositionEvent)\n */\n initCompositionEvent(typeArg: string, bubblesArg?: boolean, cancelableArg?: boolean, viewArg?: WindowProxy | null, dataArg?: string): void;\n}\n\ndeclare var CompositionEvent: {\n prototype: CompositionEvent;\n new(type: string, eventInitDict?: CompositionEventInit): CompositionEvent;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompressionStream) */\ninterface CompressionStream extends GenericTransformStream {\n}\n\ndeclare var CompressionStream: {\n prototype: CompressionStream;\n new(format: CompressionFormat): CompressionStream;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ConstantSourceNode) */\ninterface ConstantSourceNode extends AudioScheduledSourceNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ConstantSourceNode/offset) */\n readonly offset: AudioParam;\n addEventListener(type: K, listener: (this: ConstantSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: ConstantSourceNode, ev: AudioScheduledSourceNodeEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var ConstantSourceNode: {\n prototype: ConstantSourceNode;\n new(context: BaseAudioContext, options?: ConstantSourceOptions): ConstantSourceNode;\n};\n\n/**\n * An AudioNode that performs a Linear Convolution on a given AudioBuffer, often used to achieve a reverb effect. A ConvolverNode always has exactly one input and one output.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ConvolverNode)\n */\ninterface ConvolverNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ConvolverNode/buffer) */\n buffer: AudioBuffer | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ConvolverNode/normalize) */\n normalize: boolean;\n}\n\ndeclare var ConvolverNode: {\n prototype: ConvolverNode;\n new(context: BaseAudioContext, options?: ConvolverOptions): ConvolverNode;\n};\n\n/**\n * This Streams API interface provides\xa0a built-in byte length queuing strategy that can be used when constructing streams.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CountQueuingStrategy)\n */\ninterface CountQueuingStrategy extends QueuingStrategy {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CountQueuingStrategy/highWaterMark) */\n readonly highWaterMark: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CountQueuingStrategy/size) */\n readonly size: QueuingStrategySize;\n}\n\ndeclare var CountQueuingStrategy: {\n prototype: CountQueuingStrategy;\n new(init: QueuingStrategyInit): CountQueuingStrategy;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Credential)\n */\ninterface Credential {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Credential/id) */\n readonly id: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Credential/type) */\n readonly type: string;\n}\n\ndeclare var Credential: {\n prototype: Credential;\n new(): Credential;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CredentialsContainer)\n */\ninterface CredentialsContainer {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CredentialsContainer/create) */\n create(options?: CredentialCreationOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CredentialsContainer/get) */\n get(options?: CredentialRequestOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CredentialsContainer/preventSilentAccess) */\n preventSilentAccess(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CredentialsContainer/store) */\n store(credential: Credential): Promise;\n}\n\ndeclare var CredentialsContainer: {\n prototype: CredentialsContainer;\n new(): CredentialsContainer;\n};\n\n/**\n * Basic cryptography features available in the current context. It allows access to a cryptographically strong random number generator and to cryptographic primitives.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto)\n */\ninterface Crypto {\n /**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/subtle)\n */\n readonly subtle: SubtleCrypto;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/getRandomValues) */\n getRandomValues(array: T): T;\n /**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/randomUUID)\n */\n randomUUID(): `${string}-${string}-${string}-${string}-${string}`;\n}\n\ndeclare var Crypto: {\n prototype: Crypto;\n new(): Crypto;\n};\n\n/**\n * The CryptoKey dictionary of the Web Crypto API represents a cryptographic key.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey)\n */\ninterface CryptoKey {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/algorithm) */\n readonly algorithm: KeyAlgorithm;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/extractable) */\n readonly extractable: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/type) */\n readonly type: KeyType;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/usages) */\n readonly usages: KeyUsage[];\n}\n\ndeclare var CryptoKey: {\n prototype: CryptoKey;\n new(): CryptoKey;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomElementRegistry) */\ninterface CustomElementRegistry {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomElementRegistry/define) */\n define(name: string, constructor: CustomElementConstructor, options?: ElementDefinitionOptions): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomElementRegistry/get) */\n get(name: string): CustomElementConstructor | undefined;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomElementRegistry/upgrade) */\n upgrade(root: Node): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomElementRegistry/whenDefined) */\n whenDefined(name: string): Promise;\n}\n\ndeclare var CustomElementRegistry: {\n prototype: CustomElementRegistry;\n new(): CustomElementRegistry;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent) */\ninterface CustomEvent extends Event {\n /**\n * Returns any custom data event was created with. Typically used for synthetic events.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent/detail)\n */\n readonly detail: T;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent/initCustomEvent)\n */\n initCustomEvent(type: string, bubbles?: boolean, cancelable?: boolean, detail?: T): void;\n}\n\ndeclare var CustomEvent: {\n prototype: CustomEvent;\n new(type: string, eventInitDict?: CustomEventInit): CustomEvent;\n};\n\n/**\n * An abnormal event (called an exception) which occurs as a result of calling a method or accessing a property of a web API.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException)\n */\ninterface DOMException extends Error {\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/code)\n */\n readonly code: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/message) */\n readonly message: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/name) */\n readonly name: string;\n readonly INDEX_SIZE_ERR: 1;\n readonly DOMSTRING_SIZE_ERR: 2;\n readonly HIERARCHY_REQUEST_ERR: 3;\n readonly WRONG_DOCUMENT_ERR: 4;\n readonly INVALID_CHARACTER_ERR: 5;\n readonly NO_DATA_ALLOWED_ERR: 6;\n readonly NO_MODIFICATION_ALLOWED_ERR: 7;\n readonly NOT_FOUND_ERR: 8;\n readonly NOT_SUPPORTED_ERR: 9;\n readonly INUSE_ATTRIBUTE_ERR: 10;\n readonly INVALID_STATE_ERR: 11;\n readonly SYNTAX_ERR: 12;\n readonly INVALID_MODIFICATION_ERR: 13;\n readonly NAMESPACE_ERR: 14;\n readonly INVALID_ACCESS_ERR: 15;\n readonly VALIDATION_ERR: 16;\n readonly TYPE_MISMATCH_ERR: 17;\n readonly SECURITY_ERR: 18;\n readonly NETWORK_ERR: 19;\n readonly ABORT_ERR: 20;\n readonly URL_MISMATCH_ERR: 21;\n readonly QUOTA_EXCEEDED_ERR: 22;\n readonly TIMEOUT_ERR: 23;\n readonly INVALID_NODE_TYPE_ERR: 24;\n readonly DATA_CLONE_ERR: 25;\n}\n\ndeclare var DOMException: {\n prototype: DOMException;\n new(message?: string, name?: string): DOMException;\n readonly INDEX_SIZE_ERR: 1;\n readonly DOMSTRING_SIZE_ERR: 2;\n readonly HIERARCHY_REQUEST_ERR: 3;\n readonly WRONG_DOCUMENT_ERR: 4;\n readonly INVALID_CHARACTER_ERR: 5;\n readonly NO_DATA_ALLOWED_ERR: 6;\n readonly NO_MODIFICATION_ALLOWED_ERR: 7;\n readonly NOT_FOUND_ERR: 8;\n readonly NOT_SUPPORTED_ERR: 9;\n readonly INUSE_ATTRIBUTE_ERR: 10;\n readonly INVALID_STATE_ERR: 11;\n readonly SYNTAX_ERR: 12;\n readonly INVALID_MODIFICATION_ERR: 13;\n readonly NAMESPACE_ERR: 14;\n readonly INVALID_ACCESS_ERR: 15;\n readonly VALIDATION_ERR: 16;\n readonly TYPE_MISMATCH_ERR: 17;\n readonly SECURITY_ERR: 18;\n readonly NETWORK_ERR: 19;\n readonly ABORT_ERR: 20;\n readonly URL_MISMATCH_ERR: 21;\n readonly QUOTA_EXCEEDED_ERR: 22;\n readonly TIMEOUT_ERR: 23;\n readonly INVALID_NODE_TYPE_ERR: 24;\n readonly DATA_CLONE_ERR: 25;\n};\n\n/**\n * An object providing methods which are not dependent on any particular document. Such an object is returned by the Document.implementation property.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMImplementation)\n */\ninterface DOMImplementation {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMImplementation/createDocument) */\n createDocument(namespace: string | null, qualifiedName: string | null, doctype?: DocumentType | null): XMLDocument;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMImplementation/createDocumentType) */\n createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMImplementation/createHTMLDocument) */\n createHTMLDocument(title?: string): Document;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMImplementation/hasFeature)\n */\n hasFeature(...args: any[]): true;\n}\n\ndeclare var DOMImplementation: {\n prototype: DOMImplementation;\n new(): DOMImplementation;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrix) */\ninterface DOMMatrix extends DOMMatrixReadOnly {\n a: number;\n b: number;\n c: number;\n d: number;\n e: number;\n f: number;\n m11: number;\n m12: number;\n m13: number;\n m14: number;\n m21: number;\n m22: number;\n m23: number;\n m24: number;\n m31: number;\n m32: number;\n m33: number;\n m34: number;\n m41: number;\n m42: number;\n m43: number;\n m44: number;\n invertSelf(): DOMMatrix;\n multiplySelf(other?: DOMMatrixInit): DOMMatrix;\n preMultiplySelf(other?: DOMMatrixInit): DOMMatrix;\n rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;\n rotateFromVectorSelf(x?: number, y?: number): DOMMatrix;\n rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrix/scale3dSelf) */\n scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrix/scaleSelf) */\n scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n setMatrixValue(transformList: string): DOMMatrix;\n skewXSelf(sx?: number): DOMMatrix;\n skewYSelf(sy?: number): DOMMatrix;\n translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix;\n}\n\ndeclare var DOMMatrix: {\n prototype: DOMMatrix;\n new(init?: string | number[]): DOMMatrix;\n fromFloat32Array(array32: Float32Array): DOMMatrix;\n fromFloat64Array(array64: Float64Array): DOMMatrix;\n fromMatrix(other?: DOMMatrixInit): DOMMatrix;\n};\n\ntype SVGMatrix = DOMMatrix;\ndeclare var SVGMatrix: typeof DOMMatrix;\n\ntype WebKitCSSMatrix = DOMMatrix;\ndeclare var WebKitCSSMatrix: typeof DOMMatrix;\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly) */\ninterface DOMMatrixReadOnly {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/a) */\n readonly a: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/b) */\n readonly b: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/c) */\n readonly c: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/d) */\n readonly d: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/e) */\n readonly e: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/f) */\n readonly f: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/is2D) */\n readonly is2D: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/isIdentity) */\n readonly isIdentity: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m11) */\n readonly m11: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m12) */\n readonly m12: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m13) */\n readonly m13: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m14) */\n readonly m14: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m21) */\n readonly m21: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m22) */\n readonly m22: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m23) */\n readonly m23: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m24) */\n readonly m24: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m31) */\n readonly m31: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m32) */\n readonly m32: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m33) */\n readonly m33: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m34) */\n readonly m34: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m41) */\n readonly m41: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m42) */\n readonly m42: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m43) */\n readonly m43: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/m44) */\n readonly m44: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/flipX) */\n flipX(): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/flipY) */\n flipY(): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/inverse) */\n inverse(): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/multiply) */\n multiply(other?: DOMMatrixInit): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotate) */\n rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotateAxisAngle) */\n rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/rotateFromVector) */\n rotateFromVector(x?: number, y?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scale) */\n scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scale3d) */\n scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/scaleNonUniform)\n */\n scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/skewX) */\n skewX(sx?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/skewY) */\n skewY(sy?: number): DOMMatrix;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/toFloat32Array) */\n toFloat32Array(): Float32Array;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/toFloat64Array) */\n toFloat64Array(): Float64Array;\n toJSON(): any;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/transformPoint) */\n transformPoint(point?: DOMPointInit): DOMPoint;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMMatrixReadOnly/translate) */\n translate(tx?: number, ty?: number, tz?: number): DOMMatrix;\n toString(): string;\n}\n\ndeclare var DOMMatrixReadOnly: {\n prototype: DOMMatrixReadOnly;\n new(init?: string | number[]): DOMMatrixReadOnly;\n fromFloat32Array(array32: Float32Array): DOMMatrixReadOnly;\n fromFloat64Array(array64: Float64Array): DOMMatrixReadOnly;\n fromMatrix(other?: DOMMatrixInit): DOMMatrixReadOnly;\n};\n\n/**\n * Provides the ability to parse XML or HTML source code from a string into a DOM Document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMParser)\n */\ninterface DOMParser {\n /**\n * Parses string using either the HTML or XML parser, according to type, and returns the resulting Document. type can be "text/html" (which will invoke the HTML parser), or any of "text/xml", "application/xml", "application/xhtml+xml", or "image/svg+xml" (which will invoke the XML parser).\n *\n * For the XML parser, if string cannot be parsed, then the returned Document will contain elements describing the resulting error.\n *\n * Note that script elements are not evaluated during parsing, and the resulting document\'s encoding will always be UTF-8.\n *\n * Values other than the above for type will cause a TypeError exception to be thrown.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMParser/parseFromString)\n */\n parseFromString(string: string, type: DOMParserSupportedType): Document;\n}\n\ndeclare var DOMParser: {\n prototype: DOMParser;\n new(): DOMParser;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPoint) */\ninterface DOMPoint extends DOMPointReadOnly {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPoint/w) */\n w: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPoint/x) */\n x: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPoint/y) */\n y: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPoint/z) */\n z: number;\n}\n\ndeclare var DOMPoint: {\n prototype: DOMPoint;\n new(x?: number, y?: number, z?: number, w?: number): DOMPoint;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPoint/fromPoint_static) */\n fromPoint(other?: DOMPointInit): DOMPoint;\n};\n\ntype SVGPoint = DOMPoint;\ndeclare var SVGPoint: typeof DOMPoint;\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly) */\ninterface DOMPointReadOnly {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/w) */\n readonly w: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/x) */\n readonly x: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/y) */\n readonly y: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/z) */\n readonly z: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/matrixTransform) */\n matrixTransform(matrix?: DOMMatrixInit): DOMPoint;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/toJSON) */\n toJSON(): any;\n}\n\ndeclare var DOMPointReadOnly: {\n prototype: DOMPointReadOnly;\n new(x?: number, y?: number, z?: number, w?: number): DOMPointReadOnly;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMPointReadOnly/fromPoint_static) */\n fromPoint(other?: DOMPointInit): DOMPointReadOnly;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad) */\ninterface DOMQuad {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p1) */\n readonly p1: DOMPoint;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p2) */\n readonly p2: DOMPoint;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p3) */\n readonly p3: DOMPoint;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/p4) */\n readonly p4: DOMPoint;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMQuad/getBounds) */\n getBounds(): DOMRect;\n toJSON(): any;\n}\n\ndeclare var DOMQuad: {\n prototype: DOMQuad;\n new(p1?: DOMPointInit, p2?: DOMPointInit, p3?: DOMPointInit, p4?: DOMPointInit): DOMQuad;\n fromQuad(other?: DOMQuadInit): DOMQuad;\n fromRect(other?: DOMRectInit): DOMQuad;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRect) */\ninterface DOMRect extends DOMRectReadOnly {\n height: number;\n width: number;\n x: number;\n y: number;\n}\n\ndeclare var DOMRect: {\n prototype: DOMRect;\n new(x?: number, y?: number, width?: number, height?: number): DOMRect;\n fromRect(other?: DOMRectInit): DOMRect;\n};\n\ntype SVGRect = DOMRect;\ndeclare var SVGRect: typeof DOMRect;\n\ninterface DOMRectList {\n readonly length: number;\n item(index: number): DOMRect | null;\n [index: number]: DOMRect;\n}\n\ndeclare var DOMRectList: {\n prototype: DOMRectList;\n new(): DOMRectList;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly) */\ninterface DOMRectReadOnly {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/bottom) */\n readonly bottom: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/height) */\n readonly height: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/left) */\n readonly left: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/right) */\n readonly right: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/top) */\n readonly top: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/width) */\n readonly width: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/x) */\n readonly x: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/y) */\n readonly y: number;\n toJSON(): any;\n}\n\ndeclare var DOMRectReadOnly: {\n prototype: DOMRectReadOnly;\n new(x?: number, y?: number, width?: number, height?: number): DOMRectReadOnly;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMRectReadOnly/fromRect_static) */\n fromRect(other?: DOMRectInit): DOMRectReadOnly;\n};\n\n/**\n * A type returned by some APIs which contains a list of DOMString (strings).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMStringList)\n */\ninterface DOMStringList {\n /**\n * Returns the number of strings in strings.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMStringList/length)\n */\n readonly length: number;\n /**\n * Returns true if strings contains string, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMStringList/contains)\n */\n contains(string: string): boolean;\n /**\n * Returns the string with index index from strings.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMStringList/item)\n */\n item(index: number): string | null;\n [index: number]: string;\n}\n\ndeclare var DOMStringList: {\n prototype: DOMStringList;\n new(): DOMStringList;\n};\n\n/**\n * Used by the dataset\xa0HTML\xa0attribute to represent data for custom attributes added to elements.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMStringMap)\n */\ninterface DOMStringMap {\n [name: string]: string | undefined;\n}\n\ndeclare var DOMStringMap: {\n prototype: DOMStringMap;\n new(): DOMStringMap;\n};\n\n/**\n * A set of space-separated tokens. Such a set is returned by Element.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList, HTMLAreaElement.relList, HTMLIframeElement.sandbox, or HTMLOutputElement.htmlFor. It is indexed beginning with 0 as with JavaScript Array objects. DOMTokenList is always case-sensitive.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList)\n */\ninterface DOMTokenList {\n /**\n * Returns the number of tokens.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/length)\n */\n readonly length: number;\n /**\n * Returns the associated set as string.\n *\n * Can be set, to change the associated attribute.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/value)\n */\n value: string;\n toString(): string;\n /**\n * Adds all arguments passed, except those already present.\n *\n * Throws a "SyntaxError" DOMException if one of the arguments is the empty string.\n *\n * Throws an "InvalidCharacterError" DOMException if one of the arguments contains any ASCII whitespace.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/add)\n */\n add(...tokens: string[]): void;\n /**\n * Returns true if token is present, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/contains)\n */\n contains(token: string): boolean;\n /**\n * Returns the token with index index.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/item)\n */\n item(index: number): string | null;\n /**\n * Removes arguments passed, if they are present.\n *\n * Throws a "SyntaxError" DOMException if one of the arguments is the empty string.\n *\n * Throws an "InvalidCharacterError" DOMException if one of the arguments contains any ASCII whitespace.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/remove)\n */\n remove(...tokens: string[]): void;\n /**\n * Replaces token with newToken.\n *\n * Returns true if token was replaced with newToken, and false otherwise.\n *\n * Throws a "SyntaxError" DOMException if one of the arguments is the empty string.\n *\n * Throws an "InvalidCharacterError" DOMException if one of the arguments contains any ASCII whitespace.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/replace)\n */\n replace(token: string, newToken: string): boolean;\n /**\n * Returns true if token is in the associated attribute\'s supported tokens. Returns false otherwise.\n *\n * Throws a TypeError if the associated attribute has no supported tokens defined.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/supports)\n */\n supports(token: string): boolean;\n /**\n * If force is not given, "toggles" token, removing it if it\'s present and adding it if it\'s not present. If force is true, adds token (same as add()). If force is false, removes token (same as remove()).\n *\n * Returns true if token is now present, and false otherwise.\n *\n * Throws a "SyntaxError" DOMException if token is empty.\n *\n * Throws an "InvalidCharacterError" DOMException if token contains any spaces.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMTokenList/toggle)\n */\n toggle(token: string, force?: boolean): boolean;\n forEach(callbackfn: (value: string, key: number, parent: DOMTokenList) => void, thisArg?: any): void;\n [index: number]: string;\n}\n\ndeclare var DOMTokenList: {\n prototype: DOMTokenList;\n new(): DOMTokenList;\n};\n\n/**\n * Used to hold the data that is being dragged during a drag and drop operation. It may hold one or more data items, each of one or more data types. For more information about drag and drop, see HTML Drag and Drop API.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer)\n */\ninterface DataTransfer {\n /**\n * Returns the kind of operation that is currently selected. If the kind of operation isn\'t one of those that is allowed by the effectAllowed attribute, then the operation will fail.\n *\n * Can be set, to change the selected operation.\n *\n * The possible values are "none", "copy", "link", and "move".\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/dropEffect)\n */\n dropEffect: "none" | "copy" | "link" | "move";\n /**\n * Returns the kinds of operations that are to be allowed.\n *\n * Can be set (during the dragstart event), to change the allowed operations.\n *\n * The possible values are "none", "copy", "copyLink", "copyMove", "link", "linkMove", "move", "all", and "uninitialized",\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/effectAllowed)\n */\n effectAllowed: "none" | "copy" | "copyLink" | "copyMove" | "link" | "linkMove" | "move" | "all" | "uninitialized";\n /**\n * Returns a FileList of the files being dragged, if any.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/files)\n */\n readonly files: FileList;\n /**\n * Returns a DataTransferItemList object, with the drag data.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/items)\n */\n readonly items: DataTransferItemList;\n /**\n * Returns a frozen array listing the formats that were set in the dragstart event. In addition, if any files are being dragged, then one of the types will be the string "Files".\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/types)\n */\n readonly types: ReadonlyArray;\n /**\n * Removes the data of the specified formats. Removes all data if the argument is omitted.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/clearData)\n */\n clearData(format?: string): void;\n /**\n * Returns the specified data. If there is no such data, returns the empty string.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/getData)\n */\n getData(format: string): string;\n /**\n * Adds the specified data.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/setData)\n */\n setData(format: string, data: string): void;\n /**\n * Uses the given element to update the drag feedback, replacing any previously specified feedback.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransfer/setDragImage)\n */\n setDragImage(image: Element, x: number, y: number): void;\n}\n\ndeclare var DataTransfer: {\n prototype: DataTransfer;\n new(): DataTransfer;\n};\n\n/**\n * One drag data item. During a drag operation, each drag event has a dataTransfer property which contains a list of drag data items. Each item in the list is a DataTransferItem object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItem)\n */\ninterface DataTransferItem {\n /**\n * Returns the drag data item kind, one of: "string", "file".\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItem/kind)\n */\n readonly kind: string;\n /**\n * Returns the drag data item type string.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItem/type)\n */\n readonly type: string;\n /**\n * Returns a File object, if the drag data item kind is File.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItem/getAsFile)\n */\n getAsFile(): File | null;\n /**\n * Invokes the callback with the string data as the argument, if the drag data item kind is text.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItem/getAsString)\n */\n getAsString(callback: FunctionStringCallback | null): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItem/webkitGetAsEntry) */\n webkitGetAsEntry(): FileSystemEntry | null;\n}\n\ndeclare var DataTransferItem: {\n prototype: DataTransferItem;\n new(): DataTransferItem;\n};\n\n/**\n * A list of DataTransferItem objects representing items being dragged. During a drag operation, each DragEvent has a dataTransfer property and that property is a DataTransferItemList.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItemList)\n */\ninterface DataTransferItemList {\n /**\n * Returns the number of items in the drag data store.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItemList/length)\n */\n readonly length: number;\n /**\n * Adds a new entry for the given data to the drag data store. If the data is plain text then a type string has to be provided also.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItemList/add)\n */\n add(data: string, type: string): DataTransferItem | null;\n add(data: File): DataTransferItem | null;\n /**\n * Removes all the entries in the drag data store.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItemList/clear)\n */\n clear(): void;\n /**\n * Removes the indexth entry in the drag data store.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DataTransferItemList/remove)\n */\n remove(index: number): void;\n [index: number]: DataTransferItem;\n}\n\ndeclare var DataTransferItemList: {\n prototype: DataTransferItemList;\n new(): DataTransferItemList;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DecompressionStream) */\ninterface DecompressionStream extends GenericTransformStream {\n}\n\ndeclare var DecompressionStream: {\n prototype: DecompressionStream;\n new(format: CompressionFormat): DecompressionStream;\n};\n\n/**\n * A delay-line; an AudioNode audio-processing module that causes a delay between the arrival of an input data and its propagation to the output.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DelayNode)\n */\ninterface DelayNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DelayNode/delayTime) */\n readonly delayTime: AudioParam;\n}\n\ndeclare var DelayNode: {\n prototype: DelayNode;\n new(context: BaseAudioContext, options?: DelayOptions): DelayNode;\n};\n\n/**\n * The DeviceMotionEvent provides web developers with information about the speed of changes for the device\'s position and orientation.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEvent)\n */\ninterface DeviceMotionEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEvent/acceleration) */\n readonly acceleration: DeviceMotionEventAcceleration | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEvent/accelerationIncludingGravity) */\n readonly accelerationIncludingGravity: DeviceMotionEventAcceleration | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEvent/interval) */\n readonly interval: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEvent/rotationRate) */\n readonly rotationRate: DeviceMotionEventRotationRate | null;\n}\n\ndeclare var DeviceMotionEvent: {\n prototype: DeviceMotionEvent;\n new(type: string, eventInitDict?: DeviceMotionEventInit): DeviceMotionEvent;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEventAcceleration)\n */\ninterface DeviceMotionEventAcceleration {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEventAcceleration/x) */\n readonly x: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEventAcceleration/y) */\n readonly y: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEventAcceleration/z) */\n readonly z: number | null;\n}\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEventRotationRate)\n */\ninterface DeviceMotionEventRotationRate {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEventRotationRate/alpha) */\n readonly alpha: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEventRotationRate/beta) */\n readonly beta: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceMotionEventRotationRate/gamma) */\n readonly gamma: number | null;\n}\n\n/**\n * The DeviceOrientationEvent provides web developers with information from the physical orientation of the device running the web page.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceOrientationEvent)\n */\ninterface DeviceOrientationEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceOrientationEvent/absolute) */\n readonly absolute: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceOrientationEvent/alpha) */\n readonly alpha: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceOrientationEvent/beta) */\n readonly beta: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DeviceOrientationEvent/gamma) */\n readonly gamma: number | null;\n}\n\ndeclare var DeviceOrientationEvent: {\n prototype: DeviceOrientationEvent;\n new(type: string, eventInitDict?: DeviceOrientationEventInit): DeviceOrientationEvent;\n};\n\ninterface DocumentEventMap extends GlobalEventHandlersEventMap {\n "DOMContentLoaded": Event;\n "fullscreenchange": Event;\n "fullscreenerror": Event;\n "pointerlockchange": Event;\n "pointerlockerror": Event;\n "readystatechange": Event;\n "visibilitychange": Event;\n}\n\n/**\n * Any web page loaded in the browser and serves as an entry point into the web page\'s content, which is the DOM tree.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document)\n */\ninterface Document extends Node, DocumentOrShadowRoot, FontFaceSource, GlobalEventHandlers, NonElementParentNode, ParentNode, XPathEvaluatorBase {\n /**\n * Sets or gets the URL for the current document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/URL)\n */\n readonly URL: string;\n /**\n * Sets or gets the color of all active links in the document.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/alinkColor)\n */\n alinkColor: string;\n /**\n * Returns a reference to the collection of elements contained by the object.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/all)\n */\n readonly all: HTMLAllCollection;\n /**\n * Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/anchors)\n */\n readonly anchors: HTMLCollectionOf;\n /**\n * Retrieves a collection of all applet objects in the document.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/applets)\n */\n readonly applets: HTMLCollection;\n /**\n * Deprecated. Sets or retrieves a value that indicates the background color behind the object.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/bgColor)\n */\n bgColor: string;\n /**\n * Specifies the beginning and end of the document body.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/body)\n */\n body: HTMLElement;\n /**\n * Returns document\'s encoding.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/characterSet)\n */\n readonly characterSet: string;\n /**\n * Gets or sets the character set used to encode the object.\n * @deprecated This is a legacy alias of `characterSet`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/characterSet)\n */\n readonly charset: string;\n /**\n * Gets a value that indicates whether standards-compliant mode is switched on for the object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/compatMode)\n */\n readonly compatMode: string;\n /**\n * Returns document\'s content type.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/contentType)\n */\n readonly contentType: string;\n /**\n * Returns the HTTP cookies that apply to the Document. If there are no cookies or cookies can\'t be applied to this resource, the empty string will be returned.\n *\n * Can be set, to add a new cookie to the element\'s set of HTTP cookies.\n *\n * If the contents are sandboxed into a unique origin (e.g. in an iframe with the sandbox attribute), a "SecurityError" DOMException will be thrown on getting and setting.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/cookie)\n */\n cookie: string;\n /**\n * Returns the script element, or the SVG script element, that is currently executing, as long as the element represents a classic script. In the case of reentrant script execution, returns the one that most recently started executing amongst those that have not yet finished executing.\n *\n * Returns null if the Document is not currently executing a script or SVG script element (e.g., because the running script is an event handler, or a timeout), or if the currently executing script or SVG script element represents a module script.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/currentScript)\n */\n readonly currentScript: HTMLOrSVGScriptElement | null;\n /**\n * Returns the Window object of the active document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/defaultView)\n */\n readonly defaultView: (WindowProxy & typeof globalThis) | null;\n /**\n * Sets or gets a value that indicates whether the document can be edited.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/designMode)\n */\n designMode: string;\n /**\n * Sets or retrieves a value that indicates the reading order of the object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/dir)\n */\n dir: string;\n /**\n * Gets an object representing the document type declaration associated with the current document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/doctype)\n */\n readonly doctype: DocumentType | null;\n /**\n * Gets a reference to the root node of the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/documentElement)\n */\n readonly documentElement: HTMLElement;\n /**\n * Returns document\'s URL.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/documentURI)\n */\n readonly documentURI: string;\n /**\n * Sets or gets the security domain of the document.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/domain)\n */\n domain: string;\n /**\n * Retrieves a collection of all embed objects in the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/embeds)\n */\n readonly embeds: HTMLCollectionOf;\n /**\n * Sets or gets the foreground (text) color of the document.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fgColor)\n */\n fgColor: string;\n /**\n * Retrieves a collection, in source order, of all form objects in the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/forms)\n */\n readonly forms: HTMLCollectionOf;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fullscreen)\n */\n readonly fullscreen: boolean;\n /**\n * Returns true if document has the ability to display elements fullscreen and fullscreen is supported, or false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fullscreenEnabled)\n */\n readonly fullscreenEnabled: boolean;\n /**\n * Returns the head element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/head)\n */\n readonly head: HTMLHeadElement;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/hidden) */\n readonly hidden: boolean;\n /**\n * Retrieves a collection, in source order, of img objects in the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/images)\n */\n readonly images: HTMLCollectionOf;\n /**\n * Gets the implementation object of the current document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/implementation)\n */\n readonly implementation: DOMImplementation;\n /**\n * Returns the character encoding used to create the webpage that is loaded into the document object.\n * @deprecated This is a legacy alias of `characterSet`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/characterSet)\n */\n readonly inputEncoding: string;\n /**\n * Gets the date that the page was last modified, if the page supplies one.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/lastModified)\n */\n readonly lastModified: string;\n /**\n * Sets or gets the color of the document links.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/linkColor)\n */\n linkColor: string;\n /**\n * Retrieves a collection of all a objects that specify the href property and all area objects in the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/links)\n */\n readonly links: HTMLCollectionOf;\n /**\n * Contains information about the current URL.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/location)\n */\n get location(): Location;\n set location(href: string | Location);\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fullscreenchange_event) */\n onfullscreenchange: ((this: Document, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fullscreenerror_event) */\n onfullscreenerror: ((this: Document, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/pointerlockchange_event) */\n onpointerlockchange: ((this: Document, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/pointerlockerror_event) */\n onpointerlockerror: ((this: Document, ev: Event) => any) | null;\n /**\n * Fires when the state of the object has changed.\n * @param ev The event\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/readystatechange_event)\n */\n onreadystatechange: ((this: Document, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/visibilitychange_event) */\n onvisibilitychange: ((this: Document, ev: Event) => any) | null;\n readonly ownerDocument: null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/pictureInPictureEnabled) */\n readonly pictureInPictureEnabled: boolean;\n /**\n * Return an HTMLCollection of the embed elements in the Document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/plugins)\n */\n readonly plugins: HTMLCollectionOf;\n /**\n * Retrieves a value that indicates the current state of the object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/readyState)\n */\n readonly readyState: DocumentReadyState;\n /**\n * Gets the URL of the location that referred the user to the current page.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/referrer)\n */\n readonly referrer: string;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/rootElement)\n */\n readonly rootElement: SVGSVGElement | null;\n /**\n * Retrieves a collection of all script objects in the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/scripts)\n */\n readonly scripts: HTMLCollectionOf;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/scrollingElement) */\n readonly scrollingElement: Element | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/timeline) */\n readonly timeline: DocumentTimeline;\n /**\n * Contains the title of the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/title)\n */\n title: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/visibilityState) */\n readonly visibilityState: DocumentVisibilityState;\n /**\n * Sets or gets the color of the links that the user has visited.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/vlinkColor)\n */\n vlinkColor: string;\n /**\n * Moves node from another document and returns it.\n *\n * If node is a document, throws a "NotSupportedError" DOMException or, if node is a shadow root, throws a "HierarchyRequestError" DOMException.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/adoptNode)\n */\n adoptNode(node: T): T;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/captureEvents)\n */\n captureEvents(): void;\n /** @deprecated */\n caretRangeFromPoint(x: number, y: number): Range | null;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/clear)\n */\n clear(): void;\n /**\n * Closes an output stream and forces the sent data to display.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/close)\n */\n close(): void;\n /**\n * Creates an attribute object with a specified name.\n * @param name String that sets the attribute object\'s name.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createAttribute)\n */\n createAttribute(localName: string): Attr;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createAttributeNS) */\n createAttributeNS(namespace: string | null, qualifiedName: string): Attr;\n /**\n * Returns a CDATASection node whose data is data.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createCDATASection)\n */\n createCDATASection(data: string): CDATASection;\n /**\n * Creates a comment object with the specified data.\n * @param data Sets the comment object\'s data.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createComment)\n */\n createComment(data: string): Comment;\n /**\n * Creates a new document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createDocumentFragment)\n */\n createDocumentFragment(): DocumentFragment;\n /**\n * Creates an instance of the element for the specified tag.\n * @param tagName The name of an element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createElement)\n */\n createElement(tagName: K, options?: ElementCreationOptions): HTMLElementTagNameMap[K];\n /** @deprecated */\n createElement(tagName: K, options?: ElementCreationOptions): HTMLElementDeprecatedTagNameMap[K];\n createElement(tagName: string, options?: ElementCreationOptions): HTMLElement;\n /**\n * Returns an element with namespace namespace. Its namespace prefix will be everything before ":" (U+003E) in qualifiedName or null. Its local name will be everything after ":" (U+003E) in qualifiedName or qualifiedName.\n *\n * If localName does not match the Name production an "InvalidCharacterError" DOMException will be thrown.\n *\n * If one of the following conditions is true a "NamespaceError" DOMException will be thrown:\n *\n * localName does not match the QName production.\n * Namespace prefix is not null and namespace is the empty string.\n * Namespace prefix is "xml" and namespace is not the XML namespace.\n * qualifiedName or namespace prefix is "xmlns" and namespace is not the XMLNS namespace.\n * namespace is the XMLNS namespace and neither qualifiedName nor namespace prefix is "xmlns".\n *\n * When supplied, options\'s is can be used to create a customized built-in element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createElementNS)\n */\n createElementNS(namespaceURI: "http://www.w3.org/1999/xhtml", qualifiedName: string): HTMLElement;\n createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: K): SVGElementTagNameMap[K];\n createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: string): SVGElement;\n createElementNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", qualifiedName: K): MathMLElementTagNameMap[K];\n createElementNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", qualifiedName: string): MathMLElement;\n createElementNS(namespaceURI: string | null, qualifiedName: string, options?: ElementCreationOptions): Element;\n createElementNS(namespace: string | null, qualifiedName: string, options?: string | ElementCreationOptions): Element;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createEvent) */\n createEvent(eventInterface: "AnimationEvent"): AnimationEvent;\n createEvent(eventInterface: "AnimationPlaybackEvent"): AnimationPlaybackEvent;\n createEvent(eventInterface: "AudioProcessingEvent"): AudioProcessingEvent;\n createEvent(eventInterface: "BeforeUnloadEvent"): BeforeUnloadEvent;\n createEvent(eventInterface: "BlobEvent"): BlobEvent;\n createEvent(eventInterface: "ClipboardEvent"): ClipboardEvent;\n createEvent(eventInterface: "CloseEvent"): CloseEvent;\n createEvent(eventInterface: "CompositionEvent"): CompositionEvent;\n createEvent(eventInterface: "CustomEvent"): CustomEvent;\n createEvent(eventInterface: "DeviceMotionEvent"): DeviceMotionEvent;\n createEvent(eventInterface: "DeviceOrientationEvent"): DeviceOrientationEvent;\n createEvent(eventInterface: "DragEvent"): DragEvent;\n createEvent(eventInterface: "ErrorEvent"): ErrorEvent;\n createEvent(eventInterface: "Event"): Event;\n createEvent(eventInterface: "Events"): Event;\n createEvent(eventInterface: "FocusEvent"): FocusEvent;\n createEvent(eventInterface: "FontFaceSetLoadEvent"): FontFaceSetLoadEvent;\n createEvent(eventInterface: "FormDataEvent"): FormDataEvent;\n createEvent(eventInterface: "GamepadEvent"): GamepadEvent;\n createEvent(eventInterface: "HashChangeEvent"): HashChangeEvent;\n createEvent(eventInterface: "IDBVersionChangeEvent"): IDBVersionChangeEvent;\n createEvent(eventInterface: "InputEvent"): InputEvent;\n createEvent(eventInterface: "KeyboardEvent"): KeyboardEvent;\n createEvent(eventInterface: "MIDIConnectionEvent"): MIDIConnectionEvent;\n createEvent(eventInterface: "MIDIMessageEvent"): MIDIMessageEvent;\n createEvent(eventInterface: "MediaEncryptedEvent"): MediaEncryptedEvent;\n createEvent(eventInterface: "MediaKeyMessageEvent"): MediaKeyMessageEvent;\n createEvent(eventInterface: "MediaQueryListEvent"): MediaQueryListEvent;\n createEvent(eventInterface: "MediaStreamTrackEvent"): MediaStreamTrackEvent;\n createEvent(eventInterface: "MessageEvent"): MessageEvent;\n createEvent(eventInterface: "MouseEvent"): MouseEvent;\n createEvent(eventInterface: "MouseEvents"): MouseEvent;\n createEvent(eventInterface: "MutationEvent"): MutationEvent;\n createEvent(eventInterface: "MutationEvents"): MutationEvent;\n createEvent(eventInterface: "OfflineAudioCompletionEvent"): OfflineAudioCompletionEvent;\n createEvent(eventInterface: "PageTransitionEvent"): PageTransitionEvent;\n createEvent(eventInterface: "PaymentMethodChangeEvent"): PaymentMethodChangeEvent;\n createEvent(eventInterface: "PaymentRequestUpdateEvent"): PaymentRequestUpdateEvent;\n createEvent(eventInterface: "PictureInPictureEvent"): PictureInPictureEvent;\n createEvent(eventInterface: "PointerEvent"): PointerEvent;\n createEvent(eventInterface: "PopStateEvent"): PopStateEvent;\n createEvent(eventInterface: "ProgressEvent"): ProgressEvent;\n createEvent(eventInterface: "PromiseRejectionEvent"): PromiseRejectionEvent;\n createEvent(eventInterface: "RTCDTMFToneChangeEvent"): RTCDTMFToneChangeEvent;\n createEvent(eventInterface: "RTCDataChannelEvent"): RTCDataChannelEvent;\n createEvent(eventInterface: "RTCErrorEvent"): RTCErrorEvent;\n createEvent(eventInterface: "RTCPeerConnectionIceErrorEvent"): RTCPeerConnectionIceErrorEvent;\n createEvent(eventInterface: "RTCPeerConnectionIceEvent"): RTCPeerConnectionIceEvent;\n createEvent(eventInterface: "RTCTrackEvent"): RTCTrackEvent;\n createEvent(eventInterface: "SecurityPolicyViolationEvent"): SecurityPolicyViolationEvent;\n createEvent(eventInterface: "SpeechSynthesisErrorEvent"): SpeechSynthesisErrorEvent;\n createEvent(eventInterface: "SpeechSynthesisEvent"): SpeechSynthesisEvent;\n createEvent(eventInterface: "StorageEvent"): StorageEvent;\n createEvent(eventInterface: "SubmitEvent"): SubmitEvent;\n createEvent(eventInterface: "ToggleEvent"): ToggleEvent;\n createEvent(eventInterface: "TouchEvent"): TouchEvent;\n createEvent(eventInterface: "TrackEvent"): TrackEvent;\n createEvent(eventInterface: "TransitionEvent"): TransitionEvent;\n createEvent(eventInterface: "UIEvent"): UIEvent;\n createEvent(eventInterface: "UIEvents"): UIEvent;\n createEvent(eventInterface: "WebGLContextEvent"): WebGLContextEvent;\n createEvent(eventInterface: "WheelEvent"): WheelEvent;\n createEvent(eventInterface: string): Event;\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n * @param root The root element or node to start traversing on.\n * @param whatToShow The type of nodes or elements to appear in the node list\n * @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createNodeIterator)\n */\n createNodeIterator(root: Node, whatToShow?: number, filter?: NodeFilter | null): NodeIterator;\n /**\n * Returns a ProcessingInstruction node whose target is target and data is data. If target does not match the Name production an "InvalidCharacterError" DOMException will be thrown. If data contains "?>" an "InvalidCharacterError" DOMException will be thrown.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createProcessingInstruction)\n */\n createProcessingInstruction(target: string, data: string): ProcessingInstruction;\n /**\n * Returns an empty range object that has both of its boundary points positioned at the beginning of the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createRange)\n */\n createRange(): Range;\n /**\n * Creates a text string from the specified value.\n * @param data String that specifies the nodeValue property of the text node.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createTextNode)\n */\n createTextNode(data: string): Text;\n /**\n * Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document.\n * @param root The root element or node to start traversing on.\n * @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow.\n * @param filter A custom NodeFilter function to use.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/createTreeWalker)\n */\n createTreeWalker(root: Node, whatToShow?: number, filter?: NodeFilter | null): TreeWalker;\n /**\n * Executes a command on the current document, current selection, or the given range.\n * @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.\n * @param showUI Display the user interface, defaults to false.\n * @param value Value to assign.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/execCommand)\n */\n execCommand(commandId: string, showUI?: boolean, value?: string): boolean;\n /**\n * Stops document\'s fullscreen element from being displayed fullscreen and resolves promise when done.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/exitFullscreen)\n */\n exitFullscreen(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/exitPictureInPicture) */\n exitPictureInPicture(): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/exitPointerLock) */\n exitPointerLock(): void;\n /**\n * Returns a reference to the first object with the specified value of the ID attribute.\n * @param elementId String that specifies the ID value.\n */\n getElementById(elementId: string): HTMLElement | null;\n /**\n * Returns a HTMLCollection of the elements in the object on which the method was invoked (a document or an element) that have all the classes given by classNames. The classNames argument is interpreted as a space-separated list of classes.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/getElementsByClassName)\n */\n getElementsByClassName(classNames: string): HTMLCollectionOf;\n /**\n * Gets a collection of objects based on the value of the NAME or ID attribute.\n * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/getElementsByName)\n */\n getElementsByName(elementName: string): NodeListOf;\n /**\n * Retrieves a collection of objects based on the specified element name.\n * @param name Specifies the name of an element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/getElementsByTagName)\n */\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n /** @deprecated */\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: string): HTMLCollectionOf;\n /**\n * If namespace and localName are "*" returns a HTMLCollection of all descendant elements.\n *\n * If only namespace is "*" returns a HTMLCollection of all descendant elements whose local name is localName.\n *\n * If only localName is "*" returns a HTMLCollection of all descendant elements whose namespace is namespace.\n *\n * Otherwise, returns a HTMLCollection of all descendant elements whose namespace is namespace and local name is localName.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/getElementsByTagNameNS)\n */\n getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf;\n /**\n * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/getSelection)\n */\n getSelection(): Selection | null;\n /**\n * Gets a value indicating whether the object currently has focus.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/hasFocus)\n */\n hasFocus(): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/hasStorageAccess) */\n hasStorageAccess(): Promise;\n /**\n * Returns a copy of node. If deep is true, the copy also includes the node\'s descendants.\n *\n * If node is a document or a shadow root, throws a "NotSupportedError" DOMException.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/importNode)\n */\n importNode(node: T, deep?: boolean): T;\n /**\n * Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method.\n * @param url Specifies a MIME type for the document.\n * @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.\n * @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following values are supported.\n * @param replace Specifies whether the existing entry for the document is replaced in the history list.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/open)\n */\n open(unused1?: string, unused2?: string): Document;\n open(url: string | URL, name: string, features: string): WindowProxy | null;\n /**\n * Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.\n * @param commandId Specifies a command identifier.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/queryCommandEnabled)\n */\n queryCommandEnabled(commandId: string): boolean;\n /**\n * Returns a Boolean value that indicates whether the specified command is in the indeterminate state.\n * @param commandId String that specifies a command identifier.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/queryCommandIndeterm)\n */\n queryCommandIndeterm(commandId: string): boolean;\n /**\n * Returns a Boolean value that indicates the current state of the command.\n * @param commandId String that specifies a command identifier.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/queryCommandState)\n */\n queryCommandState(commandId: string): boolean;\n /**\n * Returns a Boolean value that indicates whether the current command is supported on the current range.\n * @param commandId Specifies a command identifier.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/queryCommandSupported)\n */\n queryCommandSupported(commandId: string): boolean;\n /**\n * Returns the current value of the document, range, or current selection for the given command.\n * @param commandId String that specifies a command identifier.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/queryCommandValue)\n */\n queryCommandValue(commandId: string): string;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/releaseEvents)\n */\n releaseEvents(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/requestStorageAccess) */\n requestStorageAccess(): Promise;\n /**\n * Writes one or more HTML expressions to a document in the specified window.\n * @param content Specifies the text and HTML tags to write.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/write)\n */\n write(...text: string[]): void;\n /**\n * Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window.\n * @param content The text and HTML tags to write.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/writeln)\n */\n writeln(...text: string[]): void;\n addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Document: {\n prototype: Document;\n new(): Document;\n};\n\n/**\n * A minimal document object that has no parent. It is used as a lightweight version of Document that stores a segment of a document structure comprised of nodes just like a standard document. The key difference is that because the document fragment isn\'t part of the active document tree structure, changes made to the fragment don\'t affect the document, cause reflow, or incur any performance impact that can occur when changes are made.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DocumentFragment)\n */\ninterface DocumentFragment extends Node, NonElementParentNode, ParentNode {\n readonly ownerDocument: Document;\n getElementById(elementId: string): HTMLElement | null;\n}\n\ndeclare var DocumentFragment: {\n prototype: DocumentFragment;\n new(): DocumentFragment;\n};\n\ninterface DocumentOrShadowRoot {\n /**\n * Returns the deepest element in the document through which or to which key events are being routed. This is, roughly speaking, the focused element in the document.\n *\n * For the purposes of this API, when a child browsing context is focused, its container is focused in the parent browsing context. For example, if the user moves the focus to a text control in an iframe, the iframe is the element returned by the activeElement API in the iframe\'s node document.\n *\n * Similarly, when the focused element is in a different node tree than documentOrShadowRoot, the element returned will be the host that\'s located in the same node tree as documentOrShadowRoot if documentOrShadowRoot is a shadow-including inclusive ancestor of the focused element, and null if not.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/activeElement)\n */\n readonly activeElement: Element | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/adoptedStyleSheets) */\n adoptedStyleSheets: CSSStyleSheet[];\n /**\n * Returns document\'s fullscreen element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fullscreenElement)\n */\n readonly fullscreenElement: Element | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/pictureInPictureElement) */\n readonly pictureInPictureElement: Element | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/pointerLockElement) */\n readonly pointerLockElement: Element | null;\n /**\n * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/styleSheets)\n */\n readonly styleSheets: StyleSheetList;\n /**\n * Returns the element for the specified x coordinate and the specified y coordinate.\n * @param x The x-offset\n * @param y The y-offset\n */\n elementFromPoint(x: number, y: number): Element | null;\n elementsFromPoint(x: number, y: number): Element[];\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/getAnimations) */\n getAnimations(): Animation[];\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DocumentTimeline) */\ninterface DocumentTimeline extends AnimationTimeline {\n}\n\ndeclare var DocumentTimeline: {\n prototype: DocumentTimeline;\n new(options?: DocumentTimelineOptions): DocumentTimeline;\n};\n\n/**\n * A Node containing a doctype.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DocumentType)\n */\ninterface DocumentType extends Node, ChildNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DocumentType/name) */\n readonly name: string;\n readonly ownerDocument: Document;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DocumentType/publicId) */\n readonly publicId: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DocumentType/systemId) */\n readonly systemId: string;\n}\n\ndeclare var DocumentType: {\n prototype: DocumentType;\n new(): DocumentType;\n};\n\n/**\n * A DOM event that represents a drag and drop interaction. The user initiates a drag by placing a pointer device (such as a mouse) on the touch surface and then dragging the pointer to a new location (such as another DOM element). Applications are free to interpret a drag and drop interaction in an application-specific way.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DragEvent)\n */\ninterface DragEvent extends MouseEvent {\n /**\n * Returns the DataTransfer object for the event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DragEvent/dataTransfer)\n */\n readonly dataTransfer: DataTransfer | null;\n}\n\ndeclare var DragEvent: {\n prototype: DragEvent;\n new(type: string, eventInitDict?: DragEventInit): DragEvent;\n};\n\n/**\n * Inherits properties from its parent, AudioNode.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DynamicsCompressorNode)\n */\ninterface DynamicsCompressorNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DynamicsCompressorNode/attack) */\n readonly attack: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DynamicsCompressorNode/knee) */\n readonly knee: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DynamicsCompressorNode/ratio) */\n readonly ratio: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DynamicsCompressorNode/reduction) */\n readonly reduction: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DynamicsCompressorNode/release) */\n readonly release: AudioParam;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DynamicsCompressorNode/threshold) */\n readonly threshold: AudioParam;\n}\n\ndeclare var DynamicsCompressorNode: {\n prototype: DynamicsCompressorNode;\n new(context: BaseAudioContext, options?: DynamicsCompressorOptions): DynamicsCompressorNode;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_blend_minmax) */\ninterface EXT_blend_minmax {\n readonly MIN_EXT: 0x8007;\n readonly MAX_EXT: 0x8008;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_color_buffer_float) */\ninterface EXT_color_buffer_float {\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_color_buffer_half_float) */\ninterface EXT_color_buffer_half_float {\n readonly RGBA16F_EXT: 0x881A;\n readonly RGB16F_EXT: 0x881B;\n readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211;\n readonly UNSIGNED_NORMALIZED_EXT: 0x8C17;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_float_blend) */\ninterface EXT_float_blend {\n}\n\n/**\n * The EXT_frag_depth extension is part of the WebGL API and enables to set a depth value of a fragment from within the fragment shader.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_frag_depth)\n */\ninterface EXT_frag_depth {\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_sRGB) */\ninterface EXT_sRGB {\n readonly SRGB_EXT: 0x8C40;\n readonly SRGB_ALPHA_EXT: 0x8C42;\n readonly SRGB8_ALPHA8_EXT: 0x8C43;\n readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_shader_texture_lod) */\ninterface EXT_shader_texture_lod {\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_texture_compression_bptc) */\ninterface EXT_texture_compression_bptc {\n readonly COMPRESSED_RGBA_BPTC_UNORM_EXT: 0x8E8C;\n readonly COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT: 0x8E8D;\n readonly COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT: 0x8E8E;\n readonly COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT: 0x8E8F;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_texture_compression_rgtc) */\ninterface EXT_texture_compression_rgtc {\n readonly COMPRESSED_RED_RGTC1_EXT: 0x8DBB;\n readonly COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8DBC;\n readonly COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8DBD;\n readonly COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8DBE;\n}\n\n/**\n * The EXT_texture_filter_anisotropic extension is part of the WebGL API and exposes two constants for anisotropic filtering (AF).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_texture_filter_anisotropic)\n */\ninterface EXT_texture_filter_anisotropic {\n readonly TEXTURE_MAX_ANISOTROPY_EXT: 0x84FE;\n readonly MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84FF;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EXT_texture_norm16) */\ninterface EXT_texture_norm16 {\n readonly R16_EXT: 0x822A;\n readonly RG16_EXT: 0x822C;\n readonly RGB16_EXT: 0x8054;\n readonly RGBA16_EXT: 0x805B;\n readonly R16_SNORM_EXT: 0x8F98;\n readonly RG16_SNORM_EXT: 0x8F99;\n readonly RGB16_SNORM_EXT: 0x8F9A;\n readonly RGBA16_SNORM_EXT: 0x8F9B;\n}\n\ninterface ElementEventMap {\n "fullscreenchange": Event;\n "fullscreenerror": Event;\n}\n\n/**\n * Element is the most general base class from which all objects in a Document inherit. It only has methods and properties common to all kinds of elements. More specific classes inherit from Element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element)\n */\ninterface Element extends Node, ARIAMixin, Animatable, ChildNode, InnerHTML, NonDocumentTypeChildNode, ParentNode, Slottable {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/attributes) */\n readonly attributes: NamedNodeMap;\n /**\n * Allows for manipulation of element\'s class content attribute as a set of whitespace-separated tokens through a DOMTokenList object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/classList)\n */\n readonly classList: DOMTokenList;\n /**\n * Returns the value of element\'s class content attribute. Can be set to change it.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/className)\n */\n className: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/clientHeight) */\n readonly clientHeight: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/clientLeft) */\n readonly clientLeft: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/clientTop) */\n readonly clientTop: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/clientWidth) */\n readonly clientWidth: number;\n /**\n * Returns the value of element\'s id content attribute. Can be set to change it.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/id)\n */\n id: string;\n /**\n * Returns the local name.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/localName)\n */\n readonly localName: string;\n /**\n * Returns the namespace.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/namespaceURI)\n */\n readonly namespaceURI: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/fullscreenchange_event) */\n onfullscreenchange: ((this: Element, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/fullscreenerror_event) */\n onfullscreenerror: ((this: Element, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/outerHTML) */\n outerHTML: string;\n readonly ownerDocument: Document;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/part) */\n readonly part: DOMTokenList;\n /**\n * Returns the namespace prefix.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/prefix)\n */\n readonly prefix: string | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scrollHeight) */\n readonly scrollHeight: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scrollLeft) */\n scrollLeft: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scrollTop) */\n scrollTop: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scrollWidth) */\n readonly scrollWidth: number;\n /**\n * Returns element\'s shadow root, if any, and if shadow root\'s mode is "open", and null otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/shadowRoot)\n */\n readonly shadowRoot: ShadowRoot | null;\n /**\n * Returns the value of element\'s slot content attribute. Can be set to change it.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/slot)\n */\n slot: string;\n /**\n * Returns the HTML-uppercased qualified name.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/tagName)\n */\n readonly tagName: string;\n /**\n * Creates a shadow root for element and returns it.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/attachShadow)\n */\n attachShadow(init: ShadowRootInit): ShadowRoot;\n checkVisibility(options?: CheckVisibilityOptions): boolean;\n /**\n * Returns the first (starting at element) inclusive ancestor that matches selectors, and null otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/closest)\n */\n closest(selector: K): HTMLElementTagNameMap[K] | null;\n closest(selector: K): SVGElementTagNameMap[K] | null;\n closest(selector: K): MathMLElementTagNameMap[K] | null;\n closest(selectors: string): E | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/computedStyleMap) */\n computedStyleMap(): StylePropertyMapReadOnly;\n /**\n * Returns element\'s first attribute whose qualified name is qualifiedName, and null if there is no such attribute otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getAttribute)\n */\n getAttribute(qualifiedName: string): string | null;\n /**\n * Returns element\'s attribute whose namespace is namespace and local name is localName, and null if there is no such attribute otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getAttributeNS)\n */\n getAttributeNS(namespace: string | null, localName: string): string | null;\n /**\n * Returns the qualified names of all element\'s attributes. Can contain duplicates.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getAttributeNames)\n */\n getAttributeNames(): string[];\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getAttributeNode) */\n getAttributeNode(qualifiedName: string): Attr | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getAttributeNodeNS) */\n getAttributeNodeNS(namespace: string | null, localName: string): Attr | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getBoundingClientRect) */\n getBoundingClientRect(): DOMRect;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getClientRects) */\n getClientRects(): DOMRectList;\n /**\n * Returns a HTMLCollection of the elements in the object on which the method was invoked (a document or an element) that have all the classes given by classNames. The classNames argument is interpreted as a space-separated list of classes.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getElementsByClassName)\n */\n getElementsByClassName(classNames: string): HTMLCollectionOf;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getElementsByTagName) */\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n /** @deprecated */\n getElementsByTagName(qualifiedName: K): HTMLCollectionOf;\n getElementsByTagName(qualifiedName: string): HTMLCollectionOf;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/getElementsByTagNameNS) */\n getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1998/Math/MathML", localName: string): HTMLCollectionOf;\n getElementsByTagNameNS(namespace: string | null, localName: string): HTMLCollectionOf;\n /**\n * Returns true if element has an attribute whose qualified name is qualifiedName, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/hasAttribute)\n */\n hasAttribute(qualifiedName: string): boolean;\n /**\n * Returns true if element has an attribute whose namespace is namespace and local name is localName.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/hasAttributeNS)\n */\n hasAttributeNS(namespace: string | null, localName: string): boolean;\n /**\n * Returns true if element has attributes, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/hasAttributes)\n */\n hasAttributes(): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/hasPointerCapture) */\n hasPointerCapture(pointerId: number): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/insertAdjacentElement) */\n insertAdjacentElement(where: InsertPosition, element: Element): Element | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/insertAdjacentHTML) */\n insertAdjacentHTML(position: InsertPosition, text: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/insertAdjacentText) */\n insertAdjacentText(where: InsertPosition, data: string): void;\n /**\n * Returns true if matching selectors against element\'s root yields element, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/matches)\n */\n matches(selectors: string): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/releasePointerCapture) */\n releasePointerCapture(pointerId: number): void;\n /**\n * Removes element\'s first attribute whose qualified name is qualifiedName.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/removeAttribute)\n */\n removeAttribute(qualifiedName: string): void;\n /**\n * Removes element\'s attribute whose namespace is namespace and local name is localName.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/removeAttributeNS)\n */\n removeAttributeNS(namespace: string | null, localName: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/removeAttributeNode) */\n removeAttributeNode(attr: Attr): Attr;\n /**\n * Displays element fullscreen and resolves promise when done.\n *\n * When supplied, options\'s navigationUI member indicates whether showing navigation UI while in fullscreen is preferred or not. If set to "show", navigation simplicity is preferred over screen space, and if set to "hide", more screen space is preferred. User agents are always free to honor user preference over the application\'s. The default value "auto" indicates no application preference.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/requestFullscreen)\n */\n requestFullscreen(options?: FullscreenOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/requestPointerLock) */\n requestPointerLock(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scroll) */\n scroll(options?: ScrollToOptions): void;\n scroll(x: number, y: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scrollBy) */\n scrollBy(options?: ScrollToOptions): void;\n scrollBy(x: number, y: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scrollIntoView) */\n scrollIntoView(arg?: boolean | ScrollIntoViewOptions): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/scrollTo) */\n scrollTo(options?: ScrollToOptions): void;\n scrollTo(x: number, y: number): void;\n /**\n * Sets the value of element\'s first attribute whose qualified name is qualifiedName to value.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/setAttribute)\n */\n setAttribute(qualifiedName: string, value: string): void;\n /**\n * Sets the value of element\'s attribute whose namespace is namespace and local name is localName to value.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/setAttributeNS)\n */\n setAttributeNS(namespace: string | null, qualifiedName: string, value: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/setAttributeNode) */\n setAttributeNode(attr: Attr): Attr | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/setAttributeNodeNS) */\n setAttributeNodeNS(attr: Attr): Attr | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/setPointerCapture) */\n setPointerCapture(pointerId: number): void;\n /**\n * If force is not given, "toggles" qualifiedName, removing it if it is present and adding it if it is not present. If force is true, adds qualifiedName. If force is false, removes qualifiedName.\n *\n * Returns true if qualifiedName is now present, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/toggleAttribute)\n */\n toggleAttribute(qualifiedName: string, force?: boolean): boolean;\n /**\n * @deprecated This is a legacy alias of `matches`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/matches)\n */\n webkitMatchesSelector(selectors: string): boolean;\n addEventListener(type: K, listener: (this: Element, ev: ElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: Element, ev: ElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var Element: {\n prototype: Element;\n new(): Element;\n};\n\ninterface ElementCSSInlineStyle {\n readonly attributeStyleMap: StylePropertyMap;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/style) */\n readonly style: CSSStyleDeclaration;\n}\n\ninterface ElementContentEditable {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/contentEditable) */\n contentEditable: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/enterKeyHint) */\n enterKeyHint: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/inputMode) */\n inputMode: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/isContentEditable) */\n readonly isContentEditable: boolean;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals) */\ninterface ElementInternals extends ARIAMixin {\n /**\n * Returns the form owner of internals\'s target element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/form)\n */\n readonly form: HTMLFormElement | null;\n /**\n * Returns a NodeList of all the label elements that internals\'s target element is associated with.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/labels)\n */\n readonly labels: NodeList;\n /**\n * Returns the ShadowRoot for internals\'s target element, if the target element is a shadow host, or null otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/shadowRoot)\n */\n readonly shadowRoot: ShadowRoot | null;\n /**\n * Returns the error message that would be shown to the user if internals\'s target element was to be checked for validity.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/validationMessage)\n */\n readonly validationMessage: string;\n /**\n * Returns the ValidityState object for internals\'s target element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/validity)\n */\n readonly validity: ValidityState;\n /**\n * Returns true if internals\'s target element will be validated when the form is submitted; false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/willValidate)\n */\n readonly willValidate: boolean;\n /**\n * Returns true if internals\'s target element has no validity problems; false otherwise. Fires an invalid event at the element in the latter case.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/checkValidity)\n */\n checkValidity(): boolean;\n /**\n * Returns true if internals\'s target element has no validity problems; otherwise, returns false, fires an invalid event at the element, and (if the event isn\'t canceled) reports the problem to the user.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/reportValidity)\n */\n reportValidity(): boolean;\n /**\n * Sets both the state and submission value of internals\'s target element to value.\n *\n * If value is null, the element won\'t participate in form submission.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/setFormValue)\n */\n setFormValue(value: File | string | FormData | null, state?: File | string | FormData | null): void;\n /**\n * Marks internals\'s target element as suffering from the constraints indicated by the flags argument, and sets the element\'s validation message to message. If anchor is specified, the user agent might use it to indicate problems with the constraints of internals\'s target element when the form owner is validated interactively or reportValidity() is called.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ElementInternals/setValidity)\n */\n setValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n}\n\ndeclare var ElementInternals: {\n prototype: ElementInternals;\n new(): ElementInternals;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EncodedVideoChunk) */\ninterface EncodedVideoChunk {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EncodedVideoChunk/byteLength) */\n readonly byteLength: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EncodedVideoChunk/duration) */\n readonly duration: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EncodedVideoChunk/timestamp) */\n readonly timestamp: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EncodedVideoChunk/type) */\n readonly type: EncodedVideoChunkType;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EncodedVideoChunk/copyTo) */\n copyTo(destination: BufferSource): void;\n}\n\ndeclare var EncodedVideoChunk: {\n prototype: EncodedVideoChunk;\n new(init: EncodedVideoChunkInit): EncodedVideoChunk;\n};\n\n/**\n * Events providing information related to errors in scripts or in files.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent)\n */\ninterface ErrorEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/colno) */\n readonly colno: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/error) */\n readonly error: any;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/filename) */\n readonly filename: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/lineno) */\n readonly lineno: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/message) */\n readonly message: string;\n}\n\ndeclare var ErrorEvent: {\n prototype: ErrorEvent;\n new(type: string, eventInitDict?: ErrorEventInit): ErrorEvent;\n};\n\n/**\n * An event which takes place in the DOM.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event)\n */\ninterface Event {\n /**\n * Returns true or false depending on how event was initialized. True if event goes through its target\'s ancestors in reverse tree order, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/bubbles)\n */\n readonly bubbles: boolean;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)\n */\n cancelBubble: boolean;\n /**\n * Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled by invoking the preventDefault() method.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelable)\n */\n readonly cancelable: boolean;\n /**\n * Returns true or false depending on how event was initialized. True if event invokes listeners past a ShadowRoot node that is the root of its target, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composed)\n */\n readonly composed: boolean;\n /**\n * Returns the object whose event listener\'s callback is currently being invoked.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/currentTarget)\n */\n readonly currentTarget: EventTarget | null;\n /**\n * Returns true if preventDefault() was invoked successfully to indicate cancelation, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/defaultPrevented)\n */\n readonly defaultPrevented: boolean;\n /**\n * Returns the event\'s phase, which is one of NONE, CAPTURING_PHASE, AT_TARGET, and BUBBLING_PHASE.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/eventPhase)\n */\n readonly eventPhase: number;\n /**\n * Returns true if event was dispatched by the user agent, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/isTrusted)\n */\n readonly isTrusted: boolean;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/returnValue)\n */\n returnValue: boolean;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/srcElement)\n */\n readonly srcElement: EventTarget | null;\n /**\n * Returns the object to which event is dispatched (its target).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/target)\n */\n readonly target: EventTarget | null;\n /**\n * Returns the event\'s timestamp as the number of milliseconds measured relative to the time origin.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/timeStamp)\n */\n readonly timeStamp: DOMHighResTimeStamp;\n /**\n * Returns the type of event, e.g. "click", "hashchange", or "submit".\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/type)\n */\n readonly type: string;\n /**\n * Returns the invocation target objects of event\'s path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root\'s mode is "closed" that are not reachable from event\'s currentTarget.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composedPath)\n */\n composedPath(): EventTarget[];\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/initEvent)\n */\n initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;\n /**\n * If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/preventDefault)\n */\n preventDefault(): void;\n /**\n * Invoking this method prevents event from reaching any registered event listeners after the current one finishes running and, when dispatched in a tree, also prevents event from reaching any other objects.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopImmediatePropagation)\n */\n stopImmediatePropagation(): void;\n /**\n * When dispatched in a tree, invoking this method prevents event from reaching any objects other than the current object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopPropagation)\n */\n stopPropagation(): void;\n readonly NONE: 0;\n readonly CAPTURING_PHASE: 1;\n readonly AT_TARGET: 2;\n readonly BUBBLING_PHASE: 3;\n}\n\ndeclare var Event: {\n prototype: Event;\n new(type: string, eventInitDict?: EventInit): Event;\n readonly NONE: 0;\n readonly CAPTURING_PHASE: 1;\n readonly AT_TARGET: 2;\n readonly BUBBLING_PHASE: 3;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventCounts) */\ninterface EventCounts {\n forEach(callbackfn: (value: number, key: string, parent: EventCounts) => void, thisArg?: any): void;\n}\n\ndeclare var EventCounts: {\n prototype: EventCounts;\n new(): EventCounts;\n};\n\ninterface EventListener {\n (evt: Event): void;\n}\n\ninterface EventListenerObject {\n handleEvent(object: Event): void;\n}\n\ninterface EventSourceEventMap {\n "error": Event;\n "message": MessageEvent;\n "open": Event;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource) */\ninterface EventSource extends EventTarget {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/error_event) */\n onerror: ((this: EventSource, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/message_event) */\n onmessage: ((this: EventSource, ev: MessageEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/open_event) */\n onopen: ((this: EventSource, ev: Event) => any) | null;\n /**\n * Returns the state of this EventSource object\'s connection. It can have the values described below.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/readyState)\n */\n readonly readyState: number;\n /**\n * Returns the URL providing the event stream.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/url)\n */\n readonly url: string;\n /**\n * Returns true if the credentials mode for connection requests to the URL providing the event stream is set to "include", and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/withCredentials)\n */\n readonly withCredentials: boolean;\n /**\n * Aborts any instances of the fetch algorithm started for this EventSource object, and sets the readyState attribute to CLOSED.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventSource/close)\n */\n close(): void;\n readonly CONNECTING: 0;\n readonly OPEN: 1;\n readonly CLOSED: 2;\n addEventListener(type: K, listener: (this: EventSource, ev: EventSourceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: (this: EventSource, event: MessageEvent) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: EventSource, ev: EventSourceEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: (this: EventSource, event: MessageEvent) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var EventSource: {\n prototype: EventSource;\n new(url: string | URL, eventSourceInitDict?: EventSourceInit): EventSource;\n readonly CONNECTING: 0;\n readonly OPEN: 1;\n readonly CLOSED: 2;\n};\n\n/**\n * EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget)\n */\ninterface EventTarget {\n /**\n * Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched.\n *\n * The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options\'s capture.\n *\n * When set to true, options\'s capture prevents callback from being invoked when the event\'s eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event\'s eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event\'s eventPhase attribute value is AT_TARGET.\n *\n * When set to true, options\'s passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in \xa7 2.8 Observing event listeners.\n *\n * When set to true, options\'s once indicates that the callback will only be invoked once after which the event listener will be removed.\n *\n * If an AbortSignal is passed for options\'s signal, then the event listener will be removed when signal is aborted.\n *\n * The event listener is appended to target\'s event listener list and is not appended if it has the same type, callback, and capture.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)\n */\n addEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: AddEventListenerOptions | boolean): void;\n /**\n * Dispatches a synthetic event event to target and returns true if either event\'s cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)\n */\n dispatchEvent(event: Event): boolean;\n /**\n * Removes the event listener in target\'s event listener list with the same type, callback, and options.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)\n */\n removeEventListener(type: string, callback: EventListenerOrEventListenerObject | null, options?: EventListenerOptions | boolean): void;\n}\n\ndeclare var EventTarget: {\n prototype: EventTarget;\n new(): EventTarget;\n};\n\n/**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/External)\n */\ninterface External {\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/External/AddSearchProvider)\n */\n AddSearchProvider(): void;\n /**\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/External/IsSearchProviderInstalled)\n */\n IsSearchProviderInstalled(): void;\n}\n\n/** @deprecated */\ndeclare var External: {\n prototype: External;\n new(): External;\n};\n\n/**\n * Provides information about files and allows JavaScript in a web page to access their content.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/File)\n */\ninterface File extends Blob {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified) */\n readonly lastModified: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name) */\n readonly name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/webkitRelativePath) */\n readonly webkitRelativePath: string;\n}\n\ndeclare var File: {\n prototype: File;\n new(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag): File;\n};\n\n/**\n * An object of this type is returned by the files property of the HTML element; this lets you access the list of files selected with the element. It\'s also used for a list of files dropped into web content when using the drag and drop API; see the DataTransfer object for details on this usage.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileList)\n */\ninterface FileList {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileList/length) */\n readonly length: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileList/item) */\n item(index: number): File | null;\n [index: number]: File;\n}\n\ndeclare var FileList: {\n prototype: FileList;\n new(): FileList;\n};\n\ninterface FileReaderEventMap {\n "abort": ProgressEvent;\n "error": ProgressEvent;\n "load": ProgressEvent;\n "loadend": ProgressEvent;\n "loadstart": ProgressEvent;\n "progress": ProgressEvent;\n}\n\n/**\n * Lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user\'s computer, using File or Blob objects to specify the file or data to read.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader)\n */\ninterface FileReader extends EventTarget {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/error) */\n readonly error: DOMException | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/abort_event) */\n onabort: ((this: FileReader, ev: ProgressEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/error_event) */\n onerror: ((this: FileReader, ev: ProgressEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/load_event) */\n onload: ((this: FileReader, ev: ProgressEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/loadend_event) */\n onloadend: ((this: FileReader, ev: ProgressEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/loadstart_event) */\n onloadstart: ((this: FileReader, ev: ProgressEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/progress_event) */\n onprogress: ((this: FileReader, ev: ProgressEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readyState) */\n readonly readyState: typeof FileReader.EMPTY | typeof FileReader.LOADING | typeof FileReader.DONE;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/result) */\n readonly result: string | ArrayBuffer | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/abort) */\n abort(): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readAsArrayBuffer) */\n readAsArrayBuffer(blob: Blob): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readAsBinaryString) */\n readAsBinaryString(blob: Blob): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readAsDataURL) */\n readAsDataURL(blob: Blob): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readAsText) */\n readAsText(blob: Blob, encoding?: string): void;\n readonly EMPTY: 0;\n readonly LOADING: 1;\n readonly DONE: 2;\n addEventListener(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var FileReader: {\n prototype: FileReader;\n new(): FileReader;\n readonly EMPTY: 0;\n readonly LOADING: 1;\n readonly DONE: 2;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystem) */\ninterface FileSystem {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystem/name) */\n readonly name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystem/root) */\n readonly root: FileSystemDirectoryEntry;\n}\n\ndeclare var FileSystem: {\n prototype: FileSystem;\n new(): FileSystem;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryEntry) */\ninterface FileSystemDirectoryEntry extends FileSystemEntry {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryEntry/createReader) */\n createReader(): FileSystemDirectoryReader;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryEntry/getDirectory) */\n getDirectory(path?: string | null, options?: FileSystemFlags, successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryEntry/getFile) */\n getFile(path?: string | null, options?: FileSystemFlags, successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemDirectoryEntry: {\n prototype: FileSystemDirectoryEntry;\n new(): FileSystemDirectoryEntry;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle)\n */\ninterface FileSystemDirectoryHandle extends FileSystemHandle {\n readonly kind: "directory";\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle/getDirectoryHandle) */\n getDirectoryHandle(name: string, options?: FileSystemGetDirectoryOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle/getFileHandle) */\n getFileHandle(name: string, options?: FileSystemGetFileOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle/removeEntry) */\n removeEntry(name: string, options?: FileSystemRemoveOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle/resolve) */\n resolve(possibleDescendant: FileSystemHandle): Promise;\n}\n\ndeclare var FileSystemDirectoryHandle: {\n prototype: FileSystemDirectoryHandle;\n new(): FileSystemDirectoryHandle;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader) */\ninterface FileSystemDirectoryReader {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryReader/readEntries) */\n readEntries(successCallback: FileSystemEntriesCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemDirectoryReader: {\n prototype: FileSystemDirectoryReader;\n new(): FileSystemDirectoryReader;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemEntry) */\ninterface FileSystemEntry {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemEntry/filesystem) */\n readonly filesystem: FileSystem;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemEntry/fullPath) */\n readonly fullPath: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemEntry/isDirectory) */\n readonly isDirectory: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemEntry/isFile) */\n readonly isFile: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemEntry/name) */\n readonly name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemEntry/getParent) */\n getParent(successCallback?: FileSystemEntryCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemEntry: {\n prototype: FileSystemEntry;\n new(): FileSystemEntry;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileEntry) */\ninterface FileSystemFileEntry extends FileSystemEntry {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileEntry/file) */\n file(successCallback: FileCallback, errorCallback?: ErrorCallback): void;\n}\n\ndeclare var FileSystemFileEntry: {\n prototype: FileSystemFileEntry;\n new(): FileSystemFileEntry;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileHandle)\n */\ninterface FileSystemFileHandle extends FileSystemHandle {\n readonly kind: "file";\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileHandle/createWritable) */\n createWritable(options?: FileSystemCreateWritableOptions): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileHandle/getFile) */\n getFile(): Promise;\n}\n\ndeclare var FileSystemFileHandle: {\n prototype: FileSystemFileHandle;\n new(): FileSystemFileHandle;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemHandle)\n */\ninterface FileSystemHandle {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemHandle/kind) */\n readonly kind: FileSystemHandleKind;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemHandle/name) */\n readonly name: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemHandle/isSameEntry) */\n isSameEntry(other: FileSystemHandle): Promise;\n}\n\ndeclare var FileSystemHandle: {\n prototype: FileSystemHandle;\n new(): FileSystemHandle;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream)\n */\ninterface FileSystemWritableFileStream extends WritableStream {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream/seek) */\n seek(position: number): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream/truncate) */\n truncate(size: number): Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream/write) */\n write(data: FileSystemWriteChunkType): Promise;\n}\n\ndeclare var FileSystemWritableFileStream: {\n prototype: FileSystemWritableFileStream;\n new(): FileSystemWritableFileStream;\n};\n\n/**\n * Focus-related events like focus, blur, focusin, or focusout.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FocusEvent)\n */\ninterface FocusEvent extends UIEvent {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FocusEvent/relatedTarget) */\n readonly relatedTarget: EventTarget | null;\n}\n\ndeclare var FocusEvent: {\n prototype: FocusEvent;\n new(type: string, eventInitDict?: FocusEventInit): FocusEvent;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace) */\ninterface FontFace {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/ascentOverride) */\n ascentOverride: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/descentOverride) */\n descentOverride: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/display) */\n display: FontDisplay;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/family) */\n family: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/featureSettings) */\n featureSettings: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/lineGapOverride) */\n lineGapOverride: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/loaded) */\n readonly loaded: Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/status) */\n readonly status: FontFaceLoadStatus;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/stretch) */\n stretch: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/style) */\n style: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/unicodeRange) */\n unicodeRange: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/variant) */\n variant: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/weight) */\n weight: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/load) */\n load(): Promise;\n}\n\ndeclare var FontFace: {\n prototype: FontFace;\n new(family: string, source: string | BinaryData, descriptors?: FontFaceDescriptors): FontFace;\n};\n\ninterface FontFaceSetEventMap {\n "loading": Event;\n "loadingdone": Event;\n "loadingerror": Event;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet) */\ninterface FontFaceSet extends EventTarget {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loading_event) */\n onloading: ((this: FontFaceSet, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingdone_event) */\n onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingerror_event) */\n onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/ready) */\n readonly ready: Promise;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/status) */\n readonly status: FontFaceSetLoadStatus;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/check) */\n check(font: string, text?: string): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/load) */\n load(font: string, text?: string): Promise;\n forEach(callbackfn: (value: FontFace, key: FontFace, parent: FontFaceSet) => void, thisArg?: any): void;\n addEventListener(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var FontFaceSet: {\n prototype: FontFaceSet;\n new(initialFaces: FontFace[]): FontFaceSet;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSetLoadEvent) */\ninterface FontFaceSetLoadEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSetLoadEvent/fontfaces) */\n readonly fontfaces: ReadonlyArray;\n}\n\ndeclare var FontFaceSetLoadEvent: {\n prototype: FontFaceSetLoadEvent;\n new(type: string, eventInitDict?: FontFaceSetLoadEventInit): FontFaceSetLoadEvent;\n};\n\ninterface FontFaceSource {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fonts) */\n readonly fonts: FontFaceSet;\n}\n\n/**\n * Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to "multipart/form-data".\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData)\n */\ninterface FormData {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append) */\n append(name: string, value: string | Blob): void;\n append(name: string, value: string): void;\n append(name: string, blobValue: Blob, filename?: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/delete) */\n delete(name: string): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/get) */\n get(name: string): FormDataEntryValue | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/getAll) */\n getAll(name: string): FormDataEntryValue[];\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/has) */\n has(name: string): boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set) */\n set(name: string, value: string | Blob): void;\n set(name: string, value: string): void;\n set(name: string, blobValue: Blob, filename?: string): void;\n forEach(callbackfn: (value: FormDataEntryValue, key: string, parent: FormData) => void, thisArg?: any): void;\n}\n\ndeclare var FormData: {\n prototype: FormData;\n new(form?: HTMLFormElement, submitter?: HTMLElement | null): FormData;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormDataEvent) */\ninterface FormDataEvent extends Event {\n /**\n * Returns a FormData object representing names and values of elements associated to the target form. Operations on the FormData object will affect form data to be submitted.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormDataEvent/formData)\n */\n readonly formData: FormData;\n}\n\ndeclare var FormDataEvent: {\n prototype: FormDataEvent;\n new(type: string, eventInitDict: FormDataEventInit): FormDataEvent;\n};\n\n/**\n * A change in volume. It is an AudioNode audio-processing module that causes a given gain to be applied to the input data before its propagation to the output. A GainNode always has exactly one input and one output, both with the same number of channels.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GainNode)\n */\ninterface GainNode extends AudioNode {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GainNode/gain) */\n readonly gain: AudioParam;\n}\n\ndeclare var GainNode: {\n prototype: GainNode;\n new(context: BaseAudioContext, options?: GainOptions): GainNode;\n};\n\n/**\n * This Gamepad API interface defines an individual gamepad or other controller, allowing access to information such as button presses, axis positions, and id.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad)\n */\ninterface Gamepad {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/axes) */\n readonly axes: ReadonlyArray;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/buttons) */\n readonly buttons: ReadonlyArray;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/connected) */\n readonly connected: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/hapticActuators) */\n readonly hapticActuators: ReadonlyArray;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/id) */\n readonly id: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/index) */\n readonly index: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/mapping) */\n readonly mapping: GamepadMappingType;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Gamepad/timestamp) */\n readonly timestamp: DOMHighResTimeStamp;\n readonly vibrationActuator: GamepadHapticActuator | null;\n}\n\ndeclare var Gamepad: {\n prototype: Gamepad;\n new(): Gamepad;\n};\n\n/**\n * An individual button of a gamepad or other controller, allowing access to the current state of different types of buttons available on the control device.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadButton)\n */\ninterface GamepadButton {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadButton/pressed) */\n readonly pressed: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadButton/touched) */\n readonly touched: boolean;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadButton/value) */\n readonly value: number;\n}\n\ndeclare var GamepadButton: {\n prototype: GamepadButton;\n new(): GamepadButton;\n};\n\n/**\n * This Gamepad API interface contains references to gamepads connected to the system, which is what the gamepad events Window.gamepadconnected and Window.gamepaddisconnected are fired in response to.\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadEvent)\n */\ninterface GamepadEvent extends Event {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadEvent/gamepad) */\n readonly gamepad: Gamepad;\n}\n\ndeclare var GamepadEvent: {\n prototype: GamepadEvent;\n new(type: string, eventInitDict: GamepadEventInit): GamepadEvent;\n};\n\n/**\n * This Gamepad API interface represents hardware in the controller designed to provide haptic feedback to the user (if available), most commonly vibration hardware.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadHapticActuator)\n */\ninterface GamepadHapticActuator {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GamepadHapticActuator/type) */\n readonly type: GamepadHapticActuatorType;\n playEffect(type: GamepadHapticEffectType, params?: GamepadEffectParameters): Promise;\n reset(): Promise;\n}\n\ndeclare var GamepadHapticActuator: {\n prototype: GamepadHapticActuator;\n new(): GamepadHapticActuator;\n};\n\ninterface GenericTransformStream {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompressionStream/readable) */\n readonly readable: ReadableStream;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompressionStream/writable) */\n readonly writable: WritableStream;\n}\n\n/**\n * An object able to programmatically obtain the position of the device. It gives Web content access to the location of the device. This allows a Web site or app to offer customized results based on the user\'s location.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Geolocation)\n */\ninterface Geolocation {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Geolocation/clearWatch) */\n clearWatch(watchId: number): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Geolocation/getCurrentPosition) */\n getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback | null, options?: PositionOptions): void;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Geolocation/watchPosition) */\n watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback | null, options?: PositionOptions): number;\n}\n\ndeclare var Geolocation: {\n prototype: Geolocation;\n new(): Geolocation;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates)\n */\ninterface GeolocationCoordinates {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/accuracy) */\n readonly accuracy: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/altitude) */\n readonly altitude: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/altitudeAccuracy) */\n readonly altitudeAccuracy: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/heading) */\n readonly heading: number | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/latitude) */\n readonly latitude: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/longitude) */\n readonly longitude: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationCoordinates/speed) */\n readonly speed: number | null;\n}\n\ndeclare var GeolocationCoordinates: {\n prototype: GeolocationCoordinates;\n new(): GeolocationCoordinates;\n};\n\n/**\n * Available only in secure contexts.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationPosition)\n */\ninterface GeolocationPosition {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationPosition/coords) */\n readonly coords: GeolocationCoordinates;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationPosition/timestamp) */\n readonly timestamp: EpochTimeStamp;\n}\n\ndeclare var GeolocationPosition: {\n prototype: GeolocationPosition;\n new(): GeolocationPosition;\n};\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationPositionError) */\ninterface GeolocationPositionError {\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationPositionError/code) */\n readonly code: number;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/GeolocationPositionError/message) */\n readonly message: string;\n readonly PERMISSION_DENIED: 1;\n readonly POSITION_UNAVAILABLE: 2;\n readonly TIMEOUT: 3;\n}\n\ndeclare var GeolocationPositionError: {\n prototype: GeolocationPositionError;\n new(): GeolocationPositionError;\n readonly PERMISSION_DENIED: 1;\n readonly POSITION_UNAVAILABLE: 2;\n readonly TIMEOUT: 3;\n};\n\ninterface GlobalEventHandlersEventMap {\n "abort": UIEvent;\n "animationcancel": AnimationEvent;\n "animationend": AnimationEvent;\n "animationiteration": AnimationEvent;\n "animationstart": AnimationEvent;\n "auxclick": MouseEvent;\n "beforeinput": InputEvent;\n "blur": FocusEvent;\n "cancel": Event;\n "canplay": Event;\n "canplaythrough": Event;\n "change": Event;\n "click": MouseEvent;\n "close": Event;\n "compositionend": CompositionEvent;\n "compositionstart": CompositionEvent;\n "compositionupdate": CompositionEvent;\n "contextmenu": MouseEvent;\n "copy": ClipboardEvent;\n "cuechange": Event;\n "cut": ClipboardEvent;\n "dblclick": MouseEvent;\n "drag": DragEvent;\n "dragend": DragEvent;\n "dragenter": DragEvent;\n "dragleave": DragEvent;\n "dragover": DragEvent;\n "dragstart": DragEvent;\n "drop": DragEvent;\n "durationchange": Event;\n "emptied": Event;\n "ended": Event;\n "error": ErrorEvent;\n "focus": FocusEvent;\n "focusin": FocusEvent;\n "focusout": FocusEvent;\n "formdata": FormDataEvent;\n "gotpointercapture": PointerEvent;\n "input": Event;\n "invalid": Event;\n "keydown": KeyboardEvent;\n "keypress": KeyboardEvent;\n "keyup": KeyboardEvent;\n "load": Event;\n "loadeddata": Event;\n "loadedmetadata": Event;\n "loadstart": Event;\n "lostpointercapture": PointerEvent;\n "mousedown": MouseEvent;\n "mouseenter": MouseEvent;\n "mouseleave": MouseEvent;\n "mousemove": MouseEvent;\n "mouseout": MouseEvent;\n "mouseover": MouseEvent;\n "mouseup": MouseEvent;\n "paste": ClipboardEvent;\n "pause": Event;\n "play": Event;\n "playing": Event;\n "pointercancel": PointerEvent;\n "pointerdown": PointerEvent;\n "pointerenter": PointerEvent;\n "pointerleave": PointerEvent;\n "pointermove": PointerEvent;\n "pointerout": PointerEvent;\n "pointerover": PointerEvent;\n "pointerup": PointerEvent;\n "progress": ProgressEvent;\n "ratechange": Event;\n "reset": Event;\n "resize": UIEvent;\n "scroll": Event;\n "scrollend": Event;\n "securitypolicyviolation": SecurityPolicyViolationEvent;\n "seeked": Event;\n "seeking": Event;\n "select": Event;\n "selectionchange": Event;\n "selectstart": Event;\n "slotchange": Event;\n "stalled": Event;\n "submit": SubmitEvent;\n "suspend": Event;\n "timeupdate": Event;\n "toggle": Event;\n "touchcancel": TouchEvent;\n "touchend": TouchEvent;\n "touchmove": TouchEvent;\n "touchstart": TouchEvent;\n "transitioncancel": TransitionEvent;\n "transitionend": TransitionEvent;\n "transitionrun": TransitionEvent;\n "transitionstart": TransitionEvent;\n "volumechange": Event;\n "waiting": Event;\n "webkitanimationend": Event;\n "webkitanimationiteration": Event;\n "webkitanimationstart": Event;\n "webkittransitionend": Event;\n "wheel": WheelEvent;\n}\n\ninterface GlobalEventHandlers {\n /**\n * Fires when the user aborts the download.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/abort_event)\n */\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/animationcancel_event) */\n onanimationcancel: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/animationend_event) */\n onanimationend: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/animationiteration_event) */\n onanimationiteration: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/animationstart_event) */\n onanimationstart: ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/auxclick_event) */\n onauxclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/beforeinput_event) */\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null;\n /**\n * Fires when the object loses the input focus.\n * @param ev The focus event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/blur_event)\n */\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDialogElement/cancel_event) */\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when playback is possible, but would require further buffering.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/canplay_event)\n */\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/canplaythrough_event) */\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the contents of the object or selection have changed.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/change_event)\n */\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the user clicks the left mouse button on the object\n * @param ev The mouse event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/click_event)\n */\n onclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDialogElement/close_event) */\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the user clicks the right mouse button in the client area, opening the context menu.\n * @param ev The mouse event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/contextmenu_event)\n */\n oncontextmenu: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/copy_event) */\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTrackElement/cuechange_event) */\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/cut_event) */\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n /**\n * Fires when the user double-clicks the object.\n * @param ev The mouse event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/dblclick_event)\n */\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires on the source object continuously during a drag operation.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/drag_event)\n */\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the source object when the user releases the mouse at the close of a drag operation.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/dragend_event)\n */\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the target element when the user drags the object to a valid drop target.\n * @param ev The drag event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/dragenter_event)\n */\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.\n * @param ev The drag event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/dragleave_event)\n */\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the target element continuously while the user drags the object over a valid drop target.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/dragover_event)\n */\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Fires on the source object when the user starts to drag a text selection or selected object.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/dragstart_event)\n */\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/drop_event) */\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null;\n /**\n * Occurs when the duration attribute is updated.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/durationchange_event)\n */\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the media element is reset to its initial state.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/emptied_event)\n */\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the end of playback is reached.\n * @param ev The event\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/ended_event)\n */\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when an error occurs during object loading.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/error_event)\n */\n onerror: OnErrorEventHandler;\n /**\n * Fires when the object receives focus.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/focus_event)\n */\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/formdata_event) */\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/gotpointercapture_event) */\n ongotpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/input_event) */\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/invalid_event) */\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the user presses a key.\n * @param ev The keyboard event\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/keydown_event)\n */\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n /**\n * Fires when the user presses an alphanumeric key.\n * @param ev The event.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/keypress_event)\n */\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n /**\n * Fires when the user releases a key.\n * @param ev The keyboard event\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/keyup_event)\n */\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null;\n /**\n * Fires immediately after the browser loads the object.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SVGElement/load_event)\n */\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when media data is loaded at the current playback position.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/loadeddata_event)\n */\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the duration and dimensions of the media have been determined.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/loadedmetadata_event)\n */\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when Internet Explorer begins looking for media data.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/loadstart_event)\n */\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/lostpointercapture_event) */\n onlostpointercapture: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /**\n * Fires when the user clicks the object with either mouse button.\n * @param ev The mouse event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/mousedown_event)\n */\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/mouseenter_event) */\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/mouseleave_event) */\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires when the user moves the mouse over the object.\n * @param ev The mouse event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/mousemove_event)\n */\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires when the user moves the mouse pointer outside the boundaries of the object.\n * @param ev The mouse event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/mouseout_event)\n */\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires when the user moves the mouse pointer into the object.\n * @param ev The mouse event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/mouseover_event)\n */\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /**\n * Fires when the user releases a mouse button while the mouse is over the object.\n * @param ev The mouse event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/mouseup_event)\n */\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/paste_event) */\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null;\n /**\n * Occurs when playback is paused.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/pause_event)\n */\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the play method is requested.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/play_event)\n */\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the audio or video has started playing.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/playing_event)\n */\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/pointercancel_event) */\n onpointercancel: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/pointerdown_event) */\n onpointerdown: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/pointerenter_event) */\n onpointerenter: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/pointerleave_event) */\n onpointerleave: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/pointermove_event) */\n onpointermove: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/pointerout_event) */\n onpointerout: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/pointerover_event) */\n onpointerover: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/pointerup_event) */\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null;\n /**\n * Occurs to indicate progress while downloading media data.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/progress_event)\n */\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null;\n /**\n * Occurs when the playback rate is increased or decreased.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/ratechange_event)\n */\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the user resets a form.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/reset_event)\n */\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement/resize_event) */\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null;\n /**\n * Fires when the user repositions the scroll box in the scroll bar on the object.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/scroll_event)\n */\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/scrollend_event) */\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/securitypolicyviolation_event) */\n onsecuritypolicyviolation: ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any) | null;\n /**\n * Occurs when the seek operation ends.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/seeked_event)\n */\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the current playback position is moved.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/seeking_event)\n */\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Fires when the current selection changes.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLInputElement/select_event)\n */\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/selectionchange_event) */\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Node/selectstart_event) */\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLSlotElement/slotchange_event) */\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when the download has stopped.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/stalled_event)\n */\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLFormElement/submit_event) */\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null;\n /**\n * Occurs if the load operation has been intentionally halted.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/suspend_event)\n */\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs to indicate the current playback position.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/timeupdate_event)\n */\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDetailsElement/toggle_event) */\n ontoggle: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/touchcancel_event) */\n ontouchcancel?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/touchend_event) */\n ontouchend?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/touchmove_event) */\n ontouchmove?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/touchstart_event) */\n ontouchstart?: ((this: GlobalEventHandlers, ev: TouchEvent) => any) | null | undefined;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/transitioncancel_event) */\n ontransitioncancel: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/transitionend_event) */\n ontransitionend: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/transitionrun_event) */\n ontransitionrun: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/transitionstart_event) */\n ontransitionstart: ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null;\n /**\n * Occurs when the volume is changed, or playback is muted or unmuted.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/volumechange_event)\n */\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * Occurs when playback stops because the next frame of a video resource is not available.\n * @param ev The event.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLMediaElement/waiting_event)\n */\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * @deprecated This is a legacy alias of `onanimationend`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/animationend_event)\n */\n onwebkitanimationend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * @deprecated This is a legacy alias of `onanimationiteration`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/animationiteration_event)\n */\n onwebkitanimationiteration: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * @deprecated This is a legacy alias of `onanimationstart`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/animationstart_event)\n */\n onwebkitanimationstart: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /**\n * @deprecated This is a legacy alias of `ontransitionend`.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/transitionend_event)\n */\n onwebkittransitionend: ((this: GlobalEventHandlers, ev: Event) => any) | null;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/wheel_event) */\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null;\n addEventListener(type: K, listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: GlobalEventHandlers, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\n/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAllCollection) */\ninterface HTMLAllCollection {\n /**\n * Returns the number of elements in the collection.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAllCollection/length)\n */\n readonly length: number;\n /**\n * Returns the item with index index from the collection (determined by tree order).\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAllCollection/item)\n */\n item(nameOrIndex?: string): HTMLCollection | Element | null;\n /**\n * Returns the item with ID or name name from the collection.\n *\n * If there are multiple matching items, then an HTMLCollection object containing all those elements is returned.\n *\n * Only button, form, iframe, input, map, meta, object, select, and textarea elements can have a name for the purpose of this method; their name is given by the value of their name attribute.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAllCollection/namedItem)\n */\n namedItem(name: string): HTMLCollection | Element | null;\n [index: number]: Element;\n}\n\ndeclare var HTMLAllCollection: {\n prototype: HTMLAllCollection;\n new(): HTMLAllCollection;\n};\n\n/**\n * Hyperlink elements and provides special properties and methods (beyond those of the regular HTMLElement object interface that they inherit from) for manipulating the layout and presentation of such elements.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement)\n */\ninterface HTMLAnchorElement extends HTMLElement, HTMLHyperlinkElementUtils {\n /**\n * Sets or retrieves the character set used to encode the object.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/charset)\n */\n charset: string;\n /**\n * Sets or retrieves the coordinates of the object.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/coords)\n */\n coords: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/download) */\n download: string;\n /**\n * Sets or retrieves the language code of the object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/hreflang)\n */\n hreflang: string;\n /**\n * Sets or retrieves the shape of the object.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/name)\n */\n name: string;\n ping: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/referrerPolicy) */\n referrerPolicy: string;\n /**\n * Sets or retrieves the relationship between the object and the destination of the link.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/rel)\n */\n rel: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/relList) */\n readonly relList: DOMTokenList;\n /**\n * Sets or retrieves the relationship between the object and the destination of the link.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/rev)\n */\n rev: string;\n /**\n * Sets or retrieves the shape of the object.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/shape)\n */\n shape: string;\n /**\n * Sets or retrieves the window or frame at which to target content.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/target)\n */\n target: string;\n /**\n * Retrieves or sets the text of the object as a string.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/text)\n */\n text: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement/type) */\n type: string;\n addEventListener(type: K, listener: (this: HTMLAnchorElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: HTMLAnchorElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLAnchorElement: {\n prototype: HTMLAnchorElement;\n new(): HTMLAnchorElement;\n};\n\n/**\n * Provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of elements.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement)\n */\ninterface HTMLAreaElement extends HTMLElement, HTMLHyperlinkElementUtils {\n /**\n * Sets or retrieves a text alternative to the graphic.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/alt)\n */\n alt: string;\n /**\n * Sets or retrieves the coordinates of the object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/coords)\n */\n coords: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/download) */\n download: string;\n /**\n * Sets or gets whether clicks in this region cause action.\n * @deprecated\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/noHref)\n */\n noHref: boolean;\n ping: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/referrerPolicy) */\n referrerPolicy: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/rel) */\n rel: string;\n /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/relList) */\n readonly relList: DOMTokenList;\n /**\n * Sets or retrieves the shape of the object.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/shape)\n */\n shape: string;\n /**\n * Sets or retrieves the window or frame at which to target content.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement/target)\n */\n target: string;\n addEventListener(type: K, listener: (this: HTMLAreaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n removeEventListener(type: K, listener: (this: HTMLAreaElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n}\n\ndeclare var HTMLAreaElement: {\n prototype: HTMLAreaElement;\n new(): HTMLAreaElement;\n};\n\n/**\n * Provides access to the properties of