jazz-tools 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/native/coValues/account.js.map +1 -0
  3. package/dist/native/coValues/coList.js.map +1 -0
  4. package/dist/native/coValues/coMap.js.map +1 -0
  5. package/dist/{coValues → native/coValues}/coStream.js +1 -0
  6. package/dist/native/coValues/coStream.js.map +1 -0
  7. package/dist/native/coValues/deepLoading.js.map +1 -0
  8. package/dist/native/coValues/extensions/imageDef.js.map +1 -0
  9. package/dist/native/coValues/group.js.map +1 -0
  10. package/dist/native/coValues/interfaces.js.map +1 -0
  11. package/dist/{implementation → native/implementation}/createContext.js +8 -1
  12. package/dist/native/implementation/createContext.js.map +1 -0
  13. package/dist/native/implementation/devtoolsFormatters.js.map +1 -0
  14. package/dist/{implementation → native/implementation}/errors.js.map +1 -1
  15. package/dist/native/implementation/inspect.js.map +1 -0
  16. package/dist/native/implementation/refs.js.map +1 -0
  17. package/dist/native/implementation/schema.js.map +1 -0
  18. package/dist/native/implementation/subscriptionScope.js.map +1 -0
  19. package/dist/native/implementation/symbols.js.map +1 -0
  20. package/dist/native/index.native.js +12 -0
  21. package/dist/native/index.native.js.map +1 -0
  22. package/dist/native/internal.js.map +1 -0
  23. package/dist/web/coValues/account.js +208 -0
  24. package/dist/web/coValues/account.js.map +1 -0
  25. package/dist/web/coValues/coList.js +395 -0
  26. package/dist/web/coValues/coList.js.map +1 -0
  27. package/dist/web/coValues/coMap.js +501 -0
  28. package/dist/web/coValues/coMap.js.map +1 -0
  29. package/dist/web/coValues/coStream.js +413 -0
  30. package/dist/web/coValues/coStream.js.map +1 -0
  31. package/dist/web/coValues/deepLoading.js +60 -0
  32. package/dist/web/coValues/deepLoading.js.map +1 -0
  33. package/dist/web/coValues/extensions/imageDef.js +37 -0
  34. package/dist/web/coValues/extensions/imageDef.js.map +1 -0
  35. package/dist/web/coValues/group.js +120 -0
  36. package/dist/web/coValues/group.js.map +1 -0
  37. package/dist/web/coValues/interfaces.js +109 -0
  38. package/dist/web/coValues/interfaces.js.map +1 -0
  39. package/dist/web/implementation/createContext.js +151 -0
  40. package/dist/web/implementation/createContext.js.map +1 -0
  41. package/dist/web/implementation/devtoolsFormatters.js +115 -0
  42. package/dist/web/implementation/devtoolsFormatters.js.map +1 -0
  43. package/dist/web/implementation/errors.js +2 -0
  44. package/dist/web/implementation/errors.js.map +1 -0
  45. package/dist/web/implementation/inspect.js +2 -0
  46. package/dist/web/implementation/inspect.js.map +1 -0
  47. package/dist/web/implementation/refs.js +127 -0
  48. package/dist/web/implementation/refs.js.map +1 -0
  49. package/dist/web/implementation/schema.js +91 -0
  50. package/dist/web/implementation/schema.js.map +1 -0
  51. package/dist/web/implementation/subscriptionScope.js +97 -0
  52. package/dist/web/implementation/subscriptionScope.js.map +1 -0
  53. package/dist/web/implementation/symbols.js +4 -0
  54. package/dist/web/implementation/symbols.js.map +1 -0
  55. package/dist/{index.js → web/index.web.js} +3 -3
  56. package/dist/{index.js.map → web/index.web.js.map} +1 -1
  57. package/dist/web/internal.js +17 -0
  58. package/dist/web/internal.js.map +1 -0
  59. package/package.json +25 -7
  60. package/src/coValues/account.ts +4 -1
  61. package/src/coValues/coStream.ts +26 -4
  62. package/src/coValues/group.ts +4 -1
  63. package/src/implementation/createContext.ts +12 -10
  64. package/src/{index.ts → index.native.ts} +2 -3
  65. package/src/index.web.ts +36 -0
  66. package/src/tests/coList.test.ts +2 -2
  67. package/src/tests/coMap.test.ts +11 -9
  68. package/src/tests/coStream.test.ts +2 -2
  69. package/src/tests/deepLoading.test.ts +2 -2
  70. package/src/tests/groupsAndAccounts.test.ts +1 -1
  71. package/tsconfig.json +5 -4
  72. package/tsconfig.native.json +11 -0
  73. package/tsconfig.web.json +11 -0
  74. package/dist/coValues/account.js.map +0 -1
  75. package/dist/coValues/coList.js.map +0 -1
  76. package/dist/coValues/coMap.js.map +0 -1
  77. package/dist/coValues/coStream.js.map +0 -1
  78. package/dist/coValues/deepLoading.js.map +0 -1
  79. package/dist/coValues/extensions/imageDef.js.map +0 -1
  80. package/dist/coValues/group.js.map +0 -1
  81. package/dist/coValues/interfaces.js.map +0 -1
  82. package/dist/implementation/createContext.js.map +0 -1
  83. package/dist/implementation/devtoolsFormatters.js.map +0 -1
  84. package/dist/implementation/inspect.js.map +0 -1
  85. package/dist/implementation/refs.js.map +0 -1
  86. package/dist/implementation/schema.js.map +0 -1
  87. package/dist/implementation/subscriptionScope.js.map +0 -1
  88. package/dist/implementation/symbols.js.map +0 -1
  89. package/dist/internal.js.map +0 -1
  90. package/dist/tests/coList.test.js +0 -221
  91. package/dist/tests/coList.test.js.map +0 -1
  92. package/dist/tests/coMap.test.js +0 -615
  93. package/dist/tests/coMap.test.js.map +0 -1
  94. package/dist/tests/coStream.test.js +0 -324
  95. package/dist/tests/coStream.test.js.map +0 -1
  96. package/dist/tests/deepLoading.test.js +0 -175
  97. package/dist/tests/deepLoading.test.js.map +0 -1
  98. package/dist/tests/groupsAndAccounts.test.js +0 -69
  99. package/dist/tests/groupsAndAccounts.test.js.map +0 -1
  100. /package/dist/{coValues → native/coValues}/account.js +0 -0
  101. /package/dist/{coValues → native/coValues}/coList.js +0 -0
  102. /package/dist/{coValues → native/coValues}/coMap.js +0 -0
  103. /package/dist/{coValues → native/coValues}/deepLoading.js +0 -0
  104. /package/dist/{coValues → native/coValues}/extensions/imageDef.js +0 -0
  105. /package/dist/{coValues → native/coValues}/group.js +0 -0
  106. /package/dist/{coValues → native/coValues}/interfaces.js +0 -0
  107. /package/dist/{implementation → native/implementation}/devtoolsFormatters.js +0 -0
  108. /package/dist/{implementation → native/implementation}/errors.js +0 -0
  109. /package/dist/{implementation → native/implementation}/inspect.js +0 -0
  110. /package/dist/{implementation → native/implementation}/refs.js +0 -0
  111. /package/dist/{implementation → native/implementation}/schema.js +0 -0
  112. /package/dist/{implementation → native/implementation}/subscriptionScope.js +0 -0
  113. /package/dist/{implementation → native/implementation}/symbols.js +0 -0
  114. /package/dist/{internal.js → native/internal.js} +0 -0
