@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 @@
1
+ {"version":3,"file":"jitFnCompiler.js","sources":["../../../../src/lib/jitFnCompiler.ts"],"sourcesContent":["/* ########\n * 2024 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport type {JitCompiledFn, JitCompiledFnData, JitFnArgs, JITUtils, CompiledPureFunction} from '@mionjs/core';\nimport {MAX_STACK_DEPTH, getJitUtils, quickHash} from '@mionjs/core';\nimport type {TypeFunction} from '@deepkit/type';\nimport type {Mutable, JitFnID, StrNumber, JitCode, RunTypeOptions, JitCompilerOpts, RunTypeChildAccessor} from '../types.ts';\nimport type {BaseRunType} from './baseRunTypes.ts';\nimport type {BaseRunTypeFormat} from './baseRunTypeFormat.ts';\nimport {getReflectionName, type AnyKindName} from '../constants.kind.ts';\nimport {maxStackErrorMessage, JIT_STACK_TRACE_MESSAGE} from '../constants.ts';\nimport {type CodeType, CodeTypes, jitErrorArgs, type JitFnSettings} from '../constants.functions.ts';\nimport {getJITFnName, getJitFnSettings} from './jitFnsRegistry.ts';\nimport {JitFunctions} from '../constants.functions.ts';\nimport {isChildAccessorType, isFunctionParamsRunType, isJitErrorsCompiler} from './guards.ts';\nimport {addFullStop, getJitFnArgCallVarName, toLiteral, toLiteralInContext} from './utils.ts';\nimport {getRunTypeFormat} from './formats.ts';\nimport {emitJsonStringify} from '../jitCompilers/json/stringifyJson.ts';\nimport {emitToBinary} from '../jitCompilers/binary/toBinary.ts';\nimport {emitFromBinary} from '../jitCompilers/binary/fromBinary.ts';\nimport {emitToCode} from '../jitCompilers/json/toJsCode.ts';\nimport {createJitFunction, getJITFnHash} from './createJitFunction.ts';\nimport {cpf_newRunTypeErr, cpf_formatErr} from '../run-types-pure-fns.ts';\n\nconst RB = CodeTypes.returnBlock;\nconst S = CodeTypes.statement;\nconst E = CodeTypes.expression;\n\nexport type StackItem = {\n /** current compile stack full variable accessor */\n vλl: string;\n /** current compile stack variable accessor */\n rt: BaseRunType;\n /** if should call a dependency instead inline code, then this would contain the id of the dependency to call */\n dependencyId?: string;\n staticPath?: StrNumber[];\n};\n\nexport type JitCompilerLike = BaseFnCompiler | JitCompiledFnData;\n\n/**\n * Program to compile a Jit function to be used at runtime.\n * These jit functions are used to validate, serialize, deserialize, etc... based on runTypes.\n */\nexport class BaseFnCompiler<FnArgsNames extends JitFnArgs = JitFnArgs, ID extends JitFnID = any>\n implements JitCompiledFnData, JitCompilerOpts\n{\n // !!! DO NOT MODIFY METHOD WITHOUT REVIEWING JIT CODE INVOCATIONS!!!\n /** The Jit Generated function once the compilation is finished */\n readonly fn: ((...args: any[]) => any) | undefined;\n readonly createJitFn: ((utl: JITUtils) => (...args: any[]) => any) | undefined;\n private isCompiled = false;\n\n constructor(\n public readonly rootType: BaseRunType,\n // the id of the function to be compiled (isType, typeErrors, prepareForJson, restoreFromJson, etc)\n public readonly fnID: ID,\n jitFnSettings: JitFnSettings,\n public readonly parentCompiler?: BaseFnCompiler,\n jitFnHash?: string,\n typeID?: StrNumber,\n public readonly opts: RunTypeOptions = {}\n ) {\n this.typeName = this.rootType.getTypeName();\n this.jitFnHash = jitFnHash || getJITFnHash(this.fnID, this.rootType, opts);\n this.typeID = typeID || this.rootType.getTypeID();\n this.args = {...jitFnSettings.jitArgs} as FnArgsNames;\n this.defaultParamValues = {...jitFnSettings.jitDefaultArgs} as FnArgsNames;\n this.returnName = jitFnSettings.returnName;\n if (this.args.vλl) this.vλl = this.args.vλl;\n // At the time of adding this compiler to the jit cache, the fn is undefined which is technically not allowed\n // but this prevents issues with circular types and loading order of jit dependencies\n getJitUtils().addToJitCache(this as JitCompiledFn);\n validateCompilerOptions(opts);\n }\n readonly typeName: string;\n readonly typeID: StrNumber;\n readonly jitFnHash: string;\n readonly args: FnArgsNames;\n readonly defaultParamValues: FnArgsNames;\n readonly returnName: string;\n\n /** Alternative arguments to use when calling a child function */\n readonly childrenCallArgs: Partial<Record<JitFnID, Partial<JitFnArgs>>> = {};\n\n /** Code for the jit function. after the operation has been compiled */\n readonly code: string = '';\n /** Code for the context function enclosing the jit function.\n * This can be used to initialize constant or some other things that will be required across all invocation.\n * By default this contains constants for the direct dependencies of the jit function.\n * */\n readonly contextCodeItems = new Map<string, string>();\n /**\n * This flag is set to true when the result of a jit compilation is a no operation (empty function).\n * Some jit compiled functions could execute no operations (ie: string, boolean and numbers does not require prepareForJson/restoreFromJson)\n */\n readonly isNoop?: boolean = false;\n /** The list of all jit functions that are used by this function and it's children. */\n readonly jitDependencies: Array<string> = [];\n readonly pureFnDependencies: Array<string> = [];\n /** The list of types being compiled.*/\n readonly stack: StackItem[] = [];\n popItem: StackItem | undefined;\n /** shorthand for this.length */\n get length() {\n return this.stack.length;\n }\n get totalLength() {\n if (this.parentCompiler) return this.stack.length + this.parentCompiler.totalLength;\n return this.stack.length;\n }\n /** The variable name for the current item in the stack. */\n vλl: string = '';\n getNestLevel(rt: BaseRunType<any>): number {\n let index = -1;\n this.stack.forEach((item, i) => {\n if (item.rt === rt) index = i;\n if (item.rt.src.id && item.rt.src.id === rt.src.id) index = i;\n });\n if (index !== -1) return index;\n const fromParent = this.parentCompiler?.getNestLevel(rt);\n if (fromParent && fromParent !== -1) return fromParent;\n return -1; // not found\n }\n private varNameindex: Map<BaseRunType<any> | number, number> = new Map();\n getLocalVarName(prefix: string, rt: BaseRunType<any>): string {\n const key = rt.src.id || rt; // duplicated elements might have same index (that means they are the same deepkit type)\n const index = this.varNameindex.get(key);\n if (index !== undefined) return `${prefix}${index}`;\n const newIndex = this.varNameindex.size;\n this.varNameindex.set(key, newIndex);\n return `${prefix}${newIndex}`;\n }\n /**\n * The path to the current item in the stack,\n * 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.\n * This is used to generate the correct code to access the value at runtime of the current item in the stack.\n * 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.\n * 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.\n * At runtime this path gets combined with the runtime pλth variable to generate the correct path to access the value\n * */\n private _accessPathLiterals: StrNumber[] = [];\n /** push new item to the stack, returns true if new child is already in the stack (is circular type) */\n pushStack(newChild: BaseRunType): void {\n const totalLength = this.stack.length + this.totalLength;\n if (totalLength > MAX_STACK_DEPTH) throw new Error(maxStackErrorMessage);\n if (this.stack.length === 0) {\n if (newChild !== this.rootType) throw new Error('rootType should be the first item in the stack');\n newChild.getTypeID(); // ensures the constants are generated in correct order\n }\n this.vλl = getStackVλl(this);\n // static path must be called before pushing the new item\n if (isJitErrorsCompiler(this)) this._accessPathLiterals = getAccessPath(this);\n const newStackItem: StackItem = {vλl: this.vλl, rt: newChild, staticPath: this._accessPathLiterals};\n this.stack.push(newStackItem);\n }\n popStack(resultCode: JitCode): void | ((...args: any[]) => any) {\n if (resultCode?.code) (this as Mutable<BaseFnCompiler>).code = resultCode.code;\n this.popItem = this.stack.pop();\n const item = this.stack[this.stack.length - 1];\n this.vλl = item?.vλl || this.args.vλl;\n if (isJitErrorsCompiler(this)) this._accessPathLiterals = item?.staticPath || [];\n }\n siplePushStack(newChild: BaseRunType): void {\n const newStackItem: StackItem = {vλl: this.vλl, rt: newChild, staticPath: this._accessPathLiterals};\n this.stack.push(newStackItem);\n }\n simplePopStack(): void {\n this.popItem = this.stack.pop();\n }\n createJitFunction(overrideCode?: string): (...args: any[]) => any {\n try {\n if (overrideCode) {\n (this as Mutable<BaseFnCompiler>).code = overrideCode;\n this.isCompiled = false;\n }\n this.handleFunctionReturn();\n return createJitFunction(this); // add the compiled function to jit cache\n } catch (e: any) {\n const fnName = getJITFnName(this.fnID);\n const fnCode = ` Code:\\nfunction ${fnName}(){${this.code}}`;\n const name = `(${this.rootType.getTypeName()}:${this.rootType.getTypeID()})`;\n const typeString = `Type: ${this.rootType.stringify()}`;\n throw new Error(`Error building ${fnName} JIT function for type ${name}: ${e?.message} \\n${typeString} \\n${fnCode}`);\n }\n }\n /** Returns a copy of the access pat for current stack item */\n getAccessPath(): StrNumber[] {\n return [...this._accessPathLiterals];\n }\n\n getAccessPathArgs(): string {\n return this._accessPathLiterals.join(',');\n }\n getAccessPathLength(): number {\n return this._accessPathLiterals.length;\n }\n getAccessPathArgsForFnCall(): {args: string; length: number} {\n return {args: this.getAccessPathArgs(), length: this.getAccessPathLength()};\n }\n getCurrentStackItem(): StackItem {\n const item = this.stack[this.stack.length - 1];\n if (!item) throw new Error('Compiler stack is empty, no current item');\n return item;\n }\n getChildVλl(): string {\n const parent = this.getCurrentStackItem();\n if (!parent) return this.args.vλl;\n const rt = parent.rt;\n if (!isChildAccessorType(rt)) throw new Error(`cant get child var name from ${rt.getKindName()}`);\n if (rt.skipSettingAccessor?.()) return parent.vλl;\n return parent.vλl + (rt.useArrayAccessor() ? `[${rt.getChildLiteral(this)}]` : `.${rt.getChildVarName(this)}`);\n }\n shouldCallDependency(): boolean {\n const stackItem = this.getCurrentStackItem();\n return !stackItem.rt.isJitInlined() && this.stack.length > 1;\n }\n updateDependencies(childComp: JitCompiledFnData): void {\n if (childComp.isNoop) return; // noop functions are not added to dependencies as shouldn't be used inside jit code neither\n if (this.jitDependencies.includes(childComp.jitFnHash)) return;\n this.jitDependencies.push(childComp.jitFnHash);\n }\n removeFromJitCache(): void {\n getJitUtils().removeFromJitCache(this as JitCompiledFn);\n }\n getStackTrace(): string {\n const separator = '.';\n const parentTrace = this.parentCompiler ? this.parentCompiler.getStackTrace() + separator : JIT_STACK_TRACE_MESSAGE;\n const lastParentItem = this.parentCompiler?.getCurrentStackItem();\n const filteredStack = lastParentItem ? this.stack.filter((item) => item.rt !== lastParentItem?.rt) : this.stack;\n return parentTrace + filteredStack.map((item) => this.getTypeTraceInfo(item.rt)).join(separator);\n }\n hasStackTrace(errorMessage: string) {\n return errorMessage.includes(JIT_STACK_TRACE_MESSAGE);\n }\n\n /** Set a context code item */\n setContextItem(key: string, value: string): void {\n this.contextCodeItems.set(key, value);\n }\n\n /** Get a context code item */\n getContextItem(key: string): string | undefined {\n return this.contextCodeItems.get(key);\n }\n\n /** Check if a context code item exists */\n hasContextItem(key: string): boolean {\n return this.contextCodeItems.has(key);\n }\n\n /** Get all context code items values */\n getContextItemValues(): string[] {\n return Array.from(this.contextCodeItems.values());\n }\n\n setChildrenCallArgs(fnID: string, args: Partial<JitFnArgs>): void {\n this.childrenCallArgs[fnID] = args;\n }\n\n getChildrenCallArgs(fnID: string): Partial<JitFnArgs> | undefined {\n return this.childrenCallArgs[fnID];\n }\n\n /**\n * Compiles the current function.\n * This function handles the logic to determine if the operation should be compiled and code should be inlined, or called as a dependency.\n * Note current JitCompiler operation might be different from the passed operation id.\n * ie: typeErrors might want to compile isType to generate the part of the code that checks for the type.\n * @param comp current jit compiler operation\n * @param fnID operation id\n * @returns\n */\n compile(rt: BaseRunType | undefined, expectedCType: CodeType, fnID: JitFnID): JitCode {\n if (!rt) return {code: undefined, type: expectedCType};\n let jCode: JitCode;\n this.pushStack(rt);\n if (this.shouldCallDependency()) {\n const compiledOp = rt.createJitCompiledFunction(fnID, this, this.opts);\n jCode = this.callDependency(rt, compiledOp);\n this.updateDependencies(compiledOp);\n } else {\n // prettier-ignore\n switch (fnID) {\n case JitFunctions.isType.id:\n jCode = this.compileFormatter(rt, fnID, rt.emitIsType(this, expectedCType), expectedCType, '&&'); break;\n case JitFunctions.typeErrors.id:\n jCode = this.compileFormatter(rt, fnID, rt.emitTypeErrors(this as any, expectedCType), expectedCType, ';'); break;\n case JitFunctions.prepareForJson.id:\n jCode = this.compileFormatter(rt, fnID,rt.emitPrepareForJson(this, expectedCType), expectedCType, ';'); break;\n case JitFunctions.restoreFromJson.id:\n jCode = this.compileFormatter(rt, fnID,rt.emitRestoreFromJson(this, expectedCType), expectedCType, ';'); break;\n case JitFunctions.stringifyJson.id:\n jCode = this.compileFormatter(rt, fnID,emitJsonStringify(rt, this), expectedCType, ';'); break;\n case JitFunctions.toBinary.id:\n jCode = this.compileFormatter(rt, fnID,emitToBinary(rt, this as any), expectedCType, ';'); break;\n case JitFunctions.fromBinary.id:\n jCode = this.compileFormatter(rt, fnID,emitFromBinary(rt, this as any), expectedCType, ';'); break;\n case JitFunctions.toJSCode.id:\n jCode =this.compileFormatter(rt, fnID, emitToCode(rt, this), expectedCType, ';'); break;\n case JitFunctions.unknownKeyErrors.id:\n jCode = rt.emitUnknownKeyErrors(this as any, expectedCType); break;\n case JitFunctions.hasUnknownKeys.id:\n jCode = rt.emitHasUnknownKeys(this, expectedCType); break;\n case JitFunctions.stripUnknownKeys.id:\n jCode = rt.emitStripUnknownKeys(this, expectedCType); break;\n case JitFunctions.unknownKeysToUndefined.id:\n jCode = rt.emitUnknownKeysToUndefined(this, expectedCType); break;\n case JitFunctions.format.id:\n jCode = {code: undefined, type: E}; break;\n default:\n throw new Error(`Unknown compile operation: ${fnID}`);\n }\n if (jCode?.code) {\n // endure the child code type is compatible with the parent code type.\n // ie: a code statement can not be interpolated within an expression\n const compatibleCode = this.handleCodeInterpolation(rt, jCode, expectedCType);\n jCode = {code: compatibleCode, type: jCode.type};\n }\n }\n this.popStack(jCode);\n return jCode;\n }\n\n private compileFormatter(\n rt: BaseRunType,\n fnID: JitFnID,\n childJCode: JitCode,\n expectedCType: CodeType,\n separator: ';' | '&&'\n ): JitCode {\n const expectedCT = childJCode.code ? childJCode.type : expectedCType;\n const typeFormatter = getRunTypeFormat(rt);\n if (!typeFormatter) return childJCode;\n let jitCode: JitCode | undefined = undefined;\n const formatterCode = typeFormatter.compileFormat(fnID, this, rt);\n // Check if the formatter code can be embedded AND is compatible with the function ID\n const canEmbed = typeFormatter.canEmbedFormatterCode(fnID, rt);\n const codeHasReturn = formatterCode.type === RB;\n\n // For isType and similar functions that are expressions, we need to ensure\n // the formatter code is also an expression or has a return statement\n const isCompatible = formatterCode.type === expectedCT;\n if (canEmbed && isCompatible && !codeHasReturn) {\n jitCode = formatterCode;\n } else {\n // Otherwise, create a separate function\n const compiled = typeFormatter.createJitCompiledFormatter(fnID, rt, this, undefined, undefined, undefined, this.opts);\n if (!compiled.isNoop) {\n this.updateDependencies(compiled);\n jitCode = this.callDependency(rt, compiled);\n }\n }\n if (!jitCode?.code) return childJCode;\n const shouldReplace = getJitFnSettings(fnID).formatShouldReplaceJitCode;\n const joiner = separator === '&&' ? ' && ' : '; ';\n if (shouldReplace) {\n return jitCode;\n }\n const finalCode = childJCode?.code ? childJCode.code + joiner + jitCode.code : jitCode.code;\n return {code: finalCode, type: expectedCT};\n }\n\n private callDependency(rt: BaseRunType, dependencyComp: JitCompiledFn): JitCode {\n if (dependencyComp.isNoop) return {code: '', type: E}; // we don't need to call noop functions\n const isErrorCall =\n dependencyComp.fnID === JitFunctions.typeErrors.id || dependencyComp.fnID === JitFunctions.unknownKeyErrors.id;\n\n // Use the dependency's args, not the current compiler's args\n const depArgs = getJitFnSettings(dependencyComp.fnID as JitFnID).jitArgs;\n const callArgsCode = Object.keys(depArgs)\n .map((key) => getJitFnArgCallVarName(this, rt, dependencyComp.fnID as JitFnID, key))\n .join(',');\n const isSelf = this.jitFnHash === dependencyComp.jitFnHash;\n const varName = dependencyComp.jitFnHash;\n // call local variable instead directly calling jitUtils to avoid lookups.\n // ie function context (local variable created when compiling the function): const abc = jitUtils.getJIT('abc);\n // ie calling context variable: abc.fn();\n // if operation is the same as the current operation we can call the function directly\n\n const callCode = isSelf ? `${varName}(${callArgsCode})` : `${varName}.fn(${callArgsCode})`;\n if (!isSelf) this.setContextItem(varName, `const ${varName} = utl.getJIT(${toLiteral(varName)})`);\n if (isErrorCall) {\n const pathArgs = this.getAccessPathArgs();\n const pathLength = this.getAccessPathLength();\n if (!pathLength) return {code: callCode, type: 'E'};\n // increase and decrease the static path before and after calling the dependency function\n // TODO, maybe we can improve performance by using something else than push and splice\n return {\n code: `${jitErrorArgs.pλth}.push(${pathArgs}); ${callCode}; ${jitErrorArgs.pλth}.splice(-${pathLength});`,\n type: 'S',\n };\n }\n return {code: callCode, type: 'E'};\n }\n\n /** Check if root type is a FunctionParamsRunType with no children (empty params) */\n private isEmptyFunctionParams(): boolean {\n if (!isFunctionParamsRunType(this.rootType)) return false;\n return this.rootType.getChildRunTypes().length === 0;\n }\n\n /**\n * Set the isNoop flag based on the code of the operation.\n * must be called before function gets compiled.\n * The isNoop flag is used to avoid calling the function when the result of compilation is an empty function.\n */\n private handleFunctionReturn(): void {\n if (this.isCompiled) return;\n let isNoop = false;\n // trims code and transforms multiple whitespaces into a single one, does not affect new lines as those can be significant\n let code = this.code.replace(/[ \\t]+/g, ' ').replace(/;+/g, ';');\n // For functions with no params, all validation/serialization functions are noop\n const isEmptyParams = this.isEmptyFunctionParams();\n switch (this.fnID) {\n case JitFunctions.isType.id:\n isNoop = isEmptyParams || !this.code || this.code === 'true' || this.code === 'return true';\n if (isNoop) code = `return true`; // if code is a noop, we still need to return true\n break;\n case JitFunctions.hasUnknownKeys.id:\n isNoop = !this.code || this.code === 'false' || this.code === 'return false';\n if (isNoop) code = `return false`; // if code is a noop, we still need return false\n break;\n case JitFunctions.prepareForJson.id:\n case JitFunctions.restoreFromJson.id:\n case JitFunctions.stripUnknownKeys.id:\n case JitFunctions.unknownKeysToUndefined.id:\n isNoop = isEmptyParams || !this.code || this.code === this.args.vλl || this.code === `return ${this.args.vλl}`;\n if (isNoop) code = `return ${this.args.vλl}`; // if code is a noop, we need to return the value\n break;\n case JitFunctions.typeErrors.id:\n case JitFunctions.unknownKeyErrors.id:\n isNoop = isEmptyParams || !this.code || this.code === this.args.εrr || this.code === `return ${this.args.εrr}`;\n if (isNoop) code = `return ${this.args.εrr}`; // if code is a noop, we need to return the error array\n break;\n case JitFunctions.format.id:\n isNoop = !this.code || this.code === this.args.vλl || this.code === `return ${this.args.vλl}`;\n if (isNoop) code = `return ${this.args.vλl}`; // if code is a noop, we need to return the value\n break;\n }\n (this as Mutable<BaseFnCompiler>).isNoop = isNoop;\n (this as Mutable<BaseFnCompiler>).code = code;\n this.isCompiled = true;\n }\n\n /** Ensures the child code type is compatible with the parent code type */\n private handleCodeInterpolation(rt: BaseRunType, childJCode: JitCode, parentCodeType: CodeType): string {\n const code = childJCode.code || '';\n const childCodeType = childJCode.type;\n const isRoot = this.length === 1;\n // root code must ensure values are returned\n if (isRoot) {\n // prettier-ignore\n switch (childCodeType) {\n case E: return `return ${code}`;\n case S: return `${addFullStop(code)} return ${this.returnName}`;\n case RB: return code;\n }\n }\n switch (true) {\n case parentCodeType === E && childCodeType === E:\n return code;\n case parentCodeType === E && childCodeType === S:\n return this.callSelfInvokingFunction(childJCode);\n case parentCodeType === E && childCodeType === RB:\n return this.callSelfInvokingFunction(childJCode);\n case parentCodeType === S && childCodeType === E:\n return code; // no need for full stop, parent should handle it\n case parentCodeType === S && childCodeType === S:\n return addFullStop(code);\n case parentCodeType === S && childCodeType === RB:\n return this.callSelfInvokingFunction(childJCode);\n case parentCodeType === RB && childCodeType === E:\n throw new Error('Expected an block code but got an expression, rt should not happen as would be useless code.');\n case parentCodeType === RB && childCodeType === S:\n return addFullStop(code);\n case parentCodeType === RB && childCodeType === RB:\n return `${addFullStop(code)} return ${this.returnName}`;\n default:\n throw new Error(`Unexpected code type (expected: ${parentCodeType}, got: ${childCodeType})`);\n }\n }\n\n /**\n * 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\n * IMPORTANT TODO, WE CAN IMPROVE PERF QUITE A BIT BY CREATING A NEW FUNCTION IN CONTEXT INSTEAD SELF INVOkING\n * TODO: we could create a new function and cache instead a self invoking function a performance is same but code is not repeated\n * IE: this.selfInvoke(code), rt will create a new function in context and call that function instead of self invoking\n * rt is specially for atomic types as we can be sure there are no references to children types inside the code block\n */\n private callSelfInvokingFunction(jCode: JitCode): string {\n if (jCode.type === E) throw new Error('Javascript expressions never need to be wrapped in a self invoking function.');\n if (!jCode.code) return '';\n const code = jCode.code.trim();\n const isSelfInvoking = code.startsWith('(function()') && code.endsWith(')()');\n if (isSelfInvoking) return code;\n const addReturn = jCode.type !== RB;\n const returnCode = addReturn ? `return ` : '';\n return `(function(){${returnCode}${jCode.code}})()`;\n }\n\n getTypeTraceInfo(rt: BaseRunType): string {\n if (rt.getFamily() === 'C') return rt.src.typeName || getReflectionName(rt);\n if (rt.getFamily() === 'F') return String((rt.src as TypeFunction).name) || getReflectionName(rt);\n if (rt.getFamily() === 'M') {\n const rtChild = rt as any as RunTypeChildAccessor;\n const isRunTypeChildAccessor = !!rtChild.getChildVarName;\n if (!isRunTypeChildAccessor) return getReflectionName(rt);\n return String(rtChild.getChildVarName(this));\n }\n return getReflectionName(rt);\n }\n\n // ########## Compile Methods shorthands ##########\n\n compileIsType(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.isType.id);\n }\n compileTypeErrors(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.typeErrors.id);\n }\n compilePrepareForJson(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.prepareForJson.id);\n }\n compileRestoreFromJson(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.restoreFromJson.id);\n }\n compileJsonStringify(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.stringifyJson.id);\n }\n compileToBinary(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.toBinary.id);\n }\n compileFromBinary(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.fromBinary.id);\n }\n compileUnknownKeyErrors(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.unknownKeyErrors.id);\n }\n compileHasUnknownKeys(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.hasUnknownKeys.id);\n }\n compileStripUnknownKeys(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.stripUnknownKeys.id);\n }\n compileUnknownKeysToUndefined(rt: BaseRunType | undefined, expectedCType: CodeType): JitCode {\n return this.compile(rt, expectedCType, JitFunctions.unknownKeysToUndefined.id);\n }\n\n // ################### Pure Functions Operations ###################\n\n addPureFunction(compiledPureFn: CompiledPureFunction): string {\n const {namespace, fnName} = compiledPureFn;\n const varName = quickHash(fnName, 8);\n if (this.hasContextItem(varName)) return varName;\n this.addPureFnDependency(compiledPureFn);\n // Add context code for the pure function and params\n const pureFunctionCode = `const ${varName} = utl.getPureFn(${toLiteral(namespace)}, ${toLiteral(fnName)})`;\n this.setContextItem(varName, pureFunctionCode);\n return varName;\n }\n\n addPureFnDependency(compiledPureFn: CompiledPureFunction): void {\n const {namespace, fnName} = compiledPureFn;\n if (!getJitUtils().hasPureFn(namespace, fnName))\n throw new Error(\n `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()`\n );\n // Store as \"namespace::fnName\" format (using :: to avoid conflicts with : in names)\n const key = `${namespace}::${fnName}`;\n if (this.pureFnDependencies.includes(key)) return;\n this.pureFnDependencies.push(key);\n }\n}\n\n// ################### Compile Operations ###################\n\nexport class JitFnCompiler<ID extends JitFnID = any> extends BaseFnCompiler<JitFnArgs, ID> {\n constructor(\n rt: BaseRunType,\n fnID: ID,\n parentCompiler?: BaseFnCompiler,\n jitFnHash?: string,\n typeID?: StrNumber,\n opts: RunTypeOptions = {}\n ) {\n const fnSettings = getJitFnSettings(fnID);\n super(rt, fnID, fnSettings, parentCompiler, jitFnHash, typeID, opts);\n }\n}\n\nexport class JitErrorsFnCompiler<ID extends JitFnID = any> extends BaseFnCompiler<typeof jitErrorArgs, ID> {\n constructor(\n rt: BaseRunType,\n fnID: ID,\n parentCompiler?: BaseFnCompiler,\n jitFnHash?: string,\n typeID?: StrNumber,\n opts: RunTypeOptions = {}\n ) {\n const fnSettings = getJitFnSettings(fnID);\n super(rt, fnID, fnSettings, parentCompiler, jitFnHash, typeID, opts);\n }\n callJitErr(expected: AnyKindName | BaseRunType<any>): string {\n // TODO: most of the time jit path is an empty array, so a new array is created every time\n // this can be optimized by adding it to the compiler context, or maybe make the param optional in jitUtils.err\n return this.callJitErrWithPath(expected);\n }\n /**\n * This is used when we add an extra item to the path,\n * for extra info, ie union items, maps keys, etc...\n * 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.\n * but we still want to add that info to process the error.\n * ie: type AorBList = ({a: string} | {b: string})[];\n * 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]\n * */\n callJitErrWithPath(exp: AnyKindName | BaseRunType<any>, extraPathLiteral?: StrNumber): string {\n const args = this._getJitErrorArgs(exp);\n const accessPath = this.getAccessPathLiteral(extraPathLiteral);\n if (accessPath) args.push(accessPath);\n const errFn = this.addPureFunction(cpf_newRunTypeErr);\n return `${errFn}(${args.join(',')})`;\n }\n callJitFormatErr(\n expected: AnyKindName | BaseRunType<any>,\n formatter: BaseRunTypeFormat<any>,\n paramName: string,\n paramValue: string | number | boolean | bigint,\n extraPathLiteral?: StrNumber\n ): string {\n // jitUtil.formatErr function arguments =>\n\n // pλth: StrNumber[],\n // εrr: RunTypeError[],\n // expected: string,\n\n // fmtName: string,\n // paramName: string,\n // paramVal: StrNumber,\n // fmtPath: StrNumber[],\n // accessPath?: StrNumber[],\n // fmtAccessPath?: StrNumber[]\n\n const typeErrArgs = this._getJitErrorArgs(expected);\n const fmtName = toLiteralInContext(this, formatter.getFormatName());\n const pName = toLiteralInContext(this, paramName);\n const pVal = toLiteralInContext(this, paramValue);\n const fmtPath = toLiteralInContext(this, formatter.getFormatPath());\n const formatArgs = [fmtName, pName, pVal, fmtPath];\n const optionalArgs: string[] = [];\n const accessPath = this.getAccessPathLiteral(extraPathLiteral);\n const formatAccessPath = this.getFormatAccessPathLiteral(formatter);\n if (!accessPath && formatAccessPath) optionalArgs.push('undefined');\n if (accessPath) optionalArgs.push(accessPath);\n if (formatAccessPath) optionalArgs.push(formatAccessPath);\n const formatErrFn = this.addPureFunction(cpf_formatErr);\n return `${formatErrFn}(${[...typeErrArgs, ...formatArgs, ...optionalArgs].join(',')})`;\n }\n\n private _getJitErrorArgs(exp: AnyKindName | BaseRunType<any>): string[] {\n // jitUtil.err function arguments =>\n // pλth: StrNumber[],\n // εrr: RunTypeError[],\n // expected: string,\n const path = this.args.pλth;\n const err = this.args.εrr;\n const expected = typeof exp === 'string' ? toLiteral(exp) : toLiteral(exp.getKindName());\n return [path, err, expected];\n }\n\n getAccessPathLiteral(extraPathLiteral?: StrNumber): string {\n const accessPath = this.getAccessPath();\n if (extraPathLiteral) accessPath.push(extraPathLiteral);\n return accessPath.length ? `[${accessPath.join(',')}]` : '';\n }\n\n getFormatAccessPathLiteral(formatter: BaseRunTypeFormat<any>): string {\n const formatExtraPathLiteral = formatter.getFormatExtraPathLiteral();\n return formatExtraPathLiteral ? `[${formatExtraPathLiteral}]` : '';\n }\n}\n\n/**\n * This is an special compiler for mock Function as mock is not technically a jit compiled function\n * but still needs to be created to reuse all jit functionality.\n */\nexport class MockJitCompiler extends BaseFnCompiler<JitFnArgs, 'mock'> {\n constructor(rt: BaseRunType, opts: RunTypeOptions, parentCompiler?: BaseFnCompiler, jitFnHash?: string, typeID?: StrNumber) {\n super(rt, JitFunctions.mock.id, JitFunctions.mock, parentCompiler, jitFnHash, typeID, opts);\n }\n}\n\n// ################### Compiler Creation ###################\n\nexport function createJitCompiler(\n rt: BaseRunType,\n fnID: JitFnID,\n parent?: BaseFnCompiler,\n jitFnHash?: string,\n typeID?: StrNumber,\n opts: RunTypeOptions = {}\n): BaseFnCompiler {\n switch (fnID) {\n case JitFunctions.isType.id:\n case JitFunctions.prepareForJson.id:\n case JitFunctions.restoreFromJson.id:\n case JitFunctions.stringifyJson.id:\n case JitFunctions.hasUnknownKeys.id:\n case JitFunctions.stripUnknownKeys.id:\n case JitFunctions.unknownKeysToUndefined.id:\n case JitFunctions.format.id:\n case JitFunctions.toJSCode.id:\n case JitFunctions.toBinary.id:\n case JitFunctions.fromBinary.id:\n return new JitFnCompiler(rt, fnID, parent, jitFnHash, typeID, opts);\n case JitFunctions.typeErrors.id:\n case JitFunctions.unknownKeyErrors.id:\n return new JitErrorsFnCompiler(rt, fnID, parent, jitFnHash, typeID, opts);\n case JitFunctions.mock.id:\n return new MockJitCompiler(rt, opts, parent, jitFnHash, typeID);\n default:\n throw new Error(`Unknown compile operation: ${fnID}`);\n }\n}\n\nexport function printClosure(fnWithContext: string, functionName: string): string {\n return `function get_${functionName}(utl){${fnWithContext}}`;\n}\n\n// ################### utils ###################\n\nfunction getStackVλl(comp: BaseFnCompiler): string {\n let vλl: string = comp.args.vλl;\n for (let i = 0; i < comp.stack.length; i++) {\n const rt = comp.stack[i].rt;\n const custom = rt.getCustomVλl(comp);\n if (custom && custom.isStandalone) {\n vλl = custom.vλl;\n } else if (custom) {\n vλl += custom.useArrayAccessor ? `[${custom.vλl}]` : `.${custom.vλl}`;\n } else if (isChildAccessorType(rt) && !rt.skipSettingAccessor?.()) {\n vλl += rt.useArrayAccessor() ? `[${rt.getChildLiteral(comp)}]` : `.${rt.getChildVarName(comp)}`;\n }\n }\n return vλl;\n}\nfunction getAccessPath(comp: BaseFnCompiler): StrNumber[] {\n const path: StrNumber[] = [];\n const rtName: any = [];\n for (let i = 0; i < comp.stack.length; i++) {\n const rt = comp.stack[i].rt;\n const pathItem = rt.getStaticPathLiteral(comp);\n if (pathItem) {\n path.push(pathItem);\n } else if (isChildAccessorType(rt) && !rt.skipSettingAccessor?.()) {\n path.push(rt.getChildLiteral(comp));\n }\n rtName.push({path: [...path], name: rt.constructor.name});\n }\n return path;\n}\n\nfunction validateCompilerOptions(opts: RunTypeOptions): void {\n if (opts.paramsSlice) {\n const start = opts.paramsSlice?.start;\n const end = opts.paramsSlice?.end;\n if (start && start < 0) {\n throw new Error(`paramsSlice.start must be greater than 0`);\n }\n if (end && end < 0) {\n throw new Error(`paramsSlice.end must be greater than 0`);\n }\n if (end && start && end <= start) {\n throw new Error(`paramsSlice.end must be greater than paramsSlice.start`);\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { JitFnID } from '../types.ts';
2
+ import { JitFnSettings } from '../constants.functions.ts';
3
+ export declare function registerJitFunctionCompiler(jitFnSettings: JitFnSettings): Promise<(...args: any[]) => any>;
4
+ export declare function getJitFunctionCompiler(jitFnSettings: JitFnSettings): (...args: any[]) => any;
5
+ export declare function getJitFnSettings(fnID: JitFnID): JitFnSettings;
6
+ export declare function getJITFnName(fnID: JitFnID): string;
@@ -0,0 +1,41 @@
1
+ import { jitFunctionsById, jitFunctionList } from "../constants.functions.js";
2
+ const jitFunctionsRegistry = /* @__PURE__ */ new Map();
3
+ const nativeIds = new Set(jitFunctionList.filter((f) => !f.import).map((f) => f.id));
4
+ async function registerJitFunctionCompiler(jitFnSettings) {
5
+ const existing = jitFunctionsRegistry.get(jitFnSettings.id);
6
+ if (nativeIds.has(jitFnSettings.id))
7
+ throw new Error(`Jit function ${jitFnSettings.name} is native and can not be registered`);
8
+ if (existing) return existing.compiler;
9
+ if (!jitFnSettings.import) throw new Error(`Jit function ${jitFnSettings.name} has no import function`);
10
+ try {
11
+ const newFn = await jitFnSettings.import();
12
+ jitFunctionsRegistry.set(jitFnSettings.id, {
13
+ jitFnSettings,
14
+ compiler: newFn
15
+ });
16
+ return newFn;
17
+ } catch (e) {
18
+ console.warn(e);
19
+ throw new Error(`Error loading jit function ${jitFnSettings.name}: ${e?.message}`);
20
+ }
21
+ }
22
+ function getJitFunctionCompiler(jitFnSettings) {
23
+ const existing = jitFunctionsRegistry.get(jitFnSettings.id);
24
+ if (existing) return existing.compiler;
25
+ throw new Error(`Function ${jitFnSettings.name} has not been loaded.`);
26
+ }
27
+ function getJitFnSettings(fnID) {
28
+ const fnConfig = jitFunctionsById[fnID] || jitFunctionsRegistry.get(fnID)?.jitFnSettings;
29
+ if (fnConfig === void 0) throw new Error(`Unknown jit function id: ${fnID}`);
30
+ return fnConfig;
31
+ }
32
+ function getJITFnName(fnID) {
33
+ return getJitFnSettings(fnID).name;
34
+ }
35
+ export {
36
+ getJITFnName,
37
+ getJitFnSettings,
38
+ getJitFunctionCompiler,
39
+ registerJitFunctionCompiler
40
+ };
41
+ //# sourceMappingURL=jitFnsRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jitFnsRegistry.js","sources":["../../../../src/lib/jitFnsRegistry.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport type {JitFnID} from '../types.ts';\nimport {JitFnSettings, jitFunctionList, jitFunctionsById} from '../constants.functions.ts';\n\ntype resolvedCompiler = {\n jitFnSettings: JitFnSettings;\n compiler: (...args: any[]) => any;\n};\n\nconst jitFunctionsRegistry: Map<string, resolvedCompiler> = new Map();\nconst nativeIds: Set<string> = new Set(jitFunctionList.filter((f) => !f.import).map((f) => f.id));\n\nexport async function registerJitFunctionCompiler(jitFnSettings: JitFnSettings): Promise<(...args: any[]) => any> {\n const existing = jitFunctionsRegistry.get(jitFnSettings.id);\n if (nativeIds.has(jitFnSettings.id))\n throw new Error(`Jit function ${jitFnSettings.name} is native and can not be registered`);\n if (existing) return existing.compiler;\n if (!jitFnSettings.import) throw new Error(`Jit function ${jitFnSettings.name} has no import function`);\n try {\n const newFn = await jitFnSettings.import();\n jitFunctionsRegistry.set(jitFnSettings.id, {\n jitFnSettings: jitFnSettings,\n compiler: newFn,\n });\n return newFn;\n } catch (e: any) {\n console.warn(e);\n throw new Error(`Error loading jit function ${jitFnSettings.name}: ${e?.message}`);\n }\n}\n\n/** synchronous version of loadRegisteredFunction, throws an error if the function has not been loaded */\nexport function getJitFunctionCompiler(jitFnSettings: JitFnSettings): (...args: any[]) => any {\n const existing = jitFunctionsRegistry.get(jitFnSettings.id);\n if (existing) return existing.compiler;\n throw new Error(`Function ${jitFnSettings.name} has not been loaded.`);\n}\n\nexport function getJitFnSettings(fnID: JitFnID): JitFnSettings {\n const fnConfig = jitFunctionsById[fnID] || jitFunctionsRegistry.get(fnID)?.jitFnSettings;\n if (fnConfig === undefined) throw new Error(`Unknown jit function id: ${fnID}`);\n return fnConfig;\n}\n\nexport function getJITFnName(fnID: JitFnID): string {\n return getJitFnSettings(fnID).name;\n}\n"],"names":[],"mappings":";AAeA,MAAM,2CAA0D,IAAA;AAChE,MAAM,YAAyB,IAAI,IAAI,gBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAEhG,eAAsB,4BAA4B,eAAgE;AAC9G,QAAM,WAAW,qBAAqB,IAAI,cAAc,EAAE;AAC1D,MAAI,UAAU,IAAI,cAAc,EAAE;AAC9B,UAAM,IAAI,MAAM,gBAAgB,cAAc,IAAI,sCAAsC;AAC5F,MAAI,iBAAiB,SAAS;AAC9B,MAAI,CAAC,cAAc,OAAQ,OAAM,IAAI,MAAM,gBAAgB,cAAc,IAAI,yBAAyB;AACtG,MAAI;AACA,UAAM,QAAQ,MAAM,cAAc,OAAA;AAClC,yBAAqB,IAAI,cAAc,IAAI;AAAA,MACvC;AAAA,MACA,UAAU;AAAA,IAAA,CACb;AACD,WAAO;AAAA,EACX,SAAS,GAAQ;AACb,YAAQ,KAAK,CAAC;AACd,UAAM,IAAI,MAAM,8BAA8B,cAAc,IAAI,KAAK,GAAG,OAAO,EAAE;AAAA,EACrF;AACJ;AAGO,SAAS,uBAAuB,eAAuD;AAC1F,QAAM,WAAW,qBAAqB,IAAI,cAAc,EAAE;AAC1D,MAAI,iBAAiB,SAAS;AAC9B,QAAM,IAAI,MAAM,YAAY,cAAc,IAAI,uBAAuB;AACzE;AAEO,SAAS,iBAAiB,MAA8B;AAC3D,QAAM,WAAW,iBAAiB,IAAI,KAAK,qBAAqB,IAAI,IAAI,GAAG;AAC3E,MAAI,aAAa,OAAW,OAAM,IAAI,MAAM,4BAA4B,IAAI,EAAE;AAC9E,SAAO;AACX;AAEO,SAAS,aAAa,MAAuB;AAChD,SAAO,iBAAiB,IAAI,EAAE;AAClC;"}
@@ -0,0 +1,6 @@
1
+ import { Type } from '@deepkit/type';
2
+ import { SrcType, StrNumber } from '../types.ts';
3
+ export type TypeWithCachedIds = Type & Pick<Partial<SrcType>, '_typeId' | '_formatId'>;
4
+ export declare function createTypeId(type: TypeWithCachedIds, stack?: Type[]): StrNumber;
5
+ export declare function computeDeepkitFormatID(deepkitType: TypeWithCachedIds): string | undefined;
6
+ export declare type __ΩTypeWithCachedIds = any[];
@@ -0,0 +1,205 @@
1
+ import { ReflectionKind, typeAnnotation } from "@deepkit/type";
2
+ import { MAX_STACK_DEPTH } from "@mionjs/core";
3
+ import { ReflectionSubKind } from "../constants.kind.js";
4
+ import { hasTypes, hasType, hasParameters } from "./guards.js";
5
+ import { getFormatterFromCache, defaultIgnoreFormatProps } from "./formats.js";
6
+ import { typeParamsToString } from "./utils.js";
7
+ function createTypeId(type, stack = []) {
8
+ if (type._typeId !== void 0) return type._typeId;
9
+ const typeId = _createTypeId(type, stack);
10
+ type._typeId = typeId;
11
+ return typeId;
12
+ }
13
+ function _createTypeId(type, stack) {
14
+ if (stack.length > MAX_STACK_DEPTH) {
15
+ throw new Error(`Max stack depth exceeded while computing type ID. This usually indicates a circular type reference.`);
16
+ }
17
+ const circularId = checkCircularAndGetRefId(type, stack);
18
+ if (circularId !== void 0) return circularId;
19
+ const kind = type.subKind || type.kind;
20
+ const baseTypeId = computeBaseTypeId(type, kind, stack);
21
+ const formatId = computeDeepkitFormatID(type);
22
+ if (formatId) return `${baseTypeId}${formatId}`;
23
+ return baseTypeId;
24
+ }
25
+ function computeBaseTypeId(type, kind, stack) {
26
+ const subKind = type.subKind;
27
+ if (subKind === ReflectionSubKind.params) return computeParamsTypeId(type, stack);
28
+ switch (type.kind) {
29
+ // Atomic types - just return the kind
30
+ case ReflectionKind.any:
31
+ case ReflectionKind.bigint:
32
+ case ReflectionKind.boolean:
33
+ case ReflectionKind.never:
34
+ case ReflectionKind.null:
35
+ case ReflectionKind.number:
36
+ case ReflectionKind.object:
37
+ case ReflectionKind.regexp:
38
+ case ReflectionKind.string:
39
+ case ReflectionKind.symbol:
40
+ case ReflectionKind.undefined:
41
+ case ReflectionKind.unknown:
42
+ case ReflectionKind.void:
43
+ case ReflectionKind.enum:
44
+ case ReflectionKind.enumMember:
45
+ case ReflectionKind.promise:
46
+ return kind;
47
+ case ReflectionKind.literal: {
48
+ const literal = type.literal;
49
+ return `${kind}:${String(literal)}`;
50
+ }
51
+ // Collection types - contain multiple child types
52
+ case ReflectionKind.union:
53
+ case ReflectionKind.intersection:
54
+ case ReflectionKind.objectLiteral:
55
+ case ReflectionKind.tuple:
56
+ return computeCollectionTypeId(type, stack);
57
+ // Member types - contain a single child type
58
+ case ReflectionKind.array:
59
+ case ReflectionKind.property:
60
+ case ReflectionKind.propertySignature:
61
+ case ReflectionKind.tupleMember:
62
+ case ReflectionKind.parameter:
63
+ case ReflectionKind.rest:
64
+ case ReflectionKind.indexSignature:
65
+ return computeMemberTypeId(type, stack);
66
+ // Function types
67
+ case ReflectionKind.function: {
68
+ const parent = type.parent;
69
+ const name = type.name;
70
+ if (name && parent && (parent.kind === ReflectionKind.objectLiteral || parent.kind === ReflectionKind.class)) {
71
+ return `${ReflectionKind.function}${String(name)}`;
72
+ }
73
+ return ReflectionKind.function;
74
+ }
75
+ case ReflectionKind.method:
76
+ case ReflectionKind.methodSignature:
77
+ case ReflectionKind.callSignature:
78
+ return computeFunctionTypeId(type);
79
+ // Class types
80
+ case ReflectionKind.class:
81
+ return computeClassTypeId(type, stack);
82
+ default:
83
+ if (hasTypes(type)) return computeCollectionTypeId(type, stack);
84
+ if (hasType(type)) return computeMemberTypeId(type, stack);
85
+ return kind;
86
+ }
87
+ }
88
+ function computeCollectionTypeId(type, stack) {
89
+ const types = type.types;
90
+ if (!Array.isArray(types)) return type.subKind || type.kind;
91
+ stack.push(type);
92
+ const childIds = [];
93
+ for (const childType of types) childIds.push(_createTypeId(childType, stack));
94
+ stack.pop();
95
+ const isTuple = type.kind === ReflectionKind.tuple;
96
+ const groupID = isTuple ? `[${childIds.join(",")}]` : `{${childIds.join(",")}}`;
97
+ const kind = type.subKind || type.kind;
98
+ return `${kind}${groupID}`;
99
+ }
100
+ function computeMemberTypeId(type, stack) {
101
+ const memberType = type.type;
102
+ if (!memberType || typeof memberType.kind !== "number") return type.subKind || type.kind;
103
+ const isRest = memberType.kind === ReflectionKind.rest;
104
+ const isTupleParam = type.kind === ReflectionKind.tupleMember || type.kind === ReflectionKind.parameter;
105
+ const hasDefault = isTupleParam && type.default !== void 0;
106
+ const optional = type.optional || type.kind === ReflectionKind.indexSignature || isRest || hasDefault ? "?" : "";
107
+ const propName = type.name?.toString() || type.index?.kind || type.subKind || type.kind;
108
+ const kindID = `${propName}${optional}`;
109
+ const circularId = checkCircularAndGetRefId(type, stack);
110
+ if (circularId) return `${kindID}:${circularId}`;
111
+ stack.push(type);
112
+ const memberTypeId = _createTypeId(memberType, stack);
113
+ stack.pop();
114
+ return `${kindID}:${memberTypeId}`;
115
+ }
116
+ function computeFunctionTypeId(type) {
117
+ const kind = ReflectionKind.function;
118
+ const parent = type.parent;
119
+ const name = type.name;
120
+ let baseId;
121
+ if (name && parent && (parent.kind === ReflectionKind.objectLiteral || parent.kind === ReflectionKind.class)) {
122
+ baseId = `${kind}${String(name)}`;
123
+ } else {
124
+ baseId = String(kind);
125
+ }
126
+ const isOptional = !!type.optional;
127
+ return isOptional ? `${baseId}:?` : baseId;
128
+ }
129
+ function computeClassTypeId(type, stack) {
130
+ if (type.classType === Date) return ReflectionSubKind.date;
131
+ if (type.classType === Map) {
132
+ const args = type.arguments;
133
+ if (!args || args.length !== 2) return ReflectionSubKind.map;
134
+ stack.push(type);
135
+ const keyTypeId = _createTypeId(args[0], stack);
136
+ const valueTypeId = _createTypeId(args[1], stack);
137
+ stack.pop();
138
+ return `${ReflectionSubKind.map}{${ReflectionSubKind.mapKey}:${keyTypeId},${ReflectionSubKind.mapValue}:${valueTypeId}}`;
139
+ }
140
+ if (type.classType === Set) {
141
+ const args = type.arguments;
142
+ if (!args || args.length !== 1) return ReflectionSubKind.set;
143
+ stack.push(type);
144
+ const itemTypeId = _createTypeId(args[0], stack);
145
+ stack.pop();
146
+ return `${ReflectionSubKind.set}{${ReflectionSubKind.setItem}:${itemTypeId}}`;
147
+ }
148
+ const kind = type.subKind || type.kind;
149
+ const types = type.types;
150
+ if (Array.isArray(types) && types.length > 0) {
151
+ stack.push(type);
152
+ const childIds = types.map((t) => _createTypeId(t, stack));
153
+ stack.pop();
154
+ return `${kind}{${childIds.join(",")}}`;
155
+ }
156
+ return kind;
157
+ }
158
+ function computeParamsTypeId(type, stack) {
159
+ if (!hasParameters(type)) return type.subKind || type.kind;
160
+ const circularId = checkCircularAndGetRefId(type, stack);
161
+ if (circularId) return circularId;
162
+ stack.push(type);
163
+ const childIds = [];
164
+ for (const param of type.parameters) childIds.push(_createTypeId(param, stack));
165
+ stack.pop();
166
+ const kind = type.subKind || type.kind;
167
+ return `${kind}{${childIds.join(",")}}`;
168
+ }
169
+ function checkCircularAndGetRefId(type, stack) {
170
+ const inStackIndex = stack.findIndex((t) => {
171
+ if (t === type) return true;
172
+ return t.id && type.id && t.id === type.id;
173
+ });
174
+ if (inStackIndex >= 0) {
175
+ const name = type.typeName || "";
176
+ return "$" + type.kind + `_${inStackIndex}` + name;
177
+ }
178
+ return void 0;
179
+ }
180
+ function computeDeepkitFormatID(deepkitType) {
181
+ if (deepkitType._formatId !== void 0) return deepkitType._formatId || void 0;
182
+ const annotations = typeAnnotation.getAnnotations(deepkitType);
183
+ if (annotations.length === 0) {
184
+ deepkitType._formatId = "";
185
+ return void 0;
186
+ }
187
+ for (const annotation of annotations) {
188
+ const formatAnnotation = annotation;
189
+ if (!formatAnnotation.name) continue;
190
+ const formatter = getFormatterFromCache(deepkitType.kind, formatAnnotation.name);
191
+ if (!formatter) continue;
192
+ const params = typeAnnotation.getOption(deepkitType, formatAnnotation.name);
193
+ if (!params) continue;
194
+ const formatId = `<${typeParamsToString(params, defaultIgnoreFormatProps)}>`;
195
+ deepkitType._formatId = formatId;
196
+ return formatId;
197
+ }
198
+ deepkitType._formatId = "";
199
+ return void 0;
200
+ }
201
+ export {
202
+ computeDeepkitFormatID,
203
+ createTypeId
204
+ };
205
+ //# sourceMappingURL=typeId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeId.js","sources":["../../../../src/lib/typeId.ts"],"sourcesContent":["/* ########\n * 2024 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {Type, TypeIndexSignature, TypeProperty, ReflectionKind, TypeClass, typeAnnotation} from '@deepkit/type';\nimport {MAX_STACK_DEPTH, TypeFormatParams} from '@mionjs/core';\nimport {ReflectionSubKind} from '../constants.kind.ts';\nimport {hasType, hasTypes, hasParameters} from './guards.ts';\nimport {getFormatterFromCache, defaultIgnoreFormatProps} from './formats.ts';\nimport {typeParamsToString} from './utils.ts';\nimport type {FormatAnnotation, SrcType, StrNumber} from '../types.ts';\n\n/** Type with optional cached _typeId and _formatId properties - compatible with SrcType */\nexport type TypeWithCachedIds = Type & Pick<Partial<SrcType>, '_typeId' | '_formatId'>;\n\n/** Generates a unique type ID directly from a deepkit Type object. Caches result in type._typeId */\nexport function createTypeId(type: TypeWithCachedIds, stack: Type[] = []): StrNumber {\n if (type._typeId !== undefined) return type._typeId;\n const typeId = _createTypeId(type, stack);\n (type as any)._typeId = typeId;\n return typeId;\n}\n\nfunction _createTypeId(type: Type, stack: Type[]): StrNumber {\n if (stack.length > MAX_STACK_DEPTH) {\n throw new Error(`Max stack depth exceeded while computing type ID. This usually indicates a circular type reference.`);\n }\n const circularId = checkCircularAndGetRefId(type, stack);\n if (circularId !== undefined) return circularId;\n const kind = (type as any).subKind || type.kind;\n const baseTypeId = computeBaseTypeId(type, kind, stack);\n const formatId = computeDeepkitFormatID(type as TypeWithCachedIds);\n if (formatId) return `${baseTypeId}${formatId}`;\n return baseTypeId;\n}\n\nfunction computeBaseTypeId(type: Type, kind: number, stack: Type[]): StrNumber {\n const subKind = (type as any).subKind;\n if (subKind === ReflectionSubKind.params) return computeParamsTypeId(type, stack);\n\n switch (type.kind) {\n // Atomic types - just return the kind\n case ReflectionKind.any:\n case ReflectionKind.bigint:\n case ReflectionKind.boolean:\n case ReflectionKind.never:\n case ReflectionKind.null:\n case ReflectionKind.number:\n case ReflectionKind.object:\n case ReflectionKind.regexp:\n case ReflectionKind.string:\n case ReflectionKind.symbol:\n case ReflectionKind.undefined:\n case ReflectionKind.unknown:\n case ReflectionKind.void:\n case ReflectionKind.enum:\n case ReflectionKind.enumMember:\n case ReflectionKind.promise:\n return kind;\n case ReflectionKind.literal: {\n const literal = (type as any).literal;\n return `${kind}:${String(literal)}`;\n }\n // Collection types - contain multiple child types\n case ReflectionKind.union:\n case ReflectionKind.intersection:\n case ReflectionKind.objectLiteral:\n case ReflectionKind.tuple:\n return computeCollectionTypeId(type, stack);\n // Member types - contain a single child type\n case ReflectionKind.array:\n case ReflectionKind.property:\n case ReflectionKind.propertySignature:\n case ReflectionKind.tupleMember:\n case ReflectionKind.parameter:\n case ReflectionKind.rest:\n case ReflectionKind.indexSignature:\n return computeMemberTypeId(type, stack);\n // Function types\n case ReflectionKind.function: {\n const parent = type.parent;\n const name = (type as any).name;\n if (name && parent && (parent.kind === ReflectionKind.objectLiteral || parent.kind === ReflectionKind.class)) {\n return `${ReflectionKind.function}${String(name)}`;\n }\n return ReflectionKind.function;\n }\n case ReflectionKind.method:\n case ReflectionKind.methodSignature:\n case ReflectionKind.callSignature:\n return computeFunctionTypeId(type);\n // Class types\n case ReflectionKind.class:\n return computeClassTypeId(type as TypeClass, stack);\n default:\n if (hasTypes(type)) return computeCollectionTypeId(type, stack);\n if (hasType(type)) return computeMemberTypeId(type, stack);\n return kind;\n }\n}\n\nfunction computeCollectionTypeId(type: Type, stack: Type[]): StrNumber {\n const types = (type as any).types as Type[] | undefined;\n if (!Array.isArray(types)) return (type as any).subKind || type.kind;\n stack.push(type);\n const childIds: StrNumber[] = [];\n for (const childType of types) childIds.push(_createTypeId(childType, stack));\n stack.pop();\n const isTuple = type.kind === ReflectionKind.tuple;\n const groupID = isTuple ? `[${childIds.join(',')}]` : `{${childIds.join(',')}}`;\n const kind = (type as any).subKind || type.kind;\n return `${kind}${groupID}`;\n}\n\nfunction computeMemberTypeId(type: Type, stack: Type[]): StrNumber {\n const memberType = (type as any).type as Type | undefined;\n if (!memberType || typeof memberType.kind !== 'number') return (type as any).subKind || type.kind;\n const isRest = memberType.kind === ReflectionKind.rest;\n const isTupleParam = type.kind === ReflectionKind.tupleMember || type.kind === ReflectionKind.parameter;\n const hasDefault = isTupleParam && (type as any).default !== undefined;\n const optional = (type as any).optional || type.kind === ReflectionKind.indexSignature || isRest || hasDefault ? '?' : '';\n const propName =\n (type as TypeProperty).name?.toString() || (type as TypeIndexSignature).index?.kind || (type as any).subKind || type.kind;\n const kindID = `${propName}${optional}`;\n const circularId = checkCircularAndGetRefId(type, stack);\n if (circularId) return `${kindID}:${circularId}`;\n stack.push(type);\n const memberTypeId = _createTypeId(memberType, stack);\n stack.pop();\n return `${kindID}:${memberTypeId}`;\n}\n\nfunction computeFunctionTypeId(type: Type): StrNumber {\n const kind = ReflectionKind.function;\n const parent = type.parent;\n const name = (type as any).name;\n let baseId: string;\n if (name && parent && (parent.kind === ReflectionKind.objectLiteral || parent.kind === ReflectionKind.class)) {\n baseId = `${kind}${String(name)}`;\n } else {\n baseId = String(kind);\n }\n const isOptional = !!(type as any).optional;\n return isOptional ? `${baseId}:?` : baseId;\n}\n\nfunction computeClassTypeId(type: TypeClass, stack: Type[]): StrNumber {\n if (type.classType === Date) return ReflectionSubKind.date;\n if (type.classType === Map) {\n const args = type.arguments;\n if (!args || args.length !== 2) return ReflectionSubKind.map;\n stack.push(type);\n const keyTypeId = _createTypeId(args[0], stack);\n const valueTypeId = _createTypeId(args[1], stack);\n stack.pop();\n return `${ReflectionSubKind.map}{${ReflectionSubKind.mapKey}:${keyTypeId},${ReflectionSubKind.mapValue}:${valueTypeId}}`;\n }\n if (type.classType === Set) {\n const args = type.arguments;\n if (!args || args.length !== 1) return ReflectionSubKind.set;\n stack.push(type);\n const itemTypeId = _createTypeId(args[0], stack);\n stack.pop();\n return `${ReflectionSubKind.set}{${ReflectionSubKind.setItem}:${itemTypeId}}`;\n }\n const kind = (type as any).subKind || type.kind;\n const types = (type as any).types as Type[] | undefined;\n if (Array.isArray(types) && types.length > 0) {\n stack.push(type);\n const childIds = types.map((t) => _createTypeId(t, stack));\n stack.pop();\n return `${kind}{${childIds.join(',')}}`;\n }\n return kind;\n}\n\nfunction computeParamsTypeId(type: Type, stack: Type[]): StrNumber {\n if (!hasParameters(type)) return (type as any).subKind || type.kind;\n const circularId = checkCircularAndGetRefId(type, stack);\n if (circularId) return circularId;\n stack.push(type);\n const childIds: StrNumber[] = [];\n for (const param of type.parameters) childIds.push(_createTypeId(param, stack));\n stack.pop();\n const kind = (type as any).subKind || type.kind;\n return `${kind}{${childIds.join(',')}}`;\n}\n\nfunction checkCircularAndGetRefId(type: Type, stack: Type[]): StrNumber | undefined {\n const inStackIndex = stack.findIndex((t) => {\n if (t === type) return true;\n return t.id && type.id && t.id === type.id;\n });\n if (inStackIndex >= 0) {\n const name = type.typeName || '';\n return '$' + type.kind + `_${inStackIndex}` + name;\n }\n return undefined;\n}\n\n/** Computes the format ID from a deepkit Type. Caches result in type._formatId */\nexport function computeDeepkitFormatID(deepkitType: TypeWithCachedIds): string | undefined {\n if (deepkitType._formatId !== undefined) return deepkitType._formatId || undefined;\n const annotations = typeAnnotation.getAnnotations(deepkitType);\n if (annotations.length === 0) {\n (deepkitType as any)._formatId = '';\n return undefined;\n }\n for (const annotation of annotations) {\n const formatAnnotation = annotation as FormatAnnotation;\n if (!formatAnnotation.name) continue;\n const formatter = getFormatterFromCache(deepkitType.kind, formatAnnotation.name);\n if (!formatter) continue;\n const params = typeAnnotation.getOption(deepkitType, formatAnnotation.name) as TypeFormatParams;\n if (!params) continue;\n const formatId = `<${typeParamsToString(params, defaultIgnoreFormatProps)}>`;\n (deepkitType as any)._formatId = formatId;\n return formatId;\n }\n (deepkitType as any)._formatId = '';\n return undefined;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { ReflectionKind, Type, TypeParameter, TypeTupleMember } from '@deepkit/type';
2
+ import { CompiledPureFunction, TypeFormatValue } from '@mionjs/core';
3
+ import { AnyClass, JitFnID, RunType, JitCode } from '../types.ts';
4
+ import { BaseRunType } from './baseRunTypes.ts';
5
+ import { JitFnCompiler, JitErrorsFnCompiler } from './jitFnCompiler.ts';
6
+ export declare function toLiteral(value: number | string | boolean | undefined | null | bigint | RegExp | symbol): string;
7
+ export declare function arrayToLiteral(value: any[]): string;
8
+ export declare function arrayToArgumentsLiteral(value: any[]): string;
9
+ export declare function isFunctionKind(kind: ReflectionKind): boolean;
10
+ export declare function isClass(cls: AnyClass | any): cls is AnyClass;
11
+ export declare function isSameJitType(a: RunType, b: RunType): boolean;
12
+ export declare function isSameJitCompiler(a: JitFnCompiler, b: JitFnCompiler): boolean;
13
+ export declare function memorize<Fn extends (...args: any[]) => any>(fn: Fn): Fn;
14
+ export declare function isSafePropName(name: string | number | symbol): boolean;
15
+ export declare function sanitizePropName(name: string | number | symbol): string;
16
+ export declare function getPropVarName(name: string | number | symbol): string | number;
17
+ export declare function getPropLiteral(name: string | number | symbol): string | number;
18
+ export declare function useArrayAccessorForProp(name: string | number | symbol): boolean;
19
+ export declare function getPropIndex(src: Type): number;
20
+ export declare function getParamIndex(src: TypeParameter | TypeTupleMember): number;
21
+ export declare function childIsExpression(childJCode: JitCode, child: BaseRunType): boolean;
22
+ export declare function toLiteralInContext(comp: JitFnCompiler | JitErrorsFnCompiler, params: TypeFormatValue | Record<string, string | CompiledPureFunction>, ignoreProps?: string[], isDependencies?: boolean): string;
23
+ export declare function dependencyValueToLiteral(comp: JitFnCompiler | JitErrorsFnCompiler | undefined, propVal: any): string;
24
+ export declare function typeParamsToString(params: TypeFormatValue | Record<string, string | CompiledPureFunction>, ignoreProps: string[]): string;
25
+ export declare function getFormatterHash(rt: BaseRunType): string;
26
+ export declare function getTotalComplexity(comp: JitFnCompiler, rt: BaseRunType, stack?: BaseRunType[]): number;
27
+ export declare function sortRunTypeByComplexity(comp: JitFnCompiler, a: BaseRunType, b: BaseRunType): number;
28
+ export declare function sortDiscriminatorsFirst(a: BaseRunType, b: BaseRunType): number;
29
+ export declare function createIfElseFn(): (isEnd?: boolean) => string;
30
+ export declare function getJitFnArgCallVarName(parentComp: JitFnCompiler, rt: BaseRunType, idFnToCall: JitFnID, argKey: string): string;
31
+ export declare function parentIs(rt: BaseRunType, kind: ReflectionKind | ReflectionKind[]): boolean;
32
+ export declare function addFullStop(code: string): string;