@osdk/client 2.8.0-beta.12 → 2.8.0-beta.14

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 (135) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/build/browser/createMediaFromReference.js +61 -0
  3. package/build/browser/createMediaFromReference.js.map +1 -0
  4. package/build/browser/index.js +1 -0
  5. package/build/browser/index.js.map +1 -1
  6. package/build/browser/object/mediaUpload.js +3 -0
  7. package/build/browser/object/mediaUpload.js.map +1 -1
  8. package/build/browser/observable/LinkPayload.js.map +1 -1
  9. package/build/browser/observable/ListPayload.js.map +1 -1
  10. package/build/browser/observable/ObservableClient/ObserveLink.js.map +1 -1
  11. package/build/browser/observable/ObservableClient.js.map +1 -1
  12. package/build/browser/observable/computeObjectSetCacheKey.js.map +1 -1
  13. package/build/browser/observable/internal/ListQueryView.js +4 -3
  14. package/build/browser/observable/internal/ListQueryView.js.map +1 -1
  15. package/build/browser/observable/internal/ObservableClientImpl.js +1 -1
  16. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  17. package/build/browser/observable/internal/Store.test.js +11 -11
  18. package/build/browser/observable/internal/Store.test.js.map +1 -1
  19. package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
  20. package/build/browser/observable/internal/base-list/BaseListQuery.js +12 -13
  21. package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
  22. package/build/browser/observable/internal/base-list/createCollectionConnectable.js +2 -2
  23. package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
  24. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js +2 -2
  25. package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
  26. package/build/browser/observable/internal/list/InterfaceListQuery.js +1 -1
  27. package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
  28. package/build/browser/observable/internal/list/ListQuery.test.js +45 -46
  29. package/build/browser/observable/internal/list/ListQuery.test.js.map +1 -1
  30. package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  31. package/build/browser/observable/internal/objectset/ObjectSetQueryOptions.js.map +1 -1
  32. package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +1 -1
  33. package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -1
  34. package/build/browser/observable/internal/testUtils.js +2 -2
  35. package/build/browser/observable/internal/testUtils.js.map +1 -1
  36. package/build/browser/queries/applyQuery.js +10 -2
  37. package/build/browser/queries/applyQuery.js.map +1 -1
  38. package/build/browser/queries/queries.test.js +80 -2
  39. package/build/browser/queries/queries.test.js.map +1 -1
  40. package/build/browser/util/UserAgent.js +2 -2
  41. package/build/browser/util/toDataValue.js +7 -7
  42. package/build/browser/util/toDataValue.js.map +1 -1
  43. package/build/browser/util/toDataValue.test.js +23 -0
  44. package/build/browser/util/toDataValue.test.js.map +1 -1
  45. package/build/browser/util/toDataValueQueries.js +19 -0
  46. package/build/browser/util/toDataValueQueries.js.map +1 -1
  47. package/build/cjs/{chunk-22QZVXHI.cjs → chunk-4HVAJSMV.cjs} +205 -123
  48. package/build/cjs/chunk-4HVAJSMV.cjs.map +1 -0
  49. package/build/cjs/{chunk-YVZM2JPW.cjs → chunk-Q2XRNNC7.cjs} +95 -90
  50. package/build/cjs/chunk-Q2XRNNC7.cjs.map +1 -0
  51. package/build/cjs/{chunk-LDTMSHUZ.cjs → chunk-QPPKY7HT.cjs} +4 -4
  52. package/build/cjs/{chunk-LDTMSHUZ.cjs.map → chunk-QPPKY7HT.cjs.map} +1 -1
  53. package/build/cjs/createObjectSet-BagR_R7M.d.cts +15 -0
  54. package/build/cjs/index.cjs +20 -12
  55. package/build/cjs/index.cjs.map +1 -1
  56. package/build/cjs/index.d.cts +2 -1
  57. package/build/cjs/public/internal-node.cjs +219 -219
  58. package/build/cjs/public/internal.cjs +14 -14
  59. package/build/cjs/public/unstable-do-not-use.cjs +148 -144
  60. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  61. package/build/cjs/public/unstable-do-not-use.d.cts +11 -14
  62. package/build/esm/createMediaFromReference.js +61 -0
  63. package/build/esm/createMediaFromReference.js.map +1 -0
  64. package/build/esm/index.js +1 -0
  65. package/build/esm/index.js.map +1 -1
  66. package/build/esm/object/mediaUpload.js +3 -0
  67. package/build/esm/object/mediaUpload.js.map +1 -1
  68. package/build/esm/observable/LinkPayload.js.map +1 -1
  69. package/build/esm/observable/ListPayload.js.map +1 -1
  70. package/build/esm/observable/ObservableClient/ObserveLink.js.map +1 -1
  71. package/build/esm/observable/ObservableClient.js.map +1 -1
  72. package/build/esm/observable/computeObjectSetCacheKey.js.map +1 -1
  73. package/build/esm/observable/internal/ListQueryView.js +4 -3
  74. package/build/esm/observable/internal/ListQueryView.js.map +1 -1
  75. package/build/esm/observable/internal/ObservableClientImpl.js +1 -1
  76. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  77. package/build/esm/observable/internal/Store.test.js +11 -11
  78. package/build/esm/observable/internal/Store.test.js.map +1 -1
  79. package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
  80. package/build/esm/observable/internal/base-list/BaseListQuery.js +12 -13
  81. package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
  82. package/build/esm/observable/internal/base-list/createCollectionConnectable.js +2 -2
  83. package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
  84. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js +2 -2
  85. package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
  86. package/build/esm/observable/internal/list/InterfaceListQuery.js +1 -1
  87. package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
  88. package/build/esm/observable/internal/list/ListQuery.test.js +45 -46
  89. package/build/esm/observable/internal/list/ListQuery.test.js.map +1 -1
  90. package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  91. package/build/esm/observable/internal/objectset/ObjectSetQueryOptions.js.map +1 -1
  92. package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +1 -1
  93. package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -1
  94. package/build/esm/observable/internal/testUtils.js +2 -2
  95. package/build/esm/observable/internal/testUtils.js.map +1 -1
  96. package/build/esm/queries/applyQuery.js +10 -2
  97. package/build/esm/queries/applyQuery.js.map +1 -1
  98. package/build/esm/queries/queries.test.js +80 -2
  99. package/build/esm/queries/queries.test.js.map +1 -1
  100. package/build/esm/util/UserAgent.js +2 -2
  101. package/build/esm/util/toDataValue.js +7 -7
  102. package/build/esm/util/toDataValue.js.map +1 -1
  103. package/build/esm/util/toDataValue.test.js +23 -0
  104. package/build/esm/util/toDataValue.test.js.map +1 -1
  105. package/build/esm/util/toDataValueQueries.js +19 -0
  106. package/build/esm/util/toDataValueQueries.js.map +1 -1
  107. package/build/types/createMediaFromReference.d.ts +1 -0
  108. package/build/types/createMediaFromReference.d.ts.map +1 -0
  109. package/build/types/index.d.ts +2 -0
  110. package/build/types/index.d.ts.map +1 -1
  111. package/build/types/object/mediaUpload.d.ts +2 -1
  112. package/build/types/object/mediaUpload.d.ts.map +1 -1
  113. package/build/types/observable/LinkPayload.d.ts +1 -1
  114. package/build/types/observable/ListPayload.d.ts +1 -1
  115. package/build/types/observable/ObservableClient/ObserveLink.d.ts +1 -1
  116. package/build/types/observable/ObservableClient.d.ts +4 -4
  117. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  118. package/build/types/observable/computeObjectSetCacheKey.d.ts +2 -2
  119. package/build/types/observable/computeObjectSetCacheKey.d.ts.map +1 -1
  120. package/build/types/observable/internal/ListQueryView.d.ts.map +1 -1
  121. package/build/types/observable/internal/Store.test.d.ts.map +1 -1
  122. package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts +4 -4
  123. package/build/types/observable/internal/base-list/BaseListQuery.d.ts +1 -1
  124. package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -1
  125. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +1 -1
  126. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
  127. package/build/types/observable/internal/objectset/ObjectSetQueryOptions.d.ts +2 -2
  128. package/build/types/observable/internal/objectset/ObjectSetQueryOptions.d.ts.map +1 -1
  129. package/build/types/observable/internal/testUtils.d.ts +1 -1
  130. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  131. package/build/types/queries/applyQuery.d.ts.map +1 -1
  132. package/package.json +13 -13
  133. package/build/cjs/chunk-22QZVXHI.cjs.map +0 -1
  134. package/build/cjs/chunk-YVZM2JPW.cjs.map +0 -1
  135. package/build/cjs/createClient-BPK4om7e.d.cts +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"InterfaceListQuery.js","names":["groupBy","invariant","additionalContext","ObjectDefRef","ListQuery","PIVOT_IDX","RDP_IDX","RIDS_IDX","InterfaceListQuery","createObjectSet","store","rdpConfig","cacheKey","otherKeys","pivotInfo","rids","sourceSet","createSourceSetForPivot","objectSet","where","canonicalWhere","pivotTo","linkName","withProperties","objectTypeDef","type","apiName","clientCtx","client","objectSetFactory","objects","revalidateObjectType","objectMetadata","fetchMetadata","interfaceMap","revalidate","postProcessFetchedData","data","reloadDataAsFullObjects","createPayload","params","resolvedList","resolvedData","map","obj","$as","isOptimistic","fetchMore","hasMore","nextPageToken","status","lastUpdated","extractRelevantObjects","changes","matchesApiName","object","added","Array","from","addedObjects","filter","modified","modifiedObjects","all","strictMatches","Set","sortaMatches","sourceType","sourceTypeKind","length","groups","x","$objectType","objectTypeToPrimaryKeyToObject","Object","fromEntries","Promise","entries","objectDef","primaryKeyApiName","$in","$primaryKey","result","fetchPage","$includeRid","fullObject","process","env","NODE_ENV"],"sources":["InterfaceListQuery.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 DerivedProperty,\n InterfaceDefinition,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n WhereClause,\n} from \"@osdk/api\";\nimport groupBy from \"object.groupby\";\nimport invariant from \"tiny-invariant\";\nimport { additionalContext, type Client } from \"../../../Client.js\";\nimport type { InterfaceHolder } from \"../../../object/convertWireToOsdkObjects/InterfaceHolder.js\";\nimport { ObjectDefRef } from \"../../../object/convertWireToOsdkObjects/InternalSymbols.js\";\nimport type { ObjectHolder } from \"../../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ListPayload } from \"../../ListPayload.js\";\nimport type { CollectionConnectableParams } from \"../base-list/BaseCollectionQuery.js\";\nimport type { Changes } from \"../Changes.js\";\nimport type { PivotInfo } from \"../PivotCanonicalizer.js\";\nimport type { Rdp } from \"../RdpCanonicalizer.js\";\nimport type { SimpleWhereClause } from \"../SimpleWhereClause.js\";\nimport type { Store } from \"../Store.js\";\nimport { ListQuery, PIVOT_IDX, RDP_IDX, RIDS_IDX } from \"./ListQuery.js\";\n\ntype ExtractRelevantObjectsResult = Record<\"added\" | \"modified\", {\n all: (ObjectHolder | InterfaceHolder)[];\n strictMatches: Set<(ObjectHolder | InterfaceHolder)>;\n sortaMatches: Set<(ObjectHolder | InterfaceHolder)>;\n}>;\n\nexport class InterfaceListQuery extends ListQuery {\n protected createObjectSet(store: Store): ObjectSet<ObjectTypeDefinition> {\n const rdpConfig = this.cacheKey.otherKeys[RDP_IDX];\n const pivotInfo = this.cacheKey.otherKeys[PIVOT_IDX];\n const rids = this.cacheKey.otherKeys[RIDS_IDX];\n\n if (pivotInfo != null) {\n const sourceSet = createSourceSetForPivot(store, pivotInfo, rids);\n\n let objectSet = sourceSet\n .where(this.canonicalWhere as WhereClause<any>)\n .pivotTo(pivotInfo.linkName);\n\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(\n rdpConfig as DerivedProperty.Clause<ObjectTypeDefinition>,\n );\n }\n\n // intersectWith for pivot queries is deferred to fetchPageData\n // where the target type can be resolved asynchronously\n return objectSet;\n }\n\n const type: string = \"interface\" as const;\n const objectTypeDef = {\n type,\n apiName: this.apiName,\n } as ObjectTypeDefinition;\n\n const clientCtx = store.client[additionalContext];\n let objectSet: ObjectSet<ObjectTypeDefinition>;\n if (rids != null) {\n objectSet = clientCtx.objectSetFactory(\n objectTypeDef,\n clientCtx,\n { type: \"static\", objects: [...rids] },\n );\n } else {\n objectSet = store.client(objectTypeDef);\n }\n\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(rdpConfig as Rdp);\n }\n\n return objectSet.where(this.canonicalWhere);\n }\n\n async revalidateObjectType(apiName: string): Promise<void> {\n const objectMetadata = await this.store.client.fetchMetadata({\n type: \"object\",\n apiName,\n });\n\n if (this.apiName in objectMetadata.interfaceMap) {\n await this.revalidate(/* force */ true);\n }\n }\n\n protected async postProcessFetchedData(\n data: Osdk.Instance<any>[],\n ): Promise<Osdk.Instance<any>[]> {\n return reloadDataAsFullObjects(this.store.client, data);\n }\n\n protected createPayload(\n params: CollectionConnectableParams,\n ): ListPayload {\n const resolvedList = params.resolvedData.map((obj: ObjectHolder) =>\n obj.$as(this.apiName)\n );\n\n return {\n resolvedList,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated,\n };\n }\n\n protected extractRelevantObjects(\n changes: Changes,\n ): ExtractRelevantObjectsResult {\n const matchesApiName = ([, object]: [unknown, ObjectHolder]) => {\n return this.apiName in object[ObjectDefRef].interfaceMap;\n };\n\n const added = Array.from(changes.addedObjects).filter(matchesApiName).map((\n [, object],\n ) => object.$as(this.apiName));\n\n const modified = Array.from(changes.modifiedObjects).filter(matchesApiName)\n .map((\n [, object],\n ) => object.$as(this.apiName));\n\n return {\n added: {\n all: added,\n strictMatches: new Set(),\n sortaMatches: new Set(),\n },\n modified: {\n all: modified,\n strictMatches: new Set(),\n sortaMatches: new Set(),\n },\n };\n }\n}\n\nfunction createSourceSetForPivot(\n store: Store,\n pivotInfo: PivotInfo,\n rids: string[] | undefined,\n): ObjectSet<ObjectOrInterfaceDefinition> {\n const clientCtx = store.client[additionalContext];\n\n if (rids != null) {\n return clientCtx.objectSetFactory(\n {\n type: \"object\",\n apiName: pivotInfo.sourceType,\n } as ObjectTypeDefinition,\n clientCtx,\n { type: \"static\", objects: [...rids] },\n );\n }\n\n if (pivotInfo.sourceTypeKind === \"interface\") {\n return store.client({\n type: \"interface\",\n apiName: pivotInfo.sourceType,\n } as InterfaceDefinition) as ObjectSet<ObjectOrInterfaceDefinition>;\n }\n\n return store.client({\n type: \"object\",\n apiName: pivotInfo.sourceType,\n } as ObjectTypeDefinition) as ObjectSet<ObjectOrInterfaceDefinition>;\n}\n\n// Hopefully this can go away when we can just request the full object properties on first load\nasync function reloadDataAsFullObjects(\n client: Client,\n data: Osdk.Instance<any>[],\n) {\n if (data.length === 0) {\n return data;\n }\n\n const groups = groupBy(data, (x) => x.$objectType);\n const objectTypeToPrimaryKeyToObject = Object.fromEntries(\n await Promise.all(\n Object.entries(groups).map<\n Promise<\n [\n /** objectType **/ string,\n Record<string | number, Osdk.Instance<ObjectTypeDefinition>>,\n ]\n >\n >(async ([apiName, objects]) => {\n // Interface query results don't have ObjectDefRef, so we fetch metadata to get primaryKeyApiName\n const objectDef = await client.fetchMetadata({\n type: \"object\",\n apiName,\n });\n const where: SimpleWhereClause = {\n [objectDef.primaryKeyApiName]: {\n $in: objects.map(x => x.$primaryKey),\n },\n };\n\n const result = await client(\n objectDef as ObjectTypeDefinition,\n ).where(\n where as Parameters<ObjectSet<ObjectTypeDefinition>[\"where\"]>[0],\n ).fetchPage({ $includeRid: true });\n return [\n apiName,\n Object.fromEntries(result.data.map(\n x => [x.$primaryKey, x],\n )),\n ];\n }),\n ),\n );\n\n return data.map((obj) => {\n const fullObject =\n objectTypeToPrimaryKeyToObject[obj.$objectType][obj.$primaryKey];\n invariant(\n fullObject,\n `Could not find object ${obj.$objectType} ${obj.$primaryKey}`,\n );\n return fullObject;\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"InterfaceListQuery.js","names":["groupBy","invariant","additionalContext","ObjectDefRef","ListQuery","PIVOT_IDX","RDP_IDX","RIDS_IDX","InterfaceListQuery","createObjectSet","store","rdpConfig","cacheKey","otherKeys","pivotInfo","rids","sourceSet","createSourceSetForPivot","objectSet","where","canonicalWhere","pivotTo","linkName","withProperties","objectTypeDef","type","apiName","clientCtx","client","objectSetFactory","objects","revalidateObjectType","objectMetadata","fetchMetadata","interfaceMap","revalidate","postProcessFetchedData","data","reloadDataAsFullObjects","createPayload","params","resolvedList","resolvedData","map","obj","$as","isOptimistic","fetchMore","hasMore","nextPageToken","status","lastUpdated","extractRelevantObjects","changes","matchesApiName","object","added","Array","from","addedObjects","filter","modified","modifiedObjects","all","strictMatches","Set","sortaMatches","sourceType","sourceTypeKind","length","groups","x","$objectType","objectTypeToPrimaryKeyToObject","Object","fromEntries","Promise","entries","objectDef","primaryKeyApiName","$in","$primaryKey","result","fetchPage","$includeRid","fullObject","process","env","NODE_ENV"],"sources":["InterfaceListQuery.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 DerivedProperty,\n InterfaceDefinition,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n WhereClause,\n} from \"@osdk/api\";\nimport groupBy from \"object.groupby\";\nimport invariant from \"tiny-invariant\";\nimport { additionalContext, type Client } from \"../../../Client.js\";\nimport type { InterfaceHolder } from \"../../../object/convertWireToOsdkObjects/InterfaceHolder.js\";\nimport { ObjectDefRef } from \"../../../object/convertWireToOsdkObjects/InternalSymbols.js\";\nimport type { ObjectHolder } from \"../../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ListPayload } from \"../../ListPayload.js\";\nimport type { CollectionConnectableParams } from \"../base-list/BaseCollectionQuery.js\";\nimport type { Changes } from \"../Changes.js\";\nimport type { PivotInfo } from \"../PivotCanonicalizer.js\";\nimport type { Rdp } from \"../RdpCanonicalizer.js\";\nimport type { SimpleWhereClause } from \"../SimpleWhereClause.js\";\nimport type { Store } from \"../Store.js\";\nimport { ListQuery, PIVOT_IDX, RDP_IDX, RIDS_IDX } from \"./ListQuery.js\";\n\ntype ExtractRelevantObjectsResult = Record<\"added\" | \"modified\", {\n all: (ObjectHolder | InterfaceHolder)[];\n strictMatches: Set<(ObjectHolder | InterfaceHolder)>;\n sortaMatches: Set<(ObjectHolder | InterfaceHolder)>;\n}>;\n\nexport class InterfaceListQuery extends ListQuery {\n protected createObjectSet(store: Store): ObjectSet<ObjectTypeDefinition> {\n const rdpConfig = this.cacheKey.otherKeys[RDP_IDX];\n const pivotInfo = this.cacheKey.otherKeys[PIVOT_IDX];\n const rids = this.cacheKey.otherKeys[RIDS_IDX];\n\n if (pivotInfo != null) {\n const sourceSet = createSourceSetForPivot(store, pivotInfo, rids);\n\n let objectSet = sourceSet\n .where(this.canonicalWhere as WhereClause<any>)\n .pivotTo(pivotInfo.linkName);\n\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(\n rdpConfig as DerivedProperty.Clause<ObjectTypeDefinition>,\n );\n }\n\n // intersectWith for pivot queries is deferred to fetchPageData\n // where the target type can be resolved asynchronously\n return objectSet;\n }\n\n const type: string = \"interface\" as const;\n const objectTypeDef = {\n type,\n apiName: this.apiName,\n } as ObjectTypeDefinition;\n\n const clientCtx = store.client[additionalContext];\n let objectSet: ObjectSet<ObjectTypeDefinition>;\n if (rids != null) {\n objectSet = clientCtx.objectSetFactory(\n objectTypeDef,\n clientCtx,\n { type: \"static\", objects: [...rids] },\n );\n } else {\n objectSet = store.client(objectTypeDef);\n }\n\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(rdpConfig as Rdp);\n }\n\n return objectSet.where(this.canonicalWhere);\n }\n\n async revalidateObjectType(apiName: string): Promise<void> {\n const objectMetadata = await this.store.client.fetchMetadata({\n type: \"object\",\n apiName,\n });\n\n if (this.apiName in objectMetadata.interfaceMap) {\n await this.revalidate(/* force */ true);\n }\n }\n\n protected async postProcessFetchedData(\n data: Osdk.Instance<any>[],\n ): Promise<Osdk.Instance<any>[]> {\n return reloadDataAsFullObjects(this.store.client, data);\n }\n\n protected createPayload(\n params: CollectionConnectableParams,\n ): ListPayload {\n const resolvedList = params.resolvedData?.map((obj: ObjectHolder) =>\n obj.$as(this.apiName)\n );\n\n return {\n resolvedList,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated,\n };\n }\n\n protected extractRelevantObjects(\n changes: Changes,\n ): ExtractRelevantObjectsResult {\n const matchesApiName = ([, object]: [unknown, ObjectHolder]) => {\n return this.apiName in object[ObjectDefRef].interfaceMap;\n };\n\n const added = Array.from(changes.addedObjects).filter(matchesApiName).map((\n [, object],\n ) => object.$as(this.apiName));\n\n const modified = Array.from(changes.modifiedObjects).filter(matchesApiName)\n .map((\n [, object],\n ) => object.$as(this.apiName));\n\n return {\n added: {\n all: added,\n strictMatches: new Set(),\n sortaMatches: new Set(),\n },\n modified: {\n all: modified,\n strictMatches: new Set(),\n sortaMatches: new Set(),\n },\n };\n }\n}\n\nfunction createSourceSetForPivot(\n store: Store,\n pivotInfo: PivotInfo,\n rids: string[] | undefined,\n): ObjectSet<ObjectOrInterfaceDefinition> {\n const clientCtx = store.client[additionalContext];\n\n if (rids != null) {\n return clientCtx.objectSetFactory(\n {\n type: \"object\",\n apiName: pivotInfo.sourceType,\n } as ObjectTypeDefinition,\n clientCtx,\n { type: \"static\", objects: [...rids] },\n );\n }\n\n if (pivotInfo.sourceTypeKind === \"interface\") {\n return store.client({\n type: \"interface\",\n apiName: pivotInfo.sourceType,\n } as InterfaceDefinition) as ObjectSet<ObjectOrInterfaceDefinition>;\n }\n\n return store.client({\n type: \"object\",\n apiName: pivotInfo.sourceType,\n } as ObjectTypeDefinition) as ObjectSet<ObjectOrInterfaceDefinition>;\n}\n\n// Hopefully this can go away when we can just request the full object properties on first load\nasync function reloadDataAsFullObjects(\n client: Client,\n data: Osdk.Instance<any>[],\n) {\n if (data.length === 0) {\n return data;\n }\n\n const groups = groupBy(data, (x) => x.$objectType);\n const objectTypeToPrimaryKeyToObject = Object.fromEntries(\n await Promise.all(\n Object.entries(groups).map<\n Promise<\n [\n /** objectType **/ string,\n Record<string | number, Osdk.Instance<ObjectTypeDefinition>>,\n ]\n >\n >(async ([apiName, objects]) => {\n // Interface query results don't have ObjectDefRef, so we fetch metadata to get primaryKeyApiName\n const objectDef = await client.fetchMetadata({\n type: \"object\",\n apiName,\n });\n const where: SimpleWhereClause = {\n [objectDef.primaryKeyApiName]: {\n $in: objects.map(x => x.$primaryKey),\n },\n };\n\n const result = await client(\n objectDef as ObjectTypeDefinition,\n ).where(\n where as Parameters<ObjectSet<ObjectTypeDefinition>[\"where\"]>[0],\n ).fetchPage({ $includeRid: true });\n return [\n apiName,\n Object.fromEntries(result.data.map(\n x => [x.$primaryKey, x],\n )),\n ];\n }),\n ),\n );\n\n return data.map((obj) => {\n const fullObject =\n objectTypeToPrimaryKeyToObject[obj.$objectType][obj.$primaryKey];\n invariant(\n fullObject,\n `Could not find object ${obj.$objectType} ${obj.$primaryKey}`,\n );\n return fullObject;\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -88,7 +88,7 @@ describe("ListQuery autoFetchMore tests", () => {