@@ -1,324 +0,0 @@
1
- import { expect, describe, test } from "vitest";
2
- import { connectedPeers } from "cojson/src/streamUtils.js";
3
- import { BinaryCoStream, Account, CoStream, co, WasmCrypto, isControlledAccount, cojsonInternals, createJazzContext, fixedCredentialsAuth, } from "../index.js";
4
- import { randomSessionProvider } from "../internal.js";
5
- const Crypto = await WasmCrypto.create();
6
- describe("Simple CoStream operations", async () => {
7
- const me = await Account.create({
8
- creationProps: { name: "Hermes Puggington" },
9
- crypto: Crypto,
10
- });
11
- if (!isControlledAccount(me)) {
12
- throw "me is not a controlled account";
13
- }
14
- class TestStream extends CoStream.Of(co.string) {
15
- }
16
- const stream = TestStream.create(["milk"], { owner: me });
17
- test("Construction", () => {
18
- expect(stream[me.id]?.value).toEqual("milk");
19
- expect(stream.perSession[me.sessionID]?.value).toEqual("milk");
20
- });
21
- describe("Mutation", () => {
22
- test("pushing", () => {
23
- stream.push("bread");
24
- expect(stream[me.id]?.value).toEqual("bread");
25
- expect(stream.perSession[me.sessionID]?.value).toEqual("bread");
26
- stream.push("butter");
27
- expect(stream[me.id]?.value).toEqual("butter");
28
- expect(stream.perSession[me.sessionID]?.value).toEqual("butter");
29
- });
30
- });
31
- });
32
- describe("CoStream resolution", async () => {
33
- class TwiceNestedStream extends CoStream.Of(co.string) {
34
- fancyValueOf(account) {
35
- return "Sir " + this[account]?.value;
36
- }
37
- }
38
- class NestedStream extends CoStream.Of(co.ref(TwiceNestedStream)) {
39
- }
40
- class TestStream extends CoStream.Of(co.ref(NestedStream)) {
41
- }
42
- const initNodeAndStream = async () => {
43
- const me = await Account.create({
44
- creationProps: { name: "Hermes Puggington" },
45
- crypto: Crypto,
46
- });
47
- const stream = TestStream.create([
48
- NestedStream.create([TwiceNestedStream.create(["milk"], { owner: me })], { owner: me }),
49
- ], { owner: me });
50
- return { me, stream };
51
- };
52
- test("Construction", async () => {
53
- const { me, stream } = await initNodeAndStream();
54
- expect(stream[me.id]?.value?.[me.id]?.value?.[me.id]?.value).toEqual("milk");
55
- });
56
- test("Loading and availability", async () => {
57
- const { me, stream } = await initNodeAndStream();
58
- const [initialAsPeer, secondPeer] = connectedPeers("initial", "second", {
59
- peer1role: "server",
60
- peer2role: "client",
61
- });
62
- if (!isControlledAccount(me)) {
63
- throw "me is not a controlled account";
64
- }
65
- me._raw.core.node.syncManager.addPeer(secondPeer);
66
- const { account: meOnSecondPeer } = await createJazzContext({
67
- auth: fixedCredentialsAuth({
68
- accountID: me.id,
69
- secret: me._raw.agentSecret,
70
- }),
71
- sessionProvider: randomSessionProvider,
72
- peersToLoadFrom: [initialAsPeer],
73
- crypto: Crypto,
74
- });
75
- const loadedStream = await TestStream.load(stream.id, meOnSecondPeer, []);
76
- expect(loadedStream?.[me.id]?.value).toEqual(null);
77
- expect(loadedStream?.[me.id]?.ref?.id).toEqual(stream[me.id]?.value?.id);
78
- const loadedNestedStream = await NestedStream.load(stream[me.id].value.id, meOnSecondPeer, []);
79
- // expect(loadedStream?.[me.id]?.value).toEqual(loadedNestedStream);
80
- expect(loadedStream?.[me.id]?.value?.id).toEqual(loadedNestedStream?.id);
81
- expect(loadedStream?.[me.id]?.value?.[me.id]?.value).toEqual(null);
82
- // expect(loadedStream?.[me.id]?.ref?.value).toEqual(loadedNestedStream);
83
- expect(loadedStream?.[me.id]?.ref?.value?.id).toEqual(loadedNestedStream?.id);
84
- expect(loadedStream?.[me.id]?.value?.[me.id]?.ref?.id).toEqual(stream[me.id]?.value?.[me.id]?.value?.id);
85
- const loadedTwiceNestedStream = await TwiceNestedStream.load(stream[me.id].value[me.id].value.id, meOnSecondPeer, []);
86
- // expect(loadedStream?.[me.id]?.value?.[me.id]?.value).toEqual(
87
- // loadedTwiceNestedStream
88
- // );
89
- expect(loadedStream?.[me.id]?.value?.[me.id]?.value?.id).toEqual(loadedTwiceNestedStream?.id);
90
- expect(loadedStream?.[me.id]?.value?.[me.id]?.value?.fancyValueOf(me.id)).toEqual("Sir milk");
91
- // expect(loadedStream?.[me.id]?.ref?.value).toEqual(loadedNestedStream);
92
- expect(loadedStream?.[me.id]?.ref?.value?.id).toEqual(loadedNestedStream?.id);
93
- expect(loadedStream?.[me.id]?.value?.[me.id]?.ref?.value?.id).toEqual(loadedTwiceNestedStream?.id);
94
- const otherNestedStream = NestedStream.create([TwiceNestedStream.create(["butter"], { owner: meOnSecondPeer })], { owner: meOnSecondPeer });
95
- loadedStream?.push(otherNestedStream);
96
- // expect(loadedStream?.[me.id]?.value).toEqual(otherNestedStream);
97
- expect(loadedStream?.[me.id]?.value?.id).toEqual(otherNestedStream?.id);
98
- expect(loadedStream?.[me.id]?.ref?.value?.id).toEqual(otherNestedStream?.id);
99
- expect(loadedStream?.[me.id]?.value?.[me.id]?.value?.id).toEqual(otherNestedStream[me.id]?.value?.id);
100
- expect(loadedStream?.[me.id]?.value?.[me.id]?.value?.fancyValueOf(me.id)).toEqual("Sir butter");
101
- });
102
- test("Subscription & auto-resolution", async () => {
103
- const { me, stream } = await initNodeAndStream();
104
- const [initialAsPeer, secondAsPeer] = connectedPeers("initial", "second", {
105
- peer1role: "server",
106
- peer2role: "client",
107
- });
108
- me._raw.core.node.syncManager.addPeer(secondAsPeer);
109
- if (!isControlledAccount(me)) {
110
- throw "me is not a controlled account";
111
- }
112
- const { account: meOnSecondPeer } = await createJazzContext({
113
- auth: fixedCredentialsAuth({
114
- accountID: me.id,
115
- secret: me._raw.agentSecret,
116
- }),
117
- sessionProvider: randomSessionProvider,
118
- peersToLoadFrom: [initialAsPeer],
119
- crypto: Crypto,
120
- });
121
- const queue = new cojsonInternals.Channel();
122
- TestStream.subscribe(stream.id, meOnSecondPeer, [], (subscribedStream) => {
123
- console.log("subscribedStream[me.id]", subscribedStream[me.id]);
124
- console.log("subscribedStream[me.id]?.value?.[me.id]?.value", subscribedStream[me.id]?.value?.[me.id]?.value);
125
- console.log("subscribedStream[me.id]?.value?.[me.id]?.value?.[me.id]?.value", subscribedStream[me.id]?.value?.[me.id]?.value?.[me.id]
126
- ?.value);
127
- void queue.push(subscribedStream);
128
- });
129
- const update1 = (await queue.next()).value;
130
- expect(update1[me.id]?.value).toEqual(null);
131
- const update2 = (await queue.next()).value;
132
- expect(update2[me.id]?.value).toBeDefined();
133
- expect(update2[me.id]?.value?.[me.id]?.value).toBe(null);
134
- const update3 = (await queue.next()).value;
135
- expect(update3[me.id]?.value?.[me.id]?.value).toBeDefined();
136
- expect(update3[me.id]?.value?.[me.id]?.value?.[me.id]?.value).toBe("milk");
137
- update3[me.id].value[me.id].value.push("bread");
138
- const update4 = (await queue.next()).value;
139
- expect(update4[me.id]?.value?.[me.id]?.value?.[me.id]?.value).toBe("bread");
140
- // When assigning a new nested stream, we get an update
141
- const newTwiceNested = TwiceNestedStream.create(["butter"], {
142
- owner: meOnSecondPeer,
143
- });
144
- const newNested = NestedStream.create([newTwiceNested], {
145
- owner: meOnSecondPeer,
146
- });
147
- update4.push(newNested);
148
- const update5 = (await queue.next()).value;
149
- expect(update5[me.id]?.value?.[me.id]?.value?.[me.id]?.value).toBe("butter");
150
- // we get updates when the new nested stream changes
151
- newTwiceNested.push("jam");
152
- const update6 = (await queue.next()).value;
153
- expect(update6[me.id]?.value?.[me.id]?.value?.[me.id]?.value).toBe("jam");
154
- });
155
- });
156
- describe("Simple BinaryCoStream operations", async () => {
157
- const me = await Account.create({
158
- creationProps: { name: "Hermes Puggington" },
159
- crypto: Crypto,
160
- });
161
- const stream = BinaryCoStream.create({ owner: me });
162
- test("Construction", () => {
163
- expect(stream.getChunks()).toBe(undefined);
164
- });
165
- test("Mutation", () => {
166
- stream.start({ mimeType: "text/plain" });
167
- stream.push(new Uint8Array([1, 2, 3]));
168
- stream.push(new Uint8Array([4, 5, 6]));
169
- stream.end();
170
- const chunks = stream.getChunks();
171
- expect(chunks?.mimeType).toBe("text/plain");
172
- expect(chunks?.chunks).toEqual([
173
- new Uint8Array([1, 2, 3]),
174
- new Uint8Array([4, 5, 6]),
175
- ]);
176
- expect(chunks?.finished).toBe(true);
177
- });
178
- });
179
- describe("BinaryCoStream loading & Subscription", async () => {
180
- const initNodeAndStream = async () => {
181
- const me = await Account.create({
182
- creationProps: { name: "Hermes Puggington" },
183
- crypto: Crypto,
184
- });
185
- const stream = BinaryCoStream.create({ owner: me });
186
- stream.start({ mimeType: "text/plain" });
187
- stream.push(new Uint8Array([1, 2, 3]));
188
- stream.push(new Uint8Array([4, 5, 6]));
189
- stream.end();
190
- return { me, stream };
191
- };
192
- test("Construction", async () => {
193
- const { stream } = await initNodeAndStream();
194
- expect(stream.getChunks()).toEqual({
195
- mimeType: "text/plain",
196
- chunks: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])],
197
- finished: true,
198
- });
199
- });
200
- test("Loading and availability", async () => {
201
- const { me, stream } = await initNodeAndStream();
202
- const [initialAsPeer, secondAsPeer] = connectedPeers("initial", "second", {
203
- peer1role: "server",
204
- peer2role: "client",
205
- });
206
- if (!isControlledAccount(me)) {
207
- throw "me is not a controlled account";
208
- }
209
- me._raw.core.node.syncManager.addPeer(secondAsPeer);
210
- const { account: meOnSecondPeer } = await createJazzContext({
211
- auth: fixedCredentialsAuth({
212
- accountID: me.id,
213
- secret: me._raw.agentSecret,
214
- }),
215
- sessionProvider: randomSessionProvider,
216
- peersToLoadFrom: [initialAsPeer],
217
- crypto: Crypto,
218
- });
219
- const loadedStream = await BinaryCoStream.load(stream.id, meOnSecondPeer, []);
220
- expect(loadedStream?.getChunks()).toEqual({
221
- mimeType: "text/plain",
222
- chunks: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])],
223
- finished: true,
224
- });
225
- });
226
- test("Subscription", async () => {
227
- const { me } = await initNodeAndStream();
228
- const stream = BinaryCoStream.create({ owner: me });
229
- const [initialAsPeer, secondAsPeer] = connectedPeers("initial", "second", { peer1role: "server", peer2role: "client" });
230
- me._raw.core.node.syncManager.addPeer(secondAsPeer);
231
- if (!isControlledAccount(me)) {
232
- throw "me is not a controlled account";
233
- }
234
- const { account: meOnSecondPeer } = await createJazzContext({
235
- auth: fixedCredentialsAuth({
236
- accountID: me.id,
237
- secret: me._raw.agentSecret,
238
- }),
239
- sessionProvider: randomSessionProvider,
240
- peersToLoadFrom: [initialAsPeer],
241
- crypto: Crypto,
242
- });
243
- const queue = new cojsonInternals.Channel();
244
- BinaryCoStream.subscribe(stream.id, meOnSecondPeer, [], (subscribedStream) => {
245
- void queue.push(subscribedStream);
246
- });
247
- const update1 = (await queue.next()).value;
248
- expect(update1.getChunks()).toBe(undefined);
249
- stream.start({ mimeType: "text/plain" });
250
- const update2 = (await queue.next()).value;
251
- expect(update2.getChunks({ allowUnfinished: true })).toEqual({
252
- mimeType: "text/plain",
253
- fileName: undefined,
254
- chunks: [],
255
- totalSizeBytes: undefined,
256
- finished: false,
257
- });
258
- stream.push(new Uint8Array([1, 2, 3]));
259
- const update3 = (await queue.next()).value;
260
- expect(update3.getChunks({ allowUnfinished: true })).toEqual({
261
- mimeType: "text/plain",
262
- fileName: undefined,
263
- chunks: [new Uint8Array([1, 2, 3])],
264
- totalSizeBytes: undefined,
265
- finished: false,
266
- });
267
- stream.push(new Uint8Array([4, 5, 6]));
268
- const update4 = (await queue.next()).value;
269
- expect(update4.getChunks({ allowUnfinished: true })).toEqual({
270
- mimeType: "text/plain",
271
- fileName: undefined,
272
- chunks: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])],
273
- totalSizeBytes: undefined,
274
- finished: false,
275
- });
276
- stream.end();
277
- const update5 = (await queue.next()).value;
278
- expect(update5.getChunks()).toEqual({
279
- mimeType: "text/plain",
280
- fileName: undefined,
281
- chunks: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])],
282
- totalSizeBytes: undefined,
283
- finished: true,
284
- });
285
- });
286
- });
287
- describe("BinaryCoStream.loadAsBlob", async () => {
288
- async function setup() {
289
- const me = await Account.create({
290
- creationProps: { name: "Hermes Puggington" },
291
- crypto: Crypto,
292
- });
293
- const stream = BinaryCoStream.create({ owner: me });
294
- stream.start({ mimeType: "text/plain" });
295
- return { stream, me };
296
- }
297
- test("resolves only when the stream is ended", async () => {
298
- const { stream, me } = await setup();
299
- stream.push(new Uint8Array([1]));
300
- const promise = BinaryCoStream.loadAsBlob(stream.id, me);
301
- await stream.ensureLoaded([]);
302
- stream.push(new Uint8Array([2]));
303
- stream.end();
304
- const blob = await promise;
305
- // The promise resolves only when the stream is ended
306
- // so we get a blob with all the chunks
307
- expect(blob?.size).toBe(2);
308
- });
309
- test("resolves with an unfinshed blob if allowUnfinished: true", async () => {
310
- const { stream, me } = await setup();
311
- stream.push(new Uint8Array([1]));
312
- const promise = BinaryCoStream.loadAsBlob(stream.id, me, {
313
- allowUnfinished: true,
314
- });
315
- await stream.ensureLoaded([]);
316
- stream.push(new Uint8Array([2]));
317
- stream.end();
318
- const blob = await promise;
319
- // The promise resolves before the stream is ended
320
- // so we get a blob only with the first chunk
321
- expect(blob?.size).toBe(1);
322
- });
323
- });
324
- //# sourceMappingURL=coStream.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coStream.test.js","sourceRoot":"","sources":["../../src/tests/coStream.test.ts"],"names":[],"mappings":"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"}
@@ -1,175 +0,0 @@
1
- const Crypto = await WasmCrypto.create();
2
- import { expect, describe, test, expectTypeOf } from "vitest";
3
- import { connectedPeers } from "cojson/src/streamUtils.js";
4
- import { Account, CoList, CoMap, CoStream, WasmCrypto, co, Profile, isControlledAccount, createJazzContext, fixedCredentialsAuth, } from "../index.js";
5
- import { randomSessionProvider } from "../internal.js";
6
- class TestMap extends CoMap {
7
- list = co.ref(TestList);
8
- optionalRef = co.ref(InnermostMap, { optional: true });
9
- }
10
- class TestList extends CoList.Of(co.ref(() => InnerMap)) {
11
- }
12
- class InnerMap extends CoMap {
13
- stream = co.ref(TestStream);
14
- }
15
- class TestStream extends CoStream.Of(co.ref(() => InnermostMap)) {
16
- }
17
- class InnermostMap extends CoMap {
18
- value = co.string;
19
- }
20
- describe("Deep loading with depth arg", async () => {
21
- const me = await Account.create({
22
- creationProps: { name: "Hermes Puggington" },
23
- crypto: Crypto,
24
- });
25
- const [initialAsPeer, secondPeer] = connectedPeers("initial", "second", {
26
- peer1role: "server",
27
- peer2role: "client",
28
- });
29
- if (!isControlledAccount(me)) {
30
- throw "me is not a controlled account";
31
- }
32
- me._raw.core.node.syncManager.addPeer(secondPeer);
33
- const { account: meOnSecondPeer } = await createJazzContext({
34
- auth: fixedCredentialsAuth({
35
- accountID: me.id,
36
- secret: me._raw.agentSecret,
37
- }),
38
- sessionProvider: randomSessionProvider,
39
- peersToLoadFrom: [initialAsPeer],
40
- crypto: Crypto,
41
- });
42
- test("loading a deeply nested object will wait until all required refs are loaded", async () => {
43
- const ownership = { owner: me };
44
- const map = TestMap.create({
45
- list: TestList.create([
46
- InnerMap.create({
47
- stream: TestStream.create([
48
- InnermostMap.create({ value: "hello" }, ownership),
49
- ], ownership),
50
- }, ownership),
51
- ], ownership),
52
- }, ownership);
53
- const map1 = await TestMap.load(map.id, meOnSecondPeer, {});
54
- expectTypeOf(map1).toEqualTypeOf();
55
- if (map1 === undefined) {
56
- throw new Error("map1 is undefined");
57
- }
58
- expect(map1.list).toBe(null);
59
- const map2 = await TestMap.load(map.id, meOnSecondPeer, { list: [] });
60
- expectTypeOf(map2).toEqualTypeOf();
61
- if (map2 === undefined) {
62
- throw new Error("map2 is undefined");
63
- }
64
- expect(map2.list).not.toBe(null);
65
- expect(map2.list[0]).toBe(null);
66
- const map3 = await TestMap.load(map.id, meOnSecondPeer, { list: [{}] });
67
- expectTypeOf(map3).toEqualTypeOf();
68
- if (map3 === undefined) {
69
- throw new Error("map3 is undefined");
70
- }
71
- expect(map3.list[0]).not.toBe(null);
72
- expect(map3.list[0]?.stream).toBe(null);
73
- const map3a = await TestMap.load(map.id, meOnSecondPeer, {
74
- optionalRef: {},
75
- });
76
- expectTypeOf(map3a).toEqualTypeOf();
77
- const map4 = await TestMap.load(map.id, meOnSecondPeer, {
78
- list: [{ stream: [] }],
79
- });
80
- expectTypeOf(map4).toEqualTypeOf();
81
- if (map4 === undefined) {
82
- throw new Error("map4 is undefined");
83
- }
84
- expect(map4.list[0]?.stream).not.toBe(null);
85
- expect(map4.list[0]?.stream?.[me.id]).not.toBe(null);
86
- expect(map4.list[0]?.stream?.byMe?.value).toBe(null);
87
- const map5 = await TestMap.load(map.id, meOnSecondPeer, {
88
- list: [{ stream: [{}] }],
89
- });
90
- expectTypeOf(map5).toEqualTypeOf();
91
- if (map5 === undefined) {
92
- throw new Error("map5 is undefined");
93
- }
94
- expect(map5.list[0]?.stream?.[me.id]?.value).not.toBe(null);
95
- expect(map5.list[0]?.stream?.byMe?.value).not.toBe(null);
96
- });
97
- });
98
- class CustomProfile extends Profile {
99
- stream = co.ref(TestStream);
100
- }
101
- class CustomAccount extends Account {
102
- profile = co.ref(CustomProfile);
103
- root = co.ref(TestMap);
104
- async migrate(creationProps) {
105
- if (creationProps) {
106
- this.profile = CustomProfile.create({
107
- name: creationProps.name,
108
- stream: TestStream.create([], { owner: this }),
109
- }, { owner: this });
110
- this.root = TestMap.create({ list: TestList.create([], { owner: this }) }, { owner: this });
111
- }
112
- const thisLoaded = await this.ensureLoaded({
113
- profile: { stream: [] },
114
- root: { list: [] },
115
- });
116
- expectTypeOf(thisLoaded).toEqualTypeOf();
117
- }
118
- }
119
- test("Deep loading within account", async () => {
120
- const me = await CustomAccount.create({
121
- creationProps: { name: "Hermes Puggington" },
122
- crypto: Crypto,
123
- });
124
- const meLoaded = await me.ensureLoaded({
125
- profile: { stream: [] },
126
- root: { list: [] },
127
- });
128
- expectTypeOf(meLoaded).toEqualTypeOf();
129
- if (meLoaded === undefined) {
130
- throw new Error("meLoaded is undefined");
131
- }
132
- expect(meLoaded.profile.stream).not.toBe(null);
133
- expect(meLoaded.root.list).not.toBe(null);
134
- });
135
- class RecordLike extends CoMap.Record(co.ref(TestMap)) {
136
- }
137
- test("Deep loading a record-like coMap", async () => {
138
- const me = await Account.create({
139
- creationProps: { name: "Hermes Puggington" },
140
- crypto: Crypto,
141
- });
142
- const [initialAsPeer, secondPeer] = connectedPeers("initial", "second", {
143
- peer1role: "server",
144
- peer2role: "client",
145
- });
146
- if (!isControlledAccount(me)) {
147
- throw "me is not a controlled account";
148
- }
149
- me._raw.core.node.syncManager.addPeer(secondPeer);
150
- const { account: meOnSecondPeer } = await createJazzContext({
151
- auth: fixedCredentialsAuth({
152
- accountID: me.id,
153
- secret: me._raw.agentSecret,
154
- }),
155
- sessionProvider: randomSessionProvider,
156
- peersToLoadFrom: [initialAsPeer],
157
- crypto: Crypto,
158
- });
159
- const record = RecordLike.create({
160
- key1: TestMap.create({ list: TestList.create([], { owner: me }) }, { owner: me }),
161
- key2: TestMap.create({ list: TestList.create([], { owner: me }) }, { owner: me }),
162
- }, { owner: me });
163
- const recordLoaded = await RecordLike.load(record.id, meOnSecondPeer, [
164
- { list: [{}] },
165
- ]);
166
- expectTypeOf(recordLoaded).toEqualTypeOf();
167
- if (recordLoaded === undefined) {
168
- throw new Error("recordLoaded is undefined");
169
- }
170
- expect(recordLoaded.key1?.list).not.toBe(null);
171
- expect(recordLoaded.key1?.list).not.toBe(undefined);
172
- expect(recordLoaded.key2?.list).not.toBe(null);
173
- expect(recordLoaded.key2?.list).not.toBe(undefined);
174
- });
175
- //# sourceMappingURL=deepLoading.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepLoading.test.js","sourceRoot":"","sources":["../../src/tests/deepLoading.test.ts"],"names":[],"mappings":"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"}
@@ -1,69 +0,0 @@
1
- import { expect, describe, test } from "vitest";
2
- import { Account, CoMap, co, Group, WasmCrypto } from "../index.js";
3
- const Crypto = await WasmCrypto.create();
4
- describe("Custom accounts and groups", async () => {
5
- class CustomProfile extends CoMap {
6
- name = co.string;
7
- color = co.string;
8
- }
9
- class CustomAccount extends Account {
10
- profile = co.ref(CustomProfile);
11
- root = co.ref(CoMap);
12
- migrate(creationProps) {
13
- if (creationProps) {
14
- const profileGroup = Group.create({ owner: this });
15
- profileGroup.addMember("everyone", "reader");
16
- this.profile = CustomProfile.create({ name: creationProps.name, color: "blue" }, { owner: this });
17
- }
18
- }
19
- }
20
- class CustomGroup extends Group {
21
- profile = co.null;
22
- root = co.null;
23
- [co.members] = co.ref(CustomAccount);
24
- get nMembers() {
25
- return this.members.length;
26
- }
27
- }
28
- test("Custom account and group", async () => {
29
- const me = await CustomAccount.create({
30
- creationProps: { name: "Hermes Puggington" },
31
- crypto: Crypto,
32
- });
33
- expect(me.profile).toBeDefined();
34
- expect(me.profile?.name).toBe("Hermes Puggington");
35
- expect(me.profile?.color).toBe("blue");
36
- const group = new CustomGroup({ owner: me });
37
- group.addMember("everyone", "reader");
38
- expect(group.members).toMatchObject([
39
- { id: me.id, role: "admin" },
40
- { id: "everyone", role: "reader" },
41
- ]);
42
- expect(group.nMembers).toBe(2);
43
- await new Promise((resolve) => {
44
- group.subscribe({}, (update) => {
45
- const meAsMember = update.members.find((member) => {
46
- return member.id === me.id && member.account?.profile;
47
- });
48
- if (meAsMember) {
49
- expect(meAsMember.account?.profile?.name).toBe("Hermes Puggington");
50
- expect(meAsMember.account?.profile?.color).toBe("blue");
51
- resolve();
52
- }
53
- });
54
- });
55
- class MyMap extends CoMap {
56
- name = co.string;
57
- }
58
- const map = MyMap.create({ name: "test" }, { owner: group });
59
- const meAsCastMember = map._owner
60
- .castAs(CustomGroup)
61
- .members.find((member) => member.id === me.id);
62
- expect(meAsCastMember?.account?.profile?.name).toBe("Hermes Puggington");
63
- expect(meAsCastMember?.account?.profile?.color).toBe("blue");
64
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
- expect(map._owner.nMembers).toBeUndefined();
66
- expect(map._owner.castAs(CustomGroup).nMembers).toBe(2);
67
- });
68
- });
69
- //# sourceMappingURL=groupsAndAccounts.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"groupsAndAccounts.test.js","sourceRoot":"","sources":["../../src/tests/groupsAndAccounts.test.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes