@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 +1 @@
1
- {"version":3,"file":"createSalesforceOntologyBackendAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/createSalesforceOntologyBackendAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,EACnC,KAAK,UAAU,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAG3F,OAAO,EAGH,KAAK,iCAAiC,EACzC,MAAM,8BAA8B,CAAC;AA2FtC,wBAAgB,sCAAsC,CAAC,IAAI,EAAE;IACzD,MAAM,EAAE,gBAAgB,CAAC;IACzB,EAAE,EAAE,UAAU,CAAC;IACf,uBAAuB,CAAC,EAAE,iCAAiC,CAAC;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,sBAAsB,CA2PzB;AAED,MAAM,MAAM,sCAAsC,CAC9C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACjE,CACE;IACI,MAAM,EAAE,gBAAgB,CAAC;IACzB,uBAAuB,CAAC,EAAE,iCAAiC,CAAC;CAC/D,GACD;IACI,YAAY,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjG,uBAAuB,CAAC,EAAE,iCAAiC,CAAC;CAC/D,CACN,GAAG;IACA,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,wBAAgB,+BAA+B,CAC3C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,IAAI,EAAE,sCAAsC,CAAC,OAAO,CAAC,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAShG"}
1
+ {"version":3,"file":"createSalesforceOntologyBackendAdapter.d.ts","names":[],"sources":["../../src/adapter/createSalesforceOntologyBackendAdapter.ts"],"mappings":";;;;wBAuFgB,uCAAuC;EACnD,QAAQ;EACR,IAAI;EACJ,0BAA0B;EAC1B;IACA;YA+JQ,uCACR,gBAAgB,0BAA0B;EAGpC,QAAQ;EACR,0BAA0B;;EAG1B,eAAe,IAAI,YAAY,SAAS,YAAY,mBAAmB,QAAQ;EAC/E,0BAA0B;;EAGhC;;wBAGY,gCACZ,gBAAgB,0BAA0B,yBAC5C,MAAM,uCAAuC,WAAW,+BAA+B"}
@@ -1,206 +1,139 @@
1
- import { NonRetryableError, } from "@party-stack/ontology";
2
- import { SalesforceApiError } from "@party-stack/salesforce-client";
3
1
  import { getSalesforceActionMetadata } from "../actionMetadata.js";
4
- import { objectCollectionOptions, } from "./objectCollectionOptions.js";
2
+ import { objectCollectionOptions } from "./objectCollectionOptions.js";
5
3
  import { createSalesforceCodec } from "./salesforceCodec.js";
4
+ import { SalesforceApiError } from "@party-stack/salesforce-client";
5
+ import { NonRetryableError } from "@party-stack/ontology";
6
+ //#region src/adapter/createSalesforceOntologyBackendAdapter.ts
6
7
  function isNonRetryableSalesforceError(error) {
7
- if (!(error instanceof SalesforceApiError)) {
8
- return false;
9
- }
10
- if (error.statusCode === 400 || error.statusCode === 403 || error.statusCode === 404) {
11
- return true;
12
- }
13
- const code = error.errorCode?.toUpperCase();
14
- return (code === "INVALID_INPUT" ||
15
- code === "REQUIRED_FIELD_MISSING" ||
16
- code === "FIELD_CUSTOM_VALIDATION_EXCEPTION" ||
17
- code === "INSUFFICIENT_ACCESS" ||
18
- code === "INSUFFICIENT_ACCESS_OR_READONLY" ||
19
- code === "NOT_FOUND");
8
+ if (!(error instanceof SalesforceApiError)) return false;
9
+ if (error.statusCode === 400 || error.statusCode === 403 || error.statusCode === 404) return true;
10
+ const code = error.errorCode?.toUpperCase();
11
+ return code === "INVALID_INPUT" || code === "REQUIRED_FIELD_MISSING" || code === "FIELD_CUSTOM_VALIDATION_EXCEPTION" || code === "INSUFFICIENT_ACCESS" || code === "INSUFFICIENT_ACCESS_OR_READONLY" || code === "NOT_FOUND";
20
12
  }
21
13
  async function awaitInvalidation(utils) {
22
- try {
23
- await utils.invalidate();
24
- }
25
- catch (error) {
26
- throw new NonRetryableError("Salesforce accepted the action, but its collection changes could not be observed.", { cause: error });
27
- }
14
+ try {
15
+ await utils.invalidate();
16
+ } catch (error) {
17
+ throw new NonRetryableError("Salesforce accepted the action, but its collection changes could not be observed.", { cause: error });
18
+ }
28
19
  }
29
20
  async function invalidateEditedCollections(objects) {
30
- await Promise.all(Object.values(objects).map((collection) => awaitInvalidation(collection
31
- .utils)));
21
+ await Promise.all(Object.values(objects).map((collection) => awaitInvalidation(collection.utils)));
32
22
  }
