@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,338 @@
1
+ import { ReflectionKind } from "@deepkit/type";
2
+ import { ReflectionSubKind } from "../../constants.kind.js";
3
+ import { JitFunctions } from "../../constants.functions.js";
4
+ import { createIfElseFn } from "../../lib/utils.js";
5
+ import { MAX_UNION_ITEMS } from "../../constants.js";
6
+ const fnID = JitFunctions.toBinary.id;
7
+ function emitToBinary(runType, comp) {
8
+ const src = runType.src;
9
+ const kind = src.kind;
10
+ const sεr = comp.args.sεr;
11
+ switch (kind) {
12
+ // ###################### ATOMIC TYPES ######################
13
+ case ReflectionKind.unknown:
14
+ case ReflectionKind.any: {
15
+ return { code: `${sεr}.serString(JSON.stringify(${comp.vλl}))`, type: "S" };
16
+ }
17
+ case ReflectionKind.null:
18
+ return { code: `${sεr}.view.setUint8(${sεr}.index++, 0)`, type: "S" };
19
+ case ReflectionKind.boolean:
20
+ return { code: `${sεr}.view.setUint8(${sεr}.index++, !!${comp.vλl})`, type: "S" };
21
+ case ReflectionKind.number: {
22
+ return { code: `${sεr}.view.setFloat64(${sεr}.index,${comp.vλl}, 1, (${sεr}.index += 8))`, type: "S" };
23
+ }
24
+ case ReflectionKind.string: {
25
+ return { code: `${sεr}.serString(${comp.vλl})`, type: "S" };
26
+ }
27
+ case ReflectionKind.bigint: {
28
+ return { code: `${sεr}.serString(${comp.vλl}.toString(), true)`, type: "S" };
29
+ }
30
+ case ReflectionKind.undefined:
31
+ case ReflectionKind.void:
32
+ return { code: `${sεr}.view.setUint8(${sεr}.index++, 1)`, type: "S" };
33
+ case ReflectionKind.symbol: {
34
+ return { code: `${sεr}.serString(${comp.vλl}.description || '')`, type: "S" };
35
+ }
36
+ case ReflectionKind.regexp: {
37
+ return { code: `${sεr}.serString(${comp.vλl}.source);${sεr}.serString(${comp.vλl}.flags)`, type: "S" };
38
+ }
39
+ case ReflectionKind.object:
40
+ return { code: `${sεr}.serString(JSON.stringify(${comp.vλl}))`, type: "S" };
41
+ case ReflectionKind.enum: {
42
+ return { code: `${sεr}.serEnum(${comp.vλl})`, type: "S" };
43
+ }
44
+ case ReflectionKind.enumMember:
45
+ throw new Error("Binary serialization not supported for enum member types");
46
+ case ReflectionKind.never:
47
+ throw new Error("Never type cannot be serialized to Binary");
48
+ case ReflectionKind.templateLiteral:
49
+ throw new Error("Template literals are not supported in Binary serialization");
50
+ case ReflectionKind.literal: {
51
+ if (comp.opts.noLiterals) {
52
+ const lit = runType.src.literal;
53
+ if (lit instanceof RegExp) return emitToBinaryAs(runType, comp, ReflectionKind.regexp);
54
+ switch (typeof lit) {
55
+ case "string":
56
+ return emitToBinaryAs(runType, comp, ReflectionKind.string);
57
+ case "number":
58
+ return emitToBinaryAs(runType, comp, ReflectionKind.number);
59
+ case "boolean":
60
+ return emitToBinaryAs(runType, comp, ReflectionKind.boolean);
61
+ case "bigint":
62
+ return emitToBinaryAs(runType, comp, ReflectionKind.bigint);
63
+ case "symbol":
64
+ return emitToBinaryAs(runType, comp, ReflectionKind.symbol);
65
+ default:
66
+ throw new Error(`Unsupported literal type ${typeof lit}`);
67
+ }
68
+ }
69
+ return { code: "", type: "S" };
70
+ }
71
+ // ###################### MEMBER RUNTYPES ######################
72
+ // Types that represent members of collections or other structures
73
+ case ReflectionKind.rest:
74
+ // rest params are serialized as array but start at rest item index
75
+ case ReflectionKind.array: {
76
+ const rt = runType;
77
+ rt.checkNonSkipTypes(comp);
78
+ const child = rt.getMemberType();
79
+ const memberJit = comp.compile(child, "S", fnID);
80
+ if (!memberJit?.code) throw new Error(`Do not know how to serialize Array<${child.getTypeName()}> to Binary.`);
81
+ const index = rt.getChildVarName(comp);
82
+ return {
83
+ code: `
84
+ ${sεr}.view.setUint32(${sεr}.index, ${comp.vλl}.length, 1); ${sεr}.index += 4;
85
+ for (let ${index} = ${rt.startIndex(comp)}; ${index} < ${comp.vλl}.length; ${index}++) {${memberJit.code}}
86
+ `,
87
+ type: "S"
88
+ };
89
+ }
90
+ case ReflectionKind.indexSignature: {
91
+ const rt = runType;
92
+ const indexKind = rt.src.index?.kind;
93
+ const memberJit = comp.compile(rt.getJitChild(comp), "S", fnID);
94
+ if (!memberJit?.code) return { code: void 0, type: "S" };
95
+ const propVar = rt.getChildVarName(comp);
96
+ const lengthVar = comp.getLocalVarName("cnt", rt);
97
+ const indexVar = comp.getLocalVarName("piI", rt);
98
+ const varsInit = `let ${lengthVar} = 0; const ${indexVar} = ${sεr}.index; ${sεr}.index += 4;`;
99
+ let keySerializationCode;
100
+ if (indexKind === ReflectionKind.number) {
101
+ keySerializationCode = `${sεr}.view.setUint32(${sεr}.index , Number(${propVar}), 1); ${sεr}.index += 4;`;
102
+ } else {
103
+ keySerializationCode = `${sεr}.serString(${propVar});`;
104
+ }
105
+ return {
106
+ code: `
107
+ ${varsInit};
108
+ for (const ${propVar} in ${comp.vλl}) {${keySerializationCode} ${memberJit.code}; ${lengthVar}++;}
109
+ ${sεr}.view.setUint32(${indexVar}, ${lengthVar}, 1);
110
+ `,
111
+ type: "S"
112
+ };
113
+ }
114
+ case ReflectionKind.function:
115
+ case ReflectionKind.method:
116
+ case ReflectionKind.methodSignature:
117
+ case ReflectionKind.callSignature:
118
+ if (runType.src.subKind === ReflectionSubKind.params) {
119
+ return emitToBinaryAs(runType, comp, ReflectionKind.tuple);
120
+ } else {
121
+ throw new Error("Binary serialization not supported for functions, call compileParams or compileReturn instead.");
122
+ }
123
+ case ReflectionKind.parameter: {
124
+ const rt = runType;
125
+ switch (src.subKind) {
126
+ case ReflectionSubKind.mapKey:
127
+ case ReflectionSubKind.mapValue:
128
+ case ReflectionSubKind.setItem: {
129
+ const child = rt.getJitChild(comp);
130
+ const childJit = comp.compile(child, "S", fnID);
131
+ if (!childJit?.code) throw new Error(`Do not know how to serialize ${rt.getTypeName()} to Binary.`);
132
+ return childJit;
133
+ }
134
+ default: {
135
+ return emitToBinaryAs(runType, comp, ReflectionKind.tupleMember);
136
+ }
137
+ }
138
+ }
139
+ case ReflectionKind.property:
140
+ case ReflectionKind.propertySignature: {
141
+ const rt = runType;
142
+ const parent = rt.getParent();
143
+ if (parent.hasIndexSignature(comp)) return { code: void 0, type: "S" };
144
+ const memberCode = comp.compile(rt.getJitChild(comp), "S", fnID).code || "";
145
+ if (rt.isOptional()) {
146
+ const { bitMIndexVar, bitIndex } = getOptionalBitmapItems(parent, comp, 0, rt.optionalIndex, false);
147
+ const setBitMask = `${sεr}.setBitMask(${bitMIndexVar}, ${bitIndex})`;
148
+ return { code: `if (${comp.getChildVλl()} !== undefined) {${memberCode};${setBitMask}}`, type: "S" };
149
+ }
150
+ return { code: `${memberCode}`, type: "S" };
151
+ }
152
+ case ReflectionKind.tupleMember: {
153
+ const rt = runType;
154
+ const child = rt.getJitChild(comp);
155
+ const childJit = comp.compile(child, "S", fnID);
156
+ const nullJIt = emitToBinaryAs(rt, comp, ReflectionKind.undefined);
157
+ const itemJit = childJit?.code ? childJit : nullJIt;
158
+ if (rt.isRest()) return itemJit;
159
+ const optionalIndex = rt.optionalIndex;
160
+ const bitMIndexVar = rt._bitmapVar;
161
+ const isFnParam = rt._isFnParam;
162
+ const isOptional = rt.isOptional() || isFnParam;
163
+ if (isOptional && optionalIndex !== void 0 && bitMIndexVar) {
164
+ const bitIndex = optionalIndex & 7;
165
+ const setBitMask = `${sεr}.setBitMask(${bitMIndexVar}, ${bitIndex})`;
166
+ return { code: `if (${comp.getChildVλl()} !== undefined) {${itemJit.code};${setBitMask}}`, type: "S" };
167
+ }
168
+ return itemJit;
169
+ }
170
+ case ReflectionKind.promise:
171
+ throw new Error("Jit compilation disabled for Non Serializable types.");
172
+ // ###################### COLLECTION RUNTYPES ######################
173
+ // Types that contain other types as members
174
+ case ReflectionKind.objectLiteral:
175
+ case ReflectionKind.intersection: {
176
+ const rt = runType;
177
+ if (rt.isCallable()) return comp.compile(rt.getCallSignature(), "S", fnID);
178
+ if (runType.src.subKind === ReflectionSubKind.nonSerializable) {
179
+ throw new Error("Binary serialization is disabled for Non Serializable types");
180
+ } else {
181
+ const { required, optional, indexSignatures } = rt.splitJitSplitChildren(comp);
182
+ if (indexSignatures.length) {
183
+ return comp.compile(indexSignatures[0], "S", fnID);
184
+ }
185
+ const requiredProps = required.map((prop) => comp.compile(prop, "S", fnID).code);
186
+ const requiredPropsCode = requiredProps.join(";");
187
+ let optionalPropsCode = "";
188
+ if (optional.length) {
189
+ const { bitMapInit, bitMIndexVar } = getOptionalBitmapItems(rt, comp, optional.length, 0, false);
190
+ const propsCode = optional.map((prop, i) => {
191
+ prop.optionalIndex = i;
192
+ const modIndex = i + 1;
193
+ const shouldIncreaseBufferIndex = modIndex % 8 === 0;
194
+ const propCode = comp.compile(prop, "S", fnID).code;
195
+ if (!shouldIncreaseBufferIndex) return propCode;
196
+ return `${propCode} ${bitMIndexVar}++;`;
197
+ }).filter(Boolean).join("");
198
+ optionalPropsCode = `${bitMapInit}
199
+ ${propsCode}`;
200
+ }
201
+ return { code: `${requiredPropsCode}
202
+ ${optionalPropsCode}`, type: "S" };
203
+ }
204
+ }
205
+ case ReflectionKind.class:
206
+ switch (runType.src.subKind) {
207
+ case ReflectionSubKind.date:
208
+ return {
209
+ code: `${sεr}.view.setFloat64(${sεr}.index, ${comp.vλl}.getTime(), 1, (${sεr}.index += 8))`,
210
+ type: "S"
211
+ };
212
+ case ReflectionSubKind.map:
213
+ case ReflectionSubKind.set: {
214
+ const rt = runType;
215
+ const sεr2 = comp.args.sεr;
216
+ const entry = rt.getCustomVλl(comp)?.vλl || comp.vλl;
217
+ const jitChildren = rt.getJitChildren(comp);
218
+ const childrenCode = jitChildren.map((c) => comp.compile(c, "S", fnID).code).filter(Boolean).join(";");
219
+ const setLength = `${sεr2}.view.setUint32(${sεr2}.index, ${comp.vλl}.size, 1); ${sεr2}.index += 4;`;
220
+ return {
221
+ code: `${setLength} for (const ${entry} of ${comp.vλl}) {${childrenCode}}`,
222
+ type: "S"
223
+ };
224
+ }
225
+ case ReflectionSubKind.nonSerializable:
226
+ throw new Error("Binary serialization disabled for Non Serializable types");
227
+ default: {
228
+ const rt = runType;
229
+ if (rt.isCallable()) {
230
+ const callSignature = rt.getCallSignature();
231
+ if (callSignature) return comp.compile(callSignature, "S", fnID);
232
+ }
233
+ const originalKind = runType.src.kind;
234
+ runType.src.kind = ReflectionKind.objectLiteral;
235
+ const result = emitToBinary(runType, comp);
236
+ runType.src.kind = originalKind;
237
+ return result;
238
+ }
239
+ }
240
+ break;
241
+ case ReflectionKind.infer:
242
+ throw new Error("Infer is not supported in Binary serialization");
243
+ case ReflectionKind.tuple: {
244
+ const rt = runType;
245
+ const skip = rt.skipJit(comp);
246
+ if (skip) return { code: void 0, type: "S" };
247
+ const params = rt.getParamRunTypes(comp);
248
+ if (params.length === 0) return { code: void 0, type: "S" };
249
+ const isFnParams = runType.src.subKind === ReflectionSubKind.params;
250
+ const required = isFnParams ? [] : params.filter((p) => !p.isOptional() && !p.isRest());
251
+ const optional = isFnParams ? params.filter((p) => !p.isRest()) : params.filter((p) => p.isOptional() && !p.isRest());
252
+ const rest = params.filter((p) => p.isRest());
253
+ const requiredCode = required.map((p) => comp.compile(p, "S", fnID).code).join(";");
254
+ let optionalCode = "";
255
+ if (optional.length) {
256
+ const { bitMapInit, bitMIndexVar } = getOptionalBitmapItems(rt, comp, optional.length, 0, true);
257
+ const optionalParamsCode = optional.map((p, i) => {
258
+ p.optionalIndex = i;
259
+ p._bitmapVar = bitMIndexVar;
260
+ p._isFnParam = isFnParams;
261
+ const paramCode = comp.compile(p, "S", fnID).code || "";
262
+ const modIndex = i + 1;
263
+ const shouldIncreaseBufferIndex = modIndex % 8 === 0 && modIndex < optional.length;
264
+ const increaseIndex = shouldIncreaseBufferIndex ? `${bitMIndexVar}++;` : "";
265
+ return `${paramCode} ${increaseIndex}`;
266
+ }).join("");
267
+ optionalCode = `${bitMapInit}
268
+ ${optionalParamsCode}`;
269
+ }
270
+ const restCode = rest.map((p) => comp.compile(p, "S", fnID).code).join(";");
271
+ const allCode = [requiredCode, optionalCode, restCode].filter(Boolean).join(";");
272
+ return { code: allCode, type: "S" };
273
+ }
274
+ case ReflectionKind.typeParameter:
275
+ throw new Error("Type parameter not implemented in Binary serialization");
276
+ case ReflectionKind.union: {
277
+ const rt = runType;
278
+ rt.checkAllowedChildren(comp);
279
+ const { simpleItems, objectTypes, anyItem } = rt.getUnionChildren(comp);
280
+ const totalLength = simpleItems.length + objectTypes.length + (anyItem ? 1 : 0);
281
+ if (totalLength > MAX_UNION_ITEMS) {
282
+ throw new Error(
283
+ `Binary serialization not supported for Union with more than ${MAX_UNION_ITEMS} items. Found ${totalLength} in ${rt.getUnionTypeNames()}`
284
+ );
285
+ }
286
+ const errName = comp.getLocalVarName("uErr", rt);
287
+ const fail = `throw new Error(${errName});`;
288
+ comp.setContextItem(
289
+ errName,
290
+ `const ${errName} = "Can not encode union to binary: item does not belong to the union"`
291
+ );
292
+ const ifElse = createIfElseFn();
293
+ const getEncodeCode = (childRt) => {
294
+ const toJit = comp.compile(childRt, "S", fnID);
295
+ const encodeCode = toJit.code || "";
296
+ const index = rt.getUnionItemIndex(comp, childRt);
297
+ const isUint16 = index > 255;
298
+ const writeIndex = isUint16 ? `${sεr}.view.setUint16(${sεr}.index, ${index}, 1, (${sεr}.index += 2))` : `${sεr}.view.setUint8(${sεr}.index++, ${index})`;
299
+ return `${writeIndex};${encodeCode}`;
300
+ };
301
+ const simpleCode = simpleItems.map((childRt) => {
302
+ const isTypeCode = rt.getChildIsTypeWithLooseCheck(childRt, comp);
303
+ return `${ifElse()} (${isTypeCode}) {${getEncodeCode(childRt)}}`;
304
+ });
305
+ const objCode = objectTypes.length ? objectTypes.map((childRt) => {
306
+ const isTypeCode = rt.getChildIsTypeWithLooseCheck(childRt, comp);
307
+ return `${ifElse()} (typeof ${comp.vλl} === 'object' && ${comp.vλl} !== null && ${isTypeCode}) {${getEncodeCode(childRt)}}`;
308
+ }) : [];
309
+ const anyCode = anyItem ? `${ifElse(true)} {${getEncodeCode(anyItem)}}` : `${ifElse(true)} {${fail}}`;
310
+ return { code: [...simpleCode, ...objCode, anyCode].join(""), type: "S" };
311
+ }
312
+ default:
313
+ throw new Error(`Binary serialization not supported for ${ReflectionKind[kind]} types`);
314
+ }
315
+ return { code: void 0, type: "S" };
316
+ }
317
+ function getOptionalBitmapItems(rt, comp, optionalLength = 0, currentIndex = 0, isTuple = false) {
318
+ const sεr = comp.args.sεr;
319
+ const prefix = isTuple ? "t" : "";
320
+ const bitMIndexVar = comp.getLocalVarName(`${prefix}bmI`, rt);
321
+ const bitmapLength = Math.ceil(optionalLength / 8);
322
+ const bitIndex = `${currentIndex} & 7`;
323
+ const indexVar = comp.getLocalVarName(`${prefix}iBl`, rt);
324
+ const setBitmapToZero = bitmapLength > 1 ? `for (let ${indexVar} = 0; ${indexVar} < ${bitmapLength}; ${indexVar}++) {${sεr}.view.setUint8(${sεr}.index++, 0)}` : `${sεr}.view.setUint8(${sεr}.index++, 0)`;
325
+ const bitMapInit = `${bitmapLength > 1 ? "let " : "const"} ${bitMIndexVar} = ${sεr}.index; ${setBitmapToZero}`;
326
+ return { bitMIndexVar, bitmapLength, bitIndex, bitMapInit };
327
+ }
328
+ function emitToBinaryAs(rt, comp, kind) {
329
+ const originalKind = rt.src.kind;
330
+ rt.src.kind = kind;
331
+ const result = emitToBinary(rt, comp);
332
+ rt.src.kind = originalKind;
333
+ return result;
334
+ }
335
+ export {
336
+ emitToBinary
337
+ };
338
+ //# sourceMappingURL=toBinary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toBinary.js","sources":["../../../../../src/jitCompilers/binary/toBinary.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 {ReflectionKind} from '@deepkit/type';\nimport {ReflectionSubKind} from '../../constants.kind.ts';\nimport {jitBinarySerializerArgs, JitFunctions} from '../../constants.functions.ts';\nimport {createIfElseFn} from '../../lib/utils.ts';\nimport {MAX_UNION_ITEMS} from '../../constants.ts';\nimport type {JitCode} from '../../types.ts';\nimport type {BaseRunType} from '../../lib/baseRunTypes.ts';\nimport type {BaseFnCompiler} from '../../lib/jitFnCompiler.ts';\nimport type {ArrayRunType} from '../../nodes/member/array.ts';\nimport type {PropertyRunType} from '../../nodes/member/property.ts';\nimport type {InterfaceRunType} from '../../nodes/collection/interface.ts';\nimport type {IndexSignatureRunType} from '../../nodes/member/indexProperty.ts';\nimport type {ParameterRunType} from '../../nodes/member/param.ts';\nimport type {TupleRunType} from '../../nodes/collection/tuple.ts';\nimport type {UnionRunType} from '../../nodes/collection/union.ts';\nimport type {IterableRunType} from '../../nodes/native/Iterable.ts';\nimport type {LiteralRunType} from '../../nodes/atomic/literal.ts';\n\ntype BinaryCompiler = BaseFnCompiler<typeof jitBinarySerializerArgs, typeof JitFunctions.toBinary.id>;\nconst fnID = JitFunctions.toBinary.id;\n\n/**\n * Main Binary serialization compiler function\n * Generates JIT code to serialize values to Binary format following Binary 1.1 specification\n *\n * This function generates JavaScript expressions that return Uint8Array containing Binary bytes.\n */\nexport function emitToBinary(runType: BaseRunType, comp: BinaryCompiler): JitCode {\n const src = runType.src;\n const kind = src.kind;\n const sεr = comp.args.sεr;\n\n // hack is used in some case to increase the index passing an extra argument to view.set methods\n // ie: view.setUint32(index, value, littleEndian, index += 4);\n // setUint32 only accepts 3 arguments, but we use the 4rd one to increase the index on a single statement so code can be used as an expression\n\n switch (kind) {\n // ###################### ATOMIC TYPES ######################\n case ReflectionKind.unknown:\n case ReflectionKind.any: {\n // any is serialized as json string\n return {code: `${sεr}.serString(JSON.stringify(${comp.vλl}))`, type: 'S'};\n }\n case ReflectionKind.null:\n return {code: `${sεr}.view.setUint8(${sεr}.index++, 0)`, type: 'S'};\n case ReflectionKind.boolean:\n return {code: `${sεr}.view.setUint8(${sεr}.index++, !!${comp.vλl})`, type: 'S'};\n case ReflectionKind.number: {\n return {code: `${sεr}.view.setFloat64(${sεr}.index,${comp.vλl}, 1, (${sεr}.index += 8))`, type: 'S'};\n }\n case ReflectionKind.string: {\n return {code: `${sεr}.serString(${comp.vλl})`, type: 'S'};\n }\n case ReflectionKind.bigint: {\n return {code: `${sεr}.serString(${comp.vλl}.toString(), true)`, type: 'S'};\n }\n case ReflectionKind.undefined:\n case ReflectionKind.void:\n return {code: `${sεr}.view.setUint8(${sεr}.index++, 1)`, type: 'S'};\n case ReflectionKind.symbol: {\n return {code: `${sεr}.serString(${comp.vλl}.description || '')`, type: 'S'};\n }\n case ReflectionKind.regexp: {\n return {code: `${sεr}.serString(${comp.vλl}.source);${sεr}.serString(${comp.vλl}.flags)`, type: 'S'};\n }\n case ReflectionKind.object:\n // similar to any, this is serialized as json string\n return {code: `${sεr}.serString(JSON.stringify(${comp.vλl}))`, type: 'S'};\n case ReflectionKind.enum: {\n return {code: `${sεr}.serEnum(${comp.vλl})`, type: 'S'};\n }\n case ReflectionKind.enumMember:\n throw new Error('Binary serialization not supported for enum member types');\n case ReflectionKind.never:\n throw new Error('Never type cannot be serialized to Binary');\n case ReflectionKind.templateLiteral:\n throw new Error('Template literals are not supported in Binary serialization');\n case ReflectionKind.literal: {\n if (comp.opts.noLiterals) {\n const lit = (runType as LiteralRunType).src.literal;\n if (lit instanceof RegExp) return emitToBinaryAs(runType, comp, ReflectionKind.regexp);\n switch (typeof lit) {\n case 'string':\n return emitToBinaryAs(runType, comp, ReflectionKind.string);\n case 'number':\n return emitToBinaryAs(runType, comp, ReflectionKind.number);\n case 'boolean':\n return emitToBinaryAs(runType, comp, ReflectionKind.boolean);\n case 'bigint':\n return emitToBinaryAs(runType, comp, ReflectionKind.bigint);\n case 'symbol':\n return emitToBinaryAs(runType, comp, ReflectionKind.symbol);\n default:\n throw new Error(`Unsupported literal type ${typeof lit}`);\n }\n }\n return {code: '', type: 'S'}; // literals can be skipped as we restore the value directly from runType in jit code\n }\n\n // ###################### MEMBER RUNTYPES ######################\n // Types that represent members of collections or other structures\n case ReflectionKind.rest: // rest params are serialized as array but start at rest item index\n case ReflectionKind.array: {\n const rt = runType as ArrayRunType;\n rt.checkNonSkipTypes(comp);\n const child = rt.getMemberType()!;\n const memberJit = comp.compile(child, 'S', fnID);\n if (!memberJit?.code) throw new Error(`Do not know how to serialize Array<${child.getTypeName()}> to Binary.`);\n const index = rt.getChildVarName(comp);\n // serialized as [length, items...]\n return {\n code: `\n ${sεr}.view.setUint32(${sεr}.index, ${comp.vλl}.length, 1); ${sεr}.index += 4;\n for (let ${index} = ${rt.startIndex(comp)}; ${index} < ${comp.vλl}.length; ${index}++) {${memberJit.code}}\n `,\n type: 'S',\n };\n }\n case ReflectionKind.indexSignature: {\n const rt = runType as IndexSignatureRunType;\n const indexKind = (rt.src as any).index?.kind;\n const memberJit = comp.compile(rt.getJitChild(comp), 'S', fnID);\n if (!memberJit?.code) return {code: undefined, type: 'S'};\n\n const propVar = rt.getChildVarName(comp);\n const lengthVar = comp.getLocalVarName('cnt', rt);\n const indexVar = comp.getLocalVarName('piI', rt);\n const varsInit = `let ${lengthVar} = 0; const ${indexVar} = ${sεr}.index; ${sεr}.index += 4;`;\n\n // Serialize entries\n let keySerializationCode: string;\n if (indexKind === ReflectionKind.number) {\n keySerializationCode = `${sεr}.view.setUint32(${sεr}.index , Number(${propVar}), 1); ${sεr}.index += 4;`;\n } else {\n keySerializationCode = `${sεr}.serString(${propVar});`;\n }\n\n return {\n code: `\n ${varsInit};\n for (const ${propVar} in ${comp.vλl}) {${keySerializationCode} ${memberJit.code}; ${lengthVar}++;}\n ${sεr}.view.setUint32(${indexVar}, ${lengthVar}, 1);\n `,\n type: 'S',\n };\n }\n\n case ReflectionKind.function:\n case ReflectionKind.method:\n case ReflectionKind.methodSignature:\n case ReflectionKind.callSignature:\n if (runType.src.subKind === ReflectionSubKind.params) {\n return emitToBinaryAs(runType, comp, ReflectionKind.tuple);\n } else {\n throw new Error('Binary serialization not supported for functions, call compileParams or compileReturn instead.');\n }\n case ReflectionKind.parameter: {\n const rt = runType as ParameterRunType;\n switch (src.subKind) {\n case ReflectionSubKind.mapKey:\n case ReflectionSubKind.mapValue:\n case ReflectionSubKind.setItem: {\n const child = rt.getJitChild(comp);\n const childJit = comp.compile(child, 'S', fnID);\n if (!childJit?.code) throw new Error(`Do not know how to serialize ${rt.getTypeName()} to Binary.`);\n return childJit;\n }\n default: {\n return emitToBinaryAs(runType, comp, ReflectionKind.tupleMember);\n }\n }\n }\n case ReflectionKind.property:\n case ReflectionKind.propertySignature: {\n const rt = runType as PropertyRunType;\n const parent = rt.getParent() as InterfaceRunType;\n if (parent.hasIndexSignature(comp)) return {code: undefined, type: 'S'}; // all serialization is done by index signature code\n\n const memberCode = comp.compile(rt.getJitChild(comp), 'S', fnID).code || '';\n if (rt.isOptional()) {\n const {bitMIndexVar, bitIndex} = getOptionalBitmapItems(parent, comp, 0, rt.optionalIndex, false);\n const setBitMask = `${sεr}.setBitMask(${bitMIndexVar}, ${bitIndex})`;\n return {code: `if (${comp.getChildVλl()} !== undefined) {${memberCode};${setBitMask}}`, type: 'S'};\n }\n // non optional properties rely in the order they are defined in the type so no need to include the index\n return {code: `${memberCode}`, type: 'S'};\n }\n case ReflectionKind.tupleMember: {\n const rt = runType as ParameterRunType;\n const child = rt.getJitChild(comp);\n const childJit = comp.compile(child, 'S', fnID);\n const nullJIt = emitToBinaryAs(rt, comp, ReflectionKind.undefined);\n const itemJit = childJit?.code ? childJit : nullJIt; // if child is not serializable, we serialize null as need to fill the space in the tuple\n if (rt.isRest()) return itemJit;\n // Optional handling uses bitmap set at tuple level\n const optionalIndex = (rt as any).optionalIndex;\n const bitMIndexVar = (rt as any)._bitmapVar;\n const isFnParam = (rt as any)._isFnParam;\n // Treat as optional if either isOptional() is true OR it's a function param (all fn params are optional in binary)\n const isOptional = rt.isOptional() || isFnParam;\n if (isOptional && optionalIndex !== undefined && bitMIndexVar) {\n const bitIndex = optionalIndex & 7; // equivalent to optionalIndex % 8\n const setBitMask = `${sεr}.setBitMask(${bitMIndexVar}, ${bitIndex})`;\n return {code: `if (${comp.getChildVλl()} !== undefined) {${itemJit.code};${setBitMask}}`, type: 'S'};\n }\n return itemJit;\n }\n\n case ReflectionKind.promise:\n throw new Error('Jit compilation disabled for Non Serializable types.');\n\n // ###################### COLLECTION RUNTYPES ######################\n // Types that contain other types as members\n case ReflectionKind.objectLiteral:\n case ReflectionKind.intersection: {\n const rt = runType as InterfaceRunType;\n if (rt.isCallable()) return comp.compile(rt.getCallSignature(), 'S', fnID);\n if (runType.src.subKind === ReflectionSubKind.nonSerializable) {\n throw new Error('Binary serialization is disabled for Non Serializable types');\n } else {\n // we need to ensure non optional properties are serialized first so then we can restore the object correctly\n // non optional properties are restored as: '{a: deserializeA, b: deserializeB, c: deserializeC};\n // and must be serialized/deserialized in the same order they are declared in the type\n const {required, optional, indexSignatures} = rt.splitJitSplitChildren(comp);\n\n if (indexSignatures.length) {\n return comp.compile(indexSignatures[0], 'S', fnID); // index signature code already contains the loop\n }\n\n const requiredProps = required.map((prop) => comp.compile(prop, 'S', fnID).code);\n const requiredPropsCode = requiredProps.join(';');\n\n let optionalPropsCode = '';\n if (optional.length) {\n const {bitMapInit, bitMIndexVar} = getOptionalBitmapItems(rt, comp, optional.length, 0, false);\n const propsCode = optional\n .map((prop, i) => {\n prop.optionalIndex = i;\n const modIndex = i + 1;\n const shouldIncreaseBufferIndex = modIndex % 8 === 0;\n const propCode = comp.compile(prop, 'S', fnID).code;\n if (!shouldIncreaseBufferIndex) return propCode;\n // every 8 props we need to increase the bitmap index\n return `${propCode} ${bitMIndexVar}++;`;\n })\n .filter(Boolean)\n .join('');\n optionalPropsCode = `${bitMapInit}\\n${propsCode}`;\n }\n\n return {code: `${requiredPropsCode}\\n${optionalPropsCode}`, type: 'S'};\n }\n }\n case ReflectionKind.class:\n switch (runType.src.subKind) {\n case ReflectionSubKind.date:\n return {\n code: `${sεr}.view.setFloat64(${sεr}.index, ${comp.vλl}.getTime(), 1, (${sεr}.index += 8))`,\n type: 'S',\n };\n case ReflectionSubKind.map:\n case ReflectionSubKind.set: {\n const rt = runType as IterableRunType;\n const sεr = comp.args.sεr;\n const entry = rt.getCustomVλl(comp)?.vλl || comp.vλl;\n const jitChildren = rt.getJitChildren(comp);\n const childrenCode = jitChildren\n .map((c) => comp.compile(c, 'S', fnID).code)\n .filter(Boolean)\n .join(';');\n // Serialize length at the beginning, then iterate and serialize items\n const setLength = `${sεr}.view.setUint32(${sεr}.index, ${comp.vλl}.size, 1); ${sεr}.index += 4;`;\n return {\n code: `${setLength} for (const ${entry} of ${comp.vλl}) {${childrenCode}}`,\n type: 'S',\n };\n }\n case ReflectionSubKind.nonSerializable:\n throw new Error('Binary serialization disabled for Non Serializable types');\n default: {\n const rt = runType as InterfaceRunType;\n if (rt.isCallable()) {\n const callSignature = rt.getCallSignature();\n if (callSignature) return comp.compile(callSignature, 'S', fnID);\n }\n const originalKind = runType.src.kind;\n (runType.src as any).kind = ReflectionKind.objectLiteral;\n const result = emitToBinary(runType, comp);\n (runType.src as any).kind = originalKind;\n return result;\n }\n }\n break;\n\n case ReflectionKind.infer:\n throw new Error('Infer is not supported in Binary serialization');\n\n case ReflectionKind.tuple: {\n const rt = runType as TupleRunType;\n const skip = rt.skipJit(comp);\n if (skip) return {code: undefined, type: 'S'};\n const params = rt.getParamRunTypes(comp);\n if (params.length === 0) return {code: undefined, type: 'S'};\n\n // For function params, all params are treated as optional in binary serialization\n // This allows sending null/undefined values over the wire even if the type is not optional\n const isFnParams = runType.src.subKind === ReflectionSubKind.params;\n\n // Split params into required, optional, and rest\n // For function params, all non-rest params are treated as optional\n const required = isFnParams ? [] : params.filter((p) => !p.isOptional() && !p.isRest());\n const optional = isFnParams ? params.filter((p) => !p.isRest()) : params.filter((p) => p.isOptional() && !p.isRest());\n const rest = params.filter((p) => p.isRest());\n\n // Serialize required params first\n const requiredCode = required.map((p) => comp.compile(p, 'S', fnID).code).join(';');\n\n // Serialize optional params with bitmap (groups of 8)\n let optionalCode = '';\n if (optional.length) {\n const {bitMapInit, bitMIndexVar} = getOptionalBitmapItems(rt, comp, optional.length, 0, true);\n const optionalParamsCode = optional\n .map((p, i) => {\n (p as any).optionalIndex = i; // set optionalIndex for use in tupleMember case\n (p as any)._bitmapVar = bitMIndexVar; // pass bitmap variable name to tupleMember case\n (p as any)._isFnParam = isFnParams; // flag to indicate this is a function param\n const paramCode = comp.compile(p, 'S', fnID).code || '';\n const modIndex = i + 1;\n const shouldIncreaseBufferIndex = modIndex % 8 === 0 && modIndex < optional.length;\n const increaseIndex = shouldIncreaseBufferIndex ? `${bitMIndexVar}++;` : '';\n return `${paramCode} ${increaseIndex}`;\n })\n .join('');\n optionalCode = `${bitMapInit}\\n${optionalParamsCode}`;\n }\n\n // Serialize rest params (handled as array by the rest param itself)\n const restCode = rest.map((p) => comp.compile(p, 'S', fnID).code).join(';');\n\n const allCode = [requiredCode, optionalCode, restCode].filter(Boolean).join(';');\n return {code: allCode, type: 'S'};\n }\n case ReflectionKind.typeParameter:\n throw new Error('Type parameter not implemented in Binary serialization');\n\n case ReflectionKind.union: {\n const rt = runType as UnionRunType;\n rt.checkAllowedChildren(comp);\n const {simpleItems, objectTypes, anyItem} = rt.getUnionChildren(comp);\n const totalLength = simpleItems.length + objectTypes.length + (anyItem ? 1 : 0);\n if (totalLength > MAX_UNION_ITEMS) {\n throw new Error(\n `Binary serialization not supported for Union with more than ${MAX_UNION_ITEMS} items.` +\n ` Found ${totalLength} in ${rt.getUnionTypeNames()}`\n );\n }\n const errName = comp.getLocalVarName('uErr', rt);\n const fail = `throw new Error(${errName});`;\n comp.setContextItem(\n errName,\n `const ${errName} = \"Can not encode union to binary: item does not belong to the union\"`\n );\n const ifElse = createIfElseFn();\n // Helper to generate encode code for a union item\n const getEncodeCode = (childRt: BaseRunType) => {\n const toJit = comp.compile(childRt, 'S', fnID);\n const encodeCode = toJit.code || '';\n const index = rt.getUnionItemIndex(comp, childRt);\n const isUint16 = index > 255;\n const writeIndex = isUint16\n ? `${sεr}.view.setUint16(${sεr}.index, ${index}, 1, (${sεr}.index += 2))`\n : `${sεr}.view.setUint8(${sεr}.index++, ${index})`;\n return `${writeIndex};${encodeCode}`;\n };\n // Generate code for simple items (atomic types)\n const simpleCode = simpleItems.map((childRt) => {\n const isTypeCode = rt.getChildIsTypeWithLooseCheck(childRt, comp);\n return `${ifElse()} (${isTypeCode}) {${getEncodeCode(childRt)}}`;\n });\n // Generate code for object types (need null guard)\n const objCode = objectTypes.length\n ? objectTypes.map((childRt) => {\n const isTypeCode = rt.getChildIsTypeWithLooseCheck(childRt, comp);\n return `${ifElse()} (typeof ${comp.vλl} === 'object' && ${comp.vλl} !== null && ${isTypeCode}) {${getEncodeCode(childRt)}}`;\n })\n : [];\n // Generate code for anyItem (always matches, checked last as fallback)\n const anyCode = anyItem ? `${ifElse(true)} {${getEncodeCode(anyItem)}}` : `${ifElse(true)} {${fail}}`;\n return {code: [...simpleCode, ...objCode, anyCode].join(''), type: 'S'};\n }\n default:\n throw new Error(`Binary serialization not supported for ${ReflectionKind[kind]} types`);\n }\n\n // Default return for cases that break without returning\n return {code: undefined, type: 'S'};\n}\n\n/** Generates bitmap initialization code for optional properties/params. Uses 1 bit per optional item (8 items per byte). */\nfunction getOptionalBitmapItems(\n rt: InterfaceRunType | TupleRunType,\n comp: BinaryCompiler,\n optionalLength = 0,\n currentIndex = 0,\n isTuple = false\n) {\n const sεr = comp.args.sεr;\n const prefix = isTuple ? 't' : '';\n const bitMIndexVar = comp.getLocalVarName(`${prefix}bmI`, rt); // index of the bitmap\n const bitmapLength = Math.ceil(optionalLength / 8);\n const bitIndex = `${currentIndex} & 7`; // equivalent to index % 8\n // initialize bitmap to zero as there could be values left from previous serialization\n const indexVar = comp.getLocalVarName(`${prefix}iBl`, rt);\n const setBitmapToZero =\n bitmapLength > 1\n ? `for (let ${indexVar} = 0; ${indexVar} < ${bitmapLength}; ${indexVar}++) {${sεr}.view.setUint8(${sεr}.index++, 0)}`\n : `${sεr}.view.setUint8(${sεr}.index++, 0)`;\n const bitMapInit = `${bitmapLength > 1 ? 'let ' : 'const'} ${bitMIndexVar} = ${sεr}.index; ${setBitmapToZero}`;\n return {bitMIndexVar, bitmapLength, bitIndex, bitMapInit};\n}\n\nfunction emitToBinaryAs(rt: BaseRunType, comp: BinaryCompiler, kind: ReflectionKind): JitCode {\n const originalKind = rt.src.kind;\n (rt.src as any).kind = kind;\n const result = emitToBinary(rt, comp);\n (rt.src as any).kind = originalKind;\n return result;\n}\n"],"names":["sεr"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function normalizeForComparison(actual: any, expected: any): {
2
+ actual: any;
3
+ expected: any;
4
+ };
@@ -0,0 +1,37 @@
1
+ function normalizeForComparison(actual, expected) {
2
+ if (Array.isArray(actual) && Array.isArray(expected)) {
3
+ const maxLength = Math.max(actual.length, expected.length);
4
+ const normalizedActual = normalizeArrayForComparison(actual, maxLength);
5
+ const normalizedExpected = normalizeArrayForComparison(expected, maxLength);
6
+ const resultActual = [];
7
+ const resultExpected = [];
8
+ for (let i = 0; i < maxLength; i++) {
9
+ const normalized = normalizeForComparison(normalizedActual[i], normalizedExpected[i]);
10
+ resultActual.push(normalized.actual);
11
+ resultExpected.push(normalized.expected);
12
+ }
13
+ return { actual: resultActual, expected: resultExpected };
14
+ }
15
+ if (actual && expected && typeof actual === "object" && typeof expected === "object") {
16
+ const actualKeys = Object.keys(actual);
17
+ const expectedKeys = Object.keys(expected);
18
+ const allKeys = [.../* @__PURE__ */ new Set([...actualKeys, ...expectedKeys])];
19
+ const resultActual = {};
20
+ const resultExpected = {};
21
+ for (const key of allKeys) {
22
+ const normalized = normalizeForComparison(actual[key], expected[key]);
23
+ resultActual[key] = normalized.actual;
24
+ resultExpected[key] = normalized.expected;
25
+ }
26
+ return { actual: resultActual, expected: resultExpected };
27
+ }
28
+ return { actual, expected };
29
+ }
30
+ function normalizeArrayForComparison(arr, targetLength) {
31
+ if (arr.length >= targetLength) return arr;
32
+ return [...arr, ...Array(targetLength - arr.length).fill(void 0)];
33
+ }
34
+ export {
35
+ normalizeForComparison
36
+ };
37
+ //# sourceMappingURL=equalsHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equalsHelpers.js","sources":["../../../../src/jitCompilers/equalsHelpers.ts"],"sourcesContent":["/* ###############\n * 2026 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ############### */\n\n/**\n * Recursively normalizes values for comparison, handling arrays with optional elements.\n * Returns an object with normalized actual and expected values for direct comparison.\n *\n * This is needed because Vitest's toEqual is stricter than Jest's when comparing arrays\n * with optional/undefined elements. For example:\n * - Jest: [446] equals [446, undefined, undefined, undefined] // true\n * - Vitest: [446] equals [446, undefined, undefined, undefined] // false\n *\n * This function pads shorter arrays with undefined to match the longer array's length,\n * then recursively normalizes nested values.\n */\nexport function normalizeForComparison(actual: any, expected: any): {actual: any; expected: any} {\n // Handle arrays - normalize length to match expected\n if (Array.isArray(actual) && Array.isArray(expected)) {\n const maxLength = Math.max(actual.length, expected.length);\n const normalizedActual = normalizeArrayForComparison(actual, maxLength);\n const normalizedExpected = normalizeArrayForComparison(expected, maxLength);\n const resultActual: any[] = [];\n const resultExpected: any[] = [];\n for (let i = 0; i < maxLength; i++) {\n const normalized = normalizeForComparison(normalizedActual[i], normalizedExpected[i]);\n resultActual.push(normalized.actual);\n resultExpected.push(normalized.expected);\n }\n return {actual: resultActual, expected: resultExpected};\n }\n // Handle nested objects\n if (actual && expected && typeof actual === 'object' && typeof expected === 'object') {\n const actualKeys = Object.keys(actual);\n const expectedKeys = Object.keys(expected);\n const allKeys = [...new Set([...actualKeys, ...expectedKeys])];\n const resultActual: any = {};\n const resultExpected: any = {};\n for (const key of allKeys) {\n const normalized = normalizeForComparison(actual[key], expected[key]);\n resultActual[key] = normalized.actual;\n resultExpected[key] = normalized.expected;\n }\n return {actual: resultActual, expected: resultExpected};\n }\n // Primitive values - return as-is\n return {actual, expected};\n}\n\n/**\n * Normalizes arrays for comparison by padding shorter arrays with undefined values.\n * This handles the difference between Jest and Vitest's toEqual behavior with optional tuple elements.\n * Jest considered [446] and [446, undefined, undefined, undefined] as equal,\n * but Vitest is stricter and requires explicit undefined values.\n */\nfunction normalizeArrayForComparison(arr: any[], targetLength: number): any[] {\n if (arr.length >= targetLength) return arr;\n return [...arr, ...Array(targetLength - arr.length).fill(undefined)];\n}\n"],"names":[],"mappings":"AAmBO,SAAS,uBAAuB,QAAa,UAA6C;AAE7F,MAAI,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ,QAAQ,GAAG;AAClD,UAAM,YAAY,KAAK,IAAI,OAAO,QAAQ,SAAS,MAAM;AACzD,UAAM,mBAAmB,4BAA4B,QAAQ,SAAS;AACtE,UAAM,qBAAqB,4BAA4B,UAAU,SAAS;AAC1E,UAAM,eAAsB,CAAA;AAC5B,UAAM,iBAAwB,CAAA;AAC9B,aAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,YAAM,aAAa,uBAAuB,iBAAiB,CAAC,GAAG,mBAAmB,CAAC,CAAC;AACpF,mBAAa,KAAK,WAAW,MAAM;AACnC,qBAAe,KAAK,WAAW,QAAQ;AAAA,IAC3C;AACA,WAAO,EAAC,QAAQ,cAAc,UAAU,eAAA;AAAA,EAC5C;AAEA,MAAI,UAAU,YAAY,OAAO,WAAW,YAAY,OAAO,aAAa,UAAU;AAClF,UAAM,aAAa,OAAO,KAAK,MAAM;AACrC,UAAM,eAAe,OAAO,KAAK,QAAQ;AACzC,UAAM,UAAU,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;AAC7D,UAAM,eAAoB,CAAA;AAC1B,UAAM,iBAAsB,CAAA;AAC5B,eAAW,OAAO,SAAS;AACvB,YAAM,aAAa,uBAAuB,OAAO,GAAG,GAAG,SAAS,GAAG,CAAC;AACpE,mBAAa,GAAG,IAAI,WAAW;AAC/B,qBAAe,GAAG,IAAI,WAAW;AAAA,IACrC;AACA,WAAO,EAAC,QAAQ,cAAc,UAAU,eAAA;AAAA,EAC5C;AAEA,SAAO,EAAC,QAAQ,SAAA;AACpB;AAQA,SAAS,4BAA4B,KAAY,cAA6B;AAC1E,MAAI,IAAI,UAAU,aAAc,QAAO;AACvC,SAAO,CAAC,GAAG,KAAK,GAAG,MAAM,eAAe,IAAI,MAAM,EAAE,KAAK,MAAS,CAAC;AACvE;"}
@@ -0,0 +1,27 @@
1
+ import { InterfaceRunType } from '../../../nodes/collection/interface.ts';
2
+ import { FunctionRunType } from '../../../nodes/function/function.ts';
3
+ import { RunType } from '../../../types.ts';
4
+ export declare function createSerializationFns(rt: RunType): {
5
+ serialize: (v: any) => string;
6
+ deserialize: (data: any) => any;
7
+ };
8
+ export declare function createSerializationParamsFn(rt: FunctionRunType, sliceStart?: number): {
9
+ serialize: (v: any) => string;
10
+ deserialize: (data: any) => any;
11
+ };
12
+ export declare function createSerializationReturnFn(rt: FunctionRunType): {
13
+ serialize: (v: any) => string;
14
+ deserialize: (data: any) => any;
15
+ };
16
+ export declare function createSerializationCallSignatureParamsFn(rt: InterfaceRunType): {
17
+ serialize: (v: any) => string;
18
+ deserialize: (data: any) => any;
19
+ };
20
+ export declare function createSerializationCallSignatureReturnFn(rt: InterfaceRunType): {
21
+ serialize: (v: any) => string;
22
+ deserialize: (data: any) => any;
23
+ };
24
+ export declare function roundTrip(serialize: (v: any) => string, deserialize: (v: string) => any, value: any): {
25
+ serialized: string;
26
+ deserialized: any;
27
+ };
@@ -0,0 +1,56 @@
1
+ import { JitFunctions } from "../../../constants.functions.js";
2
+ const SERIALIZE_FN = JitFunctions.prepareForJson;
3
+ const DESERIALIZE_FN = JitFunctions.restoreFromJson;
4
+ function createSerializationFns(rt) {
5
+ const prepareForJson = rt.createJitFunction(SERIALIZE_FN);
6
+ const restoreFromJson = rt.createJitFunction(DESERIALIZE_FN);
7
+ const serialize = (v) => JSON.stringify(prepareForJson(v));
8
+ const deserialize = (data) => restoreFromJson(JSON.parse(data));
9
+ return { serialize, deserialize };
10
+ }
11
+ function createSerializationParamsFn(rt, sliceStart) {
12
+ const params = typeof sliceStart === "number" ? { paramsSlice: { start: sliceStart } } : void 0;
13
+ const prepareForJson = rt.createJitParamsFunction(SERIALIZE_FN, params);
14
+ const restoreFromJson = rt.createJitParamsFunction(DESERIALIZE_FN, params);
15
+ const serialize = (v) => JSON.stringify(prepareForJson(v));
16
+ const deserialize = (data) => restoreFromJson(JSON.parse(data));
17
+ return { serialize, deserialize };
18
+ }
19
+ function createSerializationReturnFn(rt) {
20
+ const prepareForJson = rt.createJitReturnFunction(SERIALIZE_FN);
21
+ const restoreFromJson = rt.createJitReturnFunction(DESERIALIZE_FN);
22
+ const serialize = (v) => JSON.stringify(prepareForJson(v));
23
+ const deserialize = (data) => restoreFromJson(JSON.parse(data));
24
+ return { serialize, deserialize };
25
+ }
26
+ function createSerializationCallSignatureParamsFn(rt) {
27
+ const callSignature = rt.getCallSignature();
28
+ const prepareForJson = callSignature.createJitParamsFunction(SERIALIZE_FN);
29
+ const restoreFromJson = callSignature.createJitParamsFunction(DESERIALIZE_FN);
30
+ const serialize = (v) => JSON.stringify(prepareForJson(v));
31
+ const deserialize = (data) => restoreFromJson(JSON.parse(data));
32
+ return { serialize, deserialize };
33
+ }
34
+ function createSerializationCallSignatureReturnFn(rt) {
35
+ const callSignature = rt.getCallSignature();
36
+ const prepareForJson = callSignature.createJitReturnFunction(SERIALIZE_FN);
37
+ const restoreFromJson = callSignature.createJitReturnFunction(DESERIALIZE_FN);
38
+ const serialize = (v) => JSON.stringify(prepareForJson(v));
39
+ const deserialize = (data) => restoreFromJson(JSON.parse(data));
40
+ return { serialize, deserialize };
41
+ }
42
+ function roundTrip(serialize, deserialize, value) {
43
+ const serialized = serialize(value);
44
+ const deserialized = deserialize(serialized);
45
+ const result = { serialized, deserialized };
46
+ return result;
47
+ }
48
+ export {
49
+ createSerializationCallSignatureParamsFn,
50
+ createSerializationCallSignatureReturnFn,
51
+ createSerializationFns,
52
+ createSerializationParamsFn,
53
+ createSerializationReturnFn,
54
+ roundTrip
55
+ };
56
+ //# sourceMappingURL=jsonHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonHelpers.js","sources":["../../../../../../src/jitCompilers/json/jsonSpec/jsonHelpers.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 {JitFunctions} from '../../../constants.functions.ts';\nimport type {InterfaceRunType} from '../../../nodes/collection/interface.ts';\nimport type {FunctionRunType} from '../../../nodes/function/function.ts';\nimport type {RunType} from '../../../types.ts';\n\nconst SERIALIZE_FN = JitFunctions.prepareForJson;\nconst DESERIALIZE_FN = JitFunctions.restoreFromJson;\n\nexport function createSerializationFns(rt: RunType) {\n const prepareForJson = rt.createJitFunction(SERIALIZE_FN);\n const restoreFromJson = rt.createJitFunction(DESERIALIZE_FN);\n const serialize = (v: any) => JSON.stringify(prepareForJson(v));\n const deserialize = (data: any) => restoreFromJson(JSON.parse(data));\n return {serialize, deserialize};\n}\n\nexport function createSerializationParamsFn(rt: FunctionRunType, sliceStart?: number) {\n const params = typeof sliceStart === 'number' ? {paramsSlice: {start: sliceStart}} : undefined;\n const prepareForJson = rt.createJitParamsFunction(SERIALIZE_FN, params);\n const restoreFromJson = rt.createJitParamsFunction(DESERIALIZE_FN, params);\n const serialize = (v: any) => JSON.stringify(prepareForJson(v));\n const deserialize = (data: any) => restoreFromJson(JSON.parse(data));\n return {serialize, deserialize};\n}\n\nexport function createSerializationReturnFn(rt: FunctionRunType) {\n const prepareForJson = rt.createJitReturnFunction(SERIALIZE_FN);\n const restoreFromJson = rt.createJitReturnFunction(DESERIALIZE_FN);\n const serialize = (v: any) => JSON.stringify(prepareForJson(v));\n const deserialize = (data: any) => restoreFromJson(JSON.parse(data));\n return {serialize, deserialize};\n}\n\nexport function createSerializationCallSignatureParamsFn(rt: InterfaceRunType) {\n const callSignature = rt.getCallSignature()!;\n const prepareForJson = callSignature.createJitParamsFunction(SERIALIZE_FN);\n const restoreFromJson = callSignature.createJitParamsFunction(DESERIALIZE_FN);\n const serialize = (v: any) => JSON.stringify(prepareForJson(v));\n const deserialize = (data: any) => restoreFromJson(JSON.parse(data));\n return {serialize, deserialize};\n}\n\nexport function createSerializationCallSignatureReturnFn(rt: InterfaceRunType) {\n const callSignature = rt.getCallSignature()!;\n const prepareForJson = callSignature.createJitReturnFunction(SERIALIZE_FN);\n const restoreFromJson = callSignature.createJitReturnFunction(DESERIALIZE_FN);\n const serialize = (v: any) => JSON.stringify(prepareForJson(v));\n const deserialize = (data: any) => restoreFromJson(JSON.parse(data));\n return {serialize, deserialize};\n}\n\nexport function roundTrip(serialize: (v: any) => string, deserialize: (v: string) => any, value: any) {\n const serialized = serialize(value);\n const deserialized = deserialize(serialized);\n const result = {serialized, deserialized};\n return result;\n}\n"],"names":[],"mappings":";AAYA,MAAM,eAAe,aAAa;AAClC,MAAM,iBAAiB,aAAa;AAE7B,SAAS,uBAAuB,IAAa;AAChD,QAAM,iBAAiB,GAAG,kBAAkB,YAAY;AACxD,QAAM,kBAAkB,GAAG,kBAAkB,cAAc;AAC3D,QAAM,YAAY,CAAC,MAAW,KAAK,UAAU,eAAe,CAAC,CAAC;AAC9D,QAAM,cAAc,CAAC,SAAc,gBAAgB,KAAK,MAAM,IAAI,CAAC;AACnE,SAAO,EAAC,WAAW,YAAA;AACvB;AAEO,SAAS,4BAA4B,IAAqB,YAAqB;AAClF,QAAM,SAAS,OAAO,eAAe,WAAW,EAAC,aAAa,EAAC,OAAO,WAAA,EAAU,IAAK;AACrF,QAAM,iBAAiB,GAAG,wBAAwB,cAAc,MAAM;AACtE,QAAM,kBAAkB,GAAG,wBAAwB,gBAAgB,MAAM;AACzE,QAAM,YAAY,CAAC,MAAW,KAAK,UAAU,eAAe,CAAC,CAAC;AAC9D,QAAM,cAAc,CAAC,SAAc,gBAAgB,KAAK,MAAM,IAAI,CAAC;AACnE,SAAO,EAAC,WAAW,YAAA;AACvB;AAEO,SAAS,4BAA4B,IAAqB;AAC7D,QAAM,iBAAiB,GAAG,wBAAwB,YAAY;AAC9D,QAAM,kBAAkB,GAAG,wBAAwB,cAAc;AACjE,QAAM,YAAY,CAAC,MAAW,KAAK,UAAU,eAAe,CAAC,CAAC;AAC9D,QAAM,cAAc,CAAC,SAAc,gBAAgB,KAAK,MAAM,IAAI,CAAC;AACnE,SAAO,EAAC,WAAW,YAAA;AACvB;AAEO,SAAS,yCAAyC,IAAsB;AAC3E,QAAM,gBAAgB,GAAG,iBAAA;AACzB,QAAM,iBAAiB,cAAc,wBAAwB,YAAY;AACzE,QAAM,kBAAkB,cAAc,wBAAwB,cAAc;AAC5E,QAAM,YAAY,CAAC,MAAW,KAAK,UAAU,eAAe,CAAC,CAAC;AAC9D,QAAM,cAAc,CAAC,SAAc,gBAAgB,KAAK,MAAM,IAAI,CAAC;AACnE,SAAO,EAAC,WAAW,YAAA;AACvB;AAEO,SAAS,yCAAyC,IAAsB;AAC3E,QAAM,gBAAgB,GAAG,iBAAA;AACzB,QAAM,iBAAiB,cAAc,wBAAwB,YAAY;AACzE,QAAM,kBAAkB,cAAc,wBAAwB,cAAc;AAC5E,QAAM,YAAY,CAAC,MAAW,KAAK,UAAU,eAAe,CAAC,CAAC;AAC9D,QAAM,cAAc,CAAC,SAAc,gBAAgB,KAAK,MAAM,IAAI,CAAC;AACnE,SAAO,EAAC,WAAW,YAAA;AACvB;AAEO,SAAS,UAAU,WAA+B,aAAiC,OAAY;AAClG,QAAM,aAAa,UAAU,KAAK;AAClC,QAAM,eAAe,YAAY,UAAU;AAC3C,QAAM,SAAS,EAAC,YAAY,aAAA;AAC5B,SAAO;AACX;"}
@@ -0,0 +1,10 @@
1
+ import { JitFunctions } from '../../constants.functions.ts';
2
+ import { JitFnCompiler } from '../../lib/jitFnCompiler.ts';
3
+ import { JitCode } from '../../types.ts';
4
+ import { BaseRunType } from '../../lib/baseRunTypes.ts';
5
+ import { IterableRunType } from '../../nodes/native/Iterable.ts';
6
+ type Operation = typeof JitFunctions.stringifyJson.id | typeof JitFunctions.toJSCode.id;
7
+ export declare function createStringifyCompiler(fnID: Operation): (runType: BaseRunType, comp: JitFnCompiler) => JitCode;
8
+ export declare function createStringifyIterable(fnID: Operation): (rt: IterableRunType, comp: JitFnCompiler, codePrefix?: string, codeSuffix?: string) => JitCode;
9
+ export declare const emitJsonStringify: (runType: BaseRunType, comp: JitFnCompiler) => JitCode;
10
+ export {};