@party-stack/salesforce-ontology 0.4.0 → 0.4.2

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 (166) hide show
  1. package/README.md +22 -31
  2. package/lib/actionMetadata.d.ts +11 -9
  3. package/lib/actionMetadata.d.ts.map +1 -1
  4. package/lib/actionMetadata.js +19 -30
  5. package/lib/actionMetadata.js.map +1 -1
  6. package/lib/adapter/convertLoadSubsetOptions.d.ts +10 -8
  7. package/lib/adapter/convertLoadSubsetOptions.d.ts.map +1 -1
  8. package/lib/adapter/convertLoadSubsetOptions.js +110 -173
  9. package/lib/adapter/convertLoadSubsetOptions.js.map +1 -1
  10. package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts +14 -12
  11. package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts.map +1 -1
  12. package/lib/adapter/createSalesforceOntologyBackendAdapter.js +124 -191
  13. package/lib/adapter/createSalesforceOntologyBackendAdapter.js.map +1 -1
  14. package/lib/adapter/index.d.ts +5 -5
  15. package/lib/adapter/index.js +5 -5
  16. package/lib/adapter/objectCollectionOptions.d.ts +22 -22
  17. package/lib/adapter/objectCollectionOptions.d.ts.map +1 -1
  18. package/lib/adapter/objectCollectionOptions.js +198 -280
  19. package/lib/adapter/objectCollectionOptions.js.map +1 -1
  20. package/lib/adapter/salesforceCodec.d.ts +6 -4
  21. package/lib/adapter/salesforceCodec.d.ts.map +1 -1
  22. package/lib/adapter/salesforceCodec.js +126 -190
  23. package/lib/adapter/salesforceCodec.js.map +1 -1
  24. package/lib/config/index.d.ts +20 -18
  25. package/lib/config/index.d.ts.map +1 -1
  26. package/lib/config/index.js +148 -192
  27. package/lib/config/index.js.map +1 -1
  28. package/lib/connection.d.ts +35 -33
  29. package/lib/connection.d.ts.map +1 -1
  30. package/lib/connection.js +243 -299
  31. package/lib/connection.js.map +1 -1
  32. package/lib/crud.d.ts +5 -3
  33. package/lib/crud.d.ts.map +1 -1
  34. package/lib/crud.js +0 -1
  35. package/lib/index.d.ts +10 -5
  36. package/lib/index.js +10 -5
  37. package/lib/installation/createSalesforceBackendInstallation.d.ts +28 -26
  38. package/lib/installation/createSalesforceBackendInstallation.d.ts.map +1 -1
  39. package/lib/installation/createSalesforceBackendInstallation.js +75 -85
  40. package/lib/installation/createSalesforceBackendInstallation.js.map +1 -1
  41. package/lib/installation/index.d.ts +2 -2
  42. package/lib/installation/index.js +1 -2
  43. package/lib/meta/actionTypeCollectionOptions.d.ts +10 -8
  44. package/lib/meta/actionTypeCollectionOptions.d.ts.map +1 -1
  45. package/lib/meta/actionTypeCollectionOptions.js +105 -212
  46. package/lib/meta/actionTypeCollectionOptions.js.map +1 -1
  47. package/lib/meta/convertMetaActionType.d.ts +4 -2
  48. package/lib/meta/convertMetaActionType.d.ts.map +1 -1
  49. package/lib/meta/convertMetaActionType.js +32 -32
  50. package/lib/meta/convertMetaActionType.js.map +1 -1
  51. package/lib/meta/convertMetaLinkType.d.ts +4 -2
  52. package/lib/meta/convertMetaLinkType.d.ts.map +1 -1
  53. package/lib/meta/convertMetaLinkType.js +39 -45
  54. package/lib/meta/convertMetaLinkType.js.map +1 -1
  55. package/lib/meta/convertMetaLoadSubsetOptions.d.ts +12 -10
  56. package/lib/meta/convertMetaLoadSubsetOptions.d.ts.map +1 -1
  57. package/lib/meta/convertMetaLoadSubsetOptions.js +42 -58
  58. package/lib/meta/convertMetaLoadSubsetOptions.js.map +1 -1
  59. package/lib/meta/convertMetaObjectType.d.ts +4 -2
  60. package/lib/meta/convertMetaObjectType.d.ts.map +1 -1
  61. package/lib/meta/convertMetaObjectType.js +36 -40
  62. package/lib/meta/convertMetaObjectType.js.map +1 -1
  63. package/lib/meta/convertMetaQueryFunctionType.d.ts +4 -2
  64. package/lib/meta/convertMetaQueryFunctionType.d.ts.map +1 -1
  65. package/lib/meta/convertMetaQueryFunctionType.js +27 -25
  66. package/lib/meta/convertMetaQueryFunctionType.js.map +1 -1
  67. package/lib/meta/convertMetaTypeDef.d.ts +10 -8
  68. package/lib/meta/convertMetaTypeDef.d.ts.map +1 -1
  69. package/lib/meta/convertMetaTypeDef.js +196 -188
  70. package/lib/meta/convertMetaTypeDef.js.map +1 -1
  71. package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts +19 -17
  72. package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts.map +1 -1
  73. package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js +38 -40
  74. package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js.map +1 -1
  75. package/lib/meta/entityCollectionOptions.d.ts +10 -8
  76. package/lib/meta/entityCollectionOptions.d.ts.map +1 -1
  77. package/lib/meta/entityCollectionOptions.js +73 -82
  78. package/lib/meta/entityCollectionOptions.js.map +1 -1
  79. package/lib/meta/index.d.ts +7 -7
  80. package/lib/meta/index.js +7 -7
  81. package/lib/meta/queryFunctionTypeCollectionOptions.d.ts +7 -5
  82. package/lib/meta/queryFunctionTypeCollectionOptions.d.ts.map +1 -1
  83. package/lib/meta/queryFunctionTypeCollectionOptions.js +53 -91
  84. package/lib/meta/queryFunctionTypeCollectionOptions.js.map +1 -1
  85. package/lib/meta/synthesizeCrudActionTypes.d.ts +4 -2
  86. package/lib/meta/synthesizeCrudActionTypes.d.ts.map +1 -1
  87. package/lib/meta/synthesizeCrudActionTypes.js +77 -116
  88. package/lib/meta/synthesizeCrudActionTypes.js.map +1 -1
  89. package/lib/standardActions.d.ts +2 -0
  90. package/lib/standardActions.d.ts.map +1 -1
  91. package/lib/standardActions.js +22 -20
  92. package/lib/standardActions.js.map +1 -1
  93. package/lib/utils/AsyncIterable.d.ts +2 -0
  94. package/lib/utils/AsyncIterable.d.ts.map +1 -1
  95. package/lib/utils/AsyncIterable.js +20 -23
  96. package/lib/utils/AsyncIterable.js.map +1 -1
  97. package/lib/utils/ids.d.ts +2 -0
  98. package/lib/utils/ids.d.ts.map +1 -1
  99. package/lib/utils/ids.js +23 -19
  100. package/lib/utils/ids.js.map +1 -1
  101. package/package.json +18 -24
  102. package/lib/adapter/convertLoadSubsetOptions.test.d.ts +0 -2
  103. package/lib/adapter/convertLoadSubsetOptions.test.d.ts.map +0 -1
  104. package/lib/adapter/convertLoadSubsetOptions.test.js +0 -80
  105. package/lib/adapter/convertLoadSubsetOptions.test.js.map +0 -1
  106. package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts +0 -2
  107. package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts.map +0 -1
  108. package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js +0 -394
  109. package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js.map +0 -1
  110. package/lib/adapter/index.d.ts.map +0 -1
  111. package/lib/adapter/index.js.map +0 -1
  112. package/lib/adapter/objectCollectionOptions.test.d.ts +0 -2
  113. package/lib/adapter/objectCollectionOptions.test.d.ts.map +0 -1
  114. package/lib/adapter/objectCollectionOptions.test.js +0 -160
  115. package/lib/adapter/objectCollectionOptions.test.js.map +0 -1
  116. package/lib/adapter/salesforceCodec.test.d.ts +0 -2
  117. package/lib/adapter/salesforceCodec.test.d.ts.map +0 -1
  118. package/lib/adapter/salesforceCodec.test.js +0 -57
  119. package/lib/adapter/salesforceCodec.test.js.map +0 -1
  120. package/lib/config/index.test.d.ts +0 -2
  121. package/lib/config/index.test.d.ts.map +0 -1
  122. package/lib/config/index.test.js +0 -177
  123. package/lib/config/index.test.js.map +0 -1
  124. package/lib/connection.test.d.ts +0 -2
  125. package/lib/connection.test.d.ts.map +0 -1
  126. package/lib/connection.test.js +0 -189
  127. package/lib/connection.test.js.map +0 -1
  128. package/lib/crud.js.map +0 -1
  129. package/lib/index.d.ts.map +0 -1
  130. package/lib/index.js.map +0 -1
  131. package/lib/installation/createSalesforceBackendInstallation.test.d.ts +0 -2
  132. package/lib/installation/createSalesforceBackendInstallation.test.d.ts.map +0 -1
  133. package/lib/installation/createSalesforceBackendInstallation.test.js +0 -55
  134. package/lib/installation/createSalesforceBackendInstallation.test.js.map +0 -1
  135. package/lib/installation/index.d.ts.map +0 -1
  136. package/lib/installation/index.js.map +0 -1
  137. package/lib/meta/actionTypeCollectionOptions.test.d.ts +0 -2
  138. package/lib/meta/actionTypeCollectionOptions.test.d.ts.map +0 -1
  139. package/lib/meta/actionTypeCollectionOptions.test.js +0 -192
  140. package/lib/meta/actionTypeCollectionOptions.test.js.map +0 -1
  141. package/lib/meta/convertMetaActionType.test.d.ts +0 -2
  142. package/lib/meta/convertMetaActionType.test.d.ts.map +0 -1
  143. package/lib/meta/convertMetaActionType.test.js +0 -185
  144. package/lib/meta/convertMetaActionType.test.js.map +0 -1
  145. package/lib/meta/convertMetaObjectType.test.d.ts +0 -2
  146. package/lib/meta/convertMetaObjectType.test.d.ts.map +0 -1
  147. package/lib/meta/convertMetaObjectType.test.js +0 -187
  148. package/lib/meta/convertMetaObjectType.test.js.map +0 -1
  149. package/lib/meta/convertMetaQueryFunctionType.test.d.ts +0 -2
  150. package/lib/meta/convertMetaQueryFunctionType.test.d.ts.map +0 -1
  151. package/lib/meta/convertMetaQueryFunctionType.test.js +0 -58
  152. package/lib/meta/convertMetaQueryFunctionType.test.js.map +0 -1
  153. package/lib/meta/entityCollectionOptions.test.d.ts +0 -2
  154. package/lib/meta/entityCollectionOptions.test.d.ts.map +0 -1
  155. package/lib/meta/entityCollectionOptions.test.js +0 -120
  156. package/lib/meta/entityCollectionOptions.test.js.map +0 -1
  157. package/lib/meta/index.d.ts.map +0 -1
  158. package/lib/meta/index.js.map +0 -1
  159. package/lib/meta/queryFunctionTypeCollectionOptions.test.d.ts +0 -2
  160. package/lib/meta/queryFunctionTypeCollectionOptions.test.d.ts.map +0 -1
  161. package/lib/meta/queryFunctionTypeCollectionOptions.test.js +0 -71
  162. package/lib/meta/queryFunctionTypeCollectionOptions.test.js.map +0 -1
  163. package/lib/meta/synthesizeCrudActionTypes.test.d.ts +0 -2
  164. package/lib/meta/synthesizeCrudActionTypes.test.d.ts.map +0 -1
  165. package/lib/meta/synthesizeCrudActionTypes.test.js +0 -153
  166. package/lib/meta/synthesizeCrudActionTypes.test.js.map +0 -1
