@osdk/faux 0.3.0-beta.1 → 0.3.0-beta.2

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 (27) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/build/browser/FauxFoundry/FauxDataStore.js +14 -9
  3. package/build/browser/FauxFoundry/FauxDataStore.js.map +1 -1
  4. package/build/browser/FauxFoundry/FauxDataStore.test.js +255 -1
  5. package/build/browser/FauxFoundry/FauxDataStore.test.js.map +1 -1
  6. package/build/browser/mock/OntologiesV2/Transactions.js +20 -0
  7. package/build/browser/mock/OntologiesV2/Transactions.js.map +1 -0
  8. package/build/browser/mock/OntologiesV2/index.js +1 -0
  9. package/build/browser/mock/OntologiesV2/index.js.map +1 -1
  10. package/build/cjs/index.cjs +48 -25
  11. package/build/cjs/index.cjs.map +1 -1
  12. package/build/cjs/index.d.cts +11 -4
  13. package/build/esm/FauxFoundry/FauxDataStore.js +14 -9
  14. package/build/esm/FauxFoundry/FauxDataStore.js.map +1 -1
  15. package/build/esm/FauxFoundry/FauxDataStore.test.js +255 -1
  16. package/build/esm/FauxFoundry/FauxDataStore.test.js.map +1 -1
  17. package/build/esm/mock/OntologiesV2/Transactions.js +20 -0
  18. package/build/esm/mock/OntologiesV2/Transactions.js.map +1 -0
  19. package/build/esm/mock/OntologiesV2/index.js +1 -0
  20. package/build/esm/mock/OntologiesV2/index.js.map +1 -1
  21. package/build/types/FauxFoundry/FauxDataStore.d.ts +2 -2
  22. package/build/types/FauxFoundry/FauxDataStore.d.ts.map +1 -1
  23. package/build/types/mock/OntologiesV2/Transactions.d.ts +3 -0
  24. package/build/types/mock/OntologiesV2/Transactions.d.ts.map +1 -0
  25. package/build/types/mock/OntologiesV2/index.d.ts +1 -0
  26. package/build/types/mock/OntologiesV2/index.d.ts.map +1 -1
  27. package/package.json +7 -7
@@ -1,5 +1,5 @@
1
1
  import * as OntologiesV2$1 from '@osdk/foundry.ontologies';
2
- import { ActionParameterV2, ParameterId, ActionTypeV2, ActionTypeApiName, ObjectTypeV2, PropertyV2, ApplyActionRequestV2, ActionParameterType, AttachmentRid, Ontology, OntologyV2, Actions as Actions$1, ActionTypesV2 as ActionTypesV2$1, AttachmentPropertiesV2 as AttachmentPropertiesV2$1, Attachments as Attachments$1, LinkedObjectsV2 as LinkedObjectsV2$1, MediaReferenceProperties as MediaReferenceProperties$1, ObjectTypesV2 as ObjectTypesV2$1, OntologiesV2 as OntologiesV2$2, OntologyInterfaces as OntologyInterfaces$1, OntologyObjectSets as OntologyObjectSets$1, OntologyObjectsV2 as OntologyObjectsV2$1, Queries as Queries$1, QueryTypes as QueryTypes$1, TimeSeriesPropertiesV2 as TimeSeriesPropertiesV2$1, TimeSeriesValueBankProperties as TimeSeriesValueBankProperties$1 } from '@osdk/foundry.ontologies';
2
+ import { ActionParameterV2, ParameterId, ActionTypeV2, ActionTypeApiName, ObjectTypeV2, PropertyV2, ApplyActionRequestV2, ActionParameterType, AttachmentRid, Ontology, OntologyV2, Actions as Actions$1, ActionTypesV2 as ActionTypesV2$1, AttachmentPropertiesV2 as AttachmentPropertiesV2$1, Attachments as Attachments$1, LinkedObjectsV2 as LinkedObjectsV2$1, MediaReferenceProperties as MediaReferenceProperties$1, ObjectTypesV2 as ObjectTypesV2$1, OntologiesV2 as OntologiesV2$2, OntologyInterfaces as OntologyInterfaces$1, OntologyObjectSets as OntologyObjectSets$1, OntologyObjectsV2 as OntologyObjectsV2$1, Queries as Queries$1, QueryTypes as QueryTypes$1, TimeSeriesPropertiesV2 as TimeSeriesPropertiesV2$1, TimeSeriesValueBankProperties as TimeSeriesValueBankProperties$1, OntologyTransactions } from '@osdk/foundry.ontologies';
3
3
  import { Merge, ReadonlyDeep } from 'type-fest';
4
4
  import { ActionDefinition, ActionMetadata, ActionParam, DataValueClientToWire, ApplyActionOptions, ActionReturnTypeForOptions, ApplyBatchActionOptions, ObjectMetadata, PropertyValueWireToClient, PropertyDef, ObjectTypeDefinition, CompileTimeMetadata, PrimaryKeyType, Logger } from '@osdk/api';
5
5
  import { ObjectTypeNotFound, LinkTypeNotFound as LinkTypeNotFound$1, OntologyNotFound, ObjectNotFound, QueryNotFound, ActionNotFound, ApplyActionFailed, QueryEncounteredUserFacingError, InvalidContentType, AttachmentSizeExceededLimit, AttachmentNotFound } from '@osdk/internal.foundry.ontologies';
@@ -290,14 +290,14 @@ declare class FauxDataStore {
290
290
  *
291
291
  * @param obj An `Osdk.Instance` like object for the ObjectType in the generics
292
292
  */
293
- registerObject<T extends ObjectTypeDefinition>(objectType: T, obj: ObjectTypeCreatable<T> | ObjectTypeCreatableWithoutApiName<T>): void;
293
+ registerObject<T extends ObjectTypeDefinition>(objectType: T, obj: ObjectTypeCreatable<T> | ObjectTypeCreatableWithoutApiName<T>): BaseServerObject;
294
294
  /**
295
295
  * Version of register object generally used in shared.test
296
296
  * @param obj A raw server side representation of an object
297
297
  *
298
298
  * Don't use, its too easy to end up with an any.
299
299
  */
300
- registerObject(obj: BaseServerObject): void;
300
+ registerObject(obj: BaseServerObject): BaseServerObject;
301
301
  replaceObjectOrThrow(x: BaseServerObject): void;
302
302
  /** Throws if the object does not already exist */
303
303
  unregisterObjectOrThrow(objectType: string, primaryKey: string | number | boolean): void;
@@ -541,6 +541,13 @@ declare namespace TimeSeriesValueBankProperties {
541
541
  export { TimeSeriesValueBankProperties_getLatestValue as getLatestValue, TimeSeriesValueBankProperties_streamValues as streamValues };
542
542
  }
543
543
 
544
+ declare const postEdits: CallFactory<"ontologyApiName" | "transactionRid", typeof OntologyTransactions.postEdits>;
545
+
546
+ declare const Transactions_postEdits: typeof postEdits;
547
+ declare namespace Transactions {
548
+ export { Transactions_postEdits as postEdits };
549
+ }
550
+
544
551
  declare const index_ActionTypesV2: typeof ActionTypesV2;
545
552
  declare const index_Actions: typeof Actions;
546
553
  declare const index_AttachmentPropertiesV2: typeof AttachmentPropertiesV2;
@@ -557,7 +564,7 @@ declare const index_QueryTypes: typeof QueryTypes;
557
564
  declare const index_TimeSeriesPropertiesV2: typeof TimeSeriesPropertiesV2;
558
565
  declare const index_TimeSeriesValueBankProperties: typeof TimeSeriesValueBankProperties;
559
566
  declare namespace index {
560
- export { index_ActionTypesV2 as ActionTypesV2, index_Actions as Actions, index_AttachmentPropertiesV2 as AttachmentPropertiesV2, index_Attachments as Attachments, index_LinkedObjectsV2 as LinkedObjectsV2, index_MediaReferenceProperties as MediaReferenceProperties, index_ObjectTypesV2 as ObjectTypesV2, index_OntologiesV2 as OntologiesV2, index_OntologyInterfaces as OntologyInterfaces, index_OntologyObjectSets as OntologyObjectSets, index_OntologyObjectsV2 as OntologyObjectsV2, index_Queries as Queries, index_QueryTypes as QueryTypes, index_TimeSeriesPropertiesV2 as TimeSeriesPropertiesV2, index_TimeSeriesValueBankProperties as TimeSeriesValueBankProperties };
567
+ export { index_ActionTypesV2 as ActionTypesV2, index_Actions as Actions, index_AttachmentPropertiesV2 as AttachmentPropertiesV2, index_Attachments as Attachments, index_LinkedObjectsV2 as LinkedObjectsV2, index_MediaReferenceProperties as MediaReferenceProperties, index_ObjectTypesV2 as ObjectTypesV2, index_OntologiesV2 as OntologiesV2, index_OntologyInterfaces as OntologyInterfaces, index_OntologyObjectSets as OntologyObjectSets, index_OntologyObjectsV2 as OntologyObjectsV2, Transactions as OntologyTransactions, index_Queries as Queries, index_QueryTypes as QueryTypes, index_TimeSeriesPropertiesV2 as TimeSeriesPropertiesV2, index_TimeSeriesValueBankProperties as TimeSeriesValueBankProperties };
561
568
  }
562
569
 
563
570
  declare function withoutRid<T extends {
@@ -15,8 +15,9 @@
15
15
  */
16
16
 
17
17
  import { DefaultMap, MultiMap } from "mnemonist";
18
- import { randomUUID } from "node:crypto";
19
18
  import * as crypto from "node:crypto";
19
+ import { randomUUID } from "node:crypto";
20
+ import { inspect } from "node:util";
20
21
  import invariant from "tiny-invariant";
21
22
  import { InvalidRequest, ObjectNotFoundError } from "../errors.js";
22
23
  import { subSelectProperties } from "../filterObjects.js";
@@ -140,9 +141,11 @@ export class FauxDataStore {
140
141
  };
141
142
  }
142
143
  this.#assertObjectDoesNotExist(bso.__apiName, bso.__primaryKey);
143
- this.#objects.get(bso.__apiName).set(String(bso.__primaryKey), Object.freeze({
144
+ const frozenBso = Object.freeze({
144
145
  ...bso
145
- }));
146
+ });
147
+ this.#objects.get(bso.__apiName).set(String(bso.__primaryKey), frozenBso);
148
+ return frozenBso;
146
149
  }
