{"version":3,"file":"DescribeFeatureType.js","sources":["../lib/DescribeFeatureType.js"],"sourcesContent":["/**\n * @module ol/format/DescribeFeatureType\n */\nimport XML from 'ol/format/XML.js';\nimport {\n makeArrayPusher,\n makeObjectPropertyPusher,\n makeObjectPropertySetter,\n makeStructureNS,\n pushParseAndPop,\n} from 'ol/xml.js';\nimport {readBooleanString, readString} from 'ol/format/xsd.js';\n\n/**\n * @const\n * @type {Array}\n */\nconst NAMESPACE_URIS = [\n null,\n 'http://www.opengis.net/gml',\n 'http://www.opengis.net/gml/3.2',\n 'http://www.w3.org/2001/XMLSchema',\n 'http://www.opengis.net/ows/1.1',\n];\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst PARSERS = makeStructureNS(NAMESPACE_URIS, {\n complexType: makeObjectPropertyPusher(readComplexType),\n import: makeObjectPropertySetter(readImport),\n element: makeObjectPropertyPusher(readElement_),\n Exception: makeObjectPropertyPusher(readException),\n});\n\n/**\n * @classdesc\n * Format for reading Describe Feature Type GML data\n *\n * @api\n */\nclass DescribeFeatureType extends XML {\n constructor() {\n super();\n }\n\n /**\n * @param {Element} node Node.\n * @return {Object|null} Object\n */\n readFromNode(node) {\n const isException = node.tagName === 'ows:ExceptionReport';\n const describeFeatureTypeObject = pushParseAndPop(\n isException\n ? {\n version: node.getAttribute('version'),\n }\n : {\n elementFormDefault: node.getAttribute('elementFormDefault'),\n targetNamespace: node.getAttribute('targetNamespace'),\n targetPrefix: readTargetPrefix(node),\n },\n PARSERS,\n node,\n []\n );\n return describeFeatureTypeObject ? describeFeatureTypeObject : null;\n }\n\n /**\n * Read the source document.\n *\n * @param {Document|Element|string} source The XML source.\n * @return {Object} An object representing the source emulating a native geoserver/mapserver json response.\n * @api\n */\n readFormatted(source) {\n const data = this.read(source);\n\n return data.Exception\n ? {\n version: data.version,\n exceptions: data.Exception.map((e) => ({\n code: e.exceptionCode,\n locator: e.locator,\n text: e.ExceptionText,\n })),\n }\n : {\n elementFormDefault: data.elementFormDefault,\n targetNamespace: data.targetNamespace,\n targetPrefix: data.targetPrefix,\n featureTypes: data.complexType.map((e) => ({\n typeName: e.name.replace(/Type$/, ''),\n properties: e.complexContent.extension.sequence,\n })),\n };\n }\n}\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst COMPLEX_TYPE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n complexContent: makeObjectPropertySetter(readComplexContent),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst COMPLEX_CONTENT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n extension: makeObjectPropertySetter(readExtension),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst EXTENSION_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n sequence: makeObjectPropertySetter(readSequence),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst SEQUENCE_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n element: makeArrayPusher(readElement),\n});\n\n/**\n * @const\n * @type {Object>}\n */\n// @ts-ignore\nconst EXCEPTION_TEXT_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n 'ExceptionText': makeObjectPropertySetter(readString),\n});\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Capability object.\n */\nfunction readComplexTypeContent(node, objectStack) {\n return pushParseAndPop({}, COMPLEX_TYPE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Exception text object.\n */\nfunction readExceptionText(node, objectStack) {\n return pushParseAndPop({}, EXCEPTION_TEXT_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Capability object.\n */\nfunction readComplexType(node, objectStack) {\n const complexType = readComplexTypeContent(node, objectStack);\n if (complexType) {\n complexType['name'] = node.getAttribute('name');\n return complexType;\n }\n return undefined;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Element object.\n */\nfunction readImport(node, objectStack) {\n const importObject = {\n namespace: node.getAttribute('namespace'),\n schemaLocation: node.getAttribute('schemaLocation'),\n };\n return importObject;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Element object.\n */\n\nfunction readException(node, objectStack) {\n const exceptionObject = readExceptionText(node, objectStack);\n if (exceptionObject) {\n exceptionObject['exceptionCode'] = node.getAttribute('exceptionCode');\n exceptionObject['locator'] = node.getAttribute('locator');\n return exceptionObject;\n }\n return undefined;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Element object.\n */\nfunction readElement_(node, objectStack) {\n const elementObject = {\n name: node.getAttribute('name'),\n substitutionGroup: node.getAttribute('substitutionGroup'),\n type: node.getAttribute('type'),\n };\n return elementObject;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Complex Content object.\n */\nfunction readComplexContent(node, objectStack) {\n return pushParseAndPop({}, COMPLEX_CONTENT_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object|undefined} Extension object.\n */\nfunction readExtension(node, objectStack) {\n return pushParseAndPop({}, EXTENSION_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Array|undefined} Sequence array.\n */\nfunction readSequence(node, objectStack) {\n return pushParseAndPop([], SEQUENCE_PARSERS, node, objectStack);\n}\n\n/**\n * @param {Element} node Node.\n * @return {string|undefined} Target Prefix.\n */\nfunction readTargetPrefix(node) {\n const attributes = node.attributes;\n let prefix = '';\n for (let i = 0; i < attributes.length; i++) {\n const attr = attributes[i].name.split(':')[1];\n if (attr && !['xsd', 'xs', 'gml', 'wfs'].includes(attr)) {\n prefix = attr;\n }\n }\n return prefix;\n}\n\n/**\n * @param {Element} node Node.\n * @param {Array<*>} objectStack Object stack.\n * @return {Object} Dimension object.\n */\nfunction readElement(node, objectStack) {\n const elementObject = {\n name: node.getAttribute('name'),\n maxOccurs: Number(node.getAttribute('maxOccurs')),\n minOccurs: Number(node.getAttribute('minOccurs')),\n nillable: readBooleanString(node.getAttribute('nillable')),\n type: node.getAttribute('type'),\n localType: node.getAttribute('type').split(':')[1],\n };\n return elementObject;\n}\n\nexport default DescribeFeatureType;\n"],"names":["makeStructureNS","makeObjectPropertyPusher","makeObjectPropertySetter","pushParseAndPop","makeArrayPusher","readString","readBooleanString"],"mappings":"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"}