@moqtap/codec 0.2.3 → 0.4.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 (313) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +100 -99
  3. package/dist/{chunk-RZHAPEXO.js → chunk-2A57DRXV.js} +36 -10
  4. package/dist/{chunk-73MWUKSJ.js → chunk-2UTVXWFF.js} +190 -102
  5. package/dist/{chunk-JTVCOMBI.cjs → chunk-3XKO6PCR.cjs} +290 -183
  6. package/dist/{chunk-ACQ4CUJP.cjs → chunk-4BDEU3D4.cjs} +237 -158
  7. package/dist/{chunk-4N4INRE7.cjs → chunk-4HBKHNU2.cjs} +144 -110
  8. package/dist/{chunk-2ZT6CVSE.js → chunk-4IVZZOY3.js} +269 -162
  9. package/dist/{chunk-GLBQDG4L.cjs → chunk-5O764MBD.cjs} +508 -117
  10. package/dist/chunk-7KBAWOBA.js +1212 -0
  11. package/dist/{chunk-JSQM2MG3.js → chunk-7QOPNSDF.js} +44 -12
  12. package/dist/{chunk-SYHW3FLI.cjs → chunk-7RE6KSIY.cjs} +28 -8
  13. package/dist/{chunk-YG5KJESI.js → chunk-AY6IAHUM.js} +28 -8
  14. package/dist/{chunk-EFM5T7OM.js → chunk-BLQDWOSG.js} +36 -10
  15. package/dist/{chunk-UYXTY6ZQ.cjs → chunk-E65QKRSN.cjs} +20 -12
  16. package/dist/{chunk-BISI45MN.cjs → chunk-EAHE3IOG.cjs} +44 -12
  17. package/dist/{chunk-PZBPH2D7.js → chunk-GCBFHZW6.js} +216 -137
  18. package/dist/{chunk-GXEW4COZ.cjs → chunk-H5NSL4MO.cjs} +36 -10
  19. package/dist/chunk-HZHSO7EW.cjs +1212 -0
  20. package/dist/{chunk-KZCYQ7ED.cjs → chunk-IILNSDEQ.cjs} +69 -41
  21. package/dist/{chunk-4XYGE53S.cjs → chunk-J3XCPBW3.cjs} +36 -10
  22. package/dist/{chunk-6AEHWULA.cjs → chunk-JKOEJZ5B.cjs} +28 -8
  23. package/dist/{chunk-RUPCJTC3.cjs → chunk-JL3NEW3O.cjs} +23 -1
  24. package/dist/{chunk-G7GI7LJA.js → chunk-LORZMJJB.js} +36 -10
  25. package/dist/{chunk-DUBCL3WF.cjs → chunk-LV5C6MEC.cjs} +36 -10
  26. package/dist/{chunk-ENURAVHI.cjs → chunk-MYXAD5JC.cjs} +44 -12
  27. package/dist/{chunk-FXZ2MYKJ.js → chunk-MZ7HUCGJ.js} +20 -12
  28. package/dist/{chunk-S74DWJE2.cjs → chunk-OKG2HT25.cjs} +277 -88
  29. package/dist/{chunk-BGWGVINJ.cjs → chunk-PKEOQSSZ.cjs} +144 -110
  30. package/dist/{chunk-2GODRVT5.js → chunk-Q46ZURKX.js} +325 -48
  31. package/dist/{chunk-UR6JKS56.js → chunk-Q7IGWV3P.js} +41 -9
  32. package/dist/{chunk-XSNX2IUJ.js → chunk-RW4UG7CN.js} +121 -87
  33. package/dist/{chunk-DWK5ZQZ4.js → chunk-RZTLQAKF.js} +28 -8
  34. package/dist/{chunk-UNS34PTA.cjs → chunk-S6IPIN66.cjs} +44 -12
  35. package/dist/{chunk-YIG2C3LF.cjs → chunk-SDWRXXOO.cjs} +214 -126
  36. package/dist/{chunk-CEH7ESNC.js → chunk-SHMA4PBY.js} +121 -87
  37. package/dist/{chunk-MC7W6PMI.js → chunk-U3ZVLT5L.js} +483 -135
  38. package/dist/{chunk-VJUUZ4W2.cjs → chunk-UJU63EFY.cjs} +374 -97
  39. package/dist/{chunk-7L43FE6P.js → chunk-VOU7PNHI.js} +23 -1
  40. package/dist/{chunk-E6E3NQYU.js → chunk-WRHGCVYN.js} +44 -12
  41. package/dist/{chunk-FPISPJ5N.cjs → chunk-XNWYLVGU.cjs} +529 -181
  42. package/dist/{chunk-U3IPZYPX.js → chunk-XS77RBY7.js} +228 -39
  43. package/dist/{chunk-JGG7CMSZ.cjs → chunk-XZE5R57R.cjs} +144 -110
  44. package/dist/{chunk-77MNXX3M.js → chunk-Y6KCSM3V.js} +121 -87
  45. package/dist/{chunk-TLYNOOQP.cjs → chunk-YTPZZI2M.cjs} +41 -9
  46. package/dist/{chunk-7DUBLRXC.js → chunk-YWRCSQBA.js} +44 -12
  47. package/dist/{chunk-MRJWLGYH.js → chunk-Z3VKP3PJ.js} +69 -41
  48. package/dist/{chunk-E6P74GDT.js → chunk-Z6U26IRI.js} +464 -73
  49. package/dist/{codec-FvGCxIhr.d.ts → codec-25u4_1HS.d.ts} +4 -4
  50. package/dist/{codec-DRcsBCsb.d.ts → codec-3Ppy_5Gd.d.ts} +4 -4
  51. package/dist/{codec-BdVMRMOI.d.ts → codec-BB0U8MF2.d.cts} +4 -4
  52. package/dist/{codec-B2cH-f5V.d.cts → codec-BHHfBTnV.d.ts} +4 -4
  53. package/dist/{codec-B5K73Bdj.d.ts → codec-BN6jk0Td.d.cts} +4 -4
  54. package/dist/{codec-R8GrCPt2.d.ts → codec-BU0gaSZm.d.ts} +4 -4
  55. package/dist/{codec-Bq-tLtfP.d.ts → codec-C-Yk2RNa.d.ts} +4 -4
  56. package/dist/codec-CFWQY9Lj.d.cts +18 -0
  57. package/dist/{codec-CPlK3Pi5.d.ts → codec-COy4uuPO.d.cts} +4 -4
  58. package/dist/codec-CewFCsEy.d.ts +18 -0
  59. package/dist/{codec-KXHvXZVb.d.cts → codec-Ck7ZwFF1.d.cts} +4 -4
  60. package/dist/{codec-DZhZSIii.d.cts → codec-D2QVSH9D.d.ts} +4 -4
  61. package/dist/{codec-BwFgpeQu.d.ts → codec-DDUBJGn0.d.cts} +4 -4
  62. package/dist/{codec-BFeliJFc.d.ts → codec-DNfml-se.d.ts} +4 -4
  63. package/dist/{codec-C4n1PS09.d.cts → codec-DoOGjjDq.d.cts} +4 -4
  64. package/dist/{codec-Bap882Fh.d.cts → codec-J7ekOSMc.d.ts} +4 -4
  65. package/dist/{codec-SKBeHQk7.d.ts → codec-R9TJCq-E.d.cts} +4 -4
  66. package/dist/{codec-DNUIgLqc.d.cts → codec-ZwV-Njt6.d.ts} +4 -4
  67. package/dist/{codec-HgBgHkFI.d.cts → codec-j819z_hL.d.cts} +4 -4
  68. package/dist/{codec-DY4QH364.d.cts → codec-w8z2j_uo.d.cts} +4 -4
  69. package/dist/{codec-CPvPq0sb.d.cts → codec-wtt6WF1K.d.ts} +4 -4
  70. package/dist/{codec-BUMjz0J4.d.cts → codec-z6_2PSzi.d.cts} +4 -4
  71. package/dist/{draft7-session.cjs → draft07-session.cjs} +2 -2
  72. package/dist/draft07-session.d.cts +8 -0
  73. package/dist/draft07-session.d.ts +8 -0
  74. package/dist/{draft7-session.js → draft07-session.js} +1 -1
  75. package/dist/draft07.cjs +129 -0
  76. package/dist/draft07.d.cts +67 -0
  77. package/dist/draft07.d.ts +67 -0
  78. package/dist/draft07.js +129 -0
  79. package/dist/draft08-session.cjs +6 -0
  80. package/dist/draft08-session.d.cts +8 -0
  81. package/dist/draft08-session.d.ts +8 -0
  82. package/dist/{draft8-session.js → draft08-session.js} +1 -1
  83. package/dist/draft08.cjs +119 -0
  84. package/dist/{draft8.d.cts → draft08.d.cts} +15 -13
  85. package/dist/{draft8.d.ts → draft08.d.ts} +15 -13
  86. package/dist/{draft8.js → draft08.js} +7 -4
  87. package/dist/draft09-session.cjs +6 -0
  88. package/dist/draft09-session.d.cts +8 -0
  89. package/dist/draft09-session.d.ts +8 -0
  90. package/dist/{draft9-session.js → draft09-session.js} +1 -1
  91. package/dist/draft09.cjs +119 -0
  92. package/dist/{draft9.d.cts → draft09.d.cts} +15 -13
  93. package/dist/{draft9.d.ts → draft09.d.ts} +15 -13
  94. package/dist/{draft9.js → draft09.js} +7 -4
  95. package/dist/draft10-session.cjs +2 -2
  96. package/dist/draft10-session.d.cts +6 -6
  97. package/dist/draft10-session.d.ts +6 -6
  98. package/dist/draft10-session.js +1 -1
  99. package/dist/draft10.cjs +8 -5
  100. package/dist/draft10.d.cts +14 -12
  101. package/dist/draft10.d.ts +14 -12
  102. package/dist/draft10.js +16 -13
  103. package/dist/draft11-session.cjs +2 -2
  104. package/dist/draft11-session.d.cts +6 -6
  105. package/dist/draft11-session.d.ts +6 -6
  106. package/dist/draft11-session.js +1 -1
  107. package/dist/draft11.cjs +8 -5
  108. package/dist/draft11.d.cts +14 -12
  109. package/dist/draft11.d.ts +14 -12
  110. package/dist/draft11.js +16 -13
  111. package/dist/draft12-session.cjs +2 -2
  112. package/dist/draft12-session.d.cts +6 -6
  113. package/dist/draft12-session.d.ts +6 -6
  114. package/dist/draft12-session.js +1 -1
  115. package/dist/draft12.cjs +8 -5
  116. package/dist/draft12.d.cts +16 -14
  117. package/dist/draft12.d.ts +16 -14
  118. package/dist/draft12.js +16 -13
  119. package/dist/draft13-session.cjs +2 -2
  120. package/dist/draft13-session.d.cts +6 -6
  121. package/dist/draft13-session.d.ts +6 -6
  122. package/dist/draft13-session.js +1 -1
  123. package/dist/draft13.cjs +8 -5
  124. package/dist/draft13.d.cts +16 -14
  125. package/dist/draft13.d.ts +16 -14
  126. package/dist/draft13.js +16 -13
  127. package/dist/draft14-session.cjs +2 -2
  128. package/dist/draft14-session.d.cts +6 -6
  129. package/dist/draft14-session.d.ts +6 -6
  130. package/dist/draft14-session.js +1 -1
  131. package/dist/draft14.cjs +14 -5
  132. package/dist/draft14.d.cts +14 -12
  133. package/dist/draft14.d.ts +14 -12
  134. package/dist/draft14.js +13 -4
  135. package/dist/draft15-session.cjs +2 -2
  136. package/dist/draft15-session.d.cts +6 -6
  137. package/dist/draft15-session.d.ts +6 -6
  138. package/dist/draft15-session.js +1 -1
  139. package/dist/draft15.cjs +8 -5
  140. package/dist/draft15.d.cts +14 -12
  141. package/dist/draft15.d.ts +14 -12
  142. package/dist/draft15.js +16 -13
  143. package/dist/draft16-session.cjs +2 -2
  144. package/dist/draft16-session.d.cts +6 -6
  145. package/dist/draft16-session.d.ts +6 -6
  146. package/dist/draft16-session.js +1 -1
  147. package/dist/draft16.cjs +8 -5
  148. package/dist/draft16.d.cts +14 -12
  149. package/dist/draft16.d.ts +14 -12
  150. package/dist/draft16.js +16 -13
  151. package/dist/draft17-session.cjs +2 -2
  152. package/dist/draft17-session.d.cts +7 -7
  153. package/dist/draft17-session.d.ts +7 -7
  154. package/dist/draft17-session.js +1 -1
  155. package/dist/draft17.cjs +8 -5
  156. package/dist/draft17.d.cts +11 -9
  157. package/dist/draft17.d.ts +11 -9
  158. package/dist/draft17.js +16 -13
  159. package/dist/index.cjs +52 -74
  160. package/dist/index.d.cts +41 -60
  161. package/dist/index.d.ts +41 -60
  162. package/dist/index.js +40 -62
  163. package/dist/{session-types-CJIFbTPd.d.ts → session-types-C7UONex5.d.cts} +28 -27
  164. package/dist/{session-types-Cbq8IGCP.d.cts → session-types-X-IYEGoG.d.ts} +28 -27
  165. package/dist/session.cjs +46 -13
  166. package/dist/session.d.cts +29 -11
  167. package/dist/session.d.ts +29 -11
  168. package/dist/session.js +46 -13
  169. package/dist/{types-DxSFvL2b.d.cts → types--Q7_DcvP.d.cts} +43 -39
  170. package/dist/{types-DxSFvL2b.d.ts → types--Q7_DcvP.d.ts} +43 -39
  171. package/dist/{types-B0FT5Qs2.d.cts → types-0IWbU9Z_.d.cts} +36 -36
  172. package/dist/{types-B0FT5Qs2.d.ts → types-0IWbU9Z_.d.ts} +36 -36
  173. package/dist/{types-gQsr0AAA.d.cts → types-B3g5G9KP.d.cts} +36 -36
  174. package/dist/{types-gQsr0AAA.d.ts → types-B3g5G9KP.d.ts} +36 -36
  175. package/dist/{types-Pme7sua0.d.cts → types-BFpFNM_m.d.cts} +57 -32
  176. package/dist/{types-Pme7sua0.d.ts → types-BFpFNM_m.d.ts} +57 -32
  177. package/dist/{types-8gUGeMgs.d.cts → types-Br7fm2mf.d.cts} +48 -26
  178. package/dist/{types-8gUGeMgs.d.ts → types-Br7fm2mf.d.ts} +48 -26
  179. package/dist/{types-BeAVNU-F.d.cts → types-C2qKTRR_.d.cts} +50 -45
  180. package/dist/{types-BeAVNU-F.d.ts → types-C2qKTRR_.d.ts} +50 -45
  181. package/dist/{types-DKpsfD3i.d.cts → types-DEaypVsD.d.cts} +115 -55
  182. package/dist/{types-DKpsfD3i.d.ts → types-DEaypVsD.d.ts} +115 -55
  183. package/dist/types-Dl4IaAHR.d.cts +282 -0
  184. package/dist/types-Dl4IaAHR.d.ts +282 -0
  185. package/dist/{types-CDa7F5ct.d.cts → types-DrQpTW1G.d.cts} +58 -50
  186. package/dist/{types-CDa7F5ct.d.ts → types-DrQpTW1G.d.ts} +58 -50
  187. package/dist/types-DuIO7cWK.d.cts +25 -0
  188. package/dist/types-DuIO7cWK.d.ts +25 -0
  189. package/dist/{types-B9A2g05r.d.cts → types-DuxfOYiO.d.cts} +47 -31
  190. package/dist/{types-B9A2g05r.d.ts → types-DuxfOYiO.d.ts} +47 -31
  191. package/dist/{types-D1dI_oTX.d.cts → types-jV1yDDBA.d.cts} +36 -36
  192. package/dist/{types-D1dI_oTX.d.ts → types-jV1yDDBA.d.ts} +36 -36
  193. package/package.json +192 -192
  194. package/src/core/buffer-reader.ts +130 -130
  195. package/src/core/buffer-writer.ts +100 -100
  196. package/src/core/errors.ts +1 -1
  197. package/src/core/hex.ts +21 -21
  198. package/src/core/session-types.ts +61 -59
  199. package/src/core/types.ts +18 -361
  200. package/src/drafts/draft07/codec.ts +1058 -938
  201. package/src/drafts/draft07/data-streams.ts +240 -240
  202. package/src/drafts/draft07/index.ts +124 -89
  203. package/src/drafts/draft07/messages.ts +76 -42
  204. package/src/drafts/draft07/rules.ts +107 -101
  205. package/src/drafts/draft07/session-fsm.ts +315 -287
  206. package/src/drafts/draft07/session.ts +8 -6
  207. package/src/drafts/draft07/types.ts +406 -72
  208. package/src/drafts/draft07/varint.ts +51 -51
  209. package/src/drafts/draft08/codec.ts +985 -953
  210. package/src/drafts/draft08/data-streams.ts +363 -359
  211. package/src/drafts/draft08/index.ts +10 -9
  212. package/src/drafts/draft08/messages.ts +59 -59
  213. package/src/drafts/draft08/rules.ts +73 -73
  214. package/src/drafts/draft08/session-fsm.ts +335 -303
  215. package/src/drafts/draft08/session.ts +6 -7
  216. package/src/drafts/draft08/types.ts +380 -384
  217. package/src/drafts/draft09/codec.ts +977 -945
  218. package/src/drafts/draft09/data-streams.ts +336 -332
  219. package/src/drafts/draft09/index.ts +10 -9
  220. package/src/drafts/draft09/messages.ts +59 -59
  221. package/src/drafts/draft09/rules.ts +73 -73
  222. package/src/drafts/draft09/session-fsm.ts +335 -303
  223. package/src/drafts/draft09/session.ts +6 -7
  224. package/src/drafts/draft09/types.ts +380 -384
  225. package/src/drafts/draft10/codec.ts +977 -945
  226. package/src/drafts/draft10/data-streams.ts +336 -332
  227. package/src/drafts/draft10/index.ts +10 -9
  228. package/src/drafts/draft10/messages.ts +59 -59
  229. package/src/drafts/draft10/rules.ts +73 -73
  230. package/src/drafts/draft10/session-fsm.ts +335 -303
  231. package/src/drafts/draft10/session.ts +6 -7
  232. package/src/drafts/draft10/types.ts +380 -384
  233. package/src/drafts/draft11/codec.ts +1054 -988
  234. package/src/drafts/draft11/data-streams.ts +316 -269
  235. package/src/drafts/draft11/index.ts +10 -9
  236. package/src/drafts/draft11/messages.ts +60 -59
  237. package/src/drafts/draft11/rules.ts +73 -73
  238. package/src/drafts/draft11/session-fsm.ts +359 -333
  239. package/src/drafts/draft11/session.ts +6 -7
  240. package/src/drafts/draft11/types.ts +385 -381
  241. package/src/drafts/draft12/codec.ts +1178 -1122
  242. package/src/drafts/draft12/data-streams.ts +324 -275
  243. package/src/drafts/draft12/index.ts +10 -9
  244. package/src/drafts/draft12/messages.ts +67 -66
  245. package/src/drafts/draft12/rules.ts +79 -79
  246. package/src/drafts/draft12/session-fsm.ts +384 -358
  247. package/src/drafts/draft12/session.ts +6 -7
  248. package/src/drafts/draft12/types.ts +424 -419
  249. package/src/drafts/draft13/codec.ts +1296 -1206
  250. package/src/drafts/draft13/data-streams.ts +326 -275
  251. package/src/drafts/draft13/index.ts +10 -9
  252. package/src/drafts/draft13/messages.ts +73 -68
  253. package/src/drafts/draft13/rules.ts +81 -81
  254. package/src/drafts/draft13/session-fsm.ts +392 -366
  255. package/src/drafts/draft13/session.ts +6 -7
  256. package/src/drafts/draft13/types.ts +447 -438
  257. package/src/drafts/draft14/codec.ts +1347 -1043
  258. package/src/drafts/draft14/data-streams.ts +831 -813
  259. package/src/drafts/draft14/index.ts +17 -9
  260. package/src/drafts/draft14/messages.ts +65 -65
  261. package/src/drafts/draft14/rules.ts +81 -81
  262. package/src/drafts/draft14/session-fsm.ts +415 -405
  263. package/src/drafts/draft14/session.ts +6 -7
  264. package/src/drafts/draft14/types.ts +451 -381
  265. package/src/drafts/draft15/codec.ts +1138 -978
  266. package/src/drafts/draft15/data-streams.ts +842 -794
  267. package/src/drafts/draft15/index.ts +10 -9
  268. package/src/drafts/draft15/messages.ts +54 -53
  269. package/src/drafts/draft15/rules.ts +67 -67
  270. package/src/drafts/draft15/session-fsm.ts +319 -299
  271. package/src/drafts/draft15/session.ts +6 -7
  272. package/src/drafts/draft15/types.ts +357 -339
  273. package/src/drafts/draft16/codec.ts +1242 -966
  274. package/src/drafts/draft16/data-streams.ts +835 -789
  275. package/src/drafts/draft16/index.ts +10 -9
  276. package/src/drafts/draft16/messages.ts +56 -55
  277. package/src/drafts/draft16/rules.ts +69 -69
  278. package/src/drafts/draft16/session-fsm.ts +319 -299
  279. package/src/drafts/draft16/session.ts +6 -7
  280. package/src/drafts/draft16/types.ts +386 -357
  281. package/src/drafts/draft17/codec.ts +1209 -971
  282. package/src/drafts/draft17/data-streams.ts +969 -758
  283. package/src/drafts/draft17/index.ts +9 -7
  284. package/src/drafts/draft17/messages.ts +43 -42
  285. package/src/drafts/draft17/rules.ts +58 -58
  286. package/src/drafts/draft17/session-fsm.ts +248 -216
  287. package/src/drafts/draft17/session.ts +5 -5
  288. package/src/drafts/draft17/types.ts +337 -313
  289. package/src/index.ts +85 -274
  290. package/src/session.ts +63 -25
  291. package/dist/chunk-FZDIEHQL.cjs +0 -1042
  292. package/dist/chunk-HDWJ2GDE.js +0 -24
  293. package/dist/chunk-KNDYS3DK.cjs +0 -24
  294. package/dist/chunk-N2KBF5Q2.js +0 -1042
  295. package/dist/draft7-session.d.cts +0 -7
  296. package/dist/draft7-session.d.ts +0 -7
  297. package/dist/draft7.cjs +0 -72
  298. package/dist/draft7.d.cts +0 -148
  299. package/dist/draft7.d.ts +0 -148
  300. package/dist/draft7.js +0 -72
  301. package/dist/draft8-session.cjs +0 -6
  302. package/dist/draft8-session.d.cts +0 -8
  303. package/dist/draft8-session.d.ts +0 -8
  304. package/dist/draft8.cjs +0 -116
  305. package/dist/draft9-session.cjs +0 -6
  306. package/dist/draft9-session.d.cts +0 -8
  307. package/dist/draft9-session.d.ts +0 -8
  308. package/dist/draft9.cjs +0 -116
  309. package/dist/types-QNXoxC9Y.d.cts +0 -236
  310. package/dist/types-QNXoxC9Y.d.ts +0 -236
  311. package/src/drafts/draft07/announce-fsm.ts +0 -2
  312. package/src/drafts/draft07/parameters.ts +0 -12
  313. package/src/drafts/draft07/subscription-fsm.ts +0 -3
