@party-stack/foundry-ontology 0.2.0 → 0.3.1

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 (86) hide show
  1. package/lib/adapter/convertLoadSubsetOptions.d.ts +1 -0
  2. package/lib/adapter/convertLoadSubsetOptions.d.ts.map +1 -1
  3. package/lib/adapter/convertLoadSubsetOptions.js +43 -25
  4. package/lib/adapter/convertLoadSubsetOptions.js.map +1 -1
  5. package/lib/adapter/convertLoadSubsetOptions.test.d.ts +2 -0
  6. package/lib/adapter/convertLoadSubsetOptions.test.d.ts.map +1 -0
  7. package/lib/adapter/convertLoadSubsetOptions.test.js +18 -0
  8. package/lib/adapter/convertLoadSubsetOptions.test.js.map +1 -0
  9. package/lib/adapter/createFoundryOntologyAdapter.d.ts +2 -2
  10. package/lib/adapter/createFoundryOntologyAdapter.d.ts.map +1 -1
  11. package/lib/adapter/createFoundryOntologyAdapter.js +81 -51
  12. package/lib/adapter/createFoundryOntologyAdapter.js.map +1 -1
  13. package/lib/adapter/foundryCodec.d.ts +2 -1
  14. package/lib/adapter/foundryCodec.d.ts.map +1 -1
  15. package/lib/adapter/foundryCodec.js +16 -1
  16. package/lib/adapter/foundryCodec.js.map +1 -1
  17. package/lib/adapter/foundryCodec.test.d.ts +2 -0
  18. package/lib/adapter/foundryCodec.test.d.ts.map +1 -0
  19. package/lib/adapter/foundryCodec.test.js +80 -0
  20. package/lib/adapter/foundryCodec.test.js.map +1 -0
  21. package/lib/adapter/objectCollectionOptions.d.ts +2 -8
  22. package/lib/adapter/objectCollectionOptions.d.ts.map +1 -1
  23. package/lib/adapter/objectCollectionOptions.js +116 -101
  24. package/lib/adapter/objectCollectionOptions.js.map +1 -1
  25. package/lib/adapter/objectCollectionOptions.test.js +146 -8
  26. package/lib/adapter/objectCollectionOptions.test.js.map +1 -1
  27. package/lib/adapter/sync.d.ts +14 -0
  28. package/lib/adapter/sync.d.ts.map +1 -0
  29. package/lib/adapter/sync.js +238 -0
  30. package/lib/adapter/sync.js.map +1 -0
  31. package/lib/adapter/sync.test.d.ts +2 -0
  32. package/lib/adapter/sync.test.d.ts.map +1 -0
  33. package/lib/adapter/sync.test.js +245 -0
  34. package/lib/adapter/sync.test.js.map +1 -0
  35. package/lib/config/index.d.ts +1 -1
  36. package/lib/config/index.d.ts.map +1 -1
  37. package/lib/config/index.js +1 -1
  38. package/lib/config/index.js.map +1 -1
  39. package/lib/index.d.ts +1 -1
  40. package/lib/index.d.ts.map +1 -1
  41. package/lib/index.js +1 -1
  42. package/lib/index.js.map +1 -1
  43. package/lib/meta/actionTypeCollectionOptions.d.ts +1 -1
  44. package/lib/meta/actionTypeCollectionOptions.d.ts.map +1 -1
  45. package/lib/meta/actionTypeCollectionOptions.js.map +1 -1
  46. package/lib/meta/convertMetaObjectType.js +5 -0
  47. package/lib/meta/convertMetaObjectType.js.map +1 -1
  48. package/lib/meta/convertMetaTypeDef.d.ts.map +1 -1
  49. package/lib/meta/convertMetaTypeDef.js +8 -1
  50. package/lib/meta/convertMetaTypeDef.js.map +1 -1
  51. package/lib/meta/createFoundryMetaOntologyAdapter.d.ts +1 -1
  52. package/lib/meta/createFoundryMetaOntologyAdapter.d.ts.map +1 -1
  53. package/lib/meta/createFoundryMetaOntologyAdapter.js.map +1 -1
  54. package/lib/meta/entityCollectionOptions.d.ts +1 -1
  55. package/lib/meta/entityCollectionOptions.d.ts.map +1 -1
  56. package/lib/meta/entityCollectionOptions.js.map +1 -1
  57. package/lib/users/userCollectionOptions.d.ts +1 -1
  58. package/lib/users/userCollectionOptions.d.ts.map +1 -1
  59. package/lib/users/userCollectionOptions.js.map +1 -1
  60. package/lib/utils/AsyncIterable.d.ts +1 -1
  61. package/lib/utils/AsyncIterable.js +2 -2
  62. package/package.json +12 -14
  63. package/lib/adapter/sync/ObjectSetSubscription.d.ts +0 -35
  64. package/lib/adapter/sync/ObjectSetSubscription.d.ts.map +0 -1
  65. package/lib/adapter/sync/ObjectSetSubscription.js +0 -2
  66. package/lib/adapter/sync/ObjectSetSubscription.js.map +0 -1
  67. package/lib/adapter/sync/ObjectSetWatcherManager.d.ts +0 -11
  68. package/lib/adapter/sync/ObjectSetWatcherManager.d.ts.map +0 -1
  69. package/lib/adapter/sync/ObjectSetWatcherManager.js +0 -86
  70. package/lib/adapter/sync/ObjectSetWatcherManager.js.map +0 -1
  71. package/lib/adapter/sync/effection-utils/useValueSignal.d.ts +0 -4
  72. package/lib/adapter/sync/effection-utils/useValueSignal.d.ts.map +0 -1
  73. package/lib/adapter/sync/effection-utils/useValueSignal.js +0 -31
  74. package/lib/adapter/sync/effection-utils/useValueSignal.js.map +0 -1
  75. package/lib/adapter/sync/useObjectSetWatcherConnection.d.ts +0 -10
  76. package/lib/adapter/sync/useObjectSetWatcherConnection.d.ts.map +0 -1
  77. package/lib/adapter/sync/useObjectSetWatcherConnection.js +0 -184
  78. package/lib/adapter/sync/useObjectSetWatcherConnection.js.map +0 -1
  79. package/lib/adapter/sync/useObjectSetWatcherSession.d.ts +0 -9
  80. package/lib/adapter/sync/useObjectSetWatcherSession.d.ts.map +0 -1
  81. package/lib/adapter/sync/useObjectSetWatcherSession.js +0 -69
  82. package/lib/adapter/sync/useObjectSetWatcherSession.js.map +0 -1
  83. package/lib/utils/client.d.ts +0 -11
  84. package/lib/utils/client.d.ts.map +0 -1
  85. package/lib/utils/client.js +0 -22
  86. package/lib/utils/client.js.map +0 -1
