saxen
Version:
A tiny, super fast, namespace aware sax-style XML parser written in plain JavaScript
1 lines • 48 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../lib/decode.js","../lib/parser.js"],"sourcesContent":["var fromCharCode = String.fromCharCode;\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar ENTITY_PATTERN = /&#(\\d+);|&#x([0-9a-f]+);|&(\\w+);/ig;\n\nvar ENTITY_MAPPING = {\n 'amp': '&',\n 'apos': '\\'',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"'\n};\n\n// map UPPERCASE variants of supported special chars\nObject.keys(ENTITY_MAPPING).forEach(function(k) {\n ENTITY_MAPPING[k.toUpperCase()] = ENTITY_MAPPING[k];\n});\n\n\nfunction replaceEntities(_, d, x, z) {\n\n // reserved names, i.e. \n if (z) {\n if (hasOwnProperty.call(ENTITY_MAPPING, z)) {\n return ENTITY_MAPPING[z];\n } else {\n\n // fall back to original value\n return '&' + z + ';';\n }\n }\n\n // decimal encoded char\n if (d) {\n return fromCharCode(d);\n }\n\n // hex encoded char\n return fromCharCode(parseInt(x, 16));\n}\n\n\n/**\n * A basic entity decoder that can decode a minimal\n * sub-set of reserved names (&) as well as\n * hex (ય) and decimal (ӏ) encoded characters.\n *\n * @param {string} s\n *\n * @return {string} decoded string\n */\nexport default function decodeEntities(s) {\n if (s.length > 3 && s.indexOf('&') !== -1) {\n return s.replace(ENTITY_PATTERN, replaceEntities);\n }\n\n return s;\n}","import decodeEntities from './decode.js';\n\nvar NON_WHITESPACE_OUTSIDE_ROOT_NODE = 'non-whitespace outside of root node';\n\nfunction error(msg) {\n return new Error(msg);\n}\n\nfunction missingNamespaceForPrefix(prefix) {\n return 'missing namespace for prefix <' + prefix + '>';\n}\n\nfunction getter(getFn) {\n return {\n 'get': getFn,\n 'enumerable': true\n };\n}\n\nfunction cloneNsMatrix(nsMatrix) {\n var clone = {}, key;\n for (key in nsMatrix) {\n clone[key] = nsMatrix[key];\n }\n return clone;\n}\n\nfunction uriPrefix(prefix) {\n return prefix + '$uri';\n}\n\nfunction buildNsMatrix(nsUriToPrefix) {\n var nsMatrix = {},\n uri,\n prefix;\n\n for (uri in nsUriToPrefix) {\n prefix = nsUriToPrefix[uri];\n nsMatrix[prefix] = prefix;\n nsMatrix[uriPrefix(prefix)] = uri;\n }\n\n return nsMatrix;\n}\n\nfunction noopGetContext() {\n return { line: 0, column: 0 };\n}\n\nfunction throwFunc(err) {\n throw err;\n}\n\n/**\n * Creates a new parser with the given options.\n *\n * @constructor\n *\n * @param {!Object<string, ?>=} options\n */\nexport default function Parser(options) {\n\n if (!this) {\n return new Parser(options);\n }\n\n var proxy = options && options['proxy'];\n\n var onText,\n onOpenTag,\n onCloseTag,\n onCDATA,\n onError = throwFunc,\n onWarning,\n onComment,\n onQuestion,\n onAttention;\n\n var getContext = noopGetContext;\n\n /**\n * Do we need to parse the current elements attributes for namespaces?\n *\n * @type {boolean}\n */\n var maybeNS = false;\n\n /**\n * Do we process namespaces at all?\n *\n * @type {boolean}\n */\n var isNamespace = false;\n\n /**\n * The caught error returned on parse end\n *\n * @type {Error}\n */\n var returnError = null;\n\n /**\n * Should we stop parsing?\n *\n * @type {boolean}\n */\n var parseStop = false;\n\n /**\n * A map of { uri: prefix } used by the parser.\n *\n * This map will ensure we can normalize prefixes during processing;\n * for each uri, only one prefix will be exposed to the handlers.\n *\n * @type {!Object<string, string>}}\n */\n var nsUriToPrefix;\n\n /**\n * Handle parse error.\n *\n * @param {string|Error} err\n */\n function handleError(err) {\n if (!(err instanceof Error)) {\n err = error(err);\n }\n\n returnError = err;\n\n onError(err, getContext);\n }\n\n /**\n * Handle parse error.\n *\n * @param {string|Error} err\n */\n function handleWarning(err) {\n\n if (!onWarning) {\n return;\n }\n\n if (!(err instanceof Error)) {\n err = error(err);\n }\n\n onWarning(err, getContext);\n }\n\n /**\n * Register parse listener.\n *\n * @param {string} name\n * @param {Function} cb\n *\n * @return {Parser}\n */\n this['on'] = function(name, cb) {\n\n if (typeof cb !== 'function') {\n throw error('required args <name, cb>');\n }\n\n switch (name) {\n case 'openTag': onOpenTag = cb; break;\n case 'text': onText = cb; break;\n case 'closeTag': onCloseTag = cb; break;\n case 'error': onError = cb; break;\n case 'warn': onWarning = cb; break;\n case 'cdata': onCDATA = cb; break;\n case 'attention': onAttention = cb; break; // <!XXXXX zzzz=\"eeee\">\n case 'question': onQuestion = cb; break; // <? .... ?>\n case 'comment': onComment = cb; break;\n default:\n throw error('unsupported event: ' + name);\n }\n\n return this;\n };\n\n /**\n * Set the namespace to prefix mapping.\n *\n * @example\n *\n * parser.ns({\n * 'http://foo': 'foo',\n * 'http://bar': 'bar'\n * });\n *\n * @param {!Object<string, string>} nsMap\n *\n * @return {Parser}\n */\n this['ns'] = function(nsMap) {\n\n if (typeof nsMap === 'undefined') {\n nsMap = {};\n }\n\n if (typeof nsMap !== 'object') {\n throw error('required args <nsMap={}>');\n }\n\n var _nsUriToPrefix = {}, k;\n\n for (k in nsMap) {\n _nsUriToPrefix[k] = nsMap[k];\n }\n\n isNamespace = true;\n nsUriToPrefix = _nsUriToPrefix;\n\n return this;\n };\n\n /**\n * Parse xml string.\n *\n * @param {string} xml\n *\n * @return {Error} returnError, if not thrown\n */\n this['parse'] = function(xml) {\n if (typeof xml !== 'string') {\n throw error('required args <xml=string>');\n }\n\n returnError = null;\n\n parse(xml);\n\n getContext = noopGetContext;\n parseStop = false;\n\n return returnError;\n };\n\n /**\n * Stop parsing.\n */\n this['stop'] = function() {\n parseStop = true;\n };\n\n /**\n * Parse string, invoking configured listeners on element.\n *\n * @param {string} xml\n */\n function parse(xml) {\n var nsMatrixStack = isNamespace ? [] : null,\n nsMatrix = isNamespace ? buildNsMatrix(nsUriToPrefix) : null,\n _nsMatrix,\n nodeStack = [],\n anonymousNsCount = 0,\n tagStart = false,\n tagEnd = false,\n i = 0, j = 0,\n x, y, q, w, v,\n xmlns,\n elementName,\n _elementName,\n elementProxy\n ;\n\n var attrsString = '',\n attrsStart = 0,\n cachedAttrs // false = parsed with errors, null = needs parsing\n ;\n\n /**\n * Parse attributes on demand and returns the parsed attributes.\n *\n * Return semantics: (1) `false` on attribute parse error,\n * (2) object hash on extracted attrs.\n *\n * @return {boolean|Object}\n */\n function getAttrs() {\n if (cachedAttrs !== null) {\n return cachedAttrs;\n }\n\n var nsUri,\n nsUriPrefix,\n nsName,\n defaultAlias = isNamespace && nsMatrix['xmlns'],\n attrList = isNamespace && maybeNS ? [] : null,\n i = attrsStart,\n s = attrsString,\n l = s.length,\n hasNewMatrix,\n newalias,\n value,\n alias,\n name,\n attrs = {},\n seenAttrs = {},\n skipAttr,\n w,\n j;\n\n parseAttr:\n for (; i < l; i++) {\n skipAttr = false;\n w = s.charCodeAt(i);\n\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE={ \\f\\n\\r\\t\\v}\n continue;\n }\n\n // wait for non whitespace character\n if (w < 65 || w > 122 || (w > 90 && w < 97)) {\n if (w !== 95 && w !== 58) { // char 95\"_\" 58\":\"\n handleWarning('illegal first char attribute name');\n skipAttr = true;\n }\n }\n\n // parse attribute name\n for (j = i + 1; j < l; j++) {\n w = s.charCodeAt(j);\n\n if (\n w > 96 && w < 123 ||\n w > 64 && w < 91 ||\n w > 47 && w < 59 ||\n w === 46 || // '.'\n w === 45 || // '-'\n w === 95 // '_'\n ) {\n continue;\n }\n\n // unexpected whitespace\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\n handleWarning('missing attribute value');\n i = j;\n\n continue parseAttr;\n }\n\n // expected \"=\"\n if (w === 61) { // \"=\" == 61\n break;\n }\n\n handleWarning('illegal attribute name char');\n skipAttr = true;\n }\n\n name = s.substring(i, j);\n\n if (name === 'xmlns:xmlns') {\n handleWarning('illegal declaration of xmlns');\n skipAttr = true;\n }\n\n w = s.charCodeAt(j + 1);\n\n if (w === 34) { // '\"'\n j = s.indexOf('\"', i = j + 2);\n\n if (j === -1) {\n j = s.indexOf('\\'', i);\n\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n\n } else if (w === 39) { // \"'\"\n j = s.indexOf('\\'', i = j + 2);\n\n if (j === -1) {\n j = s.indexOf('\"', i);\n\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n\n } else {\n handleWarning('missing attribute value quotes');\n skipAttr = true;\n\n // skip to next space\n for (j = j + 1; j < l; j++) {\n w = s.charCodeAt(j + 1);\n\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\n break;\n }\n }\n\n }\n\n if (j === -1) {\n handleWarning('missing closing quotes');\n\n j = l;\n skipAttr = true;\n }\n\n if (!skipAttr) {\n value = s.substring(i, j);\n }\n\n i = j;\n\n // ensure SPACE follows attribute\n // skip illegal content otherwise\n // example a=\"b\"c\n for (; j + 1 < l; j++) {\n w = s.charCodeAt(j + 1);\n\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\n break;\n }\n\n // FIRST ILLEGAL CHAR\n if (i === j) {\n handleWarning('illegal character after attribute end');\n skipAttr = true;\n }\n }\n\n // advance cursor to next attribute\n i = j + 1;\n\n if (skipAttr) {\n continue parseAttr;\n }\n\n // check attribute re-declaration\n if (name in seenAttrs) {\n handleWarning('attribute <' + name + '> already defined');\n continue;\n }\n\n seenAttrs[name] = true;\n\n if (!isNamespace) {\n attrs[name] = value;\n continue;\n }\n\n // try to extract namespace information\n if (maybeNS) {\n newalias = (\n name === 'xmlns'\n ? 'xmlns'\n : (name.charCodeAt(0) === 120 && name.substr(0, 6) === 'xmlns:')\n ? name.substr(6)\n : null\n );\n\n // handle xmlns(:alias) assignment\n if (newalias !== null) {\n nsUri = decodeEntities(value);\n nsUriPrefix = uriPrefix(newalias);\n\n alias = nsUriToPrefix[nsUri];\n\n if (!alias) {\n\n // no prefix defined or prefix collision\n if (\n (newalias === 'xmlns') ||\n (nsUriPrefix in nsMatrix && nsMatrix[nsUriPrefix] !== nsUri)\n ) {\n\n // alocate free ns prefix\n do {\n alias = 'ns' + (anonymousNsCount++);\n } while (typeof nsMatrix[alias] !== 'undefined');\n } else {\n alias = newalias;\n }\n\n nsUriToPrefix[nsUri] = alias;\n }\n\n if (nsMatrix[newalias] !== alias) {\n if (!hasNewMatrix) {\n nsMatrix = cloneNsMatrix(nsMatrix);\n hasNewMatrix = true;\n }\n\n nsMatrix[newalias] = alias;\n if (newalias === 'xmlns') {\n nsMatrix[uriPrefix(alias)] = nsUri;\n defaultAlias = alias;\n }\n\n nsMatrix[nsUriPrefix] = nsUri;\n }\n\n // expose xmlns(:asd)=\"...\" in attributes\n attrs[name] = value;\n continue;\n }\n\n // collect attributes until all namespace\n // declarations are processed\n attrList.push(name, value);\n continue;\n\n } /** end if (maybeNs) */\n\n // handle attributes on element without\n // namespace declarations\n w = name.indexOf(':');\n if (w === -1) {\n attrs[name] = value;\n continue;\n }\n\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n\n name = defaultAlias === nsName\n ? name.substr(w + 1)\n : nsName + name.substr(w);\n\n // end: normalize ns attribute name\n\n attrs[name] = value;\n }\n\n\n // handle deferred, possibly namespaced attributes\n if (maybeNS) {\n\n // normalize captured attributes\n for (i = 0, l = attrList.length; i < l; i++) {\n\n name = attrList[i++];\n value = attrList[i];\n\n w = name.indexOf(':');\n\n if (w !== -1) {\n\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n\n name = defaultAlias === nsName\n ? name.substr(w + 1)\n : nsName + name.substr(w);\n\n // end: normalize ns attribute name\n }\n\n attrs[name] = value;\n }\n\n // end: normalize captured attributes\n }\n\n return cachedAttrs = attrs;\n }\n\n /**\n * Extract the parse context { line, column, part }\n * from the current parser position.\n *\n * @return {Object} parse context\n */\n function getParseContext() {\n var splitsRe = /(\\r\\n|\\r|\\n)/g;\n\n var line = 0;\n var column = 0;\n var startOfLine = 0;\n var endOfLine = j;\n var match;\n var data;\n\n while (i >= startOfLine) {\n\n match = splitsRe.exec(xml);\n\n if (!match) {\n break;\n }\n\n // end of line = (break idx + break chars)\n endOfLine = match[0].length + match.index;\n\n if (endOfLine > i) {\n break;\n }\n\n // advance to next line\n line += 1;\n\n startOfLine = endOfLine;\n }\n\n // EOF errors\n if (i == -1) {\n column = endOfLine;\n data = xml.substring(j);\n } else\n\n // start errors\n if (j === 0) {\n data = xml.substring(j, i);\n }\n\n // other errors\n else {\n column = i - startOfLine;\n data = (j == -1 ? xml.substring(i) : xml.substring(i, j + 1));\n }\n\n return {\n 'data': data,\n 'line': line,\n 'column': column\n };\n }\n\n getContext = getParseContext;\n\n\n if (proxy) {\n elementProxy = Object.create({}, {\n 'name': getter(function() {\n return elementName;\n }),\n 'originalName': getter(function() {\n return _elementName;\n }),\n 'attrs': getter(getAttrs),\n 'ns': getter(function() {\n return nsMatrix;\n })\n });\n }\n\n // actual parse logic\n while (j !== -1) {\n\n if (xml.charCodeAt(j) === 60) { // \"<\"\n i = j;\n } else {\n i = xml.indexOf('<', j);\n }\n\n // parse end\n if (i === -1) {\n if (nodeStack.length) {\n return handleError('unexpected end of file');\n }\n\n if (j === 0) {\n return handleError('missing start tag');\n }\n\n if (j < xml.length) {\n if (xml.substring(j).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n }\n }\n\n return;\n }\n\n // parse text\n if (j !== i) {\n\n if (nodeStack.length) {\n if (onText) {\n onText(xml.substring(j, i), decodeEntities, getContext);\n\n if (parseStop) {\n return;\n }\n }\n } else {\n if (xml.substring(j, i).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n\n if (parseStop) {\n return;\n }\n }\n }\n }\n\n w = xml.charCodeAt(i + 1);\n\n // parse comments + CDATA\n if (w === 33) { // \"!\"\n q = xml.charCodeAt(i + 2);\n\n // CDATA section\n if (q === 91 && xml.substr(i + 3, 6) === 'CDATA[') { // 91 == \"[\"\n j = xml.indexOf(']]>', i);\n if (j === -1) {\n return handleError('unclosed cdata');\n }\n\n if (onCDATA) {\n onCDATA(xml.substring(i + 9, j), getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 3;\n continue;\n }\n\n // comment\n if (q === 45 && xml.charCodeAt(i + 3) === 45) { // 45 == \"-\"\n j = xml.indexOf('-->', i);\n if (j === -1) {\n return handleError('unclosed comment');\n }\n\n\n if (onComment) {\n onComment(xml.substring(i + 4, j), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 3;\n continue;\n }\n }\n\n // parse question <? ... ?>\n if (w === 63) { // \"?\"\n j = xml.indexOf('?>', i);\n if (j === -1) {\n return handleError('unclosed question');\n }\n\n if (onQuestion) {\n onQuestion(xml.substring(i, j + 2), getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 2;\n continue;\n }\n\n // find matching closing tag for attention or standard tags\n // for that we must skip through attribute values\n // (enclosed in single or double quotes)\n for (x = i + 1; ; x++) {\n v = xml.charCodeAt(x);\n if (isNaN(v)) {\n j = -1;\n return handleError('unclosed tag');\n }\n\n // [10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\n // skips the quoted string\n // (double quotes) does not appear in a literal enclosed by (double quotes)\n // (single quote) does not appear in a literal enclosed by (single quote)\n if (v === 34) { // '\"'\n q = xml.indexOf('\"', x + 1);\n x = q !== -1 ? q : x;\n } else if (v === 39) { // \"'\"\n q = xml.indexOf(\"'\", x + 1);\n x = q !== -1 ? q : x;\n } else if (v === 62) { // '>'\n j = x;\n break;\n }\n }\n\n\n // parse attention <! ...>\n // previously comment and CDATA have already been parsed\n if (w === 33) { // \"!\"\n\n if (onAttention) {\n onAttention(xml.substring(i, j + 1), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 1;\n continue;\n }\n\n // don't process attributes;\n // there are none\n cachedAttrs = {};\n\n // if (xml.charCodeAt(i+1) === 47) { // </...\n if (w === 47) { // </...\n tagStart = false;\n tagEnd = true;\n\n if (!nodeStack.length) {\n return handleError('missing open tag');\n }\n\n // verify open <-> close tag match\n x = elementName = nodeStack.pop();\n q = i + 2 + x.length;\n\n if (xml.substring(i + 2, q) !== x) {\n return handleError('closing tag mismatch');\n }\n\n // verify chars in close tag\n for (; q < j; q++) {\n w = xml.charCodeAt(q);\n\n if (w === 32 || (w > 8 && w < 14)) { // \\f\\n\\r\\t\\v space\n continue;\n }\n\n return handleError('close tag');\n }\n\n } else {\n if (xml.charCodeAt(j - 1) === 47) { // .../>\n x = elementName = xml.substring(i + 1, j - 1);\n\n tagStart = true;\n tagEnd = true;\n\n } else {\n x = elementName = xml.substring(i + 1, j);\n\n tagStart = true;\n tagEnd = false;\n }\n\n if (!(w > 96 && w < 123 || w > 64 && w < 91 || w === 95 || w === 58)) { // char 95\"_\" 58\":\"\n return handleError('illegal first char nodeName');\n }\n\n for (q = 1, y = x.length; q < y; q++) {\n w = x.charCodeAt(q);\n\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 45 || w === 95 || w == 46) {\n continue;\n }\n\n if (w === 32 || (w < 14 && w > 8)) { // \\f\\n\\r\\t\\v space\n elementName = x.substring(0, q);\n\n // maybe there are attributes\n cachedAttrs = null;\n break;\n }\n\n return handleError('invalid nodeName');\n }\n\n if (!tagEnd) {\n nodeStack.push(elementName);\n }\n }\n\n if (isNamespace) {\n\n _nsMatrix = nsMatrix;\n\n if (tagStart) {\n\n // remember old namespace\n // unless we're self-closing\n if (!tagEnd) {\n nsMatrixStack.push(_nsMatrix);\n }\n\n if (cachedAttrs === null) {\n\n // quick check, whether there may be namespace\n // declarations on the node; if that is the case\n // we need to eagerly parse the node attributes\n if ((maybeNS = x.indexOf('xmlns', q) !== -1)) {\n attrsStart = q;\n attrsString = x;\n\n getAttrs();\n\n maybeNS = false;\n }\n }\n }\n\n _elementName = elementName;\n\n w = elementName.indexOf(':');\n if (w !== -1) {\n xmlns = nsMatrix[elementName.substring(0, w)];\n\n // prefix given; namespace must exist\n if (!xmlns) {\n return handleError('missing namespace on <' + _elementName + '>');\n }\n\n elementName = elementName.substr(w + 1);\n } else {\n xmlns = nsMatrix['xmlns'];\n\n // if no default namespace is defined,\n // we'll import the element as anonymous.\n //\n // it is up to users to correct that to the document defined\n // targetNamespace, or whatever their undersanding of the\n // XML spec mandates.\n }\n\n // adjust namespace prefixs as configured\n if (xmlns) {\n elementName = xmlns + ':' + elementName;\n }\n\n }\n\n if (tagStart) {\n attrsStart = q;\n attrsString = x;\n\n if (onOpenTag) {\n if (proxy) {\n onOpenTag(elementProxy, decodeEntities, tagEnd, getContext);\n } else {\n onOpenTag(elementName, getAttrs, decodeEntities, tagEnd, getContext);\n }\n\n if (parseStop) {\n return;\n }\n }\n\n }\n\n if (tagEnd) {\n\n if (onCloseTag) {\n onCloseTag(proxy ? elementProxy : elementName, decodeEntities, tagStart, getContext);\n\n if (parseStop) {\n return;\n }\n }\n\n // restore old namespace\n if (isNamespace) {\n if (!tagStart) {\n nsMatrix = nsMatrixStack.pop();\n } else {\n nsMatrix = _nsMatrix;\n }\n }\n }\n\n j += 1;\n }\n } /** end parse */\n\n}"],"names":[],"mappings":"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"}