@osdk/faux 0.5.0-beta.1 → 0.5.0-beta.3

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 CHANGED
@@ -1,5 +1,29 @@
1
1
  # @osdk/shared.test
2
2
 
3
+ ## 0.5.0-beta.3
4
+
5
+ ### Minor Changes
6
+
7
+ - db44f6b: Add property security metadata to objects when requested
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [db44f6b]
12
+ - Updated dependencies [24a1e29]
13
+ - @osdk/api@2.7.0-beta.10
14
+ - @osdk/generator-converters@2.7.0-beta.10
15
+
16
+ ## 0.5.0-beta.2
17
+
18
+ ### Minor Changes
19
+
20
+ - 03db734: Move platform SDK deps to pnpm catalog
21
+
22
+ ### Patch Changes
23
+
24
+ - @osdk/api@2.7.0-beta.2
25
+ - @osdk/generator-converters@2.7.0-beta.2
26
+
3
27
  ## 0.4.0-beta.6
4
28
 
5
29
  ### Minor Changes
@@ -46,11 +46,13 @@ import { validateAction } from "./validateAction.js";
46
46
 
47
47
  export class FauxDataStore {
48
48
  #objects = new DefaultMap(() => new Map());
49
+ #objectsWithSecurities = new DefaultMap(() => new Map());
49
50
  #singleLinks = new DefaultMap(() => new Map());
50
51
  #manyLinks = new DefaultMap(() => new MultiMap(Set));
51
52
  #fauxOntology;
52
53
  #attachments;
53
54
  #timeSeriesData = new DefaultMap(() => new DefaultMap(() => new DefaultMap(() => [])));
55
+ #propertySecurities = new DefaultMap(() => [{}]);
54
56
  #media = new DefaultMap(() => new DefaultMap(() => {
55
57
  return new Map();
56
58
  }));
@@ -148,6 +150,14 @@ export class FauxDataStore {
148
150
  this.#objects.get(bso.__apiName).set(String(bso.__primaryKey), frozenBso);
149
151
  return frozenBso;
150
152
  }
153
+ registerObjectWithPropertySecurities(regularObject, securedObject, propertySecurities) {
154
+ const registeredObj = this.registerObject(regularObject);
155
+ this.#objectsWithSecurities.get(registeredObj.__apiName).set(String(registeredObj.__primaryKey), Object.freeze({
156
+ ...securedObject
157
+ }));
158
+ this.#propertySecurities.set(objectLocator(registeredObj), propertySecurities);
159
+ return registeredObj;
160
+ }
151
161
  #osdkCreatableToBso(objectType, anyObj) {
152
162
  objectType = typeof objectType === "string" ? objectType : objectType.apiName;
153
163
  if ("$apiName" in anyObj) {
@@ -434,6 +444,9 @@ export class FauxDataStore {
434
444
  }
435
445
  return object;
436
446
  }
