lib0 0.2.77 → 0.2.79

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 (202) hide show
  1. package/README.md +1 -1
  2. package/array.d.ts +1 -0
  3. package/array.d.ts.map +1 -1
  4. package/array.js +18 -0
  5. package/binary.test.d.ts.map +1 -1
  6. package/buffer.d.ts +3 -0
  7. package/buffer.d.ts.map +1 -1
  8. package/buffer.js +40 -0
  9. package/buffer.test.d.ts +2 -1
  10. package/buffer.test.d.ts.map +1 -1
  11. package/cache.d.ts.map +1 -1
  12. package/cache.js +0 -1
  13. package/cache.test.d.ts.map +1 -1
  14. package/component.d.ts +5 -5
  15. package/component.d.ts.map +1 -1
  16. package/component.js +14 -11
  17. package/coverage/tmp/coverage-10499-1691528887100-0.json +1 -0
  18. package/decoding.d.ts +2 -0
  19. package/decoding.d.ts.map +1 -1
  20. package/decoding.js +26 -0
  21. package/dist/aes-gcm.cjs +161 -0
  22. package/dist/aes-gcm.cjs.map +1 -0
  23. package/dist/{array-fd99bc23.cjs → array-704ca50e.cjs} +22 -2
  24. package/dist/array-704ca50e.cjs.map +1 -0
  25. package/dist/array.cjs +2 -1
  26. package/dist/array.cjs.map +1 -1
  27. package/dist/array.d.ts +1 -0
  28. package/dist/array.d.ts.map +1 -1
  29. package/dist/binary.test.d.ts.map +1 -1
  30. package/dist/{broadcastchannel-fff713ef.cjs → broadcastchannel-7801969a.cjs} +2 -2
  31. package/dist/{broadcastchannel-fff713ef.cjs.map → broadcastchannel-7801969a.cjs.map} +1 -1
  32. package/dist/broadcastchannel.cjs +9 -9
  33. package/dist/{buffer-621617f6.cjs → buffer-c5d69c70.cjs} +126 -7
  34. package/dist/buffer-c5d69c70.cjs.map +1 -0
  35. package/dist/buffer.cjs +12 -9
  36. package/dist/buffer.cjs.map +1 -1
  37. package/dist/buffer.d.ts +3 -0
  38. package/dist/buffer.d.ts.map +1 -1
  39. package/dist/buffer.test.d.ts +2 -1
  40. package/dist/buffer.test.d.ts.map +1 -1
  41. package/dist/cache.cjs +5 -3
  42. package/dist/cache.cjs.map +1 -1
  43. package/dist/cache.d.ts.map +1 -1
  44. package/dist/cache.test.d.ts.map +1 -1
  45. package/dist/common.cjs +37 -0
  46. package/dist/common.cjs.map +1 -0
  47. package/dist/component.cjs +20 -17
  48. package/dist/component.cjs.map +1 -1
  49. package/dist/component.d.ts +5 -5
  50. package/dist/component.d.ts.map +1 -1
  51. package/dist/decoding.cjs +9 -7
  52. package/dist/decoding.cjs.map +1 -1
  53. package/dist/decoding.d.ts +2 -0
  54. package/dist/decoding.d.ts.map +1 -1
  55. package/dist/{diff-18852f48.cjs → diff-fbaa426b.cjs} +2 -2
  56. package/dist/{diff-18852f48.cjs.map → diff-fbaa426b.cjs.map} +1 -1
  57. package/dist/diff.cjs +4 -4
  58. package/dist/ecdsa.cjs +118 -0
  59. package/dist/ecdsa.cjs.map +1 -0
  60. package/dist/encoding.cjs +9 -7
  61. package/dist/encoding.cjs.map +1 -1
  62. package/dist/encoding.d.ts +2 -0
  63. package/dist/encoding.d.ts.map +1 -1
  64. package/dist/encoding.test.d.ts +1 -0
  65. package/dist/encoding.test.d.ts.map +1 -1
  66. package/dist/{environment-0c5ff22b.cjs → environment-ad129e4d.cjs} +3 -3
  67. package/dist/{environment-0c5ff22b.cjs.map → environment-ad129e4d.cjs.map} +1 -1
  68. package/dist/environment.cjs +5 -5
  69. package/dist/{function-831844d3.cjs → function-314fdc56.cjs} +3 -3
  70. package/dist/{function-831844d3.cjs.map → function-314fdc56.cjs.map} +1 -1
  71. package/dist/function.cjs +3 -3
  72. package/dist/hash/rabin-gf2-polynomial.d.ts +45 -0
  73. package/dist/hash/rabin-gf2-polynomial.d.ts.map +1 -0
  74. package/dist/hash/rabin-uncached.d.ts +29 -0
  75. package/dist/hash/rabin-uncached.d.ts.map +1 -0
  76. package/dist/hash/rabin.d.ts +27 -0
  77. package/dist/hash/rabin.d.ts.map +1 -0
  78. package/dist/hash/rabin.test.d.ts +8 -0
  79. package/dist/hash/rabin.test.d.ts.map +1 -0
  80. package/dist/hash/sha256.fallback.d.ts +2 -0
  81. package/dist/hash/sha256.fallback.d.ts.map +1 -0
  82. package/dist/hash/sha256.node.d.ts +2 -0
  83. package/dist/hash/sha256.node.d.ts.map +1 -0
  84. package/dist/hash/sha256.test.d.ts +6 -0
  85. package/dist/hash/sha256.test.d.ts.map +1 -0
  86. package/dist/index.cjs +11 -11
  87. package/dist/list.cjs +3 -3
  88. package/dist/logging.cjs +5 -5
  89. package/dist/logging.common.cjs +21 -21
  90. package/dist/logging.common.cjs.map +1 -1
  91. package/dist/logging.node.cjs +5 -5
  92. package/dist/logging.test.d.ts.map +1 -1
  93. package/dist/{number-dc113762.cjs → number-466d8922.cjs} +29 -10
  94. package/dist/number-466d8922.cjs.map +1 -0
  95. package/dist/number.cjs +2 -1
  96. package/dist/number.cjs.map +1 -1
  97. package/dist/number.d.ts +1 -0
  98. package/dist/number.d.ts.map +1 -1
  99. package/dist/number.test.d.ts +1 -1
  100. package/dist/number.test.d.ts.map +1 -1
  101. package/dist/{object-aad630ed.cjs → object-fecf6a7b.cjs} +2 -1
  102. package/dist/object-fecf6a7b.cjs.map +1 -0
  103. package/dist/object.cjs +1 -1
  104. package/dist/object.d.ts.map +1 -1
  105. package/dist/observable.cjs +1 -1
  106. package/dist/performance.node.cjs +3 -3
  107. package/dist/{prng-9ccc85f7.cjs → prng-1149c8c4.cjs} +3 -3
  108. package/dist/{prng-9ccc85f7.cjs.map → prng-1149c8c4.cjs.map} +1 -1
  109. package/dist/prng.cjs +8 -8
  110. package/dist/prng.test.d.ts.map +1 -1
  111. package/dist/queue.cjs.map +1 -1
  112. package/dist/queue.d.ts.map +1 -1
  113. package/dist/rabin-gf2-polynomial.cjs +437 -0
  114. package/dist/rabin-gf2-polynomial.cjs.map +1 -0
  115. package/dist/rabin-uncached.cjs +87 -0
  116. package/dist/rabin-uncached.cjs.map +1 -0
  117. package/dist/rabin.cjs +125 -0
  118. package/dist/rabin.cjs.map +1 -0
  119. package/dist/random.cjs +12 -0
  120. package/dist/random.cjs.map +1 -1
  121. package/dist/random.d.ts +1 -1
  122. package/dist/random.d.ts.map +1 -1
  123. package/dist/rsa-oaep.cjs +112 -0
  124. package/dist/rsa-oaep.cjs.map +1 -0
  125. package/dist/set.test.d.ts.map +1 -1
  126. package/dist/sha256.fallback.cjs +179 -0
  127. package/dist/sha256.fallback.cjs.map +1 -0
  128. package/dist/sha256.node.cjs +17 -0
  129. package/dist/sha256.node.cjs.map +1 -0
  130. package/dist/{string-e7eb0c1d.cjs → string-6d104757.cjs} +10 -2
  131. package/dist/string-6d104757.cjs.map +1 -0
  132. package/dist/string.cjs +3 -2
  133. package/dist/string.cjs.map +1 -1
  134. package/dist/string.d.ts +5 -0
  135. package/dist/string.d.ts.map +1 -1
  136. package/dist/testing.cjs +23 -17
  137. package/dist/testing.cjs.map +1 -1
  138. package/dist/testing.d.ts +13 -7
  139. package/dist/testing.d.ts.map +1 -1
  140. package/dist/url.cjs +1 -1
  141. package/dist/webcrypto.node.cjs.map +1 -1
  142. package/dist/webcrypto.node.d.ts.map +1 -1
  143. package/dist/{websocket-0632cb8c.cjs → websocket-44e4ead5.cjs} +1 -1
  144. package/dist/{websocket-0632cb8c.cjs.map → websocket-44e4ead5.cjs.map} +1 -1
  145. package/dist/websocket.cjs +2 -2
  146. package/encoding.d.ts +2 -0
  147. package/encoding.d.ts.map +1 -1
  148. package/encoding.js +42 -0
  149. package/encoding.test.d.ts +1 -0
  150. package/encoding.test.d.ts.map +1 -1
  151. package/hash/rabin-gf2-polynomial.d.ts +45 -0
  152. package/hash/rabin-gf2-polynomial.d.ts.map +1 -0
  153. package/hash/rabin-gf2-polynomial.js +379 -0
  154. package/hash/rabin-uncached.d.ts +29 -0
  155. package/hash/rabin-uncached.d.ts.map +1 -0
  156. package/hash/rabin-uncached.js +68 -0
  157. package/hash/rabin.d.ts +27 -0
  158. package/hash/rabin.d.ts.map +1 -0
  159. package/hash/rabin.js +100 -0
  160. package/hash/rabin.test.d.ts +8 -0
  161. package/hash/rabin.test.d.ts.map +1 -0
  162. package/hash/sha256.fallback.d.ts +2 -0
  163. package/hash/sha256.fallback.d.ts.map +1 -0
  164. package/hash/sha256.fallback.js +172 -0
  165. package/hash/sha256.node.d.ts +2 -0
  166. package/hash/sha256.node.d.ts.map +1 -0
  167. package/hash/sha256.node.js +10 -0
  168. package/hash/sha256.test.d.ts +6 -0
  169. package/hash/sha256.test.d.ts.map +1 -0
  170. package/logging.common.js +16 -16
  171. package/logging.test.d.ts.map +1 -1
  172. package/number.d.ts +1 -0
  173. package/number.d.ts.map +1 -1
  174. package/number.js +17 -0
  175. package/number.test.d.ts +1 -1
  176. package/number.test.d.ts.map +1 -1
  177. package/object.d.ts.map +1 -1
  178. package/object.js +1 -0
  179. package/package.json +24 -6
  180. package/prng.test.d.ts.map +1 -1
  181. package/queue.d.ts.map +1 -1
  182. package/queue.js +0 -1
  183. package/random.d.ts +1 -1
  184. package/random.d.ts.map +1 -1
  185. package/random.js +4 -1
  186. package/set.test.d.ts.map +1 -1
  187. package/string.d.ts +5 -0
  188. package/string.d.ts.map +1 -1
  189. package/string.js +6 -0
  190. package/test.html +2 -0
  191. package/test.js +4 -0
  192. package/testing.d.ts +13 -7
  193. package/testing.d.ts.map +1 -1
  194. package/testing.js +14 -8
  195. package/webcrypto.node.d.ts.map +1 -1
  196. package/webcrypto.node.js +0 -1
  197. package/coverage/tmp/coverage-36234-1685177795346-0.json +0 -1
  198. package/dist/array-fd99bc23.cjs.map +0 -1
  199. package/dist/buffer-621617f6.cjs.map +0 -1
  200. package/dist/number-dc113762.cjs.map +0 -1
  201. package/dist/object-aad630ed.cjs.map +0 -1
  202. package/dist/string-e7eb0c1d.cjs.map +0 -1
