UNPKG

angular-odata

Version:

Client side OData typescript library for Angular

568 lines 33.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ODataMetadataParser = void 0; const jsdom_1 = require("jsdom"); const metadata_1 = require("./metadata"); const VERSION_4_0 = '4.0'; var FieldType; (function (FieldType) { FieldType[FieldType["ATTRIBUTE"] = 0] = "ATTRIBUTE"; FieldType[FieldType["TAG"] = 1] = "TAG"; })(FieldType || (FieldType = {})); class Field { constructor(name, fieldType) { this.name = name; this.fieldType = fieldType; } } class ODataMetadataParser { constructor(source) { try { this.document = new jsdom_1.JSDOM(source, { contentType: 'text/xml', }).window.document; this.checkVersion(); } catch (error) { throw new Error('Unable to parse metadata, ' + error); } } metadata() { const version = this.getFieldValueByAttribute(new Field(ODataMetadataParser.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE), this.document.documentElement.attributes); const references = this.getObjects(this.document.documentElement, ODataMetadataParser.TAG_REFERENCE, [ new Field(ODataMetadataParser.ATTRIBUTE_URI, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_INCLUDE, FieldType.TAG), new Field(ODataMetadataParser.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); const dataServices = this.document.documentElement.getElementsByTagName(ODataMetadataParser.TAG_DATA_SERVICES)[0]; const schemas = this.getObjects(dataServices, ODataMetadataParser.TAG_SCHEMA, [ new Field(ODataMetadataParser.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ENUM_TYPE, FieldType.TAG), new Field(ODataMetadataParser.TAG_COMPLEX_TYPE, FieldType.TAG), new Field(ODataMetadataParser.TAG_ENTITY_TYPE, FieldType.TAG), new Field(ODataMetadataParser.TAG_FUNCTION, FieldType.TAG), new Field(ODataMetadataParser.TAG_ACTION, FieldType.TAG), new Field(ODataMetadataParser.TAG_ENTITY_CONTAINER, FieldType.TAG), new Field(ODataMetadataParser.TAG_TYPE_DEFINITION, FieldType.TAG), new Field(ODataMetadataParser.TAG_TERM, FieldType.TAG), new Field(ODataMetadataParser.TAG_ANNOTATIONS, FieldType.TAG), ]); return new metadata_1.ODataMetadata(version, references, schemas); } checkVersion() { // check version const attributes = this.document.documentElement.attributes; if (!attributes) { throw new Error('OData version is not specified in the metadata'); } const attr = attributes.getNamedItem('Version'); if (attr === null) { throw new Error('OData version is not specified in the metadata'); } const odataVersion = attr === null || attr === void 0 ? void 0 : attr.nodeValue; if (odataVersion !== VERSION_4_0) { throw new Error('OData version "' + odataVersion + '" is not supported'); } } getObjects(parentElement, tag, fieldNames) { let objects = []; const children = parentElement.children; for (let index = 0; index < children.length; index++) { const element = children.item(index); if (!element || element.nodeName !== tag) { continue; } const attributes = element.attributes; const fieldValues = this.getFieldValues(fieldNames, attributes, element); fieldValues['TextContent'] = element.textContent; switch (tag) { case ODataMetadataParser.TAG_REFERENCE: case ODataMetadataParser.TAG_INCLUDE: case ODataMetadataParser.TAG_INCLUDE_ANNOTATIONS: case ODataMetadataParser.TAG_TERM: case ODataMetadataParser.TAG_ANNOTATIONS: case ODataMetadataParser.TAG_COLLECTION: case ODataMetadataParser.TAG_RECORD: case ODataMetadataParser.TAG_STRING: case ODataMetadataParser.TAG_ENUM_MEMBER: case ODataMetadataParser.TAG_PROPERTY_VALUE: case ODataMetadataParser.TAG_PROPERTY_PATH: case ODataMetadataParser.TAG_NAVIGATION_PROPERTY_PATH: case ODataMetadataParser.TAG_ANNOTATION: case ODataMetadataParser.TAG_SCHEMA: case ODataMetadataParser.TAG_ENUM_TYPE: case ODataMetadataParser.TAG_COMPLEX_TYPE: case ODataMetadataParser.TAG_ENTITY_TYPE: case ODataMetadataParser.TAG_FUNCTION: case ODataMetadataParser.TAG_MEMBER: case ODataMetadataParser.TAG_PROPERTY: case ODataMetadataParser.TAG_PROPERTY_REF: case ODataMetadataParser.TAG_NAVIGATION_PROPERTY: case ODataMetadataParser.TAG_REFERENTIAL_CONSTRAINT: case ODataMetadataParser.TAG_PARAMETER: case ODataMetadataParser.TAG_ACTION: case ODataMetadataParser.TAG_ENTITY_SET: case ODataMetadataParser.TAG_SINGLETON: case ODataMetadataParser.TAG_FUNCTION_IMPORT: case ODataMetadataParser.TAG_ACTION_IMPORT: case ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING: case ODataMetadataParser.TAG_TYPE_DEFINITION: case ODataMetadataParser.TAG_ENTITY_CONTAINER: objects.push(fieldValues); break; default: throw new Error('Unknwon tag:' + tag); } } return objects; } getObject(parentElement, tag, fieldNames) { var _a; let object; const children = parentElement.children; let element; for (let index = 0; index < children.length; index++) { if (children && ((_a = children.item(index)) === null || _a === void 0 ? void 0 : _a.nodeName) === tag) { if (element !== undefined && element !== null) { throw new Error('Expected one ' + tag); } element = children.item(index); } } if (element !== undefined && element !== null) { const attributes = element.attributes; const fieldValues = this.getFieldValues(fieldNames, attributes, element); fieldValues['TextContent'] = element.textContent; switch (tag) { case ODataMetadataParser.TAG_KEY: case ODataMetadataParser.TAG_RETURN_TYPE: case ODataMetadataParser.TAG_ON_DELETE: return fieldValues; default: throw new Error('Unknwon tag:' + tag); } } return object; } getFieldValues(fields, attributes, element) { const fieldValues = {}; for (const field of fields) { if (field.fieldType === FieldType.TAG) { fieldValues[field.name] = this.getFieldValueByTag(field, element); } else if (field.fieldType === FieldType.ATTRIBUTE) { fieldValues[field.name] = this.getFieldValueByAttribute(field, attributes); } else { throw new Error('Unknown field type: ' + field.fieldType); } } return fieldValues; } getFieldValueByAttribute(field, attributes) { switch (field.name) { case ODataMetadataParser.ATTRIBUTE_VERSION: case ODataMetadataParser.ATTRIBUTE_URI: case ODataMetadataParser.ATTRIBUTE_NAMESPACE: case ODataMetadataParser.ATTRIBUTE_ALIAS: case ODataMetadataParser.ATTRIBUTE_TERM_NAMESPACE: case ODataMetadataParser.ATTRIBUTE_TERM: case ODataMetadataParser.ATTRIBUTE_QUALIFIER: case ODataMetadataParser.ATTRIBUTE_STRING: case ODataMetadataParser.ATTRIBUTE_BOOL: case ODataMetadataParser.ATTRIBUTE_INT: case ODataMetadataParser.ATTRIBUTE_TARGET_NAMESPACE: case ODataMetadataParser.ATTRIBUTE_NAME: case ODataMetadataParser.ATTRIBUTE_TYPE: case ODataMetadataParser.ATTRIBUTE_SRID: case ODataMetadataParser.ATTRIBUTE_DEFAULT_VALUE: case ODataMetadataParser.ATTRIBUTE_PARTNER: case ODataMetadataParser.ATTRIBUTE_PROPERTY: case ODataMetadataParser.ATTRIBUTE_REFERENCED_PROPERTY: case ODataMetadataParser.ATTRIBUTE_BASE_TYPE: case ODataMetadataParser.ATTRIBUTE_ENTITY_SET_PATH: case ODataMetadataParser.ATTRIBUTE_ENTITY_TYPE: case ODataMetadataParser.ATTRIBUTE_PATH: case ODataMetadataParser.ATTRIBUTE_TARGET: case ODataMetadataParser.ATTRIBUTE_FUNCTION: case ODataMetadataParser.ATTRIBUTE_ACTION: case ODataMetadataParser.ATTRIBUTE_ENTITY_SET: case ODataMetadataParser.ATTRIBUTE_UNDERLYING_TYPE: case ODataMetadataParser.ATTRIBUTE_EXTENDS: case ODataMetadataParser.ATTRIBUTE_BASE_TERM: case ODataMetadataParser.ATTRIBUTE_APPLIES_TO: return this.getAttributeValue(attributes, field.name); case ODataMetadataParser.ATTRIBUTE_NULLABLE: case ODataMetadataParser.ATTRIBUTE_UNICODE: case ODataMetadataParser.ATTRIBUTE_OPEN_TYPE: case ODataMetadataParser.ATTRIBUTE_HAS_STREAM: case ODataMetadataParser.ATTRIBUTE_IS_BOUND: case ODataMetadataParser.ATTRIBUTE_IS_COMPOSABLE: case ODataMetadataParser.ATTRIBUTE_CONTAINS_TARGET: case ODataMetadataParser.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT: case ODataMetadataParser.ATTRIBUTE_ABSTRACT: case ODataMetadataParser.ATTRIBUTE_IS_FLAGS: return this.propertyValueToBoolean(this.getAttributeValue(attributes, field.name)); case ODataMetadataParser.ATTRIBUTE_VALUE: case ODataMetadataParser.ATTRIBUTE_MAX_LENGTH: case ODataMetadataParser.ATTRIBUTE_PRECISION: case ODataMetadataParser.ATTRIBUTE_SCALE: return this.propertyValueToNumber(this.getAttributeValue(attributes, field.name)); case ODataMetadataParser.ATTRIBUTE_DATE: return this.propertyValueToDate(this.getAttributeValue(attributes, field.name)); default: throw new Error('Unknwon attribute:' + field.name); } } getFieldValueByTag(field, element) { switch (field.name) { case ODataMetadataParser.TAG_INCLUDE: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_INCLUDE_ANNOTATIONS: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_TERM_NAMESPACE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_TARGET_NAMESPACE, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_TERM: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_BASE_TERM, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_APPLIES_TO, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_STRING, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_BOOL, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_INT, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_ANNOTATIONS: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), new Field(ODataMetadataParser.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_ANNOTATION: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_TERM, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_STRING, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_BOOL, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_INT, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_COLLECTION, FieldType.TAG), new Field(ODataMetadataParser.TAG_RECORD, FieldType.TAG), new Field(ODataMetadataParser.TAG_ENUM_MEMBER, FieldType.TAG), ]); case ODataMetadataParser.TAG_COLLECTION: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.TAG_STRING, FieldType.TAG), new Field(ODataMetadataParser.TAG_RECORD, FieldType.TAG), new Field(ODataMetadataParser.TAG_PROPERTY_PATH, FieldType.TAG), new Field(ODataMetadataParser.TAG_NAVIGATION_PROPERTY_PATH, FieldType.TAG), ]); case ODataMetadataParser.TAG_RECORD: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.TAG_PROPERTY_VALUE, FieldType.TAG), ]); case ODataMetadataParser.TAG_STRING: return this.getObjects(element, field.name, []); case ODataMetadataParser.TAG_ENUM_MEMBER: return this.getObjects(element, field.name, []); case ODataMetadataParser.TAG_PROPERTY_VALUE: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_STRING, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_DATE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ENUM_MEMBER, FieldType.TAG), ]); case ODataMetadataParser.TAG_PROPERTY_PATH: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.TAG_PROPERTY_VALUE, FieldType.TAG), ]); case ODataMetadataParser.TAG_NAVIGATION_PROPERTY_PATH: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.TAG_PROPERTY_VALUE, FieldType.TAG), ]); case ODataMetadataParser.TAG_ENUM_TYPE: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_MEMBER, FieldType.TAG), new Field(ODataMetadataParser.ATTRIBUTE_UNDERLYING_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_IS_FLAGS, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_COMPLEX_TYPE: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_PROPERTY, FieldType.TAG), new Field(ODataMetadataParser.TAG_NAVIGATION_PROPERTY, FieldType.TAG), new Field(ODataMetadataParser.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_ENTITY_TYPE: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_KEY, FieldType.TAG), new Field(ODataMetadataParser.TAG_PROPERTY, FieldType.TAG), new Field(ODataMetadataParser.TAG_NAVIGATION_PROPERTY, FieldType.TAG), new Field(ODataMetadataParser.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_HAS_STREAM, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_FUNCTION: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_RETURN_TYPE, FieldType.TAG), new Field(ODataMetadataParser.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ENTITY_SET_PATH, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_IS_COMPOSABLE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_PARAMETER, FieldType.TAG), ]); case ODataMetadataParser.TAG_MEMBER: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_PROPERTY: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_KEY: return this.getObject(element, field.name, [ new Field(ODataMetadataParser.TAG_PROPERTY_REF, FieldType.TAG), ]); case ODataMetadataParser.TAG_PROPERTY_REF: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_NAVIGATION_PROPERTY: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_CONTAINS_TARGET, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_REFERENTIAL_CONSTRAINT, FieldType.TAG), new Field(ODataMetadataParser.TAG_ON_DELETE, FieldType.TAG), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_REFERENTIAL_CONSTRAINT: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_REFERENCED_PROPERTY, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_ON_DELETE: return this.getObject(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_PARAMETER: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_RETURN_TYPE: return this.getObject(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_ACTION: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_RETURN_TYPE, FieldType.TAG), new Field(ODataMetadataParser.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ENTITY_SET_PATH, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_PARAMETER, FieldType.TAG), ]); case ODataMetadataParser.TAG_ENTITY_CONTAINER: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ENTITY_SET, FieldType.TAG), new Field(ODataMetadataParser.TAG_SINGLETON, FieldType.TAG), new Field(ODataMetadataParser.TAG_FUNCTION_IMPORT, FieldType.TAG), new Field(ODataMetadataParser.TAG_ACTION_IMPORT, FieldType.TAG), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_ENTITY_SET: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ENTITY_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING, FieldType.TAG), new Field(ODataMetadataParser.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_SINGLETON: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING, FieldType.TAG), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); case ODataMetadataParser.TAG_FUNCTION_IMPORT: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_FUNCTION, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_ACTION_IMPORT: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_PATH, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE), ]); case ODataMetadataParser.TAG_TYPE_DEFINITION: return this.getObjects(element, field.name, [ new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_UNDERLYING_TYPE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE), new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG), ]); default: throw new Error('Unknwon tag:' + field.name); } } getAttributeValue(attributes, attributeName) { const attribute = attributes.getNamedItem(attributeName); return attribute !== null && attribute.nodeValue ? attribute.nodeValue : undefined; } propertyValueToNumber(attributeValue) { return attributeValue !== undefined ? Number(attributeValue) : undefined; } propertyValueToBoolean(attributeValue) { return attributeValue !== undefined ? attributeValue === 'true' : false; } propertyValueToDate(attributeValue) { return attributeValue !== undefined ? new Date(attributeValue) : undefined; } } exports.ODataMetadataParser = ODataMetadataParser; // TAGS ODataMetadataParser.TAG_EDMX = 'edmx:Edmx'; ODataMetadataParser.TAG_DATA_SERVICES = 'edmx:DataServices'; ODataMetadataParser.TAG_REFERENCE = 'edmx:Reference'; ODataMetadataParser.TAG_INCLUDE = 'edmx:Include'; ODataMetadataParser.TAG_INCLUDE_ANNOTATIONS = 'edmx:IncludeAnnotations'; ODataMetadataParser.TAG_TERM = 'Term'; ODataMetadataParser.TAG_ANNOTATIONS = 'Annotations'; ODataMetadataParser.TAG_ANNOTATION = 'Annotation'; ODataMetadataParser.TAG_SCHEMA = 'Schema'; ODataMetadataParser.TAG_ENUM_TYPE = 'EnumType'; ODataMetadataParser.TAG_MEMBER = 'Member'; ODataMetadataParser.TAG_COMPLEX_TYPE = 'ComplexType'; ODataMetadataParser.TAG_ENTITY_TYPE = 'EntityType'; ODataMetadataParser.TAG_PROPERTY = 'Property'; ODataMetadataParser.TAG_KEY = 'Key'; ODataMetadataParser.TAG_PROPERTY_REF = 'PropertyRef'; ODataMetadataParser.TAG_NAVIGATION_PROPERTY = 'NavigationProperty'; ODataMetadataParser.TAG_REFERENTIAL_CONSTRAINT = 'ReferentialConstraint'; ODataMetadataParser.TAG_ON_DELETE = 'OnDelete'; ODataMetadataParser.TAG_FUNCTION = 'Function'; ODataMetadataParser.TAG_RETURN_TYPE = 'ReturnType'; ODataMetadataParser.TAG_PARAMETER = 'Parameter'; ODataMetadataParser.TAG_ACTION = 'Action'; ODataMetadataParser.TAG_ENTITY_CONTAINER = 'EntityContainer'; ODataMetadataParser.TAG_ENTITY_SET = 'EntitySet'; ODataMetadataParser.TAG_SINGLETON = 'Singleton'; ODataMetadataParser.TAG_COLLECTION = 'Collection'; ODataMetadataParser.TAG_RECORD = 'Record'; ODataMetadataParser.TAG_STRING = 'String'; ODataMetadataParser.TAG_ENUM_MEMBER = 'EnumMember'; ODataMetadataParser.TAG_PROPERTY_VALUE = 'PropertyValue'; ODataMetadataParser.TAG_PROPERTY_PATH = 'PropertyPath'; ODataMetadataParser.TAG_NAVIGATION_PROPERTY_PATH = 'NavigationPropertyPath'; ODataMetadataParser.TAG_FUNCTION_IMPORT = 'FunctionImport'; ODataMetadataParser.TAG_ACTION_IMPORT = 'ActionImport'; ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING = 'NavigationPropertyBinding'; ODataMetadataParser.TAG_TYPE_DEFINITION = 'TypeDefinition'; // ATTRIBUTES ODataMetadataParser.ATTRIBUTE_VERSION = 'Version'; ODataMetadataParser.ATTRIBUTE_URI = 'Uri'; ODataMetadataParser.ATTRIBUTE_ALIAS = 'Alias'; ODataMetadataParser.ATTRIBUTE_NAMESPACE = 'Namespace'; ODataMetadataParser.ATTRIBUTE_TERM_NAMESPACE = 'TermNamespace'; ODataMetadataParser.ATTRIBUTE_QUALIFIER = 'Qualifier'; ODataMetadataParser.ATTRIBUTE_STRING = 'String'; ODataMetadataParser.ATTRIBUTE_DATE = 'Date'; ODataMetadataParser.ATTRIBUTE_BOOL = 'Bool'; ODataMetadataParser.ATTRIBUTE_INT = 'Int'; ODataMetadataParser.ATTRIBUTE_TARGET_NAMESPACE = 'TargetNamespace'; ODataMetadataParser.ATTRIBUTE_TERM = 'Term'; ODataMetadataParser.ATTRIBUTE_NAME = 'Name'; ODataMetadataParser.ATTRIBUTE_VALUE = 'Value'; ODataMetadataParser.ATTRIBUTE_BASE_TYPE = 'BaseType'; ODataMetadataParser.ATTRIBUTE_OPEN_TYPE = 'OpenType'; ODataMetadataParser.ATTRIBUTE_TYPE = 'Type'; ODataMetadataParser.ATTRIBUTE_NULLABLE = 'Nullable'; ODataMetadataParser.ATTRIBUTE_MAX_LENGTH = 'MaxLength'; ODataMetadataParser.ATTRIBUTE_PRECISION = 'Precision'; ODataMetadataParser.ATTRIBUTE_SCALE = 'Scale'; ODataMetadataParser.ATTRIBUTE_UNICODE = 'Unicode'; ODataMetadataParser.ATTRIBUTE_SRID = 'SRID'; ODataMetadataParser.ATTRIBUTE_DEFAULT_VALUE = 'DefaultValue'; ODataMetadataParser.ATTRIBUTE_PARTNER = 'Partner'; ODataMetadataParser.ATTRIBUTE_PROPERTY = 'Property'; ODataMetadataParser.ATTRIBUTE_REFERENCED_PROPERTY = 'ReferencedProperty'; ODataMetadataParser.ATTRIBUTE_HAS_STREAM = 'HasStream'; ODataMetadataParser.ATTRIBUTE_CONTAINS_TARGET = 'ContainsTarget'; ODataMetadataParser.ATTRIBUTE_IS_BOUND = 'IsBound'; ODataMetadataParser.ATTRIBUTE_ENTITY_SET_PATH = 'EntitySetPath'; ODataMetadataParser.ATTRIBUTE_IS_COMPOSABLE = 'IsComposable'; ODataMetadataParser.ATTRIBUTE_ENTITY_TYPE = 'EntityType'; ODataMetadataParser.ATTRIBUTE_PATH = 'Path'; ODataMetadataParser.ATTRIBUTE_TARGET = 'Target'; ODataMetadataParser.ATTRIBUTE_FUNCTION = 'Function'; ODataMetadataParser.ATTRIBUTE_ACTION = 'Action'; ODataMetadataParser.ATTRIBUTE_ENTITY_SET = 'EntitySet'; ODataMetadataParser.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT = 'IncludeInServiceDocument'; ODataMetadataParser.ATTRIBUTE_ABSTRACT = 'Abstract'; ODataMetadataParser.ATTRIBUTE_UNDERLYING_TYPE = 'UnderlyingType'; ODataMetadataParser.ATTRIBUTE_IS_FLAGS = 'IsFlags'; ODataMetadataParser.ATTRIBUTE_EXTENDS = 'Extends'; ODataMetadataParser.ATTRIBUTE_BASE_TERM = 'BaseTerm'; ODataMetadataParser.ATTRIBUTE_APPLIES_TO = 'AppliesTo'; //# sourceMappingURL=parser.js.map