lib0 0.2.63 → 0.2.65

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 (259) hide show
  1. package/array.test.d.ts +6 -5
  2. package/array.test.d.ts.map +1 -1
  3. package/bin/gendocs.js +0 -1
  4. package/bin/gentesthtml.js +54 -0
  5. package/broadcastchannel.d.ts.map +1 -1
  6. package/broadcastchannel.js +4 -4
  7. package/buffer.d.ts.map +1 -1
  8. package/buffer.js +6 -4
  9. package/conditions.js +1 -1
  10. package/coverage/tmp/coverage-64278-1678297615727-0.json +1 -0
  11. package/crypto/aes-gcm.d.ts +10 -0
  12. package/crypto/aes-gcm.d.ts.map +1 -0
  13. package/crypto/aes-gcm.js +124 -0
  14. package/crypto/ecdsa.d.ts +13 -0
  15. package/crypto/ecdsa.d.ts.map +1 -0
  16. package/crypto/ecdsa.js +93 -0
  17. package/crypto/rsa-oaep.d.ts +13 -0
  18. package/crypto/rsa-oaep.d.ts.map +1 -0
  19. package/crypto/rsa-oaep.js +84 -0
  20. package/crypto.test.d.ts +2 -0
  21. package/crypto.test.d.ts.map +1 -1
  22. package/decoding.d.ts.map +1 -1
  23. package/decoding.js +7 -4
  24. package/deno.json +7 -0
  25. package/deno.lock +122 -0
  26. package/dist/{array-5347125b.cjs → array-a1682de6.cjs} +2 -2
  27. package/dist/{array-5347125b.cjs.map → array-a1682de6.cjs.map} +1 -1
  28. package/dist/array.cjs +2 -2
  29. package/dist/array.test.d.ts +6 -5
  30. package/dist/array.test.d.ts.map +1 -1
  31. package/dist/{broadcastchannel-61da4e94.cjs → broadcastchannel-4e5909e2.cjs} +8 -8
  32. package/dist/broadcastchannel-4e5909e2.cjs.map +1 -0
  33. package/dist/broadcastchannel.cjs +12 -12
  34. package/dist/broadcastchannel.d.ts.map +1 -1
  35. package/dist/{buffer-884e5a1d.cjs → buffer-9b566988.cjs} +20 -16
  36. package/dist/buffer-9b566988.cjs.map +1 -0
  37. package/dist/buffer.cjs +11 -11
  38. package/dist/buffer.d.ts.map +1 -1
  39. package/dist/cache.cjs +7 -7
  40. package/dist/component.cjs +9 -9
  41. package/dist/{conditions-fb475c70.cjs → conditions-f5c0c102.cjs} +2 -2
  42. package/dist/conditions-f5c0c102.cjs.map +1 -0
  43. package/dist/conditions.cjs +1 -1
  44. package/dist/crypto/aes-gcm.d.ts +10 -0
  45. package/dist/crypto/aes-gcm.d.ts.map +1 -0
  46. package/dist/crypto/ecdsa.d.ts +13 -0
  47. package/dist/crypto/ecdsa.d.ts.map +1 -0
  48. package/dist/crypto/rsa-oaep.d.ts +13 -0
  49. package/dist/crypto/rsa-oaep.d.ts.map +1 -0
  50. package/dist/crypto.test.d.ts +2 -0
  51. package/dist/crypto.test.d.ts.map +1 -1
  52. package/dist/decoding.cjs +11 -11
  53. package/dist/decoding.d.ts.map +1 -1
  54. package/dist/{diff-2cbda723.cjs → diff-55061848.cjs} +2 -2
  55. package/dist/{diff-2cbda723.cjs.map → diff-55061848.cjs.map} +1 -1
  56. package/dist/diff.cjs +5 -5
  57. package/dist/{dom-58958c04.cjs → dom-7ef10fba.cjs} +4 -32
  58. package/dist/dom-7ef10fba.cjs.map +1 -0
  59. package/dist/dom.cjs +2 -2
  60. package/dist/dom.d.ts.map +1 -1
  61. package/dist/encoding.cjs +11 -11
  62. package/dist/encoding.d.ts.map +1 -1
  63. package/dist/encoding.test.d.ts +2 -1
  64. package/dist/encoding.test.d.ts.map +1 -1
  65. package/dist/{environment-ad5e7386.cjs → environment-01c0e75b.cjs} +20 -19
  66. package/dist/environment-01c0e75b.cjs.map +1 -0
  67. package/dist/environment.cjs +8 -8
  68. package/dist/environment.d.ts.map +1 -1
  69. package/dist/{error-873c9cbf.cjs → error-8582d695.cjs} +4 -4
  70. package/dist/error-8582d695.cjs.map +1 -0
  71. package/dist/error.cjs +1 -1
  72. package/dist/error.d.ts.map +1 -1
  73. package/dist/{eventloop-c60b5658.cjs → eventloop-d0571621.cjs} +5 -5
  74. package/dist/eventloop-d0571621.cjs.map +1 -0
  75. package/dist/eventloop.cjs +1 -1
  76. package/dist/eventloop.d.ts.map +1 -1
  77. package/dist/eventloop.test.d.ts +6 -5
  78. package/dist/eventloop.test.d.ts.map +1 -1
  79. package/dist/{function-3695121b.cjs → function-35e8ddea.cjs} +6 -3
  80. package/dist/function-35e8ddea.cjs.map +1 -0
  81. package/dist/function.cjs +4 -4
  82. package/dist/function.d.ts.map +1 -1
  83. package/dist/function.test.d.ts +3 -1
  84. package/dist/function.test.d.ts.map +1 -1
  85. package/dist/index.cjs +22 -22
  86. package/dist/{indexeddb-7b2c0026.cjs → indexeddb-1f25af34.cjs} +7 -30
  87. package/dist/indexeddb-1f25af34.cjs.map +1 -0
  88. package/dist/indexeddb.cjs +4 -4
  89. package/dist/indexeddb.d.ts.map +1 -1
  90. package/dist/list.cjs +7 -6
  91. package/dist/list.cjs.map +1 -1
  92. package/dist/list.d.ts.map +1 -1
  93. package/dist/list.test.d.ts +2 -2
  94. package/dist/list.test.d.ts.map +1 -1
  95. package/dist/{logging-70fd0a99.cjs → logging-641c32f4.cjs} +55 -50
  96. package/dist/logging-641c32f4.cjs.map +1 -0
  97. package/dist/logging.cjs +12 -12
  98. package/dist/logging.d.ts.map +1 -1
  99. package/dist/{map-28a001c9.cjs → map-9a5915e4.cjs} +6 -5
  100. package/dist/map-9a5915e4.cjs.map +1 -0
  101. package/dist/map.cjs +1 -1
  102. package/dist/map.d.ts +1 -1
  103. package/dist/map.d.ts.map +1 -1
  104. package/dist/map.test.d.ts +1 -1
  105. package/dist/map.test.d.ts.map +1 -1
  106. package/dist/{number-e62129bc.cjs → number-f97e141a.cjs} +2 -2
  107. package/dist/number-f97e141a.cjs.map +1 -0
  108. package/dist/number.cjs +1 -1
  109. package/dist/{object-fe9c0021.cjs → object-aad630ed.cjs} +6 -3
  110. package/dist/object-aad630ed.cjs.map +1 -0
  111. package/dist/object.cjs +1 -1
  112. package/dist/object.d.ts +3 -3
  113. package/dist/object.d.ts.map +1 -1
  114. package/dist/object.test.d.ts.map +1 -1
  115. package/dist/observable.cjs +3 -3
  116. package/dist/{prng-397a85ab.cjs → prng-cd2451c9.cjs} +5 -4
  117. package/dist/prng-cd2451c9.cjs.map +1 -0
  118. package/dist/prng.cjs +12 -12
  119. package/dist/prng.d.ts.map +1 -1
  120. package/dist/{promise-1a9fe712.cjs → promise-a4f32c85.cjs} +3 -3
  121. package/dist/promise-a4f32c85.cjs.map +1 -0
  122. package/dist/promise.cjs +2 -2
  123. package/dist/random.test.d.ts +1 -0
  124. package/dist/random.test.d.ts.map +1 -1
  125. package/dist/rollup.config.d.ts +2 -28
  126. package/dist/{set-b596ef38.cjs → set-0f209abb.cjs} +4 -7
  127. package/dist/set-0f209abb.cjs.map +1 -0
  128. package/dist/set.cjs +1 -1
  129. package/dist/set.d.ts.map +1 -1
  130. package/dist/set.test.d.ts +1 -1
  131. package/dist/set.test.d.ts.map +1 -1
  132. package/dist/sort.test.d.ts +2 -1
  133. package/dist/sort.test.d.ts.map +1 -1
  134. package/dist/storage.cjs +6 -5
  135. package/dist/storage.cjs.map +1 -1
  136. package/dist/storage.d.ts.map +1 -1
  137. package/dist/{string-ad04f734.cjs → string-b1bee84b.cjs} +8 -7
  138. package/dist/string-b1bee84b.cjs.map +1 -0
  139. package/dist/string.cjs +1 -1
  140. package/dist/string.d.ts.map +1 -1
  141. package/dist/symbol.test.d.ts +3 -0
  142. package/dist/symbol.test.d.ts.map +1 -0
  143. package/dist/testing.cjs +57 -40
  144. package/dist/testing.cjs.map +1 -1
  145. package/dist/testing.d.ts +2 -1
  146. package/dist/testing.d.ts.map +1 -1
  147. package/dist/testing.test.d.ts +1 -0
  148. package/dist/testing.test.d.ts.map +1 -1
  149. package/dist/{time-e00067da.cjs → time-bc2081b9.cjs} +2 -2
  150. package/dist/time-bc2081b9.cjs.map +1 -0
  151. package/dist/time.cjs +1 -1
  152. package/dist/{tree-b67c7947.cjs → tree-9f3c8837.cjs} +23 -22
  153. package/dist/tree-9f3c8837.cjs.map +1 -0
  154. package/dist/tree.cjs +1 -1
  155. package/dist/tree.d.ts.map +1 -1
  156. package/dist/url.cjs +2 -2
  157. package/dist/url.cjs.map +1 -1
  158. package/dist/webcrypto.deno.cjs +12 -0
  159. package/dist/webcrypto.deno.cjs.map +1 -0
  160. package/dist/webcrypto.deno.d.ts +3 -0
  161. package/dist/webcrypto.deno.d.ts.map +1 -0
  162. package/dist/{websocket-dd57e44f.cjs → websocket-85f1d597.cjs} +2 -2
  163. package/dist/{websocket-dd57e44f.cjs.map → websocket-85f1d597.cjs.map} +1 -1
  164. package/dist/websocket.cjs +5 -5
  165. package/dom.d.ts.map +1 -1
  166. package/dom.js +2 -30
  167. package/encoding.d.ts.map +1 -1
  168. package/encoding.js +2 -3
  169. package/encoding.test.d.ts +2 -1
  170. package/encoding.test.d.ts.map +1 -1
  171. package/environment.d.ts.map +1 -1
  172. package/environment.js +15 -14
  173. package/error.d.ts.map +1 -1
  174. package/error.js +3 -3
  175. package/eventloop.d.ts.map +1 -1
  176. package/eventloop.js +4 -4
  177. package/eventloop.test.d.ts +6 -5
  178. package/eventloop.test.d.ts.map +1 -1
  179. package/function.d.ts.map +1 -1
  180. package/function.js +3 -0
  181. package/function.test.d.ts +3 -1
  182. package/function.test.d.ts.map +1 -1
  183. package/indexeddb.d.ts.map +1 -1
  184. package/indexeddb.js +4 -27
  185. package/list.d.ts.map +1 -1
  186. package/list.js +2 -1
  187. package/list.test.d.ts +2 -2
  188. package/list.test.d.ts.map +1 -1
  189. package/logging.d.ts.map +1 -1
  190. package/logging.js +47 -42
  191. package/map.d.ts +1 -1
  192. package/map.d.ts.map +1 -1
  193. package/map.js +5 -4
  194. package/map.test.d.ts +1 -1
  195. package/map.test.d.ts.map +1 -1
  196. package/number.js +1 -1
  197. package/object.d.ts +3 -3
  198. package/object.d.ts.map +1 -1
  199. package/object.js +5 -2
  200. package/object.test.d.ts.map +1 -1
  201. package/package.json +33 -17
  202. package/prng.d.ts.map +1 -1
  203. package/prng.js +2 -1
  204. package/promise.js +1 -1
  205. package/random.test.d.ts +1 -0
  206. package/random.test.d.ts.map +1 -1
  207. package/rollup.config.d.ts +2 -28
  208. package/set.d.ts.map +1 -1
  209. package/set.js +3 -6
  210. package/set.test.d.ts +1 -1
  211. package/set.test.d.ts.map +1 -1
  212. package/sort.test.d.ts +2 -1
  213. package/sort.test.d.ts.map +1 -1
  214. package/storage.d.ts.map +1 -1
  215. package/storage.js +6 -5
  216. package/string.d.ts.map +1 -1
  217. package/string.js +7 -6
  218. package/symbol.test.d.ts +3 -0
  219. package/symbol.test.d.ts.map +1 -0
  220. package/test.html +150 -2
  221. package/test.js +5 -3
  222. package/testing.d.ts +2 -1
  223. package/testing.d.ts.map +1 -1
  224. package/testing.js +38 -22
  225. package/testing.test.d.ts +1 -0
  226. package/testing.test.d.ts.map +1 -1
  227. package/time.js +1 -1
  228. package/tree.d.ts.map +1 -1
  229. package/tree.js +22 -21
  230. package/url.js +1 -1
  231. package/webcrypto.deno.d.ts +3 -0
  232. package/webcrypto.deno.d.ts.map +1 -0
  233. package/webcrypto.deno.js +4 -0
  234. package/crypto.d.ts +0 -22
  235. package/crypto.d.ts.map +0 -1
  236. package/crypto.js +0 -185
  237. package/dist/broadcastchannel-61da4e94.cjs.map +0 -1
  238. package/dist/buffer-884e5a1d.cjs.map +0 -1
  239. package/dist/conditions-fb475c70.cjs.map +0 -1
  240. package/dist/crypto.cjs +0 -231
  241. package/dist/crypto.cjs.map +0 -1
  242. package/dist/crypto.d.ts +0 -22
  243. package/dist/crypto.d.ts.map +0 -1
  244. package/dist/dom-58958c04.cjs.map +0 -1
  245. package/dist/environment-ad5e7386.cjs.map +0 -1
  246. package/dist/error-873c9cbf.cjs.map +0 -1
  247. package/dist/eventloop-c60b5658.cjs.map +0 -1
  248. package/dist/function-3695121b.cjs.map +0 -1
  249. package/dist/indexeddb-7b2c0026.cjs.map +0 -1
  250. package/dist/logging-70fd0a99.cjs.map +0 -1
  251. package/dist/map-28a001c9.cjs.map +0 -1
  252. package/dist/number-e62129bc.cjs.map +0 -1
  253. package/dist/object-fe9c0021.cjs.map +0 -1
  254. package/dist/prng-397a85ab.cjs.map +0 -1
  255. package/dist/promise-1a9fe712.cjs.map +0 -1
  256. package/dist/set-b596ef38.cjs.map +0 -1
  257. package/dist/string-ad04f734.cjs.map +0 -1
  258. package/dist/time-e00067da.cjs.map +0 -1
  259. package/dist/tree-b67c7947.cjs.map +0 -1
