@osdk/faux 0.3.0-beta.3 → 0.3.0-beta.5

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,31 @@
1
1
  # @osdk/shared.test
2
2
 
3
+ ## 0.3.0-beta.5
4
+
5
+ ### Minor Changes
6
+
7
+ - 3d7461d: Fix applyQuery for marketplace installations
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [052a96b]
12
+ - @osdk/api@2.5.0-beta.5
13
+ - @osdk/generator-converters@2.5.0-beta.5
14
+
15
+ ## 0.3.0-beta.4
16
+
17
+ ### Minor Changes
18
+
19
+ - a00d2ed: Update Platform SDK dependencies
20
+ - a96d89e: Update Platform SDK dependencies
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies [a00d2ed]
25
+ - Updated dependencies [a96d89e]
26
+ - @osdk/generator-converters@2.5.0-beta.4
27
+ - @osdk/api@2.5.0-beta.4
28
+
3
29
  ## 0.3.0-beta.3
4
30
 
5
31
  ### Minor Changes
@@ -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,\n property: OntologiesV2.PropertyApiName,\n data: OntologiesV2.TimeSeriesPoint[],\n ): void {\n this.getObjectOrThrow(objectType, primaryKey);\n const def = this.ontology.getObjectTypeFullMetadataOrThrow(objectType);\n invariant(\n def.objectType.properties[property].dataType.type === \"timeseries\"\n || def.objectType.properties[property].dataType.type\n === \"geotimeSeriesReference\",\n );\n this.#timeSeriesData.get(objectType).get(String(primaryKey)).set(\n property,\n data,\n );\n }\n\n getTimeSeriesData(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n filter?: OntologiesV2.StreamTimeSeriesPointsRequest,\n ): OntologiesV2.TimeSeriesPoint[] {\n this.getObjectOrThrow(objectType, primaryKey);\n const allData = this.#timeSeriesData.get(objectType).get(String(primaryKey))\n .get(\n property,\n );\n if (!filter) return allData;\n return filterTimeSeriesData(allData, filter);\n }\n\n #updateSingleLinkSide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n srcLocator: ObjectLocator,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dstLocator: ObjectLocator,\n ) {\n const srcLinkName = srcSide.apiName;\n if (srcSide.cardinality === \"ONE\") {\n const linkNameToObj = this.#singleLinks.get(srcLocator);\n const oldLocator = linkNameToObj.get(srcLinkName);\n\n if (oldLocator && oldLocator !== dstLocator) {\n // we need to remove the other side's old value\n this.#removeSingleSideOfLink(\n oldLocator,\n dstSide,\n srcLocator,\n );\n }\n linkNameToObj.set(srcLinkName, dstLocator);\n } else if (srcSide.cardinality === \"MANY\") {\n const linkNameToObj = this.#manyLinks.get(srcLocator);\n linkNameToObj.set(srcLinkName, dstLocator);\n } else {\n // \"never\" case\n throw new Error(\"unexpected cardinality: \" + srcSide.cardinality);\n }\n }\n\n registerMedia(\n objectType: OntologiesV2.ObjectTypeApiName,\n property: OntologiesV2.PropertyApiName,\n content: ArrayBuffer,\n mediaType: MediaType,\n path: string | undefined,\n // This should be the correct prefix, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001989395\n mediaItemRid: MediaItemRid = `ri.mio.main.media-item.${randomUUID()}`,\n ): MediaReference {\n const mediaRef: ReadonlyDeep<MediaReference> = Object.freeze({\n mimeType: mediaType,\n reference: Object.freeze({\n type: \"mediaSetViewItem\",\n mediaSetViewItem: Object.freeze({\n mediaItemRid,\n mediaSetRid: \"ri.unimplemented.in.shared.test\",\n mediaSetViewRid: \"ri.unimplemented.in.shared.test\",\n }),\n }),\n });\n\n this.#media.get(objectType).get(property).set(\n mediaItemRid,\n Object.freeze({\n content,\n mediaRef,\n metaData: Object.freeze({\n mediaType,\n path,\n sizeBytes: String(content.byteLength),\n }),\n }),\n );\n\n return mediaRef;\n }\n\n getMediaOrThrow(\n objectType: OntologiesV2.ObjectTypeApiName,\n primaryKey: string,\n property: OntologiesV2.PropertyApiName,\n ): MediaMetadataAndContent {\n const obj = this.getObjectOrThrow(objectType, primaryKey);\n const propertyDef =\n this.ontology.getObjectTypeFullMetadataOrThrow(objectType)\n .objectType.properties[property];\n\n if (!propertyDef) {\n // This should be the correct error, per\n // https://github.com/palantir/osdk-ts/pull/1303#discussion_r2001968959\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"NOT_FOUND\",\n errorName: \"PropertiesNotFound\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n objectType,\n properties: [property],\n },\n } satisfies OntologiesV2.PropertiesNotFound,\n );\n }\n\n if (propertyDef.dataType.type !== \"mediaReference\") {\n // FIXME: what would the backend do here?\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyType\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n },\n } satisfies OntologiesV2.InvalidPropertyType,\n );\n }\n\n const rid = obj[property].reference.mediaSetViewItem.mediaItemRid;\n\n if (!rid || !rid.startsWith(\"ri.\")) {\n throw new OpenApiCallError(\n 400,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"InvalidPropertyValue\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n property,\n propertyBaseType: propertyDef.dataType.type,\n propertyValue: rid,\n },\n } satisfies OntologiesV2.InvalidPropertyValue,\n );\n }\n\n const ret = this.#media.get(objectType).get(property).get(rid);\n\n if (!ret) {\n throw new OpenApiCallError(400, InvalidRequest(\"Invalid parameters\"));\n }\n return ret;\n }\n\n #removeSingleSideOfLink(\n locator: ObjectLocator,\n linkSide: OntologiesV2.LinkTypeSideV2,\n expectedPriorValue: ObjectLocator,\n ) {\n const destLinkName = linkSide.apiName;\n if (linkSide.cardinality === \"ONE\") {\n const links = this.#singleLinks.get(locator);\n invariant(\n links.get(destLinkName) === expectedPriorValue,\n `Failed to remove link: expected ${\n JSON.stringify(expectedPriorValue)\n } but found ${\n JSON.stringify(links.get(destLinkName))\n } for link ${destLinkName} on ${JSON.stringify(locator)}`,\n );\n links.delete(destLinkName);\n } else {\n const links = this.#manyLinks.get(locator);\n invariant(\n links.get(destLinkName)?.has(expectedPriorValue),\n `Failed to remove link: expected collection to contain ${\n JSON.stringify(expectedPriorValue)\n } for link ${destLinkName} on ${JSON.stringify(locator)}`,\n );\n links.remove(destLinkName, expectedPriorValue);\n }\n }\n\n getObject(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject | undefined {\n return this.#objects\n .get(apiName)\n .get(String(primaryKey));\n }\n\n getObjectOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n ): BaseServerObject {\n const object = this.getObject(apiName, primaryKey);\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(apiName, String(primaryKey)),\n );\n }\n return object;\n }\n\n getObjectByRid(rid: string): BaseServerObject | undefined {\n for (const [, pkToObjects] of this.#objects) {\n for (const [, obj] of pkToObjects) {\n if (obj.__rid === rid) {\n return obj;\n }\n }\n }\n }\n\n getLinksOrThrow(\n apiName: string,\n primaryKey: string | number | boolean,\n linkApiName: string,\n ): BaseServerObject[] {\n const object = this.getObjectOrThrow(apiName, primaryKey);\n\n const linkTypeSide = this.#fauxOntology.getLinkTypeSideV2(\n apiName,\n linkApiName,\n );\n\n if (linkTypeSide.cardinality === \"ONE\") {\n const locator = this.#singleLinks\n .get(objectLocator(object))\n .get(linkApiName);\n if (locator === undefined) {\n return [];\n }\n const { objectType, primaryKey } = parseLocator(locator);\n\n return [this.getObjectOrThrow(objectType, primaryKey)]; // will throw if not found\n } else {\n const locators = this.#manyLinks\n .get(objectLocator(object))\n .get(linkApiName);\n\n return Array.from(locators ?? [])\n .map((a) => {\n const [objectType, primaryKey] = a.split(\":\") ?? [];\n invariant(objectType && primaryKey, \"Invalid locator format\");\n return this.getObjectOrThrow(objectType, primaryKey);\n });\n }\n }\n\n getLinkOrThrow(\n objectType: string,\n primaryKey: string | number | boolean,\n linkType: string,\n targetPrimaryKey: string | number | boolean,\n ): BaseServerObject {\n const allLinks = this.getLinksOrThrow(objectType, primaryKey, linkType);\n const object =\n allLinks.filter(l => String(l.__primaryKey) === targetPrimaryKey)[0];\n\n if (!object) {\n throw new OpenApiCallError(\n 404,\n ObjectNotFoundError(\n `${objectType} -> ${linkType}`,\n String(targetPrimaryKey),\n ),\n );\n }\n return object;\n }\n\n getObjectsOfType(apiName: string): Iterable<BaseServerObject> {\n this.ontology.getObjectTypeFullMetadataOrThrow(apiName);\n return this.#objects\n .get(apiName)\n .values();\n }\n\n getObjectsFromObjectSet(\n parsedBody:\n | OntologiesV2.LoadObjectSetV2MultipleObjectTypesRequest\n | OntologiesV2.LoadObjectSetRequestV2,\n ): PagedBodyResponseWithTotal<BaseServerObject> {\n const selected = parsedBody.select;\n // when we have interfaces in here, we have a little trick for\n // caching off the important properties\n let objects = getObjectsFromSet(this, parsedBody.objectSet, undefined);\n\n if (!objects || objects.length === 0) {\n return {\n data: [],\n totalCount: \"0\",\n nextPageToken: undefined,\n };\n }\n\n if (parsedBody.orderBy) {\n objects = objects.sort(createOrderBySortFn(parsedBody.orderBy));\n }\n\n // finally, if we got interfaces, the objects have names like the interface and we need\n // to return them like the object.\n\n const page = pageThroughResponseSearchParams(\n objects,\n getPaginationParamsFromRequest(parsedBody),\n false,\n );\n\n if (!page) {\n throw new OpenApiCallError(\n 404,\n InvalidRequest(\n `No objects found for ${JSON.stringify(parsedBody)}`,\n ),\n );\n }\n const ret = subSelectProperties(\n page,\n [...selected],\n true,\n parsedBody.excludeRid,\n );\n\n return ret;\n }\n\n getAttachmentMetadata(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): OntologiesV2.AttachmentV2 {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentMetadataByRid(rid);\n }\n\n getAttachmentBuffer(\n objectType: string,\n primaryKey: string | number | boolean,\n propertyName: string,\n ): ArrayBuffer {\n const rid = this.getObjectOrThrow(objectType, primaryKey)[propertyName];\n return this.#attachments.getAttachmentBuffer(rid);\n }\n\n applyAction(\n actionTypeApiName: string,\n req: OntologiesV2.ApplyActionRequestV2,\n ): OntologiesV2.SyncApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n const validation = validateAction(req, actionDef, this);\n if (validation.result === \"INVALID\") {\n return { validation };\n }\n\n const batch = new FauxDataStoreBatch(this);\n const r = actionImpl(batch, req, {\n def: actionDef,\n attachments: this.#attachments,\n });\n\n // The legacy actions return the full payload\n // they want to return, so we need to do that\n // but the future is for the actionImpl's to\n // return void and to do validation details here\n if (r) return r;\n\n return {\n validation: {\n parameters: {},\n result: \"VALID\",\n submissionCriteria: [],\n },\n edits: req.options?.mode === \"VALIDATE_AND_EXECUTE\"\n && (\n req.options.returnEdits === \"ALL\"\n || req.options.returnEdits === \"ALL_V2_WITH_DELETIONS\"\n )\n ? {\n type: \"edits\",\n ...batch.objectEdits,\n }\n : undefined,\n };\n }\n\n batchApplyAction(\n actionTypeApiName: string,\n batchReq: OntologiesV2.BatchApplyActionRequestV2,\n ): OntologiesV2.BatchApplyActionResponseV2 {\n const actionDef = this.#fauxOntology.getActionDef(actionTypeApiName);\n const actionImpl = this.#fauxOntology.getActionImpl(actionTypeApiName);\n\n for (const req of batchReq.requests) {\n const result = validateAction(req, actionDef, this);\n if (result.result === \"INVALID\") {\n throw new OpenApiCallError(\n 500,\n {\n errorCode: \"INVALID_ARGUMENT\",\n errorName: \"ActionValidationFailed\",\n errorInstanceId: \"faux-foundry\",\n parameters: {\n actionType: actionTypeApiName,\n },\n } as OntologiesV2.ActionValidationFailed,\n );\n }\n }\n\n const batch = new FauxDataStoreBatch(this);\n\n const returnLargeScaleEdits = false;\n for (const item of batchReq.requests) {\n actionImpl(\n batch,\n {\n ...item,\n options: {\n mode: \"VALIDATE_AND_EXECUTE\",\n returnEdits: batchReq.options?.returnEdits,\n },\n },\n { def: actionDef, attachments: this.#attachments },\n );\n }\n if (batchReq.options?.returnEdits === \"NONE\") {\n return {};\n }\n\n if (returnLargeScaleEdits) {\n const editedObjectTypes = new Set<OntologiesV2.ObjectTypeApiName>();\n for (const edit of batch.objectEdits.edits) {\n if (\n edit.type === \"modifyObject\" || edit.type === \"addObject\"\n || edit.type === \"deleteObject\"\n ) {\n editedObjectTypes.add(edit.objectType);\n }\n }\n\n return {\n edits: {\n type: \"largeScaleEdits\",\n editedObjectTypes: Array.from(editedObjectTypes),\n },\n };\n }\n\n return {\n edits: {\n type: \"edits\",\n ...batch.objectEdits,\n edits: batch.objectEdits.edits.filter(x =>\n x.type !== \"deleteObject\" && x.type !== \"deleteLink\"\n ),\n },\n };\n }\n}\nfunction extractOneManySide(\n srcSide: OntologiesV2.LinkTypeSideV2,\n src: BaseServerObject,\n dstSide: OntologiesV2.LinkTypeSideV2,\n dst: BaseServerObject,\n) {\n const oneSide = srcSide.cardinality === \"ONE\"\n ? { object: src, link: srcSide }\n : dstSide.cardinality === \"ONE\"\n ? { object: dst, link: dstSide }\n : undefined;\n const manySide = oneSide\n ? (srcSide.cardinality === \"MANY\"\n ? { object: src, link: srcSide }\n : { object: dst, link: dstSide })\n : undefined;\n return { oneSide, manySide };\n}\n"],"mappings":"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","ignoreList":[]}
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":[]}
@@ -29,7 +29,7 @@ OntologiesV2.Queries.execute(baseUrl, async ({
29
29
  }) => {
30
30
  const queryParams = Object.fromEntries(new URL(request.url).searchParams.entries());
31
31
  const version = queryParams["version"];
32
- if (!valid(version)) {
32
+ if (version != null && !valid(version)) {
33
33
  throw new Error(`Invalid version "${version}" for query "${queryApiName}" in ontology "${ontologyApiName}: not semver compatible".`);
34
34
  }
35
35
  const queryImpl = fauxFoundry.getOntology(ontologyApiName).getQueryImpl(queryApiName, version);
@@ -1 +1 @@
1
- {"version":3,"file":"createQueryHandlers.js","names":["valid","OntologiesV2","createQueryHandlers","baseUrl","fauxFoundry","Queries","execute","request","params","ontologyApiName","queryApiName","queryParams","Object","fromEntries","URL","url","searchParams","entries","version","Error","queryImpl","getOntology","getQueryImpl","json","getDataStore"],"sources":["createQueryHandlers.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 { valid } from \"semver\";\nimport { OntologiesV2 } from \"../mock/index.js\";\nimport type { FauxFoundryHandlersFactory } from \"./createFauxFoundryHandlers.js\";\n\nexport const createQueryHandlers: FauxFoundryHandlersFactory = (\n baseUrl,\n fauxFoundry,\n) => [\n /**\n * Execute Queries\n */\n OntologiesV2.Queries.execute(\n baseUrl,\n async ({ request, params: { ontologyApiName, queryApiName } }) => {\n const queryParams = Object.fromEntries(\n new URL(request.url).searchParams.entries(),\n );\n\n const version = queryParams[\"version\"];\n if (!valid(version)) {\n throw new Error(\n `Invalid version \"${version}\" for query \"${queryApiName}\" in ontology \"${ontologyApiName}: not semver compatible\".`,\n );\n }\n\n const queryImpl = fauxFoundry\n .getOntology(ontologyApiName)\n .getQueryImpl(queryApiName, version);\n\n return queryImpl(\n await request.json(),\n fauxFoundry.getDataStore(ontologyApiName),\n );\n },\n ),\n];\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,KAAK,QAAQ,QAAQ;AAC9B,SAASC,YAAY,QAAQ,kBAAkB;AAG/C,OAAO,MAAMC,mBAA+C,GAAGA,CAC7DC,OAAO,EACPC,WAAW,KACR;AACH;AACF;AACA;AACEH,YAAY,CAACI,OAAO,CAACC,OAAO,CAC1BH,OAAO,EACP,OAAO;EAAEI,OAAO;EAAEC,MAAM,EAAE;IAAEC,eAAe;IAAEC;EAAa;AAAE,CAAC,KAAK;EAChE,MAAMC,WAAW,GAAGC,MAAM,CAACC,WAAW,CACpC,IAAIC,GAAG,CAACP,OAAO,CAACQ,GAAG,CAAC,CAACC,YAAY,CAACC,OAAO,CAAC,CAC5C,CAAC;EAED,MAAMC,OAAO,GAAGP,WAAW,CAAC,SAAS,CAAC;EACtC,IAAI,CAACX,KAAK,CAACkB,OAAO,CAAC,EAAE;IACnB,MAAM,IAAIC,KAAK,CACb,oBAAoBD,OAAO,gBAAgBR,YAAY,kBAAkBD,eAAe,2BAC1F,CAAC;EACH;EAEA,MAAMW,SAAS,GAAGhB,WAAW,CAC1BiB,WAAW,CAACZ,eAAe,CAAC,CAC5Ba,YAAY,CAACZ,YAAY,EAAEQ,OAAO,CAAC;EAEtC,OAAOE,SAAS,CACd,MAAMb,OAAO,CAACgB,IAAI,CAAC,CAAC,EACpBnB,WAAW,CAACoB,YAAY,CAACf,eAAe,CAC1C,CAAC;AACH,CACF,CAAC,CACF","ignoreList":[]}
1
+ {"version":3,"file":"createQueryHandlers.js","names":["valid","OntologiesV2","createQueryHandlers","baseUrl","fauxFoundry","Queries","execute","request","params","ontologyApiName","queryApiName","queryParams","Object","fromEntries","URL","url","searchParams","entries","version","Error","queryImpl","getOntology","getQueryImpl","json","getDataStore"],"sources":["createQueryHandlers.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 { valid } from \"semver\";\nimport { OntologiesV2 } from \"../mock/index.js\";\nimport type { FauxFoundryHandlersFactory } from \"./createFauxFoundryHandlers.js\";\n\nexport const createQueryHandlers: FauxFoundryHandlersFactory = (\n baseUrl,\n fauxFoundry,\n) => [\n /**\n * Execute Queries\n */\n OntologiesV2.Queries.execute(\n baseUrl,\n async ({ request, params: { ontologyApiName, queryApiName } }) => {\n const queryParams = Object.fromEntries(\n new URL(request.url).searchParams.entries(),\n );\n\n const version = queryParams[\"version\"];\n if (version != null && !valid(version)) {\n throw new Error(\n `Invalid version \"${version}\" for query \"${queryApiName}\" in ontology \"${ontologyApiName}: not semver compatible\".`,\n );\n }\n\n const queryImpl = fauxFoundry\n .getOntology(ontologyApiName)\n .getQueryImpl(queryApiName, version);\n\n return queryImpl(\n await request.json(),\n fauxFoundry.getDataStore(ontologyApiName),\n );\n },\n ),\n];\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,KAAK,QAAQ,QAAQ;AAC9B,SAASC,YAAY,QAAQ,kBAAkB;AAG/C,OAAO,MAAMC,mBAA+C,GAAGA,CAC7DC,OAAO,EACPC,WAAW,KACR;AACH;AACF;AACA;AACEH,YAAY,CAACI,OAAO,CAACC,OAAO,CAC1BH,OAAO,EACP,OAAO;EAAEI,OAAO;EAAEC,MAAM,EAAE;IAAEC,eAAe;IAAEC;EAAa;AAAE,CAAC,KAAK;EAChE,MAAMC,WAAW,GAAGC,MAAM,CAACC,WAAW,CACpC,IAAIC,GAAG,CAACP,OAAO,CAACQ,GAAG,CAAC,CAACC,YAAY,CAACC,OAAO,CAAC,CAC5C,CAAC;EAED,MAAMC,OAAO,GAAGP,WAAW,CAAC,SAAS,CAAC;EACtC,IAAIO,OAAO,IAAI,IAAI,IAAI,CAAClB,KAAK,CAACkB,OAAO,CAAC,EAAE;IACtC,MAAM,IAAIC,KAAK,CACb,oBAAoBD,OAAO,gBAAgBR,YAAY,kBAAkBD,eAAe,2BAC1F,CAAC;EACH;EAEA,MAAMW,SAAS,GAAGhB,WAAW,CAC1BiB,WAAW,CAACZ,eAAe,CAAC,CAC5Ba,YAAY,CAACZ,YAAY,EAAEQ,OAAO,CAAC;EAEtC,OAAOE,SAAS,CACd,MAAMb,OAAO,CAACgB,IAAI,CAAC,CAAC,EACpBnB,WAAW,CAACoB,YAAY,CAACf,eAAe,CAC1C,CAAC;AACH,CACF,CAAC,CACF","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 StrictResponse,\n} from \"msw\";\nimport { http as 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 StrictResponse<\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;;AASA,SAASA,IAAY,EAAEC,YAAY,QAAQ,KAAK;AAEhD,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 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":[]}
@@ -1683,7 +1683,7 @@ __export(Actions_exports, {
1683
1683
  applyBatch: () => applyBatch2
1684
1684
  });
1685
1685
 
1686
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/Action.js
1686
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/Action.js
1687
1687
  var Action_exports = {};
1688
1688
  __export(Action_exports, {
1689
1689
  apply: () => apply,
@@ -1790,7 +1790,7 @@ function parseUrl(baseUrl, endpointPath) {
1790
1790
  return new URL(`api${endpointPath}`, baseUrl);
1791
1791
  }
1792
1792
 
1793
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/Action.js
1793
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/Action.js
1794
1794
  var _apply = [1, "/v2/ontologies/{0}/actions/{1}/apply", 3];
1795
1795
  function apply($ctx, ...args) {
1796
1796
  return foundryPlatformFetch($ctx, _apply, ...args);
@@ -1804,7 +1804,7 @@ function applyBatch($ctx, ...args) {
1804
1804
  return foundryPlatformFetch($ctx, _applyBatch, ...args);
1805
1805
  }
1806
1806
 
1807
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/ActionTypeV2.js
1807
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/ActionTypeV2.js
1808
1808
  var ActionTypeV2_exports = {};
1809
1809
  __export(ActionTypeV2_exports, {
1810
1810
  get: () => get,
@@ -1824,7 +1824,7 @@ function getByRid($ctx, ...args) {
1824
1824
  return foundryPlatformFetch($ctx, _getByRid, ...args);
1825
1825
  }
1826
1826
 
1827
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/Attachment.js
1827
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/Attachment.js
1828
1828
  var Attachment_exports = {};
1829
1829
  __export(Attachment_exports, {
1830
1830
  get: () => get2,
@@ -1849,7 +1849,7 @@ function get2($ctx, ...args) {
1849
1849
  return foundryPlatformFetch($ctx, _get2, ...args);
1850
1850
  }
1851
1851
 
1852
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/AttachmentPropertyV2.js
1852
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/AttachmentPropertyV2.js
1853
1853
  var AttachmentPropertyV2_exports = {};
1854
1854
  __export(AttachmentPropertyV2_exports, {
1855
1855
  getAttachment: () => getAttachment,
@@ -1874,7 +1874,7 @@ function readAttachmentByRid($ctx, ...args) {
1874
1874
  return foundryPlatformFetch($ctx, _readAttachmentByRid, ...args);
1875
1875
  }
1876
1876
 
1877
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/LinkedObjectV2.js
1877
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/LinkedObjectV2.js
1878
1878
  var LinkedObjectV2_exports = {};
1879
1879
  __export(LinkedObjectV2_exports, {
1880
1880
  getLinkedObject: () => getLinkedObject,
@@ -1889,7 +1889,7 @@ function getLinkedObject($ctx, ...args) {
1889
1889
  return foundryPlatformFetch($ctx, _getLinkedObject, ...args);
1890
1890
  }
1891
1891
 
1892
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/MediaReferenceProperty.js
1892
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/MediaReferenceProperty.js
1893
1893
  var MediaReferenceProperty_exports = {};
1894
1894
  __export(MediaReferenceProperty_exports, {
1895
1895
  getMediaContent: () => getMediaContent,
@@ -1914,7 +1914,7 @@ function uploadMedia($ctx, ...args) {
1914
1914
  return foundryPlatformFetch($ctx, _uploadMedia, ...args);
1915
1915
  }
1916
1916
 
1917
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/ObjectTypeV2.js
1917
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/ObjectTypeV2.js
1918
1918
  var ObjectTypeV2_exports = {};
1919
1919
  __export(ObjectTypeV2_exports, {
1920
1920
  get: () => get3,
@@ -1944,13 +1944,14 @@ function getOutgoingLinkType($ctx, ...args) {
1944
1944
  return foundryPlatformFetch($ctx, _getOutgoingLinkType, ...args);
1945
1945
  }
1946
1946
 
1947
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyInterface.js
1947
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyInterface.js
1948
1948
  var OntologyInterface_exports = {};
1949
1949
  __export(OntologyInterface_exports, {
1950
1950
  aggregate: () => aggregate,
1951
1951
  get: () => get4,
1952
1952
  getOutgoingInterfaceLinkType: () => getOutgoingInterfaceLinkType,
1953
1953
  list: () => list3,
1954
+ listObjectsForInterface: () => listObjectsForInterface,
1954
1955
  listOutgoingInterfaceLinkTypes: () => listOutgoingInterfaceLinkTypes,
1955
1956
  search: () => search
1956
1957
  });
@@ -1962,6 +1963,10 @@ var _get4 = [0, "/v2/ontologies/{0}/interfaceTypes/{1}", 2];
1962
1963
  function get4($ctx, ...args) {
1963
1964
  return foundryPlatformFetch($ctx, _get4, ...args);
1964
1965
  }
1966
+ var _listObjectsForInterface = [0, "/v2/ontologies/{0}/interfaces/{1}", 2];
1967
+ function listObjectsForInterface($ctx, ...args) {
1968
+ return foundryPlatformFetch($ctx, _listObjectsForInterface, ...args);
1969
+ }
1965
1970
  var _search = [1, "/v2/ontologies/{0}/interfaces/{1}/search", 3];
1966
1971
  function search($ctx, ...args) {
1967
1972
  return foundryPlatformFetch($ctx, _search, ...args);
@@ -1979,7 +1984,7 @@ function getOutgoingInterfaceLinkType($ctx, ...args) {
1979
1984
  return foundryPlatformFetch($ctx, _getOutgoingInterfaceLinkType, ...args);
1980
1985
  }
1981
1986
 
1982
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyObjectSet.js
1987
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyObjectSet.js
1983
1988
  var OntologyObjectSet_exports = {};
1984
1989
  __export(OntologyObjectSet_exports, {
1985
1990
  aggregate: () => aggregate2,
@@ -1989,7 +1994,7 @@ __export(OntologyObjectSet_exports, {
1989
1994
  loadMultipleObjectTypes: () => loadMultipleObjectTypes,
1990
1995
  loadObjectsOrInterfaces: () => loadObjectsOrInterfaces
1991
1996
  });
1992
- var _createTemporary = [1, "/v2/ontologies/{0}/objectSets/createTemporary", 1];
1997
+ var _createTemporary = [1, "/v2/ontologies/{0}/objectSets/createTemporary", 3];
1993
1998
  function createTemporary($ctx, ...args) {
1994
1999
  return foundryPlatformFetch($ctx, _createTemporary, ...args);
1995
2000
  }
@@ -2014,7 +2019,7 @@ function aggregate2($ctx, ...args) {
2014
2019
  return foundryPlatformFetch($ctx, _aggregate2, ...args);
2015
2020
  }
2016
2021
 
2017
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyObjectV2.js
2022
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyObjectV2.js
2018
2023
  var OntologyObjectV2_exports = {};
2019
2024
  __export(OntologyObjectV2_exports, {
2020
2025
  aggregate: () => aggregate3,
@@ -2044,17 +2049,17 @@ function aggregate3($ctx, ...args) {
2044
2049
  return foundryPlatformFetch($ctx, _aggregate3, ...args);
2045
2050
  }
2046
2051
 
2047
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyTransaction.js
2052
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyTransaction.js
2048
2053
  var OntologyTransaction_exports = {};
2049
2054
  __export(OntologyTransaction_exports, {
2050
2055
  postEdits: () => postEdits
2051
2056
  });
2052
- var _postEdits = [1, "/v2/ontologies/{0}/transactions/{1}/edits", 1];
2057
+ var _postEdits = [1, "/v2/ontologies/{0}/transactions/{1}/edits", 3];
2053
2058
  function postEdits($ctx, ...args) {
2054
2059
  return foundryPlatformFetch($ctx, _postEdits, ...args);
2055
2060
  }
2056
2061
 
2057
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyV2.js
2062
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/OntologyV2.js
2058
2063
  var OntologyV2_exports = {};
2059
2064
  __export(OntologyV2_exports, {
2060
2065
  get: () => get7,
@@ -2079,7 +2084,7 @@ function loadMetadata($ctx, ...args) {
2079
2084
  return foundryPlatformFetch($ctx, _loadMetadata, ...args);
2080
2085
  }
2081
2086
 
2082
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/Query.js
2087
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/Query.js
2083
2088
  var Query_exports = {};
2084
2089
  __export(Query_exports, {
2085
2090
  execute: () => execute
@@ -2089,7 +2094,7 @@ function execute($ctx, ...args) {
2089
2094
  return foundryPlatformFetch($ctx, _execute, ...args);
2090
2095
  }
2091
2096
 
2092
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/QueryType.js
2097
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/QueryType.js
2093
2098
  var QueryType_exports = {};
2094
2099
  __export(QueryType_exports, {
2095
2100
  get: () => get8,
@@ -2104,7 +2109,7 @@ function get8($ctx, ...args) {
2104
2109
  return foundryPlatformFetch($ctx, _get8, ...args);
2105
2110
  }
2106
2111
 
2107
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/TimeSeriesPropertyV2.js
2112
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/TimeSeriesPropertyV2.js
2108
2113
  var TimeSeriesPropertyV2_exports = {};
2109
2114
  __export(TimeSeriesPropertyV2_exports, {
2110
2115
  getFirstPoint: () => getFirstPoint,
@@ -2124,7 +2129,7 @@ function streamPoints($ctx, ...args) {
2124
2129
  return foundryPlatformFetch($ctx, _streamPoints, ...args);
2125
2130
  }
2126
2131
 
2127
- // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.27.0/node_modules/@osdk/foundry.ontologies/build/esm/public/TimeSeriesValueBankProperty.js
2132
+ // ../../node_modules/.pnpm/@osdk+foundry.ontologies@2.30.0/node_modules/@osdk/foundry.ontologies/build/esm/public/TimeSeriesValueBankProperty.js
2128
2133
  var TimeSeriesValueBankProperty_exports = {};
2129
2134
  __export(TimeSeriesValueBankProperty_exports, {
2130
2135
  getLatestValue: () => getLatestValue,
@@ -2743,7 +2748,7 @@ var createQueryHandlers = (baseUrl, fauxFoundry) => [
2743
2748
  }) => {
2744
2749
  const queryParams = Object.fromEntries(new URL(request.url).searchParams.entries());
2745
2750
  const version = queryParams["version"];
2746
- if (!semver.valid(version)) {
2751
+ if (version != null && !semver.valid(version)) {
2747
2752
  throw new Error(`Invalid version "${version}" for query "${queryApiName}" in ontology "${ontologyApiName}: not semver compatible".`);
2748
2753
  }
2749
2754
  const queryImpl = fauxFoundry.getOntology(ontologyApiName).getQueryImpl(queryApiName, version);