447
+ getObjectWithSecurities(apiName, primaryKey) {
448
+ return this.#objectsWithSecurities.get(apiName).get(String(primaryKey));
449
+ }
437
450
  getObjectByRid(rid) {
438
451
  for (const [, pkToObjects] of this.#objects) {
439
452
  for (const [, obj] of pkToObjects) {
@@ -479,14 +492,20 @@ export class FauxDataStore {
479
492
  }
480
493
  getObjectsFromObjectSet(parsedBody) {
481
494
  const selected = parsedBody.select;
495
+ const loadPropertySecurities = parsedBody.loadPropertySecurities ?? false;
482
496
  // when we have interfaces in here, we have a little trick for
483
497
  // caching off the important properties
484
498
  let objects = getObjectsFromSet(this, parsedBody.objectSet, undefined);
499
+ if (loadPropertySecurities) {
500
+ !(objects.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, "Loading property securities is only supported when loading a single object") : invariant(false) : void 0;
501
+ objects = [this.getObjectWithSecurities(objects[0].__apiName, objects[0].__primaryKey)];
502
+ }
485
503
  if (!objects || objects.length === 0) {
486
504
  return {
487
505
  data: [],
488
506
  totalCount: "0",
489
- nextPageToken: undefined
507
+ nextPageToken: undefined,
508
+ propertySecurities: []
490
509
  };
491
510
  }
492
511
  if (parsedBody.orderBy) {
@@ -496,7 +515,7 @@ export class FauxDataStore {
496
515
  // finally, if we got interfaces, the objects have names like the interface and we need
497
516
  // to return them like the object.
498
517
 
499
- const page = pageThroughResponseSearchParams(objects, getPaginationParamsFromRequest(parsedBody), false);
518
+ const page = pageThroughResponseSearchParams(objects, getPaginationParamsFromRequest(parsedBody), false, loadPropertySecurities ? this.#propertySecurities.get(objectLocator(objects[0])) : undefined);
500
519
  if (!page) {
501
520
  throw new OpenApiCallError(404, InvalidRequest(`No objects found for ${JSON.stringify(parsedBody)}`));
502
521
  }
@@ -1 +1 @@
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","errorDescription","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 & {\n $apiName: CompileTimeMetadata<T>[\"apiName\"];\n };\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 >((key) => new Map());\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(\n (_pk: string) =>\n new DefaultMap(\n (_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 errorDescription:\n \"The object the user is attempting to create already exists.\",\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 $apiName: OntologiesV2.ObjectTypeApiName;\n $primaryKey: string | number | boolean;\n } & Record<string, unknown>;\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(String(bso.__primaryKey), frozenBso);\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(objectType);\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 srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\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(\n linkDef,\n { colors: false },\n )\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(srcSide, srcLocator, dstSide, dstLocator);\n this.#updateSingleLinkSide(dstSide, dstLocator, srcSide, srcLocator);\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(srcSide, srcLocator, dstSide, dstLocator);\n this.#updateSingleLinkSide(dstSide, dstLocator, srcSide, srcLocator);\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 | number,\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\n .get(objectType)\n .get(String(primaryKey))\n .set(property, data);\n }\n\n getTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string | number,\n property: OntologiesV2.PropertyApiName,\n filter?: OntologiesV2.StreamTimeSeriesPointsRequest,\n ): OntologiesV2.TimeSeriesPoint[] {\n this.getObjectOrThrow(objectType, primaryKey);\n const allData = this.#timeSeriesData\n .get(objectType)\n .get(String(primaryKey))\n .get(property);\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(oldLocator, dstSide, srcLocator);\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\n .get(objectType)\n .get(property)\n .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).objectType\n .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 errorDescription:\n \"The requested properties are not found on the object type.\",\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 errorDescription:\n \"The given property type is not of the expected type.\",\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 errorDescription:\n \"The value of the given property is invalid. See the documentation of PropertyValue for details on how properties are represented.\",\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(\n expectedPriorValue,\n )\n } but found ${\n JSON.stringify(\n links.get(destLinkName),\n )\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(\n expectedPriorValue,\n )\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.get(apiName).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 ?? []).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 = allLinks.filter(\n (l) => String(l.__primaryKey) === targetPrimaryKey,\n )[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.get(apiName).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(`No objects found for ${JSON.stringify(parsedBody)}`),\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 && (req.options.returnEdits === \"ALL\"\n || req.options.returnEdits === \"ALL_V2_WITH_DELETIONS\")\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(500, {\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 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\"\n || 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(\n (x) => 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","objectsWithSecurities","singleLinks","manyLinks","Set","fauxOntology","attachments","timeSeriesData","propertySecurities","media","strict","constructor","clear","ontology","assertObjectExists","#assertObjectExists","objectType","primaryKey","getObject","String","assertObjectDoesNotExist","#assertObjectDoesNotExist","errorCode","errorName","errorInstanceId","parameters","errorDescription","registerObject","anyObj","bso","process","env","NODE_ENV","Object","keys","some","s","startsWith","osdkCreatableToBso","apiName","__apiName","$apiName","__primaryKey","$primaryKey","others","frozenBso","freeze","get","set","registerObjectWithPropertySecurities","regularObject","securedObject","registeredObj","#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","getObjectWithSecurities","getObjectByRid","pkToObjects","getLinksOrThrow","linkApiName","linkTypeSide","getLinkTypeSideV2","locators","Array","from","map","a","split","getLinkOrThrow","linkType","targetPrimaryKey","allLinks","l","getObjectsOfType","values","getObjectsFromObjectSet","parsedBody","selected","select","loadPropertySecurities","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 & {\n $apiName: CompileTimeMetadata<T>[\"apiName\"];\n };\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 >((key) => new Map());\n\n #objectsWithSecurities = new DefaultMap<\n OntologiesV2.ObjectTypeApiName,\n Map<string, BaseServerObject>\n >((key) => new Map());\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(\n (_pk: string) =>\n new DefaultMap(\n (_property: OntologiesV2.PropertyApiName) =>\n [] as Array<OntologiesV2.TimeSeriesPoint>,\n ),\n ),\n );\n\n #propertySecurities = new DefaultMap(\n (_objectLocator: ObjectLocator) =>\n [{}] as Array<OntologiesV2.PropertySecurities>,\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 errorDescription:\n \"The object the user is attempting to create already exists.\",\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 $apiName: OntologiesV2.ObjectTypeApiName;\n $primaryKey: string | number | boolean;\n } & Record<string, unknown>;\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(String(bso.__primaryKey), frozenBso);\n\n return frozenBso;\n }\n\n registerObjectWithPropertySecurities(\n regularObject: BaseServerObject,\n securedObject: BaseServerObject,\n propertySecurities: OntologiesV2.PropertySecurities[],\n ): BaseServerObject {\n const registeredObj = this.registerObject(regularObject);\n\n this.#objectsWithSecurities.get(registeredObj.__apiName).set(\n String(registeredObj.__primaryKey),\n Object.freeze({ ...securedObject }),\n );\n this.#propertySecurities.set(\n objectLocator(registeredObj),\n propertySecurities,\n );\n return registeredObj;\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(objectType);\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 srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\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(\n linkDef,\n { colors: false },\n )\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(srcSide, srcLocator, dstSide, dstLocator);\n this.#updateSingleLinkSide(dstSide, dstLocator, srcSide, srcLocator);\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(srcSide, srcLocator, dstSide, dstLocator);\n this.#updateSingleLinkSide(dstSide, dstLocator, srcSide, srcLocator);\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 | number,\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\n .get(objectType)\n .get(String(primaryKey))\n .set(property, data);\n }\n\n getTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string | number,\n property: OntologiesV2.PropertyApiName,\n filter?: OntologiesV2.StreamTimeSeriesPointsRequest,\n ): OntologiesV2.TimeSeriesPoint[] {\n this.getObjectOrThrow(objectType, primaryKey);\n const allData = this.#timeSeriesData\n .get(objectType)\n .get(String(primaryKey))\n .get(property);\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(oldLocator, dstSide, srcLocator);\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\n .get(objectType)\n .get(property)\n .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).objectType\n .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 errorDescription:\n \"The requested properties are not found on the object type.\",\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 errorDescription:\n \"The given property type is not of the expected type.\",\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 errorDescription:\n \"The value of the given property is invalid. See the documentation of PropertyValue for details on how properties are represented.\",\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(\n expectedPriorValue,\n )\n } but found ${\n JSON.stringify(\n links.get(destLinkName),\n )\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(\n expectedPriorValue,\n )\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.get(apiName).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 getObjectWithSecurities(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject | undefined {\n return this.#objectsWithSecurities.get(apiName).get(String(primaryKey));\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 ?? []).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 = allLinks.filter(\n (l) => String(l.__primaryKey) === targetPrimaryKey,\n )[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.get(apiName).values();\n }\n\n getObjectsFromObjectSet(\n parsedBody:\n | OntologiesV2.LoadObjectSetV2MultipleObjectTypesRequest\n | OntologiesV2.LoadObjectSetRequestV2,\n ): PagedBodyResponseWithTotal<BaseServerObject> {\n const selected = parsedBody.select;\n const loadPropertySecurities = parsedBody.loadPropertySecurities ?? false;\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 (loadPropertySecurities) {\n invariant(\n objects.length === 1,\n \"Loading property securities is only supported when loading a single object\",\n );\n\n objects = [\n this.getObjectWithSecurities(\n objects[0].__apiName,\n objects[0].__primaryKey,\n )!,\n ];\n }\n if (!objects || objects.length === 0) {\n return {\n data: [],\n totalCount: \"0\",\n nextPageToken: undefined,\n propertySecurities: [],\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 loadPropertySecurities\n ? this.#propertySecurities.get(\n objectLocator(objects[0]),\n )\n : undefined,\n );\n\n if (!page) {\n throw new OpenApiCallError(\n 404,\n InvalidRequest(`No objects found for ${JSON.stringify(parsedBody)}`),\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 && (req.options.returnEdits === \"ALL\"\n || req.options.returnEdits === \"ALL_V2_WITH_DELETIONS\")\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(500, {\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 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\"\n || 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(\n (x) => 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":[]}
@@ -72,7 +72,8 @@ export function subSelectProperties(objects, urlOrProperties, includeCount, excl
72
72
  const ret = {
73
73
  nextPageToken: objects.nextPageToken,
74
74
  data: result,
75
- totalCount: objects.totalCount
75
+ totalCount: objects.totalCount,
76
+ propertySecurities: objects.propertySecurities
76
77
  };
77
78
  return ret;
78
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filterObjects.js","names":["subSelectPropertiesUrl","object","url","properties","Set","searchParams","getAll","size","result","Object","entries","reduce","acc","key","value","has","__primaryKey","__apiName","subSelectProperties","objects","urlOrProperties","includeCount","excludeRid","Array","isArray","data","map","$propsToReturn","__title","__rid","removeRid","add","ret","nextPageToken","totalCount","rest"],"sources":["filterObjects.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 OntologyObject,\n OntologyObjectV2,\n} from \"@osdk/foundry.ontologies\";\nimport type {\n PagedBodyResponse,\n PagedBodyResponseWithTotal,\n} from \"./handlers/util/pageThroughResponseSearchParams.js\";\n\nexport function subSelectPropertiesUrl<\n T extends OntologyObjectV2 | OntologyObject,\n>(\n object: T,\n url: URL,\n): T {\n const properties = new Set(url.searchParams.getAll(\"select\"));\n\n if (properties.size === 0) {\n return object;\n }\n\n const result = Object.entries(object).reduce<{ [key: string]: any }>(\n (acc, [key, value]) => {\n if (properties.has(key)) {\n acc[key] = value;\n } else if (key === \"__primaryKey\") {\n acc.__primaryKey = value;\n } else if (key === \"__apiName\") {\n acc.__apiName = value;\n }\n\n return acc;\n },\n {},\n );\n\n return result as T;\n}\n\nexport function subSelectProperties<\n T extends OntologyObjectV2,\n TResponse extends\n | PagedBodyResponse<T>\n | PagedBodyResponseWithTotal<T>,\n TIncludeCount extends (TResponse extends PagedBodyResponseWithTotal<T> ? true\n : false),\n>(\n objects: PagedBodyResponse<T>,\n urlOrProperties: URL | string[],\n includeCount: TIncludeCount,\n excludeRid?: boolean,\n): TIncludeCount extends true ? PagedBodyResponseWithTotal<T>\n : PagedBodyResponse<T>\n{\n let properties: Set<string>;\n if (Array.isArray(urlOrProperties)) {\n properties = new Set(urlOrProperties);\n } else {\n properties = new Set(urlOrProperties.searchParams.getAll(\"select\"));\n }\n\n const result = objects.data.map(object => {\n // This is set when an object had an interface that was marked to return all properties\n if (object.$propsToReturn) {\n return {\n __apiName: object.__apiName,\n __primaryKey: object.__primaryKey,\n __title: object.__title,\n ...object.$propsToReturn,\n ...(excludeRid ? {} : { __rid: object.__rid }),\n };\n }\n\n // no subselect provided, just handle the rid.\n if (properties.size === 0) {\n return excludeRid ? removeRid(object) : object;\n }\n\n // do subselect\n properties.add(\"__primaryKey\");\n properties.add(\"__apiName\");\n properties.add(\"__title\");\n if (!excludeRid) properties.add(\"__rid\");\n return Object.entries(object).reduce<{ [key: string]: any }>(\n (acc, [key, value]) => {\n if (properties.has(key)) {\n acc[key] = value;\n }\n\n return acc;\n },\n {},\n );\n });\n\n const ret:\n | PagedBodyResponse<T>\n | PagedBodyResponseWithTotal<T> = {\n nextPageToken: objects.nextPageToken,\n data: result as T[],\n totalCount: (objects as PagedBodyResponseWithTotal<T>).totalCount,\n };\n\n return ret as TIncludeCount extends true ? PagedBodyResponseWithTotal<T>\n : PagedBodyResponse<T>;\n}\nfunction removeRid<T extends OntologyObjectV2>(object: T) {\n const { __rid, ...rest } = object as Omit<T, \"__rid\">;\n return rest;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"filterObjects.js","names":["subSelectPropertiesUrl","object","url","properties","Set","searchParams","getAll","size","result","Object","entries","reduce","acc","key","value","has","__primaryKey","__apiName","subSelectProperties","objects","urlOrProperties","includeCount","excludeRid","Array","isArray","data","map","$propsToReturn","__title","__rid","removeRid","add","ret","nextPageToken","totalCount","propertySecurities","rest"],"sources":["filterObjects.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 OntologyObject,\n OntologyObjectV2,\n} from \"@osdk/foundry.ontologies\";\nimport type {\n PagedBodyResponse,\n PagedBodyResponseWithTotal,\n} from \"./handlers/util/pageThroughResponseSearchParams.js\";\n\nexport function subSelectPropertiesUrl<\n T extends OntologyObjectV2 | OntologyObject,\n>(\n object: T,\n url: URL,\n): T {\n const properties = new Set(url.searchParams.getAll(\"select\"));\n\n if (properties.size === 0) {\n return object;\n }\n\n const result = Object.entries(object).reduce<{ [key: string]: any }>(\n (acc, [key, value]) => {\n if (properties.has(key)) {\n acc[key] = value;\n } else if (key === \"__primaryKey\") {\n acc.__primaryKey = value;\n } else if (key === \"__apiName\") {\n acc.__apiName = value;\n }\n\n return acc;\n },\n {},\n );\n\n return result as T;\n}\n\nexport function subSelectProperties<\n T extends OntologyObjectV2,\n TResponse extends\n | PagedBodyResponse<T>\n | PagedBodyResponseWithTotal<T>,\n TIncludeCount extends (TResponse extends PagedBodyResponseWithTotal<T> ? true\n : false),\n>(\n objects: PagedBodyResponse<T>,\n urlOrProperties: URL | string[],\n includeCount: TIncludeCount,\n excludeRid?: boolean,\n): TIncludeCount extends true ? PagedBodyResponseWithTotal<T>\n : PagedBodyResponse<T>\n{\n let properties: Set<string>;\n if (Array.isArray(urlOrProperties)) {\n properties = new Set(urlOrProperties);\n } else {\n properties = new Set(urlOrProperties.searchParams.getAll(\"select\"));\n }\n\n const result = objects.data.map(object => {\n // This is set when an object had an interface that was marked to return all properties\n if (object.$propsToReturn) {\n return {\n __apiName: object.__apiName,\n __primaryKey: object.__primaryKey,\n __title: object.__title,\n ...object.$propsToReturn,\n ...(excludeRid ? {} : { __rid: object.__rid }),\n };\n }\n\n // no subselect provided, just handle the rid.\n if (properties.size === 0) {\n return excludeRid ? removeRid(object) : object;\n }\n\n // do subselect\n properties.add(\"__primaryKey\");\n properties.add(\"__apiName\");\n properties.add(\"__title\");\n if (!excludeRid) properties.add(\"__rid\");\n return Object.entries(object).reduce<{ [key: string]: any }>(\n (acc, [key, value]) => {\n if (properties.has(key)) {\n acc[key] = value;\n }\n\n return acc;\n },\n {},\n );\n });\n\n const ret:\n | PagedBodyResponse<T>\n | PagedBodyResponseWithTotal<T> = {\n nextPageToken: objects.nextPageToken,\n data: result as T[],\n totalCount: (objects as PagedBodyResponseWithTotal<T>).totalCount,\n propertySecurities: objects.propertySecurities,\n };\n\n return ret as TIncludeCount extends true ? PagedBodyResponseWithTotal<T>\n : PagedBodyResponse<T>;\n}\nfunction removeRid<T extends OntologyObjectV2>(object: T) {\n const { __rid, ...rest } = object as Omit<T, \"__rid\">;\n return rest;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -23,7 +23,8 @@ OntologiesV2.OntologyObjectSets.load(baseUrl, async ({
23
23
  request,
24
24
  params
25
25
  }) => {
26
- return fauxFoundry.getDataStore(params.ontologyApiName).getObjectsFromObjectSet(await request.json());
26
+ const a = fauxFoundry.getDataStore(params.ontologyApiName).getObjectsFromObjectSet(await request.json());
27
+ return a;
27
28
  }),
28
29
  /**
29
30
  * Aggregate Objects in ObjectSet
@@ -45,7 +46,8 @@ OntologiesV2.OntologyObjectSets.loadMultipleObjectTypes(baseUrl, async ({
45
46
  return {
46
47
  interfaceToObjectTypeMappings: fauxFoundry.getOntology(params.ontologyApiName).getInterfaceToObjectTypeMappings(objectApiNames),
47
48
  interfaceToObjectTypeMappingsV2: {},
48
- ...pagedResponse
49
+ ...pagedResponse,
50
+ propertySecurities: []
49
51
  };
50
52
  })];
51
53
  //# sourceMappingURL=createObjectSetHandlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createObjectSetHandlers.js","names":["OntologiesV2","createObjectSetHandlers","baseUrl","fauxFoundry","OntologyObjectSets","load","request","params","getDataStore","ontologyApiName","getObjectsFromObjectSet","json","aggregate","Error","loadMultipleObjectTypes","pagedResponse","objectApiNames","Set","data","map","o","__apiName","interfaceToObjectTypeMappings","getOntology","getInterfaceToObjectTypeMappings","interfaceToObjectTypeMappingsV2"],"sources":["createObjectSetHandlers.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 { RequestHandler } from \"msw\";\nimport type { FauxFoundry } from \"../FauxFoundry/FauxFoundry.js\";\nimport { OntologiesV2 } from \"../mock/index.js\";\n\nexport const createObjectSetHandlers = (\n baseUrl: string,\n fauxFoundry: FauxFoundry,\n): Array<RequestHandler> => [\n /**\n * Load ObjectSet Objects\n */\n OntologiesV2.OntologyObjectSets.load(\n baseUrl,\n async ({ request, params }) => {\n return fauxFoundry\n .getDataStore(params.ontologyApiName)\n .getObjectsFromObjectSet(await request.json());\n },\n ),\n\n /**\n * Aggregate Objects in ObjectSet\n */\n OntologiesV2.OntologyObjectSets.aggregate(\n baseUrl,\n async ({ request }) => {\n throw new Error(\"Not implemented\");\n },\n ),\n\n /**\n * Load interface objectset Objects\n */\n OntologiesV2.OntologyObjectSets.loadMultipleObjectTypes(\n baseUrl,\n async ({ params, request }) => {\n const pagedResponse = fauxFoundry\n .getDataStore(params.ontologyApiName)\n .getObjectsFromObjectSet(await request.json());\n\n const objectApiNames = new Set(pagedResponse.data.map(o => o.__apiName));\n\n return {\n interfaceToObjectTypeMappings: fauxFoundry\n .getOntology(params.ontologyApiName)\n .getInterfaceToObjectTypeMappings(objectApiNames),\n interfaceToObjectTypeMappingsV2: {},\n ...pagedResponse,\n };\n },\n ),\n];\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,YAAY,QAAQ,kBAAkB;AAE/C,OAAO,MAAMC,uBAAuB,GAAGA,CACrCC,OAAe,EACfC,WAAwB,KACE;AAC1B;AACF;AACA;AACEH,YAAY,CAACI,kBAAkB,CAACC,IAAI,CAClCH,OAAO,EACP,OAAO;EAAEI,OAAO;EAAEC;AAAO,CAAC,KAAK;EAC7B,OAAOJ,WAAW,CACfK,YAAY,CAACD,MAAM,CAACE,eAAe,CAAC,CACpCC,uBAAuB,CAAC,MAAMJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;AAClD,CACF,CAAC;AAED;AACF;AACA;AACEX,YAAY,CAACI,kBAAkB,CAACQ,SAAS,CACvCV,OAAO,EACP,OAAO;EAAEI;AAAQ,CAAC,KAAK;EACrB,MAAM,IAAIO,KAAK,CAAC,iBAAiB,CAAC;AACpC,CACF,CAAC;AAED;AACF;AACA;AACEb,YAAY,CAACI,kBAAkB,CAACU,uBAAuB,CACrDZ,OAAO,EACP,OAAO;EAAEK,MAAM;EAAED;AAAQ,CAAC,KAAK;EAC7B,MAAMS,aAAa,GAAGZ,WAAW,CAC9BK,YAAY,CAACD,MAAM,CAACE,eAAe,CAAC,CACpCC,uBAAuB,CAAC,MAAMJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;EAEhD,MAAMK,cAAc,GAAG,IAAIC,GAAG,CAACF,aAAa,CAACG,IAAI,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,SAAS,CAAC,CAAC;EAExE,OAAO;IACLC,6BAA6B,EAAEnB,WAAW,CACvCoB,WAAW,CAAChB,MAAM,CAACE,eAAe,CAAC,CACnCe,gCAAgC,CAACR,cAAc,CAAC;IACnDS,+BAA+B,EAAE,CAAC,CAAC;IACnC,GAAGV;EACL,CAAC;AACH,CACF,CAAC,CACF","ignoreList":[]}
1
+ {"version":3,"file":"createObjectSetHandlers.js","names":["OntologiesV2","createObjectSetHandlers","baseUrl","fauxFoundry","OntologyObjectSets","load","request","params","a","getDataStore","ontologyApiName","getObjectsFromObjectSet","json","aggregate","Error","loadMultipleObjectTypes","pagedResponse","objectApiNames","Set","data","map","o","__apiName","interfaceToObjectTypeMappings","getOntology","getInterfaceToObjectTypeMappings","interfaceToObjectTypeMappingsV2","propertySecurities"],"sources":["createObjectSetHandlers.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 { RequestHandler } from \"msw\";\nimport type { FauxFoundry } from \"../FauxFoundry/FauxFoundry.js\";\nimport { OntologiesV2 } from \"../mock/index.js\";\n\nexport const createObjectSetHandlers = (\n baseUrl: string,\n fauxFoundry: FauxFoundry,\n): Array<RequestHandler> => [\n /**\n * Load ObjectSet Objects\n */\n OntologiesV2.OntologyObjectSets.load(\n baseUrl,\n async ({ request, params }) => {\n const a = fauxFoundry\n .getDataStore(params.ontologyApiName)\n .getObjectsFromObjectSet(await request.json());\n return a;\n },\n ),\n\n /**\n * Aggregate Objects in ObjectSet\n */\n OntologiesV2.OntologyObjectSets.aggregate(\n baseUrl,\n async ({ request }) => {\n throw new Error(\"Not implemented\");\n },\n ),\n\n /**\n * Load interface objectset Objects\n */\n OntologiesV2.OntologyObjectSets.loadMultipleObjectTypes(\n baseUrl,\n async ({ params, request }) => {\n const pagedResponse = fauxFoundry\n .getDataStore(params.ontologyApiName)\n .getObjectsFromObjectSet(await request.json());\n\n const objectApiNames = new Set(pagedResponse.data.map(o => o.__apiName));\n\n return {\n interfaceToObjectTypeMappings: fauxFoundry\n .getOntology(params.ontologyApiName)\n .getInterfaceToObjectTypeMappings(objectApiNames),\n interfaceToObjectTypeMappingsV2: {},\n ...pagedResponse,\n propertySecurities: [],\n };\n },\n ),\n];\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,SAASA,YAAY,QAAQ,kBAAkB;AAE/C,OAAO,MAAMC,uBAAuB,GAAGA,CACrCC,OAAe,EACfC,WAAwB,KACE;AAC1B;AACF;AACA;AACEH,YAAY,CAACI,kBAAkB,CAACC,IAAI,CAClCH,OAAO,EACP,OAAO;EAAEI,OAAO;EAAEC;AAAO,CAAC,KAAK;EAC7B,MAAMC,CAAC,GAAGL,WAAW,CAClBM,YAAY,CAACF,MAAM,CAACG,eAAe,CAAC,CACpCC,uBAAuB,CAAC,MAAML,OAAO,CAACM,IAAI,CAAC,CAAC,CAAC;EAChD,OAAOJ,CAAC;AACV,CACF,CAAC;AAED;AACF;AACA;AACER,YAAY,CAACI,kBAAkB,CAACS,SAAS,CACvCX,OAAO,EACP,OAAO;EAAEI;AAAQ,CAAC,KAAK;EACrB,MAAM,IAAIQ,KAAK,CAAC,iBAAiB,CAAC;AACpC,CACF,CAAC;AAED;AACF;AACA;AACEd,YAAY,CAACI,kBAAkB,CAACW,uBAAuB,CACrDb,OAAO,EACP,OAAO;EAAEK,MAAM;EAAED;AAAQ,CAAC,KAAK;EAC7B,MAAMU,aAAa,GAAGb,WAAW,CAC9BM,YAAY,CAACF,MAAM,CAACG,eAAe,CAAC,CACpCC,uBAAuB,CAAC,MAAML,OAAO,CAACM,IAAI,CAAC,CAAC,CAAC;EAEhD,MAAMK,cAAc,GAAG,IAAIC,GAAG,CAACF,aAAa,CAACG,IAAI,CAACC,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,SAAS,CAAC,CAAC;EAExE,OAAO;IACLC,6BAA6B,EAAEpB,WAAW,CACvCqB,WAAW,CAACjB,MAAM,CAACG,eAAe,CAAC,CACnCe,gCAAgC,CAACR,cAAc,CAAC;IACnDS,+BAA+B,EAAE,CAAC,CAAC;IACnC,GAAGV,aAAa;IAChBW,kBAAkB,EAAE;EACtB,CAAC;AACH,CACF,CAAC,CACF","ignoreList":[]}
@@ -17,7 +17,7 @@
17
17
  export function pageThroughResponseSearchParams(iter, {
18
18
  pageSize = 1000,
19
19
  pageToken
20
- }, includeCount) {
20
+ }, includeCount, propertySecurities) {
21
21
  const data = Array.from(iter);
22
22
  const pageCount = Math.ceil(data.length / pageSize);
23
23
  const currentPage = pageToken ? Number(pageToken) : 0;
@@ -32,7 +32,8 @@ export function pageThroughResponseSearchParams(iter, {
32
32
  data: data.slice(startIndex, endIndex),
33
33
  ...(includeCount ? {
34
34
  totalCount: String(data.length)
35
- } : {})
35
+ } : {}),
36
+ propertySecurities: propertySecurities ?? []
36
37
  };
37
38
  return ret;
38
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pageThroughResponseSearchParams.js","names":["pageThroughResponseSearchParams","iter","pageSize","pageToken","includeCount","data","Array","from","pageCount","Math","ceil","length","currentPage","Number","undefined","startIndex","endIndex","min","nextPageToken","toString","ret","slice","totalCount","String"],"sources":["pageThroughResponseSearchParams.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 { PageToken } from \"@osdk/foundry.core\";\n\nexport interface PagedBodyResponse<T> {\n nextPageToken?: string;\n data: T[];\n}\n\nexport interface PagedBodyResponseWithTotal<T> extends PagedBodyResponse<T> {\n totalCount: string;\n}\n\nexport type PagedRequest = {\n excludeRid?: boolean;\n pageSize?: number;\n pageToken?: string;\n};\n\nexport function pageThroughResponseSearchParams<\n TData,\n TIncludeCount extends boolean,\n>(\n iter: Iterable<TData>,\n { pageSize = 1000, pageToken }: {\n pageSize: number | undefined;\n pageToken: PageToken | undefined;\n },\n includeCount?: TIncludeCount,\n):\n | (TIncludeCount extends true ? PagedBodyResponseWithTotal<TData>\n : PagedBodyResponse<TData>)\n | undefined\n{\n const data = Array.from(iter);\n const pageCount = Math.ceil(data.length / pageSize);\n const currentPage = pageToken ? Number(pageToken) : 0;\n\n if (currentPage < 0 || currentPage >= pageCount) {\n return undefined;\n }\n\n const startIndex = currentPage * pageSize;\n const endIndex = Math.min(startIndex + pageSize, data.length);\n const nextPageToken = currentPage + 1 < pageCount\n ? (currentPage + 1).toString()\n : undefined;\n\n const ret: PagedBodyResponse<TData> | PagedBodyResponseWithTotal<TData> = {\n nextPageToken,\n data: data.slice(startIndex, endIndex),\n ...(includeCount\n ? { totalCount: String(data.length) }\n : {}),\n };\n\n return ret as\n | (TIncludeCount extends true ? PagedBodyResponseWithTotal<TData>\n : PagedBodyResponse<TData>)\n | undefined;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA,OAAO,SAASA,+BAA+BA,CAI7CC,IAAqB,EACrB;EAAEC,QAAQ,GAAG,IAAI;EAAEC;AAGnB,CAAC,EACDC,YAA4B,EAK9B;EACE,MAAMC,IAAI,GAAGC,KAAK,CAACC,IAAI,CAACN,IAAI,CAAC;EAC7B,MAAMO,SAAS,GAAGC,IAAI,CAACC,IAAI,CAACL,IAAI,CAACM,MAAM,GAAGT,QAAQ,CAAC;EACnD,MAAMU,WAAW,GAAGT,SAAS,GAAGU,MAAM,CAACV,SAAS,CAAC,GAAG,CAAC;EAErD,IAAIS,WAAW,GAAG,CAAC,IAAIA,WAAW,IAAIJ,SAAS,EAAE;IAC/C,OAAOM,SAAS;EAClB;EAEA,MAAMC,UAAU,GAAGH,WAAW,GAAGV,QAAQ;EACzC,MAAMc,QAAQ,GAAGP,IAAI,CAACQ,GAAG,CAACF,UAAU,GAAGb,QAAQ,EAAEG,IAAI,CAACM,MAAM,CAAC;EAC7D,MAAMO,aAAa,GAAGN,WAAW,GAAG,CAAC,GAAGJ,SAAS,GAC7C,CAACI,WAAW,GAAG,CAAC,EAAEO,QAAQ,CAAC,CAAC,GAC5BL,SAAS;EAEb,MAAMM,GAAiE,GAAG;IACxEF,aAAa;IACbb,IAAI,EAAEA,IAAI,CAACgB,KAAK,CAACN,UAAU,EAAEC,QAAQ,CAAC;IACtC,IAAIZ,YAAY,GACZ;MAAEkB,UAAU,EAAEC,MAAM,CAAClB,IAAI,CAACM,MAAM;IAAE,CAAC,GACnC,CAAC,CAAC;EACR,CAAC;EAED,OAAOS,GAAG;AAIZ","ignoreList":[]}
1
+ {"version":3,"file":"pageThroughResponseSearchParams.js","names":["pageThroughResponseSearchParams","iter","pageSize","pageToken","includeCount","propertySecurities","data","Array","from","pageCount","Math","ceil","length","currentPage","Number","undefined","startIndex","endIndex","min","nextPageToken","toString","ret","slice","totalCount","String"],"sources":["pageThroughResponseSearchParams.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 { PageToken } from \"@osdk/foundry.core\";\nimport type { PropertySecurities } from \"@osdk/foundry.ontologies\";\n\nexport interface PagedBodyResponse<T> {\n nextPageToken?: string;\n data: T[];\n propertySecurities: PropertySecurities[];\n}\n\nexport interface PagedBodyResponseWithTotal<T> extends PagedBodyResponse<T> {\n totalCount: string;\n}\n\nexport type PagedRequest = {\n excludeRid?: boolean;\n pageSize?: number;\n pageToken?: string;\n};\n\nexport function pageThroughResponseSearchParams<\n TData,\n TIncludeCount extends boolean,\n>(\n iter: Iterable<TData>,\n { pageSize = 1000, pageToken }: {\n pageSize: number | undefined;\n pageToken: PageToken | undefined;\n },\n includeCount?: TIncludeCount,\n propertySecurities?: PropertySecurities[],\n):\n | (TIncludeCount extends true ? PagedBodyResponseWithTotal<TData>\n : PagedBodyResponse<TData>)\n | undefined\n{\n const data = Array.from(iter);\n const pageCount = Math.ceil(data.length / pageSize);\n const currentPage = pageToken ? Number(pageToken) : 0;\n\n if (currentPage < 0 || currentPage >= pageCount) {\n return undefined;\n }\n\n const startIndex = currentPage * pageSize;\n const endIndex = Math.min(startIndex + pageSize, data.length);\n const nextPageToken = currentPage + 1 < pageCount\n ? (currentPage + 1).toString()\n : undefined;\n\n const ret: PagedBodyResponse<TData> | PagedBodyResponseWithTotal<TData> = {\n nextPageToken,\n data: data.slice(startIndex, endIndex),\n ...(includeCount\n ? { totalCount: String(data.length) }\n : {}),\n propertySecurities: propertySecurities ?? [],\n };\n\n return ret as\n | (TIncludeCount extends true ? PagedBodyResponseWithTotal<TData>\n : PagedBodyResponse<TData>)\n | undefined;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAqBA,OAAO,SAASA,+BAA+BA,CAI7CC,IAAqB,EACrB;EAAEC,QAAQ,GAAG,IAAI;EAAEC;AAGnB,CAAC,EACDC,YAA4B,EAC5BC,kBAAyC,EAK3C;EACE,MAAMC,IAAI,GAAGC,KAAK,CAACC,IAAI,CAACP,IAAI,CAAC;EAC7B,MAAMQ,SAAS,GAAGC,IAAI,CAACC,IAAI,CAACL,IAAI,CAACM,MAAM,GAAGV,QAAQ,CAAC;EACnD,MAAMW,WAAW,GAAGV,SAAS,GAAGW,MAAM,CAACX,SAAS,CAAC,GAAG,CAAC;EAErD,IAAIU,WAAW,GAAG,CAAC,IAAIA,WAAW,IAAIJ,SAAS,EAAE;IAC/C,OAAOM,SAAS;EAClB;EAEA,MAAMC,UAAU,GAAGH,WAAW,GAAGX,QAAQ;EACzC,MAAMe,QAAQ,GAAGP,IAAI,CAACQ,GAAG,CAACF,UAAU,GAAGd,QAAQ,EAAEI,IAAI,CAACM,MAAM,CAAC;EAC7D,MAAMO,aAAa,GAAGN,WAAW,GAAG,CAAC,GAAGJ,SAAS,GAC7C,CAACI,WAAW,GAAG,CAAC,EAAEO,QAAQ,CAAC,CAAC,GAC5BL,SAAS;EAEb,MAAMM,GAAiE,GAAG;IACxEF,aAAa;IACbb,IAAI,EAAEA,IAAI,CAACgB,KAAK,CAACN,UAAU,EAAEC,QAAQ,CAAC;IACtC,IAAIb,YAAY,GACZ;MAAEmB,UAAU,EAAEC,MAAM,CAAClB,IAAI,CAACM,MAAM;IAAE,CAAC,GACnC,CAAC,CAAC,CAAC;IACPP,kBAAkB,EAAEA,kBAAkB,IAAI;EAC5C,CAAC;EAED,OAAOgB,GAAG;AAIZ","ignoreList":[]}