@@ -0,0 +1,10 @@
1
+ export function encrypt(key: CryptoKey, data: Uint8Array): Promise<Uint8Array>;
2
+ export function decrypt(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
4
+ export function importKey(jwk: any, usages?: Usages | undefined, extractable?: boolean | undefined): Promise<CryptoKey>;
5
+ export function deriveKey(secret: Uint8Array | string, salt: Uint8Array | string, { extractable, usages }?: {
6
+ extractable?: boolean | undefined;
7
+ usages?: Usages | undefined;
8
+ }): Promise<CryptoKey>;
9
+ export type Usages = Array<'encrypt' | 'decrypt'>;
10
+ //# sourceMappingURL=aes-gcm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-gcm.d.ts","sourceRoot":"","sources":["aes-gcm.js"],"names":[],"mappings":"AAsBO,6BAHI,SAAS,QACT,UAAU,uBAkBpB;AAWM,6BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CAclC;AAKM,+BAFI,SAAS,uBAGoB;AAOjC,+BAJI,GAAG,sFAUb;AAmBM,kCANI,UAAU,GAAC,MAAM,QACjB,UAAU,GAAC,MAAM;IAEF,WAAW;IACZ,MAAM;uBA0B9B;qBAjHY,MAAM,SAAS,GAAC,SAAS,CAAC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * AES-GCM is a symmetric key for encryption
3
+ */
4
+
5
+ import * as encoding from '../encoding.js'
6
+ import * as decoding from '../decoding.js'
7
+ import * as webcrypto from 'lib0/webcrypto'
8
+ import * as string from '../string.js'
9
+
10
+ /**
11
+ * @typedef {Array<'encrypt'|'decrypt'>} Usages
12
+ */
13
+
14
+ /**
15
+ * @type {Usages}
16
+ */
17
+ const defaultUsages = ['encrypt', 'decrypt']
18
+
19
+ /**
20
+ * @param {CryptoKey} key
21
+ * @param {Uint8Array} data
22
+ */
23
+ export const encrypt = (key, data) => {
24
+ const iv = webcrypto.getRandomValues(new Uint8Array(16)) // 92bit is enough. 128bit is recommended if space is not an issue.
25
+ return webcrypto.subtle.encrypt(
26
+ {
27
+ name: 'AES-GCM',
28
+ iv
29
+ },
30
+ key,
31
+ data
32
+ ).then(cipher => {
33
+ const encryptedDataEncoder = encoding.createEncoder()
34
+ // iv may be sent in the clear to the other peers
35
+ encoding.writeUint8Array(encryptedDataEncoder, iv)
36
+ encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher))
37
+ return encoding.toUint8Array(encryptedDataEncoder)
38
+ })
39
+ }
40
+
41
+ /**
42
+ * @experimental The API is not final!
43
+ *
44
+ * Decrypt some data using AES-GCM method.
45
+ *
46
+ * @param {CryptoKey} key
47
+ * @param {Uint8Array} data
48
+ * @return {PromiseLike<Uint8Array>} decrypted buffer
49
+ */
50
+ export const decrypt = (key, data) => {
51
+ const dataDecoder = decoding.createDecoder(data)
52
+ const iv = decoding.readUint8Array(dataDecoder, 16)
53
+ const cipher = decoding.readVarUint8Array(dataDecoder)
54
+ return webcrypto.subtle.decrypt(
55
+ {
56
+ name: 'AES-GCM',
57
+ iv
58
+ },
59
+ key,
60
+ cipher
61
+ ).then(data => new Uint8Array(data))
62
+ }
63
+
64
+ /**
65
+ * @param {CryptoKey} key
66
+ */
67
+ export const exportKey = key =>
68
+ webcrypto.subtle.exportKey('jwk', key)
69
+
70
+ /**
71
+ * @param {any} jwk
72
+ * @param {Usages} [usages]
73
+ * @param {boolean} [extractable]
74
+ */
75
+ export const importKey = (jwk, usages, extractable = false) => {
76
+ if (usages == null) {
77
+ /* c8 ignore next */
78
+ usages = jwk.key_ops || defaultUsages
79
+ }
80
+ return webcrypto.subtle.importKey('jwk', jwk, 'AES-GCM', extractable, /** @type {Usages} */ (usages))
81
+ }
82
+
83
+ /**
84
+ * @param {Uint8Array | string} data
85
+ */
86
+ /* c8 ignore next */
87
+ const toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data
88
+
89
+ /**
90
+ * @experimental The API is not final!
91
+ *
92
+ * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.
93
+ *
94
+ * @param {Uint8Array|string} secret
95
+ * @param {Uint8Array|string} salt
96
+ * @param {Object} opts
97
+ * @param {boolean} [opts.extractable]
98
+ * @param {Usages} [opts.usages]
99
+ */
100
+ export const deriveKey = (secret, salt, { extractable = false, usages = defaultUsages } = {}) => {
101
+ return webcrypto.subtle.importKey(
102
+ 'raw',
103
+ toBinary(secret),
104
+ 'PBKDF2',
105
+ false,
106
+ ['deriveKey']
107
+ ).then(keyMaterial =>
108
+ webcrypto.subtle.deriveKey(
109
+ {
110
+ name: 'PBKDF2',
111
+ salt: toBinary(salt), // NIST recommends at least 64 bits
112
+ iterations: 600000, // OWASP recommends 600k iterations
113
+ hash: 'SHA-256'
114
+ },
115
+ keyMaterial,
116
+ {
117
+ name: 'AES-GCM',
118
+ length: 256
119
+ },
120
+ extractable,
121
+ usages
122
+ )
123
+ )
124
+ }
@@ -0,0 +1,13 @@
1
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
2
+ export function sign(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function verify(key: CryptoKey, signature: Uint8Array, data: Uint8Array): PromiseLike<boolean>;
4
+ export function generateKeyPair({ extractable, usages }?: {
5
+ extractable?: boolean | undefined;
6
+ usages?: Usages | undefined;
7
+ }): Promise<CryptoKeyPair>;
8
+ export function importKey(jwk: any, { extractable, usages }?: {
9
+ extractable?: boolean | undefined;
10
+ usages?: Usages | undefined;
11
+ }): Promise<CryptoKey>;
12
+ export type Usages = Array<'sign' | 'verify'>;
13
+ //# sourceMappingURL=ecdsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["ecdsa.js"],"names":[],"mappings":"AAkBO,+BAFI,SAAS,uBAInB;AAWM,0BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CAWlC;AAYM,4BALI,SAAS,aACT,UAAU,QACV,UAAU,GACT,YAAY,OAAO,CAAC,CAY/B;AAQM;IAHmB,WAAW;IACZ,MAAM;2BAU5B;AAQI,+BALI,GAAG;IAEY,WAAW;IACZ,MAAM;uBAQ9B;qBArFY,MAAM,MAAM,GAAC,QAAQ,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * ECDSA is an asymmetric key for signing
3
+ */
4
+
5
+ import * as webcrypto from 'lib0/webcrypto'
6
+
7
+ /**
8
+ * @typedef {Array<'sign'|'verify'>} Usages
9
+ */
10
+
11
+ /**
12
+ * @type {Usages}
13
+ */
14
+ const defaultUsages = ['sign', 'verify']
15
+
16
+ /**
17
+ * @param {CryptoKey} key
18
+ */
19
+ export const exportKey = key => {
20
+ return webcrypto.subtle.exportKey('jwk', key)
21
+ }
22
+
23
+ /**
24
+ * @experimental The API is not final!
25
+ *
26
+ * Sign a message
27
+ *
28
+ * @param {CryptoKey} key
29
+ * @param {Uint8Array} data
30
+ * @return {PromiseLike<Uint8Array>} signature
31
+ */
32
+ export const sign = (key, data) => {
33
+ return webcrypto.subtle.sign(
34
+ {
35
+ name: 'ECDSA',
36
+ hash: { name: 'SHA-384' }
37
+ },
38
+ key,
39
+ data
40
+ ).then(signature => new Uint8Array(signature))
41
+ }
42
+
43
+ /**
44
+ * @experimental The API is not final!
45
+ *
46
+ * Sign a message
47
+ *
48
+ * @param {CryptoKey} key
49
+ * @param {Uint8Array} signature
50
+ * @param {Uint8Array} data
51
+ * @return {PromiseLike<boolean>} signature
52
+ */
53
+ export const verify = (key, signature, data) => {
54
+ return webcrypto.subtle.verify(
55
+ {
56
+ name: 'ECDSA',
57
+ hash: { name: 'SHA-384' }
58
+ },
59
+ key,
60
+ signature,
61
+ data
62
+ )
63
+ }
64
+
65
+ /* c8 ignore next */
66
+ /**
67
+ * @param {Object} opts
68
+ * @param {boolean} [opts.extractable]
69
+ * @param {Usages} [opts.usages]
70
+ */
71
+ export const generateKeyPair = ({ extractable = false, usages = defaultUsages } = {}) =>
72
+ webcrypto.subtle.generateKey(
73
+ {
74
+ name: 'ECDSA',
75
+ namedCurve: 'P-384'
76
+ },
77
+ extractable,
78
+ usages
79
+ )
80
+
81
+ /**
82
+ * @param {any} jwk
83
+ * @param {Object} opts
84
+ * @param {boolean} [opts.extractable]
85
+ * @param {Usages} [opts.usages]
86
+ */
87
+ export const importKey = (jwk, { extractable = false, usages } = {}) => {
88
+ if (usages == null) {
89
+ /* c8 ignore next */
90
+ usages = jwk.key_ops || defaultUsages
91
+ }
92
+ return webcrypto.subtle.importKey('jwk', jwk, { name: 'ECDSA', namedCurve: 'P-384' }, extractable, /** @type {Usages} */ (usages))
93
+ }
@@ -0,0 +1,13 @@
1
+ export function encrypt(key: CryptoKey, data: Uint8Array): Promise<any>;
2
+ export function decrypt(key: CryptoKey, data: Uint8Array): PromiseLike<Uint8Array>;
3
+ export function exportKey(key: CryptoKey): Promise<JsonWebKey>;
4
+ export function generateKey({ extractable, usages }?: {
5
+ extractable?: boolean | undefined;
6
+ usages?: Usages | undefined;
7
+ }): Promise<CryptoKeyPair>;
8
+ export function importKey(jwk: any, { extractable, usages }?: {
9
+ extractable?: boolean | undefined;
10
+ usages?: Usages | undefined;
11
+ }): Promise<CryptoKey>;
12
+ export type Usages = Array<'encrypt' | 'decrypt'>;
13
+ //# sourceMappingURL=rsa-oaep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa-oaep.d.ts","sourceRoot":"","sources":["rsa-oaep.js"],"names":[],"mappings":"AAqBO,6BAHI,SAAS,QACT,UAAU,gBASlB;AAWI,6BAJI,SAAS,QACT,UAAU,GACT,YAAY,UAAU,CAAC,CASG;AAK/B,+BAFI,SAAS,uBAGoB;AAOjC;IAHmB,WAAW;IACZ,MAAM;2BAY5B;AAQI,+BALI,GAAG;IAEY,WAAW;IACZ,MAAM;uBAQ9B;qBA5EY,MAAM,SAAS,GAAC,SAAS,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * RSA-OAEP is an asymmetric keypair used for encryption
3
+ */
4
+
5
+ import * as webcrypto from 'lib0/webcrypto'
6
+
7
+ /**
8
+ * @typedef {Array<'encrypt'|'decrypt'>} Usages
9
+ */
10
+
11
+ /**
12
+ * @type {Usages}
13
+ */
14
+ const defaultUsages = ['encrypt', 'decrypt']
15
+
16
+ /**
17
+ * Note that the max data size is limited by the size of the RSA key.
18
+ *
19
+ * @param {CryptoKey} key
20
+ * @param {Uint8Array} data
21
+ */
22
+ export const encrypt = (key, data) =>
23
+ webcrypto.subtle.encrypt(
24
+ {
25
+ name: 'RSA-OAEP'
26
+ },
27
+ key,
28
+ data
29
+ )
30
+
31
+ /**
32
+ * @experimental The API is not final!
33
+ *
34
+ * Decrypt some data using AES-GCM method.
35
+ *
36
+ * @param {CryptoKey} key
37
+ * @param {Uint8Array} data
38
+ * @return {PromiseLike<Uint8Array>} decrypted buffer
39
+ */
40
+ export const decrypt = (key, data) =>
41
+ webcrypto.subtle.decrypt(
42
+ {
43
+ name: 'RSA-OAEP'
44
+ },
45
+ key,
46
+ data
47
+ ).then(data => new Uint8Array(data))
48
+
49
+ /**
50
+ * @param {CryptoKey} key
51
+ */
52
+ export const exportKey = key =>
53
+ webcrypto.subtle.exportKey('jwk', key)
54
+
55
+ /**
56
+ * @param {Object} opts
57
+ * @param {boolean} [opts.extractable]
58
+ * @param {Usages} [opts.usages]
59
+ */
60
+ export const generateKey = ({ extractable = false, usages = defaultUsages } = {}) =>
61
+ webcrypto.subtle.generateKey(
62
+ {
63
+ name: 'RSA-OAEP',
64
+ modulusLength: 4096,
65
+ publicExponent: new Uint8Array([1, 0, 1]),
66
+ hash: 'SHA-256'
67
+ },
68
+ extractable,
69
+ usages
70
+ )
71
+
72
+ /**
73
+ * @param {any} jwk
74
+ * @param {Object} opts
75
+ * @param {boolean} [opts.extractable]
76
+ * @param {Usages} [opts.usages]
77
+ */
78
+ export const importKey = (jwk, { extractable = false, usages } = {}) => {
79
+ if (usages == null) {
80
+ /* c8 ignore next */
81
+ usages = jwk.key_ops || defaultUsages
82
+ }
83
+ return webcrypto.subtle.importKey('jwk', jwk, { name: 'RSA-OAEP', hash: 'SHA-256' }, extractable, /** @type {Usages} */ (usages))
84
+ }
package/crypto.test.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ export function testEncryption(tc: t.TestCase): Promise<void>;
1
2
  export function testReapeatEncryption(tc: t.TestCase): Promise<void>;
3
+ export function testImportExport(tc: t.TestCase): Promise<void>;
2
4
  export function testEncryptionPerformance(tc: t.TestCase): Promise<void>;
3
5
  export function testConsistentKeyGeneration(_tc: t.TestCase): Promise<void>;
4
6
  export function testSigning(tc: t.TestCase): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["crypto.test.js"],"names":[],"mappings":"AAQO,0CAFI,EAAE,QAAQ,iBA+BpB;AAKM,8CAFI,EAAE,QAAQ,iBAsCpB;AAKM,iDAFI,EAAE,QAAQ,iBA0CpB;AAKM,gCAFI,EAAE,QAAQ,iBAapB"}