@@ -1,286 +1,204 @@
1
- import { BasicIndex, DeduplicatedLoadSubset, } from "@tanstack/db";
2
- import * as AsyncIterable from "../utils/AsyncIterable.js";
3
- import { buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, isAlwaysFalseFilter, serializeSoqlLiteral, } from "./convertLoadSubsetOptions.js";
1
+ import { fromPagination, toArray } from "../utils/AsyncIterable.js";
2
+ import { buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, isAlwaysFalseFilter, serializeSoqlLiteral } from "./convertLoadSubsetOptions.js";
3
+ import { BasicIndex, DeduplicatedLoadSubset } from "@tanstack/db";
4
+ //#region src/adapter/objectCollectionOptions.ts
4
5
  async function fetchSalesforceObjects(client, objectType, selectedProperties, opts, decodeObject = (object) => object) {
5
- const offset = Math.max(0, Math.trunc(opts.offset ?? 0));
6
- const limit = opts.limit === undefined ? undefined : Math.max(0, Math.trunc(opts.limit));
7
- if (limit === 0)
8
- return [];
9
- let where = convertLoadSubsetFilter(opts.where);
10
- if (isAlwaysFalseFilter(where)) {
11
- return [];
12
- }
13
- if (opts.cursor?.whereFrom) {
14
- const cursorWhere = convertLoadSubsetFilter(opts.cursor.whereFrom);
15
- if (isAlwaysFalseFilter(cursorWhere)) {
16
- return [];
17
- }
18
- if (cursorWhere?.clause) {
19
- where = where?.clause
20
- ? { clause: `(${where.clause} AND ${cursorWhere.clause})`, alwaysFalse: false }
21
- : cursorWhere;
22
- }
23
- }
24
- // Salesforce OFFSET max is 2000. Prefer locator pagination for deep reads and
25
- // only push OFFSET when the caller requested a small local window.
26
- const canPushOffset = offset > 0 && offset <= 2000 && (limit === undefined || offset + limit <= 2000);
27
- const orderBy = convertLoadSubsetOrderBy(opts.orderBy);
28
- const soql = buildSoqlQuery({
29
- objectType,
30
- selectedProperties,
31
- where,
32
- orderBy,
33
- limit: canPushOffset
34
- ? limit === undefined
35
- ? undefined
36
- : offset + limit
37
- : limit === undefined
38
- ? undefined
39
- : offset + limit,
40
- offset: canPushOffset ? offset : undefined,
41
- });
42
- const results = await AsyncIterable.toArray(AsyncIterable.fromPagination(async (_pageSize, pageToken) => {
43
- if (pageToken) {
44
- return client.queryMore(pageToken);
45
- }
46
- return client.query(soql);
47
- }, (page) => (page.done ? undefined : page.nextRecordsUrl), (page) => page.records, 2_000, canPushOffset
48
- ? limit === undefined
49
- ? undefined
50
- : limit
51
- : limit === undefined
52
- ? undefined
53
- : offset + limit));
54
- const sliced = canPushOffset
55
- ? results
56
- : results.slice(offset, limit === undefined ? undefined : offset + limit);
57
- return sliced.map(decodeObject);
6
+ const offset = Math.max(0, Math.trunc(opts.offset ?? 0));
7
+ const limit = opts.limit === void 0 ? void 0 : Math.max(0, Math.trunc(opts.limit));
8
+ if (limit === 0) return [];
9
+ let where = convertLoadSubsetFilter(opts.where);
10
+ if (isAlwaysFalseFilter(where)) return [];
11
+ if (opts.cursor?.whereFrom) {
12
+ const cursorWhere = convertLoadSubsetFilter(opts.cursor.whereFrom);
13
+ if (isAlwaysFalseFilter(cursorWhere)) return [];
14
+ if (cursorWhere?.clause) where = where?.clause ? {
15
+ clause: `(${where.clause} AND ${cursorWhere.clause})`,
16
+ alwaysFalse: false
17
+ } : cursorWhere;
18
+ }
19
+ const canPushOffset = offset > 0 && offset <= 2e3 && (limit === void 0 || offset + limit <= 2e3);
20
+ const orderBy = convertLoadSubsetOrderBy(opts.orderBy);
21
+ const soql = buildSoqlQuery({
22
+ objectType,
23
+ selectedProperties,
24
+ where,
25
+ orderBy,
26
+ limit: canPushOffset ? limit === void 0 ? void 0 : offset + limit : limit === void 0 ? void 0 : offset + limit,
27
+ offset: canPushOffset ? offset : void 0
28
+ });
29
+ const results = await toArray(fromPagination(async (_pageSize, pageToken) => {
30
+ if (pageToken) return client.queryMore(pageToken);
31
+ return client.query(soql);
32
+ }, (page) => page.done ? void 0 : page.nextRecordsUrl, (page) => page.records, 2e3, canPushOffset ? limit === void 0 ? void 0 : limit : limit === void 0 ? void 0 : offset + limit));
33
+ return (canPushOffset ? results : results.slice(offset, limit === void 0 ? void 0 : offset + limit)).map(decodeObject);
58
34
  }
