UNPKG

@rxap/xml-parser

Version:

Provides a set of decorators and services for parsing and serializing XML documents into TypeScript classes. It simplifies the process of mapping XML elements and attributes to class properties, handling data validation, and serializing objects back into

48 lines 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ELEMENT_NAMESPACE = void 0; exports.ElementNamespace = ElementNamespace; exports.hasElementNamespaceMetadata = hasElementNamespaceMetadata; exports.getElementNamespaceMetadata = getElementNamespaceMetadata; exports.applyElementNamespaceMetadata = applyElementNamespaceMetadata; const reflect_metadata_1 = require("@rxap/reflect-metadata"); exports.ELEMENT_NAMESPACE = Symbol('ELEMENT_NAMESPACE'); function ElementNamespace(...namespaceList) { return (target) => { if (namespaceList.length) { const first = namespaceList[0]; let map; if (typeof first === 'object') { map = first; } else { map = namespaceList .map(ns => ns.split(':')) .filter(ns => ns.length > 1) .map(([name, ...rest]) => ({ [name]: rest.join(':') })) .reduce((acc, ns) => (Object.assign(Object.assign({}, acc), ns)), {}); } (0, reflect_metadata_1.setMetadata)(exports.ELEMENT_NAMESPACE, map, target); } }; } function hasElementNamespaceMetadata(element) { return (0, reflect_metadata_1.hasMetadata)(exports.ELEMENT_NAMESPACE, element) && Object.keys((0, reflect_metadata_1.getMetadata)(exports.ELEMENT_NAMESPACE, element)).length > 0; } function getElementNamespaceMetadata(element) { if (!hasElementNamespaceMetadata(element)) { throw new Error(`The element ${element.name} does not have a namespace`); } return (0, reflect_metadata_1.getMetadata)(exports.ELEMENT_NAMESPACE, element); } function applyElementNamespaceMetadata(element) { var _a; if (hasElementNamespaceMetadata(element.constructor)) { const namespace = getElementNamespaceMetadata(element.constructor); (_a = element.__xmlns) !== null && _a !== void 0 ? _a : (element.__xmlns = new Map()); for (const [key, value] of Object.entries(namespace)) { element.__xmlns.set(key, value); } } } //# sourceMappingURL=element-namespace.js.map