@osdk/client 2.8.0-beta.27 → 2.8.0-beta.29

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 (119) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +4 -20
  3. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  4. package/build/browser/observable/ObservableClient/MediaObservableTypes.js +2 -0
  5. package/build/browser/observable/ObservableClient/MediaObservableTypes.js.map +1 -0
  6. package/build/browser/observable/ObservableClient/MediaTypes.js +2 -0
  7. package/build/browser/observable/ObservableClient/MediaTypes.js.map +1 -0
  8. package/build/browser/observable/ObservableClient.js.map +1 -1
  9. package/build/browser/observable/internal/Changes.js.map +1 -1
  10. package/build/browser/observable/internal/KnownCacheKey.js.map +1 -1
  11. package/build/browser/observable/internal/ListQueryView.js +21 -9
  12. package/build/browser/observable/internal/ListQueryView.js.map +1 -1
  13. package/build/browser/observable/internal/ObservableClientImpl.js +32 -0
  14. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  15. package/build/browser/observable/internal/OrderByCanonicalizer.js +5 -2
  16. package/build/browser/observable/internal/OrderByCanonicalizer.js.map +1 -1
  17. package/build/browser/observable/internal/SelectCanonicalizer.js +3 -0
  18. package/build/browser/observable/internal/SelectCanonicalizer.js.map +1 -1
  19. package/build/browser/observable/internal/Store.js +5 -1
  20. package/build/browser/observable/internal/Store.js.map +1 -1
  21. package/build/browser/observable/internal/WhereClauseCanonicalizer.js +3 -0
  22. package/build/browser/observable/internal/WhereClauseCanonicalizer.js.map +1 -1
  23. package/build/browser/observable/internal/list/InterfaceListQuery.js +2 -6
  24. package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
  25. package/build/browser/observable/internal/list/ListQuery.js +6 -9
  26. package/build/browser/observable/internal/list/ListQuery.js.map +1 -1
  27. package/build/browser/observable/internal/media/BlobMemoryManager.js +116 -0
  28. package/build/browser/observable/internal/media/BlobMemoryManager.js.map +1 -0
  29. package/build/browser/observable/internal/media/MediaMetadataCacheKey.js +2 -0
  30. package/build/browser/observable/internal/media/MediaMetadataCacheKey.js.map +1 -0
  31. package/build/browser/observable/internal/media/MediaMetadataQuery.js +159 -0
  32. package/build/browser/observable/internal/media/MediaMetadataQuery.js.map +1 -0
  33. package/build/browser/observable/internal/media/getMediaCacheKey.js +28 -0
  34. package/build/browser/observable/internal/media/getMediaCacheKey.js.map +1 -0
  35. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  36. package/build/browser/queries/applyQuery.js +1 -1
  37. package/build/browser/queries/applyQuery.js.map +1 -1
  38. package/build/browser/util/UserAgent.js +2 -2
  39. package/build/cjs/{chunk-BWOPPEUP.cjs → chunk-KGWUPXAM.cjs} +2 -19
  40. package/build/cjs/chunk-KGWUPXAM.cjs.map +1 -0
  41. package/build/cjs/{chunk-ZPGIIKEZ.cjs → chunk-XYZOCIVH.cjs} +40 -40
  42. package/build/cjs/chunk-XYZOCIVH.cjs.map +1 -0
  43. package/build/cjs/index.cjs +10 -10
  44. package/build/cjs/public/internal.cjs +8 -8
  45. package/build/cjs/public/unstable-do-not-use.cjs +137 -89
  46. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  47. package/build/cjs/public/unstable-do-not-use.d.cts +19 -1
  48. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +4 -20
  49. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  50. package/build/esm/observable/ObservableClient/MediaObservableTypes.js +2 -0
  51. package/build/esm/observable/ObservableClient/MediaObservableTypes.js.map +1 -0
  52. package/build/esm/observable/ObservableClient/MediaTypes.js +2 -0
  53. package/build/esm/observable/ObservableClient/MediaTypes.js.map +1 -0
  54. package/build/esm/observable/ObservableClient.js.map +1 -1
  55. package/build/esm/observable/internal/Changes.js.map +1 -1
  56. package/build/esm/observable/internal/KnownCacheKey.js.map +1 -1
  57. package/build/esm/observable/internal/ListQueryView.js +21 -9
  58. package/build/esm/observable/internal/ListQueryView.js.map +1 -1
  59. package/build/esm/observable/internal/ObservableClientImpl.js +32 -0
  60. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  61. package/build/esm/observable/internal/OrderByCanonicalizer.js +5 -2
  62. package/build/esm/observable/internal/OrderByCanonicalizer.js.map +1 -1
  63. package/build/esm/observable/internal/SelectCanonicalizer.js +3 -0
  64. package/build/esm/observable/internal/SelectCanonicalizer.js.map +1 -1
  65. package/build/esm/observable/internal/Store.js +5 -1
  66. package/build/esm/observable/internal/Store.js.map +1 -1
  67. package/build/esm/observable/internal/WhereClauseCanonicalizer.js +3 -0
  68. package/build/esm/observable/internal/WhereClauseCanonicalizer.js.map +1 -1
  69. package/build/esm/observable/internal/list/InterfaceListQuery.js +2 -6
  70. package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
  71. package/build/esm/observable/internal/list/ListQuery.js +6 -9
  72. package/build/esm/observable/internal/list/ListQuery.js.map +1 -1
  73. package/build/esm/observable/internal/media/BlobMemoryManager.js +116 -0
  74. package/build/esm/observable/internal/media/BlobMemoryManager.js.map +1 -0
  75. package/build/esm/observable/internal/media/MediaMetadataCacheKey.js +2 -0
  76. package/build/esm/observable/internal/media/MediaMetadataCacheKey.js.map +1 -0
  77. package/build/esm/observable/internal/media/MediaMetadataQuery.js +159 -0
  78. package/build/esm/observable/internal/media/MediaMetadataQuery.js.map +1 -0
  79. package/build/esm/observable/internal/media/getMediaCacheKey.js +28 -0
  80. package/build/esm/observable/internal/media/getMediaCacheKey.js.map +1 -0
  81. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  82. package/build/esm/queries/applyQuery.js +1 -1
  83. package/build/esm/queries/applyQuery.js.map +1 -1
  84. package/build/esm/util/UserAgent.js +2 -2
  85. package/build/types/observable/ObservableClient/MediaObservableTypes.d.ts +35 -0
  86. package/build/types/observable/ObservableClient/MediaObservableTypes.d.ts.map +1 -0
  87. package/build/types/observable/ObservableClient/MediaTypes.d.ts +1 -0
  88. package/build/types/observable/ObservableClient/MediaTypes.d.ts.map +1 -0
  89. package/build/types/observable/ObservableClient.d.ts +19 -0
  90. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  91. package/build/types/observable/internal/Changes.d.ts +4 -3
  92. package/build/types/observable/internal/Changes.d.ts.map +1 -1
  93. package/build/types/observable/internal/KnownCacheKey.d.ts +2 -1
  94. package/build/types/observable/internal/KnownCacheKey.d.ts.map +1 -1
  95. package/build/types/observable/internal/ListQueryView.d.ts.map +1 -1
  96. package/build/types/observable/internal/OrderByCanonicalizer.d.ts +2 -1
  97. package/build/types/observable/internal/OrderByCanonicalizer.d.ts.map +1 -1
  98. package/build/types/observable/internal/SelectCanonicalizer.d.ts +2 -0
  99. package/build/types/observable/internal/SelectCanonicalizer.d.ts.map +1 -1
  100. package/build/types/observable/internal/Store.d.ts.map +1 -1
  101. package/build/types/observable/internal/WhereClauseCanonicalizer.d.ts +1 -0
  102. package/build/types/observable/internal/WhereClauseCanonicalizer.d.ts.map +1 -1
  103. package/build/types/observable/internal/list/InterfaceListQuery.d.ts.map +1 -1
  104. package/build/types/observable/internal/list/ListQuery.d.ts +2 -0
  105. package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -1
  106. package/build/types/observable/internal/media/BlobMemoryManager.d.ts +10 -0
  107. package/build/types/observable/internal/media/BlobMemoryManager.d.ts.map +1 -0
  108. package/build/types/observable/internal/media/MediaMetadataCacheKey.d.ts +4 -0
  109. package/build/types/observable/internal/media/MediaMetadataCacheKey.d.ts.map +1 -0
  110. package/build/types/observable/internal/media/MediaMetadataQuery.d.ts +23 -0
  111. package/build/types/observable/internal/media/MediaMetadataQuery.d.ts.map +1 -0
  112. package/build/types/observable/internal/media/getMediaCacheKey.d.ts +2 -0
  113. package/build/types/observable/internal/media/getMediaCacheKey.d.ts.map +1 -0
  114. package/build/types/public/unstable-do-not-use.d.ts +1 -1
  115. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  116. package/build/types/queries/applyQuery.d.ts.map +1 -1
  117. package/package.json +7 -7
  118. package/build/cjs/chunk-BWOPPEUP.cjs.map +0 -1
  119. package/build/cjs/chunk-ZPGIIKEZ.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ObservableClientImpl.js","names":["Subscription","additionalContext","getWireObjectSet","isObjectSet","extractObjectOrInterfaceType","UnsubscribableWrapper","ObservableClientImpl","constructor","store","__experimentalStore","applyAction","bind","validateAction","observeObject","apiName","pk","options","subFn","objects","observe","observeList","lists","observeAggregation","objectSet","aggregations","observeAsync","observeFunction","queryDef","params","dependsOn","map","dep","instances","objectSetWires","item","dependsOnObjects","push","$apiName","$objectType","$primaryKey","objectSetTypesPromise","length","Promise","all","wire","client","then","types","filter","t","undefined","functions","observeLinks","linkName","objectsArray","Array","isArray","observer","observeSingleLink","observeMultiLinks","observeObjectSet","baseObjectSet","objectSets","invalidateAll","invalidateObjects","invalidateObjectType","type","invalidateFunction","invalidateFunctionsByObject","primaryKey","canonicalizeWhereClause","where","whereCanonicalizer","canonicalize","next","resolvedList","linkedObjectsBySourcePrimaryKey","Map","isOptimistic","lastUpdated","fetchMore","resolve","hasMore","status","totalCount","parentSub","obj","sourceType","add","links","srcType","sourceUnderlyingObjectType","totalExpected","perObjectData","errored","mergeAndEmit","seen","fetchMores","latestUpdated","payload","values","set","payloads","d","loading","size","some","p","from","fn","String","objKey","error","err","unsubscribe","complete"],"sources":["ObservableClientImpl.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 ActionEditResponse,\n ActionValidationResponse,\n AggregateOpts,\n CompileTimeMetadata,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n WirePropertyTypes,\n} from \"@osdk/api\";\nimport { Subscription } from \"rxjs\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { additionalContext } from \"../../Client.js\";\nimport {\n getWireObjectSet,\n isObjectSet,\n} from \"../../objectSet/createObjectSet.js\";\nimport { extractObjectOrInterfaceType } from \"../../util/extractObjectOrInterfaceType.js\";\nimport type { FunctionPayload } from \"../FunctionPayload.js\";\nimport type { SpecificLinkPayload } from \"../LinkPayload.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { ObjectSetPayload } from \"../ObjectSetPayload.js\";\nimport type {\n ObservableClient,\n ObserveAggregationArgs,\n ObserveAggregationOptions,\n ObserveAggregationOptionsWithObjectSet,\n ObserveFunctionCallbackArgs,\n ObserveFunctionOptions,\n ObserveListOptions,\n ObserveObjectCallbackArgs,\n ObserveObjectOptions,\n ObserveObjectsCallbackArgs,\n ObserveObjectSetArgs,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { Observer } from \"../ObservableClient/common.js\";\nimport type { ObserveLinks } from \"../ObservableClient/ObserveLink.js\";\nimport type { AggregationPayloadBase } from \"./aggregation/AggregationQuery.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport type { ObserveObjectSetOptions } from \"./objectset/ObjectSetQueryOptions.js\";\nimport type { Store } from \"./Store.js\";\nimport { UnsubscribableWrapper } from \"./UnsubscribableWrapper.js\";\n\n/**\n * Implementation of the public ObservableClient interface.\n * - Delegates all operations to the Store for consistency\n * - Serves as the entry point for reactive data management\n * - Ensures proper method binding and API exposure\n *\n * @internal\n */\nexport class ObservableClientImpl implements ObservableClient {\n __experimentalStore: Store;\n\n constructor(store: Store) {\n this.__experimentalStore = store;\n\n this.applyAction = store.applyAction.bind(store);\n this.validateAction = store.validateAction.bind(store);\n }\n\n public observeObject: <T extends ObjectOrInterfaceDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: Omit<ObserveObjectOptions<T>, \"apiName\" | \"pk\">,\n subFn: Observer<ObserveObjectCallbackArgs<T>>,\n ) => Unsubscribable = (apiName, pk, options, subFn) => {\n return this.__experimentalStore.objects.observe(\n {\n ...options,\n apiName,\n pk,\n },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ObjectPayload>,\n );\n };\n\n public observeList: <\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveListOptions<T, RDPs>,\n subFn: Observer<ObserveObjectsCallbackArgs<T, RDPs>>,\n ) => Unsubscribable = (options, subFn) => {\n return this.__experimentalStore.lists.observe(\n options,\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ListPayload>,\n );\n };\n\n public observeAggregation<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveAggregationOptions<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ): Unsubscribable;\n public observeAggregation<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveAggregationOptionsWithObjectSet<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ): Promise<Unsubscribable>;\n public observeAggregation<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options:\n | ObserveAggregationOptions<T, A, RDPs>\n | ObserveAggregationOptionsWithObjectSet<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ): Unsubscribable | Promise<Unsubscribable> {\n if (options.objectSet) {\n return this.__experimentalStore.aggregations.observeAsync(\n options as ObserveAggregationOptionsWithObjectSet<T, A, RDPs>,\n subFn as Observer<AggregationPayloadBase>,\n );\n }\n return this.__experimentalStore.aggregations.observe(\n options as ObserveAggregationOptions<T, A, RDPs>,\n subFn as Observer<AggregationPayloadBase>,\n );\n }\n\n public observeFunction: <Q extends QueryDefinition<unknown>>(\n queryDef: Q,\n params: Record<string, unknown> | undefined,\n options: ObserveFunctionOptions,\n subFn: Observer<ObserveFunctionCallbackArgs<Q>>,\n ) => Unsubscribable = (queryDef, params, options, subFn) => {\n const dependsOn = options.dependsOn?.map(dep =>\n typeof dep === \"string\" ? dep : dep.apiName\n );\n\n // Partition dependsOnObjects into instances vs ObjectSets\n type ObjectDependency = { $apiName: string; $primaryKey: string | number };\n const instances: ObjectDependency[] = [];\n const objectSetWires: Array<\n ReturnType<typeof getWireObjectSet>\n > = [];\n\n for (const item of options.dependsOnObjects ?? []) {\n if (isObjectSet(item)) {\n objectSetWires.push(getWireObjectSet(item));\n } else {\n instances.push({\n $apiName: item.$objectType ?? item.$apiName,\n $primaryKey: item.$primaryKey,\n });\n }\n }\n\n // Start async extraction of ObjectSet types\n const objectSetTypesPromise = objectSetWires.length > 0\n ? Promise.all(\n objectSetWires.map(wire =>\n extractObjectOrInterfaceType(\n this.__experimentalStore.client[additionalContext],\n wire,\n )\n ),\n ).then(types =>\n types\n .filter((t): t is NonNullable<typeof t> => t != null)\n .map(t => t.apiName)\n )\n : undefined;\n\n return this.__experimentalStore.functions.observe(\n {\n ...options,\n queryDef,\n params,\n dependsOn,\n dependsOnObjects: instances,\n objectSetTypesPromise,\n },\n subFn as unknown as Observer<FunctionPayload>,\n );\n };\n\n public observeLinks: <\n T extends ObjectOrInterfaceDefinition,\n L extends keyof CompileTimeMetadata<T>[\"links\"] & string,\n >(\n objects: Osdk.Instance<T> | Array<Osdk.Instance<T>>,\n linkName: L,\n options: ObserveLinks.Options<T, L>,\n subFn: Observer<\n ObserveLinks.CallbackArgs<\n CompileTimeMetadata<T>[\"links\"][L][\"targetType\"]\n >\n >,\n ) => Unsubscribable = (objects, linkName, options, subFn) => {\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n const observer = subFn as unknown as Observer<SpecificLinkPayload>;\n\n return objectsArray.length <= 1\n ? observeSingleLink(\n this.__experimentalStore,\n objectsArray,\n linkName,\n options,\n observer,\n )\n : observeMultiLinks(\n this.__experimentalStore,\n objectsArray,\n linkName,\n options,\n observer,\n );\n };\n\n public applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: ObservableClient.ApplyActionOptions,\n ) => Promise<ActionEditResponse>;\n\n public validateAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n ) => Promise<ActionValidationResponse>;\n\n public observeObjectSet<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<\n string,\n WirePropertyTypes | undefined | Array<WirePropertyTypes>\n > = {},\n >(\n baseObjectSet: ObjectSet<T>,\n options: ObserveObjectSetOptions<T, RDPs>,\n subFn: Observer<ObserveObjectSetArgs<T, RDPs>>,\n ): Unsubscribable {\n return this.__experimentalStore.objectSets.observe(\n { baseObjectSet, ...options },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ObjectSetPayload>,\n );\n }\n\n public invalidateAll(): Promise<void> {\n return this.__experimentalStore.invalidateAll();\n }\n\n public invalidateObjects(\n objects:\n | Osdk.Instance<ObjectTypeDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectTypeDefinition>>,\n ): Promise<void> {\n return this.__experimentalStore.invalidateObjects(objects);\n }\n\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n type: T | T[\"apiName\"],\n ): Promise<void> {\n return this.__experimentalStore.invalidateObjectType(type, undefined);\n }\n\n public invalidateFunction(\n apiName: string | QueryDefinition<unknown>,\n params?: Record<string, unknown>,\n ): Promise<void> {\n return this.__experimentalStore.invalidateFunction(apiName, params);\n }\n\n public invalidateFunctionsByObject(\n apiName: string,\n primaryKey: string | number,\n ): Promise<void> {\n return this.__experimentalStore.invalidateFunctionsByObject(\n apiName,\n primaryKey,\n );\n }\n\n public canonicalizeWhereClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(where: WhereClause<T, RDPs>): Canonical<WhereClause<T, RDPs>> {\n return this.__experimentalStore.whereCanonicalizer\n .canonicalize(where) as Canonical<WhereClause<T, RDPs>>;\n }\n}\n\nfunction observeSingleLink(\n store: Store,\n objectsArray: ReadonlyArray<Osdk.Instance<ObjectOrInterfaceDefinition>>,\n linkName: string,\n options: ObserveLinks.Options<ObjectOrInterfaceDefinition, string>,\n observer: Observer<SpecificLinkPayload>,\n): Unsubscribable {\n if (objectsArray.length === 0) {\n observer.next({\n resolvedList: [],\n linkedObjectsBySourcePrimaryKey: new Map(),\n isOptimistic: false,\n lastUpdated: 0,\n fetchMore: () => Promise.resolve(),\n hasMore: false,\n status: \"loaded\",\n totalCount: \"0\",\n });\n return new UnsubscribableWrapper(new Subscription());\n }\n\n const parentSub = new Subscription();\n\n for (const obj of objectsArray) {\n const pk = obj.$primaryKey;\n const sourceType: \"object\" | \"interface\" = obj.$apiName === obj.$objectType\n ? \"object\"\n : \"interface\";\n\n parentSub.add(\n store.links.observe(\n {\n ...options,\n srcType: {\n type: sourceType,\n apiName: obj.$apiName,\n },\n sourceUnderlyingObjectType: obj.$objectType,\n linkName,\n pk,\n },\n observer,\n ),\n );\n }\n\n return new UnsubscribableWrapper(parentSub);\n}\n\nfunction observeMultiLinks(\n store: Store,\n objectsArray: ReadonlyArray<Osdk.Instance<ObjectOrInterfaceDefinition>>,\n linkName: string,\n options: ObserveLinks.Options<ObjectOrInterfaceDefinition, string>,\n observer: Observer<SpecificLinkPayload>,\n): Unsubscribable {\n const parentSub = new Subscription();\n const totalExpected = objectsArray.length;\n const perObjectData = new Map<\n string,\n { payload: SpecificLinkPayload; pk: string | number }\n >();\n let errored = false;\n\n function mergeAndEmit() {\n if (errored) {\n return;\n }\n\n const seen = new Map<\n string,\n NonNullable<SpecificLinkPayload[\"resolvedList\"]>[number]\n >();\n const linkedObjectsBySourcePrimaryKey = new Map<\n string | number,\n ReadonlyArray<NonNullable<SpecificLinkPayload[\"resolvedList\"]>[number]>\n >();\n const fetchMores: Array<() => Promise<void>> = [];\n let latestUpdated = 0;\n let hasMore = false;\n let isOptimistic = false;\n\n for (const { payload, pk } of perObjectData.values()) {\n linkedObjectsBySourcePrimaryKey.set(pk, payload.resolvedList ?? []);\n\n for (const obj of payload.resolvedList ?? []) {\n seen.set(`${obj.$objectType}:${obj.$primaryKey}`, obj);\n }\n if (payload.lastUpdated > latestUpdated) {\n latestUpdated = payload.lastUpdated;\n }\n if (payload.isOptimistic) {\n isOptimistic = true;\n }\n if (payload.hasMore) {\n hasMore = true;\n fetchMores.push(payload.fetchMore);\n }\n }\n\n const payloads = [...perObjectData.values()].map(d => d.payload);\n const loading = perObjectData.size < totalExpected\n || payloads.some(p => p.status === \"init\" || p.status === \"loading\");\n\n observer.next({\n resolvedList: Array.from(seen.values()),\n linkedObjectsBySourcePrimaryKey,\n isOptimistic,\n lastUpdated: latestUpdated,\n fetchMore: hasMore\n ? () => Promise.all(fetchMores.map(fn => fn())).then(() => {})\n : () => Promise.resolve(),\n hasMore,\n status: loading\n ? \"loading\"\n : payloads.some(p => p.status === \"error\")\n ? \"error\"\n : \"loaded\",\n ...(!hasMore ? { totalCount: String(seen.size) } : {}),\n });\n }\n\n for (const obj of objectsArray) {\n const objKey = `${obj.$objectType ?? obj.$apiName}:${obj.$primaryKey}`;\n const pk = obj.$primaryKey;\n\n const sourceType: \"object\" | \"interface\" = obj.$apiName === obj.$objectType\n ? \"object\"\n : \"interface\";\n\n parentSub.add(\n store.links.observe(\n {\n ...options,\n srcType: {\n type: sourceType,\n apiName: obj.$apiName,\n },\n sourceUnderlyingObjectType: obj.$objectType,\n linkName,\n pk,\n },\n {\n next: (payload: SpecificLinkPayload) => {\n if (errored) {\n return;\n }\n perObjectData.set(objKey, { payload, pk });\n mergeAndEmit();\n },\n error: (err: unknown) => {\n if (errored) {\n return;\n }\n errored = true;\n parentSub.unsubscribe();\n observer.error(err);\n },\n // store link queries are long-lived and do not complete\n complete: () => {},\n },\n ),\n );\n }\n\n return new UnsubscribableWrapper(parentSub);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ObservableClientImpl.js","names":["Subscription","additionalContext","getWireObjectSet","isObjectSet","extractObjectOrInterfaceType","UnsubscribableWrapper","ObservableClientImpl","unionCache","WeakMap","intersectCache","subtractCache","constructor","store","__experimentalStore","applyAction","bind","validateAction","observeObject","apiName","pk","options","subFn","objects","observe","observeList","lists","observeAggregation","objectSet","aggregations","observeAsync","observeFunction","queryDef","params","dependsOn","map","dep","instances","objectSetWires","item","dependsOnObjects","push","$apiName","$objectType","$primaryKey","objectSetTypesPromise","length","Promise","all","wire","client","then","types","filter","t","undefined","functions","observeLinks","linkName","objectsArray","Array","isArray","observer","observeSingleLink","observeMultiLinks","observeObjectSet","baseObjectSet","objectSets","invalidateAll","invalidateObjects","invalidateObjectType","type","invalidateFunction","invalidateFunctionsByObject","primaryKey","canonicalizeWhereClause","where","whereCanonicalizer","canonicalize","canonicalizeOptions","result","withProperties","genericCanonicalizer","orderBy","orderByCanonicalizer","aggregate","intersectWith","$select","selectCanonicalizer","union","canonObjectSetArray","objectSetArrayCanonicalizer","canonicalizeUnion","intersect","canonicalizeIntersect","subtract","canonicalizeSubtract","#canonObjectSetArray","arr","cache","wireStrings","os","JSON","stringify","canonKey","cached","get","set","next","resolvedList","linkedObjectsBySourcePrimaryKey","Map","isOptimistic","lastUpdated","fetchMore","resolve","hasMore","status","totalCount","parentSub","obj","sourceType","add","links","srcType","sourceUnderlyingObjectType","totalExpected","perObjectData","errored","mergeAndEmit","seen","fetchMores","latestUpdated","payload","values","payloads","d","loading","size","some","p","from","fn","String","objKey","error","err","unsubscribe","complete"],"sources":["ObservableClientImpl.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 ActionEditResponse,\n ActionValidationResponse,\n AggregateOpts,\n CompileTimeMetadata,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n WirePropertyTypes,\n} from \"@osdk/api\";\nimport { Subscription } from \"rxjs\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { additionalContext } from \"../../Client.js\";\nimport {\n getWireObjectSet,\n isObjectSet,\n} from \"../../objectSet/createObjectSet.js\";\nimport { extractObjectOrInterfaceType } from \"../../util/extractObjectOrInterfaceType.js\";\nimport type { FunctionPayload } from \"../FunctionPayload.js\";\nimport type { SpecificLinkPayload } from \"../LinkPayload.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { ObjectSetPayload } from \"../ObjectSetPayload.js\";\nimport type {\n CanonicalizedOptions,\n CanonicalizeOptionsInput,\n ObservableClient,\n ObserveAggregationArgs,\n ObserveAggregationOptions,\n ObserveAggregationOptionsWithObjectSet,\n ObserveFunctionCallbackArgs,\n ObserveFunctionOptions,\n ObserveListOptions,\n ObserveObjectCallbackArgs,\n ObserveObjectOptions,\n ObserveObjectsCallbackArgs,\n ObserveObjectSetArgs,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { Observer } from \"../ObservableClient/common.js\";\nimport type { ObserveLinks } from \"../ObservableClient/ObserveLink.js\";\nimport type { AggregationPayloadBase } from \"./aggregation/AggregationQuery.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport type { ObserveObjectSetOptions } from \"./objectset/ObjectSetQueryOptions.js\";\nimport type { Store } from \"./Store.js\";\nimport { UnsubscribableWrapper } from \"./UnsubscribableWrapper.js\";\n\n/**\n * Implementation of the public ObservableClient interface.\n * - Delegates all operations to the Store for consistency\n * - Serves as the entry point for reactive data management\n * - Ensures proper method binding and API exposure\n *\n * @internal\n */\nexport class ObservableClientImpl implements ObservableClient {\n __experimentalStore: Store;\n\n #unionCache = new WeakMap<Canonical<string[]>, ReadonlyArray<any>>();\n #intersectCache = new WeakMap<Canonical<string[]>, ReadonlyArray<any>>();\n #subtractCache = new WeakMap<Canonical<string[]>, ReadonlyArray<any>>();\n\n constructor(store: Store) {\n this.__experimentalStore = store;\n\n this.applyAction = store.applyAction.bind(store);\n this.validateAction = store.validateAction.bind(store);\n }\n\n public observeObject: <T extends ObjectOrInterfaceDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: Omit<ObserveObjectOptions<T>, \"apiName\" | \"pk\">,\n subFn: Observer<ObserveObjectCallbackArgs<T>>,\n ) => Unsubscribable = (apiName, pk, options, subFn) => {\n return this.__experimentalStore.objects.observe(\n {\n ...options,\n apiName,\n pk,\n },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ObjectPayload>,\n );\n };\n\n public observeList: <\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveListOptions<T, RDPs>,\n subFn: Observer<ObserveObjectsCallbackArgs<T, RDPs>>,\n ) => Unsubscribable = (options, subFn) => {\n return this.__experimentalStore.lists.observe(\n options,\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ListPayload>,\n );\n };\n\n public observeAggregation<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveAggregationOptions<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ): Unsubscribable;\n public observeAggregation<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options: ObserveAggregationOptionsWithObjectSet<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ): Promise<Unsubscribable>;\n public observeAggregation<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n options:\n | ObserveAggregationOptions<T, A, RDPs>\n | ObserveAggregationOptionsWithObjectSet<T, A, RDPs>,\n subFn: Observer<ObserveAggregationArgs<T, A>>,\n ): Unsubscribable | Promise<Unsubscribable> {\n if (options.objectSet) {\n return this.__experimentalStore.aggregations.observeAsync(\n options as ObserveAggregationOptionsWithObjectSet<T, A, RDPs>,\n subFn as Observer<AggregationPayloadBase>,\n );\n }\n return this.__experimentalStore.aggregations.observe(\n options as ObserveAggregationOptions<T, A, RDPs>,\n subFn as Observer<AggregationPayloadBase>,\n );\n }\n\n public observeFunction: <Q extends QueryDefinition<unknown>>(\n queryDef: Q,\n params: Record<string, unknown> | undefined,\n options: ObserveFunctionOptions,\n subFn: Observer<ObserveFunctionCallbackArgs<Q>>,\n ) => Unsubscribable = (queryDef, params, options, subFn) => {\n const dependsOn = options.dependsOn?.map(dep =>\n typeof dep === \"string\" ? dep : dep.apiName\n );\n\n // Partition dependsOnObjects into instances vs ObjectSets\n type ObjectDependency = { $apiName: string; $primaryKey: string | number };\n const instances: ObjectDependency[] = [];\n const objectSetWires: Array<\n ReturnType<typeof getWireObjectSet>\n > = [];\n\n for (const item of options.dependsOnObjects ?? []) {\n if (isObjectSet(item)) {\n objectSetWires.push(getWireObjectSet(item));\n } else {\n instances.push({\n $apiName: item.$objectType ?? item.$apiName,\n $primaryKey: item.$primaryKey,\n });\n }\n }\n\n // Start async extraction of ObjectSet types\n const objectSetTypesPromise = objectSetWires.length > 0\n ? Promise.all(\n objectSetWires.map(wire =>\n extractObjectOrInterfaceType(\n this.__experimentalStore.client[additionalContext],\n wire,\n )\n ),\n ).then(types =>\n types\n .filter((t): t is NonNullable<typeof t> => t != null)\n .map(t => t.apiName)\n )\n : undefined;\n\n return this.__experimentalStore.functions.observe(\n {\n ...options,\n queryDef,\n params,\n dependsOn,\n dependsOnObjects: instances,\n objectSetTypesPromise,\n },\n subFn as unknown as Observer<FunctionPayload>,\n );\n };\n\n public observeLinks: <\n T extends ObjectOrInterfaceDefinition,\n L extends keyof CompileTimeMetadata<T>[\"links\"] & string,\n >(\n objects: Osdk.Instance<T> | Array<Osdk.Instance<T>>,\n linkName: L,\n options: ObserveLinks.Options<T, L>,\n subFn: Observer<\n ObserveLinks.CallbackArgs<\n CompileTimeMetadata<T>[\"links\"][L][\"targetType\"]\n >\n >,\n ) => Unsubscribable = (objects, linkName, options, subFn) => {\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n const observer = subFn as unknown as Observer<SpecificLinkPayload>;\n\n return objectsArray.length <= 1\n ? observeSingleLink(\n this.__experimentalStore,\n objectsArray,\n linkName,\n options,\n observer,\n )\n : observeMultiLinks(\n this.__experimentalStore,\n objectsArray,\n linkName,\n options,\n observer,\n );\n };\n\n public applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: ObservableClient.ApplyActionOptions,\n ) => Promise<ActionEditResponse>;\n\n public validateAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n ) => Promise<ActionValidationResponse>;\n\n public observeObjectSet<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<\n string,\n WirePropertyTypes | undefined | Array<WirePropertyTypes>\n > = {},\n >(\n baseObjectSet: ObjectSet<T>,\n options: ObserveObjectSetOptions<T, RDPs>,\n subFn: Observer<ObserveObjectSetArgs<T, RDPs>>,\n ): Unsubscribable {\n return this.__experimentalStore.objectSets.observe(\n { baseObjectSet, ...options },\n // cast to cross typed to untyped barrier\n subFn as unknown as Observer<ObjectSetPayload>,\n );\n }\n\n public invalidateAll(): Promise<void> {\n return this.__experimentalStore.invalidateAll();\n }\n\n public invalidateObjects(\n objects:\n | Osdk.Instance<ObjectTypeDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectTypeDefinition>>,\n ): Promise<void> {\n return this.__experimentalStore.invalidateObjects(objects);\n }\n\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n type: T | T[\"apiName\"],\n ): Promise<void> {\n return this.__experimentalStore.invalidateObjectType(type, undefined);\n }\n\n public invalidateFunction(\n apiName: string | QueryDefinition<unknown>,\n params?: Record<string, unknown>,\n ): Promise<void> {\n return this.__experimentalStore.invalidateFunction(apiName, params);\n }\n\n public invalidateFunctionsByObject(\n apiName: string,\n primaryKey: string | number,\n ): Promise<void> {\n return this.__experimentalStore.invalidateFunctionsByObject(\n apiName,\n primaryKey,\n );\n }\n\n public canonicalizeWhereClause<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(where: WhereClause<T, RDPs>): Canonical<WhereClause<T, RDPs>> {\n return this.__experimentalStore.whereCanonicalizer\n .canonicalize(where) as Canonical<WhereClause<T, RDPs>>;\n }\n\n public canonicalizeOptions<OS, T extends CanonicalizeOptionsInput<OS>>(\n options: T,\n ): CanonicalizedOptions<T> {\n const store = this.__experimentalStore;\n const result = { ...options };\n\n result.where = store.whereCanonicalizer.canonicalize(result.where);\n result.withProperties = store.genericCanonicalizer.canonicalize(\n result.withProperties,\n );\n result.orderBy = store.orderByCanonicalizer.canonicalize(result.orderBy);\n result.aggregate = store.genericCanonicalizer.canonicalize(\n result.aggregate,\n );\n result.intersectWith = store.genericCanonicalizer.canonicalize(\n result.intersectWith,\n );\n result.$select = store.selectCanonicalizer.canonicalize(result.$select);\n\n result.union = this.#canonObjectSetArray(\n result.union,\n store.objectSetArrayCanonicalizer.canonicalizeUnion.bind(\n store.objectSetArrayCanonicalizer,\n ),\n this.#unionCache,\n );\n result.intersect = this.#canonObjectSetArray(\n result.intersect,\n store.objectSetArrayCanonicalizer.canonicalizeIntersect.bind(\n store.objectSetArrayCanonicalizer,\n ),\n this.#intersectCache,\n );\n result.subtract = this.#canonObjectSetArray(\n result.subtract,\n store.objectSetArrayCanonicalizer.canonicalizeSubtract.bind(\n store.objectSetArrayCanonicalizer,\n ),\n this.#subtractCache,\n );\n\n return result as CanonicalizedOptions<T>;\n }\n\n #canonObjectSetArray<T>(\n arr: ReadonlyArray<T> | undefined,\n canonicalize: (wireStrings: string[]) => Canonical<string[]>,\n cache: WeakMap<Canonical<string[]>, ReadonlyArray<T>>,\n ): ReadonlyArray<T> | undefined {\n if (!arr || arr.length === 0) {\n return arr;\n }\n const wireStrings = arr.map(os =>\n JSON.stringify(getWireObjectSet(os as ObjectSet<any, any>))\n );\n const canonKey = canonicalize(wireStrings);\n let cached = cache.get(canonKey);\n if (!cached) {\n cached = arr;\n cache.set(canonKey, cached);\n }\n return cached;\n }\n}\n\nfunction observeSingleLink(\n store: Store,\n objectsArray: ReadonlyArray<Osdk.Instance<ObjectOrInterfaceDefinition>>,\n linkName: string,\n options: ObserveLinks.Options<ObjectOrInterfaceDefinition, string>,\n observer: Observer<SpecificLinkPayload>,\n): Unsubscribable {\n if (objectsArray.length === 0) {\n observer.next({\n resolvedList: [],\n linkedObjectsBySourcePrimaryKey: new Map(),\n isOptimistic: false,\n lastUpdated: 0,\n fetchMore: () => Promise.resolve(),\n hasMore: false,\n status: \"loaded\",\n totalCount: \"0\",\n });\n return new UnsubscribableWrapper(new Subscription());\n }\n\n const parentSub = new Subscription();\n\n for (const obj of objectsArray) {\n const pk = obj.$primaryKey;\n const sourceType: \"object\" | \"interface\" = obj.$apiName === obj.$objectType\n ? \"object\"\n : \"interface\";\n\n parentSub.add(\n store.links.observe(\n {\n ...options,\n srcType: {\n type: sourceType,\n apiName: obj.$apiName,\n },\n sourceUnderlyingObjectType: obj.$objectType,\n linkName,\n pk,\n },\n observer,\n ),\n );\n }\n\n return new UnsubscribableWrapper(parentSub);\n}\n\nfunction observeMultiLinks(\n store: Store,\n objectsArray: ReadonlyArray<Osdk.Instance<ObjectOrInterfaceDefinition>>,\n linkName: string,\n options: ObserveLinks.Options<ObjectOrInterfaceDefinition, string>,\n observer: Observer<SpecificLinkPayload>,\n): Unsubscribable {\n const parentSub = new Subscription();\n const totalExpected = objectsArray.length;\n const perObjectData = new Map<\n string,\n { payload: SpecificLinkPayload; pk: string | number }\n >();\n let errored = false;\n\n function mergeAndEmit() {\n if (errored) {\n return;\n }\n\n const seen = new Map<\n string,\n NonNullable<SpecificLinkPayload[\"resolvedList\"]>[number]\n >();\n const linkedObjectsBySourcePrimaryKey = new Map<\n string | number,\n ReadonlyArray<NonNullable<SpecificLinkPayload[\"resolvedList\"]>[number]>\n >();\n const fetchMores: Array<() => Promise<void>> = [];\n let latestUpdated = 0;\n let hasMore = false;\n let isOptimistic = false;\n\n for (const { payload, pk } of perObjectData.values()) {\n linkedObjectsBySourcePrimaryKey.set(pk, payload.resolvedList ?? []);\n\n for (const obj of payload.resolvedList ?? []) {\n seen.set(`${obj.$objectType}:${obj.$primaryKey}`, obj);\n }\n if (payload.lastUpdated > latestUpdated) {\n latestUpdated = payload.lastUpdated;\n }\n if (payload.isOptimistic) {\n isOptimistic = true;\n }\n if (payload.hasMore) {\n hasMore = true;\n fetchMores.push(payload.fetchMore);\n }\n }\n\n const payloads = [...perObjectData.values()].map(d => d.payload);\n const loading = perObjectData.size < totalExpected\n || payloads.some(p => p.status === \"init\" || p.status === \"loading\");\n\n observer.next({\n resolvedList: Array.from(seen.values()),\n linkedObjectsBySourcePrimaryKey,\n isOptimistic,\n lastUpdated: latestUpdated,\n fetchMore: hasMore\n ? () => Promise.all(fetchMores.map(fn => fn())).then(() => {})\n : () => Promise.resolve(),\n hasMore,\n status: loading\n ? \"loading\"\n : payloads.some(p => p.status === \"error\")\n ? \"error\"\n : \"loaded\",\n ...(!hasMore ? { totalCount: String(seen.size) } : {}),\n });\n }\n\n for (const obj of objectsArray) {\n const objKey = `${obj.$objectType ?? obj.$apiName}:${obj.$primaryKey}`;\n const pk = obj.$primaryKey;\n\n const sourceType: \"object\" | \"interface\" = obj.$apiName === obj.$objectType\n ? \"object\"\n : \"interface\";\n\n parentSub.add(\n store.links.observe(\n {\n ...options,\n srcType: {\n type: sourceType,\n apiName: obj.$apiName,\n },\n sourceUnderlyingObjectType: obj.$objectType,\n linkName,\n pk,\n },\n {\n next: (payload: SpecificLinkPayload) => {\n if (errored) {\n return;\n }\n perObjectData.set(objKey, { payload, pk });\n mergeAndEmit();\n },\n error: (err: unknown) => {\n if (errored) {\n return;\n }\n errored = true;\n parentSub.unsubscribe();\n observer.error(err);\n },\n // store link queries are long-lived and do not complete\n complete: () => {},\n },\n ),\n );\n }\n\n return new UnsubscribableWrapper(parentSub);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -26,9 +26,12 @@ export class OrderByCanonicalizer {
26
26
  const data = Object.fromEntries(pairs);
27
27
  return data;
28
28
  });
