@mionjs/run-types 0.8.7 → 0.8.8

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 (362) hide show
  1. package/.dist/cjs/index.d.ts +1 -0
  2. package/.dist/cjs/index.d.ts.map +1 -0
  3. package/.dist/cjs/src/constants.d.ts +1 -0
  4. package/.dist/cjs/src/constants.d.ts.map +1 -0
  5. package/.dist/cjs/src/constants.functions.d.ts +1 -0
  6. package/.dist/cjs/src/constants.functions.d.ts.map +1 -0
  7. package/.dist/cjs/src/constants.kind.d.ts +1 -0
  8. package/.dist/cjs/src/constants.kind.d.ts.map +1 -0
  9. package/.dist/cjs/src/createRunType.d.ts +1 -0
  10. package/.dist/cjs/src/createRunType.d.ts.map +1 -0
  11. package/.dist/cjs/src/createRunTypeFunctions.d.ts +1 -0
  12. package/.dist/cjs/src/createRunTypeFunctions.d.ts.map +1 -0
  13. package/.dist/cjs/src/formats.runtype.d.ts +1 -0
  14. package/.dist/cjs/src/formats.runtype.d.ts.map +1 -0
  15. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts +1 -0
  16. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts.map +1 -0
  17. package/.dist/cjs/src/jitCompilers/binary/fromBinary.d.ts +1 -0
  18. package/.dist/cjs/src/jitCompilers/binary/fromBinary.d.ts.map +1 -0
  19. package/.dist/cjs/src/jitCompilers/binary/toBinary.d.ts +1 -0
  20. package/.dist/cjs/src/jitCompilers/binary/toBinary.d.ts.map +1 -0
  21. package/.dist/cjs/src/jitCompilers/equalsHelpers.d.ts +1 -0
  22. package/.dist/cjs/src/jitCompilers/equalsHelpers.d.ts.map +1 -0
  23. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts +1 -0
  24. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts.map +1 -0
  25. package/.dist/cjs/src/jitCompilers/json/stringifyJson.d.ts +1 -0
  26. package/.dist/cjs/src/jitCompilers/json/stringifyJson.d.ts.map +1 -0
  27. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts +1 -0
  28. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts.map +1 -0
  29. package/.dist/cjs/src/jitCompilers/json/toJsCode.d.ts +1 -0
  30. package/.dist/cjs/src/jitCompilers/json/toJsCode.d.ts.map +1 -0
  31. package/.dist/cjs/src/lib/baseRunTypeFormat.d.ts +1 -0
  32. package/.dist/cjs/src/lib/baseRunTypeFormat.d.ts.map +1 -0
  33. package/.dist/cjs/src/lib/baseRunTypes.d.ts +1 -0
  34. package/.dist/cjs/src/lib/baseRunTypes.d.ts.map +1 -0
  35. package/.dist/cjs/src/lib/createJitFunction.d.ts +1 -0
  36. package/.dist/cjs/src/lib/createJitFunction.d.ts.map +1 -0
  37. package/.dist/cjs/src/lib/dkProxy.d.ts +1 -0
  38. package/.dist/cjs/src/lib/dkProxy.d.ts.map +1 -0
  39. package/.dist/cjs/src/lib/formats.d.ts +1 -0
  40. package/.dist/cjs/src/lib/formats.d.ts.map +1 -0
  41. package/.dist/cjs/src/lib/guards.d.ts +1 -0
  42. package/.dist/cjs/src/lib/guards.d.ts.map +1 -0
  43. package/.dist/cjs/src/lib/jitFnCompiler.d.ts +1 -0
  44. package/.dist/cjs/src/lib/jitFnCompiler.d.ts.map +1 -0
  45. package/.dist/cjs/src/lib/jitFnsRegistry.d.ts +1 -0
  46. package/.dist/cjs/src/lib/jitFnsRegistry.d.ts.map +1 -0
  47. package/.dist/cjs/src/lib/typeId.d.ts +1 -0
  48. package/.dist/cjs/src/lib/typeId.d.ts.map +1 -0
  49. package/.dist/cjs/src/lib/utils.d.ts +1 -0
  50. package/.dist/cjs/src/lib/utils.d.ts.map +1 -0
  51. package/.dist/cjs/src/mocking/constants.mock.d.ts +1 -0
  52. package/.dist/cjs/src/mocking/constants.mock.d.ts.map +1 -0
  53. package/.dist/cjs/src/mocking/mockRegistry.d.ts +1 -0
  54. package/.dist/cjs/src/mocking/mockRegistry.d.ts.map +1 -0
  55. package/.dist/cjs/src/mocking/mockType.d.ts +1 -0
  56. package/.dist/cjs/src/mocking/mockType.d.ts.map +1 -0
  57. package/.dist/cjs/src/mocking/mockUtils.d.ts +1 -0
  58. package/.dist/cjs/src/mocking/mockUtils.d.ts.map +1 -0
  59. package/.dist/cjs/src/nodes/atomic/any.d.ts +1 -0
  60. package/.dist/cjs/src/nodes/atomic/any.d.ts.map +1 -0
  61. package/.dist/cjs/src/nodes/atomic/bigInt.d.ts +1 -0
  62. package/.dist/cjs/src/nodes/atomic/bigInt.d.ts.map +1 -0
  63. package/.dist/cjs/src/nodes/atomic/boolean.d.ts +1 -0
  64. package/.dist/cjs/src/nodes/atomic/boolean.d.ts.map +1 -0
  65. package/.dist/cjs/src/nodes/atomic/date.d.ts +1 -0
  66. package/.dist/cjs/src/nodes/atomic/date.d.ts.map +1 -0
  67. package/.dist/cjs/src/nodes/atomic/enum.d.ts +1 -0
  68. package/.dist/cjs/src/nodes/atomic/enum.d.ts.map +1 -0
  69. package/.dist/cjs/src/nodes/atomic/enumMember.d.ts +1 -0
  70. package/.dist/cjs/src/nodes/atomic/enumMember.d.ts.map +1 -0
  71. package/.dist/cjs/src/nodes/atomic/literal.d.ts +1 -0
  72. package/.dist/cjs/src/nodes/atomic/literal.d.ts.map +1 -0
  73. package/.dist/cjs/src/nodes/atomic/never.d.ts +1 -0
  74. package/.dist/cjs/src/nodes/atomic/never.d.ts.map +1 -0
  75. package/.dist/cjs/src/nodes/atomic/null.d.ts +1 -0
  76. package/.dist/cjs/src/nodes/atomic/null.d.ts.map +1 -0
  77. package/.dist/cjs/src/nodes/atomic/number.d.ts +1 -0
  78. package/.dist/cjs/src/nodes/atomic/number.d.ts.map +1 -0
  79. package/.dist/cjs/src/nodes/atomic/object.d.ts +1 -0
  80. package/.dist/cjs/src/nodes/atomic/object.d.ts.map +1 -0
  81. package/.dist/cjs/src/nodes/atomic/regexp.d.ts +1 -0
  82. package/.dist/cjs/src/nodes/atomic/regexp.d.ts.map +1 -0
  83. package/.dist/cjs/src/nodes/atomic/string.d.ts +1 -0
  84. package/.dist/cjs/src/nodes/atomic/string.d.ts.map +1 -0
  85. package/.dist/cjs/src/nodes/atomic/symbol.d.ts +1 -0
  86. package/.dist/cjs/src/nodes/atomic/symbol.d.ts.map +1 -0
  87. package/.dist/cjs/src/nodes/atomic/undefined.d.ts +1 -0
  88. package/.dist/cjs/src/nodes/atomic/undefined.d.ts.map +1 -0
  89. package/.dist/cjs/src/nodes/atomic/unknown.d.ts +1 -0
  90. package/.dist/cjs/src/nodes/atomic/unknown.d.ts.map +1 -0
  91. package/.dist/cjs/src/nodes/atomic/void.d.ts +1 -0
  92. package/.dist/cjs/src/nodes/atomic/void.d.ts.map +1 -0
  93. package/.dist/cjs/src/nodes/collection/class.d.ts +1 -0
  94. package/.dist/cjs/src/nodes/collection/class.d.ts.map +1 -0
  95. package/.dist/cjs/src/nodes/collection/functionParams.d.ts +1 -0
  96. package/.dist/cjs/src/nodes/collection/functionParams.d.ts.map +1 -0
  97. package/.dist/cjs/src/nodes/collection/interface.d.ts +1 -0
  98. package/.dist/cjs/src/nodes/collection/interface.d.ts.map +1 -0
  99. package/.dist/cjs/src/nodes/collection/intersection.d.ts +1 -0
  100. package/.dist/cjs/src/nodes/collection/intersection.d.ts.map +1 -0
  101. package/.dist/cjs/src/nodes/collection/tuple.d.ts +1 -0
  102. package/.dist/cjs/src/nodes/collection/tuple.d.ts.map +1 -0
  103. package/.dist/cjs/src/nodes/collection/union.d.ts +1 -0
  104. package/.dist/cjs/src/nodes/collection/union.d.ts.map +1 -0
  105. package/.dist/cjs/src/nodes/collection/unionDiscriminator.d.ts +1 -0
  106. package/.dist/cjs/src/nodes/collection/unionDiscriminator.d.ts.map +1 -0
  107. package/.dist/cjs/src/nodes/function/function.d.ts +1 -0
  108. package/.dist/cjs/src/nodes/function/function.d.ts.map +1 -0
  109. package/.dist/cjs/src/nodes/member/array.d.ts +1 -0
  110. package/.dist/cjs/src/nodes/member/array.d.ts.map +1 -0
  111. package/.dist/cjs/src/nodes/member/callSignature.d.ts +1 -0
  112. package/.dist/cjs/src/nodes/member/callSignature.d.ts.map +1 -0
  113. package/.dist/cjs/src/nodes/member/genericMember.d.ts +1 -0
  114. package/.dist/cjs/src/nodes/member/genericMember.d.ts.map +1 -0
  115. package/.dist/cjs/src/nodes/member/indexProperty.d.ts +1 -0
  116. package/.dist/cjs/src/nodes/member/indexProperty.d.ts.map +1 -0
  117. package/.dist/cjs/src/nodes/member/method.d.ts +1 -0
  118. package/.dist/cjs/src/nodes/member/method.d.ts.map +1 -0
  119. package/.dist/cjs/src/nodes/member/methodSignature.d.ts +1 -0
  120. package/.dist/cjs/src/nodes/member/methodSignature.d.ts.map +1 -0
  121. package/.dist/cjs/src/nodes/member/param.d.ts +1 -0
  122. package/.dist/cjs/src/nodes/member/param.d.ts.map +1 -0
  123. package/.dist/cjs/src/nodes/member/property.d.ts +1 -0
  124. package/.dist/cjs/src/nodes/member/property.d.ts.map +1 -0
  125. package/.dist/cjs/src/nodes/member/restParams.d.ts +1 -0
  126. package/.dist/cjs/src/nodes/member/restParams.d.ts.map +1 -0
  127. package/.dist/cjs/src/nodes/member/tupleMember.d.ts +1 -0
  128. package/.dist/cjs/src/nodes/member/tupleMember.d.ts.map +1 -0
  129. package/.dist/cjs/src/nodes/native/Iterable.d.ts +1 -0
  130. package/.dist/cjs/src/nodes/native/Iterable.d.ts.map +1 -0
  131. package/.dist/cjs/src/nodes/native/map.d.ts +1 -0
  132. package/.dist/cjs/src/nodes/native/map.d.ts.map +1 -0
  133. package/.dist/cjs/src/nodes/native/nonSerializable.d.ts +1 -0
  134. package/.dist/cjs/src/nodes/native/nonSerializable.d.ts.map +1 -0
  135. package/.dist/cjs/src/nodes/native/promise.d.ts +1 -0
  136. package/.dist/cjs/src/nodes/native/promise.d.ts.map +1 -0
  137. package/.dist/cjs/src/nodes/native/set.d.ts +1 -0
  138. package/.dist/cjs/src/nodes/native/set.d.ts.map +1 -0
  139. package/.dist/cjs/src/run-types-pure-fns.d.ts +1 -0
  140. package/.dist/cjs/src/run-types-pure-fns.d.ts.map +1 -0
  141. package/.dist/cjs/src/types.d.ts +1 -0
  142. package/.dist/cjs/src/types.d.ts.map +1 -0
  143. package/.dist/esm/index.d.ts +1 -0
  144. package/.dist/esm/index.d.ts.map +1 -0
  145. package/.dist/esm/src/constants.d.ts +1 -0
  146. package/.dist/esm/src/constants.d.ts.map +1 -0
  147. package/.dist/esm/src/constants.functions.d.ts +1 -0
  148. package/.dist/esm/src/constants.functions.d.ts.map +1 -0
  149. package/.dist/esm/src/constants.kind.d.ts +1 -0
  150. package/.dist/esm/src/constants.kind.d.ts.map +1 -0
  151. package/.dist/esm/src/createRunType.d.ts +1 -0
  152. package/.dist/esm/src/createRunType.d.ts.map +1 -0
  153. package/.dist/esm/src/createRunTypeFunctions.d.ts +1 -0
  154. package/.dist/esm/src/createRunTypeFunctions.d.ts.map +1 -0
  155. package/.dist/esm/src/formats.runtype.d.ts +1 -0
  156. package/.dist/esm/src/formats.runtype.d.ts.map +1 -0
  157. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts +1 -0
  158. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts.map +1 -0
  159. package/.dist/esm/src/jitCompilers/binary/fromBinary.d.ts +1 -0
  160. package/.dist/esm/src/jitCompilers/binary/fromBinary.d.ts.map +1 -0
  161. package/.dist/esm/src/jitCompilers/binary/toBinary.d.ts +1 -0
  162. package/.dist/esm/src/jitCompilers/binary/toBinary.d.ts.map +1 -0
  163. package/.dist/esm/src/jitCompilers/equalsHelpers.d.ts +1 -0
  164. package/.dist/esm/src/jitCompilers/equalsHelpers.d.ts.map +1 -0
  165. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts +1 -0
  166. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts.map +1 -0
  167. package/.dist/esm/src/jitCompilers/json/stringifyJson.d.ts +1 -0
  168. package/.dist/esm/src/jitCompilers/json/stringifyJson.d.ts.map +1 -0
  169. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts +1 -0
  170. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts.map +1 -0
  171. package/.dist/esm/src/jitCompilers/json/toJsCode.d.ts +1 -0
  172. package/.dist/esm/src/jitCompilers/json/toJsCode.d.ts.map +1 -0
  173. package/.dist/esm/src/lib/baseRunTypeFormat.d.ts +1 -0
  174. package/.dist/esm/src/lib/baseRunTypeFormat.d.ts.map +1 -0
  175. package/.dist/esm/src/lib/baseRunTypes.d.ts +1 -0
  176. package/.dist/esm/src/lib/baseRunTypes.d.ts.map +1 -0
  177. package/.dist/esm/src/lib/createJitFunction.d.ts +1 -0
  178. package/.dist/esm/src/lib/createJitFunction.d.ts.map +1 -0
  179. package/.dist/esm/src/lib/dkProxy.d.ts +1 -0
  180. package/.dist/esm/src/lib/dkProxy.d.ts.map +1 -0
  181. package/.dist/esm/src/lib/formats.d.ts +1 -0
  182. package/.dist/esm/src/lib/formats.d.ts.map +1 -0
  183. package/.dist/esm/src/lib/guards.d.ts +1 -0
  184. package/.dist/esm/src/lib/guards.d.ts.map +1 -0
  185. package/.dist/esm/src/lib/jitFnCompiler.d.ts +1 -0
  186. package/.dist/esm/src/lib/jitFnCompiler.d.ts.map +1 -0
  187. package/.dist/esm/src/lib/jitFnsRegistry.d.ts +1 -0
  188. package/.dist/esm/src/lib/jitFnsRegistry.d.ts.map +1 -0
  189. package/.dist/esm/src/lib/typeId.d.ts +1 -0
  190. package/.dist/esm/src/lib/typeId.d.ts.map +1 -0
  191. package/.dist/esm/src/lib/utils.d.ts +1 -0
  192. package/.dist/esm/src/lib/utils.d.ts.map +1 -0
  193. package/.dist/esm/src/mocking/constants.mock.d.ts +1 -0
  194. package/.dist/esm/src/mocking/constants.mock.d.ts.map +1 -0
  195. package/.dist/esm/src/mocking/mockRegistry.d.ts +1 -0
  196. package/.dist/esm/src/mocking/mockRegistry.d.ts.map +1 -0
  197. package/.dist/esm/src/mocking/mockType.d.ts +1 -0
  198. package/.dist/esm/src/mocking/mockType.d.ts.map +1 -0
  199. package/.dist/esm/src/mocking/mockUtils.d.ts +1 -0
  200. package/.dist/esm/src/mocking/mockUtils.d.ts.map +1 -0
  201. package/.dist/esm/src/nodes/atomic/any.d.ts +1 -0
  202. package/.dist/esm/src/nodes/atomic/any.d.ts.map +1 -0
  203. package/.dist/esm/src/nodes/atomic/bigInt.d.ts +1 -0
  204. package/.dist/esm/src/nodes/atomic/bigInt.d.ts.map +1 -0
  205. package/.dist/esm/src/nodes/atomic/boolean.d.ts +1 -0
  206. package/.dist/esm/src/nodes/atomic/boolean.d.ts.map +1 -0
  207. package/.dist/esm/src/nodes/atomic/date.d.ts +1 -0
  208. package/.dist/esm/src/nodes/atomic/date.d.ts.map +1 -0
  209. package/.dist/esm/src/nodes/atomic/enum.d.ts +1 -0
  210. package/.dist/esm/src/nodes/atomic/enum.d.ts.map +1 -0
  211. package/.dist/esm/src/nodes/atomic/enumMember.d.ts +1 -0
  212. package/.dist/esm/src/nodes/atomic/enumMember.d.ts.map +1 -0
  213. package/.dist/esm/src/nodes/atomic/literal.d.ts +1 -0
  214. package/.dist/esm/src/nodes/atomic/literal.d.ts.map +1 -0
  215. package/.dist/esm/src/nodes/atomic/never.d.ts +1 -0
  216. package/.dist/esm/src/nodes/atomic/never.d.ts.map +1 -0
  217. package/.dist/esm/src/nodes/atomic/null.d.ts +1 -0
  218. package/.dist/esm/src/nodes/atomic/null.d.ts.map +1 -0
  219. package/.dist/esm/src/nodes/atomic/number.d.ts +1 -0
  220. package/.dist/esm/src/nodes/atomic/number.d.ts.map +1 -0
  221. package/.dist/esm/src/nodes/atomic/object.d.ts +1 -0
  222. package/.dist/esm/src/nodes/atomic/object.d.ts.map +1 -0
  223. package/.dist/esm/src/nodes/atomic/regexp.d.ts +1 -0
  224. package/.dist/esm/src/nodes/atomic/regexp.d.ts.map +1 -0
  225. package/.dist/esm/src/nodes/atomic/string.d.ts +1 -0
  226. package/.dist/esm/src/nodes/atomic/string.d.ts.map +1 -0
  227. package/.dist/esm/src/nodes/atomic/symbol.d.ts +1 -0
  228. package/.dist/esm/src/nodes/atomic/symbol.d.ts.map +1 -0
  229. package/.dist/esm/src/nodes/atomic/undefined.d.ts +1 -0
  230. package/.dist/esm/src/nodes/atomic/undefined.d.ts.map +1 -0
  231. package/.dist/esm/src/nodes/atomic/unknown.d.ts +1 -0
  232. package/.dist/esm/src/nodes/atomic/unknown.d.ts.map +1 -0
  233. package/.dist/esm/src/nodes/atomic/void.d.ts +1 -0
  234. package/.dist/esm/src/nodes/atomic/void.d.ts.map +1 -0
  235. package/.dist/esm/src/nodes/collection/class.d.ts +1 -0
  236. package/.dist/esm/src/nodes/collection/class.d.ts.map +1 -0
  237. package/.dist/esm/src/nodes/collection/functionParams.d.ts +1 -0
  238. package/.dist/esm/src/nodes/collection/functionParams.d.ts.map +1 -0
  239. package/.dist/esm/src/nodes/collection/interface.d.ts +1 -0
  240. package/.dist/esm/src/nodes/collection/interface.d.ts.map +1 -0
  241. package/.dist/esm/src/nodes/collection/intersection.d.ts +1 -0
  242. package/.dist/esm/src/nodes/collection/intersection.d.ts.map +1 -0
  243. package/.dist/esm/src/nodes/collection/tuple.d.ts +1 -0
  244. package/.dist/esm/src/nodes/collection/tuple.d.ts.map +1 -0
  245. package/.dist/esm/src/nodes/collection/union.d.ts +1 -0
  246. package/.dist/esm/src/nodes/collection/union.d.ts.map +1 -0
  247. package/.dist/esm/src/nodes/collection/unionDiscriminator.d.ts +1 -0
  248. package/.dist/esm/src/nodes/collection/unionDiscriminator.d.ts.map +1 -0
  249. package/.dist/esm/src/nodes/function/function.d.ts +1 -0
  250. package/.dist/esm/src/nodes/function/function.d.ts.map +1 -0
  251. package/.dist/esm/src/nodes/member/array.d.ts +1 -0
  252. package/.dist/esm/src/nodes/member/array.d.ts.map +1 -0
  253. package/.dist/esm/src/nodes/member/callSignature.d.ts +1 -0
  254. package/.dist/esm/src/nodes/member/callSignature.d.ts.map +1 -0
  255. package/.dist/esm/src/nodes/member/genericMember.d.ts +1 -0
  256. package/.dist/esm/src/nodes/member/genericMember.d.ts.map +1 -0
  257. package/.dist/esm/src/nodes/member/indexProperty.d.ts +1 -0
  258. package/.dist/esm/src/nodes/member/indexProperty.d.ts.map +1 -0
  259. package/.dist/esm/src/nodes/member/method.d.ts +1 -0
  260. package/.dist/esm/src/nodes/member/method.d.ts.map +1 -0
  261. package/.dist/esm/src/nodes/member/methodSignature.d.ts +1 -0
  262. package/.dist/esm/src/nodes/member/methodSignature.d.ts.map +1 -0
  263. package/.dist/esm/src/nodes/member/param.d.ts +1 -0
  264. package/.dist/esm/src/nodes/member/param.d.ts.map +1 -0
  265. package/.dist/esm/src/nodes/member/property.d.ts +1 -0
  266. package/.dist/esm/src/nodes/member/property.d.ts.map +1 -0
  267. package/.dist/esm/src/nodes/member/restParams.d.ts +1 -0
  268. package/.dist/esm/src/nodes/member/restParams.d.ts.map +1 -0
  269. package/.dist/esm/src/nodes/member/tupleMember.d.ts +1 -0
  270. package/.dist/esm/src/nodes/member/tupleMember.d.ts.map +1 -0
  271. package/.dist/esm/src/nodes/native/Iterable.d.ts +1 -0
  272. package/.dist/esm/src/nodes/native/Iterable.d.ts.map +1 -0
  273. package/.dist/esm/src/nodes/native/map.d.ts +1 -0
  274. package/.dist/esm/src/nodes/native/map.d.ts.map +1 -0
  275. package/.dist/esm/src/nodes/native/nonSerializable.d.ts +1 -0
  276. package/.dist/esm/src/nodes/native/nonSerializable.d.ts.map +1 -0
  277. package/.dist/esm/src/nodes/native/promise.d.ts +1 -0
  278. package/.dist/esm/src/nodes/native/promise.d.ts.map +1 -0
  279. package/.dist/esm/src/nodes/native/set.d.ts +1 -0
  280. package/.dist/esm/src/nodes/native/set.d.ts.map +1 -0
  281. package/.dist/esm/src/run-types-pure-fns.d.ts +1 -0
  282. package/.dist/esm/src/run-types-pure-fns.d.ts.map +1 -0
  283. package/.dist/esm/src/types.d.ts +1 -0
  284. package/.dist/esm/src/types.d.ts.map +1 -0
  285. package/index.ts +70 -0
  286. package/package.json +8 -4
  287. package/src/constants.functions.ts +196 -0
  288. package/src/constants.kind.ts +76 -0
  289. package/src/constants.ts +85 -0
  290. package/src/createRunType.ts +323 -0
  291. package/src/createRunTypeFunctions.ts +93 -0
  292. package/src/formats.runtype.ts +35 -0
  293. package/src/jitCompilers/binary/binarySPEC.md +138 -0
  294. package/src/jitCompilers/binary/binarySpec/binaryHelpers.ts +118 -0
  295. package/src/jitCompilers/binary/fromBinary.ts +492 -0
  296. package/src/jitCompilers/binary/toBinary.ts +435 -0
  297. package/src/jitCompilers/equalsHelpers.ts +62 -0
  298. package/src/jitCompilers/json/jsonSpec/jsonHelpers.ts +64 -0
  299. package/src/jitCompilers/json/stringifyJson.ts +475 -0
  300. package/src/jitCompilers/json/stringifySpec/stringifyHelpers.ts +59 -0
  301. package/src/jitCompilers/json/toJsCode.ts +182 -0
  302. package/src/jitCompilers/serialization-suite.ts +1637 -0
  303. package/src/jitCompilers/xyz-Template/fromXYZ.ts +211 -0
  304. package/src/jitCompilers/xyz-Template/toXYZ.ts +216 -0
  305. package/src/jitCompilers/xyz-Template/xyzReadme.md +6 -0
  306. package/src/jitCompilers/xyz-Template/xyzSpec/xyzHelpers.ts +66 -0
  307. package/src/lib/baseRunTypeFormat.ts +320 -0
  308. package/src/lib/baseRunTypes.ts +367 -0
  309. package/src/lib/createJitFunction.ts +87 -0
  310. package/src/lib/dkProxy.ts +47 -0
  311. package/src/lib/formats.ts +144 -0
  312. package/src/lib/guards.ts +290 -0
  313. package/src/lib/jitFnCompiler.ts +783 -0
  314. package/src/lib/jitFnsRegistry.ts +53 -0
  315. package/src/lib/typeId.ts +225 -0
  316. package/src/lib/utils.ts +402 -0
  317. package/src/mocking/constants.mock.ts +87 -0
  318. package/src/mocking/mockRegistry.ts +20 -0
  319. package/src/mocking/mockType.ts +354 -0
  320. package/src/mocking/mockUtils.ts +82 -0
  321. package/src/nodes/atomic/any.ts +22 -0
  322. package/src/nodes/atomic/bigInt.ts +26 -0
  323. package/src/nodes/atomic/boolean.ts +26 -0
  324. package/src/nodes/atomic/date.ts +26 -0
  325. package/src/nodes/atomic/enum.ts +23 -0
  326. package/src/nodes/atomic/enumMember.ts +29 -0
  327. package/src/nodes/atomic/literal.ts +125 -0
  328. package/src/nodes/atomic/never.ts +26 -0
  329. package/src/nodes/atomic/null.ts +26 -0
  330. package/src/nodes/atomic/number.ts +26 -0
  331. package/src/nodes/atomic/object.ts +20 -0
  332. package/src/nodes/atomic/regexp.ts +29 -0
  333. package/src/nodes/atomic/string.ts +20 -0
  334. package/src/nodes/atomic/symbol.ts +31 -0
  335. package/src/nodes/atomic/undefined.ts +23 -0
  336. package/src/nodes/atomic/unknown.ts +10 -0
  337. package/src/nodes/atomic/void.ts +26 -0
  338. package/src/nodes/collection/class.ts +36 -0
  339. package/src/nodes/collection/functionParams.ts +42 -0
  340. package/src/nodes/collection/interface.ts +300 -0
  341. package/src/nodes/collection/intersection.ts +30 -0
  342. package/src/nodes/collection/tuple.ts +80 -0
  343. package/src/nodes/collection/union.ts +205 -0
  344. package/src/nodes/collection/unionDiscriminator.ts +259 -0
  345. package/src/nodes/function/function.ts +166 -0
  346. package/src/nodes/member/array.ts +150 -0
  347. package/src/nodes/member/callSignature.ts +34 -0
  348. package/src/nodes/member/genericMember.ts +63 -0
  349. package/src/nodes/member/indexProperty.ts +125 -0
  350. package/src/nodes/member/method.ts +30 -0
  351. package/src/nodes/member/methodSignature.ts +31 -0
  352. package/src/nodes/member/param.ts +22 -0
  353. package/src/nodes/member/property.ts +75 -0
  354. package/src/nodes/member/restParams.ts +22 -0
  355. package/src/nodes/member/tupleMember.ts +93 -0
  356. package/src/nodes/native/Iterable.ts +153 -0
  357. package/src/nodes/native/map.ts +91 -0
  358. package/src/nodes/native/nonSerializable.ts +42 -0
  359. package/src/nodes/native/promise.ts +43 -0
  360. package/src/nodes/native/set.ts +56 -0
  361. package/src/run-types-pure-fns.ts +116 -0
  362. package/src/types.ts +206 -0