@@ -1,100 +1,100 @@
1
- const textEncoder = /* @__PURE__ */ new TextEncoder();
2
-
3
- export class BufferWriter {
4
- private buffer: Uint8Array;
5
- private view: DataView;
6
- private pos: number;
7
-
8
- constructor(initialSize = 256) {
9
- this.buffer = new Uint8Array(initialSize);
10
- this.view = new DataView(this.buffer.buffer);
11
- this.pos = 0;
12
- }
13
-
14
- get offset(): number {
15
- return this.pos;
16
- }
17
-
18
- private ensureCapacity(needed: number): void {
19
- const required = this.pos + needed;
20
- if (required <= this.buffer.byteLength) return;
21
-
22
- let newSize = this.buffer.byteLength * 2;
23
- while (newSize < required) newSize *= 2;
24
-
25
- const newBuffer = new Uint8Array(newSize);
26
- newBuffer.set(this.buffer);
27
- this.buffer = newBuffer;
28
- this.view = new DataView(this.buffer.buffer);
29
- }
30
-
31
- writeUint8(value: number): void {
32
- this.ensureCapacity(1);
33
- this.view.setUint8(this.pos, value);
34
- this.pos += 1;
35
- }
36
-
37
- writeBytes(bytes: Uint8Array): void {
38
- this.ensureCapacity(bytes.byteLength);
39
- this.buffer.set(bytes, this.pos);
40
- this.pos += bytes.byteLength;
41
- }
42
-
43
- writeVarInt(value: number | bigint): void {
44
- const v = BigInt(value);
45
- if (v < 0n) throw new Error("VarInt value must be non-negative");
46
-
47
- if (v < 0x40n) {
48
- this.ensureCapacity(1);
49
- this.view.setUint8(this.pos, Number(v));
50
- this.pos += 1;
51
- } else if (v < 0x4000n) {
52
- this.ensureCapacity(2);
53
- this.view.setUint16(this.pos, Number(v) | 0x4000);
54
- this.pos += 2;
55
- } else if (v < 0x40000000n) {
56
- this.ensureCapacity(4);
57
- this.view.setUint32(this.pos, Number(v) | 0x80000000);
58
- this.pos += 4;
59
- } else if (v < 0x4000000000000000n) {
60
- this.ensureCapacity(8);
61
- this.view.setBigUint64(this.pos, v | 0xc000000000000000n);
62
- this.pos += 8;
63
- } else {
64
- throw new Error("VarInt value exceeds 62-bit range");
65
- }
66
- }
67
-
68
- writeString(str: string): void {
69
- const encoded = textEncoder.encode(str);
70
- this.writeVarInt(encoded.byteLength);
71
- this.writeBytes(encoded);
72
- }
73
-
74
- writeTuple(values: string[]): void {
75
- this.writeVarInt(values.length);
76
- for (const v of values) {
77
- this.writeString(v);
78
- }
79
- }
80
-
81
- writeParameters(params: Map<bigint, Uint8Array>): void {
82
- this.writeVarInt(params.size);
83
- for (const [key, value] of params) {
84
- this.writeVarInt(key);
85
- this.writeVarInt(value.byteLength);
86
- this.writeBytes(value);
87
- }
88
- }
89
-
90
- /** Returns an owned copy of the written bytes. */
91
- finish(): Uint8Array {
92
- if (this.pos === this.buffer.byteLength) return this.buffer;
93
- return this.buffer.slice(0, this.pos);
94
- }
95
-
96
- /** Returns a zero-copy view of the written bytes. Valid only until the next write. */
97
- finishView(): Uint8Array {
98
- return this.buffer.subarray(0, this.pos);
99
- }
100
- }
1
+ const textEncoder = /* @__PURE__ */ new TextEncoder()
2
+
3
+ export class BufferWriter {
4
+ private buffer: Uint8Array
5
+ private view: DataView
6
+ private pos: number
7
+
8
+ constructor(initialSize = 256) {
9
+ this.buffer = new Uint8Array(initialSize)
10
+ this.view = new DataView(this.buffer.buffer)
11
+ this.pos = 0
12
+ }
13
+
14
+ get offset(): number {
15
+ return this.pos
16
+ }
17
+
18
+ private ensureCapacity(needed: number): void {
19
+ const required = this.pos + needed
20
+ if (required <= this.buffer.byteLength) return
21
+
22
+ let newSize = this.buffer.byteLength * 2
23
+ while (newSize < required) newSize *= 2
24
+
25
+ const newBuffer = new Uint8Array(newSize)
26
+ newBuffer.set(this.buffer)
27
+ this.buffer = newBuffer
28
+ this.view = new DataView(this.buffer.buffer)
29
+ }
30
+
31
+ writeUint8(value: number): void {
32
+ this.ensureCapacity(1)
33
+ this.view.setUint8(this.pos, value)
34
+ this.pos += 1
35
+ }
36
+
37
+ writeBytes(bytes: Uint8Array): void {
38
+ this.ensureCapacity(bytes.byteLength)
39
+ this.buffer.set(bytes, this.pos)
40
+ this.pos += bytes.byteLength
41
+ }
42
+
43
+ writeVarInt(value: number | bigint): void {
44
+ const v = BigInt(value)
45
+ if (v < 0n) throw new Error('VarInt value must be non-negative')
46
+
47
+ if (v < 0x40n) {
48
+ this.ensureCapacity(1)
49
+ this.view.setUint8(this.pos, Number(v))
50
+ this.pos += 1
51
+ } else if (v < 0x4000n) {
52
+ this.ensureCapacity(2)
53
+ this.view.setUint16(this.pos, Number(v) | 0x4000)
54
+ this.pos += 2
55
+ } else if (v < 0x40000000n) {
56
+ this.ensureCapacity(4)
57
+ this.view.setUint32(this.pos, Number(v) | 0x80000000)
58
+ this.pos += 4
59
+ } else if (v < 0x4000000000000000n) {
60
+ this.ensureCapacity(8)
61
+ this.view.setBigUint64(this.pos, v | 0xc000000000000000n)
62
+ this.pos += 8
63
+ } else {
64
+ throw new Error('VarInt value exceeds 62-bit range')
65
+ }
66
+ }
67
+
68
+ writeString(str: string): void {
69
+ const encoded = textEncoder.encode(str)
70
+ this.writeVarInt(encoded.byteLength)
71
+ this.writeBytes(encoded)
72
+ }
73
+
74
+ writeTuple(values: string[]): void {
75
+ this.writeVarInt(values.length)
76
+ for (const v of values) {
77
+ this.writeString(v)
78
+ }
79
+ }
80
+
81
+ writeParameters(params: Map<bigint, Uint8Array>): void {
82
+ this.writeVarInt(params.size)
83
+ for (const [key, value] of params) {
84
+ this.writeVarInt(key)
85
+ this.writeVarInt(value.byteLength)
86
+ this.writeBytes(value)
87
+ }
88
+ }
89
+
90
+ /** Returns an owned copy of the written bytes. */
91
+ finish(): Uint8Array {
92
+ if (this.pos === this.buffer.byteLength) return this.buffer
93
+ return this.buffer.slice(0, this.pos)
94
+ }
95
+
96
+ /** Returns a zero-copy view of the written bytes. Valid only until the next write. */
97
+ finishView(): Uint8Array {
98
+ return this.buffer.subarray(0, this.pos)
99
+ }
100
+ }
@@ -1 +1 @@
1
- export { DecodeError, type DecodeErrorCode } from "./types.js";
1
+ export { DecodeError, type DecodeErrorCode } from './types.js'
package/src/core/hex.ts CHANGED
@@ -1,21 +1,21 @@
1
- const HEX_TABLE = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>
2
- i.toString(16).padStart(2, "0"),
3
- );
4
-
5
- /** Convert a Uint8Array to a lowercase hex string. */
6
- export function bytesToHex(bytes: Uint8Array): string {
7
- const parts = new Array<string>(bytes.byteLength);
8
- for (let i = 0; i < bytes.byteLength; i++) {
9
- parts[i] = HEX_TABLE[bytes[i]!]!;
10
- }
11
- return parts.join("");
12
- }
13
-
14
- /** Convert a hex string to a Uint8Array. */
15
- export function hexToBytes(hex: string): Uint8Array {
16
- const bytes = new Uint8Array(hex.length / 2);
17
- for (let i = 0; i < hex.length; i += 2) {
18
- bytes[i / 2] = Number.parseInt(hex.substring(i, i + 2), 16);
19
- }
20
- return bytes;
21
- }
1
+ const HEX_TABLE = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>
2
+ i.toString(16).padStart(2, '0'),
3
+ )
4
+
5
+ /** Convert a Uint8Array to a lowercase hex string. */
6
+ export function bytesToHex(bytes: Uint8Array): string {
7
+ const parts = new Array<string>(bytes.byteLength)
8
+ for (let i = 0; i < bytes.byteLength; i++) {
9
+ parts[i] = HEX_TABLE[bytes[i]!]!
10
+ }
11
+ return parts.join('')
12
+ }
13
+
14
+ /** Convert a hex string to a Uint8Array. */
15
+ export function hexToBytes(hex: string): Uint8Array {
16
+ const bytes = new Uint8Array(hex.length / 2)
17
+ for (let i = 0; i < hex.length; i += 2) {
18
+ bytes[i / 2] = Number.parseInt(hex.substring(i, i + 2), 16)
19
+ }
20
+ return bytes
21
+ }
@@ -1,90 +1,92 @@
1
- import type { MoqtMessage, MoqtMessageType } from "./types.js";
1
+ import type { Draft } from './types.js'
2
2
 