29
- canonicalize = orderBy => {
29
+ canonicalize(orderBy) {
30
+ if (orderBy == null) {
31
+ return undefined;
32
+ }
30
33
  const strings = Object.entries(orderBy).flat();
31
34
  return this.#trie.lookupArray(strings);
32
- };
35
+ }
33
36
  }
34
37
  //# sourceMappingURL=OrderByCanonicalizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderByCanonicalizer.js","names":["WeakRefTrie","OrderByCanonicalizer","trie","array","pairs","reduce","result","_","index","push","slice","data","Object","fromEntries","canonicalize","orderBy","strings","entries","flat","lookupArray"],"sources":["OrderByCanonicalizer.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 { ObjectTypeDefinition } from \"@osdk/api\";\nimport type { OrderBy } from \"../ObservableClient.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport { WeakRefTrie } from \"./WeakRefTrie.js\";\n\nexport class OrderByCanonicalizer {\n #trie = new WeakRefTrie(\n (array: Array<string>) => {\n const pairs = array.reduce<Array<[string, \"asc\" | \"desc\"]>>(\n function(result, _, index, array) {\n if (index % 2 === 0 && array[index] != null) {\n result.push(\n array.slice(index, index + 2) as [string, \"asc\" | \"desc\"],\n );\n }\n return result;\n },\n [],\n );\n const data = Object.fromEntries(pairs) satisfies Record<\n string,\n \"asc\" | \"desc\"\n > as Canonical<OrderBy<ObjectTypeDefinition>>;\n return data;\n },\n );\n\n canonicalize: (\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n ) => Canonical<Record<string, \"asc\" | \"desc\" | undefined>> = (\n orderBy,\n ) => {\n const strings = Object.entries(orderBy).flat();\n return this.#trie.lookupArray(strings);\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,SAASA,WAAW,QAAQ,kBAAkB;AAE9C,OAAO,MAAMC,oBAAoB,CAAC;EAChC,CAACC,IAAI,GAAG,IAAIF,WAAW,CACpBG,KAAoB,IAAK;IACxB,MAAMC,KAAK,GAAGD,KAAK,CAACE,MAAM,CACxB,UAASC,MAAM,EAAEC,CAAC,EAAEC,KAAK,EAAEL,KAAK,EAAE;MAChC,IAAIK,KAAK,GAAG,CAAC,KAAK,CAAC,IAAIL,KAAK,CAACK,KAAK,CAAC,IAAI,IAAI,EAAE;QAC3CF,MAAM,CAACG,IAAI,CACTN,KAAK,CAACO,KAAK,CAACF,KAAK,EAAEA,KAAK,GAAG,CAAC,CAC9B,CAAC;MACH;MACA,OAAOF,MAAM;IACf,CAAC,EACD,EACF,CAAC;IACD,MAAMK,IAAI,GAAGC,MAAM,CAACC,WAAW,CAACT,KAAK,CAGQ;IAC7C,OAAOO,IAAI;EACb,CACF,CAAC;EAEDG,YAAY,GAGVC,OAAO,IACJ;IACH,MAAMC,OAAO,GAAGJ,MAAM,CAACK,OAAO,CAACF,OAAO,CAAC,CAACG,IAAI,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,CAAChB,IAAI,CAACiB,WAAW,CAACH,OAAO,CAAC;EACxC,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"OrderByCanonicalizer.js","names":["WeakRefTrie","OrderByCanonicalizer","trie","array","pairs","reduce","result","_","index","push","slice","data","Object","fromEntries","canonicalize","orderBy","undefined","strings","entries","flat","lookupArray"],"sources":["OrderByCanonicalizer.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 { ObjectTypeDefinition } from \"@osdk/api\";\nimport type { OrderBy } from \"../ObservableClient.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport { WeakRefTrie } from \"./WeakRefTrie.js\";\n\nexport class OrderByCanonicalizer {\n #trie = new WeakRefTrie(\n (array: Array<string>) => {\n const pairs = array.reduce<Array<[string, \"asc\" | \"desc\"]>>(\n function(result, _, index, array) {\n if (index % 2 === 0 && array[index] != null) {\n result.push(\n array.slice(index, index + 2) as [string, \"asc\" | \"desc\"],\n );\n }\n return result;\n },\n [],\n );\n const data = Object.fromEntries(pairs) satisfies Record<\n string,\n \"asc\" | \"desc\"\n > as Canonical<OrderBy<ObjectTypeDefinition>>;\n return data;\n },\n );\n\n canonicalize(\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n ): Canonical<Record<string, \"asc\" | \"desc\" | undefined>>;\n canonicalize(\n orderBy: Record<string, \"asc\" | \"desc\" | undefined> | undefined,\n ): Canonical<Record<string, \"asc\" | \"desc\" | undefined>> | undefined;\n canonicalize(\n orderBy: Record<string, \"asc\" | \"desc\" | undefined> | undefined,\n ): Canonical<Record<string, \"asc\" | \"desc\" | undefined>> | undefined {\n if (orderBy == null) {\n return undefined;\n }\n const strings = Object.entries(orderBy).flat();\n return this.#trie.lookupArray(strings);\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA,SAASA,WAAW,QAAQ,kBAAkB;AAE9C,OAAO,MAAMC,oBAAoB,CAAC;EAChC,CAACC,IAAI,GAAG,IAAIF,WAAW,CACpBG,KAAoB,IAAK;IACxB,MAAMC,KAAK,GAAGD,KAAK,CAACE,MAAM,CACxB,UAASC,MAAM,EAAEC,CAAC,EAAEC,KAAK,EAAEL,KAAK,EAAE;MAChC,IAAIK,KAAK,GAAG,CAAC,KAAK,CAAC,IAAIL,KAAK,CAACK,KAAK,CAAC,IAAI,IAAI,EAAE;QAC3CF,MAAM,CAACG,IAAI,CACTN,KAAK,CAACO,KAAK,CAACF,KAAK,EAAEA,KAAK,GAAG,CAAC,CAC9B,CAAC;MACH;MACA,OAAOF,MAAM;IACf,CAAC,EACD,EACF,CAAC;IACD,MAAMK,IAAI,GAAGC,MAAM,CAACC,WAAW,CAACT,KAAK,CAGQ;IAC7C,OAAOO,IAAI;EACb,CACF,CAAC;EAQDG,YAAYA,CACVC,OAA+D,EACI;IACnE,IAAIA,OAAO,IAAI,IAAI,EAAE;MACnB,OAAOC,SAAS;IAClB;IACA,MAAMC,OAAO,GAAGL,MAAM,CAACM,OAAO,CAACH,OAAO,CAAC,CAACI,IAAI,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,CAACjB,IAAI,CAACkB,WAAW,CAACH,OAAO,CAAC;EACxC;AACF","ignoreList":[]}
