on-zero 0.4.25 → 0.4.27

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 (140) hide show
  1. package/dist/cjs/createUseQuery.cjs +28 -16
  2. package/dist/cjs/createUseQuery.native.js +42 -30
  3. package/dist/cjs/createUseQuery.native.js.map +1 -1
  4. package/dist/cjs/createZeroClient.cjs +13 -1
  5. package/dist/cjs/createZeroClient.native.js +13 -1
  6. package/dist/cjs/createZeroClient.native.js.map +1 -1
  7. package/dist/cjs/httpPull/auth.test.cjs +197 -0
  8. package/dist/cjs/httpPull/auth.test.native.js +279 -0
  9. package/dist/cjs/httpPull/auth.test.native.js.map +1 -0
  10. package/dist/cjs/httpPull/churn.test.cjs +132 -0
  11. package/dist/cjs/httpPull/churn.test.native.js +155 -0
  12. package/dist/cjs/httpPull/churn.test.native.js.map +1 -0
  13. package/dist/cjs/httpPull/fixtureSchema.cjs +76 -0
  14. package/dist/cjs/httpPull/fixtureSchema.native.js +82 -0
  15. package/dist/cjs/httpPull/fixtureSchema.native.js.map +1 -0
  16. package/dist/cjs/httpPull/fixtureServer.cjs +340 -0
  17. package/dist/cjs/httpPull/fixtureServer.native.js +534 -0
  18. package/dist/cjs/httpPull/fixtureServer.native.js.map +1 -0
  19. package/dist/cjs/httpPull/integration.test.cjs +53 -0
  20. package/dist/cjs/httpPull/integration.test.native.js +60 -0
  21. package/dist/cjs/httpPull/integration.test.native.js.map +1 -0
  22. package/dist/cjs/httpPull/rebase.test.cjs +360 -0
  23. package/dist/cjs/httpPull/rebase.test.native.js +420 -0
  24. package/dist/cjs/httpPull/rebase.test.native.js.map +1 -0
  25. package/dist/cjs/httpPull/relations.test.cjs +107 -0
  26. package/dist/cjs/httpPull/relations.test.native.js +119 -0
  27. package/dist/cjs/httpPull/relations.test.native.js.map +1 -0
  28. package/dist/cjs/httpPull/testHarness.cjs +100 -0
  29. package/dist/cjs/httpPull/testHarness.native.js +112 -0
  30. package/dist/cjs/httpPull/testHarness.native.js.map +1 -0
  31. package/dist/cjs/httpPull/transport.test.cjs +568 -0
  32. package/dist/cjs/httpPull/transport.test.native.js +655 -0
  33. package/dist/cjs/httpPull/transport.test.native.js.map +1 -0
  34. package/dist/cjs/httpPullTransport.cjs +432 -0
  35. package/dist/cjs/httpPullTransport.native.js +695 -0
  36. package/dist/cjs/httpPullTransport.native.js.map +1 -0
  37. package/dist/cjs/index.cjs +1 -0
  38. package/dist/cjs/index.native.js +1 -0
  39. package/dist/cjs/index.native.js.map +1 -1
  40. package/dist/cjs/multiInstanceNested.test.cjs +26 -0
  41. package/dist/cjs/multiInstanceNested.test.native.js +34 -0
  42. package/dist/cjs/multiInstanceNested.test.native.js.map +1 -1
  43. package/dist/esm/createUseQuery.mjs +28 -16
  44. package/dist/esm/createUseQuery.mjs.map +1 -1
  45. package/dist/esm/createUseQuery.native.js +42 -30
  46. package/dist/esm/createUseQuery.native.js.map +1 -1
  47. package/dist/esm/createZeroClient.mjs +13 -1
  48. package/dist/esm/createZeroClient.mjs.map +1 -1
  49. package/dist/esm/createZeroClient.native.js +13 -1
  50. package/dist/esm/createZeroClient.native.js.map +1 -1
  51. package/dist/esm/httpPull/auth.test.mjs +198 -0
  52. package/dist/esm/httpPull/auth.test.mjs.map +1 -0
  53. package/dist/esm/httpPull/auth.test.native.js +277 -0
  54. package/dist/esm/httpPull/auth.test.native.js.map +1 -0
  55. package/dist/esm/httpPull/churn.test.mjs +133 -0
  56. package/dist/esm/httpPull/churn.test.mjs.map +1 -0
  57. package/dist/esm/httpPull/churn.test.native.js +153 -0
  58. package/dist/esm/httpPull/churn.test.native.js.map +1 -0
  59. package/dist/esm/httpPull/fixtureSchema.mjs +50 -0
  60. package/dist/esm/httpPull/fixtureSchema.mjs.map +1 -0
  61. package/dist/esm/httpPull/fixtureSchema.native.js +53 -0
  62. package/dist/esm/httpPull/fixtureSchema.native.js.map +1 -0
  63. package/dist/esm/httpPull/fixtureServer.mjs +315 -0
  64. package/dist/esm/httpPull/fixtureServer.mjs.map +1 -0
  65. package/dist/esm/httpPull/fixtureServer.native.js +506 -0
  66. package/dist/esm/httpPull/fixtureServer.native.js.map +1 -0
  67. package/dist/esm/httpPull/integration.test.mjs +54 -0
  68. package/dist/esm/httpPull/integration.test.mjs.map +1 -0
  69. package/dist/esm/httpPull/integration.test.native.js +58 -0
  70. package/dist/esm/httpPull/integration.test.native.js.map +1 -0
  71. package/dist/esm/httpPull/rebase.test.mjs +361 -0
  72. package/dist/esm/httpPull/rebase.test.mjs.map +1 -0
  73. package/dist/esm/httpPull/rebase.test.native.js +418 -0
  74. package/dist/esm/httpPull/rebase.test.native.js.map +1 -0
  75. package/dist/esm/httpPull/relations.test.mjs +108 -0
  76. package/dist/esm/httpPull/relations.test.mjs.map +1 -0
  77. package/dist/esm/httpPull/relations.test.native.js +117 -0
  78. package/dist/esm/httpPull/relations.test.native.js.map +1 -0
  79. package/dist/esm/httpPull/testHarness.mjs +72 -0
  80. package/dist/esm/httpPull/testHarness.mjs.map +1 -0
  81. package/dist/esm/httpPull/testHarness.native.js +81 -0
  82. package/dist/esm/httpPull/testHarness.native.js.map +1 -0
  83. package/dist/esm/httpPull/transport.test.mjs +569 -0
  84. package/dist/esm/httpPull/transport.test.mjs.map +1 -0
  85. package/dist/esm/httpPull/transport.test.native.js +653 -0
  86. package/dist/esm/httpPull/transport.test.native.js.map +1 -0
  87. package/dist/esm/httpPullTransport.mjs +406 -0
  88. package/dist/esm/httpPullTransport.mjs.map +1 -0
  89. package/dist/esm/httpPullTransport.native.js +666 -0
  90. package/dist/esm/httpPullTransport.native.js.map +1 -0
  91. package/dist/esm/index.js +1 -0
  92. package/dist/esm/index.js.map +1 -1
  93. package/dist/esm/index.mjs +1 -0
  94. package/dist/esm/index.mjs.map +1 -1
  95. package/dist/esm/index.native.js +1 -0
  96. package/dist/esm/index.native.js.map +1 -1
  97. package/dist/esm/multiInstanceNested.test.mjs +27 -1
  98. package/dist/esm/multiInstanceNested.test.mjs.map +1 -1
  99. package/dist/esm/multiInstanceNested.test.native.js +35 -1
  100. package/dist/esm/multiInstanceNested.test.native.js.map +1 -1
  101. package/package.json +2 -2
  102. package/src/createUseQuery.tsx +40 -22
  103. package/src/createZeroClient.tsx +19 -0
  104. package/src/httpPull/auth.test.ts +208 -0
  105. package/src/httpPull/churn.test.ts +147 -0
  106. package/src/httpPull/fixtureSchema.ts +82 -0
  107. package/src/httpPull/fixtureServer.ts +391 -0
  108. package/src/httpPull/integration.test.ts +57 -0
  109. package/src/httpPull/rebase.test.ts +368 -0
  110. package/src/httpPull/relations.test.ts +135 -0
  111. package/src/httpPull/testHarness.ts +95 -0
  112. package/src/httpPull/transport.test.ts +577 -0
  113. package/src/httpPullTransport.ts +559 -0
  114. package/src/index.ts +1 -0
  115. package/src/multiInstanceNested.test.tsx +25 -1
  116. package/types/createUseQuery.d.ts.map +1 -1
  117. package/types/createZeroClient.d.ts +3 -1
  118. package/types/createZeroClient.d.ts.map +1 -1
  119. package/types/httpPull/auth.test.d.ts +2 -0
  120. package/types/httpPull/auth.test.d.ts.map +1 -0
  121. package/types/httpPull/churn.test.d.ts +2 -0
  122. package/types/httpPull/churn.test.d.ts.map +1 -0
  123. package/types/httpPull/fixtureSchema.d.ts +111 -0
  124. package/types/httpPull/fixtureSchema.d.ts.map +1 -0
  125. package/types/httpPull/fixtureServer.d.ts +14 -0
  126. package/types/httpPull/fixtureServer.d.ts.map +1 -0
  127. package/types/httpPull/integration.test.d.ts +2 -0
  128. package/types/httpPull/integration.test.d.ts.map +1 -0
  129. package/types/httpPull/rebase.test.d.ts +2 -0
  130. package/types/httpPull/rebase.test.d.ts.map +1 -0
  131. package/types/httpPull/relations.test.d.ts +2 -0
  132. package/types/httpPull/relations.test.d.ts.map +1 -0
  133. package/types/httpPull/testHarness.d.ts +32 -0
  134. package/types/httpPull/testHarness.d.ts.map +1 -0
  135. package/types/httpPull/transport.test.d.ts +2 -0
  136. package/types/httpPull/transport.test.d.ts.map +1 -0
  137. package/types/httpPullTransport.d.ts +13 -0
  138. package/types/httpPullTransport.d.ts.map +1 -0
  139. package/types/index.d.ts +1 -0
  140. package/types/index.d.ts.map +1 -1
