cojson 0.8.0 → 0.8.3

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 (209) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/CHANGELOG.md +6 -0
  3. package/dist/native/PeerState.js.map +1 -0
  4. package/dist/native/PriorityBasedMessageQueue.js.map +1 -0
  5. package/dist/native/base64url.js.map +1 -0
  6. package/dist/native/base64url.test.js.map +1 -0
  7. package/dist/native/coValue.js.map +1 -0
  8. package/dist/native/coValueCore.js.map +1 -0
  9. package/dist/native/coValues/account.js.map +1 -0
  10. package/dist/native/coValues/coList.js.map +1 -0
  11. package/dist/native/coValues/coMap.js.map +1 -0
  12. package/dist/native/coValues/coStream.js.map +1 -0
  13. package/dist/native/coValues/group.js.map +1 -0
  14. package/dist/native/coreToCoValue.js.map +1 -0
  15. package/dist/{crypto → native/crypto}/PureJSCrypto.js +4 -0
  16. package/dist/native/crypto/PureJSCrypto.js.map +1 -0
  17. package/dist/{crypto → native/crypto}/crypto.js +1 -1
  18. package/dist/native/crypto/crypto.js.map +1 -0
  19. package/dist/native/ids.js.map +1 -0
  20. package/dist/{index.js → native/index.native.js} +3 -4
  21. package/dist/native/index.native.js.map +1 -0
  22. package/dist/native/jsonStringify.js.map +1 -0
  23. package/dist/{jsonValue.js.map → native/jsonValue.js.map} +1 -1
  24. package/dist/{localNode.js → native/localNode.js} +38 -32
  25. package/dist/native/localNode.js.map +1 -0
  26. package/dist/native/media.js.map +1 -0
  27. package/dist/native/permissions.js.map +1 -0
  28. package/dist/native/priority.js.map +1 -0
  29. package/dist/native/storage/FileSystem.js.map +1 -0
  30. package/dist/{storage → native/storage}/chunksAndKnownStates.js +1 -1
  31. package/dist/native/storage/chunksAndKnownStates.js.map +1 -0
  32. package/dist/native/storage/index.js.map +1 -0
  33. package/dist/native/streamUtils.js.map +1 -0
  34. package/dist/native/sync.js.map +1 -0
  35. package/dist/native/typeUtils/accountOrAgentIDfromSessionID.js.map +1 -0
  36. package/dist/native/typeUtils/expectGroup.js.map +1 -0
  37. package/dist/native/typeUtils/isAccountID.js.map +1 -0
  38. package/dist/native/typeUtils/isCoValue.js.map +1 -0
  39. package/dist/web/PeerState.js +66 -0
  40. package/dist/web/PeerState.js.map +1 -0
  41. package/dist/web/PriorityBasedMessageQueue.js +51 -0
  42. package/dist/web/PriorityBasedMessageQueue.js.map +1 -0
  43. package/dist/web/base64url.js +59 -0
  44. package/dist/web/base64url.js.map +1 -0
  45. package/dist/web/base64url.test.js +25 -0
  46. package/dist/web/base64url.test.js.map +1 -0
  47. package/dist/web/coValue.js +19 -0
  48. package/dist/web/coValue.js.map +1 -0
  49. package/dist/web/coValueCore.js +693 -0
  50. package/dist/web/coValueCore.js.map +1 -0
  51. package/dist/web/coValues/account.js +96 -0
  52. package/dist/web/coValues/account.js.map +1 -0
  53. package/dist/web/coValues/coList.js +393 -0
  54. package/dist/web/coValues/coList.js.map +1 -0
  55. package/dist/web/coValues/coMap.js +197 -0
  56. package/dist/web/coValues/coMap.js.map +1 -0
  57. package/dist/web/coValues/coStream.js +220 -0
  58. package/dist/web/coValues/coStream.js.map +1 -0
  59. package/dist/web/coValues/group.js +250 -0
  60. package/dist/web/coValues/group.js.map +1 -0
  61. package/dist/web/coreToCoValue.js +42 -0
  62. package/dist/web/coreToCoValue.js.map +1 -0
  63. package/dist/web/crypto/PureJSCrypto.js +93 -0
  64. package/dist/web/crypto/PureJSCrypto.js.map +1 -0
  65. package/dist/{crypto → web/crypto}/WasmCrypto.js +3 -0
  66. package/dist/web/crypto/WasmCrypto.js.map +1 -0
  67. package/dist/web/crypto/crypto.js +154 -0
  68. package/dist/web/crypto/crypto.js.map +1 -0
  69. package/dist/web/ids.js +17 -0
  70. package/dist/web/ids.js.map +1 -0
  71. package/dist/web/index.web.js +40 -0
  72. package/dist/web/index.web.js.map +1 -0
  73. package/dist/web/jsonStringify.js +57 -0
  74. package/dist/web/jsonStringify.js.map +1 -0
  75. package/dist/web/jsonValue.js +2 -0
  76. package/dist/web/jsonValue.js.map +1 -0
  77. package/dist/web/localNode.js +442 -0
  78. package/dist/web/localNode.js.map +1 -0
  79. package/dist/web/media.js +2 -0
  80. package/dist/web/media.js.map +1 -0
  81. package/dist/web/permissions.js +206 -0
  82. package/dist/web/permissions.js.map +1 -0
  83. package/dist/web/priority.js +31 -0
  84. package/dist/web/priority.js.map +1 -0
  85. package/dist/web/storage/FileSystem.js +58 -0
  86. package/dist/web/storage/FileSystem.js.map +1 -0
  87. package/dist/web/storage/chunksAndKnownStates.js +100 -0
  88. package/dist/web/storage/chunksAndKnownStates.js.map +1 -0
  89. package/dist/web/storage/index.js +348 -0
  90. package/dist/web/storage/index.js.map +1 -0
  91. package/dist/web/streamUtils.js +41 -0
  92. package/dist/web/streamUtils.js.map +1 -0
  93. package/dist/web/sync.js +504 -0
  94. package/dist/web/sync.js.map +1 -0
  95. package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js +5 -0
  96. package/dist/web/typeUtils/accountOrAgentIDfromSessionID.js.map +1 -0
  97. package/dist/web/typeUtils/expectGroup.js +13 -0
  98. package/dist/web/typeUtils/expectGroup.js.map +1 -0
  99. package/dist/web/typeUtils/isAccountID.js +4 -0
  100. package/dist/web/typeUtils/isAccountID.js.map +1 -0
  101. package/dist/web/typeUtils/isCoValue.js +11 -0
  102. package/dist/web/typeUtils/isCoValue.js.map +1 -0
  103. package/package.json +25 -8
  104. package/src/coValue.ts +1 -1
  105. package/src/coValueCore.ts +4 -1
  106. package/src/coValues/account.ts +9 -3
  107. package/src/crypto/PureJSCrypto.ts +5 -0
  108. package/src/crypto/WasmCrypto.ts +4 -0
  109. package/src/crypto/crypto.ts +7 -2
  110. package/src/{index.ts → index.native.ts} +4 -5
  111. package/src/index.web.ts +152 -0
  112. package/src/localNode.ts +61 -53
  113. package/src/storage/chunksAndKnownStates.ts +1 -1
  114. package/src/storage/index.ts +1 -1
  115. package/src/tests/coList.test.ts +1 -1
  116. package/src/tests/coMap.test.ts +1 -1
  117. package/src/tests/coStream.test.ts +2 -1
  118. package/src/tests/cryptoImpl.test.ts +24 -2
  119. package/src/tests/group.test.ts +6 -8
  120. package/src/tests/permissions.test.ts +66 -18
  121. package/src/tests/priority.test.ts +44 -15
  122. package/tsconfig.json +5 -4
  123. package/tsconfig.native.json +12 -0
  124. package/tsconfig.web.json +11 -0
  125. package/dist/PeerState.js.map +0 -1
  126. package/dist/PriorityBasedMessageQueue.js.map +0 -1
  127. package/dist/base64url.js.map +0 -1
  128. package/dist/base64url.test.js.map +0 -1
  129. package/dist/coValue.js.map +0 -1
  130. package/dist/coValueCore.js.map +0 -1
  131. package/dist/coValues/account.js.map +0 -1
  132. package/dist/coValues/coList.js.map +0 -1
  133. package/dist/coValues/coMap.js.map +0 -1
  134. package/dist/coValues/coStream.js.map +0 -1
  135. package/dist/coValues/group.js.map +0 -1
  136. package/dist/coreToCoValue.js.map +0 -1
  137. package/dist/crypto/PureJSCrypto.js.map +0 -1
  138. package/dist/crypto/WasmCrypto.js.map +0 -1
  139. package/dist/crypto/crypto.js.map +0 -1
  140. package/dist/ids.js.map +0 -1
  141. package/dist/index.js.map +0 -1
  142. package/dist/jsonStringify.js.map +0 -1
  143. package/dist/localNode.js.map +0 -1
  144. package/dist/media.js.map +0 -1
  145. package/dist/permissions.js.map +0 -1
  146. package/dist/priority.js.map +0 -1
  147. package/dist/storage/FileSystem.js.map +0 -1
  148. package/dist/storage/chunksAndKnownStates.js.map +0 -1
  149. package/dist/storage/index.js.map +0 -1
  150. package/dist/streamUtils.js.map +0 -1
  151. package/dist/sync.js.map +0 -1
  152. package/dist/tests/PeerState.test.js +0 -80
  153. package/dist/tests/PeerState.test.js.map +0 -1
  154. package/dist/tests/PriorityBasedMessageQueue.test.js +0 -97
  155. package/dist/tests/PriorityBasedMessageQueue.test.js.map +0 -1
  156. package/dist/tests/account.test.js +0 -58
  157. package/dist/tests/account.test.js.map +0 -1
  158. package/dist/tests/coList.test.js +0 -76
  159. package/dist/tests/coList.test.js.map +0 -1
  160. package/dist/tests/coMap.test.js +0 -136
  161. package/dist/tests/coMap.test.js.map +0 -1
  162. package/dist/tests/coStream.test.js +0 -205
  163. package/dist/tests/coStream.test.js.map +0 -1
  164. package/dist/tests/coValueCore.test.js +0 -124
  165. package/dist/tests/coValueCore.test.js.map +0 -1
  166. package/dist/tests/crypto.test.js +0 -118
  167. package/dist/tests/crypto.test.js.map +0 -1
  168. package/dist/tests/cryptoImpl.test.js +0 -113
  169. package/dist/tests/cryptoImpl.test.js.map +0 -1
  170. package/dist/tests/group.test.js +0 -34
  171. package/dist/tests/group.test.js.map +0 -1
  172. package/dist/tests/permissions.test.js +0 -1059
  173. package/dist/tests/permissions.test.js.map +0 -1
  174. package/dist/tests/priority.test.js +0 -61
  175. package/dist/tests/priority.test.js.map +0 -1
  176. package/dist/tests/sync.test.js +0 -1186
  177. package/dist/tests/sync.test.js.map +0 -1
  178. package/dist/tests/testUtils.js +0 -59
  179. package/dist/tests/testUtils.js.map +0 -1
  180. package/dist/typeUtils/accountOrAgentIDfromSessionID.js.map +0 -1
  181. package/dist/typeUtils/expectGroup.js.map +0 -1
  182. package/dist/typeUtils/isAccountID.js.map +0 -1
  183. package/dist/typeUtils/isCoValue.js.map +0 -1
  184. /package/dist/{PeerState.js → native/PeerState.js} +0 -0
  185. /package/dist/{PriorityBasedMessageQueue.js → native/PriorityBasedMessageQueue.js} +0 -0
  186. /package/dist/{base64url.js → native/base64url.js} +0 -0
  187. /package/dist/{base64url.test.js → native/base64url.test.js} +0 -0
  188. /package/dist/{coValue.js → native/coValue.js} +0 -0
  189. /package/dist/{coValueCore.js → native/coValueCore.js} +0 -0
  190. /package/dist/{coValues → native/coValues}/account.js +0 -0
  191. /package/dist/{coValues → native/coValues}/coList.js +0 -0
  192. /package/dist/{coValues → native/coValues}/coMap.js +0 -0
  193. /package/dist/{coValues → native/coValues}/coStream.js +0 -0
  194. /package/dist/{coValues → native/coValues}/group.js +0 -0
  195. /package/dist/{coreToCoValue.js → native/coreToCoValue.js} +0 -0
  196. /package/dist/{ids.js → native/ids.js} +0 -0
  197. /package/dist/{jsonStringify.js → native/jsonStringify.js} +0 -0
  198. /package/dist/{jsonValue.js → native/jsonValue.js} +0 -0
  199. /package/dist/{media.js → native/media.js} +0 -0
  200. /package/dist/{permissions.js → native/permissions.js} +0 -0
  201. /package/dist/{priority.js → native/priority.js} +0 -0
  202. /package/dist/{storage → native/storage}/FileSystem.js +0 -0
  203. /package/dist/{storage → native/storage}/index.js +0 -0
  204. /package/dist/{streamUtils.js → native/streamUtils.js} +0 -0
  205. /package/dist/{sync.js → native/sync.js} +0 -0
  206. /package/dist/{typeUtils → native/typeUtils}/accountOrAgentIDfromSessionID.js +0 -0
  207. /package/dist/{typeUtils → native/typeUtils}/expectGroup.js +0 -0
  208. /package/dist/{typeUtils → native/typeUtils}/isAccountID.js +0 -0
  209. /package/dist/{typeUtils → native/typeUtils}/isCoValue.js +0 -0
