@mionjs/run-types 0.8.7 → 0.8.10

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 (396) hide show
  1. package/.dist/cjs/index.d.ts +1 -0
  2. package/.dist/cjs/index.d.ts.map +1 -0
  3. package/.dist/cjs/src/constants.d.ts +1 -0
  4. package/.dist/cjs/src/constants.d.ts.map +1 -0
  5. package/.dist/cjs/src/constants.functions.d.ts +1 -0
  6. package/.dist/cjs/src/constants.functions.d.ts.map +1 -0
  7. package/.dist/cjs/src/constants.kind.d.ts +1 -0
  8. package/.dist/cjs/src/constants.kind.d.ts.map +1 -0
  9. package/.dist/cjs/src/createRunType.cjs +3 -1
  10. package/.dist/cjs/src/createRunType.cjs.map +1 -1
  11. package/.dist/cjs/src/createRunType.d.ts +1 -0
  12. package/.dist/cjs/src/createRunType.d.ts.map +1 -0
  13. package/.dist/cjs/src/createRunTypeFunctions.d.ts +1 -0
  14. package/.dist/cjs/src/createRunTypeFunctions.d.ts.map +1 -0
  15. package/.dist/cjs/src/formats.runtype.d.ts +1 -0
  16. package/.dist/cjs/src/formats.runtype.d.ts.map +1 -0
  17. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts +1 -0
  18. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts.map +1 -0
  19. package/.dist/cjs/src/jitCompilers/binary/fromBinary.cjs +1 -1
  20. package/.dist/cjs/src/jitCompilers/binary/fromBinary.cjs.map +1 -1
  21. package/.dist/cjs/src/jitCompilers/binary/fromBinary.d.ts +1 -0
  22. package/.dist/cjs/src/jitCompilers/binary/fromBinary.d.ts.map +1 -0
  23. package/.dist/cjs/src/jitCompilers/binary/toBinary.cjs +1 -1
  24. package/.dist/cjs/src/jitCompilers/binary/toBinary.cjs.map +1 -1
  25. package/.dist/cjs/src/jitCompilers/binary/toBinary.d.ts +1 -0
  26. package/.dist/cjs/src/jitCompilers/binary/toBinary.d.ts.map +1 -0
  27. package/.dist/cjs/src/jitCompilers/equalsHelpers.d.ts +1 -0
  28. package/.dist/cjs/src/jitCompilers/equalsHelpers.d.ts.map +1 -0
  29. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts +1 -0
  30. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts.map +1 -0
  31. package/.dist/cjs/src/jitCompilers/json/stringifyJson.cjs +1 -1
  32. package/.dist/cjs/src/jitCompilers/json/stringifyJson.cjs.map +1 -1
  33. package/.dist/cjs/src/jitCompilers/json/stringifyJson.d.ts +1 -0
  34. package/.dist/cjs/src/jitCompilers/json/stringifyJson.d.ts.map +1 -0
  35. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts +1 -0
  36. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts.map +1 -0
  37. package/.dist/cjs/src/jitCompilers/json/toJsCode.d.ts +1 -0
  38. package/.dist/cjs/src/jitCompilers/json/toJsCode.d.ts.map +1 -0
  39. package/.dist/cjs/src/lib/baseRunTypeFormat.d.ts +1 -0
  40. package/.dist/cjs/src/lib/baseRunTypeFormat.d.ts.map +1 -0
  41. package/.dist/cjs/src/lib/baseRunTypes.d.ts +1 -0
  42. package/.dist/cjs/src/lib/baseRunTypes.d.ts.map +1 -0
  43. package/.dist/cjs/src/lib/createJitFunction.d.ts +1 -0
  44. package/.dist/cjs/src/lib/createJitFunction.d.ts.map +1 -0
  45. package/.dist/cjs/src/lib/dkProxy.d.ts +1 -0
  46. package/.dist/cjs/src/lib/dkProxy.d.ts.map +1 -0
  47. package/.dist/cjs/src/lib/formats.d.ts +1 -0
  48. package/.dist/cjs/src/lib/formats.d.ts.map +1 -0
  49. package/.dist/cjs/src/lib/guards.d.ts +1 -0
  50. package/.dist/cjs/src/lib/guards.d.ts.map +1 -0
  51. package/.dist/cjs/src/lib/jitFnCompiler.d.ts +1 -0
  52. package/.dist/cjs/src/lib/jitFnCompiler.d.ts.map +1 -0
  53. package/.dist/cjs/src/lib/jitFnsRegistry.d.ts +1 -0
  54. package/.dist/cjs/src/lib/jitFnsRegistry.d.ts.map +1 -0
  55. package/.dist/cjs/src/lib/typeId.d.ts +1 -0
  56. package/.dist/cjs/src/lib/typeId.d.ts.map +1 -0
  57. package/.dist/cjs/src/lib/utils.d.ts +1 -0
  58. package/.dist/cjs/src/lib/utils.d.ts.map +1 -0
  59. package/.dist/cjs/src/mocking/constants.mock.d.ts +1 -0
  60. package/.dist/cjs/src/mocking/constants.mock.d.ts.map +1 -0
  61. package/.dist/cjs/src/mocking/mockRegistry.d.ts +1 -0
  62. package/.dist/cjs/src/mocking/mockRegistry.d.ts.map +1 -0
  63. package/.dist/cjs/src/mocking/mockType.cjs +46 -1
  64. package/.dist/cjs/src/mocking/mockType.cjs.map +1 -1
  65. package/.dist/cjs/src/mocking/mockType.d.ts +1 -0
  66. package/.dist/cjs/src/mocking/mockType.d.ts.map +1 -0
  67. package/.dist/cjs/src/mocking/mockUtils.d.ts +1 -0
  68. package/.dist/cjs/src/mocking/mockUtils.d.ts.map +1 -0
  69. package/.dist/cjs/src/nodes/atomic/any.d.ts +1 -0
  70. package/.dist/cjs/src/nodes/atomic/any.d.ts.map +1 -0
  71. package/.dist/cjs/src/nodes/atomic/bigInt.d.ts +1 -0
  72. package/.dist/cjs/src/nodes/atomic/bigInt.d.ts.map +1 -0
  73. package/.dist/cjs/src/nodes/atomic/boolean.d.ts +1 -0
  74. package/.dist/cjs/src/nodes/atomic/boolean.d.ts.map +1 -0
  75. package/.dist/cjs/src/nodes/atomic/date.d.ts +1 -0
  76. package/.dist/cjs/src/nodes/atomic/date.d.ts.map +1 -0
  77. package/.dist/cjs/src/nodes/atomic/enum.d.ts +1 -0
  78. package/.dist/cjs/src/nodes/atomic/enum.d.ts.map +1 -0
  79. package/.dist/cjs/src/nodes/atomic/enumMember.d.ts +1 -0
  80. package/.dist/cjs/src/nodes/atomic/enumMember.d.ts.map +1 -0
  81. package/.dist/cjs/src/nodes/atomic/literal.d.ts +1 -0
  82. package/.dist/cjs/src/nodes/atomic/literal.d.ts.map +1 -0
  83. package/.dist/cjs/src/nodes/atomic/never.d.ts +1 -0
  84. package/.dist/cjs/src/nodes/atomic/never.d.ts.map +1 -0
  85. package/.dist/cjs/src/nodes/atomic/null.d.ts +1 -0
  86. package/.dist/cjs/src/nodes/atomic/null.d.ts.map +1 -0
  87. package/.dist/cjs/src/nodes/atomic/number.d.ts +1 -0
  88. package/.dist/cjs/src/nodes/atomic/number.d.ts.map +1 -0
  89. package/.dist/cjs/src/nodes/atomic/object.d.ts +1 -0
  90. package/.dist/cjs/src/nodes/atomic/object.d.ts.map +1 -0
  91. package/.dist/cjs/src/nodes/atomic/regexp.d.ts +1 -0
  92. package/.dist/cjs/src/nodes/atomic/regexp.d.ts.map +1 -0
  93. package/.dist/cjs/src/nodes/atomic/string.d.ts +1 -0
  94. package/.dist/cjs/src/nodes/atomic/string.d.ts.map +1 -0
  95. package/.dist/cjs/src/nodes/atomic/symbol.d.ts +1 -0
  96. package/.dist/cjs/src/nodes/atomic/symbol.d.ts.map +1 -0
  97. package/.dist/cjs/src/nodes/atomic/undefined.d.ts +1 -0
  98. package/.dist/cjs/src/nodes/atomic/undefined.d.ts.map +1 -0
  99. package/.dist/cjs/src/nodes/atomic/unknown.d.ts +1 -0
  100. package/.dist/cjs/src/nodes/atomic/unknown.d.ts.map +1 -0
  101. package/.dist/cjs/src/nodes/atomic/void.d.ts +1 -0
  102. package/.dist/cjs/src/nodes/atomic/void.d.ts.map +1 -0
  103. package/.dist/cjs/src/nodes/collection/class.d.ts +1 -0
  104. package/.dist/cjs/src/nodes/collection/class.d.ts.map +1 -0
  105. package/.dist/cjs/src/nodes/collection/functionParams.d.ts +1 -0
  106. package/.dist/cjs/src/nodes/collection/functionParams.d.ts.map +1 -0
  107. package/.dist/cjs/src/nodes/collection/interface.d.ts +1 -0
  108. package/.dist/cjs/src/nodes/collection/interface.d.ts.map +1 -0
  109. package/.dist/cjs/src/nodes/collection/intersection.d.ts +1 -0
  110. package/.dist/cjs/src/nodes/collection/intersection.d.ts.map +1 -0
  111. package/.dist/cjs/src/nodes/collection/templateLiteral.cjs +73 -0
  112. package/.dist/cjs/src/nodes/collection/templateLiteral.cjs.map +1 -0
  113. package/.dist/cjs/src/nodes/collection/templateLiteral.d.ts +16 -0
  114. package/.dist/cjs/src/nodes/collection/templateLiteral.d.ts.map +1 -0
  115. package/.dist/cjs/src/nodes/collection/tuple.d.ts +1 -0
  116. package/.dist/cjs/src/nodes/collection/tuple.d.ts.map +1 -0
  117. package/.dist/cjs/src/nodes/collection/union.d.ts +1 -0
  118. package/.dist/cjs/src/nodes/collection/union.d.ts.map +1 -0
  119. package/.dist/cjs/src/nodes/collection/unionDiscriminator.d.ts +1 -0
  120. package/.dist/cjs/src/nodes/collection/unionDiscriminator.d.ts.map +1 -0
  121. package/.dist/cjs/src/nodes/function/function.d.ts +1 -0
  122. package/.dist/cjs/src/nodes/function/function.d.ts.map +1 -0
  123. package/.dist/cjs/src/nodes/member/array.d.ts +1 -0
  124. package/.dist/cjs/src/nodes/member/array.d.ts.map +1 -0
  125. package/.dist/cjs/src/nodes/member/callSignature.d.ts +1 -0
  126. package/.dist/cjs/src/nodes/member/callSignature.d.ts.map +1 -0
  127. package/.dist/cjs/src/nodes/member/genericMember.d.ts +1 -0
  128. package/.dist/cjs/src/nodes/member/genericMember.d.ts.map +1 -0
  129. package/.dist/cjs/src/nodes/member/indexProperty.cjs +69 -22
  130. package/.dist/cjs/src/nodes/member/indexProperty.cjs.map +1 -1
  131. package/.dist/cjs/src/nodes/member/indexProperty.d.ts +2 -0
  132. package/.dist/cjs/src/nodes/member/indexProperty.d.ts.map +1 -0
  133. package/.dist/cjs/src/nodes/member/method.d.ts +1 -0
  134. package/.dist/cjs/src/nodes/member/method.d.ts.map +1 -0
  135. package/.dist/cjs/src/nodes/member/methodSignature.d.ts +1 -0
  136. package/.dist/cjs/src/nodes/member/methodSignature.d.ts.map +1 -0
  137. package/.dist/cjs/src/nodes/member/param.d.ts +1 -0
  138. package/.dist/cjs/src/nodes/member/param.d.ts.map +1 -0
  139. package/.dist/cjs/src/nodes/member/property.d.ts +1 -0
  140. package/.dist/cjs/src/nodes/member/property.d.ts.map +1 -0
  141. package/.dist/cjs/src/nodes/member/restParams.d.ts +1 -0
  142. package/.dist/cjs/src/nodes/member/restParams.d.ts.map +1 -0
  143. package/.dist/cjs/src/nodes/member/tupleMember.d.ts +1 -0
  144. package/.dist/cjs/src/nodes/member/tupleMember.d.ts.map +1 -0
  145. package/.dist/cjs/src/nodes/native/Iterable.d.ts +1 -0
  146. package/.dist/cjs/src/nodes/native/Iterable.d.ts.map +1 -0
  147. package/.dist/cjs/src/nodes/native/map.d.ts +1 -0
  148. package/.dist/cjs/src/nodes/native/map.d.ts.map +1 -0
  149. package/.dist/cjs/src/nodes/native/nonSerializable.d.ts +1 -0
  150. package/.dist/cjs/src/nodes/native/nonSerializable.d.ts.map +1 -0
  151. package/.dist/cjs/src/nodes/native/promise.d.ts +1 -0
  152. package/.dist/cjs/src/nodes/native/promise.d.ts.map +1 -0
  153. package/.dist/cjs/src/nodes/native/set.d.ts +1 -0
  154. package/.dist/cjs/src/nodes/native/set.d.ts.map +1 -0
  155. package/.dist/cjs/src/run-types-pure-fns.d.ts +1 -0
  156. package/.dist/cjs/src/run-types-pure-fns.d.ts.map +1 -0
  157. package/.dist/cjs/src/types.d.ts +1 -0
  158. package/.dist/cjs/src/types.d.ts.map +1 -0
  159. package/.dist/esm/index.d.ts +1 -0
  160. package/.dist/esm/index.d.ts.map +1 -0
  161. package/.dist/esm/src/constants.d.ts +1 -0
  162. package/.dist/esm/src/constants.d.ts.map +1 -0
  163. package/.dist/esm/src/constants.functions.d.ts +1 -0
  164. package/.dist/esm/src/constants.functions.d.ts.map +1 -0
  165. package/.dist/esm/src/constants.kind.d.ts +1 -0
  166. package/.dist/esm/src/constants.kind.d.ts.map +1 -0
  167. package/.dist/esm/src/createRunType.d.ts +1 -0
  168. package/.dist/esm/src/createRunType.d.ts.map +1 -0
  169. package/.dist/esm/src/createRunType.js +3 -1
  170. package/.dist/esm/src/createRunType.js.map +1 -1
  171. package/.dist/esm/src/createRunTypeFunctions.d.ts +1 -0
  172. package/.dist/esm/src/createRunTypeFunctions.d.ts.map +1 -0
  173. package/.dist/esm/src/formats.runtype.d.ts +1 -0
  174. package/.dist/esm/src/formats.runtype.d.ts.map +1 -0
  175. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts +1 -0
  176. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts.map +1 -0
  177. package/.dist/esm/src/jitCompilers/binary/fromBinary.d.ts +1 -0
  178. package/.dist/esm/src/jitCompilers/binary/fromBinary.d.ts.map +1 -0
  179. package/.dist/esm/src/jitCompilers/binary/fromBinary.js +1 -1
  180. package/.dist/esm/src/jitCompilers/binary/fromBinary.js.map +1 -1
  181. package/.dist/esm/src/jitCompilers/binary/toBinary.d.ts +1 -0
  182. package/.dist/esm/src/jitCompilers/binary/toBinary.d.ts.map +1 -0
  183. package/.dist/esm/src/jitCompilers/binary/toBinary.js +1 -1
  184. package/.dist/esm/src/jitCompilers/binary/toBinary.js.map +1 -1
  185. package/.dist/esm/src/jitCompilers/equalsHelpers.d.ts +1 -0
  186. package/.dist/esm/src/jitCompilers/equalsHelpers.d.ts.map +1 -0
  187. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts +1 -0
  188. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts.map +1 -0
  189. package/.dist/esm/src/jitCompilers/json/stringifyJson.d.ts +1 -0
  190. package/.dist/esm/src/jitCompilers/json/stringifyJson.d.ts.map +1 -0
  191. package/.dist/esm/src/jitCompilers/json/stringifyJson.js +1 -1
  192. package/.dist/esm/src/jitCompilers/json/stringifyJson.js.map +1 -1
  193. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts +1 -0
  194. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts.map +1 -0
  195. package/.dist/esm/src/jitCompilers/json/toJsCode.d.ts +1 -0
  196. package/.dist/esm/src/jitCompilers/json/toJsCode.d.ts.map +1 -0
  197. package/.dist/esm/src/lib/baseRunTypeFormat.d.ts +1 -0
  198. package/.dist/esm/src/lib/baseRunTypeFormat.d.ts.map +1 -0
  199. package/.dist/esm/src/lib/baseRunTypes.d.ts +1 -0
  200. package/.dist/esm/src/lib/baseRunTypes.d.ts.map +1 -0
  201. package/.dist/esm/src/lib/createJitFunction.d.ts +1 -0
  202. package/.dist/esm/src/lib/createJitFunction.d.ts.map +1 -0
  203. package/.dist/esm/src/lib/dkProxy.d.ts +1 -0
  204. package/.dist/esm/src/lib/dkProxy.d.ts.map +1 -0
  205. package/.dist/esm/src/lib/formats.d.ts +1 -0
  206. package/.dist/esm/src/lib/formats.d.ts.map +1 -0
  207. package/.dist/esm/src/lib/guards.d.ts +1 -0
  208. package/.dist/esm/src/lib/guards.d.ts.map +1 -0
  209. package/.dist/esm/src/lib/jitFnCompiler.d.ts +1 -0
  210. package/.dist/esm/src/lib/jitFnCompiler.d.ts.map +1 -0
  211. package/.dist/esm/src/lib/jitFnsRegistry.d.ts +1 -0
  212. package/.dist/esm/src/lib/jitFnsRegistry.d.ts.map +1 -0
  213. package/.dist/esm/src/lib/typeId.d.ts +1 -0
  214. package/.dist/esm/src/lib/typeId.d.ts.map +1 -0
  215. package/.dist/esm/src/lib/utils.d.ts +1 -0
  216. package/.dist/esm/src/lib/utils.d.ts.map +1 -0
  217. package/.dist/esm/src/mocking/constants.mock.d.ts +1 -0
  218. package/.dist/esm/src/mocking/constants.mock.d.ts.map +1 -0
  219. package/.dist/esm/src/mocking/mockRegistry.d.ts +1 -0
  220. package/.dist/esm/src/mocking/mockRegistry.d.ts.map +1 -0
  221. package/.dist/esm/src/mocking/mockType.d.ts +1 -0
  222. package/.dist/esm/src/mocking/mockType.d.ts.map +1 -0
  223. package/.dist/esm/src/mocking/mockType.js +47 -2
  224. package/.dist/esm/src/mocking/mockType.js.map +1 -1
  225. package/.dist/esm/src/mocking/mockUtils.d.ts +1 -0
  226. package/.dist/esm/src/mocking/mockUtils.d.ts.map +1 -0
  227. package/.dist/esm/src/mocking/mockUtils.js +1 -1
  228. package/.dist/esm/src/nodes/atomic/any.d.ts +1 -0
  229. package/.dist/esm/src/nodes/atomic/any.d.ts.map +1 -0
  230. package/.dist/esm/src/nodes/atomic/bigInt.d.ts +1 -0
  231. package/.dist/esm/src/nodes/atomic/bigInt.d.ts.map +1 -0
  232. package/.dist/esm/src/nodes/atomic/boolean.d.ts +1 -0
  233. package/.dist/esm/src/nodes/atomic/boolean.d.ts.map +1 -0
  234. package/.dist/esm/src/nodes/atomic/date.d.ts +1 -0
  235. package/.dist/esm/src/nodes/atomic/date.d.ts.map +1 -0
  236. package/.dist/esm/src/nodes/atomic/enum.d.ts +1 -0
  237. package/.dist/esm/src/nodes/atomic/enum.d.ts.map +1 -0
  238. package/.dist/esm/src/nodes/atomic/enumMember.d.ts +1 -0
  239. package/.dist/esm/src/nodes/atomic/enumMember.d.ts.map +1 -0
  240. package/.dist/esm/src/nodes/atomic/literal.d.ts +1 -0
  241. package/.dist/esm/src/nodes/atomic/literal.d.ts.map +1 -0
  242. package/.dist/esm/src/nodes/atomic/never.d.ts +1 -0
  243. package/.dist/esm/src/nodes/atomic/never.d.ts.map +1 -0
  244. package/.dist/esm/src/nodes/atomic/null.d.ts +1 -0
  245. package/.dist/esm/src/nodes/atomic/null.d.ts.map +1 -0
  246. package/.dist/esm/src/nodes/atomic/number.d.ts +1 -0
  247. package/.dist/esm/src/nodes/atomic/number.d.ts.map +1 -0
  248. package/.dist/esm/src/nodes/atomic/object.d.ts +1 -0
  249. package/.dist/esm/src/nodes/atomic/object.d.ts.map +1 -0
  250. package/.dist/esm/src/nodes/atomic/regexp.d.ts +1 -0
  251. package/.dist/esm/src/nodes/atomic/regexp.d.ts.map +1 -0
  252. package/.dist/esm/src/nodes/atomic/string.d.ts +1 -0
  253. package/.dist/esm/src/nodes/atomic/string.d.ts.map +1 -0
  254. package/.dist/esm/src/nodes/atomic/symbol.d.ts +1 -0
  255. package/.dist/esm/src/nodes/atomic/symbol.d.ts.map +1 -0
  256. package/.dist/esm/src/nodes/atomic/undefined.d.ts +1 -0
  257. package/.dist/esm/src/nodes/atomic/undefined.d.ts.map +1 -0
  258. package/.dist/esm/src/nodes/atomic/unknown.d.ts +1 -0
  259. package/.dist/esm/src/nodes/atomic/unknown.d.ts.map +1 -0
  260. package/.dist/esm/src/nodes/atomic/void.d.ts +1 -0
  261. package/.dist/esm/src/nodes/atomic/void.d.ts.map +1 -0
  262. package/.dist/esm/src/nodes/collection/class.d.ts +1 -0
  263. package/.dist/esm/src/nodes/collection/class.d.ts.map +1 -0
  264. package/.dist/esm/src/nodes/collection/functionParams.d.ts +1 -0
  265. package/.dist/esm/src/nodes/collection/functionParams.d.ts.map +1 -0
  266. package/.dist/esm/src/nodes/collection/interface.d.ts +1 -0
  267. package/.dist/esm/src/nodes/collection/interface.d.ts.map +1 -0
  268. package/.dist/esm/src/nodes/collection/intersection.d.ts +1 -0
  269. package/.dist/esm/src/nodes/collection/intersection.d.ts.map +1 -0
  270. package/.dist/esm/src/nodes/collection/templateLiteral.d.ts +16 -0
  271. package/.dist/esm/src/nodes/collection/templateLiteral.d.ts.map +1 -0
  272. package/.dist/esm/src/nodes/collection/templateLiteral.js +73 -0
  273. package/.dist/esm/src/nodes/collection/templateLiteral.js.map +1 -0
  274. package/.dist/esm/src/nodes/collection/tuple.d.ts +1 -0
  275. package/.dist/esm/src/nodes/collection/tuple.d.ts.map +1 -0
  276. package/.dist/esm/src/nodes/collection/union.d.ts +1 -0
  277. package/.dist/esm/src/nodes/collection/union.d.ts.map +1 -0
  278. package/.dist/esm/src/nodes/collection/unionDiscriminator.d.ts +1 -0
  279. package/.dist/esm/src/nodes/collection/unionDiscriminator.d.ts.map +1 -0
  280. package/.dist/esm/src/nodes/function/function.d.ts +1 -0
  281. package/.dist/esm/src/nodes/function/function.d.ts.map +1 -0
  282. package/.dist/esm/src/nodes/member/array.d.ts +1 -0
  283. package/.dist/esm/src/nodes/member/array.d.ts.map +1 -0
  284. package/.dist/esm/src/nodes/member/callSignature.d.ts +1 -0
  285. package/.dist/esm/src/nodes/member/callSignature.d.ts.map +1 -0
  286. package/.dist/esm/src/nodes/member/genericMember.d.ts +1 -0
  287. package/.dist/esm/src/nodes/member/genericMember.d.ts.map +1 -0
  288. package/.dist/esm/src/nodes/member/indexProperty.d.ts +2 -0
  289. package/.dist/esm/src/nodes/member/indexProperty.d.ts.map +1 -0
  290. package/.dist/esm/src/nodes/member/indexProperty.js +70 -23
  291. package/.dist/esm/src/nodes/member/indexProperty.js.map +1 -1
  292. package/.dist/esm/src/nodes/member/method.d.ts +1 -0
  293. package/.dist/esm/src/nodes/member/method.d.ts.map +1 -0
  294. package/.dist/esm/src/nodes/member/methodSignature.d.ts +1 -0
  295. package/.dist/esm/src/nodes/member/methodSignature.d.ts.map +1 -0
  296. package/.dist/esm/src/nodes/member/param.d.ts +1 -0
  297. package/.dist/esm/src/nodes/member/param.d.ts.map +1 -0
  298. package/.dist/esm/src/nodes/member/property.d.ts +1 -0
  299. package/.dist/esm/src/nodes/member/property.d.ts.map +1 -0
  300. package/.dist/esm/src/nodes/member/restParams.d.ts +1 -0
  301. package/.dist/esm/src/nodes/member/restParams.d.ts.map +1 -0
  302. package/.dist/esm/src/nodes/member/tupleMember.d.ts +1 -0
  303. package/.dist/esm/src/nodes/member/tupleMember.d.ts.map +1 -0
  304. package/.dist/esm/src/nodes/native/Iterable.d.ts +1 -0
  305. package/.dist/esm/src/nodes/native/Iterable.d.ts.map +1 -0
  306. package/.dist/esm/src/nodes/native/map.d.ts +1 -0
  307. package/.dist/esm/src/nodes/native/map.d.ts.map +1 -0
  308. package/.dist/esm/src/nodes/native/nonSerializable.d.ts +1 -0
  309. package/.dist/esm/src/nodes/native/nonSerializable.d.ts.map +1 -0
  310. package/.dist/esm/src/nodes/native/promise.d.ts +1 -0
  311. package/.dist/esm/src/nodes/native/promise.d.ts.map +1 -0
  312. package/.dist/esm/src/nodes/native/set.d.ts +1 -0
  313. package/.dist/esm/src/nodes/native/set.d.ts.map +1 -0
  314. package/.dist/esm/src/run-types-pure-fns.d.ts +1 -0
  315. package/.dist/esm/src/run-types-pure-fns.d.ts.map +1 -0
  316. package/.dist/esm/src/types.d.ts +1 -0
  317. package/.dist/esm/src/types.d.ts.map +1 -0
  318. package/index.ts +70 -0
  319. package/package.json +8 -4
  320. package/src/constants.functions.ts +196 -0
  321. package/src/constants.kind.ts +76 -0
  322. package/src/constants.ts +85 -0
  323. package/src/createRunType.ts +322 -0
  324. package/src/createRunTypeFunctions.ts +93 -0
  325. package/src/formats.runtype.ts +35 -0
  326. package/src/jitCompilers/binary/binarySPEC.md +138 -0
  327. package/src/jitCompilers/binary/binarySpec/binaryHelpers.ts +118 -0
  328. package/src/jitCompilers/binary/fromBinary.ts +493 -0
  329. package/src/jitCompilers/binary/toBinary.ts +436 -0
  330. package/src/jitCompilers/equalsHelpers.ts +62 -0
  331. package/src/jitCompilers/json/jsonSpec/jsonHelpers.ts +64 -0
  332. package/src/jitCompilers/json/stringifyJson.ts +476 -0
  333. package/src/jitCompilers/json/stringifySpec/stringifyHelpers.ts +59 -0
  334. package/src/jitCompilers/json/toJsCode.ts +182 -0
  335. package/src/jitCompilers/serialization-suite.ts +1689 -0
  336. package/src/jitCompilers/xyz-Template/fromXYZ.ts +212 -0
  337. package/src/jitCompilers/xyz-Template/toXYZ.ts +217 -0
  338. package/src/jitCompilers/xyz-Template/xyzReadme.md +6 -0
  339. package/src/jitCompilers/xyz-Template/xyzSpec/xyzHelpers.ts +66 -0
  340. package/src/lib/baseRunTypeFormat.ts +320 -0
  341. package/src/lib/baseRunTypes.ts +367 -0
  342. package/src/lib/createJitFunction.ts +87 -0
  343. package/src/lib/dkProxy.ts +47 -0
  344. package/src/lib/formats.ts +144 -0
  345. package/src/lib/guards.ts +290 -0
  346. package/src/lib/jitFnCompiler.ts +783 -0
  347. package/src/lib/jitFnsRegistry.ts +53 -0
  348. package/src/lib/typeId.ts +225 -0
  349. package/src/lib/utils.ts +402 -0
  350. package/src/mocking/constants.mock.ts +87 -0
  351. package/src/mocking/mockRegistry.ts +20 -0
  352. package/src/mocking/mockType.ts +409 -0
  353. package/src/mocking/mockUtils.ts +82 -0
  354. package/src/nodes/atomic/any.ts +22 -0
  355. package/src/nodes/atomic/bigInt.ts +26 -0
  356. package/src/nodes/atomic/boolean.ts +26 -0
  357. package/src/nodes/atomic/date.ts +26 -0
  358. package/src/nodes/atomic/enum.ts +23 -0
  359. package/src/nodes/atomic/enumMember.ts +29 -0
  360. package/src/nodes/atomic/literal.ts +125 -0
  361. package/src/nodes/atomic/never.ts +26 -0
  362. package/src/nodes/atomic/null.ts +26 -0
  363. package/src/nodes/atomic/number.ts +26 -0
  364. package/src/nodes/atomic/object.ts +20 -0
  365. package/src/nodes/atomic/regexp.ts +29 -0
  366. package/src/nodes/atomic/string.ts +20 -0
  367. package/src/nodes/atomic/symbol.ts +31 -0
  368. package/src/nodes/atomic/undefined.ts +23 -0
  369. package/src/nodes/atomic/unknown.ts +10 -0
  370. package/src/nodes/atomic/void.ts +26 -0
  371. package/src/nodes/collection/class.ts +36 -0
  372. package/src/nodes/collection/functionParams.ts +42 -0
  373. package/src/nodes/collection/interface.ts +300 -0
  374. package/src/nodes/collection/intersection.ts +30 -0
  375. package/src/nodes/collection/templateLiteral.ts +87 -0
  376. package/src/nodes/collection/tuple.ts +80 -0
  377. package/src/nodes/collection/union.ts +205 -0
  378. package/src/nodes/collection/unionDiscriminator.ts +259 -0
  379. package/src/nodes/function/function.ts +166 -0
  380. package/src/nodes/member/array.ts +150 -0
  381. package/src/nodes/member/callSignature.ts +34 -0
  382. package/src/nodes/member/genericMember.ts +63 -0
  383. package/src/nodes/member/indexProperty.ts +174 -0
  384. package/src/nodes/member/method.ts +30 -0
  385. package/src/nodes/member/methodSignature.ts +31 -0
  386. package/src/nodes/member/param.ts +22 -0
  387. package/src/nodes/member/property.ts +75 -0
  388. package/src/nodes/member/restParams.ts +22 -0
  389. package/src/nodes/member/tupleMember.ts +93 -0
  390. package/src/nodes/native/Iterable.ts +153 -0
  391. package/src/nodes/native/map.ts +91 -0
  392. package/src/nodes/native/nonSerializable.ts +42 -0
  393. package/src/nodes/native/promise.ts +43 -0
  394. package/src/nodes/native/set.ts +56 -0
  395. package/src/run-types-pure-fns.ts +116 -0
  396. package/src/types.ts +206 -0