1
+ {"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["crypto.test.js"],"names":[],"mappings":"AAUO,mCAFI,EAAE,QAAQ,iBAoCpB;AAKM,0CAFI,EAAE,QAAQ,iBA8BpB;AAKM,qCAFI,EAAE,QAAQ,iBAkCpB;AAKM,8CAFI,EAAE,QAAQ,iBAsCpB;AAKM,iDAFI,EAAE,QAAQ,iBA0EpB;AAKM,gCAFI,EAAE,QAAQ,iBAapB"}
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,CAoBjB;AAaM,oCAHI,OAAO,GACN,MAAM,CA0BjB;AASM,qCAHI,OAAO,GACN,MAAM,CAOjB;AASM,oCAHI,OAAO,GACN,MAAM,CAOjB;AAgBM,gDAJI,OAAO,UA2BjB;AAOM,8CAHI,OAAO,UAI4D;AA/BvE,uCAJI,OAAO,UA2BjB;AA6BM,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":"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"}
package/decoding.js CHANGED
@@ -250,10 +250,11 @@ export const readVarUint = decoder => {
250
250
  if (r < binary.BIT8) {
251
251
  return num
252
252
  }
253
- /* istanbul ignore if */
253
+ /* c8 ignore start */
254
254
  if (num > number.MAX_SAFE_INTEGER) {
255
255
  throw errorIntegerOutOfRange
256
256
  }
257
+ /* c8 ignore stop */
257
258
  }
258
259
  throw errorUnexpectedEndOfArray
259
260
  }
