'use strict'; function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } const convertToJSON = ast => { return buildJSONFromNode(ast.value.children[0]) }; const buildJSONFromNode = node => { if (!node) return null const json = {}; switch (node.type) { case "ELEMENT": { let element = {}; const attribs = buildAttributes(node.value.attributes); const children = buildJSONFromNode(node.value.children); if (attribs) { element = Object.assign(element, attribs); } if (children) { const jsonChildren = buildChildren(node.value.children); element = Object.assign(element, jsonChildren); } json[node.value.type] = element; break } case "ATTRIBUTE": { const attribNameAndValue = node.value; json[attribNameAndValue.name] = attribNameAndValue.value; break } case "CONTENT": { return {content: node.value} } } return json }; const buildChildren = children => { if (!children || !Array.isArray(children) || children.length === 0) return null if (isContentChildren(children)) { return { content: children[0].value } } return { children: children.map(buildJSONFromNode) } }; const isContentChildren = children => children && Array.isArray(children) && children.length === 1 && children[0].type === "CONTENT"; const buildAttributes = arrayNodes => { if (arrayNodes && Array.isArray(arrayNodes)) { const jsonArray = arrayNodes.map(buildJSONFromNode); return jsonArray.reduce((agg, j) => Object.assign(agg, j), {}) } return null }; var astToJson = { convert: convertToJSON }; const Token$2 = (type, value) => ({ type, value }); var model = { Token: Token$2 }; const { Token: Token$1 } = model; const EOF_TOKEN = Token$1("EOF"); const isCharBlank = (char) => char === ' ' || char === '\n' || char === '\r' || char === '\t'; const skipXMLDocumentHeader = (xmlAsString, pos) => { if (xmlAsString.startsWith('') { return pos + 2 // skip "?>"" } else { pos++; } } } return pos }; const replaceQuotes = (str) => str.replace(/'/g, "'"); const getInitialPosForLexer = (xmlAsString) => { let pos = 0; while (pos < xmlAsString.length && isCharBlank(xmlAsString[pos])) pos++; return skipXMLDocumentHeader(xmlAsString, pos) }; function createLexer$1(xmlAsString) { let currentToken = null; let pos = getInitialPosForLexer(xmlAsString); let scopingElement = []; const peek = () => xmlAsString[pos]; const hasNext = () => currentToken !== EOF_TOKEN && pos < xmlAsString.length; const isBlankSpace = () => isCharBlank(xmlAsString[pos]); const skipQuotes = () => { if (hasNext() && isQuote(peek())) pos++; }; const isQuote = (char) => '"' === char || "'" === char; const skipSpaces = () => { while (hasNext() && isBlankSpace()) pos++; }; const readAlphaNumericCharsOrBrackets = (areSpecialCharsSupported) => { if (hasNext()) { if (xmlAsString[pos] === '<') { let buffer = '<'; pos++; if (hasNext() && xmlAsString[pos] === '/') { pos++; buffer = '') { pos++; buffer = '/>'; } return buffer } else if (xmlAsString[pos] === '=' || xmlAsString[pos] === '>') { const buffer = xmlAsString[pos]; pos++; return buffer } } return readAlphaNumericChars(!!areSpecialCharsSupported) }; const readAlphaNumericChars = (areSpecialCharsSupported) => { const ELEMENT_TYPE_MATCHER = /[a-zA-Z0-9_:-]/; const NAMES_VALS_CONTENT_MATCHER = /[^>=<]/u; const matcher = areSpecialCharsSupported ? NAMES_VALS_CONTENT_MATCHER : ELEMENT_TYPE_MATCHER; let start = pos; while (hasNext() && xmlAsString[pos].match(matcher)) pos++; return replaceQuotes(xmlAsString.substring(start, pos)) }; const isElementBegin = () => currentToken && currentToken.type === "OPEN_BRACKET"; const isAssignToAttribute = () => currentToken && currentToken.type === "ASSIGN"; const next = () => { const prevPos = pos; skipSpaces(); const numOfSpacesSkipped = pos - prevPos; if (!hasNext()) { currentToken = EOF_TOKEN; } else if (isElementBegin()) { // starting new element skipSpaces(); const buffer = readAlphaNumericCharsOrBrackets(false); currentToken = Token$1("ELEMENT_TYPE", buffer); scopingElement.push(buffer); } else if (isAssignToAttribute()) { // assign value to attribute skipQuotes(); const openingQuote = xmlAsString[pos - 1]; let start = pos; while (hasNext() && peek() !== openingQuote) pos++; const buffer = replaceQuotes(xmlAsString.substring(start, pos)); pos++; currentToken = Token$1("ATTRIB_VALUE", buffer); } else { skipSpaces(); let buffer = readAlphaNumericCharsOrBrackets(true); switch (buffer) { case '=': { if (currentToken.type === "ATTRIB_NAME") { currentToken = Token$1("ASSIGN"); } else { currentToken = Token$1("CONTENT", buffer); } break } case '') pos++; currentToken = Token$1( "CLOSE_ELEMENT", xmlAsString.substring(start, pos) ); pos++; // skip the ">" scopingElement.pop(); break } case '/>': { const scopingElementName = scopingElement.pop(); currentToken = Token$1( "CLOSE_ELEMENT", scopingElementName ); break } case '