33
23
  function assertSaveSucceeded(result) {
34
- if (result.success)
35
- return;
36
- throw new NonRetryableError(result.errors
37
- .map((error) => error.message)
38
- .filter(Boolean)
39
- .join("; ") ||
40
- "Salesforce rejected the record write.");
24
+ if (result.success) return;
25
+ throw new NonRetryableError(result.errors.map((error) => error.message).filter(Boolean).join("; ") || "Salesforce rejected the record write.");
41
26
  }
42
27
  async function refreshConfirmedRecord(collection, recordId) {
43
- if (!collection)
44
- return;
45
- const utils = collection.utils;
46
- if (recordId === undefined) {
47
- await awaitInvalidation(utils);
48
- return;
49
- }
50
- try {
51
- await utils.refreshByKey(recordId);
52
- }
53
- catch (error) {
54
- throw new NonRetryableError(`Salesforce accepted the write, but record "${recordId}" could not be observed in its collection.`, { cause: error });
55
- }
28
+ if (!collection) return;
29
+ const utils = collection.utils;
30
+ if (recordId === void 0) {
31
+ await awaitInvalidation(utils);
32
+ return;
33
+ }
34
+ try {
35
+ await utils.refreshByKey(recordId);
36
+ } catch (error) {
37
+ throw new NonRetryableError(`Salesforce accepted the write, but record "${recordId}" could not be observed in its collection.`, { cause: error });
38
+ }
56
39
  }