@@ -0,0 +1,420 @@
1
+ "use strict";
2
+
3
+ var import_vitest = require("vitest");
4
+ var import_testHarness = require("./testHarness.native.js");
5
+ var harness;
6
+ (0, import_vitest.afterEach)(async function () {
7
+ await (harness === null || harness === void 0 ? void 0 : harness.close());
8
+ harness = void 0;
9
+ });
10
+ (0, import_vitest.test)("ack-then-pull keeps optimistic rows visible until the authoritative snapshot lands", async function () {
11
+ var postPushPull = deferred();
12
+ var postPushPullStarted = deferred();
13
+ var shouldHoldPostPushPull = false;
14
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
15
+ seed: {
16
+ user: [{
17
+ id: "u1",
18
+ name: "ada"
19
+ }],
20
+ project: [{
21
+ id: "p1",
22
+ ownerId: "u1",
23
+ name: "first"
24
+ }],
25
+ member: []
26
+ },
27
+ interceptFetch: function (next) {
28
+ return async function (input, init) {
29
+ var path = new URL(String(input)).pathname;
30
+ if (path === "/push") {
31
+ var response = await next(input, init);
32
+ shouldHoldPostPushPull = true;
33
+ return response;
34
+ }
35
+ if (path === "/pull" && shouldHoldPostPushPull) {
36
+ shouldHoldPostPushPull = false;
37
+ postPushPullStarted.resolve();
38
+ await postPushPull.promise;
39
+ }
40
+ return next(input, init);
41
+ };
42
+ }
43
+ });
44
+ var zero = harness.createZero("u1");
45
+ var view = zero.query.project.materialize();
46
+ await (0, import_testHarness.waitForComplete)(view);
47
+ var emissions = recordEmissions(view);
48
+ var mutation = zero.mutate.project.create({
49
+ id: "p2",
50
+ ownerId: "u1",
51
+ name: "second"
52
+ });
53
+ await mutation.client;
54
+ await (0, import_testHarness.eventually)(function () {
55
+ return (0, import_vitest.expect)(projectIDs(view.data)).toContain("p2");
56
+ });
57
+ await mutation.server;
58
+ await postPushPullStarted.promise;
59
+ (0, import_vitest.expect)(projectIDs(view.data)).toContain("p2");
60
+ postPushPull.resolve();
61
+ await harness.transport.pull();
62
+ await (0, import_testHarness.eventually)(function () {
63
+ return (0, import_vitest.expect)(projectIDs(view.data).sort()).toEqual(["p1", "p2"]);
64
+ });
65
+ expectNeverDisappearsAfterFirstSeen(emissions, "p2");
66
+ (0, import_vitest.expect)(harness.server.rows("project").sort(byID)).toEqual([{
67
+ id: "p1",
68
+ ownerId: "u1",
69
+ name: "first"
70
+ }, {
71
+ id: "p2",
72
+ ownerId: "u1",
73
+ name: "second"
74
+ }]);
75
+ emissions.cleanup();
76
+ view.destroy();
77
+ });
78
+ (0, import_vitest.test)("pull-then-ack rebases optimistic rows over a newer snapshot", async function () {
79
+ var pushGate = deferred();
80
+ var pushStarted = deferred();
81
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
82
+ seed: {
83
+ user: [{
84
+ id: "u1",
85
+ name: "ada"
86
+ }],
87
+ project: [{
88
+ id: "p1",
89
+ ownerId: "u1",
90
+ name: "first"
91
+ }],
92
+ member: []
93
+ },
94
+ interceptFetch: function (next) {
95
+ return async function (input, init) {
96
+ var path = new URL(String(input)).pathname;
97
+ if (path === "/push") {
98
+ var body = JSON.parse(String(init === null || init === void 0 ? void 0 : init.body));
99
+ pushStarted.resolve(body);
100
+ await pushGate.promise;
101
+ }
102
+ return next(input, init);
103
+ };
104
+ }
105
+ });
106
+ var zero = harness.createZero("u1");
107
+ var view = zero.query.project.materialize();
108
+ await (0, import_testHarness.waitForComplete)(view);
109
+ var emissions = recordEmissions(view);
110
+ var mutation = zero.mutate.project.create({
111
+ id: "p2",
112
+ ownerId: "u1",
113
+ name: "optimistic"
114
+ });
115
+ await mutation.client;
116
+ await (0, import_testHarness.eventually)(function () {
117
+ return (0, import_vitest.expect)(projectIDs(view.data)).toContain("p2");
118
+ });
119
+ var heldPush = await pushStarted.promise;
120
+ await rawPush(harness, {
121
+ clientGroupID: heldPush.clientGroupID,
122
+ clientID: "server-side",
123
+ id: 1,
124
+ name: "project|create",
125
+ args: {
126
+ id: "p-server",
127
+ ownerId: "u1",
128
+ name: "server change"
129
+ }
130
+ });
131
+ await harness.transport.pull();
132
+ await (0, import_testHarness.eventually)(function () {
133
+ return (0, import_vitest.expect)(projectIDs(view.data).sort()).toEqual(["p-server", "p1", "p2"]);
134
+ });
135
+ (0, import_vitest.expect)(harness.server.rows("project").map(function (row) {
136
+ return row.id;
137
+ }).sort()).toEqual(["p-server", "p1"]);
138
+ pushGate.resolve();
139
+ await mutation.server;
140
+ await harness.transport.pull();
141
+ await (0, import_testHarness.eventually)(function () {
142
+ return (0, import_vitest.expect)(projectIDs(view.data).sort()).toEqual(["p-server", "p1", "p2"]);
143
+ });
144
+ expectNeverDisappearsAfterFirstSeen(emissions, "p2");
145
+ (0, import_vitest.expect)(harness.server.rows("project").sort(byID)).toEqual([{
146
+ id: "p-server",
147
+ ownerId: "u1",
148
+ name: "server change"
149
+ }, {
150
+ id: "p1",
151
+ ownerId: "u1",
152
+ name: "first"
153
+ }, {
154
+ id: "p2",
155
+ ownerId: "u1",
156
+ name: "optimistic"
157
+ }]);
158
+ emissions.cleanup();
159
+ view.destroy();
160
+ });
161
+ (0, import_vitest.test)("app-error rollback advances LMID and reverts optimistic state after pull", async function () {
162
+ var _emissions_values_at;
163
+ var pushGate = deferred();
164
+ var pushStarted = deferred();
165
+ var clientGroupID = "";
166
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
167
+ seed: {
168
+ user: [{
169
+ id: "u1",
170
+ name: "ada"
171
+ }, {
172
+ id: "u2",
173
+ name: "ben"
174
+ }],
175
+ project: [{
176
+ id: "p1",
177
+ ownerId: "u2",
178
+ name: "shared"
179
+ }],
180
+ member: [{
181
+ id: "m1",
182
+ projectId: "p1",
183
+ userId: "u1"
184
+ }]
185
+ },
186
+ interceptFetch: function (next) {
187
+ return async function (input, init) {
188
+ if (new URL(String(input)).pathname === "/push") {
189
+ var body = JSON.parse(String(init === null || init === void 0 ? void 0 : init.body));
190
+ clientGroupID = body.clientGroupID;
191
+ pushStarted.resolve();
192
+ await pushGate.promise;
193
+ }
194
+ return next(input, init);
195
+ };
196
+ }
197
+ });
198
+ var zero = harness.createZero("u1");
199
+ var view = zero.query.project.materialize();
200
+ await (0, import_testHarness.waitForComplete)(view);
201
+ var emissions = recordEmissions(view);
202
+ var mutation = zero.mutate.project.rename({
203
+ id: "p1",
204
+ name: "stolen"
205
+ });
206
+ await mutation.client;
207
+ await pushStarted.promise;
208
+ (0, import_vitest.expect)(projectName(view.data, "p1")).toBe("stolen");
209
+ (0, import_vitest.expect)(harness.server.rows("project")).toEqual([{
210
+ id: "p1",
211
+ ownerId: "u2",
212
+ name: "shared"
213
+ }]);
214
+ pushGate.resolve();
215
+ await (0, import_vitest.expect)(mutation.server).resolves.toMatchObject({
216
+ type: "error",
217
+ error: {
218
+ type: "app",
219
+ details: "forbidden"
220
+ }
221
+ });
222
+ await harness.transport.pull();
223
+ await (0, import_testHarness.eventually)(function () {
224
+ return (0, import_vitest.expect)(projectName(view.data, "p1")).toBe("shared");
225
+ });
226
+ (0, import_vitest.expect)(emissions.values.map(function (rows) {
227
+ return projectName(rows, "p1");
228
+ })).toContain("stolen");
229
+ (0, import_vitest.expect)((_emissions_values_at = emissions.values.at(-1)) === null || _emissions_values_at === void 0 ? void 0 : _emissions_values_at[0]).toEqual({
230
+ id: "p1",
231
+ ownerId: "u2",
232
+ name: "shared"
233
+ });
234
+ (0, import_vitest.expect)(harness.server.rows("project")).toEqual([{
235
+ id: "p1",
236
+ ownerId: "u2",
237
+ name: "shared"
238
+ }]);
239
+ var pull = await rawPull(harness, "u1", {
240
+ clientGroupID
241
+ });
242
+ (0, import_vitest.expect)(Object.values(pull.lastMutationIDChanges)).toContain(1);
243
+ emissions.cleanup();
244
+ view.destroy();
245
+ });
246
+ (0, import_vitest.test)("app-error rollback removes phantom optimistic create after pull", async function () {
247
+ var pushGate = deferred();
248
+ var pushStarted = deferred();
249
+ var clientGroupID = "";
250
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
251
+ seed: {
252
+ user: [{
253
+ id: "u1",
254
+ name: "ada"
255
+ }, {
256
+ id: "u2",
257
+ name: "ben"
258
+ }],
259
+ project: [],
260
+ member: []
261
+ },
262
+ interceptFetch: function (next) {
263
+ return async function (input, init) {
264
+ if (new URL(String(input)).pathname === "/push") {
265
+ var body = JSON.parse(String(init === null || init === void 0 ? void 0 : init.body));
266
+ clientGroupID = body.clientGroupID;
267
+ pushStarted.resolve();
268
+ await pushGate.promise;
269
+ }
270
+ return next(input, init);
271
+ };
272
+ }
273
+ });
274
+ var zero = harness.createZero("u1");
275
+ var view = zero.query.project.materialize();
276
+ await (0, import_testHarness.waitForComplete)(view);
277
+ var emissions = recordEmissions(view);
278
+ var mutation = zero.mutate.project.create({
279
+ id: "p-phantom",
280
+ ownerId: "u2",
281
+ name: "forbidden"
282
+ });
283
+ await mutation.client;
284
+ await pushStarted.promise;
285
+ await (0, import_testHarness.eventually)(function () {
286
+ return (0, import_vitest.expect)(projectIDs(view.data)).toContain("p-phantom");
287
+ });
288
+ (0, import_vitest.expect)(harness.server.rows("project")).toEqual([]);
289
+ pushGate.resolve();
290
+ await (0, import_vitest.expect)(mutation.server).resolves.toMatchObject({
291
+ type: "error",
292
+ error: {
293
+ type: "app",
294
+ details: "forbidden"
295
+ }
296
+ });
297
+ await harness.transport.pull();
298
+ await (0, import_testHarness.eventually)(function () {
299
+ return (0, import_vitest.expect)(projectIDs(view.data)).not.toContain("p-phantom");
300
+ });
301
+ (0, import_vitest.expect)(emissions.values.some(function (rows) {
302
+ return projectIDs(rows).includes("p-phantom");
303
+ })).toBe(true);
304
+ (0, import_vitest.expect)(emissions.values.at(-1)).toEqual([]);
305
+ (0, import_vitest.expect)(harness.server.rows("project")).toEqual([]);
306
+ var pull = await rawPull(harness, "u1", {
307
+ clientGroupID
308
+ });
309
+ (0, import_vitest.expect)(Object.values(pull.lastMutationIDChanges)).toContain(1);
310
+ emissions.cleanup();
311
+ view.destroy();
312
+ });
313
+ async function rawPush(harness2, mutation) {
314
+ var response = await fetch(`${harness2.server.url}/push`, {
315
+ method: "POST",
316
+ headers: {
317
+ authorization: "Bearer token-u1",
318
+ "content-type": "application/json"
319
+ },
320
+ body: JSON.stringify({
321
+ timestamp: Date.now(),
322
+ clientGroupID: mutation.clientGroupID,
323
+ pushVersion: 1,
324
+ requestID: `raw-${mutation.clientID}-${mutation.id}`,
325
+ mutations: [{
326
+ type: "custom",
327
+ name: mutation.name,
328
+ id: mutation.id,
329
+ clientID: mutation.clientID,
330
+ args: [mutation.args]
331
+ }]
332
+ })
333
+ });
334
+ (0, import_vitest.expect)(response.status).toBe(200);
335
+ return response.json();
336
+ }
337
+ async function rawPull(harness2, userID, body) {
338
+ var response = await fetch(`${harness2.server.url}/pull`, {
339
+ method: "POST",
340
+ headers: {
341
+ authorization: `Bearer token-${userID}`,
342
+ "content-type": "application/json"
343
+ },
344
+ body: JSON.stringify({
345
+ clientID: "raw-pull",
346
+ clientGroupID: body.clientGroupID,
347
+ cookie: null
348
+ })
349
+ });
350
+ (0, import_vitest.expect)(response.status).toBe(200);
351
+ return response.json();
352
+ }
353
+ function recordEmissions(view) {
354
+ var values = [];
355
+ var cleanup = view.addListener(function (data) {
356
+ return values.push(snapshot(data));
357
+ });
358
+ return {
359
+ values,
360
+ cleanup
361
+ };
362
+ }
363
+ function snapshot(rows) {
364
+ return JSON.parse(JSON.stringify(rows));
365
+ }
366
+ function projectIDs(rows) {
367
+ return rows.map(function (row) {
368
+ return row.id;
369
+ });
370
+ }
371
+ function projectName(rows, id) {
372
+ var _rows_find;
373
+ return (_rows_find = rows.find(function (row) {
374
+ return row.id === id;
375
+ })) === null || _rows_find === void 0 ? void 0 : _rows_find.name;
376
+ }
377
+ function expectNeverDisappearsAfterFirstSeen(emissions, id) {
378
+ var seen = false;
379
+ var _iteratorNormalCompletion = true,
380
+ _didIteratorError = false,
381
+ _iteratorError = void 0;
382
+ try {
383
+ for (var _iterator = emissions.values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
384
+ var rows = _step.value;
385
+ if (projectIDs(rows).includes(id)) seen = true;
386
+ if (seen) (0, import_vitest.expect)(projectIDs(rows)).toContain(id);
387
+ }
388
+ } catch (err) {
389
+ _didIteratorError = true;
390
+ _iteratorError = err;
391
+ } finally {
392
+ try {
393
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
394
+ _iterator.return();
395
+ }
396
+ } finally {
397
+ if (_didIteratorError) {
398
+ throw _iteratorError;
399
+ }
400
+ }
401
+ }
402
+ (0, import_vitest.expect)(seen).toBe(true);
403
+ }
404
+ function byID(a, b) {
405
+ return a.id.localeCompare(b.id);
406
+ }
407
+ function deferred() {
408
+ var resolve;
409
+ var reject;
410
+ var promise = new Promise(function (res, rej) {
411
+ resolve = res;
412
+ reject = rej;
413
+ });
414
+ return {
415
+ promise,
416
+ resolve,
417
+ reject
418
+ };
419
+ }
420
+ //# sourceMappingURL=rebase.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["import_vitest","require","import_testHarness","harness","afterEach","close","test","postPushPull","deferred","postPushPullStarted","shouldHoldPostPushPull","startZeroHttpHarness","seed","user","id","name","project","ownerId","member","interceptFetch","next","input","init","path","URL","String","pathname","response","resolve","promise","zero","createZero","view","query","materialize","waitForComplete","emissions","recordEmissions","mutation","mutate","create","client","eventually","expect","projectIDs","data","toContain","server","transport","pull","sort","toEqual","expectNeverDisappearsAfterFirstSeen","rows","byID","cleanup","destroy","pushGate","pushStarted","body","JSON","parse","heldPush","rawPush","clientGroupID","clientID","args","map","row","_emissions_values_at","projectId","userId","rename","projectName","toBe","resolves","toMatchObject","type","error","details","values","at","rawPull","Object","lastMutationIDChanges"],"sources":["../../../src/httpPull/rebase.test.ts"],"sourcesContent":[null],"mappings":"AAAA;;AAEA,IAAAA,aAAA,GAAAC,OAKO;AAEP,IAAIC,kBAAA,GAAAD,OAAA;AAAA,IAEJE,OAAA;AACE,IAAAH,aAAe,CAAAI,SAAM;EACrB,OAAAD,OAAU,aAAAA,OAAA,uBAAAA,OAAA,CAAAE,KAAA;EACXF,OAAA;AAAA;AAGC,IAAAH,aAAM,CAAAM,IAAA,EAAe,oFAAe;EACpC,IAAAC,YAAM,GAAAC,QAAA,CAAsB;EAC5B,IAAIC,mBAAA,GAAAD,QAAyB;EAE7B,IAAAE,sBAAgB;EAAqBP,OACnC,GAAM,UAAAD,kBAAA,CAAAS,oBAAA;IAAAC,IACJ;MACAC,IAAA,GACA;QACFC,EAAA;QACAC,IAAA;MACE,EACA;MACEC,OAAA,EAAM,CACN;QACAF,EAAA,MAAO;QACTG,OAAA;QACIF,IAAA;MACF,EACA;MACAG,MAAA,EAAM;IAAa;IAErBC,cAAY,WAAAA,CAAWC,IAAA;MACzB,uBAAAC,KAAA,EAAAC,IAAA;QACD,IAAAC,IAAA,OAAAC,GAAA,CAAAC,MAAA,CAAAJ,KAAA,GAAAK,QAAA;QACK,IAAAH,IAAO,YAAQ;UACf,IAAAI,QAAY,SAAMP,IAAQ,CAAAC,KAAA,EAAAC,IAAY;UAC5CZ,sBAAM;UACA,OAAAiB,QAAY;QAEZ;QACA,IAAAJ,IAAA,gBAAAb,sBAAA;UACJA,sBAAS;UACHD,mBAAA,CAAAmB,OAAA;UACP,MAAArB,YAAA,CAAAsB,OAAA;QACK;QACN,OAAMT,IAAA,CAAAC,KAAA,EAAAC,IAAA;MACN;IACA;EAEA;EACA,IAAAQ,IAAA,GAAA3B,OAAa,CAAA4B,UAAQ;EACrB,IAAAC,IAAM,GAAAF,IAAQ,CAAAG,KAAA,CAAAjB,OAAe,CAAAkB,WAAA;EAC7B,UAAMhC,kBAAA,CAAAiC,eAAW,EAAAH,IAAA,CAAM;EAEvB,IAAAI,SAAA,GAAAC,eAAA,CAAAL,IAAoC;EACpC,IAAAM,QAAA,GAAAR,IAAA,CAAAS,MAAO,CAAAvB,OAAQ,CAAAwB,MAAO;IACpB1B,EAAE,MAAI;IACNG,OAAM,MAAM;IACbF,IAAA;EACD;EACA,MAAKuB,QAAQ,CAAAG,MAAA;EACd,UAAAvC,kBAAA,CAAAwC,UAAA;IAED,WAAA1C,aAAK,CAAA2C,MAAA,EAAAC,UAAA,CAAAZ,IAAA,CAAAa,IAAA,GAAAC,SAAA;EACH;EACA,MAAMR,QAAA,CAAAS,MAAc;EAEpB,MAAAtC,mBAAgB,CAAAoB,OAAA;EAAqB,EACnC,EAAA7B,aAAM,CAAA2C,MAAA,EAAAC,UAAA,CAAAZ,IAAA,CAAAa,IAAA,GAAAC,SAAA;EAAAvC,YACG,CAAEqB,OAAI;EAAmB,MAChCzB,OAAS,CAAC6C,SAAM,CAAAC,IAAM;EAA8B,MACpD,IAAA/C,kBAAS,CAAAwC,UAAA;IACX,WAAA1C,aAAA,CAAA2C,MAAA,EAAAC,UAAA,CAAAZ,IAAA,CAAAa,IAAA,EAAAK,IAAA,IAAAC,OAAA,EACA,MACE,KACA;EACE;EACAC,mCAAwB,CAAAhB,SAAA;EACxB,IAAApC,aAAM,CAAA2C,MAAS,EAAAxC,OAAA,CAAA4C,MAAA,CAAAM,IAAA,YAAAH,IAAA,CAAAI,IAAA,GAAAH,OAAA;IAEjBrC,EAAA,MAAO;IACTG,OAAA;IACDF,IAAA;EACD,GACA;IACAD,EAAA,MAAM;IACNG,OAAM;IAENF,IAAM;EACJ,EAAI,CACJ;EAASqB,SACH,CAAAmB,OAAA;EACRvB,IAAC,CAAAwB,OAAA;AACD;AACA,IAAAxD,aAAM,CAAAM,IAAA,+DAAwB,EAAW,kBAAY;EAErD,IAAAmD,QAAM,GAAAjD,QAAiB;EACvB,IAAAkD,WAAc,GAAAlD,QAAS;EAAAL,OACrB,UAAe,GAAAD,kBAAS,CAAAS,oBAAA;IACxBC,IAAA;MACAC,IAAI,GACJ;QACMC,EAAE,MAAI;QACbC,IAAA;MACK,EAEN;MAAiBC,OAAA,EACf,CACF;QACAF,EAAA;QACEG,OAAQ,EACL;QAGHF,IAAS;MAEX,EACA;MACAG,MAAM;IACN;IAAiBC,cACf,WAAAA,CAAAC,IAAA;MACF,uBAAAC,KAAA,EAAAC,IAAA;QAEA,IAAAC,IAAA,OAAAC,GAAA,CAAAC,MAAA,CAAAJ,KAAoC,GAAAK,QAAW;QAC/C,IAAAH,IAAA,YAAO;UACC,IAAAoC,IAAA,GAAAC,IAAY,CAAAC,KAAS,CAAApC,MAAM,CAAAH,IAAM,aAAAA,IAAgB,uBAAAA,IAAA,CAAAqC,IAAA;UACjDD,WAAM,CAAA9B,OAAS,CAAA+B,IAAM;UACrB,MAAMF,QAAA,CAAS5B,OAAM;QAC5B;QACD,OAAUT,IAAA,CAAQC,KAAA,EAAAC,IAAA;MAClB,CAAK;IACN;EAAA,EAED;EACE,IAAAQ,IAAM,GAAA3B,OAAW,CAAA4B,UAAe;EAChC,IAAAC,IAAM,GAAAF,IAAA,CAAAG,KAAc,CAAAjB,OAAe,CAAAkB,WAAA;EACnC,MAAI,IAAAhC,kBAAgB,CAAAiC,eAAA,EAAAH,IAAA;EAEpB,IAAAI,SAAU,GAAAC,eAAM,CAAAL,IAAA;EAAqB,IACnCM,QAAM,GAAAR,IAAA,CAAAS,MAAA,CAAAvB,OAAA,CAAAwB,MAAA;IAAA1B,EACJ,MAAM;IAAAG,OACF,MAAI;IAAkBF,IACxB,EAAE;EAAsB;EAC1B,MACAuB,QAAU,CAAAG,MAAM;EAAqC,MACrD,IAAAvC,kBAAqB,CAAAwC,UAAW,cAAc;IAChD,WAAA1C,aAAA,CAAA2C,MAAA,EAAAC,UAAA,CAAAZ,IAAA,CAAAa,IAAA,GAAAC,SAAA;EAAA,EACA;EACE,IAAAgB,QAAQ,SAAIJ,WAAe,CAAA7B,OAAA;EACzB,MAAAkC,OAAM,CAAA5D,OAAO;IACb6D,aAAA,EAAAF,QAAgB,CAAAE,aAAK;IACrBC,QAAA,eAAY;IACZnD,EAAA;IAAeC,IACjB;IACAmD,IAAA;MACFpD,EAAA;MACDG,OAAA;MACDF,IAAM;IACN;EACA;EACA,MAAMZ,OAAA,CAAA6C,SAAY,CAAAC,IAAA;EAElB,MAAM,IAAA/C,kBAAgB,CAAOwC,UAAQ,cAAa;IAClD,OAAM,IAAA1C,aAAS,CAAA2C,MAAA,EAAAC,UAAA,CAAAZ,IAAA,CAAAa,IAAA,EAAAK,IAAA,IAAAC,OAAA,EACf,UAAM,EACN,MACA,KACE,CAAE;EACJ,CAAC;EAED,IAAAnD,aAAiB,CAAA2C,MAAA,EAAAxC,OAAA,CAAA4C,MAAA,CAAAM,IAAA,YAAAc,GAAA,WAAAC,GAAA;IACjB,OAAAA,GAAM,CAAAtD,EAAA;EAA+C,EACnD,CAAAoC,IAAA,CAAM,GAAAC,OAAA,EACN,UAAO,MACL,CAAM;EACGM,QACX,CAAA7B,OAAA;EACF,MAACU,QAAA,CAAAS,MAAA;EAED,MAAM5C,OAAA,CAAQ6C,SAAA,CAAUC,IAAA,CAAK;EAC7B,UAAM/C,kBAAA,CAAAwC,UAAA,EAAW,YAAM;IACvB,WAAA1C,aAAO,CAAA2C,MAAA,EAAAC,UAAiB,CAAAZ,IAAK,CAAAa,IAAA,EAASK,IAAA,IAAAC,OAAY,EAClD,YACE,IAAI,EACJ,KACA;EACF,CAAC;EACDC,mCAAe,CAAAhB,SAAO,EAAK;EAAoB,EAC7C,EAAEpC,aAAU,CAAA2C,MAAS,EAAAxC,OAAM,CAAA4C,MAAM,CAAAM,IAAS,YAAAH,IAAA,CAAAI,IAAA,GAAAH,OAAA,EAC3C;IAEDrC,EAAM,YAAO;IACbG,OAAA;IACAF,IAAA,EAAU;EACV,GACD;IAEDD,EAAA;IACEG,OAAM,MAAW;IACjBF,IAAM;EACN,GAEA;IACED,EAAA,EAAM;IACJG,OAAM;IAAAF,IACF;EAAsB,EACA;EAC1BqB,SACA,CAAAmB,OAAU;EAAAvB,IACV,CAAAwB,OAAQ,CAAC;AAAA;AACX,IACAxD,aAAA,CAAAM,IAAiB,4EAAgC;EAC/C,IAAA+D,oBAAmB;EACjB,IAAAZ,QAAM,GAAAjD,QAAO,CAAK;EAClB,IAAAkD,WAAA,GAAAlD,QAAgB,CAAK;EACrB,IAAAwD,aAAA,GAAY;EACZ7D,OAAA,SAAM,IAAAD,kBAAS,CAAAS,oBAAA;IAAAC,IACjB;MACAC,IAAA,GACF;QACDC,EAAA;QACKC,IAAA,EAAO;MACP,GACN;QACMD,EAAA;QAEAC,IAAA;MACA,EACJ;MACAC,OAAM,GACP;QACKF,EAAA,MAAS;QACTG,OAAA,MAAY;QAClBF,IAAM;MACN,EAEA;MACAG,MAAM,GACJ;QACAJ,EAAO;QACLwD,SAAM;QACNC,MAAS;MACX;IAGF;IACApD,cAAM,WAAAA,CAAAC,IAAA;MACN,uBAAOC,KAAA,EAAAC,IAAU;QACf,QAAAE,GAAA,CAAAC,MAAA,CAAAJ,KAAA,GAAAK,QAAA;UACF,IAAAiC,IAAA,GAAAC,IAAA,CAAAC,KAAA,CAAApC,MAAA,CAAAH,IAAA,aAAAA,IAAA,uBAAAA,IAAA,CAAAqC,IAAA;UACAK,aAAA,GAAAL,IAAO,CAAAK,aAAU;UACjBN,WAAA,CAAA9B,OAAO;UAED,MAAO6B,QAAM,CAAA5B,OAAQ;QAC3B;QACA,OAAUT,IAAA,CAAQC,KAAA,EAAAC,IAAA;MAClB,CAAK;IACN;EAED;EAUE,IAAAQ,IAAM,GAAA3B,OAAW,CAAA4B,UAAY,KAAG;EAA2B,IACzDC,IAAA,GAAQF,IAAA,CAAAG,KAAA,CAAAjB,OAAA,CAAAkB,WAAA;EAAA,MACR,IAAAhC,kBAAS,CAAAiC,eAAA,EAAAH,IAAA;EAAA,IACPI,SAAA,GAAAC,eAAe,CAAAL,IAAA;EAAA,IACfM,QAAA,GAAAR,IAAA,CAAgBS,MAAA,CAAAvB,OAAA,CAAAwD,MAAA;IAClB1D,EAAA;IACAC,IAAA,EAAM;EAAe;EACC,MACpBuB,QAAA,CAAAG,MAAe;EAAS,MACxBiB,WAAa,CAAA7B,OAAA;EAAA,IACb7B,aAAW,CAAA2C,MAAO,EAAA8B,WAAS,CAAAzC,IAAQ,CAAIa,IAAA,MAAS,CAAE,EAAA6B,IAAA;EAAA,IAClD1E,aAAW,CAAA2C,MAAA,EAAAxC,OAAA,CAAA4C,MAAA,CAAAM,IAAA,aAAAF,OAAA;IACTrC,EAAA,EACE;IAAMG,OACN,MAAM;IAASF,IACf;EAAa,EACM;EACC0C,QACtB,CAAA7B,OAAA;EAAA,MACF,IAAA5B,aAAA,CAAA2C,MAAA,EAAAL,QAAA,CAAAS,MAAA,EAAA4B,QAAA,CAAAC,aAAA;IACFC,IAAC;IACFC,KAAA;MACDD,IAAA;MACAE,OAAO;IACT;EAEA;EAKE,MAAM5E,OAAA,CAAA6C,SAAiB,CAAAC,IAAA,CAAM;EAA8B,MACzD,IAAQ/C,kBAAA,CAAAwC,UAAA;IACR,SAAS,EAAA1C,aAAA,CAAA2C,MAAA,EAAA8B,WAAA,CAAAzC,IAAA,CAAAa,IAAA,SAAA6B,IAAA;EAAA;EAC8B,IACrC1E,aAAA,CAAA2C,MAAgB,EAAAP,SAAA,CAAA4C,MAAA,CAAAb,GAAA,WAAAd,IAAA;IAClB,OAAAoB,WAAA,CAAApB,IAAA;EAAA,EACA,EAAAP,SAAW,UAAU;EAAA,IACnB9C,aAAU,CAAA2C,MAAA,GAAA0B,oBAAA,GAAAjC,SAAA,CAAA4C,MAAA,CAAAC,EAAA,kBAAAZ,oBAAA,uBAAAA,oBAAA,KAAAlB,OAAA;IAAArC,EACV;IAAoBG,OACpB,MAAQ;IACVF,IAAC;EACH,CAAC;EACD,IAAAf,aAAA,CAAA2C,MAAA,EAAOxC,OAAA,CAAA4C,MAAS,CAAMM,IAAE,UAAQ,GAAAF,OAAA,EAChC;IAGFrC,EAAA;IAEAG,OAAS;IAGPF,IAAM;EACN,EACA;EACF,IAAAkC,IAAA,SAAAiC,OAAA,CAAA/E,OAAA;IAEA6D;EACE;EACF,IAAAhE,aAAA,CAAA2C,MAAA,EAAAwC,MAAA,CAAAH,MAAA,CAAA/B,IAAA,CAAAmC,qBAAA,GAAAtC,SAAA;EAEAV,SAAS,CAAAmB,OAAA,CAAW;EAClBvB,IAAA,CAAAwB,OAAY;AACd;AAEA,IAAAxD,aAAS,CAAAM,IAAY,mEAAyB;EAC5C,IAAAmD,QAAY,GAAAjD,QAAM;EACpB,IAAAkD,WAAA,GAAAlD,QAAA;EAEA,IAAAwD,aAAS;EACP7D,OAAI,SAAO,IAAAD,kBAAA,CAAAS,oBAAA;IACXC,IAAA;MACEC,IAAI,GACA;QACNC,EAAA;QACAC,IAAA;MACF,GAEA;QACSD,EAAE,EAAG;QACdC,IAAA;MAEA,CAAS,CACH;MACAC,OAAA;MACJE,MAAM;IACJ;IACAC,cAAS,WAAAA,CAAAC,IAAA;MACV,uBAAAC,KAAA,EAAAC,IAAA;QACD,IAAS,IAAAE,GAAA,CAASC,MAAA,CAAAJ,KAAS,GAAAK,QAAO;UACpC,IAAAiC,IAAA,GAAAC,IAAA,CAAAC,KAAA,CAAApC,MAAA,CAAAH,IAAA,aAAAA,IAAA,uBAAAA,IAAA,CAAAqC,IAAA","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ var import_vitest = require("vitest");
2
+ var import_testHarness = require("./testHarness.cjs");
3
+ let harness;
4
+ (0, import_vitest.afterEach)(async () => {
5
+ await harness?.close();
6
+ harness = void 0;
7
+ });
8
+ (0, import_vitest.test)("related project members appear, update, and vanish with visibility", async () => {
9
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
10
+ seed: {
11
+ user: [{
12
+ id: "u1",
13
+ name: "ada"
14
+ }, {
15
+ id: "u2",
16
+ name: "ben"
17
+ }],
18
+ project: [],
19
+ member: []
20
+ }
21
+ });
22
+ const u1 = harness.createZero("u1");
23
+ const u2 = harness.createZero("u2");
24
+ const u1Projects = u1.query.project.related("members").materialize();
25
+ const emissions = [];
26
+ const stopCapture = captureProjectEmissions(u1Projects, emissions);
27
+ try {
28
+ await (0, import_vitest.expect)((0, import_testHarness.waitForComplete)(u1Projects)).resolves.toEqual([]);
29
+ const created = u2.mutate.project.create({
30
+ id: "p-shared",
31
+ ownerId: "u2",
32
+ name: "shared"
33
+ });
34
+ await created.client;
35
+ await created.server;
36
+ const added = u2.mutate.member.add({
37
+ id: "m-u1-shared",
38
+ projectId: "p-shared",
39
+ userId: "u1"
40
+ });
41
+ await added.client;
42
+ await added.server;
43
+ await harness.transport.pull();
44
+ await (0, import_testHarness.eventually)(() => {
45
+ (0, import_vitest.expect)(normalizeProjects(u1Projects.data)).toEqual([{
46
+ id: "p-shared",
47
+ ownerId: "u2",
48
+ name: "shared",
49
+ members: [{
50
+ id: "m-u1-shared",
51
+ projectId: "p-shared",
52
+ userId: "u1"
53
+ }]
54
+ }]);
55
+ });
56
+ const renamed = u2.mutate.project.rename({
57
+ id: "p-shared",
58
+ name: "renamed shared"
59
+ });
60
+ await renamed.client;
61
+ await renamed.server;
62
+ await harness.transport.pull();
63
+ await (0, import_testHarness.eventually)(() => {
64
+ (0, import_vitest.expect)(normalizeProjects(u1Projects.data)).toEqual([{
65
+ id: "p-shared",
66
+ ownerId: "u2",
67
+ name: "renamed shared",
68
+ members: [{
69
+ id: "m-u1-shared",
70
+ projectId: "p-shared",
71
+ userId: "u1"
72
+ }]
73
+ }]);
74
+ });
75
+ const removed = u2.mutate.member.remove({
76
+ id: "m-u1-shared"
77
+ });
78
+ await removed.client;
79
+ await removed.server;
80
+ await harness.transport.pull();
81
+ await (0, import_testHarness.eventually)(() => {
82
+ (0, import_vitest.expect)(normalizeProjects(u1Projects.data)).toEqual([]);
83
+ (0, import_vitest.expect)(emissions.at(-1)?.some(project => project.id === "p-shared")).toBe(false);
84
+ });
85
+ const emissionCountAfterRevocation = emissions.length;
86
+ await harness.transport.pull();
87
+ await (0, import_testHarness.sleep)(50);
88
+ (0, import_vitest.expect)(emissions.length).toBe(emissionCountAfterRevocation);
89
+ } finally {
90
+ stopCapture();
91
+ u1Projects.destroy();
92
+ }
93
+ });
94
+ function captureProjectEmissions(view, emissions) {
95
+ return view.addListener(data => {
96
+ emissions.push(normalizeProjects(data));
97
+ });
98
+ }
99
+ function normalizeProjects(projects) {
100
+ return clone(projects).map(project => ({
101
+ ...project,
102
+ members: [...project.members].sort((a, b) => a.id.localeCompare(b.id))
103
+ })).sort((a, b) => a.id.localeCompare(b.id));
104
+ }
105
+ function clone(value) {
106
+ return JSON.parse(JSON.stringify(value));
107
+ }
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ var import_vitest = require("vitest");
4
+ var import_testHarness = require("./testHarness.native.js");
5
+ var harness;
6
+ (0, import_vitest.afterEach)(async function () {
7
+ await (harness === null || harness === void 0 ? void 0 : harness.close());
8
+ harness = void 0;
9
+ });
10
+ (0, import_vitest.test)("related project members appear, update, and vanish with visibility", async function () {
11
+ harness = await (0, import_testHarness.startZeroHttpHarness)({
12
+ seed: {
13
+ user: [{
14
+ id: "u1",
15
+ name: "ada"
16
+ }, {
17
+ id: "u2",
18
+ name: "ben"
19
+ }],
20
+ project: [],
21
+ member: []
22
+ }
23
+ });
24
+ var u1 = harness.createZero("u1");
25
+ var u2 = harness.createZero("u2");
26
+ var u1Projects = u1.query.project.related("members").materialize();
27
+ var emissions = [];
28
+ var stopCapture = captureProjectEmissions(u1Projects, emissions);
29
+ try {
30
+ await (0, import_vitest.expect)((0, import_testHarness.waitForComplete)(u1Projects)).resolves.toEqual([]);
31
+ var created = u2.mutate.project.create({
32
+ id: "p-shared",
33
+ ownerId: "u2",
34
+ name: "shared"
35
+ });
36
+ await created.client;
37
+ await created.server;
38
+ var added = u2.mutate.member.add({
39
+ id: "m-u1-shared",
40
+ projectId: "p-shared",
41
+ userId: "u1"
42
+ });
43
+ await added.client;
44
+ await added.server;
45
+ await harness.transport.pull();
46
+ await (0, import_testHarness.eventually)(function () {
47
+ (0, import_vitest.expect)(normalizeProjects(u1Projects.data)).toEqual([{
48
+ id: "p-shared",
49
+ ownerId: "u2",
50
+ name: "shared",
51
+ members: [{
52
+ id: "m-u1-shared",
53
+ projectId: "p-shared",
54
+ userId: "u1"
55
+ }]
56
+ }]);
57
+ });
58
+ var renamed = u2.mutate.project.rename({
59
+ id: "p-shared",
60
+ name: "renamed shared"
61
+ });
62
+ await renamed.client;
63
+ await renamed.server;
64
+ await harness.transport.pull();
65
+ await (0, import_testHarness.eventually)(function () {
66
+ (0, import_vitest.expect)(normalizeProjects(u1Projects.data)).toEqual([{
67
+ id: "p-shared",
68
+ ownerId: "u2",
69
+ name: "renamed shared",
70
+ members: [{
71
+ id: "m-u1-shared",
72
+ projectId: "p-shared",
73
+ userId: "u1"
74
+ }]
75
+ }]);
76
+ });
77
+ var removed = u2.mutate.member.remove({
78
+ id: "m-u1-shared"
79
+ });
80
+ await removed.client;
81
+ await removed.server;
82
+ await harness.transport.pull();
83
+ await (0, import_testHarness.eventually)(function () {
84
+ var _emissions_at;
85
+ (0, import_vitest.expect)(normalizeProjects(u1Projects.data)).toEqual([]);
86
+ (0, import_vitest.expect)((_emissions_at = emissions.at(-1)) === null || _emissions_at === void 0 ? void 0 : _emissions_at.some(function (project) {
87
+ return project.id === "p-shared";
88
+ })).toBe(false);
89
+ });
90
+ var emissionCountAfterRevocation = emissions.length;
91
+ await harness.transport.pull();
92
+ await (0, import_testHarness.sleep)(50);
93
+ (0, import_vitest.expect)(emissions.length).toBe(emissionCountAfterRevocation);
94
+ } finally {
95
+ stopCapture();
96
+ u1Projects.destroy();
97
+ }
98
+ });
99
+ function captureProjectEmissions(view, emissions) {
100
+ return view.addListener(function (data) {
101
+ emissions.push(normalizeProjects(data));
102
+ });
103
+ }
104
+ function normalizeProjects(projects) {
105
+ return clone(projects).map(function (project) {
106
+ return {
107
+ ...project,
108
+ members: [...project.members].sort(function (a, b) {
109
+ return a.id.localeCompare(b.id);
110
+ })
111
+ };
112
+ }).sort(function (a, b) {
113
+ return a.id.localeCompare(b.id);
114
+ });
115
+ }
116
+ function clone(value) {
117
+ return JSON.parse(JSON.stringify(value));
118
+ }
119
+ //# sourceMappingURL=relations.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["import_vitest","require","import_testHarness","harness","afterEach","close","test","startZeroHttpHarness","seed","user","id","name","project","member","u1","createZero","u2","u1Projects","query","related","materialize","emissions","stopCapture","captureProjectEmissions","expect","waitForComplete","resolves","toEqual","created","mutate","create","ownerId","client","server","added","add","projectId","userId","transport","pull","eventually","normalizeProjects","data","members","renamed","rename","removed","remove","_emissions_at","at","some","toBe"],"sources":["../../../src/httpPull/relations.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}