59
35
  function createSyncConfig(client, objectType, primaryKeyProperty, selectedProperties, subscribeToChangeEvents, decodeObject = (object) => object) {
60
- let loadSubsetDedupe;
61
- let deleteByKey;
62
- let refreshByKey;
63
- let invalidate;
64
- const utils = {
65
- invalidate: () => {
66
- if (!invalidate) {
67
- throw new Error(`Salesforce ${objectType} collection is not ready.`);
68
- }
69
- return invalidate();
70
- },
71
- refreshByKey: (key) => {
72
- if (!refreshByKey) {
73
- throw new Error(`Salesforce ${objectType} collection is not ready.`);
74
- }
75
- return refreshByKey(key);
76
- },
77
- deleteByKey: (key) => {
78
- if (!deleteByKey) {
79
- throw new Error(`Salesforce ${objectType} collection is not ready.`);
80
- }
81
- return deleteByKey(key);
82
- },
83
- };
84
- const sync = {
85
- sync: (params) => {
86
- const { begin, write, commit, markError, markReady, } = params;
87
- const activeSubsets = new Set();
88
- const collectionMetadata = params.metadata?.collection;
89
- const replayMetadataKey = `salesforce.cdc.${objectType}.replayId`;
90
- const restoredReplayId = collectionMetadata?.get(replayMetadataKey);
91
- let disposed = false;
92
- let changeSubscription;
93
- let changeQueue = Promise.resolve();
94
- const upsertObject = (object) => {
95
- const key = object.Id;
96
- if (typeof key !== "string" && typeof key !== "number") {
97
- throw new Error(`Salesforce object for ${objectType} is missing a string/number Id primary key.`);
98
- }
99
- const exists = params.collection.has(key);
100
- const existing = exists ? params.collection.get(key) : undefined;
101
- write({
102
- type: exists ? "update" : "insert",
103
- value: existing ? { ...existing, ...object } : object,
104
- });
105
- };
106
- const loadSubset = async (opts, awaitApplication = true) => {
107
- if (!activeSubsets.has(opts)) {
108
- activeSubsets.add(opts);
109
- opts.signal?.addEventListener("abort", () => activeSubsets.delete(opts), { once: true });
110
- }
111
- const objects = await fetchSalesforceObjects(client, objectType, selectedProperties, opts, decodeObject);
112
- if (objects.length > 0) {
113
- begin();
114
- for (const object of objects) {
115
- upsertObject(object);
116
- }
117
- const applied = commit();
118
- if (applied instanceof Promise) {
119
- if (awaitApplication) {
120
- await applied;
121
- }
122
- else {
123
- void applied.catch((error) => {
124
- if (!disposed) {
125
- markError(error);
126
- }
127
- });
128
- }
129
- }
130
- }
131
- };
132
- loadSubsetDedupe =
133
- new DeduplicatedLoadSubset({
134
- loadSubset: (options) => loadSubset(options),
135
- });
136
- invalidate = async () => {
137
- loadSubsetDedupe?.reset();
138
- for (const subset of activeSubsets) {
139
- if (!subset.signal?.aborted) {
140
- await loadSubset(subset, false);
141
- }
142
- }
143
- };
144
- refreshByKey = async (key) => {
145
- const result = await client.query(buildSoqlQuery({
146
- objectType,
147
- selectedProperties,
148
- where: {
149
- clause: `${primaryKeyProperty} = ${serializeSoqlLiteral(key)}`,
150
- alwaysFalse: false,
151
- },
152
- limit: 1,
153
- }));
154
- const object = result.records[0];
155
- if (!object) {
156
- throw new Error(`Salesforce ${objectType} record "${key}" was not returned after a confirmed write.`);
157
- }
158
- begin();
159
- upsertObject(decodeObject(object));
160
- const applied = commit();
161
- if (applied instanceof Promise) {
162
- void applied.catch((error) => {
163
- if (!disposed) {
164
- markError(error);
165
- }
166
- });
167
- }
168
- loadSubsetDedupe?.reset();
169
- };
170
- deleteByKey = (key) => {
171
- begin();
172
- write({
173
- type: "delete",
174
- key,
175
- });
176
- const applied = commit();
177
- if (applied instanceof Promise) {
178
- void applied.catch((error) => {
179
- if (!disposed) {
180
- markError(error);
181
- }
182
- });
183
- }
184
- loadSubsetDedupe?.reset();
185
- return Promise.resolve();
186
- };
187
- markReady();
188
- if (subscribeToChangeEvents) {
189
- void subscribeToChangeEvents(objectType, (event) => {
190
- changeQueue = changeQueue
191
- .then(async () => {
192
- if (disposed)
193
- return;
194
- const header = event.payload
195
- .ChangeEventHeader;
196
- if (header.changeType ===
197
- "DELETE") {
198
- begin();
199
- for (const id of header.recordIds) {
200
- write({
201
- type: "delete",
202
- key: id,
203
- });
204
- }
205
- const replayId = event.event
206
- ?.replayId;
207
- if (replayId !==
208
- undefined) {
209
- collectionMetadata?.set(replayMetadataKey, replayId);
210
- }
211
- await commit();
212
- loadSubsetDedupe?.reset();
213
- return;
214
- }
215
- await invalidate?.();
216
- const replayId = event.event
217
- ?.replayId;
218
- if (replayId !==
219
- undefined &&
220
- collectionMetadata) {
221
- begin();
222
- collectionMetadata.set(replayMetadataKey, replayId);
223
- await commit();
224
- }
225
- })
226
- .catch((error) => {
227
- markError(error instanceof Error
228
- ? error
229
- : new Error(String(error)));
230
- });
231
- }, typeof restoredReplayId ===
232
- "number"
233
- ? {
234
- replayId: restoredReplayId,
235
- }
236
- : undefined).then((subscription) => {
237
- if (disposed) {
238
- subscription.unsubscribe();
239
- }
240
- else {
241
- changeSubscription =
242
- subscription;
243
- }
244
- }, (error) => {
245
- markError(error instanceof Error
246
- ? error
247
- : new Error(String(error)));
248
- });
249
- }
250
- return {
251
- loadSubset: loadSubsetDedupe.loadSubset,
252
- cleanup: () => {
253
- disposed = true;
254
- changeSubscription?.unsubscribe();
255
- void changeQueue.finally(() => {
256
- loadSubsetDedupe?.reset();
257
- loadSubsetDedupe = undefined;
258
- invalidate = undefined;
259
- refreshByKey = undefined;
260
- deleteByKey = undefined;
261
- });
262
- },
263
- };
264
- },
265
- };
266
- return { sync, utils };
36
+ let loadSubsetDedupe;
37
+ let deleteByKey;
38
+ let refreshByKey;
39
+ let invalidate;
40
+ return {
41
+ sync: { sync: (params) => {
42
+ const { begin, write, commit, markError, markReady } = params;
43
+ const activeSubsets = /* @__PURE__ */ new Set();
44
+ const collectionMetadata = params.metadata?.collection;
45
+ const replayMetadataKey = `salesforce.cdc.${objectType}.replayId`;
46
+ const restoredReplayId = collectionMetadata?.get(replayMetadataKey);
47
+ let disposed = false;
48
+ let changeSubscription;
49
+ let changeQueue = Promise.resolve();
50
+ const upsertObject = (object) => {
51
+ const key = object.Id;
52
+ if (typeof key !== "string" && typeof key !== "number") throw new Error(`Salesforce object for ${objectType} is missing a string/number Id primary key.`);
53
+ const exists = params.collection.has(key);
54
+ const existing = exists ? params.collection.get(key) : void 0;
55
+ write({
56
+ type: exists ? "update" : "insert",
57
+ value: existing ? {
58
+ ...existing,
59
+ ...object
60
+ } : object
61
+ });
62
+ };
63
+ const loadSubset = async (opts, awaitApplication = true) => {
64
+ if (!activeSubsets.has(opts)) {
65
+ activeSubsets.add(opts);
66
+ opts.signal?.addEventListener("abort", () => activeSubsets.delete(opts), { once: true });
67
+ }
68
+ const objects = await fetchSalesforceObjects(client, objectType, selectedProperties, opts, decodeObject);
69
+ if (objects.length > 0) {
70
+ begin();
71
+ for (const object of objects) upsertObject(object);
72
+ const applied = commit();
73
+ if (applied instanceof Promise) {
74
+ if (awaitApplication) await applied;
75
+ else applied.catch((error) => {
76
+ if (!disposed) markError(error);
77
+ });
78
+ }
79
+ }
80
+ };
81
+ loadSubsetDedupe = new DeduplicatedLoadSubset({ loadSubset: (options) => loadSubset(options) });
82
+ invalidate = async () => {
83
+ loadSubsetDedupe?.reset();
84
+ for (const subset of activeSubsets) if (!subset.signal?.aborted) await loadSubset(subset, false);
85
+ };
86
+ refreshByKey = async (key) => {
87
+ const object = (await client.query(buildSoqlQuery({
88
+ objectType,
89
+ selectedProperties,
90
+ where: {
91
+ clause: `${primaryKeyProperty} = ${serializeSoqlLiteral(key)}`,
92
+ alwaysFalse: false
93
+ },
94
+ limit: 1
95
+ }))).records[0];
96
+ if (!object) throw new Error(`Salesforce ${objectType} record "${key}" was not returned after a confirmed write.`);
97
+ begin();
98
+ upsertObject(decodeObject(object));
99
+ const applied = commit();
100
+ if (applied instanceof Promise) applied.catch((error) => {
101
+ if (!disposed) markError(error);
102
+ });
103
+ loadSubsetDedupe?.reset();
104
+ };
105
+ deleteByKey = (key) => {
106
+ begin();
107
+ write({
108
+ type: "delete",
109
+ key
110
+ });
111
+ const applied = commit();
112
+ if (applied instanceof Promise) applied.catch((error) => {
113
+ if (!disposed) markError(error);
114
+ });
115
+ loadSubsetDedupe?.reset();
116
+ return Promise.resolve();
117
+ };
118
+ markReady();
119
+ if (subscribeToChangeEvents) subscribeToChangeEvents(objectType, (event) => {
120
+ changeQueue = changeQueue.then(async () => {
121
+ if (disposed) return;
122
+ const header = event.payload.ChangeEventHeader;
123
+ if (header.changeType === "DELETE") {
124
+ begin();
125
+ for (const id of header.recordIds) write({
126
+ type: "delete",
127
+ key: id
128
+ });
129
+ const replayId = event.event?.replayId;
130
+ if (replayId !== void 0) collectionMetadata?.set(replayMetadataKey, replayId);
131
+ await commit();
132
+ loadSubsetDedupe?.reset();
133
+ return;
134
+ }
135
+ await invalidate?.();
136
+ const replayId = event.event?.replayId;
137
+ if (replayId !== void 0 && collectionMetadata) {
138
+ begin();
139
+ collectionMetadata.set(replayMetadataKey, replayId);
140
+ await commit();
141
+ }
142
+ }).catch((error) => {
143
+ markError(error instanceof Error ? error : new Error(String(error)));
144
+ });
145
+ }, typeof restoredReplayId === "number" ? { replayId: restoredReplayId } : void 0).then((subscription) => {
146
+ if (disposed) subscription.unsubscribe();
147
+ else changeSubscription = subscription;
148
+ }, (error) => {
149
+ markError(error instanceof Error ? error : new Error(String(error)));
150
+ });
151
+ return {
152
+ loadSubset: loadSubsetDedupe.loadSubset,
153
+ cleanup: () => {
154
+ disposed = true;
155
+ changeSubscription?.unsubscribe();
156
+ changeQueue.finally(() => {
157
+ loadSubsetDedupe?.reset();
158
+ loadSubsetDedupe = void 0;
159
+ invalidate = void 0;
160
+ refreshByKey = void 0;
161
+ deleteByKey = void 0;
162
+ });
163
+ }
164
+ };
165
+ } },
166
+ utils: {
167
+ invalidate: () => {
168
+ if (!invalidate) throw new Error(`Salesforce ${objectType} collection is not ready.`);
169
+ return invalidate();
170
+ },
171
+ refreshByKey: (key) => {
172
+ if (!refreshByKey) throw new Error(`Salesforce ${objectType} collection is not ready.`);
173
+ return refreshByKey(key);
174
+ },
175
+ deleteByKey: (key) => {
176
+ if (!deleteByKey) throw new Error(`Salesforce ${objectType} collection is not ready.`);
177
+ return deleteByKey(key);
178
+ }
179
+ }
180
+ };
267
181
  }