57
- export function createSalesforceOntologyBackendAdapter(opts) {
58
- const codec = createSalesforceCodec(opts.ir);
59
- const encodeInvocableParameter = (type, value) => {
60
- if (type.kind === "optional") {
61
- return encodeInvocableParameter(type.value.type, value);
62
- }
63
- if (type.kind === "list" && Array.isArray(value)) {
64
- return value.map((entry) => codec.encodeValue(type.value.elementType, entry));
65
- }
66
- return codec.encodeValue(type, value);
67
- };
68
- return {
69
- name: "salesforce",
70
- live: opts.live !== false,
71
- getCollectionOptions: (objectType) => {
72
- const objectTypeDef = opts.ir.objectTypes.find((candidate) => candidate.name === objectType);
73
- if (!objectTypeDef) {
74
- throw new Error(`Unknown Salesforce object type "${objectType}".`);
75
- }
76
- return objectCollectionOptions({
77
- client: opts.client,
78
- objectType,
79
- primaryKeyProperty: objectTypeDef.primaryKey,
80
- selectedProperties: objectTypeDef.properties.map((property) => property.name),
81
- subscribeToChangeEvents: opts.live === false ? undefined : opts.subscribeToChangeEvents,
82
- decodeObject: (object) => codec.decodeObject(objectType, object),
83
- });
84
- },
85
- applyAction: async (name, parameters, live) => {
86
- const actionType = opts.ir.actionTypes.find((candidate) => candidate.name === name);
87
- if (!actionType) {
88
- throw new NonRetryableError(`Unknown Salesforce action type "${name}".`);
89
- }
90
- const parameterTypes = new Map(actionType.parameters.map((parameter) => [parameter.name, parameter.type]));
91
- const requestParameters = {};
92
- for (const [parameterName, value] of Object.entries(parameters)) {
93
- if (value === undefined)
94
- continue;
95
- const parameterType = parameterTypes.get(parameterName);
96
- requestParameters[parameterName] = parameterType
97
- ? encodeInvocableParameter(parameterType, value)
98
- : value;
99
- }
100
- const metadata = getSalesforceActionMetadata(actionType);
101
- if (!metadata) {
102
- throw new NonRetryableError(`Salesforce action type "${name}" is missing Salesforce metadata.`);
103
- }
104
- if (metadata.kind === "crud") {
105
- const collection = live.objects[metadata.objectType];
106
- if (metadata.operation === "create") {
107
- const result = await opts.client.createRecord(metadata.objectType, requestParameters);
108
- assertSaveSucceeded(result);
109
- if (opts.live !== false) {
110
- await refreshConfirmedRecord(collection, result.id);
111
- }
112
- return;
113
- }
114
- const recordId = requestParameters.recordId;
115
- if (typeof recordId !== "string" ||
116
- recordId.length === 0) {
117
- throw new NonRetryableError(`Salesforce ${metadata.operation} action requires recordId.`);
118
- }
119
- if (metadata.operation === "update") {
120
- const fields = Object.fromEntries(Object.entries(requestParameters).filter(([parameterName]) => parameterName !==
121
- "recordId"));
122
- const result = await opts.client.updateRecord(metadata.objectType, recordId, fields);
123
- assertSaveSucceeded(result);
124
- if (opts.live !== false) {
125
- await refreshConfirmedRecord(collection, result.id ?? recordId);
126
- }
127
- return;
128
- }
129
- assertSaveSucceeded(await opts.client.deleteRecord(metadata.objectType, recordId));
130
- if (opts.live !== false && collection) {
131
- await collection.utils.deleteByKey(recordId);
132
- }
133
- return;
134
- }
135
- const actionApiName = metadata.apiName;
136
- let results;
137
- try {
138
- results = metadata.kind === "standard"
139
- ? await opts.client.invokeStandardAction(actionApiName, [requestParameters])
140
- : await opts.client.invokeFlowAction(actionApiName, [requestParameters]);
141
- }
142
- catch (error) {
143
- if (isNonRetryableSalesforceError(error)) {
144
- throw new NonRetryableError(error instanceof Error
145
- ? error.message
146
- : "Salesforce action invocation failed.", { cause: error });
147
- }
148
- throw error;
149
- }
150
- const result = results[0];
151
- if (!result) {
152
- throw new Error(`Salesforce action "${actionApiName}" returned no results.`);
153
- }
154
- if (!result.isSuccess) {
155
- const message = result.errors?.map((entry) => entry.message).filter(Boolean).join("; ") ||
156
- `Salesforce action "${actionApiName}" failed.`;
157
- throw new NonRetryableError(message);
158
- }
159
- if (opts.live !== false) {
160
- await invalidateEditedCollections(live.objects);
161
- }
162
- },
163
- runQueryFunction: async (name, parameters) => {
164
- const queryFunction = opts.ir.queryFunctionTypes.find((candidate) => candidate.name === name);
165
- if (!queryFunction) {
166
- throw new NonRetryableError(`Unknown Salesforce query function type "${name}".`);
167
- }
168
- const parameterTypes = new Map(queryFunction.parameters.map((parameter) => [
169
- parameter.name,
170
- parameter.type,
171
- ]));
172
- const requestParameters = {};
173
- for (const [parameterName, value] of Object.entries(parameters)) {
174
- if (value === undefined)
175
- continue;
176
- const parameterType = parameterTypes.get(parameterName);
177
- requestParameters[parameterName] =
178
- parameterType
179
- ? encodeInvocableParameter(parameterType, value)
180
- : value;
181
- }
182
- const results = await opts.client.invokeStandardAction(name, [requestParameters]);
183
- const result = results[0];
184
- if (!result) {
185
- throw new Error(`Salesforce standard query "${name}" returned no results.`);
186
- }
187
- if (!result.isSuccess) {
188
- throw new NonRetryableError(result.errors
189
- ?.map((entry) => entry.message)
190
- .filter(Boolean)
191
- .join("; ") ||
192
- `Salesforce standard query "${name}" failed.`);
193
- }
194
- return codec.decodeValue(queryFunction.returnType, result.outputValues ?? {});
195
- },
196
- };
40
+ function createSalesforceOntologyBackendAdapter(opts) {
41
+ const codec = createSalesforceCodec(opts.ir);
42
+ const encodeInvocableParameter = (type, value) => {
43
+ if (type.kind === "optional") return encodeInvocableParameter(type.value.type, value);
44
+ if (type.kind === "list" && Array.isArray(value)) return value.map((entry) => codec.encodeValue(type.value.elementType, entry));
45
+ return codec.encodeValue(type, value);
46
+ };
47
+ return {
48
+ name: "salesforce",
49
+ live: opts.live !== false,
50
+ getCollectionOptions: (objectType) => {
51
+ const objectTypeDef = opts.ir.objectTypes.find((candidate) => candidate.name === objectType);
52
+ if (!objectTypeDef) throw new Error(`Unknown Salesforce object type "${objectType}".`);
53
+ return objectCollectionOptions({
54
+ client: opts.client,
55
+ objectType,
56
+ primaryKeyProperty: objectTypeDef.primaryKey,
57
+ selectedProperties: objectTypeDef.properties.map((property) => property.name),
58
+ subscribeToChangeEvents: opts.live === false ? void 0 : opts.subscribeToChangeEvents,
59
+ decodeObject: (object) => codec.decodeObject(objectType, object)
60
+ });
61
+ },
62
+ applyAction: async (name, parameters, live) => {
63
+ const actionType = opts.ir.actionTypes.find((candidate) => candidate.name === name);
64
+ if (!actionType) throw new NonRetryableError(`Unknown Salesforce action type "${name}".`);
65
+ const parameterTypes = new Map(actionType.parameters.map((parameter) => [parameter.name, parameter.type]));
66
+ const requestParameters = {};
67
+ for (const [parameterName, value] of Object.entries(parameters)) {
68
+ if (value === void 0) continue;
69
+ const parameterType = parameterTypes.get(parameterName);
70
+ requestParameters[parameterName] = parameterType ? encodeInvocableParameter(parameterType, value) : value;
71
+ }
72
+ const metadata = getSalesforceActionMetadata(actionType);
73
+ if (!metadata) throw new NonRetryableError(`Salesforce action type "${name}" is missing Salesforce metadata.`);
74
+ if (metadata.kind === "crud") {
75
+ const collection = live.objects[metadata.objectType];
76
+ if (metadata.operation === "create") {
77
+ const result = await opts.client.createRecord(metadata.objectType, requestParameters);
78
+ assertSaveSucceeded(result);
79
+ if (opts.live !== false) await refreshConfirmedRecord(collection, result.id);
80
+ return;
81
+ }
82
+ const recordId = requestParameters.recordId;
83
+ if (typeof recordId !== "string" || recordId.length === 0) throw new NonRetryableError(`Salesforce ${metadata.operation} action requires recordId.`);
84
+ if (metadata.operation === "update") {
85
+ const fields = Object.fromEntries(Object.entries(requestParameters).filter(([parameterName]) => parameterName !== "recordId"));
86
+ const result = await opts.client.updateRecord(metadata.objectType, recordId, fields);
87
+ assertSaveSucceeded(result);
88
+ if (opts.live !== false) await refreshConfirmedRecord(collection, result.id ?? recordId);
89
+ return;
90
+ }
91
+ assertSaveSucceeded(await opts.client.deleteRecord(metadata.objectType, recordId));
92
+ if (opts.live !== false && collection) await collection.utils.deleteByKey(recordId);
93
+ return;
94
+ }
95
+ const actionApiName = metadata.apiName;
96
+ let results;
97
+ try {
98
+ results = metadata.kind === "standard" ? await opts.client.invokeStandardAction(actionApiName, [requestParameters]) : await opts.client.invokeFlowAction(actionApiName, [requestParameters]);
99
+ } catch (error) {
100
+ if (isNonRetryableSalesforceError(error)) throw new NonRetryableError(error instanceof Error ? error.message : "Salesforce action invocation failed.", { cause: error });
101
+ throw error;
102
+ }
103
+ const result = results[0];
104
+ if (!result) throw new Error(`Salesforce action "${actionApiName}" returned no results.`);
105
+ if (!result.isSuccess) {
106
+ const message = result.errors?.map((entry) => entry.message).filter(Boolean).join("; ") || `Salesforce action "${actionApiName}" failed.`;
107
+ throw new NonRetryableError(message);
108
+ }
109
+ if (opts.live !== false) await invalidateEditedCollections(live.objects);
110
+ },
111
+ runQueryFunction: async (name, parameters) => {
112
+ const queryFunction = opts.ir.queryFunctionTypes.find((candidate) => candidate.name === name);
113
+ if (!queryFunction) throw new NonRetryableError(`Unknown Salesforce query function type "${name}".`);
114
+ const parameterTypes = new Map(queryFunction.parameters.map((parameter) => [parameter.name, parameter.type]));
115
+ const requestParameters = {};
116
+ for (const [parameterName, value] of Object.entries(parameters)) {
117
+ if (value === void 0) continue;
118
+ const parameterType = parameterTypes.get(parameterName);
119
+ requestParameters[parameterName] = parameterType ? encodeInvocableParameter(parameterType, value) : value;
120
+ }
121
+ const result = (await opts.client.invokeStandardAction(name, [requestParameters]))[0];
122
+ if (!result) throw new Error(`Salesforce standard query "${name}" returned no results.`);
123
+ if (!result.isSuccess) throw new NonRetryableError(result.errors?.map((entry) => entry.message).filter(Boolean).join("; ") || `Salesforce standard query "${name}" failed.`);
124
+ return codec.decodeValue(queryFunction.returnType, result.outputValues ?? {});
125
+ }
126
+ };
197
127
  }
198
- export function createSalesforceOntologyBackend(opts) {
199
- return async (ir, context) => createSalesforceOntologyBackendAdapter({
200
- ir,
201
- client: "client" in opts ? opts.client : await opts.createClient(ir, context),
202
- subscribeToChangeEvents: opts.subscribeToChangeEvents,
203
- live: opts.live,
204
- });
128
+ function createSalesforceOntologyBackend(opts) {
129
+ return async (ir, context) => createSalesforceOntologyBackendAdapter({
130
+ ir,
131
+ client: "client" in opts ? opts.client : await opts.createClient(ir, context),
132
+ subscribeToChangeEvents: opts.subscribeToChangeEvents,
133
+ live: opts.live
134
+ });
205
135
  }
136
+ //#endregion
137
+ export { createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter };
138
+
206
139
  //# sourceMappingURL=createSalesforceOntologyBackendAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSalesforceOntologyBackendAdapter.js","sourceRoot":"","sources":["../../src/adapter/createSalesforceOntologyBackendAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSalesforceOntologyBackendAdapter.js","names":[],"sources":["../../src/adapter/createSalesforceOntologyBackendAdapter.ts"],"sourcesContent":["import {\n NonRetryableError,\n type OntologyBackendAdapter,\n type OntologyBackendAdapterProvider,\n type OntologyIR,\n} from \"@party-stack/ontology\";\nimport { SalesforceApiError, type SalesforceClient } from \"@party-stack/salesforce-client\";\nimport { Collection } from \"@tanstack/db\";\nimport { getSalesforceActionMetadata } from \"../actionMetadata.js\";\nimport {\n objectCollectionOptions,\n type ObjectCollectionUtils,\n type SubscribeToSalesforceChangeEvents,\n} from \"./objectCollectionOptions.js\";\nimport { createSalesforceCodec } from \"./salesforceCodec.js\";\n\ntype CollectionWithUtils = Collection<Record<string, unknown>, string | number, ObjectCollectionUtils>;\n\nfunction isNonRetryableSalesforceError(error: unknown): boolean {\n if (!(error instanceof SalesforceApiError)) {\n return false;\n }\n if (error.statusCode === 400 || error.statusCode === 403 || error.statusCode === 404) {\n return true;\n }\n const code = error.errorCode?.toUpperCase();\n return (\n code === \"INVALID_INPUT\" ||\n code === \"REQUIRED_FIELD_MISSING\" ||\n code === \"FIELD_CUSTOM_VALIDATION_EXCEPTION\" ||\n code === \"INSUFFICIENT_ACCESS\" ||\n code === \"INSUFFICIENT_ACCESS_OR_READONLY\" ||\n code === \"NOT_FOUND\"\n );\n}\n\nasync function awaitInvalidation(utils: ObjectCollectionUtils): Promise<void> {\n try {\n await utils.invalidate();\n } catch (error) {\n throw new NonRetryableError(\n \"Salesforce accepted the action, but its collection changes could not be observed.\",\n { cause: error }\n );\n }\n}\n\nasync function invalidateEditedCollections(\n objects: Record<string, Collection<Record<string, unknown>>>\n): Promise<void> {\n await Promise.all(\n Object.values(objects).map((collection) =>\n awaitInvalidation((collection as CollectionWithUtils).utils)\n )\n );\n}\n\nfunction assertSaveSucceeded(result: { success: boolean; errors: Array<{ message: string }> }): void {\n if (result.success) return;\n throw new NonRetryableError(\n result.errors\n .map((error) => error.message)\n .filter(Boolean)\n .join(\"; \") || \"Salesforce rejected the record write.\"\n );\n}\n\nasync function refreshConfirmedRecord(\n collection: CollectionWithUtils | undefined,\n recordId: string | number | undefined\n): Promise<void> {\n if (!collection) return;\n const utils: ObjectCollectionUtils = collection.utils;\n if (recordId === undefined) {\n await awaitInvalidation(utils);\n return;\n }\n try {\n await utils.refreshByKey(recordId);\n } catch (error) {\n throw new NonRetryableError(\n `Salesforce accepted the write, but record \"${recordId}\" could not be observed in its collection.`,\n { cause: error }\n );\n }\n}\n\nexport function createSalesforceOntologyBackendAdapter(opts: {\n client: SalesforceClient;\n ir: OntologyIR;\n subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;\n live?: boolean;\n}): OntologyBackendAdapter {\n const codec = createSalesforceCodec(opts.ir);\n const encodeInvocableParameter = (\n type: Parameters<typeof codec.encodeValue>[0],\n value: unknown\n ): unknown => {\n if (type.kind === \"optional\") {\n return encodeInvocableParameter(type.value.type, value);\n }\n if (type.kind === \"list\" && Array.isArray(value)) {\n return value.map((entry) => codec.encodeValue(type.value.elementType, entry));\n }\n return codec.encodeValue(type, value);\n };\n\n return {\n name: \"salesforce\",\n live: opts.live !== false,\n getCollectionOptions: (objectType: string) => {\n const objectTypeDef = opts.ir.objectTypes.find((candidate) => candidate.name === objectType);\n if (!objectTypeDef) {\n throw new Error(`Unknown Salesforce object type \"${objectType}\".`);\n }\n return objectCollectionOptions({\n client: opts.client,\n objectType,\n primaryKeyProperty: objectTypeDef.primaryKey,\n selectedProperties: objectTypeDef.properties.map((property) => property.name),\n subscribeToChangeEvents: opts.live === false ? undefined : opts.subscribeToChangeEvents,\n decodeObject: (object) => codec.decodeObject(objectType, object),\n });\n },\n applyAction: async (name, parameters, live) => {\n const actionType = opts.ir.actionTypes.find((candidate) => candidate.name === name);\n if (!actionType) {\n throw new NonRetryableError(`Unknown Salesforce action type \"${name}\".`);\n }\n\n const parameterTypes = new Map(\n actionType.parameters.map((parameter) => [parameter.name, parameter.type])\n );\n const requestParameters: Record<string, unknown> = {};\n for (const [parameterName, value] of Object.entries(parameters)) {\n if (value === undefined) continue;\n const parameterType = parameterTypes.get(parameterName);\n requestParameters[parameterName] = parameterType\n ? encodeInvocableParameter(parameterType, value)\n : value;\n }\n\n const metadata = getSalesforceActionMetadata(actionType);\n if (!metadata) {\n throw new NonRetryableError(\n `Salesforce action type \"${name}\" is missing Salesforce metadata.`\n );\n }\n if (metadata.kind === \"crud\") {\n const collection = live.objects[metadata.objectType] as CollectionWithUtils | undefined;\n if (metadata.operation === \"create\") {\n const result = await opts.client.createRecord(metadata.objectType, requestParameters);\n assertSaveSucceeded(result);\n if (opts.live !== false) {\n await refreshConfirmedRecord(collection, result.id);\n }\n return;\n }\n const recordId = requestParameters.recordId;\n if (typeof recordId !== \"string\" || recordId.length === 0) {\n throw new NonRetryableError(`Salesforce ${metadata.operation} action requires recordId.`);\n }\n if (metadata.operation === \"update\") {\n const fields = Object.fromEntries(\n Object.entries(requestParameters).filter(\n ([parameterName]) => parameterName !== \"recordId\"\n )\n );\n const result = await opts.client.updateRecord(metadata.objectType, recordId, fields);\n assertSaveSucceeded(result);\n if (opts.live !== false) {\n await refreshConfirmedRecord(collection, result.id ?? recordId);\n }\n return;\n }\n assertSaveSucceeded(await opts.client.deleteRecord(metadata.objectType, recordId));\n if (opts.live !== false && collection) {\n await collection.utils.deleteByKey(recordId);\n }\n return;\n }\n\n const actionApiName = metadata.apiName;\n\n let results;\n try {\n results =\n metadata.kind === \"standard\"\n ? await opts.client.invokeStandardAction(actionApiName, [requestParameters])\n : await opts.client.invokeFlowAction(actionApiName, [requestParameters]);\n } catch (error) {\n if (isNonRetryableSalesforceError(error)) {\n throw new NonRetryableError(\n error instanceof Error ? error.message : \"Salesforce action invocation failed.\",\n { cause: error }\n );\n }\n throw error;\n }\n\n const result = results[0];\n if (!result) {\n throw new Error(`Salesforce action \"${actionApiName}\" returned no results.`);\n }\n if (!result.isSuccess) {\n const message =\n result.errors\n ?.map((entry) => entry.message)\n .filter(Boolean)\n .join(\"; \") || `Salesforce action \"${actionApiName}\" failed.`;\n throw new NonRetryableError(message);\n }\n\n if (opts.live !== false) {\n await invalidateEditedCollections(live.objects);\n }\n },\n runQueryFunction: async (name, parameters) => {\n const queryFunction = opts.ir.queryFunctionTypes.find((candidate) => candidate.name === name);\n if (!queryFunction) {\n throw new NonRetryableError(`Unknown Salesforce query function type \"${name}\".`);\n }\n const parameterTypes = new Map(\n queryFunction.parameters.map((parameter) => [parameter.name, parameter.type])\n );\n const requestParameters: Record<string, unknown> = {};\n for (const [parameterName, value] of Object.entries(parameters)) {\n if (value === undefined) continue;\n const parameterType = parameterTypes.get(parameterName);\n requestParameters[parameterName] = parameterType\n ? encodeInvocableParameter(parameterType, value)\n : value;\n }\n const results = await opts.client.invokeStandardAction(name, [requestParameters]);\n const result = results[0];\n if (!result) {\n throw new Error(`Salesforce standard query \"${name}\" returned no results.`);\n }\n if (!result.isSuccess) {\n throw new NonRetryableError(\n result.errors\n ?.map((entry) => entry.message)\n .filter(Boolean)\n .join(\"; \") || `Salesforce standard query \"${name}\" failed.`\n );\n }\n return codec.decodeValue(queryFunction.returnType, result.outputValues ?? {});\n },\n };\n}\n\nexport type CreateSalesforceOntologyBackendOptions<\n Context extends Record<string, unknown> = Record<string, unknown>,\n> = (\n | {\n client: SalesforceClient;\n subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;\n }\n | {\n createClient: (ir: OntologyIR, context: Context) => SalesforceClient | Promise<SalesforceClient>;\n subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;\n }\n) & {\n live?: boolean;\n};\n\nexport function createSalesforceOntologyBackend<\n Context extends Record<string, unknown> = Record<string, unknown>,\n>(opts: CreateSalesforceOntologyBackendOptions<Context>): OntologyBackendAdapterProvider<Context> {\n return async (ir, context) =>\n createSalesforceOntologyBackendAdapter({\n ir,\n client: \"client\" in opts ? opts.client : await opts.createClient(ir, context),\n subscribeToChangeEvents: opts.subscribeToChangeEvents,\n live: opts.live,\n });\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- export * from "./objectCollectionOptions.js";
2
- export * from "./createSalesforceOntologyBackendAdapter.js";
3
- export * from "./salesforceCodec.js";
4
- export * from "./convertLoadSubsetOptions.js";
5
- //# sourceMappingURL=index.d.ts.map
1
+ import { CompiledSoqlFilter, buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, isAlwaysFalseFilter, serializeSoqlLiteral } from "./convertLoadSubsetOptions.js";
2
+ import { ObjectCollectionConfig, ObjectCollectionOpts, ObjectCollectionUtils, SubscribeToSalesforceChangeEvents, objectCollectionOptions } from "./objectCollectionOptions.js";
3
+ import { CreateSalesforceOntologyBackendOptions, createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter } from "./createSalesforceOntologyBackendAdapter.js";
4
+ import { SalesforceCodec, createSalesforceCodec } from "./salesforceCodec.js";
5
+ export { CompiledSoqlFilter, CreateSalesforceOntologyBackendOptions, ObjectCollectionConfig, ObjectCollectionOpts, ObjectCollectionUtils, SalesforceCodec, SubscribeToSalesforceChangeEvents, buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, createSalesforceCodec, createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter, isAlwaysFalseFilter, objectCollectionOptions, serializeSoqlLiteral };
@@ -1,5 +1,5 @@
1
- export * from "./objectCollectionOptions.js";
2
- export * from "./createSalesforceOntologyBackendAdapter.js";
3
- export * from "./salesforceCodec.js";
4
- export * from "./convertLoadSubsetOptions.js";
5
- //# sourceMappingURL=index.js.map
1
+ import { buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, isAlwaysFalseFilter, serializeSoqlLiteral } from "./convertLoadSubsetOptions.js";
2
+ import { objectCollectionOptions } from "./objectCollectionOptions.js";
3
+ import { createSalesforceCodec } from "./salesforceCodec.js";
4
+ import { createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter } from "./createSalesforceOntologyBackendAdapter.js";
5
+ export { buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, createSalesforceCodec, createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter, isAlwaysFalseFilter, objectCollectionOptions, serializeSoqlLiteral };
@@ -1,36 +1,36 @@
1
+ import { SalesforceChangeEvent, SalesforceChangeEventSubscription, SalesforceChangeEventSubscriptionOptions, SalesforceClient } from "@party-stack/salesforce-client";
1
2
  import { CollectionConfig, InferSchemaOutput, StandardSchema, SyncConfig, UtilsRecord } from "@tanstack/db";
2
- import type { SalesforceChangeEvent, SalesforceChangeEventSubscription, SalesforceChangeEventSubscriptionOptions, SalesforceClient } from "@party-stack/salesforce-client";
3
- type WithRequired<T, K extends keyof T> = T & {
4
- [P in K]-?: T[P];
5
- };
3
+ //#region src/adapter/objectCollectionOptions.d.ts
4
+ type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P]; };
6
5
  type SalesforceObject = Record<string, unknown>;
