@itwin/ecschema-metadata 5.2.0-dev.15 → 5.2.0-dev.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.d.ts.map +1 -1
  2. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js +14 -8
  3. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  4. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.d.ts +14 -1
  5. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.d.ts.map +1 -1
  6. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  7. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.d.ts.map +1 -1
  8. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.js +1 -7
  9. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
  10. package/lib/cjs/IncrementalLoading/SchemaItemParsers.d.ts +4 -4
  11. package/lib/cjs/IncrementalLoading/SchemaItemParsers.d.ts.map +1 -1
  12. package/lib/cjs/IncrementalLoading/SchemaItemParsers.js +16 -16
  13. package/lib/cjs/IncrementalLoading/SchemaItemParsers.js.map +1 -1
  14. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js +3 -3
  15. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js.map +1 -1
  16. package/lib/cjs/IncrementalLoading/SchemaParser.d.ts +4 -4
  17. package/lib/cjs/IncrementalLoading/SchemaParser.d.ts.map +1 -1
  18. package/lib/cjs/IncrementalLoading/SchemaParser.js +13 -13
  19. package/lib/cjs/IncrementalLoading/SchemaParser.js.map +1 -1
  20. package/lib/cjs/Metadata/EntityClass.js +1 -1
  21. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  22. package/lib/cjs/Metadata/KindOfQuantity.d.ts.map +1 -1
  23. package/lib/cjs/Metadata/KindOfQuantity.js +9 -22
  24. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  25. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.d.ts.map +1 -1
  26. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js +14 -8
  27. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  28. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.d.ts +14 -1
  29. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.d.ts.map +1 -1
  30. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  31. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.d.ts.map +1 -1
  32. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.js +1 -7
  33. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
  34. package/lib/esm/IncrementalLoading/SchemaItemParsers.d.ts +4 -4
  35. package/lib/esm/IncrementalLoading/SchemaItemParsers.d.ts.map +1 -1
  36. package/lib/esm/IncrementalLoading/SchemaItemParsers.js +16 -16
  37. package/lib/esm/IncrementalLoading/SchemaItemParsers.js.map +1 -1
  38. package/lib/esm/IncrementalLoading/SchemaItemQueries.js +3 -3
  39. package/lib/esm/IncrementalLoading/SchemaItemQueries.js.map +1 -1
  40. package/lib/esm/IncrementalLoading/SchemaParser.d.ts +4 -4
  41. package/lib/esm/IncrementalLoading/SchemaParser.d.ts.map +1 -1
  42. package/lib/esm/IncrementalLoading/SchemaParser.js +13 -13
  43. package/lib/esm/IncrementalLoading/SchemaParser.js.map +1 -1
  44. package/lib/esm/Metadata/EntityClass.js +1 -1
  45. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  46. package/lib/esm/Metadata/KindOfQuantity.d.ts.map +1 -1
  47. package/lib/esm/Metadata/KindOfQuantity.js +9 -22
  48. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  49. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaItemParsers.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaItemParsers.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { SchemaContext } from \"../Context\";\nimport { AnySchemaItemProps, KindOfQuantityProps, SchemaItemProps } from \"../Deserialization/JsonProps\";\nimport { parseSchemaItemType } from \"../ECObjects\";\nimport { OverrideFormat, OverrideFormatProps } from \"../Metadata/OverrideFormat\";\nimport { SchemaItem } from \"../Metadata/SchemaItem\";\nimport { parseCustomAttribute } from \"./SchemaParser\";\n\ntype MutableSchemaItemProps = {\n -readonly [K in keyof SchemaItemProps]: SchemaItemProps[K]\n};\n\n/**\n * Parses SchemaItemProps JSON returned from an ECSql query and returns the correct SchemaItemProps JSON.\n * This is necessary as a small amount information (ie. CustomAttribute data) returned from the iModelDb\n * is in a different format than is required for a SchemaItemProps JSON object.\n * @internal\n */\nexport class SchemaItemParser {\n protected _schema: string;\n protected _context: SchemaContext;\n\n /**\n * Initializes a new SchemaItemParser.\n * @param schemaName The name the Schema containing the SchemaItems.\n * @param context The SchemaContext containing the Schema.\n */\n public constructor(schemaName: string, context: SchemaContext) {\n this._schema = schemaName;\n this._context = context;\n }\n\n /**\n * Parses the given SchemaItemProps JSON returned from an ECSql query.\n * @param data The SchemaItemProps JSON as returned from an iModelDb.\n * @returns The corrected SchemaItemProps Json.\n */\n public async parse(data: AnySchemaItemProps): Promise<SchemaItemProps> {\n const props = data as MutableSchemaItemProps;\n props.schemaItemType = parseSchemaItemType((data as any).schemaItemType);\n props.customAttributes = props.customAttributes ? props.customAttributes.map((attr: any) => { return parseCustomAttribute(attr); }) : undefined;\n if (!props.customAttributes || props.customAttributes.length === 0)\n delete props.customAttributes;\n\n return props;\n }\n\n /**\n * Helper method to resolve the SchemaItem's full name from the given rawTypeName.\n * If the SchemaItem is defined in the same Schema from which it is referenced,\n * the rawTypeName will be SchemaItem name ('PhysicalElement'). Otherwise,\n * the rawTypeName will have the schema alias ('bis:PhysicalElement').\n * @param rawTypeName The name or aliased name of the SchemaItem.\n * @returns The full name of the SchemaItem, ie. 'BisCore.PhysicalElement'\n */\n public async getQualifiedTypeName(rawTypeName: string): Promise<string> {\n const nameParts = rawTypeName.split(\":\");\n if (nameParts.length !== 2) {\n const [schemaName, itemName] = SchemaItem.parseFullName(rawTypeName);\n if (!schemaName || schemaName === '')\n return `${this._schema}.${itemName}`;\n return rawTypeName;\n }\n\n const resolvedName = await this.resolveNameFromAlias(nameParts[0].toLocaleLowerCase());\n if (!resolvedName)\n throw new Error(`No valid schema found for alias '${nameParts[0]}'`);\n\n return `${resolvedName}.${nameParts[1]}`;\n }\n\n private async resolveNameFromAlias(alias: string): Promise<string | undefined> {\n for (const schema of this._context.getKnownSchemas()) {\n if (schema.alias === alias)\n return schema.schemaKey.name;\n }\n return undefined;\n }\n}\n\ntype MutableKindOfQuantityProps = {\n -readonly [K in keyof KindOfQuantityProps]: KindOfQuantityProps[K]\n};\n\n/**\n * Parses KindOfQuantityProps JSON returned from an ECSql query and returns the correct KindOfQuantityProps JSON.\n * This is necessary as a small amount information (ie. unqualified type names of presentationUnits) returned from\n * the iModelDb is in a different format than is required for a KindOfQuantityProps JSON object.\n * @internal\n */\nexport class KindOfQuantityParser extends SchemaItemParser {\n /**\n * Parses the given KindOfQuantityProps JSON returned from an ECSql query.\n * @param data The KindOfQuantityProps JSON as returned from an iModelDb.\n * @returns The corrected KindOfQuantityProps Json.\n */\n public override async parse(data: KindOfQuantityProps): Promise<KindOfQuantityProps> {\n const mutableProps = await super.parse(data) as MutableKindOfQuantityProps;\n\n if (mutableProps.persistenceUnit) {\n mutableProps.persistenceUnit = await this.getQualifiedTypeName(mutableProps.persistenceUnit);\n }\n mutableProps.presentationUnits = await this.parsePresentationUnits(mutableProps);\n\n return mutableProps;\n }\n\n private async parsePresentationUnits(props: KindOfQuantityProps): Promise<string[]> {\n const presentationUnits: string[] = [];\n if (!props.presentationUnits)\n return [];\n\n for (const presentationUnit of props.presentationUnits) {\n const presFormatOverride: OverrideFormatProps = OverrideFormat.parseFormatString(presentationUnit);\n const formatString = await this.createOverrideFormatString(presFormatOverride);\n presentationUnits.push(formatString);\n };\n\n return presentationUnits;\n }\n\n private async createOverrideFormatString(overrideFormatProps: OverrideFormatProps): Promise<string> {\n\n let formatFullName = await this.getQualifiedTypeName(overrideFormatProps.name);\n if (overrideFormatProps.precision)\n formatFullName += `(${overrideFormatProps.precision.toString()})`;\n\n if (undefined === overrideFormatProps.unitAndLabels)\n return formatFullName;\n\n for (const [unit, unitLabel] of overrideFormatProps.unitAndLabels) {\n const unitFullName = await this.getQualifiedTypeName(unit);\n\n if (undefined === unitLabel)\n formatFullName += `[${unitFullName}]`;\n else\n formatFullName += `[${unitFullName}|${unitLabel}]`;\n }\n return formatFullName;\n }\n}"]}
1
+ {"version":3,"file":"SchemaItemParsers.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaItemParsers.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { AnySchemaItemProps, KindOfQuantityProps, SchemaItemProps } from \"../Deserialization/JsonProps\";\nimport { parseSchemaItemType } from \"../ECObjects\";\nimport { SchemaInfo } from \"../Interfaces\";\nimport { OverrideFormat, OverrideFormatProps } from \"../Metadata/OverrideFormat\";\nimport { SchemaItem } from \"../Metadata/SchemaItem\";\nimport { parseCustomAttribute } from \"./SchemaParser\";\n\ntype MutableSchemaItemProps = {\n -readonly [K in keyof SchemaItemProps]: SchemaItemProps[K]\n};\n\n/**\n * Parses SchemaItemProps JSON returned from an ECSql query and returns the correct SchemaItemProps JSON.\n * This is necessary as a small amount information (ie. CustomAttribute data) returned from the iModelDb\n * is in a different format than is required for a SchemaItemProps JSON object.\n * @internal\n */\nexport class SchemaItemParser {\n protected _schema: string;\n protected _schemaInfos: Iterable<SchemaInfo>;\n\n /**\n * Initializes a new SchemaItemParser.\n * @param schemaName The name the Schema containing the SchemaItems.\n * @param context The SchemaContext containing the Schema.\n */\n public constructor(schemaName: string, schemaInfos: Iterable<SchemaInfo>) {\n this._schema = schemaName;\n this._schemaInfos = schemaInfos;\n }\n\n /**\n * Parses the given SchemaItemProps JSON returned from an ECSql query.\n * @param data The SchemaItemProps JSON as returned from an iModelDb.\n * @returns The corrected SchemaItemProps Json.\n */\n public async parse(data: AnySchemaItemProps): Promise<SchemaItemProps> {\n const props = data as MutableSchemaItemProps;\n props.schemaItemType = parseSchemaItemType((data as any).schemaItemType);\n props.customAttributes = props.customAttributes ? props.customAttributes.map((attr: any) => { return parseCustomAttribute(attr); }) : undefined;\n if (!props.customAttributes || props.customAttributes.length === 0)\n delete props.customAttributes;\n\n return props;\n }\n\n /**\n * Helper method to resolve the SchemaItem's full name from the given rawTypeName.\n * If the SchemaItem is defined in the same Schema from which it is referenced,\n * the rawTypeName will be SchemaItem name ('PhysicalElement'). Otherwise,\n * the rawTypeName will have the schema alias ('bis:PhysicalElement').\n * @param rawTypeName The name or aliased name of the SchemaItem.\n * @returns The full name of the SchemaItem, ie. 'BisCore.PhysicalElement'\n */\n public getQualifiedTypeName(rawTypeName: string): string {\n const nameParts = rawTypeName.split(\":\");\n if (nameParts.length !== 2) {\n const [schemaName, itemName] = SchemaItem.parseFullName(rawTypeName);\n if (!schemaName || schemaName === '')\n return `${this._schema}.${itemName}`;\n return rawTypeName;\n }\n\n const resolvedName = this.resolveNameFromAlias(nameParts[0].toLocaleLowerCase());\n if (!resolvedName)\n throw new Error(`No valid schema found for alias '${nameParts[0]}'`);\n\n return `${resolvedName}.${nameParts[1]}`;\n }\n\n private resolveNameFromAlias(alias: string): string | undefined {\n for (const schemaInfo of this._schemaInfos) {\n if (schemaInfo.alias === alias)\n return schemaInfo.schemaKey.name;\n }\n return undefined;\n }\n}\n\ntype MutableKindOfQuantityProps = {\n -readonly [K in keyof KindOfQuantityProps]: KindOfQuantityProps[K]\n};\n\n/**\n * Parses KindOfQuantityProps JSON returned from an ECSql query and returns the correct KindOfQuantityProps JSON.\n * This is necessary as a small amount information (ie. unqualified type names of presentationUnits) returned from\n * the iModelDb is in a different format than is required for a KindOfQuantityProps JSON object.\n * @internal\n */\nexport class KindOfQuantityParser extends SchemaItemParser {\n /**\n * Parses the given KindOfQuantityProps JSON returned from an ECSql query.\n * @param data The KindOfQuantityProps JSON as returned from an iModelDb.\n * @returns The corrected KindOfQuantityProps Json.\n */\n public override async parse(data: KindOfQuantityProps): Promise<KindOfQuantityProps> {\n const mutableProps = await super.parse(data) as MutableKindOfQuantityProps;\n\n if (mutableProps.persistenceUnit) {\n mutableProps.persistenceUnit = this.getQualifiedTypeName(mutableProps.persistenceUnit);\n }\n mutableProps.presentationUnits = this.parsePresentationUnits(mutableProps);\n\n return mutableProps;\n }\n\n private parsePresentationUnits(props: KindOfQuantityProps): string[] {\n const presentationUnits: string[] = [];\n if (!props.presentationUnits)\n return [];\n\n for (const presentationUnit of props.presentationUnits) {\n const presFormatOverride: OverrideFormatProps = OverrideFormat.parseFormatString(presentationUnit);\n const formatString = this.createOverrideFormatString(presFormatOverride);\n presentationUnits.push(formatString);\n };\n\n return presentationUnits;\n }\n\n private createOverrideFormatString(overrideFormatProps: OverrideFormatProps): string {\n\n let formatFullName = this.getQualifiedTypeName(overrideFormatProps.name);\n if (overrideFormatProps.precision)\n formatFullName += `(${overrideFormatProps.precision.toString()})`;\n\n if (undefined === overrideFormatProps.unitAndLabels)\n return formatFullName;\n\n for (const [unit, unitLabel] of overrideFormatProps.unitAndLabels) {\n const unitFullName = this.getQualifiedTypeName(unit);\n\n if (undefined === unitLabel)\n formatFullName += `[${unitFullName}]`;\n else\n formatFullName += `[${unitFullName}|${unitLabel}]`;\n }\n return formatFullName;\n }\n}"]}
@@ -21,10 +21,10 @@ SELECT
21
21
  'name', [koq].[Name],
