@powerlines/deepkit 0.4.88 → 0.4.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/capnp.cjs +187 -0
  2. package/dist/capnp.d.cts +169 -0
  3. package/dist/capnp.d.ts +169 -0
  4. package/dist/capnp.js +2 -0
  5. package/dist/chunk-2V4ET57D.js +6954 -0
  6. package/dist/chunk-4WJJKR53.js +3731 -0
  7. package/dist/chunk-55HOZO7D.cjs +33 -0
  8. package/dist/chunk-6ETLMANX.js +3472 -0
  9. package/dist/chunk-6OXPIOZY.cjs +43 -0
  10. package/dist/chunk-7WAH4JD3.js +115 -0
  11. package/dist/chunk-B4PTD5KQ.js +4 -0
  12. package/dist/chunk-BTXPY3B4.js +27 -0
  13. package/dist/chunk-DGXATHAN.js +5185 -0
  14. package/dist/chunk-FEBG7WWO.js +11 -0
  15. package/dist/chunk-FX2P4HL7.cjs +14 -0
  16. package/dist/chunk-ITQKPDCW.cjs +3859 -0
  17. package/dist/chunk-JHEBLHYK.cjs +13 -0
  18. package/dist/chunk-LBHO5BRF.js +2251 -0
  19. package/dist/chunk-MERFAWZE.js +12 -0
  20. package/dist/chunk-OYRIJX67.cjs +3487 -0
  21. package/dist/chunk-PANPZ6S6.cjs +6 -0
  22. package/dist/chunk-QPSZUUB6.cjs +2259 -0
  23. package/dist/chunk-QQ7GKXIS.js +43 -0
  24. package/dist/chunk-SA3DCC4M.cjs +6968 -0
  25. package/dist/chunk-SKYW5GV2.cjs +5251 -0
  26. package/dist/chunk-U4JSDAXK.js +36 -0
  27. package/dist/chunk-WVKPC33H.cjs +49 -0
  28. package/dist/{vendor/chunk-KC74I2LN.cjs → chunk-YKFG2BZQ.cjs} +3 -5
  29. package/dist/index.cjs +242 -0
  30. package/dist/index.d.cts +15 -0
  31. package/dist/index.d.ts +15 -0
  32. package/dist/index.js +11 -0
  33. package/dist/reflect-type.cjs +11 -0
  34. package/dist/reflect-type.d.cts +16 -0
  35. package/dist/reflect-type.d.ts +16 -0
  36. package/dist/reflect-type.js +2 -0
  37. package/dist/reflection-DTM1oT21.d.cts +1559 -0
  38. package/dist/reflection-DTM1oT21.d.ts +1559 -0
  39. package/dist/resolve-reflections.cjs +11 -0
  40. package/dist/resolve-reflections.d.cts +11 -0
  41. package/dist/resolve-reflections.d.ts +11 -0
  42. package/dist/resolve-reflections.js +2 -0
  43. package/dist/transformer.cjs +15 -0
  44. package/dist/transformer.d.cts +22 -0
  45. package/dist/transformer.d.ts +22 -0
  46. package/dist/transformer.js +2 -0
  47. package/dist/transpile.cjs +12 -0
  48. package/dist/transpile.d.cts +14 -0
  49. package/dist/transpile.d.ts +14 -0
  50. package/dist/transpile.js +3 -0
  51. package/dist/types.cjs +5 -0
  52. package/dist/types.d.cts +16 -0
  53. package/dist/types.d.ts +16 -0
  54. package/dist/types.js +2 -0
  55. package/dist/utilities.cjs +35 -0
  56. package/dist/utilities.d.cts +49 -0
  57. package/dist/utilities.d.ts +49 -0
  58. package/dist/utilities.js +2 -0
  59. package/dist/vendor/{chunk-6PEHRAEP.js → chunk-5BKT4CS5.js} +0 -2
  60. package/dist/vendor/{chunk-W6QNYN5U.cjs → chunk-BDXVTHBY.cjs} +176 -178
  61. package/dist/vendor/{chunk-AXYJRGEC.js → chunk-BLN7QVCP.js} +1 -3
  62. package/dist/vendor/{chunk-ORGCWC7F.js → chunk-BR2FK5K7.js} +0 -2
  63. package/dist/vendor/chunk-EQXMWOHO.cjs +115 -0
  64. package/dist/vendor/{chunk-WC6RQSKU.js → chunk-MCNMRQDT.js} +4 -6
  65. package/dist/vendor/{chunk-3QJYIKMR.cjs → chunk-MO4O4UYI.cjs} +0 -2
  66. package/dist/vendor/{chunk-3QJOOLWF.js → chunk-RH4YMONA.js} +4 -6
  67. package/dist/vendor/{chunk-AWYTRD4Y.cjs → chunk-RZKB5IQZ.cjs} +4 -6
  68. package/dist/vendor/{chunk-BSDR5HAD.cjs → chunk-WOXMCJJU.cjs} +508 -510
  69. package/dist/vendor/compiler.cjs +12 -14
  70. package/dist/vendor/compiler.js +2 -4
  71. package/dist/vendor/config.cjs +9 -11
  72. package/dist/vendor/config.js +2 -4
  73. package/dist/vendor/core.cjs +130 -132
  74. package/dist/vendor/core.d.cts +0 -2
  75. package/dist/vendor/core.d.ts +0 -2
  76. package/dist/vendor/core.js +5 -4
  77. package/dist/vendor/index.cjs +19 -21
  78. package/dist/vendor/index.js +5 -7
  79. package/dist/vendor/type-compiler/compiler.cjs +46 -0
  80. package/dist/vendor/type-compiler/compiler.d.cts +1 -0
  81. package/dist/vendor/type-compiler/compiler.d.ts +1 -0
  82. package/dist/vendor/type-compiler/compiler.js +7 -0
  83. package/dist/vendor/type-compiler/config.cjs +36 -0
  84. package/dist/vendor/type-compiler/config.d.cts +6 -0
  85. package/dist/vendor/type-compiler/config.d.ts +6 -0
  86. package/dist/vendor/type-compiler/config.js +5 -0
  87. package/dist/vendor/type-compiler/index.cjs +108 -0
  88. package/dist/vendor/type-compiler/index.d.cts +1 -0
  89. package/dist/vendor/type-compiler/index.d.ts +1 -0
  90. package/dist/vendor/type-compiler/index.js +67 -0
  91. package/dist/vendor/type-spec.cjs +5 -7
  92. package/dist/vendor/type-spec.js +5 -4
  93. package/dist/vendor/type.cjs +691 -2271
  94. package/dist/vendor/type.js +92 -1609
  95. package/package.json +4 -4
  96. package/dist/vendor/chunk-3QJOOLWF.js.map +0 -1
  97. package/dist/vendor/chunk-3QJYIKMR.cjs.map +0 -1
  98. package/dist/vendor/chunk-6PEHRAEP.js.map +0 -1
  99. package/dist/vendor/chunk-AWYTRD4Y.cjs.map +0 -1
  100. package/dist/vendor/chunk-AXYJRGEC.js.map +0 -1
  101. package/dist/vendor/chunk-BSDR5HAD.cjs.map +0 -1
  102. package/dist/vendor/chunk-KC74I2LN.cjs.map +0 -1
  103. package/dist/vendor/chunk-ORGCWC7F.js.map +0 -1
  104. package/dist/vendor/chunk-W6QNYN5U.cjs.map +0 -1
  105. package/dist/vendor/chunk-WC6RQSKU.js.map +0 -1
  106. package/dist/vendor/compiler.cjs.map +0 -1
  107. package/dist/vendor/compiler.js.map +0 -1
  108. package/dist/vendor/config.cjs.map +0 -1
  109. package/dist/vendor/config.js.map +0 -1
  110. package/dist/vendor/core.cjs.map +0 -1
  111. package/dist/vendor/core.js.map +0 -1
  112. package/dist/vendor/index.cjs.map +0 -1
  113. package/dist/vendor/index.js.map +0 -1
  114. package/dist/vendor/type-spec.cjs.map +0 -1
  115. package/dist/vendor/type-spec.js.map +0 -1
  116. package/dist/vendor/type.cjs.map +0 -1
  117. package/dist/vendor/type.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../../../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../../../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/changes.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/debug.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/decorator-builder.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/core.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/decorator.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/reflection/extends.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/reflection/state.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/reflection/processor.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/inheritance.ts","../../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/regex.js","../../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/validate.js","../../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/.pnpm/uuid@8.3.2/node_modules/uuid/dist/esm-browser/v4.js","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/utils.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/type-serialization.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/reflection/reflection.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/reflection/type.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/reference.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/typeguard.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/validator.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/validators.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/serializer.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/snapshot.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/change-detector.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/default.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/mixin.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/path.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/registry.ts","../../../../node_modules/.pnpm/@deepkit+type@1.0.5_patch_hash=b2d2ba2e4ddca11757d65b5c17ef456439accd6f1b86325f0a81d5ff_9c5066bcad2b41c430f9fe2a690de22b/node_modules/@deepkit/type/src/serializer-facade.ts"],"names":["exports","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","Uint8Array","Array","code","i","len","length","charCodeAt","getLens","b64","Error","validLen","indexOf","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","push","join","extraBytes","parts","maxChunkLength","len2","read","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","NaN","Infinity","Math","pow","write","value","c","rt","abs","isNaN","floor","log","LN2","base64","require","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","console","error","proto","foo","Object","setPrototypeOf","prototype","defineProperty","enumerable","get","isBuffer","undefined","byteOffset","createBuffer","RangeError","buf","arg","encodingOrOffset","TypeError","allocUnsafe","from","poolSize","fromString","ArrayBuffer","isView","fromArrayView","isInstance","fromArrayBuffer","SharedArrayBuffer","valueOf","b","fromObject","toPrimitive","assertSize","size","alloc","fill","encoding","checked","allocUnsafeSlow","string","isEncoding","actual","slice","fromArrayLike","array","arrayView","copy","obj","numberIsNaN","type","isArray","data","toString","_isBuffer","compare","a","x","y","min","String","toLowerCase","concat","list","pos","set","call","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","swap16","swap32","swap64","apply","toLocaleString","equals","inspect","str","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","j","includes","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","_arr","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","fromCharCode","ret","out","hexSliceLookupTable","bytes","newBuf","subarray","checkOffset","ext","readUintLE","readUIntLE","noAssert","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUintLE","writeUIntLE","maxBytes","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","checkIEEE754","writeFloat","littleEndian","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","base64clean","split","units","leadSurrogate","byteArray","hi","lo","src","dst","name","alphabet","table","i16","fn","collapse","args","UnpopulatedCheck","TDecorator","validators","serializer","EntityDecorator","__assignType","t","pack","Loop","ref","add","result","defaultValue","isOptional","handleUnion","getRandomValues","rnds8","rng","crypto","bind","msCrypto","validate","uuid","REGEX","test","byteToHex","stringify","v4","options","rnds","random","entity","state","typeState","__\\u03A9ClassType","ReflectionVisibility","ReflectionKind","User","hasStack","index","jit","manual","_a","_b","ValidationError","_c","_d","guard","embedded","lines","v","reflection","SnapshotSerializer","deserialize","patch","serialize"],"mappings":"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","file":"type.js","sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport { empty } from '@deepkit/core';\n\nexport type NumberFields<T> = { [K in keyof T]: T[K] extends number | bigint ? K : never }[keyof T]\nexport type Expression<T> = { [P in keyof T & string]?: string; }\nexport type Partial<T> = { [P in keyof T & string]?: T[P] }\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P]\n} & { [deepPath: string]: any };\n\nexport interface ChangesInterface<T> {\n $set?: DeepPartial<T> | T;\n $unset?: { [path: string]: number };\n $inc?: Partial<Pick<T, NumberFields<T>>>;\n}\n\nexport class Changes<T extends object> {\n $set?: DeepPartial<T> | T;\n $unset?: { [path: string]: number };\n $inc?: Partial<Pick<T, NumberFields<T>>>;\n empty = true;\n\n fieldNames: string[] = [];\n\n constructor(\n changes?: ChangesInterface<T>\n ) {\n if (changes) {\n this.$set = empty(changes.$set) ? undefined : changes.$set;\n this.$unset = empty(changes.$unset) ? undefined : changes.$unset;\n this.$inc = empty(changes.$inc) ? undefined : changes.$inc;\n this.detectEmpty();\n }\n }\n\n clear(): void {\n this.empty = true;\n this.$set = undefined;\n this.$unset = undefined;\n this.$inc = undefined;\n }\n\n getReturning(): string[] {\n const names: string[] = [];\n\n if (this.$inc) {\n for (const i in this.$inc) if (this.$inc.hasOwnProperty(i)) names.push(i);\n }\n\n return names;\n }\n\n protected detectEmpty() {\n this.empty = this.$set === undefined && this.$unset === undefined && this.$inc === undefined;\n }\n\n replaceSet($set: DeepPartial<T> | T) {\n this.$set = empty($set) ? undefined : $set;\n for (const i in $set as any) {\n if (!this.fieldNames.includes(i)) this.fieldNames.push(i);\n }\n this.detectEmpty();\n }\n\n mergeSet($set: Partial<T> | T) {\n if (empty($set)) return;\n\n if (!this.$set) this.$set = {};\n for (const i in $set as any) {\n if (!this.fieldNames.includes(i)) this.fieldNames.push(i);\n (this.$set as any)[i] = ($set as any)[i];\n }\n this.detectEmpty();\n }\n\n increase(property: NumberFields<T>, increase: number = 1) {\n if (!this.$inc) this.$inc = {};\n (this.$inc as any)[property] = increase;\n if ('string' === typeof property && !this.fieldNames.includes(property)) this.fieldNames.push(property);\n this.empty = false;\n }\n\n set(property: keyof T & string, value: any) {\n if (!this.$set) this.$set = {};\n (this.$set as any)[property] = value;\n if ('string' === typeof property && !this.fieldNames.includes(property)) this.fieldNames.push(property);\n this.empty = false;\n }\n\n unset(property: keyof T & string, unset = true) {\n if (!this.$unset) this.$unset = {};\n (this.$unset as any)[property] = unset;\n if ('string' === typeof property && !this.fieldNames.includes(property)) this.fieldNames.push(property);\n this.empty = false;\n }\n\n has(name: keyof T & string): boolean {\n return Boolean((this.$set && name in this.$set) || (this.$unset && name in this.$unset) || (this.$inc && name in this.$inc));\n }\n}\n\nexport class ItemChanges<T extends object> extends Changes<T> {\n constructor(\n changes: ChangesInterface<T> = {},\n protected item: T\n ) {\n super(changes);\n }\n\n increase(property: NumberFields<T>, increase: number = 1) {\n super.increase(property, increase);\n (this.item as any)[property] += increase;\n }\n\n set(property: keyof T & string, value: any) {\n super.set(property, value);\n (this.item as any)[property] = value;\n }\n\n unset(property: keyof T & string, unset: boolean = true) {\n super.unset(property, unset);\n (this.item as any)[property] = undefined;\n }\n}\n\nexport const changeSetSymbol = Symbol('changeSet');\n\nexport class AtomicChangeInstance<T extends object> {\n public readonly changeSet: Changes<T> = new Changes<T>();\n\n constructor(protected object: any) {\n this.changeSet.$inc = {};\n (object as any)[changeSetSymbol] = this.changeSet;\n }\n\n increase(property: NumberFields<T>, increase: number = 1) {\n this.object[property] += increase;\n this.changeSet.increase(property, increase);\n }\n}\n\nexport function atomicChange<T extends object>(object: T) {\n return new AtomicChangeInstance<T>(object);\n}\n","export function isDebug(level: number = 1) {\n const expected = 'deepkit' + (level > 1 ? '+'.repeat(level - 1) : '');\n return 'undefined' !== typeof process && 'string' === typeof process.env.DEBUG && process.env.DEBUG.includes(expected);\n}\n\n/**\n * First level debugging with DEBUG=deepkit\n */\nexport function debug(...message: any[]): void {\n if (isDebug(1)) {\n console.debug(...message);\n }\n}\n\n/**\n * Second level debugging with DEBUG=deepkit+\n */\nexport function debug2(...message: any[]): void {\n if (isDebug(2)) {\n console.debug(...message);\n }\n}\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport { AbstractClassType, ClassType, getClassName } from '@deepkit/core';\n\nexport type ClassDecoratorFn = (classType: AbstractClassType, property?: string, parameterIndexOrDescriptor?: any) => void;\nexport type PropertyDecoratorFn = (prototype: object, property?: number | string | symbol, parameterIndexOrDescriptor?: any) => void;\n\nexport type FluidDecorator<T, D extends Function> = {\n [name in keyof T]: T[name] extends (...args: infer K) => any ? (...args: K) => D & FluidDecorator<T, D>\n : D & FluidDecorator<T, D>\n & { _data: ExtractApiDataType<T> };\n};\n\nexport function createFluidDecorator<API extends APIClass<any> | APIProperty<any>, D extends Function>\n(\n api: API,\n modifier: { name: string, args?: any, Ω?: any }[],\n collapse: (modifier: { name: string, args?: any }[], target: any, property?: string, parameterIndexOrDescriptor?: any) => void,\n returnCollapse: boolean = false,\n fluidFunctionSymbol?: symbol\n): FluidDecorator<ExtractClass<API>, D> {\n const fn = function (target: object, property?: string, parameterIndexOrDescriptor?: any) {\n const res = collapse(modifier, target, property, parameterIndexOrDescriptor);\n if (returnCollapse || target === Object) return res;\n };\n Object.defineProperty(fn, 'name', { value: undefined });\n Object.defineProperty(fn, '_data', {\n get: () => {\n return collapse(modifier, Object);\n }\n });\n\n const methods: string[] = [];\n Object.defineProperty(fn, '_methods', { value: methods });\n if (fluidFunctionSymbol) Object.defineProperty(fn, fluidFunctionSymbol, { value: true });\n\n let current = api;\n while (current.prototype) {\n let proto = current.prototype;\n for (const name of Object.getOwnPropertyNames(proto)) {\n if (name === 'constructor') continue;\n if (name === 'onDecorator') continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(proto, name);\n methods.push(name);\n if (descriptor && descriptor.get) {\n //its a magic shizzle\n Object.defineProperty(fn, name, {\n configurable: true,\n enumerable: false,\n get: () => {\n return createFluidDecorator(api, [...modifier, { name }], collapse, returnCollapse, fluidFunctionSymbol);\n }\n });\n } else {\n //regular method\n Object.defineProperty(fn, name, {\n configurable: true,\n enumerable: false,\n value: function fn(...args: any[]) {\n return createFluidDecorator(api, [...modifier, { name, args, Ω: (fn as any).Ω }], collapse, returnCollapse, fluidFunctionSymbol);\n }\n });\n }\n }\n\n //resolve parent\n current = Object.getPrototypeOf(current);\n }\n\n return fn as any;\n}\n\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\nexport type Merge<U> = { [K in keyof U]: U[K] extends ((...a: infer A) => infer R) ? R extends DualDecorator ? (...a: A) => PropertyDecoratorFn & R & U : (...a: A) => R : never };\n\n/**\n * A dual decorator is a decorator that can be used on a class and class property.\n */\nexport type DualDecorator = void & { __DualDecorator?: true };\n\nexport function mergeDecorator<T extends any[]>(...args: T): Merge<Omit<UnionToIntersection<T[number]>, '_fetch' | 't'>> {\n const res: any = {};\n\n //dual decorator are decorators that share the same name for class decorators and class property decorator\n //and need a special runtime check when collapsed.\n const tracked: string[] = [];\n const dualDecorator: string[] = [];\n\n for (const arg of args) {\n for (const method of arg._methods) {\n if (tracked.includes(method)) {\n if (!dualDecorator.includes(method)) dualDecorator.push(method);\n continue;\n }\n tracked.push(method);\n }\n }\n\n for (const arg of args) {\n for (const method of arg._methods) {\n if (!dualDecorator.includes(method)) {\n Object.defineProperty(res, method, {\n get() {\n return arg[method];\n }\n });\n }\n }\n }\n\n function fluid(\n modifier: { name: string, args?: any, Ω?: any }[],\n collapse: (modifier: { name: string, args?: any }[], target: any, property?: string, parameterIndexOrDescriptor?: any) => void,\n ): any {\n const fn = function (target: object, property?: string, parameterIndexOrDescriptor?: any) {\n const res = collapse(modifier, target, property, parameterIndexOrDescriptor);\n if (target === Object) return res;\n };\n Object.defineProperty(fn, 'name', { value: undefined });\n\n for (const name of tracked) {\n const decorator = args.find(v => v[name]);\n if (!decorator) continue;\n const descriptor = Object.getOwnPropertyDescriptor(decorator, name);\n if (descriptor && descriptor.get) {\n //its a magic shizzle\n Object.defineProperty(fn, name, {\n configurable: true,\n enumerable: false,\n get: () => {\n return fluid([...modifier, { name }], collapse);\n }\n });\n } else {\n //regular method\n Object.defineProperty(fn, name, {\n configurable: true,\n enumerable: false,\n value: function fn(...args: any[]) {\n return fluid([...modifier, { name, args, Ω: (fn as any).Ω }], collapse);\n }\n });\n }\n }\n return fn;\n }\n\n function collapse(modifier: { name: string, args?: any, Ω?: any }[], target: object, property?: string, parameterIndexOrDescriptor?: any) {\n const results: any[] = [];\n if (property) {\n loop:\n for (const mod of modifier) {\n for (const decorator of args) {\n if (decorator._type === 'propertyDecorator' && decorator[mod.name]) {\n if (mod.args) {\n (decorator[mod.name] as any).Ω = mod.Ω;\n results.push(decorator[mod.name](...mod.args)(target, property, parameterIndexOrDescriptor));\n } else {\n results.push(decorator[mod.name](target, property, parameterIndexOrDescriptor));\n }\n continue loop;\n }\n }\n throw new Error(`Decorator '${mod.name}' can not be used on class property ${getClassName(target)}.${property}`);\n }\n } else {\n loop:\n for (const mod of modifier) {\n for (const decorator of args) {\n if (decorator._type === 'classDecorator' && decorator[mod.name]) {\n if (mod.args) {\n (decorator[mod.name] as any).Ω = mod.Ω;\n results.push(decorator[mod.name](...mod.args)(target));\n } else {\n results.push(decorator[mod.name](target));\n }\n continue loop;\n }\n }\n\n throw new Error(`Decorator '${mod.name}' can not be used on class ${getClassName(target)}`);\n }\n }\n return results;\n }\n\n return fluid([], collapse);\n}\n\nexport interface ClassApiTypeInterface<T> {\n t: T,\n onDecorator?: (classType: ClassType, property?: string, parameterIndexOrDescriptor?: any) => void\n}\n\nexport type APIClass<T> = ClassType<ClassApiTypeInterface<T>>;\nexport type ExtractClass<T> = T extends ClassType<infer K> ? K : never;\nexport type ExtractApiDataType<T> = T extends AbstractClassType<infer K> ? K extends { t: infer P } ? P : never : (T extends { t: infer P } ? P : never);\n\nexport type ClassDecoratorResult<API extends APIClass<any>> = FluidDecorator<ExtractClass<API>, ClassDecoratorFn> & DecoratorAndFetchSignature<API, ClassDecoratorFn>;\n\nexport function createClassDecoratorContext<API extends APIClass<any>, T = ExtractApiDataType<API>>(\n apiType: API\n): ClassDecoratorResult<API> {\n const map = new Map<object, ClassApiTypeInterface<any>>();\n\n function collapse(modifier: { name: string, args?: any, Ω?: any }[], target: ClassType): any {\n const api: ClassApiTypeInterface<any> = map.get(target) ?? new apiType(target);\n\n for (const fn of modifier) {\n if (fn.args) {\n const f = (api as any)[fn.name];\n f.Ω = fn.Ω;\n f.call(api, ...fn.args);\n } else {\n //just call the getter\n (api as any)[fn.name];\n }\n }\n\n if (api.onDecorator) api.onDecorator(target);\n\n map.set(target, api);\n if (target === Object) return api.t;\n }\n\n const fn = createFluidDecorator(apiType, [], collapse);\n\n Object.defineProperty(fn, '_fetch', {\n configurable: true,\n enumerable: false,\n get: () => {\n return (target: object) => {\n const api = map.get(target);\n return api ? api.t : undefined;\n };\n }\n });\n\n (fn as any)._type = 'classDecorator';\n return fn as any;\n}\n\nexport interface PropertyApiTypeInterface<T> {\n t: T,\n onDecorator?: (target: ClassType, property: string | undefined, parameterIndexOrDescriptor?: any) => void\n}\n\nexport type APIProperty<T> = ClassType<PropertyApiTypeInterface<T>>;\n\nexport type DecoratorAndFetchSignature<API extends APIProperty<any>, FN extends (...args: any[]) => any> = & FN\n & { _fetch: (...args: Parameters<FN>) => ExtractApiDataType<API> | undefined };\n\nexport type PropertyDecoratorResult<API extends APIProperty<any>> = FluidDecorator<ExtractClass<API>, PropertyDecoratorFn> & DecoratorAndFetchSignature<API, PropertyDecoratorFn>;\n\nexport function createPropertyDecoratorContext<API extends APIProperty<any>>(\n apiType: API\n): PropertyDecoratorResult<API> {\n const targetMap = new Map<object, Map<any, PropertyApiTypeInterface<any>>>();\n\n function collapse(modifier: { name: string, args?: any, Ω?: any }[], target: object, property?: string, parameterIndexOrDescriptor?: any): any {\n if (property === undefined && parameterIndexOrDescriptor === undefined) throw new Error('Property decorators can only be used on class properties');\n\n target = target === Object ? target : (target as any)['constructor']; //property decorators get the prototype instead of the class.\n let map = targetMap.get(target);\n if (!map) {\n map = new Map();\n targetMap.set(target, map);\n }\n const secondIndex = ('number' === typeof parameterIndexOrDescriptor ? parameterIndexOrDescriptor : '');\n const index = (property || 'constructor') + '$$' + secondIndex;\n const api: PropertyApiTypeInterface<any> = map.get(index) ?? new apiType(target, property || 'constructor');\n\n for (const fn of modifier) {\n if (fn.args) {\n const f = (api as any)[fn.name];\n f.Ω = fn.Ω;\n f.call(api, ...fn.args);\n } else {\n //just call the getter\n (api as any)[fn.name];\n }\n }\n\n if (api.onDecorator) api.onDecorator(target as ClassType, property, ('number' === typeof parameterIndexOrDescriptor ? parameterIndexOrDescriptor : undefined));\n\n map.set(index, api);\n if (target === Object) return api.t;\n }\n\n const fn = createFluidDecorator(apiType, [], collapse);\n\n Object.defineProperty(fn, '_fetch', {\n configurable: true,\n enumerable: false,\n get: () => {\n return (target: object, property?: string, parameterIndexOrDescriptor?: any) => {\n const map = targetMap.get(target);\n const secondIndex = ('number' === typeof parameterIndexOrDescriptor ? parameterIndexOrDescriptor : '');\n const index = property + '$$' + secondIndex;\n const api = map ? map.get(index) : undefined;\n return api ? api.t : undefined;\n };\n }\n });\n\n (fn as any)._type = 'propertyDecorator';\n return fn as any;\n}\n\nexport type FreeDecoratorFn<API> =\n { (target?: any, property?: number | string | symbol, parameterIndexOrDescriptor?: any): ExtractApiDataType<API> }\n & { _data: ExtractApiDataType<API> };\n\nexport type FreeFluidDecorator<API> = {\n [name in keyof ExtractClass<API>]: ExtractClass<API>[name] extends (...args: infer K) => any\n ? (...args: K) => FreeFluidDecorator<API>\n : FreeFluidDecorator<API>\n} & FreeDecoratorFn<API>;\n\nexport type FreeDecoratorResult<API extends APIClass<any>> = FreeFluidDecorator<API> & { _fluidFunctionSymbol: symbol };\n\nexport function createFreeDecoratorContext<API extends APIClass<any>, T = ExtractApiDataType<API>>(\n apiType: API\n): FreeDecoratorResult<API> {\n function collapse(modifier: { name: string, args?: any, Ω?: any }[], target?: any, property?: string, parameterIndexOrDescriptor?: any) {\n const api = new apiType;\n\n for (const fn of modifier) {\n if (fn.args) {\n const f = (api as any)[fn.name];\n f.Ω = fn.Ω;\n f.call(api, ...fn.args);\n } else {\n //just call the getter\n (api as any)[fn.name];\n }\n }\n\n if (api.onDecorator && target) api.onDecorator(target, property, parameterIndexOrDescriptor);\n\n return api.t;\n }\n\n const fluidFunctionSymbol = Symbol('fluidFunctionSymbol');\n\n const fn = createFluidDecorator(apiType, [], collapse, true, fluidFunctionSymbol);\n\n Object.defineProperty(fn, '_fluidFunctionSymbol', {\n configurable: true,\n enumerable: false,\n value: fluidFunctionSymbol\n });\n\n return fn as any;\n}\n\nexport function isDecoratorContext<API extends APIClass<any>>(context: FreeDecoratorResult<API>, fn: Function): fn is FreeFluidDecorator<API> {\n const symbol = context._fluidFunctionSymbol;\n\n if (Object.getOwnPropertyDescriptor(fn, symbol)) return true;\n\n return false;\n}\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport { ClassType } from \"@deepkit/core\";\nimport { Buffer } from \"buffer\";\n\n//on unpopulated properties access\nexport enum UnpopulatedCheck {\n None, //returns undefined\n Throw, //throws regular error\n ReturnSymbol //returns `unpopulatedSymbol`\n}\n\nexport const unpopulatedSymbol = Symbol(\"unpopulated\");\n\nexport interface TypeSettings {\n registeredEntities: { [name: string]: ClassType };\n unpopulatedCheck: UnpopulatedCheck;\n}\n\nexport const typeSettings: TypeSettings = {\n registeredEntities: {},\n unpopulatedCheck: UnpopulatedCheck.Throw\n};\n\nexport interface TypedArrayClassType<T> {\n new (...args: any[]): T;\n\n readonly BYTES_PER_ELEMENT: number;\n}\n\nexport interface TypedArray {\n /**\n * The size in bytes of each element in the array.\n */\n readonly BYTES_PER_ELEMENT: number;\n\n /**\n * The ArrayBuffer instance referenced by the array.\n */\n readonly buffer: ArrayBufferLike;\n\n /**\n * The length of the array.\n */\n readonly length: number;\n\n /**\n * The length in bytes of the array.\n */\n readonly byteLength: number;\n\n /**\n * The offset in bytes of the array.\n */\n readonly byteOffset: number;\n}\n\nexport function nodeBufferToTypedArray<K>(\n buf: Buffer,\n type: TypedArrayClassType<K>\n): K {\n return new type(\n buf.buffer,\n buf.byteOffset,\n buf.length / type.BYTES_PER_ELEMENT\n );\n}\n\n/**\n * This function is only used in browser context, where atob is actually faster than\n * using `Buffer.from` by the `buffer.js` library.\n */\nfunction base64ToUint8ArrayAtoB(base64: string): Uint8Array {\n const raw = atob(base64);\n const rawLength = raw.length;\n const array = new Uint8Array(new ArrayBuffer(rawLength));\n\n for (let i = 0; i < rawLength; i++) {\n array[i] = raw.charCodeAt(i);\n }\n return array;\n}\n\n/**\n * When using Buffer.from() node is using a buffer from the buffer pool.\n * This makes it necessary to create the given TypedArray using byteOffset and byteLength accordingly.\n *\n * Note: The created TypedArray.buffer is pointing probably to a larger Buffer. Make sure\n * to use byteLength/byeOffset correctly or use typedArrayToArrayBuffer() if you want to use\n * a raw ArrayBuffer that represents the actual data correctly.\n */\nexport function base64ToTypedArray<K>(\n base64: string,\n type: TypedArrayClassType<K>\n): K {\n if (\"function\" === typeof atob) {\n return new type(base64ToUint8ArrayAtoB(base64).buffer);\n }\n\n return nodeBufferToTypedArray(Buffer.from(base64, \"base64\"), type);\n}\n\n/**\n * Creates a new fresh ArrayBuffer with given data.\n * Note: Regular Buffer.from(base64, 'base64) creates in Node a shared buffer, this function makes\n * sure a copy happens and the ArrayBuffer is not shared.\n */\nexport function base64ToArrayBuffer(base64: string): ArrayBuffer {\n if (\"function\" === typeof atob) {\n return base64ToUint8ArrayAtoB(base64).buffer as ArrayBuffer;\n }\n\n return nodeBufferToArrayBuffer(Buffer.from(base64, \"base64\"));\n}\n\n/**\n * When using Buffer.from() node is using a buffer from the buffer pool.\n * This makes it necessary to create the a new ArrayType using slice to make a copy.\n *\n * This makes a copy.\n */\nexport function nodeBufferToArrayBuffer<K>(\n buf: Uint8Array | ArrayBuffer\n): ArrayBuffer {\n if (ArrayBuffer.isView(buf))\n return buf.buffer.slice(\n buf.byteOffset,\n buf.byteOffset + buf.byteLength\n ) as ArrayBuffer;\n return buf;\n}\n\n/**\n * In node environment the TypedArray.buffer is probably a larger buffer from the buffer pool.\n * This makes it necessary to create a Buffer with offset & length so that it accurately represents\n * the given TypedArray.\n */\nexport function typedArrayToBuffer<K>(typedArray: TypedArray): Buffer {\n if (typedArray instanceof Buffer) return typedArray;\n return Buffer.from(\n typedArray.buffer,\n typedArray.byteOffset,\n typedArray.byteLength\n );\n}\n\nexport function arrayBufferToBase64(arrayBuffer: ArrayBuffer): string {\n return Buffer.from(arrayBuffer).toString(\"base64\");\n}\n\nexport function typedArrayToBase64(typedArray: TypedArray): string {\n return typedArrayToBuffer(typedArray).toString(\"base64\");\n}\n\n/**\n * Same as Buffer.from() but creates a ArrayBuffer that is not shared.\n */\nexport function arrayBufferFrom(data: string, encoding?: string): ArrayBuffer {\n return nodeBufferToArrayBuffer(Buffer.from(data, encoding as any));\n}\n\n/**\n * Same as Buffer.from(arrayBuffer).toString(encoding), but more in line with the current API.\n */\nexport function arrayBufferTo(\n arrayBuffer: ArrayBuffer,\n encoding?: string | \"utf8\" | \"base64\" | \"ascii\"\n) {\n return Buffer.from(arrayBuffer).toString(encoding as any);\n}\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport { ClassDecoratorResult, createClassDecoratorContext, createPropertyDecoratorContext } from './decorator-builder.js';\nimport { EntityData, ReceiveType, SerializerFn, TData } from './reflection/reflection.js';\nimport { ClassType, isArray } from '@deepkit/core';\nimport { IndexOptions } from './reflection/type.js';\nimport type { ValidateFunction } from './validator.js';\nimport { typeSettings } from './core.js';\n\nclass TDecorator {\n t = new TData();\n\n onDecorator(target: any, property?: string, parameterIndexOrDescriptor?: any) {\n if (undefined === target) return;\n\n addDeferredDecorator(this.t, target, property, parameterIndexOrDescriptor);\n }\n\n type<T>(type: ReceiveType<T> | ClassType) {\n this.t.type = type;\n }\n\n /**\n * Marks the method as validator. Is executed for each is/validate call.\n *\n * ```typescript\n *\n * class MyClass {\n * field1: string;\n * field2: string;\n *\n * @t.validator\n * validate(): ValidatorError | undefined {\n * return new ValidatorError('invalid', 'MyClass is invalid');\n * }\n * }\n *\n * ```\n */\n get validator() {\n this.t.validator = true;\n return;\n }\n\n validate(...validators: ValidateFunction[]) {\n this.t.validators.push(...validators);\n }\n\n serialize(serializer: SerializerFn) {\n this.t.serializer = serializer;\n }\n\n deserialize(deserializer: SerializerFn) {\n this.t.deserializer = deserializer;\n }\n\n data(name: string, value: any) {\n this.t.data[name] = value;\n }\n}\n\nexport const t = createPropertyDecoratorContext(TDecorator);\n\nclass EntityDecorator {\n t = new EntityData();\n\n onDecorator(target: any) {\n if (undefined === target) return;\n if (this.t.name) typeSettings.registeredEntities[this.t.name] = target;\n addDeferredDecorator(this.t, target);\n }\n\n name(name: string) {\n this.t.name = name;\n }\n\n collection(name: string) {\n this.t.collectionName = name;\n }\n\n /**\n * Disables calling the constructor when deserializing.\n */\n disableConstructor() {\n this.t.disableConstructor = true;\n }\n\n databaseSchema(name: string) {\n this.t.databaseSchemaName = name;\n }\n\n index(names: string[], options: IndexOptions = {}) {\n this.t.indexes.push({ names, options });\n }\n\n singleTableInheritance() {\n this.t.singleTableInheritance = true;\n }\n\n data(name: string, value: any) {\n this.t.data[name] = value;\n }\n\n /**\n * Exclude this entity from database migrations.\n */\n excludeMigration() {\n this.t.data['excludeMigration'] = true;\n }\n}\n\nexport const entity: ClassDecoratorResult<typeof EntityDecorator> = createClassDecoratorContext(EntityDecorator);\n\ninterface DeferredDecorator {\n data: any;\n target: any;\n property?: string;\n parameterIndexOrDescriptor?: any;\n}\n\nexport function isWithDeferredDecorators(obj: any): obj is { __decorators: DeferredDecorator[] } {\n return obj && '__decorators' in obj && isArray(obj.__decorators);\n}\n\nfunction addDeferredDecorator(data: any, target: any, property?: string, parameterIndexOrDescriptor?: any) {\n if (!target) return;\n if (!target.__decorators) target.__decorators = [];\n target.__decorators.push({ target, property, parameterIndexOrDescriptor, data });\n}\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport {\n addType,\n emptyObject,\n flatten,\n getTypeJitContainer,\n indexAccess,\n isMember,\n isOptional,\n isPrimitive,\n isType,\n isTypeIncluded,\n ReflectionKind,\n resolveTypeMembers,\n stringifyType,\n Type,\n TypeAny,\n TypeCallSignature,\n TypeFunction,\n TypeInfer,\n TypeLiteral,\n TypeMethod,\n TypeMethodSignature,\n TypeNumber,\n TypeObjectLiteral,\n TypeParameter,\n TypePromise,\n TypeString,\n TypeTemplateLiteral,\n TypeTuple,\n TypeUnion,\n} from './type.js';\nimport { isPrototypeOfBase } from '@deepkit/core';\nimport { typeInfer } from './processor.js';\n\ntype AssignableType = Type | string | boolean | number | symbol | bigint | undefined | null;\n\ntype StackEntry = {\n left: Type,\n right: Type,\n}\n\nfunction hasStack(extendStack: StackEntry[], left: Type, right: Type): boolean {\n for (const entry of extendStack) {\n if (entry.left === left && entry.right === right) return true;\n }\n return false;\n}\n\n/**\n * The check of `extends` in Typescript. This function can be read as `left extends right`.\n *\n * See https://www.typescriptlang.org/docs/handbook/type-compatibility.html#any-unknown-object-void-undefined-null-and-never-assignability\n * This algo follows strict mode.\n *\n * Warning: If you do not pass Type objects, typeInfer() is used which does not use cache (it is designed to be called withing type processor)\n */\nexport function isExtendable(leftValue: AssignableType, rightValue: AssignableType, extendStack: StackEntry[] = []): boolean {\n const start = Date.now();\n const right: Type = isType(rightValue) ? rightValue : typeInfer(rightValue);\n const left: Type = isType(leftValue) ? leftValue : typeInfer(leftValue);\n\n const valid = _isExtendable(left, right, extendStack);\n const took = Date.now() - start;\n\n if (took > 100) {\n console.warn('isExtendable took very long', Date.now() - start, 'ms comparing', stringifyType(left), 'and', stringifyType(right));\n }\n\n return valid;\n}\n\nfunction isFunctionLike(type: Type) {\n return type.kind === ReflectionKind.function || type.kind === ReflectionKind.method || type.kind === ReflectionKind.callSignature\n || type.kind === ReflectionKind.methodSignature || type.kind === ReflectionKind.objectLiteral\n || ((type.kind === ReflectionKind.property || type.kind === ReflectionKind.propertySignature) && type.type.kind === ReflectionKind.function);\n}\n\nfunction getFunctionLikeType(type: Type): TypeMethod | TypeMethodSignature | TypeFunction | TypeCallSignature | undefined {\n if (type.kind === ReflectionKind.function || type.kind === ReflectionKind.method || type.kind === ReflectionKind.methodSignature) return type;\n if (type.kind === ReflectionKind.objectLiteral) {\n for (const member of resolveTypeMembers(type)) {\n if (member.kind === ReflectionKind.callSignature) return member;\n }\n }\n if (type.kind === ReflectionKind.property || type.kind === ReflectionKind.propertySignature) {\n return type.type.kind === ReflectionKind.function ? getFunctionLikeType(type.type) : undefined;\n }\n return;\n}\n\nexport function _isExtendable(left: Type, right: Type, extendStack: StackEntry[] = []): boolean {\n if (hasStack(extendStack, left, right)) return true;\n\n try {\n extendStack.push({ left, right });\n\n if (right === left) return true;\n\n if (left.kind === ReflectionKind.infer) {\n left.set(right as Type);\n return true;\n }\n\n if (right.kind === ReflectionKind.infer) {\n right.set(left as Type);\n return true;\n }\n\n if (right.kind === ReflectionKind.any || right.kind === ReflectionKind.unknown) return true;\n if (left.kind === ReflectionKind.promise && right.kind === ReflectionKind.promise) return _isExtendable(left.type, right.type);\n\n if (left.kind === ReflectionKind.promise && right.kind === ReflectionKind.object) return true;\n\n if (left.kind === ReflectionKind.promise) {\n return _isExtendable(createPromiseObjectLiteral(left), right);\n }\n if (right.kind === ReflectionKind.promise) {\n return _isExtendable(left, createPromiseObjectLiteral(right));\n }\n\n if (right.kind !== ReflectionKind.union) {\n if (left.kind === ReflectionKind.null) {\n return right.kind === ReflectionKind.null;\n }\n\n if (left.kind === ReflectionKind.undefined) {\n return right.kind === ReflectionKind.void || right.kind === ReflectionKind.undefined;\n }\n\n if (left.kind === ReflectionKind.void) {\n return right.kind === ReflectionKind.void;\n }\n\n if (left.kind === ReflectionKind.any) {\n return right.kind !== ReflectionKind.never;\n }\n\n if (left.kind === ReflectionKind.object) {\n return right.kind === ReflectionKind.object\n || (right.kind === ReflectionKind.objectLiteral && right.types.length === 0)\n || (right.kind === ReflectionKind.class && right.types.length === 0);\n }\n\n if (left.kind === ReflectionKind.objectLiteral && left.types.length === 0) {\n return right.kind === ReflectionKind.object\n || (right.kind === ReflectionKind.objectLiteral && right.types.length === 0)\n || (right.kind === ReflectionKind.class && right.types.length === 0);\n }\n }\n\n if (left.kind === ReflectionKind.never) return true;\n if (right.kind === ReflectionKind.never) return false;\n\n if (left.kind === ReflectionKind.literal && right.kind === ReflectionKind.literal) return left.literal === right.literal;\n if (left.kind === ReflectionKind.string && right.kind === ReflectionKind.string) return true;\n if (left.kind === ReflectionKind.number && right.kind === ReflectionKind.number) return true;\n if (left.kind === ReflectionKind.boolean && right.kind === ReflectionKind.boolean) return true;\n if (left.kind === ReflectionKind.bigint && right.kind === ReflectionKind.bigint) return true;\n if (left.kind === ReflectionKind.symbol && right.kind === ReflectionKind.symbol) return true;\n if (left.kind === ReflectionKind.regexp && right.kind === ReflectionKind.regexp) return true;\n\n if (right.kind === ReflectionKind.objectLiteral) {\n if (left.kind === ReflectionKind.null || left.kind === ReflectionKind.undefined) return false;\n if (right.types.length === 0) {\n //string extends {}, number extends {} are all valid\n return left.kind === ReflectionKind.templateLiteral || left.kind === ReflectionKind.function || isPrimitive(left);\n }\n }\n\n if (left.kind === ReflectionKind.enum) {\n if (right.kind === ReflectionKind.enum) {\n if (left.values.length !== right.values.length) return false;\n for (let i = 0; i < right.values.length; i++) {\n if (left.values[i] !== right.values[i]) return false;\n }\n return true;\n }\n\n return false;\n }\n\n if (left.kind === ReflectionKind.literal) {\n if ('string' === typeof left.literal && right.kind === ReflectionKind.string) return true;\n if ('number' === typeof left.literal && right.kind === ReflectionKind.number) return true;\n if ('boolean' === typeof left.literal && right.kind === ReflectionKind.boolean) return true;\n if ('bigint' === typeof left.literal && right.kind === ReflectionKind.bigint) return true;\n if ('symbol' === typeof left.literal && right.kind === ReflectionKind.symbol) return true;\n\n if ('string' === typeof left.literal && right.kind === ReflectionKind.templateLiteral) {\n return extendTemplateLiteral(left, right);\n }\n if (right.kind === ReflectionKind.union) return right.types.some(v => _isExtendable(left, v, extendStack));\n return false;\n }\n\n if (left.kind === ReflectionKind.templateLiteral) {\n if (emptyObject(right)) return true;\n if (right.kind === ReflectionKind.string) return true;\n\n if (right.kind === ReflectionKind.literal) {\n if (right.literal === '') return false;\n\n return extendTemplateLiteral(left, { kind: ReflectionKind.templateLiteral, types: [right] });\n }\n if (right.kind === ReflectionKind.templateLiteral) {\n return extendTemplateLiteral(left, right);\n }\n }\n\n if (isFunctionLike(left) && isFunctionLike(right)) {\n const leftType = getFunctionLikeType(left);\n const rightType = getFunctionLikeType(right);\n if (leftType && rightType) {\n if (rightType.kind === ReflectionKind.function && rightType.function === Function) return true;\n if (leftType.kind === ReflectionKind.function && rightType.kind === ReflectionKind.function && leftType.function && leftType.function === rightType.function) return true;\n\n const returnValid = _isExtendable(leftType.return, rightType.return, extendStack);\n if (!returnValid) return false;\n\n return isFunctionParameterExtendable(leftType, rightType, extendStack);\n }\n }\n\n if ((left.kind === ReflectionKind.propertySignature || left.kind === ReflectionKind.property) && (right.kind === ReflectionKind.propertySignature || right.kind === ReflectionKind.property)) {\n return _isExtendable(left.type, right.type, extendStack);\n }\n\n if ((left.kind === ReflectionKind.class || left.kind === ReflectionKind.objectLiteral) && right.kind === ReflectionKind.function && right.name === 'new') {\n const leftConstructor = (left.types as Type[]).find(v => (v.kind === ReflectionKind.method && v.name === 'constructor') || (v.kind === ReflectionKind.methodSignature && v.name === 'new'));\n const valid = _isExtendable(right, leftConstructor || { kind: ReflectionKind.function, parameters: [], return: { kind: ReflectionKind.any } }, extendStack);\n return valid;\n }\n\n if ((left.kind === ReflectionKind.class || left.kind === ReflectionKind.objectLiteral) && (right.kind === ReflectionKind.object || (right.kind === ReflectionKind.objectLiteral && right.types.length === 0))) {\n return true;\n }\n\n if ((left.kind === ReflectionKind.class || left.kind === ReflectionKind.objectLiteral) && (right.kind === ReflectionKind.class && right.classType === Date)) {\n if (left.kind === ReflectionKind.objectLiteral && left.types.length === 0) return true;\n if (left.kind === ReflectionKind.class && left.classType === Date) return true;\n return false;\n }\n\n if ((left.kind === ReflectionKind.class || left.kind === ReflectionKind.objectLiteral) && (right.kind === ReflectionKind.objectLiteral || right.kind === ReflectionKind.class)) {\n const rightConstructor = (right.types as Type[]).find(v => (v.kind === ReflectionKind.methodSignature && v.name === 'new')) as TypeMethodSignature | undefined;\n\n if (left.kind === ReflectionKind.class && rightConstructor) {\n //if rightConstructor is set then its maybe something like:\n // `class {} extends {new (...args: []) => infer T} ? T : never`\n //check if parameters are compatible\n const leftConstructor = left.types.find(v => (v.kind === ReflectionKind.method && v.name === 'constructor')) as TypeMethod | undefined;\n if (leftConstructor) {\n if (!isFunctionParameterExtendable(leftConstructor, rightConstructor, extendStack)) {\n return false;\n }\n }\n\n return _isExtendable(left, rightConstructor.return, extendStack);\n }\n\n for (const member of right.types) {\n //todo: call signature\n //todo: index signatures\n\n if (isMember(member)) {\n if (member.name === 'constructor') continue;\n const leftMember = (left.types as Type[]).find(v => isMember(v) && v.name === member.name);\n if (!leftMember) return false;\n if (!_isExtendable(leftMember, member, extendStack)) {\n return false;\n }\n }\n }\n\n if (left.kind === ReflectionKind.class && right.kind === ReflectionKind.class && left.types.length === 0 && right.types.length === 0) {\n //class User extends Base {}\n //User extends Base = true\n if (left.classType === right.classType) return true;\n return isPrototypeOfBase(left.classType, right.classType);\n }\n\n return true;\n }\n\n\n if (left.kind === ReflectionKind.array && right.kind === ReflectionKind.array) {\n return _isExtendable(left.type, right.type, extendStack);\n }\n\n if (left.kind === ReflectionKind.tuple && right.kind === ReflectionKind.array) {\n const tupleUnion: TypeUnion = { kind: ReflectionKind.union, types: [] };\n for (const member of left.types) {\n if (member.optional && isTypeIncluded(tupleUnion.types, { kind: ReflectionKind.undefined })) tupleUnion.types.push({ kind: ReflectionKind.undefined });\n const type = member.type.kind === ReflectionKind.rest ? member.type.type : member.type;\n if (isTypeIncluded(tupleUnion.types, type)) tupleUnion.types.push(type);\n }\n return _isExtendable(tupleUnion, right, extendStack);\n }\n\n if (left.kind === ReflectionKind.array && right.kind === ReflectionKind.tuple) {\n const hasRest = right.types.some(v => v.type.kind === ReflectionKind.rest);\n if (!hasRest && (left.type.kind !== ReflectionKind.union || !isOptional(left.type))) return false;\n for (const member of right.types) {\n let type = member.type.kind === ReflectionKind.rest ? member.type.type : member.type;\n if (member.optional) type = flatten({ kind: ReflectionKind.union, types: [{ kind: ReflectionKind.undefined }, type] });\n if (!_isExtendable(left.type, type, extendStack)) return false;\n }\n return true;\n }\n\n if (left.kind === ReflectionKind.tuple && right.kind === ReflectionKind.tuple) {\n for (let i = 0; i < right.types.length; i++) {\n const rightType = indexAccess(right, { kind: ReflectionKind.literal, literal: i });\n const leftType = indexAccess(left, { kind: ReflectionKind.literal, literal: i });\n if (rightType.kind === ReflectionKind.infer || leftType.kind === ReflectionKind.infer) continue;\n const valid = _isExtendable(leftType, rightType, extendStack);\n if (!valid) return false;\n }\n inferFromTuple(left, right);\n\n return true;\n }\n\n if (left && left.kind === ReflectionKind.union) return left.types.every(v => _isExtendable(v, right, extendStack));\n\n if (right.kind === ReflectionKind.union) return right.types.some(v => _isExtendable(left, v, extendStack));\n\n return false;\n } finally {\n // extendStack.pop();\n }\n}\n\n/**\n * We don't want to embed in each and every file the type definition of Promise<t>,\n * so we do it ondemand at runtime instead. This saves bundle size.\n */\nexport function createPromiseObjectLiteral(type: TypePromise): TypeObjectLiteral {\n const jit = getTypeJitContainer(type);\n if (jit.__promiseObjectLiteral) return jit.__promiseObjectLiteral;\n\n const promise: TypeObjectLiteral = {} as any;\n jit.__promiseObjectLiteral = promise;\n Object.assign(promise, {\n kind: ReflectionKind.objectLiteral,\n types: [\n {\n kind: ReflectionKind.methodSignature, parent: promise, name: 'then',\n parameters: [\n {\n kind: ReflectionKind.parameter, parent: {} as any, name: 'onfulfilled',\n optional: true,\n type: {\n kind: ReflectionKind.union, types: [{\n kind: ReflectionKind.function, parameters: [\n { kind: ReflectionKind.parameter, name: 'value', type: type.type },\n ], return: { kind: ReflectionKind.union, types: [type.type, promise] }\n }, { kind: ReflectionKind.null }, { kind: ReflectionKind.undefined }]\n }\n },\n {\n kind: ReflectionKind.parameter, parent: {} as any, name: 'onrejected',\n optional: true,\n type: {\n kind: ReflectionKind.function, parameters: [\n { kind: ReflectionKind.parameter, name: 'reason', type: { kind: ReflectionKind.any } },\n ], return: { kind: ReflectionKind.any }\n }\n },\n ], return: { kind: ReflectionKind.any },\n },\n {\n kind: ReflectionKind.methodSignature, parent: promise, name: 'catch',\n parameters: [\n {\n kind: ReflectionKind.parameter, parent: {} as any, name: 'onrejected',\n optional: true,\n type: {\n kind: ReflectionKind.function, parameters: [\n { kind: ReflectionKind.parameter, name: 'reason', type: { kind: ReflectionKind.any } }\n ], return: { kind: ReflectionKind.any }\n }\n },\n ], return: { kind: ReflectionKind.any },\n },\n ]\n });\n return promise;\n}\n\nexport function parametersToTuple(parameters: TypeParameter[]): TypeTuple {\n const tuple = {\n kind: ReflectionKind.tuple,\n types: []\n } as TypeTuple;\n\n for (const v of parameters) {\n tuple.types.push({ kind: ReflectionKind.tupleMember, parent: tuple, name: v.name, optional: (v.optional || v.default !== undefined) ? true : undefined, type: v.type });\n }\n return tuple;\n}\n\nfunction isFunctionParameterExtendable(left: { parameters: TypeParameter[] }, right: { parameters: TypeParameter[] }, extendStack: StackEntry[]): boolean {\n //convert parameters to tuple and just compare that, as it's the same algorithm\n const leftTuple: TypeTuple = parametersToTuple(left.parameters);\n const rightTuple: TypeTuple = parametersToTuple(right.parameters);\n\n //we have to change the position here since its type assignability is inversed to tuples rules\n // true for tuple: [a: string] extends [a: string, b: string]\n // false for function: (a: string) extends (a: string, b: string)\n const valid = _isExtendable(rightTuple, leftTuple, extendStack);\n if (valid) {\n inferFromTuple(leftTuple, rightTuple);\n }\n return valid;\n}\n\nexport function extendTemplateLiteral(left: TypeLiteral | TypeTemplateLiteral, right: TypeTemplateLiteral): boolean {\n interface ReadQueueItem {\n type: TypeString | TypeNumber | TypeLiteral | TypeAny;\n position: number;\n next?: ReadQueueItem;\n }\n\n let matchQueue: (TypeInfer | TypeNumber | TypeString | TypeAny)[] = [];\n\n let current = (left.kind === ReflectionKind.literal ? { type: left as (TypeLiteral & { literal: string }), position: 0 } : {\n type: left.types[0],\n position: 0\n }) as ReadQueueItem | undefined;\n\n if (current && left.kind === ReflectionKind.templateLiteral) {\n for (let i = 1; i < left.types.length; i++) {\n const t = left.types[i];\n if (t.kind === ReflectionKind.infer) continue;\n current.next = { type: t, position: 0 };\n }\n }\n\n function search(delimiter: string): ReadQueueItem | undefined {\n let result = current;\n while (result) {\n if (result.type.kind === ReflectionKind.literal) {\n const value = result.type.literal as string;\n if (value !== '') {\n const position = value.indexOf(delimiter, result.position);\n if (position !== -1) {\n return { ...result, position: position };\n }\n }\n //go next\n }\n\n result = result.next;\n }\n\n //not found\n return;\n }\n\n function handleQueue(end?: ReadQueueItem): boolean {\n if (matchQueue.length === 0) return true;\n\n const last = matchQueue[matchQueue.length - 1];\n for (const item of matchQueue) {\n const isLast = item === last;\n\n if (!isLast) {\n //pick only one character\n while (current) {\n if (current.type.kind === ReflectionKind.literal) {\n const value = current.type.literal as string;\n if (current.position === value.length) {\n //end, go next\n current = current.next;\n continue;\n }\n const char = value[current.position++];\n if (item.kind === ReflectionKind.number) {\n if (value === '' || isNaN(+char)) return false;\n } else if (item.kind === ReflectionKind.infer) {\n item.set({ kind: ReflectionKind.literal, literal: char });\n }\n } else if (current.type.kind === ReflectionKind.string) {\n if (item.kind === ReflectionKind.number) {\n return false;\n } else if (item.kind === ReflectionKind.infer) {\n item.set(current.type);\n }\n } else if (current.type.kind === ReflectionKind.any) {\n if (item.kind === ReflectionKind.infer) {\n item.set(current.type);\n }\n } else if (current.type.kind === ReflectionKind.number) {\n if (item.kind === ReflectionKind.infer) {\n item.set(current.type);\n }\n }\n break;\n }\n } else {\n if (item.kind === ReflectionKind.any || item.kind === ReflectionKind.string || item.kind === ReflectionKind.infer) {\n const result: TypeTemplateLiteral = { kind: ReflectionKind.templateLiteral, types: [] };\n while (current) {\n if (current.type.kind === ReflectionKind.literal) {\n const value = current.type.literal as string;\n if (current.position === value.length) {\n //end, go next\n current = current.next;\n continue;\n }\n\n const v = value.slice(current.position, end ? end.position : undefined);\n result.types.push({ kind: ReflectionKind.literal, literal: v });\n } else {\n result.types.push(current.type);\n // if (item.kind === ReflectionKind.infer) {\n // item.set(current.type);\n // }\n }\n if (end && current.type === end.type) break;\n current = current.next;\n }\n\n if (item.kind === ReflectionKind.infer) {\n if (result.types.length === 1) {\n item.set(result.types[0]);\n } else {\n item.set(result);\n }\n }\n } else if (item.kind === ReflectionKind.number) {\n //read until no number\n let value = '';\n while (current) {\n if (current.type.kind === ReflectionKind.literal) {\n const v = (current.type.literal as string).slice(current.position, end ? end.position : undefined);\n value += v;\n } else if (current.type.kind === ReflectionKind.number || current.type.kind === ReflectionKind.any) {\n //number is fine\n } else {\n //string is not fine as it can contain characters not compatible to number\n return false;\n }\n current = current.next;\n }\n if (value === '' || isNaN(+value)) return false;\n }\n }\n }\n matchQueue = [];\n return true;\n }\n\n for (const span of right.types) {\n if (span.kind === ReflectionKind.literal) {\n const position = search(span.literal as string);\n if (!position) return false;\n if (!handleQueue(position)) return false;\n current = { ...position, position: position.position + (span.literal as string).length };\n } else if (span.kind === ReflectionKind.infer) {\n matchQueue.push(span);\n } else if (span.kind === ReflectionKind.string) {\n matchQueue.push(span);\n } else if (span.kind === ReflectionKind.number) {\n matchQueue.push(span);\n }\n }\n if (!handleQueue()) return false;\n\n return true;\n}\n\nfunction inferFromTuple(left: TypeTuple, right: TypeTuple) {\n //when all types match, we find `infer`\n for (let i = 0; i < right.types.length; i++) {\n const rightType = right.types[i];\n if (rightType.type.kind === ReflectionKind.infer || (rightType.type.kind === ReflectionKind.rest && rightType.type.type.kind === ReflectionKind.infer)) {\n const inferred: TypeTuple = { kind: ReflectionKind.tuple, types: [] };\n let restAdded = false;\n for (let j = 0; j < left.types.length; j++) {\n const leftType = left.types[j];\n if (leftType.type.kind === ReflectionKind.rest) {\n addType(inferred, leftType);\n restAdded = true; //when a rest element is added, all subsequent types will be added as well\n } else if (restAdded || j >= i) {\n addType(inferred, leftType);\n }\n }\n\n //[foo: string, ...args: infer P] P keeps being tuple\n //[foo: string, args: infer P] P no tuple\n //[args: infer P] P no tuple\n let inferredType: Type = inferred.types.length === 0 ? { kind: ReflectionKind.never } : inferred;\n\n //simplify [...r: number[]] to number[]\n if (inferred.types.length === 1 && inferred.types[0].type.kind === ReflectionKind.rest) {\n inferredType = { kind: ReflectionKind.array, type: inferred.types[0].type.type };\n }\n\n //when `[1, 2] extends [infer K]` result is `1`, not a tuple\n if (rightType.type.kind !== ReflectionKind.rest) {\n inferredType = inferred.types[0].type;\n }\n\n if (rightType.type.kind === ReflectionKind.infer) {\n rightType.type.set(inferredType);\n } else if (rightType.type.kind === ReflectionKind.rest && rightType.type.type.kind === ReflectionKind.infer) {\n rightType.type.type.set(inferredType);\n }\n }\n }\n}\n","export const state: {nominalId: number} = {\n nominalId: 1,\n};\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport {\n ClassType,\n isArray,\n isClass,\n isFunction,\n stringifyValueWithType\n} from \"@deepkit/core\";\nimport { MappedModifier, ReflectionOp } from \"@deepkit/type-spec\";\nimport { debug } from \"../debug.js\";\nimport { isWithDeferredDecorators } from \"../decorator.js\";\nimport { isExtendable } from \"./extends.js\";\nimport { ReflectionClass, TData } from \"./reflection.js\";\nimport { state } from \"./state.js\";\nimport {\n Annotations,\n applyScheduledAnnotations,\n CartesianProduct,\n copyAndSetParent,\n defaultAnnotation,\n flattenUnionTypes,\n getAnnotations,\n getMember,\n indexAccess,\n isMember,\n isPrimitive,\n isSameType,\n isType,\n isTypeIncluded,\n isWithAnnotations,\n merge,\n narrowOriginalLiteral,\n ReflectionKind,\n ReflectionVisibility,\n stringifyType,\n TagsReflection,\n Type,\n TypeBaseMember,\n TypeCallSignature,\n TypeClass,\n typeDecorators,\n TypeEnumMember,\n TypeFunction,\n TypeIndexSignature,\n TypeInfer,\n TypeLiteral,\n TypeMethod,\n TypeMethodSignature,\n TypeObjectLiteral,\n TypeParameter,\n TypePromise,\n TypeProperty,\n TypePropertySignature,\n TypeTemplateLiteral,\n TypeTupleMember,\n TypeUnion,\n unboxUnion,\n validationAnnotation,\n widenLiteral\n} from \"./type.js\";\n\nexport type RuntimeStackEntry =\n | Type\n | Object\n | (() => ClassType | Object)\n | string\n | number\n | boolean\n | bigint;\n\nexport type Packed = (RuntimeStackEntry | string)[] & {\n __is?: (data: any) => boolean;\n} & { __type?: Type } & { __unpack?: PackStruct };\n\nexport class PackStruct {\n constructor(\n public ops: ReflectionOp[] = [],\n public stack: RuntimeStackEntry[] = []\n ) {}\n}\n\nfunction unpackOps(decodedOps: ReflectionOp[], encodedOPs: string): void {\n for (let i = 0; i < encodedOPs.length; i++) {\n decodedOps.push(encodedOPs.charCodeAt(i) - 33);\n }\n}\n\nexport function encodeOps(ops: ReflectionOp[]): string {\n return ops.map(v => String.fromCharCode(v + 33)).join(\"\");\n}\n\n/**\n * Pack a pack structure (op instructions + pre-defined stack) and create a encoded version of it.\n */\nexport function pack(packOrOps: PackStruct | ReflectionOp[]): Packed {\n const ops = isArray(packOrOps) ? packOrOps : packOrOps.ops;\n const encodedOps = encodeOps(ops);\n\n if (!isArray(packOrOps)) {\n if (packOrOps.stack.length) {\n return [...(packOrOps.stack as RuntimeStackEntry[]), encodedOps];\n }\n }\n\n return [encodedOps];\n}\n\nexport function unpack(pack: Packed): PackStruct {\n const ops: ReflectionOp[] = [];\n\n const encodedOPs = pack[pack.length - 1];\n\n //the end has always to be a string\n if (\"string\" !== typeof encodedOPs) return { ops: [], stack: [] };\n\n unpackOps(ops, encodedOPs);\n\n return { ops, stack: pack.length > 1 ? pack.slice(0, -1) : [] };\n}\n\nexport function resolvePacked(\n type: Packed,\n args: any[] = [],\n options?: ReflectOptions\n): Type {\n return resolveRuntimeType(type, args, options) as Type;\n}\n\nfunction isPack(o: any): o is Packed {\n return isArray(o);\n}\n\n/**\n * Computes a type of given object. This function caches the result on the object itself.\n * This is the slow path, using the full type virtual machine to resolve the type.\n * If you want to handle some fast paths (including cache), try using resolveReceiveType() instead.\n */\nexport function resolveRuntimeType(\n o: ClassType | Function | Packed | any,\n args: any[] = [],\n options?: ReflectOptions\n): Type {\n const type = Processor.get().reflect(\n o,\n args,\n options || { reuseCached: true }\n );\n\n if (isType(type)) {\n return type as Type;\n }\n\n throw new Error(\"No type returned from runtime type program\");\n}\n\ninterface Frame {\n index: number; //just the general frame index\n startIndex: number; //when the frame started, index of the stack\n variables: number;\n inputs: RuntimeStackEntry[];\n previous?: Frame;\n mappedType?: Loop;\n distributiveLoop?: Loop;\n}\n\nclass Loop {\n private types: Type[] = [];\n private i: number = 0;\n\n constructor(public fromType: Type) {\n if (fromType.kind === ReflectionKind.union) {\n this.types = fromType.types;\n } else {\n this.types = [fromType];\n }\n }\n\n next(): Type | undefined {\n return this.types[this.i++];\n }\n}\n\ninterface Program {\n frame: Frame;\n active: boolean;\n stack: (RuntimeStackEntry | Type)[];\n stackPointer: number; //pointer to the stack\n program: number; //pointer to the current op\n depth: number;\n initialStack: (RuntimeStackEntry | Type)[];\n resultType: Type;\n ops: ReflectionOp[];\n end: number;\n inputs: RuntimeStackEntry[];\n resultTypes?: Type[];\n started: number;\n typeParameters?: Type[];\n previous?: Program;\n //don't operate on newly created ref resultType but return whatever is on the stack directly\n //used in inline-only programs like `typeOf<MyAlias>()` where we want the type of (cached) MyAlias and not a new reference.\n directReturn?: boolean;\n object?: ClassType | Function | Packed | any;\n}\n\nfunction assignResult<T extends Type>(\n ref: Type,\n result: T,\n assignParents: boolean\n): T {\n Object.assign(ref, result);\n\n if (assignParents) {\n // if (ref.kind === ReflectionKind.class && ref.arguments) {\n // for (const member of ref.arguments) member.parent = ref;\n // }\n\n if (\n ref.kind === ReflectionKind.function ||\n ref.kind === ReflectionKind.method ||\n ref.kind === ReflectionKind.methodSignature\n ) {\n ref.return.parent = ref;\n for (const member of ref.parameters) member.parent = ref as any;\n }\n\n if (\"types\" in ref) {\n for (const member of ref.types) {\n member.parent = ref;\n }\n }\n }\n\n return ref as T;\n}\n\nfunction isConditionTruthy(condition: Type | number): boolean {\n if (\"number\" === typeof condition) return condition !== 0;\n return !!(condition.kind === ReflectionKind.literal && condition.literal);\n}\n\nfunction createProgram(\n options: Partial<Program>,\n inputs?: RuntimeStackEntry[]\n): Program {\n const program: Program = {\n active: true,\n frame: {\n index: 0,\n startIndex: -1,\n inputs: inputs || [],\n variables: 0,\n previous: undefined\n },\n stack: options.stack || [],\n stackPointer: options.stackPointer ?? -1,\n program: 0,\n depth: 0,\n initialStack: options.initialStack || [],\n resultType: options.resultType || { kind: ReflectionKind.unknown },\n ops: options.ops || [],\n end: options.end ?? (options.ops ? options.ops.length : 0),\n inputs: inputs || [],\n started: Date.now(),\n // resultTypes: [],\n // typeParameters: [],\n // previous: undefined,\n object: options.object\n };\n\n if (options.initialStack)\n for (let i = 0; i < options.initialStack.length; i++) {\n if (i < program.stack.length) {\n program.stack[i] = options.initialStack[i];\n } else {\n program.stack.push(options.initialStack[i]);\n }\n }\n\n program.stackPointer = options.initialStack\n ? options.initialStack.length - 1\n : -1;\n program.frame.startIndex = program.stackPointer;\n\n return program;\n}\n\nfunction isValidCacheEntry(\n current: Program,\n object: ClassType | Function | Packed | any,\n inputs: RuntimeStackEntry[] = []\n): Program | undefined {\n if (current.object === object) {\n //issue a new reference if inputs are the same\n //todo: when a function has a default, this is not set in current.inputs, and could fail when it differs to given inputs\n let sameInputs = current.inputs.length === inputs.length;\n if (sameInputs) {\n for (let i = 0; i < current.inputs.length; i++) {\n if (\n !inputs[i] ||\n !isSameType(current.inputs[i] as Type, inputs[i] as Type)\n ) {\n sameInputs = false;\n break;\n }\n }\n if (sameInputs) {\n return current;\n }\n }\n }\n return;\n}\n\nfunction findExistingProgram(\n current: Program | undefined,\n object: ClassType | Function | Packed | any,\n inputs: RuntimeStackEntry[] = []\n) {\n let checks = 0;\n while (current) {\n if (current.object === object) {\n checks++;\n //as safety check to never go into an endless loop, we return just this program if objects matches and we are 1000 programs deep.\n if (checks > 1000) return current;\n\n //issue a new reference if inputs are the same\n //todo: when a function has a default, this is not set in current.inputs, and could fail when it differs to given inputs\n let sameInputs = current.inputs.length === inputs.length;\n if (sameInputs) {\n for (let i = 0; i < current.inputs.length; i++) {\n if (\n !inputs[i] ||\n !isSameType(current.inputs[i] as Type, inputs[i] as Type)\n ) {\n sameInputs = false;\n break;\n }\n }\n if (sameInputs) return current;\n }\n }\n\n current = current.previous;\n }\n\n return;\n}\n\nfunction createRef(current: Program): Type {\n if (!current.resultTypes) current.resultTypes = [];\n const ref: Type = { ...current.resultType };\n current.resultTypes.push(ref);\n return ref;\n}\n\nexport interface ReflectOptions {\n /**\n *\n */\n reuseCached?: boolean;\n\n inline?: boolean;\n\n typeName?: string;\n}\n\n/**\n * @reflection never\n */\nexport class Processor {\n static typeProcessor?: Processor;\n\n static get(): Processor {\n return (Processor.typeProcessor ||= new Processor());\n }\n\n private cache: Program[] = [];\n\n /**\n * Linked list of programs to execute. For each external call to external program will this be changed.\n */\n protected program: Program = {\n active: false,\n frame: { index: 0, startIndex: -1, inputs: [], variables: 0 },\n stack: [],\n stackPointer: -1,\n program: 0,\n depth: 0,\n initialStack: [],\n resultType: { kind: ReflectionKind.unknown },\n // resultTypes: [],\n inputs: [],\n end: 0,\n ops: [],\n started: 0\n // previous: undefined,\n // object: undefined,\n };\n\n reflect(\n object: ClassType | Function | Packed | any,\n inputs: RuntimeStackEntry[] = [],\n options: ReflectOptions = {}\n ): Type {\n const start = Date.now();\n const result = this._reflect(object, inputs, options);\n\n const took = Date.now() - start;\n if (took > 100) {\n console.warn(\n `Type computation took very long ${took}ms for ${stringifyType(result)}`\n );\n }\n return result;\n }\n\n _reflect(\n object: ClassType | Function | Packed | any,\n inputs: RuntimeStackEntry[] = [],\n options: ReflectOptions = {}\n ): Type {\n const packed: Packed | undefined = isPack(object) ? object : object.__type;\n if (!packed) {\n if (isFunction(object) && object.length === 0) {\n //functions without any type annotations do not have the overhead of an assigned __type\n return {\n kind: ReflectionKind.function,\n function: object,\n name: object.name,\n parameters: [],\n return: { kind: ReflectionKind.any }\n };\n }\n throw new Error(\n `No valid runtime type for ${stringifyValueWithType(object)} given. Is @deepkit/type-compiler correctly installed? Execute deepkit-type-install to check`\n );\n }\n\n for (let i = 0; i < inputs.length; i++) {\n if (isClass(inputs[i])) inputs[i] = resolveRuntimeType(inputs[i]);\n }\n\n //this checks if there is an active program still running for given packed. if so, issue a new reference.\n //this reference is changed (its content only via Object.assign(reference, computedValues)) once the program finished.\n //this is independent of reuseCache since it's the cache for the current 'run', not a global cache\n const found = findExistingProgram(this.program, object, inputs);\n if (found) {\n const result = createRef(found);\n result.typeName ||= options.typeName;\n return result;\n }\n\n //the cache of already computed types is stored on the Packed (the array of the type program) because it's a static object that never changes\n //and will be GC correctly (and with it this cache). Its crucial that not all reflect() calls cache the content, otherwise it would pollute the\n //memory with useless types. For example a global type Partial<> would hold all its instances, what we do not want.\n //We cache only direct non-generic (inputs empty) types passed to typeOf<>() or resolveRuntimeType(). all other reflect() calls do not use this cache.\n //make sure the same type is returned if already known.\n //packed.length === 0 for deserialized TypeClass with reconstructed classes.\n if (\n (options.reuseCached || packed.length === 0) &&\n packed.__type &&\n inputs.length === 0\n ) {\n return packed.__type;\n }\n\n //all computed types should be cached until the program terminates, otherwise a lot of types will be computed\n //way too often. This means we have a much bigger array cache and put everything in there, even for generics,\n //and clear the cache once the program terminates. findExistingProgram will be replaced by that.\n //with this change we could also remove the linked structure of Program and put it into an array as well.\n for (const cache of this.cache) {\n if (isValidCacheEntry(cache, object, inputs)) {\n //if program is still active, create new ref otherwise copy computed type\n const result = cache.active\n ? createRef(cache)\n : copyAndSetParent(cache.resultType);\n result.typeName ||= options.typeName;\n return result;\n }\n }\n\n //if reuseCached is disabled but there is already a computed type, we return that as shallow clone\n if (!options.reuseCached && packed.__type && inputs.length === 0) {\n const result = copyAndSetParent(packed.__type);\n result.typeName ||= options.typeName;\n if (options.inline) result.inlined = true;\n return result;\n }\n\n // process.stdout.write(`${options.reuseCached} Cache miss ${stringifyValueWithType(object)}(...${inputs.length})\\n`);\n const pack = (packed.__unpack ||= unpack(packed));\n const program = createProgram(\n { ops: pack.ops, initialStack: pack.stack, object },\n inputs\n );\n const type = this.runProgram(program);\n type.typeName ||= options.typeName;\n\n if (inputs.length === 0) {\n packed.__type = type;\n }\n\n if (options.inline === true) {\n //when inline was used, we do not return the original type, because inline means it's part of another type\n //and its properties will change depending on the context (e.g. parent), which should not propagate to the original type.\n const result = createRef(program);\n result.typeName ||= options.typeName;\n result.inlined = true;\n return result;\n }\n\n return type;\n }\n\n run(\n ops: ReflectionOp[],\n initialStack: RuntimeStackEntry[],\n inputs: RuntimeStackEntry[] = [],\n object?: ClassType | Function | Packed | any\n ): Type {\n return this.runProgram(\n createProgram({ ops, initialStack, object }, inputs)\n );\n }\n\n runProgram(program: Program): Type {\n const loopRunning = this.program.end !== 0;\n program.previous = this.program;\n program.depth = this.program.depth + 1;\n this.program = program;\n this.cache.push(program);\n\n // process.stdout.write(`jump to program: ${stringifyValueWithType(program.object)}\\n`);\n if (!loopRunning) {\n return this.loop(program) as Type;\n }\n\n return program.resultType;\n }\n\n /**\n * Semantic is important here: This triggers true only for the very last op of a program.\n * If it is checked in OP inline then it could be true or false:\n *\n * type t<T> = T; => false since we have nominal past the inline op\n * typeOf<T>() => true since we have no nominal past the inline op\n */\n protected isEnded(): boolean {\n return this.program.program + 1 >= this.program.end;\n }\n\n /**\n * Runs all scheduled programs until termination.\n */\n protected loop(until?: Program): Type | RuntimeStackEntry {\n let result = this.program.stack[0];\n\n programLoop: while (this.program.active) {\n const program = this.program;\n // process.stdout.write(`jump to program: ${stringifyValueWithType(program.object)}\\n`);\n for (; program.program < program.end; program.program++) {\n const op = program.ops[program.program];\n\n // process.stdout.write(`[${program.depth}:${program.frame.index}] step ${program.program} ${ReflectionOp[op]}\\n`);\n switch (op) {\n case ReflectionOp.string:\n this.pushType({ kind: ReflectionKind.string });\n break;\n case ReflectionOp.number:\n this.pushType({ kind: ReflectionKind.number });\n break;\n case ReflectionOp.numberBrand:\n const ref = this.eatParameter() as number;\n this.pushType({ kind: ReflectionKind.number, brand: ref });\n break;\n case ReflectionOp.boolean:\n this.pushType({ kind: ReflectionKind.boolean });\n break;\n case ReflectionOp.void:\n this.pushType({ kind: ReflectionKind.void });\n break;\n case ReflectionOp.unknown:\n this.pushType({ kind: ReflectionKind.unknown });\n break;\n case ReflectionOp.object:\n this.pushType({ kind: ReflectionKind.object });\n break;\n case ReflectionOp.never:\n this.pushType({ kind: ReflectionKind.never });\n break;\n case ReflectionOp.undefined:\n this.pushType({ kind: ReflectionKind.undefined });\n break;\n case ReflectionOp.bigint:\n this.pushType({ kind: ReflectionKind.bigint });\n break;\n case ReflectionOp.symbol:\n this.pushType({ kind: ReflectionKind.symbol });\n break;\n case ReflectionOp.null:\n this.pushType({ kind: ReflectionKind.null });\n break;\n case ReflectionOp.any:\n this.pushType({ kind: ReflectionKind.any });\n break;\n case ReflectionOp.literal: {\n const ref = this.eatParameter() as number;\n this.pushType({\n kind: ReflectionKind.literal,\n literal: program.stack[ref] as string | number | boolean | bigint\n });\n break;\n }\n case ReflectionOp.templateLiteral: {\n this.handleTemplateLiteral();\n break;\n }\n case ReflectionOp.date:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Date,\n types: []\n });\n break;\n case ReflectionOp.uint8Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Uint8Array,\n types: []\n });\n break;\n case ReflectionOp.int8Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Int8Array,\n types: []\n });\n break;\n case ReflectionOp.uint8ClampedArray:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Uint8ClampedArray,\n types: []\n });\n break;\n case ReflectionOp.uint16Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Uint16Array,\n types: []\n });\n break;\n case ReflectionOp.int16Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Int16Array,\n types: []\n });\n break;\n case ReflectionOp.uint32Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Uint32Array,\n types: []\n });\n break;\n case ReflectionOp.int32Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Int32Array,\n types: []\n });\n break;\n case ReflectionOp.float32Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Float32Array,\n types: []\n });\n break;\n case ReflectionOp.float64Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType: Float64Array,\n types: []\n });\n break;\n case ReflectionOp.bigInt64Array:\n this.pushType({\n kind: ReflectionKind.class,\n classType:\n \"undefined\" !== typeof BigInt64Array\n ? BigInt64Array\n : class BigInt64ArrayNotAvailable {},\n types: []\n });\n break;\n case ReflectionOp.arrayBuffer:\n this.pushType({\n kind: ReflectionKind.class,\n classType: ArrayBuffer,\n types: []\n });\n break;\n case ReflectionOp.class: {\n const types = this.popFrame() as Type[];\n let t = {\n kind: ReflectionKind.class,\n id: state.nominalId++,\n classType: Object,\n types: []\n } as TypeClass;\n\n function add(member: Type) {\n if (member.kind === ReflectionKind.propertySignature) {\n member = {\n ...member,\n parent: t,\n visibility: ReflectionVisibility.public,\n kind: ReflectionKind.property\n } as TypeProperty;\n } else if (member.kind === ReflectionKind.methodSignature) {\n member = {\n ...member,\n parent: t,\n visibility: ReflectionVisibility.public,\n kind: ReflectionKind.method\n } as TypeMethod;\n }\n\n switch (member.kind) {\n case ReflectionKind.indexSignature: {\n //todo, replace the old one?\n t.types.push(member);\n break;\n }\n case ReflectionKind.property:\n case ReflectionKind.method: {\n const existing = t.types.findIndex(\n v =>\n (v.kind === ReflectionKind.property ||\n v.kind === ReflectionKind.method) &&\n v.name === (member as TypeProperty | TypeMethod).name\n );\n if (existing !== -1) {\n //remove entry, since we replace it\n t.types.splice(existing, 1);\n }\n t.types.push(member);\n\n if (\n member.kind === ReflectionKind.method &&\n member.name === \"constructor\"\n ) {\n for (const parameter of member.parameters) {\n if (\n parameter.visibility !== undefined ||\n parameter.readonly\n ) {\n const property = {\n kind: ReflectionKind.property,\n name: parameter.name,\n visibility: parameter.visibility,\n default: parameter.default,\n type: parameter.type\n } as TypeProperty;\n if (parameter.optional) {\n property.optional = true;\n }\n if (parameter.readonly) {\n property.readonly = true;\n }\n\n parameter.type.parent = property;\n add(property);\n }\n }\n }\n break;\n }\n }\n }\n\n for (const member of types) {\n switch (member.kind) {\n case ReflectionKind.objectLiteral:\n case ReflectionKind.class: {\n for (const sub of member.types) add(sub);\n break;\n }\n case ReflectionKind.indexSignature:\n case ReflectionKind.property:\n case ReflectionKind.method: {\n add(member);\n }\n }\n // if (member.kind === ReflectionKind.property) member.type = widenLiteral(member.type);\n }\n const args = program.frame.inputs.filter(isType);\n\n for (const member of t.types) member.parent = t;\n if (t.arguments)\n for (const member of t.arguments) member.parent = t;\n\n if (args.length) t.arguments = args;\n t.typeArguments = program.typeParameters;\n\n this.pushType(t);\n break;\n }\n case ReflectionOp.widen: {\n const current = program.stack[program.stackPointer] as Type;\n if (current.kind === ReflectionKind.literal) {\n this.pushType(widenLiteral(this.pop() as TypeLiteral));\n }\n break;\n }\n case ReflectionOp.classExtends: {\n const argsNumber = this.eatParameter() as number;\n const typeArguments: Type[] = [];\n for (let i = 0; i < argsNumber; i++) {\n typeArguments.push(this.pop() as Type);\n }\n\n (\n program.stack[program.stackPointer] as TypeClass\n ).extendsArguments = typeArguments;\n\n break;\n }\n case ReflectionOp.implements: {\n const argsNumber = this.eatParameter() as number;\n const types: Type[] = [];\n for (let i = 0; i < argsNumber; i++) {\n types.push(this.pop() as Type);\n }\n\n (program.stack[program.stackPointer] as TypeClass).implements =\n types;\n\n break;\n }\n case ReflectionOp.parameter: {\n const ref = this.eatParameter() as number;\n const t: Type = {\n kind: ReflectionKind.parameter,\n parent: undefined as any,\n name: program.stack[ref] as string,\n type: this.pop() as Type\n };\n t.type.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.functionReference:\n case ReflectionOp.classReference: {\n const ref = this.eatParameter() as number;\n const classOrFunction = resolveFunction(\n program.stack[ref] as Function,\n program.object\n );\n const inputs = this.popFrame() as Type[];\n if (!classOrFunction) {\n this.pushType({ kind: ReflectionKind.unknown });\n break;\n }\n\n if (!classOrFunction.__type) {\n if (op === ReflectionOp.classReference) {\n this.pushType({\n kind: ReflectionKind.class,\n classType: classOrFunction,\n typeArguments: inputs,\n types: []\n });\n } else if (op === ReflectionOp.functionReference) {\n this.pushType({\n kind: ReflectionKind.function,\n function: classOrFunction,\n parameters: [],\n return: { kind: ReflectionKind.unknown }\n });\n }\n } else {\n //when it's just a simple reference resolution like typeOf<Class>() then enable cache re-use (so always the same type is returned)\n const directReference = !!(\n this.isEnded() &&\n program.previous &&\n program.previous.end === 0\n );\n const result = this.reflect(classOrFunction, inputs, {\n inline: !directReference,\n reuseCached: directReference\n });\n if (directReference) program.directReturn = true;\n this.push(result, program);\n\n if (isWithAnnotations(result) && inputs.length) {\n result.typeArguments = result.typeArguments || [];\n for (let i = 0; i < inputs.length; i++) {\n result.typeArguments[i] = inputs[i];\n }\n }\n\n //this.reflect/run might create another program onto the stack. switch to it if so\n if (this.program !== program) {\n //continue to next this.program.\n program.program++; //manual increment as the for loop would normally do that\n continue programLoop;\n }\n }\n break;\n }\n case ReflectionOp.enum: {\n const types = this.popFrame() as TypeEnumMember[];\n const enumType: { [name: string]: string | number } = {};\n\n let i = 0;\n for (const type of types) {\n if (type.default !== undefined) {\n const v =\n typeof type.default === \"function\"\n ? type.default()\n : type.default;\n enumType[type.name] = v;\n if (\"number\" === typeof v) {\n i = v + 1;\n }\n } else {\n enumType[type.name] = i++;\n }\n }\n const values = Object.values(enumType);\n const t: Type = {\n kind: ReflectionKind.enum,\n enum: enumType,\n values,\n indexType: getEnumType(values)\n };\n this.pushType(t);\n break;\n }\n case ReflectionOp.enumMember: {\n const name = program.stack[this.eatParameter() as number] as\n | string\n | (() => string);\n this.pushType({\n kind: ReflectionKind.enumMember,\n parent: undefined as any,\n name: isFunction(name) ? name() : name\n });\n break;\n }\n case ReflectionOp.tuple: {\n this.handleTuple();\n break;\n }\n case ReflectionOp.tupleMember: {\n const t: TypeTupleMember = {\n kind: ReflectionKind.tupleMember,\n type: this.pop() as Type,\n parent: undefined as any\n };\n t.type.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.namedTupleMember: {\n const name = program.stack[this.eatParameter() as number] as string;\n const t: Type = {\n kind: ReflectionKind.tupleMember,\n type: this.pop() as Type,\n parent: undefined as any,\n name: isFunction(name) ? name() : name\n };\n t.type.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.rest: {\n const t: Type = {\n kind: ReflectionKind.rest,\n parent: undefined as any,\n type: this.pop() as Type\n };\n t.type.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.regexp: {\n this.pushType({ kind: ReflectionKind.regexp });\n break;\n }\n case ReflectionOp.typeParameter:\n case ReflectionOp.typeParameterDefault: {\n const nameRef = this.eatParameter() as number;\n program.typeParameters = program.typeParameters || [];\n let type = program.frame.inputs[program.frame.variables++];\n\n if (op === ReflectionOp.typeParameterDefault) {\n const defaultValue = this.pop();\n if (type === undefined) {\n type = defaultValue;\n }\n }\n\n if (type === undefined) {\n //generic not instantiated\n program.typeParameters.push({\n kind: ReflectionKind.any,\n typeParameter: true\n } as any);\n this.pushType({\n kind: ReflectionKind.typeParameter,\n name: program.stack[nameRef] as string\n });\n } else {\n program.typeParameters.push(type as Type);\n this.pushType(type as Type);\n }\n break;\n }\n case ReflectionOp.set: {\n const t: Type = {\n kind: ReflectionKind.class,\n classType: Set,\n arguments: [this.pop() as Type],\n types: []\n };\n t.arguments![0].parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.map: {\n const value = this.pop() as Type;\n const key = this.pop() as Type;\n const t: TypeClass = {\n kind: ReflectionKind.class,\n classType: Map,\n arguments: [key, value],\n types: []\n };\n t.arguments![0].parent = t;\n t.arguments![1].parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.promise: {\n const type = this.pop() as Type;\n const t: TypePromise = { kind: ReflectionKind.promise, type };\n t.type.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.union: {\n const types = this.popFrame() as Type[];\n const flattened = flattenUnionTypes(types);\n const t: Type = unboxUnion({\n kind: ReflectionKind.union,\n types: flattened\n });\n if (t.kind === ReflectionKind.union) {\n for (const member of t.types) {\n member.parent = t;\n }\n }\n this.pushType(t);\n break;\n }\n case ReflectionOp.intersection: {\n let t = this.handleIntersection();\n if (t) this.pushType(t);\n break;\n }\n case ReflectionOp.callSignature:\n case ReflectionOp.function: {\n const types = this.popFrame() as Type[];\n let name = program.stack[this.eatParameter() as number] as string;\n\n const returnType =\n types.length > 0\n ? (types[types.length - 1] as Type)\n : ({ kind: ReflectionKind.any } as Type);\n const parameters =\n types.length > 1 ? (types.slice(0, -1) as TypeParameter[]) : [];\n if (isFunction(name)) name = name();\n\n let t =\n op === ReflectionOp.callSignature\n ? ({\n kind: ReflectionKind.callSignature,\n return: returnType,\n parameters\n } as TypeCallSignature)\n : ({\n kind: ReflectionKind.function,\n name: name || undefined,\n return: returnType,\n parameters\n } as TypeFunction);\n t.return.parent = t;\n for (const member of t.parameters) member.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.array: {\n const t: Type = {\n kind: ReflectionKind.array,\n type: this.pop() as Type\n };\n t.type.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.property:\n case ReflectionOp.propertySignature: {\n const name = program.stack[this.eatParameter() as number] as\n | number\n | string\n | symbol\n | (() => symbol);\n let type = this.pop() as Type;\n let isOptional = false;\n\n if (type.kind === ReflectionKind.union && type.types.length === 2) {\n const undefinedType = type.types.find(\n v => v.kind === ReflectionKind.undefined\n );\n const restType = type.types.find(\n v =>\n v.kind !== ReflectionKind.null &&\n v.kind !== ReflectionKind.undefined\n );\n if (restType && undefinedType) {\n type = restType;\n isOptional = true;\n }\n }\n\n const property = {\n kind:\n op === ReflectionOp.propertySignature\n ? ReflectionKind.propertySignature\n : ReflectionKind.property,\n type,\n name: isFunction(name) ? name() : name\n } as TypeProperty | TypePropertySignature;\n\n if (isOptional) {\n property.optional = true;\n }\n\n if (op === ReflectionOp.property) {\n (property as TypeProperty).visibility =\n ReflectionVisibility.public;\n }\n\n property.type.parent = property;\n this.pushType(property);\n break;\n }\n case ReflectionOp.method:\n case ReflectionOp.methodSignature: {\n let name = program.stack[this.eatParameter() as number] as\n | number\n | string\n | symbol\n | (() => symbol);\n const types = this.popFrame() as Type[];\n const returnType =\n types.length > 0\n ? (types[types.length - 1] as Type)\n : ({ kind: ReflectionKind.any } as Type);\n const parameters: TypeParameter[] =\n types.length > 1 ? (types.slice(0, -1) as TypeParameter[]) : [];\n if (isFunction(name)) name = name();\n\n let t: TypeMethod | TypeMethodSignature =\n op === ReflectionOp.method\n ? {\n kind: ReflectionKind.method,\n parent: undefined as any,\n visibility: ReflectionVisibility.public,\n name,\n return: returnType,\n parameters\n }\n : {\n kind: ReflectionKind.methodSignature,\n parent: undefined as any,\n name,\n return: returnType,\n parameters\n };\n t.return.parent = t;\n for (const member of t.parameters) member.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.optional:\n (\n program.stack[program.stackPointer] as\n | TypeBaseMember\n | TypeTupleMember\n ).optional = true;\n break;\n case ReflectionOp.readonly:\n (program.stack[program.stackPointer] as TypeBaseMember).readonly =\n true;\n break;\n case ReflectionOp.public:\n (program.stack[program.stackPointer] as TypeBaseMember).visibility =\n ReflectionVisibility.public;\n break;\n case ReflectionOp.protected:\n (program.stack[program.stackPointer] as TypeBaseMember).visibility =\n ReflectionVisibility.protected;\n break;\n case ReflectionOp.private:\n (program.stack[program.stackPointer] as TypeBaseMember).visibility =\n ReflectionVisibility.private;\n break;\n case ReflectionOp.abstract:\n (program.stack[program.stackPointer] as TypeBaseMember).abstract =\n true;\n break;\n case ReflectionOp.static:\n (program.stack[program.stackPointer] as TypeBaseMember).static =\n true;\n break;\n case ReflectionOp.defaultValue:\n const stackDefaultValue = program.stack[program.stackPointer] as\n | TypeProperty\n | TypeEnumMember\n | TypeParameter;\n\n stackDefaultValue.default =\n program.stack[this.eatParameter() as number];\n break;\n case ReflectionOp.description:\n const stackDescription = program.stack[program.stackPointer] as\n | TypeProperty\n | TypeEnumMember\n | TypeParameter\n | TypeClass\n | TypeMethod\n | TypeFunction\n | TypePropertySignature\n | TypeMethodSignature\n | TypeObjectLiteral;\n\n stackDescription.description = program.stack[\n this.eatParameter() as number\n ] as string;\n break;\n\n case ReflectionOp.tags:\n const stackTags = program.stack[program.stackPointer] as\n | TypeProperty\n | TypeEnumMember\n | TypeParameter\n | TypeClass\n | TypeMethod\n | TypeFunction\n | TypePropertySignature\n | TypeMethodSignature\n | TypeObjectLiteral\n | TypeCallSignature;\n\n stackTags.tags = program.stack[\n this.eatParameter() as number\n ] as TagsReflection;\n break;\n\n case ReflectionOp.typeName: {\n const type = program.stack[program.stackPointer] as Type;\n const name = program.stack[this.eatParameter() as number] as string;\n if (type.typeName) {\n type.originTypes = [\n { typeName: type.typeName, typeArguments: type.typeArguments },\n ...(type.originTypes || [])\n ];\n type.typeArguments = undefined;\n }\n type.typeName = name;\n break;\n }\n case ReflectionOp.indexSignature: {\n const type = this.pop() as Type;\n const index = this.pop() as Type;\n const t: Type = {\n kind: ReflectionKind.indexSignature,\n parent: undefined as any,\n index,\n type\n };\n t.type.parent = t;\n t.index.parent = t;\n this.pushType(t);\n break;\n }\n case ReflectionOp.objectLiteral: {\n let t = {\n kind: ReflectionKind.objectLiteral,\n id: state.nominalId++,\n types: []\n } as TypeObjectLiteral;\n\n const frameTypes = this.popFrame() as (\n | TypeIndexSignature\n | TypePropertySignature\n | TypeMethodSignature\n | TypeObjectLiteral\n | TypeCallSignature\n )[];\n pushObjectLiteralTypes(t, frameTypes);\n for (const member of t.types) member.parent = t;\n this.pushType(t);\n break;\n }\n // case ReflectionOp.pointer: {\n // this.push(program.stack[this.eatParameter() as number]);\n // break;\n // }\n case ReflectionOp.distribute: {\n this.handleDistribute(program);\n break;\n }\n case ReflectionOp.condition: {\n const right = this.pop() as Type;\n const left = this.pop() as Type;\n const condition = this.pop() as Type | number;\n this.popFrame();\n isConditionTruthy(condition)\n ? this.pushType(left)\n : this.pushType(right);\n break;\n }\n case ReflectionOp.jumpCondition: {\n const leftProgram = this.eatParameter() as number;\n const rightProgram = this.eatParameter() as number;\n const condition = this.pop() as Type | number;\n const truthy = isConditionTruthy(condition);\n this.call(truthy ? leftProgram : rightProgram);\n break;\n }\n case ReflectionOp.infer: {\n const frameOffset = this.eatParameter() as number;\n const stackEntryIndex = this.eatParameter() as number;\n const frame = program.frame;\n\n let last: Type = { kind: ReflectionKind.unknown };\n this.push({\n kind: ReflectionKind.infer,\n set: (type: Type) => {\n if (last.kind !== ReflectionKind.unknown) {\n if (\n last.kind === ReflectionKind.union ||\n last.kind === ReflectionKind.intersection\n ) {\n if (!isTypeIncluded(last.types, type)) {\n last.types.push(type);\n }\n } else {\n if (\n type.parent &&\n type.parent.kind === ReflectionKind.parameter\n ) {\n last = {\n kind: ReflectionKind.intersection,\n types: [last, type]\n };\n } else {\n last = {\n kind: ReflectionKind.union,\n types: [last, type]\n };\n }\n }\n } else {\n last = type;\n }\n\n if (frameOffset === 0) {\n program.stack[frame.startIndex + 1 + stackEntryIndex] = last;\n } else if (frameOffset === 1) {\n program.stack[\n frame.previous!.startIndex + 1 + stackEntryIndex\n ] = last;\n } else if (frameOffset === 2) {\n program.stack[\n frame.previous!.previous!.startIndex + 1 + stackEntryIndex\n ] = last;\n } else if (frameOffset === 3) {\n program.stack[\n frame.previous!.previous!.previous!.startIndex +\n 1 +\n stackEntryIndex\n ] = last;\n } else if (frameOffset === 4) {\n program.stack[\n frame.previous!.previous!.previous!.previous!.startIndex +\n 1 +\n stackEntryIndex\n ] = last;\n } else {\n let current = frame;\n for (let i = 0; i < frameOffset; i++)\n current = current.previous!;\n program.stack[current.startIndex + 1 + stackEntryIndex] =\n last;\n }\n }\n } as TypeInfer);\n break;\n }\n case ReflectionOp.extends: {\n const right = this.pop() as string | number | boolean | Type;\n const left = this.pop() as string | number | boolean | Type;\n const result = isExtendable(left, right);\n this.pushType({ kind: ReflectionKind.literal, literal: result });\n break;\n }\n case ReflectionOp.indexAccess: {\n this.handleIndexAccess();\n break;\n }\n case ReflectionOp.typeof: {\n const param1 = this.eatParameter() as number;\n const fn = program.stack[param1] as () => any;\n const value = fn();\n\n //typeInfer calls Processor.run() and changes this.program, so handle it correctly\n const result = typeInfer(value);\n this.push(result, program);\n\n //this.reflect/run might create another program onto the stack. switch to it if so\n if (this.program !== program) {\n //continue to next this.program.\n program.program++; //manual increment as the for loop would normally do that\n continue programLoop;\n }\n break;\n }\n case ReflectionOp.keyof: {\n this.handleKeyOf();\n break;\n }\n case ReflectionOp.var: {\n this.push({ kind: ReflectionKind.unknown, var: true });\n program.frame.variables++;\n break;\n }\n case ReflectionOp.mappedType2: {\n this.handleMappedType(program, true);\n break;\n }\n case ReflectionOp.mappedType: {\n this.handleMappedType(program);\n break;\n }\n case ReflectionOp.loads: {\n const frameOffset = this.eatParameter() as number;\n const stackEntryIndex = this.eatParameter() as number;\n if (frameOffset === 0) {\n this.push(\n program.stack[program.frame.startIndex + 1 + stackEntryIndex]\n );\n } else if (frameOffset === 1) {\n this.push(\n program.stack[\n program.frame.previous!.startIndex + 1 + stackEntryIndex\n ]\n );\n } else if (frameOffset === 2) {\n this.push(\n program.stack[\n program.frame.previous!.previous!.startIndex +\n 1 +\n stackEntryIndex\n ]\n );\n } else if (frameOffset === 3) {\n this.push(\n program.stack[\n program.frame.previous!.previous!.previous!.startIndex +\n 1 +\n stackEntryIndex\n ]\n );\n } else if (frameOffset === 4) {\n this.push(\n program.stack[\n program.frame.previous!.previous!.previous!.previous!\n .startIndex +\n 1 +\n stackEntryIndex\n ]\n );\n } else {\n let current = program.frame;\n for (let i = 0; i < frameOffset; i++) current = current.previous!;\n this.push(\n program.stack[current.startIndex + 1 + stackEntryIndex]\n );\n }\n break;\n }\n case ReflectionOp.arg: {\n //used by InlineRuntimeType too\n const arg = this.eatParameter() as number;\n const t = program.stack[arg] as\n | Type\n | ReflectionClass<any>\n | number\n | string\n | boolean\n | bigint;\n if (t instanceof ReflectionClass) {\n this.push({ ...t.type, typeName: t.getClassName() });\n } else if (\n \"string\" === typeof t ||\n \"number\" === typeof t ||\n \"boolean\" === typeof t ||\n \"bigint\" === typeof t\n ) {\n this.push({ kind: ReflectionKind.literal, literal: t });\n } else {\n this.push(t);\n }\n break;\n }\n case ReflectionOp.return: {\n this.returnFrame();\n break;\n }\n case ReflectionOp.frame: {\n this.pushFrame();\n break;\n }\n case ReflectionOp.moveFrame: {\n const type = this.pop();\n this.popFrame();\n if (type) this.push(type);\n break;\n }\n case ReflectionOp.jump: {\n const arg = this.eatParameter() as number;\n program.program = arg - 1; //-1 because next iteration does program++\n break;\n }\n case ReflectionOp.call: {\n const programPointer = this.eatParameter() as number;\n this.call(programPointer);\n break;\n }\n case ReflectionOp.nominal: {\n const t = program.stack[program.stackPointer] as Type;\n //program ended, so assign new nominal id to objectLiteral or class\n t.id = state.nominalId++;\n break;\n }\n case ReflectionOp.inline: {\n const pPosition = this.eatParameter() as number;\n const pOrFn = program.stack[pPosition] as\n | number\n | Packed\n | (() => Packed);\n const p = isFunction(pOrFn) ? pOrFn() : pOrFn;\n if (p === undefined) {\n debug(\n `Failed runtime inlining of ${pOrFn.toString()}. Value is undefined, probably because of a circular reference or failed import.`\n );\n this.push({ kind: ReflectionKind.unknown });\n } else if (\"number\" === typeof p) {\n //self circular reference, usually a 0, which indicates we put the result of the current program as the type on the stack.\n this.push(program.resultType);\n } else {\n //when it's just a simple reference resolution like typeOf<Class>() then don't issue a new reference (no inline: true)\n const directReference = !!(\n this.isEnded() &&\n program.previous &&\n program.previous.end === 0\n );\n const result = this.reflect(p, [], {\n inline: !directReference,\n reuseCached: directReference\n });\n if (directReference) program.directReturn = true;\n this.push(result, program);\n\n //this.reflect/run might create another program onto the stack. switch to it if so\n if (this.program !== program) {\n //continue to next this.program.\n program.program++; //manual increment as the for loop would normally do that\n continue programLoop;\n }\n }\n break;\n }\n case ReflectionOp.inlineCall: {\n const pPosition = this.eatParameter() as number;\n const argumentSize = this.eatParameter() as number;\n const inputs: Type[] = [];\n for (let i = 0; i < argumentSize; i++) {\n let input = this.pop() as Type;\n if (\n (input.kind === ReflectionKind.never ||\n input.kind === ReflectionKind.unknown) &&\n program.inputs[i]\n )\n input = program.inputs[i] as Type;\n inputs.unshift(input);\n }\n const pOrFn = program.stack[pPosition] as\n | number\n | Packed\n | (() => Packed);\n const p = isFunction(pOrFn) ? pOrFn() : pOrFn;\n if (p === undefined) {\n debug(\n `Failed runtime inlining call of ${pOrFn.toString()}. Value is undefined, probably because of a circular reference or failed import.`\n );\n this.push({ kind: ReflectionKind.unknown });\n } else if (\"number\" === typeof p) {\n if (argumentSize === 0) {\n //self circular reference, usually a 0, which indicates we put the result of the current program as the type on the stack.\n this.push(program.resultType);\n } else {\n const found = findExistingProgram(\n this.program,\n program.object,\n inputs\n );\n if (found) {\n this.push(createRef(found), program);\n } else {\n // process.stdout.write(`Cache miss ${pOrFn.toString()}(...${inputs.length})\\n`);\n //execute again the current program\n const nextProgram = createProgram(\n {\n ops: program.ops,\n initialStack: program.initialStack\n },\n inputs\n );\n this.push(this.runProgram(nextProgram), program);\n\n //continue to next this.program that was assigned by runProgram()\n program.program++; //manual increment as the for loop would normally do that\n continue programLoop;\n }\n }\n } else {\n const result = this.reflect(p, inputs);\n\n if (isWithAnnotations(result) && inputs.length) {\n result.typeArguments = result.typeArguments || [];\n for (let i = 0; i < inputs.length; i++) {\n result.typeArguments[i] = inputs[i];\n }\n }\n\n this.push(result, program);\n\n //this.reflect/run might create another program onto the stack. switch to it if so\n if (this.program !== program) {\n //continue to next this.program.\n program.program++; //manual increment as the for loop would normally do that\n continue programLoop;\n }\n }\n break;\n }\n }\n }\n\n result = narrowOriginalLiteral(\n program.stack[program.stackPointer] as Type\n );\n // process.stdout.write(`Done ${program.depth} in ${Date.now() - program.started}ms with ${stringifyValueWithType(program.object)} -> ${stringifyShortResolvedType(result as Type)}\\n`);\n\n if (isType(result)) {\n if (program.object) {\n if (\n result.kind === ReflectionKind.class &&\n result.classType === Object\n ) {\n result.classType = program.object;\n applyClassDecorators(result);\n }\n if (result.kind === ReflectionKind.function && !result.function) {\n result.function = program.object;\n }\n }\n if (!program.directReturn) {\n result = assignResult(\n program.resultType,\n result as Type,\n !result.inlined\n );\n applyScheduledAnnotations(program.resultType);\n }\n }\n\n program.active = false;\n if (program.previous) this.program = program.previous;\n\n if (program.resultTypes)\n for (const ref of program.resultTypes) {\n assignResult(ref, result as Type, false);\n applyScheduledAnnotations(ref);\n }\n if (until === program) {\n this.cache = [];\n return result;\n }\n }\n\n this.cache = [];\n return result;\n }\n\n private handleTuple() {\n const types: TypeTupleMember[] = [];\n const stackTypes = this.popFrame() as Type[];\n for (const type of stackTypes) {\n const resolved: TypeTupleMember =\n type.kind === ReflectionKind.tupleMember\n ? type\n : {\n kind: ReflectionKind.tupleMember,\n parent: undefined as any,\n type\n };\n type.parent = resolved;\n if (resolved.type.kind === ReflectionKind.rest) {\n if (resolved.type.type.kind === ReflectionKind.tuple) {\n for (const sub of resolved.type.type.types) {\n types.push(sub);\n }\n } else {\n types.push(resolved);\n }\n } else {\n types.push(resolved);\n }\n }\n const t: Type = { kind: ReflectionKind.tuple, types };\n for (const member of t.types) member.parent = t;\n this.pushType(t);\n }\n\n private handleIntersection() {\n const types = this.popFrame() as Type[];\n let result: Type | undefined = { kind: ReflectionKind.unknown };\n if (!types.length) {\n this.pushType({ kind: ReflectionKind.never });\n return;\n }\n const annotations: Annotations = {};\n const decorators: TypeObjectLiteral[] = [];\n const defaultDecorators: Type[] = [];\n\n function appendAnnotations(a: Type) {\n if (a.annotations === annotations) return;\n if (a.annotations) Object.assign(annotations, a.annotations);\n if (a.decorators)\n decorators.push(...(a.decorators as TypeObjectLiteral[]));\n }\n\n function handleUnion(a: Type, unionType: TypeUnion): Type {\n if (\n a.kind === ReflectionKind.objectLiteral ||\n a.kind === ReflectionKind.class\n ) {\n return unboxUnion({\n kind: ReflectionKind.union,\n types: unionType.types\n .map(v => collapse(v, a))\n .filter(v => v.kind !== ReflectionKind.never)\n });\n }\n return unboxUnion({\n kind: ReflectionKind.union,\n types: unionType.types.filter(v => isExtendable(v, a))\n });\n }\n\n function handleAndObject(a: Type, objectType: TypeObjectLiteral): Type {\n if (objectType.types.length === 0) {\n return isExtendable(a, objectType) ? a : { kind: ReflectionKind.never };\n }\n defaultDecorators.push(objectType);\n annotations[defaultAnnotation.symbol] = defaultDecorators;\n return a;\n }\n\n function collapse(a: Type, b: Type): Type {\n if (a.kind === ReflectionKind.any) return a;\n if (b.kind === ReflectionKind.any) return b;\n\n if (a.kind === ReflectionKind.union) {\n return handleUnion(b, a);\n }\n\n if (b.kind === ReflectionKind.union) {\n return handleUnion(a, b);\n }\n\n if (\n (a.kind === ReflectionKind.objectLiteral ||\n a.kind === ReflectionKind.class) &&\n (b.kind === ReflectionKind.objectLiteral ||\n b.kind === ReflectionKind.class)\n ) {\n appendAnnotations(a);\n appendAnnotations(b);\n return merge([a, b]);\n }\n\n // object & {then() ...}\n if (\n a.kind === ReflectionKind.object &&\n b.kind === ReflectionKind.objectLiteral\n ) {\n return b;\n }\n if (\n b.kind === ReflectionKind.object &&\n a.kind === ReflectionKind.objectLiteral\n ) {\n return a;\n }\n\n if (isPrimitive(a) && b.kind === ReflectionKind.objectLiteral) {\n return handleAndObject(a, b);\n }\n\n if (isPrimitive(b) && a.kind === ReflectionKind.objectLiteral) {\n return handleAndObject(b, a);\n }\n\n //1 & number => 1\n //number & 1 => 1\n //'2' & string => '2'\n //string & '2' => '2'\n //2 & string => never\n //string & 2 => never\n //'b' & number => never\n //number & 'b' => never\n if (isPrimitive(a) && b.kind === ReflectionKind.literal) {\n return isExtendable(b, a) ? b : { kind: ReflectionKind.never };\n }\n if (isPrimitive(b) && a.kind === ReflectionKind.literal) {\n return isExtendable(a, b) ? a : { kind: ReflectionKind.never };\n }\n\n // two different primitives always return never\n if (isPrimitive(a) && isPrimitive(b) && a.kind !== b.kind) {\n return { kind: ReflectionKind.never };\n }\n\n if (\n a.kind === ReflectionKind.objectLiteral ||\n a.kind === ReflectionKind.class ||\n a.kind === ReflectionKind.never ||\n a.kind === ReflectionKind.unknown\n )\n return b;\n\n if (b.annotations) {\n Object.assign(annotations, b.annotations);\n }\n\n return a;\n }\n\n outer: for (const type of types) {\n if (type.kind === ReflectionKind.never) continue;\n if (type.kind === ReflectionKind.objectLiteral) {\n for (const decorator of typeDecorators) {\n if (decorator(annotations, type)) {\n decorators.push(type);\n continue outer;\n }\n }\n }\n if (result.kind === ReflectionKind.never) {\n result = { kind: ReflectionKind.never };\n break;\n } else if (result.kind === ReflectionKind.unknown) {\n result = type;\n appendAnnotations(type);\n } else {\n result = collapse(result, type);\n }\n }\n\n if (result.kind === ReflectionKind.unknown) {\n //type not calculated yet, so schedule annotations. Those will be applied once the type is fully computed.\n result.scheduleDecorators = decorators;\n } else {\n //copy so the original type is not modified\n result = copyAndSetParent(result);\n result.annotations = result.annotations || {};\n if (decorators.length) result.decorators = decorators;\n Object.assign(result.annotations, annotations);\n }\n return result;\n }\n\n private handleDistribute(program: Program) {\n const programPointer = this.eatParameter() as number;\n\n if (program.frame.distributiveLoop) {\n const type = this.pop() as Type;\n\n if (type.kind === ReflectionKind.never) {\n //we ignore never, to filter them out\n } else {\n this.push(type);\n }\n } else {\n //start loop\n const distributeOver = this.pop() as Type;\n program.frame.distributiveLoop = new Loop(distributeOver);\n }\n\n const next = program.frame.distributiveLoop.next();\n if (next === undefined) {\n //end\n const types = this.popFrame() as Type[];\n const result: TypeUnion = {\n kind: ReflectionKind.union,\n types: flattenUnionTypes(types)\n };\n const t: Type = unboxUnion(result);\n if (t.kind === ReflectionKind.union)\n for (const member of t.types) member.parent = t;\n this.push(t);\n } else {\n program.stack[program.frame.startIndex + 1] = next;\n this.call(programPointer, -1); //-1=jump back to this very same position, to be able to loop\n }\n }\n\n private handleIndexAccess() {\n const right = this.pop() as Type;\n const left = this.pop() as Type;\n\n if (!isType(left)) {\n this.push({ kind: ReflectionKind.never });\n } else {\n const t: Type = indexAccess(left, right);\n if (isWithAnnotations(t)) {\n t.indexAccessOrigin = {\n container: left as TypeObjectLiteral,\n index: right as Type\n };\n }\n this.push(copyAndSetParent(t));\n }\n }\n\n private handleKeyOf() {\n const type = this.pop() as Type;\n if (\n type.kind === ReflectionKind.objectLiteral ||\n type.kind === ReflectionKind.class\n ) {\n const union = {\n kind: ReflectionKind.union,\n origin: type,\n types: []\n } as TypeUnion;\n for (const member of type.types) {\n if (\n (member.kind === ReflectionKind.propertySignature ||\n member.kind === ReflectionKind.property) &&\n member.name !== \"new\"\n ) {\n union.types.push({\n kind: ReflectionKind.literal,\n literal: member.name,\n parent: union,\n origin: member\n } as TypeLiteral);\n } else if (\n (member.kind === ReflectionKind.methodSignature ||\n member.kind === ReflectionKind.method) &&\n member.name !== \"constructor\"\n ) {\n union.types.push({\n kind: ReflectionKind.literal,\n literal: member.name,\n parent: union,\n origin: member\n } as TypeLiteral);\n }\n }\n this.push(union);\n } else if (type.kind === ReflectionKind.tuple) {\n const union = {\n kind: ReflectionKind.union,\n origin: type,\n types: []\n } as TypeUnion;\n for (let i = 0; i < type.types.length; i++) {\n union.types.push({\n kind: ReflectionKind.literal,\n literal: i,\n parent: union\n } as TypeLiteral);\n }\n this.push(union);\n } else if (type.kind === ReflectionKind.any) {\n this.push({\n kind: ReflectionKind.union,\n types: [\n { kind: ReflectionKind.string },\n { kind: ReflectionKind.number },\n { kind: ReflectionKind.symbol }\n ]\n });\n } else {\n this.push({ kind: ReflectionKind.never });\n }\n }\n\n private handleMappedType(program: Program, withName = false) {\n const functionPointer = this.eatParameter() as number;\n const modifier = this.eatParameter() as number;\n\n function isSimpleIndex(index: Type): boolean {\n if (\n index.kind === ReflectionKind.string ||\n index.kind === ReflectionKind.number ||\n index.kind === ReflectionKind.symbol\n )\n return true;\n if (index.kind === ReflectionKind.union) {\n const types = index.types.filter(v => isSimpleIndex(v));\n return types.length === 0;\n }\n return false;\n }\n\n if (program.frame.mappedType) {\n let type = this.pop() as Type;\n let index: Type | string | boolean | symbol | number | bigint = program\n .stack[program.frame.startIndex + 1] as Type;\n if (withName) {\n if (type.kind === ReflectionKind.tuple) {\n index = type.types[1].type;\n type = type.types[0].type;\n } else {\n throw new Error(\"Tuple expect\");\n }\n }\n const fromType = program.frame.mappedType.fromType;\n const isTuple =\n fromType.origin && fromType.origin.kind === ReflectionKind.tuple;\n\n if (index.kind === ReflectionKind.never) {\n //ignore\n } else if (index.kind === ReflectionKind.any || isSimpleIndex(index)) {\n const t: TypeIndexSignature = {\n kind: ReflectionKind.indexSignature,\n type,\n index,\n parent: undefined as any\n };\n t.type.parent = t;\n t.index.parent = t;\n this.push(t);\n } else {\n let optional: true | undefined = undefined;\n let readonly: true | undefined = undefined;\n\n if (\n index.kind === ReflectionKind.literal &&\n !(index.literal instanceof RegExp)\n ) {\n optional =\n !!index.origin && isMember(index.origin) && index.origin.optional\n ? true\n : undefined;\n index = index.literal;\n }\n\n // If the type was a property, then grab the optional modifier from the property itself.\n // Note: This is inconsistent with TS official behaviour, as\n // mapped types only preserve modifiers when its homomorphic\n // https://github.com/microsoft/TypeScript/pull/12563\n if (\n type.parent &&\n (type.parent.kind === ReflectionKind.propertySignature ||\n type.parent.kind === ReflectionKind.property)\n ) {\n if (type.parent.optional) optional = true;\n if (type.parent.readonly) readonly = true;\n }\n\n const property: TypeProperty | TypePropertySignature | TypeTupleMember =\n type.kind === ReflectionKind.propertySignature ||\n type.kind === ReflectionKind.property ||\n type.kind === ReflectionKind.tupleMember\n ? type\n : ({\n kind: isTuple\n ? ReflectionKind.tupleMember\n : ReflectionKind.propertySignature,\n name: index,\n type\n } as TypePropertySignature);\n\n if (optional) {\n property.optional = true;\n }\n if (readonly && property.kind !== ReflectionKind.tupleMember)\n property.readonly = true;\n\n if (property !== type) type.parent = property;\n if (property.type.kind !== ReflectionKind.never) {\n //never is filtered out\n if (modifier !== 0) {\n if (modifier & MappedModifier.optional) {\n property.optional = true;\n }\n if (modifier & MappedModifier.removeOptional && property.optional) {\n property.optional = undefined;\n }\n if (property.kind !== ReflectionKind.tupleMember) {\n if (modifier & MappedModifier.readonly) {\n property.readonly = true;\n }\n if (\n modifier & MappedModifier.removeReadonly &&\n property.readonly\n ) {\n property.readonly = undefined;\n }\n }\n }\n this.push(property);\n }\n }\n } else {\n program.frame.mappedType = new Loop(this.pop() as Type);\n }\n\n let next = program.frame.mappedType.next();\n if (next === undefined) {\n //end\n const fromType = program.frame.mappedType.fromType;\n const members = this.popFrame() as Type[];\n let t: Type;\n\n if (fromType.origin && fromType.origin.kind === ReflectionKind.tuple) {\n t = { kind: ReflectionKind.tuple, types: members as any[] };\n } else {\n t = {\n kind: ReflectionKind.objectLiteral,\n id: state.nominalId++,\n types: members as any[]\n };\n }\n\n this.push(t);\n } else {\n if (isMember(next)) {\n next = { kind: ReflectionKind.literal, literal: next.name };\n }\n program.stack[program.frame.startIndex + 1] = next; //change the mapped type parameter\n this.call(functionPointer, -2);\n }\n }\n\n private handleTemplateLiteral() {\n const types = this.popFrame() as Type[];\n const result: TypeUnion = { kind: ReflectionKind.union, types: [] };\n const cartesian = new CartesianProduct();\n for (const type of types) {\n cartesian.add(type);\n }\n const product = cartesian.calculate();\n\n outer: for (const combination of product) {\n const template: TypeTemplateLiteral = {\n kind: ReflectionKind.templateLiteral,\n types: []\n };\n let hasPlaceholder = false;\n let lastLiteral:\n | { kind: ReflectionKind.literal; literal: string; parent?: Type }\n | undefined = undefined;\n //merge a combination of types, e.g. [string, 'abc', '3'] as template literal => `${string}abc3`.\n for (const item of combination) {\n if (item.kind === ReflectionKind.never) {\n //template literals that contain a never like `prefix.${never}` are completely ignored\n continue outer;\n }\n\n if (item.kind === ReflectionKind.literal) {\n if (lastLiteral) {\n lastLiteral.literal += (item.literal as string) + \"\";\n } else {\n lastLiteral = {\n kind: ReflectionKind.literal,\n literal: (item.literal as string) + \"\",\n parent: template\n };\n template.types.push(lastLiteral);\n }\n } else {\n hasPlaceholder = true;\n lastLiteral = undefined;\n item.parent = template;\n template.types.push(item as TypeTemplateLiteral[\"types\"][number]);\n }\n }\n\n if (hasPlaceholder) {\n if (\n template.types.length === 1 &&\n template.types[0].kind === ReflectionKind.string\n ) {\n template.types[0].parent = result;\n result.types.push(template.types[0]);\n } else {\n template.parent = result;\n result.types.push(template);\n }\n } else if (lastLiteral) {\n lastLiteral.parent = result;\n result.types.push(lastLiteral);\n }\n }\n const t: Type = unboxUnion(result);\n if (t.kind === ReflectionKind.union)\n for (const member of t.types) member.parent = t;\n this.pushType(t);\n }\n\n protected push(\n entry: RuntimeStackEntry,\n program: Program = this.program\n ): void {\n const i = ++program.stackPointer;\n\n if (i < program.stack.length) {\n program.stack[i] = entry;\n } else {\n program.stack.push(entry);\n }\n }\n\n protected pop(): RuntimeStackEntry {\n if (this.program.stackPointer < 0) throw new Error(\"Stack empty\");\n // return this.program.stack.pop()!;\n return this.program.stack[this.program.stackPointer--];\n }\n\n protected pushFrame(): void {\n this.program.frame = {\n index: this.program.frame.index + 1,\n startIndex: this.program.stackPointer,\n inputs: [],\n variables: 0,\n previous: this.program.frame\n };\n }\n\n protected popFrame(): RuntimeStackEntry[] {\n const result = this.program.stack.slice(\n this.program.frame.startIndex + this.program.frame.variables + 1,\n this.program.stackPointer + 1\n );\n this.program.stackPointer = this.program.frame.startIndex;\n if (this.program.frame.previous)\n this.program.frame = this.program.frame.previous;\n return result;\n }\n\n /**\n * Create a new stack frame with the calling convention.\n */\n protected call(program: number, jumpBackTo: number = 1): void {\n this.push(this.program.program + jumpBackTo); //the `return address`\n this.pushFrame();\n // process.stdout.write(`[${this.program.frame.index}] call ${program}\\n`);\n this.program.program = program - 1; //-1 because next iteration does program++\n }\n\n /**\n * Removes the stack frame, and puts the latest entry on the stack.\n */\n protected returnFrame(): void {\n const returnValue = this.pop(); //latest entry on the stack is the return value\n const returnAddress = this.program.stack[this.program.frame.startIndex]; //startIndex points the to new frame - 1 position, which is the `return address`.\n // process.stdout.write(`[${this.program.frame.index}] return ${returnAddress}\\n`);\n this.program.stackPointer = this.program.frame.startIndex - 1; //-1 because call convention adds `return address` before entering new frame\n this.push(returnValue);\n if (\"number\" === typeof returnAddress)\n this.program.program = returnAddress - 1; //-1 because iteration does program++\n if (this.program.frame.previous)\n this.program.frame = this.program.frame.previous;\n }\n\n protected pushType(type: Type): void {\n this.push(type);\n }\n\n protected eatParameter(): RuntimeStackEntry {\n return this.program.ops[++this.program.program];\n }\n}\n\nfunction typeInferFromContainer(container: Iterable<any>): Type {\n const union: TypeUnion = { kind: ReflectionKind.union, types: [] };\n for (const item of container) {\n const type = widenLiteral(typeInfer(item));\n if (!isTypeIncluded(union.types, type)) union.types.push(type);\n }\n\n return union.types.length === 0\n ? { kind: ReflectionKind.any }\n : union.types.length === 1\n ? union.types[0]\n : union;\n}\n\nexport function typeInfer(value: any): Type {\n if (\n \"string\" === typeof value ||\n \"number\" === typeof value ||\n \"boolean\" === typeof value ||\n \"bigint\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n return { kind: ReflectionKind.literal, literal: value };\n } else if (null === value) {\n return { kind: ReflectionKind.null };\n } else if (undefined === value) {\n return { kind: ReflectionKind.undefined };\n } else if (value instanceof RegExp) {\n return { kind: ReflectionKind.literal, literal: value };\n } else if (\"function\" === typeof value) {\n if (isArray(value.__type)) {\n //with emitted types: function or class\n //don't use resolveRuntimeType since we don't allow cache here\n // console.log('typeInfer of', value.name);\n return Processor.get().reflect(value, undefined, {\n inline: true\n }) as Type;\n }\n\n if (isClass(value)) {\n //unknown class\n return {\n kind: ReflectionKind.class,\n classType: value as ClassType,\n types: []\n };\n }\n\n return {\n kind: ReflectionKind.function,\n function: value,\n name: value.name,\n return: { kind: ReflectionKind.any },\n parameters: []\n };\n } else if (isArray(value)) {\n return { kind: ReflectionKind.array, type: typeInferFromContainer(value) };\n } else if (\"object\" === typeof value) {\n const constructor = value.constructor;\n if (\n \"function\" === typeof constructor &&\n constructor !== Object &&\n isArray(constructor.__type)\n ) {\n //with emitted types\n //don't use resolveRuntimeType since we don't allow cache here\n return Processor.get().reflect(constructor, undefined, {\n inline: true\n }) as Type;\n }\n\n if (constructor === RegExp) return { kind: ReflectionKind.regexp };\n if (constructor === Date)\n return { kind: ReflectionKind.class, classType: Date, types: [] };\n if (constructor === Set) {\n const type = typeInferFromContainer(value);\n return {\n kind: ReflectionKind.class,\n classType: Set,\n arguments: [type],\n types: []\n };\n }\n\n if (constructor === Map) {\n const keyType = typeInferFromContainer((value as Map<any, any>).keys());\n const valueType = typeInferFromContainer(\n (value as Map<any, any>).values()\n );\n return {\n kind: ReflectionKind.class,\n classType: Map,\n arguments: [keyType, valueType],\n types: []\n };\n }\n\n //generate a new program that builds a objectLiteral. This is necessary since typeInfer() with its Processor.reflect() calls might return immediately TypeAny if\n //the execution was scheduled (if we are in an executing program) so we can not depend on the result directly.\n //each part of the program of a value[i] is executed after the current OP, so we have to schedule new OPs doing the same as\n //in this loop here and construct the objectLiteral in the VM.\n const resultType: TypeObjectLiteral = {\n kind: ReflectionKind.objectLiteral,\n id: state.nominalId++,\n types: []\n };\n const ops: ReflectionOp[] = [];\n const stack: RuntimeStackEntry[] = [];\n\n for (const i in value) {\n const indexTypeOfArg = stack.length;\n stack.push(() => value[i]);\n ops.push(ReflectionOp.typeof, indexTypeOfArg, ReflectionOp.widen);\n\n const indexName = stack.length;\n stack.push(i);\n ops.push(ReflectionOp.propertySignature, indexName);\n }\n\n ops.push(ReflectionOp.objectLiteral);\n\n return Processor.get().runProgram(\n createProgram({ ops, stack, resultType })\n ) as Type;\n }\n return { kind: ReflectionKind.any };\n}\n\nfunction applyClassDecorators(type: TypeClass) {\n if (!isWithDeferredDecorators(type.classType)) return;\n\n for (const decorator of type.classType.__decorators) {\n const { data, property, parameterIndexOrDescriptor } = decorator;\n\n if (property !== undefined) {\n const member = getMember(type, property);\n if (!member) continue;\n\n if (\n member.kind === ReflectionKind.propertySignature ||\n member.kind === ReflectionKind.property\n ) {\n applyPropertyDecorator(member.type, data);\n }\n\n if (\n \"number\" === typeof parameterIndexOrDescriptor &&\n (member.kind === ReflectionKind.method ||\n member.kind === ReflectionKind.methodSignature)\n ) {\n const param = member.parameters[parameterIndexOrDescriptor];\n if (param) {\n applyPropertyDecorator(param.type, data);\n }\n }\n }\n }\n}\n\nfunction applyPropertyDecorator(type: Type, data: TData) {\n //map @t.validate to Validate<>\n if (data.validators.length && isWithAnnotations(type)) {\n const annotations = getAnnotations(type);\n for (const validator of data.validators) {\n validationAnnotation.register(annotations, {\n name: \"function\",\n args: [\n {\n kind: ReflectionKind.function,\n function: validator,\n parameters: [],\n return: { kind: ReflectionKind.any }\n }\n ]\n });\n }\n }\n}\n\nfunction collapseFunctionToMethod(\n member: TypePropertySignature | TypeMethodSignature\n): member is TypePropertySignature & { type: TypeMethodSignature } {\n return (\n member.kind === ReflectionKind.propertySignature &&\n member.type.kind === ReflectionKind.function &&\n member.type.function !== Function\n );\n}\n\nfunction pushObjectLiteralTypes(\n type: TypeObjectLiteral,\n types: (\n | TypeIndexSignature\n | TypePropertySignature\n | TypeMethodSignature\n | TypeObjectLiteral\n | TypeCallSignature\n )[]\n) {\n let annotations: Annotations = {};\n const decorators: Type[] = [];\n\n outer: for (const member of types) {\n if (\n member.kind === ReflectionKind.propertySignature &&\n member.type.kind === ReflectionKind.never\n )\n continue;\n\n if (member.kind === ReflectionKind.objectLiteral) {\n //all `extends T` expression land at the beginning of the stack frame, and are always an objectLiteral.\n //we use it as base and move its types first into types\n\n //it might be a decorator\n for (const decorator of typeDecorators) {\n if (decorator(annotations, member)) {\n decorators.push(member);\n continue outer;\n }\n }\n\n type.implements ||= [];\n type.implements.push(member);\n\n pushObjectLiteralTypes(type, member.types);\n\n //redirect decorators\n if (member.decorators) {\n decorators.push(...member.decorators);\n }\n if (member.annotations) {\n annotations = Object.assign(member.annotations, annotations);\n }\n } else if (member.kind === ReflectionKind.indexSignature) {\n //note: is it possible to overwrite an index signature?\n type.types.push(member);\n } else if (\n member.kind === ReflectionKind.propertySignature ||\n member.kind === ReflectionKind.methodSignature\n ) {\n const toAdd = collapseFunctionToMethod(member)\n ? ({\n kind: ReflectionKind.methodSignature,\n name: member.name,\n optional: member.optional,\n parameters: member.type.parameters,\n return: member.type.return\n } as TypeMethodSignature)\n : member;\n\n const existing = type.types.findIndex(\n v =>\n (v.kind === ReflectionKind.propertySignature ||\n v.kind === ReflectionKind.methodSignature) &&\n v.name === toAdd.name\n );\n if (existing !== -1) {\n //remove entry, since we replace it\n type.types.splice(existing, 1, toAdd);\n } else {\n type.types.push(toAdd);\n }\n } else if (member.kind === ReflectionKind.callSignature) {\n type.types.push(member);\n }\n }\n\n type.annotations = type.annotations || {};\n if (decorators.length) type.decorators = decorators;\n\n Object.assign(type.annotations, annotations);\n}\n\nexport function getEnumType(values: any[]): Type {\n let allowUndefined = false;\n let allowNull = false;\n let allowString = false;\n let allowNumber = false;\n\n for (const v of values) {\n if (v === undefined) allowUndefined = true;\n if (v === null) allowNull = true;\n if (typeof v === \"number\") allowNumber = true;\n if (typeof v === \"string\") allowString = true;\n }\n\n const union: TypeUnion = { kind: ReflectionKind.union, types: [] };\n if (allowString) union.types.push({ kind: ReflectionKind.string });\n if (allowNumber) union.types.push({ kind: ReflectionKind.number });\n if (allowNull) union.types.push({ kind: ReflectionKind.null });\n if (allowUndefined) union.types.push({ kind: ReflectionKind.undefined });\n\n return unboxUnion(union);\n}\n\nfunction resolveFunction<T extends Function>(fn: T, forObject: any): any {\n try {\n return fn();\n } catch (error) {\n return undefined;\n // throw new Error(`Could not resolve function of object ${getClassName(forObject)} via ${fn.toString()}: ${error}`);\n }\n}\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\n// import { ClassSchema, PropertySchema } from './model.js';\n//\n//\n// export function findCommonDiscriminant(classSchemas: ClassSchema[]): string | undefined {\n// //check if all discriminators are correct\n// let discriminatorFound: { schema: ClassSchema, property: PropertySchema } | undefined;\n// for (const schema of classSchemas) {\n// if (discriminatorFound && !schema.discriminant) {\n// throw new Error(`${discriminatorFound.schema.getClassName()} has a discriminant on '${discriminatorFound.property.name}' but ${schema.getClassName()} has none.`);\n// }\n//\n// if (discriminatorFound && schema.discriminant && schema.discriminant !== discriminatorFound.property.name) {\n// throw new Error(`${discriminatorFound.schema.getClassName()} has a discriminant on '${discriminatorFound.property.name}' but ${schema.getClassName()} has one on '${schema.discriminant}'.`);\n// }\n//\n// if (!discriminatorFound && schema.discriminant) {\n// discriminatorFound = { schema: schema, property: schema.getProperty(schema.discriminant) };\n// }\n// }\n//\n// return discriminatorFound ? discriminatorFound.property.name : undefined;\n// }\n\nimport { ReflectionClass } from './reflection/reflection.js';\nimport { ReflectionKind } from './reflection/type.js';\n\nexport function findCommonLiteral(reflectionClasses: ReflectionClass<any>[]): string | undefined {\n const candidates: { [name: string]: { found: number, values: any[], schemas: ReflectionClass<any>[] } } = {};\n\n for (const schema of reflectionClasses) {\n for (const property of schema.getProperties()) {\n if (property.type.kind !== ReflectionKind.literal) continue;\n\n if (candidates[property.name]) {\n let candidate = candidates[property.name];\n candidate.found++;\n if (candidate.values.includes(property.type.literal)) {\n const usedBy = candidate.schemas[candidate.values.indexOf(property.type.literal)];\n if (usedBy !== schema) {\n throw new Error(`${schema.getClassName()} has a literal on ${property.name} that is already used by ${usedBy.getClassName()}.`);\n }\n }\n candidate.values.push(property.type.literal);\n candidate.schemas.push(schema);\n } else {\n candidates[property.name] = { found: 1, values: [property.type.literal], schemas: [schema] };\n }\n }\n }\n\n //check which candidate has the right amount of usages\n for (const [name, info] of Object.entries(candidates)) {\n if (info.found === reflectionClasses.length) return name;\n }\n\n return;\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[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;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport { stringify, v4 } from 'uuid';\n\nexport class NoTypeReceived extends Error {\n constructor(message: string = 'No type information received. Circular import or no runtime type available.') {\n super(message);\n }\n}\n\n/**\n * Returns a new UUID v4 as string.\n */\nexport function uuid(): string {\n return v4();\n}\n\n/**\n * Writes a new uuid v4 into an existing buffer, and returns the same buffer.\n */\nexport function writeUuid(buffer: Uint8Array, offset: number = 0): Uint8Array {\n v4(undefined, buffer, offset);\n return buffer;\n}\n\n/**\n * Stringify an exising Uint8Array buffer.\n */\nexport function stringifyUuid(buffer: Uint8Array, offset: number = 0): string {\n return stringify(buffer, offset);\n}\n\nexport type Binary = ArrayBuffer | Uint8Array | Int8Array | Uint8ClampedArray | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array | Float64Array;\n\nexport type JSONPartial<T> = T extends Date ? string :\n T extends Array<infer K> ? Array<JSONPartial<K>> :\n // T extends TypedArrays ? string :\n T extends Binary ? string :\n T extends object ? JSONPartialObject<T> :\n T extends string ? number | T :\n T extends boolean ? number | string | T :\n T extends bigint ? number | string | T :\n T extends number ? bigint | string | T :\n T;\n\nexport type JSONPartialObject<T> = { [name in keyof T]?: T[name] | null };\n\nexport type JSONSingle<T> = T extends Date ? string | Date :\n T extends Array<infer K> ? Array<JSONSingle<K>> :\n T extends Binary ? string :\n T extends object ? JSONEntity<T> :\n T extends string ? string | number | boolean | undefined :\n T extends boolean ? T | number | string :\n T extends number ? T | string : T;\nexport type JSONEntity<T> = { [name in keyof T]: JSONSingle<T[name]> };\n\n// export type AnyEntitySingle<T> =\n// T extends Array<infer K> ? Array<AnyEntitySingle<K>> :\n// T extends TypedArrays ? any :\n// T extends ArrayBuffer ? any :\n// T extends object ? AnyEntity<T> :\n// T extends string ? any :\n// T extends boolean ? any :\n// T extends number ? any : any;\n// export type AnyEntity<T> = { [name in keyof T & string]: AnyEntitySingle<ExtractPrimaryKeyOrReferenceType<T[name]>> };\n//\n// export type JSONPatch<T> = { [name in keyof T & string]: JSONSingle<T[name]> } | { [name: string]: any };\n//\n// export type FlattenIfArray<T> = T extends Array<any> ? T[0] : T;\n//\n// export type ExtractClassType<T, A = never> = T extends ClassType<infer K> ? K :\n// T extends ClassSchema<infer K> ? K : A;\n//\n// export type PlainOrFullEntityFromClassTypeOrSchema<T> = { [name: string]: any } | JSONPartial<ExtractClassType<T>> | ExtractClassType<T>;\n\nexport function regExpFromString(v: string): RegExp {\n if (v[0] === '/') {\n const end = v.lastIndexOf('/');\n const regexp = v.slice(1, end);\n const modifiers = v.slice(1 + end);\n return new RegExp(regexp, modifiers);\n }\n return new RegExp(v);\n}\n","import { getClassName, getParentClass } from \"@deepkit/core\";\nimport { typeSettings } from \"./core.js\";\nimport { reflect, ReflectionClass, typeOf } from \"./reflection/reflection.js\";\nimport {\n entityAnnotation,\n EntityOptions,\n findMember,\n isSameType,\n isTypeIncluded,\n isWithAnnotations,\n ReflectionKind,\n ReflectionVisibility,\n TagsReflection,\n Type,\n TypeArray,\n TypeClass,\n typeDecorators,\n TypeEnum,\n TypeFunction,\n TypeIndexSignature,\n TypeLiteral,\n TypeObjectLiteral,\n TypeParameter,\n TypeProperty,\n TypeRest,\n TypeTuple,\n TypeTupleMember\n} from \"./reflection/type.js\";\nimport { regExpFromString } from \"./utils.js\";\n\nexport interface SerializedTypeAnnotations {\n entityOptions?: EntityOptions;\n\n typeName?: string;\n\n typeArguments?: SerializedTypeReference[];\n\n indexAccessOrigin?: {\n container: SerializedTypeReference;\n index: SerializedTypeReference;\n };\n\n // annotations will be generated on deserialization from the decorators\n // annotations?: Annotations; //parsed decorator types as annotations\n\n decorators?: SerializedTypeReference[]; //original decorator type\n}\n\nexport interface SerializedTypeObjectLiteral extends SerializedTypeAnnotations {\n kind: ReflectionKind.objectLiteral;\n types: SerializedTypeReference[];\n tags?: TagsReflection;\n}\n\nexport interface SerializedTypeClassType extends SerializedTypeAnnotations {\n kind: ReflectionKind.class;\n name?: string; //@entity.name\n globalObject?: true; //Uint8Array, Date, etc\n classType: string; //getClassName result\n extendsArguments?: SerializedTypeReference[];\n arguments?: SerializedTypeReference[];\n superClass?: SerializedTypeReference;\n types: SerializedTypeReference[];\n tags?: TagsReflection;\n}\n\nexport interface SerializedTypeFunction extends SerializedTypeAnnotations {\n kind: ReflectionKind.function;\n name?: number | string | symbol;\n parameters: SerializedTypeParameter[];\n return: SerializedTypeReference;\n tags?: TagsReflection;\n}\n\nexport type SerializedTypeReference = number;\n\nexport interface SimpleSerializedType extends SerializedTypeAnnotations {\n kind:\n | ReflectionKind.never\n | ReflectionKind.any\n | ReflectionKind.unknown\n | ReflectionKind.void\n | ReflectionKind.object\n | ReflectionKind.string\n | ReflectionKind.number\n | ReflectionKind.boolean\n | ReflectionKind.symbol\n | ReflectionKind.bigint\n | ReflectionKind.null\n | ReflectionKind.undefined\n | ReflectionKind.regexp;\n origin?: SerializedTypeReference;\n}\n\nexport interface SerializedTypeLiteral extends SerializedTypeAnnotations {\n kind: ReflectionKind.literal;\n literal:\n | { type: \"symbol\"; name: string }\n | string\n | number\n | boolean\n | { type: \"bigint\"; value: string }\n | { type: \"regex\"; regex: string };\n}\n\nexport interface SerializedTypeTemplateLiteral\n extends SerializedTypeAnnotations {\n kind: ReflectionKind.templateLiteral;\n types: SerializedTypeReference[];\n}\n\nexport interface SerializedTypeParameter extends SerializedTypeAnnotations {\n kind: ReflectionKind.parameter;\n name: string;\n type: SerializedTypeReference;\n\n //parameter could be a property as well if visibility is set\n visibility?: ReflectionVisibility;\n readonly?: true;\n optional?: true;\n\n /**\n * Set when the parameter has a default value aka initializer.\n */\n default?: any;\n tags?: TagsReflection;\n}\n\nexport interface SerializedTypeBaseMember extends SerializedTypeAnnotations {\n visibility: ReflectionVisibility;\n abstract?: true;\n optional?: true;\n readonly?: true;\n tags?: TagsReflection;\n}\n\nexport interface SerializedTypeMethod extends SerializedTypeBaseMember {\n kind: ReflectionKind.method;\n visibility: ReflectionVisibility;\n name: number | string | symbol;\n parameters: SerializedTypeParameter[];\n optional?: true;\n abstract?: true;\n return: SerializedTypeReference;\n}\n\nexport interface SerializedTypeProperty extends SerializedTypeBaseMember {\n kind: ReflectionKind.property;\n visibility: ReflectionVisibility;\n name: number | string | symbol;\n optional?: true;\n readonly?: true;\n abstract?: true;\n description?: string;\n type: SerializedTypeReference;\n\n /**\n * Set when the property has a default value aka initializer.\n */\n default?: any;\n}\n\nexport interface SerializedTypePromise extends SerializedTypeAnnotations {\n kind: ReflectionKind.promise;\n type: SerializedTypeReference;\n}\n\nexport interface SerializedTypeEnum extends SerializedTypeAnnotations {\n kind: ReflectionKind.enum;\n enum: { [name: string]: string | number | undefined | null };\n values: (string | number | undefined | null)[];\n indexType: SerializedTypeReference;\n tags?: TagsReflection;\n}\n\nexport interface SerializedTypeUnion extends SerializedTypeAnnotations {\n kind: ReflectionKind.union;\n types: SerializedTypeReference[];\n}\n\nexport interface SerializedTypeIntersection extends SerializedTypeAnnotations {\n kind: ReflectionKind.intersection;\n types: SerializedTypeReference[];\n}\n\nexport interface SerializedTypeArray extends SerializedTypeAnnotations {\n kind: ReflectionKind.array;\n type: SerializedTypeReference;\n tags?: TagsReflection;\n}\n\nexport interface SerializedTypeIndexSignature\n extends SerializedTypeAnnotations {\n kind: ReflectionKind.indexSignature;\n index: SerializedTypeReference;\n type: SerializedTypeReference;\n\n /**\n * Set when the parameter has a default value aka initializer.\n */\n default?: any;\n}\n\nexport interface SerializedTypePropertySignature\n extends SerializedTypeAnnotations {\n kind: ReflectionKind.propertySignature;\n name: number | string | symbol;\n optional?: true;\n readonly?: true;\n description?: string;\n type: SerializedTypeReference;\n\n /**\n * Set when the parameter has a default value aka initializer.\n */\n default?: any;\n tags?: TagsReflection;\n}\n\nexport interface SerializedTypeMethodSignature\n extends SerializedTypeAnnotations {\n kind: ReflectionKind.methodSignature;\n name: number | string | symbol;\n optional?: true;\n parameters: SerializedTypeParameter[];\n return: SerializedTypeReference;\n tags?: TagsReflection;\n}\n\nexport interface SerializedTypeTypeParameter extends SerializedTypeAnnotations {\n kind: ReflectionKind.typeParameter;\n name: string;\n}\n\nexport interface SerializedTypeInfer extends SerializedTypeAnnotations {\n kind: ReflectionKind.infer;\n}\n\nexport interface SerializedTypeTupleMember extends SerializedTypeAnnotations {\n kind: ReflectionKind.tupleMember;\n type: SerializedTypeReference;\n optional?: true;\n name?: string;\n}\n\nexport interface SerializedTypeTuple extends SerializedTypeAnnotations {\n kind: ReflectionKind.tuple;\n types: SerializedTypeTupleMember[];\n}\n\nexport interface SerializedTypeRest extends SerializedTypeAnnotations {\n kind: ReflectionKind.rest;\n type: SerializedTypeReference;\n}\n\nexport type SerializedType =\n | SimpleSerializedType\n | SerializedTypeLiteral\n | SerializedTypeTemplateLiteral\n | SerializedTypeParameter\n | SerializedTypeFunction\n | SerializedTypeMethod\n | SerializedTypeProperty\n | SerializedTypePromise\n | SerializedTypeClassType\n | SerializedTypeEnum\n | SerializedTypeUnion\n | SerializedTypeIntersection\n | SerializedTypeArray\n | SerializedTypeObjectLiteral\n | SerializedTypeIndexSignature\n | SerializedTypePropertySignature\n | SerializedTypeMethodSignature\n | SerializedTypeTypeParameter\n | SerializedTypeInfer\n | SerializedTypeTuple\n | SerializedTypeTupleMember\n | SerializedTypeRest;\n\nexport type SerializedTypes = SerializedType[];\n\ndeclare var window: any;\n\nconst envGlobal: any =\n typeof globalThis !== \"undefined\"\n ? globalThis\n : typeof global !== \"undefined\"\n ? global\n : window;\n\nfunction isWithSerializedAnnotations(\n type: any\n): type is SerializedTypeAnnotations {\n return isWithAnnotations(type);\n}\n\nexport interface SerializerState {\n types: SerializedTypes;\n disableMethods?: true;\n refs: Map<Type, number>;\n}\n\nfunction filterRemoveFunctions(v: Type): boolean {\n return (\n v.kind !== ReflectionKind.function &&\n v.kind !== ReflectionKind.method &&\n v.kind !== ReflectionKind.methodSignature\n );\n}\n\nfunction exportEntityOptions(\n type: TypeClass | TypeObjectLiteral,\n result: SerializedType\n): void {\n const reflection = ReflectionClass.from(type);\n\n let changed = false;\n const entityAttributes: EntityOptions = {};\n if (reflection.name !== undefined) {\n changed = true;\n entityAttributes.name = reflection.name;\n }\n if (reflection.description) {\n changed = true;\n entityAttributes.description = reflection.description;\n }\n if (reflection.databaseSchemaName !== undefined) {\n changed = true;\n entityAttributes.database = reflection.databaseSchemaName;\n }\n if (reflection.collectionName !== undefined) {\n changed = true;\n entityAttributes.collection = reflection.collectionName;\n }\n if (reflection.singleTableInheritance) {\n changed = true;\n entityAttributes.singleTableInheritance = reflection.singleTableInheritance;\n }\n if (reflection.indexes.length) {\n changed = true;\n entityAttributes.indexes = reflection.indexes;\n }\n\n if (changed) {\n result.entityOptions = entityAttributes;\n }\n}\n\nfunction assignEntityOptions(\n type: TypeClass | TypeObjectLiteral,\n serialized: SerializedType\n): void {\n if (!serialized.entityOptions) return;\n const entity = entityAnnotation.getFirst(type) || {};\n\n if (serialized.entityOptions.name !== undefined)\n entity.name = serialized.entityOptions.name;\n if (serialized.entityOptions.description !== undefined)\n entity.description = serialized.entityOptions.description;\n if (serialized.entityOptions.database !== undefined)\n entity.database = serialized.entityOptions.database;\n if (serialized.entityOptions.collection !== undefined)\n entity.collection = serialized.entityOptions.collection;\n if (serialized.entityOptions.singleTableInheritance !== undefined)\n entity.singleTableInheritance =\n serialized.entityOptions.singleTableInheritance;\n if (serialized.entityOptions.indexes !== undefined)\n entity.indexes = serialized.entityOptions.indexes;\n\n entityAnnotation.replaceType(type, [entity]);\n}\n\nfunction serialize(\n type: Type,\n state: SerializerState\n): SerializedTypeReference {\n const serialized = state.refs.get(type);\n if (serialized) return serialized;\n\n const result: SerializedType = { kind: type.kind } as SerializedType;\n\n state.types.push(result);\n const index = state.types.length - 1;\n state.refs.set(type, index);\n\n if (type.typeName) result.typeName = type.typeName;\n if (type.decorators)\n (result as SerializedTypeAnnotations).decorators = type.decorators.map(v =>\n serialize(v, state)\n );\n if (type.typeArguments)\n (result as SerializedTypeAnnotations).typeArguments =\n type.typeArguments.map(v => serialize(v, state));\n if (type.indexAccessOrigin)\n (result as SerializedTypeAnnotations).indexAccessOrigin = {\n index: serialize(type.indexAccessOrigin.index, state),\n container: serialize(type.indexAccessOrigin.container, state)\n };\n\n switch (type.kind) {\n case ReflectionKind.objectLiteral: {\n if (type.typeName && type.typeName.startsWith(\"Type\")) {\n //make sure that Type types are not serialized, as they are way too expensive and\n //there is no need to actually serialize them.\n const typeType = typeOf<Type>();\n if (\n typeType.kind === ReflectionKind.union &&\n isTypeIncluded(typeType.types, type)\n ) {\n Object.assign(result, {\n kind: ReflectionKind.any\n });\n break;\n }\n }\n\n const types = state.disableMethods\n ? type.types.filter(filterRemoveFunctions)\n : type.types;\n Object.assign(result, {\n kind: ReflectionKind.objectLiteral,\n types: types.map(member => serialize(member, state)),\n tags: type.tags\n } as SerializedTypeObjectLiteral);\n exportEntityOptions(type, result);\n break;\n }\n case ReflectionKind.class: {\n const types = state.disableMethods\n ? type.types.filter(filterRemoveFunctions)\n : type.types;\n const parent = getParentClass(type.classType);\n let superClass: SerializedTypeReference | undefined = undefined;\n try {\n superClass = parent ? serialize(reflect(parent), state) : undefined;\n } catch {}\n\n const classType = getClassName(type.classType);\n const globalObject: boolean =\n envGlobal && envGlobal[classType] === type.classType;\n\n Object.assign(result, {\n kind: ReflectionKind.class,\n types: types.map(member => serialize(member, state)),\n name: ReflectionClass.from(type.classType).name,\n globalObject: globalObject ? true : undefined,\n classType,\n arguments: type.arguments\n ? type.arguments.map(member => serialize(member, state))\n : undefined,\n extendsArguments: type.extendsArguments\n ? type.extendsArguments.map(member => serialize(member, state))\n : undefined,\n superClass,\n tags: type.tags\n } as SerializedTypeClassType);\n exportEntityOptions(type, result);\n break;\n }\n case ReflectionKind.literal: {\n Object.assign(result, {\n kind: ReflectionKind.literal,\n literal:\n \"symbol\" === typeof type.literal\n ? { type: \"symbol\", name: type.literal.toString().slice(7, -1) }\n : \"bigint\" === typeof type.literal\n ? { type: \"bigint\", value: String(type.literal) }\n : type.literal instanceof RegExp\n ? { type: \"regex\", regex: String(type.literal) }\n : type.literal\n } as SerializedTypeLiteral);\n break;\n }\n case ReflectionKind.tuple: {\n Object.assign(result, {\n kind: ReflectionKind.tuple,\n types: type.types.map(member => ({\n ...member,\n jit: undefined,\n parent: undefined,\n type: serialize(member.type, state)\n }))\n } as SerializedTypeTuple);\n break;\n }\n case ReflectionKind.union: {\n if (type.typeName && type.typeName.startsWith(\"Type\")) {\n //make sure that Type types are not serialized, as they are way too expensive and\n //there is no need to actually serialize them.\n const typeType = typeOf<Type>();\n if (isSameType(typeType, type)) {\n Object.assign(result, {\n kind: ReflectionKind.any\n });\n break;\n }\n }\n\n const types = state.disableMethods\n ? type.types.filter(filterRemoveFunctions)\n : type.types;\n Object.assign(result, {\n kind: ReflectionKind.union,\n types: types.map(member => serialize(member, state))\n } as SerializedTypeUnion);\n break;\n }\n case ReflectionKind.intersection: {\n Object.assign(result, {\n kind: ReflectionKind.intersection,\n types: type.types.map(member => serialize(member, state))\n } as SerializedTypeIntersection);\n break;\n }\n case ReflectionKind.templateLiteral: {\n Object.assign(result, {\n kind: ReflectionKind.templateLiteral,\n types: type.types.map(member => serialize(member, state))\n } as SerializedTypeTemplateLiteral);\n break;\n }\n case ReflectionKind.string:\n case ReflectionKind.number:\n case ReflectionKind.boolean:\n case ReflectionKind.symbol:\n case ReflectionKind.bigint:\n case ReflectionKind.regexp: {\n if (type.origin)\n (result as SimpleSerializedType).origin = serialize(type.origin, state);\n break;\n }\n case ReflectionKind.function: {\n if (state.disableMethods) {\n result.kind = ReflectionKind.never;\n break;\n }\n Object.assign(result, {\n kind: ReflectionKind.function,\n parameters: type.parameters.map(v => ({\n ...v,\n jit: undefined,\n parent: undefined,\n type: serialize(v.type, state),\n default: v.default !== undefined ? true : undefined\n })),\n return: serialize(type.return, state),\n tags: type.tags\n } as SerializedTypeFunction);\n break;\n }\n case ReflectionKind.method: {\n if (state.disableMethods) {\n result.kind = ReflectionKind.never;\n break;\n }\n Object.assign(result, {\n ...type,\n jit: undefined,\n parent: undefined,\n parameters: type.parameters.map(\n v =>\n ({\n ...v,\n jit: undefined,\n parent: undefined,\n type: serialize(v.type, state),\n default: v.default !== undefined ? true : undefined\n }) as SerializedTypeParameter\n ),\n return: serialize(type.return, state),\n tags: type.tags\n } as SerializedTypeMethod);\n break;\n }\n case ReflectionKind.methodSignature: {\n if (state.disableMethods) {\n result.kind = ReflectionKind.never;\n break;\n }\n Object.assign(result, {\n ...type,\n jit: undefined,\n parent: undefined,\n parameters: type.parameters.map(\n v =>\n ({\n ...v,\n jit: undefined,\n parent: undefined,\n type: serialize(v.type, state),\n default: v.default !== undefined ? true : undefined\n }) as SerializedTypeParameter\n ),\n return: serialize(type.return, state)\n } as SerializedTypeMethodSignature);\n break;\n }\n case ReflectionKind.propertySignature: {\n Object.assign(result, {\n ...type,\n jit: undefined,\n parent: undefined,\n type: serialize(type.type, state)\n } as SerializedTypePropertySignature);\n break;\n }\n case ReflectionKind.property: {\n Object.assign(result, {\n ...type,\n jit: undefined,\n parent: undefined,\n type: serialize(type.type, state)\n } as SerializedTypeProperty);\n break;\n }\n case ReflectionKind.array: {\n Object.assign(result, {\n kind: ReflectionKind.array,\n type: serialize(type.type, state),\n tags: type.tags\n } as SerializedTypeArray);\n break;\n }\n case ReflectionKind.promise: {\n Object.assign(result, {\n kind: ReflectionKind.promise,\n type: serialize(type.type, state)\n } as SerializedTypePromise);\n break;\n }\n case ReflectionKind.rest: {\n Object.assign(result, {\n kind: ReflectionKind.rest,\n type: serialize(type.type, state)\n } as SerializedTypeRest);\n break;\n }\n case ReflectionKind.indexSignature: {\n Object.assign(result, {\n kind: ReflectionKind.indexSignature,\n index: serialize(type.index, state),\n type: serialize(type.type, state),\n default: type.default\n } as SerializedTypeIndexSignature);\n break;\n }\n case ReflectionKind.enum: {\n Object.assign(result, {\n kind: ReflectionKind.enum,\n enum: type.enum,\n values: type.values,\n indexType: serialize(type.indexType, state),\n tags: type.tags\n } as SerializedTypeEnum);\n break;\n }\n }\n\n return index;\n}\n\n/**\n * Converts a (possibly circular/nested) type into a JSON.stringify'able structure suited to be transmitted over the wire and deserialized back to the correct Type object.\n */\nexport function serializeType(\n type: Type,\n state: Partial<SerializerState> = {}\n): SerializedTypes {\n const types: SerializedTypes = [];\n const serializedState: SerializerState = { types, refs: new Map(), ...state };\n serialize(type, serializedState);\n return types;\n}\n\ninterface DeserializeState {\n types: SerializedTypes;\n disableReuse?: boolean; //disable entity reuse from entities registered via @entity.name()\n deserialized: {\n [index: number]: { type: Type; refs: Type[]; active: boolean };\n };\n}\n\n/**\n * @reflection never\n */\nfunction deserialize(\n type: SerializedType | SerializedTypeReference,\n state: DeserializeState,\n parent?: Type\n): Type {\n if (\"number\" === typeof type) {\n if (!state.types[type]) return { kind: ReflectionKind.unknown };\n const typeState = state.deserialized[type];\n let result: Type = { kind: ReflectionKind.unknown };\n\n if (typeState) {\n if (typeState.active) {\n typeState.refs.push(result);\n } else {\n result = typeState.type;\n }\n } else {\n const typeState = { type: result as Type, refs: [], active: true };\n state.deserialized[type] = typeState;\n typeState.type = deserialize(state.types[type], state);\n typeState.active = false;\n for (const ref of typeState.refs) Object.assign(ref, typeState.type);\n result = typeState.type;\n }\n if (parent) return Object.assign(result, { parent });\n\n return result;\n }\n const result: Type = { kind: type.kind } as Type;\n\n if (type.typeName) result.typeName = type.typeName;\n if (type.typeArguments)\n result.typeArguments = type.typeArguments.map(v =>\n deserialize(v, state)\n ) as Type[];\n if (type.indexAccessOrigin)\n result.indexAccessOrigin = {\n index: deserialize(type.indexAccessOrigin.index, state) as Type,\n container: deserialize(type.indexAccessOrigin.container, state) as\n | TypeClass\n | TypeObjectLiteral\n };\n\n switch (type.kind) {\n case ReflectionKind.objectLiteral: {\n Object.assign(result, {\n kind: ReflectionKind.objectLiteral,\n types: type.types.map(v => deserialize(v, state, result)),\n tags: type.tags\n } as TypeObjectLiteral);\n assignEntityOptions(result as TypeObjectLiteral, type);\n break;\n }\n case ReflectionKind.class: {\n if (!state.disableReuse && type.name) {\n const existing = typeSettings.registeredEntities[type.name];\n if (existing) {\n Object.assign(result, ReflectionClass.from(existing).type);\n break;\n }\n }\n\n const newClass =\n (!type.globalObject && state.disableReuse === true) ||\n !type.name ||\n !typeSettings.registeredEntities[type.name];\n\n const args = type.arguments\n ? type.arguments.map(v => deserialize(v, state, result))\n : undefined;\n const extendsArguments = type.extendsArguments\n ? type.extendsArguments.map(v => deserialize(v, state, result))\n : undefined;\n const types = type.types.map(v => deserialize(v, state, result));\n const constructor = findMember(\"constructor\", types);\n const initialize: { name: string; index: number }[] = [];\n if (constructor && constructor.kind === ReflectionKind.method) {\n for (let i = 0; i < constructor.parameters.length; i++) {\n if (constructor.parameters[i].visibility !== undefined) {\n initialize.push({ name: constructor.parameters[i].name, index: i });\n }\n }\n }\n\n const classType = type.globalObject\n ? envGlobal[type.classType]\n : newClass\n ? type.superClass\n ? class extends (deserialize(type.superClass, state) as TypeClass)\n .classType {\n constructor(...args: any[]) {\n super(...args);\n for (const init of initialize) {\n this[init.name] = args[init.index];\n }\n }\n }\n : class {\n constructor(...args: any[]) {\n for (const init of initialize) {\n (this as any)[init.name] = args[init.index];\n }\n }\n }\n : typeSettings.registeredEntities[type.name!];\n\n if (newClass && !type.globalObject) {\n Object.defineProperty(classType, \"name\", {\n value: type.classType,\n writable: true,\n enumerable: false\n });\n if (!classType.__type) {\n classType.__type = [];\n classType.__type.__type = result;\n }\n }\n\n Object.assign(result, {\n kind: ReflectionKind.class,\n classType,\n arguments: args,\n extendsArguments,\n types,\n tags: type.tags\n } as TypeClass);\n assignEntityOptions(result as TypeClass, type);\n break;\n }\n case ReflectionKind.literal: {\n Object.assign(result, {\n kind: ReflectionKind.literal,\n literal:\n \"string\" === typeof type.literal\n ? type.literal\n : \"number\" === typeof type.literal\n ? type.literal\n : \"boolean\" === typeof type.literal\n ? type.literal\n : \"symbol\" === type.literal.type\n ? Symbol(type.literal.name)\n : \"bigint\" === type.literal.type\n ? BigInt(type.literal.value)\n : \"regex\" === type.literal.type\n ? regExpFromString(type.literal.regex)\n : false\n } as TypeLiteral);\n break;\n }\n case ReflectionKind.tuple: {\n Object.assign(result, {\n kind: ReflectionKind.tuple,\n types: []\n } as TypeTuple);\n for (const member of type.types) {\n const deserializedMember: TypeTupleMember = {\n ...member,\n typeArguments: undefined,\n indexAccessOrigin: undefined,\n decorators: undefined,\n parent: result as TypeTuple,\n type: { kind: ReflectionKind.unknown }\n };\n deserializedMember.type = deserialize(\n member.type,\n state,\n deserializedMember\n );\n (result as TypeTuple).types.push(deserializedMember);\n }\n break;\n }\n case ReflectionKind.templateLiteral:\n case ReflectionKind.intersection:\n case ReflectionKind.union: {\n Object.assign(result, {\n kind: type.kind,\n types: type.types.map(member => deserialize(member, state, result))\n });\n break;\n }\n case ReflectionKind.string:\n case ReflectionKind.number:\n case ReflectionKind.bigint:\n case ReflectionKind.symbol:\n case ReflectionKind.regexp:\n case ReflectionKind.boolean: {\n result.kind = type.kind;\n if (type.origin) {\n Object.assign(result, {\n origin: deserialize(type.origin, state, result)\n });\n }\n break;\n }\n case ReflectionKind.any:\n case ReflectionKind.unknown:\n case ReflectionKind.void:\n case ReflectionKind.undefined:\n case ReflectionKind.null: {\n //nothing to do\n break;\n }\n case ReflectionKind.methodSignature:\n case ReflectionKind.method:\n case ReflectionKind.function: {\n const parameters: TypeParameter[] = [];\n for (const p of type.parameters) {\n const parameter: TypeParameter = {\n ...p,\n typeArguments: undefined,\n indexAccessOrigin: undefined,\n decorators: undefined,\n parent: result as TypeFunction,\n default: p.default ? () => undefined : undefined,\n type: { kind: ReflectionKind.unknown }\n };\n parameter.type = deserialize(p.type, state, parameter) as Type;\n parameters.push(parameter);\n }\n Object.assign(result, {\n name: type.name,\n parameters,\n return: deserialize(type.return, state, result),\n tags: type.tags\n } as TypeFunction);\n break;\n }\n case ReflectionKind.property:\n case ReflectionKind.propertySignature: {\n Object.assign(result, {\n ...type,\n type: deserialize(type.type, state, result)\n } as TypeProperty);\n break;\n }\n case ReflectionKind.array:\n case ReflectionKind.promise:\n case ReflectionKind.rest: {\n Object.assign(result, {\n type: deserialize(type.type, state, result)\n } as TypeArray | TypeProperty | TypeRest);\n break;\n }\n case ReflectionKind.indexSignature: {\n Object.assign(result, {\n index: deserialize(type.index, state, result),\n type: deserialize(type.type, state, result)\n } as TypeIndexSignature);\n break;\n }\n case ReflectionKind.enum: {\n Object.assign(result, {\n enum: type.enum,\n values: type.values,\n indexType: deserialize(type.indexType, state, result),\n tags: type.tags\n } as TypeEnum);\n break;\n }\n }\n\n if (\n isWithSerializedAnnotations(type) &&\n isWithAnnotations(result) &&\n type.decorators\n ) {\n result.annotations ||= {};\n for (const scheduledDecorator of type.decorators) {\n for (const decorator of typeDecorators) {\n const dec = deserialize(scheduledDecorator, state) as TypeObjectLiteral;\n decorator(result.annotations, dec);\n }\n }\n }\n return result;\n}\n\nexport function deserializeType(\n types?: SerializedTypes,\n state: Partial<DeserializeState> = {}\n): Type {\n if (!types || types.length === 0) return { kind: ReflectionKind.unknown };\n return deserialize(types[0], { ...state, deserialized: {}, types });\n}\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport {\n AbstractClassType,\n arrayRemoveItem,\n ClassType,\n getClassName,\n isArray,\n isClass,\n isFunction,\n isGlobalClass,\n isPrototypeOfBase,\n stringifyValueWithType\n} from \"@deepkit/core\";\nimport { isWithDeferredDecorators } from \"../decorator.js\";\nimport { findCommonLiteral } from \"../inheritance.js\";\nimport { SerializedTypes, serializeType } from \"../type-serialization.js\";\nimport { NoTypeReceived } from \"../utils.js\";\nimport type { ValidateFunction } from \"../validator.js\";\nimport { Packed, resolvePacked, resolveRuntimeType } from \"./processor.js\";\nimport {\n assertType,\n autoIncrementAnnotation,\n BackReferenceOptionsResolved,\n clearTypeJitContainer,\n copyAndSetParent,\n dataAnnotation,\n databaseAnnotation,\n DatabaseFieldOptions,\n embeddedAnnotation,\n entityAnnotation,\n EntityOptions,\n excludedAnnotation,\n getBackReferenceType,\n getClassType,\n getReferenceType,\n getTypeJitContainer,\n groupAnnotation,\n hasMember,\n indexAnnotation,\n IndexOptions,\n isBackReferenceType,\n isReferenceType,\n isType,\n memberNameToString,\n primaryKeyAnnotation,\n ReferenceOptions,\n ReflectionKind,\n ReflectionVisibility,\n stringifyResolvedType,\n stringifyType,\n TagsReflection,\n Type,\n TypeClass,\n TypeFunction,\n TypeMethod,\n TypeMethodSignature,\n TypeObjectLiteral,\n TypeParameter,\n TypeProperty,\n TypePropertySignature,\n TypeTemplateLiteral\n} from \"./type.js\";\n\n/**\n * Receives the runtime type of template argument.\n *\n * Use\n *\n * ```typescript\n *\n * function f<T>(type?: ReceiveType<T>): Type {\n * return resolveReceiveType(type);\n * }\n *\n * ```\n */\nexport type ReceiveType<T> = Packed | Type | ClassType<T>;\n\nexport function resolveReceiveType(\n type?: Packed | Type | ClassType | AbstractClassType | ReflectionClass<any>\n): Type {\n if (!type) throw new NoTypeReceived();\n let typeFn: Function | undefined = undefined;\n\n if (isArray(type)) {\n if (type.__type) return type.__type;\n // this is fast path for simple references to a type, e.g. cast<User>(), so that User is directly handled\n // instead of running the VM to resolve to User first.\n if (type[type.length - 1] === \"n!\" || type[type.length - 1] === \"P7!\") {\n //n! represents a simple inline: [Op.inline, 0]\n //P7! represents a class reference: [Op.Frame, Op.classReference, 0] (Op.Frame seems unnecessary)\n typeFn = (type as any)[0] as Function | any;\n type = (isFunction(typeFn) ? typeFn() : typeFn) as\n | Packed\n | Type\n | ClassType\n | AbstractClassType\n | ReflectionClass<any>\n | undefined;\n if (!type) {\n throw new Error(\n `No type resolved for ${String(typeFn)}. Circular import or no runtime type available.`\n );\n }\n }\n }\n\n if (type instanceof ReflectionClass) return type.type;\n if (isArray(type) && type.__type) return type.__type;\n if (isType(type)) return type as Type;\n if (isClass(type) || isGlobalClass(type)) {\n if (!(\"__type\" in type)) {\n if ((type as any).__cached_type) return (type as any).__cached_type;\n // disabled reflection for this class, so we return shallow TypeClass\n return ((type as any).__cached_type = {\n kind: ReflectionKind.class,\n classType: type as any,\n types: []\n } as any);\n }\n return resolveRuntimeType(type) as Type;\n }\n return resolvePacked(type, undefined, { reuseCached: true });\n}\n\nexport function reflect(o: any, ...args: any[]): Type {\n return resolveRuntimeType(o, args) as Type;\n}\n\nexport function reflectOrUndefined(o: any, ...args: any[]): Type | undefined {\n try {\n return resolveRuntimeType(o, args) as Type;\n } catch (error: any) {\n return undefined;\n }\n}\n\nexport function valuesOf<T>(\n args: any[] = [],\n p?: ReceiveType<T>\n): (string | number | symbol | Type)[] {\n const type = typeOf(args, p);\n if (type.kind === ReflectionKind.union) {\n return type.types.map(v => {\n if (v.kind === ReflectionKind.literal) return v.literal;\n return v;\n }) as (string | number | symbol | Type)[];\n }\n if (\n type.kind === ReflectionKind.objectLiteral ||\n type.kind === ReflectionKind.class\n ) {\n return type.types.map(v => {\n if (v.kind === ReflectionKind.method) return v;\n if (v.kind === ReflectionKind.property) return v.type;\n if (v.kind === ReflectionKind.propertySignature) return v.type;\n if (v.kind === ReflectionKind.methodSignature) return v;\n return v;\n }) as (string | number | symbol | Type)[];\n }\n return [];\n}\n\nexport function propertiesOf<T>(\n args: any[] = [],\n p?: ReceiveType<T>\n): (string | number | symbol | Type)[] {\n const type = typeOf(args, p);\n if (\n type.kind === ReflectionKind.objectLiteral ||\n type.kind === ReflectionKind.class\n ) {\n return type.types.map(v => {\n if (v.kind === ReflectionKind.method) return v.name;\n if (v.kind === ReflectionKind.property) return v.name;\n if (v.kind === ReflectionKind.propertySignature) return v.name;\n if (v.kind === ReflectionKind.methodSignature) return v.name;\n return v;\n }) as (string | number | symbol | Type)[];\n }\n return [];\n}\n\nexport function getNominalId<T>(\n args: any[] = [],\n p?: ReceiveType<T>\n): number | undefined {\n const t = typeOf(args, p);\n if (\n t.kind === ReflectionKind.class ||\n t.kind === ReflectionKind.objectLiteral\n )\n return t.id;\n return;\n}\n\nexport function typeOf<T>(args: any[] = [], p?: ReceiveType<T>): Type {\n if (p) {\n return args.length > 0\n ? resolveRuntimeType(p, args)\n : (resolveReceiveType(p) as Type);\n }\n\n throw new Error(\"No type given\");\n}\n\nexport function removeTypeName<T extends Type>(type: T): T {\n const o = { ...type };\n o.id = undefined;\n o.typeName = undefined;\n o.typeArguments = undefined;\n return o;\n}\n\nexport function removeNominal<T extends Type | undefined | Type[]>(type: T): T {\n if (!type) return type;\n if (isArray(type)) {\n return type.map(v => removeNominal(v)) as T;\n } else {\n if (\n type.kind === ReflectionKind.class ||\n type.kind === ReflectionKind.objectLiteral\n ) {\n return { ...type, id: undefined };\n }\n }\n return type;\n}\n\nexport function getProperty(\n type: TypeObjectLiteral | TypeClass,\n memberName: number | string | symbol\n): TypeProperty | TypePropertySignature | undefined {\n for (const t of type.types) {\n if (\n (t.kind === ReflectionKind.property ||\n t.kind === ReflectionKind.propertySignature) &&\n t.name === memberName\n )\n return t;\n }\n return;\n}\n\nexport function toSignature(\n type: TypeProperty | TypeMethod | TypePropertySignature | TypeMethodSignature\n): TypePropertySignature | TypeMethodSignature {\n if (\n type.kind === ReflectionKind.propertySignature ||\n type.kind === ReflectionKind.methodSignature\n )\n return type;\n if (type.kind === ReflectionKind.property) {\n return {\n ...type,\n parent: type.parent as any,\n kind: ReflectionKind.propertySignature\n };\n }\n\n return {\n ...type,\n parent: type.parent as any,\n kind: ReflectionKind.methodSignature\n };\n}\n\nexport function hasCircularReference(type: Type) {\n const jit = getTypeJitContainer(type);\n if (jit.hasCircularReference !== undefined) return jit.hasCircularReference;\n\n let hasCircular = false;\n visit(\n type,\n () => undefined,\n () => {\n hasCircular = true;\n }\n );\n\n return (jit.hasCircularReference = hasCircular);\n}\n\nlet visitStackId: number = 0;\n\nfunction extendPath(path: string, member: Type): string {\n let name: string | number | symbol | undefined = \"\";\n if (\"name\" in member) {\n name = member.name;\n }\n if (name === \"\" || name === undefined) return path;\n if (path) return path + \".\" + String(name);\n return String(name);\n}\n\nexport function visit(\n type: Type,\n visitor: (type: Type, path: string) => false | void,\n onCircular?: () => void\n): void {\n const stack: { type: Type; depth: number; path: string }[] = [];\n stack.push({ type, depth: 0, path: \"\" });\n const stackId: number = visitStackId++;\n\n while (stack.length) {\n const entry = stack.shift();\n if (!entry) break;\n const type = entry.type;\n\n const jit = getTypeJitContainer(type);\n if (\n jit.visitStack &&\n jit.visitStack.id === stackId &&\n jit.visitStack.depth < entry.depth\n ) {\n if (onCircular) onCircular();\n return;\n }\n jit.visitStack = { id: stackId, depth: entry.depth };\n if (visitor(type, entry.path) === false) return;\n\n switch (type.kind) {\n case ReflectionKind.objectLiteral:\n case ReflectionKind.tuple:\n case ReflectionKind.union:\n case ReflectionKind.class:\n case ReflectionKind.intersection:\n case ReflectionKind.templateLiteral:\n for (const member of type.types)\n stack.push({\n type: member,\n depth: entry.depth + 1,\n path: extendPath(entry.path, member)\n });\n break;\n case ReflectionKind.string:\n case ReflectionKind.number:\n case ReflectionKind.bigint:\n case ReflectionKind.symbol:\n case ReflectionKind.regexp:\n case ReflectionKind.boolean:\n if (type.origin)\n stack.push({\n type: type.origin,\n depth: entry.depth + 1,\n path: entry.path\n });\n break;\n case ReflectionKind.function:\n case ReflectionKind.method:\n case ReflectionKind.methodSignature:\n stack.push({\n type: type.return,\n depth: entry.depth + 1,\n path: entry.path\n });\n for (const member of type.parameters)\n stack.push({\n type: member,\n depth: entry.depth + 1,\n path: extendPath(entry.path, member)\n });\n break;\n case ReflectionKind.propertySignature:\n case ReflectionKind.property:\n case ReflectionKind.array:\n case ReflectionKind.promise:\n case ReflectionKind.parameter:\n case ReflectionKind.tupleMember:\n case ReflectionKind.rest:\n stack.push({\n type: type.type,\n depth: entry.depth + 1,\n path: entry.path\n });\n break;\n case ReflectionKind.indexSignature:\n stack.push({\n type: type.index,\n depth: entry.depth + 1,\n path: entry.path\n });\n stack.push({\n type: type.type,\n depth: entry.depth + 1,\n path: entry.path\n });\n break;\n }\n }\n}\n\nfunction hasFunctionExpression(fn: Function): boolean {\n let code = fn.toString();\n if (code.startsWith(\"() => \")) code = code.slice(\"() => \".length);\n if (code.startsWith(\"function () { return \")) {\n code = code.slice(\"function () { return \".length);\n if (code.endsWith(\"; }\")) code = code.slice(0, -3);\n }\n if (code.startsWith(\"function() { return \")) {\n code = code.slice(\"function() { return \".length);\n if (code.endsWith(\"; }\")) code = code.slice(0, -3);\n }\n if (code[0] === \"'\" && code[code.length - 1] === \"'\") return false;\n if (code[0] === '\"' && code[code.length - 1] === '\"') return false;\n if (code[0] === \"`\" && code[code.length - 1] === \"`\") return false;\n return code.includes(\"(\");\n}\n\n/**\n * @reflection never\n */\nexport class ReflectionParameter {\n type: Type;\n\n constructor(\n public readonly parameter: TypeParameter,\n public readonly reflectionFunction: ReflectionMethod | ReflectionFunction\n ) {\n this.type = this.parameter.type;\n }\n\n getType(): Type {\n return this.type;\n }\n\n getName(): string {\n return this.parameter.name;\n }\n\n get name(): string {\n return this.parameter.name;\n }\n\n isOptional(): boolean {\n return this.parameter.optional === true;\n }\n\n hasDefault(): boolean {\n return this.parameter.default !== undefined;\n }\n\n isValueRequired(): boolean {\n if (this.hasDefault()) {\n return false;\n }\n\n return !this.isOptional();\n }\n\n getDefaultValue(): any {\n if (this.parameter.default !== undefined) {\n if (typeof this.parameter.default === \"function\") {\n return this.parameter.default();\n }\n\n return this.parameter.default;\n }\n }\n\n setDefaultValue(value: any): void {\n this.parameter.default = value;\n }\n\n hasDefaultFunctionExpression(): boolean {\n return !!(\n this.parameter.default && hasFunctionExpression(this.parameter.default)\n );\n }\n\n applyDecorator(t: TData) {\n if (t.type) {\n this.type = resolveReceiveType(t.type);\n if (\n this.getVisibility() !== undefined &&\n this.reflectionFunction instanceof ReflectionMethod\n ) {\n this.reflectionFunction.reflectionClass\n .getProperty(this.getName())!\n .setType(this.type);\n }\n }\n }\n\n getVisibility(): ReflectionVisibility | undefined {\n return this.parameter.visibility;\n }\n\n isPublic(): boolean {\n return this.parameter.visibility === ReflectionVisibility.public;\n }\n\n isProtected(): boolean {\n return this.parameter.visibility === ReflectionVisibility.protected;\n }\n\n isPrivate(): boolean {\n return this.parameter.visibility === ReflectionVisibility.private;\n }\n\n isReadonly(): boolean {\n return (\n this.parameter.readonly === true ||\n this.getTags().readonly === true ||\n this.reflectionFunction.isReadonly()\n );\n }\n\n setTags(tags: TagsReflection) {\n this.parameter.tags = tags;\n }\n\n getTags(): TagsReflection {\n return this.parameter.tags ?? {};\n }\n\n isHidden(): boolean {\n return this.getTags().hidden === true || this.reflectionFunction.isHidden();\n }\n\n isIgnored(): boolean {\n return (\n this.getTags().ignore === true || this.reflectionFunction.isIgnored()\n );\n }\n\n isInternal(): boolean {\n return (\n this.getTags().internal === true || this.reflectionFunction.isInternal()\n );\n }\n\n getAlias(): string[] {\n return this.getTags().alias ?? [];\n }\n\n getTitle(): string | undefined {\n return this.getTags().title;\n }\n\n getPermission(): string[] {\n return (this.getTags().permission ?? []).concat(\n this.reflectionFunction.getPermission()\n );\n }\n\n getDomain(): string | undefined {\n return this.getTags().domain || this.reflectionFunction.getDomain();\n }\n\n /**\n * True if the parameter becomes a property in the class.\n * This is the case for parameters in constructors with visibility or readonly.\n *\n * ```typescript\n * class User {\n * constructor(public name: string) {}\n * }\n */\n isProperty(): boolean {\n return (\n this.parameter.readonly === true ||\n this.parameter.tags?.readonly === true ||\n this.parameter.visibility !== undefined\n );\n }\n}\n\n/**\n * @reflection never\n */\nexport class ReflectionFunction {\n parameters: ReflectionParameter[] = [];\n parameterAliases: Map<string, string> = new Map();\n description: string = \"\";\n\n constructor(\n public readonly type: TypeMethod | TypeMethodSignature | TypeFunction\n ) {\n for (const p of this.type.parameters) {\n this.parameters.push(new ReflectionParameter(p, this));\n }\n if (this.type.description) this.description = this.type.description;\n }\n\n static from(fn: Function): ReflectionFunction {\n //todo: cache it\n\n if (!(\"__type\" in fn)) {\n //functions without any types have no __type attached\n return new ReflectionFunction({\n kind: ReflectionKind.function,\n function: fn,\n return: { kind: ReflectionKind.any },\n parameters: []\n });\n }\n\n const type = reflect(fn);\n if (type.kind !== ReflectionKind.function) {\n throw new Error(`Given object is not a function ${fn}`);\n }\n return new ReflectionFunction(type);\n }\n\n getParameterNames(): string[] {\n return this.getParameters().map(v => v.getName());\n }\n\n hasParameter(name: string | number | symbol): boolean {\n return !!this.getParameterOrUndefined(name);\n }\n\n getParameterOrUndefined(\n name: string | number | symbol\n ): ReflectionParameter | undefined {\n for (const property of this.getParameters()) {\n if (property.getName() === name) return property;\n }\n\n if (this.parameterAliases.has(name.toString())) {\n const alias = this.parameterAliases.get(name.toString())!;\n return this.getParameterOrUndefined(alias);\n }\n\n return;\n }\n\n getParameter(name: string | number | symbol): ReflectionParameter {\n const property = this.getParameterOrUndefined(name);\n if (!property)\n throw new Error(\n `No parameter ${String(name)} in method ${this.name} found.`\n );\n return property;\n }\n\n getParameterType(name: string | number | symbol): Type | undefined {\n const parameter = this.getParameter(name);\n if (parameter) return parameter.getType();\n return;\n }\n\n getParameters(): ReflectionParameter[] {\n return this.parameters;\n }\n\n getReturnType(): Type {\n return this.type.return;\n }\n\n getName(): number | string | symbol {\n return this.type.name || \"anonymous\";\n }\n\n getDescription(): string {\n return this.description;\n }\n\n get name(): string {\n return memberNameToString(this.getName());\n }\n\n setTags(tags: TagsReflection) {\n this.type.tags = tags;\n }\n\n getTags(): TagsReflection {\n return this.type.tags ?? {};\n }\n\n isHidden(): boolean {\n return this.getTags().hidden === true;\n }\n\n isReadonly(): boolean {\n return this.getTags().readonly === true;\n }\n\n isIgnored(): boolean {\n return this.getTags().ignore === true;\n }\n\n isInternal(): boolean {\n return this.getTags().internal === true;\n }\n\n getAlias(): string[] {\n return this.getTags().alias ?? [];\n }\n\n getTitle(): string | undefined {\n return this.getTags().title;\n }\n\n getPermission(): string[] {\n return this.getTags().permission ?? [];\n }\n\n getDomain(): string | undefined {\n return this.getTags().domain;\n }\n}\n\n/**\n * @reflection never\n */\nexport class ReflectionMethod extends ReflectionFunction {\n /**\n * Whether this method acts as validator.\n */\n validator: boolean = false;\n\n constructor(\n public type: TypeMethod | TypeMethodSignature,\n public reflectionClass: ReflectionClass<any>\n ) {\n super(type);\n }\n\n setType(method: TypeMethod | TypeMethodSignature) {\n this.type = method;\n this.parameters = [];\n for (const p of this.type.parameters) {\n this.parameters.push(new ReflectionParameter(p, this));\n }\n }\n\n applyDecorator(data: TData) {\n this.validator = data.validator;\n if (this.validator) {\n this.reflectionClass.validationMethod = this.getName();\n }\n }\n\n clone(\n reflectionClass?: ReflectionClass<any>,\n method?: TypeMethod | TypeMethodSignature\n ): ReflectionMethod {\n const c = new ReflectionMethod(\n method || this.type,\n reflectionClass || this.reflectionClass\n );\n //todo, clone parameter\n return c;\n }\n\n isOptional(): boolean {\n return this.type.optional === true;\n }\n\n setTags(tags: TagsReflection) {\n this.type.tags = tags;\n }\n\n getTags(): TagsReflection {\n return this.type.tags ?? {};\n }\n\n isHidden(): boolean {\n return this.getTags().hidden === true || this.reflectionClass.isHidden();\n }\n\n isIgnored(): boolean {\n return this.getTags().ignore === true || this.reflectionClass.isIgnored();\n }\n\n isReadonly(): boolean {\n return (\n this.getTags().readonly === true || this.reflectionClass.isReadonly()\n );\n }\n\n isInternal(): boolean {\n return (\n this.getTags().internal === true || this.reflectionClass.isInternal()\n );\n }\n\n getAlias(): string[] {\n return this.getTags().alias ?? [];\n }\n\n getTitle(): string | undefined {\n return this.getTags().title;\n }\n\n getPermission(): string[] {\n return (this.getTags().permission ?? []).concat(\n this.reflectionClass.getPermission()\n );\n }\n\n getDomain(): string | undefined {\n return this.getTags().domain || this.reflectionClass.getDomain();\n }\n}\n\nexport function resolveForeignReflectionClass(\n property: ReflectionProperty\n): ReflectionClass<any> {\n if (property.isReference()) return property.getResolvedReflectionClass();\n if (property.isBackReference()) {\n if (property.isArray()) {\n return resolveClassType(property.getSubType());\n }\n return property.getResolvedReflectionClass();\n }\n\n throw new Error(\n `Property ${property.name} is neither a Reference nor a BackReference.`\n );\n}\n\n/**\n * Resolved the class/object ReflectionClass of the given TypeClass|TypeObjectLiteral\n */\nexport function resolveClassType(type: Type): ReflectionClass<any> {\n if (\n type.kind !== ReflectionKind.class &&\n type.kind !== ReflectionKind.objectLiteral\n ) {\n throw new Error(\n `Cant resolve ReflectionClass of type ${type.kind} since its not a class or object literal`\n );\n }\n\n return ReflectionClass.from(type);\n}\n\n/**\n * @reflection never\n */\nexport class ReflectionProperty {\n //is this really necessary?\n jsonType?: Type;\n\n serializer?: SerializerFn;\n deserializer?: SerializerFn;\n\n data: { [name: string]: any } = {};\n\n /**\n * The type of the property, not the property itself.\n *\n * Note: If the property is optional via `property?: T`, this information\n * is not available here. It's on `property`.\n * Use `isOptional()` instead, which handles this case plus the case\n * where optionality is given via union of T and undefined.\n */\n type: Type;\n\n symbol: symbol;\n\n protected cachedResolvedReflectionClass?: ReflectionClass<any>;\n\n constructor(\n public property: TypeProperty | TypePropertySignature,\n public reflectionClass: ReflectionClass<any>\n ) {\n this.type = property.type;\n this.setType(this.type);\n this.symbol = Symbol(memberNameToString(this.getName()));\n }\n\n setType(type: Type) {\n this.type = type;\n }\n\n isPrimaryKey(): boolean {\n return primaryKeyAnnotation.isPrimaryKey(this.getType());\n }\n\n isEmbedded(): boolean {\n return !!embeddedAnnotation.getFirst(this.getType());\n }\n\n /**\n * Returns the sub type if available (for arrays for example).\n *\n * @throws Error if the property type does not support sub types.\n */\n getSubType(): Type {\n if (this.type.kind === ReflectionKind.array) return this.type.type as Type;\n\n throw new Error(`Type ${this.type.kind} does not support sub types`);\n }\n\n /**\n * If undefined, it's not an embedded class.\n */\n getEmbedded(): { prefix?: string } | undefined {\n return embeddedAnnotation.getFirst(this.getType());\n }\n\n isBackReference(): boolean {\n return isBackReferenceType(this.getType());\n }\n\n isDatabaseSkipped(database: string): boolean {\n return (\n databaseAnnotation.getDatabase(this.getType(), database)?.skip === true\n );\n }\n\n isDatabaseMigrationSkipped(database: string): boolean {\n return (\n this.isDatabaseSkipped(database) ||\n databaseAnnotation.getDatabase(this.getType(), database)\n ?.skipMigration === true\n );\n }\n\n getBackReference(): BackReferenceOptionsResolved {\n return getBackReferenceType(this.getType());\n }\n\n isAutoIncrement(): boolean {\n return autoIncrementAnnotation.getFirst(this.getType()) === true;\n }\n\n isReference(): boolean {\n return isReferenceType(this.getType());\n }\n\n isArray(): boolean {\n return this.type.kind === ReflectionKind.array;\n }\n\n isDate(): boolean {\n return (\n this.type.kind === ReflectionKind.class && this.type.classType === Date\n );\n }\n\n isNumber(): boolean {\n return (\n this.type.kind === ReflectionKind.number ||\n this.type.kind === ReflectionKind.bigint\n );\n }\n\n getForeignKeyName(): string {\n return this.getNameAsString();\n }\n\n getReference(): ReferenceOptions | undefined {\n return getReferenceType(this.getType());\n }\n\n getGroups(): string[] {\n return groupAnnotation.getAnnotations(this.getType());\n }\n\n isInGroup(...group: string[]): boolean {\n return this.getGroups().some(v => group.includes(v));\n }\n\n getExcluded(): string[] {\n return excludedAnnotation.getAnnotations(this.getType());\n }\n\n isSerializerExcluded(name: string): boolean {\n return excludedAnnotation.isExcluded(this.getType(), name);\n }\n\n getData(): { [name: string]: any } {\n return dataAnnotation.getFirst(this.getType()) || {};\n }\n\n /**\n * Returns the ReflectionClass of the reference class/object literal.\n *\n * @throws Error if the property is not from type TypeClass or TypeObjectLiteral\n */\n getResolvedReflectionClass(): ReflectionClass<any> {\n if (\n this.type.kind !== ReflectionKind.class &&\n this.type.kind !== ReflectionKind.objectLiteral\n ) {\n throw new Error(\n `Could not resolve reflection class since ${this.name} is not a class|object but of type ${stringifyType(this.type)}`\n );\n }\n return (this.cachedResolvedReflectionClass ||= resolveClassType(\n this.getType()\n ));\n }\n\n /**\n * If undefined the property is not an index.\n * A unique property is defined as index with IndexOptions.unique=true.\n */\n getIndex(): IndexOptions | undefined {\n return indexAnnotation.getFirst(this.getType());\n }\n\n /**\n * Returns database specific options, if defined\n *\n * ```typescript\n * interface User {\n * logins: number & DatabaseField<{type: 'integer(8)'}>;\n *\n * //of for a specific db engine\n * logins: number & Sqlite<{type: 'integer(8)'}>;\n * }\n *\n * ```\n */\n getDatabase<T extends DatabaseFieldOptions>(name: string): T | undefined {\n return databaseAnnotation.getDatabase<T>(this.getType(), name);\n }\n\n clone(\n reflectionClass?: ReflectionClass<any>,\n property?: TypeProperty | TypePropertySignature\n ): ReflectionProperty {\n const c = new ReflectionProperty(\n copyAndSetParent(property || this.property),\n reflectionClass || this.reflectionClass\n );\n c.jsonType = this.jsonType;\n c.serializer = this.serializer;\n c.deserializer = this.deserializer;\n return c;\n }\n\n applyDecorator(data: TData) {\n this.serializer = data.serializer;\n this.deserializer = data.deserializer;\n Object.assign(this.data, data.data);\n\n //note: data.validators is already applied in Processor\n }\n\n getName(): number | string | symbol {\n return this.property.name;\n }\n\n getNameAsString(): string {\n return memberNameToString(this.property.name);\n }\n\n get name(): string {\n return memberNameToString(this.property.name);\n }\n\n getKind(): ReflectionKind {\n return this.type.kind;\n }\n\n getType(): Type {\n return this.type as Type;\n }\n\n getDescription(): string {\n return this.property.description || \"\";\n }\n\n /**\n * Whether a value is required from serialization point of view.\n * If this property has for example a default value (set via constructor or manually via t.default),\n * then the value is not required to instantiate the property value.\n */\n isValueRequired(): boolean {\n if (this.hasDefault()) {\n return false;\n }\n\n return !this.isOptional();\n }\n\n /**\n * Returns true when `undefined` or a missing value is allowed at the class itself.\n * This is now only true when `optional` is set, but also when type is `any`.\n */\n isActualOptional(): boolean {\n return this.isOptional() || this.type.kind === ReflectionKind.any;\n }\n\n /**\n * If the property is actual optional or is an union with undefined in it.\n */\n isOptional(): boolean {\n return (\n this.property.optional === true ||\n (this.type.kind === ReflectionKind.union &&\n this.type.types.some(v => v.kind === ReflectionKind.undefined))\n );\n }\n\n setOptional(v: boolean): void {\n this.property.optional = v ? true : undefined;\n }\n\n isNullable(): boolean {\n return (\n this.type.kind === ReflectionKind.union &&\n this.type.types.some(v => v.kind === ReflectionKind.null)\n );\n }\n\n isReadonly(): boolean {\n return (\n this.property.readonly === true ||\n this.getTags().readonly === true ||\n this.reflectionClass.isReadonly()\n );\n }\n\n isAbstract(): boolean {\n return (\n this.property.kind === ReflectionKind.property &&\n this.property.abstract === true\n );\n }\n\n hasDefault(): boolean {\n return this.property.default === undefined\n ? !this.isOptional() &&\n (this.getKind() === ReflectionKind.boolean ||\n (this.type.kind === ReflectionKind.union &&\n this.type.types.some(t => t.kind === ReflectionKind.boolean)) ||\n this.getKind() === ReflectionKind.number ||\n (this.type.kind === ReflectionKind.union &&\n this.type.types.some(t => t.kind === ReflectionKind.number)))\n : true;\n }\n\n getDefaultValue(): any {\n if (this.property.default !== undefined) {\n try {\n if (typeof this.property.default === \"function\") {\n return this.property.default();\n }\n\n return this.property.default;\n } catch {\n return undefined;\n }\n } else if (!this.isOptional()) {\n if (\n this.getKind() === ReflectionKind.boolean ||\n (this.type.kind === ReflectionKind.union &&\n this.type.types.some(t => t.kind === ReflectionKind.boolean))\n ) {\n return false;\n } else if (\n this.getKind() === ReflectionKind.number ||\n (this.type.kind === ReflectionKind.union &&\n this.type.types.some(t => t.kind === ReflectionKind.number))\n ) {\n return 0;\n }\n }\n }\n\n setDefaultValue(value: any): void {\n this.property.default = value;\n }\n\n hasDefaultFunctionExpression(): boolean {\n return (\n this.property.kind === ReflectionKind.property &&\n !!this.property.default &&\n hasFunctionExpression(this.property.default)\n );\n }\n\n getDefaultValueFunction(): (() => any) | undefined {\n if (\n this.property.kind === ReflectionKind.property &&\n this.property.default !== undefined\n ) {\n return this.property.default;\n }\n\n return undefined;\n }\n\n getVisibility(): ReflectionVisibility | undefined {\n return this.property.kind === ReflectionKind.property\n ? this.property.visibility\n : undefined;\n }\n\n isPublic(): boolean {\n return this.property.kind === ReflectionKind.property\n ? this.property.visibility === ReflectionVisibility.public\n : true;\n }\n\n isProtected(): boolean {\n return this.property.kind === ReflectionKind.property\n ? this.property.visibility === ReflectionVisibility.protected\n : false;\n }\n\n isPrivate(): boolean {\n return this.property.kind === ReflectionKind.property\n ? this.property.visibility === ReflectionVisibility.private\n : false;\n }\n\n setTags(tags: TagsReflection) {\n this.property.tags = tags;\n }\n\n getTags(): TagsReflection {\n return this.property.tags ?? {};\n }\n\n isHidden(): boolean {\n return this.getTags().hidden === true || this.reflectionClass.isHidden();\n }\n\n isIgnored(): boolean {\n return this.getTags().ignore === true || this.reflectionClass.isIgnored();\n }\n\n isInternal(): boolean {\n return (\n this.getTags().internal === true || this.reflectionClass.isInternal()\n );\n }\n\n getAlias(): string[] {\n return this.getTags().alias ?? [];\n }\n\n getTitle(): string | undefined {\n return this.getTags().title;\n }\n\n getPermission(): string[] {\n return (this.getTags().permission ?? []).concat(\n this.reflectionClass.getPermission()\n );\n }\n\n getDomain(): string | undefined {\n return this.getTags().domain || this.reflectionClass.getDomain();\n }\n}\n\nexport const reflectionClassSymbol = Symbol(\"reflectionClass\");\n\nexport interface SerializerFn {\n (value: any, property: ReflectionProperty): any;\n}\n\nexport class TData {\n validator: boolean = false;\n validators: ValidateFunction[] = [];\n type?: Packed | Type | ClassType;\n data: { [name: string]: any } = {};\n serializer?: SerializerFn;\n deserializer?: SerializerFn;\n}\n\nexport class EntityData {\n name?: string;\n collectionName?: string;\n databaseSchemaName?: string;\n disableConstructor: boolean = false;\n data: { [name: string]: any } = {};\n indexes: { names: string[]; options: IndexOptions }[] = [];\n singleTableInheritance?: true;\n}\n\nfunction applyEntityOptions(\n reflection: ReflectionClass<any>,\n entityOptions: EntityOptions\n) {\n if (entityOptions.name !== undefined) reflection.name = entityOptions.name;\n if (entityOptions.description !== undefined)\n reflection.description = entityOptions.description;\n if (entityOptions.collection !== undefined)\n reflection.collectionName = entityOptions.collection;\n if (entityOptions.database !== undefined)\n reflection.databaseSchemaName = entityOptions.database;\n if (entityOptions.singleTableInheritance !== undefined)\n reflection.singleTableInheritance = entityOptions.singleTableInheritance;\n if (entityOptions.indexes !== undefined)\n reflection.indexes = entityOptions.indexes;\n}\n\n/**\n * @reflection never\n */\nexport class ReflectionClass<T> {\n /**\n * The description, extracted from the class JSDoc @description.\n */\n description: string = \"\";\n\n /**\n * The tags, extracted from the class JSDoc @tag.\n */\n tags?: TagsReflection;\n\n /**\n * A place where arbitrary data is stored, usually set via decorator t.data.\n */\n data: { [name: string]: any } = {};\n\n /**\n * The unique entity name.\n *\n * ```typescript\n * @entity.name('user')\n * class User {\n *\n * }\n * ```\n */\n name?: string;\n\n databaseSchemaName?: string;\n\n disableConstructor: boolean = false;\n\n /**\n * The collection name, used in database context (also known as table name).\n *\n * Usually, if this is not set, `name` will be used.\n *\n * ```typescript\n * @entity.collection('users').name('user')\n * class User {\n *\n * }\n * ```\n */\n collectionName?: string;\n\n /**\n * True when @entity.singleTableInheritance was set.\n */\n singleTableInheritance: boolean = false;\n\n /**\n * Contains all indexed, multi-field using entity.index and all indexes from properties.\n *\n * ```typescript\n * @entity\n * .collection('users')\n * .name('user')\n * .index(['username', 'email'])\n * .index(['email', 'region'], {unique: true})\n * class User {\n * username: string;\n * email: string;\n * }\n * ```\n */\n indexes: { names: string[]; options: IndexOptions }[] = [];\n\n protected propertyNames: string[] = [];\n protected methodNames: string[] = [];\n protected properties: ReflectionProperty[] = [];\n protected propertyAliases: Map<string, string> = new Map();\n protected methods: ReflectionMethod[] = [];\n protected methodAliases: Map<string, string> = new Map();\n\n /**\n * References and back references.\n */\n protected references: ReflectionProperty[] = [];\n\n protected primaries: ReflectionProperty[] = [];\n\n protected autoIncrements: ReflectionProperty[] = [];\n\n /**\n * If a custom validator method was set via @t.validator, then this is the method name.\n */\n public validationMethod?: string | symbol | number | TypeTemplateLiteral;\n\n /**\n * A class using @t.singleTableInheritance registers itself in this array in its super class.\n */\n public subClasses: ReflectionClass<any>[] = [];\n\n constructor(\n public readonly type: TypeClass | TypeObjectLiteral,\n public readonly parent?: ReflectionClass<any>\n ) {\n if (\n type.kind !== ReflectionKind.class &&\n type.kind !== ReflectionKind.objectLiteral\n )\n throw new Error(\"Only class, interface, or object literal type possible\");\n\n if (parent) {\n this.name = parent.name;\n this.collectionName = parent.collectionName;\n this.databaseSchemaName = parent.databaseSchemaName;\n this.description = parent.description;\n this.tags = parent.tags;\n\n for (const member of parent.getProperties()) {\n this.registerProperty(member.clone(this));\n }\n for (const member of parent.getMethods()) {\n this.registerMethod(member.clone(this));\n }\n }\n\n for (const member of type.types) {\n this.add(member);\n }\n\n const entityOptions = entityAnnotation.getFirst(this.type);\n if (entityOptions) {\n applyEntityOptions(this, entityOptions);\n }\n this.description = this.type.description || this.description;\n this.tags = this.type.tags || this.tags;\n\n //apply decorators\n if (\n type.kind === ReflectionKind.class &&\n isWithDeferredDecorators(type.classType)\n ) {\n for (const decorator of type.classType.__decorators) {\n if (decorator.target !== type.classType) continue;\n const { data, property, parameterIndexOrDescriptor } = decorator;\n if (\n property === undefined &&\n parameterIndexOrDescriptor === undefined\n ) {\n this.applyDecorator(data);\n } else if (\n property !== undefined &&\n parameterIndexOrDescriptor === undefined\n ) {\n const reflectionProperty = this.getPropertyOrUndefined(property);\n if (reflectionProperty) reflectionProperty.applyDecorator(data);\n\n const reflectionMethod = this.getMethodOrUndefined(property);\n if (reflectionMethod) reflectionMethod.applyDecorator(data);\n } else if (parameterIndexOrDescriptor !== undefined) {\n const reflectionMethod = this.getMethodOrUndefined(\n property || \"constructor\"\n );\n if (reflectionMethod) {\n const params = reflectionMethod.getParameters();\n const param = params[parameterIndexOrDescriptor];\n if (param) param.applyDecorator(data);\n }\n }\n }\n }\n }\n\n clone(): ReflectionClass<any> {\n const reflection = new ReflectionClass(\n copyAndSetParent(this.type),\n this.parent\n );\n reflection.name = this.name;\n reflection.collectionName = this.collectionName;\n reflection.databaseSchemaName = this.databaseSchemaName;\n reflection.singleTableInheritance = this.singleTableInheritance;\n reflection.indexes = this.indexes.slice();\n reflection.subClasses = this.subClasses.slice();\n reflection.data = { ...this.data };\n reflection.description = this.description;\n reflection.tags = this.tags;\n\n return reflection;\n }\n\n toString(): string {\n return stringifyResolvedType(this.type);\n }\n\n getPropertiesDeclaredInConstructor(): ReflectionProperty[] {\n const constructor = this.getMethod(\"constructor\");\n if (!constructor) return [];\n const propertyNames = constructor.parameters\n .filter(v => v.getVisibility() !== undefined)\n .map(v => v.getName());\n return this.properties.filter(v =>\n propertyNames.includes(memberNameToString(v.getName()))\n );\n }\n\n clearJitContainer() {\n clearTypeJitContainer(this.type);\n }\n\n getJitContainer() {\n return getTypeJitContainer(this.type);\n }\n\n getClassType(): ClassType {\n return this.type.kind === ReflectionKind.class\n ? this.type.classType\n : Object;\n }\n\n getClassName(): string {\n return this.type.kind === ReflectionKind.class\n ? this.type.typeName || getClassName(this.getClassType())\n : this.type.typeName || \"Object\";\n }\n\n createDefaultObject(): object {\n try {\n return new (this.getClassType())();\n } catch {\n return {};\n }\n }\n\n getName(): string {\n return this.name || this.getClassName();\n }\n\n getDescription(): string {\n return this.description;\n }\n\n getCollectionName(): string {\n return this.collectionName || this.getName();\n }\n\n hasProperty(name: string | symbol | number): boolean {\n const memberName = memberNameToString(name);\n return (\n this.propertyNames.includes(memberName) ||\n (this.propertyAliases.has(memberName) &&\n this.propertyNames.includes(this.propertyAliases.get(memberName)!))\n );\n }\n\n hasMethod(name: string | symbol | number): boolean {\n const memberName = memberNameToString(name);\n return (\n this.methodNames.includes(memberName) ||\n (this.methodAliases.has(memberName) &&\n this.methodNames.includes(this.methodAliases.get(memberName)!))\n );\n }\n\n getPrimary(): ReflectionProperty {\n if (!this.primaries.length) {\n throw new Error(`Class ${this.getClassName()} has no primary key.`);\n }\n return this.primaries[0];\n }\n\n getAutoIncrement(): ReflectionProperty | undefined {\n return this.autoIncrements[0];\n }\n\n public isSchemaOf(classType: ClassType): boolean {\n return isPrototypeOfBase(this.getClassType(), classType);\n }\n\n hasPrimary(): boolean {\n return this.primaries.length > 0;\n }\n\n getPrimaries(): ReflectionProperty[] {\n return this.primaries;\n }\n\n /**\n * Returns the ReflectionClass object from parent/super class, if available.\n */\n getSuperReflectionClass(): ReflectionClass<any> | undefined {\n return this.parent;\n }\n\n removeProperty(name: string | number | symbol) {\n const property = this.properties.find(v => v.getName() === name);\n if (!property)\n throw new Error(\n `Property ${String(name)} not known in ${this.getClassName()}`\n );\n\n const stringName = memberNameToString(name);\n arrayRemoveItem(this.propertyNames, stringName);\n\n const indexType = this.type.types.findIndex(\n v =>\n (v.kind === ReflectionKind.property ||\n v.kind === ReflectionKind.propertySignature) &&\n v.name === name\n );\n if (indexType !== -1) this.type.types.splice(indexType, 1);\n\n arrayRemoveItem(this.properties, property);\n\n if (property.isReference() || property.isBackReference()) {\n arrayRemoveItem(this.references, property);\n }\n\n if (property.isPrimaryKey()) arrayRemoveItem(this.primaries, property);\n if (property.isAutoIncrement())\n arrayRemoveItem(this.autoIncrements, property);\n\n const index = property.getIndex();\n if (index) {\n const indexFound = this.indexes.findIndex(\n v => v.names.length === 0 && v.names[0] === property.name\n );\n if (indexFound !== -1) this.indexes.splice(indexFound, 1);\n }\n }\n\n registerProperty(property: ReflectionProperty) {\n if (this.propertyNames.includes(property.name)) {\n this.removeProperty(property.getName());\n }\n\n if (!hasMember(this.type, property.getName())) {\n this.type.types.push(property.property as any);\n }\n\n property.property.parent = this.type;\n this.properties.push(property);\n this.propertyNames.push(property.name);\n if (property.isReference() || property.isBackReference()) {\n this.references.push(property);\n }\n\n if (property.isPrimaryKey()) this.primaries.push(property);\n if (property.isAutoIncrement()) this.autoIncrements.push(property);\n\n const index = property.getIndex();\n if (index) {\n this.indexes.push({ names: [property.name], options: index });\n }\n\n if (property.getAlias().length > 0) {\n for (const alias of property.getAlias()) {\n this.propertyAliases.set(alias, property.name);\n }\n }\n\n this.getJitContainer();\n }\n\n addProperty(prop: {\n name: number | string | symbol;\n optional?: true;\n readonly?: true;\n description?: string;\n visibility?: ReflectionVisibility;\n type: Type;\n default?: any;\n tags?: TagsReflection;\n }): ReflectionProperty {\n const type = {\n kind:\n this.type.kind === ReflectionKind.class\n ? ReflectionKind.property\n : ReflectionKind.propertySignature,\n parent: this.type,\n ...prop\n } as TypeProperty | TypePropertySignature;\n if (type.kind === ReflectionKind.property) {\n type.visibility = prop.visibility ?? ReflectionVisibility.public;\n }\n\n const property = new ReflectionProperty(type, this);\n this.registerProperty(property);\n\n return property;\n }\n\n registerMethod(method: ReflectionMethod) {\n if (this.methodNames.includes(method.name)) return;\n\n this.methods.push(method);\n this.methodNames.push(method.name);\n\n if (method.getAlias().length > 0) {\n for (const alias of method.getAlias()) {\n this.methodAliases.set(alias, method.name);\n }\n }\n }\n\n add(member: Type) {\n if (\n member.kind === ReflectionKind.property ||\n member.kind === ReflectionKind.propertySignature\n ) {\n const existing = this.getPropertyOrUndefined(member.name);\n if (existing) {\n existing.setType(member.type);\n } else {\n this.registerProperty(new ReflectionProperty(member, this));\n }\n }\n\n if (\n member.kind === ReflectionKind.method ||\n member.kind === ReflectionKind.methodSignature\n ) {\n const existing = this.getMethodOrUndefined(member.name);\n if (existing) {\n existing.setType(member);\n } else {\n this.registerMethod(new ReflectionMethod(member, this));\n }\n }\n }\n\n public assignedSingleTableInheritanceSubClassesByIdentifier?: {\n [id: string]: ReflectionClass<any>;\n };\n\n getAssignedSingleTableInheritanceSubClassesByIdentifier():\n | { [id: string]: ReflectionClass<any> }\n | undefined {\n if (!this.subClasses.length) return;\n if (this.assignedSingleTableInheritanceSubClassesByIdentifier)\n return this.assignedSingleTableInheritanceSubClassesByIdentifier;\n\n let isBaseOfSingleTableEntity = false;\n for (const schema of this.subClasses) {\n if (schema.singleTableInheritance) {\n isBaseOfSingleTableEntity = true;\n break;\n }\n }\n\n if (!isBaseOfSingleTableEntity) return;\n\n const discriminant = this.getSingleTableInheritanceDiscriminantName();\n\n for (const schema of this.subClasses) {\n if (schema.singleTableInheritance) {\n if (!this.assignedSingleTableInheritanceSubClassesByIdentifier)\n this.assignedSingleTableInheritanceSubClassesByIdentifier = {};\n const property = schema.getProperty(discriminant);\n assertType(property.type, ReflectionKind.literal);\n this.assignedSingleTableInheritanceSubClassesByIdentifier[\n property.type.literal as string\n ] = schema;\n }\n }\n return this.assignedSingleTableInheritanceSubClassesByIdentifier;\n }\n\n hasSingleTableInheritanceSubClasses(): boolean {\n return (\n this.getAssignedSingleTableInheritanceSubClassesByIdentifier() !==\n undefined\n );\n }\n\n getSingleTableInheritanceDiscriminantName(): string {\n if (!this.data.singleTableInheritanceProperty) {\n // let discriminant = findCommonDiscriminant(this.subClasses);\n\n //when no discriminator was found, find a common literal\n const discriminant = findCommonLiteral(this.subClasses);\n\n if (!discriminant) {\n throw new Error(\n `Sub classes of ${this.getClassName()} single-table inheritance [${this.subClasses.map(v => v.getClassName())}] have no common discriminant or common literal. Please define one.`\n );\n }\n this.data.singleTableInheritanceProperty = this.getProperty(discriminant);\n }\n\n return (this.data.singleTableInheritanceProperty as ReflectionProperty)\n .name;\n }\n\n applyDecorator(data: EntityData) {\n Object.assign(this.data, data.data);\n if (data.name !== undefined) this.name = data.name;\n if (data.collectionName !== undefined)\n this.collectionName = data.collectionName;\n if (data.databaseSchemaName !== undefined)\n this.databaseSchemaName = data.databaseSchemaName;\n this.disableConstructor = data.disableConstructor;\n\n this.indexes.push(...data.indexes);\n if (data.singleTableInheritance) {\n this.singleTableInheritance = true;\n if (this.parent) {\n //the subclass is only added when really needed (e.g. for tracking childs of a single table inheritance setup) otherwise it's a memory leak when a lot of classes\n //are dynamically created.\n this.parent.subClasses.push(this);\n }\n }\n }\n\n static from<T>(\n classTypeIn?:\n | ReceiveType<T>\n | AbstractClassType<T>\n | TypeClass\n | TypeObjectLiteral\n | ReflectionClass<any>,\n args: any[] = []\n ): ReflectionClass<T> {\n if (!classTypeIn)\n throw new Error(`No type given in ReflectionClass.from<T>`);\n if (isArray(classTypeIn)) classTypeIn = resolveReceiveType(classTypeIn);\n\n if (classTypeIn instanceof ReflectionClass) return classTypeIn;\n if (isType(classTypeIn)) {\n if (\n classTypeIn.kind === ReflectionKind.objectLiteral ||\n (classTypeIn.kind === ReflectionKind.class && classTypeIn.typeArguments)\n ) {\n const jit = getTypeJitContainer(classTypeIn);\n if (jit.reflectionClass) return jit.reflectionClass;\n return (jit.reflectionClass = new ReflectionClass<T>(classTypeIn));\n }\n if (classTypeIn.kind !== ReflectionKind.class)\n throw new Error(\n `TypeClass or TypeObjectLiteral expected, not ${ReflectionKind[classTypeIn.kind]}`\n );\n }\n\n const classType = isType(classTypeIn)\n ? (classTypeIn as TypeClass).classType\n : (classTypeIn as any)[\"prototype\"]\n ? (classTypeIn as ClassType<T>)\n : (classTypeIn.constructor as ClassType<T>);\n\n if (!classType.prototype.hasOwnProperty(reflectionClassSymbol)) {\n Object.defineProperty(classType.prototype, reflectionClassSymbol, {\n writable: true,\n enumerable: false\n });\n }\n\n if (classType.prototype[reflectionClassSymbol] && args.length === 0) {\n return classType.prototype[reflectionClassSymbol];\n }\n\n const type = isType(classTypeIn)\n ? (classTypeIn as TypeClass)\n : \"__type\" in classType\n ? args.length\n ? resolveRuntimeType(classType, args)\n : resolveRuntimeType(classType)\n : ({\n kind: ReflectionKind.class,\n classType,\n types: []\n } as TypeClass);\n\n if (type.kind !== ReflectionKind.class) {\n throw new Error(\n `Given class is not a class but kind ${ReflectionKind[type.kind]}. classType: ${stringifyValueWithType(classType)}`\n );\n }\n\n const parentProto = Object.getPrototypeOf(classType.prototype);\n const parentReflectionClass: ReflectionClass<T> | undefined =\n parentProto && parentProto.constructor !== Object\n ? ReflectionClass.from(parentProto, type.extendsArguments)\n : undefined;\n\n const reflectionClass = new ReflectionClass(type, parentReflectionClass);\n if (args.length === 0) {\n classType.prototype[reflectionClassSymbol] = reflectionClass;\n return reflectionClass;\n } else {\n return reflectionClass;\n }\n }\n\n getIndexSignatures() {\n throw new Error(\"todo\");\n }\n\n getPropertyNames(): (string | number | symbol)[] {\n return this.propertyNames;\n }\n\n getProperties(): ReflectionProperty[] {\n return this.properties;\n }\n\n getPropertiesInGroup(...group: string[]): ReflectionProperty[] {\n return this.properties.filter(v => v.isInGroup(...group));\n }\n\n getMethodNames(): (string | number | symbol)[] {\n return this.methodNames;\n }\n\n getMethods(): ReflectionMethod[] {\n return this.methods;\n }\n\n /**\n * Returns references and back references.\n */\n getReferences(): ReflectionProperty[] {\n return this.references;\n }\n\n getConstructorOrUndefined(): ReflectionMethod | undefined {\n return this.getMethodOrUndefined(\"constructor\");\n }\n\n getPropertyOrUndefined(\n name: string | number | symbol | TypeTemplateLiteral\n ): ReflectionProperty | undefined {\n for (const property of this.getProperties()) {\n if (property.getName() === name) return property;\n }\n\n if (this.propertyAliases.has(name.toString())) {\n const alias = this.propertyAliases.get(name.toString())!;\n return this.getPropertyOrUndefined(alias);\n }\n\n return;\n }\n\n getProperty(name: string | number | symbol): ReflectionProperty {\n const property = this.getPropertyOrUndefined(name);\n if (!property)\n throw new Error(\n `No property ${memberNameToString(name)} found in ${this.getClassName()}`\n );\n return property;\n }\n\n getMethodParameters(name: string | number | symbol): ReflectionParameter[] {\n const method = this.getMethodOrUndefined(name);\n return method ? method.getParameters() : [];\n }\n\n getMethodOrUndefined(\n name: string | number | symbol | TypeTemplateLiteral\n ): ReflectionMethod | undefined {\n for (const method of this.getMethods()) {\n if (method.getName() === name) return method;\n }\n\n if (this.methodAliases.has(name.toString())) {\n const alias = this.methodAliases.get(name.toString())!;\n return this.getMethodOrUndefined(alias);\n }\n\n return;\n }\n\n getMethod(name: string | number | symbol): ReflectionMethod {\n const method = this.getMethodOrUndefined(name);\n if (!method)\n throw new Error(\n `No method ${memberNameToString(name)} found in ${this.getClassName()}`\n );\n return method;\n }\n\n public hasCircularReference(): boolean {\n return hasCircularReference(this.type);\n }\n\n serializeType(): SerializedTypes {\n return serializeType(this.type);\n }\n\n setTags(tags: TagsReflection) {\n this.type.tags = tags;\n }\n\n getTags(): TagsReflection {\n return this.type.tags ?? {};\n }\n\n isHidden(): boolean {\n return this.getTags().hidden === true;\n }\n\n isIgnored(): boolean {\n return this.getTags().ignore === true;\n }\n\n isInternal(): boolean {\n return this.getTags().internal === true;\n }\n\n isReadonly(): boolean {\n return this.getTags().readonly === true;\n }\n\n getAlias(): string[] {\n return this.getTags().alias ?? [];\n }\n\n getTitle(): string | undefined {\n return this.getTags().title;\n }\n\n getPermission(): string[] {\n return this.getTags().permission ?? [];\n }\n\n getDomain(): string | undefined {\n return this.getTags().domain;\n }\n\n /**\n * All references have a counter-part. This methods finds it and errors if not possible.\n *\n * If the given reference is a owning reference it finds the correct backReference,\n * which can be found by checking all reference options.mappedBy.\n *\n * If the given reference is a back reference it finds the owning reference,\n * which can be found by using its options.mappedBy.\n *\n * Alternatively we simply check for resolvedClassType to be given `classType`, and if only one\n * found, we return it. When more than one found, we throw an error saying the user he\n * should make its relation mapping not ambiguous.\n */\n public findReverseReference(\n toClassType: ClassType,\n fromReference: ReflectionProperty\n ): ReflectionProperty {\n if (\n fromReference.isBackReference() &&\n fromReference.getBackReference().mappedBy\n ) {\n if (\n resolveForeignReflectionClass(fromReference).getClassType() ===\n this.getClassType()\n ) {\n return this.getProperty(\n fromReference.getBackReference().mappedBy as string\n );\n }\n }\n\n const candidates: ReflectionProperty[] = [];\n for (const backRef of this.references) {\n if (backRef === fromReference) continue;\n\n //backRef points to something completely different\n if (\n !backRef.isArray() &&\n resolveForeignReflectionClass(backRef).getClassType() !== toClassType\n )\n continue;\n if (\n backRef.isArray() &&\n getClassType(backRef.getSubType()) !== toClassType\n )\n continue;\n\n //we found the perfect match, manually annotated\n if (backRef.isBackReference() && backRef.getBackReference().mappedBy) {\n if (backRef.getBackReference().mappedBy === fromReference.name) {\n return backRef;\n }\n continue;\n }\n\n if (\n fromReference.isBackReference() &&\n fromReference.getBackReference().mappedBy &&\n !fromReference.getBackReference().via\n ) {\n if (fromReference.getBackReference().mappedBy === backRef.name) {\n //perfect match\n return backRef;\n }\n continue;\n }\n\n //add to candidates if possible\n if (\n fromReference.isBackReference() &&\n fromReference.getBackReference().via &&\n backRef.isBackReference() &&\n backRef.getBackReference().via\n ) {\n if (\n fromReference.getBackReference().via ===\n backRef.getBackReference().via\n ) {\n candidates.push(backRef);\n }\n continue;\n }\n\n if (\n fromReference.isBackReference() &&\n fromReference.isArray() &&\n !fromReference.getBackReference().via\n ) {\n //other side must be non-array\n if (backRef.isArray()) continue;\n }\n\n candidates.push(backRef);\n }\n\n if (candidates.length > 1) {\n throw new Error(\n `Class ${this.getClassName()} has multiple potential reverse references [${candidates.map(v => v.name).join(\", \")}] for ${fromReference.name} to class ${getClassName(toClassType)}. ` +\n `Please specify each back reference by using 'mappedBy', e.g. @t.backReference({mappedBy: 'fieldNameOnTheOtherSide'} so its not ambiguous anymore.`\n );\n }\n\n if (candidates.length === 1) return candidates[0];\n\n throw new Error(\n `Class ${this.getClassName()} has no reference to class ${getClassName(toClassType)} defined.`\n );\n }\n\n public extractPrimaryKey(item: object): Partial<T> {\n const primaryKey: Partial<T> = {};\n for (const pk of this.getPrimaries()) {\n (primaryKey as any)[pk.name] = (item as any)[pk.name];\n }\n\n return primaryKey;\n }\n}\n\n// old function to decorate an interface\n// export function decorate<T>(decorate: { [P in keyof T]?: FreeDecoratorFn<any> }, p?: ReceiveType<T>): ReflectionClass<T> {\n// const type = typeOf([], p);\n// if (type.kind === ReflectionKind.objectLiteral) {\n// const classType = class {\n// };\n// const reflection = new ReflectionClass({ kind: ReflectionKind.class, classType, types: type.types });\n// (classType as any).prototype[reflectionClassSymbol] = reflection;\n//\n// for (const [p, fn] of Object.entries(decorate)) {\n// (fn as FreeDecoratorFn<any>)(classType, p);\n// }\n//\n// return reflection;\n// }\n// throw new Error('Decorate is only possible on object literal/interfaces.');\n// }\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport {\n AbstractClassType,\n arrayRemoveItem,\n ClassType,\n getClassName,\n getInheritanceChain,\n getParentClass,\n indent,\n isArray,\n isClass,\n isGlobalClass,\n TypeAnnotation\n} from \"@deepkit/core\";\nimport { TypeNumberBrand } from \"@deepkit/type-spec\";\nimport { isExtendable } from \"./extends.js\";\nimport { resolveRuntimeType } from \"./processor.js\";\nimport {\n getProperty,\n ReceiveType,\n reflect,\n ReflectionClass,\n resolveReceiveType,\n toSignature\n} from \"./reflection.js\";\nimport { state } from \"./state.js\";\n\nexport enum ReflectionVisibility {\n public,\n protected,\n private\n}\n\nexport enum ReflectionKind {\n never,\n any,\n unknown,\n void,\n object,\n string,\n number,\n boolean,\n symbol,\n bigint,\n null,\n undefined,\n regexp,\n\n literal,\n templateLiteral,\n property,\n method,\n function,\n parameter,\n\n promise,\n\n /**\n * Uint8Array, Date, custom classes, Set, Map, etc\n */\n class,\n\n typeParameter,\n enum,\n union,\n intersection,\n\n array,\n tuple,\n tupleMember,\n enumMember,\n\n rest,\n\n objectLiteral,\n indexSignature,\n propertySignature,\n methodSignature,\n\n infer,\n\n callSignature\n}\n\nexport type TypeDecorator = (\n annotations: Annotations,\n decorator: TypeObjectLiteral\n) => boolean;\n\nexport type Annotations = any; //actual { [name: symbol]: any[] };, but not support in older TS\n\n/**\n * @reflection never\n */\nexport interface TypeAnnotations {\n // if defined, it is a nominal type. the number is unique for each nominal type.\n id?: number;\n\n origin?: Type;\n\n /**\n * True when this type comes from an inline type, e.g.\n *\n * `type A = T;`. Type of `T` is inlined.\n * `type A = {}`. Type of `{}` is not inlined.\n *\n * If the type is not inlined and the result of a type function, then we assign parents of members accordingly. This is not the caee when a type was inlined.\n */\n inlined?: true;\n\n /**\n * If the type was created by a type function, this contains the alias name.\n */\n typeName?: string;\n\n /**\n * If the type was created by a type function, this contains the arguments passed the function.\n */\n typeArguments?: Type[];\n\n /**\n * Set for index access expressions, e.g. Config['property'].\n */\n indexAccessOrigin?: { container: TypeClass | TypeObjectLiteral; index: Type };\n\n /**\n * type User = {id: number, user: string};\n * type UserCreate = Pick<User, 'user'>;\n * typeOf<UserCreate>().originTypes[0].typeName = 'Pick'\n * typeOf<UserCreate>().originTypes[0].typeArguments = [User, 'user']\n */\n originTypes?: { typeName: string; typeArguments?: Type[] }[];\n\n annotations?: Annotations; //parsed decorator types as annotations\n decorators?: Type[]; //original decorator type\n\n scheduleDecorators?: TypeObjectLiteral[];\n\n /**\n * A place where arbitrary jit functions and its cache data is stored.\n */\n jit?: JitContainer;\n}\n\nexport function applyScheduledAnnotations(type: Type) {\n if (isWithAnnotations(type) && type.scheduleDecorators) {\n type.annotations = type.annotations ? { ...type.annotations } : {};\n type.decorators = type.decorators ? type.decorators.slice() : [];\n type.decorators.push(...type.scheduleDecorators);\n\n for (const scheduledDecorator of type.scheduleDecorators) {\n for (const decorator of typeDecorators) {\n decorator(type.annotations, scheduledDecorator);\n }\n }\n type.scheduleDecorators = undefined;\n }\n}\n\nexport function hasTypeInformation(object: ClassType | Function): boolean {\n return \"__type\" in object && isArray((object as any).__type);\n}\n\n/**\n * Object to hold runtime jit data.\n */\nexport type JitContainer = any; //actual { [name: string | symbol]: any }; but not supported in older TS\n\nexport function getTypeJitContainer(type: Type): JitContainer {\n if (!type.jit) type.jit = {};\n return type.jit;\n}\n\nexport function clearTypeJitContainer(type: Type): void {\n type.jit = {};\n}\n\nexport interface TagsReflection {\n hidden?: boolean;\n ignore?: boolean;\n internal?: boolean;\n alias?: string[];\n title?: string;\n readonly?: boolean;\n permission?: string[];\n domain?: string;\n}\n\nexport interface TypeNever extends TypeAnnotations {\n kind: ReflectionKind.never;\n parent?: Type;\n}\n\nexport interface TypeAny extends TypeAnnotations {\n kind: ReflectionKind.any;\n parent?: Type;\n}\n\nexport interface TypeUnknown extends TypeAnnotations {\n kind: ReflectionKind.unknown;\n parent?: Type;\n}\n\nexport interface TypeVoid extends TypeAnnotations {\n kind: ReflectionKind.void;\n parent?: Type;\n}\n\nexport interface TypeObject extends TypeAnnotations {\n kind: ReflectionKind.object;\n parent?: Type;\n}\n\nexport interface TypeString extends TypeAnnotations {\n kind: ReflectionKind.string;\n parent?: Type;\n}\n\nexport function isIntegerType(type: Type): type is TypeNumber {\n return (\n type.kind === ReflectionKind.number &&\n type.brand !== undefined &&\n type.brand >= TypeNumberBrand.integer &&\n type.brand <= TypeNumberBrand.uint32\n );\n}\n\nexport interface TypeNumber extends TypeAnnotations {\n kind: ReflectionKind.number;\n brand?: TypeNumberBrand; //built in brand\n parent?: Type;\n}\n\nexport interface TypeBoolean extends TypeAnnotations {\n kind: ReflectionKind.boolean;\n parent?: Type;\n}\n\nexport interface TypeBigInt extends TypeAnnotations {\n kind: ReflectionKind.bigint;\n parent?: Type;\n}\n\nexport interface TypeSymbol extends TypeAnnotations {\n kind: ReflectionKind.symbol;\n parent?: Type;\n}\n\nexport interface TypeNull extends TypeAnnotations {\n kind: ReflectionKind.null;\n parent?: Type;\n}\n\nexport interface TypeUndefined extends TypeAnnotations {\n kind: ReflectionKind.undefined;\n parent?: Type;\n}\n\nexport interface TypeLiteral extends TypeAnnotations {\n kind: ReflectionKind.literal;\n literal: symbol | string | number | boolean | bigint | RegExp;\n parent?: Type;\n}\n\nexport interface TypeTemplateLiteral extends TypeAnnotations {\n kind: ReflectionKind.templateLiteral;\n types: (TypeString | TypeAny | TypeNumber | TypeLiteral | TypeInfer)[];\n parent?: Type;\n}\n\nexport interface TypeRegexp extends TypeAnnotations {\n kind: ReflectionKind.regexp;\n parent?: Type;\n}\n\nclass User {\n username!: string;\n\n getUserName(): this[\"username\"] {\n return \"\";\n }\n}\n\ntype a = User & { username: boolean };\ntype b = ReturnType<a[\"getUserName\"]>;\n\nexport interface TypeBaseMember extends TypeAnnotations {\n visibility: ReflectionVisibility;\n abstract?: true;\n static?: true;\n optional?: true;\n readonly?: true;\n tags?: TagsReflection;\n}\n\nexport interface TypeParameter extends TypeAnnotations {\n kind: ReflectionKind.parameter;\n name: string;\n type: Type;\n parent: TypeFunction | TypeMethod | TypeMethodSignature | TypeCallSignature;\n\n //parameter could be a property as well if visibility is set\n visibility?: ReflectionVisibility;\n readonly?: true;\n optional?: true;\n description?: string;\n\n /**\n * Set when the parameter has a default value aka initializer.\n */\n default?: (() => any) | any;\n\n tags?: TagsReflection;\n}\n\nexport interface TypeMethod extends TypeBaseMember {\n kind: ReflectionKind.method;\n parent: TypeClass;\n name: number | string | symbol;\n description?: string;\n parameters: TypeParameter[];\n return: Type;\n}\n\nexport interface TypeProperty extends TypeBaseMember {\n kind: ReflectionKind.property;\n parent: TypeClass;\n visibility: ReflectionVisibility;\n name: number | string | symbol;\n description?: string;\n type: Type;\n\n /**\n * Set when the property has a default value aka initializer.\n */\n default?: (() => any) | any;\n}\n\nexport interface TypeFunction extends TypeAnnotations {\n kind: ReflectionKind.function;\n parent?: Type;\n name?: number | string | symbol;\n description?: string;\n function?: Function; //reference to the real function if available\n parameters: TypeParameter[];\n return: Type;\n tags?: TagsReflection;\n}\n\nexport interface TypeCallSignature extends TypeAnnotations {\n kind: ReflectionKind.callSignature;\n parent?: Type;\n parameters: TypeParameter[];\n return: Type;\n tags?: TagsReflection;\n}\n\nexport interface TypePromise extends TypeAnnotations {\n kind: ReflectionKind.promise;\n parent?: Type;\n type: Type;\n}\n\nexport interface TypeClass extends TypeAnnotations {\n kind: ReflectionKind.class;\n parent?: Type;\n classType: ClassType;\n description?: string;\n\n /**\n * When the class extends another class and uses on it generic type arguments, then those arguments\n * are in this array.\n * For example `class A extends B<string, boolean> {}` then extendsArguments = [string, boolean].\n * The reference to `B` is not part of TypeClass since this information is available in JavaScript runtime\n * by using `Object.getPrototypeOf(type.classType)`.\n */\n extendsArguments?: Type[];\n\n /**\n * When the class implements another interface/type, then those types are in this array.\n *\n * For example `class A implements B<string, boolean> {}` then implements = [B<string, boolean>].\n */\n implements?: Type[];\n\n /**\n * When class has generic type arguments, e.g. MyClass<string>, it contains\n * all type arguments. If no type arguments are given, it's undefined.\n */\n arguments?: Type[];\n\n /**\n * properties/methods.\n */\n types: (TypeIndexSignature | TypeProperty | TypeMethod)[];\n\n tags?: TagsReflection;\n}\n\nexport interface TypeEnum extends TypeAnnotations {\n kind: ReflectionKind.enum;\n parent?: Type;\n enum: { [name: string]: string | number | undefined | null };\n values: (string | number | undefined | null)[];\n indexType: Type;\n description?: string;\n tags?: TagsReflection;\n}\n\nexport interface TypeEnumMember extends TypeAnnotations {\n kind: ReflectionKind.enumMember;\n parent: TypeEnum;\n name: string;\n description?: string;\n default?: (() => string | number) | string | number;\n tags?: TagsReflection;\n}\n\nexport interface TypeTypeParameter extends TypeAnnotations {\n kind: ReflectionKind.typeParameter;\n parent?: Type;\n name: string;\n tags?: TagsReflection;\n}\n\nexport interface TypeUnion extends TypeAnnotations {\n kind: ReflectionKind.union;\n parent?: Type;\n types: Type[];\n}\n\nexport interface TypeIntersection extends TypeAnnotations {\n kind: ReflectionKind.intersection;\n parent?: Type;\n types: Type[];\n}\n\nexport interface TypeArray extends TypeAnnotations {\n kind: ReflectionKind.array;\n parent?: Type;\n type: Type;\n tags?: TagsReflection;\n}\n\nexport interface TypePropertySignature extends TypeAnnotations {\n kind: ReflectionKind.propertySignature;\n parent: TypeObjectLiteral;\n name: number | string | symbol;\n optional?: true;\n readonly?: true;\n description?: string;\n type: Type;\n\n /**\n * Set when the property has a default value aka initializer.\n */\n default?: (() => any) | any;\n\n tags?: TagsReflection;\n}\n\nexport interface TypeMethodSignature extends TypeAnnotations {\n kind: ReflectionKind.methodSignature;\n parent: TypeObjectLiteral;\n name: number | string | symbol;\n optional?: true;\n description?: string;\n parameters: TypeParameter[];\n return: Type;\n tags?: TagsReflection;\n}\n\n/**\n * Object literals or interfaces.\n */\nexport interface TypeObjectLiteral extends TypeAnnotations {\n kind: ReflectionKind.objectLiteral;\n\n parent?: Type;\n description?: string;\n types: (\n | TypeIndexSignature\n | TypePropertySignature\n | TypeMethodSignature\n | TypeCallSignature\n )[];\n\n /**\n * When the interface extends another interface/type, then those types are in this array.\n *\n * For example `interface A extends B<string, boolean> {}` then implements = [B<string, boolean>].\n */\n implements?: Type[];\n\n tags?: TagsReflection;\n}\n\nexport interface TypeIndexSignature extends TypeAnnotations {\n kind: ReflectionKind.indexSignature;\n parent: TypeClass | TypeObjectLiteral;\n index: Type;\n type: Type;\n\n /**\n * Set when the property has a default value aka initializer.\n */\n default?: (() => any) | any;\n\n tags?: TagsReflection;\n}\n\nexport interface TypeInfer extends TypeAnnotations {\n kind: ReflectionKind.infer;\n parent?: Type;\n\n set(type: Type): void;\n}\n\nexport interface TypeTupleMember extends TypeAnnotations {\n kind: ReflectionKind.tupleMember;\n parent: TypeTuple;\n type: Type;\n optional?: true;\n name?: string;\n}\n\nexport interface TypeTuple extends TypeAnnotations {\n kind: ReflectionKind.tuple;\n parent?: Type;\n types: TypeTupleMember[];\n}\n\nexport interface TypeRest extends TypeAnnotations {\n kind: ReflectionKind.rest;\n parent: TypeTypeParameter | TypeTupleMember;\n type: Type;\n}\n\n/**\n * @reflection never\n */\nexport type Type =\n | TypeNever\n | TypeAny\n | TypeUnknown\n | TypeVoid\n | TypeObject\n | TypeString\n | TypeNumber\n | TypeBoolean\n | TypeBigInt\n | TypeSymbol\n | TypeNull\n | TypeUndefined\n | TypeLiteral\n | TypeTemplateLiteral\n | TypeParameter\n | TypeFunction\n | TypeMethod\n | TypeProperty\n | TypePromise\n | TypeClass\n | TypeEnum\n | TypeEnumMember\n | TypeUnion\n | TypeIntersection\n | TypeArray\n | TypeObjectLiteral\n | TypeIndexSignature\n | TypePropertySignature\n | TypeMethodSignature\n | TypeTypeParameter\n | TypeInfer\n | TypeTuple\n | TypeTupleMember\n | TypeRest\n | TypeRegexp\n | TypeCallSignature;\n\nexport type Widen<T> = T extends string\n ? string\n : T extends number\n ? number\n : T extends bigint\n ? bigint\n : T extends boolean\n ? boolean\n : T extends symbol\n ? symbol\n : T;\n\nexport type FindType<\n T extends Type,\n LOOKUP extends ReflectionKind\n> = T extends {\n kind: infer K;\n}\n ? K extends LOOKUP\n ? T\n : never\n : never;\n\n/**\n * Merge dynamic runtime types with static types. In the type-system resolves as any, in runtime as the correct type.\n *\n * ```typescript\n * const stringType = {kind: ReflectionKind.string};\n * type t = {a: InlineRuntimeType<typeof stringType>}\n *\n * const value = 34;\n * type t = {a: InlineRuntimeType<typeof value>}\n * ```\n */\nexport type InlineRuntimeType<\n T extends ReflectionClass<any> | Type | number | string | boolean | bigint\n> = T extends ReflectionClass<infer K> ? K : any;\n\nexport function isType(entry: any): entry is Type {\n return entry && \"object\" === typeof entry && \"number\" === typeof entry.kind;\n}\n\nexport function isBinary(type: Type): boolean {\n return (\n type.kind === ReflectionKind.class && binaryTypes.includes(type.classType)\n );\n}\n\nexport function isPrimitive<T extends Type>(type: T): boolean {\n return (\n type.kind === ReflectionKind.string ||\n type.kind === ReflectionKind.number ||\n type.kind === ReflectionKind.bigint ||\n type.kind === ReflectionKind.boolean ||\n type.kind === ReflectionKind.literal ||\n type.kind === ReflectionKind.null ||\n type.kind === ReflectionKind.undefined\n );\n}\n\nexport function isPropertyType(\n type: Type\n): type is TypePropertySignature | TypeProperty {\n return (\n type.kind === ReflectionKind.property ||\n type.kind === ReflectionKind.propertySignature\n );\n}\n\n/**\n * Returns true if the type is TypePropertySignature | TypeProperty and not a static member.\n */\nexport function isPropertyMemberType(\n type: Type\n): type is TypePropertySignature | TypeProperty {\n if (type.kind === ReflectionKind.property) return !type.static;\n return type.kind === ReflectionKind.propertySignature;\n}\n\n/**\n * Return all properties created in the constructor (via `constructor(public title: string)`)\n *\n * If a non-property parameter is in the constructor, the type is given instead, e.g. `constructor(public title: string, anotherOne:number)` => [TypeProperty, TypeNumber]\n */\nexport function getConstructorProperties(type: TypeClass | TypeObjectLiteral): {\n parameters: (TypeProperty | Type)[];\n properties: TypeProperty[];\n} {\n const result: {\n parameters: (TypeProperty | Type)[];\n properties: TypeProperty[];\n } = {\n parameters: [],\n properties: []\n };\n if (type.kind === ReflectionKind.objectLiteral) return result;\n const constructor = findMember(\"constructor\", resolveTypeMembers(type)) as\n | TypeMethod\n | undefined;\n if (!constructor) return result;\n\n for (const parameter of constructor.parameters) {\n const property = findMember(parameter.name, resolveTypeMembers(type));\n if (property && property.kind === ReflectionKind.property) {\n result.properties.push(property);\n result.parameters.push(property);\n } else {\n result.parameters.push(parameter.type as Type);\n }\n }\n return result;\n}\n\nexport type WithAnnotations =\n | TypeAny\n | TypeUnknown\n | TypeString\n | TypeNumber\n | TypeBigInt\n | TypeBoolean\n | TypeArray\n | TypeTuple\n | TypeLiteral\n | TypeNull\n | TypeUndefined\n | TypeClass\n | TypeObjectLiteral\n | TypeObject\n | TypeTemplateLiteral\n | TypeRegexp\n | TypeSymbol;\n\nexport function isWithAnnotations(\n type: ParentLessType\n): type is WithAnnotations {\n return (\n type.kind === ReflectionKind.any ||\n type.kind === ReflectionKind.unknown ||\n type.kind === ReflectionKind.string ||\n type.kind === ReflectionKind.number ||\n type.kind === ReflectionKind.bigint ||\n type.kind === ReflectionKind.boolean ||\n type.kind === ReflectionKind.union ||\n type.kind === ReflectionKind.array ||\n type.kind === ReflectionKind.tuple ||\n type.kind === ReflectionKind.literal ||\n type.kind === ReflectionKind.null ||\n type.kind === ReflectionKind.undefined ||\n type.kind === ReflectionKind.class ||\n type.kind === ReflectionKind.objectLiteral ||\n type.kind === ReflectionKind.object ||\n type.kind === ReflectionKind.templateLiteral ||\n type.kind === ReflectionKind.regexp ||\n type.kind === ReflectionKind.symbol\n );\n}\n\nexport function getAnnotations(type: WithAnnotations): Annotations {\n return (type.annotations ||= {});\n}\n\ntype StackEntry = {\n left: Type;\n right: Type;\n};\n\nfunction hasStack(stack: StackEntry[], left: Type, right: Type): boolean {\n for (const entry of stack) {\n if (entry.left === left && entry.right === right) return true;\n }\n return false;\n}\n\n/**\n * Checks if the structure of a and b are identical.\n */\nexport function isSameType(\n a: Type,\n b: Type,\n stack: StackEntry[] = []\n): boolean {\n if (a === b) return true;\n\n if (hasStack(stack, a, b)) return true;\n\n stack.push({ left: a, right: b });\n\n try {\n if (a.kind !== b.kind) return false;\n if (a.typeName && b.typeName && a.typeName !== b.typeName) return false;\n if (a.kind === ReflectionKind.infer || b.kind === ReflectionKind.infer)\n return false;\n if (a.kind === ReflectionKind.promise && b.kind === ReflectionKind.promise)\n return isSameType(a.type, b.type, stack);\n\n if (a.kind === ReflectionKind.literal)\n return a.literal === (b as TypeLiteral).literal;\n\n if (\n a.kind === ReflectionKind.templateLiteral &&\n b.kind === ReflectionKind.templateLiteral\n ) {\n if (a.types.length !== b.types.length) return false;\n\n for (let i = 0; a.types.length; i++) {\n if (!isSameType(a.types[i], b.types[i], stack)) return false;\n }\n return true;\n }\n\n if (a.kind === ReflectionKind.class && b.kind === ReflectionKind.class) {\n return a.classType === b.classType;\n // if (a.classType !== b.classType) return false;\n // if (!a.arguments && !b.arguments) return true;\n // if (!a.arguments || !b.arguments) return false;\n //\n // if (a.arguments && !b.arguments) return false;\n // if (!a.arguments && b.arguments) return false;\n //\n // for (let i = 0; a.arguments.length; i++) {\n // if (!a.arguments[i] || !b.arguments[i]) return false;\n // const aMember = a.arguments[i];\n // const bMember = b.arguments[i];\n // if (aMember === bMember) continue;\n //\n // if (aMember.kind === ReflectionKind.property) {\n // if (bMember.kind === ReflectionKind.property) {\n // if (aMember.name !== bMember.name) return false;\n // if (aMember.readonly !== bMember.readonly) return false;\n // if (aMember.optional !== bMember.optional) return false;\n // if (aMember.abstract !== bMember.abstract) return false;\n // if (aMember.visibility !== bMember.visibility) return false;\n // if (!isSameType(aMember.type, bMember.type, stack)) return false;\n // } else {\n // return false;\n // }\n // } else {\n // if (!isSameType(aMember, bMember)) return false;\n // }\n // }\n // return true;\n }\n\n if (\n a.kind === ReflectionKind.objectLiteral &&\n b.kind === ReflectionKind.objectLiteral\n ) {\n if (a.types.length !== b.types.length) return false;\n\n for (const aMember of a.types) {\n //todo: call signature\n if (aMember.kind === ReflectionKind.indexSignature) {\n const valid = b.types.some(v => {\n if (v.kind !== ReflectionKind.indexSignature) return false;\n const sameIndex = isSameType(aMember.index, v.index, stack);\n const sameType = isSameType(aMember.type, v.type, stack);\n return sameIndex && sameType;\n });\n if (!valid) return false;\n } else if (\n aMember.kind === ReflectionKind.propertySignature ||\n aMember.kind === ReflectionKind.methodSignature\n ) {\n const bMember = findMember(aMember.name, b.types);\n if (!bMember) return false;\n if (aMember === bMember) continue;\n\n if (aMember.kind === ReflectionKind.propertySignature) {\n if (bMember.kind === ReflectionKind.propertySignature) {\n if (aMember.name !== bMember.name) return false;\n if (aMember.readonly !== bMember.readonly) return false;\n if (aMember.optional !== bMember.optional) return false;\n if (aMember.type === bMember.type) continue;\n if (!isSameType(aMember.type, bMember.type, stack)) return false;\n } else {\n return false;\n }\n } else {\n if (!isSameType(aMember, bMember, stack)) return false;\n }\n }\n }\n return true;\n }\n\n if (a.kind === ReflectionKind.tupleMember) {\n if (b.kind !== ReflectionKind.tupleMember) return false;\n\n return (\n a.optional === b.optional &&\n a.name === b.name &&\n isSameType(a.type, b.type, stack)\n );\n }\n\n if (a.kind === ReflectionKind.array) {\n if (b.kind !== ReflectionKind.array) return false;\n\n return isSameType(a.type, b.type, stack);\n }\n\n if (a.kind === ReflectionKind.tuple) {\n if (b.kind !== ReflectionKind.tuple) return false;\n if (a.types.length !== b.types.length) return false;\n\n for (let i = 0; i < a.types.length; i++) {\n if (!isSameType(a.types[i], b.types[i], stack)) return false;\n }\n return true;\n }\n\n if (a.kind === ReflectionKind.parameter) {\n if (b.kind !== ReflectionKind.parameter) return false;\n return (\n a.name === b.name &&\n a.optional === b.optional &&\n isSameType(a.type, b.type, stack)\n );\n }\n\n if (\n a.kind === ReflectionKind.function ||\n a.kind === ReflectionKind.method ||\n a.kind === ReflectionKind.methodSignature\n ) {\n if (\n b.kind !== ReflectionKind.function &&\n b.kind !== ReflectionKind.method &&\n b.kind !== ReflectionKind.methodSignature\n )\n return false;\n if (a.parameters.length !== b.parameters.length) return false;\n if (\n a.kind === ReflectionKind.function &&\n b.kind === ReflectionKind.function &&\n a.function !== b.function\n )\n return false;\n\n if (\n a.kind === ReflectionKind.method &&\n b.kind === ReflectionKind.method\n ) {\n if (a.visibility !== b.visibility) return false;\n }\n\n if (a.name !== b.name) return false;\n\n for (let i = 0; i < a.parameters.length; i++) {\n if (!isSameType(a.parameters[i], b.parameters[i], stack)) return false;\n }\n\n return isSameType(a.return, b.return, stack);\n }\n\n if (a.kind === ReflectionKind.enum) {\n if (b.kind !== ReflectionKind.enum) return false;\n if (a.values.length !== b.values.length) return false;\n\n for (let i = 0; i < a.values.length; i++) {\n if (a.values[i] !== b.values[i]) return false;\n }\n\n return true;\n }\n\n if (a.kind === ReflectionKind.union) {\n if (b.kind !== ReflectionKind.union) return false;\n if (a.types.length !== b.types.length) return false;\n for (let i = 0; i < a.types.length; i++) {\n const left = a.types[i];\n const right = b.types[i];\n if (!left || !right) return false;\n if (left === right) continue;\n\n const same = isSameType(left, right, stack);\n if (!same) return false;\n }\n }\n\n return a.kind === b.kind;\n } finally {\n // stack.pop();\n }\n}\n\nexport function addType<T extends Type>(container: T, type: Type): T {\n if (container.kind === ReflectionKind.tuple) {\n if (type.kind === ReflectionKind.tupleMember) {\n container.types.push({ ...type, parent: container });\n } else {\n container.types.push({\n kind: ReflectionKind.tupleMember,\n parent: container,\n type: type as Type\n });\n }\n } else if (container.kind === ReflectionKind.union) {\n if (type.kind === ReflectionKind.union) {\n for (const t of flatten(type).types) {\n addType(container, t);\n }\n } else if (type.kind === ReflectionKind.tupleMember) {\n if (\n type.optional &&\n !isTypeIncluded(container.types, { kind: ReflectionKind.undefined })\n ) {\n container.types.push({\n kind: ReflectionKind.undefined,\n parent: container\n });\n }\n addType(container, type.type);\n } else if (type.kind === ReflectionKind.rest) {\n addType(container, type.type);\n } else {\n if (!isTypeIncluded(container.types, type)) {\n container.types.push({ ...(type as any), parent: container });\n }\n }\n }\n\n return container;\n}\n\nexport function isTypeIncluded(\n types: Type[],\n type: Type,\n stack: StackEntry[] = []\n): boolean {\n for (const t of types) {\n if (isSameType(t, type, stack)) return true;\n }\n\n return false;\n}\n\n/**\n * `true | (string | number)` => `true | string | number`\n */\nexport function flatten<T extends Type>(type: T): T {\n if (type.kind === ReflectionKind.union) {\n type.types = flattenUnionTypes(type.types);\n }\n return type;\n}\n\n/**\n * Flatten nested union types.\n */\nexport function flattenUnionTypes(types: Type[]): Type[] {\n const result: Type[] = [];\n for (const type of types) {\n if (type.kind === ReflectionKind.union) {\n for (const s of flattenUnionTypes(type.types)) {\n if (!isTypeIncluded(result, s)) result.push(s);\n }\n } else {\n if (!isTypeIncluded(result, type)) result.push(type);\n }\n }\n\n return result;\n}\n\n/**\n * empty union => never\n * union with one member => member\n * otherwise the union is returned\n */\nexport function unboxUnion(union: TypeUnion): Type {\n if (union.types.length === 0) return { kind: ReflectionKind.never };\n if (union.types.length === 1) return union.types[0] as Type;\n\n // //convert union of {a: string} | {b: number} | {c: any} to {a?: string, b?: number, c?: any};\n // //this does work: {a?: string, b?: string} | {b2?: number} | {c: any} to {a?: string, b?: number, c?: any};\n // //this does not work: {a?: string, b?: string} | {b?: number} | {c: any} to {a?: string, b?: number, c?: any};\n // if (union.types.length > 1) {\n // //if a property is known already, don't merge it\n // const known: string[] = [];\n //\n // for (const member of union.types) {\n // if (member.kind !== ReflectionKind.objectLiteral) return union;\n // if (member.decorators) return union; //if one member has a decorators, we do not merge\n // const needsOptional = member.types.length > 1;\n // for (const t of member.types) {\n // if (t.kind === ReflectionKind.indexSignature) return union;\n // const name = memberNameToString(t.name);\n // if (known.includes(name)) return union;\n // known.push(name);\n // if (needsOptional && !isOptional(t)) return union;\n // }\n // }\n // const bl: {[index: string]: boolean} = {};\n //\n // const big: TypeObjectLiteral = { kind: ReflectionKind.objectLiteral, types: [] };\n // for (const member of union.types) {\n // if (member.kind !== ReflectionKind.objectLiteral) continue;\n // for (const t of member.types) {\n // if (t.kind === ReflectionKind.indexSignature) return union;\n // big.types.push(t);\n // t.parent = big;\n // t.optional = true;\n // }\n // }\n // big.parent = union.parent;\n // return big;\n // }\n\n return union;\n}\n\nexport function findMember(\n index: string | number | symbol | TypeTemplateLiteral,\n types: Type[]\n):\n | TypePropertySignature\n | TypeMethodSignature\n | TypeMethod\n | TypeProperty\n | TypeIndexSignature\n | undefined {\n const indexType = typeof index;\n\n for (const member of types) {\n if (\n member.kind === ReflectionKind.propertySignature &&\n member.name === index\n )\n return member;\n if (member.kind === ReflectionKind.methodSignature && member.name === index)\n return member;\n if (member.kind === ReflectionKind.property && member.name === index)\n return member;\n if (member.kind === ReflectionKind.method && member.name === index)\n return member;\n\n if (member.kind === ReflectionKind.indexSignature) {\n if (member.index.kind === ReflectionKind.string && \"string\" === indexType)\n return member;\n if (member.index.kind === ReflectionKind.number && \"number\" === indexType)\n return member;\n if (member.index.kind === ReflectionKind.symbol && \"symbol\" === indexType)\n return member;\n //todo: union needs to match depending on union and indexType\n }\n }\n\n return;\n}\n\nfunction resolveObjectIndexType(\n type: TypeObjectLiteral | TypeClass,\n index: Type\n): Type {\n if (\n index.kind === ReflectionKind.literal &&\n (\"string\" === typeof index.literal ||\n \"number\" === typeof index.literal ||\n \"symbol\" === typeof index.literal)\n ) {\n const member = findMember(index.literal, resolveTypeMembers(type));\n if (member) {\n if (member.kind === ReflectionKind.indexSignature) {\n //todo: check if index type matches literal type\n return member.type;\n } else if (\n member.kind === ReflectionKind.method ||\n member.kind === ReflectionKind.methodSignature\n ) {\n return member;\n } else if (\n member.kind === ReflectionKind.property ||\n member.kind === ReflectionKind.propertySignature\n ) {\n return member.type;\n } else {\n return { kind: ReflectionKind.never };\n }\n } else {\n return { kind: ReflectionKind.never };\n }\n } else if (\n index.kind === ReflectionKind.string ||\n index.kind === ReflectionKind.number ||\n index.kind === ReflectionKind.symbol\n ) {\n //check if index signature match\n for (const member of resolveTypeMembers(type)) {\n if (member.kind === ReflectionKind.indexSignature) {\n if (isExtendable(index, member.index)) return member.type;\n }\n }\n }\n return { kind: ReflectionKind.never };\n}\n\ninterface CStack {\n iterator: Type[];\n i: number;\n round: number;\n}\n\nexport function emptyObject(type: Type): boolean {\n return (\n (type.kind === ReflectionKind.objectLiteral ||\n type.kind === ReflectionKind.class) &&\n type.types.length === 0\n );\n}\n\nexport class CartesianProduct {\n protected stack: CStack[] = [];\n\n private current(s: CStack): Type {\n return s.iterator[s.i];\n }\n\n private next(s: CStack): boolean {\n return ++s.i === s.iterator.length ? ((s.i = 0), false) : true;\n }\n\n toGroup(type: Type): Type[] {\n if (type.kind === ReflectionKind.boolean) {\n return [\n { kind: ReflectionKind.literal, literal: \"false\" },\n {\n kind: ReflectionKind.literal,\n literal: \"true\"\n }\n ];\n } else if (type.kind === ReflectionKind.null) {\n return [{ kind: ReflectionKind.literal, literal: \"null\" }];\n } else if (type.kind === ReflectionKind.undefined) {\n return [{ kind: ReflectionKind.literal, literal: \"undefined\" }];\n // } else if (type.kind === ReflectionKind.templateLiteral) {\n // // //todo: this is wrong\n // // return type.types;\n // const result: Type[] = [];\n // for (const s of type.types) {\n // const g = this.toGroup(s);\n // result.push(...g);\n // }\n //\n // return result;\n } else if (type.kind === ReflectionKind.union) {\n const result: Type[] = [];\n for (const s of type.types) {\n const g = this.toGroup(s);\n result.push(...g);\n }\n\n return result;\n } else {\n return [type];\n }\n }\n\n add(item: Type) {\n this.stack.push({ iterator: this.toGroup(item), i: 0, round: 0 });\n }\n\n calculate(): Type[][] {\n const result: Type[][] = [];\n outer: while (true) {\n const row: Type[] = [];\n for (const s of this.stack) {\n const item = this.current(s);\n if (item.kind === ReflectionKind.templateLiteral) {\n row.push(...item.types);\n } else {\n row.push(item);\n }\n }\n result.push(row);\n\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const active = this.next(this.stack[i]);\n //when that i stack is active, continue in main loop\n if (active) continue outer;\n\n //i stack was rewinded. If its the first, it means we are done\n if (i === 0) break outer;\n }\n break;\n }\n\n return result;\n }\n}\n\n/**\n * Query a container type and return the result.\n *\n * container[index]\n *\n * e.g. {a: string}['a'] => string\n * e.g. {a: string, b: number}[keyof T] => string | number\n * e.g. [string, number][0] => string\n * e.g. [string, number][number] => string | number\n */\nexport function indexAccess(container: Type, index: Type): Type {\n if (container.kind === ReflectionKind.array) {\n if (\n (index.kind === ReflectionKind.literal &&\n \"number\" === typeof index.literal) ||\n index.kind === ReflectionKind.number\n )\n return container.type;\n if (index.kind === ReflectionKind.literal && index.literal === \"length\")\n return { kind: ReflectionKind.number };\n } else if (container.kind === ReflectionKind.tuple) {\n if (index.kind === ReflectionKind.literal && index.literal === \"length\") {\n return { kind: ReflectionKind.literal, literal: container.types.length };\n }\n if (\n index.kind === ReflectionKind.literal &&\n \"number\" === typeof index.literal &&\n index.literal < 0\n ) {\n index = { kind: ReflectionKind.number };\n }\n\n if (\n index.kind === ReflectionKind.literal &&\n \"number\" === typeof index.literal\n ) {\n type b0 = [string, boolean?][0]; //string\n type b1 = [string, boolean?][1]; //boolean|undefined\n type a0 = [string, ...number[], boolean][0]; //string\n type a1 = [string, ...number[], boolean][1]; //number|boolean\n type a2 = [string, ...number[], boolean][2]; //number|boolean\n type a22 = [string, ...number[], boolean][3]; //number|boolean\n // type a23 = [string, number, boolean][4]; //number|boolean\n type a3 = [string, number, ...number[], boolean][1]; //number\n type a4 = [string, number, ...number[], boolean][-2]; //string|number|boolean, minus means all\n type a5 = [string, number, ...number[], boolean][number]; //string|number|boolean\n\n let restPosition = -1;\n for (let i = 0; i < container.types.length; i++) {\n if (container.types[i].type.kind === ReflectionKind.rest) {\n restPosition = i;\n break;\n }\n }\n\n if (restPosition === -1 || index.literal < restPosition) {\n const sub = container.types[index.literal];\n if (!sub) return { kind: ReflectionKind.undefined };\n if (sub.optional)\n return {\n kind: ReflectionKind.union,\n types: [sub.type, { kind: ReflectionKind.undefined }]\n };\n return sub.type;\n }\n\n //index beyond a rest, return all beginning from there as big enum\n\n const result: TypeUnion = { kind: ReflectionKind.union, types: [] };\n for (let i = restPosition; i < container.types.length; i++) {\n const member = container.types[i];\n const type =\n member.type.kind === ReflectionKind.rest\n ? member.type.type\n : member.type;\n if (!isTypeIncluded(result.types, type)) result.types.push(type);\n if (\n member.optional &&\n !isTypeIncluded(result.types, { kind: ReflectionKind.undefined })\n )\n result.types.push({ kind: ReflectionKind.undefined });\n }\n\n return unboxUnion(result);\n } else if (index.kind === ReflectionKind.number) {\n const union: TypeUnion = { kind: ReflectionKind.union, types: [] };\n for (const sub of container.types) {\n if (sub.type.kind === ReflectionKind.rest) {\n if (isTypeIncluded(union.types, sub.type.type)) continue;\n union.types.push(sub.type.type);\n } else {\n if (isTypeIncluded(union.types, sub.type)) continue;\n union.types.push(sub.type);\n }\n }\n return unboxUnion(union);\n } else {\n return { kind: ReflectionKind.never };\n }\n } else if (\n container.kind === ReflectionKind.objectLiteral ||\n container.kind === ReflectionKind.class\n ) {\n if (index.kind === ReflectionKind.literal) {\n return resolveObjectIndexType(container, index);\n } else if (index.kind === ReflectionKind.union) {\n const union: TypeUnion = { kind: ReflectionKind.union, types: [] };\n for (const t of index.types) {\n const result = resolveObjectIndexType(container, t);\n if (result.kind === ReflectionKind.never) continue;\n\n if (result.kind === ReflectionKind.union) {\n for (const resultT of result.types) {\n if (isTypeIncluded(union.types, resultT)) continue;\n union.types.push(resultT);\n }\n } else {\n if (isTypeIncluded(union.types, result)) continue;\n union.types.push(result);\n }\n }\n return unboxUnion(union);\n } else {\n return { kind: ReflectionKind.never };\n }\n } else if (container.kind === ReflectionKind.any) {\n return { kind: ReflectionKind.any };\n } else if (container.kind === ReflectionKind.union) {\n if (index.kind === ReflectionKind.literal) {\n // Deals with indexing a union with a literal.\n // For example, if you have a union of {foo: 'bar'} | {foo: 'baz'}\n // and you index it with 'foo', you get 'bar' | 'baz'. This should\n // accordingly print ['bar', 'baz'] when valueOf<...>() is called\n // on the union.\n if ([\"string\", \"number\", \"symbol\"].includes(typeof index.literal)) {\n const union: TypeUnion = { kind: ReflectionKind.union, types: [] };\n\n // For each type in the union, t, resolve the type at index.\n for (const t of container.types) {\n const resolvedType = indexAccess(t, index);\n if (isTypeIncluded(union.types, resolvedType)) continue;\n union.types.push(resolvedType);\n }\n\n return unboxUnion(union);\n }\n } else if (index.kind === ReflectionKind.union) {\n // Further, it is possible to index a union with a union of\n // literals. So this deals with that case. For example, if you\n // have a union of {foo: 'bar', a: 'b'} | {foo: 'baz', a: 'c'} and\n // you index it with 'foo' | 'a', you get 'bar' | 'baz' | 'b' | 'c'\n // and valueOf<...>() should return ['bar', 'baz', 'b', 'c'].\n\n const types: Type[] = [];\n\n // Pre-compute a list of indices to avoid having to re-do this for\n // each entry in the union.\n const indices: TypeLiteral[] = [];\n\n const unboxedIndex = unboxUnion(index);\n if (unboxedIndex.kind === ReflectionKind.union) {\n for (const indexEntry of unboxedIndex.types) {\n // (At least for now) accept only literals as indices.\n if (indexEntry.kind !== ReflectionKind.literal) continue;\n // Don't add duplicate indices.\n if (indices.includes(indexEntry)) continue;\n // Push the index to the list of indices.\n indices.push(indexEntry);\n }\n }\n\n // Each type in the type union (where that type union is indexable)\n // is assumed to be an object literal or class, so we loop over\n // each of those types.\n for (const t of container.types) {\n // This approach does not produce identical results to\n // TypeScript - as this reduces all duplicates from the result\n // (i.e., it produces the 'set' of all types that would be\n // returned by TypeScript), whereas TypeScript will not reduce\n // string literals to a single entry, but will reduce numeric\n // literals. Unless this absolute fidelity is required, this\n // approach is simpler and probably makes more sense too.\n for (const index of indices) {\n const resolvedType = indexAccess(t, index);\n if (isTypeIncluded(types, resolvedType)) continue;\n types.push(resolvedType);\n }\n }\n\n return unboxUnion({ kind: ReflectionKind.union, types });\n }\n }\n return { kind: ReflectionKind.never };\n}\n\nexport function merge(\n types: (TypeObjectLiteral | TypeClass)[]\n): TypeObjectLiteral {\n const type: TypeObjectLiteral = {\n kind: ReflectionKind.objectLiteral,\n id: state.nominalId++,\n types: []\n };\n\n for (const subType of types) {\n for (const member of subType.types) {\n if (member.kind === ReflectionKind.indexSignature) {\n member.parent = type;\n type.types.push(member);\n } else if (!isMember(member)) {\n continue;\n } else {\n const t = toSignature(member);\n t.parent = type;\n const existing = getMember(type, member.name);\n if (existing) {\n arrayRemoveItem(type.types, existing as Type);\n }\n type.types.push(t);\n }\n }\n }\n return type;\n}\n\nexport function narrowOriginalLiteral(type: Type): Type {\n if (\n (type.kind === ReflectionKind.string ||\n type.kind === ReflectionKind.number ||\n type.kind === ReflectionKind.boolean ||\n type.kind === ReflectionKind.bigint) &&\n type.origin\n ) {\n return type.origin;\n }\n return type;\n}\n\ntype GetArrayElement<T extends any[]> = [T] extends [Array<infer K>]\n ? K\n : never;\ntype RemoveParent<T, K extends keyof T> = {\n [P in K]: T[P] extends Type[]\n ? RemoveParentHomomorphic<GetArrayElement<T[P]>>[]\n : T[P] extends Type\n ? RemoveParentHomomorphic<T[P]>\n : T[P];\n};\ntype RemoveParentHomomorphic<T> = RemoveParent<T, Exclude<keyof T, \"parent\">>;\ntype RemoveDeepParent<T extends Type> = T extends infer K\n ? RemoveParentHomomorphic<K>\n : never;\nexport type ParentLessType = RemoveDeepParent<Type>;\n\n/**\n * This function does not do a deep copy, only shallow. A deep copy makes it way to inefficient, so much that router.spec.ts takes up to 20-30seconds\n * to complete instead of barely 30ms.\n */\nexport function copyAndSetParent<T extends ParentLessType>(\n inc: T,\n parent?: Type\n): FindType<Type, T[\"kind\"]> {\n const type = parent\n ? ({ ...inc, parent: parent } as Type)\n : ({ ...inc } as Type);\n\n if (isWithAnnotations(type) && isWithAnnotations(inc)) {\n if (inc.annotations) {\n type.annotations = {};\n //we have to make copies of each annotation since they get modified when intersected\n for (const prop of Object.getOwnPropertySymbols(inc.annotations)) {\n if (inc.annotations[prop])\n type.annotations[prop] = inc.annotations[prop].slice();\n }\n }\n if (inc.decorators) type.decorators = inc.decorators.slice();\n if (inc.indexAccessOrigin)\n type.indexAccessOrigin = { ...inc.indexAccessOrigin };\n if (inc.typeArguments) type.typeArguments = inc.typeArguments.slice();\n type.jit = {};\n }\n\n switch (type.kind) {\n case ReflectionKind.objectLiteral:\n case ReflectionKind.tuple:\n case ReflectionKind.union:\n case ReflectionKind.class:\n case ReflectionKind.intersection:\n case ReflectionKind.templateLiteral:\n type.types = type.types.slice();\n break;\n case ReflectionKind.string:\n case ReflectionKind.number:\n case ReflectionKind.bigint:\n case ReflectionKind.symbol:\n case ReflectionKind.regexp:\n case ReflectionKind.boolean:\n // if (type.origin) type.origin = copyAndSetParent(type.origin, type, stack);\n break;\n case ReflectionKind.function:\n case ReflectionKind.method:\n case ReflectionKind.methodSignature:\n // type.return = copyAndSetParent(type.return, type, stack);\n // type.parameters = type.parameters.map(member => copyAndSetParent(member, type, stack));\n break;\n case ReflectionKind.propertySignature:\n case ReflectionKind.property:\n case ReflectionKind.array:\n case ReflectionKind.promise:\n case ReflectionKind.parameter:\n case ReflectionKind.tupleMember:\n case ReflectionKind.rest:\n // type.type = copyAndSetParent(type.type, type, stack);\n break;\n case ReflectionKind.indexSignature:\n // type.index = copyAndSetParent(type.index, type, stack);\n // type.type = copyAndSetParent(type.type, type, stack);\n break;\n }\n\n return type as any;\n}\n\nexport function widenLiteral(type: Type): Type {\n if (type.kind === ReflectionKind.literal) {\n if (\"number\" === typeof type.literal)\n return copyAndSetParent({ kind: ReflectionKind.number, origin: type });\n if (\"boolean\" === typeof type.literal)\n return copyAndSetParent({ kind: ReflectionKind.boolean, origin: type });\n if (\"bigint\" === typeof type.literal)\n return copyAndSetParent({ kind: ReflectionKind.bigint, origin: type });\n if (\"symbol\" === typeof type.literal)\n return copyAndSetParent({ kind: ReflectionKind.symbol, origin: type });\n if (\"string\" === typeof type.literal)\n return copyAndSetParent({ kind: ReflectionKind.string, origin: type });\n if (type.literal instanceof RegExp)\n return copyAndSetParent({ kind: ReflectionKind.regexp, origin: type });\n }\n\n return type;\n}\n\nexport function assertType<K extends ReflectionKind, T>(\n t: Type | undefined,\n kind: K\n): asserts t is FindType<Type, K> {\n if (!t || t.kind !== kind)\n throw new Error(\n `Invalid type ${t ? ReflectionKind[t.kind] : undefined}, expected ${ReflectionKind[kind]}`\n );\n}\n\nexport function getClassType(type: Type): ClassType {\n if (type.kind !== ReflectionKind.class)\n throw new Error(\n `Type needs to be TypeClass, but ${ReflectionKind[type.kind]} given.`\n );\n return type.classType;\n}\n\nexport function isMember(\n type: Type\n): type is\n | TypePropertySignature\n | TypeProperty\n | TypeMethodSignature\n | TypeMethod {\n return (\n type.kind === ReflectionKind.propertySignature ||\n type.kind === ReflectionKind.property ||\n type.kind === ReflectionKind.methodSignature ||\n type.kind === ReflectionKind.method\n );\n}\n\nexport function hasMember(\n type: TypeObjectLiteral | TypeClass,\n memberName: number | string | symbol,\n memberType?: Type\n): boolean {\n return type.types.some(\n v =>\n isMember(v) &&\n v.name === memberName &&\n (!memberType ||\n isExtendable(\n v.kind === ReflectionKind.propertySignature ||\n v.kind === ReflectionKind.property\n ? v.type\n : v,\n memberType\n ))\n );\n}\n\nexport function getMember(\n type: TypeObjectLiteral | TypeClass,\n memberName: number | string | symbol\n):\n | TypeMethodSignature\n | TypeMethod\n | TypePropertySignature\n | TypeProperty\n | void {\n return (\n type.types as (\n | TypeIndexSignature\n | TypeMethodSignature\n | TypeMethod\n | TypePropertySignature\n | TypeProperty\n )[]\n ).find(v => isMember(v) && v.name === memberName) as\n | TypeMethodSignature\n | TypeMethod\n | TypePropertySignature\n | TypeProperty\n | void;\n}\n\nexport function getTypeObjectLiteralFromTypeClass<T extends Type>(\n type: T\n): T extends TypeClass ? TypeObjectLiteral : T {\n if (type.kind === ReflectionKind.class) {\n const objectLiteral: TypeObjectLiteral = {\n kind: ReflectionKind.objectLiteral,\n id: state.nominalId++,\n types: []\n };\n for (const member of type.types) {\n if (member.kind === ReflectionKind.indexSignature) {\n objectLiteral.types.push(member);\n member.parent = objectLiteral;\n } else if (member.kind === ReflectionKind.property) {\n const m = {\n ...member,\n kind: ReflectionKind.propertySignature\n } as any as TypePropertySignature;\n m.parent = objectLiteral;\n objectLiteral.types.push(m);\n } else if (member.kind === ReflectionKind.method) {\n const m = {\n ...member,\n kind: ReflectionKind.methodSignature\n } as any as TypeMethodSignature;\n m.parent = objectLiteral;\n objectLiteral.types.push(m);\n }\n }\n return objectLiteral as any;\n }\n\n return type as any;\n}\n\n/**\n * Checks whether `undefined` is allowed as type.\n */\nexport function isOptional(type: Type): boolean {\n if (isMember(type) && type.optional === true) return true;\n if (type.kind === ReflectionKind.parameter)\n return type.optional || isOptional(type.type);\n if (type.kind === ReflectionKind.tupleMember)\n return type.optional || isOptional(type.type);\n if (\n type.kind === ReflectionKind.property ||\n type.kind === ReflectionKind.propertySignature ||\n type.kind === ReflectionKind.indexSignature\n )\n return isOptional(type.type);\n return (\n type.kind === ReflectionKind.any ||\n type.kind === ReflectionKind.undefined ||\n (type.kind === ReflectionKind.union && type.types.some(isOptional))\n );\n}\n\n/**\n * Whether a property has an initializer/default value.\n */\nexport function hasDefaultValue(type: Type): boolean {\n return (\n (type.kind === ReflectionKind.property ||\n type.kind === ReflectionKind.parameter) &&\n type.default !== undefined\n );\n}\n\n/**\n * Checks whether `null` is allowed as type.\n */\nexport function isNullable(type: Type): boolean {\n if (\n type.kind === ReflectionKind.property ||\n type.kind === ReflectionKind.propertySignature ||\n type.kind === ReflectionKind.indexSignature\n )\n return isNullable(type.type);\n return (\n type.kind === ReflectionKind.null ||\n (type.kind === ReflectionKind.union && type.types.some(isNullable))\n );\n}\n\n/**\n * Get tags from type.\n */\nexport function getTags(type: Type): TagsReflection {\n if (\n type.kind === ReflectionKind.property ||\n type.kind === ReflectionKind.propertySignature ||\n type.kind === ReflectionKind.indexSignature\n ) {\n return type.tags ?? {};\n } else if (\n type.kind === ReflectionKind.method ||\n type.kind === ReflectionKind.methodSignature\n ) {\n return type.tags ?? {};\n } else if (\n type.kind === ReflectionKind.class ||\n type.kind === ReflectionKind.objectLiteral\n ) {\n return type.tags ?? {};\n } else if (type.kind === ReflectionKind.function) {\n return type.tags ?? {};\n } else if (\n type.kind === ReflectionKind.enum ||\n type.kind === ReflectionKind.enumMember\n ) {\n return type.tags ?? {};\n } else if (\n type.kind === ReflectionKind.parameter ||\n type.kind === ReflectionKind.typeParameter\n ) {\n return type.tags ?? {};\n } else if (type.kind === ReflectionKind.array) {\n return type.tags ?? {};\n }\n\n return {};\n}\n\n/**\n * Checks whether the \\`hidden\\` tag was specified for the type.\n */\nexport function isHidden(type: Type): boolean {\n const tags = getTags(type);\n\n return Boolean(tags.hidden);\n}\n\n/**\n * Checks whether the \\`ignore\\` tag was specified for the type.\n */\nexport function isIgnore(type: Type): boolean {\n const tags = getTags(type);\n\n return Boolean(tags.ignore);\n}\n\n/**\n * Checks whether the \\`internal\\` tag was specified for the type.\n */\nexport function isInternal(type: Type): boolean {\n const tags = getTags(type);\n\n return Boolean(tags.internal);\n}\n\n/**\n * Returns the values specified by the type's \\`alias\\` tag(s).\n */\nexport function getAlias(type: Type): string[] {\n const tags = getTags(type);\n\n return tags.alias ?? [];\n}\n\n/**\n * Checks whether the \\`readonly\\` tag was specified for the type.\n */\nexport function isReadonly(type: Type): boolean {\n const tags = getTags(type);\n\n return Boolean(tags.readonly);\n}\n\n/**\n * Returns the values specified by the type's \\`title\\` tag.\n */\nexport function getTitle(type: Type): string | undefined {\n const tags = getTags(type);\n\n return tags.title;\n}\n\n/**\n * Returns the values specified by the type's \\`permission\\` tag(s).\n */\nexport function getPermission(type: Type): string[] {\n const tags = getTags(type);\n\n return tags.permission ?? [];\n}\n\n/**\n * Returns the values specified by the type's \\`domain\\` tag.\n */\nexport function getDomain(type: Type): string | undefined {\n const tags = getTags(type);\n\n return tags.domain;\n}\n\n/**\n * Integer\n */\nexport type integer = number;\n\n/**\n * Integer 8 bit.\n * Min value -127, max value 128\n */\nexport type int8 = number;\n\n/**\n * Unsigned integer 8 bit.\n * Min value 0, max value 255\n */\nexport type uint8 = number;\n\n/**\n * Integer 16 bit.\n * Min value -32768, max value 32767\n */\nexport type int16 = number;\n\n/**\n * Unsigned integer 16 bit.\n * Min value 0, max value 65535\n */\nexport type uint16 = number;\n\n/**\n * Integer 8 bit.\n * Min value -2147483648, max value 2147483647\n */\nexport type int32 = number;\n\n/**\n * Unsigned integer 32 bit.\n * Min value 0, max value 4294967295\n */\nexport type uint32 = number;\n\n/**\n * Float (same as number, but different semantic for databases).\n */\nexport type float = number;\n\n/**\n * Float 32 bit.\n */\nexport type float32 = number;\n\n/**\n * Float 64 bit.\n */\nexport type float64 = number;\n\nexport class AnnotationDefinition<T = true> {\n public symbol: symbol;\n\n constructor(public readonly id: string) {\n this.symbol = Symbol(id);\n }\n\n register(annotations: Annotations, data: T) {\n annotations[this.symbol] ||= [];\n annotations[this.symbol].push(data);\n }\n\n reset(annotations: Annotations) {\n //not `delete` so that Object.assign works\n annotations[this.symbol] = undefined;\n }\n\n registerType<TType extends Type>(type: TType, data: T): TType {\n type.annotations ||= {};\n this.register(type.annotations, data);\n return type;\n }\n\n replace(annotations: Annotations, annotation: T[]) {\n annotations[this.symbol] = annotation;\n }\n\n replaceType(type: Type, annotation: T[]) {\n type.annotations ||= {};\n type.annotations[this.symbol] = annotation;\n }\n\n getAnnotations(type: Type): T[] {\n if (type.annotations) return type.annotations[this.symbol] || [];\n return [];\n }\n\n getFirst(type: Type): T | undefined {\n return this.getAnnotations(type)[0];\n }\n\n hasAnnotations(type: Type): boolean {\n return this.getAnnotations(type).length > 0;\n }\n}\n\nexport type AnnotationType<T extends AnnotationDefinition<any>> =\n T extends AnnotationDefinition<infer K> ? K : never;\n\nexport type ReferenceActions =\n | \"RESTRICT\"\n | \"NO ACTION\"\n | \"CASCADE\"\n | \"SET NULL\"\n | \"SET DEFAULT\";\n\nexport interface ReferenceOptions {\n /**\n * Default is CASCADE.\n */\n onDelete?: ReferenceActions;\n\n /**\n * Default is CASCADE.\n */\n onUpdate?: ReferenceActions;\n}\n\n/**\n * note: if this is adjusted, make sure to adjust ReflectionClass, entityAnnotation, and type serializer accordingly.\n */\nexport interface EntityOptions {\n name?: string;\n description?: string;\n collection?: string;\n database?: string;\n singleTableInheritance?: boolean;\n indexes?: { names: string[]; options: IndexOptions }[];\n}\n\n/**\n * Type to decorate an interface/object literal with entity information.\n *\n * ```typescript\n * interface User extends Entity<{name: 'user'}> {\n * id: number & PrimaryKey & AutoIncrement;\n * username: string & Unique;\n * }\n * ```\n */\nexport type Entity<T extends EntityOptions> = {} & TypeAnnotation<\"entity\", T>;\n\n/**\n * Marks a property as primary key.\n * ```typescript\n * class Entity {\n * id: number & Primary = 0;\n * }\n * ```\n */\nexport type PrimaryKey = TypeAnnotation<\"primaryKey\">;\n\ntype TypeKeyOf<T> = T[keyof T];\nexport type PrimaryKeyFields<T> = any extends T\n ? any\n : {\n [P in keyof T]: Required<T[P]> extends Required<PrimaryKey>\n ? T[P]\n : never;\n };\nexport type PrimaryKeyType<T> = any extends T\n ? any\n : TypeKeyOf<PrimaryKeyFields<T>>;\n\nexport type ReferenceFields<T> = {\n [P in keyof T]: Required<T[P]> extends\n | Required<Reference>\n | Required<BackReference>\n ? T[P]\n : never;\n};\n\n/**\n * Marks a primary property key as auto-increment.\n *\n * ```typescript\n * class Entity {\n * id: number & Primary & AutoIncrement = 0;\n * }\n * ```\n */\nexport type AutoIncrement = TypeAnnotation<\"autoIncrement\">;\n\n/**\n * UUID v4, as string, serialized as string in JSON, and binary in database.\n * Use `uuid()` as handy initializer.\n *\n * ```typescript\n * class Entity {\n * id: UUID = uuid();\n * }\n * ```\n */\nexport type UUID = string & TypeAnnotation<\"UUIDv4\">;\n\n/**\n * MongoDB's ObjectID type. serialized as string in JSON, ObjectID in database.\n */\nexport type MongoId = string & TypeAnnotation<\"mongoId\">;\n\n/**\n * Same as `bigint` but serializes to unsigned binary with unlimited size (instead of 8 bytes in most databases).\n * Negative values will be converted to positive (abs(x)).\n *\n * ```typescript\n * class Entity {\n * id: BinaryBigInt = 0n;\n * }\n * ```\n */\nexport type BinaryBigInt = bigint & TypeAnnotation<\"binaryBigInt\">;\n\n/**\n * Same as `bigint` but serializes to signed binary with unlimited size (instead of 8 bytes in most databases).\n * The binary has an additional leading sign byte and is represented as an uint: 255 for negative, 0 for zero, or 1 for positive.\n *\n * ```typescript\n * class Entity {\n * id: SignedBinaryBigInt = 0n;\n * }\n * ```\n */\nexport type SignedBinaryBigInt = bigint & TypeAnnotation<\"signedBinaryBigInt\">;\n\nexport interface BackReferenceOptions {\n /**\n * Necessary for normalised many-to-many relations. This defines the class of the pivot table/collection.\n */\n via?: ClassType | {};\n\n /**\n * A reference/backReference can define which reference on the other side\n * reference back. This is necessary when there are multiple outgoing references\n * to the same entity.\n */\n mappedBy?: string;\n}\n\nexport type Reference<Options extends ReferenceOptions = {}> = TypeAnnotation<\n \"reference\",\n Options\n>;\nexport type BackReference<Options extends BackReferenceOptions = {}> =\n TypeAnnotation<\"backReference\", Options>;\nexport type EmbeddedMeta<Options> = TypeAnnotation<\"embedded\", Options>;\nexport type Embedded<T, Options extends { prefix?: string } = {}> = T &\n EmbeddedMeta<Options>;\n\nexport type MapName<\n Alias extends string,\n ForSerializer extends string = \"\"\n> = TypeAnnotation<\"mapName\", [Alias, ForSerializer]>;\n\nexport const referenceAnnotation = new AnnotationDefinition<ReferenceOptions>(\n \"reference\"\n);\nexport const entityAnnotation =\n new (class extends AnnotationDefinition<EntityOptions> {\n set<K extends keyof EntityOptions>(\n type: Type,\n name: K,\n value: EntityOptions[K]\n ) {\n const data = this.getFirst(type) || {};\n data[name] = value;\n this.replaceType(type, [data]);\n }\n\n get(type: Type): EntityOptions {\n let data = this.getFirst(type);\n if (data) return data;\n data = {};\n this.replaceType(type, [data]);\n return data;\n }\n })(\"entity\");\nexport const mapNameAnnotation = new AnnotationDefinition<{\n name: string;\n serializer?: string;\n}>(\"mapName\");\n\nexport const autoIncrementAnnotation = new AnnotationDefinition(\n \"autoIncrement\"\n);\nexport const primaryKeyAnnotation = new (class extends AnnotationDefinition {\n isPrimaryKey(type: Type): boolean {\n return this.getAnnotations(type).length > 0;\n }\n})(\"primaryKey\");\n\nexport interface BackReferenceOptionsResolved {\n /**\n * Necessary for normalised many-to-many relations. This defines the class of the pivot table/collection.\n */\n via?: TypeClass | TypeObjectLiteral;\n\n /**\n * A reference/backReference can define which reference on the other side\n * reference back. This is necessary when there are multiple outgoing references\n * to the same entity.\n */\n mappedBy?: string;\n}\n\nexport const backReferenceAnnotation =\n new AnnotationDefinition<BackReferenceOptionsResolved>(\"backReference\");\nexport const validationAnnotation = new AnnotationDefinition<{\n name: string;\n args: Type[];\n}>(\"validation\");\nexport const UUIDAnnotation = new AnnotationDefinition(\"UUID\");\nexport const mongoIdAnnotation = new AnnotationDefinition(\"mongoID\");\nexport const uuidAnnotation = new AnnotationDefinition(\"uuid\");\nexport const defaultAnnotation = new AnnotationDefinition<Type>(\"default\");\n\nexport function isUUIDType(type: Type): boolean {\n return uuidAnnotation.getFirst(type) !== undefined;\n}\n\nexport function isPrimaryKeyType(type: Type): boolean {\n return primaryKeyAnnotation.isPrimaryKey(type);\n}\n\nexport function isAutoIncrementType(type: Type): boolean {\n return autoIncrementAnnotation.getFirst(type) !== undefined;\n}\n\nexport function isMongoIdType(type: Type): boolean {\n return mongoIdAnnotation.getFirst(type) !== undefined;\n}\n\nexport function isBinaryBigIntType(type: Type): boolean {\n return binaryBigIntAnnotation.getFirst(type) !== undefined;\n}\n\nexport function isReferenceType(type: Type): boolean {\n return referenceAnnotation.getFirst(resolveProperty(type)) !== undefined;\n}\n\nexport function getReferenceType(type: Type): ReferenceOptions | undefined {\n return referenceAnnotation.getFirst(resolveProperty(type));\n}\n\nexport function isBackReferenceType(type: Type): boolean {\n return backReferenceAnnotation.getFirst(resolveProperty(type)) !== undefined;\n}\n\nexport function resolveProperty(type: Type): Type {\n if (\n type.kind === ReflectionKind.propertySignature ||\n type.kind === ReflectionKind.property\n ) {\n type = type.type;\n }\n return type;\n}\n\nexport function getBackReferenceType(type: Type): BackReferenceOptionsResolved {\n const options = backReferenceAnnotation.getFirst(type);\n if (!options) throw new Error(\"No back reference\");\n return options;\n}\n\nexport function isDateType(type: Type): boolean {\n return type.kind === ReflectionKind.class && type.classType === Date;\n}\n\nexport function isSetType(type: Type): boolean {\n return type.kind === ReflectionKind.class && type.classType === Set;\n}\n\nexport function isMapType(type: Type): boolean {\n return type.kind === ReflectionKind.class && type.classType === Map;\n}\n\n/**\n * Get the key type of a Map or object literal with index signatures.\n */\nexport function getKeyType(type: Type): Type {\n if (\n type.kind === ReflectionKind.class &&\n type.classType === Map &&\n type.typeArguments\n )\n return type.typeArguments[0] || { kind: ReflectionKind.any };\n if (type.kind === ReflectionKind.objectLiteral) {\n const type: TypeUnion = { kind: ReflectionKind.union, types: [] };\n for (const t of type.types) {\n if (t.kind === ReflectionKind.indexSignature) type.types.push(t.index);\n }\n if (type.types.length === 1) return type.types[0];\n if (type.types.length === 0) return { kind: ReflectionKind.any };\n return type;\n }\n return { kind: ReflectionKind.any };\n}\n\n/**\n * Get the value type of a Map or object literal with index signatures.\n */\nexport function getValueType(type: Type): Type {\n if (\n type.kind === ReflectionKind.class &&\n type.classType === Map &&\n type.typeArguments\n )\n return type.typeArguments[1] || { kind: ReflectionKind.any };\n if (type.kind === ReflectionKind.objectLiteral) {\n const type: TypeUnion = { kind: ReflectionKind.union, types: [] };\n for (const t of type.types) {\n if (t.kind === ReflectionKind.indexSignature) type.types.push(t.type);\n }\n if (type.types.length === 1) return type.types[0];\n if (type.types.length === 0) return { kind: ReflectionKind.any };\n return type;\n }\n return { kind: ReflectionKind.any };\n}\n\nexport interface EmbeddedOptions {\n prefix?: string;\n}\n\nexport const embeddedAnnotation = new AnnotationDefinition<EmbeddedOptions>(\n \"embedded\"\n);\n\nexport function hasEmbedded(type: Type): boolean {\n if (\n type.kind === ReflectionKind.propertySignature ||\n type.kind === ReflectionKind.property\n )\n return hasEmbedded(type.type);\n if (type.kind === ReflectionKind.union) return type.types.some(hasEmbedded);\n return embeddedAnnotation.getFirst(type) !== undefined;\n}\n\n//`never` is here to allow using a decorator multiple times on the same type without letting the TS complaining about incompatible types.\n\n/**\n * Assigns one or multiple groups to a type.\n *\n * @example\n * ```typescript\n * interface User {\n * username: string;\n * password: string & Group<'credentials'>;\n * }\n * ```\n */\nexport type Group<Name extends string> = TypeAnnotation<\"group\", Name>;\n\n/**\n * Excludes the type from serialization of all kind.\n *\n * @example\n * ```typescript\n * interface User {\n * username: string;\n * password: string & Excluded;\n * }\n * ```\n */\nexport type Excluded<Name extends string = \"*\"> = TypeAnnotation<\n \"excluded\",\n Name\n>;\n\n/**\n * Assigns arbitrary data to a type that can be read in runtime.\n *\n * @example\n * ```typescript\n * interface User {\n * username: string;\n * password: string & Data<'role', 'admin'>;\n * }\n * ```\n */\nexport type Data<Name extends string, Value> = TypeAnnotation<\n \"data\",\n [Name, Value]\n>;\n\n/**\n * Resets an already set decorator to undefined.\n *\n * The required Name is the name of the type decorator (its first tuple entry).\n *\n * ```typescript\n * type Password = string & MinLength<6> & Excluded;\n *\n * interface UserCreationPayload {\n * password: Password & ResetAnnotation<'excluded'>\n * }\n * ```\n */\nexport type ResetAnnotation<Name extends string> = TypeAnnotation<\n \"reset\",\n Name\n>;\n\nexport type IndexOptions = {\n name?: string;\n //index size. Necessary for blob/longtext, etc.\n size?: number;\n\n unique?: boolean;\n spatial?: boolean;\n sparse?: boolean;\n\n //only in mongodb\n fulltext?: boolean;\n where?: string;\n\n expireAfterSeconds?: number;\n};\n\nexport type Unique<Options extends IndexOptions = {}> = TypeAnnotation<\n \"index\",\n Options & { unique: true }\n>;\nexport type Index<Options extends IndexOptions = {}> = TypeAnnotation<\n \"index\",\n Options\n>;\n\nexport interface DatabaseFieldOptions {\n /**\n * The name of the column in the database.\n * e.g. `userName: string & DatabaseField<{name: 'user_name'}>`\n *\n * Can alternatively also be configured by using a different NamingStrategy.\n */\n name?: string;\n\n /**\n *\n * e.g. `field: string & MySQL<{type: 'VARCHAR(255)'}>`\n */\n type?: string;\n\n /**\n * If the property is on a class, its initializer/default value is per default used.\n * This can be overridden using this option.\n * e.g. `field: string & MySQL<{default: 'abc'}>`\n */\n default?: any;\n\n /**\n * e.g. `field: string & MySQL<{defaultExpr: 'NOW()'}>`\n */\n defaultExpr?: any;\n\n /**\n * If true no default column value is inferred from the property initializer/default value.\n * e.g. `field: string & MySQL<{noDefault: true}> = ''`\n */\n noDefault?: true;\n\n /**\n * Skip this property in all queries and database migration files.\n */\n skip?: true;\n\n /**\n * Skip this property in database migration files. This excludes the property from the database, but\n * keeps it in the queries.\n */\n skipMigration?: true;\n}\n\nexport interface MySQLOptions extends DatabaseFieldOptions {}\n\nexport interface PostgresOptions extends DatabaseFieldOptions {}\n\nexport interface SqliteOptions extends DatabaseFieldOptions {}\n\ntype Database<\n Name extends string,\n Options extends { [name: string]: any }\n> = TypeAnnotation<\"database\", [Name, Options]>;\nexport type MySQL<Options extends MySQLOptions> = Database<\"mysql\", Options>;\nexport type Postgres<Options extends PostgresOptions> = Database<\n \"postgres\",\n Options\n>;\nexport type SQLite<Options extends SqliteOptions> = Database<\"sqlite\", Options>;\nexport type DatabaseField<\n Options extends DatabaseFieldOptions,\n Name extends string = \"*\"\n> = Database<Name, Options>;\n\nexport const enum BinaryBigIntType {\n unsigned,\n signed\n}\n\nexport const binaryBigIntAnnotation =\n new AnnotationDefinition<BinaryBigIntType>(\"binaryBigInt\");\nexport const groupAnnotation = new AnnotationDefinition<string>(\"group\");\nexport const excludedAnnotation =\n new (class extends AnnotationDefinition<string> {\n isExcluded(type: Type, name: string): boolean {\n const excluded = this.getAnnotations(type);\n return excluded.includes(\"*\") || excluded.includes(name);\n }\n })(\"excluded\");\nexport const dataAnnotation = new (class extends AnnotationDefinition<{\n [name: string]: any;\n}> {\n set<T extends Type>(type: T, key: string, value: any): T {\n const data = this.getFirst(type) || {};\n data[key] = value;\n this.replaceType(type, [data]);\n return type;\n }\n\n get(type: Type, key: string): any {\n const data = this.getFirst(type) || {};\n return data[key];\n }\n})(\"data\");\n\n/**\n * All raw data from `TypeAnnotation<Name, Options>` types.\n */\nexport const typeAnnotation = new (class extends AnnotationDefinition<{\n name: string;\n options: Type;\n}> {\n /**\n * Returns the parsed Type to JS objects, e.g. `{name: string}` => `{name: 'xy'}`\n */\n getOption(type: Type, name: string): any {\n const options = this.getType(type, name);\n return options ? typeToObject(options) : undefined;\n }\n\n /**\n * Returns the Type object of the annotation which can be parsed with `typeToObject`.\n */\n getType(type: Type, name: string): Type | undefined {\n for (const v of this.getAnnotations(type)) {\n if (v.name === name) return v.options;\n }\n return;\n }\n})(\"meta\");\nexport const indexAnnotation = new AnnotationDefinition<IndexOptions>(\"index\");\nexport const databaseAnnotation = new (class extends AnnotationDefinition<{\n name: string;\n options: { [name: string]: any };\n}> {\n getDatabase<T extends DatabaseFieldOptions>(\n type: Type,\n name: string\n ): T | undefined {\n let options: T | undefined = undefined;\n for (const annotation of this.getAnnotations(type)) {\n if (annotation.name === \"*\" || annotation.name === name) {\n if (!options) options = {} as T;\n Object.assign(options, annotation.options as T);\n }\n }\n return options as any;\n }\n})(\"database\");\n\nexport function registerTypeDecorator(decorator: TypeDecorator) {\n typeDecorators.push(decorator);\n}\n\n/**\n * Type annotations are object literals with a single optional __meta in it\n * that has as type a tuple with the name of the annotation as first entry.\n * The tuple is intersected with the `never` type to make sure it does not\n * interfere with type checking.\n *\n * The processor has currently implemented to not resolve `never & x` to `never`,\n * so we still have the intersection type in runtime to resolve __meta correctly.\n *\n * ```typescript\n * type MyAnnotation1 = TypeAnnotation<'myAnnotation'>\n * type MyAnnotation1<T> = TypeAnnotation<'myAnnotation', T>\n *\n * //under the hood it is:\n * type lowLevel1 = { __meta?: never & ['myAnnotation'] }\n * type lowLevel2<T> = { __meta?: never & ['myAnnotation', T] }\n * ```\n */\nexport function getAnnotationMeta(\n type: TypeObjectLiteral\n): { id: string; options: Type } | undefined {\n const meta = getProperty(type, \"__meta\");\n if (!meta || !meta.optional) return;\n let tuple: TypeTuple | undefined = undefined;\n\n if (meta.type.kind === ReflectionKind.intersection) {\n if (\n meta.type.types.length === 1 &&\n meta.type.types[0].kind === ReflectionKind.tuple\n ) {\n tuple = meta.type.types[0] as TypeTuple;\n }\n if (!tuple && meta.type.types.length === 2) {\n tuple = meta.type.types.find(v => v.kind === ReflectionKind.tuple) as\n | TypeTuple\n | undefined;\n if (\n tuple &&\n !meta.type.types.find(v => v.kind === ReflectionKind.never)\n ) {\n tuple = undefined;\n }\n }\n } else if (meta.type.kind === ReflectionKind.tuple) {\n tuple = meta.type;\n }\n\n if (!tuple) return;\n\n const id = tuple.types[0];\n if (\n !id ||\n id.type.kind !== ReflectionKind.literal ||\n \"string\" !== typeof id.type.literal\n )\n return;\n const optionsMember = tuple.types[1];\n\n return { id: id.type.literal, options: optionsMember?.type };\n}\n\nexport const typeDecorators: TypeDecorator[] = [\n (annotations: Annotations, decorator: TypeObjectLiteral) => {\n const meta = getAnnotationMeta(decorator);\n if (!meta) return false;\n\n switch (meta.id) {\n case \"reference\": {\n const optionsType = meta.options;\n if (!optionsType || optionsType.kind !== ReflectionKind.objectLiteral)\n return false;\n const options = typeToObject(optionsType);\n referenceAnnotation.replace(annotations, [options]);\n return true;\n }\n case \"entity\": {\n const optionsType = meta.options;\n if (!optionsType || optionsType.kind !== ReflectionKind.objectLiteral)\n return false;\n const options = typeToObject(optionsType);\n entityAnnotation.replace(annotations, [options]);\n return true;\n }\n case \"mapName\": {\n if (!meta.options) return false;\n const [name, serializer] = typeToObject(meta.options);\n\n if (\n \"string\" === typeof name &&\n (!serializer || \"string\" === typeof serializer)\n ) {\n mapNameAnnotation.replace(annotations, [{ name, serializer }]);\n }\n return true;\n }\n case \"autoIncrement\":\n autoIncrementAnnotation.register(annotations, true);\n return true;\n case \"binaryBigInt\":\n binaryBigIntAnnotation.replace(annotations, [\n BinaryBigIntType.unsigned\n ]);\n return true;\n case \"signedBinaryBigInt\":\n binaryBigIntAnnotation.replace(annotations, [BinaryBigIntType.signed]);\n return true;\n case \"primaryKey\":\n primaryKeyAnnotation.register(annotations, true);\n return true;\n case \"mongoId\":\n mongoIdAnnotation.register(annotations, true);\n return true;\n case \"UUIDv4\":\n uuidAnnotation.register(annotations, true);\n return true;\n case \"embedded\": {\n const optionsType = meta.options;\n if (!optionsType || optionsType.kind !== ReflectionKind.objectLiteral)\n return false;\n const options = typeToObject(optionsType);\n embeddedAnnotation.replace(annotations, [options]);\n return true;\n }\n case \"group\": {\n const nameType = meta.options;\n if (\n !nameType ||\n nameType.kind !== ReflectionKind.literal ||\n \"string\" !== typeof nameType.literal\n )\n return false;\n groupAnnotation.register(annotations, nameType.literal);\n return true;\n }\n case \"index\": {\n const optionsType = meta.options;\n if (!optionsType || optionsType.kind !== ReflectionKind.objectLiteral)\n return false;\n const options = typeToObject(optionsType);\n indexAnnotation.replace(annotations, [options]);\n return true;\n }\n case \"database\": {\n const [name, options] = typeToObject(meta.options);\n databaseAnnotation.register(annotations, { name: name, options });\n return true;\n }\n case \"excluded\": {\n const name = typeToObject(meta.options);\n excludedAnnotation.register(annotations, name);\n return true;\n }\n case \"reset\": {\n const name = typeToObject(meta.options);\n if (\"string\" !== typeof name) return false;\n const map: { [name: string]: AnnotationDefinition<any> } = {\n primaryKey: primaryKeyAnnotation,\n autoIncrement: autoIncrementAnnotation,\n excluded: excludedAnnotation,\n database: databaseAnnotation,\n index: indexAnnotation,\n data: dataAnnotation,\n group: groupAnnotation,\n embedded: excludedAnnotation,\n mapName: mapNameAnnotation,\n reference: referenceAnnotation,\n backReference: backReferenceAnnotation,\n validator: validationAnnotation\n };\n const annotation = map[name] || typeAnnotation;\n annotation.reset(annotations);\n return true;\n }\n case \"data\": {\n const tuple = meta.options;\n if (!tuple || tuple.kind !== ReflectionKind.tuple) return false;\n const nameType = tuple.types[0].type;\n if (\n !nameType ||\n nameType.kind !== ReflectionKind.literal ||\n \"string\" !== typeof nameType.literal\n )\n return false;\n const dataType = tuple.types[1].type;\n if (!dataType) return false;\n\n annotations[dataAnnotation.symbol] ||= [];\n let data: { [name: string]: any } = {};\n if (annotations[dataAnnotation.symbol].length) {\n data = annotations[dataAnnotation.symbol][0];\n } else {\n annotations[dataAnnotation.symbol].push(data);\n }\n\n data[nameType.literal] =\n dataType.kind === ReflectionKind.literal\n ? dataType.literal\n : dataType;\n\n return true;\n }\n case \"backReference\": {\n const optionsType = meta.options;\n if (!optionsType || optionsType.kind !== ReflectionKind.objectLiteral)\n return false;\n\n const options = typeToObject(optionsType);\n const member = findMember(\"via\", resolveTypeMembers(optionsType));\n backReferenceAnnotation.register(annotations, {\n mappedBy: options.mappedBy,\n via:\n member &&\n member.kind === ReflectionKind.propertySignature &&\n (member.type.kind === ReflectionKind.objectLiteral ||\n member.type.kind === ReflectionKind.class)\n ? member.type\n : undefined\n });\n return true;\n }\n case \"validator\": {\n const tuple = meta.options;\n if (!tuple || tuple.kind !== ReflectionKind.tuple) return false;\n const nameType = tuple.types[0].type;\n if (\n !nameType ||\n nameType.kind !== ReflectionKind.literal ||\n \"string\" !== typeof nameType.literal\n )\n return false;\n const name = nameType.literal;\n\n const argsType = tuple.types[1].type;\n if (!argsType || argsType.kind !== ReflectionKind.tuple) return false;\n const args: Type[] = argsType.types.map(v => v.type);\n\n const options: AnnotationType<typeof validationAnnotation> = {\n name,\n args\n };\n validationAnnotation.register(annotations, options);\n return true;\n }\n default: {\n typeAnnotation.register(annotations, {\n name: meta.id,\n options: meta.options\n });\n return true;\n }\n }\n }\n];\n\nexport function typeToObject(\n type?: Type,\n state: { stack: Type[] } = { stack: [] }\n): any {\n if (!type) return;\n\n if (state.stack.includes(type)) return undefined;\n state.stack.push(type);\n\n try {\n switch (type.kind) {\n case ReflectionKind.any:\n case ReflectionKind.void:\n case ReflectionKind.never:\n case ReflectionKind.undefined:\n return undefined;\n case ReflectionKind.null:\n return null;\n case ReflectionKind.string:\n return \"\";\n case ReflectionKind.number:\n return 0;\n case ReflectionKind.bigint:\n return BigInt(0);\n case ReflectionKind.regexp:\n return; //;\n case ReflectionKind.boolean:\n return true;\n case ReflectionKind.literal:\n return type.literal;\n case ReflectionKind.promise:\n return typeToObject(type.type);\n case ReflectionKind.templateLiteral:\n return \"\";\n case ReflectionKind.class: {\n return type.classType;\n }\n case ReflectionKind.objectLiteral: {\n const res: { [name: string | number | symbol]: any } = {};\n for (const t of type.types) {\n if (t.kind === ReflectionKind.propertySignature) {\n res[String(t.name)] = typeToObject(t.type);\n } else if (t.kind === ReflectionKind.methodSignature) {\n }\n }\n return res;\n }\n case ReflectionKind.union:\n case ReflectionKind.intersection:\n return typeToObject(type.types[0]);\n case ReflectionKind.function:\n return type.function;\n case ReflectionKind.array:\n return [typeToObject(type.type)];\n case ReflectionKind.tuple:\n return type.types.map(v => typeToObject(v.type, state));\n }\n\n return undefined;\n } finally {\n state.stack.pop();\n }\n}\n\nexport function memberNameToString(name: number | string | symbol): string {\n if (isType(name)) {\n return stringifyResolvedType(name);\n }\n return String(name);\n}\n\nexport const binaryTypes: ClassType[] = [\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n ArrayBuffer\n];\n\n/**\n * Returns true if the given type is Date, ArrayBuffer, Uint8Array, etc.\n */\nexport function isGlobalTypeClass(type: Type): type is TypeClass {\n if (type.kind !== ReflectionKind.class) return false;\n return isGlobalClass(type.classType);\n}\n\n/**\n * Returns true if the given type is TypeClass and references a custom (non-global) class.\n */\nexport function isCustomTypeClass(type: Type): type is TypeClass {\n return type.kind === ReflectionKind.class && !isGlobalTypeClass(type);\n}\n\n/**\n * Returns a type predicate that checks if the given type is a class and is of the given classType.\n * If withInheritance is true, it also checks if the type is a subclass of the given classType.\n */\nexport function isTypeClassOf(\n classType: ClassType,\n withInheritance: boolean = true\n): (type: Type) => boolean {\n if (!withInheritance)\n return (type: Type) =>\n type.kind === ReflectionKind.class && type.classType === classType;\n\n return (type: Type) => {\n if (type.kind !== ReflectionKind.class) return false;\n const chain = getInheritanceChain(type.classType);\n return chain.includes(classType);\n };\n}\n\n/**\n * Returns the members of a class or object literal.\n */\nexport function resolveTypeMembers(\n type: TypeClass | TypeObjectLiteral\n): (\n | TypeProperty\n | TypePropertySignature\n | TypeMethodSignature\n | TypeMethod\n | TypeIndexSignature\n | TypeCallSignature\n)[] {\n return type.types;\n}\n\nexport function stringifyResolvedType(type: Type): string {\n return stringifyType(type, { showNames: false, showFullDefinition: true });\n}\n\nexport function stringifyShortResolvedType(\n type: Type,\n stateIn: Partial<StringifyTypeOptions> = {}\n): string {\n return stringifyType(type, {\n ...stateIn,\n showNames: false,\n showFullDefinition: false\n });\n}\n\n/**\n * Returns all (including inherited) constructor properties of a class.\n */\nexport function getDeepConstructorProperties(type: TypeClass): TypeParameter[] {\n const chain = getInheritanceChain(type.classType);\n const res: TypeParameter[] = [];\n for (const classType of chain) {\n const type = resolveReceiveType(classType) as TypeClass;\n if (type.kind !== ReflectionKind.class) continue;\n const constructor = findMember(\"constructor\", type.types);\n if (!constructor || constructor.kind !== ReflectionKind.method) continue;\n for (const param of constructor.parameters) {\n if (param.kind !== ReflectionKind.parameter) continue;\n if (param.readonly === true || param.visibility !== undefined) {\n res.push(param);\n }\n }\n }\n return res;\n}\n\n/**\n * Returns the index to `type.values` if the given value is part of the enum, exactly or case-insensitive.\n * Returns -1 if not found.\n */\nexport function getEnumValueIndexMatcher(\n type: TypeEnum\n): (value: string | number | undefined | null) => number {\n const lowerCaseValues = Object.keys(type.enum).map(v =>\n String(v).toLowerCase()\n );\n return (value): number => {\n const exactMatch = type.values.indexOf(value);\n if (exactMatch !== -1) return exactMatch;\n const lowerCaseMatch = lowerCaseValues.indexOf(String(value).toLowerCase());\n if (lowerCaseMatch !== -1) return lowerCaseMatch;\n\n return -1;\n };\n}\n\ninterface StringifyTypeOptions {\n //show type alias names\n showNames: boolean;\n showFullDefinition: boolean;\n showDescription: boolean;\n defaultIsOptional: boolean;\n showHeritage: boolean;\n showDefaults: boolean;\n showTags: boolean;\n defaultValues: any;\n stringify?: (type: Type) => string | undefined;\n}\n\nlet stringifyTypeId: number = 1;\n\nexport function stringifyType(\n type: Type,\n stateIn: Partial<StringifyTypeOptions> = {}\n): string {\n const state: StringifyTypeOptions = {\n showNames: true,\n defaultIsOptional: false,\n showDefaults: false,\n defaultValues: undefined,\n showDescription: false,\n showHeritage: false,\n showFullDefinition: false,\n showTags: true,\n ...stateIn\n };\n const stack: {\n type?: Type;\n defaultValue?: any;\n before?: string;\n after?: string;\n depth?: number;\n }[] = [];\n stack.push({ type, defaultValue: state.defaultValues, depth: 1 });\n const stackId: number = stringifyTypeId++;\n const result: string[] = [];\n\n while (stack.length) {\n const entry = stack.pop();\n if (!entry) break;\n const type = entry.type;\n\n const depth = entry.depth || 1;\n if (type && stateIn.stringify) {\n const manual = stateIn.stringify(type);\n if (\"string\" === typeof manual) {\n if (manual !== \"\") {\n if (entry.before) {\n result.push(entry.before);\n }\n result.push(manual);\n if (entry.after) {\n result.push(entry.after);\n }\n }\n continue;\n }\n }\n\n if (entry.before) {\n result.push(entry.before);\n }\n\n if (type) {\n const jit = getTypeJitContainer(type);\n if (\n entry.depth !== undefined &&\n jit.visitStack &&\n jit.visitStack.id === stackId &&\n jit.visitStack.depth < entry.depth\n ) {\n result.push(type.typeName ? type.typeName : \"* Recursion *\");\n continue;\n }\n\n // objectLiteral and class types usually get their own reference, but their types are shared.\n // thus we have to check for their member types identity to check for recursions.\n if (\n type.kind === ReflectionKind.objectLiteral ||\n type.kind === ReflectionKind.class\n ) {\n const first = type.types[0];\n const jit = first ? getTypeJitContainer(first) : undefined;\n if (\n jit &&\n entry.depth !== undefined &&\n jit.visitStack &&\n jit.visitStack.id === stackId &&\n jit.visitStack.depth < entry.depth + 1\n ) {\n result.push(type.typeName ? type.typeName : \"* Recursion *\");\n continue;\n }\n }\n\n jit.visitStack = { id: stackId, depth };\n\n const manual = stateIn.stringify ? stateIn.stringify(type) : undefined;\n if (\"string\" === typeof manual) {\n result.push((jit.stringifyTypeResult = manual));\n continue;\n }\n\n if (state.showNames && type.typeName && !state.showFullDefinition) {\n if (type.typeArguments && type.typeArguments.length) {\n stack.push({ before: \">\" });\n for (let i = type.typeArguments.length - 1; i >= 0; i--) {\n stack.push({\n type: type.typeArguments[i],\n before: i === 0 ? undefined : \", \",\n depth\n });\n }\n stack.push({ before: \"<\" });\n }\n result.push(type.typeName);\n continue;\n }\n\n switch (type.kind) {\n case ReflectionKind.never:\n result.push(`never`);\n break;\n case ReflectionKind.any:\n result.push(`any`);\n break;\n case ReflectionKind.unknown:\n result.push(`unknown`);\n break;\n case ReflectionKind.void:\n result.push(`void`);\n break;\n case ReflectionKind.undefined:\n result.push(`undefined`);\n break;\n case ReflectionKind.null:\n result.push(`null`);\n break;\n case ReflectionKind.object:\n result.push(`object`);\n break;\n case ReflectionKind.string:\n result.push(\"string\");\n break;\n case ReflectionKind.infer:\n result.push(\"infer\");\n break;\n case ReflectionKind.number:\n result.push(\"number\");\n break;\n case ReflectionKind.bigint:\n result.push(\"bigint\");\n break;\n case ReflectionKind.regexp:\n result.push(\"RegExp\");\n break;\n case ReflectionKind.boolean:\n result.push(\"boolean\");\n break;\n case ReflectionKind.symbol:\n result.push(\"symbol\");\n break;\n case ReflectionKind.literal:\n if (\"number\" === typeof type.literal) {\n result.push(type.literal + \"\");\n } else if (\"boolean\" === typeof type.literal) {\n result.push(type.literal + \"\");\n } else {\n result.push(`'${String(type.literal).replace(/'/g, \"\\\\'\")}'`);\n }\n break;\n case ReflectionKind.promise:\n result.push(\"Promise<\");\n stack.push({ before: \">\" });\n stack.push({ type: type.type, depth: depth + 1 });\n break;\n case ReflectionKind.templateLiteral:\n stack.push({ before: \"`\" });\n for (let i = type.types.length - 1; i >= 0; i--) {\n const sub = type.types[i];\n if (sub.kind === ReflectionKind.literal) {\n stack.push({ before: String(sub.literal) });\n } else {\n stack.push({\n type: sub,\n before: \"${\",\n after: \"}\",\n depth: depth + 1\n });\n }\n }\n stack.push({ before: \"`\" });\n break;\n case ReflectionKind.class: {\n if (type.classType === Date) {\n result.push(`Date`);\n break;\n }\n if (type.classType === Set) {\n result.push(\"Set<\");\n stack.push({ before: \">\" });\n stack.push({ type: type.arguments![0], depth: depth + 1 });\n break;\n }\n if (type.classType === Map) {\n result.push(\"Map<\");\n stack.push({ before: \">\" });\n stack.push({ type: type.arguments![1], depth: depth + 1 });\n stack.push({ before: \", \" });\n stack.push({ type: type.arguments![0], depth: depth + 1 });\n break;\n }\n if (binaryTypes.includes(type.classType)) {\n result.push(getClassName(type.classType));\n break;\n }\n\n const typeName = type.typeName || getClassName(type.classType);\n const superClass = getParentClass(type.classType);\n\n if (state.showFullDefinition) {\n const types = state.showHeritage\n ? type.types\n : resolveTypeMembers(type);\n stack.push({ before: \"}\" });\n for (let i = types.length - 1; i >= 0; i--) {\n const sub = types[i];\n const showDescription =\n stateIn.showDescription &&\n sub.kind === ReflectionKind.property &&\n sub.description;\n const withIndentation = types.length > 1 || showDescription;\n\n if (withIndentation && i === types.length - 1) {\n stack.push({ before: \"\\n\" + \" \".repeat((depth - 1) * 2) });\n }\n if (state.stringify) {\n const manual = state.stringify(sub);\n if (\"string\" === typeof manual) {\n if (manual !== \"\") {\n stack.push({ before: manual });\n }\n continue;\n }\n }\n if (\n showDescription ||\n (types.length > 1 &&\n (withIndentation || i !== types.length - 1))\n ) {\n stack.push({ before: withIndentation ? \";\" : \"; \" });\n }\n const defaultValue =\n entry.defaultValue && sub.kind === ReflectionKind.property\n ? entry.defaultValue[sub.name]\n : undefined;\n const showDefault =\n sub.kind === ReflectionKind.property &&\n sub.type.kind !== ReflectionKind.class &&\n sub.type.kind !== ReflectionKind.objectLiteral;\n if (state.showDefaults && showDefault) {\n if (defaultValue !== undefined) {\n stack.push({ before: \" = \" + JSON.stringify(defaultValue) });\n } else if (\n sub.kind === ReflectionKind.property &&\n sub.default\n ) {\n try {\n stack.push({\n before: \" = \" + JSON.stringify(sub.default())\n });\n } catch {}\n }\n }\n stack.push({ type: sub, defaultValue, depth: depth + 1 });\n if (withIndentation) {\n stack.push({ before: \"\\n\" + \" \".repeat(depth * 2) });\n }\n if (showDescription) {\n const indentation = indent(depth * 2, \" * \");\n stack.push({\n before: \"\\n\" + indentation(\"/** \" + sub.description + \" */\")\n });\n }\n }\n\n stack.push({ before: \" {\" });\n }\n\n if (superClass && state.showHeritage) {\n try {\n const superClassType = reflect(superClass);\n if (superClassType.kind === ReflectionKind.class) {\n if (type.extendsArguments && type.extendsArguments.length) {\n stack.push({ before: \">\" });\n for (let i = type.extendsArguments.length - 1; i >= 0; i--) {\n stack.push({\n type: type.extendsArguments[i],\n before: i === 0 ? undefined : \", \",\n depth: depth + 1\n });\n }\n stack.push({ before: \"<\" });\n }\n\n stack.push({\n before:\n \" extends \" + (superClassType.typeName || superClass.name)\n });\n }\n } catch {\n stack.push({ before: \" extends \" + superClass.name });\n }\n }\n\n const typeArguments = type.arguments || type.typeArguments;\n if (\n (!state.showFullDefinition || type.types.length === 0) &&\n typeArguments &&\n typeArguments.length\n ) {\n stack.push({ before: \">\" });\n for (let i = typeArguments.length - 1; i >= 0; i--) {\n stack.push({\n type: typeArguments[i],\n before: i === 0 ? undefined : \", \",\n depth: depth + 1\n });\n }\n stack.push({ before: \"<\" });\n }\n\n stack.push({ before: typeName });\n break;\n }\n case ReflectionKind.objectLiteral: {\n const typeName = type.typeName || \"\";\n result.push(typeName);\n\n if (!typeName || state.showFullDefinition) {\n result.push(typeName ? \" {\" : \"{\");\n\n stack.push({ before: \"}\" });\n for (let i = type.types.length - 1; i >= 0; i--) {\n const sub = type.types[i];\n const showDescription =\n stateIn.showDescription &&\n sub.kind === ReflectionKind.propertySignature &&\n sub.description;\n const withIndentation = type.types.length > 1 || showDescription;\n\n if (state.stringify) {\n const manual = state.stringify(sub);\n if (\"string\" === typeof manual) {\n if (manual !== \"\") {\n stack.push({ before: manual });\n }\n continue;\n }\n }\n\n if (withIndentation && i === type.types.length - 1) {\n stack.push({ before: \"\\n\" + \" \".repeat((depth - 1) * 2) });\n }\n if (state.stringify) {\n const manual = state.stringify(sub);\n if (\"string\" === typeof manual) {\n if (manual !== \"\") {\n stack.push({ before: manual });\n }\n continue;\n }\n }\n if (\n showDescription ||\n (type.types.length > 1 &&\n (withIndentation || i !== type.types.length - 1))\n ) {\n stack.push({ before: withIndentation ? \";\" : \"; \" });\n }\n\n const defaultValue =\n entry.defaultValue &&\n sub.kind === ReflectionKind.propertySignature\n ? entry.defaultValue[sub.name]\n : undefined;\n const showDefault =\n sub.kind === ReflectionKind.propertySignature &&\n sub.type.kind !== ReflectionKind.class &&\n sub.type.kind !== ReflectionKind.objectLiteral;\n if (state.showDefaults && showDefault) {\n if (defaultValue !== undefined) {\n stack.push({ before: \" = \" + JSON.stringify(defaultValue) });\n }\n }\n stack.push({ type: sub, defaultValue, depth: depth + 1 });\n\n if (withIndentation) {\n stack.push({ before: \"\\n\" + \" \".repeat(depth * 2) });\n }\n if (showDescription) {\n const indentation = indent(depth * 2, \" * \");\n stack.push({\n before: \"\\n\" + indentation(\"/* \" + sub.description + \" */\")\n });\n }\n }\n }\n break;\n }\n case ReflectionKind.union:\n for (let i = type.types.length - 1; i >= 0; i--) {\n stack.push({\n type: type.types[i],\n before: i === 0 ? undefined : \" | \",\n depth: depth + 1\n });\n }\n break;\n case ReflectionKind.intersection:\n for (let i = type.types.length - 1; i >= 0; i--) {\n stack.push({\n type: type.types[i],\n before: i === 0 ? undefined : \" & \",\n depth: depth + 1\n });\n }\n break;\n case ReflectionKind.parameter: {\n const visibility = type.visibility\n ? ReflectionVisibility[type.visibility] + \" \"\n : \"\";\n const dotdotdot = type.type.kind === ReflectionKind.rest ? \"...\" : \"\";\n result.push(\n `${type.readonly ? \"readonly \" : \"\"}${visibility}${dotdotdot}${type.name}${type.optional ? \"?\" : \"\"}: `\n );\n stack.push({ type: type.type, depth: depth + 1 });\n break;\n }\n case ReflectionKind.callSignature:\n case ReflectionKind.function:\n stack.push({ type: type.return, depth: depth + 1 });\n stack.push({ before: \") => \" });\n for (let i = type.parameters.length - 1; i >= 0; i--) {\n stack.push({\n type: type.parameters[i],\n before: i === 0 ? undefined : \", \",\n depth: depth + 1\n });\n }\n stack.push({ before: \"(\" });\n break;\n case ReflectionKind.enum:\n const members = Object.entries(type.enum)\n .map(([label, value]) => `${label}: ${value}`)\n .join(\", \");\n stack.push({\n before:\n `${type.typeName ? type.typeName : \"Enum\"} {` + members + \"}\"\n });\n break;\n case ReflectionKind.array:\n stack.push({ before: \">\" });\n stack.push({ type: type.type, before: \"Array<\", depth: depth + 1 });\n break;\n case ReflectionKind.typeParameter:\n stack.push({ before: type.name });\n break;\n case ReflectionKind.rest:\n stack.push({ before: \"[]\" });\n stack.push({ type: type.type, depth: depth + 1 });\n if (\n type.parent &&\n type.parent.kind === ReflectionKind.tupleMember &&\n !type.parent.name\n ) {\n stack.push({ before: \"...\" });\n }\n break;\n case ReflectionKind.tupleMember:\n if (type.name) {\n const dotdotdot =\n type.type.kind === ReflectionKind.rest ? \"...\" : \"\";\n result.push(\n `${dotdotdot}${type.name}${type.optional ? \"?\" : \"\"}: `\n );\n stack.push({ type: type.type, depth: depth + 1 });\n break;\n }\n if (type.optional) {\n stack.push({ before: \"?\" });\n }\n stack.push({ type: type.type, depth: depth + 1 });\n break;\n case ReflectionKind.tuple:\n stack.push({ before: \"]\" });\n for (let i = type.types.length - 1; i >= 0; i--) {\n stack.push({\n type: type.types[i],\n before: i === 0 ? undefined : \", \",\n depth: depth + 1\n });\n }\n stack.push({ before: \"[\" });\n break;\n case ReflectionKind.indexSignature:\n stack.push({ type: type.type, depth: depth + 1 });\n stack.push({ before: \"]: \" });\n stack.push({ type: type.index, depth: depth + 1 });\n stack.push({ before: \"[index: \" });\n // name = `{[index: ${stringifyType(type.index, state)}]: ${stringifyType(type.type, state)}`;\n break;\n case ReflectionKind.propertySignature:\n result.push(\n `${type.readonly ? \"readonly \" : \"\"}${memberNameToString(type.name)}${type.optional ? \"?\" : \"\"}: `\n );\n stack.push({\n type: type.type,\n defaultValue: entry.defaultValue,\n depth\n });\n break;\n case ReflectionKind.property: {\n const visibility = type.visibility\n ? ReflectionVisibility[type.visibility] + \" \"\n : \"\";\n const optional =\n type.optional ||\n (stateIn.defaultIsOptional && type.default !== undefined);\n result.push(\n `${type.static ? \"static \" : \"\"}${type.readonly ? \"readonly \" : \"\"}${visibility}${memberNameToString(type.name)}${optional ? \"?\" : \"\"}: `\n );\n stack.push({\n type: type.type,\n defaultValue: entry.defaultValue,\n depth\n });\n break;\n }\n case ReflectionKind.methodSignature:\n stack.push({ type: type.return, depth });\n stack.push({ before: \"): \" });\n for (let i = type.parameters.length - 1; i >= 0; i--) {\n stack.push({\n type: type.parameters[i],\n before: i === 0 ? undefined : \", \",\n depth\n });\n }\n stack.push({\n before: `${memberNameToString(type.name)}${type.optional ? \"?\" : \"\"}(`\n });\n break;\n case ReflectionKind.method: {\n const visibility = type.visibility\n ? ReflectionVisibility[type.visibility] + \" \"\n : \"\";\n const abstract = type.abstract ? \"abstract \" : \"\";\n const staticPrefix = type.static ? \"static \" : \"\";\n if (type.name === \"constructor\") {\n stack.push({ before: \")\" });\n } else {\n stack.push({ type: type.return, depth });\n stack.push({ before: \"): \" });\n }\n for (let i = type.parameters.length - 1; i >= 0; i--) {\n stack.push({\n type: type.parameters[i],\n before: i === 0 ? undefined : \", \",\n depth\n });\n }\n stack.push({\n before: `${staticPrefix}${abstract}${visibility}${memberNameToString(type.name)}${type.optional ? \"?\" : \"\"}(`\n });\n break;\n }\n }\n }\n\n if (entry.after) {\n result.push(entry.after);\n }\n }\n\n return result.join(\"\");\n}\n\nexport function annotateClass<T>(\n clazz: ClassType | AbstractClassType,\n type?: ReceiveType<T>\n) {\n (clazz as any).__type = isClass(type) ? (type as any).__type || [] : [];\n type = resolveRuntimeType(type);\n (clazz as any).__type.__type = type;\n}\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport { ClassType, isObject } from '@deepkit/core';\nimport { ReflectionClass, reflectionClassSymbol } from './reflection/reflection.js';\nimport { typeSettings, UnpopulatedCheck, unpopulatedSymbol } from './core.js';\nimport { ReflectionKind, Type } from './reflection/type.js';\n\nexport function isReferenceInstance(obj: any): boolean {\n return isObject(obj) && referenceSymbol in obj;\n}\n\nexport function getReferenceInfo<T>(obj: T): ReferenceInfo<T> | undefined {\n return (obj as any)[referenceSymbol] as ReferenceInfo<T>;\n}\n\nexport function getReferenceItemInfo<T>(obj: T): ReferenceItemInfo<T> | undefined {\n return (obj as any)[referenceItemSymbol] as ReferenceItemInfo<T>;\n}\n\nexport function getOrCreateReferenceItemInfo<T>(obj: T): ReferenceItemInfo<T> {\n if (!(obj as any)[referenceItemSymbol]) (obj as any)[referenceItemSymbol] = { hydrated: false };\n return (obj as any)[referenceItemSymbol] as ReferenceItemInfo<T>;\n}\n\nexport function isReferenceHydrated(obj: any): boolean {\n if (!(referenceItemSymbol in obj)) return false;\n const info = getReferenceItemInfo(obj);\n return info ? info.hydrated : false;\n}\n\nexport function markAsHydrated(item: any) {\n getOrCreateReferenceItemInfo(item).hydrated = true;\n}\n\nexport interface ReferenceInfo<T> {\n hydrator?: (item: T) => Promise<void>;\n}\n\nexport interface ReferenceItemInfo<T> {\n hydrated: boolean,\n}\n\nexport const referenceSymbol = Symbol('reference');\nexport const referenceItemSymbol = Symbol('reference/item');\n\nexport function createReference<T>(type: ClassType<T> | Type | ReflectionClass<any>, pk: { [name: string]: any }): T {\n const reflection = ReflectionClass.from(type);\n\n const reflectionClass = createReferenceClass(reflection);\n\n const old = typeSettings.unpopulatedCheck;\n typeSettings.unpopulatedCheck = UnpopulatedCheck.None;\n\n try {\n return Object.assign(Object.create(reflectionClass.prototype), pk);\n } finally {\n typeSettings.unpopulatedCheck = old;\n }\n}\n\nexport function createReferenceClass<T>(\n reflection: ReflectionClass<any>,\n): ClassType<T> {\n if (reflection.data.referenceClass) return reflection.data.referenceClass;\n\n const Reference = reflection.type.kind === ReflectionKind.class ? class extends reflection.type.classType {\n } : class {\n };\n\n Object.defineProperty(Reference.prototype, referenceSymbol, { value: { hydrator: undefined }, enumerable: false });\n Object.defineProperty(Reference.prototype, referenceItemSymbol, { value: null, writable: true, enumerable: false });\n Object.defineProperty(Reference.prototype, reflectionClassSymbol, { writable: true, enumerable: false, value: reflection });\n\n Object.defineProperty(Reference, 'name', {\n value: reflection.getClassName() + 'Reference'\n });\n\n reflection.data.referenceClass = Reference;\n\n for (const property of reflection.getProperties()) {\n if (property.isPrimaryKey()) continue;\n\n // we can not exclude default or optional properties, since we tell serializer/validator/change-detector with\n // returning `unpopulatedSymbol` that this property is not loaded. Returning the wrong default/undefined leads to wrong results.\n\n const name = String(property.getName());\n\n const message = property.isReference() || property.isBackReference() ?\n `Reference ${reflection.getClassName()}.${name} was not loaded. Use joinWith(), useJoinWith(), etc to populate the reference.`\n :\n `Can not access ${reflection.getClassName()}.${name} since class was not completely hydrated. Use 'await hydrateEntity(${reflection.getClassName()})' to completely load it.`;\n\n Object.defineProperty(Reference.prototype, property.name, {\n enumerable: true,\n configurable: true,\n get() {\n if (this.hasOwnProperty(property.symbol)) {\n return this[property.symbol];\n }\n\n if (typeSettings.unpopulatedCheck === UnpopulatedCheck.Throw) {\n throw new Error(message);\n }\n\n if (typeSettings.unpopulatedCheck === UnpopulatedCheck.ReturnSymbol) {\n return unpopulatedSymbol;\n }\n },\n set(v) {\n if (typeSettings.unpopulatedCheck === UnpopulatedCheck.None) {\n //when this check is off, this item is being constructed so we ignore initial set operations\n return;\n }\n\n // when we set value, we just accept it and treat all\n // properties accessors that don't throw the Error above as \"updated\"\n Object.defineProperty(this, property.symbol, {\n enumerable: false,\n writable: true,\n value: v\n });\n }\n });\n }\n\n return Reference as ClassType<T>;\n}\n","import { ReceiveType, resolveReceiveType } from './reflection/reflection.js';\nimport { createTypeGuardFunction, Guard, serializer, Serializer, TemplateState } from './serializer.js';\nimport { NoTypeReceived } from './utils.js';\nimport { ValidationError, ValidationErrorItem } from './validator.js';\nimport { getTypeJitContainer } from './reflection/type.js';\n\n/**\n * ```typescript\n * const validator = getValidatorFunction<MyType>();\n *\n * const errors: ValidationErrorItem[] = [];\n * const valid = validator(data, {errors})\n *\n * if (errors.length) console.log(errors); //validation failed if not empty\n * ```\n */\nexport function getValidatorFunction<T>(serializerToUse: Serializer = serializer, receiveType?: ReceiveType<T>): Guard<T> {\n if (!receiveType) throw new NoTypeReceived();\n const type = resolveReceiveType(receiveType);\n const jit = getTypeJitContainer(type);\n if (jit.__is) {\n return jit.__is;\n }\n const fn = createTypeGuardFunction(type, {\n validation: 'strict'\n }, serializerToUse) || (() => undefined);\n jit.__is = fn;\n return fn as Guard<T>;\n}\n\nexport function is<T>(data: any, serializerToUse: Serializer = serializer, errors: ValidationErrorItem[] = [], receiveType?: ReceiveType<T>): data is T {\n //`errors` is passed to `is` to trigger type validations as well\n const fn = getValidatorFunction(serializerToUse, receiveType);\n return fn(data, { errors }) as boolean;\n}\n\nexport function guard<T>(serializerToUse: Serializer = serializer, receiveType?: ReceiveType<T>): Guard<T> {\n const fn = getValidatorFunction(serializerToUse, receiveType);\n return ((data: any) => fn(data, { errors: [] })) as Guard<T>;\n}\n\n/**\n * @throws ValidationError when type is invalid.\n */\nexport function assert<T>(data: any, serializerToUse: Serializer = serializer, receiveType?: ReceiveType<T>): asserts data is T {\n const errors: ValidationErrorItem[] = [];\n is(data, serializerToUse, errors, receiveType);\n if (errors.length) {\n throw new ValidationError(errors, resolveReceiveType(receiveType));\n }\n}\n","import { ReceiveType } from './reflection/reflection.js';\nimport { getValidatorFunction, is } from './typeguard.js';\nimport { CustomError, TypeAnnotation } from '@deepkit/core';\nimport { stringifyType, Type } from './reflection/type.js';\nimport { entity } from './decorator.js';\nimport { serializer, Serializer } from './serializer.js';\n\nexport type ValidatorMeta<Name extends string, Args extends [...args: any[]] = []> = TypeAnnotation<'validator', [Name, Args]>;\n\nexport type ValidateFunction = (value: any, type: Type, options: any) => ValidatorError | void;\nexport type Validate<T extends ValidateFunction, Options extends Parameters<T>[2] = unknown> = ValidatorMeta<'function', [T, Options]>;\nexport type Pattern<T extends RegExp> = ValidatorMeta<'pattern', [T]>;\nexport type Alpha = ValidatorMeta<'alpha'>;\nexport type Alphanumeric = ValidatorMeta<'alphanumeric'>;\nexport type Ascii = ValidatorMeta<'ascii'>;\nexport type Decimal<MinDigits extends number = 1, MaxDigits extends number = 100> = ValidatorMeta<'decimal', [MinDigits, MaxDigits]>;\nexport type MultipleOf<Num extends number> = ValidatorMeta<'multipleOf', [Num]>;\nexport type MinLength<Length extends number> = ValidatorMeta<'minLength', [Length]>;\nexport type MaxLength<Length extends number> = ValidatorMeta<'maxLength', [Length]>;\n\nexport type Includes<T extends string | number | boolean> = ValidatorMeta<'includes', [T]>;\nexport type Excludes<T extends string | number | boolean> = ValidatorMeta<'excludes', [T]>;\n\nexport type Minimum<T extends number | bigint> = ValidatorMeta<'minimum', [T]>;\nexport type Maximum<T extends number | bigint> = ValidatorMeta<'maximum', [T]>;\n\n/**\n Includes 0. Use PositiveNoZero to exclude 0.\n */\nexport type Positive = ValidatorMeta<'positive', unknown & [true]>;\n\n/**\n * Includes 0. Use NegativeNoZero to exclude 0.\n */\nexport type Negative = ValidatorMeta<'negative', [true]>;\n\nexport type PositiveNoZero = ValidatorMeta<'positive', [false]>;\nexport type NegativeNoZero = ValidatorMeta<'negative', [false]>;\n\nexport type ExclusiveMinimum<T extends number | bigint> = ValidatorMeta<'exclusiveMinimum', [T]>;\nexport type ExclusiveMaximum<T extends number | bigint> = ValidatorMeta<'exclusiveMaximum', [T]>;\n\nexport type BeforeDate<T extends number> = ValidatorMeta<'beforeDate', [T]>;\nexport type AfterDate<T extends number> = ValidatorMeta<'afterDate', [T]>;\nexport type BeforeNow = ValidatorMeta<'beforeNow'>;\nexport type AfterNow = ValidatorMeta<'afterNow'>;\n\nexport const EMAIL_REGEX = /^\\S+@\\S+$/;\nexport type Email = string & Pattern<typeof EMAIL_REGEX>;\n\n/**\n * Used in validator functions.\n */\nexport class ValidatorError {\n constructor(\n public readonly code: string,\n public readonly message: string,\n public readonly path?: string,\n ) {\n }\n}\n\n/**\n * The structure of a validation error.\n *\n * Path defines the shallow or deep path (using dots).\n * Message is an arbitrary message in english.\n *\n * In validators please use and return `new ValidatorError('code', 'message')` instead.\n */\nexport class ValidationErrorItem {\n constructor(\n /**\n * The path to the property. Might be a deep path separated by dot.\n */\n public readonly path: string,\n /**\n * A lower cased error code that can be used to identify this error and translate.\n */\n public readonly code: string,\n /**\n * Free text of the error.\n */\n public readonly message: string,\n /**\n * Optional value that caused the error.\n */\n public readonly value?: any,\n ) {\n this.path = path && path[0] === '.' ? path.slice(1) : path;\n }\n\n toString(prefix: string = '') {\n let messagedCausedBy = '';\n if (this.value !== undefined) {\n //serialise the value and trim to 100 chars max\n let serialisedValue = JSON.stringify(this.value);\n if (serialisedValue.length > 100) serialisedValue = serialisedValue.slice(0, 100) + '...';\n messagedCausedBy = ` caused by value ${serialisedValue}`;\n }\n\n return `${(prefix ? prefix + '.' : '') + this.path}(${this.code}): ${this.message}${messagedCausedBy}`;\n }\n}\n\n@entity.name('@error:validation')\nexport class ValidationError extends CustomError {\n constructor(\n public readonly errors: ValidationErrorItem[],\n type?: Type,\n ) {\n super(`Validation error${type ? ` for type ${stringifyType(type)}` : ''}:\\n${errors.map(v => v.toString()).join(',\\n')}`);\n }\n\n static from(errors: { path: string, message: string, code?: string, value?: any }[]) {\n return new ValidationError(errors.map(v => new ValidationErrorItem(v.path, v.code || '', v.message, v.value)));\n }\n}\n\n/**\n * Returns empty array when valid, or ValidationErrorItem[] with detailed error messages if not valid.\n *\n * Returns validation error items when failed. If successful returns an empty array.\n */\nexport function validate<T>(data: any, type?: ReceiveType<T>): ValidationErrorItem[] {\n const errors: ValidationErrorItem[] = [];\n is(data, undefined, errors, type);\n return errors;\n}\n\nexport function validateFunction<T>(serializerToUse: Serializer = serializer, type?: ReceiveType<T>): (data: T) => ValidationErrorItem[] {\n const fn = getValidatorFunction(serializerToUse, type);\n return (data: T) => {\n const errors: ValidationErrorItem[] = [];\n fn(data, { errors });\n return errors;\n };\n}\n\n/**\n * Returns true when valid, and false if not.\n */\nexport function validates<T>(data: any, type?: ReceiveType<T>): boolean {\n const errors = validate(data, type);\n return errors.length === 0;\n}\n","import { isArray } from '@deepkit/core';\nimport { ValidatorError } from './validator.js';\nimport { TypeLiteral } from './reflection/type.js';\n\nexport const validators: { [name in string]?: (...args: any[]) => (value: any) => ValidatorError | undefined } = {\n pattern(type: TypeLiteral) {\n return (value: any) => {\n if ('string' !== typeof value) return;\n if (type.literal instanceof RegExp) {\n if (type.literal.exec(value)) return;\n return new ValidatorError('pattern', `Pattern ${type.literal.source} does not match`);\n }\n return;\n };\n },\n\n alpha() {\n return (value: any) => {\n if ('string' !== typeof value) return;\n if (value.length === 0) return;\n if (/^[A-Z]+$/i.test(value)) return;\n return new ValidatorError('alpha', 'Not alpha');\n };\n },\n\n alphanumeric() {\n return (value: any) => {\n if ('string' !== typeof value) return;\n if (value.length === 0) return;\n if (/^[0-9A-Z]+$/i.test(value)) return;\n return new ValidatorError('alphanumeric', 'Not alphanumeric');\n };\n },\n\n ascii() {\n return (value: any) => {\n if ('string' !== typeof value) return;\n if (value.length === 0) return;\n if (/^[\\x00-\\x7F]+$/.test(value)) return;\n return new ValidatorError('ascii', 'Not ASCII');\n };\n },\n\n dataURI() {\n return (value: any) => {\n if ('string' !== typeof value) return;\n if (/^(data:)([\\w\\/\\+-]*)(;charset=[\\w-]+|;base64){0,1},(.*)/gi.test(value)) return;\n return new ValidatorError('dataURI', 'Not a data URI');\n };\n },\n\n decimal(minDigits: TypeLiteral & { literal: number }, maxDigits: TypeLiteral & { literal: number }) {\n const regexp = new RegExp('^-?\\\\d+\\\\.\\\\d{' + minDigits.literal + ',' + maxDigits.literal + '}$');\n return (value: any) => {\n if ('string' !== typeof value) return;\n if (regexp.test(value)) return;\n return new ValidatorError('decimal', `Not a decimal(x.${minDigits.literal}-${maxDigits.literal})`);\n };\n },\n\n multipleOf(num: TypeLiteral & { literal: number }) {\n return (value: any) => {\n if ('number' !== typeof value) return;\n if (value % num.literal === 0) return;\n return new ValidatorError('multipleOf', 'Not a multiple of ' + num.literal);\n };\n },\n\n minLength(length: TypeLiteral & { literal: number }) {\n return (value: any) => {\n if ('string' !== typeof value && !isArray(value)) return;\n if (value.length >= length.literal) return;\n\n return new ValidatorError('minLength', 'Min length is ' + length.literal);\n };\n },\n\n maxLength(length: TypeLiteral & { literal: number }) {\n return (value: any) => {\n if ('string' !== typeof value && !isArray(value)) return;\n if (value.length <= length.literal) return;\n\n return new ValidatorError('maxLength', 'Max length is ' + length.literal);\n };\n },\n\n includes(include: TypeLiteral) {\n return (value: any) => {\n if ('string' !== typeof value && !isArray(value)) return;\n if (value.includes(include.literal as any)) return;\n\n return new ValidatorError('includes', `Needs to include '${String(include.literal)}'`);\n };\n },\n\n excludes(excludes: TypeLiteral) {\n return (value: any) => {\n if ('string' !== typeof value && !isArray(value)) return;\n if (!value.includes(excludes.literal as any)) return;\n return new ValidatorError('excludes', `Needs to exclude '${String(excludes.literal)}'`);\n };\n },\n\n minimum(min: TypeLiteral & { literal: number | bigint }) {\n return (value: any) => {\n if ('number' !== typeof value && 'bigint' !== typeof value) return;\n if (value < min.literal) return new ValidatorError('minimum', 'Number needs to be greater than or equal to ' + min.literal);\n return;\n };\n },\n\n exclusiveMinimum(min: TypeLiteral & { literal: number | bigint }) {\n return (value: any) => {\n if ('number' !== typeof value && 'bigint' !== typeof value) return;\n if (value <= min.literal) return new ValidatorError('minimum', 'Number needs to be greater than ' + min.literal);\n return;\n };\n },\n\n maximum(max: TypeLiteral & { literal: number | bigint }) {\n return (value: any) => {\n if ('number' !== typeof value && 'bigint' !== typeof value) return;\n if (value > max.literal) return new ValidatorError('maximum', 'Number needs to be smaller than or equal to ' + max.literal);\n return;\n };\n },\n\n exclusiveMaximum(max: TypeLiteral & { literal: number | bigint }) {\n return (value: any) => {\n if ('number' !== typeof value && 'bigint' !== typeof value) return;\n if (value >= max.literal) return new ValidatorError('maximum', 'Number needs to be smaller than ' + max.literal);\n return;\n };\n },\n\n positive(includingZero: TypeLiteral & { literal: boolean }) {\n return (value: any) => {\n if ('number' !== typeof value && 'bigint' !== typeof value) return;\n if (value > 0) return;\n if (includingZero.literal && value === 0) return;\n\n return new ValidatorError('positive', 'Number needs to be positive');\n };\n },\n\n negative(includingZero: TypeLiteral & { literal: boolean }) {\n return (value: any) => {\n if ('number' !== typeof value && 'bigint' !== typeof value) return;\n if (value < 0) return;\n if (includingZero.literal && value === 0) return;\n\n return new ValidatorError('negative', 'Number needs to be negative');\n };\n },\n\n beforeDate(date: TypeLiteral & { literal: number }) {\n return (value: any) => {\n if (!(value instanceof Date)) return;\n if (value.getTime() < date.literal) return;\n\n return new ValidatorError('beforeDate', `Dates needs to be before ${date.literal}`);\n };\n },\n\n afterDate(date: TypeLiteral & { literal: number }) {\n return (value: any) => {\n if (!(value instanceof Date)) return;\n if (value.getTime() > date.literal) return;\n\n return new ValidatorError('beforeDate', `Dates needs to be after ${date.literal}`);\n };\n },\n\n beforeNow() {\n return (value: any) => {\n if (!(value instanceof Date)) return;\n if (value.getTime() < Date.now()) return;\n\n return new ValidatorError('beforeDate', `Dates needs to be in the past`);\n };\n },\n\n afterNow() {\n return (value: any) => {\n if (!(value instanceof Date)) return;\n if (value.getTime() > Date.now()) return;\n\n return new ValidatorError('beforeDate', `Dates needs to be in the future`);\n };\n },\n};\n","/*\n * Deepkit Framework\n * Copyright (c) Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport {\n ClassType,\n CompilerContext,\n CustomError,\n getObjectKeysSize,\n hasProperty,\n isArray,\n isFunction,\n isInteger,\n isIterable,\n isNumeric,\n isObject,\n isObjectLiteral,\n iterableSize,\n stringifyValueWithType,\n toFastProperties\n} from \"@deepkit/core\";\nimport { TypeNumberBrand } from \"@deepkit/type-spec\";\nimport {\n arrayBufferToBase64,\n base64ToArrayBuffer,\n base64ToTypedArray,\n typedArrayToBase64,\n typeSettings,\n UnpopulatedCheck,\n unpopulatedSymbol\n} from \"./core.js\";\nimport {\n createReference,\n isReferenceHydrated,\n isReferenceInstance\n} from \"./reference.js\";\nimport { extendTemplateLiteral, isExtendable } from \"./reflection/extends.js\";\nimport { resolveRuntimeType } from \"./reflection/processor.js\";\nimport {\n hasCircularReference,\n ReflectionClass,\n ReflectionProperty\n} from \"./reflection/reflection.js\";\nimport {\n AnnotationDefinition,\n assertType,\n binaryBigIntAnnotation,\n BinaryBigIntType,\n binaryTypes,\n copyAndSetParent,\n embeddedAnnotation,\n EmbeddedOptions,\n excludedAnnotation,\n FindType,\n getConstructorProperties,\n getDeepConstructorProperties,\n getEnumValueIndexMatcher,\n getTypeJitContainer,\n getTypeObjectLiteralFromTypeClass,\n groupAnnotation,\n hasDefaultValue,\n hasEmbedded,\n isBackReferenceType,\n isCustomTypeClass,\n isMongoIdType,\n isNullable,\n isOptional,\n isPropertyMemberType,\n isReferenceType,\n isType,\n isUUIDType,\n mapNameAnnotation,\n memberNameToString,\n referenceAnnotation,\n ReflectionKind,\n resolveTypeMembers,\n stringifyResolvedType,\n stringifyType,\n Type,\n TypeArray,\n TypeClass,\n TypeIndexSignature,\n TypeObjectLiteral,\n TypeParameter,\n TypeProperty,\n TypePropertySignature,\n typeToObject,\n TypeTuple,\n TypeUnion,\n validationAnnotation\n} from \"./reflection/type.js\";\nimport { validate, ValidationError, ValidationErrorItem } from \"./validator.js\";\nimport { validators } from \"./validators.js\";\n\n/**\n * Make sure to change the id when a custom naming strategy is implemented, since caches are based on it.\n */\nexport class NamingStrategy {\n constructor(public id: string = \"default\") {}\n\n getPropertyName(\n type: TypeProperty | TypePropertySignature,\n forSerializer: string\n ): string | undefined {\n for (const mapName of mapNameAnnotation.getAnnotations(type.type)) {\n if (!mapName.serializer || mapName.serializer === forSerializer)\n return mapName.name;\n }\n\n return memberNameToString(type.name);\n }\n}\n\nexport const underscoreNamingStrategy = new (class extends NamingStrategy {\n constructor() {\n super(\"underscore\");\n }\n\n getPropertyName(\n type: TypeProperty | TypePropertySignature,\n forSerializer: string\n ): string | undefined {\n const name = super.getPropertyName(type, forSerializer);\n if (!name) return name;\n return name.replace(/([A-Z])/g, \"_$1\").toLowerCase();\n }\n})();\n\n/**\n * Options that can be passed to the serialization/deserialization functions\n * and change the behavior in runtime (not embedded in JIT).\n */\nexport interface SerializationOptions {\n /**\n * Which groups to include. If a property is not assigned to\n * a given group, it will be excluded.\n * Use an empty array to include only non-grouped properties.\n */\n groups?: string[];\n\n /**\n * Which groups to exclude. If a property is assigned to at least\n * one given group, it will be excluded. Basically the opposite of\n * `groups`, but you can combine both.\n * Use an empty array to exclude only non-grouped properties.\n */\n groupsExclude?: string[];\n\n /**\n * Allows more loosely data for certain types. e.g.\n *\n * - '1', '0', 'true', 'false' will be converted to true|false for boolean type.\n * - '1' will be converted to number for number type.\n * - 1 will be converted to string for string type.\n *\n * This will activate all registered type guards with negative specifically.\n *\n * This is enabled by default.\n */\n loosely?: boolean;\n}\n\nfunction isGroupAllowed(\n options: SerializationOptions,\n groupNames: string[]\n): boolean {\n if (!options.groups && !options.groupsExclude) return true;\n\n if (options.groupsExclude) {\n if (options.groupsExclude.length === 0 && groupNames.length === 0) {\n return false;\n }\n for (const group of options.groupsExclude) {\n if (groupNames.includes(group)) {\n return false;\n }\n }\n }\n\n if (options.groups) {\n if (options.groups.length === 0 && groupNames.length === 0) {\n return true;\n }\n for (const group of options.groups) {\n if (groupNames.includes(group)) {\n return true;\n }\n }\n return false;\n }\n\n return true;\n}\n\nexport type SerializeFunction<T = any, R = any> = (\n data: T,\n state?: SerializationOptions\n) => R;\n\nexport function getPartialType(type: TypeClass | TypeObjectLiteral) {\n const jitContainer = getTypeJitContainer(type);\n if (jitContainer.partialType) return jitContainer.partialType;\n type = copyAndSetParent(type);\n // we have to copy members manually, since we want to modify them\n type.types = type.types.map(v => ({ ...v })) as any;\n for (const member of type.types) {\n if (\n member.kind === ReflectionKind.propertySignature ||\n member.kind === ReflectionKind.property\n ) {\n member.optional = true;\n }\n }\n return (jitContainer.partialType = getTypeObjectLiteralFromTypeClass(type));\n}\n\n/**\n * Creates a (cached) Partial<T> of the given type and returns a (cached) serializer function for the given registry (serialize or deserialize).\n */\nexport function getPartialSerializeFunction(\n type: TypeClass | TypeObjectLiteral,\n registry: TemplateRegistry,\n namingStrategy: NamingStrategy = new NamingStrategy()\n) {\n return getSerializeFunction(getPartialType(type), registry, namingStrategy);\n}\n\n/**\n * Returns a (cached) serializer function for the given registry (serialize or deserialize).\n */\nexport function getSerializeFunction(\n type: Type,\n registry: TemplateRegistry,\n namingStrategy: NamingStrategy = new NamingStrategy(),\n path: string = \"\",\n jitStack = new JitStack()\n): SerializeFunction {\n const jit = getTypeJitContainer(type);\n const id = registry.id + \"_\" + namingStrategy.id + \"_\" + path;\n if (jit[id]) return jit[id];\n\n jit[id] = createSerializeFunction(\n type,\n registry,\n namingStrategy,\n path,\n jitStack\n );\n toFastProperties(jit);\n\n return jit[id];\n}\n\nexport function createSerializeFunction(\n type: Type,\n registry: TemplateRegistry,\n namingStrategy: NamingStrategy = new NamingStrategy(),\n path: string | RuntimeCode | (string | RuntimeCode)[] = \"\",\n jitStack = new JitStack()\n): SerializeFunction {\n const compiler = new CompilerContext();\n\n const state = new TemplateState(\n \"result\",\n \"data\",\n compiler,\n registry,\n namingStrategy,\n jitStack,\n isArray(path) ? path : path ? [path] : []\n );\n if (state.registry === state.registry.serializer.deserializeRegistry) {\n state.target = \"deserialize\";\n }\n\n //set unpopulatedCheck to ReturnSymbol to jump over those properties\n compiler.context.set(\"typeSettings\", typeSettings);\n compiler.context.set(\"UnpopulatedCheck\", UnpopulatedCheck);\n compiler.context.set(\n \"UnpopulatedCheckReturnSymbol\",\n UnpopulatedCheck.ReturnSymbol\n );\n compiler.context.set(\"SerializationError\", SerializationError);\n compiler.context.set(\"ValidationErrorItem\", ValidationErrorItem);\n\n const code = `\n var result;\n state = state ? state : {};\n var oldUnpopulatedCheck = typeSettings.unpopulatedCheck;\n typeSettings.unpopulatedCheck = UnpopulatedCheckReturnSymbol;\n ${executeTemplates(state, type)}\n typeSettings.unpopulatedCheck = oldUnpopulatedCheck;\n return result;\n `;\n\n return compiler.build(code, \"data\", \"state\");\n}\n\nexport type Guard<T> = (\n data: any,\n state?: { errors?: ValidationErrorItem[] }\n) => data is T;\n\nexport function createTypeGuardFunction(\n type: Type,\n stateIn?: Partial<TemplateState>,\n serializerToUse?: Serializer,\n withLoose = true\n): undefined | Guard<any> {\n const compiler = new CompilerContext();\n\n let state: TemplateState;\n if (stateIn instanceof TemplateState) {\n state = stateIn.fork(\"result\");\n state.compilerContext = compiler;\n } else {\n state = new TemplateState(\n \"result\",\n \"data\",\n compiler,\n (serializerToUse || serializer).typeGuards.getRegistry(1)\n );\n if (stateIn) Object.assign(state, stateIn);\n }\n state.path = [new RuntimeCode(\"_path\")];\n state.setterDisabled = false;\n\n const templates = state.registry.get(type);\n if (!templates.length) return undefined;\n\n executeTemplates(state, type, withLoose);\n\n compiler.context.set(\"typeSettings\", typeSettings);\n //set unpopulatedCheck to ReturnSymbol to jump over those properties\n compiler.context.set(\n \"UnpopulatedCheckReturnSymbol\",\n UnpopulatedCheck.ReturnSymbol\n );\n\n const code = `\n var result;\n if (_path === undefined) _path = '';\n state = state ? state : {};\n var oldUnpopulatedCheck = typeSettings.unpopulatedCheck;\n typeSettings.unpopulatedCheck = UnpopulatedCheckReturnSymbol;\n ${state.template}\n typeSettings.unpopulatedCheck = oldUnpopulatedCheck;\n return result === true;\n `;\n return compiler.build(code, \"data\", \"state\", \"_path\", \"property\");\n}\n\nexport class SerializationError extends CustomError {\n constructor(\n public originalMessage: string,\n public code: string = \"\",\n public path: string = \"\"\n ) {\n super(\n `Serialization failed. ${!path ? \"\" : (path && path.startsWith(\".\") ? path.slice(1) : path) + \": \"}` +\n originalMessage\n );\n }\n}\n\nexport class RuntimeCode {\n constructor(public code: string) {}\n}\n\nexport function collapsePath(\n path: (string | RuntimeCode)[],\n prefix?: string\n): string {\n return (\n path\n .filter(v => !!v)\n .map(v => (v instanceof RuntimeCode ? v.code : JSON.stringify(v)))\n .join(`+'.'+`) || `''`\n );\n}\n\nexport function getPropertyNameString(propertyName?: string | RuntimeCode) {\n return propertyName ? collapsePath([propertyName]) : \"\";\n}\n\n/**\n * internal: The jit stack cache is used in both serializer and guards, so its cache key needs to be aware of it\n */\nexport class JitStack {\n protected stacks: {\n registry?: TemplateRegistry;\n map: Map<Type, { fn: Function | undefined; id: number }>;\n }[] = [];\n protected id: number = 0;\n\n getStack(registry?: TemplateRegistry) {\n for (const stack of this.stacks) {\n if (stack.registry === registry) return stack.map;\n }\n const map = new Map<Type, { fn: Function | undefined; id: number }>();\n this.stacks.push({ registry, map });\n return map;\n }\n\n has(registry: TemplateRegistry, type: Type): boolean {\n return this.getStack(registry).has(type);\n }\n\n get(registry: TemplateRegistry, type: Type) {\n return this.getStack(registry).get(type);\n }\n\n prepare(\n registry: TemplateRegistry,\n type: Type\n ): { id: number; prepare: (fn: Function) => { fn: Function | undefined } } {\n if (this.getStack(registry).has(type)) {\n throw new Error(\"Circular jit building detected: \" + stringifyType(type));\n }\n\n const entry: { fn: Function | undefined; id: number } = {\n fn: undefined,\n id: this.id++\n };\n this.getStack(registry).set(type, entry);\n return {\n id: entry.id,\n prepare: (fn: Function) => {\n entry.fn = fn;\n return entry;\n }\n };\n }\n\n getOrCreate(\n registry: TemplateRegistry | undefined,\n type: Type,\n create: () => Function\n ): { fn: Function | undefined; id: number } {\n const stack = this.getStack(registry);\n const existing = stack.get(type);\n if (existing) return existing;\n\n const entry: { fn: Function | undefined; id: number } = {\n fn: undefined,\n id: this.id++\n };\n stack.set(type, entry);\n entry.fn = create();\n return entry;\n }\n}\n\nexport class ContainerAccessor {\n constructor(\n public container: string | ContainerAccessor,\n public property: string\n ) {}\n\n toString() {\n return `${this.container}[${this.property}]`;\n }\n}\n\nexport class TemplateState {\n /**\n * Before and after template content is rendered before/after all other templates.\n * When a template is put into its own function, before/after templates are run outside of this function.\n */\n public template = \"\";\n\n public ended = false;\n public setter: string | ContainerAccessor = \"\";\n public accessor: string | ContainerAccessor = \"\";\n\n /**\n * Strict means only use type guards of specificality of 1 (used for is()/validation()).\n * For deserialization loose is used.\n */\n public validation?: \"strict\" | \"loose\";\n\n /**\n * When this is set all specificalities are used (used in union type guards to detect which member to pick).\n */\n public allSpecificalities?: TypeGuardRegistry;\n\n public propertyName?: string | RuntimeCode;\n public setterDisabled: boolean = false;\n\n public parentTypes: Type[] = [];\n\n public target: \"serialize\" | \"deserialize\" = \"serialize\";\n\n protected handledAnnotations: AnnotationDefinition[] = [];\n\n constructor(\n public originalSetter: string | ContainerAccessor,\n public originalAccessor: string | ContainerAccessor,\n public compilerContext: CompilerContext,\n public registry: TemplateRegistry,\n public namingStrategy: NamingStrategy = new NamingStrategy(),\n public jitStack: JitStack = new JitStack(),\n public path: (string | RuntimeCode)[] = []\n ) {\n this.setter = originalSetter;\n this.accessor = originalAccessor;\n }\n\n isValidation(): boolean {\n return !!this.validation;\n }\n\n withValidation(validation: this[\"validation\"]): this {\n this.validation = validation;\n return this;\n }\n\n includeAllSpecificalities(guardRegistry: TypeGuardRegistry): this {\n this.allSpecificalities = guardRegistry;\n return this;\n }\n\n replaceTemplate(template: string) {\n this.template = template;\n }\n\n /**\n * Forks as state, with an empty propertyName.\n */\n fork(\n setter?: string | ContainerAccessor,\n accessor?: string | ContainerAccessor,\n path?: (string | RuntimeCode)[]\n ): TemplateState {\n const state = new TemplateState(\n setter ?? this.setter,\n accessor ?? this.accessor,\n this.compilerContext,\n this.registry,\n this.namingStrategy,\n this.jitStack,\n path || this.path.slice(0)\n );\n state.validation = this.validation;\n state.setterDisabled = this.setterDisabled;\n state.target = this.target;\n state.parentTypes = this.parentTypes;\n state.allSpecificalities = this.allSpecificalities;\n state.handledAnnotations = this.handledAnnotations.slice();\n return state;\n }\n\n fullFork() {\n return this.fork().forPropertyName(this.propertyName);\n }\n\n forRegistry(registry: TemplateRegistry) {\n this.registry = registry;\n return this;\n }\n\n forPropertyName(name?: string | number | symbol | RuntimeCode): this {\n if (name === undefined) return this;\n this.propertyName = name instanceof RuntimeCode ? name : String(name);\n return this;\n }\n\n disableSetter(): this {\n this.setterDisabled = true;\n return this;\n }\n\n enableSetter(): this {\n this.setterDisabled = true;\n return this;\n }\n\n /**\n * Can be used to track which annotation was already handled. Necessary to use with `isAnnotationHandled` to avoid infinite recursive loops\n * when a serializer template issues sub calls depending on annotation data.\n */\n annotationHandled(annotation: AnnotationDefinition<any>): void {\n this.handledAnnotations.push(annotation);\n }\n\n isAnnotationHandled(annotation: AnnotationDefinition<any>): boolean {\n return this.handledAnnotations.includes(annotation);\n }\n\n get isSerialization(): boolean {\n return this.target === \"serialize\";\n }\n\n get isDeserialization(): boolean {\n return this.target === \"deserialize\";\n }\n\n extendPath(path: string | RuntimeCode | number | symbol): this {\n this.path.push(path instanceof RuntimeCode ? path : String(path));\n return this;\n }\n\n assignValidationError(code: string, message: string) {\n this.setContext({ ValidationErrorItem: ValidationErrorItem });\n return `if (state.errors) state.errors.push(new ValidationErrorItem(${collapsePath(this.path)}, ${JSON.stringify(code)}, ${JSON.stringify(message)}, ${this.originalAccessor}));`;\n }\n\n throwCode(\n type: Type | string,\n error?: string,\n accessor: string | ContainerAccessor = this.originalAccessor\n ) {\n this.setContext({ ValidationError, stringifyValueWithType });\n const to = JSON.stringify(\n (\"string\" === typeof type ? type : stringifyType(type))\n .replace(/\\n/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim()\n );\n return `throw ValidationError.from([{code: 'type', path: ${collapsePath(this.path)}, message: 'Cannot convert ' + ${accessor} + ' to ' + ${to} ${error ? ` + '. ' + ${error}` : \"\"} }])`;\n }\n\n /**\n * Adds template code for setting the `this.setter` variable. The expression evaluated in `code` is assigned to `this.setter`.\n * `this.accessor` will point now to `this.setter`.\n */\n addSetter(code: string | { toString(): string }) {\n this.template += `\\n${this.setter} = ${code};`;\n this.accessor = String(this.setter);\n }\n\n addSetterAndReportErrorIfInvalid(\n errorCode: string,\n message: string,\n code: string\n ) {\n this.addSetter(code);\n if (this.isValidation()) {\n this.addCodeForSetter(\n `if (!${this.setter}) ${this.assignValidationError(errorCode, message)}`\n );\n }\n }\n\n /**\n * Adds a converter function that is executed on the current `this.accessor` value.\n *\n * @example\n * ```typescript\n * serializer.deserializeRegistry.registerClass(Date, (type, state) => {\n * // make sure to check `v` as it is any!\n * state.convert((v: any) => {\n * if ('number' !== typeof v) throw new SerializationError('Expected number');\n * return new Date(v);\n * });\n * });\n *\n * serializer.serializeRegistry.registerClass(Date, (type, state) => {\n * // in serialization `v` is always the specific type\n * state.convert((v: Date) => v.getTime());\n * });\n * ```\n */\n convert(callback: (value: any) => any) {\n const converter = this.setVariable(\"convert\", callback);\n this.addCodeForSetter(`\n try {\n ${this.setter} = ${converter}(${this.accessor});\n } catch (error) {\n if (error instanceof SerializationError) {\n error.path = ${collapsePath(this.path)} + (error.path ? '.' + error.path : '');\n }\n ${this.throwCode(\"any\", \"error.message\", this.accessor)};\n }\n `);\n }\n\n /**\n * Allows to add a custom code that is executed on the current `this.accessor` value.\n *\n * @example\n * ```typescript\n * serializer.deserializeRegistry.addDecorator(\n * isCustomTypeClass,\n * (type, state) => {\n * state.touch((value) => {\n * if ('onLoad' in value) value.onLoad();\n * });\n * }\n * );\n * ```\n */\n touch(callback: (value: any) => void) {\n const touch = this.setVariable(\"touch\", callback);\n this.addCode(`${touch}(${this.setter});`);\n }\n\n /**\n * Stop executing next templates.\n */\n stop() {\n this.ended = true;\n }\n\n setVariable(name: string, value?: any): string {\n return this.compilerContext.reserveVariable(name, value);\n }\n\n setContext(values: { [name: string]: any }) {\n this.compilerContext.set(values);\n }\n\n addCode(code: string) {\n this.template += \"\\n\" + code;\n }\n\n /**\n * Adds template code for setting the `this.setter` variable manually, so use `${state.setter} = value`.\n * `this.accessor` will point now to `this.setter`.\n */\n addCodeForSetter(code: string) {\n this.template += \"\\n\" + code;\n this.accessor = String(this.setter);\n }\n\n hasSetterCode(): boolean {\n return !!this.template;\n }\n}\n\nexport type Template<T extends Type> = (type: T, state: TemplateState) => void;\n\nexport type TemplateHook = (type: Type, state: TemplateState) => void;\n\n/**\n * Just sets the state.setter to state.accessor without any modification.\n */\nexport function noopTemplate(type: Type, state: TemplateState): void {\n state.addSetter(state.accessor);\n}\n\ninterface TemplateDecorator {\n predicate: (type: Type) => boolean;\n template: Template<any>;\n}\n\nexport class TemplateRegistry {\n protected static ids: number = 0;\n id: number = TemplateRegistry.ids++;\n\n protected templates: { [kind in ReflectionKind]?: Template<any>[] } = {};\n protected decorator: TemplateDecorator[] = [];\n\n public preHooks: TemplateHook[] = [];\n public postHooks: TemplateHook[] = [];\n\n public classTemplates = new Map<ClassType, Template<any>[]>();\n\n constructor(public serializer: Serializer = new EmptySerializer()) {}\n\n clear() {\n this.templates = {};\n this.classTemplates.clear();\n this.preHooks = [];\n this.postHooks = [];\n }\n\n get(type: Type): Template<Type>[] {\n if (type.kind === ReflectionKind.class) {\n const classTemplates = this.classTemplates.get(type.classType);\n if (classTemplates && classTemplates.length) return classTemplates;\n if (\n type.classType === Set ||\n type.classType === Map ||\n binaryTypes.includes(type.classType)\n )\n return [];\n }\n return (this.templates[type.kind] ||= []);\n }\n\n getDecorator(type: Type): Template<Type>[] {\n return this.decorator.filter(v => v.predicate(type)).map(v => v.template);\n }\n\n /**\n * Registers a template for all binary classes: ArrayBuffer, Uint8Array, Int8Array, etc.\n */\n registerBinary(template: Template<TypeClass>) {\n for (const classType of binaryTypes)\n this.registerClass(classType, template);\n }\n\n /**\n * Registers a template for a given class type.\n *\n * As soon as a single template has registered for the given classType the template registry\n * only returns templates for this particular classType and omits all general purpose ReflectionKind.class templates for this particular classType.\n */\n registerClass(classType: ClassType, template: Template<TypeClass>) {\n this.classTemplates.set(classType, [template]);\n }\n\n prependClass(classType: ClassType, template: Template<TypeClass>) {\n this.getClassTemplates(classType).unshift(template);\n }\n\n appendClass(classType: ClassType, template: Template<TypeClass>) {\n this.getClassTemplates(classType).push(template);\n }\n\n protected getClassTemplates(classType: ClassType): Template<TypeClass>[] {\n let templates = this.classTemplates.get(classType);\n if (!templates) {\n templates = [];\n this.classTemplates.set(classType, templates);\n }\n return templates;\n }\n\n addPreHook(callback: TemplateHook) {\n this.preHooks.push(callback);\n }\n\n addPostHook(callback: TemplateHook) {\n this.postHooks.push(callback);\n }\n\n /**\n * Removes all registered templates.\n */\n unregister(kind: ReflectionKind) {\n this.templates[kind] = undefined;\n }\n\n /**\n * Registers a new template and replaces all existing (added via register,prepend,append).\n */\n register<T extends ReflectionKind>(\n kind: T,\n template: Template<FindType<Type, T>>\n ) {\n this.templates[kind] = [template];\n }\n\n /**\n * Registers additional templates that handle type decorators/annotations. The templates can safely assume that the given type in `state.accessor`\n * is already type-checked to be `T`.\n *\n * Decorator templates run last (after normal templates and postHook).\n *\n * This split between register and registerForDecorator is made to have a distinction between native type templates and additional user-made templates.\n * This allows to fetch only decorator templates and decide upon the result whether additional code is necessary or not. (this would not be possible\n * if everything is added to the `register` call that does always the basic checks).\n */\n addDecorator(predicate: (type: Type) => boolean, template: Template<Type>) {\n this.decorator.push({ predicate, template });\n }\n\n /**\n * Removes all registered decorators for a certain type.\n */\n removeDecorator(type: Type) {\n this.decorator = this.decorator.filter(v => !v.predicate(type));\n }\n\n prepend<T extends ReflectionKind>(\n kind: T,\n template: Template<FindType<Type, T>>\n ) {\n this.templates[kind] ||= [];\n this.templates[kind]!.unshift(template);\n }\n\n append<T extends ReflectionKind>(\n kind: T,\n template: Template<FindType<Type, T>>\n ) {\n this.templates[kind] ||= [];\n this.templates[kind]!.push(template);\n }\n}\n\n/**\n * To avoid circular builds, class/object literal code is extract to its own function.\n * if this returns true, code is put into state to call an already existing function.\n */\nexport function callExtractedFunctionIfAvailable(\n state: TemplateState,\n type: Type\n): boolean {\n const jit = state.jitStack.get(state.registry, type);\n if (!jit) return false;\n const withSetter = !state.setterDisabled && state.setter;\n state.addCode(`\n //call jit=${jit.id} for setter=\"${state.setter}\" via propertyName ${state.propertyName ? collapsePath([state.propertyName]) : \"\"}\n ${withSetter ? `${state.setter} = ` : \"\"}${state.setVariable(\"jit\", jit)}.fn(${state.accessor || \"undefined\"}, state, ${collapsePath(state.path)});\n `);\n if (withSetter) state.accessor = state.setter;\n return true;\n}\n\nexport function extractStateToFunctionAndCallIt(\n state: TemplateState,\n type: Type\n) {\n const prepare = state.jitStack.prepare(state.registry, type);\n callExtractedFunctionIfAvailable(state, type);\n return {\n setFunction: prepare.prepare,\n id: prepare.id,\n state: state\n .fork(\"result\", \"data\", [new RuntimeCode(\"_path\")])\n .forPropertyName(state.propertyName)\n };\n}\n\nexport function buildFunction(state: TemplateState, type: Type): Function {\n let circularCheckBeginning = \"\";\n let circularCheckEnd = \"\";\n if (hasCircularReference(type)) {\n circularCheckBeginning = `\n if (data) {\n if (state._stack) {\n if (state._stack.includes(data)) return undefined;\n } else {\n state._stack = [];\n }\n state._stack.push(data);\n }\n `;\n circularCheckEnd = `if (state._stack) state._stack.pop();`;\n }\n const code = `\n var result;\n if (_path === undefined) _path = '';\n ${circularCheckBeginning}\n state = state ? state : {};\n ${state.template}\n\n ${circularCheckEnd}\n\n return result;\n `;\n return state.compilerContext.build(code, \"data\", \"state\", \"_path\");\n}\n\nexport function executeTemplates(\n state: TemplateState,\n type: Type,\n withLoose: boolean = true,\n withCache: boolean = true\n): string {\n state.parentTypes.push(type);\n\n let originalState = state;\n\n if (withLoose && state.validation === \"loose\" && state.allSpecificalities) {\n // check if the particular type has multiple specificalities\n // if so, we need to generate a type guard that checks all specificalities.\n // e.g. string supports `'string' === typeof' but as last resort also anything else.\n // or Date supports `instanceof Date` but also `'string' === typeof` as last resort.\n // This is not part of a union check. We have to do it for each type.\n const typeGuards = state.allSpecificalities.getSortedTemplateRegistries();\n const lines: string[] = [];\n for (const [specificality, typeGuard] of typeGuards) {\n const next = state.fork(undefined, \"data\").forRegistry(typeGuard);\n const fn = createTypeGuardFunction(type, next, undefined, false);\n if (!fn) continue;\n const guard = state.setVariable(\"guard_\" + ReflectionKind[type.kind], fn);\n const looseCheck =\n specificality <= 0 ? `state.loosely !== false && ` : \"\";\n\n lines.push(`else if (${looseCheck}${guard}(${state.accessor})) {\n //type = ${ReflectionKind[type.kind]}, specificality=${specificality}\n ${state.setter} = true;\n }`);\n }\n\n state.template = `\n //type guard with multiple specificalities\n if (false) {} ${lines.join(\" \")}\n else {\n ${state.setter} = false;\n }\n `;\n } else {\n let setFunction: undefined | ((fn: Function) => void);\n if (\n withCache &&\n (type.kind === ReflectionKind.objectLiteral ||\n type.kind === ReflectionKind.array ||\n type.kind === ReflectionKind.tuple ||\n (type.kind === ReflectionKind.class &&\n (type.classType === Set || type.classType === Map)) ||\n isCustomTypeClass(type)) &&\n !embeddedAnnotation.getFirst(type)\n ) {\n //wrap circular check if necessary\n if (callExtractedFunctionIfAvailable(state, type)) {\n state.parentTypes.pop();\n return state.template;\n } else {\n const extract = extractStateToFunctionAndCallIt(state, type);\n state.replaceTemplate(`\n // extracted jit=${extract.id} function via state.propertyName=\"${getPropertyNameString(state.propertyName)}\"\n if (!state._stack || !state._stack.includes(${state.accessor})) {\n ${state.template}\n }\n `);\n state = extract.state;\n setFunction = extract.setFunction;\n }\n }\n\n const templates = state.registry.get(type);\n for (const hook of state.registry.preHooks) hook(type, state);\n for (const template of templates) {\n template(type, state);\n if (state.ended) break;\n }\n for (const hook of state.registry.postHooks) hook(type, state);\n for (const template of state.registry.getDecorator(type))\n template(type, state);\n\n if (setFunction) {\n setFunction(buildFunction(state, type));\n }\n }\n\n state.parentTypes.pop();\n\n return originalState.template;\n}\n\nexport function createConverterJSForMember(\n property:\n | ReflectionProperty\n | TypeProperty\n | TypePropertySignature\n | TypeIndexSignature,\n state: TemplateState,\n undefinedSetterCode: string = \"\",\n nullSetterCode: string = \"\"\n): string {\n const { registry, compilerContext, namingStrategy } = state;\n const type =\n property instanceof ReflectionProperty ? property.type : property.type;\n const p =\n property instanceof ReflectionProperty ? property.property : property;\n\n state.parentTypes.push(p);\n\n undefinedSetterCode =\n undefinedSetterCode ||\n executeTemplates(state.fork(), { kind: ReflectionKind.undefined });\n nullSetterCode =\n nullSetterCode ||\n executeTemplates(state.fork(), { kind: ReflectionKind.null });\n\n let convert = executeTemplates(state.fork(), type);\n state.parentTypes.pop();\n\n let postTransform = \"\";\n\n const isSerialization = registry.serializer.serializeRegistry === registry;\n const isDeserialization =\n registry.serializer.deserializeRegistry === registry;\n\n if (property instanceof ReflectionProperty) {\n if (isSerialization) {\n if (property.serializer) {\n const fnVar = compilerContext.reserveVariable(\n \"transformer\",\n property.serializer\n );\n postTransform = `${state.setter} = ${fnVar}(${state.setter}, ${compilerContext.reserveConst(property)})`;\n }\n }\n\n if (isDeserialization) {\n if (property.deserializer) {\n const fnVar = compilerContext.reserveVariable(\n \"transformer\",\n property.deserializer\n );\n postTransform = `${state.setter} = ${fnVar}(${state.setter}, ${compilerContext.reserveConst(property)})`;\n }\n }\n }\n\n const setExplicitUndefined =\n registry.serializer.setExplicitUndefined(type, state) &&\n isOptional(\n property instanceof ReflectionProperty ? property.property : property\n );\n const nullable = isNullable(type);\n\n // // since JSON does not support undefined, we emulate it via using null for serialization, and convert that back to undefined when deserialization happens.\n // // note: When the value is not defined (property.name in object === false), then this code will never run.\n // let defaultValue = isSerialization ? 'null' : 'undefined';\n\n // // if (property.hasDefault()) {\n // // defaultValue = `${compilerContext.reserveVariable('defaultValueGetter', property.getDefaultValueFunction())}()`;\n // // } else\n // if (!optional && nullable) {\n // defaultValue = 'null';\n // }\n\n //todo: clean that up. Way too much code for that simple functionality\n\n state.setContext({ unpopulatedSymbol });\n //note: this code is only reached when ${accessor} was actually defined checked by the 'in' operator.\n return `\n if (${state.accessor} === undefined) {\n if (${setExplicitUndefined}) {\n ${undefinedSetterCode}\n }\n } else if (${state.accessor} === null) {\n // null acts on transport layer as telling an explicitly set undefined\n // this is to support actual undefined as value across a transport layer. Otherwise it\n // would be impossible to set a already set value to undefined back or override default value (since JSON.stringify() omits that information)\n if (${nullable}) {\n ${nullSetterCode}\n } else {\n if (${setExplicitUndefined}) {\n ${undefinedSetterCode}\n }\n }\n } else if (${state.accessor} !== unpopulatedSymbol) {\n ${convert}\n ${postTransform}\n }\n `;\n}\n\nexport function inAccessor(accessor: ContainerAccessor | string): string {\n if (\"string\" === typeof accessor) return `${accessor} !== undefined`;\n return `'object' === typeof ${accessor.container} && ${accessor.property} in ${accessor.container}`;\n}\n\nexport function deserializeEmbedded(\n type: TypeClass | TypeObjectLiteral,\n state: TemplateState,\n container?: string\n): string {\n const embedded = embeddedAnnotation.getFirst(type);\n if (!embedded) return \"\";\n\n const properties = resolveTypeMembers(type).filter(isPropertyMemberType);\n const args: (ContainerAccessor | string)[] = [];\n const assign: (ContainerAccessor | string)[] = [];\n const loadArgs: string[] = [];\n const setToUndefined = state.compilerContext.reserveName(\"setToUndefined\");\n const params = state.compilerContext.reserveName(\"params\");\n const requiredSet: string[] = [\"true\"];\n\n function loadProperty(\n setter: ContainerAccessor,\n property: TypeProperty | TypePropertySignature\n ) {\n if (!isOptional(property) && !hasDefaultValue(property)) {\n if (isNullable(property)) {\n requiredSet.push(`${setter} !== undefined`);\n } else {\n requiredSet.push(`${setter} !== undefined && ${setter} !== null`);\n }\n }\n\n const accessor = getEmbeddedAccessor(\n type,\n properties.length !== 1,\n state.accessor,\n state.registry.serializer,\n state.namingStrategy,\n property,\n embedded!,\n container\n );\n const propertyState = state\n .fork(setter, accessor)\n .extendPath(String(property.name));\n if (hasEmbedded(property.type)) {\n loadArgs.push(executeTemplates(propertyState, property.type));\n } else {\n if (accessor instanceof ContainerAccessor) {\n const check = !containerProperty\n ? \"true\"\n : isNullable(containerProperty)\n ? `${accessor} === undefined`\n : `(${accessor} === undefined || ${accessor} === null)`;\n const setUndefined = containerProperty\n ? `if (${check}) { ${setToUndefined}++; }`\n : \"if (false) {} \";\n loadArgs.push(`\n if (${inAccessor(accessor)}) {\n ${setUndefined} else {\n ${executeTemplates(propertyState, property.type)}\n }\n }`);\n } else {\n loadArgs.push(executeTemplates(propertyState, property.type));\n }\n }\n }\n\n const containerProperty = getEmbeddedProperty(type);\n const constructorAssigned: string[] = [];\n for (const property of getConstructorProperties(type).parameters) {\n if (\n (property.kind == ReflectionKind.property ||\n property.kind === ReflectionKind.propertySignature) &&\n !excludedAnnotation.isExcluded(\n property.type,\n state.registry.serializer.name\n )\n ) {\n constructorAssigned.push(memberNameToString(property.name));\n const setter = new ContainerAccessor(\n params,\n JSON.stringify(property.name)\n );\n loadProperty(setter, property);\n args.push(setter);\n } else {\n args.push(\"undefined\");\n }\n }\n\n for (const property of properties) {\n if (\n (property.kind == ReflectionKind.property ||\n property.kind === ReflectionKind.propertySignature) &&\n !excludedAnnotation.isExcluded(\n property.type,\n state.registry.serializer.name\n )\n ) {\n if (constructorAssigned.includes(memberNameToString(property.name)))\n continue;\n const setter = new ContainerAccessor(\n params,\n JSON.stringify(property.name)\n );\n loadProperty(setter, property);\n assign.push(\n `${new ContainerAccessor(state.setter, JSON.stringify(property.name))} = ` +\n setter\n );\n }\n }\n\n const createObject =\n type.kind === ReflectionKind.objectLiteral\n ? `{}`\n : `new ${state.compilerContext.reserveConst(type.classType)}(${args.join(\",\")})`;\n\n return `\n const ${params} = {};\n let ${setToUndefined} = 0;\n ${loadArgs.join(\"\\n\")}\n if (${requiredSet.join(\" && \")}) {\n ${state.setter} = ${createObject};\n ${assign.join(\";\\n\")}\n } else if (${setToUndefined} === ${properties.length}) {\n ${state.setter} = undefined;\n }\n `;\n}\n\nexport function getIndexCheck(\n context: CompilerContext,\n i: string,\n type: Type\n): string {\n if (type.kind === ReflectionKind.number) {\n context.set({ isNumeric: isNumeric });\n return `isNumeric(${i})`;\n } else if (\n type.kind === ReflectionKind.string ||\n type.kind === ReflectionKind.any\n ) {\n return `'string' === typeof ${i}`;\n } else if (type.kind === ReflectionKind.symbol) {\n return `'symbol' === typeof ${i}`;\n } else if (type.kind === ReflectionKind.templateLiteral) {\n context.set({ extendTemplateLiteral: extendTemplateLiteral });\n const typeVar = context.reserveVariable(\"type\", type);\n return `'string' === typeof ${i} && extendTemplateLiteral({kind: ${ReflectionKind.literal}, literal: ${i}}, ${typeVar})`;\n } else if (type.kind === ReflectionKind.union) {\n return (\n \"(\" + type.types.map(v => getIndexCheck(context, i, v)).join(\" || \") + \")\"\n );\n }\n return \"\";\n}\n\nfunction isLiteralType(t: TypeIndexSignature): boolean {\n return (\n t.index.kind === ReflectionKind.literal ||\n (t.index.kind === ReflectionKind.union &&\n t.index.types.some(v => v.kind === ReflectionKind.literal))\n );\n}\n\nfunction isNumberType(t: TypeIndexSignature): boolean {\n return (\n t.index.kind === ReflectionKind.number ||\n (t.index.kind === ReflectionKind.union &&\n t.index.types.some(v => v.kind === ReflectionKind.number))\n );\n}\n\n/**\n * Sort, so the order is literal, number, string, symbol. literal comes first as its the most specific type.\n * We need to do that for numbers since all keys are string|symbol in runtime, and we need to check if a string is numeric first before falling back to string.\n */\nexport function sortSignatures(signatures: TypeIndexSignature[]) {\n signatures.sort((a, b) => {\n if (isLiteralType(a)) {\n return -1;\n }\n\n if (isNumberType(a) && !isLiteralType(b)) {\n return -1;\n }\n\n return +1;\n });\n}\n\nexport function getStaticDefaultCodeForProperty(\n member: TypeProperty | TypePropertySignature,\n setter: string | ContainerAccessor,\n state: TemplateState\n) {\n let staticDefault = ``;\n if (!hasDefaultValue(member) && !isOptional(member)) {\n if (member.type.kind === ReflectionKind.literal) {\n staticDefault = `${setter} = ${state.compilerContext.reserveConst(member.type.literal)};`;\n } else if (isNullable(member.type)) {\n staticDefault = `${setter} = null;`;\n }\n }\n\n return staticDefault;\n}\n\nexport function getEmbeddedProperty(\n type: TypeClass | TypeObjectLiteral\n): TypeProperty | TypePropertySignature | undefined {\n if (!type.parent) return;\n let resolved: Type = type.parent;\n if (resolved.kind === ReflectionKind.union && resolved.parent)\n resolved = resolved.parent;\n if (\n resolved.kind === ReflectionKind.propertySignature ||\n resolved.kind === ReflectionKind.property\n )\n return resolved;\n return;\n}\n\nfunction getEmbeddedAccessor(\n type: TypeClass | TypeObjectLiteral,\n autoPrefix: boolean,\n accessor: string | ContainerAccessor,\n serializer: Serializer,\n namingStrategy: NamingStrategy,\n property: TypeProperty | TypePropertySignature,\n embedded: EmbeddedOptions,\n container?: string\n): string | ContainerAccessor {\n const containerProperty = getEmbeddedProperty(type);\n\n let embeddedPropertyName = JSON.stringify(\n namingStrategy.getPropertyName(property, serializer.name)\n );\n if (embedded.prefix !== undefined) {\n embeddedPropertyName = embedded.prefix\n ? JSON.stringify(embedded.prefix) + \" + \" + embeddedPropertyName\n : embeddedPropertyName;\n } else if (!container && containerProperty) {\n embeddedPropertyName =\n JSON.stringify(containerProperty.name) +\n ` + '_' + ` +\n embeddedPropertyName;\n }\n\n if (container) return new ContainerAccessor(container, embeddedPropertyName);\n\n if (autoPrefix || embedded.prefix !== undefined) {\n //if autoPrefix or a prefix is set the embeddedPropertyName is emitted in a container, either manually provided or from accessor.\n if (accessor instanceof ContainerAccessor)\n return new ContainerAccessor(accessor.container, embeddedPropertyName);\n if (autoPrefix)\n return new ContainerAccessor(accessor, embeddedPropertyName);\n if (containerProperty)\n return new ContainerAccessor(accessor, embeddedPropertyName);\n }\n\n return accessor;\n}\n\nfunction groupFilter(type: Type): string {\n const groupNames = groupAnnotation.getAnnotations(type);\n return `(state.groups || state.groupsExclude ? isGroupAllowed(state, ${JSON.stringify(groupNames)}) : true)`;\n}\n\nexport function serializeObjectLiteral(\n type: TypeObjectLiteral | TypeClass,\n state: TemplateState\n) {\n const embedded = embeddedAnnotation.getFirst(type);\n if (embedded) {\n if (state.isDeserialization) {\n const embedded = deserializeEmbedded(type, state);\n if (embedded) {\n state.addCode(embedded);\n return;\n }\n } else {\n const properties = resolveTypeMembers(type).filter(isPropertyMemberType);\n\n if (properties.length === 1) {\n const first = properties[0];\n let name = getNameExpression(\n state.namingStrategy.getPropertyName(\n first,\n state.registry.serializer.name\n ),\n state\n );\n const setter = getEmbeddedAccessor(\n type,\n false,\n state.setter,\n state.registry.serializer,\n state.namingStrategy,\n first,\n embedded\n );\n state.addCode(`\n if (${inAccessor(state.accessor)}) {\n ${executeTemplates(state.fork(setter, new ContainerAccessor(state.accessor, name)), first.type, false, false)}\n }`);\n } else {\n const lines: string[] = [];\n\n let pre = \"\";\n let post = \"\";\n let container = \"\";\n if (!(state.setter instanceof ContainerAccessor)) {\n //create own container\n container = state.compilerContext.reserveName(\"container\");\n pre = `let ${container} = {}`;\n post = `${state.setter} = ${container}`;\n }\n\n for (const property of properties) {\n const setter = getEmbeddedAccessor(\n type,\n true,\n state.setter,\n state.registry.serializer,\n state.namingStrategy,\n property,\n embedded,\n container\n );\n lines.push(\n createConverterJSForMember(\n property,\n state.fork(\n setter,\n new ContainerAccessor(\n state.accessor,\n JSON.stringify(property.name)\n )\n )\n )\n );\n }\n\n state.addCode(`\n if (${inAccessor(state.accessor)}) {\n ${pre}\n ${lines.join(\"\\n\")}\n ${post}\n }\n `);\n }\n }\n return;\n }\n\n state.setContext({ isGroupAllowed });\n\n const v = state.compilerContext.reserveName(\"v\");\n const lines: string[] = [];\n\n const signatures: TypeIndexSignature[] = [];\n const existing: string[] = [];\n\n const constructorArguments: string[] = [];\n const handledPropertiesInConstructor: string[] = [];\n const preLines: string[] = [];\n if (state.isDeserialization && type.kind === ReflectionKind.class) {\n const clazz = ReflectionClass.from(type.classType);\n const constructor = clazz.getConstructorOrUndefined();\n if (!clazz.disableConstructor && constructor) {\n handledPropertiesInConstructor.push(\n ...getDeepConstructorProperties(type).map(v => String(v.name))\n );\n const parameters = constructor.getParameters();\n for (const parameter of parameters) {\n if (!parameter.isProperty()) {\n constructorArguments.push(\"undefined\");\n continue;\n }\n\n const property = clazz.getProperty(parameter.getName());\n if (!property) continue;\n\n if (property.isSerializerExcluded(state.registry.serializer.name)) {\n continue;\n }\n const argumentName = state.compilerContext.reserveVariable(\n \"c_\" + parameter.getName()\n );\n\n const readName = getNameExpression(\n state.namingStrategy.getPropertyName(\n property.property,\n state.registry.serializer.name\n ),\n state\n );\n\n const propertyState = state\n .fork(argumentName, new ContainerAccessor(state.accessor, readName))\n .extendPath(String(property.getName()));\n const staticDefault =\n property.type.kind === ReflectionKind.literal &&\n !property.isOptional()\n ? `${argumentName} = ${state.compilerContext.reserveConst(property.type.literal)};`\n : \"\";\n\n const embedded = property.getEmbedded();\n if (embedded) {\n preLines.push(executeTemplates(propertyState, property.type));\n } else {\n preLines.push(`\n ${argumentName} = undefined;\n if (${inAccessor(propertyState.accessor as ContainerAccessor)} && ${groupFilter(parameter.type)}) {\n ${createConverterJSForMember(property, propertyState)}\n } else {\n ${staticDefault}\n }\n `);\n }\n\n constructorArguments.push(argumentName);\n }\n }\n }\n\n for (const member of resolveTypeMembers(type)) {\n if (member.kind === ReflectionKind.indexSignature) {\n if (\n excludedAnnotation.isExcluded(\n member.type,\n state.registry.serializer.name\n )\n )\n continue;\n signatures.push(member);\n } else if (\n member.kind === ReflectionKind.propertySignature ||\n member.kind === ReflectionKind.property\n ) {\n if (!isPropertyMemberType(member)) continue;\n if (\n excludedAnnotation.isExcluded(\n member.type,\n state.registry.serializer.name\n )\n )\n continue;\n if (\n handledPropertiesInConstructor.includes(memberNameToString(member.name))\n )\n continue;\n\n const name = state.namingStrategy.getPropertyName(\n member,\n state.registry.serializer.name\n );\n const readName = getNameExpression(\n state.isDeserialization ? name : memberNameToString(member.name),\n state\n );\n existing.push(readName);\n const writeName = getNameExpression(\n state.isDeserialization ? memberNameToString(member.name) : name,\n state\n );\n const setter = new ContainerAccessor(v, writeName);\n const propertyState = state\n .fork(setter, new ContainerAccessor(state.accessor, readName))\n .extendPath(String(member.name));\n\n const staticDefault = getStaticDefaultCodeForProperty(\n member,\n setter,\n state\n );\n if (hasEmbedded(member.type)) {\n lines.push(executeTemplates(propertyState, member.type));\n } else {\n lines.push(`\n if (${readName} in ${state.accessor} && ${groupFilter(member.type)}) {\n ${createConverterJSForMember(member, propertyState)}\n } else { ${staticDefault} }\n `);\n }\n }\n }\n\n if (signatures.length) {\n const i = state.compilerContext.reserveName(\"i\");\n const existingCheck =\n existing.map(v => `${i} === ${v}`).join(\" || \") || \"false\";\n const signatureLines: string[] = [];\n\n sortSignatures(signatures);\n\n for (const signature of signatures) {\n signatureLines.push(`else if (${getIndexCheck(state.compilerContext, i, signature.index)} && ${groupFilter(signature.type)}) {\n ${createConverterJSForMember(signature, state.fork(new ContainerAccessor(v, i), new ContainerAccessor(state.accessor, i)).extendPath(new RuntimeCode(i)))}\n }`);\n }\n\n state.setContext({ hasProperty });\n //the index signature type could be: string, number, symbol.\n //or a literal when it was constructed by a mapped type.\n lines.push(`\n for (const ${i} in ${state.accessor}) {\n if (!hasProperty(${state.accessor}, ${i})) continue;\n if (${existingCheck}) continue;\n if (false) {} ${signatureLines.join(\" \")}\n }\n `);\n }\n\n let createObject = \"{}\";\n const postLines: string[] = [];\n if (state.isDeserialization && type.kind === ReflectionKind.class) {\n const classType = state.compilerContext.reserveConst(type.classType);\n const clazz = ReflectionClass.from(type.classType);\n if (clazz.disableConstructor) {\n createObject = `Object.create(${classType}.prototype);`;\n for (const property of clazz.getProperties()) {\n if (\n property.property.kind !== ReflectionKind.property ||\n property.property.default === undefined\n ) {\n continue;\n }\n\n const defaultFn = state.compilerContext.reserveConst(\n property.property.default\n );\n\n createObject += `\\n${v}.${memberNameToString(property.name)} = ${defaultFn}.apply(${v});`;\n }\n } else {\n createObject = `new ${classType}(${constructorArguments.join(\", \")})`;\n preLines.push(\n `const oldCheck = typeSettings.unpopulatedCheck; typeSettings.unpopulatedCheck = UnpopulatedCheck.None;`\n );\n postLines.push(`typeSettings.unpopulatedCheck = oldCheck;`);\n }\n }\n\n state.addCode(`\n if ('object' !== typeof ${state.accessor}) ${state.throwCode(type)}\n ${preLines.join(\"\\n\")}\n let ${v} = ${createObject};\n ${postLines.join(\"\\n\")}\n ${lines.join(\"\\n\")}\n ${state.setter} = ${v};\n `);\n\n if (\n referenceAnnotation.hasAnnotations(type) &&\n !state.isAnnotationHandled(referenceAnnotation)\n ) {\n state.annotationHandled(referenceAnnotation);\n state.setContext({ isObject, isReferenceInstance, isReferenceHydrated });\n const reflection = ReflectionClass.from(type);\n //the primary key is serialised for unhydrated references\n\n //when in deserialization a referenced is passed as is\n const keepReference = state.isDeserialization\n ? `if (isReferenceInstance(${state.accessor})) {${state.setter} = ${state.accessor};} else `\n : \"\";\n\n state.replaceTemplate(`\n ${keepReference} if (isReferenceInstance(${state.accessor}) && !isReferenceHydrated(${state.accessor})) {\n ${executeTemplates(state.fork(state.setter, new ContainerAccessor(state.accessor, JSON.stringify(reflection.getPrimary().getName()))), reflection.getPrimary().getType())}\n } else {\n ${state.template}\n }\n `);\n }\n}\n\nexport function typeGuardEmbedded(\n type: TypeClass | TypeObjectLiteral,\n state: TemplateState,\n embedded: EmbeddedOptions\n) {\n const properties = resolveTypeMembers(type).filter(isPropertyMemberType);\n if (properties.length) {\n for (const property of properties) {\n if (\n (property.kind == ReflectionKind.property ||\n property.kind === ReflectionKind.propertySignature) &&\n !excludedAnnotation.isExcluded(\n property.type,\n state.registry.serializer.name\n )\n ) {\n //we pass 'data' as container, since type guards for TypeClass get their own function always and operate on `data` accessor.\n const accessor = getEmbeddedAccessor(\n type,\n properties.length !== 1,\n state.accessor,\n state.registry.serializer,\n state.namingStrategy,\n property,\n embedded\n );\n //note: withValidation('strict') fixes the test with current changes, but limits the use of Embedded (no new limitation added, but this made it obvious).\n const propertyState = state\n .fork(state.setter, accessor)\n .withValidation(\"strict\")\n .extendPath(String(property.name));\n if (hasEmbedded(property.type)) {\n state.addCode(executeTemplates(propertyState, property.type));\n } else {\n if (accessor instanceof ContainerAccessor) {\n state.addCode(\n `if (${inAccessor(accessor)}) {${createConverterJSForMember(property, propertyState)} }`\n );\n } else {\n state.addCode(createConverterJSForMember(property, propertyState));\n }\n }\n }\n }\n }\n}\n\nexport function typeGuardObjectLiteral(\n type: TypeObjectLiteral | TypeClass,\n state: TemplateState\n) {\n //this function is used for both, serialize and deserialization. When serializing the type of `type` is strictly correct, so checking embedded fields would lead to wrong results.\n //this embedded check is only necessary when checking types in deserializing.\n if (state.target === \"deserialize\") {\n const embedded = embeddedAnnotation.getFirst(type);\n if (embedded) {\n state.addCode(\"//typeguard for embedded\");\n typeGuardEmbedded(type, state, embedded);\n return;\n }\n }\n\n const lines: string[] = [];\n const signatures: TypeIndexSignature[] = [];\n const existing: string[] = [];\n\n //to resolve inheritance in TypeClass, use ReflectionClass\n const reflection = ReflectionClass.from(type);\n\n for (const member of reflection.type.types) {\n if (member.kind === ReflectionKind.indexSignature) {\n signatures.push(member);\n } else if (\n member.kind === ReflectionKind.propertySignature ||\n member.kind === ReflectionKind.property ||\n member.kind === ReflectionKind.methodSignature ||\n member.kind === ReflectionKind.method\n ) {\n if (\n member.kind === ReflectionKind.property ||\n member.kind === ReflectionKind.method\n ) {\n if (member.abstract || member.static) continue;\n }\n\n if (member.name === \"constructor\") continue;\n\n if (\n state.target === \"deserialize\" &&\n (member.kind === ReflectionKind.method ||\n member.kind === ReflectionKind.methodSignature)\n ) {\n // methods can not be part of serialized data, so we skip them.\n continue;\n }\n\n const readName =\n member.kind === ReflectionKind.methodSignature ||\n member.kind === ReflectionKind.method\n ? getNameExpression(member.name, state)\n : getNameExpression(\n state.isDeserialization\n ? state.namingStrategy.getPropertyName(\n member,\n state.registry.serializer.name\n )\n : memberNameToString(member.name),\n state\n );\n\n const checkValid = state.compilerContext.reserveName(\"check\");\n const propertyAccessor = new ContainerAccessor(state.accessor, readName);\n const propertyState = state\n .fork(checkValid, propertyAccessor)\n .extendPath(String(member.name));\n\n const isEmbedded =\n member.kind === ReflectionKind.property ||\n member.kind === ReflectionKind.propertySignature\n ? hasEmbedded(member.type)\n : undefined;\n\n if (\n isEmbedded &&\n (member.kind === ReflectionKind.property ||\n member.kind === ReflectionKind.propertySignature)\n ) {\n const template = executeTemplates(propertyState, member.type);\n if (!template)\n throw new Error(`No template found for ${member.type.kind}`);\n\n lines.push(`let ${checkValid} = false;` + template);\n } else {\n let optional = isOptional(member);\n if (\n state.validation === \"loose\" &&\n member.kind === ReflectionKind.property &&\n member.default\n ) {\n optional = true;\n }\n\n let optionalCheck = optional\n ? `${propertyAccessor} !== undefined && ` +\n (!isNullable(member) ? `${propertyAccessor} !== null && ` : \"\")\n : \"\";\n existing.push(readName);\n\n state.setContext({ unpopulatedSymbol });\n const forType: Type =\n member.kind === ReflectionKind.methodSignature ||\n member.kind === ReflectionKind.method\n ? {\n kind: ReflectionKind.function,\n name: memberNameToString(member.name),\n return: member.return,\n parameters: member.parameters\n }\n : member.type;\n const checkTemplate = executeTemplates(propertyState, forType).trim();\n lines.push(`\n if (${optionalCheck} ${propertyAccessor} !== unpopulatedSymbol) {\n let ${checkValid} = false;\n ${checkTemplate || `// no template found for member ${String(member.name)}.type.kind=${forType.kind}`}\n if (!${checkValid}) ${state.setter} = false;\n }`);\n }\n }\n }\n\n if (signatures.length) {\n const i = state.compilerContext.reserveName(\"i\");\n const existingCheck =\n existing.map(v => `${i} === ${v}`).join(\" || \") || \"false\";\n const signatureLines: string[] = [];\n\n sortSignatures(signatures);\n\n for (const signature of signatures) {\n const checkValid = state.compilerContext.reserveName(\"check\");\n const checkTemplate = executeTemplates(\n state\n .fork(checkValid, new ContainerAccessor(state.accessor, i))\n .extendPath(new RuntimeCode(i)),\n signature.type\n ).trim();\n signatureLines.push(`else if (${getIndexCheck(state.compilerContext, i, signature.index)}) {\n let ${checkValid} = false;\n ${checkTemplate || `// no template found for signature.type.kind=${signature.type.kind}`}\n if (!${checkValid}) ${state.setter} = false;\n }`);\n }\n\n state.setContext({ hasProperty });\n //the index signature type could be: string, number, symbol.\n //or a literal when it was constructed by a mapped type.\n lines.push(`\n for (const ${i} in ${state.accessor}) {\n if (!hasProperty(${state.accessor}, ${i})) continue;\n if (${existingCheck}) continue;\n if (!${state.setter}) {\n break;\n } ${signatureLines.join(\" \")}\n else {\n ${state.setter} = false;\n break;\n }\n }\n `);\n }\n\n let customValidatorCall = \"\";\n if (type.kind === ReflectionKind.class) {\n const reflection = ReflectionClass.from(type.classType);\n if (reflection.validationMethod) {\n const resVar = state.setVariable(\"validationResult\");\n const method = state.setVariable(\"method\", reflection.validationMethod);\n customValidatorCall = `\n if (${state.setter}) {\n ${resVar} = ${state.accessor}[${method}]();\n if (${resVar} && state.errors) state.errors.push(new ValidationErrorItem(${resVar}.path || ${collapsePath(state.path)}, ${resVar}.code, ${resVar}.message));\n }\n `;\n }\n }\n\n state.setContext({ isObjectLiteral });\n\n state.addCodeForSetter(`\n ${state.setter} = true;\n if (${state.accessor} && isObjectLiteral(${state.accessor})) {\n ${lines.join(\"\\n\")}\n ${customValidatorCall}\n } else {\n if (${state.isValidation()}) ${state.assignValidationError(\"type\", \"Not an object\")}\n ${state.setter} = false;\n }\n `);\n}\n\nexport function serializeArray(type: TypeArray, state: TemplateState) {\n state.setContext({ isIterable });\n const v = state.compilerContext.reserveName(\"v\");\n const tempIterable = state.compilerContext.reserveName(\"tempIterable\");\n const i = state.compilerContext.reserveName(\"i\");\n const item = state.compilerContext.reserveName(\"item\");\n\n //we just use `a.length` to check whether its array-like, because Array.isArray() is way too slow.\n state.addCodeForSetter(`\n if (isIterable(${state.accessor})) {\n const ${tempIterable} = ${state.accessor};\n ${state.setter} = [];\n let ${i} = 0;\n for (const ${item} of ${tempIterable}) {\n let ${v};\n ${executeTemplates(state.fork(v, item).extendPath(new RuntimeCode(i)), type.type)}\n ${state.setter}.push(${v});\n ${i}++;\n }\n }\n `);\n}\n\nexport function typeGuardArray(elementType: Type, state: TemplateState) {\n state.setContext({ isIterable, iterableSize });\n const v = state.compilerContext.reserveName(\"v\");\n const i = state.compilerContext.reserveName(\"i\");\n const item = state.compilerContext.reserveName(\"item\");\n //we just use `a.length` to check whether its array-like, because Array.isArray() is way too slow.\n state.addCodeForSetter(`\n let ${v} = false;\n let ${i} = 0;\n if (isIterable(${state.accessor})) {\n ${v} = iterableSize(${state.accessor}) === 0;\n for (const ${item} of ${state.accessor}) {\n ${executeTemplates(state.fork(v, item).extendPath(new RuntimeCode(i)), elementType)}\n ${i}++;\n }\n } else if (${state.isValidation()}) {\n ${state.assignValidationError(\"type\", \"Not an array\")}\n }\n ${state.setter} = ${v};\n `);\n}\n\nfunction serializeTuple(type: TypeTuple, state: TemplateState) {\n //[string, number], easy\n //[...string, number], easy\n //[number, ...string], easy\n //[number, ...string, number, string], medium\n const lines: string[] = [];\n let restEndOffset = 0;\n const _ = state.compilerContext.reserveName(\"_\");\n const i = state.compilerContext.reserveName(\"i\");\n\n for (let i = 0; i < type.types.length; i++) {\n if (type.types[i].type.kind === ReflectionKind.rest) {\n restEndOffset = type.types.length - (i + 1);\n break;\n }\n }\n\n for (const member of type.types) {\n if (member.type.kind === ReflectionKind.rest) {\n lines.push(`\n for (; ${i} < ${state.accessor}.length - ${restEndOffset}; ${i}++) {\n ${_} = undefined;\n ${executeTemplates(state.fork(_, new ContainerAccessor(state.accessor, i)).extendPath(member.name || new RuntimeCode(i)), member.type.type)}\n if (${_} !== undefined) {\n ${state.setter}.push(${_});\n } else if (${member.optional || isOptional(member.type)}) {\n ${state.setter}.push(undefined);\n }\n }\n `);\n } else {\n lines.push(`\n ${_} = undefined;\n ${executeTemplates(state.fork(_, new ContainerAccessor(state.accessor, i)).extendPath(member.name || new RuntimeCode(i)), member.type)}\n if (${_} !== undefined) {\n ${state.setter}.push(${_});\n } else if (${member.optional || isOptional(member.type)}) {\n ${state.setter}.push(undefined);\n }\n ${i}++;\n `);\n }\n }\n\n state.addCodeForSetter(`\n let ${_};\n let ${i} = 0;\n ${state.setter} = [];\n ${lines.join(\"\\n\")}\n `);\n}\n\nfunction typeGuardTuple(type: TypeTuple, state: TemplateState) {\n //[string, number], easy\n //[...string, number], easy\n //[number, ...string], easy\n //[number, ...string, number, string], medium\n const lines: string[] = [];\n let restEndOffset = 0;\n const v = state.compilerContext.reserveName(\"v\");\n const i = state.compilerContext.reserveName(\"i\");\n\n for (let i = 0; i < type.types.length; i++) {\n if (type.types[i].type.kind === ReflectionKind.rest) {\n restEndOffset = type.types.length - (i + 1);\n break;\n }\n }\n\n for (const member of type.types) {\n if (member.type.kind === ReflectionKind.rest) {\n lines.push(`\n for (; ${v} && ${i} < ${state.accessor}.length - ${restEndOffset}; ${i}++) {\n ${executeTemplates(state.fork(v, new ContainerAccessor(state.accessor, i)).extendPath(member.name || new RuntimeCode(i)), member.type.type)}\n if (!${v}) {\n break;\n }\n }\n `);\n } else {\n const optionalCheck = member.optional\n ? `${state.accessor}[${i}] !== undefined`\n : \"true\";\n lines.push(`\n if (${v} && ${optionalCheck}) {\n ${executeTemplates(state.fork(v, new ContainerAccessor(state.accessor, i)).extendPath(member.name || new RuntimeCode(i)), member.type)}\n ${i}++;\n }\n `);\n }\n }\n\n state.setContext({ isArray: isArray });\n state.addCodeForSetter(`\n if (isArray(${state.accessor})) {\n let ${v} = true;\n let ${i} = 0;\n ${lines.join(\"\\n\")}\n ${state.setter} = ${v};\n } else {\n if (${state.isValidation()}) ${state.assignValidationError(\"type\", \"Not an array\")}\n ${state.setter} = false;\n }\n `);\n}\n\nexport function getSetTypeToArray(type: TypeClass): TypeArray {\n const jit = getTypeJitContainer(type);\n if (jit.forwardSetToArray) return jit.forwardSetToArray;\n\n const value = type.arguments?.[0] || { kind: ReflectionKind.any };\n\n return (jit.forwardSetToArray = {\n kind: ReflectionKind.array,\n type: value\n } as TypeArray);\n}\n\nexport function getMapTypeToArray(type: TypeClass): TypeArray {\n const jit = getTypeJitContainer(type);\n if (jit.forwardMapToArray) return jit.forwardMapToArray;\n\n const index = type.arguments?.[0] || { kind: ReflectionKind.any };\n const value = type.arguments?.[1] || { kind: ReflectionKind.any };\n\n jit.forwardMapToArray = {\n kind: ReflectionKind.array,\n type: copyAndSetParent({\n kind: ReflectionKind.tuple,\n types: [\n { kind: ReflectionKind.tupleMember, name: \"key\", type: index },\n { kind: ReflectionKind.tupleMember, name: \"value\", type: value }\n ]\n })\n };\n\n return jit.forwardMapToArray;\n}\n\nexport function getNTypeToArray(type: TypeClass, n: number): TypeArray {\n const jit = getTypeJitContainer(type);\n const name = `forwardNTypeToArray${n}`;\n if (jit[name]) return jit[name];\n\n const value = type.arguments?.[n] || { kind: ReflectionKind.any };\n\n return (jit[name] = {\n kind: ReflectionKind.array,\n type: value\n } as TypeArray);\n}\n\nexport function executeTypeArgumentAsArray(\n type: TypeClass,\n typeIndex: number,\n state: TemplateState\n) {\n executeTemplates(state, getNTypeToArray(type, typeIndex), true, false);\n}\n\nexport function forwardSetToArray(type: TypeClass, state: TemplateState) {\n executeTemplates(state, getSetTypeToArray(type), true, false);\n}\n\nexport function forwardMapToArray(type: TypeClass, state: TemplateState) {\n executeTemplates(state, getMapTypeToArray(type), true, false);\n}\n\nexport function serializePropertyOrParameter(\n type: TypePropertySignature | TypeProperty | TypeParameter,\n state: TemplateState\n) {\n if (isOptional(type)) {\n const nullCheck = isNullable(type)\n ? `if (${state.accessor} === null) {\n ${executeTemplates(state.fork(), { kind: ReflectionKind.null })}\n } else `\n : \"\";\n\n state.addCode(`\n ${nullCheck}\n if (${state.accessor} === undefined || ${state.accessor} === null) {\n ${executeTemplates(state.fork(), { kind: ReflectionKind.undefined })}\n } else {\n ${executeTemplates(state.fork(), type.type)}\n }\n `);\n return;\n }\n\n state.addCode(executeTemplates(state.fork(), type.type));\n}\n\nexport function validatePropertyOrParameter(\n type: TypePropertySignature | TypeProperty | TypeParameter,\n state: TemplateState\n) {\n const optional = isOptional(type);\n const hasDefault = hasDefaultValue(type);\n\n state.addCode(`\n if (${state.accessor} === undefined) {\n if (${!optional && !hasDefault && state.isValidation()}) ${state.assignValidationError(\"type\", \"No value given\")}\n } else {\n ${executeTemplates(state.fork(), type.type)}\n }\n `);\n}\n\nexport function handleUnion(type: TypeUnion, state: TemplateState) {\n //detecting which serializer to use in union is a complex topic and allows a key feature: deserializing an encoding that is entirely based on strings (e.g. URL query string)\n //to support for example numeric string, we need to have multiple guards being able to detect their 'loosely type' equivalence, for example\n // - '1234' => number\n // - 1234 => string\n // - 1234 => Date\n // whether one is picked over that strict equivalence (123 => number, '123' => string) depends on the union and whether 'loosely' is active.\n //The order of the union members is not important, only the order in which the guards are registered.\n\n //examples with loosely active:\n // number | string\n // -> '1234' => number\n // -> 1234 => number\n // -> 1234abc => string\n\n //examples with loosely active:\n // number | boolean\n // -> '1234' => number\n // -> 1234 => number\n // -> 1 => boolean\n // => 'true' => boolean\n\n //examples with loosely active:\n // number | Date\n // -> '1234' => number\n // -> 1234 => number\n // -> '2021-11-24T16:21:13.425Z' => Date\n\n //This feature requires that each serializer can have multiple guards registered in different specificality. We use a convention that\n //the specificality of 1 is the default JS guard (typeof), and anything greater than 2 is a fallback, like number => Date (which should only be used when no other guard tested positively for number).\n //Withing specificality of 1 there are other nuances that further describe the specificality. For example `literal` is more specific than a `string`, so\n //that the literal will always picked first in a type of `'a' | string`. e.g. literal=1.1, string 1.5; other examples\n // Date < string,\n\n //anything below 0 is a loose guard, for example a numeric string, or numbers as boolean. guards below 0 are only used when enabled manually.\n //guards between 0 and 1 are standard loose types that are necessary to support JSON, e.g. '2021-11-24T16:21:13.425Z' => Date.\n const lines: string[] = [];\n\n //since there are type guards that require to access the container (for example Embedded), its necessary to pass the container (if available) to the type guard function\n //and change accessor to point to `data` (argument of the type guard) + index name.\n const property =\n state.accessor instanceof ContainerAccessor\n ? `${state.accessor.property}`\n : \"undefined\";\n const args = `${state.accessor instanceof ContainerAccessor ? state.accessor.container : state.accessor}, state, ${collapsePath(state.path)}, ${property}`;\n const accessor =\n state.accessor instanceof ContainerAccessor\n ? new ContainerAccessor(\"data\", \"property\")\n : \"data\";\n\n const typeGuards =\n state.registry.serializer.typeGuards.getSortedTemplateRegistries();\n\n for (const [specificality, typeGuard] of typeGuards) {\n //loosely type guards are only used for deserialization\n if (state.target === \"serialize\" && specificality < 1) continue;\n\n //when validation=true and not all specificalities are included, we only use 1, which is used for strict validation()/is().\n if (state.validation === \"strict\" && specificality !== 1) continue;\n const validation = !state.validation ? \"loose\" : state.validation;\n\n for (const t of type.types) {\n const fn = createTypeGuardFunction(\n t,\n state\n .fork(undefined, accessor)\n .forRegistry(typeGuard)\n //if validation is not set, we are in deserialize mode, so we need to activate validation\n //for this state.\n .withValidation(validation)\n .includeAllSpecificalities(state.registry.serializer.typeGuards),\n undefined,\n false\n );\n if (!fn) continue;\n const guard = state.setVariable(\"guard_\" + ReflectionKind[t.kind], fn);\n const looseCheck =\n specificality <= 0 ? `state.loosely !== false && ` : \"\";\n\n const action = state.isValidation()\n ? `${state.setter} = true;`\n : executeTemplates(state.fullFork(), t);\n lines.push(`else if (${looseCheck}${guard}(${args})) {\n //type = ${ReflectionKind[t.kind]}, specificality=${specificality}\n ${action}\n }`);\n }\n }\n\n const handleErrors = state.setter\n ? `\n if (state.errors) {\n ${state.setter} = false;\n state.errors = oldErrors;\n }\n `\n : \"\";\n\n state.addCodeForSetter(`\n {\n const oldErrors = state.errors;\n if (state.errors) state.errors = [];\n\n //type guard for union\n if (false) {} ${lines.join(\" \")}\n else {\n ${handleErrors}\n ${state.assignValidationError(\"type\", \"No valid union member found. Valid: \" + stringifyResolvedType(type))}\n }\n state.errors = oldErrors;\n }\n `);\n}\n\nexport function getNameExpression(\n name: string | number | symbol | undefined,\n state: TemplateState\n): string {\n if (undefined === name) return \"undefined\";\n if (\"string\" === typeof name || \"number\" === typeof name)\n return JSON.stringify(name);\n if (isType(name)) return JSON.stringify(memberNameToString(name));\n return state.compilerContext.reserveConst(name, \"symbolName\");\n}\n\nexport class TypeGuardRegistry {\n registry: { [specificality: number]: TemplateRegistry } = {};\n\n protected sorted?: [specificality: number, registry: TemplateRegistry][];\n\n /**\n * Lowest specificality first\n */\n getSortedTemplateRegistries() {\n if (!this.sorted) {\n this.sorted = [];\n const registries = Object.entries(this.registry);\n registries.sort((a, b) => {\n return Number(a[0]) - Number(b[0]);\n });\n for (const [spec, reg] of registries) {\n this.sorted.push([Number(spec), reg]);\n }\n }\n return this.sorted;\n }\n\n constructor(public serializer: Serializer) {}\n\n clear() {\n this.registry = {};\n this.sorted = undefined;\n }\n\n /**\n *\n * @see register() for specificality explanation.\n */\n getRegistry(specificality: number): TemplateRegistry {\n this.sorted = undefined;\n return (this.registry[specificality] ||= new TemplateRegistry(\n this.serializer\n ));\n }\n\n /**\n * Registers a new template and replaces all existing (added via register,prepend,append).\n *\n * Specificality defines when the given template guard is executed.\n *\n * - 1 means its used for JS types - exact types. For example for type string `'string' ==== typeof v` is used. Same for number, bigint, and boolean.\n * Guards of this specificality are used for the `is()` function.\n *\n * - >1 means it acts as a fallback. For example in a union `number | Date`, when a string is given, the Date can allow `string` type as well, so it gets converted to a Date.\n *\n * - >0 && <1 means its acts as a priority guard. For example in a `string | Date`, a string of date-format is converted to a Date instead of a string. This is necessary\n * to support regular JSON.\n *\n * - <0, anything below 0 means it can optionally be used for loosely types. This is handy when data comes from a string-only encoding like URL query strings.\n * In this specificality a numeric string is converted to a number or bigint, a 1|0|true|false string converted to boolean .\n */\n register<T extends ReflectionKind>(\n specificality: number,\n kind: T,\n template: Template<FindType<Type, T>>\n ) {\n this.getRegistry(specificality).register(kind, template);\n }\n\n /**\n * @see register\n */\n registerClass(\n specificality: number,\n classType: ClassType,\n template: Template<TypeClass>\n ) {\n this.getRegistry(specificality).registerClass(classType, template);\n }\n\n /**\n * @see register\n */\n registerBinary(specificality: number, template: Template<TypeClass>) {\n this.getRegistry(specificality).registerBinary(template);\n }\n}\n\n/**\n * Default serializer that can convert JS data structures to the target type.\n * It coerces types, converts object literals to class instances, and has type guards for JS types.\n *\n * JSONSerializer has the same but for JSON data structures.\n */\nexport class Serializer {\n serializeRegistry = new TemplateRegistry(this);\n deserializeRegistry = new TemplateRegistry(this);\n typeGuards = new TypeGuardRegistry(this);\n validators = new TemplateRegistry(this);\n\n constructor(public name: string = \"json\") {\n this.registerSerializers();\n this.registerTypeGuards();\n this.registerValidators();\n }\n\n public setExplicitUndefined(type: Type, state: TemplateState): boolean {\n return true;\n }\n\n protected registerValidators() {}\n\n clear() {\n this.serializeRegistry.clear();\n this.deserializeRegistry.clear();\n this.typeGuards.clear();\n this.validators.clear();\n }\n\n protected registerSerializers() {\n this.deserializeRegistry.register(ReflectionKind.any, (type, state) =>\n state.addSetter(state.accessor)\n );\n this.serializeRegistry.register(ReflectionKind.any, (type, state) =>\n state.addSetter(state.accessor)\n );\n\n this.deserializeRegistry.register(ReflectionKind.object, (type, state) => {\n state.setContext({ isObject });\n state.addSetter(`isObject(${state.accessor}) ? ${state.accessor} : {}`);\n });\n this.serializeRegistry.register(ReflectionKind.object, (type, state) =>\n state.addSetter(state.accessor)\n );\n\n this.deserializeRegistry.register(\n ReflectionKind.class,\n serializeObjectLiteral\n );\n this.serializeRegistry.register(\n ReflectionKind.class,\n serializeObjectLiteral\n );\n this.deserializeRegistry.register(\n ReflectionKind.objectLiteral,\n serializeObjectLiteral\n );\n this.serializeRegistry.register(\n ReflectionKind.objectLiteral,\n serializeObjectLiteral\n );\n\n this.deserializeRegistry.register(ReflectionKind.array, serializeArray);\n this.serializeRegistry.register(ReflectionKind.array, serializeArray);\n\n this.deserializeRegistry.register(ReflectionKind.tuple, serializeTuple);\n this.serializeRegistry.register(ReflectionKind.tuple, serializeTuple);\n\n this.deserializeRegistry.register(ReflectionKind.union, handleUnion);\n this.serializeRegistry.register(ReflectionKind.union, handleUnion);\n\n this.deserializeRegistry.register(ReflectionKind.literal, (type, state) =>\n state.addSetter(state.setVariable(\"v\", type.literal))\n );\n this.serializeRegistry.register(ReflectionKind.literal, (type, state) =>\n state.addSetter(state.setVariable(\"v\", type.literal))\n );\n\n this.serializeRegistry.register(ReflectionKind.undefined, (type, state) =>\n state.addSetter(`null`)\n );\n this.deserializeRegistry.register(ReflectionKind.undefined, (type, state) =>\n state.addSetter(`undefined`)\n );\n\n this.serializeRegistry.register(ReflectionKind.null, (type, state) =>\n state.addSetter(`null`)\n );\n this.deserializeRegistry.register(ReflectionKind.null, (type, state) =>\n state.addSetter(`null`)\n );\n\n this.serializeRegistry.register(\n ReflectionKind.propertySignature,\n serializePropertyOrParameter\n );\n this.serializeRegistry.register(\n ReflectionKind.property,\n serializePropertyOrParameter\n );\n this.serializeRegistry.register(\n ReflectionKind.parameter,\n serializePropertyOrParameter\n );\n this.deserializeRegistry.register(\n ReflectionKind.propertySignature,\n serializePropertyOrParameter\n );\n this.deserializeRegistry.register(\n ReflectionKind.property,\n serializePropertyOrParameter\n );\n this.deserializeRegistry.register(\n ReflectionKind.parameter,\n serializePropertyOrParameter\n );\n\n this.deserializeRegistry.registerClass(Date, (type, state) =>\n state.addSetter(`new Date(${state.accessor})`)\n );\n this.serializeRegistry.registerClass(Date, (type, state) =>\n state.addSetter(`${state.accessor}.toJSON()`)\n );\n\n this.serializeRegistry.register(ReflectionKind.string, (type, state) => {\n state.addSetter(\n `'string' === typeof ${state.accessor} ? ${state.accessor} : ''+ ${state.accessor}`\n );\n });\n\n this.deserializeRegistry.register(ReflectionKind.string, (type, state) => {\n state.addSetter(\n `'string' !== typeof ${state.accessor} && state.loosely !== false && undefined !== ${state.accessor} && null !== ${state.accessor} ? ${state.accessor}+'' : ${state.accessor}`\n );\n });\n\n this.deserializeRegistry.addDecorator(isUUIDType, (type, state) => {\n const v = state.accessor;\n const check = `${v}.length === 36 && ${v}[23] === '-' && ${v}[18] === '-' && ${v}[13] === '-' && ${v}[8] === '-'`;\n state.addCode(`\n if (!(${check})) ${state.throwCode(type, JSON.stringify(\"Not a UUID\"))}\n `);\n });\n\n this.deserializeRegistry.addDecorator(isMongoIdType, (type, state) => {\n const check = `${state.accessor}.length === 24 || ${state.accessor}.length === 0`;\n state.addCode(`\n if (!(${check})) ${state.throwCode(type, JSON.stringify(\"Not a MongoId (ObjectId)\"))}\n `);\n });\n\n this.serializeRegistry.register(\n ReflectionKind.templateLiteral,\n (type, state) => state.addSetter(state.accessor)\n );\n this.deserializeRegistry.register(\n ReflectionKind.templateLiteral,\n (type, state) => {\n state.addSetter(\n `'string' !== typeof ${state.accessor} ? ${state.accessor}+'' : ${state.accessor}`\n );\n }\n );\n\n this.serializeRegistry.register(ReflectionKind.boolean, (type, state) =>\n state.addSetter(state.accessor)\n );\n this.deserializeRegistry.register(ReflectionKind.boolean, (type, state) => {\n state.addSetter(\n `'boolean' !== typeof ${state.accessor} && state.loosely !== false ? ${state.accessor} == 1 || ${state.accessor} == 'true' : ${state.accessor}`\n );\n });\n\n this.serializeRegistry.register(ReflectionKind.promise, (type, state) =>\n executeTemplates(state, type.type)\n );\n this.deserializeRegistry.register(ReflectionKind.promise, (type, state) =>\n executeTemplates(state, type.type)\n );\n\n this.serializeRegistry.register(ReflectionKind.bigint, (type, state) => {\n if (binaryBigIntAnnotation.getFirst(type) === BinaryBigIntType.unsigned) {\n state.addSetter(\n `${state.accessor} >= 0 ? ${state.accessor}.toString() : '0'`\n );\n } else {\n state.addSetter(`${state.accessor}.toString()`);\n }\n });\n this.deserializeRegistry.register(ReflectionKind.bigint, (type, state) => {\n state.setContext({ BigInt });\n if (binaryBigIntAnnotation.getFirst(type) === BinaryBigIntType.unsigned) {\n state.addSetter(\n `'bigint' !== typeof ${state.accessor} ? BigInt(${state.accessor}) : ${state.accessor}`\n );\n state.addSetter(\n `${state.accessor} < 0 ? BigInt(0) : ${state.accessor}`\n );\n } else {\n state.addSetter(\n `'bigint' !== typeof ${state.accessor} ? BigInt(${state.accessor}) : ${state.accessor}`\n );\n }\n });\n\n this.serializeRegistry.register(ReflectionKind.enum, (type, state) =>\n state.addSetter(state.accessor)\n );\n this.deserializeRegistry.register(ReflectionKind.enum, (type, state) => {\n const valuesVar = state.setVariable(\"values\", type.values);\n const matcher = state.setVariable(\n \"enumMatcher\",\n getEnumValueIndexMatcher(type)\n );\n state.addCodeForSetter(`\n ${state.setter} = ${valuesVar}[${matcher}(${state.accessor})];\n if (${valuesVar}.indexOf(${state.setter}) === -1) ${state.throwCode(\"enum\", `'No valid value of ' + ${valuesVar}.join(', ')`)}\n `);\n });\n\n this.serializeRegistry.register(ReflectionKind.regexp, (type, state) =>\n state.addSetter(`${state.accessor}.toString()`)\n );\n this.deserializeRegistry.register(ReflectionKind.regexp, (type, state) => {\n state.setContext({ RegExp });\n state.addCodeForSetter(`\n\n try {\n ${state.setter} = 'string' === typeof ${state.accessor}\n ? ${state.accessor}[0] === '/'\n ? new RegExp(${state.accessor}.slice(1, ${state.accessor}.lastIndexOf('/')), ${state.accessor}.slice(1 + ${state.accessor}.lastIndexOf('/')))\n : new RegExp(${state.accessor})\n : ${state.accessor}\n } catch (error) {\n ${state.throwCode(\"regexp\", \"error\")}\n }\n `);\n });\n\n this.serializeRegistry.register(ReflectionKind.number, (type, state) =>\n state.addSetter(state.accessor)\n );\n this.deserializeRegistry.register(ReflectionKind.number, (type, state) => {\n if (type.brand !== undefined && type.brand < TypeNumberBrand.float) {\n state.addSetter(`Math.trunc(${state.accessor})`);\n if (type.brand === TypeNumberBrand.uint8) {\n state.addSetter(\n `${state.accessor} > 255 ? 255 : ${state.accessor} < 0 ? 0 : ${state.accessor}`\n );\n } else if (type.brand === TypeNumberBrand.uint16) {\n state.addSetter(\n `${state.accessor} > 65535 ? 65535 : ${state.accessor} < 0 ? 0 : ${state.accessor}`\n );\n } else if (type.brand === TypeNumberBrand.uint32) {\n state.addSetter(\n `${state.accessor} > 4294967295 ? 4294967295 : ${state.accessor} < 0 ? 0 : ${state.accessor}`\n );\n } else if (type.brand === TypeNumberBrand.int8) {\n state.addSetter(\n `${state.accessor} > 127 ? 127 : ${state.accessor} < -128 ? -128 : ${state.accessor}`\n );\n } else if (type.brand === TypeNumberBrand.int16) {\n state.addSetter(\n `${state.accessor} > 32767 ? 32767 : ${state.accessor} < -32768 ? -32768 : ${state.accessor}`\n );\n } else if (type.brand === TypeNumberBrand.int32) {\n state.addSetter(\n `${state.accessor} > 2147483647 ? 2147483647 : ${state.accessor} < -2147483648 ? -2147483648 : ${state.accessor}`\n );\n }\n } else {\n state.setContext({ Number });\n state.addSetter(\n `'number' !== typeof ${state.accessor} && state.loosely !== false ? Number(${state.accessor}) : ${state.accessor}`\n );\n if (type.brand === TypeNumberBrand.float32) {\n state.addSetter(\n `${state.accessor} > 3.40282347e+38 ? 3.40282347e+38 : ${state.accessor} < -3.40282347e+38 ? -3.40282347e+38 : ${state.accessor}`\n );\n }\n }\n\n state.addCodeForSetter(\n `if (isNaN(${state.accessor})) ${state.throwCode(type)}`\n );\n });\n\n //convert binary to base64 (instead of hex, important for primary key hash)\n this.serializeRegistry.registerBinary((type, state) => {\n if (type.classType === ArrayBuffer) {\n state.setContext({ arrayBufferToBase64 });\n state.addSetter(`arrayBufferToBase64(${state.accessor})`);\n return;\n }\n state.setContext({ typedArrayToBase64 });\n state.addSetter(`typedArrayToBase64(${state.accessor})`);\n });\n\n this.deserializeRegistry.registerBinary((type, state) => {\n if (type.classType === ArrayBuffer) {\n state.setContext({ base64ToArrayBuffer });\n state.addSetter(\n `${state.accessor} instanceof ArrayBuffer ? ${state.accessor} : base64ToArrayBuffer(${state.accessor})`\n );\n return;\n }\n\n state.setContext({ base64ToTypedArray });\n const typedArrayVar = state.setVariable(\"classType\", type.classType);\n state.addSetter(\n `${state.accessor} instanceof ${typedArrayVar} ? ${state.accessor} : base64ToTypedArray(${state.accessor}, ${typedArrayVar})`\n );\n });\n\n this.serializeRegistry.registerClass(Set, forwardSetToArray);\n this.serializeRegistry.registerClass(Map, forwardMapToArray);\n\n this.deserializeRegistry.registerClass(Set, (type, state) => {\n forwardSetToArray(type, state);\n state.addSetter(`new Set(${state.accessor})`);\n });\n this.deserializeRegistry.registerClass(Map, (type, state) => {\n forwardMapToArray(type, state);\n state.addSetter(`new Map(${state.accessor})`);\n });\n\n this.deserializeRegistry.addDecorator(\n type =>\n isReferenceType(type) ||\n isBackReferenceType(type) ||\n (type.parent !== undefined && isBackReferenceType(type.parent)),\n (type, state) => {\n if (\n type.kind !== ReflectionKind.class &&\n type.kind !== ReflectionKind.objectLiteral\n )\n return;\n state.annotationHandled(referenceAnnotation);\n state.setContext({\n isObject,\n createReference,\n isReferenceHydrated,\n isReferenceInstance,\n getObjectKeysSize\n });\n const reflection = ReflectionClass.from(type);\n const referenceClassTypeVar = state.setVariable(\n \"referenceClassType\",\n type.kind === ReflectionKind.class ? type.classType : Object\n );\n\n // when an object with primary key is given e.g. {id: 1} we treat it as\n // reference and assign an instance of Reference to the property.\n const l: string[] = [\n `${reflection.getPrimaries().length} > 0 && getObjectKeysSize(${state.accessor}) === ${reflection.getPrimaries().length}`\n ];\n for (const pk of reflection.getPrimaries()) {\n l.push(`${JSON.stringify(pk.name)} in ${state.accessor}`);\n }\n const checkIsPrimaryKeyOnly = l.join(\" && \");\n\n // in deserialization a reference is created when only the primary key is provided (no object given)\n state.replaceTemplate(`\n if (isReferenceInstance(${state.accessor})) {\n ${state.setter} = ${state.accessor};\n } else if (isObject(${state.accessor}) && ${checkIsPrimaryKeyOnly}) {\n ${state.setter} = createReference(${referenceClassTypeVar}, ${state.accessor});\n } else if (isObject(${state.accessor})) {\n ${state.template}\n } else {\n let pk;\n ${executeTemplates(state.fork(\"pk\").extendPath(String(reflection.getPrimary().getName())), reflection.getPrimary().getType())}\n ${state.setter} = createReference(${referenceClassTypeVar}, {${JSON.stringify(reflection.getPrimary().getName())}: pk});\n }\n `);\n }\n );\n }\n\n protected registerTypeGuards() {\n this.typeGuards.register(1, ReflectionKind.any, (type, state) => {\n //if any is part of a union, we use register(20) below. otherwise it would match before anything else.\n if (type.parent && type.parent.kind === ReflectionKind.union) {\n return;\n }\n state.addSetter(\"true\");\n });\n //if nothing else matches in a union, any matches anything\n this.typeGuards.register(20, ReflectionKind.any, (type, state) =>\n state.addSetter(\"true\")\n );\n\n this.typeGuards.register(1, ReflectionKind.object, (type, state) => {\n state.setContext({ isObject });\n state.addSetter(`isObject(${state.accessor})`);\n });\n this.typeGuards.register(1, ReflectionKind.objectLiteral, (type, state) =>\n typeGuardObjectLiteral(type, state)\n );\n this.typeGuards.register(1, ReflectionKind.class, (type, state) =>\n typeGuardObjectLiteral(type, state)\n );\n\n // //for deserialization type guards (specifically > 1) we check for embedded type sas well. this is because an embedded could have totally different field names.\n // //and only if the property (where the embedded is placed) has no strict type guard do we look for other fields as well.\n // this.typeGuards.register(2, ReflectionKind.class, (type, state) => typeCheckClassOrObjectLiteral(type, state, true));\n\n this.typeGuards.register(1, ReflectionKind.string, (type, state) => {\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Not a string\",\n `'string' === typeof ${state.accessor}`\n );\n });\n this.typeGuards.getRegistry(1).addDecorator(isUUIDType, (type, state) => {\n const v = state.originalAccessor;\n const check = `${state.setter} && ${v}.length === 36 && ${v}[23] === '-' && ${v}[18] === '-' && ${v}[13] === '-' && ${v}[8] === '-'`;\n state.addSetterAndReportErrorIfInvalid(\"type\", \"Not a UUID\", check);\n });\n this.typeGuards\n .getRegistry(1)\n .addDecorator(isMongoIdType, (type, state) => {\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Not a MongoId (ObjectId)\",\n `${state.setter} && (${state.originalAccessor}.length === 24 || ${state.originalAccessor}.length === 0)`\n );\n });\n this.typeGuards.register(50, ReflectionKind.string, (type, state) =>\n state.addSetter(\n `${state.accessor} !== undefined && ${state.accessor} !== null`\n )\n ); //at the end, everything can be converted to string\n\n this.typeGuards.register(\n 1,\n ReflectionKind.templateLiteral,\n (type, state) => {\n state.setContext({ extendTemplateLiteral: extendTemplateLiteral });\n const typeVar = state.setVariable(\"type\", type);\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Invalid literal\",\n `'string' === typeof ${state.accessor} && extendTemplateLiteral({kind: ${ReflectionKind.literal}, literal: ${state.accessor}}, ${typeVar})`\n );\n }\n );\n\n this.typeGuards.register(1, ReflectionKind.undefined, (type, state) =>\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Not undefined\",\n `'undefined' === typeof ${state.accessor}`\n )\n );\n this.typeGuards.register(2, ReflectionKind.undefined, (type, state) =>\n state.addSetter(`null === ${state.accessor}`)\n );\n\n this.typeGuards.register(1, ReflectionKind.null, (type, state) =>\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Not null\",\n `null === ${state.accessor}`\n )\n );\n this.typeGuards.register(2, ReflectionKind.null, (type, state) =>\n state.addSetter(`'undefined' === typeof ${state.accessor}`)\n );\n\n this.typeGuards.register(\n 1,\n ReflectionKind.propertySignature,\n validatePropertyOrParameter\n );\n this.typeGuards.register(\n 1,\n ReflectionKind.property,\n validatePropertyOrParameter\n );\n this.typeGuards.register(\n 1,\n ReflectionKind.parameter,\n validatePropertyOrParameter\n );\n\n this.typeGuards.register(2, ReflectionKind.number, (type, state) => {\n state.setContext({ isNumeric: isNumeric });\n state.addSetter(\n `'bigint' === typeof ${state.accessor} || 'number' === typeof ${state.accessor} || ('string' === typeof ${state.accessor} && isNumeric(${state.accessor}))`\n );\n });\n this.typeGuards.register(-0.5, ReflectionKind.number, (type, state) => {\n state.setContext({ isNumeric: isNumeric });\n state.addSetter(\n `'string' === typeof ${state.accessor} && isNumeric(${state.accessor})`\n );\n });\n this.typeGuards.register(1, ReflectionKind.number, (type, state) => {\n if (\n type.brand !== undefined &&\n type.brand >= TypeNumberBrand.integer &&\n type.brand <= TypeNumberBrand.uint32\n ) {\n state.setContext({ isInteger: isInteger });\n let check = `'number' === typeof ${state.accessor} && isInteger(${state.accessor})`;\n\n if (type.brand === TypeNumberBrand.uint8) {\n check += `&& ${state.accessor} <= 255 && ${state.accessor} >= 0`;\n } else if (type.brand === TypeNumberBrand.uint16) {\n check += `&& ${state.accessor} <= 65535 && ${state.accessor} >= 0`;\n } else if (type.brand === TypeNumberBrand.uint32) {\n check += `&& ${state.accessor} <= 4294967295 && ${state.accessor} >= 0`;\n } else if (type.brand === TypeNumberBrand.int8) {\n check += `&& ${state.accessor} <= 127 && ${state.accessor} >= -128`;\n } else if (type.brand === TypeNumberBrand.int16) {\n check += `&& ${state.accessor} <= 32767 && ${state.accessor} >= -32768`;\n } else if (type.brand === TypeNumberBrand.int32) {\n check += `&& ${state.accessor} <= 2147483647 && ${state.accessor} >= -2147483648`;\n }\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n `Not a ${type.brand === undefined ? \"number\" : TypeNumberBrand[type.brand]}`,\n check\n );\n } else {\n let check = `'number' === typeof ${state.accessor}`;\n\n if (type.brand === TypeNumberBrand.float32) {\n check += `&& ${state.accessor} <= 3.40282347e+38 && ${state.accessor} >= -3.40282347e+38`;\n }\n\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n `Not a ${type.brand === undefined ? \"number\" : TypeNumberBrand[type.brand]}`,\n check\n );\n }\n });\n\n this.typeGuards.register(2, ReflectionKind.bigint, (type, state) => {\n state.setContext({ isNumeric: isNumeric });\n state.addSetter(\n `'number' === typeof ${state.accessor} || ('string' === typeof ${state.accessor} && isNumeric(${state.accessor}))`\n );\n });\n this.typeGuards.register(-0.5, ReflectionKind.bigint, (type, state) => {\n state.setContext({ isNumeric: isNumeric });\n state.addSetter(\n `'string' === typeof ${state.accessor} && isNumeric(${state.accessor})`\n );\n });\n this.typeGuards.register(1, ReflectionKind.bigint, (type, state) =>\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Not a bigint\",\n `'bigint' === typeof ${state.accessor}`\n )\n );\n\n this.typeGuards.register(1, ReflectionKind.boolean, (type, state) =>\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Not a boolean\",\n `'boolean' === typeof ${state.accessor}`\n )\n );\n this.typeGuards.register(-0.9, ReflectionKind.boolean, (type, state) => {\n let handleNumeric = true;\n if (\n type.parent &&\n type.parent.kind === ReflectionKind.union &&\n type.parent.types.some(\n v =>\n v.kind === ReflectionKind.number || v.kind === ReflectionKind.bigint\n )\n ) {\n handleNumeric = false;\n }\n if (handleNumeric) {\n state.addSetter(\n `1 === ${state.accessor} || '1' === ${state.accessor} || 0 === ${state.accessor} || 'true' === ${state.accessor} || 'false' === ${state.accessor}`\n );\n } else {\n state.addSetter(\n `'true' === ${state.accessor} || 'false' === ${state.accessor}`\n );\n }\n });\n\n this.typeGuards.register(1, ReflectionKind.promise, (type, state) =>\n executeTemplates(state, type.type)\n );\n this.typeGuards.register(1, ReflectionKind.enum, (type, state) => {\n const matcher = state.setVariable(\n \"enumMatcher\",\n getEnumValueIndexMatcher(type)\n );\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Invalid enum member\",\n `${matcher}(${state.accessor}) >= 0`\n );\n });\n this.typeGuards.register(1, ReflectionKind.array, (type, state) =>\n typeGuardArray(type.type, state)\n );\n this.typeGuards.register(1, ReflectionKind.tuple, typeGuardTuple);\n this.typeGuards.register(1, ReflectionKind.literal, (type, state) => {\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Invalid literal\",\n `${state.setVariable(\"v\", type.literal)} === ${state.accessor}`\n );\n });\n\n this.typeGuards.register(-0.5, ReflectionKind.literal, (type, state) => {\n //loosely only works for number/bigint/boolean, not for symbols/regexp/string\n if (\n type.literal === null ||\n type.literal === undefined ||\n typeof type.literal === \"number\" ||\n typeof type.literal === \"bigint\" ||\n typeof type.literal === \"boolean\"\n ) {\n state.addSetter(\n `'string' === typeof ${state.accessor} && ${state.setVariable(\"v\", String(type.literal))} === ${state.accessor}`\n );\n }\n });\n\n this.typeGuards.register(1, ReflectionKind.regexp, (type, state) =>\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Not a RegExp\",\n `${state.accessor} instanceof RegExp`\n )\n );\n this.typeGuards.register(2, ReflectionKind.regexp, (type, state) =>\n state.addSetter(`'string' === typeof ${state.accessor}`)\n );\n this.typeGuards.register(0.5, ReflectionKind.regexp, (type, state) =>\n state.addSetter(\n `'string' === typeof ${state.accessor} && ${state.accessor}[0] === '/'`\n )\n );\n\n this.typeGuards.getRegistry(1).registerClass(Set, forwardSetToArray);\n this.typeGuards.getRegistry(1).registerClass(Map, forwardMapToArray);\n this.typeGuards\n .getRegistry(1)\n .registerClass(Date, (type, state) =>\n state.addSetterAndReportErrorIfInvalid(\n \"type\",\n \"Not a Date\",\n `${state.accessor} instanceof Date`\n )\n );\n this.typeGuards.getRegistry(0.5).registerClass(Date, (type, state) => {\n state.addSetter(\n `'string' === typeof ${state.accessor} && new Date(${state.accessor}).toString() !== 'Invalid Date'`\n );\n });\n\n //if no type is found (>1), date supports also numbers\n this.typeGuards.getRegistry(1.5).registerClass(Date, (type, state) => {\n state.addSetter(`'number' === typeof ${state.accessor}`);\n });\n\n this.typeGuards.register(1, ReflectionKind.function, (type, state) => {\n state.setContext({ isFunction, isExtendable, resolveRuntimeType });\n const t = state.setVariable(\"type\", type);\n state.addCodeForSetter(`\n if (isFunction(${state.accessor})) {\n if ('__type' in ${state.accessor}) {\n ${state.setter} = isExtendable(resolveRuntimeType(${state.accessor}), ${t});\n } else {\n ${state.setter} = true;\n }\n } else {\n if (${state.isValidation()}) ${state.assignValidationError(\"type\", \"Not a function\")}\n ${state.setter} = false;\n }\n `);\n });\n\n this.typeGuards.register(1, ReflectionKind.regexp, (type, state) =>\n state.addSetter(`${state.accessor} instanceof RegExp`)\n );\n this.typeGuards.register(2, ReflectionKind.regexp, (type, state) =>\n state.addSetter(`'string' === typeof ${state.accessor}`)\n );\n this.typeGuards\n .getRegistry(1)\n .addPostHook((type: Type, state: TemplateState) => {\n for (const validation of validationAnnotation.getAnnotations(type)) {\n const name = validation.name;\n const args = validation.args;\n\n if (name === \"function\") {\n state.setContext({ ValidationErrorItem: ValidationErrorItem });\n assertType(args[0], ReflectionKind.function);\n const validatorVar = state.setVariable(\n \"validator\",\n args[0].function\n );\n let optionVar: any = undefined;\n if (args[1]) {\n const optionParameter = args[0].parameters[2];\n if (optionParameter) {\n const option = typeToObject(args[1]);\n if (option === undefined && optionParameter.optional) {\n } else {\n const errors = validate(option, optionParameter.type);\n if (errors.length) {\n throw new Error(\n `Invalid option value given to validator function ${String(args[0].name)}, expected ${stringifyType(optionParameter)}`\n );\n }\n optionVar = state.compilerContext.reserveConst(option);\n }\n }\n }\n state.addCode(`\n {\n let error = ${validatorVar}(${state.originalAccessor}, ${state.compilerContext.reserveConst(type, \"type\")}, ${optionVar ? optionVar : \"undefined\"});\n if (error) {\n ${state.setter} = false;\n if (state.errors) state.errors.push(new ValidationErrorItem(${collapsePath(state.path)}, error.code, error.message, ${state.originalAccessor}));\n }\n }\n `);\n } else {\n const validator = validators[name];\n if (validator) {\n state.setContext({ ValidationErrorItem: ValidationErrorItem });\n const validatorVar = state.setVariable(\n \"validator\",\n validator(...args)\n );\n state.addCode(`\n {\n let error = ${validatorVar}(${state.originalAccessor}, ${state.compilerContext.reserveConst(type, \"type\")});\n if (error) {\n ${state.setter} = false;\n if (state.errors) state.errors.push(new ValidationErrorItem(${collapsePath(state.path)}, error.code, error.message, ${state.originalAccessor}));\n }\n }\n `);\n }\n }\n }\n });\n\n this.typeGuards.register(1, ReflectionKind.union, handleUnion);\n this.typeGuards.registerBinary(1, (type, state) => {\n state.addSetter(\n `${state.accessor} instanceof ${state.setVariable(\"classType\", type.classType)}`\n );\n });\n this.typeGuards.registerBinary(10, (type, state) => {\n state.addSetter(`'string' === typeof ${state.accessor}`);\n });\n }\n}\n\nfunction assignAccessorTemplate(type: Type, state: TemplateState) {\n state.addSetter(state.accessor);\n}\n\nexport const serializableKinds: ReflectionKind[] = [\n ReflectionKind.any,\n ReflectionKind.unknown,\n ReflectionKind.object,\n ReflectionKind.string,\n ReflectionKind.number,\n ReflectionKind.boolean,\n ReflectionKind.symbol,\n ReflectionKind.bigint,\n ReflectionKind.null,\n ReflectionKind.undefined,\n ReflectionKind.literal,\n ReflectionKind.templateLiteral,\n ReflectionKind.property,\n ReflectionKind.method,\n ReflectionKind.function,\n ReflectionKind.promise,\n ReflectionKind.class,\n ReflectionKind.enum,\n ReflectionKind.union,\n ReflectionKind.array,\n ReflectionKind.tuple,\n ReflectionKind.regexp,\n ReflectionKind.objectLiteral\n];\n\nexport class EmptySerializer extends Serializer {\n constructor(name: string = \"empty\") {\n super(name);\n }\n\n protected registerValidators() {}\n\n protected registerSerializers() {\n for (const kind of serializableKinds)\n this.serializeRegistry.register(kind, assignAccessorTemplate);\n for (const kind of serializableKinds)\n this.deserializeRegistry.register(kind, assignAccessorTemplate);\n\n this.deserializeRegistry.register(\n ReflectionKind.class,\n serializeObjectLiteral\n );\n this.serializeRegistry.register(\n ReflectionKind.class,\n serializeObjectLiteral\n );\n this.deserializeRegistry.register(\n ReflectionKind.objectLiteral,\n serializeObjectLiteral\n );\n this.serializeRegistry.register(\n ReflectionKind.objectLiteral,\n serializeObjectLiteral\n );\n\n this.deserializeRegistry.register(ReflectionKind.array, serializeArray);\n this.serializeRegistry.register(ReflectionKind.array, serializeArray);\n\n this.deserializeRegistry.register(ReflectionKind.tuple, serializeTuple);\n this.serializeRegistry.register(ReflectionKind.tuple, serializeTuple);\n\n this.deserializeRegistry.register(ReflectionKind.union, handleUnion);\n this.serializeRegistry.register(ReflectionKind.union, handleUnion);\n\n this.serializeRegistry.register(\n ReflectionKind.propertySignature,\n serializePropertyOrParameter\n );\n this.serializeRegistry.register(\n ReflectionKind.property,\n serializePropertyOrParameter\n );\n this.serializeRegistry.register(\n ReflectionKind.parameter,\n serializePropertyOrParameter\n );\n this.deserializeRegistry.register(\n ReflectionKind.propertySignature,\n serializePropertyOrParameter\n );\n this.deserializeRegistry.register(\n ReflectionKind.property,\n serializePropertyOrParameter\n );\n this.deserializeRegistry.register(\n ReflectionKind.parameter,\n serializePropertyOrParameter\n );\n\n this.serializeRegistry.registerBinary(assignAccessorTemplate);\n this.serializeRegistry.registerClass(Date, assignAccessorTemplate);\n this.serializeRegistry.registerClass(Map, assignAccessorTemplate);\n this.serializeRegistry.registerClass(Set, assignAccessorTemplate);\n this.deserializeRegistry.registerBinary(assignAccessorTemplate);\n this.deserializeRegistry.registerClass(Date, assignAccessorTemplate);\n this.deserializeRegistry.registerClass(Map, assignAccessorTemplate);\n this.deserializeRegistry.registerClass(Set, assignAccessorTemplate);\n }\n}\n\nexport const serializer: Serializer = new Serializer();\n","/*\n * Deepkit Framework\n * Copyright (C) 2021 Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport { CompilerContext, isObject, toFastProperties } from '@deepkit/core';\nimport { typeSettings, UnpopulatedCheck } from './core.js';\nimport { ReflectionClass, ReflectionProperty } from './reflection/reflection.js';\nimport { ContainerAccessor, executeTemplates, noopTemplate, serializer, Serializer, TemplateRegistry, TemplateState } from './serializer.js';\nimport { PrimaryKeyFields, ReflectionKind } from './reflection/type.js';\n\nfunction createJITConverterForSnapshot(\n schema: ReflectionClass<any>,\n properties: ReflectionProperty[],\n registry: TemplateRegistry,\n) {\n const compiler = new CompilerContext();\n const setProperties: string[] = [];\n const state = new TemplateState('', '', compiler, registry);\n\n for (const property of properties) {\n // if (isExcluded(schema, property.name, 'json')) continue;\n const accessor = new ContainerAccessor('_value', JSON.stringify(property.getNameAsString()));\n const setter = new ContainerAccessor('_result', JSON.stringify(property.getNameAsString()));\n\n if (property.isReference()) {\n const referenceCode: string[] = [];\n\n for (const pk of property.getResolvedReflectionClass().getPrimaries()) {\n const deepAccessor = new ContainerAccessor(accessor, JSON.stringify(pk.getNameAsString()));\n const deepSetter = new ContainerAccessor(setter, JSON.stringify(pk.getNameAsString()));\n\n referenceCode.push(`\n //createJITConverterForSnapshot ${property.getNameAsString()}->${pk.getNameAsString()} class:snapshot:${property.type.kind} reference\n ${executeTemplates(state.fork(deepSetter, deepAccessor), pk.type)}\n `);\n }\n\n setProperties.push(`\n //createJITConverterForSnapshot ${property.getNameAsString()} class:snapshot:${property.getKind()} reference\n if (undefined === ${accessor} || null === ${accessor}) {\n ${setter} = null;\n } else {\n ${setter} = {};\n ${referenceCode.join('\\n')}\n }\n `);\n continue;\n }\n\n setProperties.push(`\n //createJITConverterForSnapshot ${property.getNameAsString()} class:snapshot:${property.getKind()}\n if (undefined === ${accessor} || null === ${accessor}) {\n ${setter} = null;\n } else {\n ${executeTemplates(state.fork(setter, accessor), property.type)}\n }\n `);\n }\n\n let circularCheckBeginning = '';\n let circularCheckEnd = '';\n\n if (schema.hasCircularReference()) {\n circularCheckBeginning = `\n if (state._stack) {\n if (state._stack.includes(_value)) return undefined;\n } else {\n state._stack = [];\n }\n state._stack.push(_value);\n `;\n circularCheckEnd = `state._stack.pop();`;\n }\n\n const functionCode = `\n var _result = {};\n state = state || {};\n ${circularCheckBeginning}\n var oldUnpopulatedCheck = typeSettings.unpopulatedCheck;\n typeSettings.unpopulatedCheck = UnpopulatedCheckNone;\n ${setProperties.join('\\n')}\n typeSettings.unpopulatedCheck = oldUnpopulatedCheck;\n ${circularCheckEnd}\n return _result;\n `;\n\n compiler.context.set('typeSettings', typeSettings);\n compiler.context.set('UnpopulatedCheckNone', UnpopulatedCheck.None);\n\n return compiler.build(functionCode, '_value', 'state');\n}\n\nfunction cloneValueDeep(value: any): any {\n if (Array.isArray(value)) return value.map(v => cloneValueDeep(v));\n if (value instanceof Date) return new Date(value.getTime());\n if (value instanceof Set) return new Set(value);\n if (value instanceof Map) return new Map(value);\n if (value instanceof ArrayBuffer) return value.slice(0);\n if (value instanceof Uint8Array) return new Uint8Array(value);\n if (value instanceof Uint16Array) return new Uint16Array(value);\n if (value instanceof Uint32Array) return new Uint32Array(value);\n if (value instanceof Int8Array) return new Int8Array(value);\n if (value instanceof Int16Array) return new Int16Array(value);\n if (value instanceof Int32Array) return new Int32Array(value);\n if (value instanceof Float32Array) return new Float32Array(value);\n if (value instanceof Float64Array) return new Float64Array(value);\n if (value instanceof BigInt64Array) return new BigInt64Array(value);\n if (value instanceof BigUint64Array) return new BigUint64Array(value);\n if (value instanceof DataView) return new DataView(value.buffer.slice(0));\n if (value instanceof RegExp) return new RegExp(value.source, value.flags);\n if (isObject(value)) {\n const copy: any = {};\n for (const i in value) {\n copy[i] = cloneValueDeep(value[i]);\n }\n return copy;\n }\n return value;\n}\n\nclass SnapshotSerializer extends Serializer {\n name = 'snapshot';\n\n protected registerSerializers() {\n super.registerSerializers();\n\n //we keep bigint as is\n this.serializeRegistry.register(ReflectionKind.bigint, noopTemplate);\n this.deserializeRegistry.register(ReflectionKind.bigint, noopTemplate);\n\n //any is cloned as is\n this.serializeRegistry.register(ReflectionKind.any, (type, state) => {\n state.setContext({ cloneValueDeep });\n state.addSetter(`cloneValueDeep(${state.accessor})`);\n });\n }\n}\n\n\nexport const snapshotSerializer = new SnapshotSerializer;\n\n/**\n * Creates a new JIT compiled function to convert the class instance to a snapshot.\n * A snapshot is essentially the class instance as `plain` serialization while references are\n * stored only as their primary keys.\n *\n * Generated function is cached.\n */\nexport function getConverterForSnapshot(\n reflectionClass: ReflectionClass<any>\n): (value: any) => any {\n const jit = reflectionClass.getJitContainer();\n if (jit.snapshotConverter) return jit.snapshotConverter;\n\n jit.snapshotConverter = createJITConverterForSnapshot(reflectionClass, reflectionClass.getProperties(), snapshotSerializer.serializeRegistry);\n toFastProperties(jit);\n return jit.snapshotConverter;\n}\n\n/**\n * Creates a snapshot using getConverterForSnapshot().\n */\nexport function createSnapshot<T>(reflectionClass: ReflectionClass<T>, item: T) {\n return getConverterForSnapshot(reflectionClass)(item);\n}\n\n/**\n * Extracts the primary key of a snapshot and converts to class type.\n */\nexport function getPrimaryKeyExtractor<T>(\n reflectionClass: ReflectionClass<T>\n): (value: any) => Partial<T> {\n const jit = reflectionClass.getJitContainer();\n if (jit.primaryKey) return jit.primaryKey;\n\n jit.primaryKey = createJITConverterForSnapshot(reflectionClass, reflectionClass.getPrimaries(), snapshotSerializer.deserializeRegistry);\n toFastProperties(jit);\n return jit.primaryKey;\n}\n\n/**\n * Creates a primary key hash generator that takes an item from any format\n * converts it to class format, then to plain, then uses the primitive values to create a string hash.\n *\n * This function is designed to work on the plain values (db records or json values)\n */\nexport function getPrimaryKeyHashGenerator(\n reflectionClass: ReflectionClass<any>,\n serializerToUse: Serializer = serializer\n): (value: any) => string {\n const jit = reflectionClass.getJitContainer();\n\n if (!jit.pkHash) {\n jit.pkHash = {};\n toFastProperties(jit);\n }\n\n if (jit.pkHash[serializerToUse.name]) return jit.pkHash[serializerToUse.name];\n\n jit.pkHash[serializerToUse.name] = createPrimaryKeyHashGenerator(reflectionClass, serializerToUse);\n toFastProperties(jit.pkHash);\n return jit.pkHash[serializerToUse.name];\n}\n\n// export function getForeignKeyHash(row: any, property: PropertySchema): string {\n// const foreignSchema = property.getResolvedClassSchema();\n// return getPrimaryKeyHashGenerator(foreignSchema)(row[property.name]);\n// }\n\nfunction simplePrimaryKeyHash(value: any): string {\n return '\\0' + value;\n}\n\nexport function getSimplePrimaryKeyHashGenerator(reflectionClass: ReflectionClass<any>) {\n const primary = reflectionClass.getPrimary();\n return (data: PrimaryKeyFields<any>) => simplePrimaryKeyHash(data[primary.name]);\n}\n\nfunction createPrimaryKeyHashGenerator(\n reflectionClass: ReflectionClass<any>,\n serializer: Serializer\n) {\n const context = new CompilerContext();\n const setProperties: string[] = [];\n context.context.set('isObject', isObject);\n\n const state = new TemplateState('', '', context, serializer.serializeRegistry);\n\n for (const property of reflectionClass.getPrimaries()) {\n // if (property.isParentReference) continue;\n\n const accessor = new ContainerAccessor('_value', JSON.stringify(property.getNameAsString()));\n\n if (property.isReference()) {\n const referenceCode: string[] = [];\n\n for (const pk of property.getResolvedReflectionClass().getPrimaries()) {\n if (pk.type.kind === ReflectionKind.class && pk.type.types.length) {\n throw new Error(`Class as primary key (${property.getResolvedReflectionClass().getClassName()}.${pk.getNameAsString()}) is not supported`);\n }\n\n const deepAccessor = new ContainerAccessor(accessor, JSON.stringify(pk.getNameAsString()));\n\n referenceCode.push(`\n //getPrimaryKeyExtractor ${property.getNameAsString()}->${pk.getNameAsString()} class:snapshot:${property.getKind()} reference\n lastValue = '';\n if (${deepAccessor} !== null && ${deepAccessor} !== undefined) {\n ${executeTemplates(state.fork('lastValue', deepAccessor).forRegistry(serializer.deserializeRegistry), pk.type)}\n ${executeTemplates(state.fork('lastValue', 'lastValue'), pk.type)}\n }\n _result += '\\\\0' + lastValue;\n `);\n }\n\n setProperties.push(`\n //getPrimaryKeyExtractor ${property.getNameAsString()} class:snapshot:${property.getKind()} reference\n if (undefined !== ${accessor} && null !== ${accessor}) {\n if (isObject(${accessor})) {\n ${referenceCode.join('\\n')}\n } else {\n //might be a primary key directly\n lastValue = '';\n ${executeTemplates(state.fork('lastValue', accessor).forRegistry(serializer.deserializeRegistry), property.getResolvedReflectionClass().getPrimary().type)}\n ${executeTemplates(state.fork('lastValue', 'lastValue'), property.getResolvedReflectionClass().getPrimary().type)}\n _result += '\\\\0' + lastValue;\n }\n } else {\n _result += '\\\\0';\n }\n `);\n continue;\n }\n\n if (property.type.kind === ReflectionKind.class && property.type.types.length) {\n throw new Error(`Class as primary key (${reflectionClass.getClassName()}.${property.getNameAsString()}) is not supported`);\n }\n\n setProperties.push(`\n //getPrimaryKeyHashGenerator ${property.getNameAsString()} class:plain:${property.getKind()}\n lastValue = '';\n if (${accessor} !== null && ${accessor} !== undefined) {\n ${executeTemplates(state.fork('lastValue', accessor).forRegistry(serializer.deserializeRegistry), property.type)}\n ${executeTemplates(state.fork('lastValue', 'lastValue'), property.type)}\n }\n _result += '\\\\0' + lastValue;\n `);\n }\n\n let circularCheckBeginning = '';\n let circularCheckEnd = '';\n\n if (reflectionClass.hasCircularReference()) {\n circularCheckBeginning = `\n if (state._stack) {\n if (state._stack.includes(_value)) return undefined;\n } else {\n state._stack = [];\n }\n state._stack.push(_value);\n `;\n circularCheckEnd = `state._stack.pop();`;\n }\n\n const functionCode = `\n var _result = '';\n var lastValue;\n state = state || {};\n ${circularCheckBeginning}\n ${setProperties.join('\\n')}\n ${circularCheckEnd}\n return _result;\n `;\n\n return context.build(functionCode, '_value', 'state');\n}\n","/*\n * Deepkit Framework\n * Copyright (C) 2021 Deepkit UG, Marc J. Schmidt\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the MIT License.\n *\n * You should have received a copy of the MIT License along with this program.\n */\n\nimport { CompilerContext, empty, toFastProperties } from '@deepkit/core';\nimport { Changes, changeSetSymbol, ItemChanges } from './changes.js';\nimport { getConverterForSnapshot } from './snapshot.js';\nimport { ReflectionClass } from './reflection/reflection.js';\nimport { ContainerAccessor, getIndexCheck, sortSignatures, TemplateRegistry, TemplateState } from './serializer.js';\nimport { referenceAnnotation, ReflectionKind, Type, TypeIndexSignature } from './reflection/type.js';\n\nfunction genericEqualArray(a: any[], b: any[]): boolean {\n if (a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n if (!genericEqual(a[i], b[i])) return false;\n }\n\n return true;\n}\n\nfunction genericEqualObject(a: { [name: string]: any }, b: { [name: string]: any }): boolean {\n for (let i in a) {\n if (!a.hasOwnProperty(i)) continue;\n if (!genericEqual(a[i], b[i])) return false;\n }\n\n //is there a faster way?\n for (let i in b) {\n if (!b.hasOwnProperty(i)) continue;\n if (!genericEqual(a[i], b[i])) return false;\n }\n\n return true;\n}\n\n/**\n * This is a comparator function for the snapshots. They are either string, number, boolean, array, or objects.\n * No date, moment, or custom classes involved here.\n */\nexport function genericEqual(a: any, b: any): boolean {\n //is array, the fast way\n const aIsArray = a && 'string' !== typeof a && 'function' === a.slice && 'number' === typeof a.length;\n const bIsArray = b && 'string' !== typeof b && 'function' === b.slice && 'number' === typeof b.length;\n if (aIsArray) return bIsArray ? genericEqualArray(a, b) : false;\n if (bIsArray) return aIsArray ? genericEqualArray(a, b) : false;\n\n const aIsObject = 'object' === typeof a && a !== null;\n const bIsObject = 'object' === typeof b && b !== null;\n if (aIsObject) return bIsObject ? genericEqualObject(a, b) : false;\n if (aIsObject) return bIsObject ? genericEqualObject(a, b) : false;\n\n return a === b;\n}\n\nfunction createJITChangeDetectorForSnapshot(schema: ReflectionClass<any>, stateIn?: TemplateState): (lastSnapshot: any, currentSnapshot: any) => ItemChanges<any> {\n const compiler = new CompilerContext();\n const state = new TemplateState('', '', compiler, stateIn ? stateIn.registry : new TemplateRegistry(), undefined, stateIn ? stateIn.jitStack : undefined);\n state.setContext({\n genericEqual, empty\n });\n const lines: string[] = [];\n\n function has(accessor: string): string {\n return `(changeSet.$inc && ${accessor} in changeSet.$inc) || (changeSet.$unset && ${accessor} in changeSet.$unset)`;\n }\n\n function getComparator(type: Type, last: ContainerAccessor, current: ContainerAccessor, accessor: ContainerAccessor, changedName: string, onChanged: string, state: TemplateState): string {\n if (type.kind === ReflectionKind.array) {\n const l = compiler.reserveName('l');\n\n const lastAccessor = new ContainerAccessor(last, l);\n const currentAccessor = new ContainerAccessor(current, l);\n const itemAccessor = new ContainerAccessor(accessor, l);\n return `\n if (!${has(changedName)}) {\n if (!${current} && !${last}) {\n\n } else if ((${current} && !${last}) || (!${current} && ${last})) {\n changes[${changedName}] = item[${changedName}];\n ${onChanged}\n } else if (${current}.length !== ${last}.length) {\n changes[${changedName}] = item[${changedName}];\n ${onChanged}\n } else {\n let ${l} = ${last}.length;\n ${onChanged ? '' : 'root:'}\n while (${l}--) {\n ${getComparator(type.type, lastAccessor, currentAccessor, itemAccessor, changedName, 'break root;', state)}\n }\n }\n }\n `;\n\n // } else if (type.isMap || type.isPartial) {\n // compiler.context.set('getObjectKeysSize', getObjectKeysSize);\n // const i = reserveVariable(compiler.context, 'i');\n // return `\n // if (!${has(changedName)}) {\n // if (!${current} && !${last}) {\n //\n // } else if ((${current} && !${last}) || (!${current} && ${last})) {\n // changes[${changedName}] = item[${changedName}];\n // ${onChanged}\n // } else if (getObjectKeysSize(${current}) !== getObjectKeysSize(${last})) {\n // changes[${changedName}] = item[${changedName}];\n // ${onChanged}\n // } else {\n // ${onChanged ? '' : 'root:'}\n // for (let ${i} in ${last}) {\n // if (!${last}.hasOwnProperty(${i})) continue;\n // ${getComparator(type.getSubType(), `${last}[${i}]`, `${current}[${i}]`, `${accessor}[${i}]`, changedName, 'break root;', jitStack)}\n // }\n // }\n // }\n // `;\n } else if ((type.kind === ReflectionKind.class || type.kind === ReflectionKind.objectLiteral) && type.types.length) {\n const classSchema = ReflectionClass.from(type);\n\n if (referenceAnnotation.getFirst(type) !== undefined) {\n const checks: string[] = [];\n\n for (const primaryField of classSchema.getPrimaries()) {\n const name = JSON.stringify(primaryField.getNameAsString());\n const lastAccessor = new ContainerAccessor(last, name);\n const currentAccessor = new ContainerAccessor(current, name);\n const itemAccessor = new ContainerAccessor(accessor, name);\n checks.push(`\n ${getComparator(primaryField.type, lastAccessor, currentAccessor, itemAccessor, changedName, onChanged, state)}\n `);\n }\n\n return `\n if (!${has(changedName)}) {\n if (!${current} && !${last}) {\n\n } else if ((${current} && !${last}) || (!${current} && ${last})) {\n changes[${changedName}] = item[${changedName}];\n ${onChanged}\n } else {\n ${checks.join('\\n')}\n }\n }\n `;\n }\n\n const jitChangeDetectorThis = compiler.reserveVariable('jitChangeDetector', state.jitStack.getOrCreate(state.registry, type, () => {\n return createJITChangeDetectorForSnapshot(classSchema, state);\n }));\n\n return `\n if (!${has(changedName)}) {\n if (!${current} && !${last}) {\n\n } else if ((${current} && !${last}) || (!${current} && ${last})) {\n changes[${changedName}] = item[${changedName}];\n ${onChanged}\n } else {\n const thisChanged = ${jitChangeDetectorThis}.fn(${last}, ${current}, ${accessor});\n if (!empty(thisChanged)) {\n changes[${changedName}] = item[${changedName}];\n ${onChanged}\n }\n }\n }\n `;\n } else if (type.kind === ReflectionKind.any || type.kind === ReflectionKind.never || type.kind === ReflectionKind.union) {\n return `\n if (!${has(changedName)}) {\n if (!genericEqual(${last}, ${current})) {\n changes[${changedName}] = item[${changedName}];\n ${onChanged}\n }\n }\n `;\n } else {\n //binary, date, boolean, etc are encoded as simple JSON objects (number, boolean, or string) primitives\n return `\n if (!${has(changedName)}) {\n if (${last} !== ${current}) {\n changes[${changedName}] = item[${changedName}];\n ${onChanged}\n }\n }\n `;\n }\n }\n\n const existing: string[] = [];\n\n for (const property of schema.getProperties()) {\n // if (property.isParentReference) continue;\n if (property.isBackReference()) continue;\n const name = JSON.stringify(property.getNameAsString());\n existing.push(name);\n\n const lastAccessor = new ContainerAccessor('last', name);\n const currentAccessor = new ContainerAccessor('current', name);\n const itemAccessor = new ContainerAccessor('item', name);\n lines.push(getComparator(property.type, lastAccessor, currentAccessor, itemAccessor, JSON.stringify(property.getNameAsString()), '', state));\n }\n\n for (const t of schema.type.types) {\n\n }\n\n const signatures = (schema.type.types as Type[]).filter(v => v.kind === ReflectionKind.indexSignature) as TypeIndexSignature[];\n if (signatures.length) {\n const i = compiler.reserveName('i');\n const existingCheck = existing.map(v => `${i} === ${v}`).join(' || ') || 'false';\n const signatureLines: string[] = [];\n sortSignatures(signatures);\n\n const lastAccessor = new ContainerAccessor('last', i);\n const currentAccessor = new ContainerAccessor('current', i);\n const itemAccessor = new ContainerAccessor('item', i);\n\n for (const signature of signatures) {\n signatureLines.push(`else if (${getIndexCheck(state.compilerContext, i, signature.index)}) {\n ${getComparator(signature.type, lastAccessor, currentAccessor, itemAccessor, i, '', state)}\n }`);\n }\n\n //the index signature type could be: string, number, symbol.\n //or a literal when it was constructed by a mapped type.\n lines.push(`\n for (const ${i} in current) {\n if (!current.hasOwnProperty(${i})) continue;\n if (${existingCheck}) continue;\n if (false) {} ${signatureLines.join(' ')}\n }\n\n for (const ${i} in last) {\n if (!last.hasOwnProperty(${i})) continue;\n if (!current.hasOwnProperty(${i})) {\n changes[${i}] = item[${i}];\n break;\n }\n }\n `);\n }\n\n compiler.context.set('changeSetSymbol', changeSetSymbol);\n compiler.context.set('ItemChanges', ItemChanges);\n\n const functionCode = `\n var changeSet = item[changeSetSymbol] || new ItemChanges(undefined, item);\n var changes = {};\n ${lines.join('\\n')}\n changeSet.mergeSet(changes);\n return changeSet.empty ? undefined : changeSet;\n `;\n\n // console.log('functionCode', functionCode);\n\n try {\n const fn = compiler.build(functionCode, 'last', 'current', 'item');\n // prepared(fn);\n return fn;\n } catch (error) {\n console.log('functionCode', functionCode);\n throw error;\n }\n}\n\nconst changeDetectorSymbol = Symbol('changeDetector');\n\nexport function getChangeDetector<T extends object>(classSchema: ReflectionClass<T>): (last: any, current: any, item: T) => ItemChanges<T> | undefined {\n const jit = classSchema.getJitContainer();\n if (jit[changeDetectorSymbol]) return jit[changeDetectorSymbol];\n\n jit[changeDetectorSymbol] = createJITChangeDetectorForSnapshot(classSchema);\n toFastProperties(jit);\n\n return jit[changeDetectorSymbol];\n}\n\nexport function buildChanges<T extends object>(classSchema: ReflectionClass<T>, lastSnapshot: any, item: T): Changes<T> {\n const currentSnapshot = getConverterForSnapshot(classSchema)(item);\n const detector = getChangeDetector(classSchema);\n return detector(lastSnapshot, currentSnapshot, item) as Changes<T> || new Changes<T>();\n}\n","import {\n binaryTypes,\n ReflectionKind,\n resolveTypeMembers,\n Type\n} from \"./reflection/type.js\";\n\n/**\n * Returns a sensible default value for a given type.\n * Sensible means it satisfies the type checker, but not necessarily attached validators.\n */\nexport function defaultValue(type: Type): any {\n switch (type.kind) {\n case ReflectionKind.void:\n case ReflectionKind.any:\n case ReflectionKind.never:\n case ReflectionKind.unknown:\n case ReflectionKind.undefined:\n return undefined;\n case ReflectionKind.null:\n return null;\n case ReflectionKind.string:\n return \"\";\n case ReflectionKind.number:\n return 0;\n case ReflectionKind.boolean:\n return false;\n case ReflectionKind.bigint:\n return BigInt(0);\n case ReflectionKind.object:\n return {};\n case ReflectionKind.union: {\n if (type.types.length) return defaultValue(type.types[0]);\n break;\n }\n case ReflectionKind.promise:\n return defaultValue(type.type);\n case ReflectionKind.array:\n return [];\n case ReflectionKind.rest: {\n return [defaultValue(type.type)];\n }\n case ReflectionKind.tupleMember: {\n if (type.optional) return;\n return defaultValue(type.type);\n }\n case ReflectionKind.tuple: {\n const result: any[] = [];\n for (const sub of type.types) {\n const value = defaultValue(sub);\n if (value === undefined) continue;\n if (sub.type.kind === ReflectionKind.rest) {\n result.push(...value);\n } else {\n result.push(value);\n }\n }\n\n return result;\n }\n case ReflectionKind.enum: {\n return type.values[0];\n }\n case ReflectionKind.objectLiteral: {\n const result: any = {};\n const types = resolveTypeMembers(type);\n for (const type of types) {\n if (type.kind === ReflectionKind.propertySignature) {\n if (type.optional) {\n continue;\n }\n\n result[type.name] = defaultValue(type.type);\n }\n }\n\n return result;\n }\n case ReflectionKind.class: {\n if (type.classType === Date) {\n return new Date();\n }\n if (type.classType === Set) {\n return new Set();\n }\n if (type.classType === Map) {\n return new Map();\n }\n if (binaryTypes.includes(type.classType)) {\n return new type.classType();\n }\n\n const result: any = {};\n const types = resolveTypeMembers(type);\n for (const type of types) {\n if (type.kind === ReflectionKind.property) {\n if (type.optional) {\n continue;\n }\n\n result[type.name] = defaultValue(type.type);\n }\n }\n\n return result;\n }\n }\n}\n","import { ExtractClassType } from '@deepkit/core';\nimport { ClassType } from '@deepkit/core';\nimport { AbstractClassType } from '@deepkit/core';\nimport { ReflectionClass } from './reflection/reflection.js';\n\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never;\n\n/**\n * Function to mixin multiple classes together and create a new class, which can be extended from.\n *\n * The first entry of the mixin() call will be used as base class.\n *\n * @example\n * ```typescript\n *\n * class Timestampable {\n * createdAt: Date = new Date;\n * updatedAt: Date = new Date;\n * }\n *\n * class SoftDeleted {\n * deletedAt?: Date;\n * deletedBy?: string;\n * }\n *\n * class User extends mixin(Timestampable, SoftDeleted) {\n * id: number = 0;\n * constructor(public username: string) {}\n * }\n * ```\n */\nexport function mixin<T extends AbstractClassType[]>(...classTypes: T): ClassType<UnionToIntersection<ExtractClassType<T[number]>>> {\n const base = classTypes.shift();\n if (!base) throw new Error('No classes given');\n\n const constructors: Function[] = [];\n /**\n * @reflection never\n */\n const newClassType: any = class extends base {\n constructor(...args: any[]) {\n super();\n for (const c of constructors) {\n c.call(this, ...args);\n }\n }\n };\n const schema = ReflectionClass.from(newClassType);\n\n for (const classType of classTypes) {\n const foreignSchema = ReflectionClass.from(classType);\n\n for (const i of Object.getOwnPropertyNames(classType.prototype)) {\n if (i === 'constructor') continue;\n newClassType.prototype[i] = classType.prototype[i];\n }\n\n for (const prop of foreignSchema.getProperties()) {\n schema.registerProperty(prop.clone());\n }\n\n constructors.push(function (this: any, ...args: any[]) {\n const item = new (classType as any)(...args);\n for (const prop of foreignSchema.getProperties()) {\n this[prop.name] = item[prop.name];\n }\n });\n }\n //make sure the processor picks up the newly computed type object instead of computing it itself\n newClassType.__type = [];\n newClassType.__type.__type = schema.type;\n return newClassType as any;\n}\n","import { getTypeJitContainer, ReflectionKind, Type } from './reflection/type.js';\nimport { CompilerContext, toFastProperties } from '@deepkit/core';\nimport { ReceiveType, resolveReceiveType } from './reflection/reflection.js';\nimport { getIndexCheck, JitStack } from './serializer.js';\n\nexport type Resolver = (path: string) => Type | undefined;\n\nfunction pathResolverCode(type: Type, compilerContext: CompilerContext, jitStack: JitStack): string {\n const typeVar = compilerContext.reserveVariable('type', type);\n\n if (type.kind === ReflectionKind.array) {\n return `\n {\n const dotIndex = path.indexOf('.');\n if (dotIndex === -1) return ${compilerContext.reserveVariable('type', type.type)};\n const pathName = dotIndex === -1 ? path : path.substr(0, dotIndex);\n path = dotIndex === -1 ? '' : path.substr(dotIndex + 1);\n ${pathResolverCode(type.type, compilerContext, jitStack)}\n }\n `;\n } else if (type.kind === ReflectionKind.tupleMember) {\n return `\n if (!path) return ${compilerContext.reserveVariable('type', type)};\n ${pathResolverCode(type.type, compilerContext, jitStack)};\n `;\n } else if (type.kind === ReflectionKind.tuple) {\n const cases: string[] = [];\n for (let i = 0; i < type.types.length; i++) {\n cases.push(`\n case \"${i}\": {\n ${pathResolverCode(type.types[i], compilerContext, jitStack)}\n }\n `);\n }\n\n return `\n {\n const dotIndex = path.indexOf('.');\n const segment = dotIndex === -1 ? path : path.substr(0, dotIndex);\n path = dotIndex === -1 ? '' : path.substr(dotIndex + 1);\n switch (segment) {\n ${cases.join('\\n')}\n default: {\n return undefined;\n }\n }\n }\n `;\n } else if (type.kind === ReflectionKind.class && type.classType === Set) {\n } else if (type.kind === ReflectionKind.class && type.classType === Map) {\n } else if (type.kind === ReflectionKind.union) {\n //todo: which type will be picked? return union?\n } else if (type.kind === ReflectionKind.class || type.kind === ReflectionKind.objectLiteral) {\n const jit = compilerContext.reserveVariable('jit', jitStack.getOrCreate(undefined, type, () => pathResolver(type, jitStack)));\n return `return ${jit}.fn(path);`;\n }\n\n return `return ${typeVar}`;\n}\n\nexport function resolvePath<T>(path: string, type?: ReceiveType<T>): Type {\n type = resolveReceiveType(type);\n const resolver = pathResolver(type);\n const t = resolver(path);\n if (!t) throw new Error(`No type found for path ${path} in ${type.typeName}`);\n return t;\n}\n\nexport function pathResolver<T>(type?: ReceiveType<T>, jitStack: JitStack = new JitStack()): Resolver {\n type = resolveReceiveType(type);\n const jit = getTypeJitContainer(type);\n if (jit.pathResolver) return jit.pathResolver;\n\n if (type.kind === ReflectionKind.objectLiteral || type.kind === ReflectionKind.class) {\n const compilerContext = new CompilerContext();\n const lines: string[] = [];\n const defaultCase: string[] = [];\n\n for (const member of type.types) {\n if (member.kind === ReflectionKind.propertySignature || member.kind === ReflectionKind.property) {\n if ('symbol' === typeof member.name) continue;\n lines.push(`\n case ${JSON.stringify(member.name)}: {\n if (path === '') return ${compilerContext.reserveVariable('type', member)};\n ${pathResolverCode(member.type, compilerContext, jitStack)}\n }`);\n } else if (member.kind === ReflectionKind.indexSignature) {\n const checkValid = compilerContext.reserveName('check');\n defaultCase.push(`else if (${getIndexCheck(compilerContext, 'pathName', member.index)}) {\n let ${checkValid} = false;\n if (!${checkValid}) {\n ${pathResolverCode(member.type, compilerContext, jitStack)}\n }\n }`);\n }\n }\n\n const code = `\n const dotIndex = path.indexOf('.');\n const pathName = dotIndex === -1 ? path : path.substr(0, dotIndex);\n path = dotIndex === -1 ? '' : path.substr(dotIndex + 1);\n\n if (!pathName) return ${compilerContext.reserveVariable('type', type)};\n\n switch(pathName) {\n ${lines.join('\\n')}\n default: {\n if (false) {} ${defaultCase.join('\\n')}\n }\n }\n `;\n\n jit.pathResolver = compilerContext.build(code, 'path');\n toFastProperties(jit);\n\n return jit.pathResolver;\n }\n\n throw new Error(`pathResolver requires TypeClass or TypeObjectLiteral`);\n}\n","import { ClassType, isArray, isFunction } from \"@deepkit/core\";\nimport { binaryTypes, ReflectionKind, Type } from \"./reflection/type.js\";\n\ninterface RegistryDecorator<T> {\n predicate: (type: Type) => boolean;\n v: T;\n}\n\nexport class TypeRegistry<T> {\n protected results: { [kind in ReflectionKind]?: T } = {};\n public classes = new Map<ClassType, T>();\n protected decorators: RegistryDecorator<T>[] = [];\n\n clear(): void {\n this.results = {};\n this.classes.clear();\n }\n\n get(type: Type): T | undefined {\n for (const d of this.decorators) {\n if (d.predicate(type)) return d.v;\n }\n\n if (type.kind === ReflectionKind.class) {\n const classResult = this.classes.get(type.classType);\n if (classResult) return classResult;\n if (\n type.classType === Set ||\n type.classType === Map ||\n binaryTypes.includes(type.classType)\n )\n return undefined;\n }\n return this.results[type.kind];\n }\n\n decorator(predicate: (type: Type) => boolean, v: T): void {\n this.decorators.push({ predicate, v });\n }\n\n /**\n * Registers a template for all binary classes: ArrayBuffer, Uint8Array, Int8Array, etc.\n */\n setBinary(v: T): void {\n for (const classType of binaryTypes) this.setClass(classType, v);\n }\n\n setNumeric(v: T): void {\n this.set([ReflectionKind.number, ReflectionKind.bigint], v);\n }\n\n /**\n * Registers a template for a given class type.\n *\n * As soon as a single template has registered for the given classType the template registry\n * only returns templates for this particular classType and omits all general purpose ReflectionKind.class templates for this particular classType.\n */\n setClass(classType: ClassType, v: T): void {\n this.classes.set(classType, v);\n }\n\n /**\n * Removes all registered templates.\n */\n remove(kind: ReflectionKind): void {\n this.results[kind] = undefined;\n }\n\n /**\n * Registers a new template and replaces all existing (added via register,prepend,append).\n */\n set(\n kind: ReflectionKind | ReflectionKind[] | ((type: Type) => boolean),\n v: T\n ): void {\n if (isFunction(kind)) return this.decorator(kind, v);\n kind = isArray(kind) ? kind : [kind];\n for (const k of kind) this.results[k] = v;\n }\n}\n","import { getClassTypeFromInstance } from '@deepkit/core';\nimport { ReceiveType, resolveReceiveType } from './reflection/reflection.js';\nimport {\n getPartialSerializeFunction,\n getSerializeFunction,\n NamingStrategy,\n SerializationOptions,\n SerializeFunction,\n serializer,\n Serializer,\n TemplateRegistry\n} from './serializer.js';\nimport { JSONPartial, JSONSingle } from './utils.js';\nimport { typeInfer } from './reflection/processor.js';\nimport { assert } from './typeguard.js';\nimport { DeepPartial } from './changes.js';\nimport { findMember, getTypeJitContainer, ReflectionKind, Type, TypeClass, TypeObjectLiteral } from './reflection/type.js';\n\n/**\n * Casts/coerces a given data structure to the target data type and validates all attached validators.\n *\n * Same as validatedDeserialize().\n *\n * @throws ValidationError if casting or validation fails\n */\nexport function cast<T>(data: JSONPartial<T> | unknown, options?: SerializationOptions, serializerToUse: Serializer = serializer, namingStrategy?: NamingStrategy, type?: ReceiveType<T>): T {\n const fn = getSerializeFunction(resolveReceiveType(type), serializerToUse.deserializeRegistry, namingStrategy);\n const item = fn(data, options) as T;\n assert(item, undefined, type);\n return item;\n}\n\n/**\n * Same as cast but returns a ready to use function. Used to improve performance.\n */\nexport function castFunction<T>(serializerToUse: Serializer = serializer, namingStrategy?: NamingStrategy, type?: ReceiveType<T>): (data: JSONPartial<T> | unknown, options?: SerializationOptions) => T {\n const fn = getSerializeFunction(resolveReceiveType(type), serializerToUse.deserializeRegistry, namingStrategy);\n return (data: JSONPartial<T> | unknown, options?: SerializationOptions) => {\n const item = fn(data, options);\n assert(item, undefined, type);\n return item;\n }\n}\n\n/**\n * Deserialize given data structure from JSON data objects to JavaScript objects, without running any validators.\n *\n * Types that are already correct will be used as-is.\n *\n * ```typescript\n * interface Data {\n * created: Date;\n * }\n *\n * const data = deserialize<Data>({created: '2009-02-13T23:31:30.123Z'});\n * //data is {created: Date(2009-02-13T23:31:30.123Z)}\n *\n * @throws ValidationError when deserialization fails.\n * ```\n */\nexport function deserialize<T>(data: JSONPartial<T> | unknown, options?: SerializationOptions, serializerToUse: Serializer = serializer, namingStrategy?: NamingStrategy, type?: ReceiveType<T>): T {\n const fn = getSerializeFunction(resolveReceiveType(type), serializerToUse.deserializeRegistry, namingStrategy);\n return fn(data, options) as T;\n}\n\n/**\n * Same as deserialize but returns a ready to use function. Used to improve performance.\n */\nexport function deserializeFunction<T>(serializerToUse: Serializer = serializer, namingStrategy?: NamingStrategy, type?: ReceiveType<T>): SerializeFunction<any, T> {\n return getSerializeFunction(resolveReceiveType(type), serializerToUse.deserializeRegistry, namingStrategy);\n}\n\n/**\n * Patch serialization for deep dot paths, e.g. `{'user.shippingAddress.street': 'abc'}`\n * If a naming strategy is used, it could be converted to `{'user.shipping_address.street': 'abc'}`.\n */\nexport function patch<T>(data: DeepPartial<T>, options?: SerializationOptions, serializerToUse: Serializer = serializer, namingStrategy?: NamingStrategy, type?: ReceiveType<T>): (data: JSONPartial<T> | unknown) => T {\n type = resolveReceiveType(type);\n if (type.kind !== ReflectionKind.objectLiteral && type.kind !== ReflectionKind.class) throw new Error('patch() only works on object literals and classes');\n return getPatchSerializeFunction(type, serializerToUse.deserializeRegistry, namingStrategy)(data, options);\n}\n\n/**\n * Create a serializer/deserializer function including validator for the given type for a patch structure.\n * This is handy for deep patch structures like e.g '{user.address.street: \"new street\"}'.\n */\nexport function getPatchSerializeFunction(type: TypeClass | TypeObjectLiteral, registry: TemplateRegistry, namingStrategy: NamingStrategy = new NamingStrategy()):\n (data: any, state?: SerializationOptions, patch?: { normalizeArrayIndex: boolean }) => any {\n\n const jitContainer = getTypeJitContainer(type);\n const id = registry.id + '_' + namingStrategy.id + '_' + 'patch';\n if (jitContainer[id]) return jitContainer[id];\n\n const partialSerializer = getPartialSerializeFunction(type, registry, namingStrategy);\n // const partialValidator = getValidatorFunction(registry.serializer, getPartialType(type));\n\n return jitContainer[id] = function (data: any, state?: SerializationOptions, patch?: { normalizeArrayIndex: boolean }) {\n const normalizeArrayIndex = patch?.normalizeArrayIndex ?? false;\n\n const result = partialSerializer(data, state);\n // disabled for the moment: we don't want to validate the patch structure yet since for database stuff it converts the structure to invalid TS representations\n // e.g. reference objects -> primary keys\n // const errors: ValidationErrorItem[] = [];\n // partialValidator(result, { errors });\n // if (errors.length) throw ValidationError.from(errors);\n\n outer:\n for (const i in data) {\n if (i.includes('.')) {\n // serialize each `i` manually.\n //e.g. user.shippingAddress.streetNo\n // path could be renamed to user.shipping_address.street_no via naming strategy\n const path = i.split('.');\n let currentType: Type = type;\n let newPath = '';\n for (const part of path) {\n if (currentType.kind === ReflectionKind.objectLiteral || currentType.kind === ReflectionKind.class) {\n const next = findMember(part, currentType.types);\n if (!next) continue outer;\n if (next.kind === ReflectionKind.method || next.kind === ReflectionKind.methodSignature) continue outer;\n if (next.kind === ReflectionKind.propertySignature || next.kind === ReflectionKind.property) {\n newPath += (newPath ? '.' : '') + namingStrategy.getPropertyName(next, registry.serializer.name);\n } else {\n newPath += (newPath ? '.' : '') + part;\n }\n currentType = next.type;\n } else if (currentType.kind === ReflectionKind.indexSignature) {\n newPath += (newPath ? '.' : '') + part;\n currentType = currentType.type;\n } else if (currentType.kind === ReflectionKind.array) {\n const idx = Number(part);\n if (isNaN(idx) || idx < 0) continue outer;\n if (normalizeArrayIndex) {\n newPath += '[' + idx + ']';\n } else {\n newPath += (newPath ? '.' : '') + part;\n }\n currentType = currentType.type;\n } else if (currentType.kind === ReflectionKind.tuple) {\n const idx = Number(part);\n if (isNaN(idx) || idx < 0 || idx >= currentType.types.length) continue outer;\n if (normalizeArrayIndex) {\n newPath += '[' + idx + ']';\n } else {\n newPath += (newPath ? '.' : '') + part;\n }\n currentType = currentType.types[idx].type;\n }\n }\n if (newPath) {\n result[newPath] = getSerializeFunction(currentType, registry, namingStrategy)(data[i], state);\n // assert(result[newPath], undefined, currentType);\n }\n }\n }\n\n return result;\n };\n}\n\n\n/**\n * Serialize given data structure to JSON data objects (not a JSON string).\n *\n * The resulting JSON object can be stringified using JSON.stringify().\n *\n * ```typescript\n * interface Data {\n * created: Date;\n * }\n *\n * const json = serialize<Data>({created: new Date(1234567890123)});\n * //json is {created: '2009-02-13T23:31:30.123Z'}\n *\n * const jsonString = JSON.stringify(json);\n * //jsonString is '{\"created\":\"2009-02-13T23:31:30.123Z\"}'\n * ```\n *\n * @throws ValidationError when serialization or validation fails.\n */\nexport function serialize<T>(data: T, options?: SerializationOptions, serializerToUse: Serializer = serializer, namingStrategy?: NamingStrategy, type?: ReceiveType<T>): JSONSingle<T> {\n const fn = getSerializeFunction(resolveReceiveType(type), serializerToUse.serializeRegistry, namingStrategy);\n return fn(data, options) as JSONSingle<T>;\n}\n\n/**\n * Same as serialize but returns a ready to use function. Used to improve performance.\n */\nexport function serializeFunction<T>(serializerToUse: Serializer = serializer, namingStrategy?: NamingStrategy, type?: ReceiveType<T>): SerializeFunction<T> {\n return getSerializeFunction(resolveReceiveType(type), serializerToUse.serializeRegistry, namingStrategy);\n}\n\n/**\n * Clones a class instance deeply.\n */\nexport function cloneClass<T>(target: T, options?: SerializationOptions): T {\n const classType = getClassTypeFromInstance(target);\n const type = typeInfer(classType);\n const serialize = getSerializeFunction(type, serializer.serializeRegistry);\n const deserialize = getSerializeFunction(type, serializer.deserializeRegistry);\n return deserialize(serialize(target, options));\n}\n\n/**\n * Tries to deserialize given data as T, and throws an error if it's not possible or validation after conversion fails.\n *\n * @deprecated use cast() instead\n *\n * @throws ValidationError when serialization or validation fails.\n */\nexport function validatedDeserialize<T>(data: any, options?: SerializationOptions, serializerToUse: Serializer = serializer, namingStrategy?: NamingStrategy, type?: ReceiveType<T>) {\n const fn = getSerializeFunction(resolveReceiveType(type), serializerToUse.deserializeRegistry, namingStrategy);\n const item = fn(data, options) as T;\n assert(item, undefined, type);\n return item;\n}\n"]}