7
6
  export type SubscribeToSalesforceChangeEvents = (objectType: string, listener: (event: SalesforceChangeEvent) => void, options?: SalesforceChangeEventSubscriptionOptions) => Promise<SalesforceChangeEventSubscription>;
8
7
  export interface ObjectCollectionUtils extends UtilsRecord {
9
- /**
10
- * Reset load-subset deduplication and await refetching active subsets.
11
- */
12
- invalidate: () => Promise<void>;
13
- /** Refetch one confirmed backend record and commit it locally. */
14
- refreshByKey: (key: string | number) => Promise<void>;
15
- /** Apply a confirmed backend deletion to the local collection. */
16
- deleteByKey: (key: string | number) => Promise<void>;
8
+ /**
9
+ * Reset load-subset deduplication and await refetching active subsets.
10
+ */
11
+ invalidate: () => Promise<void>;
12
+ /** Refetch one confirmed backend record and commit it locally. */
13
+ refreshByKey: (key: string | number) => Promise<void>;
14
+ /** Apply a confirmed backend deletion to the local collection. */
15
+ deleteByKey: (key: string | number) => Promise<void>;
17
16
  }
18
17
  export interface ObjectCollectionOpts {
19
- client: SalesforceClient;
20
- objectType: string;
21
- primaryKeyProperty: string;
22
- selectedProperties: string[];
23
- subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;
24
- decodeObject?: (object: Record<string, unknown>) => Record<string, unknown>;
18
+ client: SalesforceClient;
19
+ objectType: string;
20
+ primaryKeyProperty: string;
21
+ selectedProperties: string[];
22
+ subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;
23
+ decodeObject?: (object: Record<string, unknown>) => Record<string, unknown>;
25
24
  }