package/decoding.d.ts CHANGED
@@ -40,6 +40,8 @@ export function peekVarInt(decoder: Decoder): number;
40
40
  export function _readVarStringPolyfill(decoder: Decoder): string;
41
41
  export function _readVarStringNative(decoder: Decoder): string;
42
42
  export function readVarString(decoder: Decoder): string;
43
+ export function readTerminatedUint8Array(decoder: Decoder): Uint8Array;
44
+ export function readTerminatedString(decoder: Decoder): string;
43
45
  export function peekVarString(decoder: Decoder): string;
44
46
  export function readFromDataView(decoder: Decoder, len: number): DataView;
45
47
  export function readFloat32(decoder: Decoder): number;
package/decoding.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"decoding.d.ts","sourceRoot":"","sources":["decoding.js"],"names":[],"mappings":"AAsCA;;GAEG;AACH;IACE;;OAEG;IACH,wBAFW,UAAU,EAepB;IAZC;;;;OAIG;IACH,KAFU,UAAU,CAEC;IACrB;;;;OAIG;IACH,KAFU,MAAM,CAEJ;CAEf;AAOM,0CAHI,UAAU,GACT,OAAO,CAE+C;AAO3D,oCAHI,OAAO,GACN,OAAO,CAEoD;AAWhE,+BAJI,OAAO,gCAEN,OAAO,CAMlB;AAaM,wCAJI,OAAO,OACP,MAAM,GACL,UAAU,CAMrB;AAYM,2CAHI,OAAO,GACN,UAAU,CAEmE;AAQlF,8CAHI,OAAO,GACN,UAAU,CAEkF;AAQjG,+BAHI,OAAO,GACN,MAAM,CAE2B;AAQtC,mCAHI,OAAO,GACN,MAAM,CAE4C;AASvD,oCAHI,OAAO,GACN,MAAM,CAQjB;AASM,oCAHI,OAAO,GACN,MAAM,CAUjB;AAUM,6CAHI,OAAO,GACN,MAAM,CAUjB;AAUM,mCAHI,OAAO,GACN,MAAM,CAE0C;AAUrD,oCAHI,OAAO,GACN,MAAM,CAImB;AAU9B,oCAHI,OAAO,GACN,MAAM,CAOX;AAYA,qCAHI,OAAO,GACN,MAAM,CAqBjB;AAaM,oCAHI,OAAO,GACN,MAAM,CA2BjB;AASM,qCAHI,OAAO,GACN,MAAM,CAOjB;AASM,oCAHI,OAAO,GACN,MAAM,CAOjB;AAgBM,gDAJI,OAAO,UA2BjB;AAQM,8CAHI,OAAO,UAI4D;AAhCvE,uCAJI,OAAO,UA2BjB;AA8BM,uCAHI,OAAO,GACN,MAAM,CAOjB;AAOM,0CAJI,OAAO,OACP,MAAM,GACL,QAAQ,CAMnB;AAKM,qCAFI,OAAO,UAEqE;AAKhF,qCAFI,OAAO,UAEqE;AAKhF,sCAFI,OAAO,OAE4F;AAKvG,uCAFI,OAAO,OAE8F;AAyCzG,iCAFI,OAAO,OAEqE;AAEvF;;;;GAIG;AACH;IACE;;;OAGG;IACH,wBAHW,UAAU,iBACD,OAAO,KAAE,CAAC,EAc7B;IAVC;;OAEG;IACH,eAPkB,OAAO,KAAE,CAAC,CAOR;IACpB;;;OAGG;IACH,GAFU,CAAC,GAAC,IAAI,CAEH;IACb,cAAc;IAGhB,UAWC;CACF;AAED;IACE;;;OAGG;IACH,wBAHW,UAAU,SACV,MAAM,EAShB;IALC;;;OAGG;IACH,GAFU,MAAM,CAEF;IAGhB;;OAEG;IACH,QAFY,MAAM,CAKjB;CACF;AAED;IACE;;;OAGG;IACH,wBAHW,UAAU,SACV,MAAM,EAUhB;IANC;;;OAGG;IACH,GAFU,MAAM,CAEF;IACd,cAAc;IAGhB;;OAEG;IACH,QAFY,MAAM,CAajB;CACF;AAED;IAMI;;OAEG;IACH,GAFU,MAAM,CAEN;IACV,cAAc;IAGhB,eAaC;CACF;AAED;IAMI;;OAEG;IACH,GAFU,MAAM,CAEN;IACV,cAAc;IAGhB,eAaC;CACF;AAED;IAMI;;OAEG;IACH,GAFU,MAAM,CAEN;IACV,cAAc;IACd,aAAa;IAGf;;OAEG;IACH,QAFY,MAAM,CAgBjB;CACF;AAED;IACE;;OAEG;IACH,wBAFW,UAAU,EASpB;IANC,2BAAgD;IAChD,YAAsC;IACtC;;OAEG;IACH,MAFU,MAAM,CAEH;IAGf;;OAEG;IACH,QAFY,MAAM,CAOjB;CACF"}
1
+ {"version":3,"file":"decoding.d.ts","sourceRoot":"","sources":["decoding.js"],"names":[],"mappings":"AAuCA;;GAEG;AACH;IACE;;OAEG;IACH,wBAFW,UAAU,EAepB;IAZC;;;;OAIG;IACH,KAFU,UAAU,CAEC;IACrB;;;;OAIG;IACH,KAFU,MAAM,CAEJ;CAEf;AAOM,0CAHI,UAAU,GACT,OAAO,CAE+C;AAO3D,oCAHI,OAAO,GACN,OAAO,CAEoD;AAWhE,+BAJI,OAAO,gCAEN,OAAO,CAMlB;AAaM,wCAJI,OAAO,OACP,MAAM,GACL,UAAU,CAMrB;AAYM,2CAHI,OAAO,GACN,UAAU,CAEmE;AAQlF,8CAHI,OAAO,GACN,UAAU,CAEkF;AAQjG,+BAHI,OAAO,GACN,MAAM,CAE2B;AAQtC,mCAHI,OAAO,GACN,MAAM,CAE4C;AASvD,oCAHI,OAAO,GACN,MAAM,CAQjB;AASM,oCAHI,OAAO,GACN,MAAM,CAUjB;AAUM,6CAHI,OAAO,GACN,MAAM,CAUjB;AAUM,mCAHI,OAAO,GACN,MAAM,CAE0C;AAUrD,oCAHI,OAAO,GACN,MAAM,CAImB;AAU9B,oCAHI,OAAO,GACN,MAAM,CAOX;AAYA,qCAHI,OAAO,GACN,MAAM,CAqBjB;AAaM,oCAHI,OAAO,GACN,MAAM,CA2BjB;AASM,qCAHI,OAAO,GACN,MAAM,CAOjB;AASM,oCAHI,OAAO,GACN,MAAM,CAOjB;AAgBM,gDAJI,OAAO,UA2BjB;AAQM,8CAHI,OAAO,UAI4D;AAhCvE,uCAJI,OAAO,UA2BjB;AA2BM,kDAHI,OAAO,GACN,UAAU,CAerB;AAMM,8CAHI,OAAO,GACN,MAAM,CAEiF;AAS5F,uCAHI,OAAO,GACN,MAAM,CAOjB;AAOM,0CAJI,OAAO,OACP,MAAM,GACL,QAAQ,CAMnB;AAKM,qCAFI,OAAO,UAEqE;AAKhF,qCAFI,OAAO,UAEqE;AAKhF,sCAFI,OAAO,OAE4F;AAKvG,uCAFI,OAAO,OAE8F;AAyCzG,iCAFI,OAAO,OAEqE;AAEvF;;;;GAIG;AACH;IACE;;;OAGG;IACH,wBAHW,UAAU,iBACD,OAAO,KAAE,CAAC,EAc7B;IAVC;;OAEG;IACH,eAPkB,OAAO,KAAE,CAAC,CAOR;IACpB;;;OAGG;IACH,GAFU,CAAC,GAAC,IAAI,CAEH;IACb,cAAc;IAGhB,UAWC;CACF;AAED;IACE;;;OAGG;IACH,wBAHW,UAAU,SACV,MAAM,EAShB;IALC;;;OAGG;IACH,GAFU,MAAM,CAEF;IAGhB;;OAEG;IACH,QAFY,MAAM,CAKjB;CACF;AAED;IACE;;;OAGG;IACH,wBAHW,UAAU,SACV,MAAM,EAUhB;IANC;;;OAGG;IACH,GAFU,MAAM,CAEF;IACd,cAAc;IAGhB;;OAEG;IACH,QAFY,MAAM,CAajB;CACF;AAED;IAMI;;OAEG;IACH,GAFU,MAAM,CAEN;IACV,cAAc;IAGhB,eAaC;CACF;AAED;IAMI;;OAEG;IACH,GAFU,MAAM,CAEN;IACV,cAAc;IAGhB,eAaC;CACF;AAED;IAMI;;OAEG;IACH,GAFU,MAAM,CAEN;IACV,cAAc;IACd,aAAa;IAGf;;OAEG;IACH,QAFY,MAAM,CAgBjB;CACF;AAED;IACE;;OAEG;IACH,wBAFW,UAAU,EASpB;IANC,2BAAgD;IAChD,YAAsC;IACtC;;OAEG;IACH,MAFU,MAAM,CAEH;IAGf;;OAEG;IACH,QAFY,MAAM,CAOjB;CACF"}
package/decoding.js CHANGED
@@ -32,6 +32,7 @@ import * as math from './math.js'
32
32
  import * as number from './number.js'
