@itwin/ecschema-metadata 4.9.0-dev.10 → 4.9.0-dev.11

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.
@@ -135,7 +135,7 @@ var XmlSerializationUtils;
135
135
  propertyElement.textContent = propertyValue.toString();
136
136
  return;
137
137
  case ECObjects_1.PrimitiveType.DateTime:
138
- propertyElement.textContent = propertyValue.getTime().toString();
138
+ propertyElement.textContent = new Date(propertyValue).getTime().toString();
139
139
  return;
140
140
  case ECObjects_1.PrimitiveType.Point2d:
141
141
  propertyElement.textContent = `${propertyValue.x},${propertyValue.y}`;
@@ -1 +1 @@
1
- {"version":3,"file":"XmlSerializationUtils.js","sourceRoot":"","sources":["../../../src/Deserialization/XmlSerializationUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { PrimitiveType, primitiveTypeToString } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport { CustomAttribute } from \"../Metadata/CustomAttribute\";\r\nimport { CustomAttributeClass } from \"../Metadata/CustomAttributeClass\";\r\nimport { ArrayProperty, EnumerationProperty, PrimitiveOrEnumPropertyBase, PrimitiveProperty, Property, StructProperty } from \"../Metadata/Property\";\r\nimport { Schema } from \"../Metadata/Schema\";\r\n\r\n/**\r\n * Namespace holding utility functions for serializing EC types to the EC XML format.\r\n * @internal\r\n */\r\nexport namespace XmlSerializationUtils {\r\n /**\r\n * Serializes a CustomAttribute instance to the EC XML format.\r\n * @param fullName The full name of the CustomAttribute (qualified by schema name).\r\n * @param customAttribute The CustomAttribute instance to serialize.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @param schema The Schema object being serialized.\r\n * @beta\r\n */\r\n export async function writeCustomAttribute(fullName: string, customAttribute: CustomAttribute, schemaDoc: Document, schema: Schema): Promise<Element> {\r\n const caClass = await schema.lookupItem(fullName) as CustomAttributeClass;\r\n if (!caClass)\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `The class '${fullName}' could not be found in the current schema context.`);\r\n\r\n const nameAndNamespace = await resolveCustomAttributeNamespace(fullName, schema);\r\n const caElement = schemaDoc.createElement(nameAndNamespace[0]);\r\n\r\n if (nameAndNamespace[1])\r\n caElement.setAttribute(\"xmlns\", nameAndNamespace[1]);\r\n\r\n if (!caClass.properties)\r\n return caElement;\r\n\r\n for (const property of caClass.properties)\r\n await writeInstanceProperty(property, customAttribute, caElement, schemaDoc);\r\n\r\n return caElement;\r\n }\r\n\r\n /**\r\n * Serializes an EC Property instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param instance The Property instance.\r\n * @param instanceElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeInstanceProperty(propertyClass: Property, instance: any, instanceElement: Element, schemaDoc: Document): Promise<void> {\r\n const propertyValue = instance[propertyClass.name];\r\n if (propertyValue === undefined)\r\n return;\r\n\r\n const propertyElement = schemaDoc.createElement(propertyClass.name);\r\n instanceElement.appendChild(propertyElement);\r\n\r\n if (propertyClass.isArray()) {\r\n await writeArrayProperty(propertyClass, propertyValue, propertyElement, schemaDoc);\r\n } else if (propertyClass.isPrimitive()) {\r\n await writePrimitiveProperty(propertyClass, propertyValue, propertyElement);\r\n } else if (propertyClass.isStruct()) {\r\n await writeStructProperty(propertyClass, propertyValue, propertyElement, schemaDoc);\r\n }\r\n }\r\n\r\n /**\r\n * Serializes an EC ArrayProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue An array holding the property values.\r\n * @param arrayElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeArrayProperty(propertyClass: ArrayProperty, propertyValue: any[], arrayElement: Element, schemaDoc: Document): Promise<void> {\r\n if (propertyClass.isPrimitive()) {\r\n const typeString = primitiveTypeToString(propertyClass.primitiveType);\r\n for (const value of propertyValue) {\r\n const entryElement = schemaDoc.createElement(typeString);\r\n await writePrimitiveProperty(propertyClass, value, entryElement);\r\n arrayElement.appendChild(entryElement);\r\n }\r\n }\r\n\r\n if (propertyClass.isStruct()) {\r\n for (const value of propertyValue) {\r\n const structElement = schemaDoc.createElement(propertyClass.structClass.name);\r\n arrayElement.appendChild(structElement);\r\n await writeStructProperty(propertyClass, value, structElement, schemaDoc);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serializes an EC StructProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue The struct object holding the property values.\r\n * @param structElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeStructProperty(propertyClass: StructProperty, propertyValue: any, structElement: Element, schemaDoc: Document): Promise<void> {\r\n const structClass = propertyClass.structClass;\r\n if (!structClass.properties)\r\n return;\r\n\r\n for (const propertyMetadata of structClass.properties)\r\n await writeInstanceProperty(propertyMetadata, propertyValue, structElement, schemaDoc);\r\n }\r\n\r\n /**\r\n * Serializes an EC PrimitiveProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue The struct object holding the property values.\r\n * @param propertyElement The XML Element that will contain the serialized property instance.\r\n * @beta\r\n */\r\n export async function writePrimitiveProperty(propertyClass: PrimitiveOrEnumPropertyBase, propertyValue: any, propertyElement: Element): Promise<void> {\r\n let primitiveType: PrimitiveType;\r\n if (propertyClass.isEnumeration()) {\r\n const enumeration = await (propertyClass as EnumerationProperty).enumeration;\r\n if (!enumeration)\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `The enumeration on property class '${propertyClass.fullName}' could not be found in the current schema context.`);\r\n\r\n if (enumeration.type === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The enumeration on property class '${propertyClass.fullName}' has an invalid primitive type.`);\r\n\r\n primitiveType = enumeration.type;\r\n } else\r\n primitiveType = (propertyClass as PrimitiveProperty).primitiveType;\r\n\r\n switch (primitiveType) {\r\n case PrimitiveType.String:\r\n propertyElement.textContent = propertyValue;\r\n return;\r\n case PrimitiveType.Boolean:\r\n propertyElement.textContent = (propertyValue as boolean) ? \"True\" : \"False\";\r\n return;\r\n case PrimitiveType.Integer:\r\n case PrimitiveType.Double:\r\n case PrimitiveType.Long:\r\n propertyElement.textContent = propertyValue.toString();\r\n return;\r\n case PrimitiveType.DateTime:\r\n propertyElement.textContent = (propertyValue as Date).getTime().toString();\r\n return;\r\n case PrimitiveType.Point2d:\r\n propertyElement.textContent = `${propertyValue.x},${propertyValue.y}`;\r\n return;\r\n case PrimitiveType.Point3d:\r\n propertyElement.textContent = `${propertyValue.x},${propertyValue.y},${propertyValue.z}`;\r\n return;\r\n case PrimitiveType.IGeometry:\r\n case PrimitiveType.Binary:\r\n propertyElement.textContent = propertyValue;\r\n return;\r\n default:\r\n throw new ECObjectsError(ECObjectsStatus.InvalidPrimitiveType, `The property '${propertyClass.fullName}' has an invalid primitive type.`);\r\n }\r\n }\r\n\r\n export function createXmlTypedName(currentSchema: Schema, typeSchema: Schema, typeName: string) {\r\n if (currentSchema.schemaKey.matches(typeSchema.schemaKey))\r\n return typeName;\r\n\r\n // Alias is required in Spec. It could be undefined (technically), so\r\n // throw until fixed.\r\n if (typeSchema.alias === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaAlias, `The schema '${typeSchema.name}' has an invalid alias.`);\r\n\r\n return `${typeSchema.alias}:${typeName}`;\r\n }\r\n\r\n async function resolveCustomAttributeNamespace(caName: string, schema: Schema): Promise<[string, string | undefined]> {\r\n const nameParts = caName.split(\".\");\r\n if (nameParts.length === 1)\r\n return [caName, undefined];\r\n\r\n const attributeSchema = nameParts[0].toUpperCase() === schema.name.toUpperCase() ? schema : await schema.getReference(nameParts[0]);\r\n if (!attributeSchema)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Unable to resolve the namespace for CustomAttribute '${caName}' because the referenced schema '${nameParts[0]}' could not be located.`);\r\n\r\n return [nameParts[1], `${nameParts[0]}.${attributeSchema.schemaKey.version.toString()}`];\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"XmlSerializationUtils.js","sourceRoot":"","sources":["../../../src/Deserialization/XmlSerializationUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { PrimitiveType, primitiveTypeToString } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport { CustomAttribute } from \"../Metadata/CustomAttribute\";\r\nimport { CustomAttributeClass } from \"../Metadata/CustomAttributeClass\";\r\nimport { ArrayProperty, EnumerationProperty, PrimitiveOrEnumPropertyBase, PrimitiveProperty, Property, StructProperty } from \"../Metadata/Property\";\r\nimport { Schema } from \"../Metadata/Schema\";\r\n\r\n/**\r\n * Namespace holding utility functions for serializing EC types to the EC XML format.\r\n * @internal\r\n */\r\nexport namespace XmlSerializationUtils {\r\n /**\r\n * Serializes a CustomAttribute instance to the EC XML format.\r\n * @param fullName The full name of the CustomAttribute (qualified by schema name).\r\n * @param customAttribute The CustomAttribute instance to serialize.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @param schema The Schema object being serialized.\r\n * @beta\r\n */\r\n export async function writeCustomAttribute(fullName: string, customAttribute: CustomAttribute, schemaDoc: Document, schema: Schema): Promise<Element> {\r\n const caClass = await schema.lookupItem(fullName) as CustomAttributeClass;\r\n if (!caClass)\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `The class '${fullName}' could not be found in the current schema context.`);\r\n\r\n const nameAndNamespace = await resolveCustomAttributeNamespace(fullName, schema);\r\n const caElement = schemaDoc.createElement(nameAndNamespace[0]);\r\n\r\n if (nameAndNamespace[1])\r\n caElement.setAttribute(\"xmlns\", nameAndNamespace[1]);\r\n\r\n if (!caClass.properties)\r\n return caElement;\r\n\r\n for (const property of caClass.properties)\r\n await writeInstanceProperty(property, customAttribute, caElement, schemaDoc);\r\n\r\n return caElement;\r\n }\r\n\r\n /**\r\n * Serializes an EC Property instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param instance The Property instance.\r\n * @param instanceElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeInstanceProperty(propertyClass: Property, instance: any, instanceElement: Element, schemaDoc: Document): Promise<void> {\r\n const propertyValue = instance[propertyClass.name];\r\n if (propertyValue === undefined)\r\n return;\r\n\r\n const propertyElement = schemaDoc.createElement(propertyClass.name);\r\n instanceElement.appendChild(propertyElement);\r\n\r\n if (propertyClass.isArray()) {\r\n await writeArrayProperty(propertyClass, propertyValue, propertyElement, schemaDoc);\r\n } else if (propertyClass.isPrimitive()) {\r\n await writePrimitiveProperty(propertyClass, propertyValue, propertyElement);\r\n } else if (propertyClass.isStruct()) {\r\n await writeStructProperty(propertyClass, propertyValue, propertyElement, schemaDoc);\r\n }\r\n }\r\n\r\n /**\r\n * Serializes an EC ArrayProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue An array holding the property values.\r\n * @param arrayElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeArrayProperty(propertyClass: ArrayProperty, propertyValue: any[], arrayElement: Element, schemaDoc: Document): Promise<void> {\r\n if (propertyClass.isPrimitive()) {\r\n const typeString = primitiveTypeToString(propertyClass.primitiveType);\r\n for (const value of propertyValue) {\r\n const entryElement = schemaDoc.createElement(typeString);\r\n await writePrimitiveProperty(propertyClass, value, entryElement);\r\n arrayElement.appendChild(entryElement);\r\n }\r\n }\r\n\r\n if (propertyClass.isStruct()) {\r\n for (const value of propertyValue) {\r\n const structElement = schemaDoc.createElement(propertyClass.structClass.name);\r\n arrayElement.appendChild(structElement);\r\n await writeStructProperty(propertyClass, value, structElement, schemaDoc);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serializes an EC StructProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue The struct object holding the property values.\r\n * @param structElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeStructProperty(propertyClass: StructProperty, propertyValue: any, structElement: Element, schemaDoc: Document): Promise<void> {\r\n const structClass = propertyClass.structClass;\r\n if (!structClass.properties)\r\n return;\r\n\r\n for (const propertyMetadata of structClass.properties)\r\n await writeInstanceProperty(propertyMetadata, propertyValue, structElement, schemaDoc);\r\n }\r\n\r\n /**\r\n * Serializes an EC PrimitiveProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue The struct object holding the property values.\r\n * @param propertyElement The XML Element that will contain the serialized property instance.\r\n * @beta\r\n */\r\n export async function writePrimitiveProperty(propertyClass: PrimitiveOrEnumPropertyBase, propertyValue: any, propertyElement: Element): Promise<void> {\r\n let primitiveType: PrimitiveType;\r\n if (propertyClass.isEnumeration()) {\r\n const enumeration = await (propertyClass as EnumerationProperty).enumeration;\r\n if (!enumeration)\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `The enumeration on property class '${propertyClass.fullName}' could not be found in the current schema context.`);\r\n\r\n if (enumeration.type === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The enumeration on property class '${propertyClass.fullName}' has an invalid primitive type.`);\r\n\r\n primitiveType = enumeration.type;\r\n } else\r\n primitiveType = (propertyClass as PrimitiveProperty).primitiveType;\r\n\r\n switch (primitiveType) {\r\n case PrimitiveType.String:\r\n propertyElement.textContent = propertyValue;\r\n return;\r\n case PrimitiveType.Boolean:\r\n propertyElement.textContent = (propertyValue as boolean) ? \"True\" : \"False\";\r\n return;\r\n case PrimitiveType.Integer:\r\n case PrimitiveType.Double:\r\n case PrimitiveType.Long:\r\n propertyElement.textContent = propertyValue.toString();\r\n return;\r\n case PrimitiveType.DateTime:\r\n propertyElement.textContent = new Date(propertyValue).getTime().toString();\r\n return;\r\n case PrimitiveType.Point2d:\r\n propertyElement.textContent = `${propertyValue.x},${propertyValue.y}`;\r\n return;\r\n case PrimitiveType.Point3d:\r\n propertyElement.textContent = `${propertyValue.x},${propertyValue.y},${propertyValue.z}`;\r\n return;\r\n case PrimitiveType.IGeometry:\r\n case PrimitiveType.Binary:\r\n propertyElement.textContent = propertyValue;\r\n return;\r\n default:\r\n throw new ECObjectsError(ECObjectsStatus.InvalidPrimitiveType, `The property '${propertyClass.fullName}' has an invalid primitive type.`);\r\n }\r\n }\r\n\r\n export function createXmlTypedName(currentSchema: Schema, typeSchema: Schema, typeName: string) {\r\n if (currentSchema.schemaKey.matches(typeSchema.schemaKey))\r\n return typeName;\r\n\r\n // Alias is required in Spec. It could be undefined (technically), so\r\n // throw until fixed.\r\n if (typeSchema.alias === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaAlias, `The schema '${typeSchema.name}' has an invalid alias.`);\r\n\r\n return `${typeSchema.alias}:${typeName}`;\r\n }\r\n\r\n async function resolveCustomAttributeNamespace(caName: string, schema: Schema): Promise<[string, string | undefined]> {\r\n const nameParts = caName.split(\".\");\r\n if (nameParts.length === 1)\r\n return [caName, undefined];\r\n\r\n const attributeSchema = nameParts[0].toUpperCase() === schema.name.toUpperCase() ? schema : await schema.getReference(nameParts[0]);\r\n if (!attributeSchema)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Unable to resolve the namespace for CustomAttribute '${caName}' because the referenced schema '${nameParts[0]}' could not be located.`);\r\n\r\n return [nameParts[1], `${nameParts[0]}.${attributeSchema.schemaKey.version.toString()}`];\r\n }\r\n}\r\n"]}
@@ -132,7 +132,7 @@ export var XmlSerializationUtils;
132
132
  propertyElement.textContent = propertyValue.toString();
