@osdk/faux 0.5.0 → 0.6.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +5 -84
  2. package/build/browser/FauxFoundry/FauxDataStore.js +21 -2
  3. package/build/browser/FauxFoundry/FauxDataStore.js.map +1 -1
  4. package/build/browser/FauxFoundry/FauxDataStore.test.js +10 -5
  5. package/build/browser/FauxFoundry/FauxDataStore.test.js.map +1 -1
  6. package/build/browser/FauxFoundry/validateAction.test.js +2 -1
  7. package/build/browser/FauxFoundry/validateAction.test.js.map +1 -1
  8. package/build/browser/filterObjects.js +2 -1
  9. package/build/browser/filterObjects.js.map +1 -1
  10. package/build/browser/handlers/createObjectSetHandlers.js +4 -2
  11. package/build/browser/handlers/createObjectSetHandlers.js.map +1 -1
  12. package/build/browser/handlers/util/pageThroughResponseSearchParams.js +3 -2
  13. package/build/browser/handlers/util/pageThroughResponseSearchParams.js.map +1 -1
  14. package/build/cjs/index.cjs +63 -30
  15. package/build/cjs/index.cjs.map +1 -1
  16. package/build/cjs/index.d.cts +4 -1
  17. package/build/esm/FauxFoundry/FauxDataStore.js +21 -2
  18. package/build/esm/FauxFoundry/FauxDataStore.js.map +1 -1
  19. package/build/esm/FauxFoundry/FauxDataStore.test.js +10 -5
  20. package/build/esm/FauxFoundry/FauxDataStore.test.js.map +1 -1
  21. package/build/esm/FauxFoundry/validateAction.test.js +2 -1
  22. package/build/esm/FauxFoundry/validateAction.test.js.map +1 -1
  23. package/build/esm/filterObjects.js +2 -1
  24. package/build/esm/filterObjects.js.map +1 -1
  25. package/build/esm/handlers/createObjectSetHandlers.js +4 -2
  26. package/build/esm/handlers/createObjectSetHandlers.js.map +1 -1
  27. package/build/esm/handlers/util/pageThroughResponseSearchParams.js +3 -2
  28. package/build/esm/handlers/util/pageThroughResponseSearchParams.js.map +1 -1
  29. package/build/types/FauxFoundry/FauxDataStore.d.ts +2 -0
  30. package/build/types/FauxFoundry/FauxDataStore.d.ts.map +1 -1
  31. package/build/types/handlers/util/pageThroughResponseSearchParams.d.ts +3 -1
  32. package/build/types/handlers/util/pageThroughResponseSearchParams.d.ts.map +1 -1
  33. package/package.json +11 -11
package/CHANGELOG.md CHANGED
@@ -1,42 +1,16 @@
1
1
  # @osdk/shared.test
2
2
 
3
- ## 0.5.0
3
+ ## 0.6.0-beta.2
4
4
 
5
5
  ### Minor Changes
6
6
 
7
- - ab1957f: Added FauxAdmin support
7
+ - abb0e0f: Bump Platform SDK dependencies
8
8
 
9
9
  ### Patch Changes
10
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
11
+ - Updated dependencies [abb0e0f]
12
+ - @osdk/generator-converters@2.8.0-beta.9
13
+ - @osdk/api@2.8.0-beta.9
40
14
 
41
15
  ## 0.5.0-beta.4
42
16
 
@@ -75,59 +49,6 @@
75
49
  - @osdk/api@2.7.0-beta.2
76
50
  - @osdk/generator-converters@2.7.0-beta.2
77
51
 
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
-
131
52
  ## 0.4.0-beta.6
132
53
 
133
54
  ### Minor Changes
@@ -46,11 +46,13 @@ import { validateAction } from "./validateAction.js";
46
46
 
47
47
  export class FauxDataStore {
48
48
  #objects = new DefaultMap(() => new Map());
49
+ #objectsWithSecurities = new DefaultMap(() => new Map());
49
50
  #singleLinks = new DefaultMap(() => new Map());
50
51
  #manyLinks = new DefaultMap(() => new MultiMap(Set));
51
52
  #fauxOntology;
52
53
  #attachments;
53
54
  #timeSeriesData = new DefaultMap(() => new DefaultMap(() => new DefaultMap(() => [])));
55
+ #propertySecurities = new DefaultMap(() => [{}]);
54
56
  #media = new DefaultMap(() => new DefaultMap(() => {
55
57
  return new Map();
56
58
  }));
@@ -152,6 +154,14 @@ export class FauxDataStore {
152
154
  }
153
155
  return frozenBso;
154
156
  }
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
+ }
155
165
  #osdkCreatableToBso(objectType, anyObj) {
156
166
  objectType = typeof objectType === "string" ? objectType : objectType.apiName;
157
167
  if ("$apiName" in anyObj) {
@@ -436,6 +446,9 @@ export class FauxDataStore {
436
446
  }
437
447
  return object;
438
448
  }