22
22
  'label', [koq].[DisplayLabel],
23
23
  'description', [koq].[Description]
24
- ${singleSchema ? `
25
24
  ,'relativeError', [koq].[RelativeError],
26
- 'persistenceUnit', [koq].[PersistenceUnit],
27
- 'presentationUnits', (
25
+ 'persistenceUnit', [koq].[PersistenceUnit]
26
+ ${singleSchema ? `
27
+ , 'presentationUnits', (
28
28
  SELECT json_group_array(js."value")
29
29
  FROM [meta].[KindOfQuantityDef] [koq1], json1.json_each([PresentationUnits]) js
30
30
  WHERE [koq1].[ECInstanceId] = [koq].[ECInstanceId]
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaItemQueries.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaItemQueries.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG;;;qFAGqF;AAErF;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;MAQ7C,YAAY,CAAC,CAAC,CAAC;;;;;;;OAOd,CAAA,CAAC,CAAC,EAAE;;;;EAIT,YAAY,CAAC,CAAC,CAAC;;;;CAIhB,CAAC,CAAC,CAAC,EAAE;CACL,CAAC;AAEF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;EAYnD,YAAY,CAAC,CAAC,CAAC;;;;CAIhB,CAAC,CAAC,CAAC,EAAE;CACL,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;EAuB9C,YAAY,CAAC,CAAC,CAAC;;;oCAGmB,CAAC,CAAC,CAAC,EAAE;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,IAAI,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;EAiBvC,YAAY,CAAC,CAAC,CAAC;;gFAE+D,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;IAUjF,YAAY,CAAC,CAAC,CAAC;oCACiB,CAAC,CAAC,CAAC,EAAE;;;CAGxC,CAAC;AAEF;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;EAa/C,YAAY,CAAC,CAAC,CAAC;;gFAE+D,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;IAUjF,YAAY,CAAC,CAAC,CAAC;oCACiB,CAAC,CAAC,CAAC,EAAE;;;CAGxC,CAAC;AAEF;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;EAe3C,YAAY,CAAC,CAAC,CAAC;;gFAE+D,CAAC,CAAC,CAAC,EAAE;;;;;;IAMjF,YAAY,CAAC,CAAC,CAAC;oCACiB,CAAC,CAAC,CAAC,EAAE;;CAExC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;EAW7C,YAAY,CAAC,CAAC,CAAC;;;oCAGmB,CAAC,CAAC,CAAC,EAAE;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;EAY7C,YAAY,CAAC,CAAC,CAAC;;;oCAGmB,CAAC,CAAC,CAAC,EAAE;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;MAoBrC,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;MAoBf,CAAC,CAAC,CAAC,EAAE;;;;EAIT,YAAY,CAAC,CAAC,CAAC;;;oCAGmB,CAAC,CAAC,CAAC,EAAE;CACxC,CAAA;AAED;;;GAGG;AACH,gEAAgE;AACnD,QAAA,iBAAiB,GAAG;IAC/B,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,IAAI;IACJ,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,UAAU;IACV,MAAM;CACP,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n/************************************************************************************\n * All SchemaItem queries for each SchemaItemType are defined here. These queries\n * are shared for both 'partial schema' and 'full schema' queries.\n ***********************************************************************************/\n\n/**\n * Query for SchemaItemType KindOfQuantity data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst kindOfQuantity = (singleSchema?: boolean) => `\nSELECT\n [koq].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'KindOfQuantity',\n 'name', [koq].[Name],\n 'label', [koq].[DisplayLabel],\n 'description', [koq].[Description]\n ${singleSchema ? `\n ,'relativeError', [koq].[RelativeError],\n 'persistenceUnit', [koq].[PersistenceUnit],\n 'presentationUnits', (\n SELECT json_group_array(js.\"value\")\n FROM [meta].[KindOfQuantityDef] [koq1], json1.json_each([PresentationUnits]) js\n WHERE [koq1].[ECInstanceId] = [koq].[ECInstanceId]\n ) `: \"\"}\n ) as [item]\nFROM\n [meta].[KindOfQuantityDef] [koq]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [koq].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName\n` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType PropertyCategory data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst propertyCategory = (singleSchema?: boolean) => `\nSELECT\n [pc].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'PropertyCategory',\n 'name', [pc].[Name],\n 'label', [pc].[DisplayLabel],\n 'description', [pc].[Description],\n 'priority', [pc].[Priority]\n ) as [item]\nFROM\n [meta].[PropertyCategoryDef] [pc]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [pc].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName\n` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType Enumeration data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst enumeration = (singleSchema?: boolean) => `\nSELECT\n [ed].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'Enumeration',\n 'name', [ed].[Name],\n 'label', [ed].[DisplayLabel],\n 'description', [ed].[Description],\n 'type', IIF([ed].[Type] = 1281, 'int', IIF([ed].[Type] = 2305, 'string', null)),\n 'isStrict', IIF([ed].[IsStrict] = 1, json('true'), json('false')),\n 'enumerators', (\n SELECT json_group_array(json(json_object(\n 'name', json_extract(js.\"value\", '$.Name'),\n 'value', IFNULL(json_extract(js.\"value\", '$.StringValue'), (json_extract(js.\"value\", '$.IntValue'))),\n 'label', json_extract(js.\"value\", '$.DisplayLabel'),\n 'description', json_extract(js.\"value\", '$.Description')\n )))\n FROM [meta].[ECEnumerationDef] [enumerationDef], json1.json_each([EnumValues]) js\n WHERE [enumerationDef].[ECInstanceId] = [ed].[ECInstanceId]\n )\n ) as [item]\nFROM\n [meta].[ECEnumerationDef] [ed]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ed].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType Unit data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst unit = (singleSchema?: boolean) => `\nSELECT\n [ud].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'Unit',\n 'name', [ud].[Name],\n 'label', [ud].[DisplayLabel],\n 'description', [ud].[Description],\n 'definition', [ud].[Definition],\n 'numerator', IIF([ud].[Numerator] IS NULL, NULL, json(format('%.16g', [ud].[Numerator]))),\n 'denominator', IIF([ud].[Denominator] IS NULL, NULL, json(format('%.16g', [ud].[Denominator]))),\n 'offset', IIF([ud].[Offset] IS NULL, NULL, json(format('%!.15f', [ud].[Offset]))),\n 'unitSystem', CONCAT([uss].[Name],'.', [usd].[Name]),\n 'phenomenon', CONCAT([ps].[Name],'.', [pd].[Name])\n ) as item\nFROM\n [meta].[UnitDef] [ud]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ud].[Schema].[Id]` : \"\"}\nJOIN [meta].[UnitSystemDef] [usd]\n ON [usd].[ECInstanceId] = [ud].[UnitSystem].[Id]\nJOIN [meta].[ECSchemaDef] [uss]\n ON [uss].[ECInstanceId] = [usd].[Schema].[Id]\nJOIN [meta].[PhenomenonDef] [pd]\n ON [pd].[ECInstanceId] = [ud].[Phenomenon].[Id]\nJOIN [meta].[ECSchemaDef] [ps]\n ON [ps].[ECInstanceId] = [pd].[Schema].[Id]\nWHERE\n ${singleSchema ? `\n [schema].[Name] = :schemaName AND` : \"\"}\n [ud].[IsConstant] = 0 AND\n [ud].[InvertingUnit] IS NULL\n`;\n\n/**\n * Query for SchemaItemType InvertedUnit data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst invertedUnit = (singleSchema?: boolean) => `\nSELECT\n [ud].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'InvertedUnit',\n 'name', [ud].[Name],\n 'label', [ud].[DisplayLabel],\n 'description', [ud].[Description],\n 'unitSystem', CONCAT([systemSchema].[Name],'.', [usd].[Name]),\n 'invertsUnit', IIF([iud].[Name] IS NULL, null, CONCAT([ius].[Name],'.', [iud].[Name]))\n ) as [item]\nFROM\n [meta].[UnitDef] [ud]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ud].[Schema].[Id]` : \"\"}\nJOIN [meta].[UnitSystemDef] [usd]\n ON [usd].[ECInstanceId] = [ud].[UnitSystem].[Id]\nJOIN [meta].[ECSchemaDef] [systemSchema]\n ON [systemSchema].[ECInstanceId] = [usd].[Schema].[Id]\nLEFT JOIN [meta].[UnitDef] [iud]\n ON [iud].[ECInstanceId] = [ud].[InvertingUnit].[Id]\nLEFT JOIN [meta].[ECSchemaDef] [ius]\n ON [ius].[ECInstanceId] = [iud].[Schema].[Id]\nWHERE\n ${singleSchema ? `\n [schema].[Name] = :schemaName AND` : \"\"}\n [ud].[IsConstant] = 0 AND\n [ud].[InvertingUnit] IS NOT NULL\n`;\n\n/**\n * Query for SchemaItemType Constant data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst constant = (singleSchema?: boolean) => `\nSELECT\n [cd].[Schema].[Id] AS [SchemaId],\n json_object(\n 'schemaItemType', 'Constant',\n 'name', [cd].[Name],\n 'label', [cd].[DisplayLabel],\n 'description', [cd].[Description],\n 'definition', [cd].[Definition],\n 'numerator', IIF([cd].[Numerator] IS NULL, NULL, json(format('%.16g', [cd].[Numerator]))),\n 'denominator', IIF([cd].[Denominator] IS NULL, NULL, json(format('%.16g', [cd].[Denominator]))),\n 'phenomenon', CONCAT([phenomSchema].[Name],'.', [phenomDef].[Name])\n ) as item\nFROM\n [meta].[UnitDef] [cd]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [cd].[Schema].[Id]` : \"\"}\nJOIN [meta].[PhenomenonDef] [phenomDef]\n ON [phenomDef].[ECInstanceId] = [cd].[Phenomenon].[Id]\nJOIN [meta].[ECSchemaDef] [phenomSchema]\n ON [phenomSchema].[ECInstanceId] = [phenomDef].[Schema].[Id]\nWHERE\n ${singleSchema ? `\n [schema].[Name] = :schemaName AND` : \"\"}\n [cd].[IsConstant] = 1\n`;\n\n/**\n * Query for SchemaItemType UnitSystem data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst unitSystem = (singleSchema?: boolean) => `\nSELECT\n [us].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'UnitSystem',\n 'name', [us].[Name],\n 'label', [us].[DisplayLabel],\n 'description', [us].[Description]\n ) as [item]\nFROM\n [meta].[UnitSystemDef] [us]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [us].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType Phenomenon data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst phenomenon = (singleSchema?: boolean) => `\nSELECT\n [pd].[Schema].[Id] AS [SchemaId],\n json_object(\n 'schemaItemType', 'Phenomenon',\n 'name', [pd].[Name],\n 'label', [pd].[DisplayLabel],\n 'description', [pd].[Description],\n 'definition', [pd].[Definition]\n ) as [item]\nFROM\n [meta].[PhenomenonDef] [pd]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [pd].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType Format data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst format = (singleSchema?: boolean) => `\nSELECT\n [fd].[Schema].[Id] AS [SchemaId],\n json_object(\n 'schemaItemType', 'Format',\n 'name', [fd].[Name],\n 'label', [fd].[DisplayLabel],\n 'description', [fd].[Description],\n 'type', json_extract([fd].[NumericSpec], '$.type'),\n 'precision', json_extract([fd].[NumericSpec], '$.precision'),\n 'roundFactor', json_extract([fd].[NumericSpec], '$.roundFactor'),\n 'minWidth', json_extract([fd].[NumericSpec], '$.minWidth'),\n 'showSignOption', json_extract([fd].[NumericSpec], '$.showSignOption'),\n 'decimalSeparator', json_extract([fd].[NumericSpec], '$.decimalSeparator'),\n 'thousandSeparator', json_extract([fd].[NumericSpec], '$.thousandSeparator'),\n 'uomSeparator', json_extract([fd].[NumericSpec], '$.uomSeparator'),\n 'scientificType', json_extract([fd].[NumericSpec], '$.scientificType'),\n 'stationOffsetSize', json_extract([fd].[NumericSpec], '$.stationOffsetSize'),\n 'stationSeparator', json_extract([fd].[NumericSpec], '$.stationSeparator'),\n 'formatTraits', json_extract([fd].[NumericSpec], '$.formatTraits')\n ${singleSchema ? `\n ,'composite', (\n SELECT\n json_object(\n 'spacer', json_extract([fd1].[CompositeSpec], '$.spacer'),\n 'includeZero', json(IIF(json_extract([fd1].[CompositeSpec], '$.includeZero') = 1, 'true', IIF(json_extract([fd1].[CompositeSpec], '$.includeZero') = 0, 'false', null))),\n 'units', (\n SELECT json_group_array(json(json_object(\n 'name', CONCAT([sd].[Name], '.', [ud].[Name]),\n 'label', [fud].[Label]\n )))\n FROM [meta].[FormatDef] [fd2]\n LEFT JOIN [meta].[FormatCompositeUnitDef] [fud] ON [fud].[Format].[Id] = [fd2].[ECInstanceId]\n LEFT JOIN [meta].[UnitDef] [ud] ON [ud].[ECInstanceId] = [fud].[Unit].[Id]\n INNER JOIN [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [ud].[Schema].[Id]\n WHERE [fd2].[ECInstanceId] = [fd1].[ECInstanceId]\n )\n )\n FROM [meta].[FormatDef] [fd1]\n WHERE [fd1].[ECInstanceId]= [fd].[ECInstanceId] AND [fd1].[CompositeSpec] IS NOT NULL\n )` : \"\"}\n) AS item\nFROM\n [meta].[FormatDef] [fd]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [fd].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName` : \"\"}\n`\n\n/**\n * Queries for each SchemaItemType\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const SchemaItemQueries = {\n kindOfQuantity,\n propertyCategory,\n enumeration,\n unit,\n invertedUnit,\n constant,\n unitSystem,\n phenomenon,\n format\n};\n"]}
1
+ {"version":3,"file":"SchemaItemQueries.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaItemQueries.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG;;;qFAGqF;AAErF;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;MAU7C,YAAY,CAAC,CAAC,CAAC;;;;;OAKd,CAAA,CAAC,CAAC,EAAE;;;;EAIT,YAAY,CAAC,CAAC,CAAC;;;;CAIhB,CAAC,CAAC,CAAC,EAAE;CACL,CAAC;AAEF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;EAYnD,YAAY,CAAC,CAAC,CAAC;;;;CAIhB,CAAC,CAAC,CAAC,EAAE;CACL,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;EAuB9C,YAAY,CAAC,CAAC,CAAC;;;oCAGmB,CAAC,CAAC,CAAC,EAAE;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,IAAI,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;EAiBvC,YAAY,CAAC,CAAC,CAAC;;gFAE+D,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;IAUjF,YAAY,CAAC,CAAC,CAAC;oCACiB,CAAC,CAAC,CAAC,EAAE;;;CAGxC,CAAC;AAEF;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;EAa/C,YAAY,CAAC,CAAC,CAAC;;gFAE+D,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;IAUjF,YAAY,CAAC,CAAC,CAAC;oCACiB,CAAC,CAAC,CAAC,EAAE;;;CAGxC,CAAC;AAEF;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;EAe3C,YAAY,CAAC,CAAC,CAAC;;gFAE+D,CAAC,CAAC,CAAC,EAAE;;;;;;IAMjF,YAAY,CAAC,CAAC,CAAC;oCACiB,CAAC,CAAC,CAAC,EAAE;;CAExC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;EAW7C,YAAY,CAAC,CAAC,CAAC;;;oCAGmB,CAAC,CAAC,CAAC,EAAE;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;EAY7C,YAAY,CAAC,CAAC,CAAC;;;oCAGmB,CAAC,CAAC,CAAC,EAAE;CACxC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,YAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;MAoBrC,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;MAoBf,CAAC,CAAC,CAAC,EAAE;;;;EAIT,YAAY,CAAC,CAAC,CAAC;;;oCAGmB,CAAC,CAAC,CAAC,EAAE;CACxC,CAAA;AAED;;;GAGG;AACH,gEAAgE;AACnD,QAAA,iBAAiB,GAAG;IAC/B,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,IAAI;IACJ,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,UAAU;IACV,MAAM;CACP,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n/************************************************************************************\n * All SchemaItem queries for each SchemaItemType are defined here. These queries\n * are shared for both 'partial schema' and 'full schema' queries.\n ***********************************************************************************/\n\n/**\n * Query for SchemaItemType KindOfQuantity data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst kindOfQuantity = (singleSchema?: boolean) => `\nSELECT\n [koq].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'KindOfQuantity',\n 'name', [koq].[Name],\n 'label', [koq].[DisplayLabel],\n 'description', [koq].[Description]\n ,'relativeError', [koq].[RelativeError],\n 'persistenceUnit', [koq].[PersistenceUnit]\n ${singleSchema ? `\n , 'presentationUnits', (\n SELECT json_group_array(js.\"value\")\n FROM [meta].[KindOfQuantityDef] [koq1], json1.json_each([PresentationUnits]) js\n WHERE [koq1].[ECInstanceId] = [koq].[ECInstanceId]\n ) `: \"\"}\n ) as [item]\nFROM\n [meta].[KindOfQuantityDef] [koq]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [koq].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName\n` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType PropertyCategory data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst propertyCategory = (singleSchema?: boolean) => `\nSELECT\n [pc].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'PropertyCategory',\n 'name', [pc].[Name],\n 'label', [pc].[DisplayLabel],\n 'description', [pc].[Description],\n 'priority', [pc].[Priority]\n ) as [item]\nFROM\n [meta].[PropertyCategoryDef] [pc]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [pc].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName\n` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType Enumeration data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst enumeration = (singleSchema?: boolean) => `\nSELECT\n [ed].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'Enumeration',\n 'name', [ed].[Name],\n 'label', [ed].[DisplayLabel],\n 'description', [ed].[Description],\n 'type', IIF([ed].[Type] = 1281, 'int', IIF([ed].[Type] = 2305, 'string', null)),\n 'isStrict', IIF([ed].[IsStrict] = 1, json('true'), json('false')),\n 'enumerators', (\n SELECT json_group_array(json(json_object(\n 'name', json_extract(js.\"value\", '$.Name'),\n 'value', IFNULL(json_extract(js.\"value\", '$.StringValue'), (json_extract(js.\"value\", '$.IntValue'))),\n 'label', json_extract(js.\"value\", '$.DisplayLabel'),\n 'description', json_extract(js.\"value\", '$.Description')\n )))\n FROM [meta].[ECEnumerationDef] [enumerationDef], json1.json_each([EnumValues]) js\n WHERE [enumerationDef].[ECInstanceId] = [ed].[ECInstanceId]\n )\n ) as [item]\nFROM\n [meta].[ECEnumerationDef] [ed]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ed].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType Unit data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst unit = (singleSchema?: boolean) => `\nSELECT\n [ud].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'Unit',\n 'name', [ud].[Name],\n 'label', [ud].[DisplayLabel],\n 'description', [ud].[Description],\n 'definition', [ud].[Definition],\n 'numerator', IIF([ud].[Numerator] IS NULL, NULL, json(format('%.16g', [ud].[Numerator]))),\n 'denominator', IIF([ud].[Denominator] IS NULL, NULL, json(format('%.16g', [ud].[Denominator]))),\n 'offset', IIF([ud].[Offset] IS NULL, NULL, json(format('%!.15f', [ud].[Offset]))),\n 'unitSystem', CONCAT([uss].[Name],'.', [usd].[Name]),\n 'phenomenon', CONCAT([ps].[Name],'.', [pd].[Name])\n ) as item\nFROM\n [meta].[UnitDef] [ud]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ud].[Schema].[Id]` : \"\"}\nJOIN [meta].[UnitSystemDef] [usd]\n ON [usd].[ECInstanceId] = [ud].[UnitSystem].[Id]\nJOIN [meta].[ECSchemaDef] [uss]\n ON [uss].[ECInstanceId] = [usd].[Schema].[Id]\nJOIN [meta].[PhenomenonDef] [pd]\n ON [pd].[ECInstanceId] = [ud].[Phenomenon].[Id]\nJOIN [meta].[ECSchemaDef] [ps]\n ON [ps].[ECInstanceId] = [pd].[Schema].[Id]\nWHERE\n ${singleSchema ? `\n [schema].[Name] = :schemaName AND` : \"\"}\n [ud].[IsConstant] = 0 AND\n [ud].[InvertingUnit] IS NULL\n`;\n\n/**\n * Query for SchemaItemType InvertedUnit data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst invertedUnit = (singleSchema?: boolean) => `\nSELECT\n [ud].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'InvertedUnit',\n 'name', [ud].[Name],\n 'label', [ud].[DisplayLabel],\n 'description', [ud].[Description],\n 'unitSystem', CONCAT([systemSchema].[Name],'.', [usd].[Name]),\n 'invertsUnit', IIF([iud].[Name] IS NULL, null, CONCAT([ius].[Name],'.', [iud].[Name]))\n ) as [item]\nFROM\n [meta].[UnitDef] [ud]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [ud].[Schema].[Id]` : \"\"}\nJOIN [meta].[UnitSystemDef] [usd]\n ON [usd].[ECInstanceId] = [ud].[UnitSystem].[Id]\nJOIN [meta].[ECSchemaDef] [systemSchema]\n ON [systemSchema].[ECInstanceId] = [usd].[Schema].[Id]\nLEFT JOIN [meta].[UnitDef] [iud]\n ON [iud].[ECInstanceId] = [ud].[InvertingUnit].[Id]\nLEFT JOIN [meta].[ECSchemaDef] [ius]\n ON [ius].[ECInstanceId] = [iud].[Schema].[Id]\nWHERE\n ${singleSchema ? `\n [schema].[Name] = :schemaName AND` : \"\"}\n [ud].[IsConstant] = 0 AND\n [ud].[InvertingUnit] IS NOT NULL\n`;\n\n/**\n * Query for SchemaItemType Constant data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst constant = (singleSchema?: boolean) => `\nSELECT\n [cd].[Schema].[Id] AS [SchemaId],\n json_object(\n 'schemaItemType', 'Constant',\n 'name', [cd].[Name],\n 'label', [cd].[DisplayLabel],\n 'description', [cd].[Description],\n 'definition', [cd].[Definition],\n 'numerator', IIF([cd].[Numerator] IS NULL, NULL, json(format('%.16g', [cd].[Numerator]))),\n 'denominator', IIF([cd].[Denominator] IS NULL, NULL, json(format('%.16g', [cd].[Denominator]))),\n 'phenomenon', CONCAT([phenomSchema].[Name],'.', [phenomDef].[Name])\n ) as item\nFROM\n [meta].[UnitDef] [cd]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [cd].[Schema].[Id]` : \"\"}\nJOIN [meta].[PhenomenonDef] [phenomDef]\n ON [phenomDef].[ECInstanceId] = [cd].[Phenomenon].[Id]\nJOIN [meta].[ECSchemaDef] [phenomSchema]\n ON [phenomSchema].[ECInstanceId] = [phenomDef].[Schema].[Id]\nWHERE\n ${singleSchema ? `\n [schema].[Name] = :schemaName AND` : \"\"}\n [cd].[IsConstant] = 1\n`;\n\n/**\n * Query for SchemaItemType UnitSystem data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst unitSystem = (singleSchema?: boolean) => `\nSELECT\n [us].[Schema].[Id] AS [SchemaId],\n json_object (\n 'schemaItemType', 'UnitSystem',\n 'name', [us].[Name],\n 'label', [us].[DisplayLabel],\n 'description', [us].[Description]\n ) as [item]\nFROM\n [meta].[UnitSystemDef] [us]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [us].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType Phenomenon data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst phenomenon = (singleSchema?: boolean) => `\nSELECT\n [pd].[Schema].[Id] AS [SchemaId],\n json_object(\n 'schemaItemType', 'Phenomenon',\n 'name', [pd].[Name],\n 'label', [pd].[DisplayLabel],\n 'description', [pd].[Description],\n 'definition', [pd].[Definition]\n ) as [item]\nFROM\n [meta].[PhenomenonDef] [pd]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [pd].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName` : \"\"}\n`;\n\n/**\n * Query for SchemaItemType Format data.\n * @param singleSchema Indicates if a filter and join for a single Schema should be applied.\n */\nconst format = (singleSchema?: boolean) => `\nSELECT\n [fd].[Schema].[Id] AS [SchemaId],\n json_object(\n 'schemaItemType', 'Format',\n 'name', [fd].[Name],\n 'label', [fd].[DisplayLabel],\n 'description', [fd].[Description],\n 'type', json_extract([fd].[NumericSpec], '$.type'),\n 'precision', json_extract([fd].[NumericSpec], '$.precision'),\n 'roundFactor', json_extract([fd].[NumericSpec], '$.roundFactor'),\n 'minWidth', json_extract([fd].[NumericSpec], '$.minWidth'),\n 'showSignOption', json_extract([fd].[NumericSpec], '$.showSignOption'),\n 'decimalSeparator', json_extract([fd].[NumericSpec], '$.decimalSeparator'),\n 'thousandSeparator', json_extract([fd].[NumericSpec], '$.thousandSeparator'),\n 'uomSeparator', json_extract([fd].[NumericSpec], '$.uomSeparator'),\n 'scientificType', json_extract([fd].[NumericSpec], '$.scientificType'),\n 'stationOffsetSize', json_extract([fd].[NumericSpec], '$.stationOffsetSize'),\n 'stationSeparator', json_extract([fd].[NumericSpec], '$.stationSeparator'),\n 'formatTraits', json_extract([fd].[NumericSpec], '$.formatTraits')\n ${singleSchema ? `\n ,'composite', (\n SELECT\n json_object(\n 'spacer', json_extract([fd1].[CompositeSpec], '$.spacer'),\n 'includeZero', json(IIF(json_extract([fd1].[CompositeSpec], '$.includeZero') = 1, 'true', IIF(json_extract([fd1].[CompositeSpec], '$.includeZero') = 0, 'false', null))),\n 'units', (\n SELECT json_group_array(json(json_object(\n 'name', CONCAT([sd].[Name], '.', [ud].[Name]),\n 'label', [fud].[Label]\n )))\n FROM [meta].[FormatDef] [fd2]\n LEFT JOIN [meta].[FormatCompositeUnitDef] [fud] ON [fud].[Format].[Id] = [fd2].[ECInstanceId]\n LEFT JOIN [meta].[UnitDef] [ud] ON [ud].[ECInstanceId] = [fud].[Unit].[Id]\n INNER JOIN [meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [ud].[Schema].[Id]\n WHERE [fd2].[ECInstanceId] = [fd1].[ECInstanceId]\n )\n )\n FROM [meta].[FormatDef] [fd1]\n WHERE [fd1].[ECInstanceId]= [fd].[ECInstanceId] AND [fd1].[CompositeSpec] IS NOT NULL\n )` : \"\"}\n) AS item\nFROM\n [meta].[FormatDef] [fd]\n${singleSchema ? `\nJOIN\n [meta].[ECSchemaDef] [schema] ON [schema].[ECInstanceId] = [fd].[Schema].[Id]\nWHERE [schema].[Name] = :schemaName` : \"\"}\n`\n\n/**\n * Queries for each SchemaItemType\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const SchemaItemQueries = {\n kindOfQuantity,\n propertyCategory,\n enumeration,\n unit,\n invertedUnit,\n constant,\n unitSystem,\n phenomenon,\n format\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { SchemaContext } from "../Context";
2
1
  import { SchemaItemProps, SchemaProps } from "../Deserialization/JsonProps";
2
+ import { SchemaInfo } from "../Interfaces";
3
3
  import { CustomAttribute } from "../Metadata/CustomAttribute";
4
4
  /**
5
5
  * Parses SchemaProps JSON returned from an ECSql query and returns the correct SchemaProps JSON object.
@@ -16,7 +16,7 @@ export declare class SchemaParser {
16
16
  * @param context The SchemaContext that will contain the schema and it's references.
17
17
  * @returns The corrected SchemaProps JSON.
18
18
  */
19
- static parse(schema: SchemaProps, context: SchemaContext): Promise<SchemaProps>;
19
+ static parse(schema: SchemaProps, schemaInfos: Iterable<SchemaInfo>): Promise<SchemaProps>;
20
20
  /**
21
21
  * Parse the given SchemaItemProps array, as returned from an ECSql query, and returns the corrected SchemaItemProps.
22
22
  * @param schemaItems The SchemaItemProps array returned from an iModelDb.
@@ -24,9 +24,9 @@ export declare class SchemaParser {
24
24
  * @param context The SchemaContext containing the Schema.
25
25
  * @returns The corrected SchemaItemProps.
26
26
  */
27
- static parseSchemaItems(schemaItems: readonly SchemaItemProps[], schemaName: string, context: SchemaContext): Promise<SchemaItemProps[] | undefined>;
27
+ static parseSchemaItems(schemaItems: readonly SchemaItemProps[], schemaName: string, schemaInfos: Iterable<SchemaInfo>): Promise<SchemaItemProps[] | undefined>;
28
28
  private static parseItems;
29
- static parseItem(props: SchemaItemProps, schemaName: string, context: SchemaContext): Promise<SchemaItemProps>;
29
+ static parseItem(props: SchemaItemProps, schemaName: string, schemaInfos: Iterable<SchemaInfo>): Promise<SchemaItemProps>;
30
30
  }
31
31
  /**
32
32
  * Utility method to parse CustomAttribute data retrieved from a ECSql query.
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaParser.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaParser.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAY9D;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB;;;;;;OAMG;WACiB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAiB5F;;;;;;OAMG;WACiB,gBAAgB,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC;mBAU5I,UAAU;WAWX,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;CAyB5H;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAA,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CAAE,GAAG,eAAe,CAKrI"}
1
+ {"version":3,"file":"SchemaParser.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaParser.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAY9D;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB;;;;;;OAMG;WACiB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAiBvG;;;;;;OAMG;WACiB,gBAAgB,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC;mBAUvJ,UAAU;WAWX,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAyBvI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAA,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CAAE,GAAG,eAAe,CAKrI"}
@@ -28,14 +28,14 @@ class SchemaParser {
28
28
  * @param context The SchemaContext that will contain the schema and it's references.
29
29
  * @returns The corrected SchemaProps JSON.
30
30
  */
31
- static async parse(schema, context) {
31
+ static async parse(schema, schemaInfos) {
32
32
  const props = schema;
33
33
  props.$schema = Constants_1.ECSchemaNamespaceUris.SCHEMAURL3_2_JSON,
34
34
  props.customAttributes = props.customAttributes ? props.customAttributes.map((attr) => { return parseCustomAttribute(attr); }) : undefined;
35
35
  props.label = props.label === null ? undefined : props.label;
36
36
  props.description = props.description === null ? undefined : props.description;
37
37
  if (props.items) {
38
- props.items = await this.parseItems(props.items, props.name, context);
38
+ props.items = await this.parseItems(props.items, props.name, schemaInfos);
39
39
  }
40
40
  if (!props.customAttributes || props.customAttributes.length === 0)
41
41
  delete props.customAttributes;
@@ -49,46 +49,46 @@ class SchemaParser {
49
49
  * @param context The SchemaContext containing the Schema.
50
50
  * @returns The corrected SchemaItemProps.
51
51
  */
52
- static async parseSchemaItems(schemaItems, schemaName, context) {
52
+ static async parseSchemaItems(schemaItems, schemaName, schemaInfos) {
53
53
  const items = [];
54
54
  for (const item of schemaItems) {
55
- const props = await this.parseItem(item, schemaName, context);
55
+ const props = await this.parseItem(item, schemaName, schemaInfos);
56
56
  const cleaned = JSON.parse(JSON.stringify(props, clean));
57
57
  items.push(cleaned);
58
58
  }
59
59
  return items.length > 0 ? items : undefined;
60
60
  }
61
- static async parseItems(schemaItemProps, schemaName, context) {
61
+ static async parseItems(schemaItemProps, schemaName, schemaInfos) {
62
62
  const items = {};
63
63
  for (const itemProps of schemaItemProps) {
64
- const props = await this.parseItem(itemProps, schemaName, context);
64
+ const props = await this.parseItem(itemProps, schemaName, schemaInfos);
65
65
  items[props.name] = props;
66
66
  delete props.name;
67
67
  }
68
68
  return Object.keys(items).length > 0 ? items : undefined;
69
69
  }
70
- static async parseItem(props, schemaName, context) {
70
+ static async parseItem(props, schemaName, schemaInfos) {
71
71
  const schemaItem = "string" === typeof (props) ? JSON.parse(props) : props;
72
72
  const type = (0, ECObjects_1.parseSchemaItemType)(schemaItem.schemaItemType);
73
73
  switch (type) {
74
74
  case ECObjects_1.SchemaItemType.KindOfQuantity:
75
- const koqParser = new SchemaItemParsers_1.KindOfQuantityParser(schemaName, context);
75
+ const koqParser = new SchemaItemParsers_1.KindOfQuantityParser(schemaName, schemaInfos);
76
76
  return koqParser.parse(schemaItem);
77
77
  case ECObjects_1.SchemaItemType.EntityClass:
78
78
  case ECObjects_1.SchemaItemType.StructClass:
79
- const classParser = new ClassParsers_1.ClassParser(schemaName, context);
79
+ const classParser = new ClassParsers_1.ClassParser(schemaName, schemaInfos);
80
80
  return classParser.parse(schemaItem);
81
81
  case ECObjects_1.SchemaItemType.RelationshipClass:
82
- const relationshipParser = new ClassParsers_1.RelationshipClassParser(schemaName, context);
82
+ const relationshipParser = new ClassParsers_1.RelationshipClassParser(schemaName, schemaInfos);
83
83
  return relationshipParser.parse(schemaItem);
84
84
  case ECObjects_1.SchemaItemType.Mixin:
85
- const mixinParser = new ClassParsers_1.MixinParser(schemaName, context);
85
+ const mixinParser = new ClassParsers_1.MixinParser(schemaName, schemaInfos);
86
86
  return mixinParser.parse(schemaItem);
87
87
  case ECObjects_1.SchemaItemType.CustomAttributeClass:
88
- const caParser = new ClassParsers_1.CustomAttributeClassParser(schemaName, context);
88
+ const caParser = new ClassParsers_1.CustomAttributeClassParser(schemaName, schemaInfos);
89
89
  return caParser.parse(schemaItem);
90
90
  default:
91
- const itemParser = new SchemaItemParsers_1.SchemaItemParser(schemaName, context);
91
+ const itemParser = new SchemaItemParsers_1.SchemaItemParser(schemaName, schemaInfos);
92
92
  return itemParser.parse(schemaItem);
93
93
  }
94
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaParser.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaParser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ECSchemaNamespaceUris } from \"../Constants\";\nimport { SchemaContext } from \"../Context\";\nimport { SchemaItemProps, SchemaProps } from \"../Deserialization/JsonProps\";\nimport { parseSchemaItemType, SchemaItemType } from \"../ECObjects\";\nimport { CustomAttribute } from \"../Metadata/CustomAttribute\";\nimport { ClassParser, CustomAttributeClassParser, MixinParser, RelationshipClassParser } from \"./ClassParsers\";\nimport { KindOfQuantityParser, SchemaItemParser } from \"./SchemaItemParsers\";\n\nfunction clean(_key: string, value: any) {\n return value === null ? undefined : value;\n}\n\ntype MutableSchemaProps = {\n -readonly [K in keyof SchemaProps]: SchemaProps[K]\n};\n\n/**\n * Parses SchemaProps JSON returned from an ECSql query and returns the correct SchemaProps JSON object.\n * This is necessary as a small amount information (ie. CustomAttributes, unqualified type names, etc.)\n * returned from the iModelDb is in a different format than is required for a given Schema or\n * SchemaItemProps JSON object.\n * @internal\n */\nexport class SchemaParser {\n /**\n * Corrects the SchemaProps JSON returned from the query to a proper SchemaProps\n * JSON object.\n * @param schema The SchemaProps JSON object to parse.\n * @param context The SchemaContext that will contain the schema and it's references.\n * @returns The corrected SchemaProps JSON.\n */\n public static async parse(schema: SchemaProps, context: SchemaContext): Promise<SchemaProps> {\n const props = schema as MutableSchemaProps;\n props.$schema = ECSchemaNamespaceUris.SCHEMAURL3_2_JSON,\n props.customAttributes = props.customAttributes ? props.customAttributes.map((attr: any) => { return parseCustomAttribute(attr); }) : undefined;\n props.label = props.label === null ? undefined : props.label;\n props.description = props.description === null ? undefined : props.description;\n if (props.items) {\n props.items = await this.parseItems(props.items as any, props.name, context);\n }\n\n if (!props.customAttributes || props.customAttributes.length === 0)\n delete props.customAttributes;\n\n const cleaned = JSON.parse(JSON.stringify(props, clean)) as SchemaProps;\n return cleaned;\n }\n\n /**\n * Parse the given SchemaItemProps array, as returned from an ECSql query, and returns the corrected SchemaItemProps.\n * @param schemaItems The SchemaItemProps array returned from an iModelDb.\n * @param schemaName The name of the Schema to which the SchemaItemProps belong.\n * @param context The SchemaContext containing the Schema.\n * @returns The corrected SchemaItemProps.\n */\n public static async parseSchemaItems(schemaItems: readonly SchemaItemProps[], schemaName: string, context: SchemaContext): Promise<SchemaItemProps[] | undefined> {\n const items: SchemaItemProps[] = [];\n for (const item of schemaItems) {\n const props = await this.parseItem(item, schemaName, context);\n const cleaned = JSON.parse(JSON.stringify(props, clean));\n items.push(cleaned);\n }\n return items.length > 0 ? items : undefined;\n }\n\n private static async parseItems(schemaItemProps: readonly SchemaItemProps[], schemaName: string, context: SchemaContext): Promise<{ [name: string]: SchemaItemProps } | undefined> {\n const items: { [name: string]: SchemaItemProps } = {};\n for (const itemProps of schemaItemProps) {\n const props = await this.parseItem(itemProps, schemaName, context);\n items[props.name!] = props;\n delete (props as any).name;\n }\n\n return Object.keys(items).length > 0 ? items : undefined;\n }\n\n public static async parseItem(props: SchemaItemProps, schemaName: string, context: SchemaContext): Promise<SchemaItemProps> {\n const schemaItem = \"string\" === typeof (props) ? JSON.parse(props) : props;\n const type = parseSchemaItemType(schemaItem.schemaItemType);\n switch (type) {\n case SchemaItemType.KindOfQuantity:\n const koqParser = new KindOfQuantityParser(schemaName, context);\n return koqParser.parse(schemaItem);\n case SchemaItemType.EntityClass:\n case SchemaItemType.StructClass:\n const classParser = new ClassParser(schemaName, context);\n return classParser.parse(schemaItem);\n case SchemaItemType.RelationshipClass:\n const relationshipParser = new RelationshipClassParser(schemaName, context);\n return relationshipParser.parse(schemaItem);\n case SchemaItemType.Mixin:\n const mixinParser = new MixinParser(schemaName, context);\n return mixinParser.parse(schemaItem);\n case SchemaItemType.CustomAttributeClass:\n const caParser = new CustomAttributeClassParser(schemaName, context);\n return caParser.parse(schemaItem);\n default:\n const itemParser = new SchemaItemParser(schemaName, context);\n return itemParser.parse(schemaItem);\n }\n }\n}\n\n/**\n * Utility method to parse CustomAttribute data retrieved from a ECSql query.\n * @param customAttribute CustomAttribute data as retrieved from an iModel query.\n * @returns The CustomAttribute instance.\n * @internal\n */\nexport function parseCustomAttribute(customAttribute: { ecClass: string; ecSchema: string;[propName: string]: any; }): CustomAttribute {\n return {\n ...customAttribute[customAttribute.ecClass],\n className: `${(customAttribute.ecSchema).split('.')[0]}.${customAttribute.ecClass}`,\n }\n}"]}
1
+ {"version":3,"file":"SchemaParser.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaParser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ECSchemaNamespaceUris } from \"../Constants\";\nimport { SchemaItemProps, SchemaProps } from \"../Deserialization/JsonProps\";\nimport { parseSchemaItemType, SchemaItemType } from \"../ECObjects\";\nimport { SchemaInfo } from \"../Interfaces\";\nimport { CustomAttribute } from \"../Metadata/CustomAttribute\";\nimport { ClassParser, CustomAttributeClassParser, MixinParser, RelationshipClassParser } from \"./ClassParsers\";\nimport { KindOfQuantityParser, SchemaItemParser } from \"./SchemaItemParsers\";\n\nfunction clean(_key: string, value: any) {\n return value === null ? undefined : value;\n}\n\ntype MutableSchemaProps = {\n -readonly [K in keyof SchemaProps]: SchemaProps[K]\n};\n\n/**\n * Parses SchemaProps JSON returned from an ECSql query and returns the correct SchemaProps JSON object.\n * This is necessary as a small amount information (ie. CustomAttributes, unqualified type names, etc.)\n * returned from the iModelDb is in a different format than is required for a given Schema or\n * SchemaItemProps JSON object.\n * @internal\n */\nexport class SchemaParser {\n /**\n * Corrects the SchemaProps JSON returned from the query to a proper SchemaProps\n * JSON object.\n * @param schema The SchemaProps JSON object to parse.\n * @param context The SchemaContext that will contain the schema and it's references.\n * @returns The corrected SchemaProps JSON.\n */\n public static async parse(schema: SchemaProps, schemaInfos: Iterable<SchemaInfo>): Promise<SchemaProps> {\n const props = schema as MutableSchemaProps;\n props.$schema = ECSchemaNamespaceUris.SCHEMAURL3_2_JSON,\n props.customAttributes = props.customAttributes ? props.customAttributes.map((attr: any) => { return parseCustomAttribute(attr); }) : undefined;\n props.label = props.label === null ? undefined : props.label;\n props.description = props.description === null ? undefined : props.description;\n if (props.items) {\n props.items = await this.parseItems(props.items as any, props.name, schemaInfos);\n }\n\n if (!props.customAttributes || props.customAttributes.length === 0)\n delete props.customAttributes;\n\n const cleaned = JSON.parse(JSON.stringify(props, clean)) as SchemaProps;\n return cleaned;\n }\n\n /**\n * Parse the given SchemaItemProps array, as returned from an ECSql query, and returns the corrected SchemaItemProps.\n * @param schemaItems The SchemaItemProps array returned from an iModelDb.\n * @param schemaName The name of the Schema to which the SchemaItemProps belong.\n * @param context The SchemaContext containing the Schema.\n * @returns The corrected SchemaItemProps.\n */\n public static async parseSchemaItems(schemaItems: readonly SchemaItemProps[], schemaName: string, schemaInfos: Iterable<SchemaInfo>): Promise<SchemaItemProps[] | undefined> {\n const items: SchemaItemProps[] = [];\n for (const item of schemaItems) {\n const props = await this.parseItem(item, schemaName, schemaInfos);\n const cleaned = JSON.parse(JSON.stringify(props, clean));\n items.push(cleaned);\n }\n return items.length > 0 ? items : undefined;\n }\n\n private static async parseItems(schemaItemProps: readonly SchemaItemProps[], schemaName: string, schemaInfos: Iterable<SchemaInfo>): Promise<{ [name: string]: SchemaItemProps } | undefined> {\n const items: { [name: string]: SchemaItemProps } = {};\n for (const itemProps of schemaItemProps) {\n const props = await this.parseItem(itemProps, schemaName, schemaInfos);\n items[props.name!] = props;\n delete (props as any).name;\n }\n\n return Object.keys(items).length > 0 ? items : undefined;\n }\n\n public static async parseItem(props: SchemaItemProps, schemaName: string, schemaInfos: Iterable<SchemaInfo>): Promise<SchemaItemProps> {\n const schemaItem = \"string\" === typeof (props) ? JSON.parse(props) : props;\n const type = parseSchemaItemType(schemaItem.schemaItemType);\n switch (type) {\n case SchemaItemType.KindOfQuantity:\n const koqParser = new KindOfQuantityParser(schemaName, schemaInfos);\n return koqParser.parse(schemaItem);\n case SchemaItemType.EntityClass:\n case SchemaItemType.StructClass:\n const classParser = new ClassParser(schemaName, schemaInfos);\n return classParser.parse(schemaItem);\n case SchemaItemType.RelationshipClass:\n const relationshipParser = new RelationshipClassParser(schemaName, schemaInfos);\n return relationshipParser.parse(schemaItem);\n case SchemaItemType.Mixin:\n const mixinParser = new MixinParser(schemaName, schemaInfos);\n return mixinParser.parse(schemaItem);\n case SchemaItemType.CustomAttributeClass:\n const caParser = new CustomAttributeClassParser(schemaName, schemaInfos);\n return caParser.parse(schemaItem);\n default:\n const itemParser = new SchemaItemParser(schemaName, schemaInfos);\n return itemParser.parse(schemaItem);\n }\n }\n}\n\n/**\n * Utility method to parse CustomAttribute data retrieved from a ECSql query.\n * @param customAttribute CustomAttribute data as retrieved from an iModel query.\n * @returns The CustomAttribute instance.\n * @internal\n */\nexport function parseCustomAttribute(customAttribute: { ecClass: string; ecSchema: string;[propName: string]: any; }): CustomAttribute {\n return {\n ...customAttribute[customAttribute.ecClass],\n className: `${(customAttribute.ecSchema).split('.')[0]}.${customAttribute.ecClass}`,\n }\n}"]}
@@ -269,7 +269,7 @@ async function createNavigationProperty(ecClass, name, relationship, direction)
269
269
  }
270
270
  /** @internal */
271
271
  function createNavigationPropertySync(ecClass, name, relationship, direction) {
272
- if (ecClass.getPropertySync(name))
272
+ if (ecClass.getPropertySync(name, true))
273
273
  throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);
274
274
  let resolvedRelationship;
275
275
  if (typeof (relationship) === "string") {
@@ -1 +1 @@
1
- {"version":3,"file":"EntityClass.js","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { EntityClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { parseStrengthDirection, SchemaItemType, StrengthDirection } from \"../ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\nimport { HasMixins, LazyLoadedMixin } from \"../Interfaces\";\nimport { SchemaItemKey } from \"../SchemaKey\";\nimport { ECClass } from \"./Class\";\nimport { Mixin } from \"./Mixin\";\nimport { AnyProperty, NavigationProperty, Property } from \"./Property\";\nimport { RelationshipClass } from \"./RelationshipClass\";\nimport { SchemaItem } from \"./SchemaItem\";\n\n/**\n * A Typescript class representation of an ECEntityClass.\n * @public @preview\n */\nexport class EntityClass extends ECClass implements HasMixins {\n public override readonly schemaItemType = EntityClass.schemaItemType;\n /** @internal */\n public static override get schemaItemType() { return SchemaItemType.EntityClass; }\n private _mixins?: LazyLoadedMixin[];\n\n public get mixins(): ReadonlyArray<LazyLoadedMixin> {\n if (!this._mixins)\n return [];\n return this._mixins;\n }\n\n public *getMixinsSync(): Iterable<Mixin> {\n if (!this._mixins)\n return;\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync(mixin, Mixin);\n if (mObj) {\n yield mObj;\n }\n }\n }\n\n /**\n *\n * @param mixin\n * @internal\n */\n protected addMixin(mixin: Mixin) {\n if (!this._mixins)\n this._mixins = [];\n\n this._mixins.push(new DelayedPromiseWithProps(mixin.key, async () => mixin));\n return;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override async getInheritedProperty(name: string): Promise<AnyProperty | undefined> {\n let inheritedProperty = await super.getInheritedProperty(name);\n\n if (!inheritedProperty && this._mixins) {\n const mixinProps = await Promise.all(this._mixins.map(async (mixin) => (await mixin).getProperty(name)));\n mixinProps.some((prop) => {\n inheritedProperty = prop as AnyProperty;\n return inheritedProperty !== undefined;\n });\n }\n\n return inheritedProperty as AnyProperty | undefined;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override getInheritedPropertySync(name: string): Property | undefined {\n const inheritedProperty = super.getInheritedPropertySync(name);\n if (inheritedProperty)\n return inheritedProperty;\n\n if (!this._mixins) {\n return undefined;\n }\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync(mixin);\n if (mObj && ECClass.isECClass(mObj)) {\n const result = mObj.getPropertySync(name, true);\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n }\n\n /**\n *\n * @param cache\n * @returns\n *\n * @internal\n */\nprotected override async buildPropertyCache(): Promise<Map<string, Property>> {\n const cache = new Map<string, Property>();\n const baseClass = await this.baseClass;\n if (baseClass) {\n for (const property of await baseClass.getProperties()) {\n if (!cache.has(property.name.toUpperCase()))\n cache.set(property.name.toUpperCase(), property);\n }\n }\n\n for (const mixin of this.mixins) {\n const mixinObj = await mixin;\n const mixinProps = mixinObj.getPropertiesSync();\n for (const property of mixinProps) {\n if (!cache.has(property.name.toUpperCase()))\n cache.set(property.name.toUpperCase(), property);\n }\n }\n\n const localProps = await this.getProperties(true);\n if (localProps) {\n for (const property of localProps) {\n cache.set(property.name.toUpperCase(), property);\n }\n }\n return cache;\n}\n\n /**\n *\n * @param cache\n * @internal\n */\n protected override buildPropertyCacheSync(): Map<string, Property> {\n const cache = new Map<string, Property>();\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n Array.from(baseClass.getPropertiesSync()).forEach((property) => {\n if (!cache.has(property.name.toUpperCase()))\n cache.set(property.name.toUpperCase(), property);\n });\n }\n\n for (const mixin of this.getMixinsSync()) {\n const mixinProps = mixin.getPropertiesSync();\n for (const property of mixinProps) {\n if (!cache.has(property.name.toUpperCase()))\n cache.set(property.name.toUpperCase(), property);\n }\n }\n\n const localProps = this.getPropertiesSync(true);\n if (localProps) {\n Array.from(localProps).forEach(property => {\n cache.set(property.name.toUpperCase(), property);\n });\n }\n return cache;\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n * @internal\n */\n protected async createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n return this.addProperty(await createNavigationProperty(this, name, relationship, direction));\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n * @internal\n */\n protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n return this.addProperty(createNavigationPropertySync(this, name, relationship, direction));\n }\n\n /**\n * Save this EntityClass' properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): EntityClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n if (this.mixins.length > 0)\n schemaJson.mixins = this.mixins.map((mixin) => mixin.fullName);\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n for (const lazyMixin of this.mixins) {\n const mixin = await lazyMixin;\n const mixinElement = schemaXml.createElement(\"BaseClass\");\n const mixinName = XmlSerializationUtils.createXmlTypedName(this.schema, mixin.schema, mixin.name);\n mixinElement.textContent = mixinName;\n itemElement.appendChild(mixinElement);\n }\n return itemElement;\n }\n\n public override async fromJSON(entityClassProps: EntityClassProps) {\n this.fromJSONSync(entityClassProps);\n }\n\n public override fromJSONSync(entityClassProps: EntityClassProps) {\n super.fromJSONSync(entityClassProps);\n\n if (undefined !== entityClassProps.mixins) {\n if (!this._mixins)\n this._mixins = [];\n for (const name of entityClassProps.mixins) {\n const mixinSchemaItemKey = this.schema.getSchemaItemKey(name);\n if (!mixinSchemaItemKey)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n\n if (!this._mixins.find((value) => mixinSchemaItemKey.matchesFullName(value.fullName))) {\n this._mixins.push(new DelayedPromiseWithProps<SchemaItemKey, Mixin>(mixinSchemaItemKey,\n async () => {\n const mixin = await this.schema.lookupItem(mixinSchemaItemKey, Mixin);\n if (undefined === mixin)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n return mixin;\n }));\n }\n }\n }\n }\n\n /**\n * Type guard to check if the SchemaItem is of type EntityClass.\n * @param item The SchemaItem to check.\n * @returns True if the item is an EntityClass, false otherwise.\n */\n public static isEntityClass(item?: SchemaItem): item is EntityClass {\n if (item && item.schemaItemType === SchemaItemType.EntityClass)\n return true;\n\n return false;\n }\n\n /**\n * Type assertion to check if the SchemaItem is of type EntityClass.\n * @param item The SchemaItem to check.\n * @returns The item cast to EntityClass if it is an EntityClass, undefined otherwise.\n * @internal\n */\n public static assertIsEntityClass(item?: SchemaItem): asserts item is EntityClass {\n if (!this.isEntityClass(item))\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.EntityClass}' (EntityClass)`);\n }\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableEntityClass extends EntityClass {\n public abstract override addMixin(mixin: Mixin): any;\n public abstract override createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty>;\n public abstract override createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/** @internal */\nexport async function createNavigationProperty(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n if (await ecClass.getProperty(name, true))\n throw new ECSchemaError(ECSchemaStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = await ecClass.schema.lookupItem(relationship, RelationshipClass);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECSchemaError(ECSchemaStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECSchemaError(ECSchemaStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n\n/** @internal */\nexport function createNavigationPropertySync(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n if (ecClass.getPropertySync(name))\n throw new ECSchemaError(ECSchemaStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = ecClass.schema.lookupItemSync(relationship, RelationshipClass);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECSchemaError(ECSchemaStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECSchemaError(ECSchemaStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n"]}
1
+ {"version":3,"file":"EntityClass.js","sourceRoot":"","sources":["../../../src/Metadata/EntityClass.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { EntityClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { parseStrengthDirection, SchemaItemType, StrengthDirection } from \"../ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\nimport { HasMixins, LazyLoadedMixin } from \"../Interfaces\";\nimport { SchemaItemKey } from \"../SchemaKey\";\nimport { ECClass } from \"./Class\";\nimport { Mixin } from \"./Mixin\";\nimport { AnyProperty, NavigationProperty, Property } from \"./Property\";\nimport { RelationshipClass } from \"./RelationshipClass\";\nimport { SchemaItem } from \"./SchemaItem\";\n\n/**\n * A Typescript class representation of an ECEntityClass.\n * @public @preview\n */\nexport class EntityClass extends ECClass implements HasMixins {\n public override readonly schemaItemType = EntityClass.schemaItemType;\n /** @internal */\n public static override get schemaItemType() { return SchemaItemType.EntityClass; }\n private _mixins?: LazyLoadedMixin[];\n\n public get mixins(): ReadonlyArray<LazyLoadedMixin> {\n if (!this._mixins)\n return [];\n return this._mixins;\n }\n\n public *getMixinsSync(): Iterable<Mixin> {\n if (!this._mixins)\n return;\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync(mixin, Mixin);\n if (mObj) {\n yield mObj;\n }\n }\n }\n\n /**\n *\n * @param mixin\n * @internal\n */\n protected addMixin(mixin: Mixin) {\n if (!this._mixins)\n this._mixins = [];\n\n this._mixins.push(new DelayedPromiseWithProps(mixin.key, async () => mixin));\n return;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override async getInheritedProperty(name: string): Promise<AnyProperty | undefined> {\n let inheritedProperty = await super.getInheritedProperty(name);\n\n if (!inheritedProperty && this._mixins) {\n const mixinProps = await Promise.all(this._mixins.map(async (mixin) => (await mixin).getProperty(name)));\n mixinProps.some((prop) => {\n inheritedProperty = prop as AnyProperty;\n return inheritedProperty !== undefined;\n });\n }\n\n return inheritedProperty as AnyProperty | undefined;\n }\n\n /**\n * Searches the base class, if one exists, first then any mixins that exist for the property with the name provided.\n * @param name The name of the property to find.\n */\n public override getInheritedPropertySync(name: string): Property | undefined {\n const inheritedProperty = super.getInheritedPropertySync(name);\n if (inheritedProperty)\n return inheritedProperty;\n\n if (!this._mixins) {\n return undefined;\n }\n\n for (const mixin of this._mixins) {\n const mObj = this.schema.lookupItemSync(mixin);\n if (mObj && ECClass.isECClass(mObj)) {\n const result = mObj.getPropertySync(name, true);\n if (result) {\n return result;\n }\n }\n }\n\n return undefined;\n }\n\n /**\n *\n * @param cache\n * @returns\n *\n * @internal\n */\nprotected override async buildPropertyCache(): Promise<Map<string, Property>> {\n const cache = new Map<string, Property>();\n const baseClass = await this.baseClass;\n if (baseClass) {\n for (const property of await baseClass.getProperties()) {\n if (!cache.has(property.name.toUpperCase()))\n cache.set(property.name.toUpperCase(), property);\n }\n }\n\n for (const mixin of this.mixins) {\n const mixinObj = await mixin;\n const mixinProps = mixinObj.getPropertiesSync();\n for (const property of mixinProps) {\n if (!cache.has(property.name.toUpperCase()))\n cache.set(property.name.toUpperCase(), property);\n }\n }\n\n const localProps = await this.getProperties(true);\n if (localProps) {\n for (const property of localProps) {\n cache.set(property.name.toUpperCase(), property);\n }\n }\n return cache;\n}\n\n /**\n *\n * @param cache\n * @internal\n */\n protected override buildPropertyCacheSync(): Map<string, Property> {\n const cache = new Map<string, Property>();\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n Array.from(baseClass.getPropertiesSync()).forEach((property) => {\n if (!cache.has(property.name.toUpperCase()))\n cache.set(property.name.toUpperCase(), property);\n });\n }\n\n for (const mixin of this.getMixinsSync()) {\n const mixinProps = mixin.getPropertiesSync();\n for (const property of mixinProps) {\n if (!cache.has(property.name.toUpperCase()))\n cache.set(property.name.toUpperCase(), property);\n }\n }\n\n const localProps = this.getPropertiesSync(true);\n if (localProps) {\n Array.from(localProps).forEach(property => {\n cache.set(property.name.toUpperCase(), property);\n });\n }\n return cache;\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n * @internal\n */\n protected async createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n return this.addProperty(await createNavigationProperty(this, name, relationship, direction));\n }\n\n /**\n *\n * @param name\n * @param relationship\n * @param direction\n * @internal\n */\n protected createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n return this.addProperty(createNavigationPropertySync(this, name, relationship, direction));\n }\n\n /**\n * Save this EntityClass' properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): EntityClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n if (this.mixins.length > 0)\n schemaJson.mixins = this.mixins.map((mixin) => mixin.fullName);\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n for (const lazyMixin of this.mixins) {\n const mixin = await lazyMixin;\n const mixinElement = schemaXml.createElement(\"BaseClass\");\n const mixinName = XmlSerializationUtils.createXmlTypedName(this.schema, mixin.schema, mixin.name);\n mixinElement.textContent = mixinName;\n itemElement.appendChild(mixinElement);\n }\n return itemElement;\n }\n\n public override async fromJSON(entityClassProps: EntityClassProps) {\n this.fromJSONSync(entityClassProps);\n }\n\n public override fromJSONSync(entityClassProps: EntityClassProps) {\n super.fromJSONSync(entityClassProps);\n\n if (undefined !== entityClassProps.mixins) {\n if (!this._mixins)\n this._mixins = [];\n for (const name of entityClassProps.mixins) {\n const mixinSchemaItemKey = this.schema.getSchemaItemKey(name);\n if (!mixinSchemaItemKey)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n\n if (!this._mixins.find((value) => mixinSchemaItemKey.matchesFullName(value.fullName))) {\n this._mixins.push(new DelayedPromiseWithProps<SchemaItemKey, Mixin>(mixinSchemaItemKey,\n async () => {\n const mixin = await this.schema.lookupItem(mixinSchemaItemKey, Mixin);\n if (undefined === mixin)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The ECEntityClass ${this.name} has a mixin (\"${name}\") that cannot be found.`);\n return mixin;\n }));\n }\n }\n }\n }\n\n /**\n * Type guard to check if the SchemaItem is of type EntityClass.\n * @param item The SchemaItem to check.\n * @returns True if the item is an EntityClass, false otherwise.\n */\n public static isEntityClass(item?: SchemaItem): item is EntityClass {\n if (item && item.schemaItemType === SchemaItemType.EntityClass)\n return true;\n\n return false;\n }\n\n /**\n * Type assertion to check if the SchemaItem is of type EntityClass.\n * @param item The SchemaItem to check.\n * @returns The item cast to EntityClass if it is an EntityClass, undefined otherwise.\n * @internal\n */\n public static assertIsEntityClass(item?: SchemaItem): asserts item is EntityClass {\n if (!this.isEntityClass(item))\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.EntityClass}' (EntityClass)`);\n }\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableEntityClass extends EntityClass {\n public abstract override addMixin(mixin: Mixin): any;\n public abstract override createNavigationProperty(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty>;\n public abstract override createNavigationPropertySync(name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/** @internal */\nexport async function createNavigationProperty(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): Promise<NavigationProperty> {\n if (await ecClass.getProperty(name, true))\n throw new ECSchemaError(ECSchemaStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = await ecClass.schema.lookupItem(relationship, RelationshipClass);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECSchemaError(ECSchemaStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECSchemaError(ECSchemaStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n\n/** @internal */\nexport function createNavigationPropertySync(ecClass: ECClass, name: string, relationship: string | RelationshipClass, direction: string | StrengthDirection): NavigationProperty {\n if (ecClass.getPropertySync(name, true))\n throw new ECSchemaError(ECSchemaStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${ecClass.name}.`);\n\n let resolvedRelationship: RelationshipClass | undefined;\n if (typeof (relationship) === \"string\") {\n resolvedRelationship = ecClass.schema.lookupItemSync(relationship, RelationshipClass);\n } else\n resolvedRelationship = relationship;\n\n if (!resolvedRelationship)\n throw new ECSchemaError(ECSchemaStatus.InvalidType, `The provided RelationshipClass, ${relationship}, is not a valid RelationshipClassInterface.`); // eslint-disable-line @typescript-eslint/no-base-to-string\n\n if (typeof (direction) === \"string\") {\n const tmpDirection = parseStrengthDirection(direction);\n if (undefined === tmpDirection)\n throw new ECSchemaError(ECSchemaStatus.InvalidStrengthDirection, `The provided StrengthDirection, ${direction}, is not a valid StrengthDirection.`);\n direction = tmpDirection;\n }\n\n const lazyRelationship = new DelayedPromiseWithProps(resolvedRelationship.key, async () => resolvedRelationship);\n return new NavigationProperty(ecClass, name, lazyRelationship, direction);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"KindOfQuantity.d.ts","sourceRoot":"","sources":["../../../src/Metadata/KindOfQuantity.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,cAAc,EAAuB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAyB,cAAc,iBAAiC;IACxE,gBAAgB;IAChB,WAA2B,cAAc,mBAA4C;IACrF,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,oBAAoB,CAAgD;IAC5E,OAAO,CAAC,gBAAgB,CAAC,CAA0C;IAEnE,4DAA4D;IAC5D,IAAW,yBAAyB,IAAI,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAwC;IAE7H,sCAAsC;IACtC,IAAW,mBAAmB,IAAI,KAAK,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAsC;IAEhH,uBAAuB;IACvB,IAAW,eAAe,IAAI,cAAc,GAAG,sBAAsB,GAAG,SAAS,CAAkC;IAEnH,IAAW,aAAa,WAAkC;IAE1D;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,EAAE,SAAS,GAAE,OAAe;IAMrG;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,cAAc;YAY/J,wBAAwB;IAqCtC,OAAO,CAAC,4BAA4B;IAoCpC;;;;OAIG;IACa,MAAM,CAAC,UAAU,GAAE,OAAe,EAAE,oBAAoB,GAAE,OAAe,GAAG,mBAAmB;IAS/G,gBAAgB;IACM,KAAK,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BlD,YAAY,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI;IAoBtD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvF;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAIvD;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,sBAAsB,GAAG,SAAS,GAAG,IAAI;IAI9F;;;;OAIG;WACW,gBAAgB,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,IAAI,cAAc;IAOzE;;;;;OAKG;WACW,sBAAsB,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,cAAc;CAIxF;AACD;;;GAGG;AACH,8BAAsB,qBAAsB,SAAQ,cAAc;aACvC,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;aAC1F,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,cAAc;aACnK,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;aAC3C,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,sBAAsB,GAAG,SAAS,GAAG,IAAI;aACpF,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;CACvE"}
1
+ {"version":3,"file":"KindOfQuantity.d.ts","sourceRoot":"","sources":["../../../src/Metadata/KindOfQuantity.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,cAAc,EAAuB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;IAC5C,SAAyB,cAAc,iBAAiC;IACxE,gBAAgB;IAChB,WAA2B,cAAc,mBAA4C;IACrF,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,oBAAoB,CAAgD;IAC5E,OAAO,CAAC,gBAAgB,CAAC,CAA0C;IAEnE,4DAA4D;IAC5D,IAAW,yBAAyB,IAAI,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAwC;IAE7H,sCAAsC;IACtC,IAAW,mBAAmB,IAAI,KAAK,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAsC;IAEhH,uBAAuB;IACvB,IAAW,eAAe,IAAI,cAAc,GAAG,sBAAsB,GAAG,SAAS,CAAkC;IAEnH,IAAW,aAAa,WAAkC;IAE1D;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,EAAE,SAAS,GAAE,OAAe;IAMrG;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,cAAc;YAY/J,wBAAwB;IAqCtC,OAAO,CAAC,4BAA4B;IAoCpC;;;;OAIG;IACa,MAAM,CAAC,UAAU,GAAE,OAAe,EAAE,oBAAoB,GAAE,OAAe,GAAG,mBAAmB;IAS/G,gBAAgB;IACM,KAAK,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BlD,YAAY,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI;IAmBtD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvF;;;OAGG;IACH,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAIvD;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,sBAAsB,GAAG,SAAS,GAAG,IAAI;IAI9F;;;;OAIG;WACW,gBAAgB,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,IAAI,cAAc;IAOzE;;;;;OAKG;WACW,sBAAsB,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,cAAc;CAIxF;AACD;;;GAGG;AACH,8BAAsB,qBAAsB,SAAQ,cAAc;aACvC,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;aAC1F,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,cAAc;aACnK,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;aAC3C,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,sBAAsB,GAAG,SAAS,GAAG,IAAI;aACpF,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;CACvE"}
@@ -159,32 +159,19 @@ class KindOfQuantity extends SchemaItem_1.SchemaItem {
159
159
  fromJSONSync(kindOfQuantityProps) {
160
160
  super.fromJSONSync(kindOfQuantityProps);
161
161
  this._relativeError = kindOfQuantityProps.relativeError;
162
- const persistenceUnit = this.schema.lookupItemSync(kindOfQuantityProps.persistenceUnit);
163
- if (undefined === persistenceUnit)
164
- throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Unit ${kindOfQuantityProps.persistenceUnit} does not exist.`);
165
- if (!Unit_1.Unit.isUnit(persistenceUnit) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(persistenceUnit))
166
- throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The item ${kindOfQuantityProps.persistenceUnit} is not a Unit or InvertedUnit.`);
167
- if (Unit_1.Unit.isUnit(persistenceUnit))
168
- this._persistenceUnit = new DelayedPromise_1.DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);
169
- else
170
- this._persistenceUnit = new DelayedPromise_1.DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);
162
+ const unitItemKey = this.schema.getSchemaItemKey(kindOfQuantityProps.persistenceUnit);
163
+ this._persistenceUnit = new DelayedPromise_1.DelayedPromiseWithProps(unitItemKey, async () => {
164
+ const unitItem = await this.schema.lookupItem(unitItemKey, Unit_1.Unit)
165
+ || await this.schema.lookupItem(unitItemKey, InvertedUnit_1.InvertedUnit);
166
+ if (undefined === unitItem)
167
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `Unable to locate the unit ${kindOfQuantityProps.persistenceUnit}.`);
168
+ return unitItem;
169
+ });
171
170
  if (undefined !== kindOfQuantityProps.presentationUnits)
172
171
  this.processPresentationUnitsSync(kindOfQuantityProps.presentationUnits);
173
172
  }
174
173
  async fromJSON(kindOfQuantityProps) {
175
- await super.fromJSON(kindOfQuantityProps);
176
- this._relativeError = kindOfQuantityProps.relativeError;
177
- const persistenceUnit = await this.schema.lookupItem(kindOfQuantityProps.persistenceUnit);
178
- if (undefined === persistenceUnit)
179
- throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Unit ${kindOfQuantityProps.persistenceUnit} does not exist.`);
180
- if (!Unit_1.Unit.isUnit(persistenceUnit) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(persistenceUnit))
181
- throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The item ${kindOfQuantityProps.persistenceUnit} is not a Unit or InvertedUnit.`);
182
- if (Unit_1.Unit.isUnit(persistenceUnit))
183
- this._persistenceUnit = new DelayedPromise_1.DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);
184
- else
185
- this._persistenceUnit = new DelayedPromise_1.DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);
186
- if (undefined !== kindOfQuantityProps.presentationUnits)
187
- await this.processPresentationUnits(kindOfQuantityProps.presentationUnits);
174
+ this.fromJSONSync(kindOfQuantityProps);
188
175
  }
189
176
  /**
190
177
  * Used for schema editing.
@@ -1 +1 @@
1
- {"version":3,"file":"KindOfQuantity.js","sourceRoot":"","sources":["../../../src/Metadata/KindOfQuantity.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { KindOfQuantityProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { SchemaItemType } from \"../ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\nimport { LazyLoadedFormat, LazyLoadedInvertedUnit, LazyLoadedUnit } from \"../Interfaces\";\nimport { Format } from \"./Format\";\nimport { InvertedUnit } from \"./InvertedUnit\";\nimport { OverrideFormat, OverrideFormatProps } from \"./OverrideFormat\";\nimport { SchemaItem } from \"./SchemaItem\";\nimport { Unit } from \"./Unit\";\n\n/** A Typescript class representation of a KindOfQuantity.\n * @public @preview\n */\nexport class KindOfQuantity extends SchemaItem {\n public override readonly schemaItemType = KindOfQuantity.schemaItemType;\n /** @internal */\n public static override get schemaItemType() { return SchemaItemType.KindOfQuantity; }\n private _relativeError: number = 1.0;\n private _presentationFormats: Array<LazyLoadedFormat | OverrideFormat> = [];\n private _persistenceUnit?: LazyLoadedUnit | LazyLoadedInvertedUnit;\n\n /** The first presentation format in the list of Formats. */\n public get defaultPresentationFormat(): LazyLoadedFormat | OverrideFormat | undefined { return this.presentationFormats[0]; }\n\n /** A list of presentation formats. */\n public get presentationFormats(): Array<LazyLoadedFormat | OverrideFormat> { return this._presentationFormats; }\n\n /** Persistence unit */\n public get persistenceUnit(): LazyLoadedUnit | LazyLoadedInvertedUnit | undefined { return this._persistenceUnit; }\n\n public get relativeError() { return this._relativeError; }\n\n /**\n *\n * @param format The Format to add to this KindOfQuantity\n * @param isDefault\n * @internal\n */\n protected addPresentationFormat(format: LazyLoadedFormat | OverrideFormat, isDefault: boolean = false) {\n // TODO: Add some sort of validation?\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n (isDefault) ? this._presentationFormats.splice(0, 0, format) : this._presentationFormats.push(format);\n }\n\n /** Creates an OverrideFormat in the context of this KindOfQuantity.\n * @param parent The Format to override.\n * @param precision The precision override\n * @param unitLabelOverrides The list of unit and label overrides.\n * @internal\n */\n protected createFormatOverride(parent: Format, precision?: number, unitLabelOverrides?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): OverrideFormat {\n if (unitLabelOverrides && parent.units && parent.units.length !== unitLabelOverrides.length)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Cannot add presentation format to KindOfQuantity '${this.name}' because the number of unit overrides is inconsistent with the number in the Format '${parent.name}'.`);\n\n if (parent.units && 0 === parent.units.length && unitLabelOverrides && 0 < unitLabelOverrides.length)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Cannot add a presentation format to KindOfQuantity '${this.name}' without any units and no unit overrides.`);\n\n // TODO: Check compatibility of Unit overrides with the persistence unit\n\n return new OverrideFormat(parent, precision, unitLabelOverrides);\n }\n\n private async processPresentationUnits(presentationUnitsJson: string | string[]): Promise<void> {\n const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(\";\");\n for (const formatString of presUnitsArr) {\n const presFormatOverride: OverrideFormatProps = OverrideFormat.parseFormatString(formatString);\n\n const format = await this.schema.lookupItem(presFormatOverride.name, Format);\n if (undefined === format || format.schemaItemType !== SchemaItemType.Format)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);\n\n if (undefined === presFormatOverride.precision && undefined === presFormatOverride.unitAndLabels) {\n this.addPresentationFormat(new DelayedPromiseWithProps(format.key, async () => format));\n continue;\n }\n\n let unitAndLabels: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined;\n if (undefined !== presFormatOverride.unitAndLabels) {\n if (4 < presFormatOverride.unitAndLabels.length)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\n\n unitAndLabels = [];\n for (const unitOverride of presFormatOverride.unitAndLabels) {\n const unitOrInverted = await this.schema.lookupItem(unitOverride[0]);\n\n if(Unit.isUnit(unitOrInverted))\n unitAndLabels.push([new DelayedPromiseWithProps(unitOrInverted.key, async () => unitOrInverted), unitOverride[1]]);\n else if(InvertedUnit.isInvertedUnit(unitOrInverted))\n unitAndLabels.push([new DelayedPromiseWithProps(unitOrInverted.key, async () => unitOrInverted), unitOverride[1]]);\n else\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate SchemaItem ${unitOverride[0]}.`);\n }\n }\n\n const overrideFormat = this.createFormatOverride(format, presFormatOverride.precision, unitAndLabels);\n this.addPresentationFormat(overrideFormat);\n }\n }\n\n private processPresentationUnitsSync(presentationUnitsJson: string | string[]): void {\n const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(\";\");\n for (const formatString of presUnitsArr) {\n const presFormatOverride: OverrideFormatProps = OverrideFormat.parseFormatString(formatString);\n\n const format = this.schema.lookupItemSync(presFormatOverride.name, Format);\n if (undefined === format || format.schemaItemType !== SchemaItemType.Format)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);\n\n if (undefined === presFormatOverride.precision && undefined === presFormatOverride.unitAndLabels) {\n this.addPresentationFormat(new DelayedPromiseWithProps(format.key, async () => format));\n continue;\n }\n\n let unitAndLabels: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined;\n if (undefined !== presFormatOverride.unitAndLabels) {\n if (4 < presFormatOverride.unitAndLabels.length)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\n\n unitAndLabels = [];\n for (const unitOverride of presFormatOverride.unitAndLabels) {\n const unitOrInverted = this.schema.lookupItemSync(unitOverride[0]);\n if(Unit.isUnit(unitOrInverted))\n unitAndLabels.push([new DelayedPromiseWithProps(unitOrInverted.key, async () => unitOrInverted), unitOverride[1]]);\n else if(InvertedUnit.isInvertedUnit(unitOrInverted))\n unitAndLabels.push([new DelayedPromiseWithProps(unitOrInverted.key, async () => unitOrInverted), unitOverride[1]]);\n else\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate SchemaItem ${unitOverride[0]}.`);\n }\n }\n\n const overrideFormat = this.createFormatOverride(format, presFormatOverride.precision, unitAndLabels);\n this.addPresentationFormat(overrideFormat);\n }\n }\n\n /**\n * Save this KindOfQuantity's properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): KindOfQuantityProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n schemaJson.relativeError = this.relativeError;\n schemaJson.persistenceUnit = this.persistenceUnit!.fullName;\n if (undefined !== this.presentationFormats && 0 < this.presentationFormats.length)\n schemaJson.presentationUnits = this.presentationFormats.map((format) => format.fullName);\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n const persistenceUnit = await this.persistenceUnit;\n if (undefined !== persistenceUnit) {\n const unitName = XmlSerializationUtils.createXmlTypedName(this.schema, persistenceUnit.schema, persistenceUnit.name);\n itemElement.setAttribute(\"persistenceUnit\", unitName);\n }\n\n if (undefined !== this.presentationFormats) {\n const presUnitStrings: string[] = [];\n for(const format of this.presentationFormats) {\n if (!OverrideFormat.isOverrideFormat(format)) {\n const resolvedFormat = await format;\n presUnitStrings.push(XmlSerializationUtils.createXmlTypedName(this.schema, resolvedFormat.schema, format.name));\n continue;\n }\n presUnitStrings.push(format.fullNameXml(this.schema));\n };\n itemElement.setAttribute(\"presentationUnits\", presUnitStrings.join(\";\"));\n }\n itemElement.setAttribute(\"relativeError\", this.relativeError.toString());\n\n return itemElement;\n }\n\n public override fromJSONSync(kindOfQuantityProps: KindOfQuantityProps): void {\n super.fromJSONSync(kindOfQuantityProps);\n this._relativeError = kindOfQuantityProps.relativeError;\n\n const persistenceUnit = this.schema.lookupItemSync(kindOfQuantityProps.persistenceUnit);\n if (undefined === persistenceUnit)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Unit ${kindOfQuantityProps.persistenceUnit} does not exist.`);\n\n if (!Unit.isUnit(persistenceUnit) && !InvertedUnit.isInvertedUnit(persistenceUnit))\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The item ${kindOfQuantityProps.persistenceUnit} is not a Unit or InvertedUnit.`);\n\n if (Unit.isUnit(persistenceUnit))\n this._persistenceUnit = new DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);\n else\n this._persistenceUnit = new DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);\n\n if (undefined !== kindOfQuantityProps.presentationUnits)\n this.processPresentationUnitsSync(kindOfQuantityProps.presentationUnits);\n }\n\n public override async fromJSON(kindOfQuantityProps: KindOfQuantityProps): Promise<void> {\n await super.fromJSON(kindOfQuantityProps);\n this._relativeError = kindOfQuantityProps.relativeError;\n\n const persistenceUnit = await this.schema.lookupItem(kindOfQuantityProps.persistenceUnit);\n if (undefined === persistenceUnit)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Unit ${kindOfQuantityProps.persistenceUnit} does not exist.`);\n\n if (!Unit.isUnit(persistenceUnit) && !InvertedUnit.isInvertedUnit(persistenceUnit))\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The item ${kindOfQuantityProps.persistenceUnit} is not a Unit or InvertedUnit.`);\n\n if (Unit.isUnit(persistenceUnit))\n this._persistenceUnit = new DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);\n else\n this._persistenceUnit = new DelayedPromiseWithProps(persistenceUnit.key, async () => persistenceUnit);\n\n\n if (undefined !== kindOfQuantityProps.presentationUnits)\n await this.processPresentationUnits(kindOfQuantityProps.presentationUnits);\n }\n\n /**\n * Used for schema editing.\n * @internal\n */\n protected setRelativeError(relativeError: number): void {\n this._relativeError = relativeError;\n }\n\n /**\n * Used for schema editing.\n * @internal\n */\n protected setPersistenceUnit(value: LazyLoadedUnit | LazyLoadedInvertedUnit | undefined): void {\n this._persistenceUnit = value;\n }\n\n /**\n * Type guard to check if the SchemaItem is of type KindOfQuantity.\n * @param item The SchemaItem to check.\n * @returns True if the item is a KindOfQuantity, false otherwise.\n */\n public static isKindOfQuantity(item?: SchemaItem): item is KindOfQuantity {\n if (item && item.schemaItemType === SchemaItemType.KindOfQuantity)\n return true;\n\n return false;\n }\n\n /**\n * Type assertion to check if the SchemaItem is of type KindOfQuantity.\n * @param item The SchemaItem to check.\n * @returns The item cast to KindOfQuantity if it is a KindOfQuantity, undefined otherwise.\n * @internal\n */\n public static assertIsKindOfQuantity(item?: SchemaItem): asserts item is KindOfQuantity {\n if (!this.isKindOfQuantity(item))\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.KindOfQuantity}' (KindOfQuantity)`);\n }\n}\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableKindOfQuantity extends KindOfQuantity {\n public abstract override addPresentationFormat(format: LazyLoadedFormat | OverrideFormat, isDefault: boolean): void;\n public abstract override createFormatOverride(parent: Format, precision?: number, unitLabelOverrides?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): OverrideFormat;\n public abstract override setDisplayLabel(displayLabel: string): void;\n public abstract override setPersistenceUnit(value: LazyLoadedUnit | LazyLoadedInvertedUnit | undefined): void;\n public abstract override setRelativeError(relativeError: number): void;\n}\n"]}
1
+ {"version":3,"file":"KindOfQuantity.js","sourceRoot":"","sources":["../../../src/Metadata/KindOfQuantity.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Metadata\n */\n\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { KindOfQuantityProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { SchemaItemType } from \"../ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\nimport { LazyLoadedFormat, LazyLoadedInvertedUnit, LazyLoadedUnit } from \"../Interfaces\";\nimport { Format } from \"./Format\";\nimport { InvertedUnit } from \"./InvertedUnit\";\nimport { OverrideFormat, OverrideFormatProps } from \"./OverrideFormat\";\nimport { SchemaItem } from \"./SchemaItem\";\nimport { Unit } from \"./Unit\";\n\n/** A Typescript class representation of a KindOfQuantity.\n * @public @preview\n */\nexport class KindOfQuantity extends SchemaItem {\n public override readonly schemaItemType = KindOfQuantity.schemaItemType;\n /** @internal */\n public static override get schemaItemType() { return SchemaItemType.KindOfQuantity; }\n private _relativeError: number = 1.0;\n private _presentationFormats: Array<LazyLoadedFormat | OverrideFormat> = [];\n private _persistenceUnit?: LazyLoadedUnit | LazyLoadedInvertedUnit;\n\n /** The first presentation format in the list of Formats. */\n public get defaultPresentationFormat(): LazyLoadedFormat | OverrideFormat | undefined { return this.presentationFormats[0]; }\n\n /** A list of presentation formats. */\n public get presentationFormats(): Array<LazyLoadedFormat | OverrideFormat> { return this._presentationFormats; }\n\n /** Persistence unit */\n public get persistenceUnit(): LazyLoadedUnit | LazyLoadedInvertedUnit | undefined { return this._persistenceUnit; }\n\n public get relativeError() { return this._relativeError; }\n\n /**\n *\n * @param format The Format to add to this KindOfQuantity\n * @param isDefault\n * @internal\n */\n protected addPresentationFormat(format: LazyLoadedFormat | OverrideFormat, isDefault: boolean = false) {\n // TODO: Add some sort of validation?\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n (isDefault) ? this._presentationFormats.splice(0, 0, format) : this._presentationFormats.push(format);\n }\n\n /** Creates an OverrideFormat in the context of this KindOfQuantity.\n * @param parent The Format to override.\n * @param precision The precision override\n * @param unitLabelOverrides The list of unit and label overrides.\n * @internal\n */\n protected createFormatOverride(parent: Format, precision?: number, unitLabelOverrides?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): OverrideFormat {\n if (unitLabelOverrides && parent.units && parent.units.length !== unitLabelOverrides.length)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Cannot add presentation format to KindOfQuantity '${this.name}' because the number of unit overrides is inconsistent with the number in the Format '${parent.name}'.`);\n\n if (parent.units && 0 === parent.units.length && unitLabelOverrides && 0 < unitLabelOverrides.length)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Cannot add a presentation format to KindOfQuantity '${this.name}' without any units and no unit overrides.`);\n\n // TODO: Check compatibility of Unit overrides with the persistence unit\n\n return new OverrideFormat(parent, precision, unitLabelOverrides);\n }\n\n private async processPresentationUnits(presentationUnitsJson: string | string[]): Promise<void> {\n const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(\";\");\n for (const formatString of presUnitsArr) {\n const presFormatOverride: OverrideFormatProps = OverrideFormat.parseFormatString(formatString);\n\n const format = await this.schema.lookupItem(presFormatOverride.name, Format);\n if (undefined === format || format.schemaItemType !== SchemaItemType.Format)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);\n\n if (undefined === presFormatOverride.precision && undefined === presFormatOverride.unitAndLabels) {\n this.addPresentationFormat(new DelayedPromiseWithProps(format.key, async () => format));\n continue;\n }\n\n let unitAndLabels: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined;\n if (undefined !== presFormatOverride.unitAndLabels) {\n if (4 < presFormatOverride.unitAndLabels.length)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\n\n unitAndLabels = [];\n for (const unitOverride of presFormatOverride.unitAndLabels) {\n const unitOrInverted = await this.schema.lookupItem(unitOverride[0]);\n\n if(Unit.isUnit(unitOrInverted))\n unitAndLabels.push([new DelayedPromiseWithProps(unitOrInverted.key, async () => unitOrInverted), unitOverride[1]]);\n else if(InvertedUnit.isInvertedUnit(unitOrInverted))\n unitAndLabels.push([new DelayedPromiseWithProps(unitOrInverted.key, async () => unitOrInverted), unitOverride[1]]);\n else\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate SchemaItem ${unitOverride[0]}.`);\n }\n }\n\n const overrideFormat = this.createFormatOverride(format, presFormatOverride.precision, unitAndLabels);\n this.addPresentationFormat(overrideFormat);\n }\n }\n\n private processPresentationUnitsSync(presentationUnitsJson: string | string[]): void {\n const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(\";\");\n for (const formatString of presUnitsArr) {\n const presFormatOverride: OverrideFormatProps = OverrideFormat.parseFormatString(formatString);\n\n const format = this.schema.lookupItemSync(presFormatOverride.name, Format);\n if (undefined === format || format.schemaItemType !== SchemaItemType.Format)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);\n\n if (undefined === presFormatOverride.precision && undefined === presFormatOverride.unitAndLabels) {\n this.addPresentationFormat(new DelayedPromiseWithProps(format.key, async () => format));\n continue;\n }\n\n let unitAndLabels: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined;\n if (undefined !== presFormatOverride.unitAndLabels) {\n if (4 < presFormatOverride.unitAndLabels.length)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, ``);\n\n unitAndLabels = [];\n for (const unitOverride of presFormatOverride.unitAndLabels) {\n const unitOrInverted = this.schema.lookupItemSync(unitOverride[0]);\n if(Unit.isUnit(unitOrInverted))\n unitAndLabels.push([new DelayedPromiseWithProps(unitOrInverted.key, async () => unitOrInverted), unitOverride[1]]);\n else if(InvertedUnit.isInvertedUnit(unitOrInverted))\n unitAndLabels.push([new DelayedPromiseWithProps(unitOrInverted.key, async () => unitOrInverted), unitOverride[1]]);\n else\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate SchemaItem ${unitOverride[0]}.`);\n }\n }\n\n const overrideFormat = this.createFormatOverride(format, presFormatOverride.precision, unitAndLabels);\n this.addPresentationFormat(overrideFormat);\n }\n }\n\n /**\n * Save this KindOfQuantity's properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): KindOfQuantityProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n schemaJson.relativeError = this.relativeError;\n schemaJson.persistenceUnit = this.persistenceUnit!.fullName;\n if (undefined !== this.presentationFormats && 0 < this.presentationFormats.length)\n schemaJson.presentationUnits = this.presentationFormats.map((format) => format.fullName);\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n const persistenceUnit = await this.persistenceUnit;\n if (undefined !== persistenceUnit) {\n const unitName = XmlSerializationUtils.createXmlTypedName(this.schema, persistenceUnit.schema, persistenceUnit.name);\n itemElement.setAttribute(\"persistenceUnit\", unitName);\n }\n\n if (undefined !== this.presentationFormats) {\n const presUnitStrings: string[] = [];\n for(const format of this.presentationFormats) {\n if (!OverrideFormat.isOverrideFormat(format)) {\n const resolvedFormat = await format;\n presUnitStrings.push(XmlSerializationUtils.createXmlTypedName(this.schema, resolvedFormat.schema, format.name));\n continue;\n }\n presUnitStrings.push(format.fullNameXml(this.schema));\n };\n itemElement.setAttribute(\"presentationUnits\", presUnitStrings.join(\";\"));\n }\n itemElement.setAttribute(\"relativeError\", this.relativeError.toString());\n\n return itemElement;\n }\n\n public override fromJSONSync(kindOfQuantityProps: KindOfQuantityProps): void {\n super.fromJSONSync(kindOfQuantityProps);\n this._relativeError = kindOfQuantityProps.relativeError;\n\n const unitItemKey = this.schema.getSchemaItemKey(kindOfQuantityProps.persistenceUnit);\n this._persistenceUnit = new DelayedPromiseWithProps(unitItemKey, async () => {\n const unitItem = await this.schema.lookupItem(unitItemKey, Unit)\n || await this.schema.lookupItem(unitItemKey, InvertedUnit);\n\n if (undefined === unitItem)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `Unable to locate the unit ${kindOfQuantityProps.persistenceUnit}.`);\n\n return unitItem;\n }) as LazyLoadedUnit | LazyLoadedInvertedUnit;\n\n if (undefined !== kindOfQuantityProps.presentationUnits)\n this.processPresentationUnitsSync(kindOfQuantityProps.presentationUnits);\n }\n\n public override async fromJSON(kindOfQuantityProps: KindOfQuantityProps): Promise<void> {\n this.fromJSONSync(kindOfQuantityProps);\n }\n\n /**\n * Used for schema editing.\n * @internal\n */\n protected setRelativeError(relativeError: number): void {\n this._relativeError = relativeError;\n }\n\n /**\n * Used for schema editing.\n * @internal\n */\n protected setPersistenceUnit(value: LazyLoadedUnit | LazyLoadedInvertedUnit | undefined): void {\n this._persistenceUnit = value;\n }\n\n /**\n * Type guard to check if the SchemaItem is of type KindOfQuantity.\n * @param item The SchemaItem to check.\n * @returns True if the item is a KindOfQuantity, false otherwise.\n */\n public static isKindOfQuantity(item?: SchemaItem): item is KindOfQuantity {\n if (item && item.schemaItemType === SchemaItemType.KindOfQuantity)\n return true;\n\n return false;\n }\n\n /**\n * Type assertion to check if the SchemaItem is of type KindOfQuantity.\n * @param item The SchemaItem to check.\n * @returns The item cast to KindOfQuantity if it is a KindOfQuantity, undefined otherwise.\n * @internal\n */\n public static assertIsKindOfQuantity(item?: SchemaItem): asserts item is KindOfQuantity {\n if (!this.isKindOfQuantity(item))\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.KindOfQuantity}' (KindOfQuantity)`);\n }\n}\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableKindOfQuantity extends KindOfQuantity {\n public abstract override addPresentationFormat(format: LazyLoadedFormat | OverrideFormat, isDefault: boolean): void;\n public abstract override createFormatOverride(parent: Format, precision?: number, unitLabelOverrides?: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): OverrideFormat;\n public abstract override setDisplayLabel(displayLabel: string): void;\n public abstract override setPersistenceUnit(value: LazyLoadedUnit | LazyLoadedInvertedUnit | undefined): void;\n public abstract override setRelativeError(relativeError: number): void;\n}\n"]}