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
JavaScript
;
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