26
25
  export interface ObjectCollectionConfig<TSchema extends StandardSchema<SalesforceObject>> extends ObjectCollectionOpts, Omit<CollectionConfig<InferSchemaOutput<TSchema>, string | number, TSchema>, "sync" | "syncMode" | "getKey" | "onInsert" | "onUpdate" | "onDelete"> {
27
- schema: TSchema;
26
+ schema: TSchema;
28
27
  }
29
28
  export declare function objectCollectionOptions<TSchema extends StandardSchema<SalesforceObject>>(config: ObjectCollectionConfig<TSchema>): WithRequired<CollectionConfig<InferSchemaOutput<TSchema>, string | number, TSchema, ObjectCollectionUtils>, "schema">;
30
29
  export declare function objectCollectionOptions(config: ObjectCollectionOpts): {
31
- syncMode: "on-demand";
32
- sync: SyncConfig<Record<string, unknown>, string | number>;
33
- utils: ObjectCollectionUtils;
30
+ syncMode: "on-demand";
31
+ sync: SyncConfig<Record<string, unknown>, string | number>;
32
+ utils: ObjectCollectionUtils;
34
33
  };
34
+ //#endregion
35
35
  export {};
36
36
  //# sourceMappingURL=objectCollectionOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"objectCollectionOptions.d.ts","sourceRoot":"","sources":["../../src/adapter/objectCollectionOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,gBAAgB,EAEhB,iBAAiB,EAEjB,cAAc,EACd,UAAU,EACV,WAAW,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACR,qBAAqB,EACrB,iCAAiC,EACjC,wCAAwC,EACxC,gBAAgB,EACnB,MAAM,gCAAgC,CAAC;AAUxC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAEnE,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,MAAM,MAAM,iCAAiC,GAAG,CAC5C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,CACN,KAAK,EAAE,qBAAqB,KAC3B,IAAI,EACT,OAAO,CAAC,EAAE,wCAAwC,KACjD,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAEhD,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACtD;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,kEAAkE;IAClE,YAAY,EAAE,CACV,GAAG,EAAE,MAAM,GAAG,MAAM,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,kEAAkE;IAClE,WAAW,EAAE,CACT,GAAG,EAAE,MAAM,GAAG,MAAM,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAmYD,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,uBAAuB,CAAC,EAAE,iCAAiC,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,sBAAsB,CAAC,OAAO,SAAS,cAAc,CAAC,gBAAgB,CAAC,CACpF,SAAQ,oBAAoB,EACxB,IAAI,CACA,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EACtE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CACxE;IACL,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,cAAc,CAAC,gBAAgB,CAAC,EACpF,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACxC,YAAY,CACX,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,qBAAqB,CAAC,EAC7F,QAAQ,CACX,CAAC;AACF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG;IACnE,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC3D,KAAK,EAAE,qBAAqB,CAAC;CAChC,CAAC"}
