@osdk/faux 0.4.0-beta.1 → 0.4.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @osdk/shared.test
2
2
 
3
+ ## 0.4.0-beta.2
4
+
5
+ ### Minor Changes
6
+
7
+ - 84e61fc: Add propertyValueFormatting type to property metadata
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [84e61fc]
12
+ - Updated dependencies [c4f8529]
13
+ - Updated dependencies [f7ae38a]
14
+ - @osdk/generator-converters@2.6.0-beta.2
15
+ - @osdk/api@2.6.0-beta.2
16
+
3
17
  ## 0.3.0-beta.6
4
18
 
5
19
  ### Minor Changes
@@ -30,7 +30,8 @@ export class FauxAttachmentStore {
30
30
  errorInstanceId: "internal",
31
31
  parameters: {
32
32
  attachmentRid
33
- }
33
+ },
34
+ errorDescription: "The requested attachment is not found, or the client token does not have access to it. Attachments that are not attached to any objects are deleted after two weeks. Attachments that have not been attached to an object can only be viewed by the user who uploaded them. Attachments that have been attached to an object can be viewed by users who can view the object."
34
35
  });
35
36
  }
36
37
  const {
@@ -51,7 +52,8 @@ export class FauxAttachmentStore {
51
52
  errorInstanceId: "internal",
52
53
  parameters: {
53
54
  attachmentRid
54
- }
55
+ },
56
+ errorDescription: "The requested attachment is not found, or the client token does not have access to it. Attachments that are not attached to any objects are deleted after two weeks. Attachments that have not been attached to an object can only be viewed by the user who uploaded them. Attachments that have been attached to an object can be viewed by users who can view the object."
55
57
  });
56
58
  }
57
59
  return attachment.buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"FauxAttachmentStore.js","names":["OpenApiCallError","FauxAttachmentStore","attachments","Map","registerAttachment","attachment","set","rid","getAttachmentMetadataByRid","attachmentRid","get","errorCode","errorName","errorInstanceId","parameters","buffer","metadata","sizeBytes","String","byteLength","getAttachmentBuffer"],"sources":["FauxAttachmentStore.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 * as OntologiesV2 from \"@osdk/foundry.ontologies\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\n\nexport interface FauxAttachmentInfo\n extends Omit<OntologiesV2.AttachmentV2, \"sizeBytes\">\n{\n buffer: ArrayBuffer;\n}\n\nexport class FauxAttachmentStore {\n #attachments = new Map<string, FauxAttachmentInfo>();\n\n registerAttachment(\n attachment: FauxAttachmentInfo,\n ): OntologiesV2.AttachmentV2 {\n this.#attachments.set(attachment.rid, attachment);\n return this.getAttachmentMetadataByRid(attachment.rid);\n }\n\n getAttachmentMetadataByRid(attachmentRid: string): OntologiesV2.AttachmentV2 {\n const attachment = this.#attachments.get(attachmentRid);\n if (!attachment) {\n throw new OpenApiCallError(\n 404,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"AttachmentNotFound\",\n errorInstanceId: \"internal\",\n parameters: { attachmentRid },\n } satisfies OntologiesV2.AttachmentNotFound,\n );\n }\n\n const { buffer, ...metadata } = attachment;\n\n return {\n ...metadata,\n sizeBytes: String(buffer.byteLength),\n };\n }\n\n getAttachmentBuffer(attachmentRid: string): ArrayBuffer {\n const attachment = this.#attachments.get(attachmentRid);\n if (!attachment) {\n throw new OpenApiCallError(\n 404,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"AttachmentNotFound\",\n errorInstanceId: \"internal\",\n parameters: { attachmentRid },\n } satisfies OntologiesV2.AttachmentNotFound,\n );\n }\n return attachment.buffer;\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,gBAAgB,QAAQ,uCAAuC;AAQxE,OAAO,MAAMC,mBAAmB,CAAC;EAC/B,CAACC,WAAW,GAAG,IAAIC,GAAG,CAA6B,CAAC;EAEpDC,kBAAkBA,CAChBC,UAA8B,EACH;IAC3B,IAAI,CAAC,CAACH,WAAW,CAACI,GAAG,CAACD,UAAU,CAACE,GAAG,EAAEF,UAAU,CAAC;IACjD,OAAO,IAAI,CAACG,0BAA0B,CAACH,UAAU,CAACE,GAAG,CAAC;EACxD;EAEAC,0BAA0BA,CAACC,aAAqB,EAA6B;IAC3E,MAAMJ,UAAU,GAAG,IAAI,CAAC,CAACH,WAAW,CAACQ,GAAG,CAACD,aAAa,CAAC;IACvD,IAAI,CAACJ,UAAU,EAAE;MACf,MAAM,IAAIL,gBAAgB,CACxB,GAAG,EACH;QACEW,SAAS,EAAE,WAAW;QACtBC,SAAS,EAAE,oBAAoB;QAC/BC,eAAe,EAAE,UAAU;QAC3BC,UAAU,EAAE;UAAEL;QAAc;MAC9B,CACF,CAAC;IACH;IAEA,MAAM;MAAEM,MAAM;MAAE,GAAGC;IAAS,CAAC,GAAGX,UAAU;IAE1C,OAAO;MACL,GAAGW,QAAQ;MACXC,SAAS,EAAEC,MAAM,CAACH,MAAM,CAACI,UAAU;IACrC,CAAC;EACH;EAEAC,mBAAmBA,CAACX,aAAqB,EAAe;IACtD,MAAMJ,UAAU,GAAG,IAAI,CAAC,CAACH,WAAW,CAACQ,GAAG,CAACD,aAAa,CAAC;IACvD,IAAI,CAACJ,UAAU,EAAE;MACf,MAAM,IAAIL,gBAAgB,CACxB,GAAG,EACH;QACEW,SAAS,EAAE,WAAW;QACtBC,SAAS,EAAE,oBAAoB;QAC/BC,eAAe,EAAE,UAAU;QAC3BC,UAAU,EAAE;UAAEL;QAAc;MAC9B,CACF,CAAC;IACH;IACA,OAAOJ,UAAU,CAACU,MAAM;EAC1B;AACF","ignoreList":[]}
1
+ {"version":3,"file":"FauxAttachmentStore.js","names":["OpenApiCallError","FauxAttachmentStore","attachments","Map","registerAttachment","attachment","set","rid","getAttachmentMetadataByRid","attachmentRid","get","errorCode","errorName","errorInstanceId","parameters","errorDescription","buffer","metadata","sizeBytes","String","byteLength","getAttachmentBuffer"],"sources":["FauxAttachmentStore.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 * as OntologiesV2 from \"@osdk/foundry.ontologies\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\n\nexport interface FauxAttachmentInfo\n extends Omit<OntologiesV2.AttachmentV2, \"sizeBytes\">\n{\n buffer: ArrayBuffer;\n}\n\nexport class FauxAttachmentStore {\n #attachments = new Map<string, FauxAttachmentInfo>();\n\n registerAttachment(\n attachment: FauxAttachmentInfo,\n ): OntologiesV2.AttachmentV2 {\n this.#attachments.set(attachment.rid, attachment);\n return this.getAttachmentMetadataByRid(attachment.rid);\n }\n\n getAttachmentMetadataByRid(attachmentRid: string): OntologiesV2.AttachmentV2 {\n const attachment = this.#attachments.get(attachmentRid);\n if (!attachment) {\n throw new OpenApiCallError(\n 404,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"AttachmentNotFound\",\n errorInstanceId: \"internal\",\n parameters: { attachmentRid },\n errorDescription:\n \"The requested attachment is not found, or the client token does not have access to it. Attachments that are not attached to any objects are deleted after two weeks. Attachments that have not been attached to an object can only be viewed by the user who uploaded them. Attachments that have been attached to an object can be viewed by users who can view the object.\",\n } satisfies OntologiesV2.AttachmentNotFound,\n );\n }\n\n const { buffer, ...metadata } = attachment;\n\n return {\n ...metadata,\n sizeBytes: String(buffer.byteLength),\n };\n }\n\n getAttachmentBuffer(attachmentRid: string): ArrayBuffer {\n const attachment = this.#attachments.get(attachmentRid);\n if (!attachment) {\n throw new OpenApiCallError(\n 404,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"AttachmentNotFound\",\n errorInstanceId: \"internal\",\n parameters: { attachmentRid },\n errorDescription:\n \"The requested attachment is not found, or the client token does not have access to it. Attachments that are not attached to any objects are deleted after two weeks. Attachments that have not been attached to an object can only be viewed by the user who uploaded them. Attachments that have been attached to an object can be viewed by users who can view the object.\",\n } satisfies OntologiesV2.AttachmentNotFound,\n );\n }\n return attachment.buffer;\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,gBAAgB,QAAQ,uCAAuC;AAQxE,OAAO,MAAMC,mBAAmB,CAAC;EAC/B,CAACC,WAAW,GAAG,IAAIC,GAAG,CAA6B,CAAC;EAEpDC,kBAAkBA,CAChBC,UAA8B,EACH;IAC3B,IAAI,CAAC,CAACH,WAAW,CAACI,GAAG,CAACD,UAAU,CAACE,GAAG,EAAEF,UAAU,CAAC;IACjD,OAAO,IAAI,CAACG,0BAA0B,CAACH,UAAU,CAACE,GAAG,CAAC;EACxD;EAEAC,0BAA0BA,CAACC,aAAqB,EAA6B;IAC3E,MAAMJ,UAAU,GAAG,IAAI,CAAC,CAACH,WAAW,CAACQ,GAAG,CAACD,aAAa,CAAC;IACvD,IAAI,CAACJ,UAAU,EAAE;MACf,MAAM,IAAIL,gBAAgB,CACxB,GAAG,EACH;QACEW,SAAS,EAAE,WAAW;QACtBC,SAAS,EAAE,oBAAoB;QAC/BC,eAAe,EAAE,UAAU;QAC3BC,UAAU,EAAE;UAAEL;QAAc,CAAC;QAC7BM,gBAAgB,EACd;MACJ,CACF,CAAC;IACH;IAEA,MAAM;MAAEC,MAAM;MAAE,GAAGC;IAAS,CAAC,GAAGZ,UAAU;IAE1C,OAAO;MACL,GAAGY,QAAQ;MACXC,SAAS,EAAEC,MAAM,CAACH,MAAM,CAACI,UAAU;IACrC,CAAC;EACH;EAEAC,mBAAmBA,CAACZ,aAAqB,EAAe;IACtD,MAAMJ,UAAU,GAAG,IAAI,CAAC,CAACH,WAAW,CAACQ,GAAG,CAACD,aAAa,CAAC;IACvD,IAAI,CAACJ,UAAU,EAAE;MACf,MAAM,IAAIL,gBAAgB,CACxB,GAAG,EACH;QACEW,SAAS,EAAE,WAAW;QACtBC,SAAS,EAAE,oBAAoB;QAC/BC,eAAe,EAAE,UAAU;QAC3BC,UAAU,EAAE;UAAEL;QAAc,CAAC;QAC7BM,gBAAgB,EACd;MACJ,CACF,CAAC;IACH;IACA,OAAOV,UAAU,CAACW,MAAM;EAC1B;AACF","ignoreList":[]}
@@ -90,7 +90,8 @@ export class FauxDataStore {
90
90
  parameters: {
91
91
  objectType,
92
92
  primaryKey: String(primaryKey)
93
- }
93
+ },
94
+ errorDescription: "The object the user is attempting to create already exists."
94
95
  });
95
96
  }
96
97
  }
@@ -374,7 +375,8 @@ export class FauxDataStore {
374
375
  parameters: {
375
376
  objectType,
376
377
  properties: [property]
377
- }
378
+ },
379
+ errorDescription: "The requested properties are not found on the object type."
378
380
  });
379
381
  }
380
382
  if (propertyDef.dataType.type !== "mediaReference") {
@@ -386,7 +388,8 @@ export class FauxDataStore {
386
388
  parameters: {
387
389
  property,
388
390
  propertyBaseType: propertyDef.dataType.type
389
- }
391
+ },
392
+ errorDescription: "The given property type is not of the expected type."
390
393
  });
391
394
  }
392
395
  const rid = obj[property].reference.mediaSetViewItem.mediaItemRid;
@@ -399,7 +402,8 @@ export class FauxDataStore {
399
402
  property,
400
403
  propertyBaseType: propertyDef.dataType.type,
401
404
  propertyValue: rid
402
- }
405
+ },
406
+ errorDescription: "The value of the given property is invalid. See the documentation of PropertyValue for details on how properties are represented."
403
407
  });
404
408
  }
405
409
  const ret = this.#media.get(objectType).get(property).get(rid);
