@osdk/client 2.29.0 → 2.29.1-main-db8df2423f72b154e84da1e327691afbc569c5aa
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.
- package/CHANGELOG.md +9 -0
- package/build/browser/Client.js +1 -1
- package/build/browser/Client.js.map +1 -1
- package/build/browser/observable/ObservableClient.js.map +1 -1
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/cjs/{applyStreamingQuery-LAADUDOV.cjs → applyStreamingQuery-FYDJHK5N.cjs} +9 -9
- package/build/cjs/{applyStreamingQuery-LAADUDOV.cjs.map → applyStreamingQuery-FYDJHK5N.cjs.map} +1 -1
- package/build/cjs/{chunk-ZGZIAH5U.cjs → chunk-C6OATKMW.cjs} +2 -2
- package/build/cjs/{chunk-ZGZIAH5U.cjs.map → chunk-C6OATKMW.cjs.map} +1 -1
- package/build/cjs/{chunk-RIAWCCA2.cjs → chunk-PLNHZSLQ.cjs} +76 -76
- package/build/cjs/{chunk-RIAWCCA2.cjs.map → chunk-PLNHZSLQ.cjs.map} +1 -1
- package/build/cjs/{chunk-CX6OUFDY.cjs → chunk-VJDJ4OBY.cjs} +13 -13
- package/build/cjs/{chunk-CX6OUFDY.cjs.map → chunk-VJDJ4OBY.cjs.map} +1 -1
- package/build/cjs/{chunk-QYNOGBGZ.cjs → chunk-WZURIR37.cjs} +45 -45
- package/build/cjs/chunk-WZURIR37.cjs.map +1 -0
- package/build/cjs/index.cjs +11 -11
- package/build/cjs/public/experimental.cjs +6 -6
- package/build/cjs/public/internal.cjs +7 -7
- package/build/cjs/public/observable.cjs +5 -5
- package/build/cjs/public/observable.d.cts +3 -1
- package/build/cjs/public/unstable-do-not-use.cjs +14 -14
- package/build/esm/Client.js +1 -1
- package/build/esm/Client.js.map +1 -1
- package/build/esm/observable/ObservableClient.js.map +1 -1
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/types/Client.d.ts +1 -1
- package/build/types/observable/ObservableClient.d.ts +3 -1
- package/build/types/observable/ObservableClient.d.ts.map +1 -1
- package/build/types/observable/internal/Store.d.ts +2 -2
- package/build/types/observable/internal/Store.d.ts.map +1 -1
- package/package.json +7 -7
- package/build/cjs/chunk-QYNOGBGZ.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# @osdk/client
|
|
2
2
|
|
|
3
|
+
## 2.29.1-main-db8df2423f72b154e84da1e327691afbc569c5aa
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- db8df24: Allow `invalidateObjects` to accept interface instances (`Osdk.Instance<ObjectOrInterfaceDefinition>`).
|
|
8
|
+
- @osdk/api@2.29.1-main-db8df2423f72b154e84da1e327691afbc569c5aa
|
|
9
|
+
- @osdk/client.unstable@2.29.1-main-db8df2423f72b154e84da1e327691afbc569c5aa
|
|
10
|
+
- @osdk/generator-converters@2.29.1-main-db8df2423f72b154e84da1e327691afbc569c5aa
|
|
11
|
+
|
|
3
12
|
## 2.29.0
|
|
4
13
|
|
|
5
14
|
### Minor Changes
|
package/build/browser/Client.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
export const additionalContext = Symbol("additionalContext");
|
|
22
22
|
|
|
23
23
|
// BEGIN: THIS IS GENERATED CODE. DO NOT EDIT.
|
|
24
|
-
const MaxOsdkVersion = "2.29.
|
|
24
|
+
const MaxOsdkVersion = "2.29.1";
|
|
25
25
|
// END: THIS IS GENERATED CODE. DO NOT EDIT.
|
|
26
26
|
|
|
27
27
|
const ErrorMessage = Symbol("ErrorMessage");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.js","names":["additionalContext","Symbol","MaxOsdkVersion","ErrorMessage"],"sources":["Client.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ActionDefinition,\n ActionMetadata,\n CompileTimeMetadata,\n InterfaceDefinition,\n InterfaceMetadata,\n ObjectMetadata,\n ObjectSet,\n ObjectTypeDefinition,\n QueryDefinition,\n QueryMetadata,\n VersionBound,\n} from \"@osdk/api\";\nimport type {\n Experiment,\n ExperimentFns,\n MinimalObjectSet,\n} from \"@osdk/api/unstable\";\nimport type { SharedClient } from \"@osdk/shared.client2\";\nimport type { ActionSignatureFromDef } from \"./actions/applyAction.js\";\nimport type { MinimalClient } from \"./MinimalClientContext.js\";\nimport type { QuerySignatureFromDef } from \"./queries/types.js\";\nimport type { SatisfiesSemver } from \"./SatisfiesSemver.js\";\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\ntype OldSharedClient = import(\"@osdk/shared.client\").SharedClient;\n\nexport type CheckVersionBound<Q> = Q extends VersionBound<infer V> ? (\n SatisfiesSemver<V, MaxOsdkVersion> extends true ? Q\n : Q & {\n [ErrorMessage]:\n `Your SDK requires a semver compatible version with ${V}. You have ${MaxOsdkVersion}. Update your package.json`;\n }\n )\n : Q;\n\nexport interface Client extends SharedClient, OldSharedClient {\n /**\n * Returns the operation surface for the given ontology definition. The shape of the\n * returned value is dispatched on what kind of definition is passed:\n * - object type → the object set type for that ontology object (typically a generated extension of {@link ObjectSet})\n * - interface → a {@link MinimalObjectSet} for the interface\n * - action → a callable with `applyAction` / `batchApplyAction`\n * - query → a callable with `executeFunction`\n * - experiment → the unstable feature surface for that experiment\n *\n * @param o - The object type definition to wrap.\n * @example\n * ```ts\n * const employees = await client(Employee).fetchPage({ $pageSize: 30 });\n * const employee = await client(Employee).fetchOne(12345);\n * ```\n * @returns an object set scoped to all objects of this type.\n */\n <Q extends ObjectTypeDefinition>(\n o: Q,\n ): unknown extends CompileTimeMetadata<Q>[\"objectSet\"] ? ObjectSet<Q>\n : CompileTimeMetadata<Q>[\"objectSet\"];\n\n /**\n * @param o - The interface definition to wrap.\n * @example\n * ```ts\n * const page = await client(MyInterface).fetchPage({ $pageSize: 30 });\n * ```\n * @returns a minimal object set over all objects implementing the interface.\n */\n <Q extends (InterfaceDefinition)>(\n o: Q,\n ): unknown extends CompileTimeMetadata<Q>[\"objectSet\"] ? MinimalObjectSet<Q>\n : CompileTimeMetadata<Q>[\"objectSet\"];\n\n /**\n * @param o - The action definition to invoke.\n * @example\n * ```ts\n * const result = await client(createEmployee).applyAction(\n * { name: \"Jane\", department: \"Engineering\" },\n * { $returnEdits: true },\n * );\n * ```\n * @returns a callable for applying (or batch-applying) the action.\n */\n <Q extends ActionDefinition<any>>(\n o: Q,\n ): ActionSignatureFromDef<Q>;\n\n /**\n * @param o - The query definition to invoke.\n * @example\n * ```ts\n * const result = await client(getEmployeeCount).executeFunction({ department: \"Engineering\" });\n * ```\n * @returns a callable for executing the query function.\n */\n <Q extends QueryDefinition<any>>(\n o: Q,\n ): QuerySignatureFromDef<Q>;\n\n /**\n * @param experiment - The experiment marker that gates an unstable feature.\n * @example\n * ```ts\n * const ref = await client(__EXPERIMENTAL__NOT_SUPPORTED_YET__createMediaReference)\n * .createMediaReference({ data: blob, fileName: \"media.mp4\", objectType: Employee, propertyType: \"photo\" });\n * ```\n * @returns the experiment-specific function surface.\n */\n <\n Q extends\n | Experiment<\"2.0.8\">\n | Experiment<\"2.1.0\">\n | Experiment<\"2.2.0\">\n | Experiment<\"2.8.0\">\n | Experiment<\"2.19.0\">,\n >(\n experiment: Q,\n ): ExperimentFns<Q>;\n\n /**\n * Fetches runtime metadata for the given ontology definition. The returned shape\n * is dispatched on the kind of definition passed: {@link ObjectMetadata},\n * {@link InterfaceMetadata}, {@link ActionMetadata}, or {@link QueryMetadata}.\n * @param o - The object type, interface, action, or query definition to look up.\n * @example\n * ```ts\n * const meta = await client.fetchMetadata(Employee);\n * console.log(meta.displayName, meta.description);\n * ```\n * @returns a promise resolving to the metadata for the given definition.\n */\n fetchMetadata<\n Q extends (\n | ObjectTypeDefinition\n | InterfaceDefinition\n | ActionDefinition<any>\n | QueryDefinition<any>\n ),\n >(o: Q): Promise<\n Q extends ObjectTypeDefinition ? ObjectMetadata\n : Q extends InterfaceDefinition ? InterfaceMetadata\n : Q extends ActionDefinition<any> ? ActionMetadata\n : Q extends QueryDefinition<any> ? QueryMetadata\n : never\n >;\n\n /** @internal */\n [additionalContext]: MinimalClient;\n}\n\n// DO NOT EXPORT FROM PACKAGE\n/** @internal */\nexport const additionalContext: unique symbol = Symbol(\"additionalContext\");\n\n// BEGIN: THIS IS GENERATED CODE. DO NOT EDIT.\nconst MaxOsdkVersion = \"2.29.
|
|
1
|
+
{"version":3,"file":"Client.js","names":["additionalContext","Symbol","MaxOsdkVersion","ErrorMessage"],"sources":["Client.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ActionDefinition,\n ActionMetadata,\n CompileTimeMetadata,\n InterfaceDefinition,\n InterfaceMetadata,\n ObjectMetadata,\n ObjectSet,\n ObjectTypeDefinition,\n QueryDefinition,\n QueryMetadata,\n VersionBound,\n} from \"@osdk/api\";\nimport type {\n Experiment,\n ExperimentFns,\n MinimalObjectSet,\n} from \"@osdk/api/unstable\";\nimport type { SharedClient } from \"@osdk/shared.client2\";\nimport type { ActionSignatureFromDef } from \"./actions/applyAction.js\";\nimport type { MinimalClient } from \"./MinimalClientContext.js\";\nimport type { QuerySignatureFromDef } from \"./queries/types.js\";\nimport type { SatisfiesSemver } from \"./SatisfiesSemver.js\";\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\ntype OldSharedClient = import(\"@osdk/shared.client\").SharedClient;\n\nexport type CheckVersionBound<Q> = Q extends VersionBound<infer V> ? (\n SatisfiesSemver<V, MaxOsdkVersion> extends true ? Q\n : Q & {\n [ErrorMessage]:\n `Your SDK requires a semver compatible version with ${V}. You have ${MaxOsdkVersion}. Update your package.json`;\n }\n )\n : Q;\n\nexport interface Client extends SharedClient, OldSharedClient {\n /**\n * Returns the operation surface for the given ontology definition. The shape of the\n * returned value is dispatched on what kind of definition is passed:\n * - object type → the object set type for that ontology object (typically a generated extension of {@link ObjectSet})\n * - interface → a {@link MinimalObjectSet} for the interface\n * - action → a callable with `applyAction` / `batchApplyAction`\n * - query → a callable with `executeFunction`\n * - experiment → the unstable feature surface for that experiment\n *\n * @param o - The object type definition to wrap.\n * @example\n * ```ts\n * const employees = await client(Employee).fetchPage({ $pageSize: 30 });\n * const employee = await client(Employee).fetchOne(12345);\n * ```\n * @returns an object set scoped to all objects of this type.\n */\n <Q extends ObjectTypeDefinition>(\n o: Q,\n ): unknown extends CompileTimeMetadata<Q>[\"objectSet\"] ? ObjectSet<Q>\n : CompileTimeMetadata<Q>[\"objectSet\"];\n\n /**\n * @param o - The interface definition to wrap.\n * @example\n * ```ts\n * const page = await client(MyInterface).fetchPage({ $pageSize: 30 });\n * ```\n * @returns a minimal object set over all objects implementing the interface.\n */\n <Q extends (InterfaceDefinition)>(\n o: Q,\n ): unknown extends CompileTimeMetadata<Q>[\"objectSet\"] ? MinimalObjectSet<Q>\n : CompileTimeMetadata<Q>[\"objectSet\"];\n\n /**\n * @param o - The action definition to invoke.\n * @example\n * ```ts\n * const result = await client(createEmployee).applyAction(\n * { name: \"Jane\", department: \"Engineering\" },\n * { $returnEdits: true },\n * );\n * ```\n * @returns a callable for applying (or batch-applying) the action.\n */\n <Q extends ActionDefinition<any>>(\n o: Q,\n ): ActionSignatureFromDef<Q>;\n\n /**\n * @param o - The query definition to invoke.\n * @example\n * ```ts\n * const result = await client(getEmployeeCount).executeFunction({ department: \"Engineering\" });\n * ```\n * @returns a callable for executing the query function.\n */\n <Q extends QueryDefinition<any>>(\n o: Q,\n ): QuerySignatureFromDef<Q>;\n\n /**\n * @param experiment - The experiment marker that gates an unstable feature.\n * @example\n * ```ts\n * const ref = await client(__EXPERIMENTAL__NOT_SUPPORTED_YET__createMediaReference)\n * .createMediaReference({ data: blob, fileName: \"media.mp4\", objectType: Employee, propertyType: \"photo\" });\n * ```\n * @returns the experiment-specific function surface.\n */\n <\n Q extends\n | Experiment<\"2.0.8\">\n | Experiment<\"2.1.0\">\n | Experiment<\"2.2.0\">\n | Experiment<\"2.8.0\">\n | Experiment<\"2.19.0\">,\n >(\n experiment: Q,\n ): ExperimentFns<Q>;\n\n /**\n * Fetches runtime metadata for the given ontology definition. The returned shape\n * is dispatched on the kind of definition passed: {@link ObjectMetadata},\n * {@link InterfaceMetadata}, {@link ActionMetadata}, or {@link QueryMetadata}.\n * @param o - The object type, interface, action, or query definition to look up.\n * @example\n * ```ts\n * const meta = await client.fetchMetadata(Employee);\n * console.log(meta.displayName, meta.description);\n * ```\n * @returns a promise resolving to the metadata for the given definition.\n */\n fetchMetadata<\n Q extends (\n | ObjectTypeDefinition\n | InterfaceDefinition\n | ActionDefinition<any>\n | QueryDefinition<any>\n ),\n >(o: Q): Promise<\n Q extends ObjectTypeDefinition ? ObjectMetadata\n : Q extends InterfaceDefinition ? InterfaceMetadata\n : Q extends ActionDefinition<any> ? ActionMetadata\n : Q extends QueryDefinition<any> ? QueryMetadata\n : never\n >;\n\n /** @internal */\n [additionalContext]: MinimalClient;\n}\n\n// DO NOT EXPORT FROM PACKAGE\n/** @internal */\nexport const additionalContext: unique symbol = Symbol(\"additionalContext\");\n\n// BEGIN: THIS IS GENERATED CODE. DO NOT EDIT.\nconst MaxOsdkVersion = \"2.29.1\";\n// END: THIS IS GENERATED CODE. DO NOT EDIT.\nexport type MaxOsdkVersion = typeof MaxOsdkVersion;\nconst ErrorMessage: unique symbol = Symbol(\"ErrorMessage\");\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA0BA;;AA8HA;AACA;AACA,OAAO,MAAMA,iBAAgC,GAAGC,MAAM,CAAC,mBAAmB,CAAC;;AAE3E;AACA,MAAMC,cAAc,GAAG,QAAQ;AAC/B;;AAEA,MAAMC,YAA2B,GAAGF,MAAM,CAAC,cAAc,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservableClient.js","names":["createFetchHeaderMutator","additionalContext","createClientFromContext","OBSERVABLE_USER_AGENT","ObservableClientImpl","Store","ObservableClient","createObservableClient","client","extraUserAgents","tweakedClient","fetch","headers","set","get","filter","x","length","join"],"sources":["ObservableClient.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 AggregationsResults,\n CompileTimeMetadata,\n DerivedProperty,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n WirePropertyTypes,\n} from \"@osdk/api\";\nimport { createFetchHeaderMutator } from \"@osdk/shared.net.fetch\";\nimport type { ActionSignatureFromDef } from \"../actions/applyAction.js\";\nimport { additionalContext, type Client } from \"../Client.js\";\nimport { createClientFromContext } from \"../createClient.js\";\nimport type { QueryReturnType } from \"../queries/types.js\";\nimport { OBSERVABLE_USER_AGENT } from \"../util/UserAgent.js\";\nimport type { Canonical } from \"./internal/Canonical.js\";\nimport type { ObserveObjectSetOptions } from \"./internal/objectset/ObjectSetQueryOptions.js\";\nimport { ObservableClientImpl } from \"./internal/ObservableClientImpl.js\";\nimport { Store } from \"./internal/Store.js\";\nimport type {\n CommonObserveOptions,\n InvalidationMode,\n ObserveOptions,\n Observer,\n Status,\n} from \"./ObservableClient/common.js\";\nimport type {\n MediaMetadataObserveOptions,\n MediaMetadataPayload,\n} from \"./ObservableClient/MediaObservableTypes.js\";\nimport type { MediaPropertyLocation } from \"./ObservableClient/MediaTypes.js\";\nimport type { ObserveLinks } from \"./ObservableClient/ObserveLink.js\";\nimport type { OptimisticBuilder } from \"./OptimisticBuilder.js\";\n\nexport namespace ObservableClient {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nexport interface CacheSnapshot {\n entries: CacheEntry[];\n stats: {\n totalEntries: number;\n totalSize: number;\n totalHits?: number;\n };\n}\n\ninterface CacheEntryMetadata {\n timestamp: number;\n status: \"init\" | \"loading\" | \"loaded\" | \"error\";\n hitCount?: number;\n size: number;\n isOptimistic?: boolean;\n}\n\ninterface CacheEntryBase {\n key: string;\n objectType: string;\n metadata: CacheEntryMetadata;\n data?: unknown;\n}\n\nexport type CacheEntry =\n | CacheEntryBase & { type: \"object\" }\n | CacheEntryBase & {\n type: \"list\";\n where?: unknown;\n orderBy?: unknown;\n pageSize?: number;\n }\n | CacheEntryBase & { type: \"link\"; linkName?: string }\n | CacheEntryBase & { type: \"objectSet\" };\n\nexport interface ObserveObjectOptions<\n T extends ObjectOrInterfaceDefinition,\n> extends ObserveOptions {\n apiName: T[\"apiName\"] | T;\n pk: PrimaryKeyType<T>;\n select?: readonly PropertyKeys<T>[];\n $loadPropertySecurityMetadata?: boolean;\n\n /**\n * When true, includes all properties of the underlying concrete object type\n * for interface queries. Has no effect for non-interface queries.\n */\n $includeAllBaseObjectProperties?: boolean;\n}\n\nexport type OrderBy<Q extends ObjectOrInterfaceDefinition> = {\n [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" | undefined;\n};\n\nexport interface ObserveListOptions<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n> extends CommonObserveOptions, ObserveOptions {\n type: Pick<Q, \"apiName\" | \"type\">;\n where?: WhereClause<Q, RDPs>;\n pageSize?: number;\n orderBy?: OrderBy<Q>;\n invalidationMode?: InvalidationMode;\n expectedLength?: number;\n\n /**\n * Enable streaming updates via websocket subscription.\n *\n * Cannot be combined with `pivotTo`. The server does not support\n * websocket subscriptions for link-traversal queries.\n *\n * Cannot be combined with `withProperties`. The server does not support\n * websocket subscriptions for object sets that include derived properties;\n * in that case `streamUpdates` is ignored and a warning is logged in\n * development.\n */\n streamUpdates?: boolean;\n withProperties?: DerivedProperty.Clause<Q>;\n\n /**\n * Fetch objects by their Resource Identifiers (RIDs).\n * When provided, starts with a static objectset containing these RIDs.\n * Can be combined with `where` to filter the RID set, and with `orderBy` to sort results.\n *\n * @example\n * ```ts\n * // Fetch specific objects by RID\n * observeList({ type: Employee, rids: ['ri.foo.123', 'ri.foo.456'] }, observer);\n * ```\n *\n * @example\n * ```ts\n * // Fetch specific objects by RID, filtered by status\n * observeList({\n * type: Employee,\n * rids: ['ri.foo.123', 'ri.foo.456', 'ri.foo.789'],\n * where: { status: 'active' },\n * }, observer);\n * ```\n */\n rids?: readonly string[];\n\n /**\n * Restrict which properties are returned for each object.\n * When provided, only the specified properties will be fetched,\n * reducing payload sizes for list views.\n */\n select?: readonly PropertyKeys<Q>[];\n\n /**\n * When true, loads per-property security metadata (marking requirements)\n * alongside each object. The returned objects will have `$propertySecurities`\n * populated with conjunctive/disjunctive marking requirements per property.\n */\n $loadPropertySecurityMetadata?: boolean;\n\n /**\n * When true, includes all properties of the underlying concrete object type\n * for interface queries. Has no effect for non-interface queries.\n */\n $includeAllBaseObjectProperties?: boolean;\n\n /**\n * Automatically fetch additional pages on initial load.\n *\n * - `true`: Fetch all available pages automatically\n * - `number`: Fetch pages until at least this many items are loaded\n * - `undefined` (default): Only fetch the first page, user must call fetchMore()\n *\n * @example\n * ```ts\n * // Fetch all todos at once\n * observeList({ type: Todo, autoFetchMore: true }, observer);\n * ```\n *\n * @example\n * ```ts\n * // Fetch at least 100 todos\n * observeList({ type: Todo, autoFetchMore: 100, pageSize: 25 }, observer);\n * ```\n */\n autoFetchMore?: boolean | number;\n intersectWith?: Array<{\n where: WhereClause<Q, RDPs>;\n }>;\n\n /**\n * Traverse to linked objects. Cannot be combined with `streamUpdates`.\n * The server does not support websocket subscriptions for link-traversal\n * queries.\n */\n pivotTo?: string;\n\n /**\n * When loading objects via an interface type, return the full concrete\n * object type instances instead of interface views.\n *\n * By default, interface queries return objects narrowed to interface\n * properties only. With `resolveToObjectType: true`, returned objects\n * include all properties from the implementing object type (e.g. `$title`,\n * custom properties not on the interface).\n *\n * Only has an effect when `type` is an interface.\n *\n * @default false\n */\n resolveToObjectType?: boolean;\n}\n\nexport interface ObserveObjectCallbackArgs<\n T extends ObjectOrInterfaceDefinition,\n> {\n object: Osdk.Instance<T, \"$allBaseProperties\"> | undefined;\n isOptimistic: boolean;\n status: Status;\n lastUpdated: number;\n}\n\nexport interface ObserveObjectsCallbackArgs<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<\n string,\n WirePropertyTypes | undefined | Array<WirePropertyTypes>\n > = {},\n> {\n resolvedList:\n | Array<Osdk.Instance<T, \"$allBaseProperties\", PropertyKeys<T>, RDPs>>\n | undefined;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<void>;\n hasMore: boolean;\n status: Status;\n totalCount?: string;\n objectSet: ObjectSet<T, RDPs>;\n}\n\nexport interface ObserveObjectSetArgs<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<\n string,\n WirePropertyTypes | undefined | Array<WirePropertyTypes>\n > = {},\n> {\n resolvedList:\n | Array<\n Osdk.Instance<T, \"$allBaseProperties\", PropertyKeys<T>, RDPs>\n >\n | undefined;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<void>;\n hasMore: boolean;\n status: Status;\n objectSet: ObjectSet<T, RDPs>;\n totalCount?: string;\n}\n\ninterface ObserveAggregationBaseOptions<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n> extends CommonObserveOptions, ObserveOptions {\n type: T;\n where?: WhereClause<T, RDPs>;\n withProperties?: DerivedProperty.Clause<T>;\n intersectWith?: Array<{\n where: WhereClause<T, RDPs>;\n }>;\n aggregate: A;\n}\n\n/**\n * Options for observeAggregation without an ObjectSet (synchronous).\n */\nexport interface ObserveAggregationOptions<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n> extends ObserveAggregationBaseOptions<T, A, RDPs> {\n objectSet?: undefined;\n}\n\n/**\n * Options for observeAggregation with an ObjectSet (asynchronous).\n *\n * When objectSet is provided, the aggregation is performed on that ObjectSet\n * instead of the base type, enabling aggregation on pivoted or filtered sets.\n */\nexport interface ObserveAggregationOptionsWithObjectSet<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n> extends ObserveAggregationBaseOptions<T, A, RDPs> {\n objectSet: ObjectSet<T>;\n}\n\nexport interface ObserveAggregationArgs<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n> {\n result: AggregationsResults<T, A> | undefined;\n status: Status;\n lastUpdated: number;\n error?: Error;\n}\n\nexport interface ObserveFunctionOptions extends CommonObserveOptions {\n /**\n * Object types this function depends on.\n * When actions modify these types, the function will refetch.\n */\n dependsOn?: Array<ObjectTypeDefinition | string>;\n\n /**\n * Specific object instances or ObjectSets this function depends on.\n * When these objects change, the function will refetch.\n *\n * For ObjectSets, the object type is extracted asynchronously and added\n * to the dependency list. Changes to any object of that type will trigger\n * a refetch.\n */\n dependsOnObjects?: Array<\n Osdk.Instance<ObjectTypeDefinition> | ObjectSet<ObjectTypeDefinition>\n >;\n}\n\nexport interface ObserveFunctionCallbackArgs<\n Q extends QueryDefinition<unknown>,\n> {\n result: QueryReturnType<CompileTimeMetadata<Q>[\"output\"]> | undefined;\n status: Status;\n lastUpdated: number;\n error?: Error;\n}\n\n/**\n * User facing callback args for `observeLink`\n */\nexport interface ObserveLinkCallbackArgs<\n T extends ObjectOrInterfaceDefinition,\n> {\n resolvedList: Osdk.Instance<T, \"$allBaseProperties\">[] | undefined;\n linkedObjectsBySourcePrimaryKey: ReadonlyMap<\n string | number,\n ReadonlyArray<Osdk.Instance<T, \"$allBaseProperties\">>\n >;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<void>;\n hasMore: boolean;\n status: Status;\n totalCount?: string;\n}\n\n/**\n * Public interface for reactive data management with automatic updates.\n *\n * The ObservableClient provides a reactive data layer with:\n * - Real-time object and collection observation\n * - Automatic cache updates when data changes\n * - Optimistic updates for immediate UI feedback\n * - Pagination support for large collections\n * - Link traversal for relationship navigation\n */\nexport interface ObservableClient extends ObserveLinks {\n /**\n * Observe a single object or interface instance with automatic updates when it changes.\n *\n * @param apiName - The object type or interface definition, or its API name\n * @param pk - The object's primary key\n * @param options - Observation options including deduplication interval\n * @param subFn - Observer that receives object state updates\n * @returns Subscription that can be unsubscribed to stop updates\n *\n * The observer will receive:\n * - Initial loading state if data not cached\n * - Loaded state with the object data\n * - Updates when the object changes\n * - Error state if fetch fails\n */\n observeObject<T extends ObjectOrInterfaceDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options:\n & ObserveOptions\n & Omit<ObserveObjectOptions<T>, \"apiName\" | \"pk\">,\n subFn: Observer<ObserveObjectCallbackArgs<T>>,\n ): Unsubscribable;\n\n /**\n * Observe a filtered and sorted collection of objects.\n *\n * @param options - Filter, sort, and pagination options\n * @param subFn - Observer that receives collection state updates\n * @returns Subscription that can be unsubscribed to stop updates\n *\n * Supports:\n * - Filtering with where clauses\n * - Sorting with orderBy\n * - Pagination via fetchMore() in the payload\n * - Automatic updates when any matching object changes\n */\n 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;\n\n /**\n * Observe an ObjectSet with automatic updates when matching objects change.\n *\n * @param baseObjectSet - The base ObjectSet to observe\n * @param options - Options for transforming and observing the ObjectSet\n * @param subFn - Observer that receives ObjectSet state updates\n * @returns Subscription that can be unsubscribed to stop updates\n *\n * Supports all ObjectSet operations:\n * - Filtering with where clauses\n * - Derived properties with withProperties\n * - Set operations (union, intersect, subtract)\n * - Link traversal with pivotTo\n * - Sorting and pagination\n */\n 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\n /**\n * @deprecated Use the async overload with `objectSet` parameter instead.\n * Pass `objectSet: client(YourType)` to get the base object set.\n */\n 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\n /**\n * Observe an aggregation query on a custom ObjectSet with automatic updates.\n *\n * This overload accepts an ObjectSet parameter, enabling aggregation on pivoted,\n * filtered, or composed ObjectSets. Returns a Promise because invalidation type\n * computation is async (requires lookups for link targets).\n *\n * @param options - Aggregation configuration including objectSet, where, aggregate spec\n * @param subFn - Observer that receives aggregation result updates\n * @returns Promise resolving to subscription that can be unsubscribed\n *\n * @example\n * ```typescript\n * const sub = await observableClient.observeAggregation(\n * {\n * type: Office,\n * objectSet: $(Employee).pivotTo(\"primaryOffice\"),\n * aggregate: { $select: { $count: \"unordered\" } }\n * },\n * observer\n * );\n * ```\n */\n 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\n /**\n * Observe a function execution with automatic updates.\n *\n * @param queryDef - The QueryDefinition to execute\n * @param params - Parameters to pass to the function (undefined if no params)\n * @param options - Observation options including invalidation configuration\n * @param subFn - Observer that receives function result updates\n * @returns Subscription that can be unsubscribed to stop updates\n *\n * Supports:\n * - Automatic caching and deduplication\n * - Dependency-based invalidation (dependsOn object types)\n * - Instance-based invalidation (dependsOnObjects)\n * - Manual refetch via invalidateFunction()\n */\n observeFunction<Q extends QueryDefinition<unknown>>(\n queryDef: Q,\n params: Record<string, unknown> | undefined,\n options: ObserveFunctionOptions,\n subFn: Observer<ObserveFunctionCallbackArgs<Q>>,\n ): Unsubscribable;\n\n /**\n * Execute an action with optional optimistic updates.\n *\n * @param action - Action definition to execute\n * @param args - Arguments for the action\n * @param opts - Options including optimistic updates\n * @returns Promise that resolves when the action completes\n *\n * When providing optimistic updates:\n * - Changes appear immediately in the UI\n * - Server request still happens in background\n * - On success, server data replaces optimistic data\n * - On failure, optimistic changes automatically roll back\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?: ObservableClient.ApplyActionOptions,\n ) => Promise<ActionEditResponse>;\n\n /**\n * Validate action parameters without executing the action.\n *\n * @param action - Action definition to validate\n * @param args - Arguments to validate\n * @returns Promise with validation result\n *\n * Use this to:\n * - Pre-validate forms before submission\n * - Display warnings or errors in the UI\n * - Enable/disable action buttons based on validity\n */\n validateAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n ) => Promise<ActionValidationResponse>;\n\n /**\n * Invalidates the entire cache, forcing all queries to refetch.\n * Use sparingly as this can cause significant network traffic.\n */\n invalidateAll(): Promise<void>;\n\n /**\n * Invalidates specific objects in the cache.\n * @param objects - Single object or array of objects to invalidate\n */\n invalidateObjects(\n objects:\n | Osdk.Instance<ObjectTypeDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectTypeDefinition>>,\n ): Promise<void>;\n\n /**\n * Invalidates all cached data for a specific object type.\n * This includes:\n * - All objects of the specified type\n * - All lists containing objects of this type\n * - All links where the source is of this type\n *\n * @param type - Object type definition or API name string\n * @returns Promise that resolves when invalidation is complete\n */\n invalidateObjectType<T extends ObjectTypeDefinition>(\n type: T | T[\"apiName\"],\n ): Promise<void>;\n\n /**\n * Invalidate function queries.\n * - If params undefined, invalidates ALL queries for this function\n * - If params provided, invalidates only the query with exact params match\n *\n * @param apiName - Function API name string or QueryDefinition\n * @param params - Optional params for exact match\n */\n invalidateFunction(\n apiName: string | QueryDefinition<unknown>,\n params?: Record<string, unknown>,\n ): Promise<void>;\n\n /**\n * Invalidate functions that depend on a specific object instance.\n *\n * @param apiName - Object type API name\n * @param primaryKey - Object primary key\n */\n invalidateFunctionsByObject(\n apiName: string,\n primaryKey: string | number,\n ): Promise<void>;\n\n getCacheSnapshot(): Promise<CacheSnapshot>;\n\n canonicalizeWhereClause: <\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n where: WhereClause<T, RDPs>,\n ) => Canonical<WhereClause<T, RDPs>>;\n\n canonicalizeOptions: <OS, T extends CanonicalizeOptionsInput<OS>>(\n options: T,\n ) => CanonicalizedOptions<T>;\n\n observeMediaMetadata(\n coords: MediaPropertyLocation,\n options: MediaMetadataObserveOptions,\n observer: Observer<MediaMetadataPayload>,\n ): Unsubscribable;\n}\n\nexport interface CanonicalizeOptionsInput<OS = ObjectSet<any, any>> {\n where?: object;\n withProperties?: object;\n orderBy?: Record<string, \"asc\" | \"desc\" | undefined>;\n aggregate?: object;\n intersectWith?: Array<{ where: object }>;\n union?: ReadonlyArray<OS>;\n intersect?: ReadonlyArray<OS>;\n subtract?: ReadonlyArray<OS>;\n $select?: ReadonlyArray<string>;\n}\n\nexport type CanonicalizedOptions<\n T extends CanonicalizeOptionsInput<any>,\n> = {\n [K in keyof T]: T[K];\n};\n\nexport function createObservableClient(\n client: Client,\n extraUserAgents?: () => string[],\n): ObservableClient {\n // First we need a modified client that adds an extra header so we know its\n // an observable client\n const tweakedClient = createClientFromContext({\n ...client[additionalContext],\n\n fetch: createFetchHeaderMutator(\n client[additionalContext].fetch,\n (headers) => {\n headers.set(\n \"Fetch-User-Agent\",\n [\n headers.get(\"Fetch-User-Agent\"),\n OBSERVABLE_USER_AGENT,\n ...(extraUserAgents?.() ?? []),\n ].filter(x => x && x?.length > 0).join(\" \"),\n );\n return headers;\n },\n ),\n });\n\n // Then we use that client instead. Because the `client` does not hold\n // any real state, this whole thing works.\n return new ObservableClientImpl(new Store(tweakedClient));\n}\n\nexport interface Unsubscribable {\n unsubscribe: () => void;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAqBA,SAASA,wBAAwB,QAAQ,wBAAwB;AAEjE,SAASC,iBAAiB,QAAqB,cAAc;AAC7D,SAASC,uBAAuB,QAAQ,oBAAoB;AAE5D,SAASC,qBAAqB,QAAQ,sBAAsB;AAG5D,SAASC,oBAAoB,QAAQ,oCAAoC;AACzE,SAASC,KAAK,QAAQ,qBAAqB;AAAC,WAgB3BC,gBAAgB;AA8OjC;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;;AAgDA;AACA;AACA;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgRA,OAAO,SAASC,sBAAsBA,CACpCC,MAAc,EACdC,eAAgC,EACd;EAClB;EACA;EACA,MAAMC,aAAa,GAAGR,uBAAuB,CAAC;IAC5C,GAAGM,MAAM,CAACP,iBAAiB,CAAC;IAE5BU,KAAK,EAAEX,wBAAwB,CAC7BQ,MAAM,CAACP,iBAAiB,CAAC,CAACU,KAAK,EAC9BC,OAAO,IAAK;MACXA,OAAO,CAACC,GAAG,CACT,kBAAkB,EAClB,CACED,OAAO,CAACE,GAAG,CAAC,kBAAkB,CAAC,EAC/BX,qBAAqB,EACrB,IAAIM,eAAe,GAAG,CAAC,IAAI,EAAE,CAAC,CAC/B,CAACM,MAAM,CAACC,CAAC,IAAIA,CAAC,IAAIA,CAAC,EAAEC,MAAM,GAAG,CAAC,CAAC,CAACC,IAAI,CAAC,GAAG,CAC5C,CAAC;MACD,OAAON,OAAO;IAChB,CACF;EACF,CAAC,CAAC;;EAEF;EACA;EACA,OAAO,IAAIR,oBAAoB,CAAC,IAAIC,KAAK,CAACK,aAAa,CAAC,CAAC;AAC3D","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ObservableClient.js","names":["createFetchHeaderMutator","additionalContext","createClientFromContext","OBSERVABLE_USER_AGENT","ObservableClientImpl","Store","ObservableClient","createObservableClient","client","extraUserAgents","tweakedClient","fetch","headers","set","get","filter","x","length","join"],"sources":["ObservableClient.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 AggregationsResults,\n CompileTimeMetadata,\n DerivedProperty,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n WhereClause,\n WirePropertyTypes,\n} from \"@osdk/api\";\nimport { createFetchHeaderMutator } from \"@osdk/shared.net.fetch\";\nimport type { ActionSignatureFromDef } from \"../actions/applyAction.js\";\nimport { additionalContext, type Client } from \"../Client.js\";\nimport { createClientFromContext } from \"../createClient.js\";\nimport type { QueryReturnType } from \"../queries/types.js\";\nimport { OBSERVABLE_USER_AGENT } from \"../util/UserAgent.js\";\nimport type { Canonical } from \"./internal/Canonical.js\";\nimport type { ObserveObjectSetOptions } from \"./internal/objectset/ObjectSetQueryOptions.js\";\nimport { ObservableClientImpl } from \"./internal/ObservableClientImpl.js\";\nimport { Store } from \"./internal/Store.js\";\nimport type {\n CommonObserveOptions,\n InvalidationMode,\n ObserveOptions,\n Observer,\n Status,\n} from \"./ObservableClient/common.js\";\nimport type {\n MediaMetadataObserveOptions,\n MediaMetadataPayload,\n} from \"./ObservableClient/MediaObservableTypes.js\";\nimport type { MediaPropertyLocation } from \"./ObservableClient/MediaTypes.js\";\nimport type { ObserveLinks } from \"./ObservableClient/ObserveLink.js\";\nimport type { OptimisticBuilder } from \"./OptimisticBuilder.js\";\n\nexport namespace ObservableClient {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nexport interface CacheSnapshot {\n entries: CacheEntry[];\n stats: {\n totalEntries: number;\n totalSize: number;\n totalHits?: number;\n };\n}\n\ninterface CacheEntryMetadata {\n timestamp: number;\n status: \"init\" | \"loading\" | \"loaded\" | \"error\";\n hitCount?: number;\n size: number;\n isOptimistic?: boolean;\n}\n\ninterface CacheEntryBase {\n key: string;\n objectType: string;\n metadata: CacheEntryMetadata;\n data?: unknown;\n}\n\nexport type CacheEntry =\n | CacheEntryBase & { type: \"object\" }\n | CacheEntryBase & {\n type: \"list\";\n where?: unknown;\n orderBy?: unknown;\n pageSize?: number;\n }\n | CacheEntryBase & { type: \"link\"; linkName?: string }\n | CacheEntryBase & { type: \"objectSet\" };\n\nexport interface ObserveObjectOptions<\n T extends ObjectOrInterfaceDefinition,\n> extends ObserveOptions {\n apiName: T[\"apiName\"] | T;\n pk: PrimaryKeyType<T>;\n select?: readonly PropertyKeys<T>[];\n $loadPropertySecurityMetadata?: boolean;\n\n /**\n * When true, includes all properties of the underlying concrete object type\n * for interface queries. Has no effect for non-interface queries.\n */\n $includeAllBaseObjectProperties?: boolean;\n}\n\nexport type OrderBy<Q extends ObjectOrInterfaceDefinition> = {\n [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" | undefined;\n};\n\nexport interface ObserveListOptions<\n Q extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n> extends CommonObserveOptions, ObserveOptions {\n type: Pick<Q, \"apiName\" | \"type\">;\n where?: WhereClause<Q, RDPs>;\n pageSize?: number;\n orderBy?: OrderBy<Q>;\n invalidationMode?: InvalidationMode;\n expectedLength?: number;\n\n /**\n * Enable streaming updates via websocket subscription.\n *\n * Cannot be combined with `pivotTo`. The server does not support\n * websocket subscriptions for link-traversal queries.\n *\n * Cannot be combined with `withProperties`. The server does not support\n * websocket subscriptions for object sets that include derived properties;\n * in that case `streamUpdates` is ignored and a warning is logged in\n * development.\n */\n streamUpdates?: boolean;\n withProperties?: DerivedProperty.Clause<Q>;\n\n /**\n * Fetch objects by their Resource Identifiers (RIDs).\n * When provided, starts with a static objectset containing these RIDs.\n * Can be combined with `where` to filter the RID set, and with `orderBy` to sort results.\n *\n * @example\n * ```ts\n * // Fetch specific objects by RID\n * observeList({ type: Employee, rids: ['ri.foo.123', 'ri.foo.456'] }, observer);\n * ```\n *\n * @example\n * ```ts\n * // Fetch specific objects by RID, filtered by status\n * observeList({\n * type: Employee,\n * rids: ['ri.foo.123', 'ri.foo.456', 'ri.foo.789'],\n * where: { status: 'active' },\n * }, observer);\n * ```\n */\n rids?: readonly string[];\n\n /**\n * Restrict which properties are returned for each object.\n * When provided, only the specified properties will be fetched,\n * reducing payload sizes for list views.\n */\n select?: readonly PropertyKeys<Q>[];\n\n /**\n * When true, loads per-property security metadata (marking requirements)\n * alongside each object. The returned objects will have `$propertySecurities`\n * populated with conjunctive/disjunctive marking requirements per property.\n */\n $loadPropertySecurityMetadata?: boolean;\n\n /**\n * When true, includes all properties of the underlying concrete object type\n * for interface queries. Has no effect for non-interface queries.\n */\n $includeAllBaseObjectProperties?: boolean;\n\n /**\n * Automatically fetch additional pages on initial load.\n *\n * - `true`: Fetch all available pages automatically\n * - `number`: Fetch pages until at least this many items are loaded\n * - `undefined` (default): Only fetch the first page, user must call fetchMore()\n *\n * @example\n * ```ts\n * // Fetch all todos at once\n * observeList({ type: Todo, autoFetchMore: true }, observer);\n * ```\n *\n * @example\n * ```ts\n * // Fetch at least 100 todos\n * observeList({ type: Todo, autoFetchMore: 100, pageSize: 25 }, observer);\n * ```\n */\n autoFetchMore?: boolean | number;\n intersectWith?: Array<{\n where: WhereClause<Q, RDPs>;\n }>;\n\n /**\n * Traverse to linked objects. Cannot be combined with `streamUpdates`.\n * The server does not support websocket subscriptions for link-traversal\n * queries.\n */\n pivotTo?: string;\n\n /**\n * When loading objects via an interface type, return the full concrete\n * object type instances instead of interface views.\n *\n * By default, interface queries return objects narrowed to interface\n * properties only. With `resolveToObjectType: true`, returned objects\n * include all properties from the implementing object type (e.g. `$title`,\n * custom properties not on the interface).\n *\n * Only has an effect when `type` is an interface.\n *\n * @default false\n */\n resolveToObjectType?: boolean;\n}\n\nexport interface ObserveObjectCallbackArgs<\n T extends ObjectOrInterfaceDefinition,\n> {\n object: Osdk.Instance<T, \"$allBaseProperties\"> | undefined;\n isOptimistic: boolean;\n status: Status;\n lastUpdated: number;\n}\n\nexport interface ObserveObjectsCallbackArgs<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<\n string,\n WirePropertyTypes | undefined | Array<WirePropertyTypes>\n > = {},\n> {\n resolvedList:\n | Array<Osdk.Instance<T, \"$allBaseProperties\", PropertyKeys<T>, RDPs>>\n | undefined;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<void>;\n hasMore: boolean;\n status: Status;\n totalCount?: string;\n objectSet: ObjectSet<T, RDPs>;\n}\n\nexport interface ObserveObjectSetArgs<\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<\n string,\n WirePropertyTypes | undefined | Array<WirePropertyTypes>\n > = {},\n> {\n resolvedList:\n | Array<\n Osdk.Instance<T, \"$allBaseProperties\", PropertyKeys<T>, RDPs>\n >\n | undefined;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<void>;\n hasMore: boolean;\n status: Status;\n objectSet: ObjectSet<T, RDPs>;\n totalCount?: string;\n}\n\ninterface ObserveAggregationBaseOptions<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n> extends CommonObserveOptions, ObserveOptions {\n type: T;\n where?: WhereClause<T, RDPs>;\n withProperties?: DerivedProperty.Clause<T>;\n intersectWith?: Array<{\n where: WhereClause<T, RDPs>;\n }>;\n aggregate: A;\n}\n\n/**\n * Options for observeAggregation without an ObjectSet (synchronous).\n */\nexport interface ObserveAggregationOptions<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n> extends ObserveAggregationBaseOptions<T, A, RDPs> {\n objectSet?: undefined;\n}\n\n/**\n * Options for observeAggregation with an ObjectSet (asynchronous).\n *\n * When objectSet is provided, the aggregation is performed on that ObjectSet\n * instead of the base type, enabling aggregation on pivoted or filtered sets.\n */\nexport interface ObserveAggregationOptionsWithObjectSet<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n RDPs extends Record<string, SimplePropertyDef> = {},\n> extends ObserveAggregationBaseOptions<T, A, RDPs> {\n objectSet: ObjectSet<T>;\n}\n\nexport interface ObserveAggregationArgs<\n T extends ObjectOrInterfaceDefinition,\n A extends AggregateOpts<T>,\n> {\n result: AggregationsResults<T, A> | undefined;\n status: Status;\n lastUpdated: number;\n error?: Error;\n}\n\nexport interface ObserveFunctionOptions extends CommonObserveOptions {\n /**\n * Object types this function depends on.\n * When actions modify these types, the function will refetch.\n */\n dependsOn?: Array<ObjectTypeDefinition | string>;\n\n /**\n * Specific object instances or ObjectSets this function depends on.\n * When these objects change, the function will refetch.\n *\n * For ObjectSets, the object type is extracted asynchronously and added\n * to the dependency list. Changes to any object of that type will trigger\n * a refetch.\n */\n dependsOnObjects?: Array<\n Osdk.Instance<ObjectTypeDefinition> | ObjectSet<ObjectTypeDefinition>\n >;\n}\n\nexport interface ObserveFunctionCallbackArgs<\n Q extends QueryDefinition<unknown>,\n> {\n result: QueryReturnType<CompileTimeMetadata<Q>[\"output\"]> | undefined;\n status: Status;\n lastUpdated: number;\n error?: Error;\n}\n\n/**\n * User facing callback args for `observeLink`\n */\nexport interface ObserveLinkCallbackArgs<\n T extends ObjectOrInterfaceDefinition,\n> {\n resolvedList: Osdk.Instance<T, \"$allBaseProperties\">[] | undefined;\n linkedObjectsBySourcePrimaryKey: ReadonlyMap<\n string | number,\n ReadonlyArray<Osdk.Instance<T, \"$allBaseProperties\">>\n >;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<void>;\n hasMore: boolean;\n status: Status;\n totalCount?: string;\n}\n\n/**\n * Public interface for reactive data management with automatic updates.\n *\n * The ObservableClient provides a reactive data layer with:\n * - Real-time object and collection observation\n * - Automatic cache updates when data changes\n * - Optimistic updates for immediate UI feedback\n * - Pagination support for large collections\n * - Link traversal for relationship navigation\n */\nexport interface ObservableClient extends ObserveLinks {\n /**\n * Observe a single object or interface instance with automatic updates when it changes.\n *\n * @param apiName - The object type or interface definition, or its API name\n * @param pk - The object's primary key\n * @param options - Observation options including deduplication interval\n * @param subFn - Observer that receives object state updates\n * @returns Subscription that can be unsubscribed to stop updates\n *\n * The observer will receive:\n * - Initial loading state if data not cached\n * - Loaded state with the object data\n * - Updates when the object changes\n * - Error state if fetch fails\n */\n observeObject<T extends ObjectOrInterfaceDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options:\n & ObserveOptions\n & Omit<ObserveObjectOptions<T>, \"apiName\" | \"pk\">,\n subFn: Observer<ObserveObjectCallbackArgs<T>>,\n ): Unsubscribable;\n\n /**\n * Observe a filtered and sorted collection of objects.\n *\n * @param options - Filter, sort, and pagination options\n * @param subFn - Observer that receives collection state updates\n * @returns Subscription that can be unsubscribed to stop updates\n *\n * Supports:\n * - Filtering with where clauses\n * - Sorting with orderBy\n * - Pagination via fetchMore() in the payload\n * - Automatic updates when any matching object changes\n */\n 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;\n\n /**\n * Observe an ObjectSet with automatic updates when matching objects change.\n *\n * @param baseObjectSet - The base ObjectSet to observe\n * @param options - Options for transforming and observing the ObjectSet\n * @param subFn - Observer that receives ObjectSet state updates\n * @returns Subscription that can be unsubscribed to stop updates\n *\n * Supports all ObjectSet operations:\n * - Filtering with where clauses\n * - Derived properties with withProperties\n * - Set operations (union, intersect, subtract)\n * - Link traversal with pivotTo\n * - Sorting and pagination\n */\n 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\n /**\n * @deprecated Use the async overload with `objectSet` parameter instead.\n * Pass `objectSet: client(YourType)` to get the base object set.\n */\n 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\n /**\n * Observe an aggregation query on a custom ObjectSet with automatic updates.\n *\n * This overload accepts an ObjectSet parameter, enabling aggregation on pivoted,\n * filtered, or composed ObjectSets. Returns a Promise because invalidation type\n * computation is async (requires lookups for link targets).\n *\n * @param options - Aggregation configuration including objectSet, where, aggregate spec\n * @param subFn - Observer that receives aggregation result updates\n * @returns Promise resolving to subscription that can be unsubscribed\n *\n * @example\n * ```typescript\n * const sub = await observableClient.observeAggregation(\n * {\n * type: Office,\n * objectSet: $(Employee).pivotTo(\"primaryOffice\"),\n * aggregate: { $select: { $count: \"unordered\" } }\n * },\n * observer\n * );\n * ```\n */\n 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\n /**\n * Observe a function execution with automatic updates.\n *\n * @param queryDef - The QueryDefinition to execute\n * @param params - Parameters to pass to the function (undefined if no params)\n * @param options - Observation options including invalidation configuration\n * @param subFn - Observer that receives function result updates\n * @returns Subscription that can be unsubscribed to stop updates\n *\n * Supports:\n * - Automatic caching and deduplication\n * - Dependency-based invalidation (dependsOn object types)\n * - Instance-based invalidation (dependsOnObjects)\n * - Manual refetch via invalidateFunction()\n */\n observeFunction<Q extends QueryDefinition<unknown>>(\n queryDef: Q,\n params: Record<string, unknown> | undefined,\n options: ObserveFunctionOptions,\n subFn: Observer<ObserveFunctionCallbackArgs<Q>>,\n ): Unsubscribable;\n\n /**\n * Execute an action with optional optimistic updates.\n *\n * @param action - Action definition to execute\n * @param args - Arguments for the action\n * @param opts - Options including optimistic updates\n * @returns Promise that resolves when the action completes\n *\n * When providing optimistic updates:\n * - Changes appear immediately in the UI\n * - Server request still happens in background\n * - On success, server data replaces optimistic data\n * - On failure, optimistic changes automatically roll back\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?: ObservableClient.ApplyActionOptions,\n ) => Promise<ActionEditResponse>;\n\n /**\n * Validate action parameters without executing the action.\n *\n * @param action - Action definition to validate\n * @param args - Arguments to validate\n * @returns Promise with validation result\n *\n * Use this to:\n * - Pre-validate forms before submission\n * - Display warnings or errors in the UI\n * - Enable/disable action buttons based on validity\n */\n validateAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n ) => Promise<ActionValidationResponse>;\n\n /**\n * Invalidates the entire cache, forcing all queries to refetch.\n * Use sparingly as this can cause significant network traffic.\n */\n invalidateAll(): Promise<void>;\n\n /**\n * Invalidates specific objects in the cache.\n *\n * Interface instances invalidate their backing concrete object.\n * @param objects - Single object or array of objects to invalidate\n */\n invalidateObjects(\n objects:\n | Osdk.Instance<ObjectOrInterfaceDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectOrInterfaceDefinition>>,\n ): Promise<void>;\n\n /**\n * Invalidates all cached data for a specific object type.\n * This includes:\n * - All objects of the specified type\n * - All lists containing objects of this type\n * - All links where the source is of this type\n *\n * @param type - Object type definition or API name string\n * @returns Promise that resolves when invalidation is complete\n */\n invalidateObjectType<T extends ObjectTypeDefinition>(\n type: T | T[\"apiName\"],\n ): Promise<void>;\n\n /**\n * Invalidate function queries.\n * - If params undefined, invalidates ALL queries for this function\n * - If params provided, invalidates only the query with exact params match\n *\n * @param apiName - Function API name string or QueryDefinition\n * @param params - Optional params for exact match\n */\n invalidateFunction(\n apiName: string | QueryDefinition<unknown>,\n params?: Record<string, unknown>,\n ): Promise<void>;\n\n /**\n * Invalidate functions that depend on a specific object instance.\n *\n * @param apiName - Object type API name\n * @param primaryKey - Object primary key\n */\n invalidateFunctionsByObject(\n apiName: string,\n primaryKey: string | number,\n ): Promise<void>;\n\n getCacheSnapshot(): Promise<CacheSnapshot>;\n\n canonicalizeWhereClause: <\n T extends ObjectOrInterfaceDefinition,\n RDPs extends Record<string, SimplePropertyDef> = {},\n >(\n where: WhereClause<T, RDPs>,\n ) => Canonical<WhereClause<T, RDPs>>;\n\n canonicalizeOptions: <OS, T extends CanonicalizeOptionsInput<OS>>(\n options: T,\n ) => CanonicalizedOptions<T>;\n\n observeMediaMetadata(\n coords: MediaPropertyLocation,\n options: MediaMetadataObserveOptions,\n observer: Observer<MediaMetadataPayload>,\n ): Unsubscribable;\n}\n\nexport interface CanonicalizeOptionsInput<OS = ObjectSet<any, any>> {\n where?: object;\n withProperties?: object;\n orderBy?: Record<string, \"asc\" | \"desc\" | undefined>;\n aggregate?: object;\n intersectWith?: Array<{ where: object }>;\n union?: ReadonlyArray<OS>;\n intersect?: ReadonlyArray<OS>;\n subtract?: ReadonlyArray<OS>;\n $select?: ReadonlyArray<string>;\n}\n\nexport type CanonicalizedOptions<\n T extends CanonicalizeOptionsInput<any>,\n> = {\n [K in keyof T]: T[K];\n};\n\nexport function createObservableClient(\n client: Client,\n extraUserAgents?: () => string[],\n): ObservableClient {\n // First we need a modified client that adds an extra header so we know its\n // an observable client\n const tweakedClient = createClientFromContext({\n ...client[additionalContext],\n\n fetch: createFetchHeaderMutator(\n client[additionalContext].fetch,\n (headers) => {\n headers.set(\n \"Fetch-User-Agent\",\n [\n headers.get(\"Fetch-User-Agent\"),\n OBSERVABLE_USER_AGENT,\n ...(extraUserAgents?.() ?? []),\n ].filter(x => x && x?.length > 0).join(\" \"),\n );\n return headers;\n },\n ),\n });\n\n // Then we use that client instead. Because the `client` does not hold\n // any real state, this whole thing works.\n return new ObservableClientImpl(new Store(tweakedClient));\n}\n\nexport interface Unsubscribable {\n unsubscribe: () => void;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAqBA,SAASA,wBAAwB,QAAQ,wBAAwB;AAEjE,SAASC,iBAAiB,QAAqB,cAAc;AAC7D,SAASC,uBAAuB,QAAQ,oBAAoB;AAE5D,SAASC,qBAAqB,QAAQ,sBAAsB;AAG5D,SAASC,oBAAoB,QAAQ,oCAAoC;AACzE,SAASC,KAAK,QAAQ,qBAAqB;AAAC,WAgB3BC,gBAAgB;AA8OjC;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;;AAgDA;AACA;AACA;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkRA,OAAO,SAASC,sBAAsBA,CACpCC,MAAc,EACdC,eAAgC,EACd;EAClB;EACA;EACA,MAAMC,aAAa,GAAGR,uBAAuB,CAAC;IAC5C,GAAGM,MAAM,CAACP,iBAAiB,CAAC;IAE5BU,KAAK,EAAEX,wBAAwB,CAC7BQ,MAAM,CAACP,iBAAiB,CAAC,CAACU,KAAK,EAC9BC,OAAO,IAAK;MACXA,OAAO,CAACC,GAAG,CACT,kBAAkB,EAClB,CACED,OAAO,CAACE,GAAG,CAAC,kBAAkB,CAAC,EAC/BX,qBAAqB,EACrB,IAAIM,eAAe,GAAG,CAAC,IAAI,EAAE,CAAC,CAC/B,CAACM,MAAM,CAACC,CAAC,IAAIA,CAAC,IAAIA,CAAC,EAAEC,MAAM,GAAG,CAAC,CAAC,CAACC,IAAI,CAAC,GAAG,CAC5C,CAAC;MACD,OAAON,OAAO;IAChB,CACF;EACF,CAAC,CAAC;;EAEF;EACA;EACA,OAAO,IAAIR,oBAAoB,CAAC,IAAIC,KAAK,CAACK,aAAa,CAAC,CAAC;AAC3D","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
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","rdpCanonicalizer","orderBy","orderByCanonicalizer","aggregate","genericCanonicalizer","intersectWith","$select","selectCanonicalizer","union","canonObjectSetArray","objectSetArrayCanonicalizer","canonicalizeUnion","intersect","canonicalizeIntersect","subtract","canonicalizeSubtract","#canonObjectSetArray","arr","cache","wireStrings","os","JSON","stringify","canonKey","cached","get","set","observeMediaMetadata","coords","media","getCacheSnapshot","next","resolvedList","linkedObjectsBySourcePrimaryKey","Map","isOptimistic","lastUpdated","fetchMore","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 CacheSnapshot,\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 {\n MediaMetadataObserveOptions,\n MediaMetadataPayload,\n} from \"../ObservableClient/MediaObservableTypes.js\";\nimport type { MediaPropertyLocation } from \"../ObservableClient/MediaTypes.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 { Rdp } from \"./RdpCanonicalizer.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.rdpCanonicalizer.canonicalize(\n result.withProperties as Rdp | undefined,\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 public observeMediaMetadata(\n coords: MediaPropertyLocation,\n options: MediaMetadataObserveOptions,\n observer: Observer<MediaMetadataPayload>,\n ): Unsubscribable {\n return this.__experimentalStore.media.observeMediaMetadata(\n coords,\n options,\n observer,\n );\n }\n\n public async getCacheSnapshot(): Promise<CacheSnapshot> {\n return this.__experimentalStore.getCacheSnapshot();\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: async () => {},\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 : async () => {},\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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkBA,SAASA,YAAY,QAAQ,MAAM;AAEnC,SAASC,iBAAiB,QAAQ,iBAAiB;AACnD,SACEC,gBAAgB,EAChBC,WAAW,QACN,oCAAoC;AAC3C,SAASC,4BAA4B,QAAQ,4CAA4C;AAmCzF,SAASC,qBAAqB,QAAQ,4BAA4B;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,CAA6B;EAG5D,CAACC,UAAU,GAAG,IAAIC,OAAO,CAA0C,CAAC;EACpE,CAACC,cAAc,GAAG,IAAID,OAAO,CAA0C,CAAC;EACxE,CAACE,aAAa,GAAG,IAAIF,OAAO,CAA0C,CAAC;EAEvEG,WAAWA,CAACC,KAAY,EAAE;IACxB,IAAI,CAACC,mBAAmB,GAAGD,KAAK;IAEhC,IAAI,CAACE,WAAW,GAAGF,KAAK,CAACE,WAAW,CAACC,IAAI,CAACH,KAAK,CAAC;IAChD,IAAI,CAACI,cAAc,GAAGJ,KAAK,CAACI,cAAc,CAACD,IAAI,CAACH,KAAK,CAAC;EACxD;EAEOK,aAAa,GAKEA,CAACC,OAAO,EAAEC,EAAE,EAAEC,OAAO,EAAEC,KAAK,KAAK;IACrD,OAAO,IAAI,CAACR,mBAAmB,CAACS,OAAO,CAACC,OAAO,CAC7C;MACE,GAAGH,OAAO;MACVF,OAAO;MACPC;IACF,CAAC;IACD;IACAE,KACF,CAAC;EACH,CAAC;EAEMG,WAAW,GAMIA,CAACJ,OAAO,EAAEC,KAAK,KAAK;IACxC,OAAO,IAAI,CAACR,mBAAmB,CAACY,KAAK,CAACF,OAAO,CAC3CH,OAAO;IACP;IACAC,KACF,CAAC;EACH,CAAC;EAkBMK,kBAAkBA,CAKvBN,OAEsD,EACtDC,KAA6C,EACH;IAC1C,IAAID,OAAO,CAACO,SAAS,EAAE;MACrB,OAAO,IAAI,CAACd,mBAAmB,CAACe,YAAY,CAACC,YAAY,CACvDT,OAAO,EACPC,KACF,CAAC;IACH;IACA,OAAO,IAAI,CAACR,mBAAmB,CAACe,YAAY,CAACL,OAAO,CAClDH,OAAO,EACPC,KACF,CAAC;EACH;EAEOS,eAAe,GAKAA,CAACC,QAAQ,EAAEC,MAAM,EAAEZ,OAAO,EAAEC,KAAK,KAAK;IAC1D,MAAMY,SAAS,GAAGb,OAAO,CAACa,SAAS,EAAEC,GAAG,CAACC,GAAG,IAC1C,OAAOA,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAGA,GAAG,CAACjB,OACtC,CAAC;;IAED;;IAEA,MAAMkB,SAA6B,GAAG,EAAE;IACxC,MAAMC,cAEL,GAAG,EAAE;IAEN,KAAK,MAAMC,IAAI,IAAIlB,OAAO,CAACmB,gBAAgB,IAAI,EAAE,EAAE;MACjD,IAAIpC,WAAW,CAACmC,IAAI,CAAC,EAAE;QACrBD,cAAc,CAACG,IAAI,CAACtC,gBAAgB,CAACoC,IAAI,CAAC,CAAC;MAC7C,CAAC,MAAM;QACLF,SAAS,CAACI,IAAI,CAAC;UACbC,QAAQ,EAAEH,IAAI,CAACI,WAAW,IAAIJ,IAAI,CAACG,QAAQ;UAC3CE,WAAW,EAAEL,IAAI,CAACK;QACpB,CAAC,CAAC;MACJ;IACF;;IAEA;IACA,MAAMC,qBAAqB,GAAGP,cAAc,CAACQ,MAAM,GAAG,CAAC,GACnDC,OAAO,CAACC,GAAG,CACXV,cAAc,CAACH,GAAG,CAACc,IAAI,IACrB5C,4BAA4B,CAC1B,IAAI,CAACS,mBAAmB,CAACoC,MAAM,CAAChD,iBAAiB,CAAC,EAClD+C,IACF,CACF,CACF,CAAC,CAACE,IAAI,CAACC,KAAK,IACVA,KAAK,CACFC,MAAM,CAAEC,CAAC,IAAiCA,CAAC,IAAI,IAAI,CAAC,CACpDnB,GAAG,CAACmB,CAAC,IAAIA,CAAC,CAACnC,OAAO,CACvB,CAAC,GACCoC,SAAS;IAEb,OAAO,IAAI,CAACzC,mBAAmB,CAAC0C,SAAS,CAAChC,OAAO,CAC/C;MACE,GAAGH,OAAO;MACVW,QAAQ;MACRC,MAAM;MACNC,SAAS;MACTM,gBAAgB,EAAEH,SAAS;MAC3BQ;IACF,CAAC,EACDvB,KACF,CAAC;EACH,CAAC;EAEMmC,YAAY,GAYGA,CAAClC,OAAO,EAAEmC,QAAQ,EAAErC,OAAO,EAAEC,KAAK,KAAK;IAC3D,MAAMqC,YAAY,GAAGC,KAAK,CAACC,OAAO,CAACtC,OAAO,CAAC,GAAGA,OAAO,GAAG,CAACA,OAAO,CAAC;IACjE,MAAMuC,QAAQ,GAAGxC,KAAiD;IAElE,OAAOqC,YAAY,CAACb,MAAM,IAAI,CAAC,GAC3BiB,iBAAiB,CACjB,IAAI,CAACjD,mBAAmB,EACxB6C,YAAY,EACZD,QAAQ,EACRrC,OAAO,EACPyC,QACF,CAAC,GACCE,iBAAiB,CACjB,IAAI,CAAClD,mBAAmB,EACxB6C,YAAY,EACZD,QAAQ,EACRrC,OAAO,EACPyC,QACF,CAAC;EACL,CAAC;EAaMG,gBAAgBA,CAOrBC,aAA2B,EAC3B7C,OAAyC,EACzCC,KAA8C,EAC9B;IAChB,OAAO,IAAI,CAACR,mBAAmB,CAACqD,UAAU,CAAC3C,OAAO,CAChD;MAAE0C,aAAa;MAAE,GAAG7C;IAAQ,CAAC;IAC7B;IACAC,KACF,CAAC;EACH;EAEO8C,aAAaA,CAAA,EAAkB;IACpC,OAAO,IAAI,CAACtD,mBAAmB,CAACsD,aAAa,CAAC,CAAC;EACjD;EAEOC,iBAAiBA,CACtB9C,OAEsD,EACvC;IACf,OAAO,IAAI,CAACT,mBAAmB,CAACuD,iBAAiB,CAAC9C,OAAO,CAAC;EAC5D;EAEO+C,oBAAoBA,CACzBC,IAAsB,EACP;IACf,OAAO,IAAI,CAACzD,mBAAmB,CAACwD,oBAAoB,CAACC,IAAI,EAAEhB,SAAS,CAAC;EACvE;EAEOiB,kBAAkBA,CACvBrD,OAA0C,EAC1Cc,MAAgC,EACjB;IACf,OAAO,IAAI,CAACnB,mBAAmB,CAAC0D,kBAAkB,CAACrD,OAAO,EAAEc,MAAM,CAAC;EACrE;EAEOwC,2BAA2BA,CAChCtD,OAAe,EACfuD,UAA2B,EACZ;IACf,OAAO,IAAI,CAAC5D,mBAAmB,CAAC2D,2BAA2B,CACzDtD,OAAO,EACPuD,UACF,CAAC;EACH;EAEOC,uBAAuBA,CAG5BC,KAA2B,EAAmC;IAC9D,OAAO,IAAI,CAAC9D,mBAAmB,CAAC+D,kBAAkB,CAC/CC,YAAY,CAACF,KAAK,CAAC;EACxB;EAEOG,mBAAmBA,CACxB1D,OAAU,EACe;IACzB,MAAMR,KAAK,GAAG,IAAI,CAACC,mBAAmB;IACtC,MAAMkE,MAAM,GAAG;MAAE,GAAG3D;IAAQ,CAAC;IAE7B2D,MAAM,CAACJ,KAAK,GAAG/D,KAAK,CAACgE,kBAAkB,CAACC,YAAY,CAACE,MAAM,CAACJ,KAAK,CAAC;IAClEI,MAAM,CAACC,cAAc,GAAGpE,KAAK,CAACqE,gBAAgB,CAACJ,YAAY,CACzDE,MAAM,CAACC,cACT,CAAC;IACDD,MAAM,CAACG,OAAO,GAAGtE,KAAK,CAACuE,oBAAoB,CAACN,YAAY,CAACE,MAAM,CAACG,OAAO,CAAC;IACxEH,MAAM,CAACK,SAAS,GAAGxE,KAAK,CAACyE,oBAAoB,CAACR,YAAY,CACxDE,MAAM,CAACK,SACT,CAAC;IACDL,MAAM,CAACO,aAAa,GAAG1E,KAAK,CAACyE,oBAAoB,CAACR,YAAY,CAC5DE,MAAM,CAACO,aACT,CAAC;IACDP,MAAM,CAACQ,OAAO,GAAG3E,KAAK,CAAC4E,mBAAmB,CAACX,YAAY,CAACE,MAAM,CAACQ,OAAO,CAAC;IAEvER,MAAM,CAACU,KAAK,GAAG,IAAI,CAAC,CAACC,mBAAmB,CACtCX,MAAM,CAACU,KAAK,EACZ7E,KAAK,CAAC+E,2BAA2B,CAACC,iBAAiB,CAAC7E,IAAI,CACtDH,KAAK,CAAC+E,2BACR,CAAC,EACD,IAAI,CAAC,CAACpF,UACR,CAAC;IACDwE,MAAM,CAACc,SAAS,GAAG,IAAI,CAAC,CAACH,mBAAmB,CAC1CX,MAAM,CAACc,SAAS,EAChBjF,KAAK,CAAC+E,2BAA2B,CAACG,qBAAqB,CAAC/E,IAAI,CAC1DH,KAAK,CAAC+E,2BACR,CAAC,EACD,IAAI,CAAC,CAAClF,cACR,CAAC;IACDsE,MAAM,CAACgB,QAAQ,GAAG,IAAI,CAAC,CAACL,mBAAmB,CACzCX,MAAM,CAACgB,QAAQ,EACfnF,KAAK,CAAC+E,2BAA2B,CAACK,oBAAoB,CAACjF,IAAI,CACzDH,KAAK,CAAC+E,2BACR,CAAC,EACD,IAAI,CAAC,CAACjF,aACR,CAAC;IAED,OAAOqE,MAAM;EACf;EAEA,CAACW,mBAAmBO,CAClBC,GAAiC,EACjCrB,YAA4D,EAC5DsB,KAAqD,EACvB;IAC9B,IAAI,CAACD,GAAG,IAAIA,GAAG,CAACrD,MAAM,KAAK,CAAC,EAAE;MAC5B,OAAOqD,GAAG;IACZ;IACA,MAAME,WAAW,GAAGF,GAAG,CAAChE,GAAG,CAACmE,EAAE,IAC5BC,IAAI,CAACC,SAAS,CAACrG,gBAAgB,CAACmG,EAAyB,CAAC,CAC5D,CAAC;IACD,MAAMG,QAAQ,GAAG3B,YAAY,CAACuB,WAAW,CAAC;IAC1C,IAAIK,MAAM,GAAGN,KAAK,CAACO,GAAG,CAACF,QAAQ,CAAC;IAChC,IAAI,CAACC,MAAM,EAAE;MACXA,MAAM,GAAGP,GAAG;MACZC,KAAK,CAACQ,GAAG,CAACH,QAAQ,EAAEC,MAAM,CAAC;IAC7B;IACA,OAAOA,MAAM;EACf;EAEOG,oBAAoBA,CACzBC,MAA6B,EAC7BzF,OAAoC,EACpCyC,QAAwC,EACxB;IAChB,OAAO,IAAI,CAAChD,mBAAmB,CAACiG,KAAK,CAACF,oBAAoB,CACxDC,MAAM,EACNzF,OAAO,EACPyC,QACF,CAAC;EACH;EAEA,MAAakD,gBAAgBA,CAAA,EAA2B;IACtD,OAAO,IAAI,CAAClG,mBAAmB,CAACkG,gBAAgB,CAAC,CAAC;EACpD;AACF;AAEA,SAASjD,iBAAiBA,CACxBlD,KAAY,EACZ8C,YAAuE,EACvED,QAAgB,EAChBrC,OAAkE,EAClEyC,QAAuC,EACvB;EAChB,IAAIH,YAAY,CAACb,MAAM,KAAK,CAAC,EAAE;IAC7BgB,QAAQ,CAACmD,IAAI,CAAC;MACZC,YAAY,EAAE,EAAE;MAChBC,+BAA+B,EAAE,IAAIC,GAAG,CAAC,CAAC;MAC1CC,YAAY,EAAE,KAAK;MACnBC,WAAW,EAAE,CAAC;MACdC,SAAS,EAAE,MAAAA,CAAA,KAAY,CAAC,CAAC;MACzBC,OAAO,EAAE,KAAK;MACdC,MAAM,EAAE,QAAQ;MAChBC,UAAU,EAAE;IACd,CAAC,CAAC;IACF,OAAO,IAAIpH,qBAAqB,CAAC,IAAIL,YAAY,CAAC,CAAC,CAAC;EACtD;EAEA,MAAM0H,SAAS,GAAG,IAAI1H,YAAY,CAAC,CAAC;EAEpC,KAAK,MAAM2H,GAAG,IAAIjE,YAAY,EAAE;IAC9B,MAAMvC,EAAE,GAAGwG,GAAG,CAAChF,WAAW;IAC1B,MAAMiF,UAAkC,GAAGD,GAAG,CAAClF,QAAQ,KAAKkF,GAAG,CAACjF,WAAW,GACvE,QAAQ,GACR,WAAW;IAEfgF,SAAS,CAACG,GAAG,CACXjH,KAAK,CAACkH,KAAK,CAACvG,OAAO,CACjB;MACE,GAAGH,OAAO;MACV2G,OAAO,EAAE;QACPzD,IAAI,EAAEsD,UAAU;QAChB1G,OAAO,EAAEyG,GAAG,CAAClF;MACf,CAAC;MACDuF,0BAA0B,EAAEL,GAAG,CAACjF,WAAW;MAC3Ce,QAAQ;MACRtC;IACF,CAAC,EACD0C,QACF,CACF,CAAC;EACH;EAEA,OAAO,IAAIxD,qBAAqB,CAACqH,SAAS,CAAC;AAC7C;AAEA,SAAS3D,iBAAiBA,CACxBnD,KAAY,EACZ8C,YAAuE,EACvED,QAAgB,EAChBrC,OAAkE,EAClEyC,QAAuC,EACvB;EAChB,MAAM6D,SAAS,GAAG,IAAI1H,YAAY,CAAC,CAAC;EACpC,MAAMiI,aAAa,GAAGvE,YAAY,CAACb,MAAM;EACzC,MAAMqF,aAAa,GAAG,IAAIf,GAAG,CAG3B,CAAC;EACH,IAAIgB,OAAO,GAAG,KAAK;EAEnB,SAASC,YAAYA,CAAA,EAAG;IACtB,IAAID,OAAO,EAAE;MACX;IACF;IAEA,MAAME,IAAI,GAAG,IAAIlB,GAAG,CAGlB,CAAC;IACH,MAAMD,+BAA+B,GAAG,IAAIC,GAAG,CAG7C,CAAC;IACH,MAAMmB,UAAsC,GAAG,EAAE;IACjD,IAAIC,aAAa,GAAG,CAAC;IACrB,IAAIhB,OAAO,GAAG,KAAK;IACnB,IAAIH,YAAY,GAAG,KAAK;IAExB,KAAK,MAAM;MAAEoB,OAAO;MAAErH;IAAG,CAAC,IAAI+G,aAAa,CAACO,MAAM,CAAC,CAAC,EAAE;MACpDvB,+BAA+B,CAACP,GAAG,CAACxF,EAAE,EAAEqH,OAAO,CAACvB,YAAY,IAAI,EAAE,CAAC;MAEnE,KAAK,MAAMU,GAAG,IAAIa,OAAO,CAACvB,YAAY,IAAI,EAAE,EAAE;QAC5CoB,IAAI,CAAC1B,GAAG,CAAC,GAAGgB,GAAG,CAACjF,WAAW,IAAIiF,GAAG,CAAChF,WAAW,EAAE,EAAEgF,GAAG,CAAC;MACxD;MACA,IAAIa,OAAO,CAACnB,WAAW,GAAGkB,aAAa,EAAE;QACvCA,aAAa,GAAGC,OAAO,CAACnB,WAAW;MACrC;MACA,IAAImB,OAAO,CAACpB,YAAY,EAAE;QACxBA,YAAY,GAAG,IAAI;MACrB;MACA,IAAIoB,OAAO,CAACjB,OAAO,EAAE;QACnBA,OAAO,GAAG,IAAI;QACde,UAAU,CAAC9F,IAAI,CAACgG,OAAO,CAAClB,SAAS,CAAC;MACpC;IACF;IAEA,MAAMoB,QAAQ,GAAG,CAAC,GAAGR,aAAa,CAACO,MAAM,CAAC,CAAC,CAAC,CAACvG,GAAG,CAACyG,CAAC,IAAIA,CAAC,CAACH,OAAO,CAAC;IAChE,MAAMI,OAAO,GAAGV,aAAa,CAACW,IAAI,GAAGZ,aAAa,IAC7CS,QAAQ,CAACI,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACvB,MAAM,KAAK,MAAM,IAAIuB,CAAC,CAACvB,MAAM,KAAK,SAAS,CAAC;IAEtE3D,QAAQ,CAACmD,IAAI,CAAC;MACZC,YAAY,EAAEtD,KAAK,CAACqF,IAAI,CAACX,IAAI,CAACI,MAAM,CAAC,CAAC,CAAC;MACvCvB,+BAA+B;MAC/BE,YAAY;MACZC,WAAW,EAAEkB,aAAa;MAC1BjB,SAAS,EAAEC,OAAO,GACd,MAAMzE,OAAO,CAACC,GAAG,CAACuF,UAAU,CAACpG,GAAG,CAAC+G,EAAE,IAAIA,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC/F,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAC5D,YAAY,CAAC,CAAC;MAClBqE,OAAO;MACPC,MAAM,EAAEoB,OAAO,GACX,SAAS,GACTF,QAAQ,CAACI,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACvB,MAAM,KAAK,OAAO,CAAC,GACxC,OAAO,GACP,QAAQ;MACZ,IAAI,CAACD,OAAO,GAAG;QAAEE,UAAU,EAAEyB,MAAM,CAACb,IAAI,CAACQ,IAAI;MAAE,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC,CAAC;EACJ;EAEA,KAAK,MAAMlB,GAAG,IAAIjE,YAAY,EAAE;IAC9B,MAAMyF,MAAM,GAAG,GAAGxB,GAAG,CAACjF,WAAW,IAAIiF,GAAG,CAAClF,QAAQ,IAAIkF,GAAG,CAAChF,WAAW,EAAE;IACtE,MAAMxB,EAAE,GAAGwG,GAAG,CAAChF,WAAW;IAE1B,MAAMiF,UAAkC,GAAGD,GAAG,CAAClF,QAAQ,KAAKkF,GAAG,CAACjF,WAAW,GACvE,QAAQ,GACR,WAAW;IAEfgF,SAAS,CAACG,GAAG,CACXjH,KAAK,CAACkH,KAAK,CAACvG,OAAO,CACjB;MACE,GAAGH,OAAO;MACV2G,OAAO,EAAE;QACPzD,IAAI,EAAEsD,UAAU;QAChB1G,OAAO,EAAEyG,GAAG,CAAClF;MACf,CAAC;MACDuF,0BAA0B,EAAEL,GAAG,CAACjF,WAAW;MAC3Ce,QAAQ;MACRtC;IACF,CAAC,EACD;MACE6F,IAAI,EAAGwB,OAA4B,IAAK;QACtC,IAAIL,OAAO,EAAE;UACX;QACF;QACAD,aAAa,CAACvB,GAAG,CAACwC,MAAM,EAAE;UAAEX,OAAO;UAAErH;QAAG,CAAC,CAAC;QAC1CiH,YAAY,CAAC,CAAC;MAChB,CAAC;MACDgB,KAAK,EAAGC,GAAY,IAAK;QACvB,IAAIlB,OAAO,EAAE;UACX;QACF;QACAA,OAAO,GAAG,IAAI;QACdT,SAAS,CAAC4B,WAAW,CAAC,CAAC;QACvBzF,QAAQ,CAACuF,KAAK,CAACC,GAAG,CAAC;MACrB,CAAC;MACD;MACAE,QAAQ,EAAEA,CAAA,KAAM,CAAC;IACnB,CACF,CACF,CAAC;EACH;EAEA,OAAO,IAAIlJ,qBAAqB,CAACqH,SAAS,CAAC;AAC7C","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","rdpCanonicalizer","orderBy","orderByCanonicalizer","aggregate","genericCanonicalizer","intersectWith","$select","selectCanonicalizer","union","canonObjectSetArray","objectSetArrayCanonicalizer","canonicalizeUnion","intersect","canonicalizeIntersect","subtract","canonicalizeSubtract","#canonObjectSetArray","arr","cache","wireStrings","os","JSON","stringify","canonKey","cached","get","set","observeMediaMetadata","coords","media","getCacheSnapshot","next","resolvedList","linkedObjectsBySourcePrimaryKey","Map","isOptimistic","lastUpdated","fetchMore","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 CacheSnapshot,\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 {\n MediaMetadataObserveOptions,\n MediaMetadataPayload,\n} from \"../ObservableClient/MediaObservableTypes.js\";\nimport type { MediaPropertyLocation } from \"../ObservableClient/MediaTypes.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 { Rdp } from \"./RdpCanonicalizer.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<ObjectOrInterfaceDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectOrInterfaceDefinition>>,\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.rdpCanonicalizer.canonicalize(\n result.withProperties as Rdp | undefined,\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 public observeMediaMetadata(\n coords: MediaPropertyLocation,\n options: MediaMetadataObserveOptions,\n observer: Observer<MediaMetadataPayload>,\n ): Unsubscribable {\n return this.__experimentalStore.media.observeMediaMetadata(\n coords,\n options,\n observer,\n );\n }\n\n public async getCacheSnapshot(): Promise<CacheSnapshot> {\n return this.__experimentalStore.getCacheSnapshot();\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: async () => {},\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 : async () => {},\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 +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","SOURCE_API_NAME_IDX","LINK_API_NAME_IDX","LIST_API_NAME_IDX","LIST_RDP_IDX","ListsHelper","MediaHelper","OBJECT_API_NAME_IDX","RDP_CONFIG_IDX","OBJECT_RDP_CONFIG_IDX","ObjectCacheKeyRegistry","ObjectsHelper","ObjectSetHelper","ObjectSetArrayCanonicalizer","OrderByCanonicalizer","PivotCanonicalizer","Queries","RdpCanonicalizer","RidListCanonicalizer","SelectCanonicalizer","WhereClauseCanonicalizer","__DEV__","process","env","NODE_ENV","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","media","objectSets","key","subject","peek","console","log","JSON","stringify","closed","observed","type","otherKeys","delete","unregister","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","invalidateLinkQueriesForType","invalidateFunctionsByObject","Promise","allSettled","methodName","debug","keys","invalidateObjectType","then","#maybeRevalidateQueries","isEmpty","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","info","truth","invalidateAll","invalidateObjects","objectsArray","obj","$objectType","$primaryKey","invalidateFunction","params","primaryKey","sizeCache","getCacheSnapshot","WeakMap","entries","totalSize","entry","entryType","estimatedSize","value","objectValue","cached","set","metadata","timestamp","lastUpdated","status","data","stats","totalEntries"],"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 { CacheEntry, CacheSnapshot } from \"../ObservableClient.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 SOURCE_API_NAME_IDX as LINK_API_NAME_IDX,\n} from \"./links/SpecificLinkCacheKey.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 { MediaHelper } from \"./media/MediaHelper.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\nconst __DEV__ = typeof process === \"undefined\"\n || process.env.NODE_ENV !== \"production\";\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 media: MediaHelper;\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.media = new MediaHelper(this, this.cacheKeys);\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 if (key.type === \"object\") {\n this.objectCacheKeyRegistry.unregister(key);\n }\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 // Per-PK invalidation doesn't propagate to specificLink queries (they're\n // keyed on srcType+srcPk+linkName, not the linked object's pk).\n promises.push(this.invalidateLinkQueriesForType(apiName));\n\n // Function queries with explicit `dependsOnObjects` need to be told the\n // edited PK directly — they aren't object-cache variants and so aren't\n // reachable via objectCacheKeyRegistry.\n promises.push(this.functions.invalidateFunctionsByObject(apiName, pk));\n\n return Promise.allSettled(promises);\n }\n\n /**\n * Force every cached `specificLink` query to re-evaluate against the given\n * apiName. Link queries are keyed on `(srcType, srcPk, linkName, ...)` rather\n * than the linked object's pk, so per-object propagation never marks them\n * as modified.\n *\n * TODO: make SpecificLinkQuery self-invalidate from per-type changes so\n * callers don't need this manual kick.\n */\n public invalidateLinkQueriesForType(apiName: string): Promise<void> {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"invalidateLinkQueriesForType\" }).debug(\n apiName,\n );\n }\n\n const promises: Array<Promise<void>> = [];\n for (const cacheKey of this.queries.keys()) {\n if (cacheKey.type !== \"specificLink\") {\n continue;\n }\n const query = this.queries.peek(cacheKey);\n if (!query) {\n continue;\n }\n promises.push(query.invalidateObjectType(apiName, undefined));\n }\n return Promise.allSettled(promises).then(() => void 0);\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\" || cacheKey.type === \"list\") {\n const query = this.queries.peek(cacheKey);\n // Both ObjectSetQuery and ListQuery expose objectTypes: ReadonlySet<string>\n if (query && \"objectTypes\" in query) {\n for (\n const objectType of (query as { objectTypes: ReadonlySet<string> })\n .objectTypes\n ) {\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 #sizeCache: WeakMap<object, number> | undefined;\n\n public getCacheSnapshot(): CacheSnapshot {\n if (__DEV__) {\n const sizeCache = this.#sizeCache ??= new WeakMap<object, number>();\n const entries: CacheEntry[] = [];\n let totalSize = 0;\n\n for (const cacheKey of this.layers.truth.keys()) {\n const entry = this.layers.top.get(cacheKey);\n if (!entry) {\n continue;\n }\n\n let entryType: CacheEntry[\"type\"] | undefined;\n let objectType = \"\";\n\n if (cacheKey.type === \"object\") {\n entryType = \"object\";\n objectType = cacheKey.otherKeys[OBJECT_API_NAME_IDX];\n } else if (cacheKey.type === \"list\") {\n entryType = \"list\";\n objectType = cacheKey.otherKeys[LIST_API_NAME_IDX];\n } else if (cacheKey.type === \"specificLink\") {\n entryType = \"link\";\n objectType = cacheKey.otherKeys[LINK_API_NAME_IDX];\n } else if (cacheKey.type === \"objectSet\") {\n entryType = \"objectSet\";\n objectType = \"\";\n }\n\n if (!entryType) {\n continue;\n }\n\n let estimatedSize = 0;\n if (entry.value != null && typeof entry.value === \"object\") {\n const objectValue = entry.value;\n const cached = sizeCache.get(objectValue);\n if (cached !== undefined) {\n estimatedSize = cached;\n } else {\n try {\n estimatedSize = JSON.stringify(entry.value).length * 2;\n } catch {\n // TODO: surface unserializable entries to devtools users\n estimatedSize = 0;\n }\n sizeCache.set(objectValue, estimatedSize);\n }\n } else if (entry.value != null) {\n try {\n estimatedSize = JSON.stringify(entry.value).length * 2;\n } catch {\n estimatedSize = 0;\n }\n }\n totalSize += estimatedSize;\n\n entries.push({\n key: DEBUG_ONLY__cacheKeyToString(cacheKey),\n type: entryType,\n objectType,\n metadata: {\n timestamp: entry.lastUpdated,\n status: entry.status,\n size: estimatedSize,\n },\n data: entry.value,\n });\n }\n\n return {\n entries,\n stats: {\n totalEntries: entries.length,\n totalSize,\n },\n };\n }\n\n return {\n entries: [],\n stats: { totalEntries: 0, totalSize: 0 },\n };\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","SOURCE_API_NAME_IDX","LINK_API_NAME_IDX","LIST_API_NAME_IDX","LIST_RDP_IDX","ListsHelper","MediaHelper","OBJECT_API_NAME_IDX","RDP_CONFIG_IDX","OBJECT_RDP_CONFIG_IDX","ObjectCacheKeyRegistry","ObjectsHelper","ObjectSetHelper","ObjectSetArrayCanonicalizer","OrderByCanonicalizer","PivotCanonicalizer","Queries","RdpCanonicalizer","RidListCanonicalizer","SelectCanonicalizer","WhereClauseCanonicalizer","__DEV__","process","env","NODE_ENV","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","media","objectSets","key","subject","peek","console","log","JSON","stringify","closed","observed","type","otherKeys","delete","unregister","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","invalidateLinkQueriesForType","invalidateFunctionsByObject","Promise","allSettled","methodName","debug","keys","invalidateObjectType","then","#maybeRevalidateQueries","isEmpty","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","info","truth","invalidateAll","invalidateObjects","objectsArray","obj","$objectType","$primaryKey","invalidateFunction","params","primaryKey","sizeCache","getCacheSnapshot","WeakMap","entries","totalSize","entry","entryType","estimatedSize","value","objectValue","cached","set","metadata","timestamp","lastUpdated","status","data","stats","totalEntries"],"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 ObjectOrInterfaceDefinition,\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 { CacheEntry, CacheSnapshot } from \"../ObservableClient.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 SOURCE_API_NAME_IDX as LINK_API_NAME_IDX,\n} from \"./links/SpecificLinkCacheKey.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 { MediaHelper } from \"./media/MediaHelper.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\nconst __DEV__ = typeof process === \"undefined\"\n || process.env.NODE_ENV !== \"production\";\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 media: MediaHelper;\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.media = new MediaHelper(this, this.cacheKeys);\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 if (key.type === \"object\") {\n this.objectCacheKeyRegistry.unregister(key);\n }\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 // Per-PK invalidation doesn't propagate to specificLink queries (they're\n // keyed on srcType+srcPk+linkName, not the linked object's pk).\n promises.push(this.invalidateLinkQueriesForType(apiName));\n\n // Function queries with explicit `dependsOnObjects` need to be told the\n // edited PK directly — they aren't object-cache variants and so aren't\n // reachable via objectCacheKeyRegistry.\n promises.push(this.functions.invalidateFunctionsByObject(apiName, pk));\n\n return Promise.allSettled(promises);\n }\n\n /**\n * Force every cached `specificLink` query to re-evaluate against the given\n * apiName. Link queries are keyed on `(srcType, srcPk, linkName, ...)` rather\n * than the linked object's pk, so per-object propagation never marks them\n * as modified.\n *\n * TODO: make SpecificLinkQuery self-invalidate from per-type changes so\n * callers don't need this manual kick.\n */\n public invalidateLinkQueriesForType(apiName: string): Promise<void> {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.child({ methodName: \"invalidateLinkQueriesForType\" }).debug(\n apiName,\n );\n }\n\n const promises: Array<Promise<void>> = [];\n for (const cacheKey of this.queries.keys()) {\n if (cacheKey.type !== \"specificLink\") {\n continue;\n }\n const query = this.queries.peek(cacheKey);\n if (!query) {\n continue;\n }\n promises.push(query.invalidateObjectType(apiName, undefined));\n }\n return Promise.allSettled(promises).then(() => void 0);\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\" || cacheKey.type === \"list\") {\n const query = this.queries.peek(cacheKey);\n // Both ObjectSetQuery and ListQuery expose objectTypes: ReadonlySet<string>\n if (query && \"objectTypes\" in query) {\n for (\n const objectType of (query as { objectTypes: ReadonlySet<string> })\n .objectTypes\n ) {\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<ObjectOrInterfaceDefinition>\n | ReadonlyArray<Osdk.Instance<ObjectOrInterfaceDefinition>>,\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 #sizeCache: WeakMap<object, number> | undefined;\n\n public getCacheSnapshot(): CacheSnapshot {\n if (__DEV__) {\n const sizeCache = this.#sizeCache ??= new WeakMap<object, number>();\n const entries: CacheEntry[] = [];\n let totalSize = 0;\n\n for (const cacheKey of this.layers.truth.keys()) {\n const entry = this.layers.top.get(cacheKey);\n if (!entry) {\n continue;\n }\n\n let entryType: CacheEntry[\"type\"] | undefined;\n let objectType = \"\";\n\n if (cacheKey.type === \"object\") {\n entryType = \"object\";\n objectType = cacheKey.otherKeys[OBJECT_API_NAME_IDX];\n } else if (cacheKey.type === \"list\") {\n entryType = \"list\";\n objectType = cacheKey.otherKeys[LIST_API_NAME_IDX];\n } else if (cacheKey.type === \"specificLink\") {\n entryType = \"link\";\n objectType = cacheKey.otherKeys[LINK_API_NAME_IDX];\n } else if (cacheKey.type === \"objectSet\") {\n entryType = \"objectSet\";\n objectType = \"\";\n }\n\n if (!entryType) {\n continue;\n }\n\n let estimatedSize = 0;\n if (entry.value != null && typeof entry.value === \"object\") {\n const objectValue = entry.value;\n const cached = sizeCache.get(objectValue);\n if (cached !== undefined) {\n estimatedSize = cached;\n } else {\n try {\n estimatedSize = JSON.stringify(entry.value).length * 2;\n } catch {\n // TODO: surface unserializable entries to devtools users\n estimatedSize = 0;\n }\n sizeCache.set(objectValue, estimatedSize);\n }\n } else if (entry.value != null) {\n try {\n estimatedSize = JSON.stringify(entry.value).length * 2;\n } catch {\n estimatedSize = 0;\n }\n }\n totalSize += estimatedSize;\n\n entries.push({\n key: DEBUG_ONLY__cacheKeyToString(cacheKey),\n type: entryType,\n objectType,\n metadata: {\n timestamp: entry.lastUpdated,\n status: entry.status,\n size: estimatedSize,\n },\n data: entry.value,\n });\n }\n\n return {\n entries,\n stats: {\n totalEntries: entries.length,\n totalSize,\n },\n };\n }\n\n return {\n entries: [],\n stats: { totalEntries: 0, totalSize: 0 },\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,6 +14,6 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
export const USER_AGENT = `osdk-client/${"2.29.
|
|
18
|
-
export const OBSERVABLE_USER_AGENT = `osdk-observable-client/${"2.29.
|
|
17
|
+
export const USER_AGENT = `osdk-client/${"2.29.1-main-db8df2423f72b154e84da1e327691afbc569c5aa"}`;
|
|
18
|
+
export const OBSERVABLE_USER_AGENT = `osdk-observable-client/${"2.29.1-main-db8df2423f72b154e84da1e327691afbc569c5aa"}`;
|
|
19
19
|
//# sourceMappingURL=UserAgent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAgent.js","names":["USER_AGENT","OBSERVABLE_USER_AGENT"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const USER_AGENT: string = `osdk-client/${process.env.PACKAGE_VERSION}`;\nexport const OBSERVABLE_USER_AGENT: string =\n `osdk-observable-client/${process.env.PACKAGE_VERSION}`;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,UAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"UserAgent.js","names":["USER_AGENT","OBSERVABLE_USER_AGENT"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const USER_AGENT: string = `osdk-client/${process.env.PACKAGE_VERSION}`;\nexport const OBSERVABLE_USER_AGENT: string =\n `osdk-observable-client/${process.env.PACKAGE_VERSION}`;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,UAAkB,GAAG,uEAA4C;AAC9E,OAAO,MAAMC,qBAA6B,GACxC,kFAAuD","ignoreList":[]}
|