@@ -0,0 +1,475 @@
1
+ /* ########
2
+ * 2025 mion
3
+ * Author: Ma-jerez
4
+ * License: MIT
5
+ * The software is provided "as is", without warranty of any kind.
6
+ * ######## */
7
+
8
+ import {ReflectionKind} from '@deepkit/type';
9
+ import {ReflectionSubKind} from '../../constants.kind.ts';
10
+ import {JitFunctions} from '../../constants.functions.ts';
11
+ import {JitFnCompiler} from '../../lib/jitFnCompiler.ts';
12
+ import {createIfElseFn, isSafePropName, parentIs} from '../../lib/utils.ts';
13
+ import type {IndexSignatureRunType} from '../../nodes/member/indexProperty.ts';
14
+ import type {JitCode} from '../../types.ts';
15
+ import type {BaseRunType} from '../../lib/baseRunTypes.ts';
16
+ import type {ClassRunType} from '../../nodes/collection/class.ts';
17
+ import type {PropertyRunType} from '../../nodes/member/property.ts';
18
+ import type {MapRunType} from '../../nodes/native/map.ts';
19
+ import type {SetRunType} from '../../nodes/native/set.ts';
20
+ import type {InterfaceRunType} from '../../nodes/collection/interface.ts';
21
+ import type {TupleRunType} from '../../nodes/collection/tuple.ts';
22
+ import type {FunctionParamsRunType} from '../../nodes/collection/functionParams.ts';
23
+ import type {UnionRunType} from '../../nodes/collection/union.ts';
24
+ import type {ParameterRunType} from '../../nodes/member/param.ts';
25
+ import type {RestParamsRunType} from '../../nodes/member/restParams.ts';
26
+ import type {ArrayRunType} from '../../nodes/member/array.ts';
27
+ import type {MemberRunType} from '../../lib/baseRunTypes.ts';
28
+ import type {LiteralRunType} from '../../nodes/atomic/literal.ts';
29
+ import type {IterableRunType} from '../../nodes/native/Iterable.ts';
30
+ import {cpf_asJSONString} from '../../run-types-pure-fns.ts';
31
+
32
+ type Operation = typeof JitFunctions.stringifyJson.id | typeof JitFunctions.toJSCode.id;
33
+
34
+ export function createStringifyCompiler(fnID: Operation) {
35
+ const compileStringifyIterable = createStringifyIterable(fnID);
36
+ /** Centralized compile jit function with a switch statement that handles all node types. */
37
+ function compileStringify(runType: BaseRunType, comp: JitFnCompiler): JitCode {
38
+ const src = runType.src;
39
+ const kind = src.kind;
40
+
41
+ switch (kind) {
42
+ // ###################### ATOMIC RUNTYPES ######################
43
+ // Primitive types and other atomic types that don't contain other types
44
+ case ReflectionKind.unknown:
45
+ case ReflectionKind.any:
46
+ return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};
47
+ case ReflectionKind.bigint:
48
+ return {code: `'"'+${comp.vλl}.toString()+'"'`, type: 'E'};
49
+ case ReflectionKind.boolean:
50
+ return {code: `(${comp.vλl} ? 'true' : 'false')`, type: 'E'};
51
+ case ReflectionKind.enum:
52
+ if (src.indexType.kind === ReflectionKind.number) return {code: comp.vλl, type: 'E'};
53
+ return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};
54
+ case ReflectionKind.enumMember:
55
+ throw new Error('StringifyJson enum member is not supported.');
56
+ case ReflectionKind.literal: {
57
+ const rt = runType as LiteralRunType;
58
+ if (src.literal instanceof RegExp) return compileStringify({src: {kind: ReflectionKind.regexp}} as any, comp);
59
+ const literalRt = runType;
60
+ const originalKind = src.kind;
61
+ let result: JitCode;
62
+ switch (typeof rt.src.literal) {
63
+ case 'number':
64
+ literalRt.src.kind = ReflectionKind.number;
65
+ result = compileStringify(literalRt, comp);
66
+ break;
67
+ case 'string':
68
+ literalRt.src.kind = ReflectionKind.string;
69
+ result = compileStringify(literalRt, comp);
70
+ break;
71
+ case 'boolean':
72
+ literalRt.src.kind = ReflectionKind.boolean;
73
+ result = compileStringify(literalRt, comp);
74
+ break;
75
+ case 'bigint':
76
+ literalRt.src.kind = ReflectionKind.bigint;
77
+ result = compileStringify(literalRt, comp);
78
+ break;
79
+ case 'symbol':
80
+ literalRt.src.kind = ReflectionKind.symbol;
81
+ result = compileStringify(literalRt, comp);
82
+ break;
83
+ default:
84
+ result = {code: `JSON.stringify(${comp.vλl})`, type: 'E'};
85
+ break;
86
+ }
87
+ literalRt.src.kind = originalKind;
88
+ return result;
89
+ }
90
+ case ReflectionKind.never:
91
+ throw new Error('Never type cannot be stringified.');
92
+ case ReflectionKind.null: {
93
+ const isRoot = comp.getNestLevel(runType) === 0;
94
+ return {code: isRoot ? `String(${comp.vλl})` : comp.vλl, type: 'E'};
95
+ }
96
+ case ReflectionKind.number: {
97
+ const isRoot = comp.getNestLevel(runType) === 0;
98
+ return {code: isRoot ? `String(${comp.vλl})` : comp.vλl, type: 'E'};
99
+ }
100
+ case ReflectionKind.object:
101
+ return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};
102
+ case ReflectionKind.regexp: {
103
+ return {code: `JSON.stringify(${comp.vλl}.toString())`, type: 'E'};
104
+ }
105
+ case ReflectionKind.string: {
106
+ return {code: `JSON.stringify(${comp.vλl})`, type: 'E'};
107
+ }
108
+ case ReflectionKind.symbol:
109
+ return {code: `JSON.stringify('Symbol:' + (${comp.vλl}.description || ''))`, type: 'E'};
110
+ case ReflectionKind.templateLiteral:
111
+ throw new Error('Template Literals are not supported.');
112
+ case ReflectionKind.undefined: {
113
+ const isRoot = comp.getNestLevel(runType) === 0;
114
+ if (isRoot) return {code: `undefined`, type: 'E'};
115
+ const parentIsArray = parentIs(runType, ReflectionKind.array);
116
+ if (parentIsArray) return {code: `'null'`, type: 'E'}; // we use array.join(',') to serialize arrays, so we need to return null literal (string)
117
+ return {code: `null`, type: 'E'};
118
+ }
119
+ case ReflectionKind.void:
120
+ return {code: 'undefined', type: 'E'};
121
+
122
+ // ###################### MEMBER RUNTYPES ######################
123
+ // Types that represent members of collections or other structures
124
+ case ReflectionKind.array: {
125
+ const rt = runType as ArrayRunType;
126
+ rt.checkNonSkipTypes(comp);
127
+ const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);
128
+ if (!childJit?.code) return {code: `JSON.stringify(${comp.vλl})`, type: 'RB'};
129
+ const jsonItems = comp.getLocalVarName('ls', rt);
130
+ const resultVal = comp.getLocalVarName('res', rt);
131
+ const index = rt.getChildVarName(comp);
132
+ return {
133
+ code: `
134
+ const ${jsonItems} = [];
135
+ for (let ${index} = ${rt.startIndex(comp)}; ${index} < ${comp.vλl}.length; ${index}++) {
136
+ const ${resultVal} = ${childJit.code};
137
+ ${jsonItems}.push(${resultVal});
138
+ }
139
+ return '[' + ${jsonItems}.join(',') + ']';
140
+ `,
141
+ type: 'RB',
142
+ };
143
+ }
144
+ case ReflectionKind.indexSignature: {
145
+ const rt = runType as IndexSignatureRunType;
146
+ const child = rt.getJitChild(comp);
147
+ const childJit = comp.compile(child, 'E', fnID);
148
+ if (!child || !childJit?.code) return {code: undefined, type: 'RB'};
149
+ const varName = comp.vλl;
150
+ const prop = rt.getChildVarName(comp);
151
+ const arrName = comp.getLocalVarName('ls', rt);
152
+ const sep = rt.skipCommas ? '' : '+","';
153
+ const skipCode = rt.getSkipCode(comp, prop);
154
+ // asJSONString is more optimized for propNames than JSON.stringify
155
+ // in Node, bun is actually slower so we might consider removing this and use native JSON.stringify
156
+ const asJSONStringFn = comp.addPureFunction(cpf_asJSONString);
157
+ return {
158
+ code: `
159
+ const ${arrName} = [];
160
+ for (const ${prop} in ${varName}) {
161
+ ${skipCode}
162
+ if (${prop} !== undefined) ${arrName}.push(${asJSONStringFn}(${prop}) + ':' + ${childJit.code});
163
+ }
164
+ if (!${arrName}.length) return '';
165
+ return ${arrName}.join(',')${sep};
166
+ `,
167
+ type: 'RB',
168
+ };
169
+ }
170
+ case ReflectionKind.function:
171
+ case ReflectionKind.method:
172
+ case ReflectionKind.methodSignature:
173
+ case ReflectionKind.callSignature:
174
+ if (runType.src.subKind === ReflectionSubKind.params) {
175
+ const rt = runType as FunctionParamsRunType;
176
+ const skip = rt.skipJit(comp);
177
+ if (skip) return {code: '', type: 'E'};
178
+ const params = rt.getParamRunTypes(comp);
179
+ if (params.length === 0) return {code: `'[]'`, type: 'E'};
180
+ const paramsCode = params.map((p) => comp.compile(p, 'E', fnID).code).join('+');
181
+ return {code: `'['+${paramsCode}+']'`, type: 'E'};
182
+ } else {
183
+ throw new Error(
184
+ `Compile function ${getOperationName()} not supported, call compileParams or compileReturn instead.`
185
+ );
186
+ }
187
+ case ReflectionKind.parameter: {
188
+ const rt = runType as ParameterRunType;
189
+ switch (src.subKind) {
190
+ case ReflectionSubKind.mapKey:
191
+ case ReflectionSubKind.mapValue:
192
+ case ReflectionSubKind.setItem:
193
+ return compileStringifyGenericMember(rt, comp);
194
+ default:
195
+ return compileStringifyParameter(rt, comp);
196
+ }
197
+ }
198
+ case ReflectionKind.property:
199
+ case ReflectionKind.propertySignature: {
200
+ const rt = runType as PropertyRunType;
201
+ const child = rt.getJitChild(comp);
202
+ const childJit = comp.compile(child, 'E', fnID);
203
+ if (!child || !childJit?.code) return {code: undefined, type: 'E'};
204
+ // this can´t be processed in the parent as we need to handle the empty string case when value is undefined
205
+ const sep = rt.skipCommas ? '' : '+","';
206
+ // encoding safe property with ':' inside the string saves a little processing
207
+ // when prop is not safe we need to double encode double quotes and escape characters
208
+ const propDef = getPropName(rt, comp);
209
+ if (rt.src.optional) {
210
+ rt.tempChildVλl = comp.getChildVλl();
211
+ // TODO: check if json for an object with first property undefined is valid (maybe the comma must be dynamic too)
212
+ return {code: `(${rt.tempChildVλl} === undefined ? '' : ${propDef}+${childJit.code}${sep})`, type: 'E'};
213
+ }
214
+ return {code: `${propDef}+${childJit.code}${sep}`, type: 'E'};
215
+ }
216
+ case ReflectionKind.rest: {
217
+ const rt = runType as RestParamsRunType;
218
+ const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);
219
+ const itemCodeStr = childJit?.code || 'JSON.stringify(' + comp.getChildVλl() + ')';
220
+ const arrName = comp.getLocalVarName('res', rt);
221
+ const itemName = comp.getLocalVarName('its', rt);
222
+ const index = rt.getChildVarName(comp);
223
+ const isFist = rt.getChildIndex(comp) === 0;
224
+ const sep = isFist ? '' : `','+`;
225
+ return {
226
+ code: `
227
+ const ${arrName} = [];
228
+ for (let ${index} = ${rt.getChildIndex(comp)}; ${index} < ${comp.vλl}.length; ${index}++) {
229
+ const ${itemName} = ${itemCodeStr};
230
+ if(${itemName}) ${arrName}.push(${itemName});
231
+ }
232
+ if (!${arrName}.length) {return '';}
233
+ else {return ${sep}${arrName}.join(',')}
234
+ `,
235
+ type: 'RB',
236
+ };
237
+ }
238
+ case ReflectionKind.tupleMember: {
239
+ const rt = runType as ParameterRunType;
240
+ const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);
241
+ const childCodeStr = childJit?.code || `null`; // non serializable types are set to null
242
+ if (rt.isRest()) return childJit || {code: `null`, type: 'E'};
243
+ const isFirst = rt.getChildIndex(comp) === 0;
244
+ const sep = isFirst ? '' : `','+`;
245
+ if (rt.isOptional())
246
+ return {code: `(${comp.getChildVλl()} === undefined ? ${sep}'null' : ${sep}${childCodeStr})`, type: 'E'};
247
+ return {code: `${sep}${childCodeStr}`, type: 'E'};
248
+ }
249
+ case ReflectionKind.promise: {
250
+ throw new Error(`Jit compilation disabled for Non Serializable types.`);
251
+ }
252
+
253
+ // ###################### COLLECTION RUNTYPES ######################
254
+ // Types that contain other types as members
255
+ case ReflectionKind.objectLiteral:
256
+ case ReflectionKind.intersection: {
257
+ if (runType.src.subKind === ReflectionSubKind.nonSerializable) {
258
+ throw new Error(`${getOperationName()} is disabled for Non Serializable types.`);
259
+ } else {
260
+ const rt = runType as InterfaceRunType;
261
+ return compileStringifyInterface(rt, comp);
262
+ }
263
+ }
264
+ case ReflectionKind.class:
265
+ return compileStringifyClass(runType, comp);
266
+ case ReflectionKind.infer:
267
+ throw new Error('Infer is not supported.');
268
+ case ReflectionKind.tuple: {
269
+ const rt = runType as TupleRunType;
270
+ const skip = rt.skipJit(comp);
271
+ if (skip) return {code: '', type: 'E'};
272
+ if (rt.getChildRunTypes().length === 0) return {code: `'[]'`, type: 'E'};
273
+ const paramsCode = rt
274
+ .getChildRunTypes()
275
+ .map((p) => comp.compile(p, 'E', fnID).code)
276
+ .join('+');
277
+ return {code: `'['+${paramsCode}+']'`, type: 'E'};
278
+ }
279
+ case ReflectionKind.typeParameter:
280
+ // Type parameter has been replaced by tuple member internally so this should never be called
281
+ throw new Error('Type parameter not implemented.');
282
+ case ReflectionKind.union: {
283
+ const urt = runType as UnionRunType;
284
+ urt.checkAllowedChildren(comp);
285
+ const {simpleItems, objectTypes, anyItem} = urt.getUnionChildren(comp);
286
+ const errName = comp.getLocalVarName('uErr', urt);
287
+ const fail = `throw new Error(${errName});`;
288
+ comp.setContextItem(
289
+ errName,
290
+ `const ${errName} = "Can not ${getOperationName()} union: item does not belong to the union"`
291
+ );
292
+ const ifElse = createIfElseFn();
293
+ // Helper to generate stringify code for a union item
294
+ const getStringifyCode = (unionItem: BaseRunType) => {
295
+ const childJit = comp.compile(unionItem, 'E', fnID);
296
+ const encJit = comp.compilePrepareForJson(unionItem, 'E');
297
+ const decJit = comp.compileRestoreFromJson(unionItem, 'E');
298
+ const needsTupleEncoding = !!encJit?.code || !!decJit?.code;
299
+ const skiEncode = !childJit?.code || childJit.code === comp.vλl;
300
+ const stringifyCode = skiEncode ? comp.vλl : childJit.code;
301
+ const index = urt.getUnionItemIndex(comp, unionItem);
302
+ const toTuple = `'[${index},' + ${stringifyCode} + ']'`;
303
+ const tupleCode = unionItem.getFamily() === 'A' ? `(${toTuple})` : toTuple;
304
+ return needsTupleEncoding ? `return ${tupleCode}` : `return ${stringifyCode}`;
305
+ };
306
+ // Generate code for simple items (atomic types)
307
+ const simpleCode = simpleItems.map((unionItem) => {
308
+ const isTypeCode = urt.getChildIsTypeWithLooseCheck(unionItem, comp);
309
+ return `${ifElse()} (${isTypeCode}) {${getStringifyCode(unionItem)}}`;
310
+ });
311
+ // Generate code for object types (need null guard)
312
+ const objCode = objectTypes.length
313
+ ? objectTypes.map((unionItem) => {
314
+ const isTypeCode = urt.getChildIsTypeWithLooseCheck(unionItem, comp);
315
+ return `${ifElse()} (typeof ${comp.vλl} === 'object' && ${comp.vλl} !== null && ${isTypeCode}) {${getStringifyCode(unionItem)}}`;
316
+ })
317
+ : [];
318
+ // Generate code for anyItem (always matches, checked last as fallback)
319
+ const anyCode = anyItem ? `${ifElse(true)} {${getStringifyCode(anyItem)}}` : `${ifElse(true)} {${fail}}`;
320
+
321
+ return {code: [...simpleCode, ...objCode, anyCode].join(''), type: 'RB'};
322
+ }
323
+ default:
324
+ throw new Error(`Cant ${getOperationName()} for unsupported RunType: ${runType.getTypeName()}`);
325
+ }
326
+ }
327
+
328
+ function getOperationName() {
329
+ switch (fnID) {
330
+ case JitFunctions.stringifyJson.id:
331
+ return 'StringifyJson';
332
+ case JitFunctions.toJSCode.id:
333
+ return 'ToCode';
334
+ default:
335
+ throw new Error(`Unknown operation: ${fnID}`);
336
+ }
337
+ }
338
+
339
+ function getPropName(rt: PropertyRunType, comp: JitFnCompiler): string {
340
+ if (!isSafePropName(rt.src.name)) return `${JSON.stringify(rt.getChildLiteral(comp) as string)}+':'`;
341
+ if (fnID === JitFunctions.toJSCode.id) return `'${rt.getChildVarName(comp)}:'`;
342
+ return `'"${rt.getChildVarName(comp)}":'`;
343
+ }
344
+
345
+ function compileStringifyParameter(rt: ParameterRunType, comp: JitFnCompiler): JitCode {
346
+ const childJit = comp.compile(rt.getJitChild(comp), 'E', fnID);
347
+ const childCodeStr = childJit?.code || `null`; // non serializable types are set to null
348
+ if (rt.isRest()) return childJit || {code: `null`, type: 'E'};
349
+ const isFirst = rt.getChildIndex(comp) === 0;
350
+ const sep = isFirst ? '' : `','+`;
351
+ if (rt.isOptional())
352
+ return {code: `(${comp.getChildVλl()} === undefined ? ${sep}'null' : ${sep}${childCodeStr})`, type: 'E'};
353
+ return {code: `${sep}${childCodeStr}`, type: 'E'};
354
+ }
355
+
356
+ function compileStringifyGenericMember(rt: ParameterRunType, comp: JitFnCompiler): JitCode {
357
+ const child = rt.getJitChild(comp);
358
+ const argCode = comp.compile(child, 'E', fnID);
359
+ if (!argCode?.code) return {code: undefined, type: 'E'};
360
+ const isFirst = rt.getChildIndex(comp) === 0;
361
+ const sep = isFirst ? '' : `','+`;
362
+ if (rt.isOptional()) return {code: `(${comp.getChildVλl()} === undefined ? '': ${sep}${argCode.code})`, type: 'E'};
363
+ return {code: `${sep}${argCode.code}`, type: 'E'};
364
+ }
365
+
366
+ function compileStringifyInterface(rt: InterfaceRunType, comp: JitFnCompiler): JitCode {
367
+ if (rt.isCallable()) return comp.compile(rt.getCallSignature(), 'E', fnID);
368
+ const children = rt.getJsonStringifySortedChildren(comp);
369
+ if (children.length === 0) return {code: `''`, type: 'E'};
370
+ const allOptional = children.every((prop) => (prop as MemberRunType<any>).isOptional());
371
+ // if all properties are optional, we can not optimize and use JSON.stringify
372
+ if (allOptional) return compileInterfaceIntoArray(rt, comp, children);
373
+ const childrenCode = children
374
+ .map((prop, i) => {
375
+ const nexChild = children[i + 1];
376
+ const isLast = !nexChild;
377
+ prop.skipCommas = isLast;
378
+ return comp.compile(prop, 'E', fnID).code;
379
+ })
380
+ .filter(Boolean)
381
+ .join('+');
382
+ return {code: `'{'+${childrenCode}+'}'`, type: 'E'};
383
+ }
384
+
385
+ function compileInterfaceIntoArray(rt: InterfaceRunType, comp: JitFnCompiler, children: MemberRunType<any>[]): JitCode {
386
+ const arrName = comp.getLocalVarName('ns', rt);
387
+ const childrenCode = children
388
+ .map((prop) => {
389
+ prop.skipCommas = true;
390
+ const childJit = comp.compile(prop, 'E', fnID);
391
+ if (!childJit?.code) return '';
392
+ const code = `${arrName}.push(${childJit.code})`;
393
+ // makes an extra check to avoid pushing empty strings to the array (childJit also makes the same check but is better than having to filter the array after)
394
+ return prop.isOptional() && prop.tempChildVλl ? `if (${prop.tempChildVλl} !== undefined){${code}}` : `${code};`;
395
+ })
396
+ .filter(Boolean)
397
+ .join('');
398
+
399
+ return {code: `(function(){const ${arrName} = [];${childrenCode};return '{'+${arrName}.join(',')+'}'})()`, type: 'E'};
400
+ }
401
+
402
+ function compileStringifyClass(runType: BaseRunType, comp: JitFnCompiler): JitCode {
403
+ switch (runType.src.subKind) {
404
+ case ReflectionSubKind.date:
405
+ return {code: `'"'+${comp.vλl}.toJSON()+'"'`, type: 'E'};
406
+ case ReflectionSubKind.map: {
407
+ const rt = runType as unknown as MapRunType;
408
+ return compileStringifyIterable(rt as unknown as IterableRunType, comp);
409
+ }
410
+ case ReflectionSubKind.set: {
411
+ const rt = runType as unknown as SetRunType;
412
+ return compileStringifyIterable(rt as unknown as IterableRunType, comp);
413
+ }
414
+ case ReflectionSubKind.nonSerializable:
415
+ throw new Error(`Jit compilation disabled for Non Serializable types.`);
416
+ default: {
417
+ const rt = runType as unknown as ClassRunType;
418
+ if (rt.isCallable()) {
419
+ const callSignature = rt.getCallSignature();
420
+ if (callSignature) return comp.compile(callSignature, 'E', fnID);
421
+ }
422
+ // optional and index properties must be compiled first to prevent trailing commas
423
+ // this is because the last trailing comma is calculated statically
424
+ // maybe we need to move that trailing comma compilation to be dynamic
425
+ // but we would need to create a self invoking function for that
426
+ const children = rt.getJsonStringifySortedChildren(comp);
427
+ if (children.length === 0) return {code: `''`, type: 'E'};
428
+ const childrenCode = children
429
+ .map((prop, i) => {
430
+ const nexChild = children[i + 1];
431
+ const isLast = !nexChild;
432
+ prop.skipCommas = isLast;
433
+ return comp.compile(prop, 'E', fnID).code;
434
+ })
435
+ .filter(Boolean)
436
+ .join('+');
437
+ return {code: `'{'+${childrenCode}+'}'`, type: 'E'};
438
+ }
439
+ }
440
+ }
441
+
442
+ return compileStringify;
443
+ }
444
+
445
+ export function createStringifyIterable(fnID: Operation) {
446
+ return function compileStringifyIterable(
447
+ rt: IterableRunType,
448
+ comp: JitFnCompiler,
449
+ /** prefix characters to add before the generated array, used when generating code instead json */
450
+ codePrefix: string = '',
451
+ /** suffix characters to add after the generated array, used when generating code instead json */
452
+ codeSuffix: string = ''
453
+ ): JitCode {
454
+ const entry = rt.getCustomVλl(comp)?.vλl || comp.vλl;
455
+ const jitChildren = rt.getJitChildren(comp);
456
+ const childrenCode = jitChildren.map((c) => comp.compile(c, 'E', fnID).code).join('+');
457
+ const jsonItems = comp.getLocalVarName('ls', rt);
458
+ const resultVal = comp.getLocalVarName('res', rt);
459
+ const childrenResult = jitChildren.length > 1 ? `'['+${childrenCode}+']'` : childrenCode;
460
+ const earlyReturn = codePrefix && codeSuffix ? `if (!${jsonItems}.length) return '${codePrefix}${codeSuffix}';` : '';
461
+ return {
462
+ code: `
463
+ const ${jsonItems} = [];
464
+ for (const ${entry} of ${comp.vλl}) {
465
+ const ${resultVal} = ${childrenResult};
466
+ ${jsonItems}.push(${resultVal});
467
+ }
468
+ ${earlyReturn}return '${codePrefix}[' + ${jsonItems}.join(',') + ']${codeSuffix}'
469
+ `,
470
+ type: 'RB',
471
+ };
472
+ };
473
+ }
474
+
475
+ export const emitJsonStringify = createStringifyCompiler(JitFunctions.stringifyJson.id);
@@ -0,0 +1,59 @@
1
+ /* ########
2
+ * 2025 mion
3
+ * Author: Ma-jerez
4
+ * License: MIT
5
+ * The software is provided "as is", without warranty of any kind.
6
+ * ######## */
7
+
8
+ import {JitFunctions} from '../../../constants.functions.ts';
9
+ import type {InterfaceRunType} from '../../../nodes/collection/interface.ts';
10
+ import type {FunctionRunType} from '../../../nodes/function/function.ts';
11
+ import type {RunType} from '../../../types.ts';
12
+
13
+ const SERIALIZE_FN = JitFunctions.stringifyJson;
14
+ const DESERIALIZE_FN = JitFunctions.restoreFromJson;
15
+
16
+ export function createSerializationFns(rt: RunType) {
17
+ const serialize = rt.createJitFunction(SERIALIZE_FN);
18
+ const restoreFromJson = rt.createJitFunction(DESERIALIZE_FN);
19
+ const deserialize = (data: any) => restoreFromJson(JSON.parse(data));
20
+ return {serialize, deserialize};
21
+ }
22
+
23
+ export function createSerializationParamsFn(rt: FunctionRunType, sliceStart?: number) {
24
+ const params = typeof sliceStart === 'number' ? {paramsSlice: {start: sliceStart}} : undefined;
25
+ const serialize = rt.createJitParamsFunction(SERIALIZE_FN, params);
26
+ const restoreFromJson = rt.createJitParamsFunction(DESERIALIZE_FN, params);
27
+ const deserialize = (data: any) => restoreFromJson(JSON.parse(data));
28
+ return {serialize, deserialize};
29
+ }
30
+
31
+ export function createSerializationReturnFn(rt: FunctionRunType) {
32
+ const serialize = rt.createJitReturnFunction(SERIALIZE_FN);
33
+ const restoreFromJson = rt.createJitReturnFunction(DESERIALIZE_FN);
34
+ const deserialize = (data: any) => restoreFromJson(JSON.parse(data));
35
+ return {serialize, deserialize};
36
+ }
37
+
38
+ export function createSerializationCallSignatureParamsFn(rt: InterfaceRunType) {
39
+ const callSignature = rt.getCallSignature()!;
40
+ const serialize = callSignature.createJitParamsFunction(SERIALIZE_FN);
41
+ const restoreFromJson = callSignature.createJitParamsFunction(DESERIALIZE_FN);
42
+ const deserialize = (data: any) => restoreFromJson(JSON.parse(data));
43
+ return {serialize, deserialize};
44
+ }
45
+
46
+ export function createSerializationCallSignatureReturnFn(rt: InterfaceRunType) {
47
+ const callSignature = rt.getCallSignature()!;
48
+ const serialize = callSignature.createJitReturnFunction(SERIALIZE_FN);
49
+ const restoreFromJson = callSignature.createJitReturnFunction(DESERIALIZE_FN);
50
+ const deserialize = (data: any) => restoreFromJson(JSON.parse(data));
51
+ return {serialize, deserialize};
52
+ }
53
+
54
+ export function roundTrip(serialize: (v: any) => string, deserialize: (v: string) => any, value: any) {
55
+ const serialized = serialize(value);
56
+ const deserialized = deserialize(serialized);
57
+ const result = {serialized, deserialized};
58
+ return result;
59
+ }