33
33
  import * as string from './string.js'
34
34
  import * as error from './error.js'
35
+ import * as encoding from './encoding.js'
35
36
 
36
37
  const errorUnexpectedEndOfArray = error.create('Unexpected end of array')
37
38
  const errorIntegerOutOfRange = error.create('Integer out of Range')
@@ -385,6 +386,31 @@ export const _readVarStringNative = decoder =>
385
386
  /* c8 ignore next */
386
387
  export const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill
387
388
 
389
+ /**
390
+ * @param {Decoder} decoder
391
+ * @return {Uint8Array}
392
+ */
393
+ export const readTerminatedUint8Array = decoder => {
394
+ const encoder = encoding.createEncoder()
395
+ let b
396
+ while (true) {
397
+ b = readUint8(decoder)
398
+ if (b === 0) {
399
+ return encoding.toUint8Array(encoder)
400
+ }
401
+ if (b === 1) {
402
+ b = readUint8(decoder)
403
+ }
404
+ encoding.write(encoder, b)
405
+ }
406
+ }
407
+
408
+ /**
409
+ * @param {Decoder} decoder
410
+ * @return {string}
411
+ */
412
+ export const readTerminatedString = decoder => string.decodeUtf8(readTerminatedUint8Array(decoder))
413
+
388
414
  /**
389
415
  * Look ahead and read varString without incrementing position
390
416
  *
@@ -0,0 +1,161 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var encoding = require('./buffer-c5d69c70.cjs');
6
+ var webcrypto = require('lib0/webcrypto');
7
+ var string = require('./string-6d104757.cjs');
8
+ var common = require('./common.cjs');
9
+ require('./environment-ad129e4d.cjs');
10
+ require('./map-9a5915e4.cjs');
11
+ require('./conditions-f5c0c102.cjs');
12
+ require('./storage.cjs');
13
+ require('./function-314fdc56.cjs');
14
+ require('./array-704ca50e.cjs');
15
+ require('./set-0f209abb.cjs');
16
+ require('./object-fecf6a7b.cjs');
17
+ require('./math-08e068f9.cjs');
18
+ require('./binary-ac8e39e2.cjs');
19
+ require('./number-466d8922.cjs');
20
+ require('./error-8582d695.cjs');
21
+
22
+ function _interopNamespace(e) {
23
+ if (e && e.__esModule) return e;
24
+ var n = Object.create(null);
25
+ if (e) {
26
+ Object.keys(e).forEach(function (k) {
27
+ if (k !== 'default') {
28
+ var d = Object.getOwnPropertyDescriptor(e, k);
29
+ Object.defineProperty(n, k, d.get ? d : {
30
+ enumerable: true,
31
+ get: function () { return e[k]; }
32
+ });
33
+ }
34
+ });
35
+ }
36
+ n["default"] = e;
37
+ return Object.freeze(n);
38
+ }
39
+
40
+ var webcrypto__namespace = /*#__PURE__*/_interopNamespace(webcrypto);
41
+
42
+ /**
43
+ * AES-GCM is a symmetric key for encryption
44
+ */
45
+
46
+ /**
47
+ * @typedef {Array<'encrypt'|'decrypt'>} Usages
48
+ */
49
+
50
+ /**
51
+ * @type {Usages}
52
+ */
53
+ const defaultUsages = ['encrypt', 'decrypt'];
54
+
55
+ /**
56
+ * @param {CryptoKey} key
57
+ * @param {Uint8Array} data
58
+ */
59
+ const encrypt = (key, data) => {
60
+ const iv = webcrypto__namespace.getRandomValues(new Uint8Array(16)); // 92bit is enough. 128bit is recommended if space is not an issue.
61
+ return webcrypto__namespace.subtle.encrypt(
62
+ {
63
+ name: 'AES-GCM',
64
+ iv
65
+ },
66
+ key,
67
+ data
68
+ ).then(cipher => {
69
+ const encryptedDataEncoder = encoding.createEncoder();
70
+ // iv may be sent in the clear to the other peers
71
+ encoding.writeUint8Array(encryptedDataEncoder, iv);
72
+ encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher));
73
+ return encoding.toUint8Array(encryptedDataEncoder)
74
+ })
75
+ };
76
+
77
+ /**
78
+ * @experimental The API is not final!
79
+ *
80
+ * Decrypt some data using AES-GCM method.
81
+ *
82
+ * @param {CryptoKey} key
83
+ * @param {Uint8Array} data
84
+ * @return {PromiseLike<Uint8Array>} decrypted buffer
85
+ */
86
+ const decrypt = (key, data) => {
87
+ const dataDecoder = encoding.createDecoder(data);
88
+ const iv = encoding.readUint8Array(dataDecoder, 16);
89
+ const cipher = encoding.readVarUint8Array(dataDecoder);
90
+ return webcrypto__namespace.subtle.decrypt(
91
+ {
92
+ name: 'AES-GCM',
93
+ iv
94
+ },
95
+ key,
96
+ cipher
97
+ ).then(data => new Uint8Array(data))
98
+ };
99
+
100
+ /**
101
+ * @param {any} jwk
102
+ * @param {Usages} [usages]
103
+ * @param {boolean} [extractable]
104
+ */
105
+ const importKey = (jwk, usages, extractable = false) => {
106
+ if (usages == null) {
107
+ /* c8 ignore next */
108
+ usages = jwk.key_ops || defaultUsages;
109
+ }
110
+ return webcrypto__namespace.subtle.importKey('jwk', jwk, 'AES-GCM', extractable, /** @type {Usages} */ (usages))
111
+ };
112
+
113
+ /**
114
+ * @param {Uint8Array | string} data
115
+ */
116
+ /* c8 ignore next */
117
+ const toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data;
118
+
119
+ /**
120
+ * @experimental The API is not final!
121
+ *
122
+ * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.
123
+ *
124
+ * @param {Uint8Array|string} secret
125
+ * @param {Uint8Array|string} salt
126
+ * @param {Object} opts
127
+ * @param {boolean} [opts.extractable]
128
+ * @param {Usages} [opts.usages]
129
+ */
130
+ const deriveKey = (secret, salt, { extractable = false, usages = defaultUsages } = {}) => {
131
+ return webcrypto__namespace.subtle.importKey(
132
+ 'raw',
133
+ toBinary(secret),
134
+ 'PBKDF2',
135
+ false,
136
+ ['deriveKey']
137
+ ).then(keyMaterial =>
138
+ webcrypto__namespace.subtle.deriveKey(
139
+ {
140
+ name: 'PBKDF2',
141
+ salt: toBinary(salt), // NIST recommends at least 64 bits
142
+ iterations: 600000, // OWASP recommends 600k iterations
143
+ hash: 'SHA-256'
144
+ },
145
+ keyMaterial,
146
+ {
147
+ name: 'AES-GCM',
148
+ length: 256
149
+ },
150
+ extractable,
151
+ usages
152
+ )
153
+ )
154
+ };
155
+
156
+ exports.exportKey = common.exportKey;
157
+ exports.decrypt = decrypt;
158
+ exports.deriveKey = deriveKey;
159
+ exports.encrypt = encrypt;
160
+ exports.importKey = importKey;
161
+ //# sourceMappingURL=aes-gcm.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-gcm.cjs","sources":["../crypto/aes-gcm.js"],"sourcesContent":["/**\n * AES-GCM is a symmetric key for encryption\n */\n\nimport * as encoding from '../encoding.js'\nimport * as decoding from '../decoding.js'\nimport * as webcrypto from 'lib0/webcrypto'\nimport * as string from '../string.js'\nexport { exportKey } from './common.js'\n\n/**\n * @typedef {Array<'encrypt'|'decrypt'>} Usages\n */\n\n/**\n * @type {Usages}\n */\nconst defaultUsages = ['encrypt', 'decrypt']\n\n/**\n * @param {CryptoKey} key\n * @param {Uint8Array} data\n */\nexport const encrypt = (key, data) => {\n const iv = webcrypto.getRandomValues(new Uint8Array(16)) // 92bit is enough. 128bit is recommended if space is not an issue.\n return webcrypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv\n },\n key,\n data\n ).then(cipher => {\n const encryptedDataEncoder = encoding.createEncoder()\n // iv may be sent in the clear to the other peers\n encoding.writeUint8Array(encryptedDataEncoder, iv)\n encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher))\n return encoding.toUint8Array(encryptedDataEncoder)\n })\n}\n\n/**\n * @experimental The API is not final!\n *\n * Decrypt some data using AES-GCM method.\n *\n * @param {CryptoKey} key\n * @param {Uint8Array} data\n * @return {PromiseLike<Uint8Array>} decrypted buffer\n */\nexport const decrypt = (key, data) => {\n const dataDecoder = decoding.createDecoder(data)\n const iv = decoding.readUint8Array(dataDecoder, 16)\n const cipher = decoding.readVarUint8Array(dataDecoder)\n return webcrypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv\n },\n key,\n cipher\n ).then(data => new Uint8Array(data))\n}\n\n/**\n * @param {any} jwk\n * @param {Usages} [usages]\n * @param {boolean} [extractable]\n */\nexport const importKey = (jwk, usages, extractable = false) => {\n if (usages == null) {\n /* c8 ignore next */\n usages = jwk.key_ops || defaultUsages\n }\n return webcrypto.subtle.importKey('jwk', jwk, 'AES-GCM', extractable, /** @type {Usages} */ (usages))\n}\n\n/**\n * @param {Uint8Array | string} data\n */\n/* c8 ignore next */\nconst toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data\n\n/**\n * @experimental The API is not final!\n *\n * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.\n *\n * @param {Uint8Array|string} secret\n * @param {Uint8Array|string} salt\n * @param {Object} opts\n * @param {boolean} [opts.extractable]\n * @param {Usages} [opts.usages]\n */\nexport const deriveKey = (secret, salt, { extractable = false, usages = defaultUsages } = {}) => {\n return webcrypto.subtle.importKey(\n 'raw',\n toBinary(secret),\n 'PBKDF2',\n false,\n ['deriveKey']\n ).then(keyMaterial =>\n webcrypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: toBinary(salt), // NIST recommends at least 64 bits\n iterations: 600000, // OWASP recommends 600k iterations\n hash: 'SHA-256'\n },\n keyMaterial,\n {\n name: 'AES-GCM',\n length: 256\n },\n extractable,\n usages\n )\n )\n}\n"],"names":["webcrypto","encoding.createEncoder","encoding.writeUint8Array","encoding.writeVarUint8Array","encoding.toUint8Array","decoding.createDecoder","decoding.readUint8Array","decoding.readVarUint8Array","string.encodeUtf8"],"mappings":"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"}
@@ -167,6 +167,24 @@ const uniqueBy = (arr, mapper) => {
167
167
  return result
168
168
  };
