@osdk/client 2.2.0-beta.5 → 2.2.0-beta.6

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 (43) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/build/browser/internal/conversions/modernToLegacyGroupByClause.js +7 -0
  3. package/build/browser/internal/conversions/modernToLegacyGroupByClause.js.map +1 -1
  4. package/build/browser/object/AttachmentUpload.js +3 -0
  5. package/build/browser/object/AttachmentUpload.js.map +1 -1
  6. package/build/browser/object/aggregate.test.js +12 -2
  7. package/build/browser/object/aggregate.test.js.map +1 -1
  8. package/build/browser/observable/internal/Store.js +1 -1
  9. package/build/browser/observable/internal/Store.js.map +1 -1
  10. package/build/browser/util/UserAgent.js +1 -1
  11. package/build/browser/util/toDataValue.js +10 -2
  12. package/build/browser/util/toDataValue.js.map +1 -1
  13. package/build/browser/util/toDataValueQueries.js +10 -2
  14. package/build/browser/util/toDataValueQueries.js.map +1 -1
  15. package/build/cjs/{chunk-T5UE6BI7.cjs → chunk-2FVV5A63.cjs} +41 -34
  16. package/build/cjs/chunk-2FVV5A63.cjs.map +1 -0
  17. package/build/cjs/chunk-X7WGNFZ4.cjs +5 -5
  18. package/build/cjs/chunk-X7WGNFZ4.cjs.map +1 -1
  19. package/build/cjs/graphql-JJX5MZPQ.cjs +263 -263
  20. package/build/cjs/graphql-JJX5MZPQ.cjs.map +1 -1
  21. package/build/cjs/index.cjs +85 -66
  22. package/build/cjs/index.cjs.map +1 -1
  23. package/build/cjs/public/internal.cjs +4 -4
  24. package/build/cjs/public/internal.cjs.map +1 -1
  25. package/build/cjs/public/unstable-do-not-use.cjs +64 -35
  26. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  27. package/build/esm/internal/conversions/modernToLegacyGroupByClause.js +7 -0
  28. package/build/esm/internal/conversions/modernToLegacyGroupByClause.js.map +1 -1
  29. package/build/esm/object/AttachmentUpload.js +3 -0
  30. package/build/esm/object/AttachmentUpload.js.map +1 -1
  31. package/build/esm/object/aggregate.test.js +12 -2
  32. package/build/esm/object/aggregate.test.js.map +1 -1
  33. package/build/esm/observable/internal/Store.js +1 -1
  34. package/build/esm/observable/internal/Store.js.map +1 -1
  35. package/build/esm/util/UserAgent.js +1 -1
  36. package/build/esm/util/toDataValue.js +10 -2
  37. package/build/esm/util/toDataValue.js.map +1 -1
  38. package/build/esm/util/toDataValueQueries.js +10 -2
  39. package/build/esm/util/toDataValueQueries.js.map +1 -1
  40. package/build/types/object/AttachmentUpload.d.ts +3 -0
  41. package/build/types/object/AttachmentUpload.d.ts.map +1 -1
  42. package/package.json +8 -8
  43. package/build/cjs/chunk-T5UE6BI7.cjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @osdk/client
2
2
 
3
+ ## 2.2.0-beta.6
4
+
5
+ ### Minor Changes
6
+
7
+ - cddfbf9: Adds default value option to group by
8
+ - ea4e4b1: Fix attachments to be upload sequentially rather than in parallel.
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies [b68adea]
13
+ - Updated dependencies [cddfbf9]
14
+ - Updated dependencies [a6e5f89]
15
+ - @osdk/generator-converters@2.2.0-beta.6
16
+ - @osdk/api@2.2.0-beta.6
17
+ - @osdk/client.unstable@2.2.0-beta.6
18
+
3
19
  ## 2.2.0-beta.5
4
20
 
5
21
  ### Minor Changes
@@ -32,6 +32,13 @@ export function modernToLegacyGroupByClause(groupByClause) {
32
32
  maxGroupCount: type.$exactWithLimit
33
33
  }];
34
34
  }
