diff --git a/dist/index.js b/dist/index.js index cc43cf5..df7155f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -73720,7 +73720,7 @@ function firstString() { } } -;// CONCATENATED MODULE: ./node_modules/.pnpm/detsys-ts@https+++codeload.github.com+DeterminateSystems+detsys-ts+tar.gz+d010809b65687_d6cd3f03fdb722c8176a4fcbb726b76e/node_modules/detsys-ts/dist/chunk-DQk6qfdC.mjs +;// CONCATENATED MODULE: ./node_modules/.pnpm/detsys-ts@https+++codeload.github.com+DeterminateSystems+detsys-ts+tar.gz+f2d94964c763a_9de5226084d990375a7652083d9a009e/node_modules/detsys-ts/dist/chunk-DQk6qfdC.mjs //#region \0rolldown/runtime.js var __defProp = Object.defineProperty; var __exportAll = (all, no_symbols) => { @@ -95277,7 +95277,7 @@ function convertHttpClient(requestPolicyClient) { //# sourceMappingURL=index.js.map -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js const EOL = "\n"; /** @@ -95413,7 +95413,7 @@ function replaceEntitiesValue(textValue, options) { return textValue; } -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/ignoreAttributes.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/ignoreAttributes.js function getIgnoreAttributesFn(ignoreAttributes) { if (typeof ignoreAttributes === 'function') { return ignoreAttributes @@ -95432,7 +95432,7 @@ function getIgnoreAttributesFn(ignoreAttributes) { } return () => false } -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js //parse Empty Node as self closing node @@ -95719,7 +95719,7 @@ function isAttribute(name /*, options*/) { } -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/util.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/util.js const nameStartChar = ':A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD'; @@ -95788,7 +95788,7 @@ function getValue(v) { // const fakeCall = function(a) {return a;}; // const fakeCallNoReturn = function() {}; -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/validator.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/validator.js @@ -96215,7 +96215,7 @@ function getPositionFromMatch(match) { return match.startIndex + match[1].length; } -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/fxp.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/fxp.js @@ -96226,55 +96226,94 @@ const XMLValidator = { validate: validate } -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js - +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js const OptionsBuilder_defaultOptions = { - preserveOrder: false, - attributeNamePrefix: '@_', - attributesGroupName: false, - textNodeName: '#text', - ignoreAttributes: true, - removeNSPrefix: false, // remove NS from tag name or attribute name if true - allowBooleanAttributes: false, //a tag can have attributes without any value - //ignoreRootElement : false, - parseTagValue: true, - parseAttributeValue: false, - trimValues: true, //Trim string values of tag and attributes - cdataPropName: false, - numberParseOptions: { - hex: true, - leadingZeros: true, - eNotation: true - }, - tagValueProcessor: function(tagName, val) { - return val; - }, - attributeValueProcessor: function(attrName, val) { - return val; - }, - stopNodes: [], //nested tags will not be parsed even for errors - alwaysCreateTextNode: false, - isArray: () => false, - commentPropName: false, - unpairedTags: [], - processEntities: true, - htmlEntities: false, - ignoreDeclaration: false, - ignorePiTags: false, - transformTagName: false, - transformAttributeName: false, - updateTag: function(tagName, jPath, attrs){ - return tagName - }, - // skipEmptyListItem: false - captureMetaData: false, -}; - -const buildOptions = function(options) { - return Object.assign({}, OptionsBuilder_defaultOptions, options); + preserveOrder: false, + attributeNamePrefix: '@_', + attributesGroupName: false, + textNodeName: '#text', + ignoreAttributes: true, + removeNSPrefix: false, // remove NS from tag name or attribute name if true + allowBooleanAttributes: false, //a tag can have attributes without any value + //ignoreRootElement : false, + parseTagValue: true, + parseAttributeValue: false, + trimValues: true, //Trim string values of tag and attributes + cdataPropName: false, + numberParseOptions: { + hex: true, + leadingZeros: true, + eNotation: true + }, + tagValueProcessor: function (tagName, val) { + return val; + }, + attributeValueProcessor: function (attrName, val) { + return val; + }, + stopNodes: [], //nested tags will not be parsed even for errors + alwaysCreateTextNode: false, + isArray: () => false, + commentPropName: false, + unpairedTags: [], + processEntities: true, + htmlEntities: false, + ignoreDeclaration: false, + ignorePiTags: false, + transformTagName: false, + transformAttributeName: false, + updateTag: function (tagName, jPath, attrs) { + return tagName + }, + // skipEmptyListItem: false + captureMetaData: false, }; -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/xmlparser/xmlNode.js +/** + * Normalizes processEntities option for backward compatibility + * @param {boolean|object} value + * @returns {object} Always returns normalized object + */ +function normalizeProcessEntities(value) { + // Boolean backward compatibility + if (typeof value === 'boolean') { + return { + enabled: value, // true or false + maxEntitySize: 10000, + maxExpansionDepth: 10, + maxTotalExpansions: 1000, + maxExpandedLength: 100000, + allowedTags: null, + tagFilter: null + }; + } + + // Object config - merge with defaults + if (typeof value === 'object' && value !== null) { + return { + enabled: value.enabled !== false, // default true if not specified + maxEntitySize: value.maxEntitySize ?? 10000, + maxExpansionDepth: value.maxExpansionDepth ?? 10, + maxTotalExpansions: value.maxTotalExpansions ?? 1000, + maxExpandedLength: value.maxExpandedLength ?? 100000, + allowedTags: value.allowedTags ?? null, + tagFilter: value.tagFilter ?? null + }; + } + + // Default to enabled with limits + return normalizeProcessEntities(true); +} + +const buildOptions = function (options) { + const built = Object.assign({}, OptionsBuilder_defaultOptions, options); + + // Always normalize processEntities for backward compatibility and validation + built.processEntities = normalizeProcessEntities(built.processEntities); + //console.debug(built.processEntities) + return built; +}; +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/xmlparser/xmlNode.js let METADATA_SYMBOL; @@ -96316,86 +96355,86 @@ class XmlNode{ } } -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js -class DocTypeReader{ - constructor(processEntities){ - this.suppressValidationErr = !processEntities; +class DocTypeReader { + constructor(options) { + this.suppressValidationErr = !options; + this.options = options; } - - readDocType(xmlData, i){ - + + readDocType(xmlData, i) { + const entities = {}; - if( xmlData[i + 3] === 'O' && + if (xmlData[i + 3] === 'O' && xmlData[i + 4] === 'C' && xmlData[i + 5] === 'T' && xmlData[i + 6] === 'Y' && xmlData[i + 7] === 'P' && - xmlData[i + 8] === 'E') - { - i = i+9; + xmlData[i + 8] === 'E') { + i = i + 9; let angleBracketsCount = 1; let hasBody = false, comment = false; let exp = ""; - for(;i') { //Read tag content - if(comment){ - if( xmlData[i - 1] === "-" && xmlData[i - 2] === "-"){ + if (comment) { + if (xmlData[i - 1] === "-" && xmlData[i - 2] === "-") { comment = false; angleBracketsCount--; } - }else{ + } else { angleBracketsCount--; } if (angleBracketsCount === 0) { - break; + break; } - }else if( xmlData[i] === '['){ + } else if (xmlData[i] === '[') { hasBody = true; - }else{ + } else { exp += xmlData[i]; } } - if(angleBracketsCount !== 0){ + if (angleBracketsCount !== 0) { throw new Error(`Unclosed DOCTYPE`); } - }else{ + } else { throw new Error(`Invalid Tag instead of DOCTYPE`); } - return {entities, i}; + return { entities, i }; } - readEntityExp(xmlData, i) { + readEntityExp(xmlData, i) { //External entities are not supported // @@ -96420,10 +96459,10 @@ class DocTypeReader{ i = skipWhitespace(xmlData, i); // Check for unsupported constructs (external entities or parameter entities) - if(!this.suppressValidationErr){ + if (!this.suppressValidationErr) { if (xmlData.substring(i, i + 6).toUpperCase() === "SYSTEM") { throw new Error("External entities are not supported"); - }else if (xmlData[i] === "%") { + } else if (xmlData[i] === "%") { throw new Error("Parameter entities are not supported"); } } @@ -96431,8 +96470,18 @@ class DocTypeReader{ // Read entity value (internal entity) let entityValue = ""; [i, entityValue] = this.readIdentifierVal(xmlData, i, "entity"); + + // Validate entity size + if (this.options.enabled !== false && + this.options.maxEntitySize && + entityValue.length > this.options.maxEntitySize) { + throw new Error( + `Entity "${entityName}" size (${entityValue.length}) exceeds maximum allowed size (${this.options.maxEntitySize})` + ); + } + i--; - return [entityName, entityValue, i ]; + return [entityName, entityValue, i]; } readNotationExp(xmlData, i) { @@ -96465,25 +96514,25 @@ class DocTypeReader{ let systemIdentifier = null; if (identifierType === "PUBLIC") { - [i, publicIdentifier ] = this.readIdentifierVal(xmlData, i, "publicIdentifier"); + [i, publicIdentifier] = this.readIdentifierVal(xmlData, i, "publicIdentifier"); // Skip whitespace after public identifier i = skipWhitespace(xmlData, i); // Optionally read system identifier if (xmlData[i] === '"' || xmlData[i] === "'") { - [i, systemIdentifier ] = this.readIdentifierVal(xmlData, i,"systemIdentifier"); + [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, "systemIdentifier"); } } else if (identifierType === "SYSTEM") { // Read system identifier (mandatory for SYSTEM) - [i, systemIdentifier ] = this.readIdentifierVal(xmlData, i, "systemIdentifier"); + [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, "systemIdentifier"); if (!this.suppressValidationErr && !systemIdentifier) { throw new Error("Missing mandatory system identifier for SYSTEM notation"); } } - - return {notationName, publicIdentifier, systemIdentifier, index: --i}; + + return { notationName, publicIdentifier, systemIdentifier, index: --i }; } readIdentifierVal(xmlData, i, type) { @@ -96512,7 +96561,7 @@ class DocTypeReader{ // // // - + // Skip leading whitespace after { -function hasSeq(data, seq,i){ - for(let j=0;j]*)>(\\s*"+cdataRegx+")*([^<]+)?","g"); //const tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g"); -class OrderedObjParser{ - constructor(options){ +class OrderedObjParser { + constructor(options) { this.options = options; this.currentNode = null; this.tagsNodeStack = []; this.docTypeEntities = {}; this.lastEntities = { - "apos" : { regex: /&(apos|#39|#x27);/g, val : "'"}, - "gt" : { regex: /&(gt|#62|#x3E);/g, val : ">"}, - "lt" : { regex: /&(lt|#60|#x3C);/g, val : "<"}, - "quot" : { regex: /&(quot|#34|#x22);/g, val : "\""}, + "apos": { regex: /&(apos|#39|#x27);/g, val: "'" }, + "gt": { regex: /&(gt|#62|#x3E);/g, val: ">" }, + "lt": { regex: /&(lt|#60|#x3C);/g, val: "<" }, + "quot": { regex: /&(quot|#34|#x22);/g, val: "\"" }, }; - this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : "&"}; + this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: "&" }; this.htmlEntities = { "space": { regex: /&(nbsp|#160);/g, val: " " }, // "lt" : { regex: /&(lt|#60);/g, val: "<" }, @@ -96866,15 +96914,15 @@ class OrderedObjParser{ // "amp" : { regex: /&(amp|#38);/g, val: "&" }, // "quot" : { regex: /&(quot|#34);/g, val: "\"" }, // "apos" : { regex: /&(apos|#39);/g, val: "'" }, - "cent" : { regex: /&(cent|#162);/g, val: "¢" }, - "pound" : { regex: /&(pound|#163);/g, val: "£" }, - "yen" : { regex: /&(yen|#165);/g, val: "¥" }, - "euro" : { regex: /&(euro|#8364);/g, val: "€" }, - "copyright" : { regex: /&(copy|#169);/g, val: "©" }, - "reg" : { regex: /&(reg|#174);/g, val: "®" }, - "inr" : { regex: /&(inr|#8377);/g, val: "₹" }, - "num_dec": { regex: /&#([0-9]{1,7});/g, val : (_, str) => fromCodePoint(str, 10, "&#") }, - "num_hex": { regex: /&#x([0-9a-fA-F]{1,6});/g, val : (_, str) => fromCodePoint(str, 16, "&#x") }, + "cent": { regex: /&(cent|#162);/g, val: "¢" }, + "pound": { regex: /&(pound|#163);/g, val: "£" }, + "yen": { regex: /&(yen|#165);/g, val: "¥" }, + "euro": { regex: /&(euro|#8364);/g, val: "€" }, + "copyright": { regex: /&(copy|#169);/g, val: "©" }, + "reg": { regex: /&(reg|#174);/g, val: "®" }, + "inr": { regex: /&(inr|#8377);/g, val: "₹" }, + "num_dec": { regex: /&#([0-9]{1,7});/g, val: (_, str) => fromCodePoint(str, 10, "&#") }, + "num_hex": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => fromCodePoint(str, 16, "&#x") }, }; this.addExternalEntities = addExternalEntities; this.parseXml = parseXml; @@ -96887,16 +96935,18 @@ class OrderedObjParser{ this.saveTextToParentTag = saveTextToParentTag; this.addChild = addChild; this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes) + this.entityExpansionCount = 0; + this.currentExpandedLength = 0; - if(this.options.stopNodes && this.options.stopNodes.length > 0){ + if (this.options.stopNodes && this.options.stopNodes.length > 0) { this.stopNodesExact = new Set(); this.stopNodesWildcard = new Set(); - for(let i = 0; i < this.options.stopNodes.length; i++){ + for (let i = 0; i < this.options.stopNodes.length; i++) { const stopNodeExp = this.options.stopNodes[i]; - if(typeof stopNodeExp !== 'string') continue; - if(stopNodeExp.startsWith("*.")){ + if (typeof stopNodeExp !== 'string') continue; + if (stopNodeExp.startsWith("*.")) { this.stopNodesWildcard.add(stopNodeExp.substring(2)); - }else{ + } else { this.stopNodesExact.add(stopNodeExp); } } @@ -96905,14 +96955,14 @@ class OrderedObjParser{ } -function addExternalEntities(externalEntities){ +function addExternalEntities(externalEntities) { const entKeys = Object.keys(externalEntities); for (let i = 0; i < entKeys.length; i++) { const ent = entKeys[i]; const escaped = ent.replace(/[.\-+*:]/g, '\\.'); this.lastEntities[ent] = { - regex: new RegExp("&"+escaped+";","g"), - val : externalEntities[ent] + regex: new RegExp("&" + escaped + ";", "g"), + val: externalEntities[ent] } } } @@ -96931,23 +96981,23 @@ function parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, if (this.options.trimValues && !dontTrim) { val = val.trim(); } - if(val.length > 0){ - if(!escapeEntities) val = this.replaceEntitiesValue(val); - + if (val.length > 0) { + if (!escapeEntities) val = this.replaceEntitiesValue(val, tagName, jPath); + const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode); - if(newval === null || newval === undefined){ + if (newval === null || newval === undefined) { //don't parse return val; - }else if(typeof newval !== typeof val || newval !== val){ + } else if (typeof newval !== typeof val || newval !== val) { //overwrite return newval; - }else if(this.options.trimValues){ + } else if (this.options.trimValues) { return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions); - }else{ + } else { const trimmedVal = val.trim(); - if(trimmedVal === val){ + if (trimmedVal === val) { return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions); - }else{ + } else { return val; } } @@ -96973,7 +97023,7 @@ function resolveNameSpace(tagname) { //const attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm"); const attrsRegx = new RegExp('([^\\s=]+)\\s*(=\\s*([\'"])([\\s\\S]*?)\\3)?', 'gm'); -function buildAttributesMap(attrStr, jPath) { +function buildAttributesMap(attrStr, jPath, tagName) { if (this.options.ignoreAttributes !== true && typeof attrStr === 'string') { // attrStr = attrStr.replace(/\r?\n/g, ' '); //attrStr = attrStr || attrStr.trim(); @@ -96992,20 +97042,20 @@ function buildAttributesMap(attrStr, jPath) { if (this.options.transformAttributeName) { aName = this.options.transformAttributeName(aName); } - if(aName === "__proto__") aName = "#__proto__"; + if (aName === "__proto__") aName = "#__proto__"; if (oldVal !== undefined) { if (this.options.trimValues) { oldVal = oldVal.trim(); } - oldVal = this.replaceEntitiesValue(oldVal); + oldVal = this.replaceEntitiesValue(oldVal, tagName, jPath); const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath); - if(newVal === null || newVal === undefined){ + if (newVal === null || newVal === undefined) { //don't parse attrs[aName] = oldVal; - }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){ + } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) { //overwrite attrs[aName] = newVal; - }else{ + } else { //parse attrs[aName] = parseValue( oldVal, @@ -97030,47 +97080,52 @@ function buildAttributesMap(attrStr, jPath) { } } -const parseXml = function(xmlData) { +const parseXml = function (xmlData) { xmlData = xmlData.replace(/\r\n?/g, "\n"); //TODO: remove this line const xmlObj = new XmlNode('!xml'); let currentNode = xmlObj; let textData = ""; let jPath = ""; + + // Reset entity expansion counters for this document + this.entityExpansionCount = 0; + this.currentExpandedLength = 0; + const docTypeReader = new DocTypeReader(this.options.processEntities); - for(let i=0; i< xmlData.length; i++){//for each char in XML data + for (let i = 0; i < xmlData.length; i++) {//for each char in XML data const ch = xmlData[i]; - if(ch === '<'){ + if (ch === '<') { // const nextIndex = i+1; // const _2ndChar = xmlData[nextIndex]; - if( xmlData[i+1] === '/') {//Closing Tag + if (xmlData[i + 1] === '/') {//Closing Tag const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed.") - let tagName = xmlData.substring(i+2,closeIndex).trim(); + let tagName = xmlData.substring(i + 2, closeIndex).trim(); - if(this.options.removeNSPrefix){ + if (this.options.removeNSPrefix) { const colonIndex = tagName.indexOf(":"); - if(colonIndex !== -1){ - tagName = tagName.substr(colonIndex+1); + if (colonIndex !== -1) { + tagName = tagName.substr(colonIndex + 1); } } - if(this.options.transformTagName) { + if (this.options.transformTagName) { tagName = this.options.transformTagName(tagName); } - if(currentNode){ + if (currentNode) { textData = this.saveTextToParentTag(textData, currentNode, jPath); } //check if last tag of nested tag was unpaired tag - const lastTagName = jPath.substring(jPath.lastIndexOf(".")+1); - if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){ + const lastTagName = jPath.substring(jPath.lastIndexOf(".") + 1); + if (tagName && this.options.unpairedTags.indexOf(tagName) !== -1) { throw new Error(`Unpaired tag can not be used as closing tag: `); } let propIndex = 0 - if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){ - propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1) + if (lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1) { + propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.') - 1) this.tagsNodeStack.pop(); - }else{ + } else { propIndex = jPath.lastIndexOf("."); } jPath = jPath.substring(0, propIndex); @@ -97078,61 +97133,61 @@ const parseXml = function(xmlData) { currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope textData = ""; i = closeIndex; - } else if( xmlData[i+1] === '?') { + } else if (xmlData[i + 1] === '?') { - let tagData = readTagExp(xmlData,i, false, "?>"); - if(!tagData) throw new Error("Pi Tag is not closed."); + let tagData = readTagExp(xmlData, i, false, "?>"); + if (!tagData) throw new Error("Pi Tag is not closed."); textData = this.saveTextToParentTag(textData, currentNode, jPath); - if( (this.options.ignoreDeclaration && tagData.tagName === "?xml") || this.options.ignorePiTags){ + if ((this.options.ignoreDeclaration && tagData.tagName === "?xml") || this.options.ignorePiTags) { //do nothing - }else{ - + } else { + const childNode = new XmlNode(tagData.tagName); childNode.add(this.options.textNodeName, ""); - - if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){ - childNode[":@"] = this.buildAttributesMap(tagData.tagExp, jPath); + + if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) { + childNode[":@"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName); } this.addChild(currentNode, childNode, jPath, i); } i = tagData.closeIndex + 1; - } else if(xmlData.substr(i + 1, 3) === '!--') { - const endIndex = findClosingIndex(xmlData, "-->", i+4, "Comment is not closed.") - if(this.options.commentPropName){ + } else if (xmlData.substr(i + 1, 3) === '!--') { + const endIndex = findClosingIndex(xmlData, "-->", i + 4, "Comment is not closed.") + if (this.options.commentPropName) { const comment = xmlData.substring(i + 4, endIndex - 2); textData = this.saveTextToParentTag(textData, currentNode, jPath); - currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]); + currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]); } i = endIndex; - } else if( xmlData.substr(i + 1, 2) === '!D') { + } else if (xmlData.substr(i + 1, 2) === '!D') { const result = docTypeReader.readDocType(xmlData, i); this.docTypeEntities = result.entities; i = result.i; - }else if(xmlData.substr(i + 1, 2) === '![') { + } else if (xmlData.substr(i + 1, 2) === '![') { const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2; - const tagExp = xmlData.substring(i + 9,closeIndex); + const tagExp = xmlData.substring(i + 9, closeIndex); textData = this.saveTextToParentTag(textData, currentNode, jPath); let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true); - if(val == undefined) val = ""; + if (val == undefined) val = ""; //cdata should be set even if it is 0 length string - if(this.options.cdataPropName){ - currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]); - }else{ + if (this.options.cdataPropName) { + currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]); + } else { currentNode.add(this.options.textNodeName, val); } - + i = closeIndex + 2; - }else {//Opening tag - let result = readTagExp(xmlData,i, this.options.removeNSPrefix); - let tagName= result.tagName; + } else {//Opening tag + let result = readTagExp(xmlData, i, this.options.removeNSPrefix); + let tagName = result.tagName; const rawTagName = result.rawTagName; let tagExp = result.tagExp; let attrExpPresent = result.attrExpPresent; @@ -97141,15 +97196,15 @@ const parseXml = function(xmlData) { if (this.options.transformTagName) { //console.log(tagExp, tagName) const newTagName = this.options.transformTagName(tagName); - if(tagExp === tagName) { + if (tagExp === tagName) { tagExp = newTagName } tagName = newTagName; } - + //save text as child node if (currentNode && textData) { - if(currentNode.tagname !== '!xml'){ + if (currentNode.tagname !== '!xml') { //when nested tag is found textData = this.saveTextToParentTag(textData, currentNode, jPath, false); } @@ -97157,88 +97212,87 @@ const parseXml = function(xmlData) { //check if last tag was unpaired tag const lastTag = currentNode; - if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){ + if (lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1) { currentNode = this.tagsNodeStack.pop(); jPath = jPath.substring(0, jPath.lastIndexOf(".")); } - if(tagName !== xmlObj.tagname){ + if (tagName !== xmlObj.tagname) { jPath += jPath ? "." + tagName : tagName; } const startIndex = i; if (this.isItStopNode(this.stopNodesExact, this.stopNodesWildcard, jPath, tagName)) { let tagContent = ""; //self-closing tag - if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){ - if(tagName[tagName.length - 1] === "/"){ //remove trailing '/' + if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) { + if (tagName[tagName.length - 1] === "/") { //remove trailing '/' tagName = tagName.substr(0, tagName.length - 1); jPath = jPath.substr(0, jPath.length - 1); tagExp = tagName; - }else{ + } else { tagExp = tagExp.substr(0, tagExp.length - 1); } i = result.closeIndex; } //unpaired tag - else if(this.options.unpairedTags.indexOf(tagName) !== -1){ - + else if (this.options.unpairedTags.indexOf(tagName) !== -1) { + i = result.closeIndex; } //normal tag - else{ + else { //read until closing tag is found const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1); - if(!result) throw new Error(`Unexpected end of ${rawTagName}`); + if (!result) throw new Error(`Unexpected end of ${rawTagName}`); i = result.i; tagContent = result.tagContent; } const childNode = new XmlNode(tagName); - if(tagName !== tagExp && attrExpPresent){ - childNode[":@"] = this.buildAttributesMap(tagExp, jPath - ); + if (tagName !== tagExp && attrExpPresent) { + childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); } - if(tagContent) { + if (tagContent) { tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true); } - + jPath = jPath.substr(0, jPath.lastIndexOf(".")); childNode.add(this.options.textNodeName, tagContent); - + this.addChild(currentNode, childNode, jPath, startIndex); - }else{ - //selfClosing tag - if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){ - if(tagName[tagName.length - 1] === "/"){ //remove trailing '/' + } else { + //selfClosing tag + if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) { + if (tagName[tagName.length - 1] === "/") { //remove trailing '/' tagName = tagName.substr(0, tagName.length - 1); jPath = jPath.substr(0, jPath.length - 1); tagExp = tagName; - }else{ + } else { tagExp = tagExp.substr(0, tagExp.length - 1); } - - if(this.options.transformTagName) { + + if (this.options.transformTagName) { const newTagName = this.options.transformTagName(tagName); - if(tagExp === tagName) { + if (tagExp === tagName) { tagExp = newTagName } tagName = newTagName; } const childNode = new XmlNode(tagName); - if(tagName !== tagExp && attrExpPresent){ - childNode[":@"] = this.buildAttributesMap(tagExp, jPath); + if (tagName !== tagExp && attrExpPresent) { + childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); } this.addChild(currentNode, childNode, jPath, startIndex); jPath = jPath.substr(0, jPath.lastIndexOf(".")); } - //opening tag - else{ - const childNode = new XmlNode( tagName); + //opening tag + else { + const childNode = new XmlNode(tagName); this.tagsNodeStack.push(currentNode); - - if(tagName !== tagExp && attrExpPresent){ - childNode[":@"] = this.buildAttributesMap(tagExp, jPath); + + if (tagName !== tagExp && attrExpPresent) { + childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); } this.addChild(currentNode, childNode, jPath, startIndex); currentNode = childNode; @@ -97247,52 +97301,113 @@ const parseXml = function(xmlData) { i = closeIndex; } } - }else{ + } else { textData += xmlData[i]; } } return xmlObj.child; } -function addChild(currentNode, childNode, jPath, startIndex){ +function addChild(currentNode, childNode, jPath, startIndex) { // unset startIndex if not requested if (!this.options.captureMetaData) startIndex = undefined; const result = this.options.updateTag(childNode.tagname, jPath, childNode[":@"]) - if(result === false){ + if (result === false) { //do nothing - } else if(typeof result === "string"){ + } else if (typeof result === "string") { childNode.tagname = result currentNode.addChild(childNode, startIndex); - }else{ + } else { currentNode.addChild(childNode, startIndex); } } -const OrderedObjParser_replaceEntitiesValue = function(val){ +const OrderedObjParser_replaceEntitiesValue = function (val, tagName, jPath) { + // Performance optimization: Early return if no entities to replace + if (val.indexOf('&') === -1) { + return val; + } + + const entityConfig = this.options.processEntities; - if(this.options.processEntities){ - for(let entityName in this.docTypeEntities){ - const entity = this.docTypeEntities[entityName]; - val = val.replace( entity.regx, entity.val); + if (!entityConfig.enabled) { + return val; + } + + // Check tag-specific filtering + if (entityConfig.allowedTags) { + if (!entityConfig.allowedTags.includes(tagName)) { + return val; // Skip entity replacement for current tag as not set } - for(let entityName in this.lastEntities){ - const entity = this.lastEntities[entityName]; - val = val.replace( entity.regex, entity.val); + } + + if (entityConfig.tagFilter) { + if (!entityConfig.tagFilter(tagName, jPath)) { + return val; // Skip based on custom filter } - if(this.options.htmlEntities){ - for(let entityName in this.htmlEntities){ - const entity = this.htmlEntities[entityName]; - val = val.replace( entity.regex, entity.val); + } + + // Replace DOCTYPE entities + for (let entityName in this.docTypeEntities) { + const entity = this.docTypeEntities[entityName]; + const matches = val.match(entity.regx); + + if (matches) { + // Track expansions + this.entityExpansionCount += matches.length; + + // Check expansion limit + if (entityConfig.maxTotalExpansions && + this.entityExpansionCount > entityConfig.maxTotalExpansions) { + throw new Error( + `Entity expansion limit exceeded: ${this.entityExpansionCount} > ${entityConfig.maxTotalExpansions}` + ); + } + + // Store length before replacement + const lengthBefore = val.length; + val = val.replace(entity.regx, entity.val); + + // Check expanded length immediately after replacement + if (entityConfig.maxExpandedLength) { + this.currentExpandedLength += (val.length - lengthBefore); + + if (this.currentExpandedLength > entityConfig.maxExpandedLength) { + throw new Error( + `Total expanded content size exceeded: ${this.currentExpandedLength} > ${entityConfig.maxExpandedLength}` + ); + } } } - val = val.replace( this.ampEntity.regex, this.ampEntity.val); } + if (val.indexOf('&') === -1) return val; // Early exit + + // Replace standard entities + for (let entityName in this.lastEntities) { + const entity = this.lastEntities[entityName]; + val = val.replace(entity.regex, entity.val); + } + if (val.indexOf('&') === -1) return val; // Early exit + + // Replace HTML entities if enabled + if (this.options.htmlEntities) { + for (let entityName in this.htmlEntities) { + const entity = this.htmlEntities[entityName]; + val = val.replace(entity.regex, entity.val); + } + } + + // Replace ampersand entity last + val = val.replace(this.ampEntity.regex, this.ampEntity.val); + return val; } + + function saveTextToParentTag(textData, currentNode, jPath, isLeafNode) { if (textData) { //store previously collected data as textNode - if(isLeafNode === undefined) isLeafNode = currentNode.child.length === 0 - + if (isLeafNode === undefined) isLeafNode = currentNode.child.length === 0 + textData = this.parseTextData(textData, currentNode.tagname, jPath, @@ -97314,9 +97429,9 @@ function saveTextToParentTag(textData, currentNode, jPath, isLeafNode) { * @param {string} jPath * @param {string} currentTagName */ -function isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName){ - if(stopNodesWildcard && stopNodesWildcard.has(currentTagName)) return true; - if(stopNodesExact && stopNodesExact.has(jPath)) return true; +function isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName) { + if (stopNodesWildcard && stopNodesWildcard.has(currentTagName)) return true; + if (stopNodesExact && stopNodesExact.has(jPath)) return true; return false; } @@ -97326,24 +97441,24 @@ function isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName){ * @param {number} i starting index * @returns */ -function tagExpWithClosingIndex(xmlData, i, closingChar = ">"){ +function tagExpWithClosingIndex(xmlData, i, closingChar = ">") { let attrBoundary; let tagExp = ""; for (let index = i; index < xmlData.length; index++) { let ch = xmlData[index]; if (attrBoundary) { - if (ch === attrBoundary) attrBoundary = "";//reset + if (ch === attrBoundary) attrBoundary = "";//reset } else if (ch === '"' || ch === "'") { - attrBoundary = ch; + attrBoundary = ch; } else if (ch === closingChar[0]) { - if(closingChar[1]){ - if(xmlData[index + 1] === closingChar[1]){ + if (closingChar[1]) { + if (xmlData[index + 1] === closingChar[1]) { return { data: tagExp, index: index } } - }else{ + } else { return { data: tagExp, index: index @@ -97356,33 +97471,33 @@ function tagExpWithClosingIndex(xmlData, i, closingChar = ">"){ } } -function findClosingIndex(xmlData, str, i, errMsg){ +function findClosingIndex(xmlData, str, i, errMsg) { const closingIndex = xmlData.indexOf(str, i); - if(closingIndex === -1){ + if (closingIndex === -1) { throw new Error(errMsg) - }else{ + } else { return closingIndex + str.length - 1; } } -function readTagExp(xmlData,i, removeNSPrefix, closingChar = ">"){ - const result = tagExpWithClosingIndex(xmlData, i+1, closingChar); - if(!result) return; +function readTagExp(xmlData, i, removeNSPrefix, closingChar = ">") { + const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar); + if (!result) return; let tagExp = result.data; const closeIndex = result.index; const separatorIndex = tagExp.search(/\s/); let tagName = tagExp; let attrExpPresent = true; - if(separatorIndex !== -1){//separate tag name and attributes expression + if (separatorIndex !== -1) {//separate tag name and attributes expression tagName = tagExp.substring(0, separatorIndex); tagExp = tagExp.substring(separatorIndex + 1).trimStart(); } const rawTagName = tagName; - if(removeNSPrefix){ + if (removeNSPrefix) { const colonIndex = tagName.indexOf(":"); - if(colonIndex !== -1){ - tagName = tagName.substr(colonIndex+1); + if (colonIndex !== -1) { + tagName = tagName.substr(colonIndex + 1); attrExpPresent = tagName !== result.data.substr(colonIndex + 1); } } @@ -97401,47 +97516,47 @@ function readTagExp(xmlData,i, removeNSPrefix, closingChar = ">"){ * @param {string} tagName * @param {number} i */ -function readStopNodeData(xmlData, tagName, i){ +function readStopNodeData(xmlData, tagName, i) { const startIndex = i; // Starting at 1 since we already have an open tag let openTagCount = 1; for (; i < xmlData.length; i++) { - if( xmlData[i] === "<"){ - if (xmlData[i+1] === "/") {//close tag - const closeIndex = findClosingIndex(xmlData, ">", i, `${tagName} is not closed`); - let closeTagName = xmlData.substring(i+2,closeIndex).trim(); - if(closeTagName === tagName){ - openTagCount--; - if (openTagCount === 0) { - return { - tagContent: xmlData.substring(startIndex, i), - i : closeIndex - } + if (xmlData[i] === "<") { + if (xmlData[i + 1] === "/") {//close tag + const closeIndex = findClosingIndex(xmlData, ">", i, `${tagName} is not closed`); + let closeTagName = xmlData.substring(i + 2, closeIndex).trim(); + if (closeTagName === tagName) { + openTagCount--; + if (openTagCount === 0) { + return { + tagContent: xmlData.substring(startIndex, i), + i: closeIndex } } - i=closeIndex; - } else if(xmlData[i+1] === '?') { - const closeIndex = findClosingIndex(xmlData, "?>", i+1, "StopNode is not closed.") - i=closeIndex; - } else if(xmlData.substr(i + 1, 3) === '!--') { - const closeIndex = findClosingIndex(xmlData, "-->", i+3, "StopNode is not closed.") - i=closeIndex; - } else if(xmlData.substr(i + 1, 2) === '![') { - const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2; - i=closeIndex; - } else { - const tagData = readTagExp(xmlData, i, '>') + } + i = closeIndex; + } else if (xmlData[i + 1] === '?') { + const closeIndex = findClosingIndex(xmlData, "?>", i + 1, "StopNode is not closed.") + i = closeIndex; + } else if (xmlData.substr(i + 1, 3) === '!--') { + const closeIndex = findClosingIndex(xmlData, "-->", i + 3, "StopNode is not closed.") + i = closeIndex; + } else if (xmlData.substr(i + 1, 2) === '![') { + const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2; + i = closeIndex; + } else { + const tagData = readTagExp(xmlData, i, '>') - if (tagData) { - const openTagName = tagData && tagData.tagName; - if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== "/") { - openTagCount++; - } - i=tagData.closeIndex; + if (tagData) { + const openTagName = tagData && tagData.tagName; + if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== "/") { + openTagCount++; } + i = tagData.closeIndex; } } + } }//end for loop } @@ -97449,8 +97564,8 @@ function parseValue(val, shouldParse, options) { if (shouldParse && typeof val === 'string') { //console.log(options) const newval = val.trim(); - if(newval === 'true' ) return true; - else if(newval === 'false' ) return false; + if (newval === 'true') return true; + else if (newval === 'false') return false; else return toNumber(val, options); } else { if (isExist(val)) { @@ -97461,16 +97576,16 @@ function parseValue(val, shouldParse, options) { } } -function fromCodePoint(str, base, prefix){ +function fromCodePoint(str, base, prefix) { const codePoint = Number.parseInt(str, base); if (codePoint >= 0 && codePoint <= 0x10FFFF) { - return String.fromCodePoint(codePoint); + return String.fromCodePoint(codePoint); } else { - return prefix +str + ";"; + return prefix + str + ";"; } } -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/xmlparser/node2json.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/xmlparser/node2json.js @@ -97591,7 +97706,7 @@ function isLeafTag(obj, options){ return false; } -;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.5/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js +;// CONCATENATED MODULE: ./node_modules/.pnpm/fast-xml-parser@5.3.6/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js @@ -128614,7 +128729,7 @@ function saveCacheV2(paths_1, key_1, options_1) { const external_node_child_process_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:child_process"); ;// CONCATENATED MODULE: external "node:path" const external_node_path_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:path"); -;// CONCATENATED MODULE: ./node_modules/.pnpm/detsys-ts@https+++codeload.github.com+DeterminateSystems+detsys-ts+tar.gz+d010809b65687_d6cd3f03fdb722c8176a4fcbb726b76e/node_modules/detsys-ts/dist/index.mjs +;// CONCATENATED MODULE: ./node_modules/.pnpm/detsys-ts@https+++codeload.github.com+DeterminateSystems+detsys-ts+tar.gz+f2d94964c763a_9de5226084d990375a7652083d9a009e/node_modules/detsys-ts/dist/index.mjs diff --git a/flake.lock b/flake.lock index 385433a..05fbc14 100644 --- a/flake.lock +++ b/flake.lock @@ -16,12 +16,12 @@ }, "nixpkgs": { "locked": { - "lastModified": 1770562336, - "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", - "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", - "revCount": 942779, + "lastModified": 1771008912, + "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=", + "rev": "a82ccc39b39b621151d6732718e3e250109076fa", + "revCount": 945868, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.942779%2Brev-d6c71932130818840fc8fe9509cf50be8c64634f/019c3fb4-003d-710c-9b72-1d2bb1b28de3/source.tar.gz" + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.945868%2Brev-a82ccc39b39b621151d6732718e3e250109076fa/019c5b2e-592f-7d17-b9ce-868f25acfeca/source.tar.gz" }, "original": { "type": "tarball", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70b4ace..aa8afd7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,7 +18,7 @@ importers: version: 6.0.1 detsys-ts: specifier: github:DeterminateSystems/detsys-ts - version: https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/d010809b65687084386dd08928b4601be71aa4c0 + version: https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/f2d94964c763ad623d33d7dd59ba1474c79b8bbf got: specifier: ^14.6.6 version: 14.6.6 @@ -1660,10 +1660,10 @@ packages: } engines: { node: ">=6" } - caniuse-lite@1.0.30001769: + caniuse-lite@1.0.30001770: resolution: { - integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==, + integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==, } chai@5.3.3: @@ -1830,10 +1830,10 @@ packages: integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==, } - detsys-ts@https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/d010809b65687084386dd08928b4601be71aa4c0: + detsys-ts@https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/f2d94964c763ad623d33d7dd59ba1474c79b8bbf: resolution: { - tarball: https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/d010809b65687084386dd08928b4601be71aa4c0, + tarball: https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/f2d94964c763ad623d33d7dd59ba1474c79b8bbf, } version: 1.0.0 @@ -2220,10 +2220,10 @@ packages: integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, } - fast-xml-parser@5.3.5: + fast-xml-parser@5.3.6: resolution: { - integrity: sha512-JeaA2Vm9ffQKp9VjvfzObuMCjUYAp5WDYhRYL5LrBPY/jUDlUtOvDfot0vKSkB9tuX885BDHjtw4fZadD95wnA==, + integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==, } hasBin: true @@ -4209,7 +4209,7 @@ snapshots: "@azure/core-xml@1.5.0": dependencies: - fast-xml-parser: 5.3.5 + fast-xml-parser: 5.3.6 tslib: 2.8.1 "@azure/logger@1.3.0": @@ -4991,7 +4991,7 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001770 electron-to-chromium: 1.5.286 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -5036,7 +5036,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001769: {} + caniuse-lite@1.0.30001770: {} chai@5.3.3: dependencies: @@ -5127,7 +5127,7 @@ snapshots: deprecation@2.3.1: {} - detsys-ts@https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/d010809b65687084386dd08928b4601be71aa4c0: + detsys-ts@https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/f2d94964c763ad623d33d7dd59ba1474c79b8bbf: dependencies: "@actions/cache": 6.0.0 "@actions/core": 3.0.0 @@ -5519,7 +5519,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-xml-parser@5.3.5: + fast-xml-parser@5.3.6: dependencies: strnum: 2.1.2