@mionjs/run-types 0.8.7 → 0.8.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/.dist/cjs/index.d.ts +1 -0
  2. package/.dist/cjs/index.d.ts.map +1 -0
  3. package/.dist/cjs/src/constants.d.ts +1 -0
  4. package/.dist/cjs/src/constants.d.ts.map +1 -0
  5. package/.dist/cjs/src/constants.functions.d.ts +1 -0
  6. package/.dist/cjs/src/constants.functions.d.ts.map +1 -0
  7. package/.dist/cjs/src/constants.kind.d.ts +1 -0
  8. package/.dist/cjs/src/constants.kind.d.ts.map +1 -0
  9. package/.dist/cjs/src/createRunType.cjs +3 -1
  10. package/.dist/cjs/src/createRunType.cjs.map +1 -1
  11. package/.dist/cjs/src/createRunType.d.ts +1 -0
  12. package/.dist/cjs/src/createRunType.d.ts.map +1 -0
  13. package/.dist/cjs/src/createRunTypeFunctions.d.ts +1 -0
  14. package/.dist/cjs/src/createRunTypeFunctions.d.ts.map +1 -0
  15. package/.dist/cjs/src/formats.runtype.d.ts +1 -0
  16. package/.dist/cjs/src/formats.runtype.d.ts.map +1 -0
  17. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts +1 -0
  18. package/.dist/cjs/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts.map +1 -0
  19. package/.dist/cjs/src/jitCompilers/binary/fromBinary.cjs +1 -1
  20. package/.dist/cjs/src/jitCompilers/binary/fromBinary.cjs.map +1 -1
  21. package/.dist/cjs/src/jitCompilers/binary/fromBinary.d.ts +1 -0
  22. package/.dist/cjs/src/jitCompilers/binary/fromBinary.d.ts.map +1 -0
  23. package/.dist/cjs/src/jitCompilers/binary/toBinary.cjs +1 -1
  24. package/.dist/cjs/src/jitCompilers/binary/toBinary.cjs.map +1 -1
  25. package/.dist/cjs/src/jitCompilers/binary/toBinary.d.ts +1 -0
  26. package/.dist/cjs/src/jitCompilers/binary/toBinary.d.ts.map +1 -0
  27. package/.dist/cjs/src/jitCompilers/equalsHelpers.d.ts +1 -0
  28. package/.dist/cjs/src/jitCompilers/equalsHelpers.d.ts.map +1 -0
  29. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts +1 -0
  30. package/.dist/cjs/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts.map +1 -0
  31. package/.dist/cjs/src/jitCompilers/json/stringifyJson.cjs +1 -1
  32. package/.dist/cjs/src/jitCompilers/json/stringifyJson.cjs.map +1 -1
  33. package/.dist/cjs/src/jitCompilers/json/stringifyJson.d.ts +1 -0
  34. package/.dist/cjs/src/jitCompilers/json/stringifyJson.d.ts.map +1 -0
  35. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts +1 -0
  36. package/.dist/cjs/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts.map +1 -0
  37. package/.dist/cjs/src/jitCompilers/json/toJsCode.d.ts +1 -0
  38. package/.dist/cjs/src/jitCompilers/json/toJsCode.d.ts.map +1 -0
  39. package/.dist/cjs/src/lib/baseRunTypeFormat.d.ts +1 -0
  40. package/.dist/cjs/src/lib/baseRunTypeFormat.d.ts.map +1 -0
  41. package/.dist/cjs/src/lib/baseRunTypes.d.ts +1 -0
  42. package/.dist/cjs/src/lib/baseRunTypes.d.ts.map +1 -0
  43. package/.dist/cjs/src/lib/createJitFunction.d.ts +1 -0
  44. package/.dist/cjs/src/lib/createJitFunction.d.ts.map +1 -0
  45. package/.dist/cjs/src/lib/dkProxy.d.ts +1 -0
  46. package/.dist/cjs/src/lib/dkProxy.d.ts.map +1 -0
  47. package/.dist/cjs/src/lib/formats.d.ts +1 -0
  48. package/.dist/cjs/src/lib/formats.d.ts.map +1 -0
  49. package/.dist/cjs/src/lib/guards.d.ts +1 -0
  50. package/.dist/cjs/src/lib/guards.d.ts.map +1 -0
  51. package/.dist/cjs/src/lib/jitFnCompiler.d.ts +1 -0
  52. package/.dist/cjs/src/lib/jitFnCompiler.d.ts.map +1 -0
  53. package/.dist/cjs/src/lib/jitFnsRegistry.d.ts +1 -0
  54. package/.dist/cjs/src/lib/jitFnsRegistry.d.ts.map +1 -0
  55. package/.dist/cjs/src/lib/typeId.d.ts +1 -0
  56. package/.dist/cjs/src/lib/typeId.d.ts.map +1 -0
  57. package/.dist/cjs/src/lib/utils.d.ts +1 -0
  58. package/.dist/cjs/src/lib/utils.d.ts.map +1 -0
  59. package/.dist/cjs/src/mocking/constants.mock.d.ts +1 -0
  60. package/.dist/cjs/src/mocking/constants.mock.d.ts.map +1 -0
  61. package/.dist/cjs/src/mocking/mockRegistry.d.ts +1 -0
  62. package/.dist/cjs/src/mocking/mockRegistry.d.ts.map +1 -0
  63. package/.dist/cjs/src/mocking/mockType.cjs +46 -1
  64. package/.dist/cjs/src/mocking/mockType.cjs.map +1 -1
  65. package/.dist/cjs/src/mocking/mockType.d.ts +1 -0
  66. package/.dist/cjs/src/mocking/mockType.d.ts.map +1 -0
  67. package/.dist/cjs/src/mocking/mockUtils.d.ts +1 -0
  68. package/.dist/cjs/src/mocking/mockUtils.d.ts.map +1 -0
  69. package/.dist/cjs/src/nodes/atomic/any.d.ts +1 -0
  70. package/.dist/cjs/src/nodes/atomic/any.d.ts.map +1 -0
  71. package/.dist/cjs/src/nodes/atomic/bigInt.d.ts +1 -0
  72. package/.dist/cjs/src/nodes/atomic/bigInt.d.ts.map +1 -0
  73. package/.dist/cjs/src/nodes/atomic/boolean.d.ts +1 -0
  74. package/.dist/cjs/src/nodes/atomic/boolean.d.ts.map +1 -0
  75. package/.dist/cjs/src/nodes/atomic/date.d.ts +1 -0
  76. package/.dist/cjs/src/nodes/atomic/date.d.ts.map +1 -0
  77. package/.dist/cjs/src/nodes/atomic/enum.d.ts +1 -0
  78. package/.dist/cjs/src/nodes/atomic/enum.d.ts.map +1 -0
  79. package/.dist/cjs/src/nodes/atomic/enumMember.d.ts +1 -0
  80. package/.dist/cjs/src/nodes/atomic/enumMember.d.ts.map +1 -0
  81. package/.dist/cjs/src/nodes/atomic/literal.d.ts +1 -0
  82. package/.dist/cjs/src/nodes/atomic/literal.d.ts.map +1 -0
  83. package/.dist/cjs/src/nodes/atomic/never.d.ts +1 -0
  84. package/.dist/cjs/src/nodes/atomic/never.d.ts.map +1 -0
  85. package/.dist/cjs/src/nodes/atomic/null.d.ts +1 -0
  86. package/.dist/cjs/src/nodes/atomic/null.d.ts.map +1 -0
  87. package/.dist/cjs/src/nodes/atomic/number.d.ts +1 -0
  88. package/.dist/cjs/src/nodes/atomic/number.d.ts.map +1 -0
  89. package/.dist/cjs/src/nodes/atomic/object.d.ts +1 -0
  90. package/.dist/cjs/src/nodes/atomic/object.d.ts.map +1 -0
  91. package/.dist/cjs/src/nodes/atomic/regexp.d.ts +1 -0
  92. package/.dist/cjs/src/nodes/atomic/regexp.d.ts.map +1 -0
  93. package/.dist/cjs/src/nodes/atomic/string.d.ts +1 -0
  94. package/.dist/cjs/src/nodes/atomic/string.d.ts.map +1 -0
  95. package/.dist/cjs/src/nodes/atomic/symbol.d.ts +1 -0
  96. package/.dist/cjs/src/nodes/atomic/symbol.d.ts.map +1 -0
  97. package/.dist/cjs/src/nodes/atomic/undefined.d.ts +1 -0
  98. package/.dist/cjs/src/nodes/atomic/undefined.d.ts.map +1 -0
  99. package/.dist/cjs/src/nodes/atomic/unknown.d.ts +1 -0
  100. package/.dist/cjs/src/nodes/atomic/unknown.d.ts.map +1 -0
  101. package/.dist/cjs/src/nodes/atomic/void.d.ts +1 -0
  102. package/.dist/cjs/src/nodes/atomic/void.d.ts.map +1 -0
  103. package/.dist/cjs/src/nodes/collection/class.d.ts +1 -0
  104. package/.dist/cjs/src/nodes/collection/class.d.ts.map +1 -0
  105. package/.dist/cjs/src/nodes/collection/functionParams.d.ts +1 -0
  106. package/.dist/cjs/src/nodes/collection/functionParams.d.ts.map +1 -0
  107. package/.dist/cjs/src/nodes/collection/interface.d.ts +1 -0
  108. package/.dist/cjs/src/nodes/collection/interface.d.ts.map +1 -0
  109. package/.dist/cjs/src/nodes/collection/intersection.d.ts +1 -0
  110. package/.dist/cjs/src/nodes/collection/intersection.d.ts.map +1 -0
  111. package/.dist/cjs/src/nodes/collection/templateLiteral.cjs +73 -0
  112. package/.dist/cjs/src/nodes/collection/templateLiteral.cjs.map +1 -0
  113. package/.dist/cjs/src/nodes/collection/templateLiteral.d.ts +16 -0
  114. package/.dist/cjs/src/nodes/collection/templateLiteral.d.ts.map +1 -0
  115. package/.dist/cjs/src/nodes/collection/tuple.d.ts +1 -0
  116. package/.dist/cjs/src/nodes/collection/tuple.d.ts.map +1 -0
  117. package/.dist/cjs/src/nodes/collection/union.d.ts +1 -0
  118. package/.dist/cjs/src/nodes/collection/union.d.ts.map +1 -0
  119. package/.dist/cjs/src/nodes/collection/unionDiscriminator.d.ts +1 -0
  120. package/.dist/cjs/src/nodes/collection/unionDiscriminator.d.ts.map +1 -0
  121. package/.dist/cjs/src/nodes/function/function.d.ts +1 -0
  122. package/.dist/cjs/src/nodes/function/function.d.ts.map +1 -0
  123. package/.dist/cjs/src/nodes/member/array.d.ts +1 -0
  124. package/.dist/cjs/src/nodes/member/array.d.ts.map +1 -0
  125. package/.dist/cjs/src/nodes/member/callSignature.d.ts +1 -0
  126. package/.dist/cjs/src/nodes/member/callSignature.d.ts.map +1 -0
  127. package/.dist/cjs/src/nodes/member/genericMember.d.ts +1 -0
  128. package/.dist/cjs/src/nodes/member/genericMember.d.ts.map +1 -0
  129. package/.dist/cjs/src/nodes/member/indexProperty.cjs +69 -22
  130. package/.dist/cjs/src/nodes/member/indexProperty.cjs.map +1 -1
  131. package/.dist/cjs/src/nodes/member/indexProperty.d.ts +2 -0
  132. package/.dist/cjs/src/nodes/member/indexProperty.d.ts.map +1 -0
  133. package/.dist/cjs/src/nodes/member/method.d.ts +1 -0
  134. package/.dist/cjs/src/nodes/member/method.d.ts.map +1 -0
  135. package/.dist/cjs/src/nodes/member/methodSignature.d.ts +1 -0
  136. package/.dist/cjs/src/nodes/member/methodSignature.d.ts.map +1 -0
  137. package/.dist/cjs/src/nodes/member/param.d.ts +1 -0
  138. package/.dist/cjs/src/nodes/member/param.d.ts.map +1 -0
  139. package/.dist/cjs/src/nodes/member/property.d.ts +1 -0
  140. package/.dist/cjs/src/nodes/member/property.d.ts.map +1 -0
  141. package/.dist/cjs/src/nodes/member/restParams.d.ts +1 -0
  142. package/.dist/cjs/src/nodes/member/restParams.d.ts.map +1 -0
  143. package/.dist/cjs/src/nodes/member/tupleMember.d.ts +1 -0
  144. package/.dist/cjs/src/nodes/member/tupleMember.d.ts.map +1 -0
  145. package/.dist/cjs/src/nodes/native/Iterable.d.ts +1 -0
  146. package/.dist/cjs/src/nodes/native/Iterable.d.ts.map +1 -0
  147. package/.dist/cjs/src/nodes/native/map.d.ts +1 -0
  148. package/.dist/cjs/src/nodes/native/map.d.ts.map +1 -0
  149. package/.dist/cjs/src/nodes/native/nonSerializable.d.ts +1 -0
  150. package/.dist/cjs/src/nodes/native/nonSerializable.d.ts.map +1 -0
  151. package/.dist/cjs/src/nodes/native/promise.d.ts +1 -0
  152. package/.dist/cjs/src/nodes/native/promise.d.ts.map +1 -0
  153. package/.dist/cjs/src/nodes/native/set.d.ts +1 -0
  154. package/.dist/cjs/src/nodes/native/set.d.ts.map +1 -0
  155. package/.dist/cjs/src/run-types-pure-fns.d.ts +1 -0
  156. package/.dist/cjs/src/run-types-pure-fns.d.ts.map +1 -0
  157. package/.dist/cjs/src/types.d.ts +1 -0
  158. package/.dist/cjs/src/types.d.ts.map +1 -0
  159. package/.dist/esm/index.d.ts +1 -0
  160. package/.dist/esm/index.d.ts.map +1 -0
  161. package/.dist/esm/src/constants.d.ts +1 -0
  162. package/.dist/esm/src/constants.d.ts.map +1 -0
  163. package/.dist/esm/src/constants.functions.d.ts +1 -0
  164. package/.dist/esm/src/constants.functions.d.ts.map +1 -0
  165. package/.dist/esm/src/constants.kind.d.ts +1 -0
  166. package/.dist/esm/src/constants.kind.d.ts.map +1 -0
  167. package/.dist/esm/src/createRunType.d.ts +1 -0
  168. package/.dist/esm/src/createRunType.d.ts.map +1 -0
  169. package/.dist/esm/src/createRunType.js +3 -1
  170. package/.dist/esm/src/createRunType.js.map +1 -1
  171. package/.dist/esm/src/createRunTypeFunctions.d.ts +1 -0
  172. package/.dist/esm/src/createRunTypeFunctions.d.ts.map +1 -0
  173. package/.dist/esm/src/formats.runtype.d.ts +1 -0
  174. package/.dist/esm/src/formats.runtype.d.ts.map +1 -0
  175. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts +1 -0
  176. package/.dist/esm/src/jitCompilers/binary/binarySpec/binaryHelpers.d.ts.map +1 -0
  177. package/.dist/esm/src/jitCompilers/binary/fromBinary.d.ts +1 -0
  178. package/.dist/esm/src/jitCompilers/binary/fromBinary.d.ts.map +1 -0
  179. package/.dist/esm/src/jitCompilers/binary/fromBinary.js +1 -1
  180. package/.dist/esm/src/jitCompilers/binary/fromBinary.js.map +1 -1
  181. package/.dist/esm/src/jitCompilers/binary/toBinary.d.ts +1 -0
  182. package/.dist/esm/src/jitCompilers/binary/toBinary.d.ts.map +1 -0
  183. package/.dist/esm/src/jitCompilers/binary/toBinary.js +1 -1
  184. package/.dist/esm/src/jitCompilers/binary/toBinary.js.map +1 -1
  185. package/.dist/esm/src/jitCompilers/equalsHelpers.d.ts +1 -0
  186. package/.dist/esm/src/jitCompilers/equalsHelpers.d.ts.map +1 -0
  187. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts +1 -0
  188. package/.dist/esm/src/jitCompilers/json/jsonSpec/jsonHelpers.d.ts.map +1 -0
  189. package/.dist/esm/src/jitCompilers/json/stringifyJson.d.ts +1 -0
  190. package/.dist/esm/src/jitCompilers/json/stringifyJson.d.ts.map +1 -0
  191. package/.dist/esm/src/jitCompilers/json/stringifyJson.js +1 -1
  192. package/.dist/esm/src/jitCompilers/json/stringifyJson.js.map +1 -1
  193. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts +1 -0
  194. package/.dist/esm/src/jitCompilers/json/stringifySpec/stringifyHelpers.d.ts.map +1 -0
  195. package/.dist/esm/src/jitCompilers/json/toJsCode.d.ts +1 -0
  196. package/.dist/esm/src/jitCompilers/json/toJsCode.d.ts.map +1 -0
  197. package/.dist/esm/src/lib/baseRunTypeFormat.d.ts +1 -0
  198. package/.dist/esm/src/lib/baseRunTypeFormat.d.ts.map +1 -0
  199. package/.dist/esm/src/lib/baseRunTypes.d.ts +1 -0
  200. package/.dist/esm/src/lib/baseRunTypes.d.ts.map +1 -0
  201. package/.dist/esm/src/lib/createJitFunction.d.ts +1 -0
  202. package/.dist/esm/src/lib/createJitFunction.d.ts.map +1 -0
  203. package/.dist/esm/src/lib/dkProxy.d.ts +1 -0
  204. package/.dist/esm/src/lib/dkProxy.d.ts.map +1 -0
  205. package/.dist/esm/src/lib/formats.d.ts +1 -0
  206. package/.dist/esm/src/lib/formats.d.ts.map +1 -0
  207. package/.dist/esm/src/lib/guards.d.ts +1 -0
  208. package/.dist/esm/src/lib/guards.d.ts.map +1 -0
  209. package/.dist/esm/src/lib/jitFnCompiler.d.ts +1 -0
  210. package/.dist/esm/src/lib/jitFnCompiler.d.ts.map +1 -0
  211. package/.dist/esm/src/lib/jitFnsRegistry.d.ts +1 -0
  212. package/.dist/esm/src/lib/jitFnsRegistry.d.ts.map +1 -0
  213. package/.dist/esm/src/lib/typeId.d.ts +1 -0
  214. package/.dist/esm/src/lib/typeId.d.ts.map +1 -0
  215. package/.dist/esm/src/lib/utils.d.ts +1 -0
  216. package/.dist/esm/src/lib/utils.d.ts.map +1 -0
  217. package/.dist/esm/src/mocking/constants.mock.d.ts +1 -0
  218. package/.dist/esm/src/mocking/constants.mock.d.ts.map +1 -0
  219. package/.dist/esm/src/mocking/mockRegistry.d.ts +1 -0
  220. package/.dist/esm/src/mocking/mockRegistry.d.ts.map +1 -0
  221. package/.dist/esm/src/mocking/mockType.d.ts +1 -0
  222. package/.dist/esm/src/mocking/mockType.d.ts.map +1 -0
  223. package/.dist/esm/src/mocking/mockType.js +47 -2
  224. package/.dist/esm/src/mocking/mockType.js.map +1 -1
  225. package/.dist/esm/src/mocking/mockUtils.d.ts +1 -0
  226. package/.dist/esm/src/mocking/mockUtils.d.ts.map +1 -0
  227. package/.dist/esm/src/mocking/mockUtils.js +1 -1
  228. package/.dist/esm/src/nodes/atomic/any.d.ts +1 -0
  229. package/.dist/esm/src/nodes/atomic/any.d.ts.map +1 -0
  230. package/.dist/esm/src/nodes/atomic/bigInt.d.ts +1 -0
  231. package/.dist/esm/src/nodes/atomic/bigInt.d.ts.map +1 -0
  232. package/.dist/esm/src/nodes/atomic/boolean.d.ts +1 -0
  233. package/.dist/esm/src/nodes/atomic/boolean.d.ts.map +1 -0
  234. package/.dist/esm/src/nodes/atomic/date.d.ts +1 -0
  235. package/.dist/esm/src/nodes/atomic/date.d.ts.map +1 -0
  236. package/.dist/esm/src/nodes/atomic/enum.d.ts +1 -0
  237. package/.dist/esm/src/nodes/atomic/enum.d.ts.map +1 -0
  238. package/.dist/esm/src/nodes/atomic/enumMember.d.ts +1 -0
  239. package/.dist/esm/src/nodes/atomic/enumMember.d.ts.map +1 -0
  240. package/.dist/esm/src/nodes/atomic/literal.d.ts +1 -0
  241. package/.dist/esm/src/nodes/atomic/literal.d.ts.map +1 -0
  242. package/.dist/esm/src/nodes/atomic/never.d.ts +1 -0
  243. package/.dist/esm/src/nodes/atomic/never.d.ts.map +1 -0
  244. package/.dist/esm/src/nodes/atomic/null.d.ts +1 -0
  245. package/.dist/esm/src/nodes/atomic/null.d.ts.map +1 -0
  246. package/.dist/esm/src/nodes/atomic/number.d.ts +1 -0
  247. package/.dist/esm/src/nodes/atomic/number.d.ts.map +1 -0
  248. package/.dist/esm/src/nodes/atomic/object.d.ts +1 -0
  249. package/.dist/esm/src/nodes/atomic/object.d.ts.map +1 -0
  250. package/.dist/esm/src/nodes/atomic/regexp.d.ts +1 -0
  251. package/.dist/esm/src/nodes/atomic/regexp.d.ts.map +1 -0
  252. package/.dist/esm/src/nodes/atomic/string.d.ts +1 -0
  253. package/.dist/esm/src/nodes/atomic/string.d.ts.map +1 -0
  254. package/.dist/esm/src/nodes/atomic/symbol.d.ts +1 -0
  255. package/.dist/esm/src/nodes/atomic/symbol.d.ts.map +1 -0
  256. package/.dist/esm/src/nodes/atomic/undefined.d.ts +1 -0
  257. package/.dist/esm/src/nodes/atomic/undefined.d.ts.map +1 -0
  258. package/.dist/esm/src/nodes/atomic/unknown.d.ts +1 -0
  259. package/.dist/esm/src/nodes/atomic/unknown.d.ts.map +1 -0
  260. package/.dist/esm/src/nodes/atomic/void.d.ts +1 -0
  261. package/.dist/esm/src/nodes/atomic/void.d.ts.map +1 -0
  262. package/.dist/esm/src/nodes/collection/class.d.ts +1 -0
  263. package/.dist/esm/src/nodes/collection/class.d.ts.map +1 -0
  264. package/.dist/esm/src/nodes/collection/functionParams.d.ts +1 -0
  265. package/.dist/esm/src/nodes/collection/functionParams.d.ts.map +1 -0
  266. package/.dist/esm/src/nodes/collection/interface.d.ts +1 -0
  267. package/.dist/esm/src/nodes/collection/interface.d.ts.map +1 -0
  268. package/.dist/esm/src/nodes/collection/intersection.d.ts +1 -0
  269. package/.dist/esm/src/nodes/collection/intersection.d.ts.map +1 -0
  270. package/.dist/esm/src/nodes/collection/templateLiteral.d.ts +16 -0
  271. package/.dist/esm/src/nodes/collection/templateLiteral.d.ts.map +1 -0
  272. package/.dist/esm/src/nodes/collection/templateLiteral.js +73 -0
  273. package/.dist/esm/src/nodes/collection/templateLiteral.js.map +1 -0
  274. package/.dist/esm/src/nodes/collection/tuple.d.ts +1 -0
  275. package/.dist/esm/src/nodes/collection/tuple.d.ts.map +1 -0
  276. package/.dist/esm/src/nodes/collection/union.d.ts +1 -0
  277. package/.dist/esm/src/nodes/collection/union.d.ts.map +1 -0
  278. package/.dist/esm/src/nodes/collection/unionDiscriminator.d.ts +1 -0
  279. package/.dist/esm/src/nodes/collection/unionDiscriminator.d.ts.map +1 -0
  280. package/.dist/esm/src/nodes/function/function.d.ts +1 -0
  281. package/.dist/esm/src/nodes/function/function.d.ts.map +1 -0
  282. package/.dist/esm/src/nodes/member/array.d.ts +1 -0
  283. package/.dist/esm/src/nodes/member/array.d.ts.map +1 -0
  284. package/.dist/esm/src/nodes/member/callSignature.d.ts +1 -0
  285. package/.dist/esm/src/nodes/member/callSignature.d.ts.map +1 -0
  286. package/.dist/esm/src/nodes/member/genericMember.d.ts +1 -0
  287. package/.dist/esm/src/nodes/member/genericMember.d.ts.map +1 -0
  288. package/.dist/esm/src/nodes/member/indexProperty.d.ts +2 -0
  289. package/.dist/esm/src/nodes/member/indexProperty.d.ts.map +1 -0
  290. package/.dist/esm/src/nodes/member/indexProperty.js +70 -23
  291. package/.dist/esm/src/nodes/member/indexProperty.js.map +1 -1
  292. package/.dist/esm/src/nodes/member/method.d.ts +1 -0
  293. package/.dist/esm/src/nodes/member/method.d.ts.map +1 -0
  294. package/.dist/esm/src/nodes/member/methodSignature.d.ts +1 -0
  295. package/.dist/esm/src/nodes/member/methodSignature.d.ts.map +1 -0
  296. package/.dist/esm/src/nodes/member/param.d.ts +1 -0
  297. package/.dist/esm/src/nodes/member/param.d.ts.map +1 -0
  298. package/.dist/esm/src/nodes/member/property.d.ts +1 -0
  299. package/.dist/esm/src/nodes/member/property.d.ts.map +1 -0
  300. package/.dist/esm/src/nodes/member/restParams.d.ts +1 -0
  301. package/.dist/esm/src/nodes/member/restParams.d.ts.map +1 -0
  302. package/.dist/esm/src/nodes/member/tupleMember.d.ts +1 -0
  303. package/.dist/esm/src/nodes/member/tupleMember.d.ts.map +1 -0
  304. package/.dist/esm/src/nodes/native/Iterable.d.ts +1 -0
  305. package/.dist/esm/src/nodes/native/Iterable.d.ts.map +1 -0
  306. package/.dist/esm/src/nodes/native/map.d.ts +1 -0
  307. package/.dist/esm/src/nodes/native/map.d.ts.map +1 -0
  308. package/.dist/esm/src/nodes/native/nonSerializable.d.ts +1 -0
  309. package/.dist/esm/src/nodes/native/nonSerializable.d.ts.map +1 -0
  310. package/.dist/esm/src/nodes/native/promise.d.ts +1 -0
  311. package/.dist/esm/src/nodes/native/promise.d.ts.map +1 -0
  312. package/.dist/esm/src/nodes/native/set.d.ts +1 -0
  313. package/.dist/esm/src/nodes/native/set.d.ts.map +1 -0
  314. package/.dist/esm/src/run-types-pure-fns.d.ts +1 -0
  315. package/.dist/esm/src/run-types-pure-fns.d.ts.map +1 -0
  316. package/.dist/esm/src/types.d.ts +1 -0
  317. package/.dist/esm/src/types.d.ts.map +1 -0
  318. package/index.ts +70 -0
  319. package/package.json +8 -4
  320. package/src/constants.functions.ts +196 -0
  321. package/src/constants.kind.ts +76 -0
  322. package/src/constants.ts +85 -0
  323. package/src/createRunType.ts +322 -0
  324. package/src/createRunTypeFunctions.ts +93 -0
  325. package/src/formats.runtype.ts +35 -0
  326. package/src/jitCompilers/binary/binarySPEC.md +138 -0
  327. package/src/jitCompilers/binary/binarySpec/binaryHelpers.ts +118 -0
  328. package/src/jitCompilers/binary/fromBinary.ts +493 -0
  329. package/src/jitCompilers/binary/toBinary.ts +436 -0
  330. package/src/jitCompilers/equalsHelpers.ts +62 -0
  331. package/src/jitCompilers/json/jsonSpec/jsonHelpers.ts +64 -0
  332. package/src/jitCompilers/json/stringifyJson.ts +476 -0
  333. package/src/jitCompilers/json/stringifySpec/stringifyHelpers.ts +59 -0
  334. package/src/jitCompilers/json/toJsCode.ts +182 -0
  335. package/src/jitCompilers/serialization-suite.ts +1689 -0
  336. package/src/jitCompilers/xyz-Template/fromXYZ.ts +212 -0
  337. package/src/jitCompilers/xyz-Template/toXYZ.ts +217 -0
  338. package/src/jitCompilers/xyz-Template/xyzReadme.md +6 -0
  339. package/src/jitCompilers/xyz-Template/xyzSpec/xyzHelpers.ts +66 -0
  340. package/src/lib/baseRunTypeFormat.ts +320 -0
  341. package/src/lib/baseRunTypes.ts +367 -0
  342. package/src/lib/createJitFunction.ts +87 -0
  343. package/src/lib/dkProxy.ts +47 -0
  344. package/src/lib/formats.ts +144 -0
  345. package/src/lib/guards.ts +290 -0
  346. package/src/lib/jitFnCompiler.ts +783 -0
  347. package/src/lib/jitFnsRegistry.ts +53 -0
  348. package/src/lib/typeId.ts +225 -0
  349. package/src/lib/utils.ts +402 -0
  350. package/src/mocking/constants.mock.ts +87 -0
  351. package/src/mocking/mockRegistry.ts +20 -0
  352. package/src/mocking/mockType.ts +409 -0
  353. package/src/mocking/mockUtils.ts +82 -0
  354. package/src/nodes/atomic/any.ts +22 -0
  355. package/src/nodes/atomic/bigInt.ts +26 -0
  356. package/src/nodes/atomic/boolean.ts +26 -0
  357. package/src/nodes/atomic/date.ts +26 -0
  358. package/src/nodes/atomic/enum.ts +23 -0
  359. package/src/nodes/atomic/enumMember.ts +29 -0
  360. package/src/nodes/atomic/literal.ts +125 -0
  361. package/src/nodes/atomic/never.ts +26 -0
  362. package/src/nodes/atomic/null.ts +26 -0
  363. package/src/nodes/atomic/number.ts +26 -0
  364. package/src/nodes/atomic/object.ts +20 -0
  365. package/src/nodes/atomic/regexp.ts +29 -0
  366. package/src/nodes/atomic/string.ts +20 -0
  367. package/src/nodes/atomic/symbol.ts +31 -0
  368. package/src/nodes/atomic/undefined.ts +23 -0
  369. package/src/nodes/atomic/unknown.ts +10 -0
  370. package/src/nodes/atomic/void.ts +26 -0
  371. package/src/nodes/collection/class.ts +36 -0
  372. package/src/nodes/collection/functionParams.ts +42 -0
  373. package/src/nodes/collection/interface.ts +300 -0
  374. package/src/nodes/collection/intersection.ts +30 -0
  375. package/src/nodes/collection/templateLiteral.ts +87 -0
  376. package/src/nodes/collection/tuple.ts +80 -0
  377. package/src/nodes/collection/union.ts +205 -0
  378. package/src/nodes/collection/unionDiscriminator.ts +259 -0
  379. package/src/nodes/function/function.ts +166 -0
  380. package/src/nodes/member/array.ts +150 -0
  381. package/src/nodes/member/callSignature.ts +34 -0
  382. package/src/nodes/member/genericMember.ts +63 -0
  383. package/src/nodes/member/indexProperty.ts +174 -0
  384. package/src/nodes/member/method.ts +30 -0
  385. package/src/nodes/member/methodSignature.ts +31 -0
  386. package/src/nodes/member/param.ts +22 -0
  387. package/src/nodes/member/property.ts +75 -0
  388. package/src/nodes/member/restParams.ts +22 -0
  389. package/src/nodes/member/tupleMember.ts +93 -0
  390. package/src/nodes/native/Iterable.ts +153 -0
  391. package/src/nodes/native/map.ts +91 -0
  392. package/src/nodes/native/nonSerializable.ts +42 -0
  393. package/src/nodes/native/promise.ts +43 -0
  394. package/src/nodes/native/set.ts +56 -0
  395. package/src/run-types-pure-fns.ts +116 -0
  396. package/src/types.ts +206 -0
