@osdk/faux 0.5.0-beta.4 → 0.5.0

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,43 @@
1
1
  # @osdk/shared.test
2
2
 
3
+ ## 0.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - ab1957f: Added FauxAdmin support
8
+
9
+ ### Patch Changes
10
+
11
+ - 150da1a: Simulated release
12
+ - 03db734: Move platform SDK deps to pnpm catalog
13
+ - 31cd835: Revert beta changes
14
+ - 862910e: Adds support for wider variety of query filters
15
+ - 0dbd0d0: add useOsdkObjects rid querying support
16
+ - Updated dependencies [322c5bc]
17
+ - Updated dependencies [322c5bc]
18
+ - Updated dependencies [1e3c147]
19
+ - Updated dependencies [fb83808]
20
+ - Updated dependencies [c9ca08d]
21
+ - Updated dependencies [24a1e29]
22
+ - Updated dependencies [448763f]
23
+ - Updated dependencies [bb9d25c]
24
+ - Updated dependencies [f0a57a5]
25
+ - Updated dependencies [31cd835]
26
+ - Updated dependencies [dc33f68]
27
+ - Updated dependencies [d5cfc38]
28
+ - @osdk/api@2.7.0
29
+ - @osdk/generator-converters@2.7.0
30
+
31
+ ## 0.5.0-rc.5
32
+
33
+ ### Patch Changes
34
+
35
+ - 31cd835: Revert beta changes
36
+ - 0dbd0d0: add useOsdkObjects rid querying support
37
+ - Updated dependencies [31cd835]
38
+ - @osdk/generator-converters@2.7.0-rc.15
39
+ - @osdk/api@2.7.0-rc.15
40
+
3
41
  ## 0.5.0-beta.4
4
42
 
5
43
  ### Minor Changes
@@ -37,6 +75,59 @@
37
75
  - @osdk/api@2.7.0-beta.2
38
76
  - @osdk/generator-converters@2.7.0-beta.2
39
77
 
78
+ ## 0.4.0
79
+
80
+ ### Patch Changes
81
+
82
+ - 150da1a: Simulated release
83
+
84
+ - 98cdfee: Added more object type validation
85
+
86
+ - b313525: bump osdk
87
+
88
+ - 3fbb596: Pipe through transactionId to endpoints that load data via object sets
89
+
90
+ - a1ffb20: Use new ephemeral media upload endpoint.
91
+
92
+ - af4f3bf: Remove the following features for RC:
93
+ - Property formatting
94
+ - Branching
95
+ - Constant RDPs
96
+
97
+ - Updated dependencies [322c5bc]
98
+
99
+ - Updated dependencies [322c5bc]
100
+
101
+ - Updated dependencies [b313525]
102
+
103
+ - Updated dependencies [3fbb596]
104
+
105
+ - Updated dependencies [f7ae38a]
106
+
107
+ - Updated dependencies [486ef7e]
108
+
109
+ - Updated dependencies [ea077c6]
110
+
111
+ - Updated dependencies [3d7dc0a]
112
+
113
+ - Updated dependencies [2556c64]
114
+
115
+ - Updated dependencies [5a9cd8f]
116
+
117
+ - Updated dependencies [b307201]
118
+
119
+ - Updated dependencies [e7bf02a]
120
+
121
+ - Updated dependencies [a1ffb20]
122
+
123
+ - Updated dependencies [b959085]
124
+
125
+ - Updated dependencies [af4f3bf]
126
+
127
+ - Updated dependencies [e62c692]
128
+ - @osdk/api@2.6.0
129
+ - @osdk/generator-converters@2.6.0
130
+
40
131
  ## 0.4.0-beta.6
41
132
 
42
133
  ### Minor Changes
@@ -46,13 +46,11 @@ 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());
50
49
  #singleLinks = new DefaultMap(() => new Map());
51
50
  #manyLinks = new DefaultMap(() => new MultiMap(Set));
52
51
  #fauxOntology;
53
52
  #attachments;
54
53
  #timeSeriesData = new DefaultMap(() => new DefaultMap(() => new DefaultMap(() => [])));
55
- #propertySecurities = new DefaultMap(() => [{}]);
56
54
  #media = new DefaultMap(() => new DefaultMap(() => {
57
55
  return new Map();
58
56
  }));
@@ -154,14 +152,6 @@ export class FauxDataStore {
154
152
  }
155
153
  return frozenBso;
156
154
  }
157
- registerObjectWithPropertySecurities(regularObject, securedObject, propertySecurities) {
158
- const registeredObj = this.registerObject(regularObject);
159
- this.#objectsWithSecurities.get(registeredObj.__apiName).set(String(registeredObj.__primaryKey), Object.freeze({
160
- ...securedObject
161
- }));
162
- this.#propertySecurities.set(objectLocator(registeredObj), propertySecurities);
163
- return registeredObj;
164
- }
165
155
  #osdkCreatableToBso(objectType, anyObj) {
166
156
  objectType = typeof objectType === "string" ? objectType : objectType.apiName;
167
157
  if ("$apiName" in anyObj) {
@@ -446,9 +436,6 @@ export class FauxDataStore {
446
436
  }
447
437
  return object;
448
438
  }