449
+ getObjectWithSecurities(apiName, primaryKey) {
450
+ return this.#objectsWithSecurities.get(apiName).get(String(primaryKey));
451
+ }
439
452
  getObjectByRid(rid) {
440
453
  for (const [, pkToObjects] of this.#objects) {
441
454
  for (const [, obj] of pkToObjects) {
@@ -481,14 +494,20 @@ export class FauxDataStore {
481
494
  }
482
495
  getObjectsFromObjectSet(parsedBody) {
483
496
  const selected = parsedBody.select;
497
+ const loadPropertySecurities = parsedBody.loadPropertySecurities ?? false;
484
498
  // when we have interfaces in here, we have a little trick for
485
499
  // caching off the important properties
486
500
  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
+ }
487
505
  if (!objects || objects.length === 0) {
488
506
  return {
489
507
  data: [],
490
508
  totalCount: "0",
491
- nextPageToken: undefined
509
+ nextPageToken: undefined,
510
+ propertySecurities: []
492
511
  };
493
512
  }
494
513
  if (parsedBody.orderBy) {
@@ -498,7 +517,7 @@ export class FauxDataStore {
498
517
  // finally, if we got interfaces, the objects have names like the interface and we need
499
518
  // to return them like the object.
500
519
 
501
- const page = pageThroughResponseSearchParams(objects, getPaginationParamsFromRequest(parsedBody), false);
520
+ const page = pageThroughResponseSearchParams(objects, getPaginationParamsFromRequest(parsedBody), false, loadPropertySecurities ? this.#propertySecurities.get(objectLocator(objects[0])) : undefined);
502
521
  if (!page) {
503
522
  throw new OpenApiCallError(404, InvalidRequest(`No objects found for ${JSON.stringify(parsedBody)}`));
504
523
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FauxDataStore.js","names":["DefaultMap","MultiMap","crypto","randomUUID","inspect","invariant","InvalidRequest","ObjectNotFoundError","subSelectProperties","getPaginationParamsFromRequest","OpenApiCallError","pageThroughResponseSearchParams","isBaseServerObject","FauxDataStoreBatch","filterTimeSeriesData","createOrderBySortFn","getObjectsFromSet","objectLocator","parseLocator","validateAction","FauxDataStore","objects","Map","singleLinks","manyLinks","Set","fauxOntology","attachments","timeSeriesData","media","strict","constructor","clear","ontology","assertObjectExists","#assertObjectExists","objectType","primaryKey","getObject","String","assertObjectDoesNotExist","#assertObjectDoesNotExist","errorCode","errorName","errorInstanceId","parameters","errorDescription","registerObject","anyObj","bso","process","env","NODE_ENV","Object","keys","some","s","startsWith","osdkCreatableToBso","apiName","__apiName","$apiName","__primaryKey","$primaryKey","others","frozenBso","freeze","get","set","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":"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","ignoreList":[]}
1
+ {"version":3,"file":"FauxDataStore.js","names":["DefaultMap","MultiMap","crypto","randomUUID","inspect","invariant","InvalidRequest","ObjectNotFoundError","subSelectProperties","getPaginationParamsFromRequest","OpenApiCallError","pageThroughResponseSearchParams","isBaseServerObject","FauxDataStoreBatch","filterTimeSeriesData","createOrderBySortFn","getObjectsFromSet","objectLocator","parseLocator","validateAction","FauxDataStore","objects","Map","objectsWithSecurities","singleLinks","manyLinks","Set","fauxOntology","attachments","timeSeriesData","propertySecurities","media","strict","constructor","clear","ontology","assertObjectExists","#assertObjectExists","objectType","primaryKey","getObject","String","assertObjectDoesNotExist","#assertObjectDoesNotExist","errorCode","errorName","errorInstanceId","parameters","errorDescription","registerObject","anyObj","bso","process","env","NODE_ENV","Object","keys","some","s","startsWith","osdkCreatableToBso","apiName","__apiName","$apiName","__primaryKey","$primaryKey","others","frozenBso","freeze","get","set","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 $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 #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":[]}
@@ -95,7 +95,8 @@ describe(FauxDataStore, () => {
95
95
  },
96
96
  rid: "ri.id",
97
97
  displayName: "id",
98
- description: "id"
98
+ description: "id",
99
+ typeClasses: []
99
100
  },
100
101
  leadId: {
101
102
  dataType: {
@@ -103,7 +104,8 @@ describe(FauxDataStore, () => {
103
104
  },
104
105
  rid: "ri.leadId",
105
106
  displayName: "leadId",
106
- description: "leadId"
107
+ description: "leadId",
108
+ typeClasses: []
107
109
  }
108
110
  },
109
111
  status: "ACTIVE",
@@ -149,7 +151,8 @@ describe(FauxDataStore, () => {
149
151
  },
150
152
  rid: "ri.proj.id",
151
153
  displayName: "id",
152
- description: "id"
154
+ description: "id",
155
+ typeClasses: []
153
156
  },
154
157
  name: {
155
158
  dataType: {
@@ -157,7 +160,8 @@ describe(FauxDataStore, () => {
157
160
  },
158
161
  rid: "ri.proj.name",
159
162
  displayName: "name",
160
- description: "name"
163
+ description: "name",
164
+ typeClasses: []
161
165
  },
162
166
  ownerId: {
163
167
  dataType: {
@@ -165,7 +169,8 @@ describe(FauxDataStore, () => {
165
169
  },
166
170
  rid: "ri.proj.ownerId",
167
171
  displayName: "ownerId",
168
- description: "ownerId"
172
+ description: "ownerId",
173
+ typeClasses: []
169
174
  }
170
175
  },
171
176
  status: "ACTIVE",