@mionjs/run-types 0.8.0-alpha.0

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 (430) hide show
  1. package/.dist/cjs/index.cjs +209 -0
  2. package/.dist/cjs/index.cjs.map +1 -0
  3. package/.dist/cjs/index.d.ts +60 -0
  4. package/.dist/cjs/package.json +1 -0
  5. package/.dist/cjs/src/constants.cjs +79 -0
  6. package/.dist/cjs/src/constants.cjs.map +1 -0
  7. package/.dist/cjs/src/constants.d.ts +7 -0
  8. package/.dist/cjs/src/constants.functions.cjs +181 -0
  9. package/.dist/cjs/src/constants.functions.cjs.map +1 -0
  10. package/.dist/cjs/src/constants.functions.d.ts +385 -0
  11. package/.dist/cjs/src/constants.kind.cjs +74 -0
  12. package/.dist/cjs/src/constants.kind.cjs.map +1 -0
  13. package/.dist/cjs/src/constants.kind.d.ts +21 -0
  14. package/.dist/cjs/src/createRunType.cjs +284 -0
  15. package/.dist/cjs/src/createRunType.cjs.map +1 -0
  16. package/.dist/cjs/src/createRunType.d.ts +5 -0
  17. package/.dist/cjs/src/createRunTypeFunctions.cjs +78 -0
  18. package/.dist/cjs/src/createRunTypeFunctions.cjs.map +1 -0
  19. package/.dist/cjs/src/createRunTypeFunctions.d.ts +12 -0
  20. package/.dist/cjs/src/formats.runtype.cjs +7 -0
  21. package/.dist/cjs/src/formats.runtype.cjs.map +1 -0
  22. package/.dist/cjs/src/formats.runtype.d.ts +6 -0
  23. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.cjs +109 -0
  24. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.cjs.map +1 -0
  25. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts +30 -0
  26. package/.dist/cjs/src/jitCompilers/binary/fromBinary.cjs +383 -0
  27. package/.dist/cjs/src/jitCompilers/binary/fromBinary.cjs.map +1 -0
  28. package/.dist/cjs/src/jitCompilers/binary/fromBinary.d.ts +7 -0
  29. package/.dist/cjs/src/jitCompilers/binary/toBinary.cjs +338 -0
  30. package/.dist/cjs/src/jitCompilers/binary/toBinary.cjs.map +1 -0
  31. package/.dist/cjs/src/jitCompilers/binary/toBinary.d.ts +7 -0
  32. package/.dist/cjs/src/jitCompilers/equalsHelpers.cjs +37 -0
  33. package/.dist/cjs/src/jitCompilers/equalsHelpers.cjs.map +1 -0
  34. package/.dist/cjs/src/jitCompilers/equalsHelpers.d.ts +4 -0
  35. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.cjs +56 -0
  36. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.cjs.map +1 -0
  37. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts +27 -0
  38. package/.dist/cjs/src/jitCompilers/json/stringifyJson.cjs +399 -0
  39. package/.dist/cjs/src/jitCompilers/json/stringifyJson.cjs.map +1 -0
  40. package/.dist/cjs/src/jitCompilers/json/stringifyJson.d.ts +10 -0
  41. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.cjs +51 -0
  42. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.cjs.map +1 -0
  43. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts +27 -0
  44. package/.dist/cjs/src/jitCompilers/json/toJsCode.cjs +123 -0
  45. package/.dist/cjs/src/jitCompilers/json/toJsCode.cjs.map +1 -0
  46. package/.dist/cjs/src/jitCompilers/json/toJsCode.d.ts +5 -0
  47. package/.dist/cjs/src/lib/baseRunTypeFormat.cjs +200 -0
  48. package/.dist/cjs/src/lib/baseRunTypeFormat.cjs.map +1 -0
  49. package/.dist/cjs/src/lib/baseRunTypeFormat.d.ts +50 -0
  50. package/.dist/cjs/src/lib/baseRunTypes.cjs +308 -0
  51. package/.dist/cjs/src/lib/baseRunTypes.cjs.map +1 -0
  52. package/.dist/cjs/src/lib/baseRunTypes.d.ts +75 -0
  53. package/.dist/cjs/src/lib/createJitFunction.cjs +60 -0
  54. package/.dist/cjs/src/lib/createJitFunction.cjs.map +1 -0
  55. package/.dist/cjs/src/lib/createJitFunction.d.ts +5 -0
  56. package/.dist/cjs/src/lib/dkProxy.cjs +23 -0
  57. package/.dist/cjs/src/lib/dkProxy.cjs.map +1 -0
  58. package/.dist/cjs/src/lib/dkProxy.d.ts +4 -0
  59. package/.dist/cjs/src/lib/formats.cjs +89 -0
  60. package/.dist/cjs/src/lib/formats.cjs.map +1 -0
  61. package/.dist/cjs/src/lib/formats.d.ts +18 -0
  62. package/.dist/cjs/src/lib/guards.cjs +243 -0
  63. package/.dist/cjs/src/lib/guards.cjs.map +1 -0
  64. package/.dist/cjs/src/lib/guards.d.ts +120 -0
  65. package/.dist/cjs/src/lib/jitFnCompiler.cjs +648 -0
  66. package/.dist/cjs/src/lib/jitFnCompiler.cjs.map +1 -0
  67. package/.dist/cjs/src/lib/jitFnCompiler.d.ts +109 -0
  68. package/.dist/cjs/src/lib/jitFnsRegistry.cjs +41 -0
  69. package/.dist/cjs/src/lib/jitFnsRegistry.cjs.map +1 -0
  70. package/.dist/cjs/src/lib/jitFnsRegistry.d.ts +6 -0
  71. package/.dist/cjs/src/lib/typeId.cjs +205 -0
  72. package/.dist/cjs/src/lib/typeId.cjs.map +1 -0
  73. package/.dist/cjs/src/lib/typeId.d.ts +6 -0
  74. package/.dist/cjs/src/lib/utils.cjs +325 -0
  75. package/.dist/cjs/src/lib/utils.cjs.map +1 -0
  76. package/.dist/cjs/src/lib/utils.d.ts +32 -0
  77. package/.dist/cjs/src/mocking/constants.mock.cjs +108 -0
  78. package/.dist/cjs/src/mocking/constants.mock.cjs.map +1 -0
  79. package/.dist/cjs/src/mocking/constants.mock.d.ts +85 -0
  80. package/.dist/cjs/src/mocking/mockRegistry.cjs +12 -0
  81. package/.dist/cjs/src/mocking/mockRegistry.cjs.map +1 -0
  82. package/.dist/cjs/src/mocking/mockRegistry.d.ts +3 -0
  83. package/.dist/cjs/src/mocking/mockType.cjs +310 -0
  84. package/.dist/cjs/src/mocking/mockType.cjs.map +1 -0
  85. package/.dist/cjs/src/mocking/mockType.d.ts +3 -0
  86. package/.dist/cjs/src/mocking/mockUtils.cjs +62 -0
  87. package/.dist/cjs/src/mocking/mockUtils.cjs.map +1 -0
  88. package/.dist/cjs/src/mocking/mockUtils.d.ts +15 -0
  89. package/.dist/cjs/src/nodes/atomic/any.cjs +18 -0
  90. package/.dist/cjs/src/nodes/atomic/any.cjs.map +1 -0
  91. package/.dist/cjs/src/nodes/atomic/any.d.ts +8 -0
  92. package/.dist/cjs/src/nodes/atomic/bigInt.cjs +20 -0
  93. package/.dist/cjs/src/nodes/atomic/bigInt.cjs.map +1 -0
  94. package/.dist/cjs/src/nodes/atomic/bigInt.d.ts +10 -0
  95. package/.dist/cjs/src/nodes/atomic/boolean.cjs +20 -0
  96. package/.dist/cjs/src/nodes/atomic/boolean.cjs.map +1 -0
  97. package/.dist/cjs/src/nodes/atomic/boolean.d.ts +10 -0
  98. package/.dist/cjs/src/nodes/atomic/date.cjs +20 -0
  99. package/.dist/cjs/src/nodes/atomic/date.cjs.map +1 -0
  100. package/.dist/cjs/src/nodes/atomic/date.d.ts +10 -0
  101. package/.dist/cjs/src/nodes/atomic/enum.cjs +22 -0
  102. package/.dist/cjs/src/nodes/atomic/enum.cjs.map +1 -0
  103. package/.dist/cjs/src/nodes/atomic/enum.d.ts +8 -0
  104. package/.dist/cjs/src/nodes/atomic/enumMember.cjs +24 -0
  105. package/.dist/cjs/src/nodes/atomic/enumMember.cjs.map +1 -0
  106. package/.dist/cjs/src/nodes/atomic/enumMember.d.ts +10 -0
  107. package/.dist/cjs/src/nodes/atomic/literal.cjs +126 -0
  108. package/.dist/cjs/src/nodes/atomic/literal.cjs.map +1 -0
  109. package/.dist/cjs/src/nodes/atomic/literal.d.ts +20 -0
  110. package/.dist/cjs/src/nodes/atomic/never.cjs +22 -0
  111. package/.dist/cjs/src/nodes/atomic/never.cjs.map +1 -0
  112. package/.dist/cjs/src/nodes/atomic/never.d.ts +10 -0
  113. package/.dist/cjs/src/nodes/atomic/null.cjs +20 -0
  114. package/.dist/cjs/src/nodes/atomic/null.cjs.map +1 -0
  115. package/.dist/cjs/src/nodes/atomic/null.d.ts +10 -0
  116. package/.dist/cjs/src/nodes/atomic/number.cjs +20 -0
  117. package/.dist/cjs/src/nodes/atomic/number.cjs.map +1 -0
  118. package/.dist/cjs/src/nodes/atomic/number.d.ts +10 -0
  119. package/.dist/cjs/src/nodes/atomic/object.cjs +14 -0
  120. package/.dist/cjs/src/nodes/atomic/object.cjs.map +1 -0
  121. package/.dist/cjs/src/nodes/atomic/object.d.ts +8 -0
  122. package/.dist/cjs/src/nodes/atomic/regexp.cjs +23 -0
  123. package/.dist/cjs/src/nodes/atomic/regexp.cjs.map +1 -0
  124. package/.dist/cjs/src/nodes/atomic/regexp.d.ts +10 -0
  125. package/.dist/cjs/src/nodes/atomic/string.cjs +14 -0
  126. package/.dist/cjs/src/nodes/atomic/string.cjs.map +1 -0
  127. package/.dist/cjs/src/nodes/atomic/string.d.ts +8 -0
  128. package/.dist/cjs/src/nodes/atomic/symbol.cjs +26 -0
  129. package/.dist/cjs/src/nodes/atomic/symbol.cjs.map +1 -0
  130. package/.dist/cjs/src/nodes/atomic/symbol.d.ts +11 -0
  131. package/.dist/cjs/src/nodes/atomic/undefined.cjs +17 -0
  132. package/.dist/cjs/src/nodes/atomic/undefined.cjs.map +1 -0
  133. package/.dist/cjs/src/nodes/atomic/undefined.d.ts +9 -0
  134. package/.dist/cjs/src/nodes/atomic/unknown.cjs +8 -0
  135. package/.dist/cjs/src/nodes/atomic/unknown.cjs.map +1 -0
  136. package/.dist/cjs/src/nodes/atomic/unknown.d.ts +3 -0
  137. package/.dist/cjs/src/nodes/atomic/void.cjs +20 -0
  138. package/.dist/cjs/src/nodes/atomic/void.cjs.map +1 -0
  139. package/.dist/cjs/src/nodes/atomic/void.d.ts +10 -0
  140. package/.dist/cjs/src/nodes/collection/class.cjs +38 -0
  141. package/.dist/cjs/src/nodes/collection/class.cjs.map +1 -0
  142. package/.dist/cjs/src/nodes/collection/class.d.ts +9 -0
  143. package/.dist/cjs/src/nodes/collection/functionParams.cjs +33 -0
  144. package/.dist/cjs/src/nodes/collection/functionParams.cjs.map +1 -0
  145. package/.dist/cjs/src/nodes/collection/functionParams.d.ts +9 -0
  146. package/.dist/cjs/src/nodes/collection/interface.cjs +221 -0
  147. package/.dist/cjs/src/nodes/collection/interface.cjs.map +1 -0
  148. package/.dist/cjs/src/nodes/collection/interface.d.ts +43 -0
  149. package/.dist/cjs/src/nodes/collection/intersection.cjs +21 -0
  150. package/.dist/cjs/src/nodes/collection/intersection.cjs.map +1 -0
  151. package/.dist/cjs/src/nodes/collection/intersection.d.ts +9 -0
  152. package/.dist/cjs/src/nodes/collection/tuple.cjs +74 -0
  153. package/.dist/cjs/src/nodes/collection/tuple.cjs.map +1 -0
  154. package/.dist/cjs/src/nodes/collection/tuple.d.ts +18 -0
  155. package/.dist/cjs/src/nodes/collection/union.cjs +162 -0
  156. package/.dist/cjs/src/nodes/collection/union.cjs.map +1 -0
  157. package/.dist/cjs/src/nodes/collection/union.d.ts +19 -0
  158. package/.dist/cjs/src/nodes/collection/unionDiscriminator.cjs +198 -0
  159. package/.dist/cjs/src/nodes/collection/unionDiscriminator.cjs.map +1 -0
  160. package/.dist/cjs/src/nodes/collection/unionDiscriminator.d.ts +21 -0
  161. package/.dist/cjs/src/nodes/function/function.cjs +155 -0
  162. package/.dist/cjs/src/nodes/function/function.cjs.map +1 -0
  163. package/.dist/cjs/src/nodes/function/function.d.ts +33 -0
  164. package/.dist/cjs/src/nodes/member/array.cjs +154 -0
  165. package/.dist/cjs/src/nodes/member/array.cjs.map +1 -0
  166. package/.dist/cjs/src/nodes/member/array.d.ts +24 -0
  167. package/.dist/cjs/src/nodes/member/callSignature.cjs +40 -0
  168. package/.dist/cjs/src/nodes/member/callSignature.cjs.map +1 -0
  169. package/.dist/cjs/src/nodes/member/callSignature.d.ts +11 -0
  170. package/.dist/cjs/src/nodes/member/genericMember.cjs +68 -0
  171. package/.dist/cjs/src/nodes/member/genericMember.cjs.map +1 -0
  172. package/.dist/cjs/src/nodes/member/genericMember.d.ts +15 -0
  173. package/.dist/cjs/src/nodes/member/indexProperty.cjs +130 -0
  174. package/.dist/cjs/src/nodes/member/indexProperty.cjs.map +1 -0
  175. package/.dist/cjs/src/nodes/member/indexProperty.d.ts +21 -0
  176. package/.dist/cjs/src/nodes/member/method.cjs +41 -0
  177. package/.dist/cjs/src/nodes/member/method.cjs.map +1 -0
  178. package/.dist/cjs/src/nodes/member/method.d.ts +11 -0
  179. package/.dist/cjs/src/nodes/member/methodSignature.cjs +44 -0
  180. package/.dist/cjs/src/nodes/member/methodSignature.cjs.map +1 -0
  181. package/.dist/cjs/src/nodes/member/methodSignature.d.ts +12 -0
  182. package/.dist/cjs/src/nodes/member/param.cjs +17 -0
  183. package/.dist/cjs/src/nodes/member/param.cjs.map +1 -0
  184. package/.dist/cjs/src/nodes/member/param.d.ts +8 -0
  185. package/.dist/cjs/src/nodes/member/property.cjs +85 -0
  186. package/.dist/cjs/src/nodes/member/property.cjs.map +1 -0
  187. package/.dist/cjs/src/nodes/member/property.d.ts +19 -0
  188. package/.dist/cjs/src/nodes/member/restParams.cjs +15 -0
  189. package/.dist/cjs/src/nodes/member/restParams.cjs.map +1 -0
  190. package/.dist/cjs/src/nodes/member/restParams.d.ts +7 -0
  191. package/.dist/cjs/src/nodes/member/tupleMember.cjs +93 -0
  192. package/.dist/cjs/src/nodes/member/tupleMember.cjs.map +1 -0
  193. package/.dist/cjs/src/nodes/member/tupleMember.d.ts +20 -0
  194. package/.dist/cjs/src/nodes/native/Iterable.cjs +135 -0
  195. package/.dist/cjs/src/nodes/native/Iterable.cjs.map +1 -0
  196. package/.dist/cjs/src/nodes/native/Iterable.d.ts +18 -0
  197. package/.dist/cjs/src/nodes/native/map.cjs +96 -0
  198. package/.dist/cjs/src/nodes/native/map.cjs.map +1 -0
  199. package/.dist/cjs/src/nodes/native/map.d.ts +42 -0
  200. package/.dist/cjs/src/nodes/native/nonSerializable.cjs +36 -0
  201. package/.dist/cjs/src/nodes/native/nonSerializable.cjs.map +1 -0
  202. package/.dist/cjs/src/nodes/native/nonSerializable.d.ts +14 -0
  203. package/.dist/cjs/src/nodes/native/promise.cjs +38 -0
  204. package/.dist/cjs/src/nodes/native/promise.cjs.map +1 -0
  205. package/.dist/cjs/src/nodes/native/promise.d.ts +15 -0
  206. package/.dist/cjs/src/nodes/native/set.cjs +60 -0
  207. package/.dist/cjs/src/nodes/native/set.cjs.map +1 -0
  208. package/.dist/cjs/src/nodes/native/set.d.ts +30 -0
  209. package/.dist/cjs/src/run-types-pure-fns.cjs +112 -0
  210. package/.dist/cjs/src/run-types-pure-fns.cjs.map +1 -0
  211. package/.dist/cjs/src/run-types-pure-fns.d.ts +7 -0
  212. package/.dist/cjs/src/types.cjs +59 -0
  213. package/.dist/cjs/src/types.cjs.map +1 -0
  214. package/.dist/cjs/src/types.d.ts +152 -0
  215. package/.dist/esm/index.d.ts +60 -0
  216. package/.dist/esm/index.js +209 -0
  217. package/.dist/esm/index.js.map +1 -0
  218. package/.dist/esm/src/constants.d.ts +7 -0
  219. package/.dist/esm/src/constants.functions.d.ts +385 -0
  220. package/.dist/esm/src/constants.functions.js +181 -0
  221. package/.dist/esm/src/constants.functions.js.map +1 -0
  222. package/.dist/esm/src/constants.js +79 -0
  223. package/.dist/esm/src/constants.js.map +1 -0
  224. package/.dist/esm/src/constants.kind.d.ts +21 -0
  225. package/.dist/esm/src/constants.kind.js +74 -0
  226. package/.dist/esm/src/constants.kind.js.map +1 -0
  227. package/.dist/esm/src/createRunType.d.ts +5 -0
  228. package/.dist/esm/src/createRunType.js +284 -0
  229. package/.dist/esm/src/createRunType.js.map +1 -0
  230. package/.dist/esm/src/createRunTypeFunctions.d.ts +12 -0
  231. package/.dist/esm/src/createRunTypeFunctions.js +78 -0
  232. package/.dist/esm/src/createRunTypeFunctions.js.map +1 -0
  233. package/.dist/esm/src/formats.runtype.d.ts +6 -0
  234. package/.dist/esm/src/formats.runtype.js +7 -0
  235. package/.dist/esm/src/formats.runtype.js.map +1 -0
  236. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts +30 -0
  237. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.js +109 -0
  238. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.js.map +1 -0
  239. package/.dist/esm/src/jitCompilers/binary/fromBinary.d.ts +7 -0
  240. package/.dist/esm/src/jitCompilers/binary/fromBinary.js +383 -0
  241. package/.dist/esm/src/jitCompilers/binary/fromBinary.js.map +1 -0
  242. package/.dist/esm/src/jitCompilers/binary/toBinary.d.ts +7 -0
  243. package/.dist/esm/src/jitCompilers/binary/toBinary.js +338 -0
  244. package/.dist/esm/src/jitCompilers/binary/toBinary.js.map +1 -0
  245. package/.dist/esm/src/jitCompilers/equalsHelpers.d.ts +4 -0
  246. package/.dist/esm/src/jitCompilers/equalsHelpers.js +37 -0
  247. package/.dist/esm/src/jitCompilers/equalsHelpers.js.map +1 -0
  248. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts +27 -0
  249. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.js +56 -0
  250. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.js.map +1 -0
  251. package/.dist/esm/src/jitCompilers/json/stringifyJson.d.ts +10 -0
  252. package/.dist/esm/src/jitCompilers/json/stringifyJson.js +399 -0
  253. package/.dist/esm/src/jitCompilers/json/stringifyJson.js.map +1 -0
  254. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts +27 -0
  255. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.js +51 -0
  256. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.js.map +1 -0
  257. package/.dist/esm/src/jitCompilers/json/toJsCode.d.ts +5 -0
  258. package/.dist/esm/src/jitCompilers/json/toJsCode.js +123 -0
  259. package/.dist/esm/src/jitCompilers/json/toJsCode.js.map +1 -0
  260. package/.dist/esm/src/lib/baseRunTypeFormat.d.ts +50 -0
  261. package/.dist/esm/src/lib/baseRunTypeFormat.js +200 -0
  262. package/.dist/esm/src/lib/baseRunTypeFormat.js.map +1 -0
  263. package/.dist/esm/src/lib/baseRunTypes.d.ts +75 -0
  264. package/.dist/esm/src/lib/baseRunTypes.js +308 -0
  265. package/.dist/esm/src/lib/baseRunTypes.js.map +1 -0
  266. package/.dist/esm/src/lib/createJitFunction.d.ts +5 -0
  267. package/.dist/esm/src/lib/createJitFunction.js +60 -0
  268. package/.dist/esm/src/lib/createJitFunction.js.map +1 -0
  269. package/.dist/esm/src/lib/dkProxy.d.ts +4 -0
  270. package/.dist/esm/src/lib/dkProxy.js +23 -0
  271. package/.dist/esm/src/lib/dkProxy.js.map +1 -0
  272. package/.dist/esm/src/lib/formats.d.ts +18 -0
  273. package/.dist/esm/src/lib/formats.js +89 -0
  274. package/.dist/esm/src/lib/formats.js.map +1 -0
  275. package/.dist/esm/src/lib/guards.d.ts +120 -0
  276. package/.dist/esm/src/lib/guards.js +243 -0
  277. package/.dist/esm/src/lib/guards.js.map +1 -0
  278. package/.dist/esm/src/lib/jitFnCompiler.d.ts +109 -0
  279. package/.dist/esm/src/lib/jitFnCompiler.js +648 -0
  280. package/.dist/esm/src/lib/jitFnCompiler.js.map +1 -0
  281. package/.dist/esm/src/lib/jitFnsRegistry.d.ts +6 -0
  282. package/.dist/esm/src/lib/jitFnsRegistry.js +41 -0
  283. package/.dist/esm/src/lib/jitFnsRegistry.js.map +1 -0
  284. package/.dist/esm/src/lib/typeId.d.ts +6 -0
  285. package/.dist/esm/src/lib/typeId.js +205 -0
  286. package/.dist/esm/src/lib/typeId.js.map +1 -0
  287. package/.dist/esm/src/lib/utils.d.ts +32 -0
  288. package/.dist/esm/src/lib/utils.js +325 -0
  289. package/.dist/esm/src/lib/utils.js.map +1 -0
  290. package/.dist/esm/src/mocking/constants.mock.d.ts +85 -0
  291. package/.dist/esm/src/mocking/constants.mock.js +108 -0
  292. package/.dist/esm/src/mocking/constants.mock.js.map +1 -0
  293. package/.dist/esm/src/mocking/mockRegistry.d.ts +3 -0
  294. package/.dist/esm/src/mocking/mockRegistry.js +12 -0
  295. package/.dist/esm/src/mocking/mockRegistry.js.map +1 -0
  296. package/.dist/esm/src/mocking/mockType.d.ts +3 -0
  297. package/.dist/esm/src/mocking/mockType.js +310 -0
  298. package/.dist/esm/src/mocking/mockType.js.map +1 -0
  299. package/.dist/esm/src/mocking/mockUtils.d.ts +15 -0
  300. package/.dist/esm/src/mocking/mockUtils.js +62 -0
  301. package/.dist/esm/src/mocking/mockUtils.js.map +1 -0
  302. package/.dist/esm/src/nodes/atomic/any.d.ts +8 -0
  303. package/.dist/esm/src/nodes/atomic/any.js +18 -0
  304. package/.dist/esm/src/nodes/atomic/any.js.map +1 -0
  305. package/.dist/esm/src/nodes/atomic/bigInt.d.ts +10 -0
  306. package/.dist/esm/src/nodes/atomic/bigInt.js +20 -0
  307. package/.dist/esm/src/nodes/atomic/bigInt.js.map +1 -0
  308. package/.dist/esm/src/nodes/atomic/boolean.d.ts +10 -0
  309. package/.dist/esm/src/nodes/atomic/boolean.js +20 -0
  310. package/.dist/esm/src/nodes/atomic/boolean.js.map +1 -0
  311. package/.dist/esm/src/nodes/atomic/date.d.ts +10 -0
  312. package/.dist/esm/src/nodes/atomic/date.js +20 -0
  313. package/.dist/esm/src/nodes/atomic/date.js.map +1 -0
  314. package/.dist/esm/src/nodes/atomic/enum.d.ts +8 -0
  315. package/.dist/esm/src/nodes/atomic/enum.js +22 -0
  316. package/.dist/esm/src/nodes/atomic/enum.js.map +1 -0
  317. package/.dist/esm/src/nodes/atomic/enumMember.d.ts +10 -0
  318. package/.dist/esm/src/nodes/atomic/enumMember.js +24 -0
  319. package/.dist/esm/src/nodes/atomic/enumMember.js.map +1 -0
  320. package/.dist/esm/src/nodes/atomic/literal.d.ts +20 -0
  321. package/.dist/esm/src/nodes/atomic/literal.js +126 -0
  322. package/.dist/esm/src/nodes/atomic/literal.js.map +1 -0
  323. package/.dist/esm/src/nodes/atomic/never.d.ts +10 -0
  324. package/.dist/esm/src/nodes/atomic/never.js +22 -0
  325. package/.dist/esm/src/nodes/atomic/never.js.map +1 -0
  326. package/.dist/esm/src/nodes/atomic/null.d.ts +10 -0
  327. package/.dist/esm/src/nodes/atomic/null.js +20 -0
  328. package/.dist/esm/src/nodes/atomic/null.js.map +1 -0
  329. package/.dist/esm/src/nodes/atomic/number.d.ts +10 -0
  330. package/.dist/esm/src/nodes/atomic/number.js +20 -0
  331. package/.dist/esm/src/nodes/atomic/number.js.map +1 -0
  332. package/.dist/esm/src/nodes/atomic/object.d.ts +8 -0
  333. package/.dist/esm/src/nodes/atomic/object.js +14 -0
  334. package/.dist/esm/src/nodes/atomic/object.js.map +1 -0
  335. package/.dist/esm/src/nodes/atomic/regexp.d.ts +10 -0
  336. package/.dist/esm/src/nodes/atomic/regexp.js +23 -0
  337. package/.dist/esm/src/nodes/atomic/regexp.js.map +1 -0
  338. package/.dist/esm/src/nodes/atomic/string.d.ts +8 -0
  339. package/.dist/esm/src/nodes/atomic/string.js +14 -0
  340. package/.dist/esm/src/nodes/atomic/string.js.map +1 -0
  341. package/.dist/esm/src/nodes/atomic/symbol.d.ts +11 -0
  342. package/.dist/esm/src/nodes/atomic/symbol.js +26 -0
  343. package/.dist/esm/src/nodes/atomic/symbol.js.map +1 -0
  344. package/.dist/esm/src/nodes/atomic/undefined.d.ts +9 -0
  345. package/.dist/esm/src/nodes/atomic/undefined.js +17 -0
  346. package/.dist/esm/src/nodes/atomic/undefined.js.map +1 -0
  347. package/.dist/esm/src/nodes/atomic/unknown.d.ts +3 -0
  348. package/.dist/esm/src/nodes/atomic/unknown.js +8 -0
  349. package/.dist/esm/src/nodes/atomic/unknown.js.map +1 -0
  350. package/.dist/esm/src/nodes/atomic/void.d.ts +10 -0
  351. package/.dist/esm/src/nodes/atomic/void.js +20 -0
  352. package/.dist/esm/src/nodes/atomic/void.js.map +1 -0
  353. package/.dist/esm/src/nodes/collection/class.d.ts +9 -0
  354. package/.dist/esm/src/nodes/collection/class.js +38 -0
  355. package/.dist/esm/src/nodes/collection/class.js.map +1 -0
  356. package/.dist/esm/src/nodes/collection/functionParams.d.ts +9 -0
  357. package/.dist/esm/src/nodes/collection/functionParams.js +33 -0
  358. package/.dist/esm/src/nodes/collection/functionParams.js.map +1 -0
  359. package/.dist/esm/src/nodes/collection/interface.d.ts +43 -0
  360. package/.dist/esm/src/nodes/collection/interface.js +221 -0
  361. package/.dist/esm/src/nodes/collection/interface.js.map +1 -0
  362. package/.dist/esm/src/nodes/collection/intersection.d.ts +9 -0
  363. package/.dist/esm/src/nodes/collection/intersection.js +21 -0
  364. package/.dist/esm/src/nodes/collection/intersection.js.map +1 -0
  365. package/.dist/esm/src/nodes/collection/tuple.d.ts +18 -0
  366. package/.dist/esm/src/nodes/collection/tuple.js +74 -0
  367. package/.dist/esm/src/nodes/collection/tuple.js.map +1 -0
  368. package/.dist/esm/src/nodes/collection/union.d.ts +19 -0
  369. package/.dist/esm/src/nodes/collection/union.js +162 -0
  370. package/.dist/esm/src/nodes/collection/union.js.map +1 -0
  371. package/.dist/esm/src/nodes/collection/unionDiscriminator.d.ts +21 -0
  372. package/.dist/esm/src/nodes/collection/unionDiscriminator.js +198 -0
  373. package/.dist/esm/src/nodes/collection/unionDiscriminator.js.map +1 -0
  374. package/.dist/esm/src/nodes/function/function.d.ts +33 -0
  375. package/.dist/esm/src/nodes/function/function.js +155 -0
  376. package/.dist/esm/src/nodes/function/function.js.map +1 -0
  377. package/.dist/esm/src/nodes/member/array.d.ts +24 -0
  378. package/.dist/esm/src/nodes/member/array.js +154 -0
  379. package/.dist/esm/src/nodes/member/array.js.map +1 -0
  380. package/.dist/esm/src/nodes/member/callSignature.d.ts +11 -0
  381. package/.dist/esm/src/nodes/member/callSignature.js +40 -0
  382. package/.dist/esm/src/nodes/member/callSignature.js.map +1 -0
  383. package/.dist/esm/src/nodes/member/genericMember.d.ts +15 -0
  384. package/.dist/esm/src/nodes/member/genericMember.js +68 -0
  385. package/.dist/esm/src/nodes/member/genericMember.js.map +1 -0
  386. package/.dist/esm/src/nodes/member/indexProperty.d.ts +21 -0
  387. package/.dist/esm/src/nodes/member/indexProperty.js +130 -0
  388. package/.dist/esm/src/nodes/member/indexProperty.js.map +1 -0
  389. package/.dist/esm/src/nodes/member/method.d.ts +11 -0
  390. package/.dist/esm/src/nodes/member/method.js +41 -0
  391. package/.dist/esm/src/nodes/member/method.js.map +1 -0
  392. package/.dist/esm/src/nodes/member/methodSignature.d.ts +12 -0
  393. package/.dist/esm/src/nodes/member/methodSignature.js +44 -0
  394. package/.dist/esm/src/nodes/member/methodSignature.js.map +1 -0
  395. package/.dist/esm/src/nodes/member/param.d.ts +8 -0
  396. package/.dist/esm/src/nodes/member/param.js +17 -0
  397. package/.dist/esm/src/nodes/member/param.js.map +1 -0
  398. package/.dist/esm/src/nodes/member/property.d.ts +19 -0
  399. package/.dist/esm/src/nodes/member/property.js +85 -0
  400. package/.dist/esm/src/nodes/member/property.js.map +1 -0
  401. package/.dist/esm/src/nodes/member/restParams.d.ts +7 -0
  402. package/.dist/esm/src/nodes/member/restParams.js +15 -0
  403. package/.dist/esm/src/nodes/member/restParams.js.map +1 -0
  404. package/.dist/esm/src/nodes/member/tupleMember.d.ts +20 -0
  405. package/.dist/esm/src/nodes/member/tupleMember.js +93 -0
  406. package/.dist/esm/src/nodes/member/tupleMember.js.map +1 -0
  407. package/.dist/esm/src/nodes/native/Iterable.d.ts +18 -0
  408. package/.dist/esm/src/nodes/native/Iterable.js +135 -0
  409. package/.dist/esm/src/nodes/native/Iterable.js.map +1 -0
  410. package/.dist/esm/src/nodes/native/map.d.ts +42 -0
  411. package/.dist/esm/src/nodes/native/map.js +96 -0
  412. package/.dist/esm/src/nodes/native/map.js.map +1 -0
  413. package/.dist/esm/src/nodes/native/nonSerializable.d.ts +14 -0
  414. package/.dist/esm/src/nodes/native/nonSerializable.js +36 -0
  415. package/.dist/esm/src/nodes/native/nonSerializable.js.map +1 -0
  416. package/.dist/esm/src/nodes/native/promise.d.ts +15 -0
  417. package/.dist/esm/src/nodes/native/promise.js +38 -0
  418. package/.dist/esm/src/nodes/native/promise.js.map +1 -0
  419. package/.dist/esm/src/nodes/native/set.d.ts +30 -0
  420. package/.dist/esm/src/nodes/native/set.js +60 -0
  421. package/.dist/esm/src/nodes/native/set.js.map +1 -0
  422. package/.dist/esm/src/run-types-pure-fns.d.ts +7 -0
  423. package/.dist/esm/src/run-types-pure-fns.js +112 -0
  424. package/.dist/esm/src/run-types-pure-fns.js.map +1 -0
  425. package/.dist/esm/src/types.d.ts +152 -0
  426. package/.dist/esm/src/types.js +59 -0
  427. package/.dist/esm/src/types.js.map +1 -0
  428. package/LICENSE +21 -0
  429. package/README.md +32 -0
  430. package/package.json +66 -0