3
- export type SessionPhase = "idle" | "setup" | "ready" | "draining" | "closed" | "error";
3
+ export type SessionPhase = 'idle' | 'setup' | 'ready' | 'draining' | 'closed' | 'error'
4
4
 
5
- export type SubscriptionPhase = "pending" | "active" | "error" | "done";
5
+ export type SubscriptionPhase = 'pending' | 'active' | 'error' | 'done'
6
6
 
7
- export type AnnouncePhase = "pending" | "active" | "error";
7
+ export type AnnouncePhase = 'pending' | 'active' | 'error'
8
8
 
9
- export type PublishPhase = "pending" | "active" | "error" | "done";
9
+ export type PublishPhase = 'pending' | 'active' | 'error' | 'done'
10
10
 
11
- export type FetchPhase = "pending" | "active" | "error" | "cancelled";
11
+ export type FetchPhase = 'pending' | 'active' | 'error' | 'cancelled'
12
12
 
13
13
  export interface SubscriptionState {
14
- readonly subscribeId: bigint;
15
- readonly phase: SubscriptionPhase;
16
- readonly trackNamespace: string[];
17
- readonly trackName: string;
14
+ readonly subscribeId: bigint
15
+ readonly phase: SubscriptionPhase
16
+ readonly trackNamespace: string[]
17
+ readonly trackName: string
18
18
  }