88
88
  }, listSub));
89
89
  testStage("Initial loading state");
90
90
  await waitForCall(listSub.next, 1);
91
- expectSingleListCallAndClear(listSub, [], {
91
+ expectSingleListCallAndClear(listSub, undefined, {
92
92
  status: "loading"
93
93
  });
94
94
  testStage("Auto-fetch page 1 (20 items)");
@@ -96,21 +96,21 @@ describe("ListQuery autoFetchMore tests", () => {
96
96
  let payload = expectSingleListCallAndClear(listSub, expect.anything(), {
97
97
  status: "loading"
98
98
  });
99
- expect(payload?.resolvedList.length).toBe(20);
99
+ expect(payload?.resolvedList?.length).toBe(20);
100
100
  testStage("Auto-fetch page 2 (40 items)");
101
101
  await waitForCall(listSub.next, 1);
102
102
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
103
103
  status: "loading"
104
104
  });
105
- expect(payload?.resolvedList.length).toBe(40);
105
+ expect(payload?.resolvedList?.length).toBe(40);
106
106
  testStage("Auto-fetch page 3 (60 items) - threshold met");
107
107
  await waitForCall(listSub.next, 1);
108
108
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
109
109
  status: "loaded"
110
110
  });
111
111
  testStage("Verify final state meets threshold");
112
- expect(payload?.resolvedList.length).toBeGreaterThanOrEqual(50);
113
- expect(payload?.resolvedList.length).toBeLessThanOrEqual(80);
112
+ expect(payload?.resolvedList?.length).toBeGreaterThanOrEqual(50);
113
+ expect(payload?.resolvedList?.length).toBeLessThanOrEqual(80);
114
114
  expect(payload?.fetchMore).toBeDefined();
115
115
  testStage("Verify no additional auto-fetches occur");
116
116
  expectNoMoreCalls(listSub);
@@ -128,7 +128,7 @@ describe("ListQuery autoFetchMore tests", () => {
128
128
  }, listSub));
129
129
  testStage("Initial loading state");
130
130
  await waitForCall(listSub.next, 1);
131
- expectSingleListCallAndClear(listSub, [], {
131
+ expectSingleListCallAndClear(listSub, undefined, {
132
132
  status: "loading"
133
133
  });
134
134
  testStage("Auto-fetch page 1 (20 items)");
@@ -136,32 +136,32 @@ describe("ListQuery autoFetchMore tests", () => {
136
136
  let payload = expectSingleListCallAndClear(listSub, expect.anything(), {
137
137
  status: "loading"
138
138
  });
139
- expect(payload?.resolvedList.length).toBe(20);
139
+ expect(payload?.resolvedList?.length).toBe(20);
140
140
  testStage("Auto-fetch page 2 (40 items)");
141
141
  await waitForCall(listSub.next, 1);
142
142
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
143
143
  status: "loading"
144
144
  });
145
- expect(payload?.resolvedList.length).toBe(40);
145
+ expect(payload?.resolvedList?.length).toBe(40);
146
146
  testStage("Auto-fetch page 3 (60 items)");
147
147
  await waitForCall(listSub.next, 1);
148
148
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
149
149
  status: "loading"
150
150
  });
151
- expect(payload?.resolvedList.length).toBe(60);
151
+ expect(payload?.resolvedList?.length).toBe(60);
152
152
  testStage("Auto-fetch page 4 (80 items)");
153
153
  await waitForCall(listSub.next, 1);
154
154
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
155
155
  status: "loading"
156
156
  });
157
- expect(payload?.resolvedList.length).toBe(80);
157
+ expect(payload?.resolvedList?.length).toBe(80);
158
158
  testStage("Auto-fetch page 5 (100 items) - all data fetched");
159
159
  await waitForCall(listSub.next, 1);
160
160
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
161
161
  status: "loaded"
162
162
  });
163
163
  testStage("Verify all items fetched and no more pages");
164
- expect(payload?.resolvedList.length).toBeGreaterThanOrEqual(80);
164
+ expect(payload?.resolvedList?.length).toBeGreaterThanOrEqual(80);
165
165
  expect(payload?.hasMore).toBe(false);
166
166
  testStage("Verify no additional auto-fetches occur");
167
167
  expectNoMoreCalls(listSub);
@@ -178,7 +178,7 @@ describe("ListQuery autoFetchMore tests", () => {
178
178
  }, listSub));
179
179
  testStage("Initial loading state");
180
180
  await waitForCall(listSub.next, 1);