1
+ {"version":3,"file":"objectCollectionOptions.d.ts","names":[],"sources":["../../src/adapter/objectCollectionOptions.ts"],"mappings":";;;KAyBK,aAAa,GAAG,gBAAgB,KAAK,OAAO,KAAK,MAAM,EAAE;KAEzD,mBAAmB;YAEZ,qCACR,oBACA,WAAW,OAAO,gCAClB,UAAU,6CACT,QAAQ;iBAEI,8BAA8B;;;;EAI3C,kBAAkB;;EAElB,eAAe,yBAAyB;;EAExC,cAAc,yBAAyB;;iBAgT1B;EACb,QAAQ;EACR;EACA;EACA;EACA,0BAA0B;EAC1B,gBAAgB,QAAQ,4BAA4B;;iBAGvC,uBAAuB,gBAAgB,eAAe,2BAE/D,sBACA,KACI,iBAAiB,kBAAkB,2BAA2B;EAGtE,QAAQ;;wBAGI,wBAAwB,gBAAgB,eAAe,mBACnE,QAAQ,uBAAuB,WAChC,aACC,iBAAiB,kBAAkB,2BAA2B,SAAS;wBAG3D,wBAAwB,QAAQ;EAC5C;EACA,MAAM,WAAW;EACjB,OAAO"}