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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/build/browser/actions/actions.test.js +52 -4
  3. package/build/browser/actions/actions.test.js.map +1 -1
  4. package/build/browser/actions/applyAction.js +21 -15
  5. package/build/browser/actions/applyAction.js.map +1 -1
  6. package/build/browser/internal/conversions/modernToLegacyWhereClause.js +1 -1
  7. package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  8. package/build/browser/observable/internal/Store.js +1 -1
  9. package/build/browser/observable/internal/Store.js.map +1 -1
  10. package/build/browser/observable/internal/testUtils.js +2 -0
  11. package/build/browser/observable/internal/testUtils.js.map +1 -1
  12. package/build/browser/util/UserAgent.js +1 -1
  13. package/build/cjs/{chunk-2FVV5A63.cjs → chunk-IU47QMYO.cjs} +48 -48
  14. package/build/cjs/chunk-IU47QMYO.cjs.map +1 -0
  15. package/build/cjs/{chunk-X7WGNFZ4.cjs → chunk-JPENHIJB.cjs} +19 -19
  16. package/build/cjs/chunk-JPENHIJB.cjs.map +1 -0
  17. package/build/cjs/{graphql-JJX5MZPQ.cjs → graphql-RGM5SRWV.cjs} +306 -265
  18. package/build/cjs/graphql-RGM5SRWV.cjs.map +1 -0
  19. package/build/cjs/index.cjs +105 -99
  20. package/build/cjs/index.cjs.map +1 -1
  21. package/build/cjs/public/internal.cjs +6 -6
  22. package/build/cjs/public/internal.cjs.map +1 -1
  23. package/build/cjs/public/unstable-do-not-use.cjs +41 -70
  24. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  25. package/build/esm/actions/actions.test.js +52 -4
  26. package/build/esm/actions/actions.test.js.map +1 -1
  27. package/build/esm/actions/applyAction.js +21 -15
  28. package/build/esm/actions/applyAction.js.map +1 -1
  29. package/build/esm/internal/conversions/modernToLegacyWhereClause.js +1 -1
  30. package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
  31. package/build/esm/observable/internal/Store.js +1 -1
  32. package/build/esm/observable/internal/Store.js.map +1 -1
  33. package/build/esm/observable/internal/testUtils.js +2 -0
  34. package/build/esm/observable/internal/testUtils.js.map +1 -1
  35. package/build/esm/util/UserAgent.js +1 -1
  36. package/build/types/actions/applyAction.d.ts.map +1 -1
  37. package/build/types/observable/internal/testUtils.d.ts.map +1 -1
  38. package/package.json +9 -9
  39. package/build/cjs/chunk-2FVV5A63.cjs.map +0 -1
  40. package/build/cjs/chunk-X7WGNFZ4.cjs.map +0 -1
  41. package/build/cjs/graphql-JJX5MZPQ.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Store.js","names":["BehaviorSubject","invariant","additionalContext","DEBUG_REFCOUNTS","ActionApplication","CacheKeys","createChangedObjects","DEBUG_ONLY__changesToString","Entry","Layer","isListCacheKey","ListQuery","ObjectQuery","RefCounts","WeakMapWithEntries","WhereClauseCanonicalizer","createInitEntry","cacheKey","status","value","undefined","lastUpdated","OrderByCanonicalizer","map","Map","canonicalize","orderBy","has","JSON","stringify","get","set","Store","whereCanonicalizer","orderByCanonicalizer","truthLayer","topLayer","queries","cacheKeyToSubject","WeakMap","cacheKeys","refCounts","k","cleanupCacheKey","finalizationRegistry","constructor","client","logger","child","msgPrefix","cacheKeyType","type","otherKeys","console","log","register","setInterval","gc","FinalizationRegistry","cleanupCallback","e","error","key","subject","peekSubject","closed","observed","remove","process","env","NODE_ENV","complete","delete","dispose","applyAction","action","args","opts","removeLayer","layerId","currentLayer","parentLayer","v","entries","oldEntry","currentEntry","next","isOptimistic","getCacheKey","getSubject","initialValue","observeObject","apiName","pk","options","subFn","query","getObjectQuery","retain","mode","revalidate","catch","sub","subscribe","unsubscribe","release","observeList","getListQuery","objectType","where","streamUpdates","miniDef","objectSet","store","websocketSubscription","onChange","object","state","debug","methodName","$objectType","$primaryKey","peekQuery","changes","updateObject","maybeRevalidateLists","err","batch","existing","read","cacheKeyToRemove","newObjects","data","filter","o","length","modifiedLists","add","write","info","onError","errors","onOutOfDate","onSuccessfulSubscription","#peekQuery","getQuery","#getQuery","createQuery","canonWhere","canonOrderBy","listCacheKey","objectCacheKey","dedupeInterval","getObject","objEntry","optimisticId","batchFn","needsLayer","batchContext","createLayerIfNeeded","addLayer","optimisticWrite","oldTopValue","writeLayer","newValue","Date","now","newTopValue","retVal","maybeUpdateLists","batchResult","invalidateObject","trace","promises","promise","maybeUpdateAndRevalidate","push","Promise","all","addedObjects","size","modifiedObjects","resolve","keys","invalidateObjectType","invalidateList","writeToStore","updateObjects","values","$apiName","updateList","objects","objectCacheKeys"],"sources":["Store.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ActionDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n WhereClause,\n} from \"@osdk/api\";\nimport { BehaviorSubject } from \"rxjs\";\nimport invariant from \"tiny-invariant\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { additionalContext, type Client } from \"../../Client.js\";\nimport type { Logger } from \"../../Logger.js\";\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type {\n ObserveListOptions,\n ObserveObjectOptions,\n OrderBy,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { OptimisticBuilder } from \"../OptimisticBuilder.js\";\nimport type { SubFn } from \"../types.js\";\nimport { ActionApplication } from \"./ActionApplication.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { CacheKeys } from \"./CacheKeys.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport {\n type Changes,\n createChangedObjects,\n DEBUG_ONLY__changesToString,\n} from \"./ChangedObjects.js\";\nimport { Entry, Layer } from \"./Layer.js\";\nimport type { ListCacheKey, ListQueryOptions } from \"./ListQuery.js\";\nimport { isListCacheKey, ListQuery } from \"./ListQuery.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { ObjectQuery } from \"./ObjectQuery.js\";\nimport { type OptimisticId } from \"./OptimisticId.js\";\nimport type { Query } from \"./Query.js\";\nimport { RefCounts } from \"./RefCounts.js\";\nimport { WeakMapWithEntries } from \"./WeakMapWithEntries.js\";\nimport { WhereClauseCanonicalizer } from \"./WhereClauseCanonicalizer.js\";\n\n/*\n Work still to do:\n - [x] testing for optimistic writes\n - [x] automatic invalidation of actions\n - [x] automatic optimistic list updates\n - [x] useOsdkObjects\n - [x] imply offline for objects passed directly\n - [x] websocket subscriptions\n - [ ] links\n - [x] add pagination\n - [ ] sub-selection support\n - [ ] interfaces\n - [ ] setup defaults\n - [ ] reduce updates in react\n*/\n\nexport interface SubjectPayload<KEY extends CacheKey> extends Entry<KEY> {\n isOptimistic: boolean;\n}\n\nexport interface BatchContext {\n changes: Changes;\n createLayerIfNeeded: () => void;\n optimisticWrite: boolean;\n\n write: <K extends CacheKey<string, any, any>>(\n k: K,\n v: Entry<K>[\"value\"],\n status: Entry<K>[\"status\"],\n ) => Entry<K>;\n\n read: <K extends CacheKey<string, any, any>>(\n k: K,\n ) => Entry<K> | undefined;\n}\n\ninterface UpdateOptions {\n optimisticId?: OptimisticId;\n}\n\nexport namespace Store {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nfunction createInitEntry(cacheKey: CacheKey): Entry<any> {\n return {\n cacheKey,\n status: \"init\",\n value: undefined,\n lastUpdated: 0,\n };\n}\n\n/*\n Notes:\n - Subjects are one per type per store (by cache key)\n - Data is one per layer per cache key\n*/\n\nexport class OrderByCanonicalizer {\n // crappy version\n #map = new Map<string, Record<string, \"asc\" | \"desc\" | undefined>>();\n\n canonicalize: <T>(\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n ) => Canonical<Record<string, \"asc\" | \"desc\" | undefined>> = (orderBy) => {\n if (this.#map.has(JSON.stringify(orderBy))) {\n return this.#map.get(JSON.stringify(orderBy))! as Canonical<\n Record<string, \"asc\" | \"desc\" | undefined>\n >;\n } else {\n this.#map.set(JSON.stringify(orderBy), orderBy);\n return orderBy as Canonical<Record<string, \"asc\" | \"desc\" | undefined>>;\n }\n };\n}\n\nexport class Store {\n whereCanonicalizer: WhereClauseCanonicalizer = new WhereClauseCanonicalizer();\n orderByCanonicalizer: OrderByCanonicalizer = new OrderByCanonicalizer();\n #truthLayer: Layer = new Layer(undefined, undefined);\n #topLayer: Layer;\n client: Client;\n\n /** @internal */\n logger?: Logger;\n\n #queries: WeakMapWithEntries<\n CacheKey<string, any, any>,\n Query<any, any, any>\n > = new WeakMapWithEntries();\n\n #cacheKeyToSubject = new WeakMap<\n CacheKey<string, any, any>,\n BehaviorSubject<SubjectPayload<any>>\n >();\n #cacheKeys: CacheKeys;\n\n #refCounts = new RefCounts<CacheKey>(\n DEBUG_REFCOUNTS ? 15_000 : 60_000,\n (k) => this.#cleanupCacheKey(k),\n );\n\n #finalizationRegistry: FinalizationRegistry<() => void>;\n\n constructor(client: Client) {\n this.client = client;\n this.logger = client[additionalContext].logger?.child({}, {\n msgPrefix: \"Store\",\n });\n this.#topLayer = this.#truthLayer;\n this.#cacheKeys = new CacheKeys(\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n (k) => {\n if (DEBUG_REFCOUNTS) {\n const cacheKeyType = k.type;\n const otherKeys = k.otherKeys;\n // eslint-disable-next-line no-console\n console.log(\n `CacheKeys.onCreate(${cacheKeyType}, ${JSON.stringify(otherKeys)})`,\n );\n\n this.#finalizationRegistry.register(k, () => {\n // eslint-disable-next-line no-console\n console.log(\n `CacheKey Finalization(${cacheKeyType}, ${\n JSON.stringify(otherKeys)\n })`,\n );\n });\n }\n\n this.#refCounts.register(k);\n },\n );\n\n setInterval(() => {\n this.#refCounts.gc();\n }, 1000);\n\n this.#finalizationRegistry = new FinalizationRegistry<() => void>(\n (cleanupCallback) => {\n try {\n cleanupCallback();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\n \"Caught an error while running a finalization callback\",\n e,\n );\n }\n },\n );\n }\n\n /**\n * Called after a key is no longer retained and the timeout has elapsed\n * @param key\n */\n #cleanupCacheKey = (key: CacheKey<string, any, any>) => {\n const subject = this.peekSubject(key);\n\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.log(\n `CacheKey cleaning up (${\n JSON.stringify({\n closed: subject?.closed,\n observed: subject?.observed,\n })\n })`,\n JSON.stringify([key.type, ...key.otherKeys], null, 2),\n );\n }\n this.#cacheKeys.remove(key);\n if (process.env.NODE_ENV !== \"production\") {\n invariant(subject);\n }\n\n if (subject) {\n subject.complete();\n this.#cacheKeyToSubject.delete(key);\n }\n\n this.#queries.get(key)?.dispose();\n this.#queries.delete(key);\n };\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: Store.ApplyActionOptions,\n ) => Promise<unknown> = (action, args, opts) => {\n return new ActionApplication(this).applyAction(action, args, opts);\n };\n\n removeLayer(layerId: OptimisticId): void {\n invariant(\n layerId != null,\n \"undefined is the reserved layerId for the truth layer\",\n );\n // 1. collect all cache keys for a given layerId\n let currentLayer: Layer | undefined = this.#topLayer;\n const cacheKeys = new Map<CacheKey<string, any, any>, Entry<any>>();\n while (currentLayer != null && currentLayer.parentLayer != null) {\n if (currentLayer.layerId === layerId) {\n for (const [k, v] of currentLayer.entries()) {\n if (cacheKeys.has(k)) continue;\n cacheKeys.set(k, v);\n }\n }\n\n currentLayer = currentLayer.parentLayer;\n }\n\n // 2. remove the layers from the chain\n this.#topLayer = this.#topLayer.removeLayer(layerId);\n\n // 3. check each cache key to see if it is different in the new chain\n for (const [k, oldEntry] of cacheKeys) {\n const currentEntry = this.#topLayer.get(k);\n\n // 4. if different, update the subject\n if (oldEntry !== currentEntry) {\n const x = currentEntry ?? createInitEntry(k);\n // We are going to be pretty lazy here and just re-emit the value.\n // In the future it may benefit us to deep equal check her but I think\n // the subjects are effectively doing this anyway.\n this.peekSubject(k)?.next(\n {\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...(currentEntry ?? createInitEntry(k)),\n isOptimistic:\n currentEntry?.value !== this.#truthLayer.get(k)?.value,\n },\n );\n }\n }\n }\n\n getCacheKey<K extends CacheKey<string, any, any>>(\n type: K[\"type\"],\n ...args: K[\"__cacheKey\"][\"args\"]\n ): K {\n return this.#refCounts.register(this.#cacheKeys.get(type, ...args));\n }\n\n peekSubject = <KEY extends CacheKey<string, any, any>>(\n cacheKey: KEY,\n ):\n | BehaviorSubject<SubjectPayload<KEY>>\n | undefined =>\n {\n return this.#cacheKeyToSubject.get(cacheKey);\n };\n\n getSubject = <KEY extends CacheKey<string, any, any>>(\n cacheKey: KEY,\n ): BehaviorSubject<SubjectPayload<KEY>> => {\n let subject = this.#cacheKeyToSubject.get(cacheKey);\n if (!subject) {\n const initialValue: Entry<KEY> = this.#topLayer.get(cacheKey)\n ?? createInitEntry(cacheKey);\n\n subject = new BehaviorSubject({\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...initialValue,\n isOptimistic:\n initialValue.value !== this.#truthLayer.get(cacheKey)?.value,\n });\n this.#cacheKeyToSubject.set(cacheKey, subject);\n }\n\n return subject;\n };\n\n public observeObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: ObserveObjectOptions<T>,\n subFn: SubFn<ObjectPayload>,\n ): Unsubscribable {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const query = this.getObjectQuery(apiName, pk);\n this.#refCounts.retain(query.cacheKey);\n\n if (options.mode !== \"offline\") {\n query.revalidate(options.mode === \"force\")\n .catch(e => {\n // we don't want observeObject() to return a promise,\n // so we settle for logging an error here instead of\n // dropping it on the floor.\n if (this.logger) {\n this.logger.error(\"Unhandled error in observeObject\", e);\n } else {\n throw e;\n }\n });\n }\n const sub = query.subscribe({ next: subFn });\n\n return {\n unsubscribe: () => {\n sub.unsubscribe();\n this.#refCounts.release(query.cacheKey);\n },\n };\n }\n\n public observeList<T extends ObjectTypeDefinition>(\n options: ObserveListOptions<T>,\n subFn: SubFn<ListPayload>,\n ): Unsubscribable {\n // the ListQuery represents the shared state of the list\n const query = this.getListQuery(\n options.objectType,\n options.where ?? {},\n options.orderBy ?? {},\n options,\n );\n this.#refCounts.retain(query.cacheKey);\n\n if (options.mode !== \"offline\") {\n void query.revalidate(options.mode === \"force\");\n }\n const sub = query.subscribe({ next: subFn });\n\n if (options.streamUpdates) {\n const miniDef = {\n type: \"object\",\n apiName: (typeof options.objectType === \"string\"\n ? options.objectType\n : options.objectType.apiName),\n } as T;\n let objectSet: ObjectSet<T> = this.client(miniDef);\n if (options.where) {\n objectSet = objectSet.where(options.where ?? {});\n }\n const store = this;\n const websocketSubscription = objectSet.subscribe({\n onChange({ object, state }) {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.debug(\n { methodName: \"onError\" },\n \"updates\",\n state,\n object,\n );\n }\n\n const cacheKey = store.getCacheKey<ObjectCacheKey>(\n \"object\",\n object.$objectType,\n object.$primaryKey,\n );\n const type = store.#peekQuery(cacheKey) == null\n ? \"addedObjects\"\n : \"modifiedObjects\";\n\n const changes = createChangedObjects();\n changes[type].set(\n object.$objectType,\n object,\n );\n\n if (state === \"ADDED_OR_UPDATED\") {\n // todo, can we do the update without\n // the extra invalidation? maybe a flag to updateObject\n store.updateObject(\n object.$objectType,\n object,\n );\n store.maybeRevalidateLists(changes).catch(err => {\n // eslint-disable-next-line no-console\n console.error(\"Unhandled error in maybeRevalidateLists\", err);\n });\n } else if (state === \"REMOVED\") {\n const changes = createChangedObjects();\n store.batch({ changes }, (batch) => {\n const existing = batch.read(query.cacheKey);\n const cacheKeyToRemove = store.getCacheKey<ObjectCacheKey>(\n \"object\",\n object.$objectType,\n object.$primaryKey,\n );\n if (existing?.status === \"loaded\") {\n const newObjects = existing.value?.data.filter(\n (o) => o !== cacheKeyToRemove,\n );\n if (newObjects?.length !== existing.value?.data.length) {\n batch.changes.modifiedLists.add(query.cacheKey);\n batch.write(\n query.cacheKey,\n { data: newObjects ?? [] },\n \"loaded\",\n );\n // Should there be an else for this case? Do we need to invalidate\n // the paging tokens we may have?\n }\n } else {\n // There may be a tiny race here where OSW tells us the object has\n // been removed but an outstanding invalidation of this query is\n // about to return. In this case, its possible that we remove this item\n // from the list and then the returned list load re-adds it.\n // To avoid this, we will just force reload the query to be sure\n // we don't leave things in a bad state.\n\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n \"Removing an object from an object list that is in the middle of being loaded.\",\n existing,\n );\n }\n\n query.revalidate(/* force */ true).catch((e) => {\n if (store.logger) {\n store.logger?.error(\n \"Uncaught error while revalidating list\",\n e,\n );\n } else {\n // eslint-disable-next-line no-console\n console.error(\n \"Uncaught error while revalidating list\",\n e,\n );\n }\n });\n }\n });\n }\n },\n\n onError(errors) {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onError\" },\n \"subscription errors\",\n errors,\n );\n }\n },\n\n onOutOfDate() {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onOutOfDate\" },\n );\n }\n },\n\n onSuccessfulSubscription() {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onSuccessfulSubscription\" },\n );\n }\n },\n });\n\n sub.add(() => {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"observeList\" },\n \"Unsubscribing from websocket\",\n );\n }\n\n websocketSubscription.unsubscribe();\n });\n }\n\n return {\n unsubscribe: () => {\n sub.unsubscribe();\n this.#refCounts.release(query.cacheKey);\n },\n };\n }\n\n #peekQuery<K extends CacheKey<string, any, any>>(\n cacheKey: K,\n ): K[\"__cacheKey\"][\"query\"] | undefined {\n return this.#queries.get(cacheKey) as K[\"__cacheKey\"][\"query\"] | undefined;\n }\n\n #getQuery<K extends CacheKey>(\n cacheKey: K,\n createQuery: () => K[\"__cacheKey\"][\"query\"],\n ): K[\"__cacheKey\"][\"query\"] {\n let query = this.#peekQuery(cacheKey);\n if (!query) {\n query = createQuery();\n this.#queries.set(cacheKey, query);\n }\n return query;\n }\n\n public getListQuery<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n where: WhereClause<T>,\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n opts: ListQueryOptions,\n ): ListQuery {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const canonWhere = this.whereCanonicalizer.canonicalize(where);\n const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy);\n const listCacheKey = this.getCacheKey<ListCacheKey>(\n \"list\",\n apiName,\n canonWhere,\n canonOrderBy,\n );\n\n return this.#getQuery(listCacheKey, () => {\n return new ListQuery(\n this,\n this.getSubject(listCacheKey),\n apiName,\n canonWhere,\n canonOrderBy,\n listCacheKey,\n opts,\n );\n });\n }\n\n public getObjectQuery<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n ): ObjectQuery {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const objectCacheKey = this.getCacheKey<ObjectCacheKey>(\n \"object\",\n apiName,\n pk,\n );\n\n return this.#getQuery(objectCacheKey, () =>\n new ObjectQuery(\n this,\n this.getSubject(objectCacheKey),\n apiName,\n pk,\n objectCacheKey,\n { dedupeInterval: 0 },\n ));\n }\n\n public getObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: string | number,\n ): Osdk.Instance<T> | undefined {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const objectCacheKey = this.getCacheKey<ObjectCacheKey>(\n \"object\",\n apiName,\n pk,\n );\n const objEntry = this.#topLayer.get(objectCacheKey);\n return objEntry?.value as Osdk.Instance<T> | undefined;\n }\n\n batch = <X>(\n { optimisticId, changes = createChangedObjects() }: {\n optimisticId?: OptimisticId;\n changes?: Changes;\n },\n batchFn: (batchContext: BatchContext) => X,\n ): {\n batchResult: BatchContext;\n retVal: X;\n } => {\n invariant(\n optimisticId === undefined || !!optimisticId,\n \"optimistic must be undefined or not falsy\",\n );\n\n let needsLayer = optimisticId !== undefined;\n const batchContext: BatchContext = {\n changes,\n createLayerIfNeeded: () => {\n if (needsLayer) {\n this.#topLayer = this.#topLayer.addLayer(optimisticId);\n needsLayer = false;\n }\n },\n optimisticWrite: !!optimisticId,\n write: (cacheKey, value, status) => {\n const oldTopValue = this.#topLayer.get(cacheKey);\n\n if (optimisticId) batchContext.createLayerIfNeeded();\n\n const writeLayer = optimisticId\n ? this.#topLayer\n : this.#truthLayer;\n const newValue = new Entry(\n cacheKey,\n value,\n Date.now(),\n status,\n );\n\n writeLayer.set(cacheKey, newValue);\n\n const newTopValue = this.#topLayer.get(cacheKey);\n\n if (oldTopValue !== newTopValue) {\n this.#cacheKeyToSubject.get(cacheKey)?.next({\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...newValue,\n isOptimistic:\n newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value,\n });\n }\n\n return newValue;\n },\n read: (cacheKey) => {\n return optimisticId\n ? this.#topLayer.get(cacheKey)\n : this.#truthLayer.get(cacheKey);\n },\n };\n\n const retVal = batchFn(batchContext);\n void this.maybeUpdateLists(changes, optimisticId);\n\n return { batchResult: batchContext, retVal: retVal };\n };\n\n public invalidateObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n ): Promise<unknown> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n // inevitably we will want an internal version of this and a \"public\" one\n // so we can avoid extra requests\n\n const query = this.getObjectQuery(apiName, pk);\n\n return query.revalidate(true);\n\n // potentially trigger updates of the lists that included this object?\n // TODO\n // could we detect that a list WOULD include it?\n }\n\n public async maybeRevalidateLists(\n changes: Changes,\n ): Promise<void> {\n if (process.env.NODE_ENV !== \"production\") {\n // todo\n this.logger?.trace(\n { methodName: \"maybeRevalidateList\" },\n DEBUG_ONLY__changesToString(changes),\n );\n }\n\n try {\n const promises: Array<Promise<unknown>> = [];\n for (const [cacheKey, v] of this.#truthLayer.entries()) {\n if (isListCacheKey(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.maybeUpdateAndRevalidate(\n changes,\n undefined,\n );\n if (promise) promises.push(promise);\n }\n }\n await Promise.all(promises);\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n // todo\n this.logger?.trace(\n { methodName: \"maybeRevalidateList\" },\n \"in finally\",\n DEBUG_ONLY__changesToString(changes),\n );\n }\n }\n }\n\n public maybeUpdateLists(\n changes: Changes,\n optimisticId: OptimisticId | undefined,\n ): Promise<(void | undefined)[]> {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.trace(\n { methodName: \"maybeUpdateLists\" },\n DEBUG_ONLY__changesToString(changes),\n { optimisticId },\n );\n }\n if (changes.addedObjects.size === 0 && changes.modifiedObjects.size === 0) {\n return Promise.resolve([]);\n }\n const promises = [];\n for (const cacheKey of this.#queries.keys()) {\n if (isListCacheKey(cacheKey)) {\n if (!changes.modifiedLists.has(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.maybeUpdateAndRevalidate(\n changes,\n optimisticId,\n );\n if (promise) promises.push(promise);\n }\n }\n }\n\n return Promise.all(promises);\n }\n\n /**\n * @param apiName\n * @param changes The changes we know about / to update\n * @returns\n */\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n changes: Changes | undefined,\n ): Promise<unknown[]> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.info(\n { methodName: \"invalidateObjectType\" },\n changes ? DEBUG_ONLY__changesToString(changes) : void 0,\n );\n }\n\n const promises: Array<Promise<unknown>> = [];\n\n for (const [cacheKey, v] of this.#truthLayer.entries()) {\n if (isListCacheKey(cacheKey, apiName)) {\n if (!changes || !changes.modifiedLists.has(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.revalidate(true);\n\n if (promise) {\n promises.push(promise);\n changes?.modifiedLists.add(cacheKey);\n }\n }\n }\n }\n\n return Promise.all(promises);\n }\n\n public invalidateList<T extends ObjectTypeDefinition>(\n { objectType, where, orderBy }: {\n objectType: T[\"apiName\"] | T;\n where?: WhereClause<T>;\n orderBy?: OrderBy<T>;\n },\n ): void {\n if (typeof objectType !== \"string\") {\n objectType = objectType.apiName;\n }\n\n where = this.whereCanonicalizer.canonicalize(where ?? {});\n orderBy = this.orderByCanonicalizer.canonicalize(orderBy ?? {});\n\n const cacheKey = this.getCacheKey<ListCacheKey>(\n \"list\",\n objectType,\n where as Canonical<WhereClause<T>>,\n orderBy as Canonical<OrderBy<T>>,\n );\n\n void this.#peekQuery(cacheKey)?.revalidate(true);\n }\n\n public updateObject(\n apiName: string | ObjectTypeDefinition,\n value: Osdk.Instance<ObjectTypeDefinition>,\n { optimisticId }: UpdateOptions = {},\n ): Osdk.Instance<ObjectTypeDefinition> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const query = this.getObjectQuery(apiName, value.$primaryKey);\n\n return this.batch({ optimisticId }, (batch) => {\n return query.writeToStore(value, \"loaded\", batch);\n }).retVal.value!;\n }\n\n public updateObjects(\n values: Array<Osdk.Instance<ObjectTypeDefinition>>,\n batch: BatchContext,\n ): ObjectCacheKey[] {\n // update the cache for any object that has changed\n // and save the mapped values to return\n return values.map(v => {\n return this.getObjectQuery(\n v.$apiName,\n v.$primaryKey as string | number,\n )\n .writeToStore(v, \"loaded\", batch).cacheKey;\n });\n }\n\n /**\n * Updates the internal state of a list and will create a new internal query if needed.\n *\n * Helper method only for tests right now. May be removed later.\n *\n * @param apiName\n * @param where\n * @param orderBy\n * @param objects\n * @param param4\n * @param opts\n */\n public updateList<T extends ObjectTypeDefinition>(\n {\n objectType: apiName,\n where,\n orderBy,\n }: {\n objectType: T[\"apiName\"] | T;\n where: WhereClause<T>;\n orderBy: OrderBy<T>;\n },\n objects: Osdk.Instance<T>[],\n { optimisticId }: UpdateOptions = {},\n opts: ListQueryOptions = { dedupeInterval: 0 },\n ): void {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.info(\n { methodName: \"updateList\" },\n \"\",\n { optimisticId },\n );\n }\n\n const query = this.getListQuery(apiName, where ?? {}, orderBy ?? {}, opts);\n\n this.batch({ optimisticId }, (batch) => {\n const objectCacheKeys = this.updateObjects(objects, batch);\n query.updateList(objectCacheKeys, false, \"loaded\", batch);\n });\n }\n\n retain(cacheKey: CacheKey<string, any, any>): void {\n this.#refCounts.retain(cacheKey);\n }\n\n release(cacheKey: CacheKey<string, any, any>): void {\n this.#refCounts.release(cacheKey);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Store.js","names":["BehaviorSubject","invariant","additionalContext","DEBUG_REFCOUNTS","ActionApplication","CacheKeys","createChangedObjects","DEBUG_ONLY__changesToString","Entry","Layer","isListCacheKey","ListQuery","ObjectQuery","RefCounts","WeakMapWithEntries","WhereClauseCanonicalizer","createInitEntry","cacheKey","status","value","undefined","lastUpdated","OrderByCanonicalizer","map","Map","canonicalize","orderBy","has","JSON","stringify","get","set","Store","whereCanonicalizer","orderByCanonicalizer","truthLayer","topLayer","queries","cacheKeyToSubject","WeakMap","cacheKeys","refCounts","k","cleanupCacheKey","finalizationRegistry","constructor","client","logger","child","msgPrefix","cacheKeyType","type","otherKeys","console","log","register","setInterval","gc","FinalizationRegistry","cleanupCallback","e","error","key","subject","peekSubject","closed","observed","remove","process","env","NODE_ENV","complete","delete","dispose","applyAction","action","args","opts","removeLayer","layerId","currentLayer","parentLayer","v","entries","oldEntry","currentEntry","next","isOptimistic","getCacheKey","getSubject","initialValue","observeObject","apiName","pk","options","subFn","query","getObjectQuery","retain","mode","revalidate","catch","sub","subscribe","unsubscribe","release","observeList","getListQuery","objectType","where","streamUpdates","miniDef","objectSet","store","websocketSubscription","onChange","object","state","debug","methodName","$objectType","$primaryKey","peekQuery","changes","updateObject","maybeRevalidateLists","err","batch","existing","read","cacheKeyToRemove","newObjects","data","filter","o","length","modifiedLists","add","write","info","onError","errors","onOutOfDate","onSuccessfulSubscription","#peekQuery","getQuery","#getQuery","createQuery","canonWhere","canonOrderBy","listCacheKey","objectCacheKey","dedupeInterval","getObject","objEntry","optimisticId","batchFn","needsLayer","batchContext","createLayerIfNeeded","addLayer","optimisticWrite","oldTopValue","writeLayer","newValue","Date","now","newTopValue","retVal","maybeUpdateLists","batchResult","invalidateObject","trace","promises","promise","maybeUpdateAndRevalidate","push","Promise","all","addedObjects","size","modifiedObjects","resolve","keys","invalidateObjectType","invalidateList","writeToStore","updateObjects","values","$apiName","updateList","objects","objectCacheKeys"],"sources":["Store.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ActionDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n WhereClause,\n} from \"@osdk/api\";\nimport { BehaviorSubject } from \"rxjs\";\nimport invariant from \"tiny-invariant\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { additionalContext, type Client } from \"../../Client.js\";\nimport type { Logger } from \"../../Logger.js\";\nimport { DEBUG_REFCOUNTS } from \"../DebugFlags.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type {\n ObserveListOptions,\n ObserveObjectOptions,\n OrderBy,\n Unsubscribable,\n} from \"../ObservableClient.js\";\nimport type { OptimisticBuilder } from \"../OptimisticBuilder.js\";\nimport type { SubFn } from \"../types.js\";\nimport { ActionApplication } from \"./ActionApplication.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { CacheKeys } from \"./CacheKeys.js\";\nimport type { Canonical } from \"./Canonical.js\";\nimport {\n type Changes,\n createChangedObjects,\n DEBUG_ONLY__changesToString,\n} from \"./ChangedObjects.js\";\nimport { Entry, Layer } from \"./Layer.js\";\nimport type { ListCacheKey, ListQueryOptions } from \"./ListQuery.js\";\nimport { isListCacheKey, ListQuery } from \"./ListQuery.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { ObjectQuery } from \"./ObjectQuery.js\";\nimport { type OptimisticId } from \"./OptimisticId.js\";\nimport type { Query } from \"./Query.js\";\nimport { RefCounts } from \"./RefCounts.js\";\nimport { WeakMapWithEntries } from \"./WeakMapWithEntries.js\";\nimport { WhereClauseCanonicalizer } from \"./WhereClauseCanonicalizer.js\";\n\n/*\n Work still to do:\n - [x] testing for optimistic writes\n - [x] automatic invalidation of actions\n - [x] automatic optimistic list updates\n - [x] useOsdkObjects\n - [x] imply offline for objects passed directly\n - [x] websocket subscriptions\n - [ ] links\n - [x] add pagination\n - [ ] sub-selection support\n - [ ] interfaces\n - [ ] setup defaults\n - [ ] reduce updates in react\n*/\n\nexport interface SubjectPayload<KEY extends CacheKey> extends Entry<KEY> {\n isOptimistic: boolean;\n}\n\nexport interface BatchContext {\n changes: Changes;\n createLayerIfNeeded: () => void;\n optimisticWrite: boolean;\n\n write: <K extends CacheKey<string, any, any>>(\n k: K,\n v: Entry<K>[\"value\"],\n status: Entry<K>[\"status\"],\n ) => Entry<K>;\n\n read: <K extends CacheKey<string, any, any>>(\n k: K,\n ) => Entry<K> | undefined;\n}\n\ninterface UpdateOptions {\n optimisticId?: OptimisticId;\n}\n\nexport namespace Store {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nfunction createInitEntry(cacheKey: CacheKey): Entry<any> {\n return {\n cacheKey,\n status: \"init\",\n value: undefined,\n lastUpdated: 0,\n };\n}\n\n/*\n Notes:\n - Subjects are one per type per store (by cache key)\n - Data is one per layer per cache key\n*/\n\nexport class OrderByCanonicalizer {\n // crappy version\n #map = new Map<string, Record<string, \"asc\" | \"desc\" | undefined>>();\n\n canonicalize: <T>(\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n ) => Canonical<Record<string, \"asc\" | \"desc\" | undefined>> = (orderBy) => {\n if (this.#map.has(JSON.stringify(orderBy))) {\n return this.#map.get(JSON.stringify(orderBy))! as Canonical<\n Record<string, \"asc\" | \"desc\" | undefined>\n >;\n } else {\n this.#map.set(JSON.stringify(orderBy), orderBy);\n return orderBy as Canonical<Record<string, \"asc\" | \"desc\" | undefined>>;\n }\n };\n}\n\nexport class Store {\n whereCanonicalizer: WhereClauseCanonicalizer = new WhereClauseCanonicalizer();\n orderByCanonicalizer: OrderByCanonicalizer = new OrderByCanonicalizer();\n #truthLayer: Layer = new Layer(undefined, undefined);\n #topLayer: Layer;\n client: Client;\n\n /** @internal */\n logger?: Logger;\n\n #queries: WeakMapWithEntries<\n CacheKey<string, any, any>,\n Query<any, any, any>\n > = new WeakMapWithEntries();\n\n #cacheKeyToSubject = new WeakMap<\n CacheKey<string, any, any>,\n BehaviorSubject<SubjectPayload<any>>\n >();\n #cacheKeys: CacheKeys;\n\n #refCounts = new RefCounts<CacheKey>(\n DEBUG_REFCOUNTS ? 15_000 : 60_000,\n (k) => this.#cleanupCacheKey(k),\n );\n\n #finalizationRegistry: FinalizationRegistry<() => void>;\n\n constructor(client: Client) {\n this.client = client;\n this.logger = client[additionalContext].logger?.child({}, {\n msgPrefix: \"Store\",\n });\n this.#topLayer = this.#truthLayer;\n this.#cacheKeys = new CacheKeys(\n this.whereCanonicalizer,\n this.orderByCanonicalizer,\n (k) => {\n if (DEBUG_REFCOUNTS) {\n const cacheKeyType = k.type;\n const otherKeys = k.otherKeys;\n // eslint-disable-next-line no-console\n console.log(\n `CacheKeys.onCreate(${cacheKeyType}, ${JSON.stringify(otherKeys)})`,\n );\n\n this.#finalizationRegistry.register(k, () => {\n // eslint-disable-next-line no-console\n console.log(\n `CacheKey Finalization(${cacheKeyType}, ${\n JSON.stringify(otherKeys)\n })`,\n );\n });\n }\n\n this.#refCounts.register(k);\n },\n );\n\n setInterval(() => {\n this.#refCounts.gc();\n }, 1000);\n\n this.#finalizationRegistry = new FinalizationRegistry<() => void>(\n (cleanupCallback) => {\n try {\n cleanupCallback();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\n \"Caught an error while running a finalization callback\",\n e,\n );\n }\n },\n );\n }\n\n /**\n * Called after a key is no longer retained and the timeout has elapsed\n * @param key\n */\n #cleanupCacheKey = (key: CacheKey<string, any, any>) => {\n const subject = this.peekSubject(key);\n\n if (DEBUG_REFCOUNTS) {\n // eslint-disable-next-line no-console\n console.log(\n `CacheKey cleaning up (${\n JSON.stringify({\n closed: subject?.closed,\n observed: subject?.observed,\n })\n })`,\n JSON.stringify([key.type, ...key.otherKeys], null, 2),\n );\n }\n this.#cacheKeys.remove(key);\n if (process.env.NODE_ENV !== \"production\") {\n invariant(subject);\n }\n\n if (subject) {\n subject.complete();\n this.#cacheKeyToSubject.delete(key);\n }\n\n this.#queries.get(key)?.dispose();\n this.#queries.delete(key);\n };\n\n applyAction: <Q extends ActionDefinition<any>>(\n action: Q,\n args: Parameters<ActionSignatureFromDef<Q>[\"applyAction\"]>[0],\n opts?: Store.ApplyActionOptions,\n ) => Promise<unknown> = (action, args, opts) => {\n return new ActionApplication(this).applyAction(action, args, opts);\n };\n\n removeLayer(layerId: OptimisticId): void {\n invariant(\n layerId != null,\n \"undefined is the reserved layerId for the truth layer\",\n );\n // 1. collect all cache keys for a given layerId\n let currentLayer: Layer | undefined = this.#topLayer;\n const cacheKeys = new Map<CacheKey<string, any, any>, Entry<any>>();\n while (currentLayer != null && currentLayer.parentLayer != null) {\n if (currentLayer.layerId === layerId) {\n for (const [k, v] of currentLayer.entries()) {\n if (cacheKeys.has(k)) continue;\n cacheKeys.set(k, v);\n }\n }\n\n currentLayer = currentLayer.parentLayer;\n }\n\n // 2. remove the layers from the chain\n this.#topLayer = this.#topLayer.removeLayer(layerId);\n\n // 3. check each cache key to see if it is different in the new chain\n for (const [k, oldEntry] of cacheKeys) {\n const currentEntry = this.#topLayer.get(k);\n\n // 4. if different, update the subject\n if (oldEntry !== currentEntry) {\n const x = currentEntry ?? createInitEntry(k);\n // We are going to be pretty lazy here and just re-emit the value.\n // In the future it may benefit us to deep equal check her but I think\n // the subjects are effectively doing this anyway.\n this.peekSubject(k)?.next(\n {\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...(currentEntry ?? createInitEntry(k)),\n isOptimistic:\n currentEntry?.value !== this.#truthLayer.get(k)?.value,\n },\n );\n }\n }\n }\n\n getCacheKey<K extends CacheKey<string, any, any>>(\n type: K[\"type\"],\n ...args: K[\"__cacheKey\"][\"args\"]\n ): K {\n return this.#refCounts.register(this.#cacheKeys.get(type, ...args));\n }\n\n peekSubject = <KEY extends CacheKey<string, any, any>>(\n cacheKey: KEY,\n ):\n | BehaviorSubject<SubjectPayload<KEY>>\n | undefined =>\n {\n return this.#cacheKeyToSubject.get(cacheKey);\n };\n\n getSubject = <KEY extends CacheKey<string, any, any>>(\n cacheKey: KEY,\n ): BehaviorSubject<SubjectPayload<KEY>> => {\n let subject = this.#cacheKeyToSubject.get(cacheKey);\n if (!subject) {\n const initialValue: Entry<KEY> = this.#topLayer.get(cacheKey)\n ?? createInitEntry(cacheKey);\n\n subject = new BehaviorSubject({\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...initialValue,\n isOptimistic:\n initialValue.value !== this.#truthLayer.get(cacheKey)?.value,\n });\n this.#cacheKeyToSubject.set(cacheKey, subject);\n }\n\n return subject;\n };\n\n public observeObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: ObserveObjectOptions<T>,\n subFn: SubFn<ObjectPayload>,\n ): Unsubscribable {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const query = this.getObjectQuery(apiName, pk);\n this.#refCounts.retain(query.cacheKey);\n\n if (options.mode !== \"offline\") {\n query.revalidate(options.mode === \"force\")\n .catch(e => {\n // we don't want observeObject() to return a promise,\n // so we settle for logging an error here instead of\n // dropping it on the floor.\n if (this.logger) {\n this.logger.error(\"Unhandled error in observeObject\", e);\n } else {\n throw e;\n }\n });\n }\n const sub = query.subscribe({ next: subFn });\n\n return {\n unsubscribe: () => {\n sub.unsubscribe();\n this.#refCounts.release(query.cacheKey);\n },\n };\n }\n\n public observeList<T extends ObjectTypeDefinition>(\n options: ObserveListOptions<T>,\n subFn: SubFn<ListPayload>,\n ): Unsubscribable {\n // the ListQuery represents the shared state of the list\n const query = this.getListQuery(\n options.objectType,\n options.where ?? {},\n options.orderBy ?? {},\n options,\n );\n this.#refCounts.retain(query.cacheKey);\n\n if (options.mode !== \"offline\") {\n void query.revalidate(options.mode === \"force\");\n }\n const sub = query.subscribe({ next: subFn });\n\n if (options.streamUpdates) {\n const miniDef = {\n type: \"object\",\n apiName: (typeof options.objectType === \"string\"\n ? options.objectType\n : options.objectType.apiName),\n } as T;\n let objectSet: ObjectSet<T> = this.client(miniDef);\n if (options.where) {\n objectSet = objectSet.where(options.where ?? {});\n }\n const store = this;\n const websocketSubscription = objectSet.subscribe({\n onChange({ object, state }) {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.debug(\n { methodName: \"onError\" },\n \"updates\",\n state,\n object,\n );\n }\n\n const cacheKey = store.getCacheKey<ObjectCacheKey>(\n \"object\",\n object.$objectType,\n object.$primaryKey,\n );\n const type = store.#peekQuery(cacheKey) == null\n ? \"addedObjects\"\n : \"modifiedObjects\";\n\n const changes = createChangedObjects();\n changes[type].set(\n object.$objectType,\n object,\n );\n\n if (state === \"ADDED_OR_UPDATED\") {\n // todo, can we do the update without\n // the extra invalidation? maybe a flag to updateObject\n store.updateObject(\n object.$objectType,\n object,\n );\n store.maybeRevalidateLists(changes).catch(err => {\n // eslint-disable-next-line no-console\n console.error(\"Unhandled error in maybeRevalidateLists\", err);\n });\n } else if (state === \"REMOVED\") {\n const changes = createChangedObjects();\n store.batch({ changes }, (batch) => {\n const existing = batch.read(query.cacheKey);\n const cacheKeyToRemove = store.getCacheKey<ObjectCacheKey>(\n \"object\",\n object.$objectType,\n object.$primaryKey,\n );\n if (existing?.status === \"loaded\") {\n const newObjects = existing.value?.data.filter(\n (o) => o !== cacheKeyToRemove,\n );\n if (newObjects?.length !== existing.value?.data.length) {\n batch.changes.modifiedLists.add(query.cacheKey);\n batch.write(\n query.cacheKey,\n { data: newObjects ?? [] },\n \"loaded\",\n );\n // Should there be an else for this case? Do we need to invalidate\n // the paging tokens we may have?\n }\n } else {\n // There may be a tiny race here where OSW tells us the object has\n // been removed but an outstanding invalidation of this query is\n // about to return. In this case, its possible that we remove this item\n // from the list and then the returned list load re-adds it.\n // To avoid this, we will just force reload the query to be sure\n // we don't leave things in a bad state.\n\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n \"Removing an object from an object list that is in the middle of being loaded.\",\n existing,\n );\n }\n\n query.revalidate(/* force */ true).catch((e) => {\n if (store.logger) {\n store.logger?.error(\n \"Uncaught error while revalidating list\",\n e,\n );\n } else {\n // eslint-disable-next-line no-console\n console.error(\n \"Uncaught error while revalidating list\",\n e,\n );\n }\n });\n }\n });\n }\n },\n\n onError(errors) {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onError\" },\n \"subscription errors\",\n errors,\n );\n }\n },\n\n onOutOfDate() {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onOutOfDate\" },\n );\n }\n },\n\n onSuccessfulSubscription() {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"onSuccessfulSubscription\" },\n );\n }\n },\n });\n\n sub.add(() => {\n if (process.env.NODE_ENV !== \"production\") {\n store.logger?.info(\n { methodName: \"observeList\" },\n \"Unsubscribing from websocket\",\n );\n }\n\n websocketSubscription.unsubscribe();\n });\n }\n\n return {\n unsubscribe: () => {\n sub.unsubscribe();\n this.#refCounts.release(query.cacheKey);\n },\n };\n }\n\n #peekQuery<K extends CacheKey<string, any, any>>(\n cacheKey: K,\n ): K[\"__cacheKey\"][\"query\"] | undefined {\n return this.#queries.get(cacheKey) as K[\"__cacheKey\"][\"query\"] | undefined;\n }\n\n #getQuery<K extends CacheKey>(\n cacheKey: K,\n createQuery: () => K[\"__cacheKey\"][\"query\"],\n ): K[\"__cacheKey\"][\"query\"] {\n let query = this.#peekQuery(cacheKey);\n if (!query) {\n query = createQuery();\n this.#queries.set(cacheKey, query);\n }\n return query;\n }\n\n public getListQuery<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n where: WhereClause<T>,\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>,\n opts: ListQueryOptions,\n ): ListQuery {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const canonWhere = this.whereCanonicalizer.canonicalize(where);\n const canonOrderBy = this.orderByCanonicalizer.canonicalize(orderBy);\n const listCacheKey = this.getCacheKey<ListCacheKey>(\n \"list\",\n apiName,\n canonWhere,\n canonOrderBy,\n );\n\n return this.#getQuery(listCacheKey, () => {\n return new ListQuery(\n this,\n this.getSubject(listCacheKey),\n apiName,\n canonWhere,\n canonOrderBy,\n listCacheKey,\n opts,\n );\n });\n }\n\n public getObjectQuery<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n ): ObjectQuery {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const objectCacheKey = this.getCacheKey<ObjectCacheKey>(\n \"object\",\n apiName,\n pk,\n );\n\n return this.#getQuery(objectCacheKey, () =>\n new ObjectQuery(\n this,\n this.getSubject(objectCacheKey),\n apiName,\n pk,\n objectCacheKey,\n { dedupeInterval: 0 },\n ));\n }\n\n public getObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: string | number,\n ): Osdk.Instance<T> | undefined {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const objectCacheKey = this.getCacheKey<ObjectCacheKey>(\n \"object\",\n apiName,\n pk,\n );\n const objEntry = this.#topLayer.get(objectCacheKey);\n return objEntry?.value as Osdk.Instance<T> | undefined;\n }\n\n batch = <X>(\n { optimisticId, changes = createChangedObjects() }: {\n optimisticId?: OptimisticId;\n changes?: Changes;\n },\n batchFn: (batchContext: BatchContext) => X,\n ): {\n batchResult: BatchContext;\n retVal: X;\n } => {\n invariant(\n optimisticId === undefined || !!optimisticId,\n \"optimistic must be undefined or not falsy\",\n );\n\n let needsLayer = optimisticId !== undefined;\n const batchContext: BatchContext = {\n changes,\n createLayerIfNeeded: () => {\n if (needsLayer) {\n this.#topLayer = this.#topLayer.addLayer(optimisticId);\n needsLayer = false;\n }\n },\n optimisticWrite: !!optimisticId,\n write: (cacheKey, value, status) => {\n const oldTopValue = this.#topLayer.get(cacheKey);\n\n if (optimisticId) batchContext.createLayerIfNeeded();\n\n const writeLayer = optimisticId\n ? this.#topLayer\n : this.#truthLayer;\n const newValue = new Entry(\n cacheKey,\n value,\n Date.now(),\n status,\n );\n\n writeLayer.set(cacheKey, newValue);\n\n const newTopValue = this.#topLayer.get(cacheKey);\n\n if (oldTopValue !== newTopValue) {\n this.#cacheKeyToSubject.get(cacheKey)?.next({\n // eslint-disable-next-line @typescript-eslint/no-misused-spread\n ...newValue,\n isOptimistic:\n newTopValue?.value !== this.#truthLayer.get(cacheKey)?.value,\n });\n }\n\n return newValue;\n },\n read: (cacheKey) => {\n return optimisticId\n ? this.#topLayer.get(cacheKey)\n : this.#truthLayer.get(cacheKey);\n },\n };\n\n const retVal = batchFn(batchContext);\n void this.maybeUpdateLists(changes, optimisticId);\n\n return { batchResult: batchContext, retVal: retVal };\n };\n\n public invalidateObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n ): Promise<unknown> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n // inevitably we will want an internal version of this and a \"public\" one\n // so we can avoid extra requests\n\n const query = this.getObjectQuery(apiName, pk);\n\n return query.revalidate(true);\n\n // potentially trigger updates of the lists that included this object?\n // TODO\n // could we detect that a list WOULD include it?\n }\n\n public async maybeRevalidateLists(\n changes: Changes,\n ): Promise<void> {\n if (process.env.NODE_ENV !== \"production\") {\n // todo\n this.logger?.trace(\n { methodName: \"maybeRevalidateList\" },\n DEBUG_ONLY__changesToString(changes),\n );\n }\n\n try {\n const promises: Array<Promise<unknown>> = [];\n for (const [cacheKey, v] of this.#truthLayer.entries()) {\n if (isListCacheKey(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.maybeUpdateAndRevalidate(\n changes,\n undefined,\n );\n if (promise) promises.push(promise);\n }\n }\n await Promise.all(promises);\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n // todo\n this.logger?.trace(\n { methodName: \"maybeRevalidateList\" },\n \"in finally\",\n DEBUG_ONLY__changesToString(changes),\n );\n }\n }\n }\n\n public maybeUpdateLists(\n changes: Changes,\n optimisticId: OptimisticId | undefined,\n ): Promise<(void | undefined)[]> {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.trace(\n { methodName: \"maybeUpdateLists\" },\n DEBUG_ONLY__changesToString(changes),\n { optimisticId },\n );\n }\n if (changes.addedObjects.size === 0 && changes.modifiedObjects.size === 0) {\n return Promise.resolve([]);\n }\n const promises = [];\n for (const cacheKey of this.#queries.keys()) {\n if (isListCacheKey(cacheKey)) {\n if (!changes.modifiedLists.has(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.maybeUpdateAndRevalidate(\n changes,\n optimisticId,\n );\n if (promise) promises.push(promise);\n }\n }\n }\n\n return Promise.all(promises);\n }\n\n /**\n * @param apiName\n * @param changes The changes we know about / to update\n * @returns\n */\n public invalidateObjectType<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n changes: Changes | undefined,\n ): Promise<unknown[]> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.info(\n { methodName: \"invalidateObjectType\" },\n changes ? DEBUG_ONLY__changesToString(changes) : void 0,\n );\n }\n\n const promises: Array<Promise<unknown>> = [];\n\n for (const [cacheKey, v] of this.#truthLayer.entries()) {\n if (isListCacheKey(cacheKey, apiName)) {\n if (!changes || !changes.modifiedLists.has(cacheKey)) {\n const promise = this.#peekQuery(cacheKey)?.revalidate(true);\n\n if (promise) {\n promises.push(promise);\n changes?.modifiedLists.add(cacheKey);\n }\n }\n }\n }\n\n return Promise.all(promises);\n }\n\n public invalidateList<T extends ObjectTypeDefinition>(\n { objectType, where, orderBy }: {\n objectType: T[\"apiName\"] | T;\n where?: WhereClause<T>;\n orderBy?: OrderBy<T>;\n },\n ): void {\n if (typeof objectType !== \"string\") {\n objectType = objectType.apiName;\n }\n\n where = this.whereCanonicalizer.canonicalize(where ?? {});\n orderBy = this.orderByCanonicalizer.canonicalize(orderBy ?? {});\n\n const cacheKey = this.getCacheKey<ListCacheKey>(\n \"list\",\n objectType,\n where as Canonical<WhereClause<T>>,\n orderBy as Canonical<OrderBy<T>>,\n );\n\n void this.#peekQuery(cacheKey)?.revalidate(true);\n }\n\n public updateObject(\n apiName: string | ObjectTypeDefinition,\n value: Osdk.Instance<ObjectTypeDefinition>,\n { optimisticId }: UpdateOptions = {},\n ): Osdk.Instance<ObjectTypeDefinition> {\n if (typeof apiName !== \"string\") {\n apiName = apiName.apiName;\n }\n\n const query = this.getObjectQuery(apiName, value.$primaryKey);\n\n return this.batch({ optimisticId }, (batch) => {\n return query.writeToStore(value, \"loaded\", batch);\n }).retVal.value!;\n }\n\n public updateObjects(\n values: Array<Osdk.Instance<ObjectTypeDefinition>>,\n batch: BatchContext,\n ): ObjectCacheKey[] {\n // update the cache for any object that has changed\n // and save the mapped values to return\n return values.map(v => {\n return this.getObjectQuery(\n v.$apiName,\n v.$primaryKey as string | number,\n )\n .writeToStore(v, \"loaded\", batch).cacheKey;\n });\n }\n\n /**\n * Updates the internal state of a list and will create a new internal query if needed.\n *\n * Helper method only for tests right now. May be removed later.\n *\n * @param apiName\n * @param where\n * @param orderBy\n * @param objects\n * @param param4\n * @param opts\n */\n public updateList<T extends ObjectTypeDefinition>(\n {\n objectType: apiName,\n where,\n orderBy,\n }: {\n objectType: T[\"apiName\"] | T;\n where: WhereClause<T>;\n orderBy: OrderBy<T>;\n },\n objects: Osdk.Instance<T>[],\n { optimisticId }: UpdateOptions = {},\n opts: ListQueryOptions = { dedupeInterval: 0 },\n ): void {\n if (process.env.NODE_ENV !== \"production\") {\n this.logger?.info(\n { methodName: \"updateList\" },\n \"\",\n { optimisticId },\n );\n }\n\n const query = this.getListQuery(apiName, where ?? {}, orderBy ?? {}, opts);\n\n this.batch({ optimisticId }, (batch) => {\n const objectCacheKeys = this.updateObjects(objects, batch);\n query.updateList(objectCacheKeys, false, \"loaded\", batch);\n });\n }\n\n retain(cacheKey: CacheKey<string, any, any>): void {\n this.#refCounts.retain(cacheKey);\n }\n\n release(cacheKey: CacheKey<string, any, any>): void {\n this.#refCounts.release(cacheKey);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -131,6 +131,8 @@ export function createClientMockHelper() {
