angular-odata
Version:
Client side OData typescript library for Angular
568 lines • 33.6 kB
JavaScript
"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