@@ -1,13 +1,22 @@
1
1
  import { OntologyObjectsV2, ObjectTypesV2, } from "@osdk/foundry.ontologies";
2
+ import { getObjectSetWatcherManager } from "@party-stack/foundry-object-set-watcher";
2
3
  import { BasicIndex, DeduplicatedLoadSubset, } from "@tanstack/db";
3
4
  import { Store } from "@tanstack/store";
4
5
  import * as AsyncIterable from "../utils/AsyncIterable.js";
5
- import { convertLoadSubsetFilter, convertLoadSubsetOrderBy } from "./convertLoadSubsetOptions.js";
6
- import { getObjectSetWatcherManager } from "./sync/ObjectSetWatcherManager.js";
7
- // ---------------------------------------------------------------------------
8
- // Sync tracking types
9
- // ---------------------------------------------------------------------------
6
+ import { convertLoadSubsetFilter, convertLoadSubsetOrderBy, isAlwaysFalseFilter, } from "./convertLoadSubsetOptions.js";
10
7
  const COLLECTION_SYNC_TIMEOUT_MS = 5_000;
8
+ class TimeoutWaitingForOperationIdError extends Error {
9
+ constructor(operationId, objectType) {
10
+ super(`Timed out waiting for Foundry operation ${operationId} to sync for ${objectType}.`);
11
+ this.name = "TimeoutWaitingForOperationIdError";
12
+ }
13
+ }
14
+ class ObjectCollectionSyncAbortedError extends Error {
15
+ constructor(objectType) {
16
+ super(`Foundry sync for ${objectType} stopped before the operation was observed.`);
17
+ this.name = "ObjectCollectionSyncAbortedError";
18
+ }
19
+ }
11
20
  // ---------------------------------------------------------------------------