@@ -0,0 +1,66 @@
1
+ import { CO_VALUE_PRIORITY } from "./priority.js";
2
+ import { PriorityBasedMessageQueue, } from "./PriorityBasedMessageQueue.js";
3
+ export class PeerState {
4
+ constructor(peer) {
5
+ this.peer = peer;
6
+ this.optimisticKnownStates = {};
7
+ this.toldKnownState = new Set();
8
+ /**
9
+ * We set as default priority HIGH to handle all the messages without a
10
+ * priority property as HIGH priority.
11
+ *
12
+ * This way we consider all the non-content messsages as HIGH priority.
13
+ */
14
+ this.queue = new PriorityBasedMessageQueue(CO_VALUE_PRIORITY.HIGH);
15
+ this.processing = false;
16
+ this.closed = false;
17
+ }
18
+ get id() {
19
+ return this.peer.id;
20
+ }
21
+ get role() {
22
+ return this.peer.role;
23
+ }
24
+ get priority() {
25
+ return this.peer.priority;
26
+ }
27
+ get crashOnClose() {
28
+ return this.peer.crashOnClose;
29
+ }
30
+ async processQueue() {
31
+ if (this.processing) {
32
+ return;
33
+ }
34
+ this.processing = true;
35
+ let entry;
36
+ while ((entry = this.queue.pull())) {
37
+ // Awaiting the push to send one message at a time
38
+ // This way when the peer is "under pressure" we can enqueue all
39
+ // the coming messages and organize them by priority
40
+ await this.peer.outgoing
41
+ .push(entry.msg)
42
+ .then(entry.resolve)
43
+ .catch(entry.reject);
44
+ }
45
+ this.processing = false;
46
+ }
47
+ pushOutgoingMessage(msg) {
48
+ const promise = this.queue.push(msg);
49
+ void this.processQueue();
50
+ return promise;
51
+ }
52
+ get incoming() {
53
+ if (this.closed) {
54
+ return (async function* () {
55
+ yield "Disconnected";
56
+ })();
57
+ }
58
+ return this.peer.incoming;
59
+ }
60
+ gracefulShutdown() {
61
+ console.debug("Gracefully closing", this.id);
62
+ this.peer.outgoing.close();
63
+ this.closed = true;
64
+ }
65
+ }
66
+ //# sourceMappingURL=PeerState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeerState.js","sourceRoot":"","sources":["../../src/PeerState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EACH,yBAAyB,GAE5B,MAAM,gCAAgC,CAAC;AAGxC,MAAM,OAAO,SAAS;IAClB,YAAoB,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;QAErB,0BAAqB,GAAyC,EAAE,CAAC;QACjE,mBAAc,GAAiB,IAAI,GAAG,EAAE,CAAC;QAiBlD;;;;;WAKG;QACK,UAAK,GAAG,IAAI,yBAAyB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC9D,eAAU,GAAG,KAAK,CAAC;QACpB,WAAM,GAAG,KAAK,CAAC;IA5BW,CAAC;IAIlC,IAAI,EAAE;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IAClC,CAAC;IAYD,KAAK,CAAC,YAAY;QACd,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAGvB,IAAI,KAA6B,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACjC,kDAAkD;YAClD,gEAAgE;YAChE,oDAAoD;YACpD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ;iBACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;iBACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;iBACnB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,GAAgB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAErC,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAEzB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ;QACR,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,SAAS,CAAC;gBACnB,MAAM,cAAuB,CAAC;YAClC,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,gBAAgB;QACZ,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;CACJ"}
@@ -0,0 +1,51 @@
1
+ function promiseWithResolvers() {
2
+ let resolve = (_) => { };
3
+ let reject = (_) => { };
4
+ const promise = new Promise((_resolve, _reject) => {
5
+ resolve = _resolve;
6
+ reject = _reject;
7
+ });
8
+ return {
9
+ promise,
10
+ resolve,
11
+ reject,
12
+ };
13
+ }
14
+ export class PriorityBasedMessageQueue {
15
+ getQueue(priority) {
16
+ return this.queues[priority];
17
+ }
18
+ constructor(defaultPriority) {
19
+ this.defaultPriority = defaultPriority;
20
+ this.queues = [
21
+ [],
22
+ [],
23
+ [],
24
+ [],
25
+ [],
26
+ [],
27
+ [],
28
+ [],
29
+ ];
30
+ }
31
+ push(msg) {
32
+ const { promise, resolve, reject } = promiseWithResolvers();
33
+ const entry = { msg, promise, resolve, reject };
34
+ if ("priority" in msg) {
35
+ const queue = this.getQueue(msg.priority);
36
+ queue?.push(entry);
37
+ }
38
+ else {
39
+ this.getQueue(this.defaultPriority).push(entry);
40
+ }
41
+ return promise;
42
+ }
43
+ pull() {
44
+ const activeQueue = this.queues.find((queue) => queue.length > 0);
45
+ if (!activeQueue) {
46
+ return undefined;
47
+ }
48
+ return activeQueue.shift();
49
+ }
50
+ }
51
+ //# sourceMappingURL=PriorityBasedMessageQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PriorityBasedMessageQueue.js","sourceRoot":"","sources":["../../src/PriorityBasedMessageQueue.ts"],"names":[],"mappings":"AAGA,SAAS,oBAAoB;IACzB,IAAI,OAAO,GAAG,CAAC,CAAI,EAAE,EAAE,GAAE,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE,GAAE,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QACjD,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,OAAO,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO;QACP,OAAO;QACP,MAAM;KACT,CAAC;AACN,CAAC;AAeD,MAAM,OAAO,yBAAyB;IAY1B,QAAQ,CAAC,QAAyB;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,YACY,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;QAhBpC,WAAM,GAAe;YACzB,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;SACL,CAAC;IAQC,CAAC;IAEG,IAAI,CAAC,GAAgB;QACxB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAQ,CAAC;QAClE,MAAM,KAAK,GAAe,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAE5D,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,IAAI;QACP,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACJ"}
@@ -0,0 +1,59 @@
1
+ const encoder = new TextEncoder();
2
+ const decoder = new TextDecoder();
3
+ export function base64URLtoBytes(base64) {
4
+ base64 = base64.replace(/=/g, "");
5
+ const n = base64.length;
6
+ const rem = n % 4;
7
+ const k = rem && rem - 1; // how many bytes the last base64 chunk encodes
8
+ const m = (n >> 2) * 3 + k; // total encoded bytes
9
+ const encoded = new Uint8Array(n + 3);
10
+ encoder.encodeInto(base64 + "===", encoded);
11
+ for (let i = 0, j = 0; i < n; i += 4, j += 3) {
12
+ const x = (lookup[encoded[i]] << 18) +
13
+ (lookup[encoded[i + 1]] << 12) +
14
+ (lookup[encoded[i + 2]] << 6) +
15
+ lookup[encoded[i + 3]];
16
+ encoded[j] = x >> 16;
17
+ encoded[j + 1] = (x >> 8) & 0xff;
18
+ encoded[j + 2] = x & 0xff;
19
+ }
20
+ return new Uint8Array(encoded.buffer, 0, m);
21
+ }
22
+ export function bytesToBase64url(bytes) {
23
+ // const before = performance.now();
24
+ const m = bytes.length;
25
+ const k = m % 3;
26
+ const n = Math.floor(m / 3) * 4 + (k && k + 1);
27
+ const N = Math.ceil(m / 3) * 4;
28
+ const encoded = new Uint8Array(N);
29
+ for (let i = 0, j = 0; j < m; i += 4, j += 3) {
30
+ const y = (bytes[j] << 16) + (bytes[j + 1] << 8) + (bytes[j + 2] | 0);
31
+ encoded[i] = encodeLookup[y >> 18];
32
+ encoded[i + 1] = encodeLookup[(y >> 12) & 0x3f];
33
+ encoded[i + 2] = encodeLookup[(y >> 6) & 0x3f];
34
+ encoded[i + 3] = encodeLookup[y & 0x3f];
35
+ }
36
+ let base64 = decoder.decode(new Uint8Array(encoded.buffer, 0, n));
37
+ if (k === 1)
38
+ base64 += "==";
39
+ if (k === 2)
40
+ base64 += "=";
41
+ // const after = performance.now();
42
+ // console.log(
43
+ // "bytesToBase64url bandwidth in MB/s for length",
44
+ // (1000 * bytes.length / (after - before)) / (1024 * 1024),
45
+ // bytes.length
46
+ // );
47
+ return base64;
48
+ }
49
+ const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
50
+ const lookup = new Uint8Array(128);
51
+ for (const [i, a] of Array.from(alphabet).entries()) {
52
+ lookup[a.charCodeAt(0)] = i;
53
+ }
54
+ lookup["=".charCodeAt(0)] = 0;
55
+ const encodeLookup = new Uint8Array(64);
56
+ for (const [i, a] of Array.from(alphabet).entries()) {
57
+ encodeLookup[i] = a.charCodeAt(0);
58
+ }
59
+ //# sourceMappingURL=base64url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64url.js","sourceRoot":"","sources":["../../src/base64url.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { base64URLtoBytes, bytesToBase64url } from "./base64url.js";
2
+ import { test, expect } from "vitest";
3
+ const txt = new TextEncoder();
4
+ test("Test our Base64 URL encoding and decoding", () => {
5
+ // tests from the RFC
6
+ expect(base64URLtoBytes("")).toEqual(new Uint8Array([]));
7
+ expect(bytesToBase64url(new Uint8Array([]))).toEqual("");
8
+ expect(bytesToBase64url(txt.encode("f"))).toEqual("Zg==");
9
+ expect(bytesToBase64url(txt.encode("fo"))).toEqual("Zm8=");
10
+ expect(bytesToBase64url(txt.encode("foo"))).toEqual("Zm9v");
11
+ expect(bytesToBase64url(txt.encode("foob"))).toEqual("Zm9vYg==");
12
+ expect(bytesToBase64url(txt.encode("fooba"))).toEqual("Zm9vYmE=");
13
+ expect(bytesToBase64url(txt.encode("foobar"))).toEqual("Zm9vYmFy");
14
+ // reverse
15
+ expect(base64URLtoBytes("Zg==")).toEqual(txt.encode("f"));
16
+ expect(base64URLtoBytes("Zm8=")).toEqual(txt.encode("fo"));
17
+ expect(base64URLtoBytes("Zm9v")).toEqual(txt.encode("foo"));
18
+ expect(base64URLtoBytes("Zm9vYg==")).toEqual(txt.encode("foob"));
19
+ expect(base64URLtoBytes("Zm9vYmE=")).toEqual(txt.encode("fooba"));
20
+ expect(base64URLtoBytes("Zm9vYmFy")).toEqual(txt.encode("foobar"));
21
+ expect(base64URLtoBytes("V2hhdCBkb2VzIDIgKyAyLjEgZXF1YWw_PyB-IDQ=")).toEqual(txt.encode("What does 2 + 2.1 equal?? ~ 4"));
22
+ // reverse
23
+ expect(bytesToBase64url(txt.encode("What does 2 + 2.1 equal?? ~ 4"))).toEqual("V2hhdCBkb2VzIDIgKyAyLjEgZXF1YWw_PyB-IDQ=");
24
+ });
25
+ //# sourceMappingURL=base64url.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64url.test.js","sourceRoot":"","sources":["../../src/base64url.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;AAE9B,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACnD,qBAAqB;IAErB,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAEzD,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnE,UAAU;IACV,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEnE,MAAM,CACF,gBAAgB,CAAC,0CAA0C,CAAC,CAC/D,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACvD,UAAU;IACV,MAAM,CACF,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAChE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ export function expectMap(content) {
2
+ if (content.type !== "comap") {
3
+ throw new Error("Expected map");
4
+ }
5
+ return content;
6
+ }
7
+ export function expectList(content) {
8
+ if (content.type !== "colist") {
9
+ throw new Error("Expected list");
10
+ }
11
+ return content;
12
+ }
13
+ export function expectStream(content) {
14
+ if (content.type !== "costream") {
15
+ throw new Error("Expected stream");
16
+ }
17
+ return content;
18
+ }
19
+ //# sourceMappingURL=coValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coValue.js","sourceRoot":"","sources":["../../src/coValue.ts"],"names":[],"mappings":"AA6CA,MAAM,UAAU,SAAS,CAAC,OAAmB;IACzC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,OAAmB,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAmB;IAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,OAAoB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAmB;IAC5C,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,OAAsB,CAAC;AAClC,CAAC"}