@@ -287,10 +288,11 @@ export const readVarInt = decoder => {
287
288
  if (r < binary.BIT8) {
288
289
  return sign * num
289
290
  }
290
- /* istanbul ignore if */
291
+ /* c8 ignore start */
291
292
  if (num > number.MAX_SAFE_INTEGER) {
292
293
  throw errorIntegerOutOfRange
293
294
  }
295
+ /* c8 ignore stop */
294
296
  }
295
297
  throw errorUnexpectedEndOfArray
296
298
  }
@@ -336,7 +338,7 @@ export const peekVarInt = decoder => {
336
338
  * @param {Decoder} decoder
337
339
  * @return {String} The read String.
338
340
  */
339
- /* istanbul ignore next */
341
+ /* c8 ignore start */
340
342
  export const _readVarStringPolyfill = decoder => {
341
343
  let remainingLen = readVarUint(decoder)
342
344
  if (remainingLen === 0) {
@@ -361,6 +363,7 @@ export const _readVarStringPolyfill = decoder => {
361
363
  return decodeURIComponent(escape(encodedString))
362
364
  }
363
365
  }
366
+ /* c8 ignore stop */
364
367
 
365
368
  /**
366
369
  * @function
@@ -379,7 +382,7 @@ export const _readVarStringNative = decoder =>
379
382
  * @return {String} The read String
380
383
  *
381
384
  */
382
- /* istanbul ignore next */
385
+ /* c8 ignore next */
383
386
  export const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill
384
387
 
385
388
  /**
package/deno.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "imports": {
3
+ "isomorphic.js": "./node_modules/isomorphic.js/node.mjs",
4
+ "lib0/crypto": "./crypto.js",
5
+ "lib0/webcrypto": "./webcrypto.deno.js"
6
+ }
7
+ }
package/deno.lock ADDED
@@ -0,0 +1,122 @@
1
+ {
2
+ "version": "2",
3
+ "remote": {
4
+ "https://deno.land/std@0.177.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462",
5
+ "https://deno.land/std@0.177.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3",
6
+ "https://deno.land/std@0.177.0/bytes/index_of_needle.ts": "65c939607df609374c4415598fa4dad04a2f14c4d98cd15775216f0aaf597f24",
7
+ "https://deno.land/std@0.177.0/crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs": "5dedb7f9aa05f0e18ed017691c58df5f4686e4cbbd70368c6f896e5cca03f2b4",
8
+ "https://deno.land/std@0.177.0/crypto/_wasm/mod.ts": "e2df88236fc061eac7a89e8cb0b97843f5280b08b2a990e473b7397a3e566003",
9
+ "https://deno.land/std@0.177.0/crypto/timing_safe_equal.ts": "8d69ab611c67fe51b6127d97fcfb4d8e7d0e1b6b4f3e0cc4ab86744c3691f965",
10
+ "https://deno.land/std@0.177.0/encoding/base64.ts": "7de04c2f8aeeb41453b09b186480be90f2ff357613b988e99fabb91d2eeceba1",
11
+ "https://deno.land/std@0.177.0/encoding/base64url.ts": "3f1178f6446834457b16bfde8b559c1cd3481727fe384d3385e4a9995dc2d851",
12
+ "https://deno.land/std@0.177.0/encoding/hex.ts": "50f8c95b52eae24395d3dfcb5ec1ced37c5fe7610ef6fffdcc8b0fdc38e3b32f",
13
+ "https://deno.land/std@0.177.0/flags/mod.ts": "d1cdefa18472ef69858a17df5cf7c98445ed27ac10e1460183081303b0ebc270",
14
+ "https://deno.land/std@0.177.0/node/_core.ts": "9a58c0ef98ee77e9b8fcc405511d1b37a003a705eb6a9b6e95f75434d8009adc",
15
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/base/buffer.js": "c9364c761681134015ec8ba6f33b39c067d6e5dd59860d55face8d5be8522744",
16
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/base/node.js": "8f7f23bfa300990bbd6db7e7395e9688b54a04e3eb2fab5cab9a9a72e26c525f",
17
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/base/reporter.js": "788aec7662991da549e5f7f3edbc3e3d6c6cecabc894b18d1a705b0f204e06c3",
18
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/constants/der.js": "57181db0519bb3864a6cdf4e7eb9bfeb1bf5f80605187fbe80e27083b473e367",
19
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/decoders/der.js": "fdc4de98c9b0b59db169a2b225895741e2ab34b00e14315ac2ff5e389d6db16e",
20
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/decoders/pem.js": "fd7f0072c193c82959fec0374f4fd3adf3f4ac38594fd404d66b3e8724107151",
21
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/encoders/der.js": "137bc4f8fe66b9950c743025e199789e25342f791e2d52353ceb016ad2854b42",
22
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/encoders/pem.js": "e43bc706973c4c27e1e2f96262daba3d38822cb10f5b494f6944c726ee655160",
23
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/asn1.js/mod.js": "1f88293688296be7a6c735bd8ea39425f5b274b94db1d6b7968dddfb54ac9d37",
24
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/bn.js/bn.js": "f3f3c1dae1aa55de9e6472af1d6bec5ccda4b4890ee5c52a90961137fe99564e",
25
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/aes.js": "698e1ed386b7dff27b2d59fa1c75f506beceec96b78670a15a734e438c08f138",
26
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/auth_cipher.js": "5c245b5685b066356a7c9529a3a441bf5f57823a6946ce1b0ef2e1af32bb76f4",
27
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/decrypter.js": "39152b2b3409893b8548feeab7e5997ceb1595f31df0dedaf765708be8f025c0",
28
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/encrypter.js": "f9cc703d5a7b5255999c1a3600fbf48ff564b65f827744877526803093ceebff",
29
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/ghash.js": "759d80b760f44cd3a454b4f161fd03a7d6c359901446f0a907a6870cb66d6767",
30
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/incr32.js": "2bdea27b74b3990ee56807a1a5abe335f118826beabeeb905459c8768094b28f",
31
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/mod.js": "fe4affebbd210d885b2e5135c668751f9d10bc14aa0cc3905cbfff66f04b4c58",
32
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/modes/cbc.js": "ff24b4506522a724ba7a03c1403ad8938aba45056f9fd47c7f0b4fcb3a640adf",
33
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/modes/cfb.js": "643720a1db969b6bcc896c95523630838a8335513d02f340514fd524bb4113cb",
34
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/modes/cfb1.js": "01c9a46aa3affd84a54ae33652fb0fa0ff7c862be2a459d9cb188cb8e2c4b11e",
35
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/modes/cfb8.js": "97476cee25103e02a02b196d7fe6f28a9f0f9e47ee344687d7492bc7282a59f8",
36
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/modes/ctr.js": "1e3835adb753cfe6761e4df8c43d190e31e1ca6a586fd582747c8255c82ed78d",
37
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/modes/ecb.js": "79677b96d4af50c49f0a4f698e5c7e5a64f1d2926b799e0d2eac2cdd5ec7488c",
38
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/modes/mod.js": "fe3db429b867a0a8066c64d7b33b840a1f24cad9174156384a763733f68cf518",
39
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/modes/ofb.js": "3553308f98d078e2006eac39bb6d91818f8bb376b01d962ae98eabf6ee79ad4e",
40
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/stream_cipher.js": "70f50f37ddec530ae95911ca2f286ebd2ddbd54d914ab0be461ec1dc3c61990f",
41
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_aes/xor.ts": "7132baacdb39ba82c3bfe325a60e68ca87469c0ed0cdd0508caf6f40bab852b8",
42
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/browserify_rsa.js": "96e0e4fee7c2cf75ef86d958c709bfc239297a080fd17ace5ea5ab699a1b6174",
43
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/cipher_base.js": "9ebc6ccc364cf7b23024821054d2e72a2d8da8d8a2a36cacdc5aa6cc6770ef93",
44
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/evp_bytes_to_key.ts": "7c4c27b6e321b2d7065a6703d90264921e9a805d91d9dfdb21103393228024e2",
45
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/parse_asn1/asn1.js": "7d99b6df508164169a33377346e8840d519fe2defccb362a023c92c5bd503433",
46
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/parse_asn1/certificate.js": "5795348417b3ec7aafa4854ba55f364e0148eadfdd29d1566c90e617237621bb",
47
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/parse_asn1/fix_proc.js": "858dd3e6ce264d75822cadc21bb55114f4e4867a706abde1663548aa2710fc1b",
48
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/parse_asn1/mod.js": "ea164fbd497ce3d710426742d4b72f71da8954c4ebaeb7eadc33316c5b0060f1",
49
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/public_encrypt/mgf.js": "dfac5008a550b3e7e6b851c4fb42e984aa9e7fae64707888f47f2aa0991c004d",
50
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/public_encrypt/mod.js": "0704326ff3ee2bb0764a964995d1aa62b1147b714ad5465e878ba4d57731e3db",
51
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/public_encrypt/private_decrypt.js": "8a1d11edb176d95d1e3bdf1aff5c3248a986bf9734d1a6b07508e29132d2f65c",
52
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/public_encrypt/public_encrypt.js": "f88b0e3c228d84096fdbc03e614e86bef86e56013cb9628b2425e31b3b142b2c",
53
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/public_encrypt/with_public.js": "752da754d253b5743d89c0f2432b6eb6f8815b80efd9ee588683e10a13d34400",
54
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/public_encrypt/xor.js": "087ebef8f6fcb8ca4c7216cc22de728d9a61ec27b9a036b900681ff25d6409af",
55
+ "https://deno.land/std@0.177.0/node/_crypto/crypto_browserify/randombytes.ts": "23bde8be640e274d7bb88cf10d1da8bba252654252dc6a877fed86a77da5952c",
56
+ "https://deno.land/std@0.177.0/node/_events.d.ts": "1347437fd6b084d7c9a4e16b9fe7435f00b030970086482edeeb3b179d0775af",
57
+ "https://deno.land/std@0.177.0/node/_events.mjs": "d4ba4e629abe3db9f1b14659fd5c282b7da8b2b95eaf13238eee4ebb142a2448",
58
+ "https://deno.land/std@0.177.0/node/_global.d.ts": "2d88342f38b4083b858998e27c706725fb03a74aa14ef8d985dc18438b5188e4",
59
+ "https://deno.land/std@0.177.0/node/_next_tick.ts": "9a3cf107d59b019a355d3cf32275b4c6157282e4b68ea85b46a799cb1d379305",
60
+ "https://deno.land/std@0.177.0/node/_process/exiting.ts": "6e336180aaabd1192bf99ffeb0d14b689116a3dec1dfb34a2afbacd6766e98ab",
61
+ "https://deno.land/std@0.177.0/node/_process/process.ts": "c96bb1f6253824c372f4866ee006dcefda02b7050d46759736e403f862d91051",
62
+ "https://deno.land/std@0.177.0/node/_process/stdio.mjs": "cf17727eac8da3a665851df700b5aca6a12bacc3ebbf33e63e4b919f80ba44a6",
63
+ "https://deno.land/std@0.177.0/node/_stream.d.ts": "112e1a0677cd6db932c3ce0e6e5bbdc7a2ac1874572f449044ecc82afcf5ee2e",
64
+ "https://deno.land/std@0.177.0/node/_stream.mjs": "d6e2c86c1158ac65b4c2ca4fa019d7e84374ff12e21e2175345fe68c0823efe3",
65
+ "https://deno.land/std@0.177.0/node/_utils.ts": "7fd55872a0cf9275e3c080a60e2fa6d45b8de9e956ebcde9053e72a344185884",
66
+ "https://deno.land/std@0.177.0/node/buffer.ts": "85617be2063eccaf177dbb84c7580d1e32023724ed14bd9df4e453b152a26167",
67
+ "https://deno.land/std@0.177.0/node/crypto.ts": "2c94fa0f76e90190fbc34df891dc5c284bddb86c932fae8ac11747de3f75293c",
68
+ "https://deno.land/std@0.177.0/node/events.ts": "d2de352d509de11a375e2cb397d6b98f5fed4e562fc1d41be33214903a38e6b0",
69
+ "https://deno.land/std@0.177.0/node/internal/buffer.d.ts": "bdfa991cd88cb02fd08bf8235d2618550e3e511c970b2a8f2e1a6885a2793cac",
70
+ "https://deno.land/std@0.177.0/node/internal/buffer.mjs": "e92303a3cc6d9aaabcd270a937ad9319825d9ba08cb332650944df4562029b27",
71
+ "https://deno.land/std@0.177.0/node/internal/crypto/_keys.ts": "8f3c3b5a141aa0331a53c205e9338655f1b3b307a08085fd6ff6dda6f7c4190b",
72
+ "https://deno.land/std@0.177.0/node/internal/crypto/_randomBytes.ts": "36dd164747f73b830ba86562abb160a8ac5bea34aaeb816a67f3005a00d41177",
73
+ "https://deno.land/std@0.177.0/node/internal/crypto/_randomFill.ts": "297186f290eba87a1ad7b8aa42a960ff4278a8b6b0c963fa81918c326d5c0b58",
74
+ "https://deno.land/std@0.177.0/node/internal/crypto/_randomInt.ts": "6cf19da9684b67520e67a2d99f2581a3f841140842c7ce2e014d166457550fe1",
75
+ "https://deno.land/std@0.177.0/node/internal/crypto/certificate.ts": "b4a6695f82e70a42e85247c74a7691ed4b3a904646451af0287e49efe1a28814",
76
+ "https://deno.land/std@0.177.0/node/internal/crypto/cipher.ts": "2bae9b4d94c465e4d1c70e5a9e8fd67ce20bcc66fecd2eec6be00d35144ca4eb",
77
+ "https://deno.land/std@0.177.0/node/internal/crypto/constants.ts": "544d605703053218499b08214f2e25cf4310651d535b7ab995891c4b7a217693",
78
+ "https://deno.land/std@0.177.0/node/internal/crypto/diffiehellman.ts": "9cfb219c5b2936db773f559b6affe6d25b0e40531010389f05df3f05ce7eebf5",
79
+ "https://deno.land/std@0.177.0/node/internal/crypto/hash.ts": "d01f5d3ad5477655b432036d2d553c7a0c31a901ac0e1e9e0d8b3975daae7624",
80
+ "https://deno.land/std@0.177.0/node/internal/crypto/hkdf.ts": "5bd801234e56468fbd47466f46e88bdadc66432d625e3616abe38878d410bb66",
81
+ "https://deno.land/std@0.177.0/node/internal/crypto/keygen.ts": "530cc1a00acf71a43719bb876a2dc563b6196095d080eba77c92c9f39658a5b9",
82
+ "https://deno.land/std@0.177.0/node/internal/crypto/keys.ts": "c4dfa5aa3420cf700178b87203593a0989c8a93934bfef2b29adb3399d687958",
83
+ "https://deno.land/std@0.177.0/node/internal/crypto/pbkdf2.ts": "0a0a3e0d3d45db0638fe75a4199c7ed7ca2164405750a520e786e4adebdb45a4",
84
+ "https://deno.land/std@0.177.0/node/internal/crypto/random.ts": "85f3147e14cb45c18e016da45d319a5c663309411232a956fdc09c2317acdd9f",
85
+ "https://deno.land/std@0.177.0/node/internal/crypto/scrypt.ts": "b55a0fcd12b295af4127d05b1c0bc3098b74fc0e3c62321c2a43c20f9ed18209",
86
+ "https://deno.land/std@0.177.0/node/internal/crypto/sig.ts": "25819a89d49c1ebfe3baa1f9464501ec599a36cf53e9b600ec0399e568b9dccc",
87
+ "https://deno.land/std@0.177.0/node/internal/crypto/types.ts": "52feb182bcbd59206f3e2f4a3cb8a5775d4452c2a8045c3e613e2178d32c2a86",
88
+ "https://deno.land/std@0.177.0/node/internal/crypto/util.ts": "db282c0413aeee28bc0665fcfc1c08a65fc96dc12ed4d03282f2da4907fcf0ce",
89
+ "https://deno.land/std@0.177.0/node/internal/crypto/x509.ts": "0e8a541c4f58ecb83862c373d3f7d2371aa8f5108f55bc837b190c4ab3408764",
90
+ "https://deno.land/std@0.177.0/node/internal/error_codes.ts": "8495e33f448a484518d76fa3d41d34fc20fe03c14b30130ad8e936b0035d4b8b",
91
+ "https://deno.land/std@0.177.0/node/internal/errors.ts": "1c699b8a3cb93174f697a348c004b1c6d576b66688eac8a48ebb78e65c720aae",
92
+ "https://deno.land/std@0.177.0/node/internal/fixed_queue.ts": "62bb119afa5b5ae8fc0c7048b50502347bec82e2588017d0b250c4671d6eff8f",
93
+ "https://deno.land/std@0.177.0/node/internal/hide_stack_frames.ts": "9dd1bad0a6e62a1042ce3a51eb1b1ecee2f246907bff44835f86e8f021de679a",
94
+ "https://deno.land/std@0.177.0/node/internal/normalize_encoding.mjs": "fd1d9df61c44d7196432f6e8244621468715131d18cc79cd299fc78ac549f707",
95
+ "https://deno.land/std@0.177.0/node/internal/options.ts": "888f267c3fe8f18dc7b2f2fbdbe7e4a0fd3302ff3e99f5d6645601e924f3e3fb",
96
+ "https://deno.land/std@0.177.0/node/internal/primordials.mjs": "a72d86b5aa55d3d50b8e916b6a59b7cc0dc5a31da8937114b4a113ad5aa08c74",
97
+ "https://deno.land/std@0.177.0/node/internal/streams/destroy.mjs": "b665fc71178919a34ddeac8389d162a81b4bc693ff7dc2557fa41b3a91011967",
98
+ "https://deno.land/std@0.177.0/node/internal/streams/end-of-stream.mjs": "a4fb1c2e32d58dff440d4e716e2c4daaa403b3095304a028bb428575cfeed716",
99
+ "https://deno.land/std@0.177.0/node/internal/streams/utils.mjs": "f2fe2e6bdc506da24c758970890cc2a21642045b129dee618bd3827c60dd9e33",
100
+ "https://deno.land/std@0.177.0/node/internal/streams/writable.mjs": "775928726d0483ace8e45a35f30db2019a22dd7b9a81b67b158420e21cc692c5",
101
+ "https://deno.land/std@0.177.0/node/internal/util.mjs": "f7fe2e1ca5e66f550ad0856b9f5ee4d666f0c071fe212ea7fc7f37cfa81f97a5",
102
+ "https://deno.land/std@0.177.0/node/internal/util/inspect.mjs": "11d7c9cab514b8e485acc3978c74b837263ff9c08ae4537fa18ad56bae633259",
103
+ "https://deno.land/std@0.177.0/node/internal/util/types.ts": "0e587b44ec5e017cf228589fc5ce9983b75beece6c39409c34170cfad49d6417",
104
+ "https://deno.land/std@0.177.0/node/internal/validators.mjs": "e02f2b02dd072a5d623970292588d541204dc82207b4c58985d933a5f4b382e6",
105
+ "https://deno.land/std@0.177.0/node/internal_binding/_libuv_winerror.ts": "30c9569603d4b97a1f1a034d88a3f74800d5ea1f12fcc3d225c9899d4e1a518b",
106
+ "https://deno.land/std@0.177.0/node/internal_binding/_node.ts": "cb2389b0eab121df99853eb6a5e3a684e4537e065fb8bf2cca0cbf219ce4e32e",
107
+ "https://deno.land/std@0.177.0/node/internal_binding/_timingSafeEqual.ts": "7d9732464d3c669ff07713868ce5d25bc974a06112edbfb5f017fc3c70c0853e",
108
+ "https://deno.land/std@0.177.0/node/internal_binding/_utils.ts": "7c58a2fbb031a204dee9583ba211cf9c67922112fe77e7f0b3226112469e9fe1",
109
+ "https://deno.land/std@0.177.0/node/internal_binding/_winerror.ts": "3e8cfdfe22e89f13d2b28529bab35155e6b1730c0221ec5a6fc7077dc037be13",
110
+ "https://deno.land/std@0.177.0/node/internal_binding/buffer.ts": "31729e0537921d6c730ad0afea44a7e8a0a1044d070ade8368226cb6f7390c8b",
111
+ "https://deno.land/std@0.177.0/node/internal_binding/constants.ts": "21ff9d1ee71d0a2086541083a7711842fc6ae25e264dbf45c73815aadce06f4c",
112
+ "https://deno.land/std@0.177.0/node/internal_binding/crypto.ts": "29e8f94f283a2e7d4229d3551369c6a40c2af9737fad948cb9be56bef6c468cd",
113
+ "https://deno.land/std@0.177.0/node/internal_binding/node_options.ts": "0b5cb0bf4379a39278d7b7bb6bb2c2751baf428fe437abe5ed3e8441fae1f18b",
114
+ "https://deno.land/std@0.177.0/node/internal_binding/string_decoder.ts": "54c3c1cbd5a9254881be58bf22637965dc69535483014dab60487e299cb95445",
115
+ "https://deno.land/std@0.177.0/node/internal_binding/types.ts": "2187595a58d2cf0134f4db6cc2a12bf777f452f52b15b6c3aed73fa072aa5fc3",
116
+ "https://deno.land/std@0.177.0/node/internal_binding/util.ts": "808ff3b92740284184ab824adfc420e75398c88c8bccf5111f0c24ac18c48f10",
117
+ "https://deno.land/std@0.177.0/node/internal_binding/uv.ts": "eb0048e30af4db407fb3f95563e30d70efd6187051c033713b0a5b768593a3a3",
118
+ "https://deno.land/std@0.177.0/node/perf_hooks.ts": "c20e1f02f463e065e8f6c1d4fa97b0d3832dc0db5b5d8ea37f99a962ecf11f35",
119
+ "https://deno.land/std@0.177.0/node/stream.ts": "09e348302af40dcc7dc58aa5e40fdff868d11d8d6b0cfb85cbb9c75b9fe450c7",
120
+ "https://deno.land/std@0.177.0/node/string_decoder.ts": "1a17e3572037c512cc5fc4b29076613e90f225474362d18da908cb7e5ccb7e88"
121
+ }
122
+ }
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var set = require('./set-b596ef38.cjs');
3
+ var set = require('./set-0f209abb.cjs');
4
4
 
5
5
  /**
6
6
  * Utility module to work with Arrays.
@@ -173,4 +173,4 @@ exports.last = last;
173
173
  exports.some = some;
174
174
  exports.unique = unique;
175
175
  exports.uniqueBy = uniqueBy;
176
- //# sourceMappingURL=array-5347125b.cjs.map
176
+ //# sourceMappingURL=array-a1682de6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"array-5347125b.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 => arr.reduce((acc, val) => acc.concat(val), [])\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"],"names":["set.from","set.create"],"mappings":"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"}
1
+ {"version":3,"file":"array-a1682de6.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 => arr.reduce((acc, val) => acc.concat(val), [])\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"],"names":["set.from","set.create"],"mappings":"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"}
package/dist/array.cjs CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- require('./set-b596ef38.cjs');
6
- var array = require('./array-5347125b.cjs');
5
+ require('./set-0f209abb.cjs');
6
+ var array = require('./array-a1682de6.cjs');
7
7
 
8
8
 
9
9