181
- expectSingleListCallAndClear(listSub, [], {
181
+ expectSingleListCallAndClear(listSub, undefined, {
182
182
  status: "loading"
183
183
  });
184
184
  testStage("First page loads (20 items) and stops");
@@ -187,7 +187,7 @@ describe("ListQuery autoFetchMore tests", () => {
187
187
  status: "loaded"
188
188
  });
189
189
  testStage("Verify only first page fetched");
190
- expect(payload?.resolvedList.length).toBe(20);
190
+ expect(payload?.resolvedList?.length).toBe(20);
191
191
  expect(payload?.fetchMore).toBeDefined();
192
192
  expect(payload?.hasMore).toBe(true);
193
193
  testStage("Verify no additional auto-fetches occur");
@@ -206,7 +206,7 @@ describe("ListQuery autoFetchMore tests", () => {
206
206
  }, listSub));
207
207
  testStage("Initial loading state");
208
208
  await waitForCall(listSub.next, 1);
209
- expectSingleListCallAndClear(listSub, [], {
209
+ expectSingleListCallAndClear(listSub, undefined, {
210
210
  status: "loading"
211
211
  });
212
212
  testStage("Auto-fetch page 1 (20 items)");
@@ -214,32 +214,32 @@ describe("ListQuery autoFetchMore tests", () => {
214
214
  let payload = expectSingleListCallAndClear(listSub, expect.anything(), {
215
215
  status: "loading"
216
216
  });
217
- expect(payload?.resolvedList.length).toBe(20);
217
+ expect(payload?.resolvedList?.length).toBe(20);
218
218
  testStage("Auto-fetch page 2 (40 items)");
219
219
  await waitForCall(listSub.next, 1);
220
220
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
221
221
  status: "loading"
222
222
  });
223
- expect(payload?.resolvedList.length).toBe(40);
223
+ expect(payload?.resolvedList?.length).toBe(40);
224
224
  testStage("Auto-fetch page 3 (60 items)");
225
225
  await waitForCall(listSub.next, 1);
226
226
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
227
227
  status: "loading"
228
228
  });
229
- expect(payload?.resolvedList.length).toBe(60);
229
+ expect(payload?.resolvedList?.length).toBe(60);
230
230
  testStage("Auto-fetch page 4 (80 items)");
231
231
  await waitForCall(listSub.next, 1);
232
232
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
233
233
  status: "loading"
234
234
  });