268
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
269
- export function objectCollectionOptions(config) {
270
- const { client, objectType, primaryKeyProperty, selectedProperties, subscribeToChangeEvents, decodeObject, schema, ...rest } = config;
271
- const { sync, utils } = createSyncConfig(client, objectType, primaryKeyProperty, selectedProperties, subscribeToChangeEvents, decodeObject);
272
- if (schema === undefined) {
273
- return { syncMode: "on-demand", sync, utils };
274
- }
275
- return {
276
- ...rest,
277
- schema,
278
- defaultIndexType: BasicIndex,
279
- autoIndex: "eager",
280
- syncMode: "on-demand",
281
- getKey: (object) => object[primaryKeyProperty],
282
- sync,
283
- utils,
284
- };
182
+ function objectCollectionOptions(config) {
183
+ const { client, objectType, primaryKeyProperty, selectedProperties, subscribeToChangeEvents, decodeObject, schema, ...rest } = config;
184
+ const { sync, utils } = createSyncConfig(client, objectType, primaryKeyProperty, selectedProperties, subscribeToChangeEvents, decodeObject);
185
+ if (schema === void 0) return {
186
+ syncMode: "on-demand",
187
+ sync,
188
+ utils
189
+ };
190
+ return {
191
+ ...rest,
192
+ schema,
193
+ defaultIndexType: BasicIndex,
194
+ autoIndex: "eager",
195
+ syncMode: "on-demand",
196
+ getKey: (object) => object[primaryKeyProperty],
197
+ sync,
198
+ utils
199
+ };
285
200
  }
201
+ //#endregion
202
+ export { objectCollectionOptions };
203
+
286
204
  //# sourceMappingURL=objectCollectionOptions.js.map
@@ -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","names":["AsyncIterable.toArray","AsyncIterable.fromPagination"],"sources":["../../src/adapter/objectCollectionOptions.ts"],"sourcesContent":["import {\n BasicIndex,\n CollectionConfig,\n DeduplicatedLoadSubset,\n InferSchemaOutput,\n LoadSubsetOptions,\n StandardSchema,\n SyncConfig,\n UtilsRecord,\n} from \"@tanstack/db\";\nimport * as AsyncIterable from \"../utils/AsyncIterable.js\";\nimport {\n buildSoqlQuery,\n convertLoadSubsetFilter,\n convertLoadSubsetOrderBy,\n isAlwaysFalseFilter,\n serializeSoqlLiteral,\n} from \"./convertLoadSubsetOptions.js\";\nimport type {\n SalesforceChangeEvent,\n SalesforceChangeEventSubscription,\n SalesforceChangeEventSubscriptionOptions,\n SalesforceClient,\n} from \"@party-stack/salesforce-client\";\n\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };\n\ntype SalesforceObject = Record<string, unknown>;\n\nexport type SubscribeToSalesforceChangeEvents = (\n objectType: string,\n listener: (event: SalesforceChangeEvent) => void,\n options?: SalesforceChangeEventSubscriptionOptions\n) => Promise<SalesforceChangeEventSubscription>;\n\nexport interface ObjectCollectionUtils extends UtilsRecord {\n /**\n * Reset load-subset deduplication and await refetching active subsets.\n */\n invalidate: () => Promise<void>;\n /** Refetch one confirmed backend record and commit it locally. */\n refreshByKey: (key: string | number) => Promise<void>;\n /** Apply a confirmed backend deletion to the local collection. */\n deleteByKey: (key: string | number) => Promise<void>;\n}\n\nasync function fetchSalesforceObjects(\n client: SalesforceClient,\n objectType: string,\n selectedProperties: string[],\n opts: LoadSubsetOptions,\n decodeObject: (object: SalesforceObject) => SalesforceObject = (object) => object\n): Promise<SalesforceObject[]> {\n const offset = Math.max(0, Math.trunc(opts.offset ?? 0));\n const limit = opts.limit === undefined ? undefined : Math.max(0, Math.trunc(opts.limit));\n if (limit === 0) return [];\n\n let where = convertLoadSubsetFilter(opts.where);\n if (isAlwaysFalseFilter(where)) {\n return [];\n }\n\n if (opts.cursor?.whereFrom) {\n const cursorWhere = convertLoadSubsetFilter(opts.cursor.whereFrom);\n if (isAlwaysFalseFilter(cursorWhere)) {\n return [];\n }\n if (cursorWhere?.clause) {\n where = where?.clause\n ? { clause: `(${where.clause} AND ${cursorWhere.clause})`, alwaysFalse: false }\n : cursorWhere;\n }\n }\n\n // Salesforce OFFSET max is 2000. Prefer locator pagination for deep reads and\n // only push OFFSET when the caller requested a small local window.\n const canPushOffset = offset > 0 && offset <= 2000 && (limit === undefined || offset + limit <= 2000);\n const orderBy = convertLoadSubsetOrderBy(opts.orderBy);\n const soql = buildSoqlQuery({\n objectType,\n selectedProperties,\n where,\n orderBy,\n limit: canPushOffset\n ? limit === undefined\n ? undefined\n : offset + limit\n : limit === undefined\n ? undefined\n : offset + limit,\n offset: canPushOffset ? offset : undefined,\n });\n\n const results = await AsyncIterable.toArray(\n AsyncIterable.fromPagination(\n async (_pageSize, pageToken: string | undefined) => {\n if (pageToken) {\n return client.queryMore<SalesforceObject>(pageToken);\n }\n return client.query<SalesforceObject>(soql);\n },\n (page) => (page.done ? undefined : page.nextRecordsUrl),\n (page) => page.records,\n 2_000,\n canPushOffset\n ? limit === undefined\n ? undefined\n : limit\n : limit === undefined\n ? undefined\n : offset + limit\n )\n );\n\n const sliced = canPushOffset\n ? results\n : results.slice(offset, limit === undefined ? undefined : offset + limit);\n\n return sliced.map(decodeObject);\n}\n\nfunction createSyncConfig(\n client: SalesforceClient,\n objectType: string,\n primaryKeyProperty: string,\n selectedProperties: string[],\n subscribeToChangeEvents: SubscribeToSalesforceChangeEvents | undefined,\n decodeObject: (object: SalesforceObject) => SalesforceObject = (object) => object\n): { sync: SyncConfig<Record<string, unknown>, string | number>; utils: ObjectCollectionUtils } {\n let loadSubsetDedupe: DeduplicatedLoadSubset | undefined;\n let deleteByKey: ((key: string | number) => Promise<void>) | undefined;\n let refreshByKey: ((key: string | number) => Promise<void>) | undefined;\n let invalidate: (() => Promise<void>) | undefined;\n\n const utils: ObjectCollectionUtils = {\n invalidate: () => {\n if (!invalidate) {\n throw new Error(`Salesforce ${objectType} collection is not ready.`);\n }\n return invalidate();\n },\n refreshByKey: (key) => {\n if (!refreshByKey) {\n throw new Error(`Salesforce ${objectType} collection is not ready.`);\n }\n return refreshByKey(key);\n },\n deleteByKey: (key) => {\n if (!deleteByKey) {\n throw new Error(`Salesforce ${objectType} collection is not ready.`);\n }\n return deleteByKey(key);\n },\n };\n\n const sync: SyncConfig<Record<string, unknown>, string | number> = {\n sync: (params) => {\n const { begin, write, commit, markError, markReady } = params;\n const activeSubsets = new Set<LoadSubsetOptions>();\n const collectionMetadata = params.metadata?.collection;\n const replayMetadataKey = `salesforce.cdc.${objectType}.replayId`;\n const restoredReplayId = collectionMetadata?.get(replayMetadataKey);\n let disposed = false;\n let changeSubscription: SalesforceChangeEventSubscription | undefined;\n let changeQueue = Promise.resolve();\n\n const upsertObject = (object: SalesforceObject) => {\n const key = object.Id;\n if (typeof key !== \"string\" && typeof key !== \"number\") {\n throw new Error(\n `Salesforce object for ${objectType} is missing a string/number Id primary key.`\n );\n }\n const exists = params.collection.has(key);\n const existing = exists ? params.collection.get(key) : undefined;\n write({\n type: exists ? \"update\" : \"insert\",\n value: existing ? { ...existing, ...object } : object,\n });\n };\n\n const loadSubset = async (opts: LoadSubsetOptions, awaitApplication = true): Promise<void> => {\n if (!activeSubsets.has(opts)) {\n activeSubsets.add(opts);\n opts.signal?.addEventListener(\"abort\", () => activeSubsets.delete(opts), { once: true });\n }\n const objects = await fetchSalesforceObjects(\n client,\n objectType,\n selectedProperties,\n opts,\n decodeObject\n );\n if (objects.length > 0) {\n begin();\n for (const object of objects) {\n upsertObject(object);\n }\n const applied = commit();\n if (applied instanceof Promise) {\n if (awaitApplication) {\n await applied;\n } else {\n void applied.catch((error) => {\n if (!disposed) {\n markError(error);\n }\n });\n }\n }\n }\n };\n\n loadSubsetDedupe = new DeduplicatedLoadSubset({\n loadSubset: (options) => loadSubset(options),\n });\n invalidate = async () => {\n loadSubsetDedupe?.reset();\n for (const subset of activeSubsets) {\n if (!subset.signal?.aborted) {\n await loadSubset(subset, false);\n }\n }\n };\n refreshByKey = async (key) => {\n const result = await client.query<SalesforceObject>(\n buildSoqlQuery({\n objectType,\n selectedProperties,\n where: {\n clause: `${primaryKeyProperty} = ${serializeSoqlLiteral(key)}`,\n alwaysFalse: false,\n },\n limit: 1,\n })\n );\n const object = result.records[0];\n if (!object) {\n throw new Error(\n `Salesforce ${objectType} record \"${key}\" was not returned after a confirmed write.`\n );\n }\n begin();\n upsertObject(decodeObject(object));\n const applied = commit();\n if (applied instanceof Promise) {\n void applied.catch((error) => {\n if (!disposed) {\n markError(error);\n }\n });\n }\n loadSubsetDedupe?.reset();\n };\n deleteByKey = (key) => {\n begin();\n write({\n type: \"delete\",\n key,\n });\n const applied = commit();\n if (applied instanceof Promise) {\n void applied.catch((error) => {\n if (!disposed) {\n markError(error);\n }\n });\n }\n loadSubsetDedupe?.reset();\n return Promise.resolve();\n };\n markReady();\n if (subscribeToChangeEvents) {\n void subscribeToChangeEvents(\n objectType,\n (event) => {\n changeQueue = changeQueue\n .then(async () => {\n if (disposed) return;\n const header = event.payload.ChangeEventHeader;\n if (header.changeType === \"DELETE\") {\n begin();\n for (const id of header.recordIds) {\n write({\n type: \"delete\",\n key: id,\n });\n }\n const replayId = event.event?.replayId;\n if (replayId !== undefined) {\n collectionMetadata?.set(replayMetadataKey, replayId);\n }\n await commit();\n loadSubsetDedupe?.reset();\n return;\n }\n await invalidate?.();\n const replayId = event.event?.replayId;\n if (replayId !== undefined && collectionMetadata) {\n begin();\n collectionMetadata.set(replayMetadataKey, replayId);\n await commit();\n }\n })\n .catch((error: unknown) => {\n markError(error instanceof Error ? error : new Error(String(error)));\n });\n },\n typeof restoredReplayId === \"number\"\n ? {\n replayId: restoredReplayId,\n }\n : undefined\n ).then(\n (subscription) => {\n if (disposed) {\n subscription.unsubscribe();\n } else {\n changeSubscription = subscription;\n }\n },\n (error: unknown) => {\n markError(error instanceof Error ? error : new Error(String(error)));\n }\n );\n }\n\n return {\n loadSubset: loadSubsetDedupe.loadSubset,\n cleanup: () => {\n disposed = true;\n changeSubscription?.unsubscribe();\n void changeQueue.finally(() => {\n loadSubsetDedupe?.reset();\n loadSubsetDedupe = undefined;\n invalidate = undefined;\n refreshByKey = undefined;\n deleteByKey = undefined;\n });\n },\n };\n },\n };\n\n return { sync, utils };\n}\n\nexport interface ObjectCollectionOpts {\n client: SalesforceClient;\n objectType: string;\n primaryKeyProperty: string;\n selectedProperties: string[];\n subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;\n decodeObject?: (object: Record<string, unknown>) => Record<string, unknown>;\n}\n\nexport interface ObjectCollectionConfig<TSchema extends StandardSchema<SalesforceObject>>\n extends\n ObjectCollectionOpts,\n Omit<\n CollectionConfig<InferSchemaOutput<TSchema>, string | number, TSchema>,\n \"sync\" | \"syncMode\" | \"getKey\" | \"onInsert\" | \"onUpdate\" | \"onDelete\"\n > {\n schema: TSchema;\n}\n\nexport function objectCollectionOptions<TSchema extends StandardSchema<SalesforceObject>>(\n config: ObjectCollectionConfig<TSchema>\n): WithRequired<\n CollectionConfig<InferSchemaOutput<TSchema>, string | number, TSchema, ObjectCollectionUtils>,\n \"schema\"\n>;\nexport function objectCollectionOptions(config: ObjectCollectionOpts): {\n syncMode: \"on-demand\";\n sync: SyncConfig<Record<string, unknown>, string | number>;\n utils: ObjectCollectionUtils;\n};\n// oxlint-disable-next-line typescript/no-explicit-any\nexport function objectCollectionOptions(config: any): any {\n const {\n client,\n objectType,\n primaryKeyProperty,\n selectedProperties,\n subscribeToChangeEvents,\n decodeObject,\n schema,\n ...rest\n } = config as ObjectCollectionOpts & { schema?: StandardSchema<SalesforceObject> } & Record<\n string,\n unknown\n >;\n const { sync, utils } = createSyncConfig(\n client,\n objectType,\n primaryKeyProperty,\n selectedProperties,\n subscribeToChangeEvents,\n decodeObject\n );\n\n if (schema === undefined) {\n return { syncMode: \"on-demand\" as const, sync, utils };\n }\n\n return {\n ...rest,\n schema,\n defaultIndexType: BasicIndex,\n autoIndex: \"eager\",\n syncMode: \"on-demand\" as const,\n getKey: (object: Record<string, unknown>) =>\n (object as Record<string, string | number>)[primaryKeyProperty] as string | number,\n sync,\n utils,\n };\n}\n"],"mappings":"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"}
@@ -1,10 +1,12 @@
1
- import type { OntologyIR, TypeDef } from "@party-stack/ontology";
1
+ import { OntologyIR, TypeDef } from "@party-stack/ontology";
2
+ //#region src/adapter/salesforceCodec.d.ts
2
3
  type SalesforceObjectRecord = Record<string, unknown>;