@@ -0,0 +1,648 @@
1
+ import { getJitUtils, MAX_STACK_DEPTH, quickHash } from "@mionjs/core";
2
+ import { getReflectionName } from "../constants.kind.js";
3
+ import { maxStackErrorMessage, JIT_STACK_TRACE_MESSAGE } from "../constants.js";
4
+ import { JitFunctions, CodeTypes, jitErrorArgs } from "../constants.functions.js";
5
+ import { getJITFnName, getJitFnSettings } from "./jitFnsRegistry.js";
6
+ import { isJitErrorsCompiler, isChildAccessorType, isFunctionParamsRunType } from "./guards.js";
7
+ import { getJitFnArgCallVarName, toLiteral, addFullStop, toLiteralInContext } from "./utils.js";
8
+ import { getRunTypeFormat } from "./formats.js";
9
+ import { emitJsonStringify } from "../jitCompilers/json/stringifyJson.js";
10
+ import { emitToBinary } from "../jitCompilers/binary/toBinary.js";
11
+ import { emitFromBinary } from "../jitCompilers/binary/fromBinary.js";
12
+ import { emitToCode } from "../jitCompilers/json/toJsCode.js";
13
+ import { getJITFnHash, createJitFunction } from "./createJitFunction.js";
14
+ import { cpf_newRunTypeErr, cpf_formatErr } from "../run-types-pure-fns.js";
15
+ const RB = CodeTypes.returnBlock;
16
+ const S = CodeTypes.statement;
17
+ const E = CodeTypes.expression;
18
+ class BaseFnCompiler {
19
+ constructor(rootType, fnID, jitFnSettings, parentCompiler, jitFnHash, typeID, opts = {}) {
20
+ this.rootType = rootType;
21
+ this.fnID = fnID;
22
+ this.parentCompiler = parentCompiler;
23
+ this.opts = opts;
24
+ this.typeName = this.rootType.getTypeName();
25
+ this.jitFnHash = jitFnHash || getJITFnHash(this.fnID, this.rootType, opts);
26
+ this.typeID = typeID || this.rootType.getTypeID();
27
+ this.args = { ...jitFnSettings.jitArgs };
28
+ this.defaultParamValues = { ...jitFnSettings.jitDefaultArgs };
29
+ this.returnName = jitFnSettings.returnName;
30
+ if (this.args.vλl) this.vλl = this.args.vλl;
31
+ getJitUtils().addToJitCache(this);
32
+ validateCompilerOptions(opts);
33
+ }
34
+ // !!! DO NOT MODIFY METHOD WITHOUT REVIEWING JIT CODE INVOCATIONS!!!
35
+ /** The Jit Generated function once the compilation is finished */
36
+ fn;
37
+ createJitFn;
38
+ isCompiled = false;
39
+ typeName;
40
+ typeID;
41
+ jitFnHash;
42
+ args;
43
+ defaultParamValues;
44
+ returnName;
45
+ /** Alternative arguments to use when calling a child function */
46
+ childrenCallArgs = {};
47
+ /** Code for the jit function. after the operation has been compiled */
48
+ code = "";
49
+ /** Code for the context function enclosing the jit function.
50
+ * This can be used to initialize constant or some other things that will be required across all invocation.
51
+ * By default this contains constants for the direct dependencies of the jit function.
52
+ * */
53
+ contextCodeItems = /* @__PURE__ */ new Map();
54
+ /**
55
+ * This flag is set to true when the result of a jit compilation is a no operation (empty function).
56
+ * Some jit compiled functions could execute no operations (ie: string, boolean and numbers does not require prepareForJson/restoreFromJson)
57
+ */
58
+ isNoop = false;
59
+ /** The list of all jit functions that are used by this function and it's children. */
60
+ jitDependencies = [];
61
+ pureFnDependencies = [];
62
+ /** The list of types being compiled.*/
63
+ stack = [];
64
+ popItem;
65
+ /** shorthand for this.length */
66
+ get length() {
67
+ return this.stack.length;
68
+ }
69
+ get totalLength() {
70
+ if (this.parentCompiler) return this.stack.length + this.parentCompiler.totalLength;
71
+ return this.stack.length;
72
+ }
73
+ /** The variable name for the current item in the stack. */
74
+ vλl = "";
75
+ getNestLevel(rt) {
76
+ let index = -1;
77
+ this.stack.forEach((item, i) => {
78
+ if (item.rt === rt) index = i;
79
+ if (item.rt.src.id && item.rt.src.id === rt.src.id) index = i;
80
+ });
81
+ if (index !== -1) return index;
82
+ const fromParent = this.parentCompiler?.getNestLevel(rt);
83
+ if (fromParent && fromParent !== -1) return fromParent;
84
+ return -1;
85
+ }
86
+ varNameindex = /* @__PURE__ */ new Map();
87
+ getLocalVarName(prefix, rt) {
88
+ const key = rt.src.id || rt;
89
+ const index = this.varNameindex.get(key);
90
+ if (index !== void 0) return `${prefix}${index}`;
91
+ const newIndex = this.varNameindex.size;
92
+ this.varNameindex.set(key, newIndex);
93
+ return `${prefix}${newIndex}`;
94
+ }
95
+ /**
96
+ * The path to the current item in the stack,
97
+ * This path can contain prop names array indexes or event literal variable values, ie: if parsing an array the path item would be the name if the index variable.
98
+ * This is used to generate the correct code to access the value at runtime of the current item in the stack.
99
+ * ie: if parsing the tuple ['A','B','C'] and the current item is 'B', the path would [1] as is the index of the item in the stack.
100
+ * ie: if parsing the object {a: {b: {c: 'C'}}} and the current item is 'b', the path would ['a','b'] as is the path to the item in the stack.
101
+ * At runtime this path gets combined with the runtime pλth variable to generate the correct path to access the value
102
+ * */
103
+ _accessPathLiterals = [];
104
+ /** push new item to the stack, returns true if new child is already in the stack (is circular type) */
105
+ pushStack(newChild) {
106
+ const totalLength = this.stack.length + this.totalLength;
107
+ if (totalLength > MAX_STACK_DEPTH) throw new Error(maxStackErrorMessage);
108
+ if (this.stack.length === 0) {
109
+ if (newChild !== this.rootType) throw new Error("rootType should be the first item in the stack");
110
+ newChild.getTypeID();
111
+ }
112
+ this.vλl = getStackVλl(this);
113
+ if (isJitErrorsCompiler(this)) this._accessPathLiterals = getAccessPath(this);
114
+ const newStackItem = { vλl: this.vλl, rt: newChild, staticPath: this._accessPathLiterals };
115
+ this.stack.push(newStackItem);
116
+ }
117
+ popStack(resultCode) {
118
+ if (resultCode?.code) this.code = resultCode.code;
119
+ this.popItem = this.stack.pop();
120
+ const item = this.stack[this.stack.length - 1];
121
+ this.vλl = item?.vλl || this.args.vλl;
122
+ if (isJitErrorsCompiler(this)) this._accessPathLiterals = item?.staticPath || [];
123
+ }
124
+ siplePushStack(newChild) {
125
+ const newStackItem = { vλl: this.vλl, rt: newChild, staticPath: this._accessPathLiterals };
126
+ this.stack.push(newStackItem);
127
+ }
128
+ simplePopStack() {
129
+ this.popItem = this.stack.pop();
130
+ }
131
+ createJitFunction(overrideCode) {
132
+ try {
133
+ if (overrideCode) {
134
+ this.code = overrideCode;
135
+ this.isCompiled = false;
136
+ }
137
+ this.handleFunctionReturn();
138
+ return createJitFunction(this);
139
+ } catch (e) {
140
+ const fnName = getJITFnName(this.fnID);
141
+ const fnCode = ` Code:
142
+ function ${fnName}(){${this.code}}`;
143
+ const name = `(${this.rootType.getTypeName()}:${this.rootType.getTypeID()})`;
144
+ const typeString = `Type: ${this.rootType.stringify()}`;
145
+ throw new Error(`Error building ${fnName} JIT function for type ${name}: ${e?.message}
146
+ ${typeString}
147
+ ${fnCode}`);
148
+ }
149
+ }
150
+ /** Returns a copy of the access pat for current stack item */
151
+ getAccessPath() {
152
+ return [...this._accessPathLiterals];
153
+ }
154
+ getAccessPathArgs() {
155
+ return this._accessPathLiterals.join(",");
156
+ }
157
+ getAccessPathLength() {
158
+ return this._accessPathLiterals.length;
159
+ }
160
+ getAccessPathArgsForFnCall() {
161
+ return { args: this.getAccessPathArgs(), length: this.getAccessPathLength() };
162
+ }
163
+ getCurrentStackItem() {
164
+ const item = this.stack[this.stack.length - 1];
165
+ if (!item) throw new Error("Compiler stack is empty, no current item");
166
+ return item;
167
+ }
168
+ getChildVλl() {
169
+ const parent = this.getCurrentStackItem();
170
+ if (!parent) return this.args.vλl;
171
+ const rt = parent.rt;
172
+ if (!isChildAccessorType(rt)) throw new Error(`cant get child var name from ${rt.getKindName()}`);
173
+ if (rt.skipSettingAccessor?.()) return parent.vλl;
174
+ return parent.vλl + (rt.useArrayAccessor() ? `[${rt.getChildLiteral(this)}]` : `.${rt.getChildVarName(this)}`);
175
+ }
176
+ shouldCallDependency() {
177
+ const stackItem = this.getCurrentStackItem();
178
+ return !stackItem.rt.isJitInlined() && this.stack.length > 1;
179
+ }
180
+ updateDependencies(childComp) {
181
+ if (childComp.isNoop) return;
182
+ if (this.jitDependencies.includes(childComp.jitFnHash)) return;
183
+ this.jitDependencies.push(childComp.jitFnHash);
184
+ }
185
+ removeFromJitCache() {
186
+ getJitUtils().removeFromJitCache(this);
187
+ }
188
+ getStackTrace() {
189
+ const separator = ".";
190
+ const parentTrace = this.parentCompiler ? this.parentCompiler.getStackTrace() + separator : JIT_STACK_TRACE_MESSAGE;
191
+ const lastParentItem = this.parentCompiler?.getCurrentStackItem();
192
+ const filteredStack = lastParentItem ? this.stack.filter((item) => item.rt !== lastParentItem?.rt) : this.stack;
193
+ return parentTrace + filteredStack.map((item) => this.getTypeTraceInfo(item.rt)).join(separator);
194
+ }
195
+ hasStackTrace(errorMessage) {
196
+ return errorMessage.includes(JIT_STACK_TRACE_MESSAGE);
197
+ }
198
+ /** Set a context code item */
199
+ setContextItem(key, value) {
200
+ this.contextCodeItems.set(key, value);
201
+ }
202
+ /** Get a context code item */
203
+ getContextItem(key) {
204
+ return this.contextCodeItems.get(key);
205
+ }
206
+ /** Check if a context code item exists */
207
+ hasContextItem(key) {
208
+ return this.contextCodeItems.has(key);
209
+ }
210
+ /** Get all context code items values */
211
+ getContextItemValues() {
212
+ return Array.from(this.contextCodeItems.values());
213
+ }
214
+ setChildrenCallArgs(fnID, args) {
215
+ this.childrenCallArgs[fnID] = args;
216
+ }
217
+ getChildrenCallArgs(fnID) {
218
+ return this.childrenCallArgs[fnID];
219
+ }
220
+ /**
221
+ * Compiles the current function.
222
+ * This function handles the logic to determine if the operation should be compiled and code should be inlined, or called as a dependency.
223
+ * Note current JitCompiler operation might be different from the passed operation id.
224
+ * ie: typeErrors might want to compile isType to generate the part of the code that checks for the type.
225
+ * @param comp current jit compiler operation
226
+ * @param fnID operation id
227
+ * @returns
228
+ */
229
+ compile(rt, expectedCType, fnID) {
230
+ if (!rt) return { code: void 0, type: expectedCType };
231
+ let jCode;
232
+ this.pushStack(rt);
233
+ if (this.shouldCallDependency()) {
234
+ const compiledOp = rt.createJitCompiledFunction(fnID, this, this.opts);
235
+ jCode = this.callDependency(rt, compiledOp);
236
+ this.updateDependencies(compiledOp);
237
+ } else {
238
+ switch (fnID) {
239
+ case JitFunctions.isType.id:
240
+ jCode = this.compileFormatter(rt, fnID, rt.emitIsType(this, expectedCType), expectedCType, "&&");
241
+ break;
242
+ case JitFunctions.typeErrors.id:
243
+ jCode = this.compileFormatter(rt, fnID, rt.emitTypeErrors(this, expectedCType), expectedCType, ";");
244
+ break;
245
+ case JitFunctions.prepareForJson.id:
246
+ jCode = this.compileFormatter(rt, fnID, rt.emitPrepareForJson(this, expectedCType), expectedCType, ";");
247
+ break;
248
+ case JitFunctions.restoreFromJson.id:
249
+ jCode = this.compileFormatter(rt, fnID, rt.emitRestoreFromJson(this, expectedCType), expectedCType, ";");
250
+ break;
251
+ case JitFunctions.stringifyJson.id:
252
+ jCode = this.compileFormatter(rt, fnID, emitJsonStringify(rt, this), expectedCType, ";");
253
+ break;
254
+ case JitFunctions.toBinary.id:
255
+ jCode = this.compileFormatter(rt, fnID, emitToBinary(rt, this), expectedCType, ";");
256
+ break;
257
+ case JitFunctions.fromBinary.id:
258
+ jCode = this.compileFormatter(rt, fnID, emitFromBinary(rt, this), expectedCType, ";");
259
+ break;
260
+ case JitFunctions.toJSCode.id:
261
+ jCode = this.compileFormatter(rt, fnID, emitToCode(rt, this), expectedCType, ";");
262
+ break;
263
+ case JitFunctions.unknownKeyErrors.id:
264
+ jCode = rt.emitUnknownKeyErrors(this, expectedCType);
265
+ break;
266
+ case JitFunctions.hasUnknownKeys.id:
267
+ jCode = rt.emitHasUnknownKeys(this, expectedCType);
268
+ break;
269
+ case JitFunctions.stripUnknownKeys.id:
270
+ jCode = rt.emitStripUnknownKeys(this, expectedCType);
271
+ break;
272
+ case JitFunctions.unknownKeysToUndefined.id:
273
+ jCode = rt.emitUnknownKeysToUndefined(this, expectedCType);
274
+ break;
275
+ case JitFunctions.format.id:
276
+ jCode = { code: void 0, type: E };
277
+ break;
278
+ default:
279
+ throw new Error(`Unknown compile operation: ${fnID}`);
280
+ }
281
+ if (jCode?.code) {
282
+ const compatibleCode = this.handleCodeInterpolation(rt, jCode, expectedCType);
283
+ jCode = { code: compatibleCode, type: jCode.type };
284
+ }
285
+ }
286
+ this.popStack(jCode);
287
+ return jCode;
288
+ }
289
+ compileFormatter(rt, fnID, childJCode, expectedCType, separator) {
290
+ const expectedCT = childJCode.code ? childJCode.type : expectedCType;
291
+ const typeFormatter = getRunTypeFormat(rt);
292
+ if (!typeFormatter) return childJCode;
293
+ let jitCode = void 0;
294
+ const formatterCode = typeFormatter.compileFormat(fnID, this, rt);
295
+ const canEmbed = typeFormatter.canEmbedFormatterCode(fnID, rt);
296
+ const codeHasReturn = formatterCode.type === RB;
297
+ const isCompatible = formatterCode.type === expectedCT;
298
+ if (canEmbed && isCompatible && !codeHasReturn) {
299
+ jitCode = formatterCode;
300
+ } else {
301
+ const compiled = typeFormatter.createJitCompiledFormatter(fnID, rt, this, void 0, void 0, void 0, this.opts);
302
+ if (!compiled.isNoop) {
303
+ this.updateDependencies(compiled);
304
+ jitCode = this.callDependency(rt, compiled);
305
+ }
306
+ }
307
+ if (!jitCode?.code) return childJCode;
308
+ const shouldReplace = getJitFnSettings(fnID).formatShouldReplaceJitCode;
309
+ const joiner = separator === "&&" ? " && " : "; ";
310
+ if (shouldReplace) {
311
+ return jitCode;
312
+ }
313
+ const finalCode = childJCode?.code ? childJCode.code + joiner + jitCode.code : jitCode.code;
314
+ return { code: finalCode, type: expectedCT };
315
+ }
316
+ callDependency(rt, dependencyComp) {
317
+ if (dependencyComp.isNoop) return { code: "", type: E };
318
+ const isErrorCall = dependencyComp.fnID === JitFunctions.typeErrors.id || dependencyComp.fnID === JitFunctions.unknownKeyErrors.id;
319
+ const depArgs = getJitFnSettings(dependencyComp.fnID).jitArgs;
320
+ const callArgsCode = Object.keys(depArgs).map((key) => getJitFnArgCallVarName(this, rt, dependencyComp.fnID, key)).join(",");
321
+ const isSelf = this.jitFnHash === dependencyComp.jitFnHash;
322
+ const varName = dependencyComp.jitFnHash;
323
+ const callCode = isSelf ? `${varName}(${callArgsCode})` : `${varName}.fn(${callArgsCode})`;
324
+ if (!isSelf) this.setContextItem(varName, `const ${varName} = utl.getJIT(${toLiteral(varName)})`);
325
+ if (isErrorCall) {
326
+ const pathArgs = this.getAccessPathArgs();
327
+ const pathLength = this.getAccessPathLength();
328
+ if (!pathLength) return { code: callCode, type: "E" };
329
+ return {
330
+ code: `${jitErrorArgs.pλth}.push(${pathArgs}); ${callCode}; ${jitErrorArgs.pλth}.splice(-${pathLength});`,
331
+ type: "S"
332
+ };
333
+ }
334
+ return { code: callCode, type: "E" };
335
+ }
336
+ /** Check if root type is a FunctionParamsRunType with no children (empty params) */
337
+ isEmptyFunctionParams() {
338
+ if (!isFunctionParamsRunType(this.rootType)) return false;
339
+ return this.rootType.getChildRunTypes().length === 0;
340
+ }
341
+ /**
342
+ * Set the isNoop flag based on the code of the operation.
343
+ * must be called before function gets compiled.
344
+ * The isNoop flag is used to avoid calling the function when the result of compilation is an empty function.
345
+ */
346
+ handleFunctionReturn() {
347
+ if (this.isCompiled) return;
348
+ let isNoop = false;
349
+ let code = this.code.replace(/[ \t]+/g, " ").replace(/;+/g, ";");
350
+ const isEmptyParams = this.isEmptyFunctionParams();
351
+ switch (this.fnID) {
352
+ case JitFunctions.isType.id:
353
+ isNoop = isEmptyParams || !this.code || this.code === "true" || this.code === "return true";
354
+ if (isNoop) code = `return true`;
355
+ break;
356
+ case JitFunctions.hasUnknownKeys.id:
357
+ isNoop = !this.code || this.code === "false" || this.code === "return false";
358
+ if (isNoop) code = `return false`;
359
+ break;
360
+ case JitFunctions.prepareForJson.id:
361
+ case JitFunctions.restoreFromJson.id:
362
+ case JitFunctions.stripUnknownKeys.id:
363
+ case JitFunctions.unknownKeysToUndefined.id:
364
+ isNoop = isEmptyParams || !this.code || this.code === this.args.vλl || this.code === `return ${this.args.vλl}`;
365
+ if (isNoop) code = `return ${this.args.vλl}`;
366
+ break;
367
+ case JitFunctions.typeErrors.id:
368
+ case JitFunctions.unknownKeyErrors.id:
369
+ isNoop = isEmptyParams || !this.code || this.code === this.args.εrr || this.code === `return ${this.args.εrr}`;
370
+ if (isNoop) code = `return ${this.args.εrr}`;
371
+ break;
372
+ case JitFunctions.format.id:
373
+ isNoop = !this.code || this.code === this.args.vλl || this.code === `return ${this.args.vλl}`;
374
+ if (isNoop) code = `return ${this.args.vλl}`;
375
+ break;
376
+ }
377
+ this.isNoop = isNoop;
378
+ this.code = code;
379
+ this.isCompiled = true;
380
+ }
381
+ /** Ensures the child code type is compatible with the parent code type */
382
+ handleCodeInterpolation(rt, childJCode, parentCodeType) {
383
+ const code = childJCode.code || "";
384
+ const childCodeType = childJCode.type;
385
+ const isRoot = this.length === 1;
386
+ if (isRoot) {
387
+ switch (childCodeType) {
388
+ case E:
389
+ return `return ${code}`;
390
+ case S:
391
+ return `${addFullStop(code)} return ${this.returnName}`;
392
+ case RB:
393
+ return code;
394
+ }
395
+ }
396
+ switch (true) {
397
+ case (parentCodeType === E && childCodeType === E):
398
+ return code;
399
+ case (parentCodeType === E && childCodeType === S):
400
+ return this.callSelfInvokingFunction(childJCode);
401
+ case (parentCodeType === E && childCodeType === RB):
402
+ return this.callSelfInvokingFunction(childJCode);
403
+ case (parentCodeType === S && childCodeType === E):
404
+ return code;
405
+ // no need for full stop, parent should handle it
406
+ case (parentCodeType === S && childCodeType === S):
407
+ return addFullStop(code);
408
+ case (parentCodeType === S && childCodeType === RB):
409
+ return this.callSelfInvokingFunction(childJCode);
410
+ case (parentCodeType === RB && childCodeType === E):
411
+ throw new Error("Expected an block code but got an expression, rt should not happen as would be useless code.");
412
+ case (parentCodeType === RB && childCodeType === S):
413
+ return addFullStop(code);
414
+ case (parentCodeType === RB && childCodeType === RB):
415
+ return `${addFullStop(code)} return ${this.returnName}`;
416
+ default:
417
+ throw new Error(`Unexpected code type (expected: ${parentCodeType}, got: ${childCodeType})`);
418
+ }
419
+ }
420
+ /**
421
+ * If code should be an expression, but code has return a statement, we need to wrap it in a self invoking function to avoid syntax errors
422
+ * IMPORTANT TODO, WE CAN IMPROVE PERF QUITE A BIT BY CREATING A NEW FUNCTION IN CONTEXT INSTEAD SELF INVOkING
423
+ * TODO: we could create a new function and cache instead a self invoking function a performance is same but code is not repeated
424
+ * IE: this.selfInvoke(code), rt will create a new function in context and call that function instead of self invoking
425
+ * rt is specially for atomic types as we can be sure there are no references to children types inside the code block
426
+ */
427
+ callSelfInvokingFunction(jCode) {
428
+ if (jCode.type === E) throw new Error("Javascript expressions never need to be wrapped in a self invoking function.");
429
+ if (!jCode.code) return "";
430
+ const code = jCode.code.trim();
431
+ const isSelfInvoking = code.startsWith("(function()") && code.endsWith(")()");
432
+ if (isSelfInvoking) return code;
433
+ const addReturn = jCode.type !== RB;
434
+ const returnCode = addReturn ? `return ` : "";
435
+ return `(function(){${returnCode}${jCode.code}})()`;
436
+ }
437
+ getTypeTraceInfo(rt) {
438
+ if (rt.getFamily() === "C") return rt.src.typeName || getReflectionName(rt);
439
+ if (rt.getFamily() === "F") return String(rt.src.name) || getReflectionName(rt);
440
+ if (rt.getFamily() === "M") {
441
+ const rtChild = rt;
442
+ const isRunTypeChildAccessor = !!rtChild.getChildVarName;
443
+ if (!isRunTypeChildAccessor) return getReflectionName(rt);
444
+ return String(rtChild.getChildVarName(this));
445
+ }
446
+ return getReflectionName(rt);
447
+ }
448
+ // ########## Compile Methods shorthands ##########
449
+ compileIsType(rt, expectedCType) {
450
+ return this.compile(rt, expectedCType, JitFunctions.isType.id);
451
+ }
452
+ compileTypeErrors(rt, expectedCType) {
453
+ return this.compile(rt, expectedCType, JitFunctions.typeErrors.id);
454
+ }
455
+ compilePrepareForJson(rt, expectedCType) {
456
+ return this.compile(rt, expectedCType, JitFunctions.prepareForJson.id);
457
+ }
458
+ compileRestoreFromJson(rt, expectedCType) {
459
+ return this.compile(rt, expectedCType, JitFunctions.restoreFromJson.id);
460
+ }
461
+ compileJsonStringify(rt, expectedCType) {
462
+ return this.compile(rt, expectedCType, JitFunctions.stringifyJson.id);
463
+ }
464
+ compileToBinary(rt, expectedCType) {
465
+ return this.compile(rt, expectedCType, JitFunctions.toBinary.id);
466
+ }
467
+ compileFromBinary(rt, expectedCType) {
468
+ return this.compile(rt, expectedCType, JitFunctions.fromBinary.id);
469
+ }
470
+ compileUnknownKeyErrors(rt, expectedCType) {
471
+ return this.compile(rt, expectedCType, JitFunctions.unknownKeyErrors.id);
472
+ }
473
+ compileHasUnknownKeys(rt, expectedCType) {
474
+ return this.compile(rt, expectedCType, JitFunctions.hasUnknownKeys.id);
475
+ }
476
+ compileStripUnknownKeys(rt, expectedCType) {
477
+ return this.compile(rt, expectedCType, JitFunctions.stripUnknownKeys.id);
478
+ }
479
+ compileUnknownKeysToUndefined(rt, expectedCType) {
480
+ return this.compile(rt, expectedCType, JitFunctions.unknownKeysToUndefined.id);
481
+ }
482
+ // ################### Pure Functions Operations ###################
483
+ addPureFunction(compiledPureFn) {
484
+ const { namespace, fnName } = compiledPureFn;
485
+ const varName = quickHash(fnName, 8);
486
+ if (this.hasContextItem(varName)) return varName;
487
+ this.addPureFnDependency(compiledPureFn);
488
+ const pureFunctionCode = `const ${varName} = utl.getPureFn(${toLiteral(namespace)}, ${toLiteral(fnName)})`;
489
+ this.setContextItem(varName, pureFunctionCode);
490
+ return varName;
491
+ }
492
+ addPureFnDependency(compiledPureFn) {
493
+ const { namespace, fnName } = compiledPureFn;
494
+ if (!getJitUtils().hasPureFn(namespace, fnName))
495
+ throw new Error(
496
+ `Pure function with name ${fnName} can not be added as jit dependency in namespace ${namespace}, be sure to register the pure function first by calling getJitUtils().addPureFn()`
497
+ );
498
+ const key = `${namespace}::${fnName}`;
499
+ if (this.pureFnDependencies.includes(key)) return;
500
+ this.pureFnDependencies.push(key);
501
+ }
502
+ }
503
+ class JitFnCompiler extends BaseFnCompiler {
504
+ constructor(rt, fnID, parentCompiler, jitFnHash, typeID, opts = {}) {
505
+ const fnSettings = getJitFnSettings(fnID);
506
+ super(rt, fnID, fnSettings, parentCompiler, jitFnHash, typeID, opts);
507
+ }
508
+ }
509
+ class JitErrorsFnCompiler extends BaseFnCompiler {
510
+ constructor(rt, fnID, parentCompiler, jitFnHash, typeID, opts = {}) {
511
+ const fnSettings = getJitFnSettings(fnID);
512
+ super(rt, fnID, fnSettings, parentCompiler, jitFnHash, typeID, opts);
513
+ }
514
+ callJitErr(expected) {
515
+ return this.callJitErrWithPath(expected);
516
+ }
517
+ /**
518
+ * This is used when we add an extra item to the path,
519
+ * for extra info, ie union items, maps keys, etc...
520
+ * This is because we don't want the item int the real path as it is not part of the runtime path of an object.
521
+ * but we still want to add that info to process the error.
522
+ * ie: type AorBList = ({a: string} | {b: string})[];
523
+ * we want the error to contain the info if it is union item a or b, but the path to the the doesn't have that info is just list[index]
524
+ * */
525
+ callJitErrWithPath(exp, extraPathLiteral) {
526
+ const args = this._getJitErrorArgs(exp);
527
+ const accessPath = this.getAccessPathLiteral(extraPathLiteral);
528
+ if (accessPath) args.push(accessPath);
529
+ const errFn = this.addPureFunction(cpf_newRunTypeErr);
530
+ return `${errFn}(${args.join(",")})`;
531
+ }
532
+ callJitFormatErr(expected, formatter, paramName, paramValue, extraPathLiteral) {
533
+ const typeErrArgs = this._getJitErrorArgs(expected);
534
+ const fmtName = toLiteralInContext(this, formatter.getFormatName());
535
+ const pName = toLiteralInContext(this, paramName);
536
+ const pVal = toLiteralInContext(this, paramValue);
537
+ const fmtPath = toLiteralInContext(this, formatter.getFormatPath());
538
+ const formatArgs = [fmtName, pName, pVal, fmtPath];
539
+ const optionalArgs = [];
540
+ const accessPath = this.getAccessPathLiteral(extraPathLiteral);
541
+ const formatAccessPath = this.getFormatAccessPathLiteral(formatter);
542
+ if (!accessPath && formatAccessPath) optionalArgs.push("undefined");
543
+ if (accessPath) optionalArgs.push(accessPath);
544
+ if (formatAccessPath) optionalArgs.push(formatAccessPath);
545
+ const formatErrFn = this.addPureFunction(cpf_formatErr);
546
+ return `${formatErrFn}(${[...typeErrArgs, ...formatArgs, ...optionalArgs].join(",")})`;
547
+ }
548
+ _getJitErrorArgs(exp) {
549
+ const path = this.args.pλth;
550
+ const err = this.args.εrr;
551
+ const expected = typeof exp === "string" ? toLiteral(exp) : toLiteral(exp.getKindName());
552
+ return [path, err, expected];
553
+ }
554
+ getAccessPathLiteral(extraPathLiteral) {
555
+ const accessPath = this.getAccessPath();
556
+ if (extraPathLiteral) accessPath.push(extraPathLiteral);
557
+ return accessPath.length ? `[${accessPath.join(",")}]` : "";
558
+ }
559
+ getFormatAccessPathLiteral(formatter) {
560
+ const formatExtraPathLiteral = formatter.getFormatExtraPathLiteral();
561
+ return formatExtraPathLiteral ? `[${formatExtraPathLiteral}]` : "";
562
+ }
563
+ }
564
+ class MockJitCompiler extends BaseFnCompiler {
565
+ constructor(rt, opts, parentCompiler, jitFnHash, typeID) {
566
+ super(rt, JitFunctions.mock.id, JitFunctions.mock, parentCompiler, jitFnHash, typeID, opts);
567
+ }
568
+ }
569
+ function createJitCompiler(rt, fnID, parent, jitFnHash, typeID, opts = {}) {
570
+ switch (fnID) {
571
+ case JitFunctions.isType.id:
572
+ case JitFunctions.prepareForJson.id:
573
+ case JitFunctions.restoreFromJson.id:
574
+ case JitFunctions.stringifyJson.id:
575
+ case JitFunctions.hasUnknownKeys.id:
576
+ case JitFunctions.stripUnknownKeys.id:
577
+ case JitFunctions.unknownKeysToUndefined.id:
578
+ case JitFunctions.format.id:
579
+ case JitFunctions.toJSCode.id:
580
+ case JitFunctions.toBinary.id:
581
+ case JitFunctions.fromBinary.id:
582
+ return new JitFnCompiler(rt, fnID, parent, jitFnHash, typeID, opts);
583
+ case JitFunctions.typeErrors.id:
584
+ case JitFunctions.unknownKeyErrors.id:
585
+ return new JitErrorsFnCompiler(rt, fnID, parent, jitFnHash, typeID, opts);
586
+ case JitFunctions.mock.id:
587
+ return new MockJitCompiler(rt, opts, parent, jitFnHash, typeID);
588
+ default:
589
+ throw new Error(`Unknown compile operation: ${fnID}`);
590
+ }
591
+ }
592
+ function printClosure(fnWithContext, functionName) {
593
+ return `function get_${functionName}(utl){${fnWithContext}}`;
594
+ }
595
+ function getStackVλl(comp) {
596
+ let vλl = comp.args.vλl;
597
+ for (let i = 0; i < comp.stack.length; i++) {
598
+ const rt = comp.stack[i].rt;
599
+ const custom = rt.getCustomVλl(comp);
600
+ if (custom && custom.isStandalone) {
601
+ vλl = custom.vλl;
602
+ } else if (custom) {
603
+ vλl += custom.useArrayAccessor ? `[${custom.vλl}]` : `.${custom.vλl}`;
604
+ } else if (isChildAccessorType(rt) && !rt.skipSettingAccessor?.()) {
605
+ vλl += rt.useArrayAccessor() ? `[${rt.getChildLiteral(comp)}]` : `.${rt.getChildVarName(comp)}`;
606
+ }
607
+ }
608
+ return vλl;
609
+ }
610
+ function getAccessPath(comp) {
611
+ const path = [];
612
+ const rtName = [];
613
+ for (let i = 0; i < comp.stack.length; i++) {
614
+ const rt = comp.stack[i].rt;
615
+ const pathItem = rt.getStaticPathLiteral(comp);
616
+ if (pathItem) {
617
+ path.push(pathItem);
618
+ } else if (isChildAccessorType(rt) && !rt.skipSettingAccessor?.()) {
619
+ path.push(rt.getChildLiteral(comp));
620
+ }
621
+ rtName.push({ path: [...path], name: rt.constructor.name });
622
+ }
623
+ return path;
624
+ }
625
+ function validateCompilerOptions(opts) {
626
+ if (opts.paramsSlice) {
627
+ const start = opts.paramsSlice?.start;
628
+ const end = opts.paramsSlice?.end;
629
+ if (start && start < 0) {
630
+ throw new Error(`paramsSlice.start must be greater than 0`);
631
+ }
632
+ if (end && end < 0) {
633
+ throw new Error(`paramsSlice.end must be greater than 0`);
634
+ }
635
+ if (end && start && end <= start) {
636
+ throw new Error(`paramsSlice.end must be greater than paramsSlice.start`);
637
+ }
638
+ }
639
+ }
640
+ export {
641
+ BaseFnCompiler,
642
+ JitErrorsFnCompiler,
643
+ JitFnCompiler,
644
+ MockJitCompiler,
645
+ createJitCompiler,
646
+ printClosure
647
+ };
648
+ //# sourceMappingURL=jitFnCompiler.js.map