@@ -0,0 +1,493 @@
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 {getJitUtils} from '@mionjs/core';
10
+ import {ReflectionSubKind} from '../../constants.kind.ts';
11
+ import {childIsExpression, createIfElseFn, isSafePropName, toLiteral} from '../../lib/utils.ts';
12
+ import {jitBinaryDeserializerArgs, JitFunctions} from '../../constants.functions.ts';
13
+ import {MAX_UNION_ITEMS} from '../../constants.ts';
14
+ import type {JitCode} from '../../types.ts';
15
+ import type {BaseRunType} from '../../lib/baseRunTypes.ts';
16
+ import {type BaseFnCompiler} from '../../lib/jitFnCompiler.ts';
17
+ import type {LiteralRunType} from '../../nodes/atomic/literal.ts';
18
+ import type {ArrayRunType} from '../../nodes/member/array.ts';
19
+ import type {PropertyRunType} from '../../nodes/member/property.ts';
20
+ import type {InterfaceRunType} from '../../nodes/collection/interface.ts';
21
+ import type {IndexSignatureRunType} from '../../nodes/member/indexProperty.ts';
22
+ import type {ClassRunType} from '../../nodes/collection/class.ts';
23
+ import type {TupleRunType} from '../../nodes/collection/tuple.ts';
24
+ import type {ParameterRunType} from '../../nodes/member/param.ts';
25
+ import type {RestParamsRunType} from '../../nodes/member/restParams.ts';
26
+ import type {UnionRunType} from '../../nodes/collection/union.ts';
27
+ import type {IterableRunType} from '../../nodes/native/Iterable.ts';
28
+ import type {MapRunType} from '../../nodes/native/map.ts';
29
+
30
+ type BinaryCompiler = BaseFnCompiler<typeof jitBinaryDeserializerArgs, typeof JitFunctions.fromBinary.id>;
31
+
32
+ const fnID = JitFunctions.fromBinary.id;
33
+
34
+ /**
35
+ * Main Binary deserialization compiler function
36
+ * Generates JIT code to deserialize Binary data to JavaScript values
37
+ */
38
+ export function emitFromBinary(runType: BaseRunType, comp: BinaryCompiler): JitCode {
39
+ const src = runType.src;
40
+ const kind = src.kind;
41
+ const dεs = comp.args.dεs;
42
+
43
+ // hack is used in some case to increase the index passing an extra argument to view.get methods
44
+ // ie: view.getUint32(index, littleEndian, index += 4);
45
+ // getUint32 only accepts 2 arguments, but we use the 3rd one to increase the index on a single statement so code can be used as an expression
46
+
47
+ switch (kind) {
48
+ // ###################### ATOMIC TYPES ######################
49
+ case ReflectionKind.unknown:
50
+ case ReflectionKind.any: {
51
+ // any is deserialized from json string
52
+ return {code: `JSON.parse(${dεs}.desString())`, type: 'E'};
53
+ }
54
+ case ReflectionKind.null:
55
+ return {code: `(${dεs}.index++, null)`, type: 'E'};
56
+ case ReflectionKind.boolean:
57
+ return {code: `${dεs}.view.getUint8(${dεs}.index++) === 1`, type: 'E'};
58
+ case ReflectionKind.number: {
59
+ return {code: `${dεs}.view.getFloat64(${dεs}.index, 1, (${dεs}.index += 8))`, type: 'E'};
60
+ }
61
+ case ReflectionKind.string: {
62
+ return {code: `${dεs}.desString()`, type: 'E'};
63
+ }
64
+ case ReflectionKind.bigint: {
65
+ return {code: `BigInt(${dεs}.desString(true))`, type: 'E'};
66
+ }
67
+ case ReflectionKind.undefined:
68
+ case ReflectionKind.void:
69
+ return {code: `(${dεs}.index++, undefined)`, type: 'E'};
70
+ case ReflectionKind.symbol: {
71
+ return {code: `Symbol(${dεs}.desString() || undefined)`, type: 'E'};
72
+ }
73
+ case ReflectionKind.regexp: {
74
+ return {code: `new RegExp(${dεs}.desString(), ${dεs}.desString())`, type: 'E'};
75
+ }
76
+ case ReflectionKind.object:
77
+ // similar to any, this is deserialized as json string
78
+ return {code: `JSON.parse(${dεs}.desString())`, type: 'E'};
79
+ case ReflectionKind.enum: {
80
+ return {code: `${dεs}.desEnum()`, type: 'E'};
81
+ }
82
+ case ReflectionKind.enumMember:
83
+ throw new Error('Binary deserialization not supported for enum member types');
84
+ case ReflectionKind.never:
85
+ throw new Error('Never type cannot be deserialized from Binary');
86
+ case ReflectionKind.templateLiteral:
87
+ // runtime value is a plain string
88
+ return {code: `${dεs}.desString()`, type: 'E'};
89
+ case ReflectionKind.literal: {
90
+ if (comp.opts.noLiterals) {
91
+ const lit = (runType as LiteralRunType).src.literal;
92
+ if (lit instanceof RegExp) return emitFromBinaryAs(runType, comp, ReflectionKind.regexp);
93
+ switch (typeof lit) {
94
+ case 'string':
95
+ return emitFromBinaryAs(runType, comp, ReflectionKind.string);
96
+ case 'number':
97
+ return emitFromBinaryAs(runType, comp, ReflectionKind.number);
98
+ case 'boolean':
99
+ return emitFromBinaryAs(runType, comp, ReflectionKind.boolean);
100
+ case 'bigint':
101
+ return emitFromBinaryAs(runType, comp, ReflectionKind.bigint);
102
+ case 'symbol':
103
+ return emitFromBinaryAs(runType, comp, ReflectionKind.symbol);
104
+ default:
105
+ throw new Error(`Unsupported literal type ${typeof lit}`);
106
+ }
107
+ }
108
+ return {code: toLiteral((runType as LiteralRunType).src.literal), type: 'E'};
109
+ }
110
+
111
+ // ###################### MEMBER RUNTYPES ######################
112
+ // Types that represent members of collections or other structures
113
+ case ReflectionKind.rest: // rest params are deserialized as array but start at rest item index
114
+ case ReflectionKind.array: {
115
+ const rt = runType as ArrayRunType | RestParamsRunType;
116
+ rt.checkNonSkipTypes(comp);
117
+ const child = rt.getMemberType()!;
118
+ const childCode = comp.compile(child, 'S', fnID);
119
+ if (!childCode?.code) throw new Error(`Do not know how to deserialize Array<${child.getTypeName()}> from Binary.`);
120
+ const isRest = rt.src.kind === ReflectionKind.rest;
121
+ const index = rt.getChildVarName(comp);
122
+ const isExpression = childIsExpression(childCode, child);
123
+ const code = isExpression ? `${comp.getChildVλl()} = ${childCode.code};` : childCode.code;
124
+ // deserialized from [length, items...]
125
+ const lengthVal = comp.getLocalVarName('arrL', rt);
126
+ const arrayInit = isRest ? '' : `${comp.vλl} = new Array(${lengthVal})`; // res array already initialized in parent
127
+ return {
128
+ code: `
129
+ const ${lengthVal} = ${dεs}.view.getUint32(${dεs}.index, 1); ${dεs}.index += 4; ${arrayInit};
130
+ for (let ${index} = ${rt.startIndex(comp)}; ${index} < ${lengthVal}; ${index}++) {${code}}
131
+ `,
132
+ type: 'S',
133
+ };
134
+ }
135
+
136
+ case ReflectionKind.indexSignature: {
137
+ const rt = runType as IndexSignatureRunType;
138
+ const indexKind = (rt.src as any).index?.kind;
139
+ const memberCode = comp.compile(rt.getJitChild(comp), 'S', fnID);
140
+ if (!memberCode?.code) return {code: undefined, type: 'E'};
141
+
142
+ const prop = rt.getChildVarName(comp);
143
+ const countVar = comp.getLocalVarName('cnt', rt);
144
+ const indexVar = comp.getLocalVarName('propI', rt);
145
+
146
+ // Deserialize key based on index type
147
+ let keyDeserializationCode: string;
148
+ if (indexKind === ReflectionKind.number) {
149
+ // For number indices, deserialize as uint32
150
+ keyDeserializationCode = `const ${prop} = ${dεs}.view.getUint32(${dεs}.index, 1); ${dεs}.index += 4;`;
151
+ } else {
152
+ // For string indices, deserialize as string with prototype pollution protection
153
+ keyDeserializationCode = `const ${prop} = ${dεs}.desSafePropName();`;
154
+ }
155
+
156
+ const memberInit = memberCode.type === 'E' ? `${comp.vλl}[${prop}] = ${memberCode.code};` : memberCode.code;
157
+ const deserializeCode = `for (let ${indexVar} = 0; ${indexVar} < ${countVar}; ${indexVar}++) {${keyDeserializationCode}${memberInit}}`;
158
+
159
+ return {
160
+ code: `const ${countVar} = ${dεs}.view.getUint32(${dεs}.index, 1); ${dεs}.index += 4; ${comp.vλl} = {}; ${deserializeCode}`,
161
+ type: 'S',
162
+ };
163
+ }
164
+
165
+ case ReflectionKind.function:
166
+ case ReflectionKind.method:
167
+ case ReflectionKind.methodSignature:
168
+ case ReflectionKind.callSignature:
169
+ if (runType.src.subKind === ReflectionSubKind.params) {
170
+ return emitFromBinaryAs(runType, comp, ReflectionKind.tuple);
171
+ } else {
172
+ throw new Error(
173
+ 'Binary deserialization not supported for functions, call compileParams or compileReturn instead.'
174
+ );
175
+ }
176
+
177
+ case ReflectionKind.parameter: {
178
+ const rt = runType as ParameterRunType;
179
+ switch (src.subKind) {
180
+ case ReflectionSubKind.mapKey:
181
+ case ReflectionSubKind.mapValue:
182
+ case ReflectionSubKind.setItem: {
183
+ const child = rt.getJitChild(comp);
184
+ const childJit = comp.compile(child, 'S', fnID);
185
+ if (!childJit?.code || !child)
186
+ throw new Error(`Do not know how to deserialize ${rt.getTypeName()} from Binary.`);
187
+ const parent = rt.getParent()!;
188
+ const parentVλl = parent.getCustomVλl(comp)?.vλl || comp.vλl;
189
+ const vλl = rt.getCustomVλl(comp)?.vλl;
190
+ const isExpression = childIsExpression(childJit, child);
191
+ const code = isExpression ? `const ${vλl} = ${childJit.code};` : childJit.code || '';
192
+ let setOperation = '';
193
+ switch (rt.src.subKind) {
194
+ case ReflectionSubKind.mapKey:
195
+ break; // we set map item once we have the key and value
196
+ case ReflectionSubKind.mapValue: {
197
+ const mapKey = (parent as MapRunType).getMapKeyVλl(comp); // not the best solution but works
198
+ setOperation = `${parentVλl}.set(${mapKey}, ${vλl})`;
199
+ break;
200
+ }
201
+ case ReflectionSubKind.setItem:
202
+ setOperation = `${parentVλl}.add(${vλl})`;
203
+ break;
204
+ }
205
+ return {code: `${code}; ${setOperation};`, type: 'S'};
206
+ }
207
+ default:
208
+ return emitFromBinaryAs(runType, comp, ReflectionKind.tupleMember);
209
+ }
210
+ }
211
+
212
+ case ReflectionKind.property:
213
+ case ReflectionKind.propertySignature: {
214
+ const rt = runType as PropertyRunType;
215
+ const parent = rt.getParent() as InterfaceRunType;
216
+ const child = rt.getJitChild(comp)!;
217
+ const childJit = comp.compile(child, 'S', fnID);
218
+ if (rt.isOptional()) {
219
+ const {bitMIndexVar, bitIndex} = getOptionalBitmapItems(parent, comp, 0, rt.optionalIndex, false);
220
+ const initCode = childJit.type === 'E' ? `${comp.getChildVλl()} = ${childJit.code};` : childJit.code;
221
+ return {
222
+ code: `if (${dεs}.view.getUint8(${bitMIndexVar}, 1) & (1 << (${bitIndex}))) {${initCode}}`,
223
+ type: 'S',
224
+ };
225
+ }
226
+ // block or statements code are initialized as obj.a = deserializeA; obj.b = deserializeB; after initial object has been created
227
+ const isExpression = childIsExpression(childJit, child);
228
+ if (!isExpression) {
229
+ return childJit; // block statements already include variable assignment
230
+ }
231
+ // required props that are simple expressions code are part of an object constructor {a: deserializeA, b: deserializeB, c: deserializeC}
232
+ const propName = getPropName(rt, comp, true);
233
+ return {code: `${propName}:${childJit?.code}`, type: 'E'};
234
+ }
235
+
236
+ case ReflectionKind.tupleMember: {
237
+ const rt = runType as ParameterRunType;
238
+ const childJit = comp.compile(rt.getJitChild(comp), 'S', fnID);
239
+ const nullJIt = emitFromBinaryAs(rt, comp, ReflectionKind.undefined);
240
+ const itemJit = childJit?.code ? childJit : nullJIt; // if child is not serializable, we serialize null as need to fill the space in the tuple
241
+ const initCode = itemJit.type === 'E' ? `${comp.getChildVλl()} = ${itemJit.code}` : itemJit.code;
242
+ if (rt.isRest()) return itemJit;
243
+ // Optional handling uses bitmap set at tuple level
244
+ const optionalIndex = (rt as any).optionalIndex;
245
+ const bitMIndexVar = (rt as any)._bitmapVar;
246
+ const isFnParam = (rt as any)._isFnParam;
247
+ // Treat as optional if either isOptional() is true OR it's a function param (all fn params are optional in binary)
248
+ const isOptional = rt.isOptional() || isFnParam;
249
+ if (isOptional && optionalIndex !== undefined && bitMIndexVar) {
250
+ const bitIndex = optionalIndex & 7; // equivalent to optionalIndex % 8
251
+ const code = `if (${dεs}.view.getUint8(${bitMIndexVar}, 1) & (1 << (${bitIndex}))) {${initCode}}`;
252
+ return {code, type: 'S'};
253
+ }
254
+ return {code: initCode, type: 'S'};
255
+ }
256
+ case ReflectionKind.promise:
257
+ throw new Error('Jit compilation disabled for Non Serializable types.');
258
+
259
+ // ###################### COLLECTION RUNTYPES ######################
260
+ // Types that contain other types as members
261
+ case ReflectionKind.objectLiteral:
262
+ case ReflectionKind.intersection: {
263
+ const rt = runType as InterfaceRunType;
264
+ if (rt.isCallable()) return comp.compile(rt.getCallSignature(), 'S', fnID);
265
+ if (runType.src.subKind === ReflectionSubKind.nonSerializable) {
266
+ throw new Error('Binary deserialization is disabled for Non Serializable types');
267
+ } else {
268
+ const {required, optional, indexSignatures} = rt.splitJitSplitChildren(comp);
269
+ if (indexSignatures.length) {
270
+ return comp.compile(indexSignatures[0], 'S', fnID); // index signature code already contains the loop
271
+ }
272
+
273
+ // required props that are simple expressions are restored as: '{a: deserializeA, b: deserializeB, c: deserializeC};
274
+ // and are serialized/deserialised in the same order they are declared in the type
275
+ const requiredItemsJit = required.map((prop) => comp.compile(prop, 'S', fnID));
276
+ const expressionItemsJit = requiredItemsJit
277
+ .filter((childJit, i) => childIsExpression(childJit, required[i]))
278
+ .map((prop) => prop.code)
279
+ .filter(Boolean);
280
+ const statementItemsCode = requiredItemsJit
281
+ .filter(Boolean)
282
+ .filter((childJit, i) => !childIsExpression(childJit, required[i]))
283
+ .map((prop) => prop.code);
284
+ const expressionsPropsCode = expressionItemsJit.join(',');
285
+ const requiredPropsCode = statementItemsCode.join(';');
286
+
287
+ // optional props are initialized as obj.a = deserializeA; obj.b = deserializeB; obj.c = deserializeC;
288
+ // bitmap is used to determine which optional props are present
289
+ // header format: [bitmap, optional props]
290
+ let optionalPropsCode = '';
291
+ if (optional.length) {
292
+ // optional properties are restored using a loop
293
+ const {bitMapInit, bitMIndexVar} = getOptionalBitmapItems(rt, comp, optional.length, 0, false);
294
+ const propsCode = optional
295
+ .map((prop, i) => {
296
+ prop.optionalIndex = i;
297
+ const modIndex = i + 1;
298
+ const shouldIncreaseBufferIndex = modIndex % 8 === 0;
299
+ const propCode = comp.compile(prop, 'S', fnID).code;
300
+ if (!shouldIncreaseBufferIndex) return propCode;
301
+ // every 8 props we need to increase the bitmap index
302
+ return `${propCode} ${bitMIndexVar}++; `;
303
+ })
304
+ .filter(Boolean)
305
+ .join('');
306
+ const sep = requiredPropsCode ? ';' : '';
307
+ optionalPropsCode = `${sep}\n${bitMapInit}\n${propsCode}`;
308
+ }
309
+
310
+ const canBeExpression = !requiredPropsCode && !optionalPropsCode;
311
+ if (canBeExpression) return {code: `{${expressionsPropsCode}}`, type: 'E'};
312
+ return {code: `${comp.vλl} = {${expressionsPropsCode}}\n${requiredPropsCode}${optionalPropsCode}`, type: 'S'};
313
+ }
314
+ }
315
+ case ReflectionKind.class:
316
+ switch (runType.src.subKind) {
317
+ case ReflectionSubKind.date:
318
+ return {code: `new Date(${dεs}.view.getFloat64(${dεs}.index, 1, (${dεs}.index += 8)))`, type: 'E'};
319
+ case ReflectionSubKind.map:
320
+ case ReflectionSubKind.set: {
321
+ const rt = runType as IterableRunType;
322
+ const children = rt.getJitChildren(comp);
323
+ const vλl = rt.getCustomVλl(comp)?.vλl || comp.vλl;
324
+ const initCode = `const ${vλl} = new ${rt.constructorName}()`;
325
+ if (!children.length) return {code: `new ${rt.constructorName}()`, type: 'E'};
326
+ const childrenCode = children
327
+ .map((c) => comp.compile(c, 'S', fnID).code)
328
+ .filter(Boolean)
329
+ .join(';');
330
+ if (!childrenCode) return {code: initCode, type: 'E'};
331
+ const index = comp.getLocalVarName('itI', rt);
332
+ const lengthVar = comp.getLocalVarName('itL', rt);
333
+ const readLength = `const ${lengthVar} = ${dεs}.view.getUint32(${dεs}.index, 1); ${dεs}.index += 4`;
334
+ return {
335
+ code: `${initCode}; ${readLength}; for (let ${index} = 0; ${index} < ${lengthVar}; ${index}++) {${childrenCode}} ${comp.vλl} = ${vλl};`,
336
+ type: 'S',
337
+ };
338
+ }
339
+ case ReflectionSubKind.nonSerializable:
340
+ throw new Error('Binary deserialization disabled for Non Serializable types');
341
+ default: {
342
+ const rt = runType as ClassRunType;
343
+ if (rt.isCallable()) {
344
+ const callSignature = rt.getCallSignature();
345
+ if (callSignature) return comp.compile(callSignature, 'S', fnID);
346
+ }
347
+ const originalKind = rt.src.kind;
348
+ (runType.src as any).kind = ReflectionKind.objectLiteral;
349
+ const plainObjCode = emitFromBinary(rt, comp);
350
+ (runType.src as any).kind = originalKind;
351
+ const desFnVarName = comp.getLocalVarName('desFn', rt);
352
+ const desFnInit = `let ${desFnVarName} = utl.${getJitUtils().getDeserializeFn.name}(${toLiteral(rt.getClassName())})`;
353
+ const desFnCode = `if (${desFnVarName}) {${comp.vλl} = ${desFnVarName}(${comp.vλl})}`;
354
+ const desClassCode = `else if (${desFnVarName} = utl.${getJitUtils().getSerializeClass.name}(${toLiteral(rt.getClassName())})) {${comp.vλl} = new ${desFnVarName}(${comp.vλl})}`;
355
+ const initCode = plainObjCode.type === 'E' ? `${comp.vλl} = ${plainObjCode.code}` : plainObjCode.code;
356
+ return {code: `${initCode};${desFnInit};${desFnCode} ${desClassCode}`, type: 'S'};
357
+ }
358
+ }
359
+ break;
360
+
361
+ case ReflectionKind.infer:
362
+ throw new Error('Infer is not supported in Binary deserialization');
363
+
364
+ case ReflectionKind.tuple: {
365
+ const rt = runType as TupleRunType;
366
+ const skip = rt.skipJit(comp);
367
+ if (skip) return {code: undefined, type: 'S'};
368
+ const params = rt.getParamRunTypes(comp);
369
+
370
+ // For function params, all params are treated as optional in binary serialization
371
+ // This allows sending null/undefined values over the wire even if the type is not optional
372
+ const isFnParams = runType.src.subKind === ReflectionSubKind.params;
373
+
374
+ // For function params, all params are optional so we can't use fixed size
375
+ const hasFixedSize = !isFnParams && params.every((p) => !p.isOptional() && !p.isRest());
376
+ const initTuple = hasFixedSize ? `${comp.vλl} = new Array(${params.length});` : `${comp.vλl} = [];`;
377
+ if (params.length === 0) return {code: initTuple, type: 'S'};
378
+
379
+ // Split params into required, optional, and rest
380
+ // For function params, all non-rest params are treated as optional
381
+ const required = isFnParams ? [] : params.filter((p) => !p.isOptional() && !p.isRest());
382
+ const optional = isFnParams ? params.filter((p) => !p.isRest()) : params.filter((p) => p.isOptional() && !p.isRest());
383
+ const rest = params.filter((p) => p.isRest());
384
+
385
+ // Deserialize required params first
386
+ const requiredCode = required.map((p) => comp.compile(p, 'S', fnID).code || '').join(';');
387
+
388
+ // Deserialize optional params with bitmap (groups of 8)
389
+ let optionalCode = '';
390
+ if (optional.length) {
391
+ const {bitMapInit, bitMIndexVar} = getOptionalBitmapItems(rt, comp, optional.length, 0, true);
392
+ const optionalParamsCode = optional
393
+ .map((p, i) => {
394
+ (p as any).optionalIndex = i; // set optionalIndex for use in tupleMember case
395
+ (p as any)._bitmapVar = bitMIndexVar; // pass bitmap variable name to tupleMember case
396
+ (p as any)._isFnParam = isFnParams; // flag to indicate this is a function param
397
+ const paramCode = comp.compile(p, 'S', fnID).code || '';
398
+ const modIndex = i + 1;
399
+ const shouldIncreaseBufferIndex = modIndex % 8 === 0 && modIndex < optional.length;
400
+ const increaseIndex = shouldIncreaseBufferIndex ? `${bitMIndexVar}++;` : '';
401
+ return `${paramCode} ${increaseIndex}`;
402
+ })
403
+ .join('');
404
+ optionalCode = `${bitMapInit}\n${optionalParamsCode}`;
405
+ }
406
+
407
+ // Deserialize rest params (handled as array by the rest param itself)
408
+ const restCode = rest.map((p) => comp.compile(p, 'S', fnID).code || '').join(';');
409
+
410
+ const allCode = [requiredCode, optionalCode, restCode].filter(Boolean).join(';');
411
+ return {code: `${initTuple}${allCode}`, type: 'S'};
412
+ }
413
+ case ReflectionKind.typeParameter:
414
+ throw new Error('Type parameter not implemented in Binary deserialization');
415
+
416
+ case ReflectionKind.union: {
417
+ const rt = runType as UnionRunType;
418
+ rt.checkAllowedChildren(comp);
419
+ const decVar = comp.getLocalVarName('dec', rt);
420
+ const errVarName = comp.getLocalVarName('uErr', rt);
421
+ comp.setContextItem(errVarName, `const ${errVarName} = "Can not binary decode union: invalid union index"`);
422
+ const children = rt.getJitChildren(comp);
423
+ if (children.length > MAX_UNION_ITEMS) {
424
+ throw new Error(
425
+ `Binary deserialization not supported for Union with more than ${MAX_UNION_ITEMS} items.` +
426
+ ` Found ${children.length} in ${rt.getUnionTypeNames()}`
427
+ );
428
+ }
429
+ const maxIndex = children.length - 1;
430
+ const isUint16 = maxIndex > 255;
431
+ const readIndex = isUint16
432
+ ? `const ${decVar} = ${dεs}.view.getUint16(${dεs}.index, 1); ${dεs}.index += 2;`
433
+ : `const ${decVar} = ${dεs}.view.getUint8(${dεs}.index++);`;
434
+ const ifElse = createIfElseFn();
435
+ const itemsCode = children
436
+ .map((unionItem) => {
437
+ const childJit = comp.compile(unionItem, 'S', fnID);
438
+ const isExpression = childIsExpression(childJit, unionItem);
439
+ const code =
440
+ isExpression && childJit.code && childJit.code !== comp.vλl
441
+ ? `${comp.vλl} = ${childJit.code}`
442
+ : childJit.code || '';
443
+ const index = rt.getUnionItemIndex(comp, unionItem);
444
+ return `${ifElse()} (${decVar} === ${index}) {${code || '/*noop*/'}}`;
445
+ })
446
+ .filter(Boolean);
447
+ const childrenCode = itemsCode.join('');
448
+ const failCode = childrenCode ? `else {throw new Error(${errVarName})}` : '';
449
+ const code = `
450
+ ${readIndex}
451
+ ${childrenCode}
452
+ ${failCode}
453
+ `;
454
+ return {code, type: 'S'};
455
+ }
456
+
457
+ default:
458
+ throw new Error(`Binary deserialization not supported for ${ReflectionKind[kind]} types`);
459
+ }
460
+ throw new Error(`Do not know how to deserialize ${runType.getTypeName()} from Binary.`);
461
+ }
462
+
463
+ function getPropName(rt: PropertyRunType, comp: BinaryCompiler, isObjectConstructor: boolean): string | number {
464
+ const isSafe = isSafePropName(rt.src.name);
465
+ if (isObjectConstructor) return isSafe ? rt.getChildVarName(comp) : rt.getChildLiteral(comp);
466
+ return isSafe ? `.${rt.getChildVarName(comp)}` : `[${rt.getChildLiteral(comp)}]`;
467
+ }
468
+
469
+ /** Generates bitmap reading code for optional properties/params. Uses 1 bit per optional item (8 items per byte). */
470
+ function getOptionalBitmapItems(
471
+ rt: InterfaceRunType | TupleRunType,
472
+ comp: BinaryCompiler,
473
+ optionalLength = 0,
474
+ currentIndex = 0,
475
+ isTuple = false
476
+ ) {
477
+ const dεs = comp.args.dεs;
478
+ const prefix = isTuple ? 't' : '';
479
+ const bitMIndexVar = comp.getLocalVarName(`${prefix}bimI`, rt); // index of the bitmap
480
+ const bitmapLength = Math.ceil(optionalLength / 8);
481
+ const bitIndex = `${currentIndex} & 7`; // equivalent to index % 8
482
+ // bitmap for present optional items
483
+ const bitMapInit = `${bitmapLength > 1 ? 'let ' : 'const'} ${bitMIndexVar} = ${dεs}.index; ${dεs}.index += ${bitmapLength};`;
484
+ return {bitMIndexVar, bitmapLength, bitIndex, bitMapInit};
485
+ }
486
+
487
+ function emitFromBinaryAs(rt: BaseRunType, comp: BinaryCompiler, kind: ReflectionKind): JitCode {
488
+ const originalKind = rt.src.kind;
489
+ (rt.src as any).kind = kind;
490
+ const result = emitFromBinary(rt, comp);
491
+ (rt.src as any).kind = originalKind;
492
+ return result;
493
+ }