@@ -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","registerObject","anyObj","bso","process","env","NODE_ENV","Object","keys","some","s","startsWith","osdkCreatableToBso","apiName","__apiName","$apiName","__primaryKey","$primaryKey","others","frozenBso","freeze","get","set","#osdkCreatableToBso","meta","getObjectTypeFullMetadataOrThrow","realPrimaryKey","maybeTitle","titleProperty","rid","$rid","JSON","stringify","__title","undefined","__rid","replaceObjectOrThrow","x","oldObject","getObjectOrThrow","linksToUpdate","linksToRemove","linkDef","linkTypes","cardinality","foreignKeyPropertyApiName","colors","fkName","fkValue","oldFkValue","dstSide","getOtherLinkTypeSideV2OrThrow","dstLocator","objectTypeApiName","target","console","log","push","srcSide","srcLocator","updateSingleLinkSide","removeSingleSideOfLink","unregisterObjectOrThrow","delete","registerLink","tmpSrc","srcLinkName","tmpDst","destLinkName","src","dst","getBothLinkTypeSides","linkTypeRid","oneSide","object","link","manySide","newObj","unregisterLink","dstLinkName","extractOneManySide","registerTimeSeriesData","property","data","def","properties","dataType","type","getTimeSeriesData","filter","allData","#updateSingleLinkSide","linkNameToObj","oldLocator","Error","registerMedia","content","mediaType","path","mediaItemRid","mediaRef","mimeType","reference","mediaSetViewItem","mediaSetRid","mediaSetViewRid","metaData","sizeBytes","byteLength","getMediaOrThrow","obj","propertyDef","propertyBaseType","propertyValue","ret","#removeSingleSideOfLink","locator","linkSide","expectedPriorValue","links","has","remove","getObjectByRid","pkToObjects","getLinksOrThrow","linkApiName","linkTypeSide","getLinkTypeSideV2","locators","Array","from","map","a","split","getLinkOrThrow","linkType","targetPrimaryKey","allLinks","l","getObjectsOfType","values","getObjectsFromObjectSet","parsedBody","selected","select","objectSet","length","totalCount","nextPageToken","orderBy","sort","page","excludeRid","getAttachmentMetadata","propertyName","getAttachmentMetadataByRid","getAttachmentBuffer","applyAction","actionTypeApiName","req","actionDef","getActionDef","actionImpl","getActionImpl","validation","result","batch","r","submissionCriteria","edits","options","mode","returnEdits","objectEdits","batchApplyAction","batchReq","requests","actionType","item"],"sources":["FauxDataStore.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { CompileTimeMetadata, ObjectTypeDefinition } from \"@osdk/api\";\nimport type {\n MediaItemRid,\n MediaReference,\n MediaType,\n} from \"@osdk/foundry.core\";\nimport type * as OntologiesV2 from \"@osdk/foundry.ontologies\";\nimport { DefaultMap, MultiMap } from \"mnemonist\";\nimport * as crypto from \"node:crypto\";\nimport { randomUUID } from \"node:crypto\";\nimport { inspect } from \"node:util\";\nimport invariant from \"tiny-invariant\";\nimport type { ReadonlyDeep } from \"type-fest\";\nimport { InvalidRequest, ObjectNotFoundError } from \"../errors.js\";\nimport { subSelectProperties } from \"../filterObjects.js\";\nimport { getPaginationParamsFromRequest } from \"../handlers/util/getPaginationParams.js\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\nimport type { PagedBodyResponseWithTotal } from \"../handlers/util/pageThroughResponseSearchParams.js\";\nimport { pageThroughResponseSearchParams } from \"../handlers/util/pageThroughResponseSearchParams.js\";\nimport {\n type BaseServerObject,\n isBaseServerObject,\n} from \"./BaseServerObject.js\";\nimport type { FauxAttachmentStore } from \"./FauxAttachmentStore.js\";\nimport { FauxDataStoreBatch } from \"./FauxDataStoreBatch.js\";\nimport type { FauxOntology } from \"./FauxOntology.js\";\nimport { filterTimeSeriesData } from \"./filterTimeSeriesData.js\";\nimport { createOrderBySortFn, getObjectsFromSet } from \"./getObjectsFromSet.js\";\nimport type { ObjectLocator } from \"./ObjectLocator.js\";\nimport { objectLocator, parseLocator } from \"./ObjectLocator.js\";\nimport type { JustProps } from \"./typeHelpers/JustProps.js\";\nimport { validateAction } from \"./validateAction.js\";\n\nexport interface MediaMetadataAndContent {\n content: ArrayBuffer;\n mediaRef: MediaReference;\n metaData: OntologiesV2.MediaMetadata;\n}\n\ntype ObjectTypeCreatableWithoutApiName<T extends ObjectTypeDefinition> =\n OrUndefinedToOptional<JustProps<T>>;\n\n/**\n * Represents the properties needed to create an object, specifically,\n * the properties of the object and the $apiName\n */\ntype ObjectTypeCreatable<T extends ObjectTypeDefinition> =\n & ObjectTypeCreatableWithoutApiName<T>\n & { $apiName: CompileTimeMetadata<T>[\"apiName\"] };\n\n/**\n * Helper type for converting `foo: string | undefined` into `foo?: string`\n */\ntype OrUndefinedToOptional<T extends object> =\n & {\n [K in keyof T as T[K] extends undefined ? K : never]?: T[K];\n }\n & {\n [K in keyof T as T[K] extends undefined ? never : K]?: T[K];\n };\n\n/**\n * Type safe object for representing \"client\" side objects.\n */\ninterface BaseObjectTypeCreatable {\n $apiName?: OntologiesV2.ObjectTypeApiName;\n\n /** if present it must match the correct value */\n $primaryKey?: string | number | boolean;\n\n /** If set, will use the as the $rid for the object, otherwise one is created for you */\n $rid?: string;\n\n /**\n * All the properties.\n *\n * FUTURE: This only handles the primitive types right now. If we want to be able to create\n * objects with some helpers for other types, this will need to be updated.\n */\n [key: string]: string | number | boolean | undefined;\n}\n\nexport class FauxDataStore {\n #objects = new DefaultMap<\n OntologiesV2.ObjectTypeApiName,\n Map<string, BaseServerObject>\n >(\n (key) => new Map(),\n );\n\n #singleLinks = new DefaultMap(\n (_objectLocator: ObjectLocator) =>\n new Map<OntologiesV2.LinkTypeApiName, ObjectLocator>(),\n );\n\n #manyLinks = new DefaultMap(\n (_objectLocator: ObjectLocator) => new MultiMap<string, ObjectLocator>(Set),\n );\n\n #fauxOntology: FauxOntology;\n\n #attachments: FauxAttachmentStore;\n\n #timeSeriesData = new DefaultMap(\n (_objectType: OntologiesV2.ObjectTypeApiName) =>\n new DefaultMap((_pk: string) =>\n new DefaultMap((_property: OntologiesV2.PropertyApiName) =>\n [] as Array<OntologiesV2.TimeSeriesPoint>\n )\n ),\n );\n\n #media = new DefaultMap(\n (_objectType: OntologiesV2.ObjectTypeApiName) =>\n new DefaultMap((_propName: OntologiesV2.PropertyApiName) => {\n return new Map<MediaItemRid, MediaMetadataAndContent>();\n }),\n );\n #strict: boolean;\n\n constructor(\n fauxOntology: FauxOntology,\n attachments: FauxAttachmentStore,\n strict: boolean,\n ) {\n this.#fauxOntology = fauxOntology;\n this.#attachments = attachments;\n this.#strict = strict;\n }\n\n /**\n * Removes all data that is associated with a namespace/ontology.\n *\n * Note: does not clear `attachments` nor does it clear the ontology itself.\n */\n public clear(): void {\n this.#media.clear();\n this.#timeSeriesData.clear();\n this.#manyLinks.clear();\n this.#singleLinks.clear();\n this.#objects.clear();\n }\n\n get ontology(): FauxOntology {\n return this.#fauxOntology;\n }\n\n #assertObjectExists(\n objectType: string,\n primaryKey: string | number | boolean,\n ) {\n if (!this.getObject(objectType, primaryKey)) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(objectType, String(primaryKey)),\n );\n }\n }\n\n #assertObjectDoesNotExist(\n objectType: string,\n primaryKey: string | number | boolean,\n ): void {\n if (this.getObject(objectType, primaryKey)) {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"CONFLICT\",\n errorName: \"ObjectAlreadyExists\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n primaryKey: String(primaryKey),\n },\n } satisfies OntologiesV2.ObjectAlreadyExists,\n );\n }\n }\n\n /**\n * Version for use in places like @osdk/client.\n *\n * @param obj An `Osdk.Instance` like object for the ObjectType in the generics\n */\n registerObject<T extends ObjectTypeDefinition>(\n objectType: T,\n obj: ObjectTypeCreatable<T> | ObjectTypeCreatableWithoutApiName<T>,\n ): BaseServerObject;\n /**\n * Version of register object generally used in shared.test\n * @param obj A raw server side representation of an object\n *\n * Don't use, its too easy to end up with an any.\n */\n registerObject(obj: BaseServerObject): BaseServerObject;\n registerObject(\n objectType: string | ObjectTypeDefinition | BaseServerObject,\n anyObj?: BaseServerObject | BaseObjectTypeCreatable,\n ): BaseServerObject {\n let bso: BaseServerObject;\n // obj = { ...obj }; // make a copy so we can mutate it\n\n if (isBaseServerObject(objectType)) {\n invariant(\n anyObj == null,\n \"Internal overload should only pass one argument\",\n );\n invariant(\n !Object.keys(objectType).some(s => s.startsWith(\"$\")),\n \"Object should not have any keys starting with $ if it has __apiName\",\n );\n bso = objectType;\n } else if (anyObj == null) {\n invariant(false, \"should not be possible due to overloads\");\n } else if (isBaseServerObject(anyObj)) {\n invariant(\n !Object.keys(anyObj).some(s => s.startsWith(\"$\")),\n \"Object should not have any keys starting with $ if it has __apiName\",\n );\n bso = anyObj;\n } else {\n bso = this.#osdkCreatableToBso(objectType, anyObj);\n }\n\n const apiName = bso.__apiName || bso.$apiName;\n invariant(apiName, \"Object should have an __apiName or $apiName\");\n\n this.#assertObjectDoesNotExist(apiName, bso.__primaryKey);\n\n if (!(\"__apiName\" in bso && \"__primaryKey\" in bso)) {\n invariant(\n \"$apiName\" in bso && \"$primaryKey\" in bso,\n \"Object should have (__apiName and __primaryKey) or ($apiName and $primaryKey)\",\n );\n const { $apiName, $primaryKey, ...others } = bso as\n & {\n $apiName: OntologiesV2.ObjectTypeApiName;\n $primaryKey: string | number | boolean;\n }\n & Record<\n string,\n unknown\n >;\n bso = {\n __apiName: $apiName,\n __primaryKey: $primaryKey,\n ...others,\n };\n }\n this.#assertObjectDoesNotExist(bso.__apiName, bso.__primaryKey);\n const frozenBso = Object.freeze({ ...bso });\n this.#objects.get(bso.__apiName).set(\n String(bso.__primaryKey),\n frozenBso,\n );\n\n return frozenBso;\n }\n\n #osdkCreatableToBso(\n objectType: string | ObjectTypeDefinition,\n anyObj: BaseObjectTypeCreatable,\n ) {\n objectType = typeof objectType === \"string\"\n ? objectType\n : objectType.apiName;\n\n if (\"$apiName\" in anyObj) {\n invariant(anyObj.$apiName === objectType);\n }\n const { $apiName, $primaryKey, ...others } = anyObj;\n\n const meta = this.ontology.getObjectTypeFullMetadataOrThrow(\n objectType,\n );\n const realPrimaryKey = anyObj[meta.objectType.primaryKey] as\n | string\n | number\n | boolean;\n\n const maybeTitle = anyObj[meta.objectType.titleProperty];\n const rid = anyObj.$rid\n ?? `ri.phonograph2-objects.main.object.${crypto.randomUUID()}`;\n\n invariant(\n realPrimaryKey != null,\n `Object should have a primary key. ${JSON.stringify(anyObj)}`,\n );\n\n invariant(\n $primaryKey == null || $primaryKey === realPrimaryKey,\n \"Primary key mismatch\",\n );\n\n return {\n __apiName: objectType,\n __primaryKey: realPrimaryKey,\n __title: maybeTitle ? String(maybeTitle) : undefined,\n __rid: rid,\n ...others,\n };\n }\n\n replaceObjectOrThrow(x: BaseServerObject): void {\n const objectType = this.ontology.getObjectTypeFullMetadataOrThrow(\n x.__apiName,\n );\n const oldObject = this.getObjectOrThrow(x.__apiName, x.__primaryKey);\n\n const linksToUpdate: Array<\n {\n srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\n }\n > = [];\n\n const linksToRemove: Array<{\n srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\n }> = [];\n\n for (const linkDef of objectType.linkTypes) {\n if (linkDef.cardinality === \"ONE\") {\n invariant(\n this.#strict && linkDef.foreignKeyPropertyApiName,\n `Error examining ${objectType.objectType.apiName}.${linkDef.apiName}: ONE side of links should have a foreign key. ${\n inspect(linkDef, { colors: false })\n }`,\n );\n\n const fkName = linkDef.foreignKeyPropertyApiName;\n const fkValue = x[fkName];\n const oldFkValue = oldObject[fkName];\n\n if (oldObject[fkName] !== x[fkName]) {\n const dstSide = this.ontology.getOtherLinkTypeSideV2OrThrow(\n objectType.objectType.apiName,\n linkDef.apiName,\n );\n const dstLocator = objectLocator({\n __apiName: linkDef.objectTypeApiName,\n __primaryKey: fkValue,\n });\n\n const target = this.getObject(linkDef.objectTypeApiName, fkValue);\n\n if (fkValue != null && !target) {\n // eslint-disable-next-line no-console\n console.log(\n `WARNING! Setting a FK value to a non-existent object: ${dstLocator}`,\n );\n }\n\n if (fkValue != null) {\n linksToUpdate.push({\n dstSide,\n dstLocator,\n srcSide: linkDef,\n srcLocator: objectLocator(x),\n });\n } else {\n linksToRemove.push({\n srcLocator: objectLocator(x),\n srcSide: linkDef,\n dstLocator: objectLocator({\n __apiName: linkDef.objectTypeApiName,\n __primaryKey: oldFkValue,\n }),\n dstSide,\n });\n }\n }\n }\n }\n\n this.#objects.get(x.__apiName).set(String(x.__primaryKey), x);\n for (const { srcSide, srcLocator, dstSide, dstLocator } of linksToUpdate) {\n this.#updateSingleLinkSide(\n srcSide,\n srcLocator,\n dstSide,\n dstLocator,\n );\n this.#updateSingleLinkSide(\n dstSide,\n dstLocator,\n srcSide,\n srcLocator,\n );\n }\n\n for (const { srcSide, srcLocator, dstSide, dstLocator } of linksToRemove) {\n this.#removeSingleSideOfLink(srcLocator, srcSide, dstLocator);\n this.#removeSingleSideOfLink(dstLocator, dstSide, srcLocator);\n }\n }\n\n /** Throws if the object does not already exist */\n unregisterObjectOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n ): void {\n this.#assertObjectExists(objectType, primaryKey);\n this.#objects.get(objectType).delete(String(primaryKey));\n }\n\n registerLink(\n tmpSrc: BaseServerObject,\n srcLinkName: string,\n tmpDst: BaseServerObject,\n destLinkName: string,\n ): void {\n const src = this.getObjectOrThrow(tmpSrc.__apiName, tmpSrc.__primaryKey);\n const dst = this.getObjectOrThrow(tmpDst.__apiName, tmpDst.__primaryKey);\n\n const srcLocator = objectLocator(src);\n const dstLocator = objectLocator(dst);\n const [srcSide, dstSide] = this.#fauxOntology.getBothLinkTypeSides(\n src.__apiName,\n srcLinkName,\n dst.__apiName,\n );\n\n invariant(\n srcSide.linkTypeRid === dstSide.linkTypeRid,\n `Expected both sides of the link to have the same rid, but got ${srcSide.linkTypeRid} and ${dstSide.linkTypeRid}`,\n );\n invariant(\n dstSide.apiName === destLinkName,\n `Link name mismatch on dst side. Expected ${destLinkName} but found ${dstSide.apiName}`,\n );\n\n if (this.#strict) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? (srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide })\n : undefined;\n\n if (oneSide && manySide) {\n invariant(\n oneSide.link.foreignKeyPropertyApiName,\n `Expected to find a foreignKeyPropertyApiName on the one side: ${oneSide.object.__apiName}.${oneSide.link.apiName}`,\n );\n\n const newObj = {\n ...oneSide.object,\n [oneSide.link.foreignKeyPropertyApiName]:\n manySide.object.__primaryKey,\n };\n\n // This method call will also do the work to update the sides\n this.replaceObjectOrThrow(newObj);\n return;\n }\n }\n\n this.#updateSingleLinkSide(\n srcSide,\n srcLocator,\n dstSide,\n dstLocator,\n );\n this.#updateSingleLinkSide(\n dstSide,\n dstLocator,\n srcSide,\n srcLocator,\n );\n }\n\n unregisterLink(\n src: BaseServerObject,\n srcLinkName: string,\n dst: BaseServerObject,\n dstLinkName: string,\n ): void {\n const srcLocator = objectLocator(src);\n const dstLocator = objectLocator(dst);\n const [srcSide, dstSide] = this.#fauxOntology.getBothLinkTypeSides(\n src.__apiName,\n srcLinkName,\n dst.__apiName,\n );\n\n invariant(\n dstSide.apiName === dstLinkName,\n `Link name mismatch on dst side. Expected ${dstLinkName} but found ${dstSide.apiName}`,\n );\n\n if (this.#strict) {\n const { oneSide, manySide } = extractOneManySide(\n srcSide,\n src,\n dstSide,\n dst,\n );\n\n if (oneSide && manySide) {\n invariant(\n oneSide.link.foreignKeyPropertyApiName,\n `Expected to find a foreignKeyPropertyApiName on the one side: ${oneSide.object.__apiName}.${oneSide.link.apiName}`,\n );\n\n const newObj = {\n ...oneSide.object,\n [oneSide.link.foreignKeyPropertyApiName]: undefined,\n };\n\n // This method call will also do the work to update the sides\n this.replaceObjectOrThrow(newObj);\n return;\n }\n }\n\n this.#removeSingleSideOfLink(srcLocator, srcSide, dstLocator);\n this.#removeSingleSideOfLink(dstLocator, dstSide, srcLocator);\n }\n\n registerTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string | 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.get(objectType).get(String(primaryKey)).set(\n property,\n data,\n );\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.get(objectType).get(String(primaryKey))\n .get(\n property,\n );\n if (!filter) return allData;\n return filterTimeSeriesData(allData, filter);\n }\n\n #updateSingleLinkSide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n srcLocator: ObjectLocator,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dstLocator: ObjectLocator,\n ) {\n const srcLinkName = srcSide.apiName;\n if (srcSide.cardinality === \"ONE\") {\n const linkNameToObj = this.#singleLinks.get(srcLocator);\n const oldLocator = linkNameToObj.get(srcLinkName);\n\n if (oldLocator && oldLocator !== dstLocator) {\n // we need to remove the other side's old value\n this.#removeSingleSideOfLink(\n oldLocator,\n dstSide,\n srcLocator,\n );\n }\n linkNameToObj.set(srcLinkName, dstLocator);\n } else if (srcSide.cardinality === \"MANY\") {\n const linkNameToObj = this.#manyLinks.get(srcLocator);\n linkNameToObj.set(srcLinkName, dstLocator);\n } else {\n // \"never\" case\n throw new Error(\"unexpected cardinality: \" + srcSide.cardinality);\n }\n }\n\n registerMedia(\n objectType: OntologiesV2.ObjectTypeApiName,\n property: OntologiesV2.PropertyApiName,\n content: ArrayBuffer,\n mediaType: MediaType,\n path: string | undefined,\n // This should be the correct prefix, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001989395\n mediaItemRid: MediaItemRid = `ri.mio.main.media-item.${randomUUID()}`,\n ): MediaReference {\n const mediaRef: ReadonlyDeep<MediaReference> = Object.freeze({\n mimeType: mediaType,\n reference: Object.freeze({\n type: \"mediaSetViewItem\",\n mediaSetViewItem: Object.freeze({\n mediaItemRid,\n mediaSetRid: \"ri.unimplemented.in.shared.test\",\n mediaSetViewRid: \"ri.unimplemented.in.shared.test\",\n }),\n }),\n });\n\n this.#media.get(objectType).get(property).set(\n mediaItemRid,\n Object.freeze({\n content,\n mediaRef,\n metaData: Object.freeze({\n mediaType,\n path,\n sizeBytes: String(content.byteLength),\n }),\n }),\n );\n\n return mediaRef;\n }\n\n getMediaOrThrow(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n ): MediaMetadataAndContent {\n const obj = this.getObjectOrThrow(objectType, primaryKey);\n const propertyDef =\n this.ontology.getObjectTypeFullMetadataOrThrow(objectType)\n .objectType.properties[property];\n\n if (!propertyDef) {\n // This should be the correct error, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001968959\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"PropertiesNotFound\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n properties: [property],\n },\n } satisfies OntologiesV2.PropertiesNotFound,\n );\n }\n\n if (propertyDef.dataType.type !== \"mediaReference\") {\n // FIXME: what would the backend do here?\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyType\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n },\n } satisfies OntologiesV2.InvalidPropertyType,\n );\n }\n\n const rid = obj[property].reference.mediaSetViewItem.mediaItemRid;\n\n if (!rid || !rid.startsWith(\"ri.\")) {\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyValue\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n propertyValue: rid,\n },\n } satisfies OntologiesV2.InvalidPropertyValue,\n );\n }\n\n const ret = this.#media.get(objectType).get(property).get(rid);\n\n if (!ret) {\n throw new OpenApiCallError(400, InvalidRequest(\"Invalid parameters\"));\n }\n return ret;\n }\n\n #removeSingleSideOfLink(\n locator: ObjectLocator,\n linkSide: OntologiesV2.LinkTypeSideV2,\n expectedPriorValue: ObjectLocator,\n ) {\n const destLinkName = linkSide.apiName;\n if (linkSide.cardinality === \"ONE\") {\n const links = this.#singleLinks.get(locator);\n invariant(\n links.get(destLinkName) === expectedPriorValue,\n `Failed to remove link: expected ${\n JSON.stringify(expectedPriorValue)\n } but found ${\n JSON.stringify(links.get(destLinkName))\n } for link ${destLinkName} on ${JSON.stringify(locator)}`,\n );\n links.delete(destLinkName);\n } else {\n const links = this.#manyLinks.get(locator);\n invariant(\n links.get(destLinkName)?.has(expectedPriorValue),\n `Failed to remove link: expected collection to contain ${\n JSON.stringify(expectedPriorValue)\n } for link ${destLinkName} on ${JSON.stringify(locator)}`,\n );\n links.remove(destLinkName, expectedPriorValue);\n }\n }\n\n getObject(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject | undefined {\n return this.#objects\n .get(apiName)\n .get(String(primaryKey));\n }\n\n getObjectOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject {\n const object = this.getObject(apiName, primaryKey);\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(apiName, String(primaryKey)),\n );\n }\n return object;\n }\n\n getObjectByRid(rid: string): BaseServerObject | undefined {\n for (const [, pkToObjects] of this.#objects) {\n for (const [, obj] of pkToObjects) {\n if (obj.__rid === rid) {\n return obj;\n }\n }\n }\n }\n\n getLinksOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n linkApiName: string,\n ): BaseServerObject[] {\n const object = this.getObjectOrThrow(apiName, primaryKey);\n\n const linkTypeSide = this.#fauxOntology.getLinkTypeSideV2(\n apiName,\n linkApiName,\n );\n\n if (linkTypeSide.cardinality === \"ONE\") {\n const locator = this.#singleLinks\n .get(objectLocator(object))\n .get(linkApiName);\n if (locator === undefined) {\n return [];\n }\n const { objectType, primaryKey } = parseLocator(locator);\n\n return [this.getObjectOrThrow(objectType, primaryKey)]; // will throw if not found\n } else {\n const locators = this.#manyLinks\n .get(objectLocator(object))\n .get(linkApiName);\n\n return Array.from(locators ?? [])\n .map((a) => {\n const [objectType, primaryKey] = a.split(\":\") ?? [];\n invariant(objectType && primaryKey, \"Invalid locator format\");\n return this.getObjectOrThrow(objectType, primaryKey);\n });\n }\n }\n\n getLinkOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n linkType: string,\n targetPrimaryKey: string | number | boolean,\n ): BaseServerObject {\n const allLinks = this.getLinksOrThrow(objectType, primaryKey, linkType);\n const object =\n allLinks.filter(l => String(l.__primaryKey) === targetPrimaryKey)[0];\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(\n `${objectType} -> ${linkType}`,\n String(targetPrimaryKey),\n ),\n );\n }\n return object;\n }\n\n getObjectsOfType(apiName: string): Iterable<BaseServerObject> {\n this.ontology.getObjectTypeFullMetadataOrThrow(apiName);\n return this.#objects\n .get(apiName)\n .values();\n }\n\n getObjectsFromObjectSet(\n parsedBody:\n | OntologiesV2.LoadObjectSetV2MultipleObjectTypesRequest\n | OntologiesV2.LoadObjectSetRequestV2,\n ): PagedBodyResponseWithTotal<BaseServerObject> {\n const selected = parsedBody.select;\n // when we have interfaces in here, we have a little trick for\n // caching off the important properties\n let objects = getObjectsFromSet(this, parsedBody.objectSet, undefined);\n\n if (!objects || objects.length === 0) {\n return {\n data: [],\n totalCount: \"0\",\n nextPageToken: undefined,\n };\n }\n\n if (parsedBody.orderBy) {\n objects = objects.sort(createOrderBySortFn(parsedBody.orderBy));\n }\n\n // finally, if we got interfaces, the objects have names like the interface and we need\n // to return them like the object.\n\n const page = pageThroughResponseSearchParams(\n objects,\n getPaginationParamsFromRequest(parsedBody),\n false,\n );\n\n if (!page) {\n throw new OpenApiCallError(\n 404,\n InvalidRequest(\n `No objects found for ${JSON.stringify(parsedBody)}`,\n ),\n );\n }\n const ret = subSelectProperties(\n page,\n [...selected],\n true,\n parsedBody.excludeRid,\n );\n\n return ret;\n }\n\n getAttachmentMetadata(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): OntologiesV2.AttachmentV2 {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentMetadataByRid(rid);\n }\n\n getAttachmentBuffer(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): ArrayBuffer {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentBuffer(rid);\n }\n\n applyAction(\n actionTypeApiName: string,\n req: OntologiesV2.ApplyActionRequestV2,\n ): OntologiesV2.SyncApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n const validation = validateAction(req, actionDef, this);\n if (validation.result === \"INVALID\") {\n return { validation };\n }\n\n const batch = new FauxDataStoreBatch(this);\n const r = actionImpl(batch, req, {\n def: actionDef,\n attachments: this.#attachments,\n });\n\n // The legacy actions return the full payload\n // they want to return, so we need to do that\n // but the future is for the actionImpl's to\n // return void and to do validation details here\n if (r) return r;\n\n return {\n validation: {\n parameters: {},\n result: \"VALID\",\n submissionCriteria: [],\n },\n edits: req.options?.mode === \"VALIDATE_AND_EXECUTE\"\n && (\n req.options.returnEdits === \"ALL\"\n || req.options.returnEdits === \"ALL_V2_WITH_DELETIONS\"\n )\n ? {\n type: \"edits\",\n ...batch.objectEdits,\n }\n : undefined,\n };\n }\n\n batchApplyAction(\n actionTypeApiName: string,\n batchReq: OntologiesV2.BatchApplyActionRequestV2,\n ): OntologiesV2.BatchApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n for (const req of batchReq.requests) {\n const result = validateAction(req, actionDef, this);\n if (result.result === \"INVALID\") {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"ActionValidationFailed\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n actionType: actionTypeApiName,\n },\n } as OntologiesV2.ActionValidationFailed,\n );\n }\n }\n\n const batch = new FauxDataStoreBatch(this);\n\n const returnLargeScaleEdits = false;\n for (const item of batchReq.requests) {\n actionImpl(\n batch,\n {\n ...item,\n options: {\n mode: \"VALIDATE_AND_EXECUTE\",\n returnEdits: batchReq.options?.returnEdits,\n },\n },\n { def: actionDef, attachments: this.#attachments },\n );\n }\n if (batchReq.options?.returnEdits === \"NONE\") {\n return {};\n }\n\n if (returnLargeScaleEdits) {\n const editedObjectTypes = new Set<OntologiesV2.ObjectTypeApiName>();\n for (const edit of batch.objectEdits.edits) {\n if (\n edit.type === \"modifyObject\" || edit.type === \"addObject\"\n || edit.type === \"deleteObject\"\n ) {\n editedObjectTypes.add(edit.objectType);\n }\n }\n\n return {\n edits: {\n type: \"largeScaleEdits\",\n editedObjectTypes: Array.from(editedObjectTypes),\n },\n };\n }\n\n return {\n edits: {\n type: \"edits\",\n ...batch.objectEdits,\n edits: batch.objectEdits.edits.filter(x =>\n x.type !== \"deleteObject\" && x.type !== \"deleteLink\"\n ),\n },\n };\n }\n}\nfunction extractOneManySide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n src: BaseServerObject,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dst: BaseServerObject,\n) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? (srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide })\n : undefined;\n return { oneSide, manySide };\n}\n"],"mappings":"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;;AAKA;AACA;AACA;;AASA;AACA;AACA;;AAmBA,OAAO,MAAMC,aAAa,CAAC;EACzB,CAACC,OAAO,GAAG,IAAIrB,UAAU,CAIvB,MAAS,IAAIsB,GAAG,CAAC,CACnB,CAAC;EAED,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,CAAC,MACb,IAAIA,UAAU,CAAC,MACb,EACF,CACF,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;MACF,CACF,CAAC;IACH;EACF;;EAEA;AACF;AACA;AACA;AACA;;EAKE;AACF;AACA;AACA;AACA;AACA;;EAEES,cAAcA,CACZV,UAA4D,EAC5DW,MAAmD,EACjC;IAClB,IAAIC,GAAqB;IACzB;;IAEA,IAAIpC,kBAAkB,CAACwB,UAAU,CAAC,EAAE;MAClC,EACEW,MAAM,IAAI,IAAI,IAAAE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADhB9C,SAAS,QAEP,iDAAiD,IAFnDA,SAAS;MAIT,CACE,CAAC+C,MAAM,CAACC,IAAI,CAACjB,UAAU,CAAC,CAACkB,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAAP,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADvD9C,SAAS,QAEP,qEAAqE,IAFvEA,SAAS;MAIT2C,GAAG,GAAGZ,UAAU;IAClB,CAAC,MAAM,IAAIW,MAAM,IAAI,IAAI,EAAE;MACzBE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAA9C,SAAS,QAAQ,yCAAyC,IAA1DA,SAAS;IACX,CAAC,MAAM,IAAIO,kBAAkB,CAACmC,MAAM,CAAC,EAAE;MACrC,CACE,CAACK,MAAM,CAACC,IAAI,CAACN,MAAM,CAAC,CAACO,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAAP,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADnD9C,SAAS,QAEP,qEAAqE,IAFvEA,SAAS;MAIT2C,GAAG,GAAGD,MAAM;IACd,CAAC,MAAM;MACLC,GAAG,GAAG,IAAI,CAAC,CAACS,kBAAkB,CAACrB,UAAU,EAAEW,MAAM,CAAC;IACpD;IAEA,MAAMW,OAAO,GAAGV,GAAG,CAACW,SAAS,IAAIX,GAAG,CAACY,QAAQ;IAC7C,CAAUF,OAAO,GAAAT,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAjB9C,SAAS,QAAU,6CAA6C,IAAhEA,SAAS;IAET,IAAI,CAAC,CAACmC,wBAAwB,CAACkB,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,oBAD3C9C,SAAS,QAEP,+EAA+E,IAFjFA,SAAS;MAIT,MAAM;QAAEuD,QAAQ;QAAEE,WAAW;QAAE,GAAGC;MAAO,CAAC,GAAGf,GAQ1C;MACHA,GAAG,GAAG;QACJW,SAAS,EAAEC,QAAQ;QACnBC,YAAY,EAAEC,WAAW;QACzB,GAAGC;MACL,CAAC;IACH;IACA,IAAI,CAAC,CAACvB,wBAAwB,CAACQ,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,CAAC3B,OAAO,CAAC6C,GAAG,CAAClB,GAAG,CAACW,SAAS,CAAC,CAACQ,GAAG,CAClC5B,MAAM,CAACS,GAAG,CAACa,YAAY,CAAC,EACxBG,SACF,CAAC;IAED,OAAOA,SAAS;EAClB;EAEA,CAACP,kBAAkBW,CACjBhC,UAAyC,EACzCW,MAA+B,EAC/B;IACAX,UAAU,GAAG,OAAOA,UAAU,KAAK,QAAQ,GACvCA,UAAU,GACVA,UAAU,CAACsB,OAAO;IAEtB,IAAI,UAAU,IAAIX,MAAM,EAAE;MACxB,EAAUA,MAAM,CAACa,QAAQ,KAAKxB,UAAU,IAAAa,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAxC9C,SAAS,UAATA,SAAS;IACX;IACA,MAAM;MAAEuD,QAAQ;MAAEE,WAAW;MAAE,GAAGC;IAAO,CAAC,GAAGhB,MAAM;IAEnD,MAAMsB,IAAI,GAAG,IAAI,CAACpC,QAAQ,CAACqC,gCAAgC,CACzDlC,UACF,CAAC;IACD,MAAMmC,cAAc,GAAGxB,MAAM,CAACsB,IAAI,CAACjC,UAAU,CAACC,UAAU,CAG7C;IAEX,MAAMmC,UAAU,GAAGzB,MAAM,CAACsB,IAAI,CAACjC,UAAU,CAACqC,aAAa,CAAC;IACxD,MAAMC,GAAG,GAAG3B,MAAM,CAAC4B,IAAI,IAClB,sCAAsCzE,MAAM,CAACC,UAAU,CAAC,CAAC,EAAE;IAEhE,EACEoE,cAAc,IAAI,IAAI,IAAAtB,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADxB9C,SAAS,QAEP,qCAAqCuE,IAAI,CAACC,SAAS,CAAC9B,MAAM,CAAC,EAAE,IAF/D1C,SAAS;IAKT,EACEyD,WAAW,IAAI,IAAI,IAAIA,WAAW,KAAKS,cAAc,IAAAtB,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADvD9C,SAAS,QAEP,sBAAsB,IAFxBA,SAAS;IAKT,OAAO;MACLsD,SAAS,EAAEvB,UAAU;MACrByB,YAAY,EAAEU,cAAc;MAC5BO,OAAO,EAAEN,UAAU,GAAGjC,MAAM,CAACiC,UAAU,CAAC,GAAGO,SAAS;MACpDC,KAAK,EAAEN,GAAG;MACV,GAAGX;IACL,CAAC;EACH;EAEAkB,oBAAoBA,CAACC,CAAmB,EAAQ;IAC9C,MAAM9C,UAAU,GAAG,IAAI,CAACH,QAAQ,CAACqC,gCAAgC,CAC/DY,CAAC,CAACvB,SACJ,CAAC;IACD,MAAMwB,SAAS,GAAG,IAAI,CAACC,gBAAgB,CAACF,CAAC,CAACvB,SAAS,EAAEuB,CAAC,CAACrB,YAAY,CAAC;IAEpE,MAAMwB,aAOL,GAAG,EAAE;IAEN,MAAMC,aAKJ,GAAG,EAAE;IAEP,KAAK,MAAMC,OAAO,IAAInD,UAAU,CAACoD,SAAS,EAAE;MAC1C,IAAID,OAAO,CAACE,WAAW,KAAK,KAAK,EAAE;QACjC,EACE,IAAI,CAAC,CAAC3D,MAAM,IAAIyD,OAAO,CAACG,yBAAyB,IAAAzC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADnD9C,SAAS,QAEP,mBAAmB+B,UAAU,CAACA,UAAU,CAACsB,OAAO,IAAI6B,OAAO,CAAC7B,OAAO,kDACjEtD,OAAO,CAACmF,OAAO,EAAE;UAAEI,MAAM,EAAE;QAAM,CAAC,CAAC,EACnC,IAJJtF,SAAS;QAOT,MAAMuF,MAAM,GAAGL,OAAO,CAACG,yBAAyB;QAChD,MAAMG,OAAO,GAAGX,CAAC,CAACU,MAAM,CAAC;QACzB,MAAME,UAAU,GAAGX,SAAS,CAACS,MAAM,CAAC;QAEpC,IAAIT,SAAS,CAACS,MAAM,CAAC,KAAKV,CAAC,CAACU,MAAM,CAAC,EAAE;UACnC,MAAMG,OAAO,GAAG,IAAI,CAAC9D,QAAQ,CAAC+D,6BAA6B,CACzD5D,UAAU,CAACA,UAAU,CAACsB,OAAO,EAC7B6B,OAAO,CAAC7B,OACV,CAAC;UACD,MAAMuC,UAAU,GAAGhF,aAAa,CAAC;YAC/B0C,SAAS,EAAE4B,OAAO,CAACW,iBAAiB;YACpCrC,YAAY,EAAEgC;UAChB,CAAC,CAAC;UAEF,MAAMM,MAAM,GAAG,IAAI,CAAC7D,SAAS,CAACiD,OAAO,CAACW,iBAAiB,EAAEL,OAAO,CAAC;UAEjE,IAAIA,OAAO,IAAI,IAAI,IAAI,CAACM,MAAM,EAAE;YAC9B;YACAC,OAAO,CAACC,GAAG,CACT,yDAAyDJ,UAAU,EACrE,CAAC;UACH;UAEA,IAAIJ,OAAO,IAAI,IAAI,EAAE;YACnBR,aAAa,CAACiB,IAAI,CAAC;cACjBP,OAAO;cACPE,UAAU;cACVM,OAAO,EAAEhB,OAAO;cAChBiB,UAAU,EAAEvF,aAAa,CAACiE,CAAC;YAC7B,CAAC,CAAC;UACJ,CAAC,MAAM;YACLI,aAAa,CAACgB,IAAI,CAAC;cACjBE,UAAU,EAAEvF,aAAa,CAACiE,CAAC,CAAC;cAC5BqB,OAAO,EAAEhB,OAAO;cAChBU,UAAU,EAAEhF,aAAa,CAAC;gBACxB0C,SAAS,EAAE4B,OAAO,CAACW,iBAAiB;gBACpCrC,YAAY,EAAEiC;cAChB,CAAC,CAAC;cACFC;YACF,CAAC,CAAC;UACJ;QACF;MACF;IACF;IAEA,IAAI,CAAC,CAAC1E,OAAO,CAAC6C,GAAG,CAACgB,CAAC,CAACvB,SAAS,CAAC,CAACQ,GAAG,CAAC5B,MAAM,CAAC2C,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,CACxBF,OAAO,EACPC,UAAU,EACVT,OAAO,EACPE,UACF,CAAC;MACD,IAAI,CAAC,CAACQ,oBAAoB,CACxBV,OAAO,EACPE,UAAU,EACVM,OAAO,EACPC,UACF,CAAC;IACH;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,CACrBvE,UAAkB,EAClBC,UAAqC,EAC/B;IACN,IAAI,CAAC,CAACH,kBAAkB,CAACE,UAAU,EAAEC,UAAU,CAAC;IAChD,IAAI,CAAC,CAAChB,OAAO,CAAC6C,GAAG,CAAC9B,UAAU,CAAC,CAACwE,MAAM,CAACrE,MAAM,CAACF,UAAU,CAAC,CAAC;EAC1D;EAEAwE,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,GAAGvF,aAAa,CAACiG,GAAG,CAAC;IACrC,MAAMjB,UAAU,GAAGhF,aAAa,CAACkG,GAAG,CAAC;IACrC,MAAM,CAACZ,OAAO,EAAER,OAAO,CAAC,GAAG,IAAI,CAAC,CAACrE,YAAY,CAAC0F,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,oBAD7C9C,SAAS,QAEP,iEAAiEkG,OAAO,CAACc,WAAW,QAAQtB,OAAO,CAACsB,WAAW,EAAE,IAFnHhH,SAAS;IAIT,EACE0F,OAAO,CAACrC,OAAO,KAAKuD,YAAY,IAAAhE,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADlC9C,SAAS,QAEP,4CAA4C4G,YAAY,cAAclB,OAAO,CAACrC,OAAO,EAAE,IAFzFrD,SAAS;IAKT,IAAI,IAAI,CAAC,CAACyB,MAAM,EAAE;MAChB,MAAMwF,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,GAC9BhB,SAAS;MACb,MAAM0C,QAAQ,GAAGH,OAAO,GACnBf,OAAO,CAACd,WAAW,KAAK,MAAM,GAC7B;QAAE8B,MAAM,EAAEL,GAAG;QAAEM,IAAI,EAAEjB;MAAQ,CAAC,GAC9B;QAAEgB,MAAM,EAAEJ,GAAG;QAAEK,IAAI,EAAEzB;MAAQ,CAAC,GAChChB,SAAS;MAEb,IAAIuC,OAAO,IAAIG,QAAQ,EAAE;QACvB,CACEH,OAAO,CAACE,IAAI,CAAC9B,yBAAyB,GAAAzC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADxC9C,SAAS,QAEP,iEAAiEiH,OAAO,CAACC,MAAM,CAAC5D,SAAS,IAAI2D,OAAO,CAACE,IAAI,CAAC9D,OAAO,EAAE,IAFrHrD,SAAS;QAKT,MAAMqH,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,CAACoB,oBAAoB,CAACyC,MAAM,CAAC;QACjC;MACF;IACF;IAEA,IAAI,CAAC,CAACjB,oBAAoB,CACxBF,OAAO,EACPC,UAAU,EACVT,OAAO,EACPE,UACF,CAAC;IACD,IAAI,CAAC,CAACQ,oBAAoB,CACxBV,OAAO,EACPE,UAAU,EACVM,OAAO,EACPC,UACF,CAAC;EACH;EAEAmB,cAAcA,CACZT,GAAqB,EACrBH,WAAmB,EACnBI,GAAqB,EACrBS,WAAmB,EACb;IACN,MAAMpB,UAAU,GAAGvF,aAAa,CAACiG,GAAG,CAAC;IACrC,MAAMjB,UAAU,GAAGhF,aAAa,CAACkG,GAAG,CAAC;IACrC,MAAM,CAACZ,OAAO,EAAER,OAAO,CAAC,GAAG,IAAI,CAAC,CAACrE,YAAY,CAAC0F,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,oBADjC9C,SAAS,QAEP,4CAA4CuH,WAAW,cAAc7B,OAAO,CAACrC,OAAO,EAAE,IAFxFrD,SAAS;IAKT,IAAI,IAAI,CAAC,CAACyB,MAAM,EAAE;MAChB,MAAM;QAAEwF,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,oBADxC9C,SAAS,QAEP,iEAAiEiH,OAAO,CAACC,MAAM,CAAC5D,SAAS,IAAI2D,OAAO,CAACE,IAAI,CAAC9D,OAAO,EAAE,IAFrHrD,SAAS;QAKT,MAAMqH,MAAM,GAAG;UACb,GAAGJ,OAAO,CAACC,MAAM;UACjB,CAACD,OAAO,CAACE,IAAI,CAAC9B,yBAAyB,GAAGX;QAC5C,CAAC;;QAED;QACA,IAAI,CAACE,oBAAoB,CAACyC,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,CACpB1F,UAA0C,EAC1CC,UAA2B,EAC3B0F,QAAsC,EACtCC,IAAoC,EAC9B;IACN,IAAI,CAAC5C,gBAAgB,CAAChD,UAAU,EAAEC,UAAU,CAAC;IAC7C,MAAM4F,GAAG,GAAG,IAAI,CAAChG,QAAQ,CAACqC,gCAAgC,CAAClC,UAAU,CAAC;IACtE,EACE6F,GAAG,CAAC7F,UAAU,CAAC8F,UAAU,CAACH,QAAQ,CAAC,CAACI,QAAQ,CAACC,IAAI,KAAK,YAAY,IAC7DH,GAAG,CAAC7F,UAAU,CAAC8F,UAAU,CAACH,QAAQ,CAAC,CAACI,QAAQ,CAACC,IAAI,KAC9C,wBAAwB,IAAAnF,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAHlC9C,SAAS,UAATA,SAAS;IAKT,IAAI,CAAC,CAACuB,cAAc,CAACsC,GAAG,CAAC9B,UAAU,CAAC,CAAC8B,GAAG,CAAC3B,MAAM,CAACF,UAAU,CAAC,CAAC,CAAC8B,GAAG,CAC9D4D,QAAQ,EACRC,IACF,CAAC;EACH;EAEAK,iBAAiBA,CACfjG,UAA0C,EAC1CC,UAA2B,EAC3B0F,QAAsC,EACtCO,MAAmD,EACnB;IAChC,IAAI,CAAClD,gBAAgB,CAAChD,UAAU,EAAEC,UAAU,CAAC;IAC7C,MAAMkG,OAAO,GAAG,IAAI,CAAC,CAAC3G,cAAc,CAACsC,GAAG,CAAC9B,UAAU,CAAC,CAAC8B,GAAG,CAAC3B,MAAM,CAACF,UAAU,CAAC,CAAC,CACzE6B,GAAG,CACF6D,QACF,CAAC;IACH,IAAI,CAACO,MAAM,EAAE,OAAOC,OAAO;IAC3B,OAAOzH,oBAAoB,CAACyH,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,CAAClH,WAAW,CAAC2C,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,CAC1BgC,UAAU,EACV3C,OAAO,EACPS,UACF,CAAC;MACH;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,CAACjH,SAAS,CAAC0C,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,CACXxG,UAA0C,EAC1C2F,QAAsC,EACtCc,OAAoB,EACpBC,SAAoB,EACpBC,IAAwB;EACxB;EACA;EACAC,YAA0B,GAAG,0BAA0B7I,UAAU,CAAC,CAAC,EAAE,EACrD;IAChB,MAAM8I,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,CAACzH,KAAK,CAACqC,GAAG,CAAC9B,UAAU,CAAC,CAAC8B,GAAG,CAAC6D,QAAQ,CAAC,CAAC5D,GAAG,CAC3C6E,YAAY,EACZ5F,MAAM,CAACa,MAAM,CAAC;MACZ4E,OAAO;MACPI,QAAQ;MACRM,QAAQ,EAAEnG,MAAM,CAACa,MAAM,CAAC;QACtB6E,SAAS;QACTC,IAAI;QACJS,SAAS,EAAEjH,MAAM,CAACsG,OAAO,CAACY,UAAU;MACtC,CAAC;IACH,CAAC,CACH,CAAC;IAED,OAAOR,QAAQ;EACjB;EAEAS,eAAeA,CACbtH,UAA0C,EAC1CC,UAAkB,EAClB0F,QAAsC,EACb;IACzB,MAAM4B,GAAG,GAAG,IAAI,CAACvE,gBAAgB,CAAChD,UAAU,EAAEC,UAAU,CAAC;IACzD,MAAMuH,WAAW,GACf,IAAI,CAAC3H,QAAQ,CAACqC,gCAAgC,CAAClC,UAAU,CAAC,CACvDA,UAAU,CAAC8F,UAAU,CAACH,QAAQ,CAAC;IAEpC,IAAI,CAAC6B,WAAW,EAAE;MAChB;MACA;MACA,MAAM,IAAIlJ,gBAAgB,CACxB,GAAG,EACH;QACEgC,SAAS,EAAE,WAAW;QACtBC,SAAS,EAAE,oBAAoB;QAC/BC,eAAe,EAAE,cAAc;QAC/BC,UAAU,EAAE;UACVT,UAAU;UACV8F,UAAU,EAAE,CAACH,QAAQ;QACvB;MACF,CACF,CAAC;IACH;IAEA,IAAI6B,WAAW,CAACzB,QAAQ,CAACC,IAAI,KAAK,gBAAgB,EAAE;MAClD;MACA,MAAM,IAAI1H,gBAAgB,CACxB,GAAG,EACH;QACEgC,SAAS,EAAE,kBAAkB;QAC7BC,SAAS,EAAE,qBAAqB;QAChCC,eAAe,EAAE,cAAc;QAC/BC,UAAU,EAAE;UACVkF,QAAQ;UACR8B,gBAAgB,EAAED,WAAW,CAACzB,QAAQ,CAACC;QACzC;MACF,CACF,CAAC;IACH;IAEA,MAAM1D,GAAG,GAAGiF,GAAG,CAAC5B,QAAQ,CAAC,CAACoB,SAAS,CAACC,gBAAgB,CAACJ,YAAY;IAEjE,IAAI,CAACtE,GAAG,IAAI,CAACA,GAAG,CAAClB,UAAU,CAAC,KAAK,CAAC,EAAE;MAClC,MAAM,IAAI9C,gBAAgB,CACxB,GAAG,EACH;QACEgC,SAAS,EAAE,kBAAkB;QAC7BC,SAAS,EAAE,sBAAsB;QACjCC,eAAe,EAAE,cAAc;QAC/BC,UAAU,EAAE;UACVkF,QAAQ;UACR8B,gBAAgB,EAAED,WAAW,CAACzB,QAAQ,CAACC,IAAI;UAC3C0B,aAAa,EAAEpF;QACjB;MACF,CACF,CAAC;IACH;IAEA,MAAMqF,GAAG,GAAG,IAAI,CAAC,CAAClI,KAAK,CAACqC,GAAG,CAAC9B,UAAU,CAAC,CAAC8B,GAAG,CAAC6D,QAAQ,CAAC,CAAC7D,GAAG,CAACQ,GAAG,CAAC;IAE9D,IAAI,CAACqF,GAAG,EAAE;MACR,MAAM,IAAIrJ,gBAAgB,CAAC,GAAG,EAAEJ,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACvE;IACA,OAAOyJ,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,CAAC7I,WAAW,CAAC2C,GAAG,CAAC+F,OAAO,CAAC;MAC5C,EACEG,KAAK,CAAClG,GAAG,CAAC+C,YAAY,CAAC,KAAKkD,kBAAkB,IAAAlH,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBADhD9C,SAAS,QAEP,mCACEuE,IAAI,CAACC,SAAS,CAACsF,kBAAkB,CAAC,cAElCvF,IAAI,CAACC,SAAS,CAACuF,KAAK,CAAClG,GAAG,CAAC+C,YAAY,CAAC,CAAC,aAC5BA,YAAY,OAAOrC,IAAI,CAACC,SAAS,CAACoF,OAAO,CAAC,EAAE,IAN3D5J,SAAS;MAQT+J,KAAK,CAACxD,MAAM,CAACK,YAAY,CAAC;IAC5B,CAAC,MAAM;MACL,MAAMmD,KAAK,GAAG,IAAI,CAAC,CAAC5I,SAAS,CAAC0C,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,oBADlD9C,SAAS,QAEP,yDACEuE,IAAI,CAACC,SAAS,CAACsF,kBAAkB,CAAC,aACvBlD,YAAY,OAAOrC,IAAI,CAACC,SAAS,CAACoF,OAAO,CAAC,EAAE,IAJ3D5J,SAAS;MAMT+J,KAAK,CAACE,MAAM,CAACrD,YAAY,EAAEkD,kBAAkB,CAAC;IAChD;EACF;EAEA7H,SAASA,CACPoB,OAAe,EACfrB,UAAqC,EACP;IAC9B,OAAO,IAAI,CAAC,CAAChB,OAAO,CACjB6C,GAAG,CAACR,OAAO,CAAC,CACZQ,GAAG,CAAC3B,MAAM,CAACF,UAAU,CAAC,CAAC;EAC5B;EAEA+C,gBAAgBA,CACd1B,OAAe,EACfrB,UAAqC,EACnB;IAClB,MAAMkF,MAAM,GAAG,IAAI,CAACjF,SAAS,CAACoB,OAAO,EAAErB,UAAU,CAAC;IAElD,IAAI,CAACkF,MAAM,EAAE;MACX,MAAM,IAAI7G,gBAAgB,CACxB,GAAG,EACHH,mBAAmB,CAACmD,OAAO,EAAEnB,MAAM,CAACF,UAAU,CAAC,CACjD,CAAC;IACH;IACA,OAAOkF,MAAM;EACf;EAEAgD,cAAcA,CAAC7F,GAAW,EAAgC;IACxD,KAAK,MAAM,GAAG8F,WAAW,CAAC,IAAI,IAAI,CAAC,CAACnJ,OAAO,EAAE;MAC3C,KAAK,MAAM,GAAGsI,GAAG,CAAC,IAAIa,WAAW,EAAE;QACjC,IAAIb,GAAG,CAAC3E,KAAK,KAAKN,GAAG,EAAE;UACrB,OAAOiF,GAAG;QACZ;MACF;IACF;EACF;EAEAc,eAAeA,CACb/G,OAAe,EACfrB,UAAqC,EACrCqI,WAAmB,EACC;IACpB,MAAMnD,MAAM,GAAG,IAAI,CAACnC,gBAAgB,CAAC1B,OAAO,EAAErB,UAAU,CAAC;IAEzD,MAAMsI,YAAY,GAAG,IAAI,CAAC,CAACjJ,YAAY,CAACkJ,iBAAiB,CACvDlH,OAAO,EACPgH,WACF,CAAC;IAED,IAAIC,YAAY,CAAClF,WAAW,KAAK,KAAK,EAAE;MACtC,MAAMwE,OAAO,GAAG,IAAI,CAAC,CAAC1I,WAAW,CAC9B2C,GAAG,CAACjD,aAAa,CAACsG,MAAM,CAAC,CAAC,CAC1BrD,GAAG,CAACwG,WAAW,CAAC;MACnB,IAAIT,OAAO,KAAKlF,SAAS,EAAE;QACzB,OAAO,EAAE;MACX;MACA,MAAM;QAAE3C,UAAU;QAAEC;MAAW,CAAC,GAAGnB,YAAY,CAAC+I,OAAO,CAAC;MAExD,OAAO,CAAC,IAAI,CAAC7E,gBAAgB,CAAChD,UAAU,EAAEC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC,MAAM;MACL,MAAMwI,QAAQ,GAAG,IAAI,CAAC,CAACrJ,SAAS,CAC7B0C,GAAG,CAACjD,aAAa,CAACsG,MAAM,CAAC,CAAC,CAC1BrD,GAAG,CAACwG,WAAW,CAAC;MAEnB,OAAOI,KAAK,CAACC,IAAI,CAACF,QAAQ,IAAI,EAAE,CAAC,CAC9BG,GAAG,CAAEC,CAAC,IAAK;QACV,MAAM,CAAC7I,UAAU,EAAEC,UAAU,CAAC,GAAG4I,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;QACnD,EAAU9I,UAAU,IAAIC,UAAU,IAAAY,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAlC9C,SAAS,QAA2B,wBAAwB,IAA5DA,SAAS;QACT,OAAO,IAAI,CAAC+E,gBAAgB,CAAChD,UAAU,EAAEC,UAAU,CAAC;MACtD,CAAC,CAAC;IACN;EACF;EAEA8I,cAAcA,CACZ/I,UAAkB,EAClBC,UAAqC,EACrC+I,QAAgB,EAChBC,gBAA2C,EACzB;IAClB,MAAMC,QAAQ,GAAG,IAAI,CAACb,eAAe,CAACrI,UAAU,EAAEC,UAAU,EAAE+I,QAAQ,CAAC;IACvE,MAAM7D,MAAM,GACV+D,QAAQ,CAAChD,MAAM,CAACiD,CAAC,IAAIhJ,MAAM,CAACgJ,CAAC,CAAC1H,YAAY,CAAC,KAAKwH,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAEtE,IAAI,CAAC9D,MAAM,EAAE;MACX,MAAM,IAAI7G,gBAAgB,CACxB,GAAG,EACHH,mBAAmB,CACjB,GAAG6B,UAAU,OAAOgJ,QAAQ,EAAE,EAC9B7I,MAAM,CAAC8I,gBAAgB,CACzB,CACF,CAAC;IACH;IACA,OAAO9D,MAAM;EACf;EAEAiE,gBAAgBA,CAAC9H,OAAe,EAA8B;IAC5D,IAAI,CAACzB,QAAQ,CAACqC,gCAAgC,CAACZ,OAAO,CAAC;IACvD,OAAO,IAAI,CAAC,CAACrC,OAAO,CACjB6C,GAAG,CAACR,OAAO,CAAC,CACZ+H,MAAM,CAAC,CAAC;EACb;EAEAC,uBAAuBA,CACrBC,UAEuC,EACO;IAC9C,MAAMC,QAAQ,GAAGD,UAAU,CAACE,MAAM;IAClC;IACA;IACA,IAAIxK,OAAO,GAAGL,iBAAiB,CAAC,IAAI,EAAE2K,UAAU,CAACG,SAAS,EAAE/G,SAAS,CAAC;IAEtE,IAAI,CAAC1D,OAAO,IAAIA,OAAO,CAAC0K,MAAM,KAAK,CAAC,EAAE;MACpC,OAAO;QACL/D,IAAI,EAAE,EAAE;QACRgE,UAAU,EAAE,GAAG;QACfC,aAAa,EAAElH;MACjB,CAAC;IACH;IAEA,IAAI4G,UAAU,CAACO,OAAO,EAAE;MACtB7K,OAAO,GAAGA,OAAO,CAAC8K,IAAI,CAACpL,mBAAmB,CAAC4K,UAAU,CAACO,OAAO,CAAC,CAAC;IACjE;;IAEA;IACA;;IAEA,MAAME,IAAI,GAAGzL,+BAA+B,CAC1CU,OAAO,EACPZ,8BAA8B,CAACkL,UAAU,CAAC,EAC1C,KACF,CAAC;IAED,IAAI,CAACS,IAAI,EAAE;MACT,MAAM,IAAI1L,gBAAgB,CACxB,GAAG,EACHJ,cAAc,CACZ,wBAAwBsE,IAAI,CAACC,SAAS,CAAC8G,UAAU,CAAC,EACpD,CACF,CAAC;IACH;IACA,MAAM5B,GAAG,GAAGvJ,mBAAmB,CAC7B4L,IAAI,EACJ,CAAC,GAAGR,QAAQ,CAAC,EACb,IAAI,EACJD,UAAU,CAACU,UACb,CAAC;IAED,OAAOtC,GAAG;EACZ;EAEAuC,qBAAqBA,CACnBlK,UAAkB,EAClBC,UAAqC,EACrCkK,YAAoB,EACO;IAC3B,MAAM7H,GAAG,GAAG,IAAI,CAACU,gBAAgB,CAAChD,UAAU,EAAEC,UAAU,CAAC,CAACkK,YAAY,CAAC;IACvE,OAAO,IAAI,CAAC,CAAC5K,WAAW,CAAC6K,0BAA0B,CAAC9H,GAAG,CAAC;EAC1D;EAEA+H,mBAAmBA,CACjBrK,UAAkB,EAClBC,UAAqC,EACrCkK,YAAoB,EACP;IACb,MAAM7H,GAAG,GAAG,IAAI,CAACU,gBAAgB,CAAChD,UAAU,EAAEC,UAAU,CAAC,CAACkK,YAAY,CAAC;IACvE,OAAO,IAAI,CAAC,CAAC5K,WAAW,CAAC8K,mBAAmB,CAAC/H,GAAG,CAAC;EACnD;EAEAgI,WAAWA,CACTC,iBAAyB,EACzBC,GAAsC,EACE;IACxC,MAAMC,SAAS,GAAG,IAAI,CAAC,CAACnL,YAAY,CAACoL,YAAY,CAACH,iBAAiB,CAAC;IACpE,MAAMI,UAAU,GAAG,IAAI,CAAC,CAACrL,YAAY,CAACsL,aAAa,CAACL,iBAAiB,CAAC;IAEtE,MAAMM,UAAU,GAAG9L,cAAc,CAACyL,GAAG,EAAEC,SAAS,EAAE,IAAI,CAAC;IACvD,IAAII,UAAU,CAACC,MAAM,KAAK,SAAS,EAAE;MACnC,OAAO;QAAED;MAAW,CAAC;IACvB;IAEA,MAAME,KAAK,GAAG,IAAItM,kBAAkB,CAAC,IAAI,CAAC;IAC1C,MAAMuM,CAAC,GAAGL,UAAU,CAACI,KAAK,EAAEP,GAAG,EAAE;MAC/B3E,GAAG,EAAE4E,SAAS;MACdlL,WAAW,EAAE,IAAI,CAAC,CAACA;IACrB,CAAC,CAAC;;IAEF;IACA;IACA;IACA;IACA,IAAIyL,CAAC,EAAE,OAAOA,CAAC;IAEf,OAAO;MACLH,UAAU,EAAE;QACVpK,UAAU,EAAE,CAAC,CAAC;QACdqK,MAAM,EAAE,OAAO;QACfG,kBAAkB,EAAE;MACtB,CAAC;MACDC,KAAK,EAAEV,GAAG,CAACW,OAAO,EAAEC,IAAI,KAAK,sBAAsB,KAE7CZ,GAAG,CAACW,OAAO,CAACE,WAAW,KAAK,KAAK,IAC9Bb,GAAG,CAACW,OAAO,CAACE,WAAW,KAAK,uBAAuB,CACvD,GACD;QACArF,IAAI,EAAE,OAAO;QACb,GAAG+E,KAAK,CAACO;MACX,CAAC,GACC3I;IACN,CAAC;EACH;EAEA4I,gBAAgBA,CACdhB,iBAAyB,EACzBiB,QAAgD,EACP;IACzC,MAAMf,SAAS,GAAG,IAAI,CAAC,CAACnL,YAAY,CAACoL,YAAY,CAACH,iBAAiB,CAAC;IACpE,MAAMI,UAAU,GAAG,IAAI,CAAC,CAACrL,YAAY,CAACsL,aAAa,CAACL,iBAAiB,CAAC;IAEtE,KAAK,MAAMC,GAAG,IAAIgB,QAAQ,CAACC,QAAQ,EAAE;MACnC,MAAMX,MAAM,GAAG/L,cAAc,CAACyL,GAAG,EAAEC,SAAS,EAAE,IAAI,CAAC;MACnD,IAAIK,MAAM,CAACA,MAAM,KAAK,SAAS,EAAE;QAC/B,MAAM,IAAIxM,gBAAgB,CACxB,GAAG,EACH;UACEgC,SAAS,EAAE,kBAAkB;UAC7BC,SAAS,EAAE,wBAAwB;UACnCC,eAAe,EAAE,cAAc;UAC/BC,UAAU,EAAE;YACViL,UAAU,EAAEnB;UACd;QACF,CACF,CAAC;MACH;IACF;IAEA,MAAMQ,KAAK,GAAG,IAAItM,kBAAkB,CAAC,IAAI,CAAC;IAG1C,KAAK,MAAMkN,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;QAAElL,WAAW,EAAE,IAAI,CAAC,CAACA;MAAY,CACnD,CAAC;IACH;IACA,IAAIiM,QAAQ,CAACL,OAAO,EAAEE,WAAW,KAAK,MAAM,EAAE;MAC5C,OAAO,CAAC,CAAC;IACX;IAqBA,OAAO;MACLH,KAAK,EAAE;QACLlF,IAAI,EAAE,OAAO;QACb,GAAG+E,KAAK,CAACO,WAAW;QACpBJ,KAAK,EAAEH,KAAK,CAACO,WAAW,CAACJ,KAAK,CAAChF,MAAM,CAACpD,CAAC,IACrCA,CAAC,CAACkD,IAAI,KAAK,cAAc,IAAIlD,CAAC,CAACkD,IAAI,KAAK,YAC1C;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,GAC9BhB,SAAS;EACb,MAAM0C,QAAQ,GAAGH,OAAO,GACnBf,OAAO,CAACd,WAAW,KAAK,MAAM,GAC7B;IAAE8B,MAAM,EAAEL,GAAG;IAAEM,IAAI,EAAEjB;EAAQ,CAAC,GAC9B;IAAEgB,MAAM,EAAEJ,GAAG;IAAEK,IAAI,EAAEzB;EAAQ,CAAC,GAChChB,SAAS;EACb,OAAO;IAAEuC,OAAO;IAAEG;EAAS,CAAC;AAC9B","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","#osdkCreatableToBso","meta","getObjectTypeFullMetadataOrThrow","realPrimaryKey","maybeTitle","titleProperty","rid","$rid","JSON","stringify","__title","undefined","__rid","replaceObjectOrThrow","x","oldObject","getObjectOrThrow","linksToUpdate","linksToRemove","linkDef","linkTypes","cardinality","foreignKeyPropertyApiName","colors","fkName","fkValue","oldFkValue","dstSide","getOtherLinkTypeSideV2OrThrow","dstLocator","objectTypeApiName","target","console","log","push","srcSide","srcLocator","updateSingleLinkSide","removeSingleSideOfLink","unregisterObjectOrThrow","delete","registerLink","tmpSrc","srcLinkName","tmpDst","destLinkName","src","dst","getBothLinkTypeSides","linkTypeRid","oneSide","object","link","manySide","newObj","unregisterLink","dstLinkName","extractOneManySide","registerTimeSeriesData","property","data","def","properties","dataType","type","getTimeSeriesData","filter","allData","#updateSingleLinkSide","linkNameToObj","oldLocator","Error","registerMedia","content","mediaType","path","mediaItemRid","mediaRef","mimeType","reference","mediaSetViewItem","mediaSetRid","mediaSetViewRid","metaData","sizeBytes","byteLength","getMediaOrThrow","obj","propertyDef","propertyBaseType","propertyValue","ret","#removeSingleSideOfLink","locator","linkSide","expectedPriorValue","links","has","remove","getObjectByRid","pkToObjects","getLinksOrThrow","linkApiName","linkTypeSide","getLinkTypeSideV2","locators","Array","from","map","a","split","getLinkOrThrow","linkType","targetPrimaryKey","allLinks","l","getObjectsOfType","values","getObjectsFromObjectSet","parsedBody","selected","select","objectSet","length","totalCount","nextPageToken","orderBy","sort","page","excludeRid","getAttachmentMetadata","propertyName","getAttachmentMetadataByRid","getAttachmentBuffer","applyAction","actionTypeApiName","req","actionDef","getActionDef","actionImpl","getActionImpl","validation","result","batch","r","submissionCriteria","edits","options","mode","returnEdits","objectEdits","batchApplyAction","batchReq","requests","actionType","item"],"sources":["FauxDataStore.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { CompileTimeMetadata, ObjectTypeDefinition } from \"@osdk/api\";\nimport type {\n MediaItemRid,\n MediaReference,\n MediaType,\n} from \"@osdk/foundry.core\";\nimport type * as OntologiesV2 from \"@osdk/foundry.ontologies\";\nimport { DefaultMap, MultiMap } from \"mnemonist\";\nimport * as crypto from \"node:crypto\";\nimport { randomUUID } from \"node:crypto\";\nimport { inspect } from \"node:util\";\nimport invariant from \"tiny-invariant\";\nimport type { ReadonlyDeep } from \"type-fest\";\nimport { InvalidRequest, ObjectNotFoundError } from \"../errors.js\";\nimport { subSelectProperties } from \"../filterObjects.js\";\nimport { getPaginationParamsFromRequest } from \"../handlers/util/getPaginationParams.js\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\nimport type { PagedBodyResponseWithTotal } from \"../handlers/util/pageThroughResponseSearchParams.js\";\nimport { pageThroughResponseSearchParams } from \"../handlers/util/pageThroughResponseSearchParams.js\";\nimport {\n type BaseServerObject,\n isBaseServerObject,\n} from \"./BaseServerObject.js\";\nimport type { FauxAttachmentStore } from \"./FauxAttachmentStore.js\";\nimport { FauxDataStoreBatch } from \"./FauxDataStoreBatch.js\";\nimport type { FauxOntology } from \"./FauxOntology.js\";\nimport { filterTimeSeriesData } from \"./filterTimeSeriesData.js\";\nimport { createOrderBySortFn, getObjectsFromSet } from \"./getObjectsFromSet.js\";\nimport type { ObjectLocator } from \"./ObjectLocator.js\";\nimport { objectLocator, parseLocator } from \"./ObjectLocator.js\";\nimport type { JustProps } from \"./typeHelpers/JustProps.js\";\nimport { validateAction } from \"./validateAction.js\";\n\nexport interface MediaMetadataAndContent {\n content: ArrayBuffer;\n mediaRef: MediaReference;\n metaData: OntologiesV2.MediaMetadata;\n}\n\ntype ObjectTypeCreatableWithoutApiName<T extends ObjectTypeDefinition> =\n OrUndefinedToOptional<JustProps<T>>;\n\n/**\n * Represents the properties needed to create an object, specifically,\n * the properties of the object and the $apiName\n */\ntype ObjectTypeCreatable<T extends ObjectTypeDefinition> =\n & ObjectTypeCreatableWithoutApiName<T>\n & {\n $apiName: CompileTimeMetadata<T>[\"apiName\"];\n };\n\n/**\n * Helper type for converting `foo: string | undefined` into `foo?: string`\n */\ntype OrUndefinedToOptional<T extends object> =\n & {\n [K in keyof T as T[K] extends undefined ? K : never]?: T[K];\n }\n & {\n [K in keyof T as T[K] extends undefined ? never : K]?: T[K];\n };\n\n/**\n * Type safe object for representing \"client\" side objects.\n */\ninterface BaseObjectTypeCreatable {\n $apiName?: OntologiesV2.ObjectTypeApiName;\n\n /** if present it must match the correct value */\n $primaryKey?: string | number | boolean;\n\n /** If set, will use the as the $rid for the object, otherwise one is created for you */\n $rid?: string;\n\n /**\n * All the properties.\n *\n * FUTURE: This only handles the primitive types right now. If we want to be able to create\n * objects with some helpers for other types, this will need to be updated.\n */\n [key: string]: string | number | boolean | undefined;\n}\n\nexport class FauxDataStore {\n #objects = new DefaultMap<\n OntologiesV2.ObjectTypeApiName,\n Map<string, BaseServerObject>\n >((key) => new Map());\n\n #singleLinks = new DefaultMap(\n (_objectLocator: ObjectLocator) =>\n new Map<OntologiesV2.LinkTypeApiName, ObjectLocator>(),\n );\n\n #manyLinks = new DefaultMap(\n (_objectLocator: ObjectLocator) => new MultiMap<string, ObjectLocator>(Set),\n );\n\n #fauxOntology: FauxOntology;\n\n #attachments: FauxAttachmentStore;\n\n #timeSeriesData = new DefaultMap(\n (_objectType: OntologiesV2.ObjectTypeApiName) =>\n new DefaultMap(\n (_pk: string) =>\n new DefaultMap(\n (_property: OntologiesV2.PropertyApiName) =>\n [] as Array<OntologiesV2.TimeSeriesPoint>,\n ),\n ),\n );\n\n #media = new DefaultMap(\n (_objectType: OntologiesV2.ObjectTypeApiName) =>\n new DefaultMap((_propName: OntologiesV2.PropertyApiName) => {\n return new Map<MediaItemRid, MediaMetadataAndContent>();\n }),\n );\n #strict: boolean;\n\n constructor(\n fauxOntology: FauxOntology,\n attachments: FauxAttachmentStore,\n strict: boolean,\n ) {\n this.#fauxOntology = fauxOntology;\n this.#attachments = attachments;\n this.#strict = strict;\n }\n\n /**\n * Removes all data that is associated with a namespace/ontology.\n *\n * Note: does not clear `attachments` nor does it clear the ontology itself.\n */\n public clear(): void {\n this.#media.clear();\n this.#timeSeriesData.clear();\n this.#manyLinks.clear();\n this.#singleLinks.clear();\n this.#objects.clear();\n }\n\n get ontology(): FauxOntology {\n return this.#fauxOntology;\n }\n\n #assertObjectExists(\n objectType: string,\n primaryKey: string | number | boolean,\n ) {\n if (!this.getObject(objectType, primaryKey)) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(objectType, String(primaryKey)),\n );\n }\n }\n\n #assertObjectDoesNotExist(\n objectType: string,\n primaryKey: string | number | boolean,\n ): void {\n if (this.getObject(objectType, primaryKey)) {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"CONFLICT\",\n errorName: \"ObjectAlreadyExists\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n primaryKey: String(primaryKey),\n },\n errorDescription:\n \"The object the user is attempting to create already exists.\",\n } satisfies OntologiesV2.ObjectAlreadyExists,\n );\n }\n }\n\n /**\n * Version for use in places like @osdk/client.\n *\n * @param obj An `Osdk.Instance` like object for the ObjectType in the generics\n */\n registerObject<T extends ObjectTypeDefinition>(\n objectType: T,\n obj: ObjectTypeCreatable<T> | ObjectTypeCreatableWithoutApiName<T>,\n ): BaseServerObject;\n /**\n * Version of register object generally used in shared.test\n * @param obj A raw server side representation of an object\n *\n * Don't use, its too easy to end up with an any.\n */\n registerObject(obj: BaseServerObject): BaseServerObject;\n registerObject(\n objectType: string | ObjectTypeDefinition | BaseServerObject,\n anyObj?: BaseServerObject | BaseObjectTypeCreatable,\n ): BaseServerObject {\n let bso: BaseServerObject;\n // obj = { ...obj }; // make a copy so we can mutate it\n\n if (isBaseServerObject(objectType)) {\n invariant(\n anyObj == null,\n \"Internal overload should only pass one argument\",\n );\n invariant(\n !Object.keys(objectType).some((s) => s.startsWith(\"$\")),\n \"Object should not have any keys starting with $ if it has __apiName\",\n );\n bso = objectType;\n } else if (anyObj == null) {\n invariant(false, \"should not be possible due to overloads\");\n } else if (isBaseServerObject(anyObj)) {\n invariant(\n !Object.keys(anyObj).some((s) => s.startsWith(\"$\")),\n \"Object should not have any keys starting with $ if it has __apiName\",\n );\n bso = anyObj;\n } else {\n bso = this.#osdkCreatableToBso(objectType, anyObj);\n }\n\n const apiName = bso.__apiName || bso.$apiName;\n invariant(apiName, \"Object should have an __apiName or $apiName\");\n\n this.#assertObjectDoesNotExist(apiName, bso.__primaryKey);\n\n if (!(\"__apiName\" in bso && \"__primaryKey\" in bso)) {\n invariant(\n \"$apiName\" in bso && \"$primaryKey\" in bso,\n \"Object should have (__apiName and __primaryKey) or ($apiName and $primaryKey)\",\n );\n const { $apiName, $primaryKey, ...others } = bso as {\n $apiName: OntologiesV2.ObjectTypeApiName;\n $primaryKey: string | number | boolean;\n } & Record<string, unknown>;\n bso = {\n __apiName: $apiName,\n __primaryKey: $primaryKey,\n ...others,\n };\n }\n this.#assertObjectDoesNotExist(bso.__apiName, bso.__primaryKey);\n const frozenBso = Object.freeze({ ...bso });\n this.#objects.get(bso.__apiName).set(String(bso.__primaryKey), frozenBso);\n\n return frozenBso;\n }\n\n #osdkCreatableToBso(\n objectType: string | ObjectTypeDefinition,\n anyObj: BaseObjectTypeCreatable,\n ) {\n objectType = typeof objectType === \"string\"\n ? objectType\n : objectType.apiName;\n\n if (\"$apiName\" in anyObj) {\n invariant(anyObj.$apiName === objectType);\n }\n const { $apiName, $primaryKey, ...others } = anyObj;\n\n const meta = this.ontology.getObjectTypeFullMetadataOrThrow(objectType);\n const realPrimaryKey = anyObj[meta.objectType.primaryKey] as\n | string\n | number\n | boolean;\n\n const maybeTitle = anyObj[meta.objectType.titleProperty];\n const rid = anyObj.$rid\n ?? `ri.phonograph2-objects.main.object.${crypto.randomUUID()}`;\n\n invariant(\n realPrimaryKey != null,\n `Object should have a primary key. ${JSON.stringify(anyObj)}`,\n );\n\n invariant(\n $primaryKey == null || $primaryKey === realPrimaryKey,\n \"Primary key mismatch\",\n );\n\n return {\n __apiName: objectType,\n __primaryKey: realPrimaryKey,\n __title: maybeTitle ? String(maybeTitle) : undefined,\n __rid: rid,\n ...others,\n };\n }\n\n replaceObjectOrThrow(x: BaseServerObject): void {\n const objectType = this.ontology.getObjectTypeFullMetadataOrThrow(\n x.__apiName,\n );\n const oldObject = this.getObjectOrThrow(x.__apiName, x.__primaryKey);\n\n const linksToUpdate: Array<{\n srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\n }> = [];\n\n const linksToRemove: Array<{\n srcSide: OntologiesV2.LinkTypeSideV2;\n srcLocator: ObjectLocator;\n dstSide: OntologiesV2.LinkTypeSideV2;\n dstLocator: ObjectLocator;\n }> = [];\n\n for (const linkDef of objectType.linkTypes) {\n if (linkDef.cardinality === \"ONE\") {\n invariant(\n this.#strict && linkDef.foreignKeyPropertyApiName,\n `Error examining ${objectType.objectType.apiName}.${linkDef.apiName}: ONE side of links should have a foreign key. ${\n inspect(\n linkDef,\n { colors: false },\n )\n }`,\n );\n\n const fkName = linkDef.foreignKeyPropertyApiName;\n const fkValue = x[fkName];\n const oldFkValue = oldObject[fkName];\n\n if (oldObject[fkName] !== x[fkName]) {\n const dstSide = this.ontology.getOtherLinkTypeSideV2OrThrow(\n objectType.objectType.apiName,\n linkDef.apiName,\n );\n const dstLocator = objectLocator({\n __apiName: linkDef.objectTypeApiName,\n __primaryKey: fkValue,\n });\n\n const target = this.getObject(linkDef.objectTypeApiName, fkValue);\n\n if (fkValue != null && !target) {\n // eslint-disable-next-line no-console\n console.log(\n `WARNING! Setting a FK value to a non-existent object: ${dstLocator}`,\n );\n }\n\n if (fkValue != null) {\n linksToUpdate.push({\n dstSide,\n dstLocator,\n srcSide: linkDef,\n srcLocator: objectLocator(x),\n });\n } else {\n linksToRemove.push({\n srcLocator: objectLocator(x),\n srcSide: linkDef,\n dstLocator: objectLocator({\n __apiName: linkDef.objectTypeApiName,\n __primaryKey: oldFkValue,\n }),\n dstSide,\n });\n }\n }\n }\n }\n\n this.#objects.get(x.__apiName).set(String(x.__primaryKey), x);\n for (const { srcSide, srcLocator, dstSide, dstLocator } of linksToUpdate) {\n this.#updateSingleLinkSide(srcSide, srcLocator, dstSide, dstLocator);\n this.#updateSingleLinkSide(dstSide, dstLocator, srcSide, srcLocator);\n }\n\n for (const { srcSide, srcLocator, dstSide, dstLocator } of linksToRemove) {\n this.#removeSingleSideOfLink(srcLocator, srcSide, dstLocator);\n this.#removeSingleSideOfLink(dstLocator, dstSide, srcLocator);\n }\n }\n\n /** Throws if the object does not already exist */\n unregisterObjectOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n ): void {\n this.#assertObjectExists(objectType, primaryKey);\n this.#objects.get(objectType).delete(String(primaryKey));\n }\n\n registerLink(\n tmpSrc: BaseServerObject,\n srcLinkName: string,\n tmpDst: BaseServerObject,\n destLinkName: string,\n ): void {\n const src = this.getObjectOrThrow(tmpSrc.__apiName, tmpSrc.__primaryKey);\n const dst = this.getObjectOrThrow(tmpDst.__apiName, tmpDst.__primaryKey);\n\n const srcLocator = objectLocator(src);\n const dstLocator = objectLocator(dst);\n const [srcSide, dstSide] = this.#fauxOntology.getBothLinkTypeSides(\n src.__apiName,\n srcLinkName,\n dst.__apiName,\n );\n\n invariant(\n srcSide.linkTypeRid === dstSide.linkTypeRid,\n `Expected both sides of the link to have the same rid, but got ${srcSide.linkTypeRid} and ${dstSide.linkTypeRid}`,\n );\n invariant(\n dstSide.apiName === destLinkName,\n `Link name mismatch on dst side. Expected ${destLinkName} but found ${dstSide.apiName}`,\n );\n\n if (this.#strict) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide }\n : undefined;\n\n if (oneSide && manySide) {\n invariant(\n oneSide.link.foreignKeyPropertyApiName,\n `Expected to find a foreignKeyPropertyApiName on the one side: ${oneSide.object.__apiName}.${oneSide.link.apiName}`,\n );\n\n const newObj = {\n ...oneSide.object,\n [oneSide.link.foreignKeyPropertyApiName]:\n manySide.object.__primaryKey,\n };\n\n // This method call will also do the work to update the sides\n this.replaceObjectOrThrow(newObj);\n return;\n }\n }\n\n this.#updateSingleLinkSide(srcSide, srcLocator, dstSide, dstLocator);\n this.#updateSingleLinkSide(dstSide, dstLocator, srcSide, srcLocator);\n }\n\n unregisterLink(\n src: BaseServerObject,\n srcLinkName: string,\n dst: BaseServerObject,\n dstLinkName: string,\n ): void {\n const srcLocator = objectLocator(src);\n const dstLocator = objectLocator(dst);\n const [srcSide, dstSide] = this.#fauxOntology.getBothLinkTypeSides(\n src.__apiName,\n srcLinkName,\n dst.__apiName,\n );\n\n invariant(\n dstSide.apiName === dstLinkName,\n `Link name mismatch on dst side. Expected ${dstLinkName} but found ${dstSide.apiName}`,\n );\n\n if (this.#strict) {\n const { oneSide, manySide } = extractOneManySide(\n srcSide,\n src,\n dstSide,\n dst,\n );\n\n if (oneSide && manySide) {\n invariant(\n oneSide.link.foreignKeyPropertyApiName,\n `Expected to find a foreignKeyPropertyApiName on the one side: ${oneSide.object.__apiName}.${oneSide.link.apiName}`,\n );\n\n const newObj = {\n ...oneSide.object,\n [oneSide.link.foreignKeyPropertyApiName]: undefined,\n };\n\n // This method call will also do the work to update the sides\n this.replaceObjectOrThrow(newObj);\n return;\n }\n }\n\n this.#removeSingleSideOfLink(srcLocator, srcSide, dstLocator);\n this.#removeSingleSideOfLink(dstLocator, dstSide, srcLocator);\n }\n\n registerTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string | number,\n property: OntologiesV2.PropertyApiName,\n data: OntologiesV2.TimeSeriesPoint[],\n ): void {\n this.getObjectOrThrow(objectType, primaryKey);\n const def = this.ontology.getObjectTypeFullMetadataOrThrow(objectType);\n invariant(\n def.objectType.properties[property].dataType.type === \"timeseries\"\n || def.objectType.properties[property].dataType.type\n === \"geotimeSeriesReference\",\n );\n this.#timeSeriesData\n .get(objectType)\n .get(String(primaryKey))\n .set(property, data);\n }\n\n getTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string | number,\n property: OntologiesV2.PropertyApiName,\n filter?: OntologiesV2.StreamTimeSeriesPointsRequest,\n ): OntologiesV2.TimeSeriesPoint[] {\n this.getObjectOrThrow(objectType, primaryKey);\n const allData = this.#timeSeriesData\n .get(objectType)\n .get(String(primaryKey))\n .get(property);\n if (!filter) return allData;\n return filterTimeSeriesData(allData, filter);\n }\n\n #updateSingleLinkSide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n srcLocator: ObjectLocator,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dstLocator: ObjectLocator,\n ) {\n const srcLinkName = srcSide.apiName;\n if (srcSide.cardinality === \"ONE\") {\n const linkNameToObj = this.#singleLinks.get(srcLocator);\n const oldLocator = linkNameToObj.get(srcLinkName);\n\n if (oldLocator && oldLocator !== dstLocator) {\n // we need to remove the other side's old value\n this.#removeSingleSideOfLink(oldLocator, dstSide, srcLocator);\n }\n linkNameToObj.set(srcLinkName, dstLocator);\n } else if (srcSide.cardinality === \"MANY\") {\n const linkNameToObj = this.#manyLinks.get(srcLocator);\n linkNameToObj.set(srcLinkName, dstLocator);\n } else {\n // \"never\" case\n throw new Error(\"unexpected cardinality: \" + srcSide.cardinality);\n }\n }\n\n registerMedia(\n objectType: OntologiesV2.ObjectTypeApiName,\n property: OntologiesV2.PropertyApiName,\n content: ArrayBuffer,\n mediaType: MediaType,\n path: string | undefined,\n // This should be the correct prefix, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001989395\n mediaItemRid: MediaItemRid = `ri.mio.main.media-item.${randomUUID()}`,\n ): MediaReference {\n const mediaRef: ReadonlyDeep<MediaReference> = Object.freeze({\n mimeType: mediaType,\n reference: Object.freeze({\n type: \"mediaSetViewItem\",\n mediaSetViewItem: Object.freeze({\n mediaItemRid,\n mediaSetRid: \"ri.unimplemented.in.shared.test\",\n mediaSetViewRid: \"ri.unimplemented.in.shared.test\",\n }),\n }),\n });\n\n this.#media\n .get(objectType)\n .get(property)\n .set(\n mediaItemRid,\n Object.freeze({\n content,\n mediaRef,\n metaData: Object.freeze({\n mediaType,\n path,\n sizeBytes: String(content.byteLength),\n }),\n }),\n );\n\n return mediaRef;\n }\n\n getMediaOrThrow(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n ): MediaMetadataAndContent {\n const obj = this.getObjectOrThrow(objectType, primaryKey);\n const propertyDef =\n this.ontology.getObjectTypeFullMetadataOrThrow(objectType).objectType\n .properties[property];\n\n if (!propertyDef) {\n // This should be the correct error, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001968959\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"PropertiesNotFound\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n properties: [property],\n },\n errorDescription:\n \"The requested properties are not found on the object type.\",\n } satisfies OntologiesV2.PropertiesNotFound,\n );\n }\n\n if (propertyDef.dataType.type !== \"mediaReference\") {\n // FIXME: what would the backend do here?\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyType\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n },\n errorDescription:\n \"The given property type is not of the expected type.\",\n } satisfies OntologiesV2.InvalidPropertyType,\n );\n }\n\n const rid = obj[property].reference.mediaSetViewItem.mediaItemRid;\n\n if (!rid || !rid.startsWith(\"ri.\")) {\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyValue\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n propertyValue: rid,\n },\n errorDescription:\n \"The value of the given property is invalid. See the documentation of PropertyValue for details on how properties are represented.\",\n } satisfies OntologiesV2.InvalidPropertyValue,\n );\n }\n\n const ret = this.#media.get(objectType).get(property).get(rid);\n\n if (!ret) {\n throw new OpenApiCallError(400, InvalidRequest(\"Invalid parameters\"));\n }\n return ret;\n }\n\n #removeSingleSideOfLink(\n locator: ObjectLocator,\n linkSide: OntologiesV2.LinkTypeSideV2,\n expectedPriorValue: ObjectLocator,\n ) {\n const destLinkName = linkSide.apiName;\n if (linkSide.cardinality === \"ONE\") {\n const links = this.#singleLinks.get(locator);\n invariant(\n links.get(destLinkName) === expectedPriorValue,\n `Failed to remove link: expected ${\n JSON.stringify(\n expectedPriorValue,\n )\n } but found ${\n JSON.stringify(\n links.get(destLinkName),\n )\n } for link ${destLinkName} on ${JSON.stringify(locator)}`,\n );\n links.delete(destLinkName);\n } else {\n const links = this.#manyLinks.get(locator);\n invariant(\n links.get(destLinkName)?.has(expectedPriorValue),\n `Failed to remove link: expected collection to contain ${\n JSON.stringify(\n expectedPriorValue,\n )\n } for link ${destLinkName} on ${JSON.stringify(locator)}`,\n );\n links.remove(destLinkName, expectedPriorValue);\n }\n }\n\n getObject(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject | undefined {\n return this.#objects.get(apiName).get(String(primaryKey));\n }\n\n getObjectOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject {\n const object = this.getObject(apiName, primaryKey);\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(apiName, String(primaryKey)),\n );\n }\n return object;\n }\n\n getObjectByRid(rid: string): BaseServerObject | undefined {\n for (const [, pkToObjects] of this.#objects) {\n for (const [, obj] of pkToObjects) {\n if (obj.__rid === rid) {\n return obj;\n }\n }\n }\n }\n\n getLinksOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n linkApiName: string,\n ): BaseServerObject[] {\n const object = this.getObjectOrThrow(apiName, primaryKey);\n\n const linkTypeSide = this.#fauxOntology.getLinkTypeSideV2(\n apiName,\n linkApiName,\n );\n\n if (linkTypeSide.cardinality === \"ONE\") {\n const locator = this.#singleLinks\n .get(objectLocator(object))\n .get(linkApiName);\n if (locator === undefined) {\n return [];\n }\n const { objectType, primaryKey } = parseLocator(locator);\n\n return [this.getObjectOrThrow(objectType, primaryKey)]; // will throw if not found\n } else {\n const locators = this.#manyLinks\n .get(objectLocator(object))\n .get(linkApiName);\n\n return Array.from(locators ?? []).map((a) => {\n const [objectType, primaryKey] = a.split(\":\") ?? [];\n invariant(objectType && primaryKey, \"Invalid locator format\");\n return this.getObjectOrThrow(objectType, primaryKey);\n });\n }\n }\n\n getLinkOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n linkType: string,\n targetPrimaryKey: string | number | boolean,\n ): BaseServerObject {\n const allLinks = this.getLinksOrThrow(objectType, primaryKey, linkType);\n const object = allLinks.filter(\n (l) => String(l.__primaryKey) === targetPrimaryKey,\n )[0];\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(\n `${objectType} -> ${linkType}`,\n String(targetPrimaryKey),\n ),\n );\n }\n return object;\n }\n\n getObjectsOfType(apiName: string): Iterable<BaseServerObject> {\n this.ontology.getObjectTypeFullMetadataOrThrow(apiName);\n return this.#objects.get(apiName).values();\n }\n\n getObjectsFromObjectSet(\n parsedBody:\n | OntologiesV2.LoadObjectSetV2MultipleObjectTypesRequest\n | OntologiesV2.LoadObjectSetRequestV2,\n ): PagedBodyResponseWithTotal<BaseServerObject> {\n const selected = parsedBody.select;\n // when we have interfaces in here, we have a little trick for\n // caching off the important properties\n let objects = getObjectsFromSet(this, parsedBody.objectSet, undefined);\n\n if (!objects || objects.length === 0) {\n return {\n data: [],\n totalCount: \"0\",\n nextPageToken: undefined,\n };\n }\n\n if (parsedBody.orderBy) {\n objects = objects.sort(createOrderBySortFn(parsedBody.orderBy));\n }\n\n // finally, if we got interfaces, the objects have names like the interface and we need\n // to return them like the object.\n\n const page = pageThroughResponseSearchParams(\n objects,\n getPaginationParamsFromRequest(parsedBody),\n false,\n );\n\n if (!page) {\n throw new OpenApiCallError(\n 404,\n InvalidRequest(`No objects found for ${JSON.stringify(parsedBody)}`),\n );\n }\n const ret = subSelectProperties(\n page,\n [...selected],\n true,\n parsedBody.excludeRid,\n );\n\n return ret;\n }\n\n getAttachmentMetadata(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): OntologiesV2.AttachmentV2 {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentMetadataByRid(rid);\n }\n\n getAttachmentBuffer(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): ArrayBuffer {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentBuffer(rid);\n }\n\n applyAction(\n actionTypeApiName: string,\n req: OntologiesV2.ApplyActionRequestV2,\n ): OntologiesV2.SyncApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n const validation = validateAction(req, actionDef, this);\n if (validation.result === \"INVALID\") {\n return { validation };\n }\n\n const batch = new FauxDataStoreBatch(this);\n const r = actionImpl(batch, req, {\n def: actionDef,\n attachments: this.#attachments,\n });\n\n // The legacy actions return the full payload\n // they want to return, so we need to do that\n // but the future is for the actionImpl's to\n // return void and to do validation details here\n if (r) return r;\n\n return {\n validation: {\n parameters: {},\n result: \"VALID\",\n submissionCriteria: [],\n },\n edits: req.options?.mode === \"VALIDATE_AND_EXECUTE\"\n && (req.options.returnEdits === \"ALL\"\n || req.options.returnEdits === \"ALL_V2_WITH_DELETIONS\")\n ? {\n type: \"edits\",\n ...batch.objectEdits,\n }\n : undefined,\n };\n }\n\n batchApplyAction(\n actionTypeApiName: string,\n batchReq: OntologiesV2.BatchApplyActionRequestV2,\n ): OntologiesV2.BatchApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n for (const req of batchReq.requests) {\n const result = validateAction(req, actionDef, this);\n if (result.result === \"INVALID\") {\n throw new OpenApiCallError(500, {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"ActionValidationFailed\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n actionType: actionTypeApiName,\n },\n } as OntologiesV2.ActionValidationFailed);\n }\n }\n\n const batch = new FauxDataStoreBatch(this);\n\n const returnLargeScaleEdits = false;\n for (const item of batchReq.requests) {\n actionImpl(\n batch,\n {\n ...item,\n options: {\n mode: \"VALIDATE_AND_EXECUTE\",\n returnEdits: batchReq.options?.returnEdits,\n },\n },\n { def: actionDef, attachments: this.#attachments },\n );\n }\n if (batchReq.options?.returnEdits === \"NONE\") {\n return {};\n }\n\n if (returnLargeScaleEdits) {\n const editedObjectTypes = new Set<OntologiesV2.ObjectTypeApiName>();\n for (const edit of batch.objectEdits.edits) {\n if (\n edit.type === \"modifyObject\"\n || edit.type === \"addObject\"\n || edit.type === \"deleteObject\"\n ) {\n editedObjectTypes.add(edit.objectType);\n }\n }\n\n return {\n edits: {\n type: \"largeScaleEdits\",\n editedObjectTypes: Array.from(editedObjectTypes),\n },\n };\n }\n\n return {\n edits: {\n type: \"edits\",\n ...batch.objectEdits,\n edits: batch.objectEdits.edits.filter(\n (x) => x.type !== \"deleteObject\" && x.type !== \"deleteLink\",\n ),\n },\n };\n }\n}\nfunction extractOneManySide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n src: BaseServerObject,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dst: BaseServerObject,\n) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide }\n : undefined;\n return { oneSide, manySide };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -49,7 +49,8 @@ export class FauxDataStoreBatch {
49
49
  parameters: {
50
50
  objectType,
51
51
  primaryKey
52
- }
52
+ },
53
+ errorDescription: "The object the user is attempting to create already exists."
53
54
  });