235
- expect(payload?.resolvedList.length).toBe(80);
235
+ expect(payload?.resolvedList?.length).toBe(80);
236
236
  testStage("Auto-fetch page 5 (100 items) - all data fetched, stops despite high threshold");
237
237
  await waitForCall(listSub.next, 1);
238
238
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
239
239
  status: "loaded"
240
240
  });
241
241
  testStage("Verify all available items fetched");
242
- expect(payload?.resolvedList.length).toBeGreaterThanOrEqual(80);
242
+ expect(payload?.resolvedList?.length).toBeGreaterThanOrEqual(80);
243
243
  expect(payload?.hasMore).toBe(false);
244
244
  testStage("Verify no additional auto-fetches occur");
245
245
  expectNoMoreCalls(listSub);
@@ -258,7 +258,7 @@ describe("ListQuery autoFetchMore tests", () => {
258
258
  }, listSub));
259
259
  testStage("Initial loading state");
260
260
  await waitForCall(listSub.next, 1);
261
- expectSingleListCallAndClear(listSub, [], {
261
+ expectSingleListCallAndClear(listSub, undefined, {
262
262
  status: "loading"
263
263
  });
264
264
  testStage("First page loads (20 items)");
@@ -267,7 +267,7 @@ describe("ListQuery autoFetchMore tests", () => {
267
267
  status: "loaded"
268
268
  });
269
269
  testStage("Verify data loaded and sorted descending");
270
- expect(payload?.resolvedList.length).toBe(20);
270
+ expect(payload?.resolvedList?.length).toBe(20);
271
271
  expect(payload?.resolvedList).toBeTruthy();
272
272
  // Verify items are sorted descending by checking if first item has higher id than last
273
273
  if (payload?.resolvedList && payload.resolvedList.length > 1) {
@@ -300,7 +300,7 @@ describe("ListQuery autoFetchMore tests", () => {
300
300
  }, listSub));
301
301
  testStage("Initial loading state");
302
302
  await waitForCall(listSub.next, 1);
303
- expectSingleListCallAndClear(listSub, [], {
303
+ expectSingleListCallAndClear(listSub, undefined, {
304
304
  status: "loading"
305
305
  });
306
306
  testStage("First page: 2 even items sorted desc (ids 4, 2)");
@@ -308,9 +308,9 @@ describe("ListQuery autoFetchMore tests", () => {
308
308
  let payload = expectSingleListCallAndClear(listSub, expect.anything(), {
309
309
  status: "loaded"
310
310
  });
311
- expect(payload?.resolvedList.length).toBe(2);
312
- expect(payload?.resolvedList[0].id).toBe(4);
313
- expect(payload?.resolvedList[1].id).toBe(2);
311
+ expect(payload?.resolvedList?.length).toBe(2);
312
+ expect(payload?.resolvedList?.[0].id).toBe(4);
313
+ expect(payload?.resolvedList?.[1].id).toBe(2);
314
314
  expect(payload?.hasMore).toBe(true);
315
315
  testStage("fetchMore() to get last even item (id 0)");
316
316
  void payload.fetchMore();
@@ -322,8 +322,8 @@ describe("ListQuery autoFetchMore tests", () => {
322
322
  payload = expectSingleListCallAndClear(listSub, expect.anything(), {
323
323
  status: "loaded"
324
324
  });
325
- expect(payload?.resolvedList.length).toBe(3);
326
- expect(payload?.resolvedList[2].id).toBe(0);
325
+ expect(payload?.resolvedList?.length).toBe(3);
326
+ expect(payload?.resolvedList?.[2].id).toBe(0);
327
327
  expect(payload?.hasMore).toBe(false);
328
328
  testStage("Verify no additional unexpected calls");
329
329
  expectNoMoreCalls(listSub);
@@ -339,7 +339,7 @@ describe("ListQuery autoFetchMore tests", () => {
339
339
  }, listSub));
340
340
  testStage("Initial loading state");
341
341
  await waitForCall(listSub.next, 1);
342
- expectSingleListCallAndClear(listSub, [], {
342
+ expectSingleListCallAndClear(listSub, undefined, {
343
343
  status: "loading"
344
344
  });
345
345
  testStage("Empty result with hasMore: false");
@@ -347,7 +347,7 @@ describe("ListQuery autoFetchMore tests", () => {
347
347
  const payload = expectSingleListCallAndClear(listSub, expect.anything(), {
348
348
  status: "loaded"
349
349
  });
350
- expect(payload?.resolvedList.length).toBe(0);
350
+ expect(payload?.resolvedList?.length).toBe(0);
351
351
  expect(payload?.hasMore).toBe(false);
352
352
  testStage("Verify no additional unexpected calls");
353
353
  expectNoMoreCalls(listSub);
@@ -420,7 +420,7 @@ describe("ListQuery pivotTo tests", () => {
420
420
  }, listSub));
421
421
  testStage("Initial loading state");
422
422
  await waitForCall(listSub.next, 1);
423
- expectSingleListCallAndClear(listSub, [], {
423
+ expectSingleListCallAndClear(listSub, undefined, {
424
424
  status: "loading"
425
425
  });
426
426
  testStage("Data loads");
@@ -429,8 +429,8 @@ describe("ListQuery pivotTo tests", () => {
429
429
  status: "loaded"
430
430
  });
431
431
  testStage("Verify only office linked to employee 1 is returned");
432
- expect(payload?.resolvedList.length).toBe(1);
433
- expect(payload?.resolvedList[0]).toMatchObject({
432
+ expect(payload?.resolvedList?.length).toBe(1);
433
+ expect(payload?.resolvedList?.[0]).toMatchObject({
434
434
  officeId: "office-a",
435
435
  name: "Office A"
436
436
  });
@@ -480,7 +480,7 @@ describe("ListQuery pivotTo tests", () => {
480
480
  }, listSub));
481
481
  testStage("Initial loading state");
482
482
  await waitForCall(listSub.next, 1);
483
- expectSingleListCallAndClear(listSub, [], {
483
+ expectSingleListCallAndClear(listSub, undefined, {
484
484
  status: "loading"
485
485
  });
486
486
  testStage("Data loads");
@@ -489,7 +489,7 @@ describe("ListQuery pivotTo tests", () => {
489
489
  status: "loaded"
490
490
  });
491
491
  testStage("Verify offices linked to emp1 and emp3 are returned");
492
- expect(payload?.resolvedList.length).toBe(2);
492
+ expect(payload?.resolvedList?.length).toBe(2);
493
493
  expect(payload?.resolvedList).toEqual(expect.arrayContaining([expect.objectContaining({
494
494
  officeId: "office-a"
495
495
  }), expect.objectContaining({
@@ -537,7 +537,7 @@ describe("ListQuery pivotTo tests", () => {
537
537
  }, listSub));
538
538
  testStage("Initial loading state");
539
539
  await waitForCall(listSub.next, 1);
540
- expectSingleListCallAndClear(listSub, [], {
540
+ expectSingleListCallAndClear(listSub, undefined, {
541
541
  status: "loading"
542
542
  });
543
543
  testStage("Data loads");
@@ -546,8 +546,8 @@ describe("ListQuery pivotTo tests", () => {
546
546
  status: "loaded"
547
547
  });
548
548
  testStage("Verify only office linked to employee 1 is returned");
549
- expect(payload?.resolvedList.length).toBe(1);
550
- expect(payload?.resolvedList[0]).toMatchObject({
549
+ expect(payload?.resolvedList?.length).toBe(1);
550
+ expect(payload?.resolvedList?.[0]).toMatchObject({
551
551
  officeId: "office-a",
552
552
  name: "Office A"
553
553
  });
@@ -578,7 +578,7 @@ describe("ListQuery pivotTo tests", () => {
578
578
  }, listSub));
579
579
  testStage("Initial loading state");
580
580
  await waitForCall(listSub.next, 1);
581
- expectSingleListCallAndClear(listSub, [], {
581
+ expectSingleListCallAndClear(listSub, undefined, {
582
582
  status: "loading"
583
583
  });
584
584
  testStage("Data loads");
@@ -587,7 +587,7 @@ describe("ListQuery pivotTo tests", () => {
587
587
  status: "loaded"
588
588
  });
589
589
  testStage("Verify empty result");
590
- expect(payload?.resolvedList.length).toBe(0);
590
+ expect(payload?.resolvedList?.length).toBe(0);
591
591
  testStage("Verify no additional calls");
592
592
  expectNoMoreCalls(listSub);
593
593
  });
@@ -613,7 +613,7 @@ describe("ListQuery pivotTo tests", () => {
613
613
  }, listSub));
614
614
  testStage("Initial loading state verifies query construction succeeded");
615
615
  await waitForCall(listSub.next, 1);
616
- expectSingleListCallAndClear(listSub, [], {
616
+ expectSingleListCallAndClear(listSub, undefined, {
617
617
  status: "loading"
618
618
  });
619
619
  testStage("Verify no additional calls");
@@ -641,7 +641,7 @@ describe("ListQuery pivotTo tests", () => {
641
641
  pivotTo: "officeLink"
642
642
  }, listSub));
643
643
  await waitForCall(listSub.next, 1);
644
- expectSingleListCallAndClear(listSub, [], {
644
+ expectSingleListCallAndClear(listSub, undefined, {
645
645
  status: "loading"
646
646
  });
647
647
  await waitForCall(listSub.next, 1);
@@ -649,7 +649,7 @@ describe("ListQuery pivotTo tests", () => {
649
649
  status: "loaded"
650
650
  });
651
651
  testStage("Verify data loaded successfully");
652
- expect(payload?.resolvedList.length).toBe(1);
652
+ expect(payload?.resolvedList).toHaveLength(1);
653
653
  expectNoMoreCalls(listSub);
654
654
  });
655
655
  it("pivotTo with multiple source objects returns all linked targets", async () => {
@@ -685,7 +685,7 @@ describe("ListQuery pivotTo tests", () => {
685
685
  pivotTo: "officeLink"
686
686
  }, listSub));
687
687
  await waitForCall(listSub.next, 1);
688
- expectSingleListCallAndClear(listSub, [], {
688
+ expectSingleListCallAndClear(listSub, undefined, {
689
689
  status: "loading"
690
690
  });
691
691
  await waitForCall(listSub.next, 1);
@@ -693,9 +693,8 @@ describe("ListQuery pivotTo tests", () => {
693
693
  status: "loaded"
694
694
  });
695
695
  testStage("Verify both linked offices are returned");
696
- expect(payload?.resolvedList.length).toBe(2);
697
- const officeIds = payload?.resolvedList.map(o => o.$primaryKey).sort();
698
- expect(officeIds).toEqual(["office-a", "office-b"]);
696
+ expect(payload?.resolvedList).toHaveLength(2);
697
+ expect(payload?.resolvedList?.map(o => o.$primaryKey).sort()).toEqual(["office-a", "office-b"]);
699
698
  expectNoMoreCalls(listSub);
700
699
  });
701
700
  });