133
133
  return;
134
134
  case PrimitiveType.DateTime:
135
- propertyElement.textContent = propertyValue.getTime().toString();
135
+ propertyElement.textContent = new Date(propertyValue).getTime().toString();
136
136
  return;
137
137
  case PrimitiveType.Point2d:
138
138
  propertyElement.textContent = `${propertyValue.x},${propertyValue.y}`;
@@ -1 +1 @@
1
- {"version":3,"file":"XmlSerializationUtils.js","sourceRoot":"","sources":["../../../src/Deserialization/XmlSerializationUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { PrimitiveType, primitiveTypeToString } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport { CustomAttribute } from \"../Metadata/CustomAttribute\";\r\nimport { CustomAttributeClass } from \"../Metadata/CustomAttributeClass\";\r\nimport { ArrayProperty, EnumerationProperty, PrimitiveOrEnumPropertyBase, PrimitiveProperty, Property, StructProperty } from \"../Metadata/Property\";\r\nimport { Schema } from \"../Metadata/Schema\";\r\n\r\n/**\r\n * Namespace holding utility functions for serializing EC types to the EC XML format.\r\n * @internal\r\n */\r\nexport namespace XmlSerializationUtils {\r\n /**\r\n * Serializes a CustomAttribute instance to the EC XML format.\r\n * @param fullName The full name of the CustomAttribute (qualified by schema name).\r\n * @param customAttribute The CustomAttribute instance to serialize.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @param schema The Schema object being serialized.\r\n * @beta\r\n */\r\n export async function writeCustomAttribute(fullName: string, customAttribute: CustomAttribute, schemaDoc: Document, schema: Schema): Promise<Element> {\r\n const caClass = await schema.lookupItem(fullName) as CustomAttributeClass;\r\n if (!caClass)\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `The class '${fullName}' could not be found in the current schema context.`);\r\n\r\n const nameAndNamespace = await resolveCustomAttributeNamespace(fullName, schema);\r\n const caElement = schemaDoc.createElement(nameAndNamespace[0]);\r\n\r\n if (nameAndNamespace[1])\r\n caElement.setAttribute(\"xmlns\", nameAndNamespace[1]);\r\n\r\n if (!caClass.properties)\r\n return caElement;\r\n\r\n for (const property of caClass.properties)\r\n await writeInstanceProperty(property, customAttribute, caElement, schemaDoc);\r\n\r\n return caElement;\r\n }\r\n\r\n /**\r\n * Serializes an EC Property instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param instance The Property instance.\r\n * @param instanceElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeInstanceProperty(propertyClass: Property, instance: any, instanceElement: Element, schemaDoc: Document): Promise<void> {\r\n const propertyValue = instance[propertyClass.name];\r\n if (propertyValue === undefined)\r\n return;\r\n\r\n const propertyElement = schemaDoc.createElement(propertyClass.name);\r\n instanceElement.appendChild(propertyElement);\r\n\r\n if (propertyClass.isArray()) {\r\n await writeArrayProperty(propertyClass, propertyValue, propertyElement, schemaDoc);\r\n } else if (propertyClass.isPrimitive()) {\r\n await writePrimitiveProperty(propertyClass, propertyValue, propertyElement);\r\n } else if (propertyClass.isStruct()) {\r\n await writeStructProperty(propertyClass, propertyValue, propertyElement, schemaDoc);\r\n }\r\n }\r\n\r\n /**\r\n * Serializes an EC ArrayProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue An array holding the property values.\r\n * @param arrayElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeArrayProperty(propertyClass: ArrayProperty, propertyValue: any[], arrayElement: Element, schemaDoc: Document): Promise<void> {\r\n if (propertyClass.isPrimitive()) {\r\n const typeString = primitiveTypeToString(propertyClass.primitiveType);\r\n for (const value of propertyValue) {\r\n const entryElement = schemaDoc.createElement(typeString);\r\n await writePrimitiveProperty(propertyClass, value, entryElement);\r\n arrayElement.appendChild(entryElement);\r\n }\r\n }\r\n\r\n if (propertyClass.isStruct()) {\r\n for (const value of propertyValue) {\r\n const structElement = schemaDoc.createElement(propertyClass.structClass.name);\r\n arrayElement.appendChild(structElement);\r\n await writeStructProperty(propertyClass, value, structElement, schemaDoc);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serializes an EC StructProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue The struct object holding the property values.\r\n * @param structElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeStructProperty(propertyClass: StructProperty, propertyValue: any, structElement: Element, schemaDoc: Document): Promise<void> {\r\n const structClass = propertyClass.structClass;\r\n if (!structClass.properties)\r\n return;\r\n\r\n for (const propertyMetadata of structClass.properties)\r\n await writeInstanceProperty(propertyMetadata, propertyValue, structElement, schemaDoc);\r\n }\r\n\r\n /**\r\n * Serializes an EC PrimitiveProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue The struct object holding the property values.\r\n * @param propertyElement The XML Element that will contain the serialized property instance.\r\n * @beta\r\n */\r\n export async function writePrimitiveProperty(propertyClass: PrimitiveOrEnumPropertyBase, propertyValue: any, propertyElement: Element): Promise<void> {\r\n let primitiveType: PrimitiveType;\r\n if (propertyClass.isEnumeration()) {\r\n const enumeration = await (propertyClass as EnumerationProperty).enumeration;\r\n if (!enumeration)\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `The enumeration on property class '${propertyClass.fullName}' could not be found in the current schema context.`);\r\n\r\n if (enumeration.type === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The enumeration on property class '${propertyClass.fullName}' has an invalid primitive type.`);\r\n\r\n primitiveType = enumeration.type;\r\n } else\r\n primitiveType = (propertyClass as PrimitiveProperty).primitiveType;\r\n\r\n switch (primitiveType) {\r\n case PrimitiveType.String:\r\n propertyElement.textContent = propertyValue;\r\n return;\r\n case PrimitiveType.Boolean:\r\n propertyElement.textContent = (propertyValue as boolean) ? \"True\" : \"False\";\r\n return;\r\n case PrimitiveType.Integer:\r\n case PrimitiveType.Double:\r\n case PrimitiveType.Long:\r\n propertyElement.textContent = propertyValue.toString();\r\n return;\r\n case PrimitiveType.DateTime:\r\n propertyElement.textContent = (propertyValue as Date).getTime().toString();\r\n return;\r\n case PrimitiveType.Point2d:\r\n propertyElement.textContent = `${propertyValue.x},${propertyValue.y}`;\r\n return;\r\n case PrimitiveType.Point3d:\r\n propertyElement.textContent = `${propertyValue.x},${propertyValue.y},${propertyValue.z}`;\r\n return;\r\n case PrimitiveType.IGeometry:\r\n case PrimitiveType.Binary:\r\n propertyElement.textContent = propertyValue;\r\n return;\r\n default:\r\n throw new ECObjectsError(ECObjectsStatus.InvalidPrimitiveType, `The property '${propertyClass.fullName}' has an invalid primitive type.`);\r\n }\r\n }\r\n\r\n export function createXmlTypedName(currentSchema: Schema, typeSchema: Schema, typeName: string) {\r\n if (currentSchema.schemaKey.matches(typeSchema.schemaKey))\r\n return typeName;\r\n\r\n // Alias is required in Spec. It could be undefined (technically), so\r\n // throw until fixed.\r\n if (typeSchema.alias === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaAlias, `The schema '${typeSchema.name}' has an invalid alias.`);\r\n\r\n return `${typeSchema.alias}:${typeName}`;\r\n }\r\n\r\n async function resolveCustomAttributeNamespace(caName: string, schema: Schema): Promise<[string, string | undefined]> {\r\n const nameParts = caName.split(\".\");\r\n if (nameParts.length === 1)\r\n return [caName, undefined];\r\n\r\n const attributeSchema = nameParts[0].toUpperCase() === schema.name.toUpperCase() ? schema : await schema.getReference(nameParts[0]);\r\n if (!attributeSchema)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Unable to resolve the namespace for CustomAttribute '${caName}' because the referenced schema '${nameParts[0]}' could not be located.`);\r\n\r\n return [nameParts[1], `${nameParts[0]}.${attributeSchema.schemaKey.version.toString()}`];\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"XmlSerializationUtils.js","sourceRoot":"","sources":["../../../src/Deserialization/XmlSerializationUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { PrimitiveType, primitiveTypeToString } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport { CustomAttribute } from \"../Metadata/CustomAttribute\";\r\nimport { CustomAttributeClass } from \"../Metadata/CustomAttributeClass\";\r\nimport { ArrayProperty, EnumerationProperty, PrimitiveOrEnumPropertyBase, PrimitiveProperty, Property, StructProperty } from \"../Metadata/Property\";\r\nimport { Schema } from \"../Metadata/Schema\";\r\n\r\n/**\r\n * Namespace holding utility functions for serializing EC types to the EC XML format.\r\n * @internal\r\n */\r\nexport namespace XmlSerializationUtils {\r\n /**\r\n * Serializes a CustomAttribute instance to the EC XML format.\r\n * @param fullName The full name of the CustomAttribute (qualified by schema name).\r\n * @param customAttribute The CustomAttribute instance to serialize.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @param schema The Schema object being serialized.\r\n * @beta\r\n */\r\n export async function writeCustomAttribute(fullName: string, customAttribute: CustomAttribute, schemaDoc: Document, schema: Schema): Promise<Element> {\r\n const caClass = await schema.lookupItem(fullName) as CustomAttributeClass;\r\n if (!caClass)\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `The class '${fullName}' could not be found in the current schema context.`);\r\n\r\n const nameAndNamespace = await resolveCustomAttributeNamespace(fullName, schema);\r\n const caElement = schemaDoc.createElement(nameAndNamespace[0]);\r\n\r\n if (nameAndNamespace[1])\r\n caElement.setAttribute(\"xmlns\", nameAndNamespace[1]);\r\n\r\n if (!caClass.properties)\r\n return caElement;\r\n\r\n for (const property of caClass.properties)\r\n await writeInstanceProperty(property, customAttribute, caElement, schemaDoc);\r\n\r\n return caElement;\r\n }\r\n\r\n /**\r\n * Serializes an EC Property instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param instance The Property instance.\r\n * @param instanceElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeInstanceProperty(propertyClass: Property, instance: any, instanceElement: Element, schemaDoc: Document): Promise<void> {\r\n const propertyValue = instance[propertyClass.name];\r\n if (propertyValue === undefined)\r\n return;\r\n\r\n const propertyElement = schemaDoc.createElement(propertyClass.name);\r\n instanceElement.appendChild(propertyElement);\r\n\r\n if (propertyClass.isArray()) {\r\n await writeArrayProperty(propertyClass, propertyValue, propertyElement, schemaDoc);\r\n } else if (propertyClass.isPrimitive()) {\r\n await writePrimitiveProperty(propertyClass, propertyValue, propertyElement);\r\n } else if (propertyClass.isStruct()) {\r\n await writeStructProperty(propertyClass, propertyValue, propertyElement, schemaDoc);\r\n }\r\n }\r\n\r\n /**\r\n * Serializes an EC ArrayProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue An array holding the property values.\r\n * @param arrayElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeArrayProperty(propertyClass: ArrayProperty, propertyValue: any[], arrayElement: Element, schemaDoc: Document): Promise<void> {\r\n if (propertyClass.isPrimitive()) {\r\n const typeString = primitiveTypeToString(propertyClass.primitiveType);\r\n for (const value of propertyValue) {\r\n const entryElement = schemaDoc.createElement(typeString);\r\n await writePrimitiveProperty(propertyClass, value, entryElement);\r\n arrayElement.appendChild(entryElement);\r\n }\r\n }\r\n\r\n if (propertyClass.isStruct()) {\r\n for (const value of propertyValue) {\r\n const structElement = schemaDoc.createElement(propertyClass.structClass.name);\r\n arrayElement.appendChild(structElement);\r\n await writeStructProperty(propertyClass, value, structElement, schemaDoc);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serializes an EC StructProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue The struct object holding the property values.\r\n * @param structElement The XML Element that will contain the serialized property instance.\r\n * @param schemaDoc The Xml Document object holding the serialized EC Schema.\r\n * @beta\r\n */\r\n export async function writeStructProperty(propertyClass: StructProperty, propertyValue: any, structElement: Element, schemaDoc: Document): Promise<void> {\r\n const structClass = propertyClass.structClass;\r\n if (!structClass.properties)\r\n return;\r\n\r\n for (const propertyMetadata of structClass.properties)\r\n await writeInstanceProperty(propertyMetadata, propertyValue, structElement, schemaDoc);\r\n }\r\n\r\n /**\r\n * Serializes an EC PrimitiveProperty instance to the EC XML format.\r\n * @param propertyClass The Property metadata object.\r\n * @param propertyValue The struct object holding the property values.\r\n * @param propertyElement The XML Element that will contain the serialized property instance.\r\n * @beta\r\n */\r\n export async function writePrimitiveProperty(propertyClass: PrimitiveOrEnumPropertyBase, propertyValue: any, propertyElement: Element): Promise<void> {\r\n let primitiveType: PrimitiveType;\r\n if (propertyClass.isEnumeration()) {\r\n const enumeration = await (propertyClass as EnumerationProperty).enumeration;\r\n if (!enumeration)\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `The enumeration on property class '${propertyClass.fullName}' could not be found in the current schema context.`);\r\n\r\n if (enumeration.type === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The enumeration on property class '${propertyClass.fullName}' has an invalid primitive type.`);\r\n\r\n primitiveType = enumeration.type;\r\n } else\r\n primitiveType = (propertyClass as PrimitiveProperty).primitiveType;\r\n\r\n switch (primitiveType) {\r\n case PrimitiveType.String:\r\n propertyElement.textContent = propertyValue;\r\n return;\r\n case PrimitiveType.Boolean:\r\n propertyElement.textContent = (propertyValue as boolean) ? \"True\" : \"False\";\r\n return;\r\n case PrimitiveType.Integer:\r\n case PrimitiveType.Double:\r\n case PrimitiveType.Long:\r\n propertyElement.textContent = propertyValue.toString();\r\n return;\r\n case PrimitiveType.DateTime:\r\n propertyElement.textContent = new Date(propertyValue).getTime().toString();\r\n return;\r\n case PrimitiveType.Point2d:\r\n propertyElement.textContent = `${propertyValue.x},${propertyValue.y}`;\r\n return;\r\n case PrimitiveType.Point3d:\r\n propertyElement.textContent = `${propertyValue.x},${propertyValue.y},${propertyValue.z}`;\r\n return;\r\n case PrimitiveType.IGeometry:\r\n case PrimitiveType.Binary:\r\n propertyElement.textContent = propertyValue;\r\n return;\r\n default:\r\n throw new ECObjectsError(ECObjectsStatus.InvalidPrimitiveType, `The property '${propertyClass.fullName}' has an invalid primitive type.`);\r\n }\r\n }\r\n\r\n export function createXmlTypedName(currentSchema: Schema, typeSchema: Schema, typeName: string) {\r\n if (currentSchema.schemaKey.matches(typeSchema.schemaKey))\r\n return typeName;\r\n\r\n // Alias is required in Spec. It could be undefined (technically), so\r\n // throw until fixed.\r\n if (typeSchema.alias === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaAlias, `The schema '${typeSchema.name}' has an invalid alias.`);\r\n\r\n return `${typeSchema.alias}:${typeName}`;\r\n }\r\n\r\n async function resolveCustomAttributeNamespace(caName: string, schema: Schema): Promise<[string, string | undefined]> {\r\n const nameParts = caName.split(\".\");\r\n if (nameParts.length === 1)\r\n return [caName, undefined];\r\n\r\n const attributeSchema = nameParts[0].toUpperCase() === schema.name.toUpperCase() ? schema : await schema.getReference(nameParts[0]);\r\n if (!attributeSchema)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Unable to resolve the namespace for CustomAttribute '${caName}' because the referenced schema '${nameParts[0]}' could not be located.`);\r\n\r\n return [nameParts[1], `${nameParts[0]}.${attributeSchema.schemaKey.version.toString()}`];\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/ecschema-metadata",
3
- "version": "4.9.0-dev.10",
3
+ "version": "4.9.0-dev.11",
4
4
  "description": "ECObjects core concepts in typescript",
5
5
  "license": "MIT",
6
6
  "main": "lib/cjs/ecschema-metadata.js",
@@ -43,13 +43,13 @@
43
43
  "rimraf": "^3.0.2",
44
44
  "sinon": "^17.0.1",
45
45
  "typescript": "~5.3.3",
46
- "@itwin/core-bentley": "4.9.0-dev.10",
47
- "@itwin/build-tools": "4.9.0-dev.10",
48
- "@itwin/core-quantity": "4.9.0-dev.10"
46
+ "@itwin/core-bentley": "4.9.0-dev.11",
47
+ "@itwin/build-tools": "4.9.0-dev.11",
48
+ "@itwin/core-quantity": "4.9.0-dev.11"
49
49
  },
50
50
  "peerDependencies": {
51
- "@itwin/core-bentley": "^4.9.0-dev.10",
52
- "@itwin/core-quantity": "^4.9.0-dev.10"
51
+ "@itwin/core-bentley": "^4.9.0-dev.11",
52
+ "@itwin/core-quantity": "^4.9.0-dev.11"
53
53
  },
54
54
  "dependencies": {
55
55
  "almost-equal": "^1.1.0"