54
55
  }
55
56
  const fullMetadata = this.#fauxDataStore.ontology.getObjectTypeFullMetadataOrThrow(objectType);
@@ -1 +1 @@
1
- {"version":3,"file":"FauxDataStoreBatch.js","names":["deepEqual","OpenApiCallError","FauxDataStoreBatch","fauxDataStore","objectEdits","addedLinksCount","addedObjectCount","deletedLinksCount","deletedObjectsCount","modifiedObjectsCount","edits","constructor","getObject","objectType","primaryKey","getObjectOrThrow","getObjects","getObjectsOfType","addObject","object","existingObject","errorCode","errorName","errorInstanceId","parameters","fullMetadata","ontology","getObjectTypeFullMetadataOrThrow","registerObject","__apiName","__primaryKey","push","type","modifyObject","update","origObj","newObj","replaceObjectOrThrow","deleteObject","unregisterObjectOrThrow","addLink","leftObjectType","leftPrimaryKey","leftLinkName","rightObjectType","rightPrimaryKey","leftTypeSideV2","rightTypeSideV2","getBothLinkTypeSides","registerLink","apiName","aSideObject","bSideObject","linkTypeApiNameAtoB","linkTypeApiNameBtoA","removeLink","unregisterLink"],"sources":["FauxDataStoreBatch.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 CompileTimeMetadata,\n ObjectTypeDefinition,\n PrimaryKeyType,\n} from \"@osdk/api\";\nimport type * as OntologiesV2 from \"@osdk/foundry.ontologies\";\nimport deepEqual from \"fast-deep-equal\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\nimport type { BaseServerObject } from \"./BaseServerObject.js\";\nimport type { FauxDataStore } from \"./FauxDataStore.js\";\nimport type { JustProps } from \"./typeHelpers/JustProps.js\";\n\n/**\n * This is separate from the FauxDataStore so that we can in the future support\n * this not-committing on errors. That functionality just does not exist at the moment\n */\nexport class FauxDataStoreBatch {\n #fauxDataStore: FauxDataStore;\n objectEdits: OntologiesV2.ObjectEdits = {\n addedLinksCount: 0,\n addedObjectCount: 0,\n deletedLinksCount: 0,\n deletedObjectsCount: 0,\n modifiedObjectsCount: 0,\n edits: [],\n };\n\n constructor(fauxDataStore: FauxDataStore) {\n this.#fauxDataStore = fauxDataStore;\n }\n\n getObject = (\n objectType: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject => {\n return this.#fauxDataStore.getObjectOrThrow(\n objectType,\n primaryKey,\n );\n };\n\n getObjects = (objectType: string): Iterable<BaseServerObject> => {\n return this.#fauxDataStore.getObjectsOfType(objectType);\n };\n\n public addObject<T extends ObjectTypeDefinition>(\n objectType: T[\"apiName\"],\n primaryKey: PrimaryKeyType<T>,\n update: Omit<JustProps<T>, CompileTimeMetadata<T>[\"primaryKeyApiName\"]>,\n ): void;\n public addObject(\n objectType: string,\n primaryKey: string | number | boolean,\n object: BaseServerObject,\n ): void;\n public addObject(\n objectType: string,\n primaryKey: string | number | boolean,\n object: BaseServerObject,\n ): void {\n const existingObject = this.#fauxDataStore.getObject(\n objectType,\n primaryKey,\n );\n if (existingObject) {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"CONFLICT\",\n errorName: \"ObjectAlreadyExists\",\n errorInstanceId: \"\",\n parameters: {\n objectType,\n primaryKey,\n },\n } satisfies OntologiesV2.ObjectAlreadyExists,\n );\n }\n\n const fullMetadata = this.#fauxDataStore.ontology\n .getObjectTypeFullMetadataOrThrow(objectType);\n\n this.#fauxDataStore.registerObject({\n ...object,\n __apiName: objectType,\n __primaryKey: primaryKey,\n [fullMetadata.objectType.primaryKey]: primaryKey,\n });\n this.objectEdits.edits.push({\n type: \"addObject\",\n primaryKey,\n objectType,\n });\n this.objectEdits.addedObjectCount += 1;\n }\n\n public modifyObject<T extends ObjectTypeDefinition>(\n objectType: T[\"apiName\"],\n primaryKey: PrimaryKeyType<T>,\n update: Partial<JustProps<T>>,\n ): void;\n public modifyObject(\n objectType: string,\n primaryKey: string | number | boolean,\n update: Partial<BaseServerObject>,\n ): void;\n public modifyObject(\n objectType: string,\n primaryKey: string | number | boolean,\n update: Partial<BaseServerObject>,\n ): void {\n const origObj = this.#fauxDataStore.getObjectOrThrow(\n objectType,\n primaryKey,\n );\n const newObj = {\n ...origObj,\n ...update,\n };\n\n if (!deepEqual(origObj, newObj)) {\n this.#fauxDataStore.replaceObjectOrThrow(newObj);\n this.objectEdits.edits.push({\n type: \"modifyObject\",\n primaryKey,\n objectType,\n });\n this.objectEdits.modifiedObjectsCount += 1;\n }\n }\n\n deleteObject = (\n objectType: string,\n primaryKey: string | number | boolean,\n ): void => {\n this.#fauxDataStore.unregisterObjectOrThrow(objectType, primaryKey);\n this.objectEdits.edits.push({\n type: \"deleteObject\",\n objectType,\n primaryKey: primaryKey,\n });\n };\n\n addLink = (\n leftObjectType: string,\n leftPrimaryKey: string | number | boolean,\n leftLinkName: string,\n rightObjectType: string,\n rightPrimaryKey: string | number | boolean,\n ): void => {\n const [leftTypeSideV2, rightTypeSideV2] = this.#fauxDataStore.ontology\n .getBothLinkTypeSides(\n leftObjectType,\n leftLinkName,\n rightObjectType,\n );\n\n this.#fauxDataStore.registerLink(\n { __apiName: leftObjectType, __primaryKey: leftPrimaryKey },\n leftTypeSideV2.apiName,\n { __apiName: rightObjectType, __primaryKey: rightPrimaryKey },\n rightTypeSideV2.apiName,\n );\n\n this.objectEdits.edits.push({\n type: \"addLink\",\n aSideObject: {\n objectType: leftObjectType,\n primaryKey: leftPrimaryKey,\n },\n bSideObject: {\n objectType: rightObjectType,\n primaryKey: rightPrimaryKey,\n },\n linkTypeApiNameAtoB: leftLinkName,\n linkTypeApiNameBtoA: rightTypeSideV2.apiName,\n });\n\n this.objectEdits.addedLinksCount += 1;\n };\n\n removeLink = (\n leftObjectType: string,\n leftPrimaryKey: string | number | boolean,\n leftLinkName: string,\n rightObjectType: string,\n rightPrimaryKey: string | number | boolean,\n ): void => {\n const [leftTypeSideV2, rightTypeSideV2] = this.#fauxDataStore.ontology\n .getBothLinkTypeSides(\n leftObjectType,\n leftLinkName,\n rightObjectType,\n );\n\n this.#fauxDataStore.unregisterLink(\n { __apiName: leftObjectType, __primaryKey: leftPrimaryKey },\n leftTypeSideV2.apiName,\n { __apiName: rightObjectType, __primaryKey: rightPrimaryKey },\n rightTypeSideV2.apiName,\n );\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FauxDataStoreBatch.js","names":["deepEqual","OpenApiCallError","FauxDataStoreBatch","fauxDataStore","objectEdits","addedLinksCount","addedObjectCount","deletedLinksCount","deletedObjectsCount","modifiedObjectsCount","edits","constructor","getObject","objectType","primaryKey","getObjectOrThrow","getObjects","getObjectsOfType","addObject","object","existingObject","errorCode","errorName","errorInstanceId","parameters","errorDescription","fullMetadata","ontology","getObjectTypeFullMetadataOrThrow","registerObject","__apiName","__primaryKey","push","type","modifyObject","update","origObj","newObj","replaceObjectOrThrow","deleteObject","unregisterObjectOrThrow","addLink","leftObjectType","leftPrimaryKey","leftLinkName","rightObjectType","rightPrimaryKey","leftTypeSideV2","rightTypeSideV2","getBothLinkTypeSides","registerLink","apiName","aSideObject","bSideObject","linkTypeApiNameAtoB","linkTypeApiNameBtoA","removeLink","unregisterLink"],"sources":["FauxDataStoreBatch.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 CompileTimeMetadata,\n ObjectTypeDefinition,\n PrimaryKeyType,\n} from \"@osdk/api\";\nimport type * as OntologiesV2 from \"@osdk/foundry.ontologies\";\nimport deepEqual from \"fast-deep-equal\";\nimport { OpenApiCallError } from \"../handlers/util/handleOpenApiCall.js\";\nimport type { BaseServerObject } from \"./BaseServerObject.js\";\nimport type { FauxDataStore } from \"./FauxDataStore.js\";\nimport type { JustProps } from \"./typeHelpers/JustProps.js\";\n\n/**\n * This is separate from the FauxDataStore so that we can in the future support\n * this not-committing on errors. That functionality just does not exist at the moment\n */\nexport class FauxDataStoreBatch {\n #fauxDataStore: FauxDataStore;\n objectEdits: OntologiesV2.ObjectEdits = {\n addedLinksCount: 0,\n addedObjectCount: 0,\n deletedLinksCount: 0,\n deletedObjectsCount: 0,\n modifiedObjectsCount: 0,\n edits: [],\n };\n\n constructor(fauxDataStore: FauxDataStore) {\n this.#fauxDataStore = fauxDataStore;\n }\n\n getObject = (\n objectType: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject => {\n return this.#fauxDataStore.getObjectOrThrow(objectType, primaryKey);\n };\n\n getObjects = (objectType: string): Iterable<BaseServerObject> => {\n return this.#fauxDataStore.getObjectsOfType(objectType);\n };\n\n public addObject<T extends ObjectTypeDefinition>(\n objectType: T[\"apiName\"],\n primaryKey: PrimaryKeyType<T>,\n update: Omit<JustProps<T>, CompileTimeMetadata<T>[\"primaryKeyApiName\"]>,\n ): void;\n public addObject(\n objectType: string,\n primaryKey: string | number | boolean,\n object: BaseServerObject,\n ): void;\n public addObject(\n objectType: string,\n primaryKey: string | number | boolean,\n object: BaseServerObject,\n ): void {\n const existingObject = this.#fauxDataStore.getObject(\n objectType,\n primaryKey,\n );\n if (existingObject) {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"CONFLICT\",\n errorName: \"ObjectAlreadyExists\",\n errorInstanceId: \"\",\n parameters: {\n objectType,\n primaryKey,\n },\n errorDescription:\n \"The object the user is attempting to create already exists.\",\n } satisfies OntologiesV2.ObjectAlreadyExists,\n );\n }\n\n const fullMetadata = this.#fauxDataStore.ontology\n .getObjectTypeFullMetadataOrThrow(objectType);\n\n this.#fauxDataStore.registerObject({\n ...object,\n __apiName: objectType,\n __primaryKey: primaryKey,\n [fullMetadata.objectType.primaryKey]: primaryKey,\n });\n this.objectEdits.edits.push({\n type: \"addObject\",\n primaryKey,\n objectType,\n });\n this.objectEdits.addedObjectCount += 1;\n }\n\n public modifyObject<T extends ObjectTypeDefinition>(\n objectType: T[\"apiName\"],\n primaryKey: PrimaryKeyType<T>,\n update: Partial<JustProps<T>>,\n ): void;\n public modifyObject(\n objectType: string,\n primaryKey: string | number | boolean,\n update: Partial<BaseServerObject>,\n ): void;\n public modifyObject(\n objectType: string,\n primaryKey: string | number | boolean,\n update: Partial<BaseServerObject>,\n ): void {\n const origObj = this.#fauxDataStore.getObjectOrThrow(\n objectType,\n primaryKey,\n );\n const newObj = {\n ...origObj,\n ...update,\n };\n\n if (!deepEqual(origObj, newObj)) {\n this.#fauxDataStore.replaceObjectOrThrow(newObj);\n this.objectEdits.edits.push({\n type: \"modifyObject\",\n primaryKey,\n objectType,\n });\n this.objectEdits.modifiedObjectsCount += 1;\n }\n }\n\n deleteObject = (\n objectType: string,\n primaryKey: string | number | boolean,\n ): void => {\n this.#fauxDataStore.unregisterObjectOrThrow(objectType, primaryKey);\n this.objectEdits.edits.push({\n type: \"deleteObject\",\n objectType,\n primaryKey: primaryKey,\n });\n };\n\n addLink = (\n leftObjectType: string,\n leftPrimaryKey: string | number | boolean,\n leftLinkName: string,\n rightObjectType: string,\n rightPrimaryKey: string | number | boolean,\n ): void => {\n const [leftTypeSideV2, rightTypeSideV2] = this.#fauxDataStore.ontology\n .getBothLinkTypeSides(\n leftObjectType,\n leftLinkName,\n rightObjectType,\n );\n\n this.#fauxDataStore.registerLink(\n { __apiName: leftObjectType, __primaryKey: leftPrimaryKey },\n leftTypeSideV2.apiName,\n { __apiName: rightObjectType, __primaryKey: rightPrimaryKey },\n rightTypeSideV2.apiName,\n );\n\n this.objectEdits.edits.push({\n type: \"addLink\",\n aSideObject: {\n objectType: leftObjectType,\n primaryKey: leftPrimaryKey,\n },\n bSideObject: {\n objectType: rightObjectType,\n primaryKey: rightPrimaryKey,\n },\n linkTypeApiNameAtoB: leftLinkName,\n linkTypeApiNameBtoA: rightTypeSideV2.apiName,\n });\n\n this.objectEdits.addedLinksCount += 1;\n };\n\n removeLink = (\n leftObjectType: string,\n leftPrimaryKey: string | number | boolean,\n leftLinkName: string,\n rightObjectType: string,\n rightPrimaryKey: string | number | boolean,\n ): void => {\n const [leftTypeSideV2, rightTypeSideV2] = this.#fauxDataStore.ontology\n .getBothLinkTypeSides(\n leftObjectType,\n leftLinkName,\n rightObjectType,\n );\n\n this.#fauxDataStore.unregisterLink(\n { __apiName: leftObjectType, __primaryKey: leftPrimaryKey },\n leftTypeSideV2.apiName,\n { __apiName: rightObjectType, __primaryKey: rightPrimaryKey },\n rightTypeSideV2.apiName,\n );\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"handleOpenApiCall.js","names":["http","HttpResponse","authHandlerMiddleware","OpenApiCallError","Error","constructor","status","json","errorCode","errorName","JSON","stringify","parameters","handleOpenApiCall","openApiCall","names","baseUrl","restImpl","options","captured","fetch","url","req","u","URL","search","method","endPoint","toString","replace","ok","Promise","resolve","blob","Blob","map","n","type","size","toLowerCase","info","result","Response","body","e","stack","statusText","message"],"sources":["handleOpenApiCall.ts"],"sourcesContent":["/*\n * Copyright 2024 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 DefaultBodyType,\n HttpHandler,\n HttpResponseResolver,\n RequestHandlerOptions,\n} from \"msw\";\nimport { http, HttpResponse } from \"msw\";\nimport type { BaseAPIError } from \"../../BaseError.js\";\nimport { authHandlerMiddleware } from \"../authHandlerMiddleware.js\";\n\nexport class OpenApiCallError extends Error {\n constructor(\n public status: number,\n public json: {\n errorCode: string;\n errorName: string;\n errorInstanceId: string;\n parameters: Record<string, unknown>;\n },\n ) {\n super(\n `${json.errorCode} ${json.errorName ?? \"Unknown error\"} ${\n JSON.stringify(json.parameters)\n }`,\n );\n }\n}\n\ntype ExtractStringParams<T extends any[]> = T extends [infer A, ...infer B]\n ? A extends string ? [A, ...ExtractStringParams<B>] : []\n : [];\n\nexport type SkipStringParams<T extends any[]> = T extends [infer A, ...infer B]\n ? A extends string ? SkipStringParams<B> : T\n : T;\n\n/**\n * This relies on a trick that generally our query params and header params are optional therefore\n * the body can generally be assumed to be the first payload following the strings which are path\n * params.\n *\n * This will also fail if your body is defined as a string as that will get interpreted as a path param.\n * If this happens, you cannot use the helper. Sorry\n */\nexport type ExtractBody<\n X extends ((reqCall: any, ...args: any[]) => Promise<any>),\n> = undefined extends SkipStringParams<ParamsAfterReqCall<X>>[0] ? never\n : SkipStringParams<ParamsAfterReqCall<X>>[0];\n\nexport type ExtractResponse<\n X extends ((...args: any[]) => Promise<any>),\n> = Awaited<ReturnType<X>>;\n\nexport type ParamsAfterReqCall<\n T extends (reqCall: any, ...args: any[]) => Promise<any>,\n> = T extends (reqCall: any, ...args: infer Z) => Promise<any> ? Z : never;\n\nexport type RestImpl<\n URL_PARAMS extends string,\n REQ_BODY extends DefaultBodyType,\n RESP_BODY extends DefaultBodyType,\n> = (\n info: Parameters<\n HttpResponseResolver<\n Record<URL_PARAMS, string>,\n REQ_BODY,\n RESP_BODY | BaseAPIError\n >\n >[0],\n) => RESP_BODY | Promise<RESP_BODY>;\n\nexport type OpenApiCallFactory<\n URL_PARAMS extends string,\n REQ_BODY extends DefaultBodyType,\n RESP_BODY extends DefaultBodyType,\n> = (\n baseUrl: string,\n restImpl: RestImpl<URL_PARAMS, REQ_BODY, RESP_BODY>,\n options?: RequestHandlerOptions,\n) => HttpHandler;\n\nexport type CallFactory<\n URL_PARAMS extends string,\n X extends ((...args: any[]) => Promise<any>),\n> = (\n baseUrl: string,\n restImpl: RestImpl<URL_PARAMS, ExtractBody<X>, ExtractResponse<X>>,\n options?: RequestHandlerOptions,\n) => HttpHandler;\n\nexport function handleOpenApiCall<\n const N extends ExtractStringParams<ParamsAfterReqCall<X>>,\n const X extends ((...args: any[]) => Promise<any>),\n>(\n openApiCall: X,\n names: N,\n): CallFactory<N[number], X> {\n return (\n baseUrl: string,\n restImpl: RestImpl<N[number], ExtractBody<X>, ExtractResponse<X>>,\n options?: RequestHandlerOptions,\n ): HttpHandler => {\n let captured: {\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n endPoint: string;\n data?: any;\n queryArguments?: Record<string, any>;\n headers?: Record<string, any>;\n requestMediaType?: string;\n responseMediaType?: string;\n } = {} as any;\n\n const capture = {\n fetch: (url: string, req: Request) => {\n const u = new URL(url);\n u.search = \"\"; // msw doesn't want the search string\n captured = {\n method: req.method as any,\n endPoint: u.toString().replace(/%3A/g, \":\"),\n };\n\n // fake a response object so the call doesn't fail\n return {\n ok: true,\n json: () => Promise.resolve({}),\n blob: () => new Blob(),\n };\n },\n baseUrl,\n };\n\n // we don't care about the promise here, we are just building the url\n void openApiCall(\n capture as any,\n ...(names.map(n => `:${n}`) as any),\n // add a simulated blob in here in case of an upload\n { type: \"\", size: 5 },\n );\n\n return http\n [captured.method.toLowerCase() as Lowercase<typeof captured.method>](\n captured.endPoint,\n authHandlerMiddleware(async (info) => {\n try {\n const result: any = await restImpl(\n info as any,\n );\n\n if (result instanceof Response) {\n return new HttpResponse(result.body) as HttpResponse<\n DefaultBodyType\n >;\n }\n return HttpResponse.json(\n result,\n );\n } catch (e) {\n if (e instanceof OpenApiCallError) {\n return HttpResponse.json({ ...e.json, stack: e.stack }, {\n status: e.status,\n statusText: e.message,\n });\n }\n throw e;\n }\n }),\n options,\n );\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,SAASA,IAAI,EAAEC,YAAY,QAAQ,KAAK;AAExC,SAASC,qBAAqB,QAAQ,6BAA6B;AAEnE,OAAO,MAAMC,gBAAgB,SAASC,KAAK,CAAC;EAC1CC,WAAWA,CACFC,MAAc,EACdC,IAKN,EACD;IACA,KAAK,CACH,GAAGA,IAAI,CAACC,SAAS,IAAID,IAAI,CAACE,SAAS,IAAI,eAAe,IACpDC,IAAI,CAACC,SAAS,CAACJ,IAAI,CAACK,UAAU,CAAC,EAEnC,CAAC;IAAC,KAZKN,MAAc,GAAdA,MAAc;IAAA,KACdC,IAKN,GALMA,IAKN;EAOH;AACF;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA+CA,OAAO,SAASM,iBAAiBA,CAI/BC,WAAc,EACdC,KAAQ,EACmB;EAC3B,OAAO,CACLC,OAAe,EACfC,QAAiE,EACjEC,OAA+B,KACf;IAChB,IAAIC,QAQH,GAAG,CAAC,CAAQ;IAqBb;IACA,KAAKL,WAAW,CApBA;MACdM,KAAK,EAAEA,CAACC,GAAW,EAAEC,GAAY,KAAK;QACpC,MAAMC,CAAC,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;QACtBE,CAAC,CAACE,MAAM,GAAG,EAAE,CAAC,CAAC;QACfN,QAAQ,GAAG;UACTO,MAAM,EAAEJ,GAAG,CAACI,MAAa;UACzBC,QAAQ,EAAEJ,CAAC,CAACK,QAAQ,CAAC,CAAC,CAACC,OAAO,CAAC,MAAM,EAAE,GAAG;QAC5C,CAAC;;QAED;QACA,OAAO;UACLC,EAAE,EAAE,IAAI;UACRvB,IAAI,EAAEA,CAAA,KAAMwB,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;UAC/BC,IAAI,EAAEA,CAAA,KAAM,IAAIC,IAAI,CAAC;QACvB,CAAC;MACH,CAAC;MACDlB;IACF,CAAC,EAKC,GAAID,KAAK,CAACoB,GAAG,CAACC,CAAC,IAAI,IAAIA,CAAC,EAAE,CAAS;IACnC;IACA;MAAEC,IAAI,EAAE,EAAE;MAAEC,IAAI,EAAE;IAAE,CACtB,CAAC;IAED,OAAOtC,IAAI,CACRmB,QAAQ,CAACO,MAAM,CAACa,WAAW,CAAC,CAAC,CAAsC,CAClEpB,QAAQ,CAACQ,QAAQ,EACjBzB,qBAAqB,CAAC,MAAOsC,IAAI,IAAK;MACpC,IAAI;QACF,MAAMC,MAAW,GAAG,MAAMxB,QAAQ,CAChCuB,IACF,CAAC;QAED,IAAIC,MAAM,YAAYC,QAAQ,EAAE;UAC9B,OAAO,IAAIzC,YAAY,CAACwC,MAAM,CAACE,IAAI,CAAC;QAGtC;QACA,OAAO1C,YAAY,CAACM,IAAI,CACtBkC,MACF,CAAC;MACH,CAAC,CAAC,OAAOG,CAAC,EAAE;QACV,IAAIA,CAAC,YAAYzC,gBAAgB,EAAE;UACjC,OAAOF,YAAY,CAACM,IAAI,CAAC;YAAE,GAAGqC,CAAC,CAACrC,IAAI;YAAEsC,KAAK,EAAED,CAAC,CAACC;UAAM,CAAC,EAAE;YACtDvC,MAAM,EAAEsC,CAAC,CAACtC,MAAM;YAChBwC,UAAU,EAAEF,CAAC,CAACG;UAChB,CAAC,CAAC;QACJ;QACA,MAAMH,CAAC;MACT;IACF,CAAC,CAAC,EACF1B,OACF,CAAC;EACL,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"handleOpenApiCall.js","names":["http","HttpResponse","authHandlerMiddleware","OpenApiCallError","Error","constructor","status","json","errorCode","errorName","JSON","stringify","parameters","handleOpenApiCall","openApiCall","names","baseUrl","restImpl","options","captured","fetch","url","req","u","URL","search","method","endPoint","toString","replace","ok","Promise","resolve","blob","Blob","map","n","type","size","toLowerCase","info","result","Response","body","e","stack","statusText","message"],"sources":["handleOpenApiCall.ts"],"sourcesContent":["/*\n * Copyright 2024 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 DefaultBodyType,\n HttpHandler,\n HttpResponseResolver,\n RequestHandlerOptions,\n} from \"msw\";\nimport { http, HttpResponse } from \"msw\";\nimport type { BaseAPIError } from \"../../BaseError.js\";\nimport { authHandlerMiddleware } from \"../authHandlerMiddleware.js\";\n\nexport class OpenApiCallError extends Error {\n constructor(\n public status: number,\n public json: {\n errorCode: string;\n errorName: string;\n errorInstanceId: string;\n errorDescription?: string;\n parameters: Record<string, unknown>;\n },\n ) {\n super(\n `${json.errorCode} ${json.errorName ?? \"Unknown error\"} ${\n JSON.stringify(\n json.parameters,\n )\n }`,\n );\n }\n}\n\ntype ExtractStringParams<T extends any[]> = T extends [infer A, ...infer B]\n ? A extends string ? [A, ...ExtractStringParams<B>]\n : []\n : [];\n\nexport type SkipStringParams<T extends any[]> = T extends [infer A, ...infer B]\n ? A extends string ? SkipStringParams<B>\n : T\n : T;\n\n/**\n * This relies on a trick that generally our query params and header params are optional therefore\n * the body can generally be assumed to be the first payload following the strings which are path\n * params.\n *\n * This will also fail if your body is defined as a string as that will get interpreted as a path param.\n * If this happens, you cannot use the helper. Sorry\n */\nexport type ExtractBody<\n X extends (reqCall: any, ...args: any[]) => Promise<any>,\n> = undefined extends SkipStringParams<ParamsAfterReqCall<X>>[0] ? never\n : SkipStringParams<ParamsAfterReqCall<X>>[0];\n\nexport type ExtractResponse<X extends (...args: any[]) => Promise<any>> =\n Awaited<ReturnType<X>>;\n\nexport type ParamsAfterReqCall<\n T extends (reqCall: any, ...args: any[]) => Promise<any>,\n> = T extends (reqCall: any, ...args: infer Z) => Promise<any> ? Z : never;\n\nexport type RestImpl<\n URL_PARAMS extends string,\n REQ_BODY extends DefaultBodyType,\n RESP_BODY extends DefaultBodyType,\n> = (\n info: Parameters<\n HttpResponseResolver<\n Record<URL_PARAMS, string>,\n REQ_BODY,\n RESP_BODY | BaseAPIError\n >\n >[0],\n) => RESP_BODY | Promise<RESP_BODY>;\n\nexport type OpenApiCallFactory<\n URL_PARAMS extends string,\n REQ_BODY extends DefaultBodyType,\n RESP_BODY extends DefaultBodyType,\n> = (\n baseUrl: string,\n restImpl: RestImpl<URL_PARAMS, REQ_BODY, RESP_BODY>,\n options?: RequestHandlerOptions,\n) => HttpHandler;\n\nexport type CallFactory<\n URL_PARAMS extends string,\n X extends (...args: any[]) => Promise<any>,\n> = (\n baseUrl: string,\n restImpl: RestImpl<URL_PARAMS, ExtractBody<X>, ExtractResponse<X>>,\n options?: RequestHandlerOptions,\n) => HttpHandler;\n\nexport function handleOpenApiCall<\n const N extends ExtractStringParams<ParamsAfterReqCall<X>>,\n const X extends (...args: any[]) => Promise<any>,\n>(openApiCall: X, names: N): CallFactory<N[number], X> {\n return (\n baseUrl: string,\n restImpl: RestImpl<N[number], ExtractBody<X>, ExtractResponse<X>>,\n options?: RequestHandlerOptions,\n ): HttpHandler => {\n let captured: {\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n endPoint: string;\n data?: any;\n queryArguments?: Record<string, any>;\n headers?: Record<string, any>;\n requestMediaType?: string;\n responseMediaType?: string;\n } = {} as any;\n\n const capture = {\n fetch: (url: string, req: Request) => {\n const u = new URL(url);\n u.search = \"\"; // msw doesn't want the search string\n captured = {\n method: req.method as any,\n endPoint: u.toString().replace(/%3A/g, \":\"),\n };\n\n // fake a response object so the call doesn't fail\n return {\n ok: true,\n json: () => Promise.resolve({}),\n blob: () => new Blob(),\n };\n },\n baseUrl,\n };\n\n // we don't care about the promise here, we are just building the url\n void openApiCall(\n capture as any,\n ...(names.map((n) => `:${n}`) as any),\n // add a simulated blob in here in case of an upload\n { type: \"\", size: 5 },\n );\n\n return http[\n captured.method.toLowerCase() as Lowercase<typeof captured.method>\n ](\n captured.endPoint,\n authHandlerMiddleware(async (info) => {\n try {\n const result: any = await restImpl(info as any);\n\n if (result instanceof Response) {\n return new HttpResponse(\n result.body,\n ) as HttpResponse<DefaultBodyType>;\n }\n return HttpResponse.json(result);\n } catch (e) {\n if (e instanceof OpenApiCallError) {\n return HttpResponse.json(\n { ...e.json, stack: e.stack },\n {\n status: e.status,\n statusText: e.message,\n },\n );\n }\n throw e;\n }\n }),\n options,\n );\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,SAASA,IAAI,EAAEC,YAAY,QAAQ,KAAK;AAExC,SAASC,qBAAqB,QAAQ,6BAA6B;AAEnE,OAAO,MAAMC,gBAAgB,SAASC,KAAK,CAAC;EAC1CC,WAAWA,CACFC,MAAc,EACdC,IAMN,EACD;IACA,KAAK,CACH,GAAGA,IAAI,CAACC,SAAS,IAAID,IAAI,CAACE,SAAS,IAAI,eAAe,IACpDC,IAAI,CAACC,SAAS,CACZJ,IAAI,CAACK,UACP,CAAC,EAEL,CAAC;IAAC,KAfKN,MAAc,GAAdA,MAAc;IAAA,KACdC,IAMN,GANMA,IAMN;EASH;AACF;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA8CA,OAAO,SAASM,iBAAiBA,CAG/BC,WAAc,EAAEC,KAAQ,EAA6B;EACrD,OAAO,CACLC,OAAe,EACfC,QAAiE,EACjEC,OAA+B,KACf;IAChB,IAAIC,QAQH,GAAG,CAAC,CAAQ;IAqBb;IACA,KAAKL,WAAW,CApBA;MACdM,KAAK,EAAEA,CAACC,GAAW,EAAEC,GAAY,KAAK;QACpC,MAAMC,CAAC,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;QACtBE,CAAC,CAACE,MAAM,GAAG,EAAE,CAAC,CAAC;QACfN,QAAQ,GAAG;UACTO,MAAM,EAAEJ,GAAG,CAACI,MAAa;UACzBC,QAAQ,EAAEJ,CAAC,CAACK,QAAQ,CAAC,CAAC,CAACC,OAAO,CAAC,MAAM,EAAE,GAAG;QAC5C,CAAC;;QAED;QACA,OAAO;UACLC,EAAE,EAAE,IAAI;UACRvB,IAAI,EAAEA,CAAA,KAAMwB,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;UAC/BC,IAAI,EAAEA,CAAA,KAAM,IAAIC,IAAI,CAAC;QACvB,CAAC;MACH,CAAC;MACDlB;IACF,CAAC,EAKC,GAAID,KAAK,CAACoB,GAAG,CAAEC,CAAC,IAAK,IAAIA,CAAC,EAAE,CAAS;IACrC;IACA;MAAEC,IAAI,EAAE,EAAE;MAAEC,IAAI,EAAE;IAAE,CACtB,CAAC;IAED,OAAOtC,IAAI,CACTmB,QAAQ,CAACO,MAAM,CAACa,WAAW,CAAC,CAAC,CAC9B,CACCpB,QAAQ,CAACQ,QAAQ,EACjBzB,qBAAqB,CAAC,MAAOsC,IAAI,IAAK;MACpC,IAAI;QACF,MAAMC,MAAW,GAAG,MAAMxB,QAAQ,CAACuB,IAAW,CAAC;QAE/C,IAAIC,MAAM,YAAYC,QAAQ,EAAE;UAC9B,OAAO,IAAIzC,YAAY,CACrBwC,MAAM,CAACE,IACT,CAAC;QACH;QACA,OAAO1C,YAAY,CAACM,IAAI,CAACkC,MAAM,CAAC;MAClC,CAAC,CAAC,OAAOG,CAAC,EAAE;QACV,IAAIA,CAAC,YAAYzC,gBAAgB,EAAE;UACjC,OAAOF,YAAY,CAACM,IAAI,CACtB;YAAE,GAAGqC,CAAC,CAACrC,IAAI;YAAEsC,KAAK,EAAED,CAAC,CAACC;UAAM,CAAC,EAC7B;YACEvC,MAAM,EAAEsC,CAAC,CAACtC,MAAM;YAChBwC,UAAU,EAAEF,CAAC,CAACG;UAChB,CACF,CAAC;QACH;QACA,MAAMH,CAAC;MACT;IACF,CAAC,CAAC,EACF1B,OACF,CAAC;EACH,CAAC;AACH","ignoreList":[]}