35
+ } else if ("$exact" in type) {
36
+ return [{
37
+ type: "exact",
38
+ field,
39
+ maxGroupCount: type.$exact?.$limit ?? undefined,
40
+ defaultValue: type.$exact.$defaultValue ?? undefined
41
+ }];
35
42
  } else if ("$fixedWidth" in type) {
36
43
  return [{
37
44
  type: "fixedWidth",
@@ -1 +1 @@
1
- {"version":3,"file":"modernToLegacyGroupByClause.js","names":["DurationMapping","modernToLegacyGroupByClause","groupByClause","Object","entries","flatMap","field","type","maxGroupCount","$exactWithLimit","fixedWidth","$fixedWidth","ranges","$ranges","map","range","convertRange","value","$duration","unit","startValue","endValue"],"sources":["modernToLegacyGroupByClause.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AllGroupByValues, GroupByClause, GroupByRange } from \"@osdk/api\";\nimport { DurationMapping } from \"@osdk/api\";\nimport type {\n AggregationGroupByV2,\n AggregationRangeV2,\n} from \"@osdk/foundry.ontologies\";\n\n/** @internal */\nexport function modernToLegacyGroupByClause(\n groupByClause: GroupByClause<any> | undefined,\n) {\n if (!groupByClause) return [];\n\n return Object.entries(\n groupByClause as Record<string, AllGroupByValues>,\n ).flatMap<AggregationGroupByV2>(([field, type]) => {\n if (type === \"exact\") {\n return [{ type, field }];\n } else if (\"$exactWithLimit\" in type) {\n {\n return [\n {\n type: \"exact\",\n field,\n maxGroupCount: type.$exactWithLimit,\n },\n ];\n }\n } else if (\"$fixedWidth\" in type) {\n return [{\n type: \"fixedWidth\",\n field,\n fixedWidth: type.$fixedWidth,\n }];\n } else if (\"$ranges\" in type) {\n return [{\n type: \"ranges\",\n field,\n ranges: type.$ranges.map(range => convertRange(range)),\n }];\n } else if (\"$duration\" in type) {\n return [{\n type: \"duration\",\n field,\n value: type.$duration[0],\n unit: DurationMapping[type.$duration[1]],\n }];\n } else return [];\n });\n}\n\nfunction convertRange(\n range: GroupByRange<number | string>,\n): AggregationRangeV2 {\n return { startValue: range[0], endValue: range[1] };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,eAAe,QAAQ,WAAW;AAM3C;AACA,OAAO,SAASC,2BAA2BA,CACzCC,aAA6C,EAC7C;EACA,IAAI,CAACA,aAAa,EAAE,OAAO,EAAE;EAE7B,OAAOC,MAAM,CAACC,OAAO,CACnBF,aACF,CAAC,CAACG,OAAO,CAAuB,CAAC,CAACC,KAAK,EAAEC,IAAI,CAAC,KAAK;IACjD,IAAIA,IAAI,KAAK,OAAO,EAAE;MACpB,OAAO,CAAC;QAAEA,IAAI;QAAED;MAAM,CAAC,CAAC;IAC1B,CAAC,MAAM,IAAI,iBAAiB,IAAIC,IAAI,EAAE;MACpC;QACE,OAAO,CACL;UACEA,IAAI,EAAE,OAAO;UACbD,KAAK;UACLE,aAAa,EAAED,IAAI,CAACE;QACtB,CAAC,CACF;MACH;IACF,CAAC,MAAM,IAAI,aAAa,IAAIF,IAAI,EAAE;MAChC,OAAO,CAAC;QACNA,IAAI,EAAE,YAAY;QAClBD,KAAK;QACLI,UAAU,EAAEH,IAAI,CAACI;MACnB,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,SAAS,IAAIJ,IAAI,EAAE;MAC5B,OAAO,CAAC;QACNA,IAAI,EAAE,QAAQ;QACdD,KAAK;QACLM,MAAM,EAAEL,IAAI,CAACM,OAAO,CAACC,GAAG,CAACC,KAAK,IAAIC,YAAY,CAACD,KAAK,CAAC;MACvD,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,WAAW,IAAIR,IAAI,EAAE;MAC9B,OAAO,CAAC;QACNA,IAAI,EAAE,UAAU;QAChBD,KAAK;QACLW,KAAK,EAAEV,IAAI,CAACW,SAAS,CAAC,CAAC,CAAC;QACxBC,IAAI,EAAEnB,eAAe,CAACO,IAAI,CAACW,SAAS,CAAC,CAAC,CAAC;MACzC,CAAC,CAAC;IACJ,CAAC,MAAM,OAAO,EAAE;EAClB,CAAC,CAAC;AACJ;AAEA,SAASF,YAAYA,CACnBD,KAAoC,EAChB;EACpB,OAAO;IAAEK,UAAU,EAAEL,KAAK,CAAC,CAAC,CAAC;IAAEM,QAAQ,EAAEN,KAAK,CAAC,CAAC;EAAE,CAAC;AACrD","ignoreList":[]}
1
+ {"version":3,"file":"modernToLegacyGroupByClause.js","names":["DurationMapping","modernToLegacyGroupByClause","groupByClause","Object","entries","flatMap","field","type","maxGroupCount","$exactWithLimit","$exact","$limit","undefined","defaultValue","$defaultValue","fixedWidth","$fixedWidth","ranges","$ranges","map","range","convertRange","value","$duration","unit","startValue","endValue"],"sources":["modernToLegacyGroupByClause.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AllGroupByValues, GroupByClause, GroupByRange } from \"@osdk/api\";\nimport { DurationMapping } from \"@osdk/api\";\nimport type {\n AggregationGroupByV2,\n AggregationRangeV2,\n} from \"@osdk/foundry.ontologies\";\n\n/** @internal */\nexport function modernToLegacyGroupByClause(\n groupByClause: GroupByClause<any> | undefined,\n) {\n if (!groupByClause) return [];\n\n return Object.entries(\n groupByClause as Record<string, AllGroupByValues>,\n ).flatMap<AggregationGroupByV2>(([field, type]) => {\n if (type === \"exact\") {\n return [{ type, field }];\n } else if (\"$exactWithLimit\" in type) {\n {\n return [\n {\n type: \"exact\",\n field,\n maxGroupCount: type.$exactWithLimit,\n },\n ];\n }\n } else if (\"$exact\" in type) {\n return [\n {\n type: \"exact\",\n field,\n maxGroupCount: type.$exact?.$limit ?? undefined,\n defaultValue: type.$exact.$defaultValue ?? undefined,\n },\n ];\n } else if (\"$fixedWidth\" in type) {\n return [{\n type: \"fixedWidth\",\n field,\n fixedWidth: type.$fixedWidth,\n }];\n } else if (\"$ranges\" in type) {\n return [{\n type: \"ranges\",\n field,\n ranges: type.$ranges.map(range => convertRange(range)),\n }];\n } else if (\"$duration\" in type) {\n return [{\n type: \"duration\",\n field,\n value: type.$duration[0],\n unit: DurationMapping[type.$duration[1]],\n }];\n } else return [];\n });\n}\n\nfunction convertRange(\n range: GroupByRange<number | string>,\n): AggregationRangeV2 {\n return { startValue: range[0], endValue: range[1] };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,eAAe,QAAQ,WAAW;AAM3C;AACA,OAAO,SAASC,2BAA2BA,CACzCC,aAA6C,EAC7C;EACA,IAAI,CAACA,aAAa,EAAE,OAAO,EAAE;EAE7B,OAAOC,MAAM,CAACC,OAAO,CACnBF,aACF,CAAC,CAACG,OAAO,CAAuB,CAAC,CAACC,KAAK,EAAEC,IAAI,CAAC,KAAK;IACjD,IAAIA,IAAI,KAAK,OAAO,EAAE;MACpB,OAAO,CAAC;QAAEA,IAAI;QAAED;MAAM,CAAC,CAAC;IAC1B,CAAC,MAAM,IAAI,iBAAiB,IAAIC,IAAI,EAAE;MACpC;QACE,OAAO,CACL;UACEA,IAAI,EAAE,OAAO;UACbD,KAAK;UACLE,aAAa,EAAED,IAAI,CAACE;QACtB,CAAC,CACF;MACH;IACF,CAAC,MAAM,IAAI,QAAQ,IAAIF,IAAI,EAAE;MAC3B,OAAO,CACL;QACEA,IAAI,EAAE,OAAO;QACbD,KAAK;QACLE,aAAa,EAAED,IAAI,CAACG,MAAM,EAAEC,MAAM,IAAIC,SAAS;QAC/CC,YAAY,EAAEN,IAAI,CAACG,MAAM,CAACI,aAAa,IAAIF;MAC7C,CAAC,CACF;IACH,CAAC,MAAM,IAAI,aAAa,IAAIL,IAAI,EAAE;MAChC,OAAO,CAAC;QACNA,IAAI,EAAE,YAAY;QAClBD,KAAK;QACLS,UAAU,EAAER,IAAI,CAACS;MACnB,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,SAAS,IAAIT,IAAI,EAAE;MAC5B,OAAO,CAAC;QACNA,IAAI,EAAE,QAAQ;QACdD,KAAK;QACLW,MAAM,EAAEV,IAAI,CAACW,OAAO,CAACC,GAAG,CAACC,KAAK,IAAIC,YAAY,CAACD,KAAK,CAAC;MACvD,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,WAAW,IAAIb,IAAI,EAAE;MAC9B,OAAO,CAAC;QACNA,IAAI,EAAE,UAAU;QAChBD,KAAK;QACLgB,KAAK,EAAEf,IAAI,CAACgB,SAAS,CAAC,CAAC,CAAC;QACxBC,IAAI,EAAExB,eAAe,CAACO,IAAI,CAACgB,SAAS,CAAC,CAAC,CAAC;MACzC,CAAC,CAAC;IACJ,CAAC,MAAM,OAAO,EAAE;EAClB,CAAC,CAAC;AACJ;AAEA,SAASF,YAAYA,CACnBD,KAAoC,EAChB;EACpB,OAAO;IAAEK,UAAU,EAAEL,KAAK,CAAC,CAAC,CAAC;IAAEM,QAAQ,EAAEN,KAAK,CAAC,CAAC;EAAE,CAAC;AACrD","ignoreList":[]}
@@ -17,6 +17,9 @@
17
17
  export function isAttachmentUpload(o) {
18
18
  return typeof o === `object` && "name" in o && "data" in o && o.data instanceof Blob;
19
19
  }
20
+ export function isAttachmentFile(o) {
21
+ return typeof o === "object" && o instanceof Blob && "name" in o;
22
+ }
20
23
  export function createAttachmentUpload(data, name) {
21
24
  return {
22
25
  data,
@@ -1 +1 @@
1
- {"version":3,"file":"AttachmentUpload.js","names":["isAttachmentUpload","o","data","Blob","createAttachmentUpload","name"],"sources":["AttachmentUpload.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AttachmentUpload } from \"@osdk/api\";\n\nexport function isAttachmentUpload(o: any): o is AttachmentUpload {\n return typeof o === `object` && \"name\" in o && \"data\" in o\n && o.data instanceof Blob;\n}\n\nexport function createAttachmentUpload(\n data: Blob,\n name: string,\n): AttachmentUpload {\n return { data, name };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAO,SAASA,kBAAkBA,CAACC,CAAM,EAAyB;EAChE,OAAO,OAAOA,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAIA,CAAC,IAAI,MAAM,IAAIA,CAAC,IACrDA,CAAC,CAACC,IAAI,YAAYC,IAAI;AAC7B;AAEA,OAAO,SAASC,sBAAsBA,CACpCF,IAAU,EACVG,IAAY,EACM;EAClB,OAAO;IAAEH,IAAI;IAAEG;EAAK,CAAC;AACvB","ignoreList":[]}
1
+ {"version":3,"file":"AttachmentUpload.js","names":["isAttachmentUpload","o","data","Blob","isAttachmentFile","createAttachmentUpload","name"],"sources":["AttachmentUpload.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AttachmentUpload } from \"@osdk/api\";\n\nexport function isAttachmentUpload(o: any): o is AttachmentUpload {\n return typeof o === `object` && \"name\" in o && \"data\" in o\n && o.data instanceof Blob;\n}\n\nexport function isAttachmentFile(\n o: any,\n): o is Blob & { readonly name: string } {\n return typeof o === \"object\" && o instanceof Blob && \"name\" in o;\n}\n\nexport function createAttachmentUpload(\n data: Blob,\n name: string,\n): AttachmentUpload {\n return { data, name };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAO,SAASA,kBAAkBA,CAACC,CAAM,EAAyB;EAChE,OAAO,OAAOA,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAIA,CAAC,IAAI,MAAM,IAAIA,CAAC,IACrDA,CAAC,CAACC,IAAI,YAAYC,IAAI;AAC7B;AAEA,OAAO,SAASC,gBAAgBA,CAC9BH,CAAM,EACiC;EACvC,OAAO,OAAOA,CAAC,KAAK,QAAQ,IAAIA,CAAC,YAAYE,IAAI,IAAI,MAAM,IAAIF,CAAC;AAClE;AAEA,OAAO,SAASI,sBAAsBA,CACpCH,IAAU,EACVI,IAAY,EACM;EAClB,OAAO;IAAEJ,IAAI;IAAEI;EAAK,CAAC;AACvB","ignoreList":[]}
@@ -140,7 +140,13 @@ describe("aggregate", () => {
140
140
  date: {
141
141
  $ranges: [["2024-01-02", "2024-01-09"]]
142
142
  },
143
- boolean: "exact"
143
+ boolean: "exact",
144
+ double: {
145
+ "$exact": {
146
+ $defaultValue: "default",
147
+ $limit: 300
148
+ }
149
+ }
144
150
  }
145
151
  });
146
152
  expectType(grouped);
@@ -155,6 +161,7 @@ describe("aggregate", () => {
155
161
  expectType(grouped[0].$group.dateTime);
156
162
  expectType(grouped[0].$group.date);
157
163
  expectType(grouped[0].$group.boolean);
164
+ expectType(grouped[0].$group.double);
158
165
  expectType({
159
166
  $select: {
160
167
  "id:approximateDistinct": "unordered",
@@ -188,7 +195,10 @@ describe("aggregate", () => {
188
195
  wrongKey: "don't work",
189
196
  string: "exact",
190
197
  id: {
191
- $exactWithLimit: 10
198
+ $exact: {
199
+ $limit: 10,
200
+ $defaultValue: "default"
201
+ }
192
202
  },
193
203
  integer: {
194
204
  $ranges: [[1, 2]]
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.test.js","names":["objectTypeWithAllPropertyTypes","Todo","expectType","beforeAll","describe","expect","expectTypeOf","it","vi","createClient","createMinimalClient","aggregate","metadata","expectsClientVersion","ontologyRid","ontologyApiName","userAgent","mockFetch","clientCtx","client","fn","mockResolvedValue","ok","status","json","Promise","resolve","aggregationResponse","undefined","accuracy","data","group","string","metrics","name","value","toEqualTypeOf","notGrouped","type","objectType","$select","toHaveBeenCalledWith","body","JSON","stringify","method","headers","anything","approximateDistinct","exactDistinct","id","max","avg","$count","grouped","$groupBy","$exactWithLimit","integer","$ranges","short","float","$fixedWidth","dateTime","$duration","date","boolean","$group","wrongSelectKey","wrongKey","toBeCallableWith","direction","timestamp"],"sources":["aggregate.test.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n AggregateOpts,\n AggregateOptsThatErrorsAndDisallowsOrderingWithMultipleGroupBy,\n GroupByClause,\n ValidAggregationKeys,\n} from \"@osdk/api\";\nimport type { Employee } from \"@osdk/client.test.ontology\";\nimport {\n objectTypeWithAllPropertyTypes,\n Todo,\n} from \"@osdk/client.test.ontology\";\nimport type { AggregateObjectsResponseV2 } from \"@osdk/foundry.ontologies\";\nimport type { TypeOf } from \"ts-expect\";\nimport { expectType } from \"ts-expect\";\nimport {\n beforeAll,\n describe,\n expect,\n expectTypeOf,\n it,\n type Mock,\n vi,\n} from \"vitest\";\nimport type { Client } from \"../Client.js\";\nimport { createClient } from \"../createClient.js\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"./aggregate.js\";\n\nconst metadata = {\n expectsClientVersion: \"0.0.0\",\n ontologyRid: \"ri.a.b.c.d\",\n ontologyApiName: \"apiName\",\n userAgent: \"\",\n};\n\nlet mockFetch: Mock;\nlet clientCtx: MinimalClient;\nlet client: Client;\n\nbeforeAll(() => {\n mockFetch = vi.fn();\n\n mockFetch.mockResolvedValue({\n ok: true,\n status: 200,\n json: () => new Promise((resolve) => resolve(aggregationResponse)),\n });\n\n clientCtx = createMinimalClient(\n metadata,\n \"https://host.com\",\n async () => \"myAccessToken\",\n {},\n mockFetch,\n );\n\n client = createClient(\n \"https://host.com\",\n metadata.ontologyRid,\n async () => \"\",\n undefined,\n mockFetch,\n );\n});\n\nconst aggregationResponse: AggregateObjectsResponseV2 = {\n accuracy: \"APPROXIMATE\",\n data: [\n {\n group: {\n string: \"hello\",\n },\n metrics: [\n {\n name: \"string.approximateDistinct\",\n value: 1,\n },\n {\n name: \"string.exactDistinct\",\n value: 1,\n },\n {\n name: \"id.max\",\n value: 1,\n },\n {\n name: \"id.avg\",\n value: 1,\n },\n ],\n },\n ],\n};\n\ndescribe(\"aggregate\", () => {\n it(\"works\", async () => {\n expectTypeOf<ValidAggregationKeys<Todo>>().toEqualTypeOf<\n | \"$count\"\n | \"id:min\"\n | \"id:max\"\n | \"id:sum\"\n | \"id:avg\"\n | \"id:approximateDistinct\"\n | \"id:exactDistinct\"\n | \"text:approximateDistinct\"\n | \"text:exactDistinct\"\n >;\n\n const notGrouped = await aggregate(\n clientCtx,\n objectTypeWithAllPropertyTypes,\n {\n type: \"base\",\n objectType: \"ToDo\",\n },\n {\n $select: {\n \"string:approximateDistinct\": \"unordered\",\n \"string:exactDistinct\": \"unordered\",\n \"id:max\": \"unordered\",\n \"id:avg\": \"unordered\",\n \"$count\": \"unordered\",\n },\n },\n );\n\n expect(mockFetch).toHaveBeenCalledWith(\n \"https://host.com/api/v2/ontologies/ri.a.b.c.d/objectSets/aggregate\",\n {\n body: JSON.stringify({\n \"objectSet\": { \"type\": \"base\", \"objectType\": \"ToDo\" },\n \"groupBy\": [],\n \"aggregation\": [\n {\n \"type\": \"approximateDistinct\",\n \"name\": \"string.approximateDistinct\",\n \"field\": \"string\",\n },\n {\n \"type\": \"exactDistinct\",\n \"name\": \"string.exactDistinct\",\n \"field\": \"string\",\n },\n { \"type\": \"max\", \"name\": \"id.max\", \"field\": \"id\" },\n { \"type\": \"avg\", \"name\": \"id.avg\", \"field\": \"id\" },\n { \"type\": \"count\", \"name\": \"count\" },\n ],\n }),\n method: \"POST\",\n headers: expect.anything(),\n },\n );\n\n expectType<number>(notGrouped.string.approximateDistinct);\n expectType<number>(notGrouped.string.exactDistinct);\n expectType<number | undefined>(notGrouped.id.max);\n expectType<number | undefined>(notGrouped.id.avg);\n expectType<number>(notGrouped.$count);\n expectType<\n TypeOf<\n {\n other: any;\n },\n typeof notGrouped\n >\n >(false); // subSelect should hide unused keys\n\n const grouped = await client(objectTypeWithAllPropertyTypes).aggregate(\n {\n $select: {\n \"id:approximateDistinct\": \"unordered\",\n \"id:exactDistinct\": \"unordered\",\n \"id:max\": \"unordered\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n string: \"exact\",\n id: { $exactWithLimit: 10 },\n integer: { $ranges: [[1, 2]] },\n short: {\n $ranges: [[2, 3], [4, 5]],\n },\n float: { $fixedWidth: 10 },\n dateTime: { $duration: [10, \"seconds\"] },\n date: { $ranges: [[\"2024-01-02\", \"2024-01-09\"]] },\n boolean: \"exact\",\n },\n },\n );\n expectType<Array<any>>(grouped);\n expectType<string | undefined>(grouped[0].$group.string);\n expectType<number>(grouped[0].id.approximateDistinct);\n expectType<number>(grouped[0].id.exactDistinct);\n expectType<number>(grouped[0].$group.id);\n expectType<number>(grouped[0].$count);\n expectType<{ startValue: number; endValue: number }>(\n grouped[0].$group.integer,\n );\n expectType<{ startValue: number; endValue: number }>(\n grouped[0].$group.short,\n );\n expectType<number | undefined>(grouped[0].$group.float);\n expectType<string | undefined>(grouped[0].$group.dateTime);\n expectType<{ startValue: string; endValue: string }>(\n grouped[0].$group.date,\n );\n expectType<boolean | undefined>(grouped[0].$group.boolean);\n\n expectType<\n AggregateOptsThatErrorsAndDisallowsOrderingWithMultipleGroupBy<\n objectTypeWithAllPropertyTypes,\n {\n $select: {\n \"id:approximateDistinct\": \"unordered\";\n \"$count\": \"unordered\";\n };\n $groupBy: {\n string: \"exact\";\n id: { $exactWithLimit: 10 };\n integer: { $ranges: [[1, 2]] };\n short: {\n $ranges: [[2, 3], [4, 5]];\n };\n float: { $fixedWidth: 10 };\n };\n }\n >\n >({\n $select: {\n \"id:approximateDistinct\": \"unordered\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n string: \"exact\",\n id: { $exactWithLimit: 10 },\n integer: { $ranges: [[1, 2]] },\n short: {\n $ranges: [[2, 3], [4, 5]],\n },\n float: { $fixedWidth: 10 },\n },\n });\n\n expectType<\n AggregateOptsThatErrorsAndDisallowsOrderingWithMultipleGroupBy<\n objectTypeWithAllPropertyTypes,\n {\n $select: {\n \"id:approximateDistinct\": \"unordered\";\n \"wrongSelectKey\": \"don't work\";\n \"$count\": \"unordered\";\n };\n $groupBy: {\n wrongKey: \"don't work\";\n text: \"exact\";\n id: { $exactWithLimit: 10 };\n integer: { $ranges: [[1, 2]] };\n short: {\n $ranges: [[2, 3], [4, 5]];\n };\n float: { $fixedWidth: 10 };\n };\n }\n >\n >({\n $select: {\n id: \"approximateDistinct\",\n // @ts-expect-error\n wrongSelectKey: \"don't work\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n // @ts-expect-error\n wrongKey: \"don't work\",\n string: \"exact\",\n id: { $exactWithLimit: 10 },\n integer: { $ranges: [[1, 2]] },\n short: {\n $ranges: [[2, 3], [4, 5]],\n },\n float: { $fixedWidth: 10 },\n },\n });\n\n expectTypeOf<\n typeof aggregate<objectTypeWithAllPropertyTypes, {\n $select: {\n \"id:approximateDistinct\": \"unordered\";\n \"wrongSelectKey\": \"wrong key\";\n \"$count\": \"unordered\";\n };\n $groupBy: {\n string: \"exact\";\n wrongKey: \"wrongKey\";\n id: { $exactWithLimit: 10 };\n integer: { $ranges: [[1, 2]] };\n short: {\n $ranges: [[2, 3], [4, 5]];\n };\n float: { $fixedWidth: 10 };\n };\n }>\n >().toBeCallableWith(\n clientCtx,\n objectTypeWithAllPropertyTypes,\n {\n type: \"base\",\n objectType: \"ToDo\",\n },\n {\n $select: {\n \"id:approximateDistinct\": \"unordered\",\n // @ts-expect-error\n \"wrongSelectKey\": \"don't work\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n string: \"exact\",\n // @ts-expect-error\n wrongKey: \"wrongKey\",\n id: { $exactWithLimit: 10 },\n integer: { $ranges: [[1, 2]] },\n short: {\n $ranges: [[2, 3], [4, 5]],\n },\n float: { $fixedWidth: 10 },\n },\n },\n );\n\n expectType<GroupByClause<objectTypeWithAllPropertyTypes>>({\n dateTime: { $duration: [10, \"seconds\"] },\n date: { $duration: [1, \"years\"] },\n });\n\n // Can't use value greater than 1 for years\n expectType<GroupByClause<objectTypeWithAllPropertyTypes>>({\n // @ts-expect-error\n date: { $duration: [10, \"years\"] },\n });\n\n // Can't use arbitrary string for time unit\n expectType<GroupByClause<objectTypeWithAllPropertyTypes>>({\n // @ts-expect-error\n dateTime: { $duration: [1, \"nonexistentTimeUnit\"] },\n });\n\n // Can't use time unit smaller than days for date type\n expectType<GroupByClause<objectTypeWithAllPropertyTypes>>({\n // @ts-expect-error\n date: { $duration: [1, \"seconds\"] },\n });\n });\n\n it(\"works with $orderBy (no groups)\", async () => {\n const notGrouped = await aggregate(\n clientCtx,\n objectTypeWithAllPropertyTypes,\n {\n type: \"base\",\n objectType: \"ToDo\",\n },\n {\n $select: {\n \"string:approximateDistinct\": \"asc\",\n \"id:exactDistinct\": \"asc\",\n \"id:avg\": \"desc\",\n \"id:max\": \"asc\",\n \"$count\": \"unordered\",\n },\n },\n );\n\n expect(mockFetch).toHaveBeenCalledWith(\n \"https://host.com/api/v2/ontologies/ri.a.b.c.d/objectSets/aggregate\",\n {\n body: JSON.stringify({\n \"objectSet\": { \"type\": \"base\", \"objectType\": \"ToDo\" },\n \"groupBy\": [],\n \"aggregation\": [\n {\n \"type\": \"approximateDistinct\",\n \"name\": \"string.approximateDistinct\",\n direction: \"ASC\",\n \"field\": \"string\",\n },\n {\n \"type\": \"exactDistinct\",\n \"name\": \"id.exactDistinct\",\n direction: \"ASC\",\n \"field\": \"id\",\n },\n {\n \"type\": \"avg\",\n \"name\": \"id.avg\",\n direction: \"DESC\",\n \"field\": \"id\",\n },\n {\n \"type\": \"max\",\n \"name\": \"id.max\",\n direction: \"ASC\",\n \"field\": \"id\",\n },\n { \"type\": \"count\", \"name\": \"count\" },\n ],\n }),\n method: \"POST\",\n headers: expect.anything(),\n },\n );\n\n expectType<number>(notGrouped.string.approximateDistinct);\n expectType<number>(notGrouped.id.exactDistinct);\n expectType<number>(notGrouped.id.max);\n expectType<number>(notGrouped.id.avg);\n expectType<number>(notGrouped.$count);\n expectType<\n TypeOf<\n {\n other: any;\n },\n typeof notGrouped\n >\n >(false); // subselect should hide unused keys\n });\n\n it(\"works with $orderBy (1 group)\", async () => {\n const grouped = await aggregate(\n clientCtx,\n objectTypeWithAllPropertyTypes,\n {\n type: \"base\",\n objectType: \"ToDo\",\n },\n {\n $select: {\n \"id:max\": \"desc\",\n \"string:approximateDistinct\": \"asc\",\n \"id:avg\": \"unordered\",\n \"$count\": \"unordered\",\n \"string:exactDistinct\": \"desc\",\n },\n $groupBy: {\n id: \"exact\",\n },\n },\n );\n\n expect(mockFetch).toHaveBeenCalledWith(\n \"https://host.com/api/v2/ontologies/ri.a.b.c.d/objectSets/aggregate\",\n {\n body: JSON.stringify({\n \"objectSet\": { \"type\": \"base\", \"objectType\": \"ToDo\" },\n \"groupBy\": [{ \"type\": \"exact\", \"field\": \"id\" }],\n \"aggregation\": [\n {\n \"type\": \"max\",\n \"name\": \"id.max\",\n direction: \"DESC\",\n \"field\": \"id\",\n },\n {\n \"type\": \"approximateDistinct\",\n \"name\": \"string.approximateDistinct\",\n direction: \"ASC\",\n \"field\": \"string\",\n },\n { \"type\": \"avg\", \"name\": \"id.avg\", \"field\": \"id\" },\n { \"type\": \"count\", \"name\": \"count\" },\n {\n \"type\": \"exactDistinct\",\n \"name\": \"string.exactDistinct\",\n direction: \"DESC\",\n \"field\": \"string\",\n },\n ],\n }),\n method: \"POST\",\n headers: expect.anything(),\n },\n );\n\n expectType<number>(grouped[0].string.approximateDistinct);\n expectType<number>(grouped[0].id.max);\n expectType<number>(grouped[0].id.avg);\n expectType<number>(grouped[0].$count);\n expectType<number>(grouped[0].string.exactDistinct);\n expectType<\n TypeOf<\n {\n other: any;\n },\n typeof grouped\n >\n >(false); // subselect should hide unused keys\n });\n\n it(\"prohibits ordered select with multiple groupBy\", async () => {\n await client(Todo).aggregate(\n {\n $select: {\n // @ts-expect-error\n \"id:max\": \"desc\",\n // @ts-expect-error\n \"text:approximateDistinct\": \"asc\",\n // @ts-expect-error\n \"text:exactDistinct\": \"desc\",\n \"id:avg\": \"unordered\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n id: \"exact\",\n timestamp: \"exact\",\n },\n },\n );\n });\n\n it(\"works with where: todo\", async () => {\n const f: AggregateOpts<\n Employee\n > = {\n $select: {\n \"office:approximateDistinct\": \"unordered\",\n },\n };\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"aggregate.test.js","names":["objectTypeWithAllPropertyTypes","Todo","expectType","beforeAll","describe","expect","expectTypeOf","it","vi","createClient","createMinimalClient","aggregate","metadata","expectsClientVersion","ontologyRid","ontologyApiName","userAgent","mockFetch","clientCtx","client","fn","mockResolvedValue","ok","status","json","Promise","resolve","aggregationResponse","undefined","accuracy","data","group","string","metrics","name","value","toEqualTypeOf","notGrouped","type","objectType","$select","toHaveBeenCalledWith","body","JSON","stringify","method","headers","anything","approximateDistinct","exactDistinct","id","max","avg","$count","grouped","$groupBy","$exactWithLimit","integer","$ranges","short","float","$fixedWidth","dateTime","$duration","date","boolean","double","$defaultValue","$limit","$group","wrongSelectKey","wrongKey","$exact","toBeCallableWith","direction","timestamp"],"sources":["aggregate.test.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n AggregateOpts,\n AggregateOptsThatErrorsAndDisallowsOrderingWithMultipleGroupBy,\n GroupByClause,\n ValidAggregationKeys,\n} from \"@osdk/api\";\nimport type { Employee } from \"@osdk/client.test.ontology\";\nimport {\n objectTypeWithAllPropertyTypes,\n Todo,\n} from \"@osdk/client.test.ontology\";\nimport type { AggregateObjectsResponseV2 } from \"@osdk/foundry.ontologies\";\nimport type { TypeOf } from \"ts-expect\";\nimport { expectType } from \"ts-expect\";\nimport {\n beforeAll,\n describe,\n expect,\n expectTypeOf,\n it,\n type Mock,\n vi,\n} from \"vitest\";\nimport type { Client } from \"../Client.js\";\nimport { createClient } from \"../createClient.js\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"./aggregate.js\";\n\nconst metadata = {\n expectsClientVersion: \"0.0.0\",\n ontologyRid: \"ri.a.b.c.d\",\n ontologyApiName: \"apiName\",\n userAgent: \"\",\n};\n\nlet mockFetch: Mock;\nlet clientCtx: MinimalClient;\nlet client: Client;\n\nbeforeAll(() => {\n mockFetch = vi.fn();\n\n mockFetch.mockResolvedValue({\n ok: true,\n status: 200,\n json: () => new Promise((resolve) => resolve(aggregationResponse)),\n });\n\n clientCtx = createMinimalClient(\n metadata,\n \"https://host.com\",\n async () => \"myAccessToken\",\n {},\n mockFetch,\n );\n\n client = createClient(\n \"https://host.com\",\n metadata.ontologyRid,\n async () => \"\",\n undefined,\n mockFetch,\n );\n});\n\nconst aggregationResponse: AggregateObjectsResponseV2 = {\n accuracy: \"APPROXIMATE\",\n data: [\n {\n group: {\n string: \"hello\",\n },\n metrics: [\n {\n name: \"string.approximateDistinct\",\n value: 1,\n },\n {\n name: \"string.exactDistinct\",\n value: 1,\n },\n {\n name: \"id.max\",\n value: 1,\n },\n {\n name: \"id.avg\",\n value: 1,\n },\n ],\n },\n ],\n};\n\ndescribe(\"aggregate\", () => {\n it(\"works\", async () => {\n expectTypeOf<ValidAggregationKeys<Todo>>().toEqualTypeOf<\n | \"$count\"\n | \"id:min\"\n | \"id:max\"\n | \"id:sum\"\n | \"id:avg\"\n | \"id:approximateDistinct\"\n | \"id:exactDistinct\"\n | \"text:approximateDistinct\"\n | \"text:exactDistinct\"\n >;\n\n const notGrouped = await aggregate(\n clientCtx,\n objectTypeWithAllPropertyTypes,\n {\n type: \"base\",\n objectType: \"ToDo\",\n },\n {\n $select: {\n \"string:approximateDistinct\": \"unordered\",\n \"string:exactDistinct\": \"unordered\",\n \"id:max\": \"unordered\",\n \"id:avg\": \"unordered\",\n \"$count\": \"unordered\",\n },\n },\n );\n\n expect(mockFetch).toHaveBeenCalledWith(\n \"https://host.com/api/v2/ontologies/ri.a.b.c.d/objectSets/aggregate\",\n {\n body: JSON.stringify({\n \"objectSet\": { \"type\": \"base\", \"objectType\": \"ToDo\" },\n \"groupBy\": [],\n \"aggregation\": [\n {\n \"type\": \"approximateDistinct\",\n \"name\": \"string.approximateDistinct\",\n \"field\": \"string\",\n },\n {\n \"type\": \"exactDistinct\",\n \"name\": \"string.exactDistinct\",\n \"field\": \"string\",\n },\n { \"type\": \"max\", \"name\": \"id.max\", \"field\": \"id\" },\n { \"type\": \"avg\", \"name\": \"id.avg\", \"field\": \"id\" },\n { \"type\": \"count\", \"name\": \"count\" },\n ],\n }),\n method: \"POST\",\n headers: expect.anything(),\n },\n );\n\n expectType<number>(notGrouped.string.approximateDistinct);\n expectType<number>(notGrouped.string.exactDistinct);\n expectType<number | undefined>(notGrouped.id.max);\n expectType<number | undefined>(notGrouped.id.avg);\n expectType<number>(notGrouped.$count);\n expectType<\n TypeOf<\n {\n other: any;\n },\n typeof notGrouped\n >\n >(false); // subSelect should hide unused keys\n\n const grouped = await client(objectTypeWithAllPropertyTypes).aggregate(\n {\n $select: {\n \"id:approximateDistinct\": \"unordered\",\n \"id:exactDistinct\": \"unordered\",\n \"id:max\": \"unordered\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n string: \"exact\",\n id: { $exactWithLimit: 10 },\n integer: { $ranges: [[1, 2]] },\n short: {\n $ranges: [[2, 3], [4, 5]],\n },\n float: { $fixedWidth: 10 },\n dateTime: { $duration: [10, \"seconds\"] },\n date: { $ranges: [[\"2024-01-02\", \"2024-01-09\"]] },\n boolean: \"exact\",\n double: { \"$exact\": { $defaultValue: \"default\", $limit: 300 } },\n },\n },\n );\n expectType<Array<any>>(grouped);\n expectType<string | undefined>(grouped[0].$group.string);\n expectType<number>(grouped[0].id.approximateDistinct);\n expectType<number>(grouped[0].id.exactDistinct);\n expectType<number>(grouped[0].$group.id);\n expectType<number>(grouped[0].$count);\n expectType<{ startValue: number; endValue: number }>(\n grouped[0].$group.integer,\n );\n expectType<{ startValue: number; endValue: number }>(\n grouped[0].$group.short,\n );\n expectType<number | undefined>(grouped[0].$group.float);\n expectType<string | undefined>(grouped[0].$group.dateTime);\n expectType<{ startValue: string; endValue: string }>(\n grouped[0].$group.date,\n );\n expectType<boolean | undefined>(grouped[0].$group.boolean);\n expectType<number | undefined>(grouped[0].$group.double);\n\n expectType<\n AggregateOptsThatErrorsAndDisallowsOrderingWithMultipleGroupBy<\n objectTypeWithAllPropertyTypes,\n {\n $select: {\n \"id:approximateDistinct\": \"unordered\";\n \"$count\": \"unordered\";\n };\n $groupBy: {\n string: \"exact\";\n id: { $exactWithLimit: 10 };\n integer: { $ranges: [[1, 2]] };\n short: {\n $ranges: [[2, 3], [4, 5]];\n };\n float: { $fixedWidth: 10 };\n };\n }\n >\n >({\n $select: {\n \"id:approximateDistinct\": \"unordered\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n string: \"exact\",\n id: { $exactWithLimit: 10 },\n integer: { $ranges: [[1, 2]] },\n short: {\n $ranges: [[2, 3], [4, 5]],\n },\n float: { $fixedWidth: 10 },\n },\n });\n\n expectType<\n AggregateOptsThatErrorsAndDisallowsOrderingWithMultipleGroupBy<\n objectTypeWithAllPropertyTypes,\n {\n $select: {\n \"id:approximateDistinct\": \"unordered\";\n \"wrongSelectKey\": \"don't work\";\n \"$count\": \"unordered\";\n };\n $groupBy: {\n wrongKey: \"don't work\";\n text: \"exact\";\n id: { $exact: { $limit: 10; $defaultValue: \"default\" } };\n integer: { $ranges: [[1, 2]] };\n short: {\n $ranges: [[2, 3], [4, 5]];\n };\n float: { $fixedWidth: 10 };\n };\n }\n >\n >({\n $select: {\n id: \"approximateDistinct\",\n // @ts-expect-error\n wrongSelectKey: \"don't work\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n // @ts-expect-error\n wrongKey: \"don't work\",\n string: \"exact\",\n id: { $exact: { $limit: 10, $defaultValue: \"default\" } },\n integer: { $ranges: [[1, 2]] },\n short: {\n $ranges: [[2, 3], [4, 5]],\n },\n float: { $fixedWidth: 10 },\n },\n });\n\n expectTypeOf<\n typeof aggregate<objectTypeWithAllPropertyTypes, {\n $select: {\n \"id:approximateDistinct\": \"unordered\";\n \"wrongSelectKey\": \"wrong key\";\n \"$count\": \"unordered\";\n };\n $groupBy: {\n string: \"exact\";\n wrongKey: \"wrongKey\";\n id: { $exactWithLimit: 10 };\n integer: { $ranges: [[1, 2]] };\n short: {\n $ranges: [[2, 3], [4, 5]];\n };\n float: { $fixedWidth: 10 };\n };\n }>\n >().toBeCallableWith(\n clientCtx,\n objectTypeWithAllPropertyTypes,\n {\n type: \"base\",\n objectType: \"ToDo\",\n },\n {\n $select: {\n \"id:approximateDistinct\": \"unordered\",\n // @ts-expect-error\n \"wrongSelectKey\": \"don't work\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n string: \"exact\",\n // @ts-expect-error\n wrongKey: \"wrongKey\",\n id: { $exactWithLimit: 10 },\n integer: { $ranges: [[1, 2]] },\n short: {\n $ranges: [[2, 3], [4, 5]],\n },\n float: { $fixedWidth: 10 },\n },\n },\n );\n\n expectType<GroupByClause<objectTypeWithAllPropertyTypes>>({\n dateTime: { $duration: [10, \"seconds\"] },\n date: { $duration: [1, \"years\"] },\n });\n\n // Can't use value greater than 1 for years\n expectType<GroupByClause<objectTypeWithAllPropertyTypes>>({\n // @ts-expect-error\n date: { $duration: [10, \"years\"] },\n });\n\n // Can't use arbitrary string for time unit\n expectType<GroupByClause<objectTypeWithAllPropertyTypes>>({\n // @ts-expect-error\n dateTime: { $duration: [1, \"nonexistentTimeUnit\"] },\n });\n\n // Can't use time unit smaller than days for date type\n expectType<GroupByClause<objectTypeWithAllPropertyTypes>>({\n // @ts-expect-error\n date: { $duration: [1, \"seconds\"] },\n });\n });\n\n it(\"works with $orderBy (no groups)\", async () => {\n const notGrouped = await aggregate(\n clientCtx,\n objectTypeWithAllPropertyTypes,\n {\n type: \"base\",\n objectType: \"ToDo\",\n },\n {\n $select: {\n \"string:approximateDistinct\": \"asc\",\n \"id:exactDistinct\": \"asc\",\n \"id:avg\": \"desc\",\n \"id:max\": \"asc\",\n \"$count\": \"unordered\",\n },\n },\n );\n\n expect(mockFetch).toHaveBeenCalledWith(\n \"https://host.com/api/v2/ontologies/ri.a.b.c.d/objectSets/aggregate\",\n {\n body: JSON.stringify({\n \"objectSet\": { \"type\": \"base\", \"objectType\": \"ToDo\" },\n \"groupBy\": [],\n \"aggregation\": [\n {\n \"type\": \"approximateDistinct\",\n \"name\": \"string.approximateDistinct\",\n direction: \"ASC\",\n \"field\": \"string\",\n },\n {\n \"type\": \"exactDistinct\",\n \"name\": \"id.exactDistinct\",\n direction: \"ASC\",\n \"field\": \"id\",\n },\n {\n \"type\": \"avg\",\n \"name\": \"id.avg\",\n direction: \"DESC\",\n \"field\": \"id\",\n },\n {\n \"type\": \"max\",\n \"name\": \"id.max\",\n direction: \"ASC\",\n \"field\": \"id\",\n },\n { \"type\": \"count\", \"name\": \"count\" },\n ],\n }),\n method: \"POST\",\n headers: expect.anything(),\n },\n );\n\n expectType<number>(notGrouped.string.approximateDistinct);\n expectType<number>(notGrouped.id.exactDistinct);\n expectType<number>(notGrouped.id.max);\n expectType<number>(notGrouped.id.avg);\n expectType<number>(notGrouped.$count);\n expectType<\n TypeOf<\n {\n other: any;\n },\n typeof notGrouped\n >\n >(false); // subselect should hide unused keys\n });\n\n it(\"works with $orderBy (1 group)\", async () => {\n const grouped = await aggregate(\n clientCtx,\n objectTypeWithAllPropertyTypes,\n {\n type: \"base\",\n objectType: \"ToDo\",\n },\n {\n $select: {\n \"id:max\": \"desc\",\n \"string:approximateDistinct\": \"asc\",\n \"id:avg\": \"unordered\",\n \"$count\": \"unordered\",\n \"string:exactDistinct\": \"desc\",\n },\n $groupBy: {\n id: \"exact\",\n },\n },\n );\n\n expect(mockFetch).toHaveBeenCalledWith(\n \"https://host.com/api/v2/ontologies/ri.a.b.c.d/objectSets/aggregate\",\n {\n body: JSON.stringify({\n \"objectSet\": { \"type\": \"base\", \"objectType\": \"ToDo\" },\n \"groupBy\": [{ \"type\": \"exact\", \"field\": \"id\" }],\n \"aggregation\": [\n {\n \"type\": \"max\",\n \"name\": \"id.max\",\n direction: \"DESC\",\n \"field\": \"id\",\n },\n {\n \"type\": \"approximateDistinct\",\n \"name\": \"string.approximateDistinct\",\n direction: \"ASC\",\n \"field\": \"string\",\n },\n { \"type\": \"avg\", \"name\": \"id.avg\", \"field\": \"id\" },\n { \"type\": \"count\", \"name\": \"count\" },\n {\n \"type\": \"exactDistinct\",\n \"name\": \"string.exactDistinct\",\n direction: \"DESC\",\n \"field\": \"string\",\n },\n ],\n }),\n method: \"POST\",\n headers: expect.anything(),\n },\n );\n\n expectType<number>(grouped[0].string.approximateDistinct);\n expectType<number>(grouped[0].id.max);\n expectType<number>(grouped[0].id.avg);\n expectType<number>(grouped[0].$count);\n expectType<number>(grouped[0].string.exactDistinct);\n expectType<\n TypeOf<\n {\n other: any;\n },\n typeof grouped\n >\n >(false); // subselect should hide unused keys\n });\n\n it(\"prohibits ordered select with multiple groupBy\", async () => {\n await client(Todo).aggregate(\n {\n $select: {\n // @ts-expect-error\n \"id:max\": \"desc\",\n // @ts-expect-error\n \"text:approximateDistinct\": \"asc\",\n // @ts-expect-error\n \"text:exactDistinct\": \"desc\",\n \"id:avg\": \"unordered\",\n \"$count\": \"unordered\",\n },\n $groupBy: {\n id: \"exact\",\n timestamp: \"exact\",\n },\n },\n );\n });\n\n it(\"works with where: todo\", async () => {\n const f: AggregateOpts<\n Employee\n > = {\n $select: {\n \"office:approximateDistinct\": \"unordered\",\n },\n };\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -295,7 +295,7 @@ export class Store {
295
295
  if (process.env.NODE_ENV !== "production") {
296
296
  store.logger?.info("Removing an object from an object list that is in the middle of being loaded.", existing);
297
297
  }
298
- query.revalidate(/* force */true).catch(e => {
298
+ query.revalidate( /* force */true).catch(e => {
299
299
  if (store.logger) {
300
300
  store.logger?.error("Uncaught error while revalidating list", e);
301
301
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"Store.js","names":["BehaviorSubject","invariant","additionalContext","DEBUG_REFCOUNTS","ActionApplication","CacheKeys","createChangedObjects","DEBUG_ONLY__changesToString","Entry","Layer","isListCacheKey","ListQuery","ObjectQuery","RefCounts","WeakMapWithEntries","WhereClauseCanonicalizer","createInitEntry","cacheKey","status","value","undefined","lastUpdated","OrderByCanonicalizer","map","Map","canonicalize","orderBy","has","JSON","stringify","get","set","Store","whereCanonicalizer","orderByCanonicalizer","truthLayer","topLayer","queries","cacheKeyToSubject","WeakMap","cacheKeys","refCounts","k","cleanupCacheKey","finalizationRegistry","constructor","client","logger","child","msgPrefix","cacheKeyType","type","otherKeys","console","log","register","setInterval","gc","FinalizationRegistry","cleanupCallback","e","error","key","subject","peekSubject","closed","observed","remove","process","env","NODE_ENV","complete","delete","dispose","applyAction","action","args","opts","removeLayer","layerId","currentLayer","parentLayer","v","entries","oldEntry","currentEntry","next","isOptimistic","getCacheKey","getSubject","initialValue","observeObject","apiName","pk","options","subFn","query","getObjectQuery","retain","mode","revalidate","catch","sub","subscribe","unsubscribe","release","observeList","getListQuery","objectType","where","streamUpdates","miniDef","objectSet","store","websocketSubscription","onChange","object","state","debug","methodName","$objectType","$primaryKey","peekQuery","changes","updateObject","maybeRevalidateLists","err","batch","existing","read","cacheKeyToRemove","newObjects","data","filter","o","length","modifiedLists","add","write","info","onError","errors","onOutOfDate","onSuccessfulSubscription","#peekQuery","getQuery","#getQuery","createQuery","canonWhere","canonOrderBy","listCacheKey","objectCacheKey","dedupeInterval","getObject","objEntry","optimisticId","batchFn","needsLayer","batchContext","createLayerIfNeeded","addLayer","optimisticWrite","oldTopValue","writeLayer","newValue","Date","now","newTopValue","retVal","maybeUpdateLists","batchResult","invalidateObject","trace","promises","promise","maybeUpdateAndRevalidate","push","Promise","all","addedObjects","size","modifiedObjects","resolve","keys","invalidateObjectType","invalidateList","writeToStore","updateObjects","values","$apiName","updateList","objects","objectCacheKeys"],"sources":["Store.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ActionDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n WhereClause,\n} from \"@osdk/api\";\nimport { BehaviorSubject } from \"rxjs\";\nimport invariant from \"tiny-invariant\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { additionalContext, type Client } from \"../../Client.js\";\nimport type { Logger } from \"../../Logger.js\";\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type {\n ObserveListOptions,\n ObserveObjectOptions,\n OrderBy,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { OptimisticBuilder } from \"../OptimisticBuilder.js\";\nimport type { SubFn } from \"../types.js\";\nimport { ActionApplication } from \"./ActionApplication.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { CacheKeys } from \"./CacheKeys.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport {\n type Changes,\n createChangedObjects,\n DEBUG_ONLY__changesToString,\n} from \"./ChangedObjects.js\";\nimport { Entry, Layer } from \"./Layer.js\";\nimport type { ListCacheKey, ListQueryOptions } from \"./ListQuery.js\";\nimport { isListCacheKey, ListQuery } from \"./ListQuery.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { ObjectQuery } from \"./ObjectQuery.js\";\nimport { type OptimisticId } from \"./OptimisticId.js\";\nimport type { Query } from \"./Query.js\";\nimport { RefCounts } from \"./RefCounts.js\";\nimport { WeakMapWithEntries } from \"./WeakMapWithEntries.js\";\nimport { WhereClauseCanonicalizer } from \"./WhereClauseCanonicalizer.js\";\n\n/*\n Work still to do:\n - [x] testing for optimistic writes\n - [x] automatic invalidation of actions\n - [x] automatic optimistic list updates\n - [x] useOsdkObjects\n - [x] imply offline for objects passed directly\n - [x] websocket subscriptions\n - [ ] links\n - [x] add pagination\n - [ ] sub-selection support\n - [ ] interfaces\n - [ ] setup defaults\n - [ ] reduce updates in react\n*/\n\nexport interface SubjectPayload<KEY extends CacheKey> extends Entry<KEY> {\n isOptimistic: boolean;\n}\n\nexport interface BatchContext {\n changes: Changes;\n createLayerIfNeeded: () => void;\n optimisticWrite: boolean;\n\n write: <K extends CacheKey<string, any, any>>(\n k: K,\n v: Entry<K>[\"value\"],\n status: Entry<K>[\"status\"],\n ) => Entry<K>;\n\n read: <K extends CacheKey<string, any, any>>(\n k: K,\n ) => Entry<K> | undefined;\n}\n\ninterface UpdateOptions {\n optimisticId?: OptimisticId;\n}\n\nexport namespace Store {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nfunction createInitEntry(cacheKey: CacheKey): Entry<any> {\n return {\n cacheKey,\n status: \"init\",\n value: undefined,\n lastUpdated: 0,\n };\n}\n\n/*\n Notes:\n - Subjects are one per type per store (by cache key)\n - Data is one per layer per cache key\n*/\n\nexport class OrderByCanonicalizer {\n // crappy version\n #map = new Map<string, Record<string, \"asc\" | \"desc\" | undefined>>();\n\n canonicalize: <T>(\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n ) => Canonical<Record<string, \"asc\" | \"desc\" | undefined>> = (orderBy) => {\n if (this.#map.has(JSON.stringify(orderBy))) {\n return this.#map.get(JSON.stringify(orderBy))! as Canonical<\n Record<string, \"asc\" | \"desc\" | undefined>\n >;\n } else {\n this.#map.set(JSON.stringify(orderBy), orderBy);\n return orderBy as Canonical<Record<string, \"asc\" | \"desc\" | undefined>>;\n }\n };\n}\n\nexport class Store {\n whereCanonicalizer: WhereClauseCanonicalizer = new WhereClauseCanonicalizer();\n orderByCanonicalizer: OrderByCanonicalizer = new OrderByCanonicalizer();\n #truthLayer: Layer = new Layer(undefined, undefined);\n #topLayer: Layer;\n client: Client;\n\n /** @internal */\n logger?: Logger;\n\n #queries: WeakMapWithEntries<\n CacheKey<string, any, any>,\n Query<any, any, any>\n > = new WeakMapWithEntries();\n\n #cacheKeyToSubject = new WeakMap<\n CacheKey<string, any, any>,\n BehaviorSubject<SubjectPayload<any>>\n >();\n #cacheKeys: CacheKeys;\n\n #refCounts = new RefCounts<CacheKey>(\n DEBUG_REFCOUNTS ? 15_000 : 60_000,\n (k) => this.#cleanupCacheKey(k),\n );\n\n #finalizationRegistry: FinalizationRegistry<() => void>;\n\n constructor(client: Client) {\n this.client = client;\n this.logger = client[additionalContext].logger?.child({}, {\n msgPrefix: \"Store\",\n });\n this.#topLayer = this.#truthLayer;\n this.#cacheKeys = new CacheKeys(\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n (k) => {\n if (DEBUG_REFCOUNTS) {\n const cacheKeyType = k.type;\n const otherKeys = k.otherKeys;\n // eslint-disable-next-line no-console\n console.log(\n `CacheKeys.onCreate(${cacheKeyType}, ${JSON.stringify(otherKeys)})`,\n );\n\n this.#finalizationRegistry.register(k, () => {\n // eslint-disable-next-line no-console\n console.log(\n `CacheKey Finalization(${cacheKeyType}, ${\n JSON.stringify(otherKeys)\n })`,\n );\n });\n }\n\n this.#refCounts.register(k);\n },\n );\n\n setInterval(() => {\n this.#refCounts.gc();\n }, 1000);\n\n this.#finalizationRegistry = new FinalizationRegistry<() => void>(\n (cleanupCallback) => {\n try {\n cleanupCallback();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\n \"Caught an error while running a finalization callback\",\n e,\n );\n }\n },\n );\n }\n\n /**\n * Called after a key is no longer retained and the timeout has elapsed\n * @param key\n */\n #cleanupCacheKey = (key: CacheKey<string, any, any>) => {\n const subject = this.peekSubject(key);\n\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.log(\n `CacheKey cleaning up (${\n JSON.stringify({\n closed: subject?.closed,\n observed: subject?.observed,\n })\n })`,\n JSON.stringify([key.type, ...key.otherKeys], null, 2),\n );\n }\n this.#cacheKeys.remove(key);\n if (process.env.NODE_ENV !== \"production\") {\n invariant(subject);\n }\n\n if (subject) {\n subject.complete();\n this.#cacheKeyToSubject.delete(key);\n }\n\n this.#queries.get(key)?.dispose();\n this.#queries.delete(key);\n };\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: Store.ApplyActionOptions,\n ) => Promise<unknown> = (action, args, opts) => {\n return new ActionApplication(this).applyAction(action, args, opts);\n };\n\n removeLayer(layerId: OptimisticId): void {\n invariant(\n layerId != null,\n \"undefined is the reserved layerId for the truth layer\",\n );\n // 1. collect all cache keys for a given layerId\n let currentLayer: Layer | undefined = this.#topLayer;\n const cacheKeys = new Map<CacheKey<string, any, any>, Entry<any>>();\n while (currentLayer != null && currentLayer.parentLayer != null) {\n if (currentLayer.layerId === layerId) {\n for (const [k, v] of currentLayer.entries()) {\n if (cacheKeys.has(k)) continue;\n cacheKeys.set(k, v);\n }\n }\n\n currentLayer = currentLayer.parentLayer;\n }\n\n // 2. remove the layers from the chain\n this.#topLayer = this.#topLayer.removeLayer(layerId);\n\n // 3. check each cache key to see if it is different in the new chain\n for (const [k, oldEntry] of cacheKeys) {\n const currentEntry = this.#topLayer.get(k);\n\n // 4. if different, update the subject\n if (oldEntry !== currentEntry) {\n const x = currentEntry ?? createInitEntry(k);\n // We are going to be pretty lazy here and just re-emit the value.\n // In the future it may benefit us to deep equal check her but I think\n // the subjects are effectively doing this anyway.\n this.peekSubject(k)?.next(\n {\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...(currentEntry ?? createInitEntry(k)),\n isOptimistic:\n currentEntry?.value !== this.#truthLayer.get(k)?.value,\n },\n );\n }\n }\n }\n\n getCacheKey<K extends CacheKey<string, any, any>>(\n type: K[\"type\"],\n ...args: K[\"__cacheKey\"][\"args\"]\n ): K {\n return this.#refCounts.register(this.#cacheKeys.get(type, ...args));\n }\n\n peekSubject = <KEY extends CacheKey<string, any, any>>(\n cacheKey: KEY,\n ):\n | BehaviorSubject<SubjectPayload<KEY>>\n | undefined =>\n {\n return this.#cacheKeyToSubject.get(cacheKey);\n };\n\n getSubject = <KEY extends CacheKey<string, any, any>>(\n cacheKey: KEY,\n ): BehaviorSubject<SubjectPayload<KEY>> => {\n let subject = this.#cacheKeyToSubject.get(cacheKey);\n if (!subject) {\n const initialValue: Entry<KEY> = this.#topLayer.get(cacheKey)\n ?? createInitEntry(cacheKey);\n\n subject = new BehaviorSubject({\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...initialValue,\n isOptimistic:\n initialValue.value !== this.#truthLayer.get(cacheKey)?.value,\n });\n this.#cacheKeyToSubject.set(cacheKey, subject);\n }\n\n return subject;\n };\n\n public observeObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: ObserveObjectOptions<T>,\n subFn: SubFn<ObjectPayload>,\n ): Unsubscribable {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const query = this.getObjectQuery(apiName, pk);\n this.#refCounts.retain(query.cacheKey);\n\n if (options.mode !== \"offline\") {\n query.revalidate(options.mode === \"force\")\n .catch(e => {\n // we don't want observeObject() to return a promise,\n // so we settle for logging an error here instead of\n // dropping it on the floor.\n if (this.logger) {\n this.logger.error(\"Unhandled error in observeObject\", e);\n } else {\n throw e;\n }\n });\n }\n const sub = query.subscribe({ next: subFn });\n\n return {\n unsubscribe: () => {\n sub.unsubscribe();\n this.#refCounts.release(query.cacheKey);\n },\n };\n }\n\n public observeList<T extends ObjectTypeDefinition>(\n options: ObserveListOptions<T>,\n subFn: SubFn<ListPayload>,\n ): Unsubscribable {\n // the ListQuery represents the shared state of the list\n const query = this.getListQuery(\n options.objectType,\n options.where ?? {},\n options.orderBy ?? {},\n options,\n );\n this.#refCounts.retain(query.cacheKey);\n\n if (options.mode !== \"offline\") {\n void query.revalidate(options.mode === \"force\");\n }\n const sub = query.subscribe({ next: subFn });\n\n if (options.streamUpdates) {\n const miniDef = {\n type: \"object\",\n apiName: (typeof options.objectType === \"string\"\n ? options.objectType\n : options.objectType.apiName),\n } as T;\n let objectSet: ObjectSet<T> = this.client(miniDef);\n if (options.where) {\n objectSet = objectSet.where(options.where ?? {});\n }\n const store = this;\n const websocketSubscription = objectSet.subscribe({\n onChange({ object, state }) {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.debug(\n { methodName: \"onError\" },\n \"updates\",\n state,\n object,\n );\n }\n\n const cacheKey = store.getCacheKey<ObjectCacheKey>(\n \"object\",\n object.$objectType,\n object.$primaryKey,\n );\n const type = store.#peekQuery(cacheKey) == null\n ? \"addedObjects\"\n : \"modifiedObjects\";\n\n const changes = createChangedObjects();\n changes[type].set(\n object.$objectType,\n object,\n );\n\n if (state === \"ADDED_OR_UPDATED\") {\n // todo, can we do the update without\n // the extra invalidation? maybe a flag to updateObject\n store.updateObject(\n object.$objectType,\n object,\n );\n store.maybeRevalidateLists(changes).catch(err => {\n // eslint-disable-next-line no-console\n console.error(\"Unhandled error in maybeRevalidateLists\", err);\n });\n } else if (state === \"REMOVED\") {\n const changes = createChangedObjects();\n store.batch({ changes }, (batch) => {\n const existing = batch.read(query.cacheKey);\n const cacheKeyToRemove = store.getCacheKey<ObjectCacheKey>(\n \"object\",\n object.$objectType,\n object.$primaryKey,\n );\n if (existing?.status === \"loaded\") {\n const newObjects = existing.value?.data.filter(\n (o) => o !== cacheKeyToRemove,\n );\n if (newObjects?.length !== existing.value?.data.length) {\n batch.changes.modifiedLists.add(query.cacheKey);\n batch.write(\n query.cacheKey,\n { data: newObjects ?? [] },\n \"loaded\",\n );\n // Should there be an else for this case? Do we need to invalidate\n // the paging tokens we may have?\n }\n } else {\n // There may be a tiny race here where OSW tells us the object has\n // been removed but an outstanding invalidation of this query is\n // about to return. In this case, its possible that we remove this item\n // from the list and then the returned list load re-adds it.\n // To avoid this, we will just force reload the query to be sure\n // we don't leave things in a bad state.\n\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n \"Removing an object from an object list that is in the middle of being loaded.\",\n existing,\n );\n }\n\n query.revalidate(/* force */ true).catch((e) => {\n if (store.logger) {\n store.logger?.error(\n \"Uncaught error while revalidating list\",\n e,\n );\n } else {\n // eslint-disable-next-line no-console\n console.error(\n \"Uncaught error while revalidating list\",\n e,\n );\n }\n });\n }\n });\n }\n },\n\n onError(errors) {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onError\" },\n \"subscription errors\",\n errors,\n );\n }\n },\n\n onOutOfDate() {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onOutOfDate\" },\n );\n }\n },\n\n onSuccessfulSubscription() {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onSuccessfulSubscription\" },\n );\n }\n },\n });\n\n sub.add(() => {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"observeList\" },\n \"Unsubscribing from websocket\",\n );\n }\n\n websocketSubscription.unsubscribe();\n });\n }\n\n return {\n unsubscribe: () => {\n sub.unsubscribe();\n this.#refCounts.release(query.cacheKey);\n },\n };\n }\n\n #peekQuery<K extends CacheKey<string, any, any>>(\n cacheKey: K,\n ): K[\"__cacheKey\"][\"query\"] | undefined {\n return this.#queries.get(cacheKey) as K[\"__cacheKey\"][\"query\"] | undefined;\n }\n\n #getQuery<K extends CacheKey>(\n cacheKey: K,\n createQuery: () => K[\"__cacheKey\"][\"query\"],\n ): K[\"__cacheKey\"][\"query\"] {\n let query = this.#peekQuery(cacheKey);\n if (!query) {\n query = createQuery();\n this.#queries.set(cacheKey, query);\n }\n return query;\n }\n\n public getListQuery<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n where: WhereClause<T>,\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n opts: ListQueryOptions,\n ): ListQuery {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const canonWhere = this.whereCanonicalizer.canonicalize(where);\n const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy);\n const listCacheKey = this.getCacheKey<ListCacheKey>(\n \"list\",\n apiName,\n canonWhere,\n canonOrderBy,\n );\n\n return this.#getQuery(listCacheKey, () => {\n return new ListQuery(\n this,\n this.getSubject(listCacheKey),\n apiName,\n canonWhere,\n canonOrderBy,\n listCacheKey,\n opts,\n );\n });\n }\n\n public getObjectQuery<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n ): ObjectQuery {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const objectCacheKey = this.getCacheKey<ObjectCacheKey>(\n \"object\",\n apiName,\n pk,\n );\n\n return this.#getQuery(objectCacheKey, () =>\n new ObjectQuery(\n this,\n this.getSubject(objectCacheKey),\n apiName,\n pk,\n objectCacheKey,\n { dedupeInterval: 0 },\n ));\n }\n\n public getObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: string | number,\n ): Osdk.Instance<T> | undefined {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const objectCacheKey = this.getCacheKey<ObjectCacheKey>(\n \"object\",\n apiName,\n pk,\n );\n const objEntry = this.#topLayer.get(objectCacheKey);\n return objEntry?.value as Osdk.Instance<T> | undefined;\n }\n\n batch = <X>(\n { optimisticId, changes = createChangedObjects() }: {\n optimisticId?: OptimisticId;\n changes?: Changes;\n },\n batchFn: (batchContext: BatchContext) => X,\n ): {\n batchResult: BatchContext;\n retVal: X;\n } => {\n invariant(\n optimisticId === undefined || !!optimisticId,\n \"optimistic must be undefined or not falsy\",\n );\n\n let needsLayer = optimisticId !== undefined;\n const batchContext: BatchContext = {\n changes,\n createLayerIfNeeded: () => {\n if (needsLayer) {\n this.#topLayer = this.#topLayer.addLayer(optimisticId);\n needsLayer = false;\n }\n },\n optimisticWrite: !!optimisticId,\n write: (cacheKey, value, status) => {\n const oldTopValue = this.#topLayer.get(cacheKey);\n\n if (optimisticId) batchContext.createLayerIfNeeded();\n\n const writeLayer = optimisticId\n ? this.#topLayer\n : this.#truthLayer;\n const newValue = new Entry(\n cacheKey,\n value,\n Date.now(),\n status,\n );\n\n writeLayer.set(cacheKey, newValue);\n\n const newTopValue = this.#topLayer.get(cacheKey);\n\n if (oldTopValue !== newTopValue) {\n this.#cacheKeyToSubject.get(cacheKey)?.next({\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...newValue,\n isOptimistic:\n newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value,\n });\n }\n\n return newValue;\n },\n read: (cacheKey) => {\n return optimisticId\n ? this.#topLayer.get(cacheKey)\n : this.#truthLayer.get(cacheKey);\n },\n };\n\n const retVal = batchFn(batchContext);\n void this.maybeUpdateLists(changes, optimisticId);\n\n return { batchResult: batchContext, retVal: retVal };\n };\n\n public invalidateObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n ): Promise<unknown> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n // inevitably we will want an internal version of this and a \"public\" one\n // so we can avoid extra requests\n\n const query = this.getObjectQuery(apiName, pk);\n\n return query.revalidate(true);\n\n // potentially trigger updates of the lists that included this object?\n // TODO\n // could we detect that a list WOULD include it?\n }\n\n public async maybeRevalidateLists(\n changes: Changes,\n ): Promise<void> {\n if (process.env.NODE_ENV !== \"production\") {\n // todo\n this.logger?.trace(\n { methodName: \"maybeRevalidateList\" },\n DEBUG_ONLY__changesToString(changes),\n );\n }\n\n try {\n const promises: Array<Promise<unknown>> = [];\n for (const [cacheKey, v] of this.#truthLayer.entries()) {\n if (isListCacheKey(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.maybeUpdateAndRevalidate(\n changes,\n undefined,\n );\n if (promise) promises.push(promise);\n }\n }\n await Promise.all(promises);\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n // todo\n this.logger?.trace(\n { methodName: \"maybeRevalidateList\" },\n \"in finally\",\n DEBUG_ONLY__changesToString(changes),\n );\n }\n }\n }\n\n public maybeUpdateLists(\n changes: Changes,\n optimisticId: OptimisticId | undefined,\n ): Promise<(void | undefined)[]> {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.trace(\n { methodName: \"maybeUpdateLists\" },\n DEBUG_ONLY__changesToString(changes),\n { optimisticId },\n );\n }\n if (changes.addedObjects.size === 0 && changes.modifiedObjects.size === 0) {\n return Promise.resolve([]);\n }\n const promises = [];\n for (const cacheKey of this.#queries.keys()) {\n if (isListCacheKey(cacheKey)) {\n if (!changes.modifiedLists.has(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.maybeUpdateAndRevalidate(\n changes,\n optimisticId,\n );\n if (promise) promises.push(promise);\n }\n }\n }\n\n return Promise.all(promises);\n }\n\n /**\n * @param apiName\n * @param changes The changes we know about / to update\n * @returns\n */\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n changes: Changes | undefined,\n ): Promise<unknown[]> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.info(\n { methodName: \"invalidateObjectType\" },\n changes ? DEBUG_ONLY__changesToString(changes) : void 0,\n );\n }\n\n const promises: Array<Promise<unknown>> = [];\n\n for (const [cacheKey, v] of this.#truthLayer.entries()) {\n if (isListCacheKey(cacheKey, apiName)) {\n if (!changes || !changes.modifiedLists.has(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.revalidate(true);\n\n if (promise) {\n promises.push(promise);\n changes?.modifiedLists.add(cacheKey);\n }\n }\n }\n }\n\n return Promise.all(promises);\n }\n\n public invalidateList<T extends ObjectTypeDefinition>(\n { objectType, where, orderBy }: {\n objectType: T[\"apiName\"] | T;\n where?: WhereClause<T>;\n orderBy?: OrderBy<T>;\n },\n ): void {\n if (typeof objectType !== \"string\") {\n objectType = objectType.apiName;\n }\n\n where = this.whereCanonicalizer.canonicalize(where ?? {});\n orderBy = this.orderByCanonicalizer.canonicalize(orderBy ?? {});\n\n const cacheKey = this.getCacheKey<ListCacheKey>(\n \"list\",\n objectType,\n where as Canonical<WhereClause<T>>,\n orderBy as Canonical<OrderBy<T>>,\n );\n\n void this.#peekQuery(cacheKey)?.revalidate(true);\n }\n\n public updateObject(\n apiName: string | ObjectTypeDefinition,\n value: Osdk.Instance<ObjectTypeDefinition>,\n { optimisticId }: UpdateOptions = {},\n ): Osdk.Instance<ObjectTypeDefinition> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const query = this.getObjectQuery(apiName, value.$primaryKey);\n\n return this.batch({ optimisticId }, (batch) => {\n return query.writeToStore(value, \"loaded\", batch);\n }).retVal.value!;\n }\n\n public updateObjects(\n values: Array<Osdk.Instance<ObjectTypeDefinition>>,\n batch: BatchContext,\n ): ObjectCacheKey[] {\n // update the cache for any object that has changed\n // and save the mapped values to return\n return values.map(v => {\n return this.getObjectQuery(\n v.$apiName,\n v.$primaryKey as string | number,\n )\n .writeToStore(v, \"loaded\", batch).cacheKey;\n });\n }\n\n /**\n * Updates the internal state of a list and will create a new internal query if needed.\n *\n * Helper method only for tests right now. May be removed later.\n *\n * @param apiName\n * @param where\n * @param orderBy\n * @param objects\n * @param param4\n * @param opts\n */\n public updateList<T extends ObjectTypeDefinition>(\n {\n objectType: apiName,\n where,\n orderBy,\n }: {\n objectType: T[\"apiName\"] | T;\n where: WhereClause<T>;\n orderBy: OrderBy<T>;\n },\n objects: Osdk.Instance<T>[],\n { optimisticId }: UpdateOptions = {},\n opts: ListQueryOptions = { dedupeInterval: 0 },\n ): void {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.info(\n { methodName: \"updateList\" },\n \"\",\n { optimisticId },\n );\n }\n\n const query = this.getListQuery(apiName, where ?? {}, orderBy ?? {}, opts);\n\n this.batch({ optimisticId }, (batch) => {\n const objectCacheKeys = this.updateObjects(objects, batch);\n query.updateList(objectCacheKeys, false, \"loaded\", batch);\n });\n }\n\n retain(cacheKey: CacheKey<string, any, any>): void {\n this.#refCounts.retain(cacheKey);\n }\n\n release(cacheKey: CacheKey<string, any, any>): void {\n this.#refCounts.release(cacheKey);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Store.js","names":["BehaviorSubject","invariant","additionalContext","DEBUG_REFCOUNTS","ActionApplication","CacheKeys","createChangedObjects","DEBUG_ONLY__changesToString","Entry","Layer","isListCacheKey","ListQuery","ObjectQuery","RefCounts","WeakMapWithEntries","WhereClauseCanonicalizer","createInitEntry","cacheKey","status","value","undefined","lastUpdated","OrderByCanonicalizer","map","Map","canonicalize","orderBy","has","JSON","stringify","get","set","Store","whereCanonicalizer","orderByCanonicalizer","truthLayer","topLayer","queries","cacheKeyToSubject","WeakMap","cacheKeys","refCounts","k","cleanupCacheKey","finalizationRegistry","constructor","client","logger","child","msgPrefix","cacheKeyType","type","otherKeys","console","log","register","setInterval","gc","FinalizationRegistry","cleanupCallback","e","error","key","subject","peekSubject","closed","observed","remove","process","env","NODE_ENV","complete","delete","dispose","applyAction","action","args","opts","removeLayer","layerId","currentLayer","parentLayer","v","entries","oldEntry","currentEntry","next","isOptimistic","getCacheKey","getSubject","initialValue","observeObject","apiName","pk","options","subFn","query","getObjectQuery","retain","mode","revalidate","catch","sub","subscribe","unsubscribe","release","observeList","getListQuery","objectType","where","streamUpdates","miniDef","objectSet","store","websocketSubscription","onChange","object","state","debug","methodName","$objectType","$primaryKey","peekQuery","changes","updateObject","maybeRevalidateLists","err","batch","existing","read","cacheKeyToRemove","newObjects","data","filter","o","length","modifiedLists","add","write","info","onError","errors","onOutOfDate","onSuccessfulSubscription","#peekQuery","getQuery","#getQuery","createQuery","canonWhere","canonOrderBy","listCacheKey","objectCacheKey","dedupeInterval","getObject","objEntry","optimisticId","batchFn","needsLayer","batchContext","createLayerIfNeeded","addLayer","optimisticWrite","oldTopValue","writeLayer","newValue","Date","now","newTopValue","retVal","maybeUpdateLists","batchResult","invalidateObject","trace","promises","promise","maybeUpdateAndRevalidate","push","Promise","all","addedObjects","size","modifiedObjects","resolve","keys","invalidateObjectType","invalidateList","writeToStore","updateObjects","values","$apiName","updateList","objects","objectCacheKeys"],"sources":["Store.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ActionDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n WhereClause,\n} from \"@osdk/api\";\nimport { BehaviorSubject } from \"rxjs\";\nimport invariant from \"tiny-invariant\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { additionalContext, type Client } from \"../../Client.js\";\nimport type { Logger } from \"../../Logger.js\";\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type {\n ObserveListOptions,\n ObserveObjectOptions,\n OrderBy,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { OptimisticBuilder } from \"../OptimisticBuilder.js\";\nimport type { SubFn } from \"../types.js\";\nimport { ActionApplication } from \"./ActionApplication.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { CacheKeys } from \"./CacheKeys.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport {\n type Changes,\n createChangedObjects,\n DEBUG_ONLY__changesToString,\n} from \"./ChangedObjects.js\";\nimport { Entry, Layer } from \"./Layer.js\";\nimport type { ListCacheKey, ListQueryOptions } from \"./ListQuery.js\";\nimport { isListCacheKey, ListQuery } from \"./ListQuery.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { ObjectQuery } from \"./ObjectQuery.js\";\nimport { type OptimisticId } from \"./OptimisticId.js\";\nimport type { Query } from \"./Query.js\";\nimport { RefCounts } from \"./RefCounts.js\";\nimport { WeakMapWithEntries } from \"./WeakMapWithEntries.js\";\nimport { WhereClauseCanonicalizer } from \"./WhereClauseCanonicalizer.js\";\n\n/*\n Work still to do:\n - [x] testing for optimistic writes\n - [x] automatic invalidation of actions\n - [x] automatic optimistic list updates\n - [x] useOsdkObjects\n - [x] imply offline for objects passed directly\n - [x] websocket subscriptions\n - [ ] links\n - [x] add pagination\n - [ ] sub-selection support\n - [ ] interfaces\n - [ ] setup defaults\n - [ ] reduce updates in react\n*/\n\nexport interface SubjectPayload<KEY extends CacheKey> extends Entry<KEY> {\n isOptimistic: boolean;\n}\n\nexport interface BatchContext {\n changes: Changes;\n createLayerIfNeeded: () => void;\n optimisticWrite: boolean;\n\n write: <K extends CacheKey<string, any, any>>(\n k: K,\n v: Entry<K>[\"value\"],\n status: Entry<K>[\"status\"],\n ) => Entry<K>;\n\n read: <K extends CacheKey<string, any, any>>(\n k: K,\n ) => Entry<K> | undefined;\n}\n\ninterface UpdateOptions {\n optimisticId?: OptimisticId;\n}\n\nexport namespace Store {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nfunction createInitEntry(cacheKey: CacheKey): Entry<any> {\n return {\n cacheKey,\n status: \"init\",\n value: undefined,\n lastUpdated: 0,\n };\n}\n\n/*\n Notes:\n - Subjects are one per type per store (by cache key)\n - Data is one per layer per cache key\n*/\n\nexport class OrderByCanonicalizer {\n // crappy version\n #map = new Map<string, Record<string, \"asc\" | \"desc\" | undefined>>();\n\n canonicalize: <T>(\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n ) => Canonical<Record<string, \"asc\" | \"desc\" | undefined>> = (orderBy) => {\n if (this.#map.has(JSON.stringify(orderBy))) {\n return this.#map.get(JSON.stringify(orderBy))! as Canonical<\n Record<string, \"asc\" | \"desc\" | undefined>\n >;\n } else {\n this.#map.set(JSON.stringify(orderBy), orderBy);\n return orderBy as Canonical<Record<string, \"asc\" | \"desc\" | undefined>>;\n }\n };\n}\n\nexport class Store {\n whereCanonicalizer: WhereClauseCanonicalizer = new WhereClauseCanonicalizer();\n orderByCanonicalizer: OrderByCanonicalizer = new OrderByCanonicalizer();\n #truthLayer: Layer = new Layer(undefined, undefined);\n #topLayer: Layer;\n client: Client;\n\n /** @internal */\n logger?: Logger;\n\n #queries: WeakMapWithEntries<\n CacheKey<string, any, any>,\n Query<any, any, any>\n > = new WeakMapWithEntries();\n\n #cacheKeyToSubject = new WeakMap<\n CacheKey<string, any, any>,\n BehaviorSubject<SubjectPayload<any>>\n >();\n #cacheKeys: CacheKeys;\n\n #refCounts = new RefCounts<CacheKey>(\n DEBUG_REFCOUNTS ? 15_000 : 60_000,\n (k) => this.#cleanupCacheKey(k),\n );\n\n #finalizationRegistry: FinalizationRegistry<() => void>;\n\n constructor(client: Client) {\n this.client = client;\n this.logger = client[additionalContext].logger?.child({}, {\n msgPrefix: \"Store\",\n });\n this.#topLayer = this.#truthLayer;\n this.#cacheKeys = new CacheKeys(\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n (k) => {\n if (DEBUG_REFCOUNTS) {\n const cacheKeyType = k.type;\n const otherKeys = k.otherKeys;\n // eslint-disable-next-line no-console\n console.log(\n `CacheKeys.onCreate(${cacheKeyType}, ${JSON.stringify(otherKeys)})`,\n );\n\n this.#finalizationRegistry.register(k, () => {\n // eslint-disable-next-line no-console\n console.log(\n `CacheKey Finalization(${cacheKeyType}, ${\n JSON.stringify(otherKeys)\n })`,\n );\n });\n }\n\n this.#refCounts.register(k);\n },\n );\n\n setInterval(() => {\n this.#refCounts.gc();\n }, 1000);\n\n this.#finalizationRegistry = new FinalizationRegistry<() => void>(\n (cleanupCallback) => {\n try {\n cleanupCallback();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\n \"Caught an error while running a finalization callback\",\n e,\n );\n }\n },\n );\n }\n\n /**\n * Called after a key is no longer retained and the timeout has elapsed\n * @param key\n */\n #cleanupCacheKey = (key: CacheKey<string, any, any>) => {\n const subject = this.peekSubject(key);\n\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.log(\n `CacheKey cleaning up (${\n JSON.stringify({\n closed: subject?.closed,\n observed: subject?.observed,\n })\n })`,\n JSON.stringify([key.type, ...key.otherKeys], null, 2),\n );\n }\n this.#cacheKeys.remove(key);\n if (process.env.NODE_ENV !== \"production\") {\n invariant(subject);\n }\n\n if (subject) {\n subject.complete();\n this.#cacheKeyToSubject.delete(key);\n }\n\n this.#queries.get(key)?.dispose();\n this.#queries.delete(key);\n };\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: Store.ApplyActionOptions,\n ) => Promise<unknown> = (action, args, opts) => {\n return new ActionApplication(this).applyAction(action, args, opts);\n };\n\n removeLayer(layerId: OptimisticId): void {\n invariant(\n layerId != null,\n \"undefined is the reserved layerId for the truth layer\",\n );\n // 1. collect all cache keys for a given layerId\n let currentLayer: Layer | undefined = this.#topLayer;\n const cacheKeys = new Map<CacheKey<string, any, any>, Entry<any>>();\n while (currentLayer != null && currentLayer.parentLayer != null) {\n if (currentLayer.layerId === layerId) {\n for (const [k, v] of currentLayer.entries()) {\n if (cacheKeys.has(k)) continue;\n cacheKeys.set(k, v);\n }\n }\n\n currentLayer = currentLayer.parentLayer;\n }\n\n // 2. remove the layers from the chain\n this.#topLayer = this.#topLayer.removeLayer(layerId);\n\n // 3. check each cache key to see if it is different in the new chain\n for (const [k, oldEntry] of cacheKeys) {\n const currentEntry = this.#topLayer.get(k);\n\n // 4. if different, update the subject\n if (oldEntry !== currentEntry) {\n const x = currentEntry ?? createInitEntry(k);\n // We are going to be pretty lazy here and just re-emit the value.\n // In the future it may benefit us to deep equal check her but I think\n // the subjects are effectively doing this anyway.\n this.peekSubject(k)?.next(\n {\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...(currentEntry ?? createInitEntry(k)),\n isOptimistic:\n currentEntry?.value !== this.#truthLayer.get(k)?.value,\n },\n );\n }\n }\n }\n\n getCacheKey<K extends CacheKey<string, any, any>>(\n type: K[\"type\"],\n ...args: K[\"__cacheKey\"][\"args\"]\n ): K {\n return this.#refCounts.register(this.#cacheKeys.get(type, ...args));\n }\n\n peekSubject = <KEY extends CacheKey<string, any, any>>(\n cacheKey: KEY,\n ):\n | BehaviorSubject<SubjectPayload<KEY>>\n | undefined =>\n {\n return this.#cacheKeyToSubject.get(cacheKey);\n };\n\n getSubject = <KEY extends CacheKey<string, any, any>>(\n cacheKey: KEY,\n ): BehaviorSubject<SubjectPayload<KEY>> => {\n let subject = this.#cacheKeyToSubject.get(cacheKey);\n if (!subject) {\n const initialValue: Entry<KEY> = this.#topLayer.get(cacheKey)\n ?? createInitEntry(cacheKey);\n\n subject = new BehaviorSubject({\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...initialValue,\n isOptimistic:\n initialValue.value !== this.#truthLayer.get(cacheKey)?.value,\n });\n this.#cacheKeyToSubject.set(cacheKey, subject);\n }\n\n return subject;\n };\n\n public observeObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: ObserveObjectOptions<T>,\n subFn: SubFn<ObjectPayload>,\n ): Unsubscribable {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const query = this.getObjectQuery(apiName, pk);\n this.#refCounts.retain(query.cacheKey);\n\n if (options.mode !== \"offline\") {\n query.revalidate(options.mode === \"force\")\n .catch(e => {\n // we don't want observeObject() to return a promise,\n // so we settle for logging an error here instead of\n // dropping it on the floor.\n if (this.logger) {\n this.logger.error(\"Unhandled error in observeObject\", e);\n } else {\n throw e;\n }\n });\n }\n const sub = query.subscribe({ next: subFn });\n\n return {\n unsubscribe: () => {\n sub.unsubscribe();\n this.#refCounts.release(query.cacheKey);\n },\n };\n }\n\n public observeList<T extends ObjectTypeDefinition>(\n options: ObserveListOptions<T>,\n subFn: SubFn<ListPayload>,\n ): Unsubscribable {\n // the ListQuery represents the shared state of the list\n const query = this.getListQuery(\n options.objectType,\n options.where ?? {},\n options.orderBy ?? {},\n options,\n );\n this.#refCounts.retain(query.cacheKey);\n\n if (options.mode !== \"offline\") {\n void query.revalidate(options.mode === \"force\");\n }\n const sub = query.subscribe({ next: subFn });\n\n if (options.streamUpdates) {\n const miniDef = {\n type: \"object\",\n apiName: (typeof options.objectType === \"string\"\n ? options.objectType\n : options.objectType.apiName),\n } as T;\n let objectSet: ObjectSet<T> = this.client(miniDef);\n if (options.where) {\n objectSet = objectSet.where(options.where ?? {});\n }\n const store = this;\n const websocketSubscription = objectSet.subscribe({\n onChange({ object, state }) {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.debug(\n { methodName: \"onError\" },\n \"updates\",\n state,\n object,\n );\n }\n\n const cacheKey = store.getCacheKey<ObjectCacheKey>(\n \"object\",\n object.$objectType,\n object.$primaryKey,\n );\n const type = store.#peekQuery(cacheKey) == null\n ? \"addedObjects\"\n : \"modifiedObjects\";\n\n const changes = createChangedObjects();\n changes[type].set(\n object.$objectType,\n object,\n );\n\n if (state === \"ADDED_OR_UPDATED\") {\n // todo, can we do the update without\n // the extra invalidation? maybe a flag to updateObject\n store.updateObject(\n object.$objectType,\n object,\n );\n store.maybeRevalidateLists(changes).catch(err => {\n // eslint-disable-next-line no-console\n console.error(\"Unhandled error in maybeRevalidateLists\", err);\n });\n } else if (state === \"REMOVED\") {\n const changes = createChangedObjects();\n store.batch({ changes }, (batch) => {\n const existing = batch.read(query.cacheKey);\n const cacheKeyToRemove = store.getCacheKey<ObjectCacheKey>(\n \"object\",\n object.$objectType,\n object.$primaryKey,\n );\n if (existing?.status === \"loaded\") {\n const newObjects = existing.value?.data.filter(\n (o) => o !== cacheKeyToRemove,\n );\n if (newObjects?.length !== existing.value?.data.length) {\n batch.changes.modifiedLists.add(query.cacheKey);\n batch.write(\n query.cacheKey,\n { data: newObjects ?? [] },\n \"loaded\",\n );\n // Should there be an else for this case? Do we need to invalidate\n // the paging tokens we may have?\n }\n } else {\n // There may be a tiny race here where OSW tells us the object has\n // been removed but an outstanding invalidation of this query is\n // about to return. In this case, its possible that we remove this item\n // from the list and then the returned list load re-adds it.\n // To avoid this, we will just force reload the query to be sure\n // we don't leave things in a bad state.\n\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n \"Removing an object from an object list that is in the middle of being loaded.\",\n existing,\n );\n }\n\n query.revalidate(/* force */ true).catch((e) => {\n if (store.logger) {\n store.logger?.error(\n \"Uncaught error while revalidating list\",\n e,\n );\n } else {\n // eslint-disable-next-line no-console\n console.error(\n \"Uncaught error while revalidating list\",\n e,\n );\n }\n });\n }\n });\n }\n },\n\n onError(errors) {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onError\" },\n \"subscription errors\",\n errors,\n );\n }\n },\n\n onOutOfDate() {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onOutOfDate\" },\n );\n }\n },\n\n onSuccessfulSubscription() {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onSuccessfulSubscription\" },\n );\n }\n },\n });\n\n sub.add(() => {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"observeList\" },\n \"Unsubscribing from websocket\",\n );\n }\n\n websocketSubscription.unsubscribe();\n });\n }\n\n return {\n unsubscribe: () => {\n sub.unsubscribe();\n this.#refCounts.release(query.cacheKey);\n },\n };\n }\n\n #peekQuery<K extends CacheKey<string, any, any>>(\n cacheKey: K,\n ): K[\"__cacheKey\"][\"query\"] | undefined {\n return this.#queries.get(cacheKey) as K[\"__cacheKey\"][\"query\"] | undefined;\n }\n\n #getQuery<K extends CacheKey>(\n cacheKey: K,\n createQuery: () => K[\"__cacheKey\"][\"query\"],\n ): K[\"__cacheKey\"][\"query\"] {\n let query = this.#peekQuery(cacheKey);\n if (!query) {\n query = createQuery();\n this.#queries.set(cacheKey, query);\n }\n return query;\n }\n\n public getListQuery<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n where: WhereClause<T>,\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n opts: ListQueryOptions,\n ): ListQuery {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const canonWhere = this.whereCanonicalizer.canonicalize(where);\n const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy);\n const listCacheKey = this.getCacheKey<ListCacheKey>(\n \"list\",\n apiName,\n canonWhere,\n canonOrderBy,\n );\n\n return this.#getQuery(listCacheKey, () => {\n return new ListQuery(\n this,\n this.getSubject(listCacheKey),\n apiName,\n canonWhere,\n canonOrderBy,\n listCacheKey,\n opts,\n );\n });\n }\n\n public getObjectQuery<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n ): ObjectQuery {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const objectCacheKey = this.getCacheKey<ObjectCacheKey>(\n \"object\",\n apiName,\n pk,\n );\n\n return this.#getQuery(objectCacheKey, () =>\n new ObjectQuery(\n this,\n this.getSubject(objectCacheKey),\n apiName,\n pk,\n objectCacheKey,\n { dedupeInterval: 0 },\n ));\n }\n\n public getObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: string | number,\n ): Osdk.Instance<T> | undefined {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const objectCacheKey = this.getCacheKey<ObjectCacheKey>(\n \"object\",\n apiName,\n pk,\n );\n const objEntry = this.#topLayer.get(objectCacheKey);\n return objEntry?.value as Osdk.Instance<T> | undefined;\n }\n\n batch = <X>(\n { optimisticId, changes = createChangedObjects() }: {\n optimisticId?: OptimisticId;\n changes?: Changes;\n },\n batchFn: (batchContext: BatchContext) => X,\n ): {\n batchResult: BatchContext;\n retVal: X;\n } => {\n invariant(\n optimisticId === undefined || !!optimisticId,\n \"optimistic must be undefined or not falsy\",\n );\n\n let needsLayer = optimisticId !== undefined;\n const batchContext: BatchContext = {\n changes,\n createLayerIfNeeded: () => {\n if (needsLayer) {\n this.#topLayer = this.#topLayer.addLayer(optimisticId);\n needsLayer = false;\n }\n },\n optimisticWrite: !!optimisticId,\n write: (cacheKey, value, status) => {\n const oldTopValue = this.#topLayer.get(cacheKey);\n\n if (optimisticId) batchContext.createLayerIfNeeded();\n\n const writeLayer = optimisticId\n ? this.#topLayer\n : this.#truthLayer;\n const newValue = new Entry(\n cacheKey,\n value,\n Date.now(),\n status,\n );\n\n writeLayer.set(cacheKey, newValue);\n\n const newTopValue = this.#topLayer.get(cacheKey);\n\n if (oldTopValue !== newTopValue) {\n this.#cacheKeyToSubject.get(cacheKey)?.next({\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...newValue,\n isOptimistic:\n newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value,\n });\n }\n\n return newValue;\n },\n read: (cacheKey) => {\n return optimisticId\n ? this.#topLayer.get(cacheKey)\n : this.#truthLayer.get(cacheKey);\n },\n };\n\n const retVal = batchFn(batchContext);\n void this.maybeUpdateLists(changes, optimisticId);\n\n return { batchResult: batchContext, retVal: retVal };\n };\n\n public invalidateObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n ): Promise<unknown> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n // inevitably we will want an internal version of this and a \"public\" one\n // so we can avoid extra requests\n\n const query = this.getObjectQuery(apiName, pk);\n\n return query.revalidate(true);\n\n // potentially trigger updates of the lists that included this object?\n // TODO\n // could we detect that a list WOULD include it?\n }\n\n public async maybeRevalidateLists(\n changes: Changes,\n ): Promise<void> {\n if (process.env.NODE_ENV !== \"production\") {\n // todo\n this.logger?.trace(\n { methodName: \"maybeRevalidateList\" },\n DEBUG_ONLY__changesToString(changes),\n );\n }\n\n try {\n const promises: Array<Promise<unknown>> = [];\n for (const [cacheKey, v] of this.#truthLayer.entries()) {\n if (isListCacheKey(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.maybeUpdateAndRevalidate(\n changes,\n undefined,\n );\n if (promise) promises.push(promise);\n }\n }\n await Promise.all(promises);\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n // todo\n this.logger?.trace(\n { methodName: \"maybeRevalidateList\" },\n \"in finally\",\n DEBUG_ONLY__changesToString(changes),\n );\n }\n }\n }\n\n public maybeUpdateLists(\n changes: Changes,\n optimisticId: OptimisticId | undefined,\n ): Promise<(void | undefined)[]> {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.trace(\n { methodName: \"maybeUpdateLists\" },\n DEBUG_ONLY__changesToString(changes),\n { optimisticId },\n );\n }\n if (changes.addedObjects.size === 0 && changes.modifiedObjects.size === 0) {\n return Promise.resolve([]);\n }\n const promises = [];\n for (const cacheKey of this.#queries.keys()) {\n if (isListCacheKey(cacheKey)) {\n if (!changes.modifiedLists.has(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.maybeUpdateAndRevalidate(\n changes,\n optimisticId,\n );\n if (promise) promises.push(promise);\n }\n }\n }\n\n return Promise.all(promises);\n }\n\n /**\n * @param apiName\n * @param changes The changes we know about / to update\n * @returns\n */\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n changes: Changes | undefined,\n ): Promise<unknown[]> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.info(\n { methodName: \"invalidateObjectType\" },\n changes ? DEBUG_ONLY__changesToString(changes) : void 0,\n );\n }\n\n const promises: Array<Promise<unknown>> = [];\n\n for (const [cacheKey, v] of this.#truthLayer.entries()) {\n if (isListCacheKey(cacheKey, apiName)) {\n if (!changes || !changes.modifiedLists.has(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.revalidate(true);\n\n if (promise) {\n promises.push(promise);\n changes?.modifiedLists.add(cacheKey);\n }\n }\n }\n }\n\n return Promise.all(promises);\n }\n\n public invalidateList<T extends ObjectTypeDefinition>(\n { objectType, where, orderBy }: {\n objectType: T[\"apiName\"] | T;\n where?: WhereClause<T>;\n orderBy?: OrderBy<T>;\n },\n ): void {\n if (typeof objectType !== \"string\") {\n objectType = objectType.apiName;\n }\n\n where = this.whereCanonicalizer.canonicalize(where ?? {});\n orderBy = this.orderByCanonicalizer.canonicalize(orderBy ?? {});\n\n const cacheKey = this.getCacheKey<ListCacheKey>(\n \"list\",\n objectType,\n where as Canonical<WhereClause<T>>,\n orderBy as Canonical<OrderBy<T>>,\n );\n\n void this.#peekQuery(cacheKey)?.revalidate(true);\n }\n\n public updateObject(\n apiName: string | ObjectTypeDefinition,\n value: Osdk.Instance<ObjectTypeDefinition>,\n { optimisticId }: UpdateOptions = {},\n ): Osdk.Instance<ObjectTypeDefinition> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const query = this.getObjectQuery(apiName, value.$primaryKey);\n\n return this.batch({ optimisticId }, (batch) => {\n return query.writeToStore(value, \"loaded\", batch);\n }).retVal.value!;\n }\n\n public updateObjects(\n values: Array<Osdk.Instance<ObjectTypeDefinition>>,\n batch: BatchContext,\n ): ObjectCacheKey[] {\n // update the cache for any object that has changed\n // and save the mapped values to return\n return values.map(v => {\n return this.getObjectQuery(\n v.$apiName,\n v.$primaryKey as string | number,\n )\n .writeToStore(v, \"loaded\", batch).cacheKey;\n });\n }\n\n /**\n * Updates the internal state of a list and will create a new internal query if needed.\n *\n * Helper method only for tests right now. May be removed later.\n *\n * @param apiName\n * @param where\n * @param orderBy\n * @param objects\n * @param param4\n * @param opts\n */\n public updateList<T extends ObjectTypeDefinition>(\n {\n objectType: apiName,\n where,\n orderBy,\n }: {\n objectType: T[\"apiName\"] | T;\n where: WhereClause<T>;\n orderBy: OrderBy<T>;\n },\n objects: Osdk.Instance<T>[],\n { optimisticId }: UpdateOptions = {},\n opts: ListQueryOptions = { dedupeInterval: 0 },\n ): void {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.info(\n { methodName: \"updateList\" },\n \"\",\n { optimisticId },\n );\n }\n\n const query = this.getListQuery(apiName, where ?? {}, orderBy ?? {}, opts);\n\n this.batch({ optimisticId }, (batch) => {\n const objectCacheKeys = this.updateObjects(objects, batch);\n query.updateList(objectCacheKeys, false, \"loaded\", batch);\n });\n }\n\n retain(cacheKey: CacheKey<string, any, any>): void {\n this.#refCounts.retain(cacheKey);\n }\n\n release(cacheKey: CacheKey<string, any, any>): void {\n this.#refCounts.release(cacheKey);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,5 +14,5 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- export const USER_AGENT = `osdk-client/${"2.2.0-beta.5"}`;
17
+ export const USER_AGENT = `osdk-client/${"2.2.0-beta.6"}`;
18
18
  //# sourceMappingURL=UserAgent.js.map
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import * as OntologiesV2 from "@osdk/foundry.ontologies";
18
- import { isAttachmentUpload } from "../object/AttachmentUpload.js";
18
+ import { isAttachmentFile, isAttachmentUpload } from "../object/AttachmentUpload.js";
19
19
  import { isMediaReference } from "../object/mediaUpload.js";
20
20
  import { getWireObjectSet, isObjectSet } from "../objectSet/createObjectSet.js";
21
21
  import { isInterfaceActionParam } from "./interfaceUtils.js";
@@ -37,6 +37,14 @@ export async function toDataValue(value, client) {
37
37
 
38
38
  // arrays and sets are both sent over the wire as arrays
39
39
  if (Array.isArray(value) || value instanceof Set) {
40
+ const values = Array.from(value);
41
+ if (values.some(dataValue => isAttachmentUpload(dataValue) || isAttachmentFile(dataValue))) {
42
+ const converted = [];
43
+ for (const value of values) {
44
+ converted.push(await toDataValue(value, client));
45
+ }
46
+ return converted;
47
+ }
40
48
  const promiseArray = Array.from(value, async innerValue => await toDataValue(innerValue, client));
41
49
  return Promise.all(promiseArray);
42
50
  }
@@ -48,7 +56,7 @@ export async function toDataValue(value, client) {
48
56
  });
49
57
  return await toDataValue(attachment.rid, client);
50
58
  }
51
- if (typeof value === "object" && value instanceof Blob && "name" in value) {
59
+ if (isAttachmentFile(value)) {
52
60
  const attachment = await OntologiesV2.Attachments.upload(client, value, {
53
61
  filename: value.name
54
62
  });