3
4
  export interface SalesforceCodec {
4
- decodeObject: (objectType: string, object: SalesforceObjectRecord) => SalesforceObjectRecord;
5
- decodeValue: (type: TypeDef, value: unknown) => unknown;
6
- encodeValue: (type: TypeDef, value: unknown) => unknown;
5
+ decodeObject: (objectType: string, object: SalesforceObjectRecord) => SalesforceObjectRecord;
6
+ decodeValue: (type: TypeDef, value: unknown) => unknown;
7
+ encodeValue: (type: TypeDef, value: unknown) => unknown;
7
8
  }
8
9
  export declare function createSalesforceCodec(ir: OntologyIR): SalesforceCodec;
10
+ //#endregion
9
11
  export {};
10
12
  //# sourceMappingURL=salesforceCodec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"salesforceCodec.d.ts","sourceRoot":"","sources":["../../src/adapter/salesforceCodec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhF,KAAK,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC5B,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,KAAK,sBAAsB,CAAC;IAC7F,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACxD,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3D;AAYD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,UAAU,GAAG,eAAe,CA8LrE"}
1
+ {"version":3,"file":"salesforceCodec.d.ts","names":[],"sources":["../../src/adapter/salesforceCodec.ts"],"mappings":";;KAGK,yBAAyB;iBAEb;EACb,eAAe,oBAAoB,QAAQ,2BAA2B;EACtE,cAAc,MAAM,SAAS;EAC7B,cAAc,MAAM,SAAS;;wBAajB,sBAAsB,IAAI,aAAa"}