UNPKG

partial-xml-stream-parser

Version:

A lenient XML stream parser for Node.js and browsers that can handle incomplete or malformed XML data, with depth control, CDATA support for XML serialization and round-trip parsing, wildcard pattern support for stopNodes, and CDATA handling within stopNo

67 lines 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initializeParserOptions = initializeParserOptions; exports.resetParserState = resetParserState; const options_1 = require("./options"); function initializeParserOptions(parserContext, options) { const mergedOptions = { ...options_1.DEFAULT_STREAM_OPTIONS, ...options }; parserContext.customOptions = mergedOptions; if (mergedOptions.allowedRootNodes) { if (Array.isArray(mergedOptions.allowedRootNodes) && mergedOptions.allowedRootNodes.length > 0) { parserContext.allowedRootNodes = new Set(mergedOptions.allowedRootNodes); } else if (typeof mergedOptions.allowedRootNodes === "string") { parserContext.allowedRootNodes = new Set([mergedOptions.allowedRootNodes]); } else if (Array.isArray(mergedOptions.allowedRootNodes) && mergedOptions.allowedRootNodes.length === 0) { parserContext.allowedRootNodes = null; // Empty array means parse all as XML } else { parserContext.allowedRootNodes = null; // Default to no restrictions } } else { parserContext.allowedRootNodes = null; // No restrictions } parserContext.attrRegex = /([\w:-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s/>]+)))?/g; parserContext.commentRegex = /<!--/g; parserContext.cdataOpenRegex = /<!\[CDATA\[/g; parserContext.doctypeRegex = /<!DOCTYPE/g; parserContext.xmlDeclRegex = /<\?xml/g; parserContext.stopNodeRegexCache = {}; parserContext.simpleStopNodes = new Set(); parserContext.pathStopNodes = new Set(); if (mergedOptions.stopNodes) { const stopNodesArray = Array.isArray(mergedOptions.stopNodes) ? mergedOptions.stopNodes : [mergedOptions.stopNodes]; stopNodesArray.forEach((node) => { if (typeof node === "string") { if (node.includes(".")) { parserContext.pathStopNodes.add(node); } else { parserContext.simpleStopNodes.add(node); } } }); } } function resetParserState(parserContext) { parserContext.streamingBuffer = ""; parserContext._activelyStreaming = false; parserContext.accumulator = []; parserContext.currentPointer = null; parserContext.tagStack = []; parserContext.parsingIndex = 0; parserContext.incompleteStructureState = null; parserContext.reparsedSegmentContext = null; parserContext.streamingBufferBeforeClear = ""; parserContext._originalBufferHadContent = false; parserContext._lastClearedIncompleteStateWasSpecial = false; parserContext._rootDeterminationBuffer = ""; parserContext._plainTextAccumulator = ""; parserContext._treatAsPlainText = false; parserContext._initialSegmentTypeDecided = false; // Renamed from _rootTagDecisionMade } //# sourceMappingURL=parser-setup.js.map