19
19
 
20
20
  export interface AnnounceState {
21
- readonly namespace: string[];
22
- readonly phase: AnnouncePhase;
21
+ readonly namespace: string[]
22
+ readonly phase: AnnouncePhase
23
23
  }
24
24
 
25
25
  export interface PublishState {
26
- readonly requestId: bigint;
27
- readonly phase: PublishPhase;
26
+ readonly requestId: bigint
27
+ readonly phase: PublishPhase
28
28
  }
29
29
 
30
30
  export interface FetchState {
31
- readonly requestId: bigint;
32
- readonly phase: FetchPhase;
31
+ readonly requestId: bigint
32
+ readonly phase: FetchPhase
33
33
  }
34
34
 
35
- export interface SessionStateOptions {
36
- codec: { draft: string };
37
- role: "client" | "server";
35
+ export type SessionStateOptionsRole = 'client' | 'server'
36
+
37
+ export interface SessionStateOptions<T extends Draft> {
38
+ codec: { draft: T }
39
+ role: SessionStateOptionsRole
38
40
  }
39
41
 
40
- export interface SessionState<M = MoqtMessage, T extends string = MoqtMessageType> {
41
- readonly phase: SessionPhase;
42
- readonly role: "client" | "server";
43
- receive(message: M): TransitionResult<T>;
44
- validateOutgoing(message: M): ValidationResult<T>;
45
- send(message: M): TransitionResult<T>;
46
- readonly subscriptions: ReadonlyMap<bigint, SubscriptionState>;
47
- readonly announces: ReadonlyMap<string, AnnounceState>;
48
- readonly legalOutgoing: ReadonlySet<T>;
49
- readonly legalIncoming: ReadonlySet<T>;
50
- reset(): void;
42
+ export interface SessionState<M, T extends string> {
43
+ readonly phase: SessionPhase
44
+ readonly role: 'client' | 'server'
45
+ receive(message: M): TransitionResult<T>
46
+ validateOutgoing(message: M): ValidationResult<T>
47
+ send(message: M): TransitionResult<T>
48
+ readonly subscriptions: ReadonlyMap<bigint, SubscriptionState>
49
+ readonly announces: ReadonlyMap<string, AnnounceState>
50
+ readonly legalOutgoing: ReadonlySet<T>
51
+ readonly legalIncoming: ReadonlySet<T>
52
+ reset(): void
51
53
  }
52
54
 
53
- export type TransitionResult<T extends string = MoqtMessageType> =
55
+ export type TransitionResult<T extends string> =
54
56
  | { ok: true; phase: SessionPhase; sideEffects: SideEffect[] }
55
- | { ok: false; violation: ProtocolViolation<T> };
57
+ | { ok: false; violation: ProtocolViolation<T> }
56
58
 
57
- export type ValidationResult<T extends string = MoqtMessageType> =
59
+ export type ValidationResult<T extends string> =
58
60
  | { ok: true }
59
- | { ok: false; violation: ProtocolViolation<T> };
61
+ | { ok: false; violation: ProtocolViolation<T> }
60
62
 
61
- export interface ProtocolViolation<T extends string = MoqtMessageType> {
62
- readonly code: ProtocolViolationCode;
63
- readonly message: string;
64
- readonly currentPhase: SessionPhase;
65
- readonly offendingMessage: T;
63
+ export interface ProtocolViolation<T extends string> {
64
+ readonly code: ProtocolViolationCode
65
+ readonly message: string
66
+ readonly currentPhase: SessionPhase
67
+ readonly offendingMessage: T
66
68
  }
67
69
 
68
70
  export type ProtocolViolationCode =
69
- | "MESSAGE_BEFORE_SETUP"
70
- | "UNEXPECTED_MESSAGE"
71
- | "DUPLICATE_SUBSCRIBE_ID"
72
- | "UNKNOWN_SUBSCRIBE_ID"
73
- | "DUPLICATE_REQUEST_ID"
74
- | "UNKNOWN_REQUEST_ID"
75
- | "ROLE_VIOLATION"
76
- | "STATE_VIOLATION"
77
- | "SETUP_VIOLATION";
71
+ | 'MESSAGE_BEFORE_SETUP'
72
+ | 'UNEXPECTED_MESSAGE'
73
+ | 'DUPLICATE_SUBSCRIBE_ID'
74
+ | 'UNKNOWN_SUBSCRIBE_ID'
75
+ | 'DUPLICATE_REQUEST_ID'
76
+ | 'UNKNOWN_REQUEST_ID'
77
+ | 'ROLE_VIOLATION'
78
+ | 'STATE_VIOLATION'
79
+ | 'SETUP_VIOLATION'
78
80
 
79
81
  export type SideEffect =
80
- | { type: "subscription-activated"; subscribeId: bigint }
81
- | { type: "subscription-ended"; subscribeId: bigint; reason: string }
82
- | { type: "announce-activated"; namespace: string[] }
83
- | { type: "announce-ended"; namespace: string[] }
84
- | { type: "publish-activated"; requestId: bigint }
85
- | { type: "publish-ended"; requestId: bigint; reason: string }
86
- | { type: "fetch-activated"; requestId: bigint }
87
- | { type: "fetch-ended"; requestId: bigint; reason: string }
88
- | { type: "session-ready" }
89
- | { type: "session-draining"; goAwayUri: string }
90
- | { type: "session-closed" };
82
+ | { type: 'subscription-activated'; subscribeId: bigint }
83
+ | { type: 'subscription-ended'; subscribeId: bigint; reason: string }
84
+ | { type: 'announce-activated'; namespace: string[] }
85
+ | { type: 'announce-ended'; namespace: string[] }
86
+ | { type: 'publish-activated'; requestId: bigint }
87
+ | { type: 'publish-ended'; requestId: bigint; reason: string }
88
+ | { type: 'fetch-activated'; requestId: bigint }
89
+ | { type: 'fetch-ended'; requestId: bigint; reason: string }
90
+ | { type: 'session-ready' }
91
+ | { type: 'session-draining'; goAwayUri: string }
92
+ | { type: 'session-closed' }