@@ -0,0 +1,196 @@
1
+ /* ########
2
+ * 2025 mion
3
+ * Author: Ma-jerez
4
+ * License: MIT
5
+ * The software is provided "as is", without warranty of any kind.
6
+ * ######## */
7
+
8
+ import {type JitFnArgs, JIT_FUNCTION_IDS} from '@mionjs/core';
9
+
10
+ /** Javascript code types */
11
+ export const CodeTypes = {
12
+ expression: 'E', // single expression, that could be concatenated using js operators like + - * && || etc...
13
+ statement: 'S', // one or multiple statements, that could be concatenated using ; to ensure correct syntax
14
+ returnBlock: 'RB', // code block, it can not be concatenated with other code, it has an explicit return statement and needs to be wrapped in a function
15
+ } as const;
16
+ export type CodeType = (typeof CodeTypes)[keyof typeof CodeTypes];
17
+
18
+ export interface JitFnSettings {
19
+ id: string;
20
+ name: string;
21
+ /** dynamically imports a single compiler function that is capable of compiling any node
22
+ * @see {@link ./jitCompilers/stringifyJson.ts#visitJsonStringify} as example of compiler function
23
+ */
24
+ import?: () => Promise<(...args: any[]) => any>;
25
+ jitArgs: JitFnArgs;
26
+ jitDefaultArgs: JitFnArgs;
27
+ returnName: string;
28
+ /**
29
+ * When no initial vλl is required by the function.
30
+ * This is typically used by deserializers, that do not transform the input value but create a new one from other params.
31
+ * an the initial vλl is used as a variable initialization for the returned values.
32
+ * ie binary deserialization
33
+ */
34
+ noInitialVλl?: true;
35
+ runTimeOptions?: Record<string, {keyName: string; type: 'boolean' | 'number' | 'string'; defaultValue: any}>;
36
+ /**
37
+ * When set to true, the format code should replace the jit code for the function.
38
+ * This is used when the format code is more efficient than the default code.
39
+ */
40
+ formatShouldReplaceJitCode?: true;
41
+ } // list of available jit functions
42
+
43
+ // variable names used in jit functions
44
+ // JitUtils is passed with the name 'utl'. it is hardcoded in all jit code to avoid string interpolation
45
+ export const jitArgs = {vλl: 'v'} as const;
46
+ export const jitDefaultArgs = {vλl: ''} as const;
47
+ export const jitErrorArgs = {vλl: 'v', pλth: 'pth', εrr: 'er'} as const;
48
+ export const jitDefaultErrorArgs = {vλl: '', pλth: '[]', εrr: '[]'} as const;
49
+ export const jitArgsWithOptions = {vλl: 'v', θpts: 'opts'} as const;
50
+ export const jitDefaultArgsWithOptions = {vλl: '', θpts: '{}'} as const;
51
+ export const jitBinarySerializerArgs = {vλl: 'v', sεr: 'Ser'} as const; // vλl = js value to serialize ser = serializer,
52
+ export const jitBinaryDeserializerArgs = {vλl: 'ret', dεs: 'Des'} as const; // vλl is used as return variable ans is assigned the deserialized value, des = deserializer
53
+ export const jitDefaultBinarySerializerArgs = {vλl: '', sεr: ''} as const;
54
+ export const jitDefaultBinaryDeserializerArgs = {vλl: '', dεs: ''} as const;
55
+
56
+ // ######## !IMPORTANT: ALL JIT FUNCTIONS IDs MUST BE UNIQUE and short ########
57
+
58
+ type JitFunctionsGroup = {[key: string]: JitFnSettings};
59
+
60
+ export const jitValidationFunctions = {
61
+ isType: {
62
+ id: JIT_FUNCTION_IDS.isType,
63
+ name: 'isType',
64
+ jitArgs,
65
+ jitDefaultArgs,
66
+ returnName: jitArgs.vλl,
67
+ },
68
+ typeErrors: {
69
+ id: JIT_FUNCTION_IDS.typeErrors,
70
+ name: 'typeErrors',
71
+ jitArgs: jitErrorArgs,
72
+ jitDefaultArgs: jitDefaultErrorArgs,
73
+ returnName: jitErrorArgs.εrr,
74
+ },
75
+ } as const satisfies JitFunctionsGroup;
76
+
77
+ export const jitSerializationFunctions = {
78
+ prepareForJson: {
79
+ id: JIT_FUNCTION_IDS.prepareForJson,
80
+ name: 'prepareForJson',
81
+ jitArgs,
82
+ jitDefaultArgs,
83
+ returnName: jitArgs.vλl,
84
+ },
85
+ restoreFromJson: {
86
+ id: JIT_FUNCTION_IDS.restoreFromJson,
87
+ name: 'restoreFromJson',
88
+ jitArgs,
89
+ jitDefaultArgs,
90
+ returnName: jitArgs.vλl,
91
+ },
92
+ stringifyJson: {
93
+ id: JIT_FUNCTION_IDS.stringifyJson,
94
+ name: 'stringifyJson',
95
+ jitArgs,
96
+ jitDefaultArgs,
97
+ returnName: jitArgs.vλl,
98
+ },
99
+ // similar to json stringify but outputs js code, including pure functions, already imported as size is quite small
100
+ toJSCode: {
101
+ id: JIT_FUNCTION_IDS.toJSCode,
102
+ name: 'toJSCode',
103
+ jitArgs,
104
+ jitDefaultArgs,
105
+ returnName: jitArgs.vλl,
106
+ },
107
+ // Binary serialization functions
108
+ toBinary: {
109
+ id: JIT_FUNCTION_IDS.toBinary,
110
+ name: 'toBinary',
111
+ jitArgs: jitBinarySerializerArgs,
112
+ jitDefaultArgs: jitDefaultBinarySerializerArgs,
113
+ // returns the serializer buffer
114
+ returnName: jitBinarySerializerArgs.sεr,
115
+ formatShouldReplaceJitCode: true,
116
+ },
117
+ fromBinary: {
118
+ id: JIT_FUNCTION_IDS.fromBinary,
119
+ name: 'fromBinary',
120
+ jitArgs: jitBinaryDeserializerArgs,
121
+ jitDefaultArgs: jitDefaultBinaryDeserializerArgs,
122
+ // deserialized value is stored in vλl that is initially undefined
123
+ returnName: jitBinaryDeserializerArgs.vλl,
124
+ noInitialVλl: true,
125
+ formatShouldReplaceJitCode: true,
126
+ },
127
+ // apply type formatters, ie: lowercase, uppercase, trim, etc
128
+ format: {
129
+ id: JIT_FUNCTION_IDS.format,
130
+ name: 'format',
131
+ jitArgs,
132
+ jitDefaultArgs,
133
+ returnName: jitArgs.vλl,
134
+ },
135
+ } as const satisfies JitFunctionsGroup;
136
+
137
+ export const JitFunctions = {
138
+ ...jitValidationFunctions,
139
+ ...jitSerializationFunctions,
140
+ unknownKeyErrors: {
141
+ id: JIT_FUNCTION_IDS.unknownKeyErrors,
142
+ name: 'unknownKeyErrors',
143
+ jitArgs: jitErrorArgs,
144
+ jitDefaultArgs: jitDefaultErrorArgs,
145
+ returnName: jitErrorArgs.εrr,
146
+ },
147
+ hasUnknownKeys: {
148
+ id: JIT_FUNCTION_IDS.hasUnknownKeys,
149
+ name: 'hasUnknownKeys',
150
+ jitArgs: jitArgsWithOptions,
151
+ jitDefaultArgs: jitDefaultArgsWithOptions,
152
+ runTimeOptions: {checkNonJitProps: {keyName: 'checkNonJitProps', type: 'boolean', defaultValue: false}},
153
+ returnName: jitArgsWithOptions.vλl,
154
+ },
155
+ stripUnknownKeys: {
156
+ id: JIT_FUNCTION_IDS.stripUnknownKeys,
157
+ name: 'stripUnknownKeys',
158
+ jitArgs,
159
+ jitDefaultArgs,
160
+ returnName: jitArgs.vλl,
161
+ },
162
+ unknownKeysToUndefined: {
163
+ id: JIT_FUNCTION_IDS.unknownKeysToUndefined,
164
+ name: 'unknownKeysToUndefined',
165
+ jitArgs,
166
+ jitDefaultArgs,
167
+ returnName: jitArgs.vλl,
168
+ },
169
+ aux: {
170
+ id: JIT_FUNCTION_IDS.aux,
171
+ name: 'aux',
172
+ jitArgs,
173
+ jitDefaultArgs,
174
+ returnName: jitArgs.vλl,
175
+ },
176
+ // mock is not really a jit function but is used in a similar way, main difference is that it is not compiled
177
+ mock: {
178
+ id: JIT_FUNCTION_IDS.mock,
179
+ name: 'mockType',
180
+ import: () => import('./mocking/mockType.ts').then((m) => m.mockType),
181
+ jitArgs,
182
+ jitDefaultArgs,
183
+ returnName: jitArgs.vλl,
184
+ },
185
+ // pure function are not jit compiled but we ensure we reserve a prefix to avoid collisions
186
+ pureFunction: {
187
+ id: JIT_FUNCTION_IDS.pureFunction,
188
+ name: 'pureFunction',
189
+ jitArgs,
190
+ jitDefaultArgs,
191
+ returnName: jitArgs.vλl,
192
+ },
193
+ } as const satisfies JitFunctionsGroup;
194
+
195
+ export const jitFunctionList: JitFnSettings[] = Object.values(JitFunctions);
196
+ export const jitFunctionsById = Object.fromEntries(jitFunctionList.map((f) => [f.id, f]));
@@ -0,0 +1,76 @@
1
+ /* ########
2
+ * 2024 mion
3
+ * Author: Ma-jerez
4
+ * License: MIT
5
+ * The software is provided "as is", without warranty of any kind.
6
+ * ######## */
7
+
8
+ import {ReflectionKind} from '@deepkit/type';
9
+ import {RunType} from './types.ts';
10
+
11
+ export const ReflectionKindName: {[key: number]: keyof typeof ReflectionKind} = {
12
+ 0: 'never',
13
+ 1: 'any',
14
+ 2: 'unknown',
15
+ 3: 'void',
16
+ 4: 'objectLiteral', // name was changed from deepkit's 'object' to 'objectLiteral'
17
+ 5: 'string',
18
+ 6: 'number',
19
+ 7: 'boolean',
20
+ 8: 'symbol',
21
+ 9: 'bigint',
22
+ 10: 'null',
23
+ 11: 'undefined',
24
+ 12: 'regexp',
25
+ 13: 'literal',
26
+ 14: 'templateLiteral',
27
+ 15: 'property',
28
+ 16: 'method',
29
+ 17: 'function',
30
+ 18: 'parameter',
31
+ 19: 'promise',
32
+ 20: 'class',
33
+ 21: 'typeParameter',
34
+ 22: 'enum',
35
+ 23: 'union',
36
+ 24: 'intersection',
37
+ 25: 'array',
38
+ 26: 'tuple',
39
+ 27: 'tupleMember',
40
+ 28: 'enumMember',
41
+ 29: 'rest',
42
+ 30: 'object', // name was changed from deepkit's 'objectLiteral' to 'object' for better error messages
43
+ 31: 'indexSignature',
44
+ 32: 'propertySignature',
45
+ 33: 'methodSignature',
46
+ 34: 'infer',
47
+ 35: 'callSignature',
48
+ };
49
+
50
+ // ReflectionKind from deepkit is extended with the following sub kinds
51
+ export const ReflectionSubKind = {
52
+ // group of sub-kinds that extends ReflectionKind.class
53
+ date: 20_01,
54
+ map: 20_02,
55
+ set: 20_03,
56
+ nonSerializable: 20_04,
57
+
58
+ params: 17_01,
59
+ mapKey: 18_01,
60
+ mapValue: 18_02,
61
+ setItem: 18_03,
62
+ } as const;
63
+
64
+ export const ReflectionSubNames: {[key: number]: keyof typeof ReflectionSubKind} = {
65
+ 20_01: 'date',
66
+ 20_02: 'map',
67
+ 20_03: 'set',
68
+ 17_01: 'params',
69
+ } as const;
70
+
71
+ export type AnyKindName = keyof typeof ReflectionKind | keyof typeof ReflectionSubKind;
72
+
73
+ export function getReflectionName(rt: RunType): AnyKindName {
74
+ if (rt.src.subKind) return ReflectionSubNames[rt.src.subKind];
75
+ return ReflectionKindName[rt.src.kind];
76
+ }
@@ -0,0 +1,85 @@
1
+ /* ########
2
+ * 2024 mion
3
+ * Author: Ma-jerez
4
+ * License: MIT
5
+ * The software is provided "as is", without warranty of any kind.
6
+ * ######## */
7
+
8
+ // native javascript objects that are not serializable
9
+ export const nonSerializableClasses = [
10
+ // TODO: decide what to do with native errors, they should be easily serializable
11
+ Error,
12
+ EvalError,
13
+ RangeError,
14
+ ReferenceError,
15
+ SyntaxError,
16
+ TypeError,
17
+ URIError,
18
+ AggregateError,
19
+ // Promise, // Promise has it's own RunType
20
+ // data types
21
+ WeakMap,
22
+ WeakSet,
23
+ DataView,
24
+ ArrayBuffer,
25
+ SharedArrayBuffer,
26
+ Float32Array,
27
+ Float64Array,
28
+ Int8Array,
29
+ Int16Array,
30
+ Int32Array,
31
+ Uint8Array,
32
+ Uint8ClampedArray,
33
+ Uint16Array,
34
+ Uint32Array,
35
+ BigInt64Array,
36
+ BigUint64Array,
37
+ ];
38
+
39
+ // these are global objects that are not serializable.
40
+ // values are repeated from nonSerializableClasses, as if they are classes or global object depends in typescript stn lib types and these can change
41
+ export const nonSerializableGlobals = [
42
+ // TODO: decide what to do with native errors, they should be easily serializable
43
+ 'Error',
44
+ 'EvalError',
45
+ 'RangeError',
46
+ 'ReferenceError',
47
+ 'SyntaxError',
48
+ 'TypeError',
49
+ 'URIError',
50
+ 'AggregateError',
51
+ // data types
52
+ 'WeakMap',
53
+ 'WeakSet',
54
+ 'DataView',
55
+ 'ArrayBuffer',
56
+ 'SharedArrayBuffer',
57
+ 'Float32Array',
58
+ 'Float64Array',
59
+ 'Int8Array',
60
+ 'Int16Array',
61
+ 'Int32Array',
62
+ 'Uint8Array',
63
+ 'Uint8ClampedArray',
64
+ 'Uint16Array',
65
+ 'Uint32Array',
66
+ 'BigInt64Array',
67
+ 'BigUint64Array',
68
+ // bellow are common interface names from standard libraries, they added here but not tested
69
+ 'Generator',
70
+ 'GeneratorFunction',
71
+ 'AsyncGenerator',
72
+ 'Iterator',
73
+ 'AsyncGeneratorFunction',
74
+ 'AsyncIterator',
75
+ ];
76
+
77
+ // typescript utility types
78
+ export const nativeUtilityStringTypes = ['Uppercase', 'Lowercase', 'Capitalize', 'Uncapitalize'];
79
+
80
+ // other constants
81
+ export const validPropertyNameRegExp = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
82
+ export const maxStackErrorMessage =
83
+ 'Max compilation nested level reached, either you have a very deeply nested type or there is an error related to circular references un the types.';
84
+ export const JIT_STACK_TRACE_MESSAGE = '\nJIT runType trace => ';
85
+ export const MAX_UNION_ITEMS = 2 ** 16 - 1;
@@ -0,0 +1,322 @@
1
+ /* eslint-disable no-case-declarations */
2
+ /* ########
3
+ * 2024 mion
4
+ * Author: Ma-jerez
5
+ * License: MIT
6
+ * The software is provided "as is", without warranty of any kind.
7
+ * ######## */
8
+
9
+ import type {RunType, Mutable, SrcType} from './types.ts';
10
+ import type {BaseRunType} from './lib/baseRunTypes.ts';
11
+ import type {TypeClass, Type} from '@deepkit/type';
12
+ import {ReflectionKind, resolveReceiveType, ReceiveType, reflect, typeAnnotation, stringifyType} from '@deepkit/type';
13
+ import {
14
+ hasArguments,
15
+ hasExtendsArguments,
16
+ hasImplements,
17
+ hasIndexType,
18
+ hasParameters,
19
+ hasReturn,
20
+ hasType,
21
+ hasTypes,
22
+ isNativeUtilityStringTypes,
23
+ isNonSerializableClass,
24
+ isNonSerializableObject,
25
+ } from './lib/guards.ts';
26
+ import {StringRunType} from './nodes/atomic/string.ts';
27
+ import {DateRunType} from './nodes/atomic/date.ts';
28
+ import {NumberRunType} from './nodes/atomic/number.ts';
29
+ import {BooleanRunType} from './nodes/atomic/boolean.ts';
30
+ import {NullRunType} from './nodes/atomic/null.ts';
31
+ import {BigIntRunType} from './nodes/atomic/bigInt.ts';
32
+ import {AnyRunType} from './nodes/atomic/any.ts';
33
+ import {UndefinedRunType} from './nodes/atomic/undefined.ts';
34
+ import {UnknownRunType} from './nodes/atomic/unknown.ts';
35
+ import {VoidRunType} from './nodes/atomic/void.ts';
36
+ import {ArrayRunType} from './nodes/member/array.ts';
37
+ import {LiteralRunType} from './nodes/atomic/literal.ts';
38
+ import {RegexpRunType} from './nodes/atomic/regexp.ts';
39
+ import {NeverRunType} from './nodes/atomic/never.ts';
40
+ import {EnumRunType} from './nodes/atomic/enum.ts';
41
+ import {EnumMemberRunType} from './nodes/atomic/enumMember.ts';
42
+ import {UnionRunType} from './nodes/collection/union.ts';
43
+ import {TupleRunType} from './nodes/collection/tuple.ts';
44
+ import {FunctionParamsRunType} from './nodes/collection/functionParams.ts';
45
+ import {TupleMemberRunType} from './nodes/member/tupleMember.ts';
46
+ import {InterfaceRunType} from './nodes/collection/interface.ts';
47
+ import {PropertyRunType} from './nodes/member/property.ts';
48
+ import {IndexSignatureRunType} from './nodes/member/indexProperty.ts';
49
+ import {MethodSignatureRunType} from './nodes/member/methodSignature.ts';
50
+ import {CallSignatureRunType} from './nodes/member/callSignature.ts';
51
+ import {FunctionRunType} from './nodes/function/function.ts';
52
+ import {PromiseRunType} from './nodes/native/promise.ts';
53
+ import {ObjectRunType} from './nodes/atomic/object.ts';
54
+ import {IntersectionRunType} from './nodes/collection/intersection.ts';
55
+ import {TemplateLiteralRunType} from './nodes/collection/templateLiteral.ts';
56
+ import {ParameterRunType} from './nodes/member/param.ts';
57
+ import {MethodRunType} from './nodes/member/method.ts';
58
+ import {RestParamsRunType} from './nodes/member/restParams.ts';
59
+ import {ClassRunType} from './nodes/collection/class.ts';
60
+ import {MapRunType} from './nodes/native/map.ts';
61
+ import {ReflectionSubKind} from './constants.kind.ts';
62
+ import {SetRunType} from './nodes/native/set.ts';
63
+ import {SymbolRunType} from './nodes/atomic/symbol.ts';
64
+ import {NonSerializableRunType} from './nodes/native/nonSerializable.ts';
65
+ import {registerErrorDeserializers} from '@mionjs/core';
66
+
67
+ export function runType<T>(type?: ReceiveType<T>): RunType {
68
+ const start = Date.now();
69
+ const src = resolveReceiveType(type) as SrcType;
70
+ const took0 = Date.now() - start;
71
+ createRunTypes(src);
72
+ const took1 = Date.now() - start;
73
+ const diff = took1 - took0;
74
+ // max RunType overhead 60 ms
75
+ if (diff > 60) console.warn(`RunType overhead is very long: ${diff}ms for ${stringifyType(src)}`);
76
+ return src._rt;
77
+ }
78
+
79
+ export function reflectFunction<Fn extends (...args: any[]) => any>(fn: Fn): FunctionRunType {
80
+ const src = reflect(fn) as SrcType;
81
+ runType(src);
82
+ return src._rt as FunctionRunType;
83
+ }
84
+
85
+ // We need to traverse all possible associated nodes to create all the runTypes
86
+ function createRunTypes(src: SrcType): void {
87
+ registerErrorDeserializers();
88
+ const stack: Type[] = [src];
89
+
90
+ while (stack.length > 0) {
91
+ const current = stack.pop();
92
+ if (!current || (current as SrcType)._rt) continue;
93
+
94
+ try {
95
+ createRunType(current as Mutable<SrcType>);
96
+ } catch (error) {
97
+ const typesStackMessage = '\nTypes Stack: ' + stack.map((t) => t.typeName || t.kind).join(', ');
98
+ (error as Error).message += typesStackMessage;
99
+ throw error;
100
+ }
101
+
102
+ // single child type nodes
103
+ if (hasType(current)) stack.push(current.type);
104
+ if (hasReturn(current)) stack.push(current.return);
105
+ if (hasIndexType(current)) stack.push(current.indexType);
106
+ if (current.origin) stack.push(current.origin);
107
+ if (current.indexAccessOrigin?.index) stack.push(current.indexAccessOrigin?.index);
108
+ if (current.indexAccessOrigin?.container) stack.push(current.indexAccessOrigin?.container);
109
+
110
+ // multiple child type nodes
111
+ if (hasTypes(current)) pushToStack(current.types, stack);
112
+ if (hasParameters(current)) pushToStack(current.parameters, stack);
113
+ if (hasArguments(current)) pushToStack(current.arguments, stack);
114
+ if (hasExtendsArguments(current)) pushToStack(current.extendsArguments, stack);
115
+ if (hasImplements(current)) pushToStack(current.implements, stack);
116
+ if (current.typeArguments) pushToStack(current.typeArguments, stack);
117
+ if (current.decorators) pushToStack(current.decorators, stack);
118
+ if (current.scheduleDecorators) pushToStack(current.scheduleDecorators, stack);
119
+
120
+ // annotations
121
+ if (current.annotations) {
122
+ const annotations = typeAnnotation.getAnnotations(current);
123
+ for (const annotation of annotations) stack.push(annotation.options);
124
+ }
125
+
126
+ // originTypes
127
+ current.originTypes?.forEach((ot) => {
128
+ if (ot.typeArguments) pushToStack(ot.typeArguments, stack);
129
+ });
130
+
131
+ // sometimes parent is an orphan so we need to explicitly add it to the stack
132
+ if (current.parent && !(current.parent as SrcType)?._rt) stack.push(current.parent);
133
+ }
134
+ }
135
+
136
+ function pushToStack(subTypes: Type[], stack: Type[]) {
137
+ if (Array.isArray(subTypes)) stack.push(...subTypes);
138
+ }
139
+
140
+ function createRunType(deepkitType: Mutable<SrcType>): RunType {
141
+ // console.log('deepkitType', deepkitType);
142
+
143
+ /*
144
+ RunType reference is stored in the deepkitType._runType so we can access both the deepkitType and the mion RunType,
145
+ basically every runType stores a reference to a deepkit type and vice versa.
146
+ This also relies on deepkit handling circular types to prevent infinite loop when we are generating RunTypes.
147
+ */
148
+ const existingType: RunType | undefined = deepkitType._rt;
149
+ // TODO: IMPORTANT: seems like deepkit can generate multiple types objects for the same type, so we need to handle this
150
+ // we are attaching the runType to the deepkit type (deepkitType._runType), to link the two types together
151
+ // but as deepkit can generate multiple types that means existingType will be null and the markAsCircular function is not working as expected
152
+ if (existingType) return existingType;
153
+
154
+ let rt: BaseRunType;
155
+
156
+ switch (deepkitType.kind) {
157
+ // ###################### ATOMIC RUNTYPES ######################
158
+ // Primitive types and other atomic types that don't contain other types
159
+ case ReflectionKind.any:
160
+ rt = new AnyRunType();
161
+ break;
162
+ case ReflectionKind.bigint:
163
+ rt = new BigIntRunType();
164
+ break;
165
+ case ReflectionKind.boolean:
166
+ rt = new BooleanRunType();
167
+ break;
168
+ case ReflectionKind.enum:
169
+ rt = new EnumRunType();
170
+ break;
171
+ case ReflectionKind.enumMember:
172
+ // enum members are resolved by the enum type, so this is not expected to be called
173
+ rt = new EnumMemberRunType();
174
+ break;
175
+ case ReflectionKind.literal:
176
+ rt = new LiteralRunType();
177
+ break;
178
+ case ReflectionKind.never:
179
+ // TODO add the string format feature
180
+ rt = isNativeUtilityStringTypes(deepkitType) ? new StringRunType() : new NeverRunType();
181
+ break;
182
+ case ReflectionKind.null:
183
+ rt = new NullRunType();
184
+ break;
185
+ case ReflectionKind.number:
186
+ rt = new NumberRunType();
187
+ break;
188
+ case ReflectionKind.object:
189
+ rt = new ObjectRunType();
190
+ break;
191
+ case ReflectionKind.regexp:
192
+ rt = new RegexpRunType();
193
+ break;
194
+ case ReflectionKind.string:
195
+ rt = new StringRunType();
196
+ break;
197
+ case ReflectionKind.symbol:
198
+ rt = new SymbolRunType();
199
+ break;
200
+ case ReflectionKind.templateLiteral:
201
+ // deepkit resolves finite template literal unions to literal-string unions before reaching here.
202
+ // this branch handles the open form ie: type T = `api/user/${number}` (children: literal/string/number/any/infer)
203
+ rt = new TemplateLiteralRunType();
204
+ break;
205
+ case ReflectionKind.undefined:
206
+ rt = new UndefinedRunType();
207
+ break;
208
+ case ReflectionKind.unknown:
209
+ rt = new UnknownRunType();
210
+ break;
211
+ case ReflectionKind.void:
212
+ rt = new VoidRunType();
213
+ break;
214
+
215
+ // ###################### MEMBER RUNTYPES ######################
216
+ // Types that represent members of collections or other structures
217
+ case ReflectionKind.array:
218
+ rt = new ArrayRunType();
219
+ break;
220
+ case ReflectionKind.callSignature:
221
+ rt = new CallSignatureRunType();
222
+ break;
223
+ case ReflectionKind.function:
224
+ if (deepkitType.subKind === ReflectionSubKind.params) {
225
+ rt = new FunctionParamsRunType();
226
+ } else {
227
+ const frt = new FunctionRunType();
228
+ // TODO review an change how we compile function parameters and return type
229
+ // those should also be jit functions, no need to check for array
230
+ // and maybe add option to target individual parameters
231
+ (frt.parameterRunTypes as Mutable<RunType>).src = deepkitType;
232
+ rt = frt;
233
+ }
234
+ break;
235
+ case ReflectionKind.indexSignature:
236
+ rt = new IndexSignatureRunType();
237
+ break;
238
+ case ReflectionKind.method:
239
+ rt = new MethodRunType();
240
+ break;
241
+ case ReflectionKind.methodSignature:
242
+ rt = new MethodSignatureRunType();
243
+ break;
244
+ case ReflectionKind.parameter:
245
+ rt = new ParameterRunType();
246
+ break;
247
+ case ReflectionKind.property:
248
+ case ReflectionKind.propertySignature:
249
+ rt = new PropertyRunType();
250
+ break;
251
+ case ReflectionKind.rest:
252
+ rt = new RestParamsRunType();
253
+ break;
254
+ case ReflectionKind.tupleMember:
255
+ rt = new TupleMemberRunType();
256
+ break;
257
+ case ReflectionKind.promise:
258
+ rt = new PromiseRunType();
259
+ break;
260
+
261
+ // ###################### COLLECTION RUNTYPES ######################
262
+ case ReflectionKind.objectLiteral:
263
+ if (isNonSerializableObject(deepkitType)) {
264
+ rt = new NonSerializableRunType();
265
+ } else {
266
+ rt = new InterfaceRunType();
267
+ }
268
+ break;
269
+ case ReflectionKind.class:
270
+ rt = initClassRunType(deepkitType);
271
+ break;
272
+ // Types that contain other types as members
273
+ case ReflectionKind.infer:
274
+ throw new Error(
275
+ 'Infer type not supported, ie: type MyType =Type<T> = T extends (...args: any[]) => infer R ? R : any; https://www.typescriptlang.org/docs/handbook/2/conditional-types.html'
276
+ );
277
+
278
+ case ReflectionKind.intersection:
279
+ rt = new IntersectionRunType();
280
+ break;
281
+
282
+ case ReflectionKind.tuple:
283
+ rt = new TupleRunType();
284
+ break;
285
+ case ReflectionKind.typeParameter:
286
+ throw new Error(
287
+ 'TypeParameter not implemented. Type parameters are the generic placeholders in type definitions (e.g., T in Array<T>, ErrType in TypedError<ErrType>). ' +
288
+ 'Type parameters are typically resolved during type instantiation and should not appear in runtime type checking.' +
289
+ 'This error is typically caused by a generic type missing type arguments, e.g.: TypedError instead of TypedError<"my-error">.'
290
+ );
291
+ // rType = resolveTypeParameter(deepkitType, opts, mapper);
292
+ case ReflectionKind.union:
293
+ rt = new UnionRunType();
294
+ break;
295
+ default:
296
+ rt = new AnyRunType();
297
+ break;
298
+ }
299
+ rt.onCreated(deepkitType);
300
+ // console.log('rt', rt);
301
+ return rt;
302
+ }
303
+
304
+ function initClassRunType(src: TypeClass & {subKind?: number}): BaseRunType {
305
+ switch (src.classType) {
306
+ case Date:
307
+ src.subKind = ReflectionSubKind.date;
308
+ return new DateRunType();
309
+ case Map:
310
+ src.subKind = ReflectionSubKind.map;
311
+ return new MapRunType();
312
+ case Set:
313
+ src.subKind = ReflectionSubKind.set;
314
+ return new SetRunType();
315
+ default:
316
+ if (isNonSerializableClass(src)) {
317
+ src.subKind = ReflectionSubKind.nonSerializable;
318
+ return new NonSerializableRunType();
319
+ }
320
+ return new ClassRunType();
321
+ }
322
+ }