@@ -17,6 +17,9 @@
17
17
  export class SelectCanonicalizer {
18
18
  cache = new Map();
19
19
  canonicalize(select) {
20
+ if (select == null) {
21
+ return undefined;
22
+ }
20
23
  const sorted = [...new Set(select)].sort();
21
24
  const key = sorted.join("\0");
22
25
  let canonical = this.cache.get(key);
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCanonicalizer.js","names":["SelectCanonicalizer","cache","Map","canonicalize","select","sorted","Set","sort","key","join","canonical","get","set"],"sources":["SelectCanonicalizer.ts"],"sourcesContent":["/*\n * Copyright 2026 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 { Canonical } from \"./Canonical.js\";\n\nexport class SelectCanonicalizer {\n private cache = new Map<string, Canonical<readonly string[]>>();\n\n canonicalize(select: readonly string[]): Canonical<readonly string[]> {\n const sorted = [...new Set(select)].sort();\n const key = sorted.join(\"\\0\");\n\n let canonical = this.cache.get(key);\n if (!canonical) {\n canonical = sorted as readonly string[] as Canonical<readonly string[]>;\n this.cache.set(key, canonical);\n }\n return canonical;\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAO,MAAMA,mBAAmB,CAAC;EACvBC,KAAK,GAAG,IAAIC,GAAG,CAAuC,CAAC;EAE/DC,YAAYA,CAACC,MAAyB,EAAgC;IACpE,MAAMC,MAAM,GAAG,CAAC,GAAG,IAAIC,GAAG,CAACF,MAAM,CAAC,CAAC,CAACG,IAAI,CAAC,CAAC;IAC1C,MAAMC,GAAG,GAAGH,MAAM,CAACI,IAAI,CAAC,IAAI,CAAC;IAE7B,IAAIC,SAAS,GAAG,IAAI,CAACT,KAAK,CAACU,GAAG,CAACH,GAAG,CAAC;IACnC,IAAI,CAACE,SAAS,EAAE;MACdA,SAAS,GAAGL,MAA2D;MACvE,IAAI,CAACJ,KAAK,CAACW,GAAG,CAACJ,GAAG,EAAEE,SAAS,CAAC;IAChC;IACA,OAAOA,SAAS;EAClB;AACF","ignoreList":[]}
1
+ {"version":3,"file":"SelectCanonicalizer.js","names":["SelectCanonicalizer","cache","Map","canonicalize","select","undefined","sorted","Set","sort","key","join","canonical","get","set"],"sources":["SelectCanonicalizer.ts"],"sourcesContent":["/*\n * Copyright 2026 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 { Canonical } from \"./Canonical.js\";\n\nexport class SelectCanonicalizer {\n private cache = new Map<string, Canonical<readonly string[]>>();\n\n canonicalize(select: undefined): undefined;\n canonicalize(select: readonly string[]): Canonical<readonly string[]>;\n canonicalize(\n select: readonly string[] | undefined,\n ): Canonical<readonly string[]> | undefined;\n canonicalize(\n select: readonly string[] | undefined,\n ): Canonical<readonly string[]> | undefined {\n if (select == null) {\n return undefined;\n }\n const sorted = [...new Set(select)].sort();\n const key = sorted.join(\"\\0\");\n\n let canonical = this.cache.get(key);\n if (!canonical) {\n canonical = sorted as readonly string[] as Canonical<readonly string[]>;\n this.cache.set(key, canonical);\n }\n return canonical;\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAO,MAAMA,mBAAmB,CAAC;EACvBC,KAAK,GAAG,IAAIC,GAAG,CAAuC,CAAC;EAO/DC,YAAYA,CACVC,MAAqC,EACK;IAC1C,IAAIA,MAAM,IAAI,IAAI,EAAE;MAClB,OAAOC,SAAS;IAClB;IACA,MAAMC,MAAM,GAAG,CAAC,GAAG,IAAIC,GAAG,CAACH,MAAM,CAAC,CAAC,CAACI,IAAI,CAAC,CAAC;IAC1C,MAAMC,GAAG,GAAGH,MAAM,CAACI,IAAI,CAAC,IAAI,CAAC;IAE7B,IAAIC,SAAS,GAAG,IAAI,CAACV,KAAK,CAACW,GAAG,CAACH,GAAG,CAAC;IACnC,IAAI,CAACE,SAAS,EAAE;MACdA,SAAS,GAAGL,MAA2D;MACvE,IAAI,CAACL,KAAK,CAACY,GAAG,CAACJ,GAAG,EAAEE,SAAS,CAAC;IAChC;IACA,OAAOA,SAAS;EAClB;AACF","ignoreList":[]}
@@ -304,6 +304,8 @@ export class Store {
304
304
  if (query) {
305
305
  return query.rdpConfig;
306
306
  }
307
+ } else if (cacheKey.type === "mediaMetadata") {
308
+ return undefined;
307
309
  }
308
310
  // Links and other types would also be at LIST_RDP_IDX
309
311
  }
@@ -324,6 +326,8 @@ export class Store {
324
326
  return cacheKey.otherKeys[LIST_API_NAME_IDX];
325
327
  } else if (cacheKey.type === "aggregation") {
326
328
  return cacheKey.otherKeys[AGGREGATION_API_NAME_IDX];
329
+ } else if (cacheKey.type === "mediaMetadata") {
330
+ return cacheKey.otherKeys[0];
327
331
  }
328
332
  // Links would have apiName at a different position
329
333
  }
@@ -379,7 +383,7 @@ export class Store {
379
383
  }
380
384
  const promises = [];
381
385
  for (const cacheKey of this.layers.truth.keys()) {
382
- if (changes && changes.modified.has(cacheKey)) {
386
+ if (cacheKey.type !== "mediaMetadata" && changes && changes.modified.has(cacheKey)) {
383
387
  continue;
384
388
  }
385
389
  const query = this.queries.peek(cacheKey);
@@ -1 +1 @@
1
- {"version":3,"file":"Store.js","names":["invariant","additionalContext","DEBUG_REFCOUNTS","ActionApplication","API_NAME_IDX","AGGREGATION_API_NAME_IDX","RDP_IDX","AGGREGATION_RDP_IDX","AggregationsHelper","DEBUG_ONLY__cacheKeyToString","CacheKeys","createChangedObjects","DEBUG_ONLY__changesToString","FunctionsHelper","GenericCanonicalizer","IntersectCanonicalizer","Layers","LinksHelper","LIST_API_NAME_IDX","LIST_RDP_IDX","ListsHelper","OBJECT_API_NAME_IDX","RDP_CONFIG_IDX","OBJECT_RDP_CONFIG_IDX","ObjectCacheKeyRegistry","ObjectsHelper","ObjectSetHelper","ObjectSetArrayCanonicalizer","OrderByCanonicalizer","PivotCanonicalizer","Queries","RdpCanonicalizer","RidListCanonicalizer","SelectCanonicalizer","WhereClauseCanonicalizer","Store","whereCanonicalizer","orderByCanonicalizer","rdpCanonicalizer","intersectCanonicalizer","pivotCanonicalizer","ridListCanonicalizer","selectCanonicalizer","objectSetArrayCanonicalizer","genericCanonicalizer","queries","pendingCleanup","Map","objectCacheKeyRegistry","layers","logger","onRevalidate","maybeRevalidateQueries","bind","subjects","constructor","client","child","msgPrefix","cacheKeys","onDestroy","cleanupCacheKey","aggregations","functions","lists","objects","links","objectSets","key","subject","peek","console","log","JSON","stringify","closed","observed","type","otherKeys","process","env","NODE_ENV","delete","applyAction","action","args","opts","validateAction","result","$validateOnly","$returnEdits","getValue","cacheKey","top","get","batch","optimisticId","changes","batchFn","invalidateObject","apiName","pk","variants","getVariants","promises","size","push","getQuery","undefined","revalidate","query","Promise","allSettled","#maybeRevalidateQueries","methodName","isEmpty","debug","keys","maybeUpdateAndRevalidate","shouldPropagateToQuery","promise","all","#shouldPropagateToQuery","modified","has","shouldPropagateForObjectTypeChanges","queryRdpConfig","getQueryRdpConfig","#shouldPropagateForObjectTypeChanges","objectType","objectTypes","changesAffectObjectType","queryObjectType","getQueryObjectType","affected","queryKey","addedCount","addedObjects","length","modifiedCount","modifiedObjects","#getQueryRdpConfig","Array","isArray","rdpConfig","#getQueryObjectType","#changesAffectObjectType","addedForType","modifiedForType","deletedKey","deleted","invalidateObjectType","info","truth","then","invalidateAll","invalidateObjects","objectsArray","obj","$objectType","$primaryKey","invalidateFunction","params","invalidateFunctionsByObject","primaryKey"],"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 ActionEditResponse,\n ActionValidationResponse,\n Logger,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n QueryDefinition,\n} from \"@osdk/api\";\nimport invariant from \"tiny-invariant\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { additionalContext, type Client } from \"../../Client.js\";\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport type { OptimisticBuilder } from \"../OptimisticBuilder.js\";\nimport { ActionApplication } from \"./actions/ActionApplication.js\";\nimport {\n API_NAME_IDX as AGGREGATION_API_NAME_IDX,\n RDP_IDX as AGGREGATION_RDP_IDX,\n} from \"./aggregation/AggregationCacheKey.js\";\nimport { AggregationsHelper } from \"./aggregation/AggregationsHelper.js\";\nimport type { BatchContext } from \"./BatchContext.js\";\nimport { DEBUG_ONLY__cacheKeyToString } 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 \"./Changes.js\";\nimport { FunctionsHelper } from \"./function/FunctionsHelper.js\";\nimport { GenericCanonicalizer } from \"./GenericCanonicalizer.js\";\nimport { IntersectCanonicalizer } from \"./IntersectCanonicalizer.js\";\nimport type { KnownCacheKey } from \"./KnownCacheKey.js\";\nimport type { Entry } from \"./Layer.js\";\nimport { Layers } from \"./Layers.js\";\nimport { LinksHelper } from \"./links/LinksHelper.js\";\nimport {\n API_NAME_IDX as LIST_API_NAME_IDX,\n RDP_IDX as LIST_RDP_IDX,\n} from \"./list/ListCacheKey.js\";\nimport { ListsHelper } from \"./list/ListsHelper.js\";\nimport {\n API_NAME_IDX as OBJECT_API_NAME_IDX,\n RDP_CONFIG_IDX as OBJECT_RDP_CONFIG_IDX,\n} from \"./object/ObjectCacheKey.js\";\nimport { ObjectCacheKeyRegistry } from \"./object/ObjectCacheKeyRegistry.js\";\nimport { ObjectsHelper } from \"./object/ObjectsHelper.js\";\nimport { ObjectSetHelper } from \"./objectset/ObjectSetHelper.js\";\nimport { ObjectSetArrayCanonicalizer } from \"./ObjectSetArrayCanonicalizer.js\";\nimport { type OptimisticId } from \"./OptimisticId.js\";\nimport { OrderByCanonicalizer } from \"./OrderByCanonicalizer.js\";\nimport { PivotCanonicalizer } from \"./PivotCanonicalizer.js\";\nimport { Queries } from \"./Queries.js\";\nimport { type Rdp, RdpCanonicalizer } from \"./RdpCanonicalizer.js\";\nimport { RidListCanonicalizer } from \"./RidListCanonicalizer.js\";\nimport { SelectCanonicalizer } from \"./SelectCanonicalizer.js\";\nimport type { Subjects } from \"./Subjects.js\";\nimport { WhereClauseCanonicalizer } from \"./WhereClauseCanonicalizer.js\";\n\nexport namespace Store {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\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\n/**\n * Central data store with layered cache architecture.\n * - Truth layer: server state | Optimistic layers: pending changes\n * - Reference counting prevents memory leaks\n * - Batch operations ensure consistency\n */\nexport class Store {\n readonly whereCanonicalizer: WhereClauseCanonicalizer =\n new WhereClauseCanonicalizer();\n readonly orderByCanonicalizer: OrderByCanonicalizer =\n new OrderByCanonicalizer();\n readonly rdpCanonicalizer: RdpCanonicalizer = new RdpCanonicalizer();\n readonly intersectCanonicalizer: IntersectCanonicalizer =\n new IntersectCanonicalizer(this.whereCanonicalizer);\n readonly pivotCanonicalizer: PivotCanonicalizer = new PivotCanonicalizer();\n readonly ridListCanonicalizer: RidListCanonicalizer =\n new RidListCanonicalizer();\n readonly selectCanonicalizer: SelectCanonicalizer = new SelectCanonicalizer();\n readonly objectSetArrayCanonicalizer: ObjectSetArrayCanonicalizer =\n new ObjectSetArrayCanonicalizer();\n readonly genericCanonicalizer: GenericCanonicalizer =\n new GenericCanonicalizer();\n\n readonly client: Client;\n\n /** @internal */\n readonly logger?: Logger;\n\n readonly cacheKeys: CacheKeys<KnownCacheKey>;\n readonly queries: Queries = new Queries();\n\n /**\n * Tracks cache keys with deferred cleanup. During React unmount-remount\n * cycles, a subscription may be cleaned up and immediately re-created.\n * By deferring cleanup to a microtask, we prevent propagateWrite from\n * skipping keys that are momentarily between subscriptions.\n *\n * The value is a count (not a boolean) so multiple unsubscribes within the\n * same tick schedule the correct number of releases.\n * @internal\n */\n readonly pendingCleanup: Map<KnownCacheKey, number> = new Map();\n\n readonly objectCacheKeyRegistry: ObjectCacheKeyRegistry =\n new ObjectCacheKeyRegistry();\n\n readonly layers: Layers = new Layers({\n logger: this.logger,\n onRevalidate: this.#maybeRevalidateQueries.bind(this),\n });\n readonly subjects: Subjects = this.layers.subjects;\n\n // these are hopefully temporary\n readonly aggregations: AggregationsHelper;\n readonly functions: FunctionsHelper;\n readonly lists: ListsHelper;\n readonly objects: ObjectsHelper;\n readonly links: LinksHelper;\n readonly objectSets: ObjectSetHelper;\n\n constructor(client: Client) {\n this.logger = client[additionalContext].logger?.child({}, {\n msgPrefix: \"Store\",\n });\n this.client = client;\n\n this.cacheKeys = new CacheKeys<KnownCacheKey>({\n onDestroy: this.#cleanupCacheKey,\n });\n\n this.aggregations = new AggregationsHelper(\n this,\n this.cacheKeys,\n this.whereCanonicalizer,\n this.rdpCanonicalizer,\n this.intersectCanonicalizer,\n );\n this.functions = new FunctionsHelper(this, this.cacheKeys);\n this.lists = new ListsHelper(\n this,\n this.cacheKeys,\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n this.rdpCanonicalizer,\n this.intersectCanonicalizer,\n this.pivotCanonicalizer,\n this.ridListCanonicalizer,\n this.selectCanonicalizer,\n );\n this.objects = new ObjectsHelper(this, this.cacheKeys);\n this.links = new LinksHelper(\n this,\n this.cacheKeys,\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n this.selectCanonicalizer,\n );\n this.objectSets = new ObjectSetHelper(\n this,\n this.cacheKeys,\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n this.rdpCanonicalizer,\n this.selectCanonicalizer,\n this.objectSetArrayCanonicalizer,\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: KnownCacheKey) => {\n const subject = this.subjects.peek(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\n if (process.env.NODE_ENV !== \"production\") {\n invariant(subject);\n }\n\n this.subjects.delete(key);\n this.queries.delete(key);\n };\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args:\n | Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0]\n | Array<Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0]>,\n opts?: Store.ApplyActionOptions,\n ) => Promise<ActionEditResponse> = async (action, args, opts) => {\n return await new ActionApplication(this).applyAction(action, args, opts);\n };\n\n validateAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n ) => Promise<ActionValidationResponse> = async (action, args) => {\n const result = await this.client(action).applyAction(args as any, {\n $validateOnly: true,\n $returnEdits: false,\n });\n return result as ActionValidationResponse;\n };\n\n public getValue<K extends KnownCacheKey>(\n cacheKey: K,\n ): Entry<K> | undefined {\n return this.layers.top.get(cacheKey);\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 changes: Changes;\n } {\n return this.layers.batch({ optimisticId, changes }, batchFn);\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 const variants = this.objectCacheKeyRegistry.getVariants(apiName, pk);\n\n // Invalidate all variant cache entries\n // Using Promise.allSettled to ensure if one invalidation fails, others will still complete.\n // This prevents a single failing query from blocking invalidation of other cache variants for the same object.\n const promises: Promise<void>[] = [];\n\n if (variants.size === 0) {\n // No registered variants - create and revalidate the base variant (no RDP)\n promises.push(\n this.objects.getQuery({\n apiName,\n pk,\n }, undefined).revalidate(/* force */ true),\n );\n } else {\n // Revalidate all registered variants\n for (const key of variants) {\n const query = this.queries.peek(key);\n if (query) {\n promises.push(query.revalidate(/* force */ true));\n }\n }\n }\n\n return Promise.allSettled(promises);\n }\n\n async #maybeRevalidateQueries(\n changes: Changes,\n optimisticId?: OptimisticId | undefined,\n ): Promise<void> {\n const logger = process.env.NODE_ENV !== \"production\"\n ? this.logger?.child({ methodName: \"maybeRevalidateQueries\" })\n : undefined;\n\n if (changes.isEmpty()) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"No changes, aborting\");\n }\n return;\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(DEBUG_ONLY__changesToString(changes), { optimisticId });\n }\n\n try {\n const promises: Array<Promise<unknown>> = [];\n for (const cacheKey of this.queries.keys()) {\n const query = this.queries.peek(cacheKey);\n if (!query?.maybeUpdateAndRevalidate) {\n continue;\n }\n\n // Only propagate to queries that should receive these changes\n if (\n !this.#shouldPropagateToQuery(\n {\n cacheKey,\n maybeUpdateAndRevalidate: query.maybeUpdateAndRevalidate,\n },\n changes,\n optimisticId,\n )\n ) {\n continue;\n }\n\n const promise = query.maybeUpdateAndRevalidate(changes, optimisticId);\n if (promise) promises.push(promise);\n }\n await Promise.all(promises);\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"in finally\", DEBUG_ONLY__changesToString(changes));\n }\n }\n }\n\n /**\n * Determines whether changes should propagate to a specific query.\n * Prevents unnecessary observable pipeline execution for cross-propagation.\n *\n * @param query - The query to check\n * @param changes - The changes that occurred\n * @param optimisticId - Optional optimistic update ID\n * @returns true if the query should be notified of these changes\n */\n #shouldPropagateToQuery(\n query: {\n cacheKey: KnownCacheKey;\n maybeUpdateAndRevalidate?: (\n changes: Changes,\n optimisticId: OptimisticId | undefined,\n ) => Promise<void> | undefined;\n },\n changes: Changes,\n optimisticId?: OptimisticId,\n ): boolean {\n // Always propagate optimistic updates (user-initiated actions need immediate feedback)\n if (optimisticId) {\n return true;\n }\n\n // If the query's own cache key was modified (direct fetch), always propagate\n if (changes.modified.has(query.cacheKey)) {\n return true;\n }\n\n // Check if the query's object type is affected by the changes\n if (this.#shouldPropagateForObjectTypeChanges(query.cacheKey, changes)) {\n return true;\n }\n\n // For other cross-propagation (e.g., RDP field updates from unrelated object types):\n // Only propagate to queries WITH RDP configurations\n const queryRdpConfig = this.#getQueryRdpConfig(query.cacheKey);\n\n // If query has no RDP, don't propagate unrelated object changes to it\n // (it will get updates from its own direct fetches only)\n return queryRdpConfig != null;\n }\n\n /**\n * Checks if changes to an object type should propagate to a query.\n * This ensures queries receive updates when objects of their type are added/modified.\n *\n * @param cacheKey - The cache key of the query\n * @param changes - The changes that occurred\n * @returns true if the query should be notified based on object type changes\n */\n #shouldPropagateForObjectTypeChanges(\n cacheKey: KnownCacheKey,\n changes: Changes,\n ): boolean {\n if (cacheKey.type === \"objectSet\") {\n const query = this.queries.peek(cacheKey);\n if (query) {\n for (const objectType of query.objectTypes) {\n if (this.#changesAffectObjectType(changes, objectType)) {\n return true;\n }\n }\n }\n return false;\n }\n\n const queryObjectType = this.#getQueryObjectType(cacheKey);\n if (!queryObjectType) {\n return false;\n }\n\n const affected = this.#changesAffectObjectType(changes, queryObjectType);\n\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"shouldPropagateToQuery\" }).debug(\n `Query type: ${queryObjectType}, affected: ${affected}`,\n {\n queryKey: DEBUG_ONLY__cacheKeyToString(cacheKey),\n addedCount: changes.addedObjects.get(queryObjectType)?.length ?? 0,\n modifiedCount: changes.modifiedObjects.get(queryObjectType)?.length\n ?? 0,\n },\n );\n }\n\n return affected;\n }\n\n /**\n * Extracts RDP configuration from a cache key if present.\n *\n * @param cacheKey - The cache key to check\n * @returns The RDP configuration, null, or undefined\n */\n #getQueryRdpConfig(\n cacheKey: KnownCacheKey,\n ): Canonical<Rdp> | null | undefined {\n if (\"otherKeys\" in cacheKey && Array.isArray(cacheKey.otherKeys)) {\n if (cacheKey.type === \"object\") {\n return cacheKey.otherKeys[OBJECT_RDP_CONFIG_IDX];\n } else if (cacheKey.type === \"list\") {\n return cacheKey.otherKeys[LIST_RDP_IDX];\n } else if (cacheKey.type === \"aggregation\") {\n return cacheKey.otherKeys[AGGREGATION_RDP_IDX];\n } else if (cacheKey.type === \"objectSet\") {\n const query = this.queries.peek(cacheKey);\n if (query) {\n return query.rdpConfig;\n }\n }\n // Links and other types would also be at LIST_RDP_IDX\n }\n return undefined;\n }\n\n /**\n * Extracts the object type (apiName) from a cache key.\n *\n * @param cacheKey - The cache key to check\n * @returns The object type/apiName, or undefined if not applicable\n */\n #getQueryObjectType(cacheKey: KnownCacheKey): string | undefined {\n if (\"otherKeys\" in cacheKey && Array.isArray(cacheKey.otherKeys)) {\n if (cacheKey.type === \"object\") {\n return cacheKey.otherKeys[OBJECT_API_NAME_IDX];\n } else if (cacheKey.type === \"list\") {\n return cacheKey.otherKeys[LIST_API_NAME_IDX];\n } else if (cacheKey.type === \"aggregation\") {\n return cacheKey.otherKeys[AGGREGATION_API_NAME_IDX];\n }\n // Links would have apiName at a different position\n }\n return undefined;\n }\n\n /**\n * Checks if changes affect a specific object type.\n *\n * @param changes - The changes to check\n * @param objectType - The object type to check for\n * @returns true if the changes include added or modified objects of this type\n */\n #changesAffectObjectType(changes: Changes, objectType: string): boolean {\n // Check added objects (MultiMap.get returns an array)\n const addedForType = changes.addedObjects.get(objectType);\n if (addedForType && addedForType.length > 0) {\n return true;\n }\n\n // Check modified objects (MultiMap.get returns an array)\n const modifiedForType = changes.modifiedObjects.get(objectType);\n if (modifiedForType && modifiedForType.length > 0) {\n return true;\n }\n\n for (const deletedKey of changes.deleted) {\n if (\n deletedKey.type === \"object\"\n && deletedKey.otherKeys[OBJECT_API_NAME_IDX] === objectType\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Invalidates all cache entries for a specific object type.\n * This will revalidate:\n * 1. All objects of the specified type\n * 2. All lists of the specified type\n * 3. All links where the source object is of the specified type\n *\n * @param apiName - The API name of the object type to invalidate\n * @param changes - Optional changes object to track what has been modified\n * @returns Promise that resolves when all invalidations are complete\n */\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n changes: Changes | undefined,\n ): Promise<void> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"invalidateObjectType\" }).info(\n changes ? DEBUG_ONLY__changesToString(changes) : void 0,\n );\n }\n\n const promises: Array<Promise<void>> = [];\n\n for (const cacheKey of this.layers.truth.keys()) {\n if (changes && changes.modified.has(cacheKey)) {\n continue;\n }\n const query = this.queries.peek(cacheKey);\n if (!query) continue;\n\n promises.push(query.invalidateObjectType(apiName, changes));\n }\n\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n\n public async invalidateAll(): Promise<void> {\n const promises: Array<Promise<unknown>> = [];\n for (const cacheKey of this.queries.keys()) {\n const query = this.queries.peek(cacheKey);\n if (query) {\n promises.push(query.revalidate(true));\n }\n }\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n\n public async invalidateObjects(\n objects:\n | Osdk.Instance<ObjectTypeDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectTypeDefinition>>,\n ): Promise<void> {\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n const promises: Array<Promise<unknown>> = [];\n\n for (const obj of objectsArray) {\n promises.push(this.invalidateObject(obj.$objectType, obj.$primaryKey));\n }\n\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n\n public async invalidateFunction(\n apiName: string | QueryDefinition<unknown>,\n params?: Record<string, unknown>,\n ): Promise<void> {\n return this.functions.invalidateFunction(apiName, params);\n }\n\n public async invalidateFunctionsByObject(\n apiName: string,\n primaryKey: string | number,\n ): Promise<void> {\n return this.functions.invalidateFunctionsByObject(apiName, primaryKey);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Store.js","names":["invariant","additionalContext","DEBUG_REFCOUNTS","ActionApplication","API_NAME_IDX","AGGREGATION_API_NAME_IDX","RDP_IDX","AGGREGATION_RDP_IDX","AggregationsHelper","DEBUG_ONLY__cacheKeyToString","CacheKeys","createChangedObjects","DEBUG_ONLY__changesToString","FunctionsHelper","GenericCanonicalizer","IntersectCanonicalizer","Layers","LinksHelper","LIST_API_NAME_IDX","LIST_RDP_IDX","ListsHelper","OBJECT_API_NAME_IDX","RDP_CONFIG_IDX","OBJECT_RDP_CONFIG_IDX","ObjectCacheKeyRegistry","ObjectsHelper","ObjectSetHelper","ObjectSetArrayCanonicalizer","OrderByCanonicalizer","PivotCanonicalizer","Queries","RdpCanonicalizer","RidListCanonicalizer","SelectCanonicalizer","WhereClauseCanonicalizer","Store","whereCanonicalizer","orderByCanonicalizer","rdpCanonicalizer","intersectCanonicalizer","pivotCanonicalizer","ridListCanonicalizer","selectCanonicalizer","objectSetArrayCanonicalizer","genericCanonicalizer","queries","pendingCleanup","Map","objectCacheKeyRegistry","layers","logger","onRevalidate","maybeRevalidateQueries","bind","subjects","constructor","client","child","msgPrefix","cacheKeys","onDestroy","cleanupCacheKey","aggregations","functions","lists","objects","links","objectSets","key","subject","peek","console","log","JSON","stringify","closed","observed","type","otherKeys","process","env","NODE_ENV","delete","applyAction","action","args","opts","validateAction","result","$validateOnly","$returnEdits","getValue","cacheKey","top","get","batch","optimisticId","changes","batchFn","invalidateObject","apiName","pk","variants","getVariants","promises","size","push","getQuery","undefined","revalidate","query","Promise","allSettled","#maybeRevalidateQueries","methodName","isEmpty","debug","keys","maybeUpdateAndRevalidate","shouldPropagateToQuery","promise","all","#shouldPropagateToQuery","modified","has","shouldPropagateForObjectTypeChanges","queryRdpConfig","getQueryRdpConfig","#shouldPropagateForObjectTypeChanges","objectType","objectTypes","changesAffectObjectType","queryObjectType","getQueryObjectType","affected","queryKey","addedCount","addedObjects","length","modifiedCount","modifiedObjects","#getQueryRdpConfig","Array","isArray","rdpConfig","#getQueryObjectType","#changesAffectObjectType","addedForType","modifiedForType","deletedKey","deleted","invalidateObjectType","info","truth","then","invalidateAll","invalidateObjects","objectsArray","obj","$objectType","$primaryKey","invalidateFunction","params","invalidateFunctionsByObject","primaryKey"],"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 ActionEditResponse,\n ActionValidationResponse,\n Logger,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n QueryDefinition,\n} from \"@osdk/api\";\nimport invariant from \"tiny-invariant\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { additionalContext, type Client } from \"../../Client.js\";\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport type { OptimisticBuilder } from \"../OptimisticBuilder.js\";\nimport { ActionApplication } from \"./actions/ActionApplication.js\";\nimport {\n API_NAME_IDX as AGGREGATION_API_NAME_IDX,\n RDP_IDX as AGGREGATION_RDP_IDX,\n} from \"./aggregation/AggregationCacheKey.js\";\nimport { AggregationsHelper } from \"./aggregation/AggregationsHelper.js\";\nimport type { BatchContext } from \"./BatchContext.js\";\nimport { DEBUG_ONLY__cacheKeyToString } 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 \"./Changes.js\";\nimport { FunctionsHelper } from \"./function/FunctionsHelper.js\";\nimport { GenericCanonicalizer } from \"./GenericCanonicalizer.js\";\nimport { IntersectCanonicalizer } from \"./IntersectCanonicalizer.js\";\nimport type { KnownCacheKey } from \"./KnownCacheKey.js\";\nimport type { Entry } from \"./Layer.js\";\nimport { Layers } from \"./Layers.js\";\nimport { LinksHelper } from \"./links/LinksHelper.js\";\nimport {\n API_NAME_IDX as LIST_API_NAME_IDX,\n RDP_IDX as LIST_RDP_IDX,\n} from \"./list/ListCacheKey.js\";\nimport { ListsHelper } from \"./list/ListsHelper.js\";\nimport {\n API_NAME_IDX as OBJECT_API_NAME_IDX,\n RDP_CONFIG_IDX as OBJECT_RDP_CONFIG_IDX,\n} from \"./object/ObjectCacheKey.js\";\nimport { ObjectCacheKeyRegistry } from \"./object/ObjectCacheKeyRegistry.js\";\nimport { ObjectsHelper } from \"./object/ObjectsHelper.js\";\nimport { ObjectSetHelper } from \"./objectset/ObjectSetHelper.js\";\nimport { ObjectSetArrayCanonicalizer } from \"./ObjectSetArrayCanonicalizer.js\";\nimport { type OptimisticId } from \"./OptimisticId.js\";\nimport { OrderByCanonicalizer } from \"./OrderByCanonicalizer.js\";\nimport { PivotCanonicalizer } from \"./PivotCanonicalizer.js\";\nimport { Queries } from \"./Queries.js\";\nimport { type Rdp, RdpCanonicalizer } from \"./RdpCanonicalizer.js\";\nimport { RidListCanonicalizer } from \"./RidListCanonicalizer.js\";\nimport { SelectCanonicalizer } from \"./SelectCanonicalizer.js\";\nimport type { Subjects } from \"./Subjects.js\";\nimport { WhereClauseCanonicalizer } from \"./WhereClauseCanonicalizer.js\";\n\nexport namespace Store {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\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\n/**\n * Central data store with layered cache architecture.\n * - Truth layer: server state | Optimistic layers: pending changes\n * - Reference counting prevents memory leaks\n * - Batch operations ensure consistency\n */\nexport class Store {\n readonly whereCanonicalizer: WhereClauseCanonicalizer =\n new WhereClauseCanonicalizer();\n readonly orderByCanonicalizer: OrderByCanonicalizer =\n new OrderByCanonicalizer();\n readonly rdpCanonicalizer: RdpCanonicalizer = new RdpCanonicalizer();\n readonly intersectCanonicalizer: IntersectCanonicalizer =\n new IntersectCanonicalizer(this.whereCanonicalizer);\n readonly pivotCanonicalizer: PivotCanonicalizer = new PivotCanonicalizer();\n readonly ridListCanonicalizer: RidListCanonicalizer =\n new RidListCanonicalizer();\n readonly selectCanonicalizer: SelectCanonicalizer = new SelectCanonicalizer();\n readonly objectSetArrayCanonicalizer: ObjectSetArrayCanonicalizer =\n new ObjectSetArrayCanonicalizer();\n readonly genericCanonicalizer: GenericCanonicalizer =\n new GenericCanonicalizer();\n\n readonly client: Client;\n\n /** @internal */\n readonly logger?: Logger;\n\n readonly cacheKeys: CacheKeys<KnownCacheKey>;\n readonly queries: Queries = new Queries();\n\n /**\n * Tracks cache keys with deferred cleanup. During React unmount-remount\n * cycles, a subscription may be cleaned up and immediately re-created.\n * By deferring cleanup to a microtask, we prevent propagateWrite from\n * skipping keys that are momentarily between subscriptions.\n *\n * The value is a count (not a boolean) so multiple unsubscribes within the\n * same tick schedule the correct number of releases.\n * @internal\n */\n readonly pendingCleanup: Map<KnownCacheKey, number> = new Map();\n\n readonly objectCacheKeyRegistry: ObjectCacheKeyRegistry =\n new ObjectCacheKeyRegistry();\n\n readonly layers: Layers = new Layers({\n logger: this.logger,\n onRevalidate: this.#maybeRevalidateQueries.bind(this),\n });\n readonly subjects: Subjects = this.layers.subjects;\n\n // these are hopefully temporary\n readonly aggregations: AggregationsHelper;\n readonly functions: FunctionsHelper;\n readonly lists: ListsHelper;\n readonly objects: ObjectsHelper;\n readonly links: LinksHelper;\n readonly objectSets: ObjectSetHelper;\n\n constructor(client: Client) {\n this.logger = client[additionalContext].logger?.child({}, {\n msgPrefix: \"Store\",\n });\n this.client = client;\n\n this.cacheKeys = new CacheKeys<KnownCacheKey>({\n onDestroy: this.#cleanupCacheKey,\n });\n\n this.aggregations = new AggregationsHelper(\n this,\n this.cacheKeys,\n this.whereCanonicalizer,\n this.rdpCanonicalizer,\n this.intersectCanonicalizer,\n );\n this.functions = new FunctionsHelper(this, this.cacheKeys);\n this.lists = new ListsHelper(\n this,\n this.cacheKeys,\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n this.rdpCanonicalizer,\n this.intersectCanonicalizer,\n this.pivotCanonicalizer,\n this.ridListCanonicalizer,\n this.selectCanonicalizer,\n );\n this.objects = new ObjectsHelper(this, this.cacheKeys);\n this.links = new LinksHelper(\n this,\n this.cacheKeys,\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n this.selectCanonicalizer,\n );\n this.objectSets = new ObjectSetHelper(\n this,\n this.cacheKeys,\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n this.rdpCanonicalizer,\n this.selectCanonicalizer,\n this.objectSetArrayCanonicalizer,\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: KnownCacheKey) => {\n const subject = this.subjects.peek(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\n if (process.env.NODE_ENV !== \"production\") {\n invariant(subject);\n }\n\n this.subjects.delete(key);\n this.queries.delete(key);\n };\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args:\n | Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0]\n | Array<Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0]>,\n opts?: Store.ApplyActionOptions,\n ) => Promise<ActionEditResponse> = async (action, args, opts) => {\n return await new ActionApplication(this).applyAction(action, args, opts);\n };\n\n validateAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n ) => Promise<ActionValidationResponse> = async (action, args) => {\n const result = await this.client(action).applyAction(args as any, {\n $validateOnly: true,\n $returnEdits: false,\n });\n return result as ActionValidationResponse;\n };\n\n public getValue<K extends KnownCacheKey>(\n cacheKey: K,\n ): Entry<K> | undefined {\n return this.layers.top.get(cacheKey);\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 changes: Changes;\n } {\n return this.layers.batch({ optimisticId, changes }, batchFn);\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 const variants = this.objectCacheKeyRegistry.getVariants(apiName, pk);\n\n // Invalidate all variant cache entries\n // Using Promise.allSettled to ensure if one invalidation fails, others will still complete.\n // This prevents a single failing query from blocking invalidation of other cache variants for the same object.\n const promises: Promise<void>[] = [];\n\n if (variants.size === 0) {\n // No registered variants - create and revalidate the base variant (no RDP)\n promises.push(\n this.objects.getQuery({\n apiName,\n pk,\n }, undefined).revalidate(/* force */ true),\n );\n } else {\n // Revalidate all registered variants\n for (const key of variants) {\n const query = this.queries.peek(key);\n if (query) {\n promises.push(query.revalidate(/* force */ true));\n }\n }\n }\n\n return Promise.allSettled(promises);\n }\n\n async #maybeRevalidateQueries(\n changes: Changes,\n optimisticId?: OptimisticId | undefined,\n ): Promise<void> {\n const logger = process.env.NODE_ENV !== \"production\"\n ? this.logger?.child({ methodName: \"maybeRevalidateQueries\" })\n : undefined;\n\n if (changes.isEmpty()) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"No changes, aborting\");\n }\n return;\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(DEBUG_ONLY__changesToString(changes), { optimisticId });\n }\n\n try {\n const promises: Array<Promise<unknown>> = [];\n for (const cacheKey of this.queries.keys()) {\n const query = this.queries.peek(cacheKey);\n if (!query?.maybeUpdateAndRevalidate) {\n continue;\n }\n\n // Only propagate to queries that should receive these changes\n if (\n !this.#shouldPropagateToQuery(\n {\n cacheKey,\n maybeUpdateAndRevalidate: query.maybeUpdateAndRevalidate,\n },\n changes,\n optimisticId,\n )\n ) {\n continue;\n }\n\n const promise = query.maybeUpdateAndRevalidate(changes, optimisticId);\n if (promise) promises.push(promise);\n }\n await Promise.all(promises);\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"in finally\", DEBUG_ONLY__changesToString(changes));\n }\n }\n }\n\n /**\n * Determines whether changes should propagate to a specific query.\n * Prevents unnecessary observable pipeline execution for cross-propagation.\n *\n * @param query - The query to check\n * @param changes - The changes that occurred\n * @param optimisticId - Optional optimistic update ID\n * @returns true if the query should be notified of these changes\n */\n #shouldPropagateToQuery(\n query: {\n cacheKey: KnownCacheKey;\n maybeUpdateAndRevalidate?: (\n changes: Changes,\n optimisticId: OptimisticId | undefined,\n ) => Promise<void> | undefined;\n },\n changes: Changes,\n optimisticId?: OptimisticId,\n ): boolean {\n // Always propagate optimistic updates (user-initiated actions need immediate feedback)\n if (optimisticId) {\n return true;\n }\n\n // If the query's own cache key was modified (direct fetch), always propagate\n if (changes.modified.has(query.cacheKey)) {\n return true;\n }\n\n // Check if the query's object type is affected by the changes\n if (this.#shouldPropagateForObjectTypeChanges(query.cacheKey, changes)) {\n return true;\n }\n\n // For other cross-propagation (e.g., RDP field updates from unrelated object types):\n // Only propagate to queries WITH RDP configurations\n const queryRdpConfig = this.#getQueryRdpConfig(query.cacheKey);\n\n // If query has no RDP, don't propagate unrelated object changes to it\n // (it will get updates from its own direct fetches only)\n return queryRdpConfig != null;\n }\n\n /**\n * Checks if changes to an object type should propagate to a query.\n * This ensures queries receive updates when objects of their type are added/modified.\n *\n * @param cacheKey - The cache key of the query\n * @param changes - The changes that occurred\n * @returns true if the query should be notified based on object type changes\n */\n #shouldPropagateForObjectTypeChanges(\n cacheKey: KnownCacheKey,\n changes: Changes,\n ): boolean {\n if (cacheKey.type === \"objectSet\") {\n const query = this.queries.peek(cacheKey);\n if (query) {\n for (const objectType of query.objectTypes) {\n if (this.#changesAffectObjectType(changes, objectType)) {\n return true;\n }\n }\n }\n return false;\n }\n\n const queryObjectType = this.#getQueryObjectType(cacheKey);\n if (!queryObjectType) {\n return false;\n }\n\n const affected = this.#changesAffectObjectType(changes, queryObjectType);\n\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"shouldPropagateToQuery\" }).debug(\n `Query type: ${queryObjectType}, affected: ${affected}`,\n {\n queryKey: DEBUG_ONLY__cacheKeyToString(cacheKey),\n addedCount: changes.addedObjects.get(queryObjectType)?.length ?? 0,\n modifiedCount: changes.modifiedObjects.get(queryObjectType)?.length\n ?? 0,\n },\n );\n }\n\n return affected;\n }\n\n /**\n * Extracts RDP configuration from a cache key if present.\n *\n * @param cacheKey - The cache key to check\n * @returns The RDP configuration, null, or undefined\n */\n #getQueryRdpConfig(\n cacheKey: KnownCacheKey,\n ): Canonical<Rdp> | null | undefined {\n if (\"otherKeys\" in cacheKey && Array.isArray(cacheKey.otherKeys)) {\n if (cacheKey.type === \"object\") {\n return cacheKey.otherKeys[OBJECT_RDP_CONFIG_IDX];\n } else if (cacheKey.type === \"list\") {\n return cacheKey.otherKeys[LIST_RDP_IDX];\n } else if (cacheKey.type === \"aggregation\") {\n return cacheKey.otherKeys[AGGREGATION_RDP_IDX];\n } else if (cacheKey.type === \"objectSet\") {\n const query = this.queries.peek(cacheKey);\n if (query) {\n return query.rdpConfig;\n }\n } else if (cacheKey.type === \"mediaMetadata\") {\n return undefined;\n }\n // Links and other types would also be at LIST_RDP_IDX\n }\n return undefined;\n }\n\n /**\n * Extracts the object type (apiName) from a cache key.\n *\n * @param cacheKey - The cache key to check\n * @returns The object type/apiName, or undefined if not applicable\n */\n #getQueryObjectType(cacheKey: KnownCacheKey): string | undefined {\n if (\"otherKeys\" in cacheKey && Array.isArray(cacheKey.otherKeys)) {\n if (cacheKey.type === \"object\") {\n return cacheKey.otherKeys[OBJECT_API_NAME_IDX];\n } else if (cacheKey.type === \"list\") {\n return cacheKey.otherKeys[LIST_API_NAME_IDX];\n } else if (cacheKey.type === \"aggregation\") {\n return cacheKey.otherKeys[AGGREGATION_API_NAME_IDX];\n } else if (cacheKey.type === \"mediaMetadata\") {\n return cacheKey.otherKeys[0];\n }\n // Links would have apiName at a different position\n }\n return undefined;\n }\n\n /**\n * Checks if changes affect a specific object type.\n *\n * @param changes - The changes to check\n * @param objectType - The object type to check for\n * @returns true if the changes include added or modified objects of this type\n */\n #changesAffectObjectType(changes: Changes, objectType: string): boolean {\n // Check added objects (MultiMap.get returns an array)\n const addedForType = changes.addedObjects.get(objectType);\n if (addedForType && addedForType.length > 0) {\n return true;\n }\n\n // Check modified objects (MultiMap.get returns an array)\n const modifiedForType = changes.modifiedObjects.get(objectType);\n if (modifiedForType && modifiedForType.length > 0) {\n return true;\n }\n\n for (const deletedKey of changes.deleted) {\n if (\n deletedKey.type === \"object\"\n && deletedKey.otherKeys[OBJECT_API_NAME_IDX] === objectType\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Invalidates all cache entries for a specific object type.\n * This will revalidate:\n * 1. All objects of the specified type\n * 2. All lists of the specified type\n * 3. All links where the source object is of the specified type\n *\n * @param apiName - The API name of the object type to invalidate\n * @param changes - Optional changes object to track what has been modified\n * @returns Promise that resolves when all invalidations are complete\n */\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n changes: Changes | undefined,\n ): Promise<void> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"invalidateObjectType\" }).info(\n changes ? DEBUG_ONLY__changesToString(changes) : void 0,\n );\n }\n\n const promises: Array<Promise<void>> = [];\n\n for (const cacheKey of this.layers.truth.keys()) {\n if (\n cacheKey.type !== \"mediaMetadata\"\n && changes\n && changes.modified.has(cacheKey)\n ) {\n continue;\n }\n const query = this.queries.peek(cacheKey);\n if (!query) continue;\n\n promises.push(query.invalidateObjectType(apiName, changes));\n }\n\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n\n public async invalidateAll(): Promise<void> {\n const promises: Array<Promise<unknown>> = [];\n for (const cacheKey of this.queries.keys()) {\n const query = this.queries.peek(cacheKey);\n if (query) {\n promises.push(query.revalidate(true));\n }\n }\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n\n public async invalidateObjects(\n objects:\n | Osdk.Instance<ObjectTypeDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectTypeDefinition>>,\n ): Promise<void> {\n const objectsArray = Array.isArray(objects) ? objects : [objects];\n const promises: Array<Promise<unknown>> = [];\n\n for (const obj of objectsArray) {\n promises.push(this.invalidateObject(obj.$objectType, obj.$primaryKey));\n }\n\n // we use allSettled here because we don't care if it succeeds or fails, just that they all complete.\n return Promise.allSettled(promises).then(() => void 0);\n }\n\n public async invalidateFunction(\n apiName: string | QueryDefinition<unknown>,\n params?: Record<string, unknown>,\n ): Promise<void> {\n return this.functions.invalidateFunction(apiName, params);\n }\n\n public async invalidateFunctionsByObject(\n apiName: string,\n primaryKey: string | number,\n ): Promise<void> {\n return this.functions.invalidateFunctionsByObject(apiName, primaryKey);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -41,6 +41,9 @@ export class WhereClauseCanonicalizer {
41
41
  */
42
42
  #existingOptions = new Map();
43
43
  canonicalize(where) {
44
+ if (where == null) {
45
+ return undefined;
46
+ }
44
47
  // fastest shortcut
45
48
  if (this.#cache.has(where)) {
46
49
  return this.#cache.get(where);
@@ -1 +1 @@
1
- {"version":3,"file":"WhereClauseCanonicalizer.js","names":["Trie","deepEqual","invariant","WhereClauseCanonicalizer","cache","WeakMap","trie","existingOptions","Map","canonicalize","where","has","get","keysSet","Set","calculatedCanon","toCanon","cacheKey","lookupArray","Array","from","sort","lookupEntry","options","set","canon","find","ref","deref","push","WeakRef","#toCanon","process","env","NODE_ENV","isArray","$and","Object","keys","length","fromEntries","entries","a","b","localeCompare","map","k","v","add","x"],"sources":["WhereClauseCanonicalizer.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 ObjectOrInterfaceDefinition,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport { Trie } from \"@wry/trie\";\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nimport type { Canonical } from \"./Canonical.js\";\nimport type { SimpleWhereClause } from \"./SimpleWhereClause.js\";\n\nexport class WhereClauseCanonicalizer {\n /**\n * This is a shortcut cache for any WhereClause's that we have\n * seen and already canonicalized. The theory behind this\n * is that well behaving React applications will either `useMemo`\n * their where clause, or store it in state or pass it through as\n * props such that we are likely to get the same WhereClause\n * object multiple times and we can skip unnecessary work.\n */\n #cache = new WeakMap<\n | WhereClause<\n ObjectOrInterfaceDefinition,\n Record<string, SimplePropertyDef>\n >\n | SimpleWhereClause,\n Canonical<SimpleWhereClause>\n >();\n\n /**\n * This is a trie that stores the sorted collapsed keys of a where clause to\n * the cache key for canonicalized options. In theory this keeps the number of\n * deepEqual comparisons down to a minimum but its probably overkill.\n */\n #trie = new Trie<object>();\n\n /**\n * This is a cache from the cacheKey provided by `this.#trie` to the potential\n * canonicalized options.\n */\n #existingOptions: Map<object, {\n options: WeakRef<Canonical<SimpleWhereClause>>[];\n }> = new Map();\n\n public canonicalize<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n where: WhereClause<T, RDPs> | SimpleWhereClause,\n ): Canonical<SimpleWhereClause> {\n // fastest shortcut\n if (this.#cache.has(where)) {\n return this.#cache.get(where)!;\n }\n\n const keysSet = new Set<string>();\n const calculatedCanon = this.#toCanon(where, keysSet);\n const cacheKey = this.#trie.lookupArray(Array.from(keysSet).sort());\n const lookupEntry = this.#existingOptions.get(cacheKey)\n ?? { options: [] as WeakRef<Canonical<SimpleWhereClause>>[] };\n this.#existingOptions.set(cacheKey, lookupEntry);\n\n const canon =\n lookupEntry.options.find((ref) => deepEqual(ref.deref(), calculatedCanon))\n ?.deref()\n ?? calculatedCanon;\n\n if (canon === calculatedCanon) {\n // This means no existing options were found\n lookupEntry.options.push(new WeakRef(canon));\n }\n\n this.#cache.set(where, canon);\n return canon;\n }\n\n #toCanon = <\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n where: WhereClause<T, RDPs> | SimpleWhereClause,\n set: Set<string> = new Set<string>(),\n ): Canonical<SimpleWhereClause> => {\n if (\"$and\" in where) {\n if (process.env.NODE_ENV !== \"production\") {\n invariant(Array.isArray(where.$and), \"expected $and to be an array\");\n invariant(\n Object.keys(where).length === 1,\n \"expected only $and to be present\",\n );\n }\n if ((where as { $and: SimpleWhereClause[] }).$and.length === 0) {\n // empty $and is a no-op\n return {} as Canonical<SimpleWhereClause>;\n }\n if ((where as { $and: SimpleWhereClause[] }).$and.length === 1) {\n return this.#toCanon(\n (where as { $and: SimpleWhereClause[] }).$and[0],\n set,\n );\n }\n }\n // This is incomplete for all the cases possible but it gets us started\n\n return Object.fromEntries(\n Object.entries(where)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => {\n set.add(k);\n if (k === \"$and\" || k === \"$or\") {\n return [\n k,\n (v as Array<SimpleWhereClause>).map(x => this.#toCanon(x, set)),\n ];\n }\n if (\n k !== \"$not\" && typeof v === \"object\" && v != null && \"$eq\" in v\n ) {\n return [k, v[\"$eq\"]];\n }\n return [k, v];\n }),\n ) as Canonical<SimpleWhereClause>;\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"WhereClauseCanonicalizer.js","names":["Trie","deepEqual","invariant","WhereClauseCanonicalizer","cache","WeakMap","trie","existingOptions","Map","canonicalize","where","undefined","has","get","keysSet","Set","calculatedCanon","toCanon","cacheKey","lookupArray","Array","from","sort","lookupEntry","options","set","canon","find","ref","deref","push","WeakRef","#toCanon","process","env","NODE_ENV","isArray","$and","Object","keys","length","fromEntries","entries","a","b","localeCompare","map","k","v","add","x"],"sources":["WhereClauseCanonicalizer.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 ObjectOrInterfaceDefinition,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport { Trie } from \"@wry/trie\";\nimport deepEqual from \"fast-deep-equal\";\nimport invariant from \"tiny-invariant\";\nimport type { Canonical } from \"./Canonical.js\";\nimport type { SimpleWhereClause } from \"./SimpleWhereClause.js\";\n\nexport class WhereClauseCanonicalizer {\n /**\n * This is a shortcut cache for any WhereClause's that we have\n * seen and already canonicalized. The theory behind this\n * is that well behaving React applications will either `useMemo`\n * their where clause, or store it in state or pass it through as\n * props such that we are likely to get the same WhereClause\n * object multiple times and we can skip unnecessary work.\n */\n #cache = new WeakMap<\n | WhereClause<\n ObjectOrInterfaceDefinition,\n Record<string, SimplePropertyDef>\n >\n | SimpleWhereClause,\n Canonical<SimpleWhereClause>\n >();\n\n /**\n * This is a trie that stores the sorted collapsed keys of a where clause to\n * the cache key for canonicalized options. In theory this keeps the number of\n * deepEqual comparisons down to a minimum but its probably overkill.\n */\n #trie = new Trie<object>();\n\n /**\n * This is a cache from the cacheKey provided by `this.#trie` to the potential\n * canonicalized options.\n */\n #existingOptions: Map<object, {\n options: WeakRef<Canonical<SimpleWhereClause>>[];\n }> = new Map();\n\n public canonicalize<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n where: WhereClause<T, RDPs> | SimpleWhereClause,\n ): Canonical<SimpleWhereClause>;\n public canonicalize(\n where: object | undefined,\n ): Canonical<SimpleWhereClause> | undefined;\n public canonicalize<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n where: WhereClause<T, RDPs> | SimpleWhereClause | undefined,\n ): Canonical<SimpleWhereClause> | undefined {\n if (where == null) {\n return undefined;\n }\n // fastest shortcut\n if (this.#cache.has(where)) {\n return this.#cache.get(where)!;\n }\n\n const keysSet = new Set<string>();\n const calculatedCanon = this.#toCanon(where, keysSet);\n const cacheKey = this.#trie.lookupArray(Array.from(keysSet).sort());\n const lookupEntry = this.#existingOptions.get(cacheKey)\n ?? { options: [] as WeakRef<Canonical<SimpleWhereClause>>[] };\n this.#existingOptions.set(cacheKey, lookupEntry);\n\n const canon =\n lookupEntry.options.find((ref) => deepEqual(ref.deref(), calculatedCanon))\n ?.deref()\n ?? calculatedCanon;\n\n if (canon === calculatedCanon) {\n // This means no existing options were found\n lookupEntry.options.push(new WeakRef(canon));\n }\n\n this.#cache.set(where, canon);\n return canon;\n }\n\n #toCanon = <\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n where: WhereClause<T, RDPs> | SimpleWhereClause,\n set: Set<string> = new Set<string>(),\n ): Canonical<SimpleWhereClause> => {\n if (\"$and\" in where) {\n if (process.env.NODE_ENV !== \"production\") {\n invariant(Array.isArray(where.$and), \"expected $and to be an array\");\n invariant(\n Object.keys(where).length === 1,\n \"expected only $and to be present\",\n );\n }\n if ((where as { $and: SimpleWhereClause[] }).$and.length === 0) {\n // empty $and is a no-op\n return {} as Canonical<SimpleWhereClause>;\n }\n if ((where as { $and: SimpleWhereClause[] }).$and.length === 1) {\n return this.#toCanon(\n (where as { $and: SimpleWhereClause[] }).$and[0],\n set,\n );\n }\n }\n // This is incomplete for all the cases possible but it gets us started\n\n return Object.fromEntries(\n Object.entries(where)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => {\n set.add(k);\n if (k === \"$and\" || k === \"$or\") {\n return [\n k,\n (v as Array<SimpleWhereClause>).map(x => this.#toCanon(x, set)),\n ];\n }\n if (\n k !== \"$not\" && typeof v === \"object\" && v != null && \"$eq\" in v\n ) {\n return [k, v[\"$eq\"]];\n }\n return [k, v];\n }),\n ) as Canonical<SimpleWhereClause>;\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -76,12 +76,8 @@ export class InterfaceListQuery extends ListQuery {
76
76
  createPayload(params) {
77
77
  const resolvedList = params.resolvedData?.map(obj => obj.$as(this.apiName));
78
78
  return {
79
- resolvedList,
80
- isOptimistic: params.isOptimistic,
81
- fetchMore: this.fetchMore,
82
- hasMore: this.nextPageToken != null,
83
- status: params.status,
84
- lastUpdated: params.lastUpdated
79
+ ...super.createPayload(params),
80
+ resolvedList
85
81
  };
86
82
  }
87
83
  extractRelevantObjects(changes) {
@@ -1 +1 @@
1
- {"version":3,"file":"InterfaceListQuery.js","names":["groupBy","arr","fn","result","item","key","push","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","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\";\nfunction groupBy<T>(\n arr: T[],\n fn: (item: T) => string,\n): Record<string, T[]> {\n const result: Record<string, T[]> = {};\n for (const item of arr) {\n const key = fn(item);\n (result[key] ??= []).push(item);\n }\n return result;\n}\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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWA,SAASA,OAAOA,CACdC,GAAQ,EACRC,EAAuB,EACF;EACrB,MAAMC,MAA2B,GAAG,CAAC,CAAC;EACtC,KAAK,MAAMC,IAAI,IAAIH,GAAG,EAAE;IACtB,MAAMI,GAAG,GAAGH,EAAE,CAACE,IAAI,CAAC;IACpB,CAACD,MAAM,CAACE,GAAG,CAAC,KAAK,EAAE,EAAEC,IAAI,CAACF,IAAI,CAAC;EACjC;EACA,OAAOD,MAAM;AACf;AACA,OAAOI,SAAS,MAAM,gBAAgB;AACtC,SAASC,iBAAiB,QAAqB,oBAAoB;AAEnE,SAASC,YAAY,QAAQ,6DAA6D;AAS1F,SAASC,SAAS,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,gBAAgB;AAQxE,OAAO,MAAMC,kBAAkB,SAASJ,SAAS,CAAC;EACtCK,eAAeA,CAACC,KAAY,EAAmC;IACvE,MAAMC,SAAS,GAAG,IAAI,CAACC,QAAQ,CAACC,SAAS,CAACP,OAAO,CAAC;IAClD,MAAMQ,SAAS,GAAG,IAAI,CAACF,QAAQ,CAACC,SAAS,CAACR,SAAS,CAAC;IACpD,MAAMU,IAAI,GAAG,IAAI,CAACH,QAAQ,CAACC,SAAS,CAACN,QAAQ,CAAC;IAE9C,IAAIO,SAAS,IAAI,IAAI,EAAE;MACrB,MAAME,SAAS,GAAGC,uBAAuB,CAACP,KAAK,EAAEI,SAAS,EAAEC,IAAI,CAAC;MAEjE,IAAIG,SAAS,GAAGF,SAAS,CACtBG,KAAK,CAAC,IAAI,CAACC,cAAkC,CAAC,CAC9CC,OAAO,CAACP,SAAS,CAACQ,QAAQ,CAAC;MAE9B,IAAIX,SAAS,IAAI,IAAI,EAAE;QACrBO,SAAS,GAAGA,SAAS,CAACK,cAAc,CAClCZ,SACF,CAAC;MACH;;MAEA;MACA;MACA,OAAOO,SAAS;IAClB;IAGA,MAAMM,aAAa,GAAG;MACpBC,IAAI,EAFe,WAEf;MACJC,OAAO,EAAE,IAAI,CAACA;IAChB,CAAyB;IAEzB,MAAMC,SAAS,GAAGjB,KAAK,CAACkB,MAAM,CAAC1B,iBAAiB,CAAC;IACjD,IAAIgB,SAA0C;IAC9C,IAAIH,IAAI,IAAI,IAAI,EAAE;MAChBG,SAAS,GAAGS,SAAS,CAACE,gBAAgB,CACpCL,aAAa,EACbG,SAAS,EACT;QAAEF,IAAI,EAAE,QAAQ;QAAEK,OAAO,EAAE,CAAC,GAAGf,IAAI;MAAE,CACvC,CAAC;IACH,CAAC,MAAM;MACLG,SAAS,GAAGR,KAAK,CAACkB,MAAM,CAACJ,aAAa,CAAC;IACzC;IAEA,IAAIb,SAAS,IAAI,IAAI,EAAE;MACrBO,SAAS,GAAGA,SAAS,CAACK,cAAc,CAACZ,SAAgB,CAAC;IACxD;IAEA,OAAOO,SAAS,CAACC,KAAK,CAAC,IAAI,CAACC,cAAc,CAAC;EAC7C;EAEA,MAAMW,oBAAoBA,CAACL,OAAe,EAAiB;IACzD,MAAMM,cAAc,GAAG,MAAM,IAAI,CAACtB,KAAK,CAACkB,MAAM,CAACK,aAAa,CAAC;MAC3DR,IAAI,EAAE,QAAQ;MACdC;IACF,CAAC,CAAC;IAEF,IAAI,IAAI,CAACA,OAAO,IAAIM,cAAc,CAACE,YAAY,EAAE;MAC/C,MAAM,IAAI,CAACC,UAAU,CAAC,WAAY,IAAI,CAAC;IACzC;EACF;EAEA,MAAgBC,sBAAsBA,CACpCC,IAA0B,EACK;IAC/B,OAAOC,uBAAuB,CAAC,IAAI,CAAC5B,KAAK,CAACkB,MAAM,EAAES,IAAI,CAAC;EACzD;EAEUE,aAAaA,CACrBC,MAAmC,EACtB;IACb,MAAMC,YAAY,GAAGD,MAAM,CAACE,YAAY,EAAEC,GAAG,CAAEC,GAAiB,IAC9DA,GAAG,CAACC,GAAG,CAAC,IAAI,CAACnB,OAAO,CACtB,CAAC;IAED,OAAO;MACLe,YAAY;MACZK,YAAY,EAAEN,MAAM,CAACM,YAAY;MACjCC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,OAAO,EAAE,IAAI,CAACC,aAAa,IAAI,IAAI;MACnCC,MAAM,EAAEV,MAAM,CAACU,MAAM;MACrBC,WAAW,EAAEX,MAAM,CAACW;IACtB,CAAC;EACH;EAEUC,sBAAsBA,CAC9BC,OAAgB,EACc;IAC9B,MAAMC,cAAc,GAAGA,CAAC,GAAGC,MAAM,CAA0B,KAAK;MAC9D,OAAO,IAAI,CAAC7B,OAAO,IAAI6B,MAAM,CAACpD,YAAY,CAAC,CAAC+B,YAAY;IAC1D,CAAC;IAED,MAAMsB,KAAK,GAAGC,KAAK,CAACC,IAAI,CAACL,OAAO,CAACM,YAAY,CAAC,CAACC,MAAM,CAACN,cAAc,CAAC,CAACX,GAAG,CAAC,CACxE,GAAGY,MAAM,CAAC,KACPA,MAAM,CAACV,GAAG,CAAC,IAAI,CAACnB,OAAO,CAAC,CAAC;IAE9B,MAAMmC,QAAQ,GAAGJ,KAAK,CAACC,IAAI,CAACL,OAAO,CAACS,eAAe,CAAC,CAACF,MAAM,CAACN,cAAc,CAAC,CACxEX,GAAG,CAAC,CACH,GAAGY,MAAM,CAAC,KACPA,MAAM,CAACV,GAAG,CAAC,IAAI,CAACnB,OAAO,CAAC,CAAC;IAEhC,OAAO;MACL8B,KAAK,EAAE;QACLO,GAAG,EAAEP,KAAK;QACVQ,aAAa,EAAE,IAAIC,GAAG,CAAC,CAAC;QACxBC,YAAY,EAAE,IAAID,GAAG,CAAC;MACxB,CAAC;MACDJ,QAAQ,EAAE;QACRE,GAAG,EAAEF,QAAQ;QACbG,aAAa,EAAE,IAAIC,GAAG,CAAC,CAAC;QACxBC,YAAY,EAAE,IAAID,GAAG,CAAC;MACxB;IACF,CAAC;EACH;AACF;AAEA,SAAShD,uBAAuBA,CAC9BP,KAAY,EACZI,SAAoB,EACpBC,IAA0B,EACc;EACxC,MAAMY,SAAS,GAAGjB,KAAK,CAACkB,MAAM,CAAC1B,iBAAiB,CAAC;EAEjD,IAAIa,IAAI,IAAI,IAAI,EAAE;IAChB,OAAOY,SAAS,CAACE,gBAAgB,CAC/B;MACEJ,IAAI,EAAE,QAAQ;MACdC,OAAO,EAAEZ,SAAS,CAACqD;IACrB,CAAC,EACDxC,SAAS,EACT;MAAEF,IAAI,EAAE,QAAQ;MAAEK,OAAO,EAAE,CAAC,GAAGf,IAAI;IAAE,CACvC,CAAC;EACH;EAEA,IAAID,SAAS,CAACsD,cAAc,KAAK,WAAW,EAAE;IAC5C,OAAO1D,KAAK,CAACkB,MAAM,CAAC;MAClBH,IAAI,EAAE,WAAW;MACjBC,OAAO,EAAEZ,SAAS,CAACqD;IACrB,CAAwB,CAAC;EAC3B;EAEA,OAAOzD,KAAK,CAACkB,MAAM,CAAC;IAClBH,IAAI,EAAE,QAAQ;IACdC,OAAO,EAAEZ,SAAS,CAACqD;EACrB,CAAyB,CAAC;AAC5B;;AAEA;AACA,eAAe7B,uBAAuBA,CACpCV,MAAc,EACdS,IAA0B,EAC1B;EACA,IAAIA,IAAI,CAACgC,MAAM,KAAK,CAAC,EAAE;IACrB,OAAOhC,IAAI;EACb;EAEA,MAAMiC,MAAM,GAAG5E,OAAO,CAAC2C,IAAI,EAAGkC,CAAC,IAAKA,CAAC,CAACC,WAAW,CAAC;EAClD,MAAMC,8BAA8B,GAAGC,MAAM,CAACC,WAAW,CACvD,MAAMC,OAAO,CAACb,GAAG,CACfW,MAAM,CAACG,OAAO,CAACP,MAAM,CAAC,CAAC3B,GAAG,CAOxB,OAAO,CAACjB,OAAO,EAAEI,OAAO,CAAC,KAAK;IAC9B;IACA,MAAMgD,SAAS,GAAG,MAAMlD,MAAM,CAACK,aAAa,CAAC;MAC3CR,IAAI,EAAE,QAAQ;MACdC;IACF,CAAC,CAAC;IACF,MAAMP,KAAwB,GAAG;MAC/B,CAAC2D,SAAS,CAACC,iBAAiB,GAAG;QAC7BC,GAAG,EAAElD,OAAO,CAACa,GAAG,CAAC4B,CAAC,IAAIA,CAAC,CAACU,WAAW;MACrC;IACF,CAAC;IAED,MAAMpF,MAAM,GAAG,MAAM+B,MAAM,CACzBkD,SACF,CAAC,CAAC3D,KAAK,CACLA,KACF,CAAC,CAAC+D,SAAS,CAAC;MAAEC,WAAW,EAAE;IAAK,CAAC,CAAC;IAClC,OAAO,CACLzD,OAAO,EACPgD,MAAM,CAACC,WAAW,CAAC9E,MAAM,CAACwC,IAAI,CAACM,GAAG,CAChC4B,CAAC,IAAI,CAACA,CAAC,CAACU,WAAW,EAAEV,CAAC,CACxB,CAAC,CAAC,CACH;EACH,CAAC,CACH,CACF,CAAC;EAED,OAAOlC,IAAI,CAACM,GAAG,CAAEC,GAAG,IAAK;IACvB,MAAMwC,UAAU,GACdX,8BAA8B,CAAC7B,GAAG,CAAC4B,WAAW,CAAC,CAAC5B,GAAG,CAACqC,WAAW,CAAC;IAClE,CACEG,UAAU,GAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADZtF,SAAS,QAEP,yBAAyB2C,GAAG,CAAC4B,WAAW,IAAI5B,GAAG,CAACqC,WAAW,EAAE,IAF/DhF,SAAS;IAIT,OAAOmF,UAAU;EACnB,CAAC,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"InterfaceListQuery.js","names":["groupBy","arr","fn","result","item","key","push","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","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","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\";\nfunction groupBy<T>(\n arr: T[],\n fn: (item: T) => string,\n): Record<string, T[]> {\n const result: Record<string, T[]> = {};\n for (const item of arr) {\n const key = fn(item);\n (result[key] ??= []).push(item);\n }\n return result;\n}\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 ...super.createPayload(params),\n resolvedList,\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":[]}
@@ -35,8 +35,6 @@ export class ListQuery extends BaseListQuery {
35
35
  // pageSize?: number; // this is the internal page size. we need to track this properly
36
36
 
37
37
  #whereClause;
38
-
39
- // Using base class minResultsToLoad instead of a private property
40
38
  #orderBy;
41
39
  #select;
42
40
  #intersectWith;
@@ -68,13 +66,6 @@ export class ListQuery extends BaseListQuery {
68
66
  if (!this.#pivotInfo) {
69
67
  this.sortingStrategy = new OrderBySortingStrategy(this.apiName, this.#orderBy);
70
68
  }
71
- if (opts.autoFetchMore === true) {
72
- this.minResultsToLoad = Number.MAX_SAFE_INTEGER;
73
- } else if (typeof opts.autoFetchMore === "number") {
74
- this.minResultsToLoad = Math.max(0, opts.autoFetchMore);
75
- } else {
76
- this.minResultsToLoad = 0;
77
- }
78
69
  }
79
70
  get canonicalWhere() {
80
71
  return this.#whereClause;
@@ -91,6 +82,12 @@ export class ListQuery extends BaseListQuery {
91
82
  get canonicalPivotInfo() {
92
83
  return this.#pivotInfo;
93
84
  }
85
+ createPayload(params) {
86
+ return {
87
+ ...super.createPayload(params),
88
+ objectSet: this.#objectSet
89
+ };
90
+ }
94
91
  /**
95
92
  * Implements fetchPageData from BaseCollectionQuery template method
96
93
  * Fetches a page of data