147
150
  #osdkCreatableToBso(objectType, anyObj) {
148
151
  objectType = typeof objectType === "string" ? objectType : objectType.apiName;
@@ -175,17 +178,19 @@ export class FauxDataStore {
175
178
  const linksToRemove = [];
176
179
  for (const linkDef of objectType.linkTypes) {
177
180
  if (linkDef.cardinality === "ONE") {
178
- !(this.#strict && linkDef.foreignKeyPropertyApiName) ? process.env.NODE_ENV !== "production" ? invariant(false, `Error examining ${objectType.objectType.apiName}.${linkDef.apiName}: ONE side of links should have a foreign key. `) : invariant(false) : void 0;
181
+ !(this.#strict && linkDef.foreignKeyPropertyApiName) ? process.env.NODE_ENV !== "production" ? invariant(false, `Error examining ${objectType.objectType.apiName}.${linkDef.apiName}: ONE side of links should have a foreign key. ${inspect(linkDef, {
182
+ colors: false
183
+ })}`) : invariant(false) : void 0;
179
184
  const fkName = linkDef.foreignKeyPropertyApiName;
180
185
  const fkValue = x[fkName];
181
186
  const oldFkValue = oldObject[fkName];
182
187
  if (oldObject[fkName] !== x[fkName]) {
183
188
  const dstSide = this.ontology.getOtherLinkTypeSideV2OrThrow(objectType.objectType.apiName, linkDef.apiName);
184
189
  const dstLocator = objectLocator({
185
- __apiName: dstSide.objectTypeApiName,
190
+ __apiName: linkDef.objectTypeApiName,
186
191
  __primaryKey: fkValue
187
192
  });
188
- const target = this.getObject(dstSide.objectTypeApiName, fkValue);
193
+ const target = this.getObject(linkDef.objectTypeApiName, fkValue);
189
194
  if (fkValue != null && !target) {
190
195
  // eslint-disable-next-line no-console
191
196
  console.log(`WARNING! Setting a FK value to a non-existent object: ${dstLocator}`);
@@ -202,7 +207,7 @@ export class FauxDataStore {
202
207
  srcLocator: objectLocator(x),
203
208
  srcSide: linkDef,
204
209
  dstLocator: objectLocator({
205
- __apiName: dstSide.objectTypeApiName,
210
+ __apiName: linkDef.objectTypeApiName,
206
211
  __primaryKey: oldFkValue
207
212
  }),
208
213
  dstSide
@@ -407,11 +412,11 @@ export class FauxDataStore {
407
412
  const destLinkName = linkSide.apiName;
408
413
  if (linkSide.cardinality === "ONE") {
409
414
  const links = this.#singleLinks.get(locator);
410
- !(links.get(destLinkName) === expectedPriorValue) ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
415
+ !(links.get(destLinkName) === expectedPriorValue) ? process.env.NODE_ENV !== "production" ? invariant(false, `Failed to remove link: expected ${JSON.stringify(expectedPriorValue)} but found ${JSON.stringify(links.get(destLinkName))} for link ${destLinkName} on ${JSON.stringify(locator)}`) : invariant(false) : void 0;
411
416
  links.delete(destLinkName);
412
417
  } else {
413
418
  const links = this.#manyLinks.get(locator);
414
- !links.get(destLinkName)?.has(expectedPriorValue) ? process.env.NODE_ENV !== "production" ? invariant(false) : invariant(false) : void 0;
419
+ !links.get(destLinkName)?.has(expectedPriorValue) ? process.env.NODE_ENV !== "production" ? invariant(false, `Failed to remove link: expected collection to contain ${JSON.stringify(expectedPriorValue)} for link ${destLinkName} on ${JSON.stringify(locator)}`) : invariant(false) : void 0;
415
420
  links.remove(destLinkName, expectedPriorValue);
416
421
  }
417
422
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FauxDataStore.js","names":["DefaultMap","MultiMap","randomUUID","crypto","invariant","InvalidRequest","ObjectNotFoundError","subSelectProperties","getPaginationParamsFromRequest","OpenApiCallError","pageThroughResponseSearchParams","isBaseServerObject","FauxDataStoreBatch","filterTimeSeriesData","createOrderBySortFn","getObjectsFromSet","objectLocator","parseLocator","validateAction","FauxDataStore","objects","Map","singleLinks","manyLinks","Set","fauxOntology","attachments","timeSeriesData","media","strict","constructor","clear","ontology","assertObjectExists","#assertObjectExists","objectType","primaryKey","getObject","String","assertObjectDoesNotExist","#assertObjectDoesNotExist","errorCode","errorName","errorInstanceId","parameters","registerObject","anyObj","bso","process","env","NODE_ENV","Object","keys","some","s","startsWith","osdkCreatableToBso","apiName","__apiName","$apiName","__primaryKey","$primaryKey","others","get","set","freeze","#osdkCreatableToBso","meta","getObjectTypeFullMetadataOrThrow","realPrimaryKey","maybeTitle","titleProperty","rid","$rid","JSON","stringify","__title","undefined","__rid","replaceObjectOrThrow","x","oldObject","getObjectOrThrow","linksToUpdate","linksToRemove","linkDef","linkTypes","cardinality","foreignKeyPropertyApiName","fkName","fkValue","oldFkValue","dstSide","getOtherLinkTypeSideV2OrThrow","dstLocator","objectTypeApiName","target","console","log","push","srcSide","srcLocator","updateSingleLinkSide","removeSingleSideOfLink","unregisterObjectOrThrow","delete","registerLink","tmpSrc","srcLinkName","tmpDst","destLinkName","src","dst","getBothLinkTypeSides","linkTypeRid","oneSide","object","link","manySide","newObj","unregisterLink","dstLinkName","extractOneManySide","registerTimeSeriesData","property","data","def","properties","dataType","type","getTimeSeriesData","filter","allData","#updateSingleLinkSide","linkNameToObj","oldLocator","Error","registerMedia","content","mediaType","path","mediaItemRid","mediaRef","mimeType","reference","mediaSetViewItem","mediaSetRid","mediaSetViewRid","metaData","sizeBytes","byteLength","getMediaOrThrow","obj","propertyDef","propertyBaseType","propertyValue","ret","#removeSingleSideOfLink","locator","linkSide","expectedPriorValue","links","has","remove","getObjectByRid","pkToObjects","getLinksOrThrow","linkApiName","linkTypeSide","getLinkTypeSideV2","locators","Array","from","map","a","split","getLinkOrThrow","linkType","targetPrimaryKey","allLinks","l","getObjectsOfType","values","getObjectsFromObjectSet","parsedBody","selected","select","objectSet","length","totalCount","nextPageToken","orderBy","sort","page","excludeRid","getAttachmentMetadata","propertyName","getAttachmentMetadataByRid","getAttachmentBuffer","applyAction","actionTypeApiName","req","actionDef","getActionDef","actionImpl","getActionImpl","validation","result","batch","r","submissionCriteria","edits","options","mode","returnEdits","objectEdits","batchApplyAction","batchReq","requests","actionType","item"],"sources":["FauxDataStore.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 { CompileTimeMetadata, ObjectTypeDefinition } from \"@osdk/api\";\nimport type {\n MediaItemRid,\n MediaReference,\n MediaType,\n} from \"@osdk/foundry.core\";\nimport type * as OntologiesV2 from \"@osdk/foundry.ontologies\";\nimport { DefaultMap, MultiMap } from \"mnemonist\";\nimport { randomUUID } from \"node:crypto\";\nimport * as crypto from \"node:crypto\";\nimport invariant from \"tiny-invariant\";\nimport type { ReadonlyDeep } from \"type-fest\";\nimport { InvalidRequest, ObjectNotFoundError } from \"../errors.js\";\nimport { subSelectProperties } from \"../filterObjects.js\";\nimport { getPaginationParamsFromRequest } from \"../handlers/util/getPaginationParams.js\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\nimport type { PagedBodyResponseWithTotal } from \"../handlers/util/pageThroughResponseSearchParams.js\";\nimport { pageThroughResponseSearchParams } from \"../handlers/util/pageThroughResponseSearchParams.js\";\nimport {\n type BaseServerObject,\n isBaseServerObject,\n} from \"./BaseServerObject.js\";\nimport type { FauxAttachmentStore } from \"./FauxAttachmentStore.js\";\nimport { FauxDataStoreBatch } from \"./FauxDataStoreBatch.js\";\nimport type { FauxOntology } from \"./FauxOntology.js\";\nimport { filterTimeSeriesData } from \"./filterTimeSeriesData.js\";\nimport { createOrderBySortFn, getObjectsFromSet } from \"./getObjectsFromSet.js\";\nimport type { ObjectLocator } from \"./ObjectLocator.js\";\nimport { objectLocator, parseLocator } from \"./ObjectLocator.js\";\nimport type { JustProps } from \"./typeHelpers/JustProps.js\";\nimport { validateAction } from \"./validateAction.js\";\n\nexport interface MediaMetadataAndContent {\n content: ArrayBuffer;\n mediaRef: MediaReference;\n metaData: OntologiesV2.MediaMetadata;\n}\n\ntype ObjectTypeCreatableWithoutApiName<T extends ObjectTypeDefinition> =\n OrUndefinedToOptional<JustProps<T>>;\n\n/**\n * Represents the properties needed to create an object, specifically,\n * the properties of the object and the $apiName\n */\ntype ObjectTypeCreatable<T extends ObjectTypeDefinition> =\n & ObjectTypeCreatableWithoutApiName<T>\n & { $apiName: CompileTimeMetadata<T>[\"apiName\"] };\n\n/**\n * Helper type for converting `foo: string | undefined` into `foo?: string`\n */\ntype OrUndefinedToOptional<T extends object> =\n & {\n [K in keyof T as T[K] extends undefined ? K : never]?: T[K];\n }\n & {\n [K in keyof T as T[K] extends undefined ? never : K]?: T[K];\n };\n\n/**\n * Type safe object for representing \"client\" side objects.\n */\ninterface BaseObjectTypeCreatable {\n $apiName?: OntologiesV2.ObjectTypeApiName;\n\n /** if present it must match the correct value */\n $primaryKey?: string | number | boolean;\n\n /** If set, will use the as the $rid for the object, otherwise one is created for you */\n $rid?: string;\n\n /**\n * All the properties.\n *\n * FUTURE: This only handles the primitive types right now. If we want to be able to create\n * objects with some helpers for other types, this will need to be updated.\n */\n [key: string]: string | number | boolean | undefined;\n}\n\nexport class FauxDataStore {\n #objects = new DefaultMap<\n OntologiesV2.ObjectTypeApiName,\n Map<string, BaseServerObject>\n >(\n (key) => new Map(),\n );\n\n #singleLinks = new DefaultMap(\n (_objectLocator: ObjectLocator) =>\n new Map<OntologiesV2.LinkTypeApiName, ObjectLocator>(),\n );\n\n #manyLinks = new DefaultMap(\n (_objectLocator: ObjectLocator) => new MultiMap<string, ObjectLocator>(Set),\n );\n\n #fauxOntology: FauxOntology;\n\n #attachments: FauxAttachmentStore;\n\n #timeSeriesData = new DefaultMap(\n (_objectType: OntologiesV2.ObjectTypeApiName) =>\n new DefaultMap((_pk: string) =>\n new DefaultMap((_property: OntologiesV2.PropertyApiName) =>\n [] as Array<OntologiesV2.TimeSeriesPoint>\n )\n ),\n );\n\n #media = new DefaultMap(\n (_objectType: OntologiesV2.ObjectTypeApiName) =>\n new DefaultMap((_propName: OntologiesV2.PropertyApiName) => {\n return new Map<MediaItemRid, MediaMetadataAndContent>();\n }),\n );\n #strict: boolean;\n\n constructor(\n fauxOntology: FauxOntology,\n attachments: FauxAttachmentStore,\n strict: boolean,\n ) {\n this.#fauxOntology = fauxOntology;\n this.#attachments = attachments;\n this.#strict = strict;\n }\n\n /**\n * Removes all data that is associated with a namespace/ontology.\n *\n * Note: does not clear `attachments` nor does it clear the ontology itself.\n */\n public clear(): void {\n this.#media.clear();\n this.#timeSeriesData.clear();\n this.#manyLinks.clear();\n this.#singleLinks.clear();\n this.#objects.clear();\n }\n\n get ontology(): FauxOntology {\n return this.#fauxOntology;\n }\n\n #assertObjectExists(\n objectType: string,\n primaryKey: string | number | boolean,\n ) {\n if (!this.getObject(objectType, primaryKey)) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(objectType, String(primaryKey)),\n );\n }\n }\n\n #assertObjectDoesNotExist(\n objectType: string,\n primaryKey: string | number | boolean,\n ): void {\n if (this.getObject(objectType, primaryKey)) {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"CONFLICT\",\n errorName: \"ObjectAlreadyExists\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n primaryKey: String(primaryKey),\n },\n } satisfies OntologiesV2.ObjectAlreadyExists,\n );\n }\n }\n\n /**\n * Version for use in places like @osdk/client.\n *\n * @param obj An `Osdk.Instance` like object for the ObjectType in the generics\n */\n registerObject<T extends ObjectTypeDefinition>(\n objectType: T,\n obj: ObjectTypeCreatable<T> | ObjectTypeCreatableWithoutApiName<T>,\n ): void;\n /**\n * Version of register object generally used in shared.test\n * @param obj A raw server side representation of an object\n *\n * Don't use, its too easy to end up with an any.\n */\n registerObject(obj: BaseServerObject): void;\n registerObject(\n objectType: string | ObjectTypeDefinition | BaseServerObject,\n anyObj?: BaseServerObject | BaseObjectTypeCreatable,\n ): void {\n let bso: BaseServerObject;\n // obj = { ...obj }; // make a copy so we can mutate it\n\n if (isBaseServerObject(objectType)) {\n invariant(\n anyObj == null,\n \"Internal overload should only pass one argument\",\n );\n invariant(\n !Object.keys(objectType).some(s => s.startsWith(\"$\")),\n \"Object should not have any keys starting with $ if it has __apiName\",\n );\n bso = objectType;\n } else if (anyObj == null) {\n invariant(false, \"should not be possible due to overloads\");\n } else if (isBaseServerObject(anyObj)) {\n invariant(\n !Object.keys(anyObj).some(s => s.startsWith(\"$\")),\n \"Object should not have any keys starting with $ if it has __apiName\",\n );\n bso = anyObj;\n } else {\n bso = this.#osdkCreatableToBso(objectType, anyObj);\n }\n\n const apiName = bso.__apiName || bso.$apiName;\n invariant(apiName, \"Object should have an __apiName or $apiName\");\n\n this.#assertObjectDoesNotExist(apiName, bso.__primaryKey);\n\n if (!(\"__apiName\" in bso && \"__primaryKey\" in bso)) {\n invariant(\n \"$apiName\" in bso && \"$primaryKey\" in bso,\n \"Object should have (__apiName and __primaryKey) or ($apiName and $primaryKey)\",\n );\n const { $apiName, $primaryKey, ...others } = bso as\n & {\n $apiName: OntologiesV2.ObjectTypeApiName;\n $primaryKey: string | number | boolean;\n }\n & Record<\n string,\n unknown\n >;\n bso = {\n __apiName: $apiName,\n __primaryKey: $primaryKey,\n ...others,\n };\n }\n this.#assertObjectDoesNotExist(bso.__apiName, bso.__primaryKey);\n this.#objects.get(bso.__apiName).set(\n String(bso.__primaryKey),\n Object.freeze({ ...bso }),\n );\n }\n\n #osdkCreatableToBso(\n objectType: string | ObjectTypeDefinition,\n anyObj: BaseObjectTypeCreatable,\n ) {\n objectType = typeof objectType === \"string\"\n ? objectType\n : objectType.apiName;\n\n if (\"$apiName\" in anyObj) {\n invariant(anyObj.$apiName === objectType);\n }\n const { $apiName, $primaryKey, ...others } = anyObj;\n\n const meta = this.ontology.getObjectTypeFullMetadataOrThrow(\n objectType,\n );\n const realPrimaryKey = anyObj[meta.objectType.primaryKey] as\n | string\n | number\n | boolean;\n\n const maybeTitle = anyObj[meta.objectType.titleProperty];\n const rid = anyObj.$rid\n ?? `ri.phonograph2-objects.main.object.${crypto.randomUUID()}`;\n\n invariant(\n realPrimaryKey != null,\n `Object should have a primary key. ${JSON.stringify(anyObj)}`,\n );\n\n invariant(\n $primaryKey == null || $primaryKey === realPrimaryKey,\n \"Primary key mismatch\",\n );\n\n return {\n __apiName: objectType,\n __primaryKey: realPrimaryKey,\n __title: maybeTitle ? String(maybeTitle) : undefined,\n __rid: rid,\n ...others,\n };\n }\n\n replaceObjectOrThrow(x: BaseServerObject): void {\n const objectType = this.ontology.getObjectTypeFullMetadataOrThrow(\n x.__apiName,\n );\n const oldObject = this.getObjectOrThrow(x.__apiName, x.__primaryKey);\n\n const linksToUpdate: Array<\n {\n srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\n }\n > = [];\n\n const linksToRemove: Array<{\n srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\n }> = [];\n\n for (const linkDef of objectType.linkTypes) {\n if (linkDef.cardinality === \"ONE\") {\n invariant(\n this.#strict && linkDef.foreignKeyPropertyApiName,\n `Error examining ${objectType.objectType.apiName}.${linkDef.apiName}: ONE side of links should have a foreign key. `,\n );\n\n const fkName = linkDef.foreignKeyPropertyApiName;\n const fkValue = x[fkName];\n const oldFkValue = oldObject[fkName];\n\n if (oldObject[fkName] !== x[fkName]) {\n const dstSide = this.ontology.getOtherLinkTypeSideV2OrThrow(\n objectType.objectType.apiName,\n linkDef.apiName,\n );\n const dstLocator = objectLocator({\n __apiName: dstSide.objectTypeApiName,\n __primaryKey: fkValue,\n });\n\n const target = this.getObject(dstSide.objectTypeApiName, fkValue);\n\n if (fkValue != null && !target) {\n // eslint-disable-next-line no-console\n console.log(\n `WARNING! Setting a FK value to a non-existent object: ${dstLocator}`,\n );\n }\n\n if (fkValue != null) {\n linksToUpdate.push({\n dstSide,\n dstLocator,\n srcSide: linkDef,\n srcLocator: objectLocator(x),\n });\n } else {\n linksToRemove.push({\n srcLocator: objectLocator(x),\n srcSide: linkDef,\n dstLocator: objectLocator({\n __apiName: dstSide.objectTypeApiName,\n __primaryKey: oldFkValue,\n }),\n dstSide,\n });\n }\n }\n }\n }\n\n this.#objects.get(x.__apiName).set(String(x.__primaryKey), x);\n for (const { srcSide, srcLocator, dstSide, dstLocator } of linksToUpdate) {\n this.#updateSingleLinkSide(\n srcSide,\n srcLocator,\n dstSide,\n dstLocator,\n );\n this.#updateSingleLinkSide(\n dstSide,\n dstLocator,\n srcSide,\n srcLocator,\n );\n }\n\n for (const { srcSide, srcLocator, dstSide, dstLocator } of linksToRemove) {\n this.#removeSingleSideOfLink(srcLocator, srcSide, dstLocator);\n this.#removeSingleSideOfLink(dstLocator, dstSide, srcLocator);\n }\n }\n\n /** Throws if the object does not already exist */\n unregisterObjectOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n ): void {\n this.#assertObjectExists(objectType, primaryKey);\n this.#objects.get(objectType).delete(String(primaryKey));\n }\n\n registerLink(\n tmpSrc: BaseServerObject,\n srcLinkName: string,\n tmpDst: BaseServerObject,\n destLinkName: string,\n ): void {\n const src = this.getObjectOrThrow(tmpSrc.__apiName, tmpSrc.__primaryKey);\n const dst = this.getObjectOrThrow(tmpDst.__apiName, tmpDst.__primaryKey);\n\n const srcLocator = objectLocator(src);\n const dstLocator = objectLocator(dst);\n const [srcSide, dstSide] = this.#fauxOntology.getBothLinkTypeSides(\n src.__apiName,\n srcLinkName,\n dst.__apiName,\n );\n\n invariant(\n srcSide.linkTypeRid === dstSide.linkTypeRid,\n `Expected both sides of the link to have the same rid, but got ${srcSide.linkTypeRid} and ${dstSide.linkTypeRid}`,\n );\n invariant(\n dstSide.apiName === destLinkName,\n `Link name mismatch on dst side. Expected ${destLinkName} but found ${dstSide.apiName}`,\n );\n\n if (this.#strict) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? (srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide })\n : undefined;\n\n if (oneSide && manySide) {\n invariant(\n oneSide.link.foreignKeyPropertyApiName,\n `Expected to find a foreignKeyPropertyApiName on the one side: ${oneSide.object.__apiName}.${oneSide.link.apiName}`,\n );\n\n const newObj = {\n ...oneSide.object,\n [oneSide.link.foreignKeyPropertyApiName]:\n manySide.object.__primaryKey,\n };\n\n // This method call will also do the work to update the sides\n this.replaceObjectOrThrow(newObj);\n return;\n }\n }\n\n this.#updateSingleLinkSide(\n srcSide,\n srcLocator,\n dstSide,\n dstLocator,\n );\n this.#updateSingleLinkSide(\n dstSide,\n dstLocator,\n srcSide,\n srcLocator,\n );\n }\n\n unregisterLink(\n src: BaseServerObject,\n srcLinkName: string,\n dst: BaseServerObject,\n dstLinkName: string,\n ): void {\n const srcLocator = objectLocator(src);\n const dstLocator = objectLocator(dst);\n const [srcSide, dstSide] = this.#fauxOntology.getBothLinkTypeSides(\n src.__apiName,\n srcLinkName,\n dst.__apiName,\n );\n\n invariant(\n dstSide.apiName === dstLinkName,\n `Link name mismatch on dst side. Expected ${dstLinkName} but found ${dstSide.apiName}`,\n );\n\n if (this.#strict) {\n const { oneSide, manySide } = extractOneManySide(\n srcSide,\n src,\n dstSide,\n dst,\n );\n\n if (oneSide && manySide) {\n invariant(\n oneSide.link.foreignKeyPropertyApiName,\n `Expected to find a foreignKeyPropertyApiName on the one side: ${oneSide.object.__apiName}.${oneSide.link.apiName}`,\n );\n\n const newObj = {\n ...oneSide.object,\n [oneSide.link.foreignKeyPropertyApiName]: undefined,\n };\n\n // This method call will also do the work to update the sides\n this.replaceObjectOrThrow(newObj);\n return;\n }\n }\n\n this.#removeSingleSideOfLink(srcLocator, srcSide, dstLocator);\n this.#removeSingleSideOfLink(dstLocator, dstSide, srcLocator);\n }\n\n registerTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n data: OntologiesV2.TimeSeriesPoint[],\n ): void {\n this.getObjectOrThrow(objectType, primaryKey);\n const def = this.ontology.getObjectTypeFullMetadataOrThrow(objectType);\n invariant(\n def.objectType.properties[property].dataType.type === \"timeseries\"\n || def.objectType.properties[property].dataType.type\n === \"geotimeSeriesReference\",\n );\n this.#timeSeriesData.get(objectType).get(String(primaryKey)).set(\n property,\n data,\n );\n }\n\n getTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n filter?: OntologiesV2.StreamTimeSeriesPointsRequest,\n ): OntologiesV2.TimeSeriesPoint[] {\n this.getObjectOrThrow(objectType, primaryKey);\n const allData = this.#timeSeriesData.get(objectType).get(String(primaryKey))\n .get(\n property,\n );\n if (!filter) return allData;\n return filterTimeSeriesData(allData, filter);\n }\n\n #updateSingleLinkSide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n srcLocator: ObjectLocator,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dstLocator: ObjectLocator,\n ) {\n const srcLinkName = srcSide.apiName;\n if (srcSide.cardinality === \"ONE\") {\n const linkNameToObj = this.#singleLinks.get(srcLocator);\n const oldLocator = linkNameToObj.get(srcLinkName);\n\n if (oldLocator && oldLocator !== dstLocator) {\n // we need to remove the other side's old value\n this.#removeSingleSideOfLink(\n oldLocator,\n dstSide,\n srcLocator,\n );\n }\n linkNameToObj.set(srcLinkName, dstLocator);\n } else if (srcSide.cardinality === \"MANY\") {\n const linkNameToObj = this.#manyLinks.get(srcLocator);\n linkNameToObj.set(srcLinkName, dstLocator);\n } else {\n // \"never\" case\n throw new Error(\"unexpected cardinality: \" + srcSide.cardinality);\n }\n }\n\n registerMedia(\n objectType: OntologiesV2.ObjectTypeApiName,\n property: OntologiesV2.PropertyApiName,\n content: ArrayBuffer,\n mediaType: MediaType,\n path: string | undefined,\n // This should be the correct prefix, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001989395\n mediaItemRid: MediaItemRid = `ri.mio.main.media-item.${randomUUID()}`,\n ): MediaReference {\n const mediaRef: ReadonlyDeep<MediaReference> = Object.freeze({\n mimeType: mediaType,\n reference: Object.freeze({\n type: \"mediaSetViewItem\",\n mediaSetViewItem: Object.freeze({\n mediaItemRid,\n mediaSetRid: \"ri.unimplemented.in.shared.test\",\n mediaSetViewRid: \"ri.unimplemented.in.shared.test\",\n }),\n }),\n });\n\n this.#media.get(objectType).get(property).set(\n mediaItemRid,\n Object.freeze({\n content,\n mediaRef,\n metaData: Object.freeze({\n mediaType,\n path,\n sizeBytes: String(content.byteLength),\n }),\n }),\n );\n\n return mediaRef;\n }\n\n getMediaOrThrow(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n ): MediaMetadataAndContent {\n const obj = this.getObjectOrThrow(objectType, primaryKey);\n const propertyDef =\n this.ontology.getObjectTypeFullMetadataOrThrow(objectType)\n .objectType.properties[property];\n\n if (!propertyDef) {\n // This should be the correct error, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001968959\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"PropertiesNotFound\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n properties: [property],\n },\n } satisfies OntologiesV2.PropertiesNotFound,\n );\n }\n\n if (propertyDef.dataType.type !== \"mediaReference\") {\n // FIXME: what would the backend do here?\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyType\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n },\n } satisfies OntologiesV2.InvalidPropertyType,\n );\n }\n\n const rid = obj[property].reference.mediaSetViewItem.mediaItemRid;\n\n if (!rid || !rid.startsWith(\"ri.\")) {\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyValue\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n propertyValue: rid,\n },\n } satisfies OntologiesV2.InvalidPropertyValue,\n );\n }\n\n const ret = this.#media.get(objectType).get(property).get(rid);\n\n if (!ret) {\n throw new OpenApiCallError(400, InvalidRequest(\"Invalid parameters\"));\n }\n return ret;\n }\n\n #removeSingleSideOfLink(\n locator: ObjectLocator,\n linkSide: OntologiesV2.LinkTypeSideV2,\n expectedPriorValue: ObjectLocator,\n ) {\n const destLinkName = linkSide.apiName;\n if (linkSide.cardinality === \"ONE\") {\n const links = this.#singleLinks.get(locator);\n invariant(links.get(destLinkName) === expectedPriorValue);\n links.delete(destLinkName);\n } else {\n const links = this.#manyLinks.get(locator);\n invariant(links.get(destLinkName)?.has(expectedPriorValue));\n links.remove(destLinkName, expectedPriorValue);\n }\n }\n\n getObject(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject | undefined {\n return this.#objects\n .get(apiName)\n .get(String(primaryKey));\n }\n\n getObjectOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject {\n const object = this.getObject(apiName, primaryKey);\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(apiName, String(primaryKey)),\n );\n }\n return object;\n }\n\n getObjectByRid(rid: string): BaseServerObject | undefined {\n for (const [, pkToObjects] of this.#objects) {\n for (const [, obj] of pkToObjects) {\n if (obj.__rid === rid) {\n return obj;\n }\n }\n }\n }\n\n getLinksOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n linkApiName: string,\n ): BaseServerObject[] {\n const object = this.getObjectOrThrow(apiName, primaryKey);\n\n const linkTypeSide = this.#fauxOntology.getLinkTypeSideV2(\n apiName,\n linkApiName,\n );\n\n if (linkTypeSide.cardinality === \"ONE\") {\n const locator = this.#singleLinks\n .get(objectLocator(object))\n .get(linkApiName);\n if (locator === undefined) {\n return [];\n }\n const { objectType, primaryKey } = parseLocator(locator);\n\n return [this.getObjectOrThrow(objectType, primaryKey)]; // will throw if not found\n } else {\n const locators = this.#manyLinks\n .get(objectLocator(object))\n .get(linkApiName);\n\n return Array.from(locators ?? [])\n .map((a) => {\n const [objectType, primaryKey] = a.split(\":\") ?? [];\n invariant(objectType && primaryKey, \"Invalid locator format\");\n return this.getObjectOrThrow(objectType, primaryKey);\n });\n }\n }\n\n getLinkOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n linkType: string,\n targetPrimaryKey: string | number | boolean,\n ): BaseServerObject {\n const allLinks = this.getLinksOrThrow(objectType, primaryKey, linkType);\n const object =\n allLinks.filter(l => String(l.__primaryKey) === targetPrimaryKey)[0];\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(\n `${objectType} -> ${linkType}`,\n String(targetPrimaryKey),\n ),\n );\n }\n return object;\n }\n\n getObjectsOfType(apiName: string): Iterable<BaseServerObject> {\n this.ontology.getObjectTypeFullMetadataOrThrow(apiName);\n return this.#objects\n .get(apiName)\n .values();\n }\n\n getObjectsFromObjectSet(\n parsedBody:\n | OntologiesV2.LoadObjectSetV2MultipleObjectTypesRequest\n | OntologiesV2.LoadObjectSetRequestV2,\n ): PagedBodyResponseWithTotal<BaseServerObject> {\n const selected = parsedBody.select;\n // when we have interfaces in here, we have a little trick for\n // caching off the important properties\n let objects = getObjectsFromSet(this, parsedBody.objectSet, undefined);\n\n if (!objects || objects.length === 0) {\n return {\n data: [],\n totalCount: \"0\",\n nextPageToken: undefined,\n };\n }\n\n if (parsedBody.orderBy) {\n objects = objects.sort(createOrderBySortFn(parsedBody.orderBy));\n }\n\n // finally, if we got interfaces, the objects have names like the interface and we need\n // to return them like the object.\n\n const page = pageThroughResponseSearchParams(\n objects,\n getPaginationParamsFromRequest(parsedBody),\n false,\n );\n\n if (!page) {\n throw new OpenApiCallError(\n 404,\n InvalidRequest(\n `No objects found for ${JSON.stringify(parsedBody)}`,\n ),\n );\n }\n const ret = subSelectProperties(\n page,\n [...selected],\n true,\n parsedBody.excludeRid,\n );\n\n return ret;\n }\n\n getAttachmentMetadata(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): OntologiesV2.AttachmentV2 {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentMetadataByRid(rid);\n }\n\n getAttachmentBuffer(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): ArrayBuffer {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentBuffer(rid);\n }\n\n applyAction(\n actionTypeApiName: string,\n req: OntologiesV2.ApplyActionRequestV2,\n ): OntologiesV2.SyncApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n const validation = validateAction(req, actionDef, this);\n if (validation.result === \"INVALID\") {\n return { validation };\n }\n\n const batch = new FauxDataStoreBatch(this);\n const r = actionImpl(batch, req, {\n def: actionDef,\n attachments: this.#attachments,\n });\n\n // The legacy actions return the full payload\n // they want to return, so we need to do that\n // but the future is for the actionImpl's to\n // return void and to do validation details here\n if (r) return r;\n\n return {\n validation: {\n parameters: {},\n result: \"VALID\",\n submissionCriteria: [],\n },\n edits: req.options?.mode === \"VALIDATE_AND_EXECUTE\"\n && (\n req.options.returnEdits === \"ALL\"\n || req.options.returnEdits === \"ALL_V2_WITH_DELETIONS\"\n )\n ? {\n type: \"edits\",\n ...batch.objectEdits,\n }\n : undefined,\n };\n }\n\n batchApplyAction(\n actionTypeApiName: string,\n batchReq: OntologiesV2.BatchApplyActionRequestV2,\n ): OntologiesV2.BatchApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n for (const req of batchReq.requests) {\n const result = validateAction(req, actionDef, this);\n if (result.result === \"INVALID\") {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"ActionValidationFailed\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n actionType: actionTypeApiName,\n },\n } as OntologiesV2.ActionValidationFailed,\n );\n }\n }\n\n const batch = new FauxDataStoreBatch(this);\n\n const returnLargeScaleEdits = false;\n for (const item of batchReq.requests) {\n actionImpl(\n batch,\n {\n ...item,\n options: {\n mode: \"VALIDATE_AND_EXECUTE\",\n returnEdits: batchReq.options?.returnEdits,\n },\n },\n { def: actionDef, attachments: this.#attachments },\n );\n }\n if (batchReq.options?.returnEdits === \"NONE\") {\n return {};\n }\n\n if (returnLargeScaleEdits) {\n const editedObjectTypes = new Set<OntologiesV2.ObjectTypeApiName>();\n for (const edit of batch.objectEdits.edits) {\n if (\n edit.type === \"modifyObject\" || edit.type === \"addObject\"\n || edit.type === \"deleteObject\"\n ) {\n editedObjectTypes.add(edit.objectType);\n }\n }\n\n return {\n edits: {\n type: \"largeScaleEdits\",\n editedObjectTypes: Array.from(editedObjectTypes),\n },\n };\n }\n\n return {\n edits: {\n type: \"edits\",\n ...batch.objectEdits,\n edits: batch.objectEdits.edits.filter(x =>\n x.type !== \"deleteObject\" && x.type !== \"deleteLink\"\n ),\n },\n };\n }\n}\nfunction extractOneManySide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n src: BaseServerObject,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dst: BaseServerObject,\n) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? (srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide })\n : undefined;\n return { oneSide, manySide };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FauxDataStore.js","names":["DefaultMap","MultiMap","crypto","randomUUID","inspect","invariant","InvalidRequest","ObjectNotFoundError","subSelectProperties","getPaginationParamsFromRequest","OpenApiCallError","pageThroughResponseSearchParams","isBaseServerObject","FauxDataStoreBatch","filterTimeSeriesData","createOrderBySortFn","getObjectsFromSet","objectLocator","parseLocator","validateAction","FauxDataStore","objects","Map","singleLinks","manyLinks","Set","fauxOntology","attachments","timeSeriesData","media","strict","constructor","clear","ontology","assertObjectExists","#assertObjectExists","objectType","primaryKey","getObject","String","assertObjectDoesNotExist","#assertObjectDoesNotExist","errorCode","errorName","errorInstanceId","parameters","registerObject","anyObj","bso","process","env","NODE_ENV","Object","keys","some","s","startsWith","osdkCreatableToBso","apiName","__apiName","$apiName","__primaryKey","$primaryKey","others","frozenBso","freeze","get","set","#osdkCreatableToBso","meta","getObjectTypeFullMetadataOrThrow","realPrimaryKey","maybeTitle","titleProperty","rid","$rid","JSON","stringify","__title","undefined","__rid","replaceObjectOrThrow","x","oldObject","getObjectOrThrow","linksToUpdate","linksToRemove","linkDef","linkTypes","cardinality","foreignKeyPropertyApiName","colors","fkName","fkValue","oldFkValue","dstSide","getOtherLinkTypeSideV2OrThrow","dstLocator","objectTypeApiName","target","console","log","push","srcSide","srcLocator","updateSingleLinkSide","removeSingleSideOfLink","unregisterObjectOrThrow","delete","registerLink","tmpSrc","srcLinkName","tmpDst","destLinkName","src","dst","getBothLinkTypeSides","linkTypeRid","oneSide","object","link","manySide","newObj","unregisterLink","dstLinkName","extractOneManySide","registerTimeSeriesData","property","data","def","properties","dataType","type","getTimeSeriesData","filter","allData","#updateSingleLinkSide","linkNameToObj","oldLocator","Error","registerMedia","content","mediaType","path","mediaItemRid","mediaRef","mimeType","reference","mediaSetViewItem","mediaSetRid","mediaSetViewRid","metaData","sizeBytes","byteLength","getMediaOrThrow","obj","propertyDef","propertyBaseType","propertyValue","ret","#removeSingleSideOfLink","locator","linkSide","expectedPriorValue","links","has","remove","getObjectByRid","pkToObjects","getLinksOrThrow","linkApiName","linkTypeSide","getLinkTypeSideV2","locators","Array","from","map","a","split","getLinkOrThrow","linkType","targetPrimaryKey","allLinks","l","getObjectsOfType","values","getObjectsFromObjectSet","parsedBody","selected","select","objectSet","length","totalCount","nextPageToken","orderBy","sort","page","excludeRid","getAttachmentMetadata","propertyName","getAttachmentMetadataByRid","getAttachmentBuffer","applyAction","actionTypeApiName","req","actionDef","getActionDef","actionImpl","getActionImpl","validation","result","batch","r","submissionCriteria","edits","options","mode","returnEdits","objectEdits","batchApplyAction","batchReq","requests","actionType","item"],"sources":["FauxDataStore.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 { CompileTimeMetadata, ObjectTypeDefinition } from \"@osdk/api\";\nimport type {\n MediaItemRid,\n MediaReference,\n MediaType,\n} from \"@osdk/foundry.core\";\nimport type * as OntologiesV2 from \"@osdk/foundry.ontologies\";\nimport { DefaultMap, MultiMap } from \"mnemonist\";\nimport * as crypto from \"node:crypto\";\nimport { randomUUID } from \"node:crypto\";\nimport { inspect } from \"node:util\";\nimport invariant from \"tiny-invariant\";\nimport type { ReadonlyDeep } from \"type-fest\";\nimport { InvalidRequest, ObjectNotFoundError } from \"../errors.js\";\nimport { subSelectProperties } from \"../filterObjects.js\";\nimport { getPaginationParamsFromRequest } from \"../handlers/util/getPaginationParams.js\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\nimport type { PagedBodyResponseWithTotal } from \"../handlers/util/pageThroughResponseSearchParams.js\";\nimport { pageThroughResponseSearchParams } from \"../handlers/util/pageThroughResponseSearchParams.js\";\nimport {\n type BaseServerObject,\n isBaseServerObject,\n} from \"./BaseServerObject.js\";\nimport type { FauxAttachmentStore } from \"./FauxAttachmentStore.js\";\nimport { FauxDataStoreBatch } from \"./FauxDataStoreBatch.js\";\nimport type { FauxOntology } from \"./FauxOntology.js\";\nimport { filterTimeSeriesData } from \"./filterTimeSeriesData.js\";\nimport { createOrderBySortFn, getObjectsFromSet } from \"./getObjectsFromSet.js\";\nimport type { ObjectLocator } from \"./ObjectLocator.js\";\nimport { objectLocator, parseLocator } from \"./ObjectLocator.js\";\nimport type { JustProps } from \"./typeHelpers/JustProps.js\";\nimport { validateAction } from \"./validateAction.js\";\n\nexport interface MediaMetadataAndContent {\n content: ArrayBuffer;\n mediaRef: MediaReference;\n metaData: OntologiesV2.MediaMetadata;\n}\n\ntype ObjectTypeCreatableWithoutApiName<T extends ObjectTypeDefinition> =\n OrUndefinedToOptional<JustProps<T>>;\n\n/**\n * Represents the properties needed to create an object, specifically,\n * the properties of the object and the $apiName\n */\ntype ObjectTypeCreatable<T extends ObjectTypeDefinition> =\n & ObjectTypeCreatableWithoutApiName<T>\n & { $apiName: CompileTimeMetadata<T>[\"apiName\"] };\n\n/**\n * Helper type for converting `foo: string | undefined` into `foo?: string`\n */\ntype OrUndefinedToOptional<T extends object> =\n & {\n [K in keyof T as T[K] extends undefined ? K : never]?: T[K];\n }\n & {\n [K in keyof T as T[K] extends undefined ? never : K]?: T[K];\n };\n\n/**\n * Type safe object for representing \"client\" side objects.\n */\ninterface BaseObjectTypeCreatable {\n $apiName?: OntologiesV2.ObjectTypeApiName;\n\n /** if present it must match the correct value */\n $primaryKey?: string | number | boolean;\n\n /** If set, will use the as the $rid for the object, otherwise one is created for you */\n $rid?: string;\n\n /**\n * All the properties.\n *\n * FUTURE: This only handles the primitive types right now. If we want to be able to create\n * objects with some helpers for other types, this will need to be updated.\n */\n [key: string]: string | number | boolean | undefined;\n}\n\nexport class FauxDataStore {\n #objects = new DefaultMap<\n OntologiesV2.ObjectTypeApiName,\n Map<string, BaseServerObject>\n >(\n (key) => new Map(),\n );\n\n #singleLinks = new DefaultMap(\n (_objectLocator: ObjectLocator) =>\n new Map<OntologiesV2.LinkTypeApiName, ObjectLocator>(),\n );\n\n #manyLinks = new DefaultMap(\n (_objectLocator: ObjectLocator) => new MultiMap<string, ObjectLocator>(Set),\n );\n\n #fauxOntology: FauxOntology;\n\n #attachments: FauxAttachmentStore;\n\n #timeSeriesData = new DefaultMap(\n (_objectType: OntologiesV2.ObjectTypeApiName) =>\n new DefaultMap((_pk: string) =>\n new DefaultMap((_property: OntologiesV2.PropertyApiName) =>\n [] as Array<OntologiesV2.TimeSeriesPoint>\n )\n ),\n );\n\n #media = new DefaultMap(\n (_objectType: OntologiesV2.ObjectTypeApiName) =>\n new DefaultMap((_propName: OntologiesV2.PropertyApiName) => {\n return new Map<MediaItemRid, MediaMetadataAndContent>();\n }),\n );\n #strict: boolean;\n\n constructor(\n fauxOntology: FauxOntology,\n attachments: FauxAttachmentStore,\n strict: boolean,\n ) {\n this.#fauxOntology = fauxOntology;\n this.#attachments = attachments;\n this.#strict = strict;\n }\n\n /**\n * Removes all data that is associated with a namespace/ontology.\n *\n * Note: does not clear `attachments` nor does it clear the ontology itself.\n */\n public clear(): void {\n this.#media.clear();\n this.#timeSeriesData.clear();\n this.#manyLinks.clear();\n this.#singleLinks.clear();\n this.#objects.clear();\n }\n\n get ontology(): FauxOntology {\n return this.#fauxOntology;\n }\n\n #assertObjectExists(\n objectType: string,\n primaryKey: string | number | boolean,\n ) {\n if (!this.getObject(objectType, primaryKey)) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(objectType, String(primaryKey)),\n );\n }\n }\n\n #assertObjectDoesNotExist(\n objectType: string,\n primaryKey: string | number | boolean,\n ): void {\n if (this.getObject(objectType, primaryKey)) {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"CONFLICT\",\n errorName: \"ObjectAlreadyExists\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n primaryKey: String(primaryKey),\n },\n } satisfies OntologiesV2.ObjectAlreadyExists,\n );\n }\n }\n\n /**\n * Version for use in places like @osdk/client.\n *\n * @param obj An `Osdk.Instance` like object for the ObjectType in the generics\n */\n registerObject<T extends ObjectTypeDefinition>(\n objectType: T,\n obj: ObjectTypeCreatable<T> | ObjectTypeCreatableWithoutApiName<T>,\n ): BaseServerObject;\n /**\n * Version of register object generally used in shared.test\n * @param obj A raw server side representation of an object\n *\n * Don't use, its too easy to end up with an any.\n */\n registerObject(obj: BaseServerObject): BaseServerObject;\n registerObject(\n objectType: string | ObjectTypeDefinition | BaseServerObject,\n anyObj?: BaseServerObject | BaseObjectTypeCreatable,\n ): BaseServerObject {\n let bso: BaseServerObject;\n // obj = { ...obj }; // make a copy so we can mutate it\n\n if (isBaseServerObject(objectType)) {\n invariant(\n anyObj == null,\n \"Internal overload should only pass one argument\",\n );\n invariant(\n !Object.keys(objectType).some(s => s.startsWith(\"$\")),\n \"Object should not have any keys starting with $ if it has __apiName\",\n );\n bso = objectType;\n } else if (anyObj == null) {\n invariant(false, \"should not be possible due to overloads\");\n } else if (isBaseServerObject(anyObj)) {\n invariant(\n !Object.keys(anyObj).some(s => s.startsWith(\"$\")),\n \"Object should not have any keys starting with $ if it has __apiName\",\n );\n bso = anyObj;\n } else {\n bso = this.#osdkCreatableToBso(objectType, anyObj);\n }\n\n const apiName = bso.__apiName || bso.$apiName;\n invariant(apiName, \"Object should have an __apiName or $apiName\");\n\n this.#assertObjectDoesNotExist(apiName, bso.__primaryKey);\n\n if (!(\"__apiName\" in bso && \"__primaryKey\" in bso)) {\n invariant(\n \"$apiName\" in bso && \"$primaryKey\" in bso,\n \"Object should have (__apiName and __primaryKey) or ($apiName and $primaryKey)\",\n );\n const { $apiName, $primaryKey, ...others } = bso as\n & {\n $apiName: OntologiesV2.ObjectTypeApiName;\n $primaryKey: string | number | boolean;\n }\n & Record<\n string,\n unknown\n >;\n bso = {\n __apiName: $apiName,\n __primaryKey: $primaryKey,\n ...others,\n };\n }\n this.#assertObjectDoesNotExist(bso.__apiName, bso.__primaryKey);\n const frozenBso = Object.freeze({ ...bso });\n this.#objects.get(bso.__apiName).set(\n String(bso.__primaryKey),\n frozenBso,\n );\n\n return frozenBso;\n }\n\n #osdkCreatableToBso(\n objectType: string | ObjectTypeDefinition,\n anyObj: BaseObjectTypeCreatable,\n ) {\n objectType = typeof objectType === \"string\"\n ? objectType\n : objectType.apiName;\n\n if (\"$apiName\" in anyObj) {\n invariant(anyObj.$apiName === objectType);\n }\n const { $apiName, $primaryKey, ...others } = anyObj;\n\n const meta = this.ontology.getObjectTypeFullMetadataOrThrow(\n objectType,\n );\n const realPrimaryKey = anyObj[meta.objectType.primaryKey] as\n | string\n | number\n | boolean;\n\n const maybeTitle = anyObj[meta.objectType.titleProperty];\n const rid = anyObj.$rid\n ?? `ri.phonograph2-objects.main.object.${crypto.randomUUID()}`;\n\n invariant(\n realPrimaryKey != null,\n `Object should have a primary key. ${JSON.stringify(anyObj)}`,\n );\n\n invariant(\n $primaryKey == null || $primaryKey === realPrimaryKey,\n \"Primary key mismatch\",\n );\n\n return {\n __apiName: objectType,\n __primaryKey: realPrimaryKey,\n __title: maybeTitle ? String(maybeTitle) : undefined,\n __rid: rid,\n ...others,\n };\n }\n\n replaceObjectOrThrow(x: BaseServerObject): void {\n const objectType = this.ontology.getObjectTypeFullMetadataOrThrow(\n x.__apiName,\n );\n const oldObject = this.getObjectOrThrow(x.__apiName, x.__primaryKey);\n\n const linksToUpdate: Array<\n {\n srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\n }\n > = [];\n\n const linksToRemove: Array<{\n srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\n }> = [];\n\n for (const linkDef of objectType.linkTypes) {\n if (linkDef.cardinality === \"ONE\") {\n invariant(\n this.#strict && linkDef.foreignKeyPropertyApiName,\n `Error examining ${objectType.objectType.apiName}.${linkDef.apiName}: ONE side of links should have a foreign key. ${\n inspect(linkDef, { colors: false })\n }`,\n );\n\n const fkName = linkDef.foreignKeyPropertyApiName;\n const fkValue = x[fkName];\n const oldFkValue = oldObject[fkName];\n\n if (oldObject[fkName] !== x[fkName]) {\n const dstSide = this.ontology.getOtherLinkTypeSideV2OrThrow(\n objectType.objectType.apiName,\n linkDef.apiName,\n );\n const dstLocator = objectLocator({\n __apiName: linkDef.objectTypeApiName,\n __primaryKey: fkValue,\n });\n\n const target = this.getObject(linkDef.objectTypeApiName, fkValue);\n\n if (fkValue != null && !target) {\n // eslint-disable-next-line no-console\n console.log(\n `WARNING! Setting a FK value to a non-existent object: ${dstLocator}`,\n );\n }\n\n if (fkValue != null) {\n linksToUpdate.push({\n dstSide,\n dstLocator,\n srcSide: linkDef,\n srcLocator: objectLocator(x),\n });\n } else {\n linksToRemove.push({\n srcLocator: objectLocator(x),\n srcSide: linkDef,\n dstLocator: objectLocator({\n __apiName: linkDef.objectTypeApiName,\n __primaryKey: oldFkValue,\n }),\n dstSide,\n });\n }\n }\n }\n }\n\n this.#objects.get(x.__apiName).set(String(x.__primaryKey), x);\n for (const { srcSide, srcLocator, dstSide, dstLocator } of linksToUpdate) {\n this.#updateSingleLinkSide(\n srcSide,\n srcLocator,\n dstSide,\n dstLocator,\n );\n this.#updateSingleLinkSide(\n dstSide,\n dstLocator,\n srcSide,\n srcLocator,\n );\n }\n\n for (const { srcSide, srcLocator, dstSide, dstLocator } of linksToRemove) {\n this.#removeSingleSideOfLink(srcLocator, srcSide, dstLocator);\n this.#removeSingleSideOfLink(dstLocator, dstSide, srcLocator);\n }\n }\n\n /** Throws if the object does not already exist */\n unregisterObjectOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n ): void {\n this.#assertObjectExists(objectType, primaryKey);\n this.#objects.get(objectType).delete(String(primaryKey));\n }\n\n registerLink(\n tmpSrc: BaseServerObject,\n srcLinkName: string,\n tmpDst: BaseServerObject,\n destLinkName: string,\n ): void {\n const src = this.getObjectOrThrow(tmpSrc.__apiName, tmpSrc.__primaryKey);\n const dst = this.getObjectOrThrow(tmpDst.__apiName, tmpDst.__primaryKey);\n\n const srcLocator = objectLocator(src);\n const dstLocator = objectLocator(dst);\n const [srcSide, dstSide] = this.#fauxOntology.getBothLinkTypeSides(\n src.__apiName,\n srcLinkName,\n dst.__apiName,\n );\n\n invariant(\n srcSide.linkTypeRid === dstSide.linkTypeRid,\n `Expected both sides of the link to have the same rid, but got ${srcSide.linkTypeRid} and ${dstSide.linkTypeRid}`,\n );\n invariant(\n dstSide.apiName === destLinkName,\n `Link name mismatch on dst side. Expected ${destLinkName} but found ${dstSide.apiName}`,\n );\n\n if (this.#strict) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? (srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide })\n : undefined;\n\n if (oneSide && manySide) {\n invariant(\n oneSide.link.foreignKeyPropertyApiName,\n `Expected to find a foreignKeyPropertyApiName on the one side: ${oneSide.object.__apiName}.${oneSide.link.apiName}`,\n );\n\n const newObj = {\n ...oneSide.object,\n [oneSide.link.foreignKeyPropertyApiName]:\n manySide.object.__primaryKey,\n };\n\n // This method call will also do the work to update the sides\n this.replaceObjectOrThrow(newObj);\n return;\n }\n }\n\n this.#updateSingleLinkSide(\n srcSide,\n srcLocator,\n dstSide,\n dstLocator,\n );\n this.#updateSingleLinkSide(\n dstSide,\n dstLocator,\n srcSide,\n srcLocator,\n );\n }\n\n unregisterLink(\n src: BaseServerObject,\n srcLinkName: string,\n dst: BaseServerObject,\n dstLinkName: string,\n ): void {\n const srcLocator = objectLocator(src);\n const dstLocator = objectLocator(dst);\n const [srcSide, dstSide] = this.#fauxOntology.getBothLinkTypeSides(\n src.__apiName,\n srcLinkName,\n dst.__apiName,\n );\n\n invariant(\n dstSide.apiName === dstLinkName,\n `Link name mismatch on dst side. Expected ${dstLinkName} but found ${dstSide.apiName}`,\n );\n\n if (this.#strict) {\n const { oneSide, manySide } = extractOneManySide(\n srcSide,\n src,\n dstSide,\n dst,\n );\n\n if (oneSide && manySide) {\n invariant(\n oneSide.link.foreignKeyPropertyApiName,\n `Expected to find a foreignKeyPropertyApiName on the one side: ${oneSide.object.__apiName}.${oneSide.link.apiName}`,\n );\n\n const newObj = {\n ...oneSide.object,\n [oneSide.link.foreignKeyPropertyApiName]: undefined,\n };\n\n // This method call will also do the work to update the sides\n this.replaceObjectOrThrow(newObj);\n return;\n }\n }\n\n this.#removeSingleSideOfLink(srcLocator, srcSide, dstLocator);\n this.#removeSingleSideOfLink(dstLocator, dstSide, srcLocator);\n }\n\n registerTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n data: OntologiesV2.TimeSeriesPoint[],\n ): void {\n this.getObjectOrThrow(objectType, primaryKey);\n const def = this.ontology.getObjectTypeFullMetadataOrThrow(objectType);\n invariant(\n def.objectType.properties[property].dataType.type === \"timeseries\"\n || def.objectType.properties[property].dataType.type\n === \"geotimeSeriesReference\",\n );\n this.#timeSeriesData.get(objectType).get(String(primaryKey)).set(\n property,\n data,\n );\n }\n\n getTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n filter?: OntologiesV2.StreamTimeSeriesPointsRequest,\n ): OntologiesV2.TimeSeriesPoint[] {\n this.getObjectOrThrow(objectType, primaryKey);\n const allData = this.#timeSeriesData.get(objectType).get(String(primaryKey))\n .get(\n property,\n );\n if (!filter) return allData;\n return filterTimeSeriesData(allData, filter);\n }\n\n #updateSingleLinkSide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n srcLocator: ObjectLocator,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dstLocator: ObjectLocator,\n ) {\n const srcLinkName = srcSide.apiName;\n if (srcSide.cardinality === \"ONE\") {\n const linkNameToObj = this.#singleLinks.get(srcLocator);\n const oldLocator = linkNameToObj.get(srcLinkName);\n\n if (oldLocator && oldLocator !== dstLocator) {\n // we need to remove the other side's old value\n this.#removeSingleSideOfLink(\n oldLocator,\n dstSide,\n srcLocator,\n );\n }\n linkNameToObj.set(srcLinkName, dstLocator);\n } else if (srcSide.cardinality === \"MANY\") {\n const linkNameToObj = this.#manyLinks.get(srcLocator);\n linkNameToObj.set(srcLinkName, dstLocator);\n } else {\n // \"never\" case\n throw new Error(\"unexpected cardinality: \" + srcSide.cardinality);\n }\n }\n\n registerMedia(\n objectType: OntologiesV2.ObjectTypeApiName,\n property: OntologiesV2.PropertyApiName,\n content: ArrayBuffer,\n mediaType: MediaType,\n path: string | undefined,\n // This should be the correct prefix, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001989395\n mediaItemRid: MediaItemRid = `ri.mio.main.media-item.${randomUUID()}`,\n ): MediaReference {\n const mediaRef: ReadonlyDeep<MediaReference> = Object.freeze({\n mimeType: mediaType,\n reference: Object.freeze({\n type: \"mediaSetViewItem\",\n mediaSetViewItem: Object.freeze({\n mediaItemRid,\n mediaSetRid: \"ri.unimplemented.in.shared.test\",\n mediaSetViewRid: \"ri.unimplemented.in.shared.test\",\n }),\n }),\n });\n\n this.#media.get(objectType).get(property).set(\n mediaItemRid,\n Object.freeze({\n content,\n mediaRef,\n metaData: Object.freeze({\n mediaType,\n path,\n sizeBytes: String(content.byteLength),\n }),\n }),\n );\n\n return mediaRef;\n }\n\n getMediaOrThrow(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n ): MediaMetadataAndContent {\n const obj = this.getObjectOrThrow(objectType, primaryKey);\n const propertyDef =\n this.ontology.getObjectTypeFullMetadataOrThrow(objectType)\n .objectType.properties[property];\n\n if (!propertyDef) {\n // This should be the correct error, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001968959\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"PropertiesNotFound\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n properties: [property],\n },\n } satisfies OntologiesV2.PropertiesNotFound,\n );\n }\n\n if (propertyDef.dataType.type !== \"mediaReference\") {\n // FIXME: what would the backend do here?\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyType\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n },\n } satisfies OntologiesV2.InvalidPropertyType,\n );\n }\n\n const rid = obj[property].reference.mediaSetViewItem.mediaItemRid;\n\n if (!rid || !rid.startsWith(\"ri.\")) {\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyValue\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n propertyValue: rid,\n },\n } satisfies OntologiesV2.InvalidPropertyValue,\n );\n }\n\n const ret = this.#media.get(objectType).get(property).get(rid);\n\n if (!ret) {\n throw new OpenApiCallError(400, InvalidRequest(\"Invalid parameters\"));\n }\n return ret;\n }\n\n #removeSingleSideOfLink(\n locator: ObjectLocator,\n linkSide: OntologiesV2.LinkTypeSideV2,\n expectedPriorValue: ObjectLocator,\n ) {\n const destLinkName = linkSide.apiName;\n if (linkSide.cardinality === \"ONE\") {\n const links = this.#singleLinks.get(locator);\n invariant(\n links.get(destLinkName) === expectedPriorValue,\n `Failed to remove link: expected ${\n JSON.stringify(expectedPriorValue)\n } but found ${\n JSON.stringify(links.get(destLinkName))\n } for link ${destLinkName} on ${JSON.stringify(locator)}`,\n );\n links.delete(destLinkName);\n } else {\n const links = this.#manyLinks.get(locator);\n invariant(\n links.get(destLinkName)?.has(expectedPriorValue),\n `Failed to remove link: expected collection to contain ${\n JSON.stringify(expectedPriorValue)\n } for link ${destLinkName} on ${JSON.stringify(locator)}`,\n );\n links.remove(destLinkName, expectedPriorValue);\n }\n }\n\n getObject(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject | undefined {\n return this.#objects\n .get(apiName)\n .get(String(primaryKey));\n }\n\n getObjectOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject {\n const object = this.getObject(apiName, primaryKey);\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(apiName, String(primaryKey)),\n );\n }\n return object;\n }\n\n getObjectByRid(rid: string): BaseServerObject | undefined {\n for (const [, pkToObjects] of this.#objects) {\n for (const [, obj] of pkToObjects) {\n if (obj.__rid === rid) {\n return obj;\n }\n }\n }\n }\n\n getLinksOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n linkApiName: string,\n ): BaseServerObject[] {\n const object = this.getObjectOrThrow(apiName, primaryKey);\n\n const linkTypeSide = this.#fauxOntology.getLinkTypeSideV2(\n apiName,\n linkApiName,\n );\n\n if (linkTypeSide.cardinality === \"ONE\") {\n const locator = this.#singleLinks\n .get(objectLocator(object))\n .get(linkApiName);\n if (locator === undefined) {\n return [];\n }\n const { objectType, primaryKey } = parseLocator(locator);\n\n return [this.getObjectOrThrow(objectType, primaryKey)]; // will throw if not found\n } else {\n const locators = this.#manyLinks\n .get(objectLocator(object))\n .get(linkApiName);\n\n return Array.from(locators ?? [])\n .map((a) => {\n const [objectType, primaryKey] = a.split(\":\") ?? [];\n invariant(objectType && primaryKey, \"Invalid locator format\");\n return this.getObjectOrThrow(objectType, primaryKey);\n });\n }\n }\n\n getLinkOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n linkType: string,\n targetPrimaryKey: string | number | boolean,\n ): BaseServerObject {\n const allLinks = this.getLinksOrThrow(objectType, primaryKey, linkType);\n const object =\n allLinks.filter(l => String(l.__primaryKey) === targetPrimaryKey)[0];\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(\n `${objectType} -> ${linkType}`,\n String(targetPrimaryKey),\n ),\n );\n }\n return object;\n }\n\n getObjectsOfType(apiName: string): Iterable<BaseServerObject> {\n this.ontology.getObjectTypeFullMetadataOrThrow(apiName);\n return this.#objects\n .get(apiName)\n .values();\n }\n\n getObjectsFromObjectSet(\n parsedBody:\n | OntologiesV2.LoadObjectSetV2MultipleObjectTypesRequest\n | OntologiesV2.LoadObjectSetRequestV2,\n ): PagedBodyResponseWithTotal<BaseServerObject> {\n const selected = parsedBody.select;\n // when we have interfaces in here, we have a little trick for\n // caching off the important properties\n let objects = getObjectsFromSet(this, parsedBody.objectSet, undefined);\n\n if (!objects || objects.length === 0) {\n return {\n data: [],\n totalCount: \"0\",\n nextPageToken: undefined,\n };\n }\n\n if (parsedBody.orderBy) {\n objects = objects.sort(createOrderBySortFn(parsedBody.orderBy));\n }\n\n // finally, if we got interfaces, the objects have names like the interface and we need\n // to return them like the object.\n\n const page = pageThroughResponseSearchParams(\n objects,\n getPaginationParamsFromRequest(parsedBody),\n false,\n );\n\n if (!page) {\n throw new OpenApiCallError(\n 404,\n InvalidRequest(\n `No objects found for ${JSON.stringify(parsedBody)}`,\n ),\n );\n }\n const ret = subSelectProperties(\n page,\n [...selected],\n true,\n parsedBody.excludeRid,\n );\n\n return ret;\n }\n\n getAttachmentMetadata(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): OntologiesV2.AttachmentV2 {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentMetadataByRid(rid);\n }\n\n getAttachmentBuffer(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): ArrayBuffer {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentBuffer(rid);\n }\n\n applyAction(\n actionTypeApiName: string,\n req: OntologiesV2.ApplyActionRequestV2,\n ): OntologiesV2.SyncApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n const validation = validateAction(req, actionDef, this);\n if (validation.result === \"INVALID\") {\n return { validation };\n }\n\n const batch = new FauxDataStoreBatch(this);\n const r = actionImpl(batch, req, {\n def: actionDef,\n attachments: this.#attachments,\n });\n\n // The legacy actions return the full payload\n // they want to return, so we need to do that\n // but the future is for the actionImpl's to\n // return void and to do validation details here\n if (r) return r;\n\n return {\n validation: {\n parameters: {},\n result: \"VALID\",\n submissionCriteria: [],\n },\n edits: req.options?.mode === \"VALIDATE_AND_EXECUTE\"\n && (\n req.options.returnEdits === \"ALL\"\n || req.options.returnEdits === \"ALL_V2_WITH_DELETIONS\"\n )\n ? {\n type: \"edits\",\n ...batch.objectEdits,\n }\n : undefined,\n };\n }\n\n batchApplyAction(\n actionTypeApiName: string,\n batchReq: OntologiesV2.BatchApplyActionRequestV2,\n ): OntologiesV2.BatchApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n for (const req of batchReq.requests) {\n const result = validateAction(req, actionDef, this);\n if (result.result === \"INVALID\") {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"ActionValidationFailed\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n actionType: actionTypeApiName,\n },\n } as OntologiesV2.ActionValidationFailed,\n );\n }\n }\n\n const batch = new FauxDataStoreBatch(this);\n\n const returnLargeScaleEdits = false;\n for (const item of batchReq.requests) {\n actionImpl(\n batch,\n {\n ...item,\n options: {\n mode: \"VALIDATE_AND_EXECUTE\",\n returnEdits: batchReq.options?.returnEdits,\n },\n },\n { def: actionDef, attachments: this.#attachments },\n );\n }\n if (batchReq.options?.returnEdits === \"NONE\") {\n return {};\n }\n\n if (returnLargeScaleEdits) {\n const editedObjectTypes = new Set<OntologiesV2.ObjectTypeApiName>();\n for (const edit of batch.objectEdits.edits) {\n if (\n edit.type === \"modifyObject\" || edit.type === \"addObject\"\n || edit.type === \"deleteObject\"\n ) {\n editedObjectTypes.add(edit.objectType);\n }\n }\n\n return {\n edits: {\n type: \"largeScaleEdits\",\n editedObjectTypes: Array.from(editedObjectTypes),\n },\n };\n }\n\n return {\n edits: {\n type: \"edits\",\n ...batch.objectEdits,\n edits: batch.objectEdits.edits.filter(x =>\n x.type !== \"deleteObject\" && x.type !== \"deleteLink\"\n ),\n },\n };\n }\n}\nfunction extractOneManySide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n src: BaseServerObject,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dst: BaseServerObject,\n) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? (srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide })\n : undefined;\n return { oneSide, manySide };\n}\n"],"mappings":"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","ignoreList":[]}