UNPKG

@cgignite/ignite-odata

Version:

Odata Connector CG Ignite

81 lines (67 loc) 1.97 kB
const builder = require('xmlbuilder'); exports.GetMetadata = (model) => { return buildMetadata(model) } function buildMetadata(model) { var entityTypes = [] for (var typeKey in model.entityTypes) { var entityType = { '@Name': typeKey, 'Property': [] } for (var propKey in model.entityTypes[typeKey]) { var property = model.entityTypes[typeKey][propKey] var finalObject = { '@Name': propKey, '@Type': property.type } if (property.hasOwnProperty('nullable')) finalObject['@Nullable'] = property.nullable entityType.Property.push(finalObject) if (property.key) { entityType.Key = { PropertyRef: { '@Name': propKey } } } } entityTypes.push(entityType) } var complexTypes = [] for (var typeKey in model.complexTypes) { var complexType = { '@Name': typeKey, 'Property': [] } for (var propKey in model.complexTypes[typeKey]) { var property = model.complexTypes[typeKey][propKey] complexType.Property.push({ '@Name': propKey, '@Type': property.type }) } complexTypes.push(complexType) } var container = { '@Name': 'Context', 'EntitySet': [] } for (var setKey in model.entitySets) { container.EntitySet.push({ '@EntityType': model.entitySets[setKey].entityType, '@Name': setKey }) } var returnObject = { 'edmx:Edmx': { '@xmlns:edmx': 'http://docs.oasis-open.org/odata/ns/edmx', '@Version': '4.0', 'edmx:DataServices': { 'Schema': { '@xmlns': 'http://docs.oasis-open.org/odata/ns/edm', '@Namespace': model.namespace, 'EntityType': entityTypes, 'EntityContainer': container } } } } if (complexTypes.length) { returnObject['edmx:Edmx']['edmx:DataServices'].Schema.ComplexType = complexTypes } return builder.create(returnObject).end({ pretty: true }); }