131
131
  type: "edits",
132
132
  addedLinks: x.addedLinks ?? [],
133
133
  addedObjects: x.addedObjects ?? [],
134
+ deletedObjects: x.deletedObjects ?? [],
135
+ deletedLinks: x.deletedLinks ?? [],
134
136
  deletedLinksCount: x.deletedLinksCount ?? 0,
135
137
  deletedObjectsCount: x.deletedObjectsCount ?? 0,
136
138
  editedObjectTypes: x.editedObjectTypes ?? [],
@@ -1 +1 @@
1
- {"version":3,"file":"testUtils.js","names":["Chalk","pDefer","invariant","afterEach","beforeEach","expect","vi","vitest","additionalContext","chalk","mockLog","args","console","log","yellow","createTestLogger","bindings","options","colors","debug","cyan","bgCyan","info","green","bgGreen","trace","gray","bgGray","error","red","bgRed","warn","bgYellow","fatal","redBright","bgRedBright","createLogMethod","name","fn","hasData","obj","more","slice","msgPrefix","methodName","magenta","Object","keys","length","child","theseBindings","theseOptions","level","undefined","isLevelEnabled","createClientMockHelper","client","logger","mockImplementation","localLogger","Error","e","where","deadObjectSet","whereArgs","fetchPage","fetchArgs","fetchOne","baseUrl","ontologyRid","objectFactory","objectFactory2","ontologyProvider","getActionDefinition","getInterfaceDefinition","getObjectDefinition","getQueryDefinition","tokenProvider","objectSetFactory","fetch","clientCacheKey","requestContext","mockApplyActionOnce","d","mockReturnValueOnce","applyAction","x","promise","type","addedLinks","addedObjects","deletedLinksCount","deletedObjectsCount","editedObjectTypes","modifiedObjects","mockFetchOneOnce","expectedId","a","process","env","NODE_ENV","r","$primaryKey","mockObjectFactory2Once","mocked","mockFetchPageOnce","objectSet","fetchPageArgs","clause","createDefer","subscriptions","s","unsubscribe","push","expectSingleListCallAndClear","subFn","resolvedList","payloadOptions","isFakeTimers","runOnlyPendingTimers","toHaveBeenCalledExactlyOnceWith","listPayloadContaining","mockClear","expectSingleObjectCallAndClear","object","status","objectContaining","any","String","waitForCall","times","waitFor","toHaveBeenCalledTimes","createSubscriptionHelper","mockSingleSubCallback","ret","assign","expectLoadingAndLoaded","q","toHaveBeenNthCalledWith","loading","loaded","mockListSubCallback","cacheEntryContaining","cacheKey","value","toBeOneOf","anything","lastUpdated","nonOptionalValue","src","key","objectPayloadContaining","isOptimistic","Boolean","fetchMore","Function","hasMore","applyCustomMatchers","extend","toBeGreaterThan","pass","message"],"sources":["testUtils.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 ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n OsdkBase,\n PageResult,\n WhereClause,\n} from \"@osdk/api\";\nimport { Chalk } from \"chalk\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport invariant from \"tiny-invariant\";\nimport type { Mock } from \"vitest\";\nimport { afterEach, beforeEach, expect, vi, vitest } from \"vitest\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport type { Client } from \"../../Client.js\";\nimport { additionalContext } from \"../../Client.js\";\nimport type { LogFn, Logger } from \"../../Logger.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { Status, Unsubscribable } from \"../ObservableClient.js\";\nimport type { Entry } from \"./Layer.js\";\n\nconst chalk = new Chalk(); // new Chalk({ level: 3 });\n\nexport interface MockClientHelper {\n client: Mock<Client> & Client;\n\n mockApplyActionOnce: () => DeferredPromise<Partial<ActionEditResponse>>;\n\n mockFetchOneOnce: <Q extends ObjectTypeDefinition>(\n expectedId?: string | number | boolean,\n ) => DeferredPromise<\n Partial<\n Osdk.Instance<Q>\n >\n >;\n\n mockObjectFactory2Once: () => DeferredPromise<\n Osdk.Instance<ObjectOrInterfaceDefinition, never, any, {}>[]\n >;\n\n mockFetchPageOnce: <\n Q extends ObjectTypeDefinition,\n >(\n expected?: {\n where: WhereClause<any>;\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>;\n },\n ) => DeferredPromise<\n PageResult<Partial<Osdk.Instance<Q>>>\n >;\n}\n\nfunction mockLog(...args: any[]) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.yellow(\"mockClient\"),\n ...args,\n );\n}\n// interface LogFn {\n// (obj: unknown, msg?: string, ...args: any[]): void;\n// (msg: string, ...args: any[]): void;\n// }\n\nexport function createTestLogger(\n bindings: Record<string, any>,\n options?: { level?: string; msgPrefix?: string },\n): Logger {\n const colors = {\n debug: [chalk.cyan, chalk.bgCyan],\n info: [chalk.green, chalk.bgGreen],\n trace: [chalk.gray, chalk.bgGray],\n error: [chalk.red, chalk.bgRed],\n warn: [chalk.yellow, chalk.bgYellow],\n fatal: [chalk.redBright, chalk.bgRedBright],\n } as const;\n function createLogMethod(\n name: \"debug\" | \"error\" | \"info\" | \"warn\" | \"fatal\" | \"trace\",\n ) {\n return vi.fn<LogFn>(\n (\n ...args: [\n obj: unknown,\n ...args1: any[],\n ] | [\n ...args2: any[],\n ]\n ) => {\n const hasData = typeof args[0] !== \"string\";\n const obj: Record<string, unknown> = hasData ? args[0] as any : {};\n const more: any[] = hasData ? args.slice(1) : args.slice(0);\n\n // eslint-disable-next-line no-console\n console.log(\n `${colors[name][1](name)}${\n options?.msgPrefix ? \" \" + colors[name][0](options.msgPrefix) : \"\"\n }${obj.methodName ? ` .${chalk.magenta(obj.methodName)}()` : \"\"}`,\n ...more,\n );\n if (bindings && Object.keys(bindings).length > 0) {\n // eslint-disable-next-line no-console\n console.log(bindings);\n }\n },\n ) as LogFn;\n }\n return {\n debug: createLogMethod(\"debug\"),\n error: createLogMethod(\"error\"),\n info: createLogMethod(\"info\"),\n warn: createLogMethod(\"warn\"),\n fatal: createLogMethod(\"fatal\"),\n child: vi.fn<Logger[\"child\"]>((theseBindings, theseOptions) =>\n createTestLogger({\n ...bindings,\n ...theseBindings,\n }, {\n level: (theseOptions ?? options)?.level,\n msgPrefix: options?.msgPrefix || theseOptions?.msgPrefix\n ? `${options?.msgPrefix ? `${options.msgPrefix} ` : \"\"}${\n theseOptions?.msgPrefix || \"\"\n }`\n : undefined,\n })\n ),\n trace: createLogMethod(\"trace\"),\n isLevelEnabled: vi.fn((args) => true),\n };\n}\n\nexport function createClientMockHelper(): MockClientHelper {\n const client = vitest.fn<typeof client>() as unknown as Mock<Client> & Client;\n\n const logger = createTestLogger({});\n\n // this is just a fallback for when there is nothing set so we can track whats up\n client.mockImplementation((...args: any[]) => {\n const localLogger = logger.child({}, { msgPrefix: \"fallback mock client\" });\n try {\n throw new Error(\"IN THE FALLBACK MOCK CLIENT IMPLEMENTATION\");\n } catch (e) {\n localLogger.error(\"Just for the stack trace\", e);\n }\n\n let where;\n const deadObjectSet = {\n where: (...whereArgs: any[]) => {\n localLogger.trace(\"where\", whereArgs);\n where = whereArgs;\n return deadObjectSet;\n },\n fetchPage: (...fetchArgs: any[]) => {\n localLogger.trace(\"etchPage\", where!, fetchArgs);\n throw new Error(\"NO\");\n },\n fetchOne: (...fetchArgs: any[]) => {\n localLogger.trace(\"fetchOne\", fetchArgs);\n\n throw new Error(\"NO\");\n },\n };\n return deadObjectSet;\n });\n\n client[additionalContext] = {\n baseUrl: \"http://localhost:8080\",\n ontologyRid: \"ri.something\",\n objectFactory: vitest.fn(),\n objectFactory2: vitest.fn(),\n ontologyProvider: {\n getActionDefinition: vitest.fn(),\n getInterfaceDefinition: vitest.fn(),\n getObjectDefinition: vitest.fn(),\n getQueryDefinition: vitest.fn(),\n },\n tokenProvider: vitest.fn(),\n objectSetFactory: vitest.fn(),\n fetch: vitest.fn(),\n clientCacheKey: {} as any,\n requestContext: {},\n logger,\n };\n\n function mockObjectFactory2Once() {\n const d = pDefer<\n Osdk.Instance<ObjectOrInterfaceDefinition, never, any, {}>[]\n >();\n vi.mocked(client[additionalContext].objectFactory2).mockReturnValueOnce(\n d.promise,\n );\n return d;\n }\n\n function mockFetchPageOnce<\n X extends PageResult<\n Osdk.Instance<ObjectTypeDefinition>\n >,\n >(): DeferredPromise<X> {\n const d = pDefer<X>();\n\n const objectSet: ObjectSet<ObjectTypeDefinition> = {\n fetchPage: async (fetchPageArgs) => {\n mockLog(\"fetchPage\", fetchPageArgs);\n const r = await d.promise;\n return { ...r, $primaryKey: fetchPageArgs };\n },\n where: (clause) => {\n mockLog(\"where\", clause);\n return objectSet;\n },\n } as Pick<\n ObjectSet<ObjectTypeDefinition>,\n \"fetchPage\" | \"where\"\n > as ObjectSet<ObjectTypeDefinition>;\n\n client.mockReturnValueOnce(objectSet);\n return d;\n }\n\n function mockFetchOneOnce<\n X extends Partial<OsdkBase<any>>,\n >(expectedId?: string | number | boolean): DeferredPromise<X> {\n const d = pDefer<X>();\n\n client.mockReturnValueOnce(\n {\n fetchOne: async (a) => {\n mockLog(\"fetchOne\", a);\n invariant(\n expectedId === undefined || a === expectedId,\n \"expected id to match\",\n );\n const r = await d.promise;\n return { ...r, $primaryKey: a };\n },\n } as Pick<ObjectSet<ObjectTypeDefinition>, \"fetchOne\">,\n );\n return d;\n }\n\n function mockApplyActionOnce(): DeferredPromise<\n Partial<ActionEditResponse>\n > {\n const d = pDefer<Partial<ActionEditResponse>>();\n\n client.mockReturnValueOnce(\n {\n applyAction: async (_args): Promise<ActionEditResponse> => {\n const x = await d.promise;\n return {\n type: \"edits\",\n addedLinks: x.addedLinks ?? [],\n addedObjects: x.addedObjects ?? [],\n deletedLinksCount: x.deletedLinksCount ?? 0,\n deletedObjectsCount: x.deletedObjectsCount ?? 0,\n editedObjectTypes: x.editedObjectTypes ?? [],\n modifiedObjects: x.modifiedObjects ?? [],\n };\n },\n } as Pick<\n ActionSignatureFromDef<ActionDefinition>,\n \"applyAction\"\n >,\n );\n return d;\n }\n\n return {\n client,\n mockApplyActionOnce,\n mockFetchOneOnce,\n mockObjectFactory2Once,\n mockFetchPageOnce,\n };\n}\n\nexport function createDefer() {\n let subscriptions: Unsubscribable[];\n\n beforeEach(() => {\n subscriptions = [];\n });\n\n afterEach(() => {\n for (const s of subscriptions) {\n s.unsubscribe();\n }\n subscriptions = [];\n });\n\n return function defer(x: Unsubscribable): Unsubscribable {\n subscriptions.push(x);\n return x;\n };\n}\n\nexport function expectSingleListCallAndClear<T extends ObjectTypeDefinition>(\n subFn: Mock<(e: ListPayload | undefined) => void>,\n resolvedList: Osdk.Instance<T>[],\n payloadOptions: Omit<Partial<ListPayload>, \"resolvedList\"> = {},\n): void {\n if (vitest.isFakeTimers()) {\n vitest.runOnlyPendingTimers();\n }\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n ...payloadOptions,\n resolvedList,\n }),\n );\n subFn.mockClear();\n}\n\nexport function expectSingleObjectCallAndClear<T extends ObjectTypeDefinition>(\n subFn: Mock<(e: ObjectPayload | undefined) => void>,\n object: Osdk.Instance<T>,\n status?: Status,\n): void {\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n expect.objectContaining({\n object,\n status: status ?? expect.any(String),\n }),\n );\n subFn.mockClear();\n}\n\nexport async function waitForCall(\n subFn: Mock<(e: any) => void>,\n times: number = 1,\n): Promise<void> {\n try {\n await vi.waitFor(() => {\n expect(subFn).toHaveBeenCalledTimes(times);\n });\n } catch (e) {\n // we don't need the error, it will retrigger on the next line\n // and that provides better behavior in the vitest vscode\n // plugin. This places the error in the test itself instead of\n // only in this file\n }\n expect(subFn).toHaveBeenCalledTimes(times);\n}\n\nfunction createSubscriptionHelper() {\n}\n\nexport function mockSingleSubCallback():\n & Mock<\n (e: ObjectPayload | undefined) => void\n >\n & {\n // expectLoaded: (value: unknown) => Promise<void>;\n // expectLoading: (value: unknown) => Promise<void>;\n expectLoadingAndLoaded: (q: {\n loading?: unknown;\n loaded: unknown;\n }) => Promise<void>;\n }\n{\n const ret = vitest.fn((e: ObjectPayload | undefined) => {});\n\n // async function expectLoaded(value: unknown) {\n // await waitForCall(ret);\n // // as long as we get the loaded call we are happy\n // expect(ret).toHaveBeenLastCalledWith(\n // cacheEntryContaining({\n // value,\n // status: \"loaded\",\n // }),\n // );\n // ret.mockClear();\n // }\n\n // async function expectLoading(value: unknown) {\n // await waitForCall(ret);\n // // as long as we get the loaded call we are happy\n // expect(ret).toHaveBeenCalledExactlyOnceWith(\n // cacheEntryContaining({\n // value,\n // status: \"loading\",\n // }),\n // );\n // ret.mockClear();\n // }\n\n return Object.assign(ret, {\n // expectLoaded,\n // expectLoading,\n expectLoadingAndLoaded: async (\n q: { loading?: unknown; loaded: unknown },\n ) => {\n await waitForCall(ret, 2);\n\n // as long as we get the loaded call we are happy\n expect(ret).toHaveBeenNthCalledWith(\n 1,\n q.loading,\n );\n expect(ret).toHaveBeenNthCalledWith(\n 2,\n q.loaded,\n );\n expect(ret).toHaveBeenCalledTimes(2);\n ret.mockClear();\n },\n });\n}\n\nexport function mockListSubCallback(): Mock<\n (x: ListPayload | undefined) => void\n> {\n return vitest.fn(\n (x: ListPayload | undefined) => {},\n );\n}\n\nexport function cacheEntryContaining(x: Partial<Entry<any>>): Entry<any> {\n return {\n cacheKey: x.cacheKey ?? expect.any(Object),\n value: \"value\" in x\n ? x.value\n : expect.toBeOneOf([expect.anything(), undefined]),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nfunction nonOptionalValue<T extends object, K extends keyof T>(\n src: T,\n key: K,\n): NonNullable<T[K]> {\n return key in src\n ? src[key]\n : expect.toBeOneOf([expect.anything(), undefined]);\n}\n\nexport function objectPayloadContaining(\n x: Partial<ObjectPayload>,\n): ObjectPayload {\n return {\n object: nonOptionalValue(x, \"object\"),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function listPayloadContaining(\n x: Partial<ListPayload>,\n): ListPayload {\n return {\n fetchMore: x.fetchMore ?? expect.any(Function),\n hasMore: x.hasMore ?? expect.any(Boolean),\n resolvedList: x.resolvedList ?? expect.anything(),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function applyCustomMatchers(): void {\n expect.extend({\n toBeGreaterThan: (r: number, e: number) => {\n return {\n pass: r > e,\n message: () => `expected ${r} to be greater than ${e} (lastUpdated)`,\n };\n },\n });\n}\n\ninterface CustomMatchers<R = any> {\n toBeGreaterThan: (n: number) => R;\n}\n\ninterface CustomAsymmetricMatchers<R = any> {\n toBeGreaterThan: (n: number) => R;\n}\n\ndeclare module \"vitest\" {\n interface Assertion<T = any> extends CustomMatchers<T> {}\n interface AsymmetricMatchersContaining extends CustomAsymmetricMatchers {}\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"testUtils.js","names":["Chalk","pDefer","invariant","afterEach","beforeEach","expect","vi","vitest","additionalContext","chalk","mockLog","args","console","log","yellow","createTestLogger","bindings","options","colors","debug","cyan","bgCyan","info","green","bgGreen","trace","gray","bgGray","error","red","bgRed","warn","bgYellow","fatal","redBright","bgRedBright","createLogMethod","name","fn","hasData","obj","more","slice","msgPrefix","methodName","magenta","Object","keys","length","child","theseBindings","theseOptions","level","undefined","isLevelEnabled","createClientMockHelper","client","logger","mockImplementation","localLogger","Error","e","where","deadObjectSet","whereArgs","fetchPage","fetchArgs","fetchOne","baseUrl","ontologyRid","objectFactory","objectFactory2","ontologyProvider","getActionDefinition","getInterfaceDefinition","getObjectDefinition","getQueryDefinition","tokenProvider","objectSetFactory","fetch","clientCacheKey","requestContext","mockApplyActionOnce","d","mockReturnValueOnce","applyAction","x","promise","type","addedLinks","addedObjects","deletedObjects","deletedLinks","deletedLinksCount","deletedObjectsCount","editedObjectTypes","modifiedObjects","mockFetchOneOnce","expectedId","a","process","env","NODE_ENV","r","$primaryKey","mockObjectFactory2Once","mocked","mockFetchPageOnce","objectSet","fetchPageArgs","clause","createDefer","subscriptions","s","unsubscribe","push","expectSingleListCallAndClear","subFn","resolvedList","payloadOptions","isFakeTimers","runOnlyPendingTimers","toHaveBeenCalledExactlyOnceWith","listPayloadContaining","mockClear","expectSingleObjectCallAndClear","object","status","objectContaining","any","String","waitForCall","times","waitFor","toHaveBeenCalledTimes","createSubscriptionHelper","mockSingleSubCallback","ret","assign","expectLoadingAndLoaded","q","toHaveBeenNthCalledWith","loading","loaded","mockListSubCallback","cacheEntryContaining","cacheKey","value","toBeOneOf","anything","lastUpdated","nonOptionalValue","src","key","objectPayloadContaining","isOptimistic","Boolean","fetchMore","Function","hasMore","applyCustomMatchers","extend","toBeGreaterThan","pass","message"],"sources":["testUtils.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 ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n OsdkBase,\n PageResult,\n WhereClause,\n} from \"@osdk/api\";\nimport { Chalk } from \"chalk\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport invariant from \"tiny-invariant\";\nimport type { Mock } from \"vitest\";\nimport { afterEach, beforeEach, expect, vi, vitest } from \"vitest\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport type { Client } from \"../../Client.js\";\nimport { additionalContext } from \"../../Client.js\";\nimport type { LogFn, Logger } from \"../../Logger.js\";\nimport type { ListPayload } from \"../ListPayload.js\";\nimport type { ObjectPayload } from \"../ObjectPayload.js\";\nimport type { Status, Unsubscribable } from \"../ObservableClient.js\";\nimport type { Entry } from \"./Layer.js\";\n\nconst chalk = new Chalk(); // new Chalk({ level: 3 });\n\nexport interface MockClientHelper {\n client: Mock<Client> & Client;\n\n mockApplyActionOnce: () => DeferredPromise<Partial<ActionEditResponse>>;\n\n mockFetchOneOnce: <Q extends ObjectTypeDefinition>(\n expectedId?: string | number | boolean,\n ) => DeferredPromise<\n Partial<\n Osdk.Instance<Q>\n >\n >;\n\n mockObjectFactory2Once: () => DeferredPromise<\n Osdk.Instance<ObjectOrInterfaceDefinition, never, any, {}>[]\n >;\n\n mockFetchPageOnce: <\n Q extends ObjectTypeDefinition,\n >(\n expected?: {\n where: WhereClause<any>;\n orderBy: Record<string, \"asc\" | \"desc\" | undefined>;\n },\n ) => DeferredPromise<\n PageResult<Partial<Osdk.Instance<Q>>>\n >;\n}\n\nfunction mockLog(...args: any[]) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.yellow(\"mockClient\"),\n ...args,\n );\n}\n// interface LogFn {\n// (obj: unknown, msg?: string, ...args: any[]): void;\n// (msg: string, ...args: any[]): void;\n// }\n\nexport function createTestLogger(\n bindings: Record<string, any>,\n options?: { level?: string; msgPrefix?: string },\n): Logger {\n const colors = {\n debug: [chalk.cyan, chalk.bgCyan],\n info: [chalk.green, chalk.bgGreen],\n trace: [chalk.gray, chalk.bgGray],\n error: [chalk.red, chalk.bgRed],\n warn: [chalk.yellow, chalk.bgYellow],\n fatal: [chalk.redBright, chalk.bgRedBright],\n } as const;\n function createLogMethod(\n name: \"debug\" | \"error\" | \"info\" | \"warn\" | \"fatal\" | \"trace\",\n ) {\n return vi.fn<LogFn>(\n (\n ...args: [\n obj: unknown,\n ...args1: any[],\n ] | [\n ...args2: any[],\n ]\n ) => {\n const hasData = typeof args[0] !== \"string\";\n const obj: Record<string, unknown> = hasData ? args[0] as any : {};\n const more: any[] = hasData ? args.slice(1) : args.slice(0);\n\n // eslint-disable-next-line no-console\n console.log(\n `${colors[name][1](name)}${\n options?.msgPrefix ? \" \" + colors[name][0](options.msgPrefix) : \"\"\n }${obj.methodName ? ` .${chalk.magenta(obj.methodName)}()` : \"\"}`,\n ...more,\n );\n if (bindings && Object.keys(bindings).length > 0) {\n // eslint-disable-next-line no-console\n console.log(bindings);\n }\n },\n ) as LogFn;\n }\n return {\n debug: createLogMethod(\"debug\"),\n error: createLogMethod(\"error\"),\n info: createLogMethod(\"info\"),\n warn: createLogMethod(\"warn\"),\n fatal: createLogMethod(\"fatal\"),\n child: vi.fn<Logger[\"child\"]>((theseBindings, theseOptions) =>\n createTestLogger({\n ...bindings,\n ...theseBindings,\n }, {\n level: (theseOptions ?? options)?.level,\n msgPrefix: options?.msgPrefix || theseOptions?.msgPrefix\n ? `${options?.msgPrefix ? `${options.msgPrefix} ` : \"\"}${\n theseOptions?.msgPrefix || \"\"\n }`\n : undefined,\n })\n ),\n trace: createLogMethod(\"trace\"),\n isLevelEnabled: vi.fn((args) => true),\n };\n}\n\nexport function createClientMockHelper(): MockClientHelper {\n const client = vitest.fn<typeof client>() as unknown as Mock<Client> & Client;\n\n const logger = createTestLogger({});\n\n // this is just a fallback for when there is nothing set so we can track whats up\n client.mockImplementation((...args: any[]) => {\n const localLogger = logger.child({}, { msgPrefix: \"fallback mock client\" });\n try {\n throw new Error(\"IN THE FALLBACK MOCK CLIENT IMPLEMENTATION\");\n } catch (e) {\n localLogger.error(\"Just for the stack trace\", e);\n }\n\n let where;\n const deadObjectSet = {\n where: (...whereArgs: any[]) => {\n localLogger.trace(\"where\", whereArgs);\n where = whereArgs;\n return deadObjectSet;\n },\n fetchPage: (...fetchArgs: any[]) => {\n localLogger.trace(\"etchPage\", where!, fetchArgs);\n throw new Error(\"NO\");\n },\n fetchOne: (...fetchArgs: any[]) => {\n localLogger.trace(\"fetchOne\", fetchArgs);\n\n throw new Error(\"NO\");\n },\n };\n return deadObjectSet;\n });\n\n client[additionalContext] = {\n baseUrl: \"http://localhost:8080\",\n ontologyRid: \"ri.something\",\n objectFactory: vitest.fn(),\n objectFactory2: vitest.fn(),\n ontologyProvider: {\n getActionDefinition: vitest.fn(),\n getInterfaceDefinition: vitest.fn(),\n getObjectDefinition: vitest.fn(),\n getQueryDefinition: vitest.fn(),\n },\n tokenProvider: vitest.fn(),\n objectSetFactory: vitest.fn(),\n fetch: vitest.fn(),\n clientCacheKey: {} as any,\n requestContext: {},\n logger,\n };\n\n function mockObjectFactory2Once() {\n const d = pDefer<\n Osdk.Instance<ObjectOrInterfaceDefinition, never, any, {}>[]\n >();\n vi.mocked(client[additionalContext].objectFactory2).mockReturnValueOnce(\n d.promise,\n );\n return d;\n }\n\n function mockFetchPageOnce<\n X extends PageResult<\n Osdk.Instance<ObjectTypeDefinition>\n >,\n >(): DeferredPromise<X> {\n const d = pDefer<X>();\n\n const objectSet: ObjectSet<ObjectTypeDefinition> = {\n fetchPage: async (fetchPageArgs) => {\n mockLog(\"fetchPage\", fetchPageArgs);\n const r = await d.promise;\n return { ...r, $primaryKey: fetchPageArgs };\n },\n where: (clause) => {\n mockLog(\"where\", clause);\n return objectSet;\n },\n } as Pick<\n ObjectSet<ObjectTypeDefinition>,\n \"fetchPage\" | \"where\"\n > as ObjectSet<ObjectTypeDefinition>;\n\n client.mockReturnValueOnce(objectSet);\n return d;\n }\n\n function mockFetchOneOnce<\n X extends Partial<OsdkBase<any>>,\n >(expectedId?: string | number | boolean): DeferredPromise<X> {\n const d = pDefer<X>();\n\n client.mockReturnValueOnce(\n {\n fetchOne: async (a) => {\n mockLog(\"fetchOne\", a);\n invariant(\n expectedId === undefined || a === expectedId,\n \"expected id to match\",\n );\n const r = await d.promise;\n return { ...r, $primaryKey: a };\n },\n } as Pick<ObjectSet<ObjectTypeDefinition>, \"fetchOne\">,\n );\n return d;\n }\n\n function mockApplyActionOnce(): DeferredPromise<\n Partial<ActionEditResponse>\n > {\n const d = pDefer<Partial<ActionEditResponse>>();\n\n client.mockReturnValueOnce(\n {\n applyAction: async (_args): Promise<ActionEditResponse> => {\n const x = await d.promise;\n return {\n type: \"edits\",\n addedLinks: x.addedLinks ?? [],\n addedObjects: x.addedObjects ?? [],\n deletedObjects: x.deletedObjects ?? [],\n deletedLinks: x.deletedLinks ?? [],\n deletedLinksCount: x.deletedLinksCount ?? 0,\n deletedObjectsCount: x.deletedObjectsCount ?? 0,\n editedObjectTypes: x.editedObjectTypes ?? [],\n modifiedObjects: x.modifiedObjects ?? [],\n };\n },\n } as Pick<\n ActionSignatureFromDef<ActionDefinition>,\n \"applyAction\"\n >,\n );\n return d;\n }\n\n return {\n client,\n mockApplyActionOnce,\n mockFetchOneOnce,\n mockObjectFactory2Once,\n mockFetchPageOnce,\n };\n}\n\nexport function createDefer() {\n let subscriptions: Unsubscribable[];\n\n beforeEach(() => {\n subscriptions = [];\n });\n\n afterEach(() => {\n for (const s of subscriptions) {\n s.unsubscribe();\n }\n subscriptions = [];\n });\n\n return function defer(x: Unsubscribable): Unsubscribable {\n subscriptions.push(x);\n return x;\n };\n}\n\nexport function expectSingleListCallAndClear<T extends ObjectTypeDefinition>(\n subFn: Mock<(e: ListPayload | undefined) => void>,\n resolvedList: Osdk.Instance<T>[],\n payloadOptions: Omit<Partial<ListPayload>, \"resolvedList\"> = {},\n): void {\n if (vitest.isFakeTimers()) {\n vitest.runOnlyPendingTimers();\n }\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n listPayloadContaining({\n ...payloadOptions,\n resolvedList,\n }),\n );\n subFn.mockClear();\n}\n\nexport function expectSingleObjectCallAndClear<T extends ObjectTypeDefinition>(\n subFn: Mock<(e: ObjectPayload | undefined) => void>,\n object: Osdk.Instance<T>,\n status?: Status,\n): void {\n expect(subFn).toHaveBeenCalledExactlyOnceWith(\n expect.objectContaining({\n object,\n status: status ?? expect.any(String),\n }),\n );\n subFn.mockClear();\n}\n\nexport async function waitForCall(\n subFn: Mock<(e: any) => void>,\n times: number = 1,\n): Promise<void> {\n try {\n await vi.waitFor(() => {\n expect(subFn).toHaveBeenCalledTimes(times);\n });\n } catch (e) {\n // we don't need the error, it will retrigger on the next line\n // and that provides better behavior in the vitest vscode\n // plugin. This places the error in the test itself instead of\n // only in this file\n }\n expect(subFn).toHaveBeenCalledTimes(times);\n}\n\nfunction createSubscriptionHelper() {\n}\n\nexport function mockSingleSubCallback():\n & Mock<\n (e: ObjectPayload | undefined) => void\n >\n & {\n // expectLoaded: (value: unknown) => Promise<void>;\n // expectLoading: (value: unknown) => Promise<void>;\n expectLoadingAndLoaded: (q: {\n loading?: unknown;\n loaded: unknown;\n }) => Promise<void>;\n }\n{\n const ret = vitest.fn((e: ObjectPayload | undefined) => {});\n\n // async function expectLoaded(value: unknown) {\n // await waitForCall(ret);\n // // as long as we get the loaded call we are happy\n // expect(ret).toHaveBeenLastCalledWith(\n // cacheEntryContaining({\n // value,\n // status: \"loaded\",\n // }),\n // );\n // ret.mockClear();\n // }\n\n // async function expectLoading(value: unknown) {\n // await waitForCall(ret);\n // // as long as we get the loaded call we are happy\n // expect(ret).toHaveBeenCalledExactlyOnceWith(\n // cacheEntryContaining({\n // value,\n // status: \"loading\",\n // }),\n // );\n // ret.mockClear();\n // }\n\n return Object.assign(ret, {\n // expectLoaded,\n // expectLoading,\n expectLoadingAndLoaded: async (\n q: { loading?: unknown; loaded: unknown },\n ) => {\n await waitForCall(ret, 2);\n\n // as long as we get the loaded call we are happy\n expect(ret).toHaveBeenNthCalledWith(\n 1,\n q.loading,\n );\n expect(ret).toHaveBeenNthCalledWith(\n 2,\n q.loaded,\n );\n expect(ret).toHaveBeenCalledTimes(2);\n ret.mockClear();\n },\n });\n}\n\nexport function mockListSubCallback(): Mock<\n (x: ListPayload | undefined) => void\n> {\n return vitest.fn(\n (x: ListPayload | undefined) => {},\n );\n}\n\nexport function cacheEntryContaining(x: Partial<Entry<any>>): Entry<any> {\n return {\n cacheKey: x.cacheKey ?? expect.any(Object),\n value: \"value\" in x\n ? x.value\n : expect.toBeOneOf([expect.anything(), undefined]),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nfunction nonOptionalValue<T extends object, K extends keyof T>(\n src: T,\n key: K,\n): NonNullable<T[K]> {\n return key in src\n ? src[key]\n : expect.toBeOneOf([expect.anything(), undefined]);\n}\n\nexport function objectPayloadContaining(\n x: Partial<ObjectPayload>,\n): ObjectPayload {\n return {\n object: nonOptionalValue(x, \"object\"),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function listPayloadContaining(\n x: Partial<ListPayload>,\n): ListPayload {\n return {\n fetchMore: x.fetchMore ?? expect.any(Function),\n hasMore: x.hasMore ?? expect.any(Boolean),\n resolvedList: x.resolvedList ?? expect.anything(),\n isOptimistic: expect.any(Boolean),\n status: x.status ?? expect.anything(),\n lastUpdated: x.lastUpdated ?? expect.anything(),\n };\n}\n\nexport function applyCustomMatchers(): void {\n expect.extend({\n toBeGreaterThan: (r: number, e: number) => {\n return {\n pass: r > e,\n message: () => `expected ${r} to be greater than ${e} (lastUpdated)`,\n };\n },\n });\n}\n\ninterface CustomMatchers<R = any> {\n toBeGreaterThan: (n: number) => R;\n}\n\ninterface CustomAsymmetricMatchers<R = any> {\n toBeGreaterThan: (n: number) => R;\n}\n\ndeclare module \"vitest\" {\n interface Assertion<T = any> extends CustomMatchers<T> {}\n interface AsymmetricMatchersContaining extends CustomAsymmetricMatchers {}\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,5 +14,5 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- export const USER_AGENT = `osdk-client/${"2.2.0-beta.6"}`;
17
+ export const USER_AGENT = `osdk-client/${"2.2.0-beta.7"}`;
18
18
  //# sourceMappingURL=UserAgent.js.map