169
169
 
170
+ /**
171
+ * @template {ArrayLike<any>} ARR
172
+ * @template {function(ARR extends ArrayLike<infer T> ? T : never, number, ARR):any} MAPPER
173
+ * @param {ARR} arr
174
+ * @param {MAPPER} mapper
175
+ * @return {Array<MAPPER extends function(...any): infer M ? M : never>}
176
+ */
177
+ const map = (arr, mapper) => {
178
+ /**
179
+ * @type {Array<any>}
180
+ */
181
+ const res = Array(arr.length);
182
+ for (let i = 0; i < arr.length; i++) {
183
+ res[i] = mapper(/** @type {any} */ (arr[i]), i, /** @type {any} */ (arr));
184
+ }
185
+ return /** @type {any} */ (res)
186
+ };
187
+
170
188
  var array = /*#__PURE__*/Object.freeze({
171
189
  __proto__: null,
172
190
  last: last,
@@ -182,7 +200,8 @@ var array = /*#__PURE__*/Object.freeze({
182
200
  fold: fold,
183
201
  isArray: isArray,
184
202
  unique: unique,
185
- uniqueBy: uniqueBy
203
+ uniqueBy: uniqueBy,
204
+ map: map
186
205
  });
187
206
 
188
207
  exports.appendTo = appendTo;
@@ -196,8 +215,9 @@ exports.fold = fold;
196
215
  exports.from = from;
197
216
  exports.isArray = isArray;
198
217
  exports.last = last;
218
+ exports.map = map;
199
219
  exports.some = some;
200
220
  exports.unfold = unfold;
201
221
  exports.unique = unique;
202
222
  exports.uniqueBy = uniqueBy;
203
- //# sourceMappingURL=array-fd99bc23.cjs.map
223
+ //# sourceMappingURL=array-704ca50e.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-704ca50e.cjs","sources":["../array.js"],"sourcesContent":["/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike<L>} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array<C>}\n */\nexport const create = () => /** @type {Array<C>} */ ([])\n\n/**\n * @template D\n * @param {Array<D>} a\n * @return {Array<D>}\n */\nexport const copy = a => /** @type {Array<D>} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array<M>} dest\n * @param {Array<M>} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike<T>|Iterable<T>} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike<ITEM>} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike<S>} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike<ELEM>} a\n * @param {ArrayLike<ELEM>} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array<Array<ELEM>>} arr\n * @return {Array<ELEM>}\n */\nexport const flatten = arr => fold(arr, /** @type {Array<ELEM>} */ ([]), (acc, val) => acc.concat(val))\n\n/**\n * @template T\n * @param {number} len\n * @param {function(number, Array<T>):T} f\n * @return {Array<T>}\n */\nexport const unfold = (len, f) => {\n const array = new Array(len)\n for (let i = 0; i < len; i++) {\n array[i] = f(i, array)\n }\n return array\n}\n\n/**\n * @template T\n * @template RESULT\n * @param {Array<T>} arr\n * @param {RESULT} seed\n * @param {function(RESULT, T, number):RESULT} folder\n */\nexport const fold = (arr, seed, folder) => arr.reduce(folder, seed)\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array<T>} arr\n * @return {Array<T>}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike<T>} arr\n * @param {function(T):M} mapper\n * @return {Array<T>}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set<M>}\n */\n const happened = set.create()\n /**\n * @type {Array<T>}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n\n/**\n * @template {ArrayLike<any>} ARR\n * @template {function(ARR extends ArrayLike<infer T> ? T : never, number, ARR):any} MAPPER\n * @param {ARR} arr\n * @param {MAPPER} mapper\n * @return {Array<MAPPER extends function(...any): infer M ? M : never>}\n */\nexport const map = (arr, mapper) => {\n /**\n * @type {Array<any>}\n */\n const res = Array(arr.length)\n for (let i = 0; i < arr.length; i++) {\n res[i] = mapper(/** @type {any} */ (arr[i]), i, /** @type {any} */ (arr))\n }\n return /** @type {any} */ (res)\n}\n"],"names":["set.from","set.create"],"mappings":"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"}
package/dist/array.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  require('./set-0f209abb.cjs');
6
- var array = require('./array-fd99bc23.cjs');
6
+ var array = require('./array-704ca50e.cjs');
7
7
 
8
8
 
9
9
 
@@ -17,6 +17,7 @@ exports.fold = array.fold;
17
17
  exports.from = array.from;
18
18
  exports.isArray = array.isArray;
19
19
  exports.last = array.last;
20
+ exports.map = array.map;
20
21
  exports.some = array.some;
21
22
  exports.unfold = array.unfold;
22
23
  exports.unique = array.unique;
@@ -1 +1 @@
1
- {"version":3,"file":"array.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"array.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/array.d.ts CHANGED
@@ -25,4 +25,5 @@ export function fold<T_1, RESULT>(arr: T_1[], seed: RESULT, folder: (arg0: RESUL
25
25
  export const isArray: (arg: any) => arg is any[];
26
26
  export function unique<T_1>(arr: T_1[]): T_1[];
27
27
  export function uniqueBy<T_1, M>(arr: ArrayLike<T_1>, mapper: (arg0: T_1) => M): T_1[];
28
+ export function map<ARR extends ArrayLike<any>, MAPPER extends (arg0: ARR extends ArrayLike<infer T_1> ? T_1 : never, arg1: number, arg2: ARR) => any>(arr: ARR, mapper: MAPPER): (MAPPER extends (...arg0: any[]) => infer M ? M : never)[];
28
29
  //# sourceMappingURL=array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../array.js"],"names":[],"mappings":"AAeO,8CAAuC;AAMvC,iCAAiD;AAOjD,qCAAqD;AASrD,uDAIN;AAED;;;;;;;GAOG;AACH;;;;;EAA8B;AAavB,yFAHmB,MAAM,gBAAO,OAAO,GAClC,OAAO,CASlB;AAYM,+EAHgB,MAAM,gBAAO,OAAO,GAC/B,OAAO,CASlB;AASM,yEAFK,OAAO,CAEqF;AAOjG,qDAAgG;AAQhG,iCAJI,MAAM,YACG,MAAM,8BASzB;AASM,oGAFwB,MAAM,qBAE8B;AAEnE,iDAAoC;AAO7B,+CAAyC;AASzC,uFAkBN"}
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../array.js"],"names":[],"mappings":"AAeO,8CAAuC;AAMvC,iCAAiD;AAOjD,qCAAqD;AASrD,uDAIN;AAED;;;;;;;GAOG;AACH;;;;;EAA8B;AAavB,yFAHmB,MAAM,gBAAO,OAAO,GAClC,OAAO,CASlB;AAYM,+EAHgB,MAAM,gBAAO,OAAO,GAC/B,OAAO,CASlB;AASM,yEAFK,OAAO,CAEqF;AAOjG,qDAAgG;AAQhG,iCAJI,MAAM,YACG,MAAM,8BASzB;AASM,oGAFwB,MAAM,qBAE8B;AAEnE,iDAAoC;AAO7B,+CAAyC;AASzC,uFAkBN;AASM,4HAL4D,MAAM,gBAAO,GAAG,uDAGtC,GAAG,8BAW/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"binary.test.d.ts","sourceRoot":"","sources":["../binary.test.js"],"names":[],"mappings":"AAOO,6BAFI,EAAE,QAAQ,QAOpB;AAKM,8BAFI,EAAE,QAAQ,QAWpB;mBAxBkB,cAAc"}
1
+ {"version":3,"file":"binary.test.d.ts","sourceRoot":"","sources":["../binary.test.js"],"names":[],"mappings":"AAMO,6BAFI,EAAE,QAAQ,QAOpB;AAKM,8BAFI,EAAE,QAAQ,QAWpB;mBAxBkB,cAAc"}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var map = require('./map-9a5915e4.cjs');
4
4
  var set = require('./set-0f209abb.cjs');
5
- var encoding = require('./buffer-621617f6.cjs');
5
+ var encoding = require('./buffer-c5d69c70.cjs');
6
6
  var storage = require('./storage.cjs');
7
7
 
8
8
  /* eslint-env browser */
@@ -125,4 +125,4 @@ exports.broadcastchannel = broadcastchannel;
125
125
  exports.publish = publish;
126
126
  exports.subscribe = subscribe;
127
127
  exports.unsubscribe = unsubscribe;
128
- //# sourceMappingURL=broadcastchannel-fff713ef.cjs.map
128
+ //# sourceMappingURL=broadcastchannel-7801969a.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"broadcastchannel-fff713ef.cjs","sources":["../broadcastchannel.js"],"sourcesContent":["/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set<function(any, any):any>} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map<string, Channel>}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n"],"names":["buffer.fromBase64","storage.onChange","storage.varStorage","buffer.toBase64","buffer.createUint8ArrayFromArrayBuffer","storage.offChange","map.setIfUndefined","set.create"],"mappings":"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"}
1
+ {"version":3,"file":"broadcastchannel-7801969a.cjs","sources":["../broadcastchannel.js"],"sourcesContent":["/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set<function(any, any):any>} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map<string, Channel>}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n"],"names":["buffer.fromBase64","storage.onChange","storage.varStorage","buffer.toBase64","buffer.createUint8ArrayFromArrayBuffer","storage.offChange","map.setIfUndefined","set.create"],"mappings":"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"}
@@ -4,18 +4,18 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  require('./map-9a5915e4.cjs');
6
6
  require('./set-0f209abb.cjs');
7
- require('./buffer-621617f6.cjs');
7
+ require('./buffer-c5d69c70.cjs');
8
8
  require('./storage.cjs');
9
- var broadcastchannel = require('./broadcastchannel-fff713ef.cjs');
10
- require('./string-e7eb0c1d.cjs');
11
- require('./array-fd99bc23.cjs');
12
- require('./environment-0c5ff22b.cjs');
9
+ var broadcastchannel = require('./broadcastchannel-7801969a.cjs');
10
+ require('./string-6d104757.cjs');
11
+ require('./array-704ca50e.cjs');
12
+ require('./environment-ad129e4d.cjs');
13
13
  require('./conditions-f5c0c102.cjs');
14
- require('./function-831844d3.cjs');
15
- require('./object-aad630ed.cjs');
16
- require('./binary-ac8e39e2.cjs');
14
+ require('./function-314fdc56.cjs');
15
+ require('./object-fecf6a7b.cjs');
17
16
  require('./math-08e068f9.cjs');
18
- require('./number-dc113762.cjs');
17
+ require('./binary-ac8e39e2.cjs');
18
+ require('./number-466d8922.cjs');
19
19
  require('./error-8582d695.cjs');
20
20
 
21
21
 
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var string = require('./string-e7eb0c1d.cjs');
4
- var environment = require('./environment-0c5ff22b.cjs');
5
- var binary = require('./binary-ac8e39e2.cjs');
3
+ var string = require('./string-6d104757.cjs');
4
+ var environment = require('./environment-ad129e4d.cjs');
5
+ var array = require('./array-704ca50e.cjs');
6
6
  var math = require('./math-08e068f9.cjs');
7
- var number = require('./number-dc113762.cjs');
7
+ var binary = require('./binary-ac8e39e2.cjs');
8
+ var number = require('./number-466d8922.cjs');
8
9
  var error = require('./error-8582d695.cjs');
9
- var array = require('./array-fd99bc23.cjs');
10
10
 
11
11
  /**
12
12
  * Efficient schema-less binary encoding with support for variable length encoding.
@@ -347,6 +347,48 @@ const _writeVarStringPolyfill = (encoder, str) => {
347
347
  /* c8 ignore next */
348
348
  const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill;
349
349
 
350
+ /**
351
+ * Write a string terminated by a special byte sequence. This is not very performant and is
352
+ * generally discouraged. However, the resulting byte arrays are lexiographically ordered which
353
+ * makes this a nice feature for databases.
354
+ *
355
+ * The string will be encoded using utf8 and then terminated and escaped using writeTerminatingUint8Array.
356
+ *
357
+ * @function
358
+ * @param {Encoder} encoder
359
+ * @param {String} str The string that is to be encoded.
360
+ */
361
+ const writeTerminatedString = (encoder, str) =>
362
+ writeTerminatedUint8Array(encoder, string.encodeUtf8(str));
363
+
364
+ /**
365
+ * Write a terminating Uint8Array. Note that this is not performant and is generally
366
+ * discouraged. There are few situations when this is needed.
367
+ *
368
+ * We use 0x0 as a terminating character. 0x1 serves as an escape character for 0x0 and 0x1.
369
+ *
370
+ * Example: [0,1,2] is encoded to [1,0,1,1,2,0]. 0x0, and 0x1 needed to be escaped using 0x1. Then
371
+ * the result is terminated using the 0x0 character.
372
+ *
373
+ * This is basically how many systems implement null terminated strings. However, we use an escape
374
+ * character 0x1 to avoid issues and potenial attacks on our database (if this is used as a key
375
+ * encoder for NoSql databases).
376
+ *
377
+ * @function
378
+ * @param {Encoder} encoder
379
+ * @param {Uint8Array} buf The string that is to be encoded.
380
+ */
381
+ const writeTerminatedUint8Array = (encoder, buf) => {
382
+ for (let i = 0; i < buf.length; i++) {
383
+ const b = buf[i];
384
+ if (b === 0 || b === 1) {
385
+ write(encoder, 1);
386
+ }
387
+ write(encoder, buf[i]);
388
+ }
389
+ write(encoder, 0);
390
+ };
391
+
350
392
  /**
351
393
  * Write the content of another Encoder.
352
394
  *
@@ -899,6 +941,8 @@ var encoding = /*#__PURE__*/Object.freeze({
899
941
  _writeVarStringNative: _writeVarStringNative,
900
942
  _writeVarStringPolyfill: _writeVarStringPolyfill,
901
943
  writeVarString: writeVarString,
944
+ writeTerminatedString: writeTerminatedString,
945
+ writeTerminatedUint8Array: writeTerminatedUint8Array,
902
946
  writeBinaryEncoder: writeBinaryEncoder,
903
947
  writeUint8Array: writeUint8Array,
904
948
  writeVarUint8Array: writeVarUint8Array,
@@ -1297,6 +1341,31 @@ const _readVarStringNative = decoder =>
1297
1341
  /* c8 ignore next */
1298
1342
  const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill;
1299
1343
 
1344
+ /**
1345
+ * @param {Decoder} decoder
1346
+ * @return {Uint8Array}
1347
+ */
1348
+ const readTerminatedUint8Array = decoder => {
1349
+ const encoder = createEncoder();
1350
+ let b;
1351
+ while (true) {
1352
+ b = readUint8(decoder);
1353
+ if (b === 0) {
1354
+ return toUint8Array(encoder)
1355
+ }
1356
+ if (b === 1) {
1357
+ b = readUint8(decoder);
1358
+ }
1359
+ write(encoder, b);
1360
+ }
1361
+ };
1362
+
1363
+ /**
1364
+ * @param {Decoder} decoder
1365
+ * @return {string}
1366
+ */
1367
+ const readTerminatedString = decoder => string.decodeUtf8(readTerminatedUint8Array(decoder));
1368
+
1300
1369
  /**
1301
1370
  * Look ahead and read varString without incrementing position
1302
1371
  *
@@ -1616,6 +1685,8 @@ var decoding = /*#__PURE__*/Object.freeze({
1616
1685
  _readVarStringPolyfill: _readVarStringPolyfill,
1617
1686
  _readVarStringNative: _readVarStringNative,
1618
1687
  readVarString: readVarString,
1688
+ readTerminatedUint8Array: readTerminatedUint8Array,
1689
+ readTerminatedString: readTerminatedString,
1619
1690
  peekVarString: peekVarString,
1620
1691
  readFromDataView: readFromDataView,
1621
1692
  readFloat32: readFloat32,
@@ -1710,6 +1781,27 @@ const toBase64 = environment.isBrowser ? toBase64Browser : toBase64Node;
1710
1781
  /* c8 ignore next */
1711
1782
  const fromBase64 = environment.isBrowser ? fromBase64Browser : fromBase64Node;
1712
1783
 
1784
+ /**
1785
+ * Base64 is always a more efficient choice. This exists for utility purposes only.
1786
+ *
1787
+ * @param {Uint8Array} buf
1788
+ */
1789
+ const toHexString = buf => array.map(buf, b => b.toString(16).padStart(2, '0')).join('');
1790
+
1791
+ /**
1792
+ * Note: This function expects that the hex doesn't start with 0x..
1793
+ *
1794
+ * @param {string} hex
1795
+ */
1796
+ const fromHexString = hex => {
1797
+ const hlen = hex.length;
1798
+ const buf = new Uint8Array(math.ceil(hlen / 2));
1799
+ for (let i = 0; i < hlen; i += 2) {
1800
+ buf[buf.length - i / 2 - 1] = Number.parseInt(hex.slice(hlen - i - 2, hlen - i), 16);
1801
+ }
1802
+ return buf
1803
+ };
1804
+
1713
1805
  /**
1714
1806
  * Copy the content of an Uint8Array view to a new ArrayBuffer.
1715
1807
  *
@@ -1743,6 +1835,23 @@ const encodeAny = data => {
1743
1835
  */
1744
1836
  const decodeAny = buf => readAny(createDecoder(buf));
1745
1837
 
1838
+ /**
1839
+ * Shift Byte Array {N} bits to the left. Does not expand byte array.
1840
+ *
1841
+ * @param {Uint8Array} bs
1842
+ * @param {number} N should be in the range of [0-7]
1843
+ */
1844
+ const shiftNBitsLeft = (bs, N) => {
1845
+ if (N === 0) return bs
1846
+ bs = new Uint8Array(bs);
1847
+ bs[0] <<= N;
1848
+ for (let i = 1; i < bs.length; i++) {
1849
+ bs[i - 1] |= bs[i] >>> (8 - N);
1850
+ bs[i] <<= N;
1851
+ }
1852
+ return bs
1853
+ };
1854
+
1746
1855
  var buffer = /*#__PURE__*/Object.freeze({
1747
1856
  __proto__: null,
1748
1857
  createUint8ArrayFromLen: createUint8ArrayFromLen,
@@ -1750,9 +1859,12 @@ var buffer = /*#__PURE__*/Object.freeze({
1750
1859
  createUint8ArrayFromArrayBuffer: createUint8ArrayFromArrayBuffer,
1751
1860
  toBase64: toBase64,
1752
1861
  fromBase64: fromBase64,
1862
+ toHexString: toHexString,
1863
+ fromHexString: fromHexString,
1753
1864
  copyUint8Array: copyUint8Array,
1754
1865
  encodeAny: encodeAny,
1755
- decodeAny: decodeAny
1866
+ decodeAny: decodeAny,
1867
+ shiftNBitsLeft: shiftNBitsLeft
1756
1868
  });
1757
1869
 
1758
1870
  exports.Decoder = Decoder;
@@ -1789,6 +1901,7 @@ exports.encode = encode;
1789
1901
  exports.encodeAny = encodeAny;
1790
1902
  exports.encoding = encoding;
1791
1903
  exports.fromBase64 = fromBase64;
1904
+ exports.fromHexString = fromHexString;
1792
1905
  exports.hasContent = hasContent$1;
1793
1906
  exports.hasContent$1 = hasContent;
1794
1907
  exports.length = length;
@@ -1805,6 +1918,8 @@ exports.readFloat32 = readFloat32;
1805
1918
  exports.readFloat64 = readFloat64;
1806
1919
  exports.readFromDataView = readFromDataView;
1807
1920
  exports.readTailAsUint8Array = readTailAsUint8Array;
1921
+ exports.readTerminatedString = readTerminatedString;
1922
+ exports.readTerminatedUint8Array = readTerminatedUint8Array;
1808
1923
  exports.readUint16 = readUint16;
1809
1924
  exports.readUint32 = readUint32;
1810
1925
  exports.readUint32BigEndian = readUint32BigEndian;
@@ -1818,8 +1933,10 @@ exports.set = set;
1818
1933
  exports.setUint16 = setUint16;
1819
1934
  exports.setUint32 = setUint32;
1820
1935
  exports.setUint8 = setUint8;
1936
+ exports.shiftNBitsLeft = shiftNBitsLeft;
1821
1937
  exports.skip8 = skip8;
1822
1938
  exports.toBase64 = toBase64;
1939
+ exports.toHexString = toHexString;
1823
1940
  exports.toUint8Array = toUint8Array;
1824
1941
  exports.verifyLen = verifyLen;
1825
1942
  exports.write = write;
@@ -1830,6 +1947,8 @@ exports.writeBinaryEncoder = writeBinaryEncoder;
1830
1947
  exports.writeFloat32 = writeFloat32;
1831
1948
  exports.writeFloat64 = writeFloat64;
1832
1949
  exports.writeOnDataView = writeOnDataView;
1950
+ exports.writeTerminatedString = writeTerminatedString;
1951
+ exports.writeTerminatedUint8Array = writeTerminatedUint8Array;
1833
1952
  exports.writeUint16 = writeUint16;
1834
1953
  exports.writeUint32 = writeUint32;
1835
1954
  exports.writeUint32BigEndian = writeUint32BigEndian;
@@ -1839,4 +1958,4 @@ exports.writeVarInt = writeVarInt;
1839
1958
  exports.writeVarString = writeVarString;
1840
1959
  exports.writeVarUint = writeVarUint;
1841
1960
  exports.writeVarUint8Array = writeVarUint8Array;
1842
- //# sourceMappingURL=buffer-621617f6.cjs.map
1961
+ //# sourceMappingURL=buffer-c5d69c70.cjs.map