449
- getObjectWithSecurities(apiName, primaryKey) {
450
- return this.#objectsWithSecurities.get(apiName).get(String(primaryKey));
451
- }
452
439
  getObjectByRid(rid) {
453
440
  for (const [, pkToObjects] of this.#objects) {
454
441
  for (const [, obj] of pkToObjects) {
@@ -494,20 +481,14 @@ export class FauxDataStore {
494
481
  }
495
482
  getObjectsFromObjectSet(parsedBody) {
496
483
  const selected = parsedBody.select;
497
- const loadPropertySecurities = parsedBody.loadPropertySecurities ?? false;
498
484
  // when we have interfaces in here, we have a little trick for
499
485
  // caching off the important properties
500
486
  let objects = getObjectsFromSet(this, parsedBody.objectSet, undefined);
501
- if (loadPropertySecurities) {
502
- !(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;
503
- objects = [this.getObjectWithSecurities(objects[0].__apiName, objects[0].__primaryKey)];
504
- }
505
487
  if (!objects || objects.length === 0) {
506
488
  return {
507
489
  data: [],
508
490
  totalCount: "0",
509
- nextPageToken: undefined,
510
- propertySecurities: []
491
+ nextPageToken: undefined
511
492
  };
512
493
  }
513
494
  if (parsedBody.orderBy) {
@@ -517,7 +498,7 @@ export class FauxDataStore {
517
498
  // finally, if we got interfaces, the objects have names like the interface and we need
518
499
  // to return them like the object.
519
500
 
520
- const page = pageThroughResponseSearchParams(objects, getPaginationParamsFromRequest(parsedBody), false, loadPropertySecurities ? this.#propertySecurities.get(objectLocator(objects[0])) : undefined);
501
+ const page = pageThroughResponseSearchParams(objects, getPaginationParamsFromRequest(parsedBody), false);
521
502
  if (!page) {
522
503
  throw new OpenApiCallError(404, InvalidRequest(`No objects found for ${JSON.stringify(parsedBody)}`));
523
504
  }
@@ -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","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","replaceObjectOrThrow","registerObjectWithPropertySecurities","regularObject","securedObject","registeredObj","#osdkCreatableToBso","meta","getObjectTypeFullMetadataOrThrow","realPrimaryKey","maybeTitle","titleProperty","rid","$rid","JSON","stringify","__title","undefined","__rid","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 if (this.#strict) {\n // registers links\n this.replaceObjectOrThrow(frozenBso);\n }\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 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 if (oldFkValue != null) {\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 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":[]}
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","replaceObjectOrThrow","#osdkCreatableToBso","meta","getObjectTypeFullMetadataOrThrow","realPrimaryKey","maybeTitle","titleProperty","rid","$rid","JSON","stringify","__title","undefined","__rid","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 $rid?: string;\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 if (this.#strict) {\n // registers links\n this.replaceObjectOrThrow(frozenBso);\n }\n\n return frozenBso;\n }\n\n #osdkCreatableToBso(\n objectType: string | ObjectTypeDefinition,\n anyObj: BaseObjectTypeCreatable,\n ) {\n objectType = typeof objectType === \"string\"\n ? objectType\n : objectType.apiName;\n\n if (\"$apiName\" in anyObj) {\n invariant(anyObj.$apiName === objectType);\n }\n const { $apiName, $primaryKey, ...others } = anyObj;\n\n const meta = this.ontology.getObjectTypeFullMetadataOrThrow(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 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 if (oldFkValue != null) {\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 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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,SAASA,UAAU,EAAEC,QAAQ,QAAQ,WAAW;AAChD,OAAO,KAAKC,MAAM,MAAM,aAAa;AACrC,SAASC,UAAU,QAAQ,aAAa;AACxC,SAASC,OAAO,QAAQ,WAAW;AACnC,OAAOC,SAAS,MAAM,gBAAgB;AAEtC,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,cAAc;AAClE,SAASC,mBAAmB,QAAQ,qBAAqB;AACzD,SAASC,8BAA8B,QAAQ,yCAAyC;AACxF,SAASC,gBAAgB,QAAQ,uCAAuC;AAExE,SAASC,+BAA+B,QAAQ,qDAAqD;AACrG,SAEEC,kBAAkB,QACb,uBAAuB;AAE9B,SAASC,kBAAkB,QAAQ,yBAAyB;AAE5D,SAASC,oBAAoB,QAAQ,2BAA2B;AAChE,SAASC,mBAAmB,EAAEC,iBAAiB,QAAQ,wBAAwB;AAE/E,SAASC,aAAa,EAAEC,YAAY,QAAQ,oBAAoB;AAEhE,SAASC,cAAc,QAAQ,qBAAqB;;AAWpD;AACA;AACA;AACA;;AAQA;AACA;AACA;;AASA;AACA;AACA;;AAmBA,OAAO,MAAMC,aAAa,CAAC;EACzB,CAACC,OAAO,GAAG,IAAIrB,UAAU,CAGvB,MAAS,IAAIsB,GAAG,CAAC,CAAC,CAAC;EAErB,CAACC,WAAW,GAAG,IAAIvB,UAAU,CAC3B,MACE,IAAIsB,GAAG,CAA8C,CACzD,CAAC;EAED,CAACE,SAAS,GAAG,IAAIxB,UAAU,CACzB,MAAmC,IAAIC,QAAQ,CAAwBwB,GAAG,CAC5E,CAAC;EAED,CAACC,YAAY;EAEb,CAACC,WAAW;EAEZ,CAACC,cAAc,GAAG,IAAI5B,UAAU,CAC9B,MACE,IAAIA,UAAU,CACZ,MACE,IAAIA,UAAU,CACZ,MACE,EACJ,CACJ,CACJ,CAAC;EAED,CAAC6B,KAAK,GAAG,IAAI7B,UAAU,CACrB,MACE,IAAIA,UAAU,CAAC,MAA6C;IAC1D,OAAO,IAAIsB,GAAG,CAAwC,CAAC;EACzD,CAAC,CACL,CAAC;EACD,CAACQ,MAAM;EAEPC,WAAWA,CACTL,YAA0B,EAC1BC,WAAgC,EAChCG,MAAe,EACf;IACA,IAAI,CAAC,CAACJ,YAAY,GAAGA,YAAY;IACjC,IAAI,CAAC,CAACC,WAAW,GAAGA,WAAW;IAC/B,IAAI,CAAC,CAACG,MAAM,GAAGA,MAAM;EACvB;;EAEA;AACF;AACA;AACA;AACA;EACSE,KAAKA,CAAA,EAAS;IACnB,IAAI,CAAC,CAACH,KAAK,CAACG,KAAK,CAAC,CAAC;IACnB,IAAI,CAAC,CAACJ,cAAc,CAACI,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,CAACR,SAAS,CAACQ,KAAK,CAAC,CAAC;IACvB,IAAI,CAAC,CAACT,WAAW,CAACS,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,CAACX,OAAO,CAACW,KAAK,CAAC,CAAC;EACvB;EAEA,IAAIC,QAAQA,CAAA,EAAiB;IAC3B,OAAO,IAAI,CAAC,CAACP,YAAY;EAC3B;EAEA,CAACQ,kBAAkBC,CACjBC,UAAkB,EAClBC,UAAqC,EACrC;IACA,IAAI,CAAC,IAAI,CAACC,SAAS,CAACF,UAAU,EAAEC,UAAU,CAAC,EAAE;MAC3C,MAAM,IAAI3B,gBAAgB,CACxB,GAAG,EACHH,mBAAmB,CAAC6B,UAAU,EAAEG,MAAM,CAACF,UAAU,CAAC,CACpD,CAAC;IACH;EACF;EAEA,CAACG,wBAAwBC,CACvBL,UAAkB,EAClBC,UAAqC,EAC/B;IACN,IAAI,IAAI,CAACC,SAAS,CAACF,UAAU,EAAEC,UAAU,CAAC,EAAE;MAC1C,MAAM,IAAI3B,gBAAgB,CACxB,GAAG,EACH;QACEgC,SAAS,EAAE,UAAU;QACrBC,SAAS,EAAE,qBAAqB;QAChCC,eAAe,EAAE,cAAc;QAC/BC,UAAU,EAAE;UACVT,UAAU;UACVC,UAAU,EAAEE,MAAM,CAACF,UAAU;QAC/B,CAAC;QACDS,gBAAgB,EACd;MACJ,CACF,CAAC;IACH;EACF;;EAEA;AACF;AACA;AACA;AACA;;EAKE;AACF;AACA;AACA;AACA;AACA;;EAEEC,cAAcA,CACZX,UAA4D,EAC5DY,MAAmD,EACjC;IAClB,IAAIC,GAAqB;IACzB;;IAEA,IAAIrC,kBAAkB,CAACwB,UAAU,CAAC,EAAE;MAClC,EACEY,MAAM,IAAI,IAAI,IAAAE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADhB/C,SAAS,QAEP,iDAAiD,IAFnDA,SAAS;MAIT,CACE,CAACgD,MAAM,CAACC,IAAI,CAAClB,UAAU,CAAC,CAACmB,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAAP,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADzD/C,SAAS,QAEP,qEAAqE,IAFvEA,SAAS;MAIT4C,GAAG,GAAGb,UAAU;IAClB,CAAC,MAAM,IAAIY,MAAM,IAAI,IAAI,EAAE;MACzBE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAA/C,SAAS,QAAQ,yCAAyC,IAA1DA,SAAS;IACX,CAAC,MAAM,IAAIO,kBAAkB,CAACoC,MAAM,CAAC,EAAE;MACrC,CACE,CAACK,MAAM,CAACC,IAAI,CAACN,MAAM,CAAC,CAACO,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAAP,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADrD/C,SAAS,QAEP,qEAAqE,IAFvEA,SAAS;MAIT4C,GAAG,GAAGD,MAAM;IACd,CAAC,MAAM;MACLC,GAAG,GAAG,IAAI,CAAC,CAACS,kBAAkB,CAACtB,UAAU,EAAEY,MAAM,CAAC;IACpD;IAEA,MAAMW,OAAO,GAAGV,GAAG,CAACW,SAAS,IAAIX,GAAG,CAACY,QAAQ;IAC7C,CAAUF,OAAO,GAAAT,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAjB/C,SAAS,QAAU,6CAA6C,IAAhEA,SAAS;IAET,IAAI,CAAC,CAACmC,wBAAwB,CAACmB,OAAO,EAAEV,GAAG,CAACa,YAAY,CAAC;IAEzD,IAAI,EAAE,WAAW,IAAIb,GAAG,IAAI,cAAc,IAAIA,GAAG,CAAC,EAAE;MAClD,EACE,UAAU,IAAIA,GAAG,IAAI,aAAa,IAAIA,GAAG,IAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAD3C/C,SAAS,QAEP,+EAA+E,IAFjFA,SAAS;MAIT,MAAM;QAAEwD,QAAQ;QAAEE,WAAW;QAAE,GAAGC;MAAO,CAAC,GAAGf,GAGlB;MAC3BA,GAAG,GAAG;QACJW,SAAS,EAAEC,QAAQ;QACnBC,YAAY,EAAEC,WAAW;QACzB,GAAGC;MACL,CAAC;IACH;IACA,IAAI,CAAC,CAACxB,wBAAwB,CAACS,GAAG,CAACW,SAAS,EAAEX,GAAG,CAACa,YAAY,CAAC;IAC/D,MAAMG,SAAS,GAAGZ,MAAM,CAACa,MAAM,CAAC;MAAE,GAAGjB;IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC5B,OAAO,CAAC8C,GAAG,CAAClB,GAAG,CAACW,SAAS,CAAC,CAACQ,GAAG,CAAC7B,MAAM,CAACU,GAAG,CAACa,YAAY,CAAC,EAAEG,SAAS,CAAC;IAEzE,IAAI,IAAI,CAAC,CAACnC,MAAM,EAAE;MAChB;MACA,IAAI,CAACuC,oBAAoB,CAACJ,SAAS,CAAC;IACtC;IAEA,OAAOA,SAAS;EAClB;EAEA,CAACP,kBAAkBY,CACjBlC,UAAyC,EACzCY,MAA+B,EAC/B;IACAZ,UAAU,GAAG,OAAOA,UAAU,KAAK,QAAQ,GACvCA,UAAU,GACVA,UAAU,CAACuB,OAAO;IAEtB,IAAI,UAAU,IAAIX,MAAM,EAAE;MACxB,EAAUA,MAAM,CAACa,QAAQ,KAAKzB,UAAU,IAAAc,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAxC/C,SAAS,UAATA,SAAS;IACX;IACA,MAAM;MAAEwD,QAAQ;MAAEE,WAAW;MAAE,GAAGC;IAAO,CAAC,GAAGhB,MAAM;IAEnD,MAAMuB,IAAI,GAAG,IAAI,CAACtC,QAAQ,CAACuC,gCAAgC,CAACpC,UAAU,CAAC;IACvE,MAAMqC,cAAc,GAAGzB,MAAM,CAACuB,IAAI,CAACnC,UAAU,CAACC,UAAU,CAG7C;IAEX,MAAMqC,UAAU,GAAG1B,MAAM,CAACuB,IAAI,CAACnC,UAAU,CAACuC,aAAa,CAAC;IACxD,MAAMC,GAAG,GAAG5B,MAAM,CAAC6B,IAAI,IAClB,sCAAsC3E,MAAM,CAACC,UAAU,CAAC,CAAC,EAAE;IAEhE,EACEsE,cAAc,IAAI,IAAI,IAAAvB,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADxB/C,SAAS,QAEP,qCAAqCyE,IAAI,CAACC,SAAS,CAAC/B,MAAM,CAAC,EAAE,IAF/D3C,SAAS;IAKT,EACE0D,WAAW,IAAI,IAAI,IAAIA,WAAW,KAAKU,cAAc,IAAAvB,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADvD/C,SAAS,QAEP,sBAAsB,IAFxBA,SAAS;IAKT,OAAO;MACLuD,SAAS,EAAExB,UAAU;MACrB0B,YAAY,EAAEW,cAAc;MAC5BO,OAAO,EAAEN,UAAU,GAAGnC,MAAM,CAACmC,UAAU,CAAC,GAAGO,SAAS;MACpDC,KAAK,EAAEN,GAAG;MACV,GAAGZ;IACL,CAAC;EACH;EAEAK,oBAAoBA,CAACc,CAAmB,EAAQ;IAC9C,MAAM/C,UAAU,GAAG,IAAI,CAACH,QAAQ,CAACuC,gCAAgC,CAC/DW,CAAC,CAACvB,SACJ,CAAC;IACD,MAAMwB,SAAS,GAAG,IAAI,CAACC,gBAAgB,CAACF,CAAC,CAACvB,SAAS,EAAEuB,CAAC,CAACrB,YAAY,CAAC;IAEpE,MAAMwB,aAKJ,GAAG,EAAE;IAEP,MAAMC,aAKJ,GAAG,EAAE;IAEP,KAAK,MAAMC,OAAO,IAAIpD,UAAU,CAACqD,SAAS,EAAE;MAC1C,IAAID,OAAO,CAACE,WAAW,KAAK,KAAK,EAAE;QACjC,EACE,IAAI,CAAC,CAAC5D,MAAM,IAAI0D,OAAO,CAACG,yBAAyB,IAAAzC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADnD/C,SAAS,QAEP,mBAAmB+B,UAAU,CAACA,UAAU,CAACuB,OAAO,IAAI6B,OAAO,CAAC7B,OAAO,kDACjEvD,OAAO,CACLoF,OAAO,EACP;UAAEI,MAAM,EAAE;QAAM,CAClB,CAAC,EACD,IAPJvF,SAAS;QAUT,MAAMwF,MAAM,GAAGL,OAAO,CAACG,yBAAyB;QAChD,MAAMG,OAAO,GAAGX,CAAC,CAACU,MAAM,CAAC;QACzB,MAAME,UAAU,GAAGX,SAAS,CAACS,MAAM,CAAC;QAEpC,MAAMG,OAAO,GAAG,IAAI,CAAC/D,QAAQ,CAACgE,6BAA6B,CACzD7D,UAAU,CAACA,UAAU,CAACuB,OAAO,EAC7B6B,OAAO,CAAC7B,OACV,CAAC;QACD,MAAMuC,UAAU,GAAGjF,aAAa,CAAC;UAC/B2C,SAAS,EAAE4B,OAAO,CAACW,iBAAiB;UACpCrC,YAAY,EAAEgC;QAChB,CAAC,CAAC;QAEF,MAAMM,MAAM,GAAG,IAAI,CAAC9D,SAAS,CAACkD,OAAO,CAACW,iBAAiB,EAAEL,OAAO,CAAC;QAEjE,IAAIA,OAAO,IAAI,IAAI,IAAI,CAACM,MAAM,EAAE;UAC9B;UACAC,OAAO,CAACC,GAAG,CACT,yDAAyDJ,UAAU,EACrE,CAAC;QACH;QAEA,IAAIJ,OAAO,IAAI,IAAI,EAAE;UACnBR,aAAa,CAACiB,IAAI,CAAC;YACjBP,OAAO;YACPE,UAAU;YACVM,OAAO,EAAEhB,OAAO;YAChBiB,UAAU,EAAExF,aAAa,CAACkE,CAAC;UAC7B,CAAC,CAAC;QACJ,CAAC,MAAM,IAAIY,UAAU,IAAI,IAAI,EAAE;UAC7BR,aAAa,CAACgB,IAAI,CAAC;YACjBE,UAAU,EAAExF,aAAa,CAACkE,CAAC,CAAC;YAC5BqB,OAAO,EAAEhB,OAAO;YAChBU,UAAU,EAAEjF,aAAa,CAAC;cACxB2C,SAAS,EAAE4B,OAAO,CAACW,iBAAiB;cACpCrC,YAAY,EAAEiC;YAChB,CAAC,CAAC;YACFC;UACF,CAAC,CAAC;QACJ;MACF;IACF;IAEA,IAAI,CAAC,CAAC3E,OAAO,CAAC8C,GAAG,CAACgB,CAAC,CAACvB,SAAS,CAAC,CAACQ,GAAG,CAAC7B,MAAM,CAAC4C,CAAC,CAACrB,YAAY,CAAC,EAAEqB,CAAC,CAAC;IAC7D,KAAK,MAAM;MAAEqB,OAAO;MAAEC,UAAU;MAAET,OAAO;MAAEE;IAAW,CAAC,IAAIZ,aAAa,EAAE;MACxE,IAAI,CAAC,CAACoB,oBAAoB,CAACF,OAAO,EAAEC,UAAU,EAAET,OAAO,EAAEE,UAAU,CAAC;MACpE,IAAI,CAAC,CAACQ,oBAAoB,CAACV,OAAO,EAAEE,UAAU,EAAEM,OAAO,EAAEC,UAAU,CAAC;IACtE;IAEA,KAAK,MAAM;MAAED,OAAO;MAAEC,UAAU;MAAET,OAAO;MAAEE;IAAW,CAAC,IAAIX,aAAa,EAAE;MACxE,IAAI,CAAC,CAACoB,sBAAsB,CAACF,UAAU,EAAED,OAAO,EAAEN,UAAU,CAAC;MAC7D,IAAI,CAAC,CAACS,sBAAsB,CAACT,UAAU,EAAEF,OAAO,EAAES,UAAU,CAAC;IAC/D;EACF;;EAEA;EACAG,uBAAuBA,CACrBxE,UAAkB,EAClBC,UAAqC,EAC/B;IACN,IAAI,CAAC,CAACH,kBAAkB,CAACE,UAAU,EAAEC,UAAU,CAAC;IAChD,IAAI,CAAC,CAAChB,OAAO,CAAC8C,GAAG,CAAC/B,UAAU,CAAC,CAACyE,MAAM,CAACtE,MAAM,CAACF,UAAU,CAAC,CAAC;EAC1D;EAEAyE,YAAYA,CACVC,MAAwB,EACxBC,WAAmB,EACnBC,MAAwB,EACxBC,YAAoB,EACd;IACN,MAAMC,GAAG,GAAG,IAAI,CAAC9B,gBAAgB,CAAC0B,MAAM,CAACnD,SAAS,EAAEmD,MAAM,CAACjD,YAAY,CAAC;IACxE,MAAMsD,GAAG,GAAG,IAAI,CAAC/B,gBAAgB,CAAC4B,MAAM,CAACrD,SAAS,EAAEqD,MAAM,CAACnD,YAAY,CAAC;IAExE,MAAM2C,UAAU,GAAGxF,aAAa,CAACkG,GAAG,CAAC;IACrC,MAAMjB,UAAU,GAAGjF,aAAa,CAACmG,GAAG,CAAC;IACrC,MAAM,CAACZ,OAAO,EAAER,OAAO,CAAC,GAAG,IAAI,CAAC,CAACtE,YAAY,CAAC2F,oBAAoB,CAChEF,GAAG,CAACvD,SAAS,EACboD,WAAW,EACXI,GAAG,CAACxD,SACN,CAAC;IAED,EACE4C,OAAO,CAACc,WAAW,KAAKtB,OAAO,CAACsB,WAAW,IAAApE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAD7C/C,SAAS,QAEP,iEAAiEmG,OAAO,CAACc,WAAW,QAAQtB,OAAO,CAACsB,WAAW,EAAE,IAFnHjH,SAAS;IAIT,EACE2F,OAAO,CAACrC,OAAO,KAAKuD,YAAY,IAAAhE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADlC/C,SAAS,QAEP,4CAA4C6G,YAAY,cAAclB,OAAO,CAACrC,OAAO,EAAE,IAFzFtD,SAAS;IAKT,IAAI,IAAI,CAAC,CAACyB,MAAM,EAAE;MAChB,MAAMyF,OAAO,GAAGf,OAAO,CAACd,WAAW,KAAK,KAAK,GACzC;QAAE8B,MAAM,EAAEL,GAAG;QAAEM,IAAI,EAAEjB;MAAQ,CAAC,GAC9BR,OAAO,CAACN,WAAW,KAAK,KAAK,GAC7B;QAAE8B,MAAM,EAAEJ,GAAG;QAAEK,IAAI,EAAEzB;MAAQ,CAAC,GAC9Bf,SAAS;MACb,MAAMyC,QAAQ,GAAGH,OAAO,GACpBf,OAAO,CAACd,WAAW,KAAK,MAAM,GAC5B;QAAE8B,MAAM,EAAEL,GAAG;QAAEM,IAAI,EAAEjB;MAAQ,CAAC,GAC9B;QAAEgB,MAAM,EAAEJ,GAAG;QAAEK,IAAI,EAAEzB;MAAQ,CAAC,GAChCf,SAAS;MAEb,IAAIsC,OAAO,IAAIG,QAAQ,EAAE;QACvB,CACEH,OAAO,CAACE,IAAI,CAAC9B,yBAAyB,GAAAzC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADxC/C,SAAS,QAEP,iEAAiEkH,OAAO,CAACC,MAAM,CAAC5D,SAAS,IAAI2D,OAAO,CAACE,IAAI,CAAC9D,OAAO,EAAE,IAFrHtD,SAAS;QAKT,MAAMsH,MAAM,GAAG;UACb,GAAGJ,OAAO,CAACC,MAAM;UACjB,CAACD,OAAO,CAACE,IAAI,CAAC9B,yBAAyB,GACrC+B,QAAQ,CAACF,MAAM,CAAC1D;QACpB,CAAC;;QAED;QACA,IAAI,CAACO,oBAAoB,CAACsD,MAAM,CAAC;QACjC;MACF;IACF;IAEA,IAAI,CAAC,CAACjB,oBAAoB,CAACF,OAAO,EAAEC,UAAU,EAAET,OAAO,EAAEE,UAAU,CAAC;IACpE,IAAI,CAAC,CAACQ,oBAAoB,CAACV,OAAO,EAAEE,UAAU,EAAEM,OAAO,EAAEC,UAAU,CAAC;EACtE;EAEAmB,cAAcA,CACZT,GAAqB,EACrBH,WAAmB,EACnBI,GAAqB,EACrBS,WAAmB,EACb;IACN,MAAMpB,UAAU,GAAGxF,aAAa,CAACkG,GAAG,CAAC;IACrC,MAAMjB,UAAU,GAAGjF,aAAa,CAACmG,GAAG,CAAC;IACrC,MAAM,CAACZ,OAAO,EAAER,OAAO,CAAC,GAAG,IAAI,CAAC,CAACtE,YAAY,CAAC2F,oBAAoB,CAChEF,GAAG,CAACvD,SAAS,EACboD,WAAW,EACXI,GAAG,CAACxD,SACN,CAAC;IAED,EACEoC,OAAO,CAACrC,OAAO,KAAKkE,WAAW,IAAA3E,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADjC/C,SAAS,QAEP,4CAA4CwH,WAAW,cAAc7B,OAAO,CAACrC,OAAO,EAAE,IAFxFtD,SAAS;IAKT,IAAI,IAAI,CAAC,CAACyB,MAAM,EAAE;MAChB,MAAM;QAAEyF,OAAO;QAAEG;MAAS,CAAC,GAAGI,kBAAkB,CAC9CtB,OAAO,EACPW,GAAG,EACHnB,OAAO,EACPoB,GACF,CAAC;MAED,IAAIG,OAAO,IAAIG,QAAQ,EAAE;QACvB,CACEH,OAAO,CAACE,IAAI,CAAC9B,yBAAyB,GAAAzC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADxC/C,SAAS,QAEP,iEAAiEkH,OAAO,CAACC,MAAM,CAAC5D,SAAS,IAAI2D,OAAO,CAACE,IAAI,CAAC9D,OAAO,EAAE,IAFrHtD,SAAS;QAKT,MAAMsH,MAAM,GAAG;UACb,GAAGJ,OAAO,CAACC,MAAM;UACjB,CAACD,OAAO,CAACE,IAAI,CAAC9B,yBAAyB,GAAGV;QAC5C,CAAC;;QAED;QACA,IAAI,CAACZ,oBAAoB,CAACsD,MAAM,CAAC;QACjC;MACF;IACF;IAEA,IAAI,CAAC,CAAChB,sBAAsB,CAACF,UAAU,EAAED,OAAO,EAAEN,UAAU,CAAC;IAC7D,IAAI,CAAC,CAACS,sBAAsB,CAACT,UAAU,EAAEF,OAAO,EAAES,UAAU,CAAC;EAC/D;EAEAsB,sBAAsBA,CACpB3F,UAA0C,EAC1CC,UAA2B,EAC3B2F,QAAsC,EACtCC,IAAoC,EAC9B;IACN,IAAI,CAAC5C,gBAAgB,CAACjD,UAAU,EAAEC,UAAU,CAAC;IAC7C,MAAM6F,GAAG,GAAG,IAAI,CAACjG,QAAQ,CAACuC,gCAAgC,CAACpC,UAAU,CAAC;IACtE,EACE8F,GAAG,CAAC9F,UAAU,CAAC+F,UAAU,CAACH,QAAQ,CAAC,CAACI,QAAQ,CAACC,IAAI,KAAK,YAAY,IAC7DH,GAAG,CAAC9F,UAAU,CAAC+F,UAAU,CAACH,QAAQ,CAAC,CAACI,QAAQ,CAACC,IAAI,KAC9C,wBAAwB,IAAAnF,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAHlC/C,SAAS,UAATA,SAAS;IAKT,IAAI,CAAC,CAACuB,cAAc,CACjBuC,GAAG,CAAC/B,UAAU,CAAC,CACf+B,GAAG,CAAC5B,MAAM,CAACF,UAAU,CAAC,CAAC,CACvB+B,GAAG,CAAC4D,QAAQ,EAAEC,IAAI,CAAC;EACxB;EAEAK,iBAAiBA,CACflG,UAA0C,EAC1CC,UAA2B,EAC3B2F,QAAsC,EACtCO,MAAmD,EACnB;IAChC,IAAI,CAAClD,gBAAgB,CAACjD,UAAU,EAAEC,UAAU,CAAC;IAC7C,MAAMmG,OAAO,GAAG,IAAI,CAAC,CAAC5G,cAAc,CACjCuC,GAAG,CAAC/B,UAAU,CAAC,CACf+B,GAAG,CAAC5B,MAAM,CAACF,UAAU,CAAC,CAAC,CACvB8B,GAAG,CAAC6D,QAAQ,CAAC;IAChB,IAAI,CAACO,MAAM,EAAE,OAAOC,OAAO;IAC3B,OAAO1H,oBAAoB,CAAC0H,OAAO,EAAED,MAAM,CAAC;EAC9C;EAEA,CAAC7B,oBAAoB+B,CACnBjC,OAAoC,EACpCC,UAAyB,EACzBT,OAAoC,EACpCE,UAAyB,EACzB;IACA,MAAMc,WAAW,GAAGR,OAAO,CAAC7C,OAAO;IACnC,IAAI6C,OAAO,CAACd,WAAW,KAAK,KAAK,EAAE;MACjC,MAAMgD,aAAa,GAAG,IAAI,CAAC,CAACnH,WAAW,CAAC4C,GAAG,CAACsC,UAAU,CAAC;MACvD,MAAMkC,UAAU,GAAGD,aAAa,CAACvE,GAAG,CAAC6C,WAAW,CAAC;MAEjD,IAAI2B,UAAU,IAAIA,UAAU,KAAKzC,UAAU,EAAE;QAC3C;QACA,IAAI,CAAC,CAACS,sBAAsB,CAACgC,UAAU,EAAE3C,OAAO,EAAES,UAAU,CAAC;MAC/D;MACAiC,aAAa,CAACtE,GAAG,CAAC4C,WAAW,EAAEd,UAAU,CAAC;IAC5C,CAAC,MAAM,IAAIM,OAAO,CAACd,WAAW,KAAK,MAAM,EAAE;MACzC,MAAMgD,aAAa,GAAG,IAAI,CAAC,CAAClH,SAAS,CAAC2C,GAAG,CAACsC,UAAU,CAAC;MACrDiC,aAAa,CAACtE,GAAG,CAAC4C,WAAW,EAAEd,UAAU,CAAC;IAC5C,CAAC,MAAM;MACL;MACA,MAAM,IAAI0C,KAAK,CAAC,0BAA0B,GAAGpC,OAAO,CAACd,WAAW,CAAC;IACnE;EACF;EAEAmD,aAAaA,CACXzG,UAA0C,EAC1C4F,QAAsC,EACtCc,OAAoB,EACpBC,SAAoB,EACpBC,IAAwB;EACxB;EACA;EACAC,YAA0B,GAAG,0BAA0B9I,UAAU,CAAC,CAAC,EAAE,EACrD;IAChB,MAAM+I,QAAsC,GAAG7F,MAAM,CAACa,MAAM,CAAC;MAC3DiF,QAAQ,EAAEJ,SAAS;MACnBK,SAAS,EAAE/F,MAAM,CAACa,MAAM,CAAC;QACvBmE,IAAI,EAAE,kBAAkB;QACxBgB,gBAAgB,EAAEhG,MAAM,CAACa,MAAM,CAAC;UAC9B+E,YAAY;UACZK,WAAW,EAAE,iCAAiC;UAC9CC,eAAe,EAAE;QACnB,CAAC;MACH,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,CAAC1H,KAAK,CACRsC,GAAG,CAAC/B,UAAU,CAAC,CACf+B,GAAG,CAAC6D,QAAQ,CAAC,CACb5D,GAAG,CACF6E,YAAY,EACZ5F,MAAM,CAACa,MAAM,CAAC;MACZ4E,OAAO;MACPI,QAAQ;MACRM,QAAQ,EAAEnG,MAAM,CAACa,MAAM,CAAC;QACtB6E,SAAS;QACTC,IAAI;QACJS,SAAS,EAAElH,MAAM,CAACuG,OAAO,CAACY,UAAU;MACtC,CAAC;IACH,CAAC,CACH,CAAC;IAEH,OAAOR,QAAQ;EACjB;EAEAS,eAAeA,CACbvH,UAA0C,EAC1CC,UAAkB,EAClB2F,QAAsC,EACb;IACzB,MAAM4B,GAAG,GAAG,IAAI,CAACvE,gBAAgB,CAACjD,UAAU,EAAEC,UAAU,CAAC;IACzD,MAAMwH,WAAW,GACf,IAAI,CAAC5H,QAAQ,CAACuC,gCAAgC,CAACpC,UAAU,CAAC,CAACA,UAAU,CAClE+F,UAAU,CAACH,QAAQ,CAAC;IAEzB,IAAI,CAAC6B,WAAW,EAAE;MAChB;MACA;MACA,MAAM,IAAInJ,gBAAgB,CACxB,GAAG,EACH;QACEgC,SAAS,EAAE,WAAW;QACtBC,SAAS,EAAE,oBAAoB;QAC/BC,eAAe,EAAE,cAAc;QAC/BC,UAAU,EAAE;UACVT,UAAU;UACV+F,UAAU,EAAE,CAACH,QAAQ;QACvB,CAAC;QACDlF,gBAAgB,EACd;MACJ,CACF,CAAC;IACH;IAEA,IAAI+G,WAAW,CAACzB,QAAQ,CAACC,IAAI,KAAK,gBAAgB,EAAE;MAClD;MACA,MAAM,IAAI3H,gBAAgB,CACxB,GAAG,EACH;QACEgC,SAAS,EAAE,kBAAkB;QAC7BC,SAAS,EAAE,qBAAqB;QAChCC,eAAe,EAAE,cAAc;QAC/BC,UAAU,EAAE;UACVmF,QAAQ;UACR8B,gBAAgB,EAAED,WAAW,CAACzB,QAAQ,CAACC;QACzC,CAAC;QACDvF,gBAAgB,EACd;MACJ,CACF,CAAC;IACH;IAEA,MAAM8B,GAAG,GAAGgF,GAAG,CAAC5B,QAAQ,CAAC,CAACoB,SAAS,CAACC,gBAAgB,CAACJ,YAAY;IAEjE,IAAI,CAACrE,GAAG,IAAI,CAACA,GAAG,CAACnB,UAAU,CAAC,KAAK,CAAC,EAAE;MAClC,MAAM,IAAI/C,gBAAgB,CACxB,GAAG,EACH;QACEgC,SAAS,EAAE,kBAAkB;QAC7BC,SAAS,EAAE,sBAAsB;QACjCC,eAAe,EAAE,cAAc;QAC/BC,UAAU,EAAE;UACVmF,QAAQ;UACR8B,gBAAgB,EAAED,WAAW,CAACzB,QAAQ,CAACC,IAAI;UAC3C0B,aAAa,EAAEnF;QACjB,CAAC;QACD9B,gBAAgB,EACd;MACJ,CACF,CAAC;IACH;IAEA,MAAMkH,GAAG,GAAG,IAAI,CAAC,CAACnI,KAAK,CAACsC,GAAG,CAAC/B,UAAU,CAAC,CAAC+B,GAAG,CAAC6D,QAAQ,CAAC,CAAC7D,GAAG,CAACS,GAAG,CAAC;IAE9D,IAAI,CAACoF,GAAG,EAAE;MACR,MAAM,IAAItJ,gBAAgB,CAAC,GAAG,EAAEJ,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACvE;IACA,OAAO0J,GAAG;EACZ;EAEA,CAACrD,sBAAsBsD,CACrBC,OAAsB,EACtBC,QAAqC,EACrCC,kBAAiC,EACjC;IACA,MAAMlD,YAAY,GAAGiD,QAAQ,CAACxG,OAAO;IACrC,IAAIwG,QAAQ,CAACzE,WAAW,KAAK,KAAK,EAAE;MAClC,MAAM2E,KAAK,GAAG,IAAI,CAAC,CAAC9I,WAAW,CAAC4C,GAAG,CAAC+F,OAAO,CAAC;MAC5C,EACEG,KAAK,CAAClG,GAAG,CAAC+C,YAAY,CAAC,KAAKkD,kBAAkB,IAAAlH,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADhD/C,SAAS,QAEP,mCACEyE,IAAI,CAACC,SAAS,CACZqF,kBACF,CAAC,cAEDtF,IAAI,CAACC,SAAS,CACZsF,KAAK,CAAClG,GAAG,CAAC+C,YAAY,CACxB,CAAC,aACUA,YAAY,OAAOpC,IAAI,CAACC,SAAS,CAACmF,OAAO,CAAC,EAAE,IAV3D7J,SAAS;MAYTgK,KAAK,CAACxD,MAAM,CAACK,YAAY,CAAC;IAC5B,CAAC,MAAM;MACL,MAAMmD,KAAK,GAAG,IAAI,CAAC,CAAC7I,SAAS,CAAC2C,GAAG,CAAC+F,OAAO,CAAC;MAC1C,CACEG,KAAK,CAAClG,GAAG,CAAC+C,YAAY,CAAC,EAAEoD,GAAG,CAACF,kBAAkB,CAAC,GAAAlH,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADlD/C,SAAS,QAEP,yDACEyE,IAAI,CAACC,SAAS,CACZqF,kBACF,CAAC,aACUlD,YAAY,OAAOpC,IAAI,CAACC,SAAS,CAACmF,OAAO,CAAC,EAAE,IAN3D7J,SAAS;MAQTgK,KAAK,CAACE,MAAM,CAACrD,YAAY,EAAEkD,kBAAkB,CAAC;IAChD;EACF;EAEA9H,SAASA,CACPqB,OAAe,EACftB,UAAqC,EACP;IAC9B,OAAO,IAAI,CAAC,CAAChB,OAAO,CAAC8C,GAAG,CAACR,OAAO,CAAC,CAACQ,GAAG,CAAC5B,MAAM,CAACF,UAAU,CAAC,CAAC;EAC3D;EAEAgD,gBAAgBA,CACd1B,OAAe,EACftB,UAAqC,EACnB;IAClB,MAAMmF,MAAM,GAAG,IAAI,CAAClF,SAAS,CAACqB,OAAO,EAAEtB,UAAU,CAAC;IAElD,IAAI,CAACmF,MAAM,EAAE;MACX,MAAM,IAAI9G,gBAAgB,CACxB,GAAG,EACHH,mBAAmB,CAACoD,OAAO,EAAEpB,MAAM,CAACF,UAAU,CAAC,CACjD,CAAC;IACH;IACA,OAAOmF,MAAM;EACf;EAEAgD,cAAcA,CAAC5F,GAAW,EAAgC;IACxD,KAAK,MAAM,GAAG6F,WAAW,CAAC,IAAI,IAAI,CAAC,CAACpJ,OAAO,EAAE;MAC3C,KAAK,MAAM,GAAGuI,GAAG,CAAC,IAAIa,WAAW,EAAE;QACjC,IAAIb,GAAG,CAAC1E,KAAK,KAAKN,GAAG,EAAE;UACrB,OAAOgF,GAAG;QACZ;MACF;IACF;EACF;EAEAc,eAAeA,CACb/G,OAAe,EACftB,UAAqC,EACrCsI,WAAmB,EACC;IACpB,MAAMnD,MAAM,GAAG,IAAI,CAACnC,gBAAgB,CAAC1B,OAAO,EAAEtB,UAAU,CAAC;IAEzD,MAAMuI,YAAY,GAAG,IAAI,CAAC,CAAClJ,YAAY,CAACmJ,iBAAiB,CACvDlH,OAAO,EACPgH,WACF,CAAC;IAED,IAAIC,YAAY,CAAClF,WAAW,KAAK,KAAK,EAAE;MACtC,MAAMwE,OAAO,GAAG,IAAI,CAAC,CAAC3I,WAAW,CAC9B4C,GAAG,CAAClD,aAAa,CAACuG,MAAM,CAAC,CAAC,CAC1BrD,GAAG,CAACwG,WAAW,CAAC;MACnB,IAAIT,OAAO,KAAKjF,SAAS,EAAE;QACzB,OAAO,EAAE;MACX;MACA,MAAM;QAAE7C,UAAU;QAAEC;MAAW,CAAC,GAAGnB,YAAY,CAACgJ,OAAO,CAAC;MAExD,OAAO,CAAC,IAAI,CAAC7E,gBAAgB,CAACjD,UAAU,EAAEC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC,MAAM;MACL,MAAMyI,QAAQ,GAAG,IAAI,CAAC,CAACtJ,SAAS,CAC7B2C,GAAG,CAAClD,aAAa,CAACuG,MAAM,CAAC,CAAC,CAC1BrD,GAAG,CAACwG,WAAW,CAAC;MAEnB,OAAOI,KAAK,CAACC,IAAI,CAACF,QAAQ,IAAI,EAAE,CAAC,CAACG,GAAG,CAAEC,CAAC,IAAK;QAC3C,MAAM,CAAC9I,UAAU,EAAEC,UAAU,CAAC,GAAG6I,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;QACnD,EAAU/I,UAAU,IAAIC,UAAU,IAAAa,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAlC/C,SAAS,QAA2B,wBAAwB,IAA5DA,SAAS;QACT,OAAO,IAAI,CAACgF,gBAAgB,CAACjD,UAAU,EAAEC,UAAU,CAAC;MACtD,CAAC,CAAC;IACJ;EACF;EAEA+I,cAAcA,CACZhJ,UAAkB,EAClBC,UAAqC,EACrCgJ,QAAgB,EAChBC,gBAA2C,EACzB;IAClB,MAAMC,QAAQ,GAAG,IAAI,CAACb,eAAe,CAACtI,UAAU,EAAEC,UAAU,EAAEgJ,QAAQ,CAAC;IACvE,MAAM7D,MAAM,GAAG+D,QAAQ,CAAChD,MAAM,CAC3BiD,CAAC,IAAKjJ,MAAM,CAACiJ,CAAC,CAAC1H,YAAY,CAAC,KAAKwH,gBACpC,CAAC,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC9D,MAAM,EAAE;MACX,MAAM,IAAI9G,gBAAgB,CACxB,GAAG,EACHH,mBAAmB,CACjB,GAAG6B,UAAU,OAAOiJ,QAAQ,EAAE,EAC9B9I,MAAM,CAAC+I,gBAAgB,CACzB,CACF,CAAC;IACH;IACA,OAAO9D,MAAM;EACf;EAEAiE,gBAAgBA,CAAC9H,OAAe,EAA8B;IAC5D,IAAI,CAAC1B,QAAQ,CAACuC,gCAAgC,CAACb,OAAO,CAAC;IACvD,OAAO,IAAI,CAAC,CAACtC,OAAO,CAAC8C,GAAG,CAACR,OAAO,CAAC,CAAC+H,MAAM,CAAC,CAAC;EAC5C;EAEAC,uBAAuBA,CACrBC,UAEuC,EACO;IAC9C,MAAMC,QAAQ,GAAGD,UAAU,CAACE,MAAM;IAClC;IACA;IACA,IAAIzK,OAAO,GAAGL,iBAAiB,CAAC,IAAI,EAAE4K,UAAU,CAACG,SAAS,EAAE9G,SAAS,CAAC;IAEtE,IAAI,CAAC5D,OAAO,IAAIA,OAAO,CAAC2K,MAAM,KAAK,CAAC,EAAE;MACpC,OAAO;QACL/D,IAAI,EAAE,EAAE;QACRgE,UAAU,EAAE,GAAG;QACfC,aAAa,EAAEjH;MACjB,CAAC;IACH;IAEA,IAAI2G,UAAU,CAACO,OAAO,EAAE;MACtB9K,OAAO,GAAGA,OAAO,CAAC+K,IAAI,CAACrL,mBAAmB,CAAC6K,UAAU,CAACO,OAAO,CAAC,CAAC;IACjE;;IAEA;IACA;;IAEA,MAAME,IAAI,GAAG1L,+BAA+B,CAC1CU,OAAO,EACPZ,8BAA8B,CAACmL,UAAU,CAAC,EAC1C,KACF,CAAC;IAED,IAAI,CAACS,IAAI,EAAE;MACT,MAAM,IAAI3L,gBAAgB,CACxB,GAAG,EACHJ,cAAc,CAAC,wBAAwBwE,IAAI,CAACC,SAAS,CAAC6G,UAAU,CAAC,EAAE,CACrE,CAAC;IACH;IACA,MAAM5B,GAAG,GAAGxJ,mBAAmB,CAC7B6L,IAAI,EACJ,CAAC,GAAGR,QAAQ,CAAC,EACb,IAAI,EACJD,UAAU,CAACU,UACb,CAAC;IAED,OAAOtC,GAAG;EACZ;EAEAuC,qBAAqBA,CACnBnK,UAAkB,EAClBC,UAAqC,EACrCmK,YAAoB,EACO;IAC3B,MAAM5H,GAAG,GAAG,IAAI,CAACS,gBAAgB,CAACjD,UAAU,EAAEC,UAAU,CAAC,CAACmK,YAAY,CAAC;IACvE,OAAO,IAAI,CAAC,CAAC7K,WAAW,CAAC8K,0BAA0B,CAAC7H,GAAG,CAAC;EAC1D;EAEA8H,mBAAmBA,CACjBtK,UAAkB,EAClBC,UAAqC,EACrCmK,YAAoB,EACP;IACb,MAAM5H,GAAG,GAAG,IAAI,CAACS,gBAAgB,CAACjD,UAAU,EAAEC,UAAU,CAAC,CAACmK,YAAY,CAAC;IACvE,OAAO,IAAI,CAAC,CAAC7K,WAAW,CAAC+K,mBAAmB,CAAC9H,GAAG,CAAC;EACnD;EAEA+H,WAAWA,CACTC,iBAAyB,EACzBC,GAAsC,EACE;IACxC,MAAMC,SAAS,GAAG,IAAI,CAAC,CAACpL,YAAY,CAACqL,YAAY,CAACH,iBAAiB,CAAC;IACpE,MAAMI,UAAU,GAAG,IAAI,CAAC,CAACtL,YAAY,CAACuL,aAAa,CAACL,iBAAiB,CAAC;IAEtE,MAAMM,UAAU,GAAG/L,cAAc,CAAC0L,GAAG,EAAEC,SAAS,EAAE,IAAI,CAAC;IACvD,IAAII,UAAU,CAACC,MAAM,KAAK,SAAS,EAAE;MACnC,OAAO;QAAED;MAAW,CAAC;IACvB;IAEA,MAAME,KAAK,GAAG,IAAIvM,kBAAkB,CAAC,IAAI,CAAC;IAC1C,MAAMwM,CAAC,GAAGL,UAAU,CAACI,KAAK,EAAEP,GAAG,EAAE;MAC/B3E,GAAG,EAAE4E,SAAS;MACdnL,WAAW,EAAE,IAAI,CAAC,CAACA;IACrB,CAAC,CAAC;;IAEF;IACA;IACA;IACA;IACA,IAAI0L,CAAC,EAAE,OAAOA,CAAC;IAEf,OAAO;MACLH,UAAU,EAAE;QACVrK,UAAU,EAAE,CAAC,CAAC;QACdsK,MAAM,EAAE,OAAO;QACfG,kBAAkB,EAAE;MACtB,CAAC;MACDC,KAAK,EAAEV,GAAG,CAACW,OAAO,EAAEC,IAAI,KAAK,sBAAsB,KAC3CZ,GAAG,CAACW,OAAO,CAACE,WAAW,KAAK,KAAK,IAChCb,GAAG,CAACW,OAAO,CAACE,WAAW,KAAK,uBAAuB,CAAC,GACzD;QACArF,IAAI,EAAE,OAAO;QACb,GAAG+E,KAAK,CAACO;MACX,CAAC,GACC1I;IACN,CAAC;EACH;EAEA2I,gBAAgBA,CACdhB,iBAAyB,EACzBiB,QAAgD,EACP;IACzC,MAAMf,SAAS,GAAG,IAAI,CAAC,CAACpL,YAAY,CAACqL,YAAY,CAACH,iBAAiB,CAAC;IACpE,MAAMI,UAAU,GAAG,IAAI,CAAC,CAACtL,YAAY,CAACuL,aAAa,CAACL,iBAAiB,CAAC;IAEtE,KAAK,MAAMC,GAAG,IAAIgB,QAAQ,CAACC,QAAQ,EAAE;MACnC,MAAMX,MAAM,GAAGhM,cAAc,CAAC0L,GAAG,EAAEC,SAAS,EAAE,IAAI,CAAC;MACnD,IAAIK,MAAM,CAACA,MAAM,KAAK,SAAS,EAAE;QAC/B,MAAM,IAAIzM,gBAAgB,CAAC,GAAG,EAAE;UAC9BgC,SAAS,EAAE,kBAAkB;UAC7BC,SAAS,EAAE,wBAAwB;UACnCC,eAAe,EAAE,cAAc;UAC/BC,UAAU,EAAE;YACVkL,UAAU,EAAEnB;UACd;QACF,CAAwC,CAAC;MAC3C;IACF;IAEA,MAAMQ,KAAK,GAAG,IAAIvM,kBAAkB,CAAC,IAAI,CAAC;IAG1C,KAAK,MAAMmN,IAAI,IAAIH,QAAQ,CAACC,QAAQ,EAAE;MACpCd,UAAU,CACRI,KAAK,EACL;QACE,GAAGY,IAAI;QACPR,OAAO,EAAE;UACPC,IAAI,EAAE,sBAAsB;UAC5BC,WAAW,EAAEG,QAAQ,CAACL,OAAO,EAAEE;QACjC;MACF,CAAC,EACD;QAAExF,GAAG,EAAE4E,SAAS;QAAEnL,WAAW,EAAE,IAAI,CAAC,CAACA;MAAY,CACnD,CAAC;IACH;IACA,IAAIkM,QAAQ,CAACL,OAAO,EAAEE,WAAW,KAAK,MAAM,EAAE;MAC5C,OAAO,CAAC,CAAC;IACX;IAsBA,OAAO;MACLH,KAAK,EAAE;QACLlF,IAAI,EAAE,OAAO;QACb,GAAG+E,KAAK,CAACO,WAAW;QACpBJ,KAAK,EAAEH,KAAK,CAACO,WAAW,CAACJ,KAAK,CAAChF,MAAM,CAClCpD,CAAC,IAAKA,CAAC,CAACkD,IAAI,KAAK,cAAc,IAAIlD,CAAC,CAACkD,IAAI,KAAK,YACjD;MACF;IACF,CAAC;EACH;AACF;AACA,SAASP,kBAAkBA,CACzBtB,OAAoC,EACpCW,GAAqB,EACrBnB,OAAoC,EACpCoB,GAAqB,EACrB;EACA,MAAMG,OAAO,GAAGf,OAAO,CAACd,WAAW,KAAK,KAAK,GACzC;IAAE8B,MAAM,EAAEL,GAAG;IAAEM,IAAI,EAAEjB;EAAQ,CAAC,GAC9BR,OAAO,CAACN,WAAW,KAAK,KAAK,GAC7B;IAAE8B,MAAM,EAAEJ,GAAG;IAAEK,IAAI,EAAEzB;EAAQ,CAAC,GAC9Bf,SAAS;EACb,MAAMyC,QAAQ,GAAGH,OAAO,GACpBf,OAAO,CAACd,WAAW,KAAK,MAAM,GAC5B;IAAE8B,MAAM,EAAEL,GAAG;IAAEM,IAAI,EAAEjB;EAAQ,CAAC,GAC9B;IAAEgB,MAAM,EAAEJ,GAAG;IAAEK,IAAI,EAAEzB;EAAQ,CAAC,GAChCf,SAAS;EACb,OAAO;IAAEsC,OAAO;IAAEG;EAAS,CAAC;AAC9B","ignoreList":[]}
@@ -72,8 +72,7 @@ export function subSelectProperties(objects, urlOrProperties, includeCount, excl
72
72
  const ret = {
73
73
  nextPageToken: objects.nextPageToken,
74
74
  data: result,
75
- totalCount: objects.totalCount,
76
- propertySecurities: objects.propertySecurities
75
+ totalCount: objects.totalCount
77
76
  };
78
77
  return ret;
79
78
  }
@@ -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","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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWA,OAAO,SAASA,sBAAsBA,CAGpCC,MAAS,EACTC,GAAQ,EACL;EACH,MAAMC,UAAU,GAAG,IAAIC,GAAG,CAACF,GAAG,CAACG,YAAY,CAACC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAE7D,IAAIH,UAAU,CAACI,IAAI,KAAK,CAAC,EAAE;IACzB,OAAON,MAAM;EACf;EAEA,MAAMO,MAAM,GAAGC,MAAM,CAACC,OAAO,CAACT,MAAM,CAAC,CAACU,MAAM,CAC1C,CAACC,GAAG,EAAE,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;IACrB,IAAIX,UAAU,CAACY,GAAG,CAACF,GAAG,CAAC,EAAE;MACvBD,GAAG,CAACC,GAAG,CAAC,GAAGC,KAAK;IAClB,CAAC,MAAM,IAAID,GAAG,KAAK,cAAc,EAAE;MACjCD,GAAG,CAACI,YAAY,GAAGF,KAAK;IAC1B,CAAC,MAAM,IAAID,GAAG,KAAK,WAAW,EAAE;MAC9BD,GAAG,CAACK,SAAS,GAAGH,KAAK;IACvB;IAEA,OAAOF,GAAG;EACZ,CAAC,EACD,CAAC,CACH,CAAC;EAED,OAAOJ,MAAM;AACf;AAEA,OAAO,SAASU,mBAAmBA,CAQjCC,OAA6B,EAC7BC,eAA+B,EAC/BC,YAA2B,EAC3BC,UAAoB,EAGtB;EACE,IAAInB,UAAuB;EAC3B,IAAIoB,KAAK,CAACC,OAAO,CAACJ,eAAe,CAAC,EAAE;IAClCjB,UAAU,GAAG,IAAIC,GAAG,CAACgB,eAAe,CAAC;EACvC,CAAC,MAAM;IACLjB,UAAU,GAAG,IAAIC,GAAG,CAACgB,eAAe,CAACf,YAAY,CAACC,MAAM,CAAC,QAAQ,CAAC,CAAC;EACrE;EAEA,MAAME,MAAM,GAAGW,OAAO,CAACM,IAAI,CAACC,GAAG,CAACzB,MAAM,IAAI;IACxC;IACA,IAAIA,MAAM,CAAC0B,cAAc,EAAE;MACzB,OAAO;QACLV,SAAS,EAAEhB,MAAM,CAACgB,SAAS;QAC3BD,YAAY,EAAEf,MAAM,CAACe,YAAY;QACjCY,OAAO,EAAE3B,MAAM,CAAC2B,OAAO;QACvB,GAAG3B,MAAM,CAAC0B,cAAc;QACxB,IAAIL,UAAU,GAAG,CAAC,CAAC,GAAG;UAAEO,KAAK,EAAE5B,MAAM,CAAC4B;QAAM,CAAC;MAC/C,CAAC;IACH;;IAEA;IACA,IAAI1B,UAAU,CAACI,IAAI,KAAK,CAAC,EAAE;MACzB,OAAOe,UAAU,GAAGQ,SAAS,CAAC7B,MAAM,CAAC,GAAGA,MAAM;IAChD;;IAEA;IACAE,UAAU,CAAC4B,GAAG,CAAC,cAAc,CAAC;IAC9B5B,UAAU,CAAC4B,GAAG,CAAC,WAAW,CAAC;IAC3B5B,UAAU,CAAC4B,GAAG,CAAC,SAAS,CAAC;IACzB,IAAI,CAACT,UAAU,EAAEnB,UAAU,CAAC4B,GAAG,CAAC,OAAO,CAAC;IACxC,OAAOtB,MAAM,CAACC,OAAO,CAACT,MAAM,CAAC,CAACU,MAAM,CAClC,CAACC,GAAG,EAAE,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;MACrB,IAAIX,UAAU,CAACY,GAAG,CAACF,GAAG,CAAC,EAAE;QACvBD,GAAG,CAACC,GAAG,CAAC,GAAGC,KAAK;MAClB;MAEA,OAAOF,GAAG;IACZ,CAAC,EACD,CAAC,CACH,CAAC;EACH,CAAC,CAAC;EAEF,MAAMoB,GAE2B,GAAG;IAChCC,aAAa,EAAEd,OAAO,CAACc,aAAa;IACpCR,IAAI,EAAEjB,MAAa;IACnB0B,UAAU,EAAGf,OAAO,CAAmCe,UAAU;IACjEC,kBAAkB,EAAEhB,OAAO,CAACgB;EAC9B,CAAC;EAEH,OAAOH,GAAG;AAEZ;AACA,SAASF,SAASA,CAA6B7B,MAAS,EAAE;EACxD,MAAM;IAAE4B,KAAK;IAAE,GAAGO;EAAK,CAAC,GAAGnC,MAA0B;EACrD,OAAOmC,IAAI;AACb","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","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":[]}
@@ -23,8 +23,7 @@ OntologiesV2.OntologyObjectSets.load(baseUrl, async ({
23
23
  request,
24
24
  params
25
25
  }) => {
26
- const a = fauxFoundry.getDataStore(params.ontologyApiName).getObjectsFromObjectSet(await request.json());
27
- return a;
26
+ return fauxFoundry.getDataStore(params.ontologyApiName).getObjectsFromObjectSet(await request.json());
28
27
  }),
29
28
  /**
30
29
  * Aggregate Objects in ObjectSet
@@ -46,8 +45,7 @@ OntologiesV2.OntologyObjectSets.loadMultipleObjectTypes(baseUrl, async ({
46
45
  return {
47
46
  interfaceToObjectTypeMappings: fauxFoundry.getOntology(params.ontologyApiName).getInterfaceToObjectTypeMappings(objectApiNames),
48
47
  interfaceToObjectTypeMappingsV2: {},
49
- ...pagedResponse,
50
- propertySecurities: []
48
+ ...pagedResponse
51
49
  };
52
50
  })];
53
51
  //# sourceMappingURL=createObjectSetHandlers.js.map
@@ -1 +1 @@
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":[]}
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":[]}
@@ -17,7 +17,7 @@
17
17
  export function pageThroughResponseSearchParams(iter, {
18
18
  pageSize = 1000,
19
19
  pageToken
20
- }, includeCount, propertySecurities) {
20
+ }, includeCount) {
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,8 +32,7 @@ export function pageThroughResponseSearchParams(iter, {
32
32
  data: data.slice(startIndex, endIndex),
33
33
  ...(includeCount ? {
34
34
  totalCount: String(data.length)
35
- } : {}),
36
- propertySecurities: propertySecurities ?? []
35
+ } : {})
37
36
  };
38
37
  return ret;
39
38
  }
@@ -1 +1 @@
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":[]}
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":[]}