12
21
  // Edit history helpers
13
22
  // ---------------------------------------------------------------------------
@@ -83,6 +92,9 @@ function isWrappedPrimitivePropertyValue(value) {
83
92
  "timestampValue",
84
93
  ].includes(value.type);
85
94
  }
95
+ function isAttachmentPropertyValue(value) {
96
+ return isPlainObject(value) && value.type === "attachment" && typeof value.attachment === "string";
97
+ }
86
98
  function normalizeEditPropertyValue(value) {
87
99
  if (isNullPropertyValue(value))
88
100
  return undefined;
@@ -91,6 +103,8 @@ function normalizeEditPropertyValue(value) {
91
103
  return geoPoint;
92
104
  if (isWrappedPrimitivePropertyValue(value))
93
105
  return value.value;
106
+ if (isAttachmentPropertyValue(value))
107
+ return { rid: value.attachment };
94
108
  if (Array.isArray(value))
95
109
  return value.map(normalizeEditPropertyValue);
96
110
  if (isPlainObject(value)) {
@@ -102,10 +116,19 @@ function normalizeEditPropertyValue(value) {
102
116
  // Foundry object fetching
103
117
  // ---------------------------------------------------------------------------
104
118
  async function fetchFoundryObjects(client, objectType, opts, decodeObject = (object) => object) {
105
- const where = convertLoadSubsetFilter(opts.where);
106
- if (where?.type === "in" && where.value.length === 0) {
119
+ let where = convertLoadSubsetFilter(opts.where);
120
+ if (isAlwaysFalseFilter(where) || (where?.type === "in" && where.value.length === 0)) {
107
121
  return [];
108
122
  }
123
+ if (opts.cursor?.whereFrom) {
124
+ const cursorWhere = convertLoadSubsetFilter(opts.cursor.whereFrom);
125
+ if (isAlwaysFalseFilter(cursorWhere)) {
126
+ return [];
127
+ }
128
+ if (cursorWhere) {
129
+ where = where ? { type: "and", value: [where, cursorWhere] } : cursorWhere;
130
+ }
131
+ }
109
132
  const results = await AsyncIterable.toArray(AsyncIterable.fromPagination((pageSize, pageToken) => OntologyObjectsV2.search(client, client.ontologyRid, objectType, {
110
133
  snapshot: true,
111
134
  where,
@@ -118,68 +141,65 @@ async function fetchFoundryObjects(client, objectType, opts, decodeObject = (obj
118
141
  }), (page) => page.nextPageToken, (page) => page.data, 10_000, opts.limit));
119
142
  return results.map(decodeObject);
120
143
  }
121
- // ---------------------------------------------------------------------------
122
- // Sync config + utils (private)
123
- //
124
- // Follows Electric's pattern: the Store is created in the factory closure and
125
- // shared by both the sync function and the utils via lexical scope.
126
- // No WeakMap, no lazy binding — just closures, like electricCollectionOptions.
127
- // ---------------------------------------------------------------------------
128
144
  function createSyncConfig(client, objectType, primaryKeyProperty, decodeObject = (object) => object) {
129
- const syncStore = new Store(new Map());
130
- const recordSyncEvent = (key, event) => {
131
- syncStore.setState((prev) => {
132
- const next = new Map(prev);
133
- const current = next.get(key);
134
- next.set(key, { version: (current?.version ?? 0) + 1, event });
135
- return next;
136
- });
137
- };
138
- const getObjectSyncVersion = (key) => syncStore.state.get(key)?.version ?? 0;
139
- const awaitObjectSync = (key, opts) => {
140
- const isSatisfied = () => {
141
- const entry = syncStore.state.get(key);
142
- return entry !== undefined && entry.version > opts.afterVersion && entry.event === opts.event;
143
- };
144
- if (isSatisfied()) {
145
- return Promise.resolve();
145
+ const seenOperationIds = new Store(new Set());
146
+ const syncDisposed = new Store(false);
147
+ let requestEditHistoryCatchUp;
148
+ const awaitOperationId = async (operationId, timeout = COLLECTION_SYNC_TIMEOUT_MS) => {
149
+ if (typeof operationId !== "string" || operationId.length === 0) {
150
+ throw new Error("Foundry operationId must be a non-empty string.");
146
151
  }
147
- return new Promise((resolve) => {
148
- const timeout = opts.timeout ?? COLLECTION_SYNC_TIMEOUT_MS;
152
+ if (seenOperationIds.state.has(operationId)) {
153
+ return true;
154
+ }
155
+ if (syncDisposed.state) {
156
+ throw new ObjectCollectionSyncAbortedError(objectType);
157
+ }
158
+ requestEditHistoryCatchUp?.();
159
+ return new Promise((resolve, reject) => {
160
+ const cleanup = () => {
161
+ clearTimeout(timeoutId);
162
+ seenOperationIdsSubscription.unsubscribe();
163
+ disposedSubscription.unsubscribe();
164
+ };
149
165
  const timeoutId = setTimeout(() => {
150
- subscription.unsubscribe();
151
- resolve();
166
+ cleanup();
167
+ reject(new TimeoutWaitingForOperationIdError(operationId, objectType));
152
168
  }, timeout);
153
- const subscription = syncStore.subscribe(() => {
154
- if (isSatisfied()) {
155
- clearTimeout(timeoutId);
156
- subscription.unsubscribe();
157
- resolve();
169
+ const seenOperationIdsSubscription = seenOperationIds.subscribe(() => {
170
+ if (seenOperationIds.state.has(operationId)) {
171
+ cleanup();
172
+ resolve(true);
173
+ }
174
+ });
175
+ const disposedSubscription = syncDisposed.subscribe(() => {
176
+ if (syncDisposed.state) {
177
+ cleanup();
178
+ reject(new ObjectCollectionSyncAbortedError(objectType));
158
179
  }
159
180
  });
160
181
  });
161
182
  };
162
- const utils = { getObjectSyncVersion, awaitObjectSync };
183
+ const utils = { awaitOperationId };
163
184
  const sync = {
164
185
  sync: (params) => {
165
186
  const { begin, write, commit, markReady } = params;
166
- const syncedKeys = new Set();
187
+ syncDisposed.setState(() => false);
188
+ const syncedKeys = new Set(params.collection.keys());
167
189
  let disposed = false;
168
190
  const editHistoryCursor = createEditHistoryCursor();
169
191
  let catchUpRequested = false;
170
192
  let catchUpTask;
171
- let scheduledCatchUpRetry;
172
193
  const getObjectKey = (object) => object[primaryKeyProperty];
173
194
  const upsertObject = (object) => {
174
195
  const key = getObjectKey(object);
175
196
  write({ type: syncedKeys.has(key) ? "update" : "insert", value: object });
176
197
  syncedKeys.add(key);
177
198
  };
178
- const deleteObject = (object) => {
179
- const key = getObjectKey(object);
199
+ const deleteObjectByKey = (key) => {
180
200
  if (!syncedKeys.has(key))
181
201
  return false;
182
- write({ type: "delete", value: object });
202
+ write({ type: "delete", key });
183
203
  syncedKeys.delete(key);
184
204
  return true;
185
205
  };
@@ -197,7 +217,8 @@ function createSyncConfig(client, objectType, primaryKeyProperty, decodeObject =
197
217
  [primaryKeyProperty]: primaryKey,
198
218
  });
199
219
  const catchUpFromEditHistory = async () => {
200
- const pendingUpserts = new Map();
220
+ const pendingMutations = new Map();
221
+ const newOperationIds = new Set();
201
222
  for await (const entry of AsyncIterable.fromPagination((pageSize, pageToken) => fetchEditHistoryPage({
202
223
  filters: {
203
224
  type: "timestampFilter",
@@ -213,32 +234,54 @@ function createSyncConfig(client, objectType, primaryKeyProperty, decodeObject =
213
234
  if (!shouldProcessEditHistoryEntry(editHistoryCursor, entry))
214
235
  continue;
215
236
  advanceEditHistoryCursor(editHistoryCursor, entry);
237
+ newOperationIds.add(entry.operationId);
216
238
  const primaryKey = getPrimaryKeyValue(entry.objectPrimaryKey);
217
239
  switch (entry.edit.type) {
218
240
  case "createEdit":
219
241
  case "modifyEdit":
220
- pendingUpserts.set(primaryKey, decodeEditProperties(entry.edit.properties, primaryKey));
242
+ pendingMutations.set(primaryKey, {
243
+ type: "upsert",
244
+ object: decodeEditProperties(entry.edit.properties, primaryKey),
245
+ });
221
246
  break;
222
247
  case "deleteEdit":
248
+ pendingMutations.set(primaryKey, { type: "delete" });
223
249
  break;
224
250
  }
225
251
  }
226
- if (disposed || pendingUpserts.size === 0)
252
+ if (disposed)
227
253
  return;
228
- begin({ immediate: true });
229
- for (const object of pendingUpserts.values()) {
230
- upsertObject(object);
254
+ let transactionStarted = false;
255
+ for (const [primaryKey, mutation] of pendingMutations) {
256
+ if (mutation.type === "delete") {
257
+ if (!syncedKeys.has(primaryKey))
258
+ continue;
259
+ }
260
+ if (!transactionStarted) {
261
+ begin({ immediate: true });
262
+ transactionStarted = true;
263
+ }
264
+ if (mutation.type === "delete") {
265
+ deleteObjectByKey(primaryKey);
266
+ }
267
+ else {
268
+ upsertObject(mutation.object);
269
+ }
231
270
  }
232
- commit();
233
- for (const key of pendingUpserts.keys()) {
234
- recordSyncEvent(key, "upsert");
271
+ if (transactionStarted) {
272
+ commit();
235
273
  }
236
- };
237
- const requestEditHistoryCatchUp = () => {
238
- if (scheduledCatchUpRetry) {
239
- clearTimeout(scheduledCatchUpRetry);
240
- scheduledCatchUpRetry = undefined;
274
+ if (newOperationIds.size > 0) {
275
+ seenOperationIds.setState((current) => {
276
+ const next = new Set(current);
277
+ for (const operationId of newOperationIds) {
278
+ next.add(operationId);
279
+ }
280
+ return next;
281
+ });
241
282
  }
283
+ };
284
+ requestEditHistoryCatchUp = () => {
242
285
  catchUpRequested = true;
243
286
  if (catchUpTask)
244
287
  return;
@@ -253,8 +296,9 @@ function createSyncConfig(client, objectType, primaryKeyProperty, decodeObject =
253
296
  })
254
297
  .finally(() => {
255
298
  catchUpTask = undefined;
256
- if (catchUpRequested && !disposed)
257
- requestEditHistoryCatchUp();
299
+ if (catchUpRequested && !disposed) {
300
+ requestEditHistoryCatchUp?.();
301
+ }
258
302
  });
259
303
  };
260
304
  const loadSubset = async (opts) => {
@@ -265,9 +309,6 @@ function createSyncConfig(client, objectType, primaryKeyProperty, decodeObject =
265
309
  upsertObject(object);
266
310
  }
267
311
  commit();
268
- for (const object of objects) {
269
- recordSyncEvent(getObjectKey(object), "upsert");
270
- }
271
312
  }
272
313
  };
273
314
  const loadSubsetDedupe = new DeduplicatedLoadSubset({ loadSubset });
@@ -275,60 +316,34 @@ function createSyncConfig(client, objectType, primaryKeyProperty, decodeObject =
275
316
  const unsubscribe = objectSetWatcherManager.subscribe({ type: "base", objectType }, (message) => {
276
317
  switch (message.type) {
277
318
  case "change": {
278
- let shouldCatchUp = false;
279
- const removedObjects = [];
280
- for (const update of message.updates) {
281
- if (update.type === "object") {
282
- switch (update.state) {
283
- case "ADDED_OR_UPDATED":
284
- shouldCatchUp = true;
285
- break;
286
- case "REMOVED":
287
- removedObjects.push(decodeObject(update.object));
288
- break;
289
- }
290
- }
291
- }
292
- if (removedObjects.length > 0) {
293
- const deletedKeys = [];
294
- begin({ immediate: true });
295
- for (const object of removedObjects) {
296
- if (deleteObject(object)) {
297
- deletedKeys.push(getObjectKey(object));
298
- }
299
- }
300
- commit();
301
- for (const key of deletedKeys) {
302
- recordSyncEvent(key, "delete");
303
- }
304
- }
305
- if (shouldCatchUp) {
306
- requestEditHistoryCatchUp();
307
- }
319
+ requestEditHistoryCatchUp?.();
308
320
  break;
309
321
  }
310
322
  case "refresh": {
311
- loadSubsetDedupe.reset();
312
- requestEditHistoryCatchUp();
323
+ requestEditHistoryCatchUp?.();
313
324
  break;
314
325
  }
315
326
  case "state": {
316
327
  if (message.status === "open") {
317
- requestEditHistoryCatchUp();
328
+ requestEditHistoryCatchUp?.();
318
329
  }
319
330
  break;
320
331
  }
321
332
  }
322
333
  });
334
+ // start task here, cleanup can stop it
335
+ // in that task:
336
+ // - spawn object set subscription, which sends messages to catch up
337
+ // - actions sends messages to catch up
323
338
  markReady();
324
339
  return {
325
340
  loadSubset: loadSubsetDedupe.loadSubset,
326
341
  cleanup: () => {
327
342
  disposed = true;
328
- if (scheduledCatchUpRetry) {
329
- clearTimeout(scheduledCatchUpRetry);
330
- }
343
+ requestEditHistoryCatchUp = undefined;
344
+ syncDisposed.setState(() => true);
331
345
  unsubscribe();
346
+ loadSubsetDedupe.reset();
332
347
  },
333
348
  };
334
349
  },
@@ -1 +1 @@
1
- {"version":3,"file":"objectCollectionOptions.js","sourceRoot":"","sources":["../../src/adapter/objectCollectionOptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"objectCollectionOptions.js","sourceRoot":"","sources":["../../src/adapter/objectCollectionOptions.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { o } from "@party-stack/ontology";
1
2
  import { beforeEach, describe, expect, it, vi } from "vitest";
2
3
  const mockState = vi.hoisted(() => ({
3
4
  getEditsHistory: vi.fn(),
@@ -13,7 +14,7 @@ vi.mock("@osdk/foundry.ontologies", () => ({
13
14
  getEditsHistory: mockState.getEditsHistory,
14
15
  },
15
16
  }));
16
- vi.mock("./sync/ObjectSetWatcherManager.js", () => ({
17
+ vi.mock("@party-stack/foundry-object-set-watcher", () => ({
17
18
  getObjectSetWatcherManager: () => ({
18
19
  subscribe: (_objectSet, callback) => {
19
20
  mockState.subscribeCallback = callback;
@@ -23,11 +24,12 @@ vi.mock("./sync/ObjectSetWatcherManager.js", () => ({
23
24
  },
24
25
  }),
25
26
  }));
27
+ import { createFoundryCodec } from "./foundryCodec.js";
26
28
  import { objectCollectionOptions } from "./objectCollectionOptions.js";
27
- function createSyncHarness(initialObjects = []) {
29
+ function createSyncHarness(initialObjects = [], opts = {}) {
28
30
  const syncedData = new Map(initialObjects.map((object) => [object.employeeId, object]));
29
31
  const writes = [];
30
- const { sync: syncConfig } = objectCollectionOptions({
32
+ const { sync: syncConfig, utils } = objectCollectionOptions({
31
33
  client: {
32
34
  baseUrl: "https://example.com",
33
35
  fetch: vi.fn(),
@@ -36,23 +38,30 @@ function createSyncHarness(initialObjects = []) {
36
38
  },
37
39
  objectType: "Employee",
38
40
  primaryKeyProperty: "employeeId",
41
+ decodeObject: opts.decodeObject,
39
42
  });
40
43
  const handle = syncConfig.sync({
41
44
  begin: vi.fn(),
42
45
  collection: {
46
+ *keys() {
47
+ yield* syncedData.keys();
48
+ },
43
49
  syncedData,
44
50
  },
45
51
  commit: vi.fn(),
46
52
  markReady: vi.fn(),
47
53
  truncate: vi.fn(),
48
54
  write: (mutation) => {
49
- const value = mutation.value;
50
- const key = value.employeeId;
55
+ const key = mutation.type === "delete"
56
+ ? mutation.key
57
+ : mutation.value
58
+ .employeeId;
51
59
  writes.push({ type: mutation.type, primaryKey: key });
52
60
  if (mutation.type === "delete") {
53
61
  syncedData.delete(key);
54
62
  }
55
63
  else {
64
+ const value = mutation.value;
56
65
  syncedData.set(key, value);
57
66
  }
58
67
  },
@@ -60,6 +69,7 @@ function createSyncHarness(initialObjects = []) {
60
69
  return {
61
70
  cleanup: handle.cleanup,
62
71
  syncedData,
72
+ utils,
63
73
  writes,
64
74
  };
65
75
  }
@@ -102,7 +112,7 @@ describe("objectCollectionOptions", () => {
102
112
  expect(mockState.getObject).not.toHaveBeenCalled();
103
113
  harness.cleanup();
104
114
  });
105
- it("skips delete edits in history (deletes come from watcher)", async () => {
115
+ it("applies delete edits from history", async () => {
106
116
  mockState.getEditsHistory.mockResolvedValue({
107
117
  data: [
108
118
  {
@@ -123,12 +133,12 @@ describe("objectCollectionOptions", () => {
123
133
  mockState.subscribeCallback?.({ type: "state", status: "open" });
124
134
  await vi.waitFor(() => {
125
135
  expect(mockState.getEditsHistory).toHaveBeenCalledTimes(1);
136
+ expect(harness.syncedData.has(2)).toBe(false);
126
137
  });
127
- expect(harness.syncedData.has(2)).toBe(true);
128
138
  expect(mockState.getObject).not.toHaveBeenCalled();
129
139
  harness.cleanup();
130
140
  });
131
- it("applies watcher REMOVED events as direct deletes", async () => {
141
+ it("treats watcher REMOVED events as a history catch-up signal", async () => {
132
142
  mockState.getEditsHistory.mockResolvedValue({
133
143
  data: [
134
144
  {
@@ -148,6 +158,41 @@ describe("objectCollectionOptions", () => {
148
158
  ],
149
159
  nextPageToken: undefined,
150
160
  });
161
+ mockState.getEditsHistory.mockResolvedValueOnce({
162
+ data: [
163
+ {
164
+ objectPrimaryKey: { employeeId: 5 },
165
+ operationId: "op-5",
166
+ actionTypeRid: "action-1",
167
+ userId: "user-1",
168
+ timestamp: "2099-03-12T12:00:00.000Z",
169
+ edit: {
170
+ type: "createEdit",
171
+ properties: {
172
+ employeeId: 5,
173
+ name: "Employee Five",
174
+ },
175
+ },
176
+ },
177
+ ],
178
+ nextPageToken: undefined,
179
+ });
180
+ mockState.getEditsHistory.mockResolvedValueOnce({
181
+ data: [
182
+ {
183
+ objectPrimaryKey: { employeeId: 5 },
184
+ operationId: "op-6",
185
+ actionTypeRid: "action-1",
186
+ userId: "user-1",
187
+ timestamp: "2099-03-12T12:01:00.000Z",
188
+ edit: {
189
+ type: "deleteEdit",
190
+ previousProperties: {},
191
+ },
192
+ },
193
+ ],
194
+ nextPageToken: undefined,
195
+ });
151
196
  const harness = createSyncHarness();
152
197
  mockState.subscribeCallback?.({ type: "state", status: "open" });
153
198
  await vi.waitFor(() => {
@@ -164,6 +209,7 @@ describe("objectCollectionOptions", () => {
164
209
  ],
165
210
  });
166
211
  await vi.waitFor(() => {
212
+ expect(mockState.getEditsHistory).toHaveBeenCalledTimes(2);
167
213
  expect(harness.syncedData.has(5)).toBe(false);
168
214
  expect(harness.writes).toContainEqual({ type: "delete", primaryKey: 5 });
169
215
  });
@@ -287,6 +333,69 @@ describe("objectCollectionOptions", () => {
287
333
  expect(mockState.getObject).not.toHaveBeenCalled();
288
334
  harness.cleanup();
289
335
  });
336
+ it("decodes attachment property wrappers from edit history", async () => {
337
+ mockState.getEditsHistory.mockResolvedValue({
338
+ data: [
339
+ {
340
+ objectPrimaryKey: { employeeId: 7 },
341
+ operationId: "op-7",
342
+ actionTypeRid: "action-1",
343
+ userId: "user-1",
344
+ timestamp: "2099-03-12T12:00:00.000Z",
345
+ edit: {
346
+ type: "createEdit",
347
+ properties: {
348
+ employeeId: 7,
349
+ attachments: [
350
+ {
351
+ type: "attachment",
352
+ attachment: "ri.attachments.main.attachment.7",
353
+ },
354
+ ],
355
+ name: "Employee Seven",
356
+ },
357
+ },
358
+ },
359
+ ],
360
+ nextPageToken: undefined,
361
+ });
362
+ const codec = createFoundryCodec({
363
+ types: [],
364
+ objectTypes: [
365
+ {
366
+ name: "Employee",
367
+ displayName: "Employee",
368
+ pluralDisplayName: "Employees",
369
+ primaryKey: "employeeId",
370
+ properties: [
371
+ { name: "employeeId", displayName: "Employee ID", type: o.integer({}) },
372
+ { name: "name", displayName: "Name", type: o.string({}) },
373
+ {
374
+ name: "attachments",
375
+ displayName: "Attachments",
376
+ type: o.list({
377
+ elementType: o.attachment({ meta: { type: "attachment" } }),
378
+ }),
379
+ },
380
+ ],
381
+ },
382
+ ],
383
+ linkTypes: [],
384
+ actionTypes: [],
385
+ });
386
+ const harness = createSyncHarness([], {
387
+ decodeObject: (object) => codec.decodeObject("Employee", object),
388
+ });
389
+ mockState.subscribeCallback?.({ type: "state", status: "open" });
390
+ await vi.waitFor(() => {
391
+ expect(harness.syncedData.get(7)).toEqual({
392
+ employeeId: 7,
393
+ name: "Employee Seven",
394
+ attachments: [{ id: "ri.attachments.main.attachment.7" }],
395
+ });
396
+ });
397
+ harness.cleanup();
398
+ });
290
399
  it("decodes GeoPointPropertyValue strings from edit history", async () => {
291
400
  mockState.getEditsHistory.mockResolvedValue({
292
401
  data: [
@@ -408,5 +517,34 @@ describe("objectCollectionOptions", () => {
408
517
  });
409
518
  harness.cleanup();
410
519
  });
520
+ it("awaitOperationId resolves after the matching edit is observed", async () => {
521
+ mockState.getEditsHistory.mockResolvedValue({
522
+ data: [
523
+ {
524
+ objectPrimaryKey: { employeeId: 11 },
525
+ operationId: "op-11",
526
+ actionTypeRid: "action-1",
527
+ userId: "user-1",
528
+ timestamp: "2099-03-12T12:06:00.000Z",
529
+ edit: {
530
+ type: "createEdit",
531
+ properties: {
532
+ employeeId: 11,
533
+ name: "Operation Eleven",
534
+ },
535
+ },
536
+ },
537
+ ],
538
+ nextPageToken: undefined,
539
+ });
540
+ const harness = createSyncHarness();
541
+ await expect(harness.utils.awaitOperationId("op-11")).resolves.toBe(true);
542
+ expect(mockState.getEditsHistory).toHaveBeenCalledTimes(1);
543
+ expect(harness.syncedData.get(11)).toEqual({
544
+ employeeId: 11,
545
+ name: "Operation Eleven",
546
+ });
547
+ harness.cleanup();
548
+ });
411
549
  });
412
550
  //# sourceMappingURL=objectCollectionOptions.test.js.map