@osdk/client 2.2.1 → 2.3.0-beta.10
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 +94 -134
- package/build/browser/Client.js +1 -1
- package/build/browser/Client.js.map +1 -1
- package/build/browser/__unstable/createBulkLinksAsyncIterFactory.js +6 -1
- package/build/browser/__unstable/createBulkLinksAsyncIterFactory.js.map +1 -1
- package/build/browser/actions/ActionValidationError.js.map +1 -1
- package/build/browser/actions/applyAction.js +9 -8
- package/build/browser/actions/applyAction.js.map +1 -1
- package/build/browser/createClient.js +8 -1
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +41 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js +145 -12
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -1
- package/build/browser/derivedProperties/derivedPropertyDefinitionFactory.js +93 -0
- package/build/browser/derivedProperties/derivedPropertyDefinitionFactory.js.map +1 -0
- package/build/browser/logger/BaseLogger.js +1 -1
- package/build/browser/logger/BaseLogger.js.map +1 -1
- package/build/browser/object/fetchPage.js +9 -7
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/object/mediaUpload.js +3 -0
- package/build/browser/object/mediaUpload.js.map +1 -1
- package/build/browser/objectSet/ObjectSet.test.js +85 -106
- package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +1 -1
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/observable/ObservableClient.js +17 -1
- package/build/browser/observable/ObservableClient.js.map +1 -1
- package/build/browser/observable/OptimisticBuilder.js.map +1 -1
- package/build/browser/observable/internal/ActionApplication.js +31 -30
- package/build/browser/observable/internal/ActionApplication.js.map +1 -1
- package/build/browser/observable/internal/Changes.js +5 -1
- package/build/browser/observable/internal/Changes.js.map +1 -1
- package/build/browser/observable/internal/ListQuery.js +24 -22
- package/build/browser/observable/internal/ListQuery.js.map +1 -1
- package/build/browser/observable/internal/ObjectQuery.js +30 -1
- package/build/browser/observable/internal/ObjectQuery.js.map +1 -1
- package/build/browser/observable/internal/ObservableClientImpl.js +1 -2
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/OptimisticJob.js +8 -0
- package/build/browser/observable/internal/OptimisticJob.js.map +1 -1
- package/build/browser/observable/internal/Query.js +2 -2
- package/build/browser/observable/internal/Query.js.map +1 -1
- package/build/browser/observable/internal/Store.js +4 -0
- package/build/browser/observable/internal/Store.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +45 -5
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/observable/internal/tombstone.js +18 -0
- package/build/browser/observable/internal/tombstone.js.map +1 -0
- package/build/browser/public/internal.js +1 -0
- package/build/browser/public/internal.js.map +1 -1
- package/build/browser/public-utils/hydrateObjectSetFromObjectRids.js +39 -0
- package/build/browser/public-utils/hydrateObjectSetFromObjectRids.js.map +1 -0
- package/build/browser/queries/applyQuery.js +8 -4
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/browser/util/extractRdpDefinition.js +2 -0
- package/build/browser/util/extractRdpDefinition.js.map +1 -1
- package/build/browser/util/toDataValue.js +20 -10
- package/build/browser/util/toDataValue.js.map +1 -1
- package/build/browser/util/toDataValue.test.js +50 -11
- package/build/browser/util/toDataValue.test.js.map +1 -1
- package/build/cjs/chunk-VZ57PNLC.cjs +1808 -0
- package/build/cjs/chunk-VZ57PNLC.cjs.map +1 -0
- package/build/cjs/{chunk-LPYAXRWJ.cjs → chunk-YGJRXE4F.cjs} +757 -36
- package/build/cjs/chunk-YGJRXE4F.cjs.map +1 -0
- package/build/cjs/index.cjs +16 -1764
- package/build/cjs/index.cjs.map +1 -1
- package/build/cjs/index.d.cts +4 -3
- package/build/cjs/public/internal.cjs +22 -8
- package/build/cjs/public/internal.cjs.map +1 -1
- package/build/cjs/public/internal.d.cts +10 -1
- package/build/cjs/public/unstable-do-not-use.cjs +182 -123
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +2 -1
- package/build/esm/Client.js +1 -1
- package/build/esm/Client.js.map +1 -1
- package/build/esm/__unstable/createBulkLinksAsyncIterFactory.js +6 -1
- package/build/esm/__unstable/createBulkLinksAsyncIterFactory.js.map +1 -1
- package/build/esm/actions/ActionValidationError.js.map +1 -1
- package/build/esm/actions/applyAction.js +9 -8
- package/build/esm/actions/applyAction.js.map +1 -1
- package/build/esm/createClient.js +8 -1
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +41 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js +145 -12
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -1
- package/build/esm/derivedProperties/derivedPropertyDefinitionFactory.js +93 -0
- package/build/esm/derivedProperties/derivedPropertyDefinitionFactory.js.map +1 -0
- package/build/esm/logger/BaseLogger.js +1 -1
- package/build/esm/logger/BaseLogger.js.map +1 -1
- package/build/esm/object/fetchPage.js +9 -7
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/object/mediaUpload.js +3 -0
- package/build/esm/object/mediaUpload.js.map +1 -1
- package/build/esm/objectSet/ObjectSet.test.js +85 -106
- package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +1 -1
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/observable/ObservableClient.js +17 -1
- package/build/esm/observable/ObservableClient.js.map +1 -1
- package/build/esm/observable/OptimisticBuilder.js.map +1 -1
- package/build/esm/observable/internal/ActionApplication.js +31 -30
- package/build/esm/observable/internal/ActionApplication.js.map +1 -1
- package/build/esm/observable/internal/Changes.js +5 -1
- package/build/esm/observable/internal/Changes.js.map +1 -1
- package/build/esm/observable/internal/ListQuery.js +24 -22
- package/build/esm/observable/internal/ListQuery.js.map +1 -1
- package/build/esm/observable/internal/ObjectQuery.js +30 -1
- package/build/esm/observable/internal/ObjectQuery.js.map +1 -1
- package/build/esm/observable/internal/ObservableClientImpl.js +1 -2
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/OptimisticJob.js +8 -0
- package/build/esm/observable/internal/OptimisticJob.js.map +1 -1
- package/build/esm/observable/internal/Query.js +2 -2
- package/build/esm/observable/internal/Query.js.map +1 -1
- package/build/esm/observable/internal/Store.js +4 -0
- package/build/esm/observable/internal/Store.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +45 -5
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/observable/internal/tombstone.js +18 -0
- package/build/esm/observable/internal/tombstone.js.map +1 -0
- package/build/esm/public/internal.js +1 -0
- package/build/esm/public/internal.js.map +1 -1
- package/build/esm/public-utils/hydrateObjectSetFromObjectRids.js +39 -0
- package/build/esm/public-utils/hydrateObjectSetFromObjectRids.js.map +1 -0
- package/build/esm/queries/applyQuery.js +8 -4
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/esm/util/extractRdpDefinition.js +2 -0
- package/build/esm/util/extractRdpDefinition.js.map +1 -1
- package/build/esm/util/toDataValue.js +20 -10
- package/build/esm/util/toDataValue.js.map +1 -1
- package/build/esm/util/toDataValue.test.js +50 -11
- package/build/esm/util/toDataValue.test.js.map +1 -1
- package/build/types/Client.d.ts +1 -1
- package/build/types/actions/ActionValidationError.d.ts +1 -1
- package/build/types/actions/ActionValidationError.d.ts.map +1 -1
- package/build/types/actions/applyAction.d.ts.map +1 -1
- package/build/types/createClient.d.ts.map +1 -1
- package/build/types/derivedProperties/derivedPropertyDefinitionFactory.d.ts +1 -0
- package/build/types/derivedProperties/derivedPropertyDefinitionFactory.d.ts.map +1 -0
- package/build/types/object/mediaUpload.d.ts +2 -1
- package/build/types/object/mediaUpload.d.ts.map +1 -1
- package/build/types/observable/ObservableClient.d.ts +2 -2
- package/build/types/observable/ObservableClient.d.ts.map +1 -1
- package/build/types/observable/OptimisticBuilder.d.ts +1 -0
- package/build/types/observable/OptimisticBuilder.d.ts.map +1 -1
- package/build/types/observable/internal/ActionApplication.d.ts +1 -1
- package/build/types/observable/internal/ActionApplication.d.ts.map +1 -1
- package/build/types/observable/internal/Changes.d.ts +2 -0
- package/build/types/observable/internal/Changes.d.ts.map +1 -1
- package/build/types/observable/internal/ListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/ObjectQuery.d.ts +1 -0
- package/build/types/observable/internal/ObjectQuery.d.ts.map +1 -1
- package/build/types/observable/internal/OptimisticJob.d.ts.map +1 -1
- package/build/types/observable/internal/Store.d.ts +2 -1
- package/build/types/observable/internal/Store.d.ts.map +1 -1
- package/build/types/observable/internal/testUtils.d.ts +1 -1
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/build/types/observable/internal/tombstone.d.ts +1 -0
- package/build/types/observable/internal/tombstone.d.ts.map +1 -0
- package/build/types/public/internal.d.ts +1 -0
- package/build/types/public/internal.d.ts.map +1 -1
- package/build/types/public-utils/hydrateObjectSetFromObjectRids.d.ts +10 -0
- package/build/types/public-utils/hydrateObjectSetFromObjectRids.d.ts.map +1 -0
- package/build/types/queries/applyQuery.d.ts.map +1 -1
- package/build/types/util/UserAgent.d.ts +1 -0
- package/build/types/util/UserAgent.d.ts.map +1 -1
- package/package.json +14 -14
- package/build/cjs/chunk-LPYAXRWJ.cjs.map +0 -1
- package/build/cjs/chunk-T4NIFYZS.cjs +0 -14
- package/build/cjs/chunk-T4NIFYZS.cjs.map +0 -1
- package/build/cjs/chunk-UCW7RLKM.cjs +0 -615
- package/build/cjs/chunk-UCW7RLKM.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createObjectSet.js","names":["createWithPropertiesObjectSet","modernToLegacyWhereClause","aggregate","fetchPageInternal","fetchPageWithErrorsInternal","fetchSingle","fetchSingleWithErrors","augmentRequestContext","resolveBaseObjectSetType","isWireObjectSet","ObjectSetListenerWebsocket","isObjectTypeDefinition","def","type","isObjectSet","o","objectSetDefinitions","get","getWireObjectSet","objectSet","WeakMap","createObjectSet","objectType","clientCtx","base","bind","globalThis","finalMethodCall","fetchPage","fetchPageWithErrors","where","clause","objectSetFactory","pivotTo","createSearchAround","union","objectSets","map","os","intersect","subtract","asyncIter","args","$nextPageToken","undefined","result","$pageSize","nextPageToken","obj","data","fetchOne","primaryKey","options","createWithPk","fetchOneWithErrors","subscribe","listener","opts","pendingSubscribe","getInstance","properties","unsubscribe","withProperties","definitionMap","Map","derivedProperties","key","Object","keys","derivedPropertyDefinition","$objectSetInternals","link","set","objDef","ontologyProvider","getObjectDefinition","apiName","withPk","field","primaryKeyApiName","value"],"sources":["createObjectSet.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 AsyncIterArgs,\n Augments,\n FetchPageResult,\n LinkedType,\n LinkNames,\n NullabilityAdherence,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n Result,\n SelectArg,\n SingleOsdkResult,\n} from \"@osdk/api\";\nimport type { MinimalObjectSet } from \"@osdk/api/unstable\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n} from \"@osdk/foundry.ontologies\";\nimport { createWithPropertiesObjectSet } from \"../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { modernToLegacyWhereClause } from \"../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"../object/aggregate.js\";\nimport {\n fetchPageInternal,\n fetchPageWithErrorsInternal,\n} from \"../object/fetchPage.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../object/fetchSingle.js\";\nimport { augmentRequestContext } from \"../util/augmentRequestContext.js\";\nimport { resolveBaseObjectSetType } from \"../util/objectSetUtils.js\";\nimport { isWireObjectSet } from \"../util/WireObjectSet.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n\nfunction isObjectTypeDefinition(\n def: ObjectOrInterfaceDefinition,\n): def is ObjectTypeDefinition {\n return def.type === \"object\";\n}\n\n/* @internal */\nexport function isObjectSet(o: any): o is ObjectSet<any> {\n return o != null && typeof o === \"object\"\n && isWireObjectSet(objectSetDefinitions.get(o));\n}\n\n/** @internal */\nexport function getWireObjectSet(\n objectSet: ObjectSet<any> | MinimalObjectSet<any>,\n): WireObjectSet {\n return objectSetDefinitions.get(objectSet)!;\n}\n\nconst objectSetDefinitions = new WeakMap<\n any,\n WireObjectSet\n>();\n\n/** @internal */\nexport function createObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n clientCtx: MinimalClient,\n objectSet: WireObjectSet = resolveBaseObjectSetType(objectType),\n): ObjectSet<Q> {\n const base: ObjectSet<Q> = {\n aggregate: (aggregate<Q, any>).bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"aggregate\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"aggregate\"],\n\n fetchPage: fetchPageInternal.bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"fetchPage\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPage\"],\n\n fetchPageWithErrors: fetchPageWithErrorsInternal.bind(\n globalThis,\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchPageWithErrors\" }),\n ),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPageWithErrors\"],\n\n where: (clause) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"filter\",\n objectSet: objectSet,\n where: modernToLegacyWhereClause(clause, objectType),\n });\n },\n\n pivotTo: function<L extends LinkNames<Q>>(\n type: L,\n ): ObjectSet<LinkedType<Q, L>> {\n return createSearchAround(type)();\n },\n\n union: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"union\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n intersect: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"intersect\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n subtract: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"subtract\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n asyncIter: async function*<\n L extends PropertyKeys<Q>,\n R extends boolean,\n const A extends Augments,\n S extends NullabilityAdherence = NullabilityAdherence.Default,\n T extends boolean = false,\n >(\n args?: AsyncIterArgs<Q, L, R, A, S, T>,\n ): AsyncIterableIterator<SingleOsdkResult<Q, L, R, S, {}, T>> {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result: FetchPageResult<\n Q,\n L,\n R,\n S,\n T\n > = await fetchPageInternal(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIter\" }),\n ),\n objectType,\n objectSet,\n { ...args, $pageSize: 10000, $nextPageToken },\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj as SingleOsdkResult<Q, L, R, S, {}, T>;\n }\n } while ($nextPageToken != null);\n },\n\n fetchOne: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: PrimaryKeyType<Q>,\n options: A,\n ) => {\n return await fetchSingle(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOne\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Osdk<Q>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOne\"],\n\n fetchOneWithErrors: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: Q extends ObjectTypeDefinition ? PrimaryKeyType<Q>\n : never,\n options: A,\n ) => {\n return await fetchSingleWithErrors(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOneWithErrors\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Result<Osdk<Q>>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOneWithErrors\"],\n\n subscribe: (\n listener,\n opts,\n ) => {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(\n clientCtx,\n ).subscribe(\n objectType,\n objectSet,\n listener,\n opts?.properties,\n );\n\n return { unsubscribe: async () => (await pendingSubscribe)() };\n },\n\n withProperties: (clause) => {\n const definitionMap = new Map<any, DerivedPropertyDefinition>();\n\n const derivedProperties: Record<string, DerivedPropertyDefinition> = {};\n for (const key of Object.keys(clause)) {\n const derivedPropertyDefinition = clause\n [key](createWithPropertiesObjectSet(\n objectType,\n { type: \"methodInput\" },\n definitionMap,\n true,\n ));\n derivedProperties[key] = definitionMap.get(\n derivedPropertyDefinition,\n )!;\n }\n\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"withProperties\",\n derivedProperties: derivedProperties,\n objectSet: objectSet,\n },\n );\n },\n\n $objectSetInternals: {\n def: objectType,\n },\n };\n\n function createSearchAround<L extends LinkNames<Q>>(link: L) {\n return () => {\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"searchAround\",\n objectSet,\n link,\n },\n );\n };\n }\n\n objectSetDefinitions.set(base, objectSet);\n\n // we are using a type assertion because the marker symbol defined in BaseObjectSet isn't actually used\n // at runtime.\n return base as ObjectSet<Q>;\n}\n\nasync function createWithPk(\n clientCtx: MinimalClient,\n objectType: ObjectTypeDefinition,\n objectSet: WireObjectSet,\n primaryKey: PrimaryKeyType<ObjectTypeDefinition>,\n) {\n const objDef = await clientCtx.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n );\n\n const withPk: WireObjectSet = {\n type: \"filter\",\n objectSet: objectSet,\n where: {\n type: \"eq\",\n field: objDef.primaryKeyApiName,\n value: primaryKey,\n },\n };\n return withPk;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAwBA,SAASA,6BAA6B,QAAQ,uDAAuD;AACrG,SAASC,yBAAyB,QAAQ,sDAAsD;AAEhG,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SACEC,iBAAiB,EACjBC,2BAA2B,QACtB,wBAAwB;AAC/B,SAASC,WAAW,EAAEC,qBAAqB,QAAQ,0BAA0B;AAC7E,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,wBAAwB,QAAQ,2BAA2B;AACpE,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAASC,0BAA0B,QAAQ,iCAAiC;AAE5E,SAASC,sBAAsBA,CAC7BC,GAAgC,EACH;EAC7B,OAAOA,GAAG,CAACC,IAAI,KAAK,QAAQ;AAC9B;;AAEA;AACA,OAAO,SAASC,WAAWA,CAACC,CAAM,EAAuB;EACvD,OAAOA,CAAC,IAAI,IAAI,IAAI,OAAOA,CAAC,KAAK,QAAQ,IACpCN,eAAe,CAACO,oBAAoB,CAACC,GAAG,CAACF,CAAC,CAAC,CAAC;AACnD;;AAEA;AACA,OAAO,SAASG,gBAAgBA,CAC9BC,SAAiD,EAClC;EACf,OAAOH,oBAAoB,CAACC,GAAG,CAACE,SAAS,CAAC;AAC5C;AAEA,MAAMH,oBAAoB,GAAG,IAAII,OAAO,CAGtC,CAAC;;AAEH;AACA,OAAO,SAASC,eAAeA,CAC7BC,UAAa,EACbC,SAAwB,EACxBJ,SAAwB,GAAGX,wBAAwB,CAACc,UAAU,CAAC,EACjD;EACd,MAAME,IAAkB,GAAG;IACzBtB,SAAS,EAAGA,SAAS,CAAUuB,IAAI,CACjCC,UAAU,EACVnB,qBAAqB,CAACgB,SAAS,EAAE,OAAM;MAAEI,eAAe,EAAE;IAAY,CAAC,CAAC,CAAC,EACzEL,UAAU,EACVH,SACF,CAA8B;IAE9BS,SAAS,EAAEzB,iBAAiB,CAACsB,IAAI,CAC/BC,UAAU,EACVnB,qBAAqB,CAACgB,SAAS,EAAE,OAAM;MAAEI,eAAe,EAAE;IAAY,CAAC,CAAC,CAAC,EACzEL,UAAU,EACVH,SACF,CAA8B;IAE9BU,mBAAmB,EAAEzB,2BAA2B,CAACqB,IAAI,CACnDC,UAAU,EACVnB,qBAAqB,CACnBgB,SAAS,EACT,OAAM;MAAEI,eAAe,EAAE;IAAsB,CAAC,CAClD,CAAC,EACDL,UAAU,EACVH,SACF,CAAwC;IAExCW,KAAK,EAAGC,MAAM,IAAK;MACjB,OAAOR,SAAS,CAACS,gBAAgB,CAACV,UAAU,EAAEC,SAAS,EAAE;QACvDV,IAAI,EAAE,QAAQ;QACdM,SAAS,EAAEA,SAAS;QACpBW,KAAK,EAAE7B,yBAAyB,CAAC8B,MAAM,EAAET,UAAU;MACrD,CAAC,CAAC;IACJ,CAAC;IAEDW,OAAO,EAAE,SAAAA,CACPpB,IAAO,EACsB;MAC7B,OAAOqB,kBAAkB,CAACrB,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IAEDsB,KAAK,EAAEA,CAAC,GAAGC,UAAU,KAAK;MACxB,OAAOb,SAAS,CAACS,gBAAgB,CAACV,UAAU,EAAEC,SAAS,EAAE;QACvDV,IAAI,EAAE,OAAO;QACbuB,UAAU,EAAE,CACVjB,SAAS,EACT,GAAGiB,UAAU,CAACC,GAAG,CAACC,EAAE,IAAItB,oBAAoB,CAACC,GAAG,CAACqB,EAAE,CAAE,CAAC;MAE1D,CAAC,CAAC;IACJ,CAAC;IAEDC,SAAS,EAAEA,CAAC,GAAGH,UAAU,KAAK;MAC5B,OAAOb,SAAS,CAACS,gBAAgB,CAACV,UAAU,EAAEC,SAAS,EAAE;QACvDV,IAAI,EAAE,WAAW;QACjBuB,UAAU,EAAE,CACVjB,SAAS,EACT,GAAGiB,UAAU,CAACC,GAAG,CAACC,EAAE,IAAItB,oBAAoB,CAACC,GAAG,CAACqB,EAAE,CAAE,CAAC;MAE1D,CAAC,CAAC;IACJ,CAAC;IAEDE,QAAQ,EAAEA,CAAC,GAAGJ,UAAU,KAAK;MAC3B,OAAOb,SAAS,CAACS,gBAAgB,CAACV,UAAU,EAAEC,SAAS,EAAE;QACvDV,IAAI,EAAE,UAAU;QAChBuB,UAAU,EAAE,CACVjB,SAAS,EACT,GAAGiB,UAAU,CAACC,GAAG,CAACC,EAAE,IAAItB,oBAAoB,CAACC,GAAG,CAACqB,EAAE,CAAE,CAAC;MAE1D,CAAC,CAAC;IACJ,CAAC;IAEDG,SAAS,EAAE,gBAAAA,CAOTC,IAAsC,EACsB;MAC5D,IAAIC,cAAkC,GAAGC,SAAS;MAClD,GAAG;QACD,MAAMC,MAML,GAAG,MAAM1C,iBAAiB,CACzBI,qBAAqB,CACnBgB,SAAS,EACT,OAAM;UAAEI,eAAe,EAAE;QAAY,CAAC,CACxC,CAAC,EACDL,UAAU,EACVH,SAAS,EACT;UAAE,GAAGuB,IAAI;UAAEI,SAAS,EAAE,KAAK;UAAEH;QAAe,CAC9C,CAAC;QACDA,cAAc,GAAGE,MAAM,CAACE,aAAa;QAErC,KAAK,MAAMC,GAAG,IAAIH,MAAM,CAACI,IAAI,EAAE;UAC7B,MAAMD,GAA0C;QAClD;MACF,CAAC,QAAQL,cAAc,IAAI,IAAI;IACjC,CAAC;IAEDO,QAAQ,EAAGvC,sBAAsB,CAACW,UAAU,CAAC,GACzC,OACA6B,UAA6B,EAC7BC,OAAU,KACP;MACH,OAAO,MAAM/C,WAAW,CACtBE,qBAAqB,CACnBgB,SAAS,EACT,OAAM;QAAEI,eAAe,EAAE;MAAW,CAAC,CACvC,CAAC,EACDL,UAAU,EACV8B,OAAO,EACP,MAAMC,YAAY,CAChB9B,SAAS,EACTD,UAAU,EACVH,SAAS,EACTgC,UACF,CACF,CAAC;IACH,CAAC,GACCP,SAAsC;IAE1CU,kBAAkB,EAAG3C,sBAAsB,CAACW,UAAU,CAAC,GACnD,OACA6B,UACS,EACTC,OAAU,KACP;MACH,OAAO,MAAM9C,qBAAqB,CAChCC,qBAAqB,CACnBgB,SAAS,EACT,OAAM;QAAEI,eAAe,EAAE;MAAqB,CAAC,CACjD,CAAC,EACDL,UAAU,EACV8B,OAAO,EACP,MAAMC,YAAY,CAChB9B,SAAS,EACTD,UAAU,EACVH,SAAS,EACTgC,UACF,CACF,CAAC;IACH,CAAC,GACCP,SAAgD;IAEpDW,SAAS,EAAEA,CACTC,QAAQ,EACRC,IAAI,KACD;MACH,MAAMC,gBAAgB,GAAGhD,0BAA0B,CAACiD,WAAW,CAC7DpC,SACF,CAAC,CAACgC,SAAS,CACTjC,UAAU,EACVH,SAAS,EACTqC,QAAQ,EACRC,IAAI,EAAEG,UACR,CAAC;MAED,OAAO;QAAEC,WAAW,EAAE,MAAAA,CAAA,KAAY,CAAC,MAAMH,gBAAgB,EAAE;MAAE,CAAC;IAChE,CAAC;IAEDI,cAAc,EAAG/B,MAAM,IAAK;MAC1B,MAAMgC,aAAa,GAAG,IAAIC,GAAG,CAAiC,CAAC;MAE/D,MAAMC,iBAA4D,GAAG,CAAC,CAAC;MACvE,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACrC,MAAM,CAAC,EAAE;QACrC,MAAMsC,yBAAyB,GAAGtC,MAAM,CACrCmC,GAAG,CAAC,CAAClE,6BAA6B,CACjCsB,UAAU,EACV;UAAET,IAAI,EAAE;QAAc,CAAC,EACvBkD,aAAa,EACb,IACF,CAAC,CAAC;QACJE,iBAAiB,CAACC,GAAG,CAAC,GAAGH,aAAa,CAAC9C,GAAG,CACxCoD,yBACF,CAAE;MACJ;MAEA,OAAO9C,SAAS,CAACS,gBAAgB,CAC/BV,UAAU,EACVC,SAAS,EACT;QACEV,IAAI,EAAE,gBAAgB;QACtBoD,iBAAiB,EAAEA,iBAAiB;QACpC9C,SAAS,EAAEA;MACb,CACF,CAAC;IACH,CAAC;IAEDmD,mBAAmB,EAAE;MACnB1D,GAAG,EAAEU;IACP;EACF,CAAC;EAED,SAASY,kBAAkBA,CAAyBqC,IAAO,EAAE;IAC3D,OAAO,MAAM;MACX,OAAOhD,SAAS,CAACS,gBAAgB,CAC/BV,UAAU,EACVC,SAAS,EACT;QACEV,IAAI,EAAE,cAAc;QACpBM,SAAS;QACToD;MACF,CACF,CAAC;IACH,CAAC;EACH;EAEAvD,oBAAoB,CAACwD,GAAG,CAAChD,IAAI,EAAEL,SAAS,CAAC;;EAEzC;EACA;EACA,OAAOK,IAAI;AACb;AAEA,eAAe6B,YAAYA,CACzB9B,SAAwB,EACxBD,UAAgC,EAChCH,SAAwB,EACxBgC,UAAgD,EAChD;EACA,MAAMsB,MAAM,GAAG,MAAMlD,SAAS,CAACmD,gBAAgB,CAACC,mBAAmB,CACjErD,UAAU,CAACsD,OACb,CAAC;EAED,MAAMC,MAAqB,GAAG;IAC5BhE,IAAI,EAAE,QAAQ;IACdM,SAAS,EAAEA,SAAS;IACpBW,KAAK,EAAE;MACLjB,IAAI,EAAE,IAAI;MACViE,KAAK,EAAEL,MAAM,CAACM,iBAAiB;MAC/BC,KAAK,EAAE7B;IACT;EACF,CAAC;EACD,OAAO0B,MAAM;AACf","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"createObjectSet.js","names":["createWithPropertiesObjectSet","modernToLegacyWhereClause","aggregate","fetchPageInternal","fetchPageWithErrorsInternal","fetchSingle","fetchSingleWithErrors","augmentRequestContext","resolveBaseObjectSetType","isWireObjectSet","ObjectSetListenerWebsocket","isObjectTypeDefinition","def","type","isObjectSet","o","objectSetDefinitions","get","getWireObjectSet","objectSet","WeakMap","createObjectSet","objectType","clientCtx","base","bind","globalThis","finalMethodCall","fetchPage","fetchPageWithErrors","where","clause","objectSetFactory","pivotTo","createSearchAround","union","objectSets","map","os","intersect","subtract","asyncIter","args","$nextPageToken","undefined","result","$pageSize","nextPageToken","obj","data","fetchOne","primaryKey","options","createWithPk","fetchOneWithErrors","subscribe","listener","opts","pendingSubscribe","getInstance","properties","unsubscribe","withProperties","definitionMap","Map","derivedProperties","key","Object","keys","derivedPropertyDefinition","$objectSetInternals","link","set","objDef","ontologyProvider","getObjectDefinition","apiName","withPk","field","primaryKeyApiName","value"],"sources":["createObjectSet.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 AsyncIterArgs,\n Augments,\n FetchPageResult,\n LinkedType,\n LinkNames,\n NullabilityAdherence,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n Result,\n SelectArg,\n SingleOsdkResult,\n} from \"@osdk/api\";\nimport type { MinimalObjectSet } from \"@osdk/api/unstable\";\nimport type {\n DerivedPropertyDefinition,\n ObjectSet as WireObjectSet,\n} from \"@osdk/foundry.ontologies\";\nimport { createWithPropertiesObjectSet } from \"../derivedProperties/createWithPropertiesObjectSet.js\";\nimport { modernToLegacyWhereClause } from \"../internal/conversions/modernToLegacyWhereClause.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport { aggregate } from \"../object/aggregate.js\";\nimport {\n fetchPageInternal,\n fetchPageWithErrorsInternal,\n} from \"../object/fetchPage.js\";\nimport { fetchSingle, fetchSingleWithErrors } from \"../object/fetchSingle.js\";\nimport { augmentRequestContext } from \"../util/augmentRequestContext.js\";\nimport { resolveBaseObjectSetType } from \"../util/objectSetUtils.js\";\nimport { isWireObjectSet } from \"../util/WireObjectSet.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n\nfunction isObjectTypeDefinition(\n def: ObjectOrInterfaceDefinition,\n): def is ObjectTypeDefinition {\n return def.type === \"object\";\n}\n\n/* @internal */\nexport function isObjectSet(o: any): o is ObjectSet<any> {\n return o != null && typeof o === \"object\"\n && isWireObjectSet(objectSetDefinitions.get(o));\n}\n\n/** @internal */\nexport function getWireObjectSet(\n objectSet: ObjectSet<any> | MinimalObjectSet<any>,\n): WireObjectSet {\n return objectSetDefinitions.get(objectSet)!;\n}\n\nconst objectSetDefinitions = new WeakMap<\n any,\n WireObjectSet\n>();\n\n/** @internal */\nexport function createObjectSet<Q extends ObjectOrInterfaceDefinition>(\n objectType: Q,\n clientCtx: MinimalClient,\n objectSet: WireObjectSet = resolveBaseObjectSetType(objectType),\n): ObjectSet<Q> {\n const base: ObjectSet<Q> = {\n aggregate: (aggregate<Q, any>).bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"aggregate\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"aggregate\"],\n\n fetchPage: fetchPageInternal.bind(\n globalThis,\n augmentRequestContext(clientCtx, _ => ({ finalMethodCall: \"fetchPage\" })),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPage\"],\n\n fetchPageWithErrors: fetchPageWithErrorsInternal.bind(\n globalThis,\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchPageWithErrors\" }),\n ),\n objectType,\n objectSet,\n ) as ObjectSet<Q>[\"fetchPageWithErrors\"],\n\n where: (clause) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"filter\",\n objectSet: objectSet,\n where: modernToLegacyWhereClause(clause, objectType),\n });\n },\n\n pivotTo: function<L extends LinkNames<Q>>(\n type: L,\n ): ObjectSet<LinkedType<Q, L>> {\n return createSearchAround(type)();\n },\n\n union: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"union\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n intersect: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"intersect\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n subtract: (...objectSets) => {\n return clientCtx.objectSetFactory(objectType, clientCtx, {\n type: \"subtract\",\n objectSets: [\n objectSet,\n ...objectSets.map(os => objectSetDefinitions.get(os)!),\n ],\n });\n },\n\n asyncIter: async function*<\n L extends PropertyKeys<Q>,\n R extends boolean,\n const A extends Augments,\n S extends NullabilityAdherence = NullabilityAdherence.Default,\n T extends boolean = false,\n >(\n args?: AsyncIterArgs<Q, L, R, A, S, T>,\n ): AsyncIterableIterator<SingleOsdkResult<Q, L, R, S, {}, T>> {\n let $nextPageToken: string | undefined = undefined;\n do {\n const result: FetchPageResult<\n Q,\n L,\n R,\n S,\n T\n > = await fetchPageInternal(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"asyncIter\" }),\n ),\n objectType,\n objectSet,\n { ...args, $pageSize: 10000, $nextPageToken },\n true,\n );\n $nextPageToken = result.nextPageToken;\n\n for (const obj of result.data) {\n yield obj as SingleOsdkResult<Q, L, R, S, {}, T>;\n }\n } while ($nextPageToken != null);\n },\n\n fetchOne: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: PrimaryKeyType<Q>,\n options: A,\n ) => {\n return await fetchSingle(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOne\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Osdk<Q>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOne\"],\n\n fetchOneWithErrors: (isObjectTypeDefinition(objectType)\n ? async <A extends SelectArg<Q>>(\n primaryKey: Q extends ObjectTypeDefinition ? PrimaryKeyType<Q>\n : never,\n options: A,\n ) => {\n return await fetchSingleWithErrors(\n augmentRequestContext(\n clientCtx,\n _ => ({ finalMethodCall: \"fetchOneWithErrors\" }),\n ),\n objectType,\n options,\n await createWithPk(\n clientCtx,\n objectType,\n objectSet,\n primaryKey,\n ),\n ) as Result<Osdk<Q>>;\n }\n : undefined) as ObjectSet<Q>[\"fetchOneWithErrors\"],\n\n subscribe: (\n listener,\n opts,\n ) => {\n const pendingSubscribe = ObjectSetListenerWebsocket.getInstance(\n clientCtx,\n ).subscribe(\n objectType,\n objectSet,\n listener,\n opts?.properties,\n );\n\n return { unsubscribe: async () => (await pendingSubscribe)() };\n },\n\n withProperties: (clause) => {\n const definitionMap = new Map<any, DerivedPropertyDefinition>();\n\n const derivedProperties: Record<string, DerivedPropertyDefinition> = {};\n for (const key of Object.keys(clause)) {\n const derivedPropertyDefinition = clause\n [key](createWithPropertiesObjectSet(\n objectType,\n { type: \"methodInput\" },\n definitionMap,\n true,\n ));\n derivedProperties[key] = definitionMap.get(\n derivedPropertyDefinition,\n )!;\n }\n\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"withProperties\",\n derivedProperties: derivedProperties,\n objectSet: objectSet,\n },\n );\n },\n\n $objectSetInternals: {\n def: objectType,\n },\n };\n\n function createSearchAround<L extends LinkNames<Q>>(link: L) {\n return () => {\n return clientCtx.objectSetFactory(\n objectType,\n clientCtx,\n {\n type: \"searchAround\",\n objectSet,\n link,\n },\n );\n };\n }\n\n objectSetDefinitions.set(base, objectSet);\n\n // we are using a type assertion because the marker symbol defined in BaseObjectSet isn't actually used\n // at runtime.\n return base as ObjectSet<Q>;\n}\n\nasync function createWithPk(\n clientCtx: MinimalClient,\n objectType: ObjectTypeDefinition,\n objectSet: WireObjectSet,\n primaryKey: PrimaryKeyType<ObjectTypeDefinition>,\n) {\n const objDef = await clientCtx.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n );\n\n const withPk: WireObjectSet = {\n type: \"filter\",\n objectSet: objectSet,\n where: {\n type: \"eq\",\n field: objDef.primaryKeyApiName,\n value: primaryKey,\n },\n };\n return withPk;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAwBA,SAASA,6BAA6B,QAAQ,uDAAuD;AACrG,SAASC,yBAAyB,QAAQ,sDAAsD;AAEhG,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SACEC,iBAAiB,EACjBC,2BAA2B,QACtB,wBAAwB;AAC/B,SAASC,WAAW,EAAEC,qBAAqB,QAAQ,0BAA0B;AAC7E,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,wBAAwB,QAAQ,2BAA2B;AACpE,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAASC,0BAA0B,QAAQ,iCAAiC;AAE5E,SAASC,sBAAsBA,CAC7BC,GAAgC,EACH;EAC7B,OAAOA,GAAG,CAACC,IAAI,KAAK,QAAQ;AAC9B;;AAEA;AACA,OAAO,SAASC,WAAWA,CAACC,CAAM,EAAuB;EACvD,OAAOA,CAAC,IAAI,IAAI,IAAI,OAAOA,CAAC,KAAK,QAAQ,IACpCN,eAAe,CAACO,oBAAoB,CAACC,GAAG,CAACF,CAAC,CAAC,CAAC;AACnD;;AAEA;AACA,OAAO,SAASG,gBAAgBA,CAC9BC,SAAiD,EAClC;EACf,OAAOH,oBAAoB,CAACC,GAAG,CAACE,SAAS,CAAC;AAC5C;AAEA,MAAMH,oBAAoB,GAAG,IAAII,OAAO,CAGtC,CAAC;;AAEH;AACA,OAAO,SAASC,eAAeA,CAC7BC,UAAa,EACbC,SAAwB,EACxBJ,SAAwB,GAAGX,wBAAwB,CAACc,UAAU,CAAC,EACjD;EACd,MAAME,IAAkB,GAAG;IACzBtB,SAAS,EAAGA,SAAS,CAAUuB,IAAI,CACjCC,UAAU,EACVnB,qBAAqB,CAACgB,SAAS,EAAE,OAAM;MAAEI,eAAe,EAAE;IAAY,CAAC,CAAC,CAAC,EACzEL,UAAU,EACVH,SACF,CAA8B;IAE9BS,SAAS,EAAEzB,iBAAiB,CAACsB,IAAI,CAC/BC,UAAU,EACVnB,qBAAqB,CAACgB,SAAS,EAAE,OAAM;MAAEI,eAAe,EAAE;IAAY,CAAC,CAAC,CAAC,EACzEL,UAAU,EACVH,SACF,CAA8B;IAE9BU,mBAAmB,EAAEzB,2BAA2B,CAACqB,IAAI,CACnDC,UAAU,EACVnB,qBAAqB,CACnBgB,SAAS,EACT,OAAM;MAAEI,eAAe,EAAE;IAAsB,CAAC,CAClD,CAAC,EACDL,UAAU,EACVH,SACF,CAAwC;IAExCW,KAAK,EAAGC,MAAM,IAAK;MACjB,OAAOR,SAAS,CAACS,gBAAgB,CAACV,UAAU,EAAEC,SAAS,EAAE;QACvDV,IAAI,EAAE,QAAQ;QACdM,SAAS,EAAEA,SAAS;QACpBW,KAAK,EAAE7B,yBAAyB,CAAC8B,MAAM,EAAET,UAAU;MACrD,CAAC,CAAC;IACJ,CAAC;IAEDW,OAAO,EAAE,SAAAA,CACPpB,IAAO,EACsB;MAC7B,OAAOqB,kBAAkB,CAACrB,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IAEDsB,KAAK,EAAEA,CAAC,GAAGC,UAAU,KAAK;MACxB,OAAOb,SAAS,CAACS,gBAAgB,CAACV,UAAU,EAAEC,SAAS,EAAE;QACvDV,IAAI,EAAE,OAAO;QACbuB,UAAU,EAAE,CACVjB,SAAS,EACT,GAAGiB,UAAU,CAACC,GAAG,CAACC,EAAE,IAAItB,oBAAoB,CAACC,GAAG,CAACqB,EAAE,CAAE,CAAC;MAE1D,CAAC,CAAC;IACJ,CAAC;IAEDC,SAAS,EAAEA,CAAC,GAAGH,UAAU,KAAK;MAC5B,OAAOb,SAAS,CAACS,gBAAgB,CAACV,UAAU,EAAEC,SAAS,EAAE;QACvDV,IAAI,EAAE,WAAW;QACjBuB,UAAU,EAAE,CACVjB,SAAS,EACT,GAAGiB,UAAU,CAACC,GAAG,CAACC,EAAE,IAAItB,oBAAoB,CAACC,GAAG,CAACqB,EAAE,CAAE,CAAC;MAE1D,CAAC,CAAC;IACJ,CAAC;IAEDE,QAAQ,EAAEA,CAAC,GAAGJ,UAAU,KAAK;MAC3B,OAAOb,SAAS,CAACS,gBAAgB,CAACV,UAAU,EAAEC,SAAS,EAAE;QACvDV,IAAI,EAAE,UAAU;QAChBuB,UAAU,EAAE,CACVjB,SAAS,EACT,GAAGiB,UAAU,CAACC,GAAG,CAACC,EAAE,IAAItB,oBAAoB,CAACC,GAAG,CAACqB,EAAE,CAAE,CAAC;MAE1D,CAAC,CAAC;IACJ,CAAC;IAEDG,SAAS,EAAE,gBAAAA,CAOTC,IAAsC,EACsB;MAC5D,IAAIC,cAAkC,GAAGC,SAAS;MAClD,GAAG;QACD,MAAMC,MAML,GAAG,MAAM1C,iBAAiB,CACzBI,qBAAqB,CACnBgB,SAAS,EACT,OAAM;UAAEI,eAAe,EAAE;QAAY,CAAC,CACxC,CAAC,EACDL,UAAU,EACVH,SAAS,EACT;UAAE,GAAGuB,IAAI;UAAEI,SAAS,EAAE,KAAK;UAAEH;QAAe,CAAC,EAC7C,IACF,CAAC;QACDA,cAAc,GAAGE,MAAM,CAACE,aAAa;QAErC,KAAK,MAAMC,GAAG,IAAIH,MAAM,CAACI,IAAI,EAAE;UAC7B,MAAMD,GAA0C;QAClD;MACF,CAAC,QAAQL,cAAc,IAAI,IAAI;IACjC,CAAC;IAEDO,QAAQ,EAAGvC,sBAAsB,CAACW,UAAU,CAAC,GACzC,OACA6B,UAA6B,EAC7BC,OAAU,KACP;MACH,OAAO,MAAM/C,WAAW,CACtBE,qBAAqB,CACnBgB,SAAS,EACT,OAAM;QAAEI,eAAe,EAAE;MAAW,CAAC,CACvC,CAAC,EACDL,UAAU,EACV8B,OAAO,EACP,MAAMC,YAAY,CAChB9B,SAAS,EACTD,UAAU,EACVH,SAAS,EACTgC,UACF,CACF,CAAC;IACH,CAAC,GACCP,SAAsC;IAE1CU,kBAAkB,EAAG3C,sBAAsB,CAACW,UAAU,CAAC,GACnD,OACA6B,UACS,EACTC,OAAU,KACP;MACH,OAAO,MAAM9C,qBAAqB,CAChCC,qBAAqB,CACnBgB,SAAS,EACT,OAAM;QAAEI,eAAe,EAAE;MAAqB,CAAC,CACjD,CAAC,EACDL,UAAU,EACV8B,OAAO,EACP,MAAMC,YAAY,CAChB9B,SAAS,EACTD,UAAU,EACVH,SAAS,EACTgC,UACF,CACF,CAAC;IACH,CAAC,GACCP,SAAgD;IAEpDW,SAAS,EAAEA,CACTC,QAAQ,EACRC,IAAI,KACD;MACH,MAAMC,gBAAgB,GAAGhD,0BAA0B,CAACiD,WAAW,CAC7DpC,SACF,CAAC,CAACgC,SAAS,CACTjC,UAAU,EACVH,SAAS,EACTqC,QAAQ,EACRC,IAAI,EAAEG,UACR,CAAC;MAED,OAAO;QAAEC,WAAW,EAAE,MAAAA,CAAA,KAAY,CAAC,MAAMH,gBAAgB,EAAE;MAAE,CAAC;IAChE,CAAC;IAEDI,cAAc,EAAG/B,MAAM,IAAK;MAC1B,MAAMgC,aAAa,GAAG,IAAIC,GAAG,CAAiC,CAAC;MAE/D,MAAMC,iBAA4D,GAAG,CAAC,CAAC;MACvE,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACrC,MAAM,CAAC,EAAE;QACrC,MAAMsC,yBAAyB,GAAGtC,MAAM,CACrCmC,GAAG,CAAC,CAAClE,6BAA6B,CACjCsB,UAAU,EACV;UAAET,IAAI,EAAE;QAAc,CAAC,EACvBkD,aAAa,EACb,IACF,CAAC,CAAC;QACJE,iBAAiB,CAACC,GAAG,CAAC,GAAGH,aAAa,CAAC9C,GAAG,CACxCoD,yBACF,CAAE;MACJ;MAEA,OAAO9C,SAAS,CAACS,gBAAgB,CAC/BV,UAAU,EACVC,SAAS,EACT;QACEV,IAAI,EAAE,gBAAgB;QACtBoD,iBAAiB,EAAEA,iBAAiB;QACpC9C,SAAS,EAAEA;MACb,CACF,CAAC;IACH,CAAC;IAEDmD,mBAAmB,EAAE;MACnB1D,GAAG,EAAEU;IACP;EACF,CAAC;EAED,SAASY,kBAAkBA,CAAyBqC,IAAO,EAAE;IAC3D,OAAO,MAAM;MACX,OAAOhD,SAAS,CAACS,gBAAgB,CAC/BV,UAAU,EACVC,SAAS,EACT;QACEV,IAAI,EAAE,cAAc;QACpBM,SAAS;QACToD;MACF,CACF,CAAC;IACH,CAAC;EACH;EAEAvD,oBAAoB,CAACwD,GAAG,CAAChD,IAAI,EAAEL,SAAS,CAAC;;EAEzC;EACA;EACA,OAAOK,IAAI;AACb;AAEA,eAAe6B,YAAYA,CACzB9B,SAAwB,EACxBD,UAAgC,EAChCH,SAAwB,EACxBgC,UAAgD,EAChD;EACA,MAAMsB,MAAM,GAAG,MAAMlD,SAAS,CAACmD,gBAAgB,CAACC,mBAAmB,CACjErD,UAAU,CAACsD,OACb,CAAC;EAED,MAAMC,MAAqB,GAAG;IAC5BhE,IAAI,EAAE,QAAQ;IACdM,SAAS,EAAEA,SAAS;IACpBW,KAAK,EAAE;MACLjB,IAAI,EAAE,IAAI;MACViE,KAAK,EAAEL,MAAM,CAACM,iBAAiB;MAC/BC,KAAK,EAAE7B;IACT;EACF,CAAC;EACD,OAAO0B,MAAM;AACf","ignoreList":[]}
|
|
@@ -14,10 +14,26 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
import { createFetchHeaderMutator } from "@osdk/shared.net.fetch";
|
|
18
|
+
import { additionalContext } from "../Client.js";
|
|
19
|
+
import { createClientFromContext } from "../createClient.js";
|
|
20
|
+
import { OBSERVABLE_USER_AGENT } from "../util/UserAgent.js";
|
|
17
21
|
import { ObservableClientImpl } from "./internal/ObservableClientImpl.js";
|
|
18
22
|
import { Store } from "./internal/Store.js";
|
|
19
23
|
export let ObservableClient;
|
|
20
24
|
export function createObservableClient(client) {
|
|
21
|
-
|
|
25
|
+
// First we need a modified client that adds an extra header so we know its
|
|
26
|
+
// an observable client
|
|
27
|
+
const tweakedClient = createClientFromContext({
|
|
28
|
+
...client[additionalContext],
|
|
29
|
+
fetch: createFetchHeaderMutator(client[additionalContext].fetch, headers => {
|
|
30
|
+
headers.set("Fetch-User-Agent", [headers.get("Fetch-User-Agent"), OBSERVABLE_USER_AGENT].filter(x => x && x?.length > 0).join(" "));
|
|
31
|
+
return headers;
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Then we use that client instead. Because the `client` does not hold
|
|
36
|
+
// any real state, this whole thing works.
|
|
37
|
+
return new ObservableClientImpl(new Store(tweakedClient));
|
|
22
38
|
}
|
|
23
39
|
//# sourceMappingURL=ObservableClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservableClient.js","names":["ObservableClientImpl","Store","ObservableClient","createObservableClient","client"],"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 InterfaceDefinition,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport type { ActionSignatureFromDef } from \"../actions/applyAction.js\";\nimport type
|
|
1
|
+
{"version":3,"file":"ObservableClient.js","names":["createFetchHeaderMutator","additionalContext","createClientFromContext","OBSERVABLE_USER_AGENT","ObservableClientImpl","Store","ObservableClient","createObservableClient","client","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 InterfaceDefinition,\n ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n WhereClause,\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 { OBSERVABLE_USER_AGENT } from \"../util/UserAgent.js\";\nimport type { Canonical } from \"./internal/Canonical.js\";\nimport { ObservableClientImpl } from \"./internal/ObservableClientImpl.js\";\nimport { Store } from \"./internal/Store.js\";\nimport type { OptimisticBuilder } from \"./OptimisticBuilder.js\";\n\nexport type Status = \"init\" | \"loading\" | \"loaded\" | \"error\";\n\nexport interface Observer<T> {\n next: (value: T) => void;\n error: (err: any) => void;\n complete: () => void;\n}\n\nexport namespace ObservableClient {\n export interface ApplyActionOptions {\n optimisticUpdate?: (ctx: OptimisticBuilder) => void;\n }\n}\n\nexport interface CommonObserveOptions {\n dedupeInterval?: number;\n}\n\nexport interface ObserveOptions {\n mode?: \"offline\" | \"force\";\n}\n\nexport interface ObserveObjectOptions<\n T extends ObjectTypeDefinition | InterfaceDefinition,\n> extends ObserveOptions {\n select?: PropertyKeys<T>[];\n}\n\nexport type OrderBy<Q extends ObjectTypeDefinition | InterfaceDefinition> = {\n [K in PropertyKeys<Q>]?: \"asc\" | \"desc\" | undefined;\n};\n\nexport interface ObserveListOptions<\n Q extends ObjectTypeDefinition | InterfaceDefinition,\n> extends CommonObserveOptions, ObserveOptions {\n type: Pick<Q, \"apiName\" | \"type\">;\n where?: WhereClause<Q>;\n pageSize?: number;\n orderBy?: OrderBy<Q>;\n invalidationMode?: \"in-place\" | \"wait\" | \"reset\";\n expectedLength?: number;\n streamUpdates?: boolean;\n}\n\nexport interface ObserveObjectArgs<T extends ObjectTypeDefinition> {\n object: Osdk.Instance<T> | undefined;\n isOptimistic: boolean;\n status: Status;\n lastUpdated: number;\n}\n\nexport interface ObserveObjectsArgs<\n T extends ObjectTypeDefinition | InterfaceDefinition,\n> {\n resolvedList: Array<Osdk.Instance<T>>;\n isOptimistic: boolean;\n lastUpdated: number;\n fetchMore: () => Promise<unknown>;\n hasMore: boolean;\n status: Status;\n}\n\nexport interface ObservableClient {\n observeObject<T extends ObjectTypeDefinition>(\n apiName: T[\"apiName\"] | T,\n pk: PrimaryKeyType<T>,\n options: ObserveOptions,\n subFn: Observer<ObserveObjectArgs<T>>,\n ): Unsubscribable;\n\n observeList<T extends ObjectTypeDefinition | InterfaceDefinition>(\n options: ObserveListOptions<T>,\n subFn: Observer<ObserveObjectsArgs<T>>,\n ): Unsubscribable;\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<unknown>;\n\n canonicalizeWhereClause: <\n T extends ObjectTypeDefinition | InterfaceDefinition,\n >(\n where: WhereClause<T>,\n ) => Canonical<WhereClause<T>>;\n}\n\nexport function createObservableClient(client: Client): 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 ].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;;AAWA,SAASA,wBAAwB,QAAQ,wBAAwB;AAEjE,SAASC,iBAAiB,QAAqB,cAAc;AAC7D,SAASC,uBAAuB,QAAQ,oBAAoB;AAC5D,SAASC,qBAAqB,QAAQ,sBAAsB;AAE5D,SAASC,oBAAoB,QAAQ,oCAAoC;AACzE,SAASC,KAAK,QAAQ,qBAAqB;AAAC,WAW3BC,gBAAgB;AAkFjC,OAAO,SAASC,sBAAsBA,CAACC,MAAc,EAAoB;EACvE;EACA;EACA,MAAMC,aAAa,GAAGP,uBAAuB,CAAC;IAC5C,GAAGM,MAAM,CAACP,iBAAiB,CAAC;IAE5BS,KAAK,EAAEV,wBAAwB,CAC7BQ,MAAM,CAACP,iBAAiB,CAAC,CAACS,KAAK,EAC9BC,OAAO,IAAK;MACXA,OAAO,CAACC,GAAG,CACT,kBAAkB,EAClB,CACED,OAAO,CAACE,GAAG,CAAC,kBAAkB,CAAC,EAC/BV,qBAAqB,CACtB,CAACW,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,IAAIP,oBAAoB,CAAC,IAAIC,KAAK,CAACI,aAAa,CAAC,CAAC;AAC3D","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptimisticBuilder.js","names":[],"sources":["OptimisticBuilder.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 ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n} from \"@osdk/api\";\n\nexport interface OptimisticBuilder {\n updateObject: <T extends ObjectTypeDefinition>(\n value: Osdk.Instance<T>,\n ) => this;\n createObject: <T extends ObjectTypeDefinition>(\n type: T,\n primaryKey: PrimaryKeyType<T>,\n properties: Pick<Osdk.Instance<T>, PropertyKeys<T>>,\n ) => this;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"OptimisticBuilder.js","names":[],"sources":["OptimisticBuilder.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 ObjectTypeDefinition,\n Osdk,\n PrimaryKeyType,\n PropertyKeys,\n} from \"@osdk/api\";\n\nexport interface OptimisticBuilder {\n updateObject: <T extends ObjectTypeDefinition>(\n value: Osdk.Instance<T>,\n ) => this;\n createObject: <T extends ObjectTypeDefinition>(\n type: T,\n primaryKey: PrimaryKeyType<T>,\n properties: Pick<Osdk.Instance<T>, PropertyKeys<T>>,\n ) => this;\n deleteObject: <T extends ObjectTypeDefinition>(\n value: Osdk.Instance<T>,\n ) => this;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import delay from "delay";
|
|
18
|
-
import { createChangedObjects } from "./Changes.js";
|
|
19
18
|
import { runOptimisticJob } from "./OptimisticJob.js";
|
|
20
19
|
const ACTION_DELAY = process.env.NODE_ENV === "production" ? 0 : 1000;
|
|
21
20
|
export class ActionApplication {
|
|
@@ -31,6 +30,17 @@ export class ActionApplication {
|
|
|
31
30
|
const removeOptimisticResult = runOptimisticJob(this.store, optimisticUpdate);
|
|
32
31
|
return await (async () => {
|
|
33
32
|
try {
|
|
33
|
+
if (Array.isArray(args)) {
|
|
34
|
+
if (process.env.NODE_ENV !== "production") {
|
|
35
|
+
logger?.debug("applying action to multiple args", args);
|
|
36
|
+
}
|
|
37
|
+
const results = await this.store.client(action).batchApplyAction(args, {
|
|
38
|
+
$returnEdits: true
|
|
39
|
+
});
|
|
40
|
+
await this.#invalidateActionEditResponse(results);
|
|
41
|
+
return results;
|
|
42
|
+
}
|
|
43
|
+
|
|
34
44
|
// The types for client get confused when we dynamically applyAction so we
|
|
35
45
|
// have to deal with the `any` here and force cast it to what it should be.
|
|
36
46
|
// TODO: Update the types so this doesn't happen!
|
|
@@ -56,47 +66,38 @@ export class ActionApplication {
|
|
|
56
66
|
}
|
|
57
67
|
})();
|
|
58
68
|
};
|
|
59
|
-
#invalidateActionEditResponse = async
|
|
60
|
-
|
|
69
|
+
#invalidateActionEditResponse = async ({
|
|
70
|
+
deletedObjects,
|
|
71
|
+
modifiedObjects,
|
|
72
|
+
addedObjects,
|
|
73
|
+
editedObjectTypes,
|
|
74
|
+
type
|
|
75
|
+
}) => {
|
|
61
76
|
let changes;
|
|
62
|
-
if (
|
|
77
|
+
if (type === "edits") {
|
|
63
78
|
const promisesToWait = [];
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
for (const obj of value.addedObjects) {
|
|
69
|
-
promisesToWait.push(this.store.invalidateObject(obj.objectType, obj.primaryKey));
|
|
70
|
-
typesToInvalidate.add(obj.objectType);
|
|
79
|
+
for (const list of [deletedObjects, modifiedObjects, addedObjects]) {
|
|
80
|
+
for (const obj of list ?? []) {
|
|
81
|
+
promisesToWait.push(this.store.invalidateObject(obj.objectType, obj.primaryKey));
|
|
82
|
+
}
|
|
71
83
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
// the action invocation just gives back object ids,
|
|
75
|
-
// but the invalidateObject calls above should have put the
|
|
76
|
-
// actual objects in the cache
|
|
77
|
-
const changes = createChangedObjects();
|
|
78
|
-
for (const changeType of ["addedObjects", "modifiedObjects"]) {
|
|
84
|
+
this.store.batch({}, batch => {
|
|
79
85
|
for (const {
|
|
80
86
|
objectType,
|
|
81
87
|
primaryKey
|
|
82
|
-
} of
|
|
88
|
+
} of deletedObjects ?? []) {
|
|
83
89
|
const cacheKey = this.store.getCacheKey("object", objectType, primaryKey);
|
|
84
|
-
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
if (obj && obj.value) {
|
|
88
|
-
changes[changeType].set(objectType, obj.value);
|
|
89
|
-
(changeType === "addedObjects" ? changes.added : changes.modified).add(cacheKey);
|
|
90
|
-
}
|
|
90
|
+
this.store.peekQuery(cacheKey)?.deleteFromStore("loaded",
|
|
91
|
+
// this is probably not the best value to use
|
|
92
|
+
batch);
|
|
91
93
|
}
|
|
92
|
-
}
|
|
94
|
+
});
|
|
95
|
+
await Promise.all(promisesToWait);
|
|
93
96
|
} else {
|
|
94
|
-
for (const apiName of
|
|
95
|
-
typesToInvalidate.add(apiName.toString());
|
|
97
|
+
for (const apiName of editedObjectTypes) {
|
|
96
98
|
await this.store.invalidateObjectType(apiName, changes);
|
|
97
99
|
}
|
|
98
100
|
}
|
|
99
|
-
return value;
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
103
|
//# sourceMappingURL=ActionApplication.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionApplication.js","names":["delay","
|
|
1
|
+
{"version":3,"file":"ActionApplication.js","names":["delay","runOptimisticJob","ACTION_DELAY","process","env","NODE_ENV","ActionApplication","constructor","store","applyAction","action","args","optimisticUpdate","logger","child","methodName","removeOptimisticResult","Array","isArray","debug","results","client","batchApplyAction","$returnEdits","invalidateActionEditResponse","actionResults","#invalidateActionEditResponse","deletedObjects","modifiedObjects","addedObjects","editedObjectTypes","type","changes","promisesToWait","list","obj","push","invalidateObject","objectType","primaryKey","batch","cacheKey","getCacheKey","peekQuery","deleteFromStore","Promise","all","apiName","invalidateObjectType"],"sources":["ActionApplication.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 ActionReturnTypeForOptions,\n} from \"@osdk/api\";\nimport delay from \"delay\";\nimport type { ActionSignatureFromDef } from \"../../actions/applyAction.js\";\nimport { type Changes } from \"./Changes.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\nimport { runOptimisticJob } from \"./OptimisticJob.js\";\nimport type { Store } from \"./Store.js\";\n\nconst ACTION_DELAY = process.env.NODE_ENV === \"production\" ? 0 : 1000;\n\nexport class ActionApplication {\n constructor(private store: Store) {}\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 (\n action,\n args,\n { optimisticUpdate } = {},\n ) => {\n const logger = process.env.NODE_ENV !== \"production\"\n ? this.store.logger?.child({ methodName: \"applyAction\" })\n : this.store.logger;\n const removeOptimisticResult = runOptimisticJob(\n this.store,\n optimisticUpdate,\n );\n\n return await (async () => {\n try {\n if (Array.isArray(args)) {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\"applying action to multiple args\", args);\n }\n\n const results: ActionReturnTypeForOptions<{ $returnEdits: true }> =\n await this.store\n .client(action).batchApplyAction(\n args,\n { $returnEdits: true },\n );\n\n await this.#invalidateActionEditResponse(results);\n\n return results;\n }\n\n // The types for client get confused when we dynamically applyAction so we\n // have to deal with the `any` here and force cast it to what it should be.\n // TODO: Update the types so this doesn't happen!\n\n const actionResults: ActionEditResponse = await this.store.client(\n action,\n ).applyAction(args as any, { $returnEdits: true });\n\n if (process.env.NODE_ENV !== \"production\") {\n if (ACTION_DELAY > 0) {\n logger?.debug(\"action done, pausing\", actionResults);\n await delay(ACTION_DELAY);\n logger?.debug(\"action done, pausing done\");\n }\n }\n await this.#invalidateActionEditResponse(actionResults);\n return actionResults;\n } finally {\n if (process.env.NODE_ENV !== \"production\") {\n logger?.debug(\n \"optimistic action complete; remove the results\",\n );\n }\n // make sure this happens even if the action fails\n await removeOptimisticResult();\n }\n })();\n };\n\n #invalidateActionEditResponse = async (\n { deletedObjects, modifiedObjects, addedObjects, editedObjectTypes, type }:\n ActionEditResponse,\n ): Promise<void> => {\n let changes: Changes | undefined;\n if (type === \"edits\") {\n const promisesToWait: Promise<any>[] = [];\n\n for (const list of [deletedObjects, modifiedObjects, addedObjects]) {\n for (const obj of list ?? []) {\n promisesToWait.push(\n this.store.invalidateObject(obj.objectType, obj.primaryKey),\n );\n }\n }\n\n this.store.batch({}, (batch) => {\n for (const { objectType, primaryKey } of deletedObjects ?? []) {\n const cacheKey = this.store.getCacheKey<ObjectCacheKey>(\n \"object\",\n objectType,\n primaryKey,\n );\n this.store.peekQuery(cacheKey)?.deleteFromStore(\n \"loaded\", // this is probably not the best value to use\n batch,\n );\n }\n });\n await Promise.all(promisesToWait);\n } else {\n for (const apiName of editedObjectTypes) {\n await this.store.invalidateObjectType(apiName as string, changes);\n }\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,15 +21,19 @@ export class Changes {
|
|
|
21
21
|
addedObjects = new MultiMap();
|
|
22
22
|
added = new Set();
|
|
23
23
|
modified = new Set();
|
|
24
|
+
deleted = new Set();
|
|
24
25
|
registerObject = (cacheKey, data, isNew) => {
|
|
25
26
|
this[isNew ? "addedObjects" : "modifiedObjects"].set(data.$apiName, data);
|
|
26
27
|
this[isNew ? "added" : "modified"].add(cacheKey);
|
|
27
28
|
};
|
|
29
|
+
deleteObject = cacheKey => {
|
|
30
|
+
this.deleted.add(cacheKey);
|
|
31
|
+
};
|
|
28
32
|
registerList = key => {
|
|
29
33
|
this.modified.add(key);
|
|
30
34
|
};
|
|
31
35
|
isEmpty() {
|
|
32
|
-
return this.modifiedObjects.size === 0 && this.addedObjects.size === 0 && this.added.size === 0 && this.modified.size === 0;
|
|
36
|
+
return this.modifiedObjects.size === 0 && this.addedObjects.size === 0 && this.added.size === 0 && this.modified.size === 0 && this.deleted.size === 0;
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
export function createChangedObjects() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Changes.js","names":["MultiMap","DEBUG_ONLY__cacheKeyToString","Changes","modifiedObjects","addedObjects","added","Set","modified","registerObject","cacheKey","data","isNew","set","$apiName","add","registerList","key","isEmpty","size","createChangedObjects","DEBUG_ONLY__changesToString","changes","process","env","NODE_ENV","JSON","stringify","multimapHelper","listHelper","Error","Array","from","map","multimap","Object","fromEntries","associations","type","objects","o","$primaryKey"],"sources":["Changes.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 { MultiMap } from \"mnemonist\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { DEBUG_ONLY__cacheKeyToString } from \"./CacheKey.js\";\nimport type { ListCacheKey } from \"./ListQuery.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\n\nexport class Changes {\n modifiedObjects: MultiMap<string, ObjectHolder> = new MultiMap();\n addedObjects: MultiMap<string, ObjectHolder> = new MultiMap();\n\n added: Set<ListCacheKey | ObjectCacheKey> = new Set();\n modified: Set<ListCacheKey | ObjectCacheKey> = new Set();\n\n registerObject = (\n cacheKey: ObjectCacheKey,\n data: ObjectHolder,\n isNew: boolean,\n ): void => {\n this[isNew ? \"addedObjects\" : \"modifiedObjects\"].set(data.$apiName, data);\n this[isNew ? \"added\" : \"modified\"].add(cacheKey);\n };\n\n registerList = (key: ListCacheKey): void => {\n this.modified.add(key);\n };\n\n isEmpty(): boolean {\n return (\n this.modifiedObjects.size === 0\n && this.addedObjects.size === 0\n && this.added.size === 0\n && this.modified.size === 0\n );\n }\n}\n\nexport function createChangedObjects(): Changes {\n return new Changes();\n}\n\nexport function DEBUG_ONLY__changesToString(changes: Changes): string {\n if (process.env.NODE_ENV !== \"production\") {\n return JSON.stringify(\n {\n modifiedObjects: multimapHelper(changes.modifiedObjects),\n addedObjects: multimapHelper(changes.addedObjects),\n added: listHelper(changes.added),\n modified: listHelper(changes.modified),\n },\n null,\n 2,\n );\n } else {\n throw new Error(\"not implemented\");\n }\n}\n\nfunction listHelper(set: Set<CacheKey>) {\n return Array.from(set).map(DEBUG_ONLY__cacheKeyToString);\n}\n\nfunction multimapHelper(\n multimap: MultiMap<string, ObjectHolder>,\n) {\n return Object.fromEntries(\n Array.from(multimap.associations()).map(\n ([type, objects]) => {\n return [type, objects.map(o => o.$primaryKey)];\n },\n ),\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,WAAW;AAGpC,SAASC,4BAA4B,QAAQ,eAAe;AAI5D,OAAO,MAAMC,OAAO,CAAC;EACnBC,eAAe,GAAmC,IAAIH,QAAQ,CAAC,CAAC;EAChEI,YAAY,GAAmC,IAAIJ,QAAQ,CAAC,CAAC;EAE7DK,KAAK,GAAuC,IAAIC,GAAG,CAAC,CAAC;EACrDC,QAAQ,GAAuC,IAAID,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Changes.js","names":["MultiMap","DEBUG_ONLY__cacheKeyToString","Changes","modifiedObjects","addedObjects","added","Set","modified","deleted","registerObject","cacheKey","data","isNew","set","$apiName","add","deleteObject","registerList","key","isEmpty","size","createChangedObjects","DEBUG_ONLY__changesToString","changes","process","env","NODE_ENV","JSON","stringify","multimapHelper","listHelper","Error","Array","from","map","multimap","Object","fromEntries","associations","type","objects","o","$primaryKey"],"sources":["Changes.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 { MultiMap } from \"mnemonist\";\nimport type { ObjectHolder } from \"../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { CacheKey } from \"./CacheKey.js\";\nimport { DEBUG_ONLY__cacheKeyToString } from \"./CacheKey.js\";\nimport type { ListCacheKey } from \"./ListQuery.js\";\nimport type { ObjectCacheKey } from \"./ObjectQuery.js\";\n\nexport class Changes {\n modifiedObjects: MultiMap<string, ObjectHolder> = new MultiMap();\n addedObjects: MultiMap<string, ObjectHolder> = new MultiMap();\n\n added: Set<ListCacheKey | ObjectCacheKey> = new Set();\n modified: Set<ListCacheKey | ObjectCacheKey> = new Set();\n deleted: Set<ListCacheKey | ObjectCacheKey> = new Set();\n\n registerObject = (\n cacheKey: ObjectCacheKey,\n data: ObjectHolder,\n isNew: boolean,\n ): void => {\n this[isNew ? \"addedObjects\" : \"modifiedObjects\"].set(data.$apiName, data);\n this[isNew ? \"added\" : \"modified\"].add(cacheKey);\n };\n\n deleteObject = (cacheKey: ObjectCacheKey): void => {\n this.deleted.add(cacheKey);\n };\n\n registerList = (key: ListCacheKey): void => {\n this.modified.add(key);\n };\n\n isEmpty(): boolean {\n return (\n this.modifiedObjects.size === 0\n && this.addedObjects.size === 0\n && this.added.size === 0\n && this.modified.size === 0\n && this.deleted.size === 0\n );\n }\n}\n\nexport function createChangedObjects(): Changes {\n return new Changes();\n}\n\nexport function DEBUG_ONLY__changesToString(changes: Changes): string {\n if (process.env.NODE_ENV !== \"production\") {\n return JSON.stringify(\n {\n modifiedObjects: multimapHelper(changes.modifiedObjects),\n addedObjects: multimapHelper(changes.addedObjects),\n added: listHelper(changes.added),\n modified: listHelper(changes.modified),\n },\n null,\n 2,\n );\n } else {\n throw new Error(\"not implemented\");\n }\n}\n\nfunction listHelper(set: Set<CacheKey>) {\n return Array.from(set).map(DEBUG_ONLY__cacheKeyToString);\n}\n\nfunction multimapHelper(\n multimap: MultiMap<string, ObjectHolder>,\n) {\n return Object.fromEntries(\n Array.from(multimap.associations()).map(\n ([type, objects]) => {\n return [type, objects.map(o => o.$primaryKey)];\n },\n ),\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,WAAW;AAGpC,SAASC,4BAA4B,QAAQ,eAAe;AAI5D,OAAO,MAAMC,OAAO,CAAC;EACnBC,eAAe,GAAmC,IAAIH,QAAQ,CAAC,CAAC;EAChEI,YAAY,GAAmC,IAAIJ,QAAQ,CAAC,CAAC;EAE7DK,KAAK,GAAuC,IAAIC,GAAG,CAAC,CAAC;EACrDC,QAAQ,GAAuC,IAAID,GAAG,CAAC,CAAC;EACxDE,OAAO,GAAuC,IAAIF,GAAG,CAAC,CAAC;EAEvDG,cAAc,GAAGA,CACfC,QAAwB,EACxBC,IAAkB,EAClBC,KAAc,KACL;IACT,IAAI,CAACA,KAAK,GAAG,cAAc,GAAG,iBAAiB,CAAC,CAACC,GAAG,CAACF,IAAI,CAACG,QAAQ,EAAEH,IAAI,CAAC;IACzE,IAAI,CAACC,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC,CAACG,GAAG,CAACL,QAAQ,CAAC;EAClD,CAAC;EAEDM,YAAY,GAAIN,QAAwB,IAAW;IACjD,IAAI,CAACF,OAAO,CAACO,GAAG,CAACL,QAAQ,CAAC;EAC5B,CAAC;EAEDO,YAAY,GAAIC,GAAiB,IAAW;IAC1C,IAAI,CAACX,QAAQ,CAACQ,GAAG,CAACG,GAAG,CAAC;EACxB,CAAC;EAEDC,OAAOA,CAAA,EAAY;IACjB,OACE,IAAI,CAAChB,eAAe,CAACiB,IAAI,KAAK,CAAC,IAC5B,IAAI,CAAChB,YAAY,CAACgB,IAAI,KAAK,CAAC,IAC5B,IAAI,CAACf,KAAK,CAACe,IAAI,KAAK,CAAC,IACrB,IAAI,CAACb,QAAQ,CAACa,IAAI,KAAK,CAAC,IACxB,IAAI,CAACZ,OAAO,CAACY,IAAI,KAAK,CAAC;EAE9B;AACF;AAEA,OAAO,SAASC,oBAAoBA,CAAA,EAAY;EAC9C,OAAO,IAAInB,OAAO,CAAC,CAAC;AACtB;AAEA,OAAO,SAASoB,2BAA2BA,CAACC,OAAgB,EAAU;EACpE,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;IACzC,OAAOC,IAAI,CAACC,SAAS,CACnB;MACEzB,eAAe,EAAE0B,cAAc,CAACN,OAAO,CAACpB,eAAe,CAAC;MACxDC,YAAY,EAAEyB,cAAc,CAACN,OAAO,CAACnB,YAAY,CAAC;MAClDC,KAAK,EAAEyB,UAAU,CAACP,OAAO,CAAClB,KAAK,CAAC;MAChCE,QAAQ,EAAEuB,UAAU,CAACP,OAAO,CAAChB,QAAQ;IACvC,CAAC,EACD,IAAI,EACJ,CACF,CAAC;EACH,CAAC,MAAM;IACL,MAAM,IAAIwB,KAAK,CAAC,iBAAiB,CAAC;EACpC;AACF;AAEA,SAASD,UAAUA,CAACjB,GAAkB,EAAE;EACtC,OAAOmB,KAAK,CAACC,IAAI,CAACpB,GAAG,CAAC,CAACqB,GAAG,CAACjC,4BAA4B,CAAC;AAC1D;AAEA,SAAS4B,cAAcA,CACrBM,QAAwC,EACxC;EACA,OAAOC,MAAM,CAACC,WAAW,CACvBL,KAAK,CAACC,IAAI,CAACE,QAAQ,CAACG,YAAY,CAAC,CAAC,CAAC,CAACJ,GAAG,CACrC,CAAC,CAACK,IAAI,EAAEC,OAAO,CAAC,KAAK;IACnB,OAAO,CAACD,IAAI,EAAEC,OAAO,CAACN,GAAG,CAACO,CAAC,IAAIA,CAAC,CAACC,WAAW,CAAC,CAAC;EAChD,CACF,CACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -150,7 +150,7 @@ export class ListQuery extends BaseListQuery {
|
|
|
150
150
|
_createConnectable(subject) {
|
|
151
151
|
return connectable(subject.pipe(switchMap(listEntry => {
|
|
152
152
|
return combineLatest({
|
|
153
|
-
resolvedList: listEntry?.value?.data == null ? of([]) : combineLatest(listEntry.value.data.map(cacheKey => this.store.getSubject(cacheKey).pipe(map(objectEntry => objectEntry?.value)))),
|
|
153
|
+
resolvedList: listEntry?.value?.data == null || listEntry.value.data.length === 0 ? of([]) : combineLatest(listEntry.value.data.map(cacheKey => this.store.getSubject(cacheKey).pipe(map(objectEntry => objectEntry?.value)))),
|
|
154
154
|
isOptimistic: of(listEntry.isOptimistic),
|
|
155
155
|
fetchMore: of(this.fetchMore),
|
|
156
156
|
hasMore: of(this.#nextPageToken != null),
|
|
@@ -171,7 +171,7 @@ export class ListQuery extends BaseListQuery {
|
|
|
171
171
|
if (process.env.NODE_ENV !== "production") {
|
|
172
172
|
this.logger?.child({
|
|
173
173
|
methodName: "_fetchAndStore"
|
|
174
|
-
}).
|
|
174
|
+
}).debug("fetching pages");
|
|
175
175
|
}
|
|
176
176
|
while (true) {
|
|
177
177
|
const entry = await this.#fetchPageAndUpdate(this.#objectSet, "loading", this.abortController?.signal);
|
|
@@ -300,9 +300,6 @@ export class ListQuery extends BaseListQuery {
|
|
|
300
300
|
changes.modified.add(this.cacheKey);
|
|
301
301
|
try {
|
|
302
302
|
const relevantObjects = this._extractRelevantObjects(changes);
|
|
303
|
-
if (relevantObjects.added.all.length === 0 && relevantObjects.modified.all.length === 0) {
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
303
|
|
|
307
304
|
// If we got purely strict matches we can just update the list and move
|
|
308
305
|
// on with our lives. But if we got sorta matches, then we need to revalidate
|
|
@@ -322,7 +319,9 @@ export class ListQuery extends BaseListQuery {
|
|
|
322
319
|
const toAdd = new Set(
|
|
323
320
|
// easy case. objects are new to the cache and they match this filter
|
|
324
321
|
relevantObjects.added.strictMatches);
|
|
325
|
-
|
|
322
|
+
|
|
323
|
+
// anything thats been deleted can be removed, so start there
|
|
324
|
+
const toRemove = new Set(changes.deleted);
|
|
326
325
|
|
|
327
326
|
// deal with the modified objects
|
|
328
327
|
for (const obj of relevantObjects.modified.all) {
|
|
@@ -369,6 +368,17 @@ export class ListQuery extends BaseListQuery {
|
|
|
369
368
|
}
|
|
370
369
|
}
|
|
371
370
|
};
|
|
371
|
+
#matchType(obj) {
|
|
372
|
+
// if its a strict match we can just insert it into place
|
|
373
|
+
if (objectMatchesWhereClause(obj, this.#whereClause, true)) {
|
|
374
|
+
return "strict";
|
|
375
|
+
}
|
|
376
|
+
// sorta match means it used a filter we cannot use on the frontend
|
|
377
|
+
if (objectMatchesWhereClause(obj, this.#whereClause, false)) {
|
|
378
|
+
return "sorta";
|
|
379
|
+
}
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
372
382
|
_extractRelevantObjects(changes) {
|
|
373
383
|
// TODO refactor this ternary into subclasses
|
|
374
384
|
const relevantObjects = this.#type === "object" ? this.#extractRelevantObjectsForTypeObject(changes) : this.#extractRelevantObjectsForTypeInterface(changes);
|
|
@@ -376,28 +386,20 @@ export class ListQuery extends BaseListQuery {
|
|
|
376
386
|
// categorize
|
|
377
387
|
for (const group of Object.values(relevantObjects)) {
|
|
378
388
|
for (const obj of group.all ?? []) {
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
group.strictMatches.add(obj);
|
|
383
|
-
} else {
|
|
384
|
-
// sorta match means it used a filter we cannot use on the frontend
|
|
385
|
-
const sortaMatch = objectMatchesWhereClause(obj, this.#whereClause, false);
|
|
386
|
-
if (sortaMatch) {
|
|
387
|
-
group.sortaMatches.add(obj);
|
|
388
|
-
}
|
|
389
|
+
const matchType = this.#matchType(obj);
|
|
390
|
+
if (matchType) {
|
|
391
|
+
group[`${matchType}Matches`].add(obj);
|
|
389
392
|
}
|
|
390
393
|
}
|
|
391
394
|
}
|
|
392
395
|
return relevantObjects;
|
|
393
396
|
}
|
|
394
397
|
#extractRelevantObjectsForTypeInterface(changes) {
|
|
395
|
-
const
|
|
396
|
-
return this.#apiName in object[ObjectDefRef].interfaceMap;
|
|
397
|
-
}).map(([, object]) => object.$as(this.#apiName));
|
|
398
|
-
const modified = Array.from(changes.modifiedObjects).filter(([, object]) => {
|
|
398
|
+
const matchesApiName = ([, object]) => {
|
|
399
399
|
return this.#apiName in object[ObjectDefRef].interfaceMap;
|
|
400
|
-
}
|
|
400
|
+
};
|
|
401
|
+
const added = Array.from(changes.addedObjects).filter(matchesApiName).map(([, object]) => object.$as(this.#apiName));
|
|
402
|
+
const modified = Array.from(changes.modifiedObjects).filter(matchesApiName).map(([, object]) => object.$as(this.#apiName));
|
|
401
403
|
return {
|
|
402
404
|
added: {
|
|
403
405
|
all: added,
|
|
@@ -478,7 +480,7 @@ export class ListQuery extends BaseListQuery {
|
|
|
478
480
|
if (process.env.NODE_ENV !== "production") {
|
|
479
481
|
this.logger?.child({
|
|
480
482
|
methodName: "onOutOfDate"
|
|
481
|
-
}).
|
|
483
|
+
}).debug("");
|
|
482
484
|
}
|
|
483
485
|
}
|
|
484
486
|
#onOswError(errors) {
|