@rqml/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +41 -0
- package/dist/chunk-5WRI5ZAA.js +29 -0
- package/dist/chunk-5WRI5ZAA.js.map +1 -0
- package/dist/index.js +3625 -0
- package/dist/index.js.map +1 -0
- package/dist/validate-O3LLP44J.js +3433 -0
- package/dist/validate-O3LLP44J.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/util.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/validator.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/xmlparser/xmlNode.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js","../../../node_modules/.pnpm/strnum@1.1.2/node_modules/strnum/strnum.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/ignoreAttributes.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/xmlparser/node2json.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/xmlbuilder/orderedJs2Xml.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js","../../../node_modules/.pnpm/fast-xml-parser@4.5.6/node_modules/fast-xml-parser/src/fxp.js","../../core/src/model/types.ts","../../core/src/parse/raw.ts","../../core/src/parse/parse.ts","../../core/src/parse/serialize.ts","../../core/src/lint/index.ts","../../core/src/trace/index.ts","../../core/src/analyze/integrity.ts","../../core/src/check/coverage.ts","../../core/src/check/drift.ts","../src/report.ts","../src/runtime.ts","../src/commands/check.ts","../../schema/templates/AGENTS.md","../../schema/src/index.ts","../src/commands/init.ts","../src/commands/status.ts","../src/commands/validate.ts","../src/index.ts"],"names":["str","result","text","XMLParser","attStr","attr","XMLBuilder","ATTR_PREFIX","parser","isNode","asArray","resolvePath","resolve","existsSync"],"mappings":"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","file":"index.js","sourcesContent":["'use strict';\n\nconst 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';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function (string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n allmatches.startIndex = regex.lastIndex - match[0].length;\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n};\n\nconst isName = function (string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n};\n\nexports.isExist = function (v) {\n return typeof v !== 'undefined';\n};\n\nexports.isEmptyObject = function (obj) {\n return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function (target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a); // will return an array of own properties\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n if (arrayMode === 'strict') {\n target[keys[i]] = [a[keys[i]]];\n } else {\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n};\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexports.getValue = function (v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n};\n\n/**\n * Dangerous property names that could lead to prototype pollution or security issues\n */\nconst DANGEROUS_PROPERTY_NAMES = [\n // '__proto__',\n // 'constructor',\n // 'prototype',\n 'hasOwnProperty',\n 'toString',\n 'valueOf',\n '__defineGetter__',\n '__defineSetter__',\n '__lookupGetter__',\n '__lookupSetter__'\n];\n\nconst criticalProperties = [\"__proto__\", \"constructor\", \"prototype\"];\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\nexports.DANGEROUS_PROPERTY_NAMES = DANGEROUS_PROPERTY_NAMES;\nexports.criticalProperties = criticalProperties;\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n allowBooleanAttributes: false, //A tag can have attributes without any value\n unpairedTags: []\n};\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n options = Object.assign({}, defaultOptions, options);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n const tags = [];\n let tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n let reachedRoot = false;\n\n if (xmlData[0] === '\\ufeff') {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n \n for (let i = 0; i < xmlData.length; i++) {\n\n if (xmlData[i] === '<' && xmlData[i+1] === '?') {\n i+=2;\n i = readPI(xmlData,i);\n if (i.err) return i;\n }else if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n let tagStartPos = i;\n i++;\n \n if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = '';\n for (; i < xmlData.length &&\n xmlData[i] !== '>' &&\n xmlData[i] !== ' ' &&\n xmlData[i] !== '\\t' &&\n xmlData[i] !== '\\n' &&\n xmlData[i] !== '\\r'; i++\n ) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"Invalid space after '<'.\";\n } else {\n msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n }\n return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === '/') {\n //self closing tag\n const attrStrStart = i - attrStr.length;\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n //continue; //text may presents after self closing tag\n } else {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else if (tags.length === 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' has not been opened.\", getLineNumberForPosition(xmlData, tagStartPos));\n } else {\n const otg = tags.pop();\n if (tagName !== otg.tagName) {\n let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos);\n return getErrorObject('InvalidTag',\n \"Expected closing tag '\"+otg.tagName+\"' (opened in line \"+openPos.line+\", col \"+openPos.col+\") instead of closing tag '\"+tagName+\"'.\",\n getLineNumberForPosition(xmlData, tagStartPos));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else if(options.unpairedTags.indexOf(tagName) !== -1){\n //don't push into stack\n } else {\n tags.push({tagName, tagStartPos});\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else if (xmlData[i+1] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) return i;\n } else{\n break;\n }\n } else if (xmlData[i] === '&') {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }else{\n if (reachedRoot === true && !isWhiteSpace(xmlData[i])) {\n return getErrorObject('InvalidXml', \"Extra text at the end\", getLineNumberForPosition(xmlData, i));\n }\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if ( isWhiteSpace(xmlData[i])) {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n }else if (tags.length == 1) {\n return getErrorObject('InvalidTag', \"Unclosed tag '\"+tags[0].tagName+\"'.\", getLineNumberForPosition(xmlData, tags[0].tagStartPos));\n }else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\"+\n JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\\r?\\n/g, '')+\n \"' found.\", {line: 1, col: 1});\n }\n\n return true;\n};\n\nfunction isWhiteSpace(char){\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n}\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n const start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n const tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (\n xmlData.length > i + 8 &&\n xmlData[i + 1] === 'D' &&\n xmlData[i + 2] === 'O' &&\n xmlData[i + 3] === 'C' &&\n xmlData[i + 4] === 'T' &&\n xmlData[i + 5] === 'Y' &&\n xmlData[i + 6] === 'P' &&\n xmlData[i + 7] === 'E'\n ) {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (\n xmlData.length > i + 9 &&\n xmlData[i + 1] === '[' &&\n xmlData[i + 2] === 'C' &&\n xmlData[i + 3] === 'D' &&\n xmlData[i + 4] === 'A' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'A' &&\n xmlData[i + 7] === '['\n ) {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nconst doubleQuote = '\"';\nconst singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = '';\n let startChar = '';\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(matches[i]))\n } else if (matches[i][3] !== undefined && matches[i][4] === undefined) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' is without value.\", getPositionFromMatch(matches[i]));\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(matches[i]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(matches[i]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(matches[i]));\n }\n }\n\n return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n let re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';')\n return i;\n if (!xmlData[i].match(re))\n break;\n }\n return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';')\n return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === ';')\n break;\n return -1;\n }\n return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber.line || lineNumber,\n col: lineNumber.col,\n },\n };\n}\n\nfunction validateAttrName(attrName) {\n return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return util.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n const lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return {\n line: lines.length,\n\n // column number is last line's length + 1, because column numbering starts at 1:\n col: lines[lines.length - 1].length + 1\n };\n}\n\n//this function returns the position of the first character of match within attrStr\nfunction getPositionFromMatch(match) {\n return match.startIndex + match[1].length;\n}\n","\nconst { DANGEROUS_PROPERTY_NAMES, criticalProperties } = require(\"../util\");\n\nconst defaultOnDangerousProperty = (name) => {\n if (DANGEROUS_PROPERTY_NAMES.includes(name)) {\n return \"__\" + name;\n }\n return name;\n};\nconst defaultOptions = {\n preserveOrder: false,\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n removeNSPrefix: false, // remove NS from tag name or attribute name if true\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: true,\n parseAttributeValue: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataPropName: false,\n numberParseOptions: {\n hex: true,\n leadingZeros: true,\n eNotation: true\n },\n tagValueProcessor: function (tagName, val) {\n return val;\n },\n attributeValueProcessor: function (attrName, val) {\n return val;\n },\n stopNodes: [], //nested tags will not be parsed even for errors\n alwaysCreateTextNode: false,\n isArray: () => false,\n commentPropName: false,\n unpairedTags: [],\n processEntities: true,\n htmlEntities: false,\n ignoreDeclaration: false,\n ignorePiTags: false,\n transformTagName: false,\n transformAttributeName: false,\n updateTag: function (tagName, jPath, attrs) {\n return tagName\n },\n // skipEmptyListItem: false\n captureMetaData: false,\n maxNestedTags: 100,\n strictReservedNames: true,\n onDangerousProperty: defaultOnDangerousProperty\n};\n/**\n * Validates that a property name is safe to use\n * @param {string} propertyName - The property name to validate\n * @param {string} optionName - The option field name (for error message)\n * @throws {Error} If property name is dangerous\n */\nfunction validatePropertyName(propertyName, optionName) {\n if (typeof propertyName !== 'string') {\n return; // Only validate string property names\n }\n\n const normalized = propertyName.toLowerCase();\n if (DANGEROUS_PROPERTY_NAMES.some(dangerous => normalized === dangerous.toLowerCase())) {\n throw new Error(\n `[SECURITY] Invalid ${optionName}: \"${propertyName}\" is a reserved JavaScript keyword that could cause prototype pollution`\n );\n }\n\n if (criticalProperties.some(dangerous => normalized === dangerous.toLowerCase())) {\n throw new Error(\n `[SECURITY] Invalid ${optionName}: \"${propertyName}\" is a reserved JavaScript keyword that could cause prototype pollution`\n );\n }\n}\n\n/**\n * Normalizes processEntities option for backward compatibility\n * @param {boolean|object} value \n * @returns {object} Always returns normalized object\n */\nfunction normalizeProcessEntities(value) {\n // Boolean backward compatibility\n if (typeof value === 'boolean') {\n return {\n enabled: value, // true or false\n maxEntitySize: 10000,\n maxExpansionDepth: 10,\n maxTotalExpansions: 1000,\n maxExpandedLength: 100000,\n allowedTags: null,\n tagFilter: null\n };\n }\n\n // Object config - merge with defaults\n if (typeof value === 'object' && value !== null) {\n return {\n enabled: value.enabled !== false,\n maxEntitySize: Math.max(1, value.maxEntitySize ?? 10000),\n maxExpansionDepth: Math.max(1, value.maxExpansionDepth ?? 10000),\n maxTotalExpansions: Math.max(1, value.maxTotalExpansions ?? Infinity),\n maxExpandedLength: Math.max(1, value.maxExpandedLength ?? 100000),\n maxEntityCount: Math.max(1, value.maxEntityCount ?? 1000),\n allowedTags: value.allowedTags ?? null,\n tagFilter: value.tagFilter ?? null\n };\n }\n\n // Default to enabled with limits\n return normalizeProcessEntities(true);\n}\n\nconst buildOptions = function (options) {\n const built = Object.assign({}, defaultOptions, options);\n\n\n // Validate property names to prevent prototype pollution\n const propertyNameOptions = [\n { value: built.attributeNamePrefix, name: 'attributeNamePrefix' },\n { value: built.attributesGroupName, name: 'attributesGroupName' },\n { value: built.textNodeName, name: 'textNodeName' },\n { value: built.cdataPropName, name: 'cdataPropName' },\n { value: built.commentPropName, name: 'commentPropName' }\n ];\n\n for (const { value, name } of propertyNameOptions) {\n if (value) {\n validatePropertyName(value, name);\n }\n }\n\n if (built.onDangerousProperty === null) {\n built.onDangerousProperty = defaultOnDangerousProperty;\n }\n\n // Always normalize processEntities for backward compatibility and validation\n built.processEntities = normalizeProcessEntities(built.processEntities);\n //console.debug(built.processEntities)\n return built;\n};\n\nexports.buildOptions = buildOptions;\nexports.defaultOptions = defaultOptions;","'use strict';\n\nclass XmlNode{\n constructor(tagname) {\n this.tagname = tagname;\n this.child = []; //nested tags, text, cdata, comments in order\n this[\":@\"] = {}; //attributes map\n }\n add(key,val){\n // this.child.push( {name : key, val: val, isCdata: isCdata });\n if(key === \"__proto__\") key = \"#__proto__\";\n this.child.push( {[key]: val });\n }\n addChild(node) {\n if(node.tagname === \"__proto__\") node.tagname = \"#__proto__\";\n if(node[\":@\"] && Object.keys(node[\":@\"]).length > 0){\n this.child.push( { [node.tagname]: node.child, [\":@\"]: node[\":@\"] });\n }else{\n this.child.push( { [node.tagname]: node.child });\n }\n };\n};\n\n\nmodule.exports = XmlNode;","const util = require('../util');\n\nclass DocTypeReader {\n constructor(options) {\n this.suppressValidationErr = !options;\n this.options = options || {};\n }\n\n readDocType(xmlData, i) {\n const entities = Object.create(null);\n let entityCount = 0;\n\n if (xmlData[i + 3] === 'O' &&\n xmlData[i + 4] === 'C' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'Y' &&\n xmlData[i + 7] === 'P' &&\n xmlData[i + 8] === 'E') {\n\n i = i + 9;\n let angleBracketsCount = 1;\n let hasBody = false, comment = false;\n let exp = \"\";\n\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === '<' && !comment) { //Determine the tag type\n if (hasBody && hasSeq(xmlData, \"!ENTITY\", i)) {\n i += 7;\n let entityName, val;\n [entityName, val, i] = this.readEntityExp(xmlData, i + 1, this.suppressValidationErr);\n if (val.indexOf(\"&\") === -1) { //Parameter entities are not supported\n if (this.options.enabled !== false &&\n this.options.maxEntityCount != null &&\n entityCount >= this.options.maxEntityCount) {\n throw new Error(\n `Entity count (${entityCount + 1}) exceeds maximum allowed (${this.options.maxEntityCount})`\n );\n }\n //const escaped = entityName.replace(/[.\\-+*:]/g, '\\\\.');\n const escaped = entityName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n entities[entityName] = {\n regx: RegExp(`&${escaped};`, \"g\"),\n val: val\n };\n entityCount++;\n }\n } else if (hasBody && hasSeq(xmlData, \"!ELEMENT\", i)) {\n i += 8; //Not supported\n const { index } = this.readElementExp(xmlData, i + 1);\n i = index;\n } else if (hasBody && hasSeq(xmlData, \"!ATTLIST\", i)) {\n i += 8; //Not supported\n // const {index} = this.readAttlistExp(xmlData,i+1);\n // i = index;\n } else if (hasBody && hasSeq(xmlData, \"!NOTATION\", i)) {\n i += 9; //Not supported\n const { index } = this.readNotationExp(xmlData, i + 1, this.suppressValidationErr);\n i = index;\n } else if (hasSeq(xmlData, \"!--\", i)) {\n comment = true;\n } else {\n throw new Error(`Invalid DOCTYPE`);\n }\n\n angleBracketsCount++;\n exp = \"\";\n } else if (xmlData[i] === '>') { //Read tag content\n if (comment) {\n if (xmlData[i - 1] === \"-\" && xmlData[i - 2] === \"-\") {\n comment = false;\n angleBracketsCount--;\n }\n } else {\n angleBracketsCount--;\n }\n if (angleBracketsCount === 0) {\n break;\n }\n } else if (xmlData[i] === '[') {\n hasBody = true;\n } else {\n exp += xmlData[i];\n }\n }\n\n if (angleBracketsCount !== 0) {\n throw new Error(`Unclosed DOCTYPE`);\n }\n } else {\n throw new Error(`Invalid Tag instead of DOCTYPE`);\n }\n\n return { entities, i };\n }\n\n readEntityExp(xmlData, i) {\n //External entities are not supported\n // <!ENTITY ext SYSTEM \"http://normal-website.com\" >\n\n //Parameter entities are not supported\n // <!ENTITY entityname \"&anotherElement;\">\n\n //Internal entities are supported\n // <!ENTITY entityname \"replacement text\">\n\n // Skip leading whitespace after <!ENTITY\n i = skipWhitespace(xmlData, i);\n\n // Read entity name\n let entityName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i]) && xmlData[i] !== '\"' && xmlData[i] !== \"'\") {\n entityName += xmlData[i];\n i++;\n }\n validateEntityName(entityName);\n\n // Skip whitespace after entity name\n i = skipWhitespace(xmlData, i);\n\n // Check for unsupported constructs (external entities or parameter entities)\n if (!this.suppressValidationErr) {\n if (xmlData.substring(i, i + 6).toUpperCase() === \"SYSTEM\") {\n throw new Error(\"External entities are not supported\");\n } else if (xmlData[i] === \"%\") {\n throw new Error(\"Parameter entities are not supported\");\n }\n }\n\n // Read entity value (internal entity)\n let entityValue = \"\";\n [i, entityValue] = this.readIdentifierVal(xmlData, i, \"entity\");\n\n // Validate entity size\n if (this.options.enabled !== false &&\n this.options.maxEntitySize != null &&\n entityValue.length > this.options.maxEntitySize) {\n throw new Error(\n `Entity \"${entityName}\" size (${entityValue.length}) exceeds maximum allowed size (${this.options.maxEntitySize})`\n );\n }\n\n i--;\n return [entityName, entityValue, i];\n }\n\n readNotationExp(xmlData, i) {\n // Skip leading whitespace after <!NOTATION\n i = skipWhitespace(xmlData, i);\n\n // Read notation name\n let notationName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n notationName += xmlData[i];\n i++;\n }\n !this.suppressValidationErr && validateEntityName(notationName);\n\n // Skip whitespace after notation name\n i = skipWhitespace(xmlData, i);\n\n // Check identifier type (SYSTEM or PUBLIC)\n const identifierType = xmlData.substring(i, i + 6).toUpperCase();\n if (!this.suppressValidationErr && identifierType !== \"SYSTEM\" && identifierType !== \"PUBLIC\") {\n throw new Error(`Expected SYSTEM or PUBLIC, found \"${identifierType}\"`);\n }\n i += identifierType.length;\n\n // Skip whitespace after identifier type\n i = skipWhitespace(xmlData, i);\n\n // Read public identifier (if PUBLIC)\n let publicIdentifier = null;\n let systemIdentifier = null;\n\n if (identifierType === \"PUBLIC\") {\n [i, publicIdentifier] = this.readIdentifierVal(xmlData, i, \"publicIdentifier\");\n\n // Skip whitespace after public identifier\n i = skipWhitespace(xmlData, i);\n\n // Optionally read system identifier\n if (xmlData[i] === '\"' || xmlData[i] === \"'\") {\n [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, \"systemIdentifier\");\n }\n } else if (identifierType === \"SYSTEM\") {\n // Read system identifier (mandatory for SYSTEM)\n [i, systemIdentifier] = this.readIdentifierVal(xmlData, i, \"systemIdentifier\");\n\n if (!this.suppressValidationErr && !systemIdentifier) {\n throw new Error(\"Missing mandatory system identifier for SYSTEM notation\");\n }\n }\n\n return { notationName, publicIdentifier, systemIdentifier, index: --i };\n }\n\n readIdentifierVal(xmlData, i, type) {\n let identifierVal = \"\";\n const startChar = xmlData[i];\n if (startChar !== '\"' && startChar !== \"'\") {\n throw new Error(`Expected quoted string, found \"${startChar}\"`);\n }\n i++;\n\n while (i < xmlData.length && xmlData[i] !== startChar) {\n identifierVal += xmlData[i];\n i++;\n }\n\n if (xmlData[i] !== startChar) {\n throw new Error(`Unterminated ${type} value`);\n }\n i++;\n return [i, identifierVal];\n }\n\n readElementExp(xmlData, i) {\n // <!ELEMENT br EMPTY>\n // <!ELEMENT div ANY>\n // <!ELEMENT title (#PCDATA)>\n // <!ELEMENT book (title, author+)>\n // <!ELEMENT name (content-model)>\n\n // Skip leading whitespace after <!ELEMENT\n i = skipWhitespace(xmlData, i);\n\n // Read element name\n let elementName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n elementName += xmlData[i];\n i++;\n }\n\n // Validate element name\n if (!this.suppressValidationErr && !util.isName(elementName)) {\n throw new Error(`Invalid element name: \"${elementName}\"`);\n }\n\n // Skip whitespace after element name\n i = skipWhitespace(xmlData, i);\n let contentModel = \"\";\n\n // Expect '(' to start content model\n if (xmlData[i] === \"E\" && hasSeq(xmlData, \"MPTY\", i)) {\n i += 4;\n } else if (xmlData[i] === \"A\" && hasSeq(xmlData, \"NY\", i)) {\n i += 2;\n } else if (xmlData[i] === \"(\") {\n i++; // Move past '('\n\n // Read content model\n while (i < xmlData.length && xmlData[i] !== \")\") {\n contentModel += xmlData[i];\n i++;\n }\n if (xmlData[i] !== \")\") {\n throw new Error(\"Unterminated content model\");\n }\n } else if (!this.suppressValidationErr) {\n throw new Error(`Invalid Element Expression, found \"${xmlData[i]}\"`);\n }\n\n return {\n elementName,\n contentModel: contentModel.trim(),\n index: i\n };\n }\n\n readAttlistExp(xmlData, i) {\n // Skip leading whitespace after <!ATTLIST\n i = skipWhitespace(xmlData, i);\n\n // Read element name\n let elementName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n elementName += xmlData[i];\n i++;\n }\n\n // Validate element name\n validateEntityName(elementName);\n\n // Skip whitespace after element name\n i = skipWhitespace(xmlData, i);\n\n // Read attribute name\n let attributeName = \"\";\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n attributeName += xmlData[i];\n i++;\n }\n\n // Validate attribute name\n if (!validateEntityName(attributeName)) {\n throw new Error(`Invalid attribute name: \"${attributeName}\"`);\n }\n\n // Skip whitespace after attribute name\n i = skipWhitespace(xmlData, i);\n\n // Read attribute type\n let attributeType = \"\";\n if (xmlData.substring(i, i + 8).toUpperCase() === \"NOTATION\") {\n attributeType = \"NOTATION\";\n i += 8; // Move past \"NOTATION\"\n\n // Skip whitespace after \"NOTATION\"\n i = skipWhitespace(xmlData, i);\n\n // Expect '(' to start the list of notations\n if (xmlData[i] !== \"(\") {\n throw new Error(`Expected '(', found \"${xmlData[i]}\"`);\n }\n i++; // Move past '('\n\n // Read the list of allowed notations\n let allowedNotations = [];\n while (i < xmlData.length && xmlData[i] !== \")\") {\n let notation = \"\";\n while (i < xmlData.length && xmlData[i] !== \"|\" && xmlData[i] !== \")\") {\n notation += xmlData[i];\n i++;\n }\n\n // Validate notation name\n notation = notation.trim();\n if (!validateEntityName(notation)) {\n throw new Error(`Invalid notation name: \"${notation}\"`);\n }\n\n allowedNotations.push(notation);\n\n // Skip '|' separator or exit loop\n if (xmlData[i] === \"|\") {\n i++; // Move past '|'\n i = skipWhitespace(xmlData, i); // Skip optional whitespace after '|'\n }\n }\n\n if (xmlData[i] !== \")\") {\n throw new Error(\"Unterminated list of notations\");\n }\n i++; // Move past ')'\n\n // Store the allowed notations as part of the attribute type\n attributeType += \" (\" + allowedNotations.join(\"|\") + \")\";\n } else {\n // Handle simple types (e.g., CDATA, ID, IDREF, etc.)\n while (i < xmlData.length && !/\\s/.test(xmlData[i])) {\n attributeType += xmlData[i];\n i++;\n }\n\n // Validate simple attribute type\n const validTypes = [\"CDATA\", \"ID\", \"IDREF\", \"IDREFS\", \"ENTITY\", \"ENTITIES\", \"NMTOKEN\", \"NMTOKENS\"];\n if (!this.suppressValidationErr && !validTypes.includes(attributeType.toUpperCase())) {\n throw new Error(`Invalid attribute type: \"${attributeType}\"`);\n }\n }\n\n // Skip whitespace after attribute type\n i = skipWhitespace(xmlData, i);\n\n // Read default value\n let defaultValue = \"\";\n if (xmlData.substring(i, i + 8).toUpperCase() === \"#REQUIRED\") {\n defaultValue = \"#REQUIRED\";\n i += 8;\n } else if (xmlData.substring(i, i + 7).toUpperCase() === \"#IMPLIED\") {\n defaultValue = \"#IMPLIED\";\n i += 7;\n } else {\n [i, defaultValue] = this.readIdentifierVal(xmlData, i, \"ATTLIST\");\n }\n\n return {\n elementName,\n attributeName,\n attributeType,\n defaultValue,\n index: i\n };\n }\n}\n\n// Helper functions\nconst skipWhitespace = (data, index) => {\n while (index < data.length && /\\s/.test(data[index])) {\n index++;\n }\n return index;\n};\n\nfunction hasSeq(data, seq, i) {\n for (let j = 0; j < seq.length; j++) {\n if (seq[j] !== data[i + j + 1]) return false;\n }\n return true;\n}\n\nfunction validateEntityName(name) {\n if (util.isName(name))\n return name;\n else\n throw new Error(`Invalid entity name ${name}`);\n}\n\nmodule.exports = DocTypeReader;","const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/;\nconst numRegex = /^([\\-\\+])?(0*)([0-9]*(\\.[0-9]*)?)$/;\n// const octRegex = /^0x[a-z0-9]+/;\n// const binRegex = /0x[a-z0-9]+/;\n\n \nconst consider = {\n hex : true,\n // oct: false,\n leadingZeros: true,\n decimalPoint: \"\\.\",\n eNotation: true,\n //skipLike: /regex/\n};\n\nfunction toNumber(str, options = {}){\n options = Object.assign({}, consider, options );\n if(!str || typeof str !== \"string\" ) return str;\n \n let trimmedStr = str.trim();\n \n if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;\n else if(str===\"0\") return 0;\n else if (options.hex && hexRegex.test(trimmedStr)) {\n return parse_int(trimmedStr, 16);\n // }else if (options.oct && octRegex.test(str)) {\n // return Number.parseInt(val, 8);\n }else if (trimmedStr.search(/[eE]/)!== -1) { //eNotation\n const notation = trimmedStr.match(/^([-\\+])?(0*)([0-9]*(\\.[0-9]*)?[eE][-\\+]?[0-9]+)$/); \n // +00.123 => [ , '+', '00', '.123', ..\n if(notation){\n // console.log(notation)\n if(options.leadingZeros){ //accept with leading zeros\n trimmedStr = (notation[1] || \"\") + notation[3];\n }else{\n if(notation[2] === \"0\" && notation[3][0]=== \".\"){ //valid number\n }else{\n return str;\n }\n }\n return options.eNotation ? Number(trimmedStr) : str;\n }else{\n return str;\n }\n // }else if (options.parseBin && binRegex.test(str)) {\n // return Number.parseInt(val, 2);\n }else{\n //separate negative sign, leading zeros, and rest number\n const match = numRegex.exec(trimmedStr);\n // +00.123 => [ , '+', '00', '.123', ..\n if(match){\n const sign = match[1];\n const leadingZeros = match[2];\n let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros\n //trim ending zeros for floating number\n \n if(!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== \".\") return str; //-0123\n else if(!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== \".\") return str; //0123\n else if(options.leadingZeros && leadingZeros===str) return 0; //00\n \n else{//no leading zeros or leading zeros are allowed\n const num = Number(trimmedStr);\n const numStr = \"\" + num;\n\n if(numStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation\n if(options.eNotation) return num;\n else return str;\n }else if(trimmedStr.indexOf(\".\") !== -1){ //floating number\n if(numStr === \"0\" && (numTrimmedByZeros === \"\") ) return num; //0.0\n else if(numStr === numTrimmedByZeros) return num; //0.456. 0.79000\n else if( sign && numStr === \"-\"+numTrimmedByZeros) return num;\n else return str;\n }\n \n if(leadingZeros){\n return (numTrimmedByZeros === numStr) || (sign+numTrimmedByZeros === numStr) ? num : str\n }else {\n return (trimmedStr === numStr) || (trimmedStr === sign+numStr) ? num : str\n }\n }\n }else{ //non-numeric string\n return str;\n }\n }\n}\n\n/**\n * \n * @param {string} numStr without leading zeros\n * @returns \n */\nfunction trimZeros(numStr){\n if(numStr && numStr.indexOf(\".\") !== -1){//float\n numStr = numStr.replace(/0+$/, \"\"); //remove ending zeros\n if(numStr === \".\") numStr = \"0\";\n else if(numStr[0] === \".\") numStr = \"0\"+numStr;\n else if(numStr[numStr.length-1] === \".\") numStr = numStr.substr(0,numStr.length-1);\n return numStr;\n }\n return numStr;\n}\n\nfunction parse_int(numStr, base){\n //polyfill\n if(parseInt) return parseInt(numStr, base);\n else if(Number.parseInt) return Number.parseInt(numStr, base);\n else if(window && window.parseInt) return window.parseInt(numStr, base);\n else throw new Error(\"parseInt, Number.parseInt, window.parseInt are not supported\")\n}\n\nmodule.exports = toNumber;","function getIgnoreAttributesFn(ignoreAttributes) {\n if (typeof ignoreAttributes === 'function') {\n return ignoreAttributes\n }\n if (Array.isArray(ignoreAttributes)) {\n return (attrName) => {\n for (const pattern of ignoreAttributes) {\n if (typeof pattern === 'string' && attrName === pattern) {\n return true\n }\n if (pattern instanceof RegExp && pattern.test(attrName)) {\n return true\n }\n }\n }\n }\n return () => false\n}\n\nmodule.exports = getIgnoreAttributesFn","'use strict';\n///@ts-check\n\nconst util = require('../util');\nconst xmlNode = require('./xmlNode');\nconst DocTypeReader = require('./DocTypeReader');\nconst toNumber = require(\"strnum\");\nconst getIgnoreAttributesFn = require('../ignoreAttributes')\n\n// const regx =\n// '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n// .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\nclass OrderedObjParser {\n constructor(options) {\n this.options = options;\n this.currentNode = null;\n this.tagsNodeStack = [];\n this.docTypeEntities = {};\n this.lastEntities = {\n \"apos\": { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n \"gt\": { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n \"lt\": { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n \"quot\": { regex: /&(quot|#34|#x22);/g, val: \"\\\"\" },\n };\n this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" };\n this.htmlEntities = {\n \"space\": { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n \"cent\": { regex: /&(cent|#162);/g, val: \"¢\" },\n \"pound\": { regex: /&(pound|#163);/g, val: \"£\" },\n \"yen\": { regex: /&(yen|#165);/g, val: \"¥\" },\n \"euro\": { regex: /&(euro|#8364);/g, val: \"€\" },\n \"copyright\": { regex: /&(copy|#169);/g, val: \"©\" },\n \"reg\": { regex: /&(reg|#174);/g, val: \"®\" },\n \"inr\": { regex: /&(inr|#8377);/g, val: \"₹\" },\n \"num_dec\": { regex: /&#([0-9]{1,7});/g, val: (_, str) => fromCodePoint(str, 10, \"&#\") },\n \"num_hex\": { regex: /&#x([0-9a-fA-F]{1,6});/g, val: (_, str) => fromCodePoint(str, 16, \"&#x\") },\n };\n this.addExternalEntities = addExternalEntities;\n this.parseXml = parseXml;\n this.parseTextData = parseTextData;\n this.resolveNameSpace = resolveNameSpace;\n this.buildAttributesMap = buildAttributesMap;\n this.isItStopNode = isItStopNode;\n this.replaceEntitiesValue = replaceEntitiesValue;\n this.readStopNodeData = readStopNodeData;\n this.saveTextToParentTag = saveTextToParentTag;\n this.addChild = addChild;\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n this.entityExpansionCount = 0;\n this.currentExpandedLength = 0;\n\n if (this.options.stopNodes && this.options.stopNodes.length > 0) {\n this.stopNodesExact = new Set();\n this.stopNodesWildcard = new Set();\n for (let i = 0; i < this.options.stopNodes.length; i++) {\n const stopNodeExp = this.options.stopNodes[i];\n if (typeof stopNodeExp !== 'string') continue;\n if (stopNodeExp.startsWith(\"*.\")) {\n this.stopNodesWildcard.add(stopNodeExp.substring(2));\n } else {\n this.stopNodesExact.add(stopNodeExp);\n }\n }\n }\n }\n\n}\n\nfunction addExternalEntities(externalEntities) {\n const entKeys = Object.keys(externalEntities);\n for (let i = 0; i < entKeys.length; i++) {\n const ent = entKeys[i];\n const escaped = ent.replace(/[.\\-+*:]/g, '\\\\.');\n this.lastEntities[ent] = {\n regex: new RegExp(\"&\" + escaped + \";\", \"g\"),\n val: externalEntities[ent]\n }\n }\n}\n\n/**\n * @param {string} val\n * @param {string} tagName\n * @param {string} jPath\n * @param {boolean} dontTrim\n * @param {boolean} hasAttributes\n * @param {boolean} isLeafNode\n * @param {boolean} escapeEntities\n */\nfunction parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) {\n if (val !== undefined) {\n if (this.options.trimValues && !dontTrim) {\n val = val.trim();\n }\n if (val.length > 0) {\n if (!escapeEntities) val = this.replaceEntitiesValue(val, tagName, jPath);\n\n const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode);\n if (newval === null || newval === undefined) {\n //don't parse\n return val;\n } else if (typeof newval !== typeof val || newval !== val) {\n //overwrite\n return newval;\n } else if (this.options.trimValues) {\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n const trimmedVal = val.trim();\n if (trimmedVal === val) {\n return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions);\n } else {\n return val;\n }\n }\n }\n }\n}\n\nfunction resolveNameSpace(tagname) {\n if (this.options.removeNSPrefix) {\n const tags = tagname.split(':');\n const prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])([\\\\s\\\\S]*?)\\\\3)?', 'gm');\n\nfunction buildAttributesMap(attrStr, jPath, tagName) {\n if (this.options.ignoreAttributes !== true && typeof attrStr === 'string') {\n // attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = this.resolveNameSpace(matches[i][1]);\n if (this.ignoreAttributesFn(attrName, jPath)) {\n continue\n }\n let oldVal = matches[i][4];\n let aName = this.options.attributeNamePrefix + attrName;\n if (attrName.length) {\n if (this.options.transformAttributeName) {\n aName = this.options.transformAttributeName(aName);\n }\n aName = sanitizeName(aName, this.options);\n if (oldVal !== undefined) {\n if (this.options.trimValues) {\n oldVal = oldVal.trim();\n }\n oldVal = this.replaceEntitiesValue(oldVal, tagName, jPath);\n const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath);\n if (newVal === null || newVal === undefined) {\n //don't parse\n attrs[aName] = oldVal;\n } else if (typeof newVal !== typeof oldVal || newVal !== oldVal) {\n //overwrite\n attrs[aName] = newVal;\n } else {\n //parse\n attrs[aName] = parseValue(\n oldVal,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n }\n } else if (this.options.allowBooleanAttributes) {\n attrs[aName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (this.options.attributesGroupName) {\n const attrCollection = {};\n attrCollection[this.options.attributesGroupName] = attrs;\n return attrCollection;\n }\n return attrs\n }\n}\n\nconst parseXml = function (xmlData) {\n xmlData = xmlData.replace(/\\r\\n?/g, \"\\n\"); //TODO: remove this line\n const xmlObj = new xmlNode('!xml');\n let currentNode = xmlObj;\n let textData = \"\";\n let jPath = \"\";\n\n // Reset entity expansion counters for this document\n this.entityExpansionCount = 0;\n this.currentExpandedLength = 0;\n\n const docTypeReader = new DocTypeReader(this.options.processEntities);\n for (let i = 0; i < xmlData.length; i++) {//for each char in XML data\n const ch = xmlData[i];\n if (ch === '<') {\n // const nextIndex = i+1;\n // const _2ndChar = xmlData[nextIndex];\n if (xmlData[i + 1] === '/') {//Closing Tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n let tagName = xmlData.substring(i + 2, closeIndex).trim();\n\n if (this.options.removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n }\n }\n\n if (this.options.transformTagName) {\n tagName = this.options.transformTagName(tagName);\n }\n\n if (currentNode) {\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n }\n\n //check if last tag of nested tag was unpaired tag\n const lastTagName = jPath.substring(jPath.lastIndexOf(\".\") + 1);\n if (tagName && this.options.unpairedTags.indexOf(tagName) !== -1) {\n throw new Error(`Unpaired tag can not be used as closing tag: </${tagName}>`);\n }\n let propIndex = 0\n if (lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1) {\n propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.') - 1)\n this.tagsNodeStack.pop();\n } else {\n propIndex = jPath.lastIndexOf(\".\");\n }\n jPath = jPath.substring(0, propIndex);\n\n currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope\n textData = \"\";\n i = closeIndex;\n } else if (xmlData[i + 1] === '?') {\n\n let tagData = readTagExp(xmlData, i, false, \"?>\");\n if (!tagData) throw new Error(\"Pi Tag is not closed.\");\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n if ((this.options.ignoreDeclaration && tagData.tagName === \"?xml\") || this.options.ignorePiTags) {\n //do nothing\n } else {\n\n const childNode = new xmlNode(tagData.tagName);\n childNode.add(this.options.textNodeName, \"\");\n\n if (tagData.tagName !== tagData.tagExp && tagData.attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName);\n }\n this.addChild(currentNode, childNode, jPath, i);\n }\n\n\n i = tagData.closeIndex + 1;\n } else if (xmlData.substr(i + 1, 3) === '!--') {\n const endIndex = findClosingIndex(xmlData, \"-->\", i + 4, \"Comment is not closed.\")\n if (this.options.commentPropName) {\n const comment = xmlData.substring(i + 4, endIndex - 2);\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n currentNode.add(this.options.commentPropName, [{ [this.options.textNodeName]: comment }]);\n }\n i = endIndex;\n } else if (xmlData.substr(i + 1, 2) === '!D') {\n const result = docTypeReader.readDocType(xmlData, i);\n this.docTypeEntities = result.entities;\n i = result.i;\n } else if (xmlData.substr(i + 1, 2) === '![') {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2;\n const tagExp = xmlData.substring(i + 9, closeIndex);\n\n textData = this.saveTextToParentTag(textData, currentNode, jPath);\n\n let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true);\n if (val == undefined) val = \"\";\n\n //cdata should be set even if it is 0 length string\n if (this.options.cdataPropName) {\n currentNode.add(this.options.cdataPropName, [{ [this.options.textNodeName]: tagExp }]);\n } else {\n currentNode.add(this.options.textNodeName, val);\n }\n\n i = closeIndex + 2;\n } else {//Opening tag\n let result = readTagExp(xmlData, i, this.options.removeNSPrefix);\n let tagName = result.tagName;\n const rawTagName = result.rawTagName;\n let tagExp = result.tagExp;\n let attrExpPresent = result.attrExpPresent;\n let closeIndex = result.closeIndex;\n\n if (this.options.transformTagName) {\n //console.log(tagExp, tagName)\n const newTagName = this.options.transformTagName(tagName);\n if (tagExp === tagName) {\n tagExp = newTagName\n }\n tagName = newTagName;\n }\n\n if (this.options.strictReservedNames &&\n (tagName === this.options.commentPropName\n || tagName === this.options.cdataPropName\n || tagName === this.options.textNodeName\n || tagName === this.options.attributesGroupName\n )) {\n throw new Error(`Invalid tag name: ${tagName}`);\n }\n\n //save text as child node\n if (currentNode && textData) {\n if (currentNode.tagname !== '!xml') {\n //when nested tag is found\n textData = this.saveTextToParentTag(textData, currentNode, jPath, false);\n }\n }\n\n //check if last tag was unpaired tag\n const lastTag = currentNode;\n if (lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1) {\n currentNode = this.tagsNodeStack.pop();\n jPath = jPath.substring(0, jPath.lastIndexOf(\".\"));\n }\n if (tagName !== xmlObj.tagname) {\n jPath += jPath ? \".\" + tagName : tagName;\n }\n const startIndex = i;\n if (this.isItStopNode(this.stopNodesExact, this.stopNodesWildcard, jPath, tagName)) {\n let tagContent = \"\";\n //self-closing tag\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") { //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n i = result.closeIndex;\n }\n //unpaired tag\n else if (this.options.unpairedTags.indexOf(tagName) !== -1) {\n\n i = result.closeIndex;\n }\n //normal tag\n else {\n //read until closing tag is found\n const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1);\n if (!result) throw new Error(`Unexpected end of ${rawTagName}`);\n i = result.i;\n tagContent = result.tagContent;\n }\n\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n if (tagContent) {\n tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true);\n }\n\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n childNode.add(this.options.textNodeName, tagContent);\n\n this.addChild(currentNode, childNode, jPath, startIndex);\n } else {\n //selfClosing tag\n if (tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1) {\n if (tagName[tagName.length - 1] === \"/\") { //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n jPath = jPath.substr(0, jPath.length - 1);\n tagExp = tagName;\n } else {\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n\n if (this.options.transformTagName) {\n const newTagName = this.options.transformTagName(tagName);\n if (tagExp === tagName) {\n tagExp = newTagName\n }\n tagName = newTagName;\n }\n\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath, startIndex);\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n }\n else if (this.options.unpairedTags.indexOf(tagName) !== -1) {//unpaired tag\n const childNode = new xmlNode(tagName);\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath);\n }\n this.addChild(currentNode, childNode, jPath, startIndex);\n jPath = jPath.substr(0, jPath.lastIndexOf(\".\"));\n i = result.closeIndex;\n // Continue to next iteration without changing currentNode\n continue;\n }\n //opening tag\n else {\n const childNode = new xmlNode(tagName);\n if (this.tagsNodeStack.length > this.options.maxNestedTags) {\n throw new Error(\"Maximum nested tags exceeded\");\n }\n this.tagsNodeStack.push(currentNode);\n\n if (tagName !== tagExp && attrExpPresent) {\n childNode[\":@\"] = this.buildAttributesMap(tagExp, jPath, tagName);\n }\n this.addChild(currentNode, childNode, jPath)\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }\n } else {\n textData += xmlData[i];\n }\n }\n return xmlObj.child;\n}\n\nfunction addChild(currentNode, childNode, jPath, startIndex) {\n // unset startIndex if not requested\n if (!this.options.captureMetaData) startIndex = undefined;\n const result = this.options.updateTag(childNode.tagname, jPath, childNode[\":@\"])\n if (result === false) {\n //do nothing\n } else if (typeof result === \"string\") {\n childNode.tagname = result\n currentNode.addChild(childNode, startIndex);\n } else {\n currentNode.addChild(childNode, startIndex);\n }\n}\n\nconst replaceEntitiesValue = function (val, tagName, jPath) {\n // Performance optimization: Early return if no entities to replace\n if (val.indexOf('&') === -1) {\n return val;\n }\n\n const entityConfig = this.options.processEntities;\n\n if (!entityConfig.enabled) {\n return val;\n }\n\n // Check tag-specific filtering\n if (entityConfig.allowedTags) {\n if (!entityConfig.allowedTags.includes(tagName)) {\n return val; // Skip entity replacement for current tag as not set\n }\n }\n\n if (entityConfig.tagFilter) {\n if (!entityConfig.tagFilter(tagName, jPath)) {\n return val; // Skip based on custom filter\n }\n }\n\n // Replace DOCTYPE entities\n for (let entityName in this.docTypeEntities) {\n const entity = this.docTypeEntities[entityName];\n const matches = val.match(entity.regx);\n\n if (matches) {\n // Track expansions\n this.entityExpansionCount += matches.length;\n\n // Check expansion limit\n if (entityConfig.maxTotalExpansions &&\n this.entityExpansionCount > entityConfig.maxTotalExpansions) {\n throw new Error(\n `Entity expansion limit exceeded: ${this.entityExpansionCount} > ${entityConfig.maxTotalExpansions}`\n );\n }\n\n // Store length before replacement\n const lengthBefore = val.length;\n val = val.replace(entity.regx, entity.val);\n\n // Check expanded length immediately after replacement\n if (entityConfig.maxExpandedLength) {\n this.currentExpandedLength += (val.length - lengthBefore);\n\n if (this.currentExpandedLength > entityConfig.maxExpandedLength) {\n throw new Error(\n `Total expanded content size exceeded: ${this.currentExpandedLength} > ${entityConfig.maxExpandedLength}`\n );\n }\n }\n }\n }\n if (val.indexOf('&') === -1) return val; // Early exit\n\n // Replace standard entities\n for (const entityName of Object.keys(this.lastEntities)) {\n const entity = this.lastEntities[entityName];\n const matches = val.match(entity.regex);\n if (matches) {\n this.entityExpansionCount += matches.length;\n if (entityConfig.maxTotalExpansions &&\n this.entityExpansionCount > entityConfig.maxTotalExpansions) {\n throw new Error(\n `Entity expansion limit exceeded: ${this.entityExpansionCount} > ${entityConfig.maxTotalExpansions}`\n );\n }\n }\n val = val.replace(entity.regex, entity.val);\n }\n if (val.indexOf('&') === -1) return val; // Early exit\n\n // Replace HTML entities if enabled\n if (this.options.htmlEntities) {\n for (const entityName of Object.keys(this.htmlEntities)) {\n const entity = this.htmlEntities[entityName];\n const matches = val.match(entity.regex);\n if (matches) {\n //console.log(matches);\n this.entityExpansionCount += matches.length;\n if (entityConfig.maxTotalExpansions &&\n this.entityExpansionCount > entityConfig.maxTotalExpansions) {\n throw new Error(\n `Entity expansion limit exceeded: ${this.entityExpansionCount} > ${entityConfig.maxTotalExpansions}`\n );\n }\n }\n val = val.replace(entity.regex, entity.val);\n }\n }\n\n // Replace ampersand entity last\n val = val.replace(this.ampEntity.regex, this.ampEntity.val);\n\n return val;\n}\n\nfunction saveTextToParentTag(textData, parentNode, jPath, isLeafNode) {\n if (textData) { //store previously collected data as textNode\n if (isLeafNode === undefined) isLeafNode = parentNode.child.length === 0\n\n textData = this.parseTextData(textData,\n parentNode.tagname,\n jPath,\n false,\n parentNode[\":@\"] ? Object.keys(parentNode[\":@\"]).length !== 0 : false,\n isLeafNode);\n\n if (textData !== undefined && textData !== \"\")\n parentNode.add(this.options.textNodeName, textData);\n textData = \"\";\n }\n return textData;\n}\n\n//TODO: use jPath to simplify the logic\n/**\n * @param {Set} stopNodesExact\n * @param {Set} stopNodesWildcard\n * @param {string} jPath\n * @param {string} currentTagName\n */\nfunction isItStopNode(stopNodesExact, stopNodesWildcard, jPath, currentTagName) {\n if (stopNodesWildcard && stopNodesWildcard.has(currentTagName)) return true;\n if (stopNodesExact && stopNodesExact.has(jPath)) return true;\n return false;\n}\n\n/**\n * Returns the tag Expression and where it is ending handling single-double quotes situation\n * @param {string} xmlData \n * @param {number} i starting index\n * @returns \n */\nfunction tagExpWithClosingIndex(xmlData, i, closingChar = \">\") {\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < xmlData.length; index++) {\n let ch = xmlData[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";//reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === closingChar[0]) {\n if (closingChar[1]) {\n if (xmlData[index + 1] === closingChar[1]) {\n return {\n data: tagExp,\n index: index\n }\n }\n } else {\n return {\n data: tagExp,\n index: index\n }\n }\n } else if (ch === '\\t') {\n ch = \" \"\n }\n tagExp += ch;\n }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg) {\n const closingIndex = xmlData.indexOf(str, i);\n if (closingIndex === -1) {\n throw new Error(errMsg)\n } else {\n return closingIndex + str.length - 1;\n }\n}\n\nfunction readTagExp(xmlData, i, removeNSPrefix, closingChar = \">\") {\n const result = tagExpWithClosingIndex(xmlData, i + 1, closingChar);\n if (!result) return;\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.search(/\\s/);\n let tagName = tagExp;\n let attrExpPresent = true;\n if (separatorIndex !== -1) {//separate tag name and attributes expression\n tagName = tagExp.substring(0, separatorIndex);\n tagExp = tagExp.substring(separatorIndex + 1).trimStart();\n }\n\n const rawTagName = tagName;\n if (removeNSPrefix) {\n const colonIndex = tagName.indexOf(\":\");\n if (colonIndex !== -1) {\n tagName = tagName.substr(colonIndex + 1);\n attrExpPresent = tagName !== result.data.substr(colonIndex + 1);\n }\n }\n\n return {\n tagName: tagName,\n tagExp: tagExp,\n closeIndex: closeIndex,\n attrExpPresent: attrExpPresent,\n rawTagName: rawTagName,\n }\n}\n/**\n * find paired tag for a stop node\n * @param {string} xmlData \n * @param {string} tagName \n * @param {number} i \n */\nfunction readStopNodeData(xmlData, tagName, i) {\n const startIndex = i;\n // Starting at 1 since we already have an open tag\n let openTagCount = 1;\n\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === \"<\") {\n if (xmlData[i + 1] === \"/\") {//close tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, `${tagName} is not closed`);\n let closeTagName = xmlData.substring(i + 2, closeIndex).trim();\n if (closeTagName === tagName) {\n openTagCount--;\n if (openTagCount === 0) {\n return {\n tagContent: xmlData.substring(startIndex, i),\n i: closeIndex\n }\n }\n }\n i = closeIndex;\n } else if (xmlData[i + 1] === '?') {\n const closeIndex = findClosingIndex(xmlData, \"?>\", i + 1, \"StopNode is not closed.\")\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 3) === '!--') {\n const closeIndex = findClosingIndex(xmlData, \"-->\", i + 3, \"StopNode is not closed.\")\n i = closeIndex;\n } else if (xmlData.substr(i + 1, 2) === '![') {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"StopNode is not closed.\") - 2;\n i = closeIndex;\n } else {\n const tagData = readTagExp(xmlData, i, '>')\n\n if (tagData) {\n const openTagName = tagData && tagData.tagName;\n if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length - 1] !== \"/\") {\n openTagCount++;\n }\n i = tagData.closeIndex;\n }\n }\n }\n }//end for loop\n}\n\nfunction parseValue(val, shouldParse, options) {\n if (shouldParse && typeof val === 'string') {\n //console.log(options)\n const newval = val.trim();\n if (newval === 'true') return true;\n else if (newval === 'false') return false;\n else return toNumber(val, options);\n } else {\n if (util.isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\nfunction fromCodePoint(str, base, prefix) {\n const codePoint = Number.parseInt(str, base);\n\n if (codePoint >= 0 && codePoint <= 0x10FFFF) {\n return String.fromCodePoint(codePoint);\n } else {\n return prefix + str + \";\";\n }\n}\n\nfunction sanitizeName(name, options) {\n if (util.criticalProperties.includes(name)) {\n throw new Error(`[SECURITY] Invalid name: \"${name}\" is a reserved JavaScript keyword that could cause prototype pollution`);\n } else if (util.DANGEROUS_PROPERTY_NAMES.includes(name)) {\n return options.onDangerousProperty(name);\n }\n return name;\n}\n\nmodule.exports = OrderedObjParser;\n\n","'use strict';\n\n/**\n * \n * @param {array} node \n * @param {any} options \n * @returns \n */\nfunction prettify(node, options){\n return compress( node, options);\n}\n\n/**\n * \n * @param {array} arr \n * @param {object} options \n * @param {string} jPath \n * @returns object\n */\nfunction compress(arr, options, jPath){\n let text;\n const compressedObj = {};\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const property = propName(tagObj);\n let newJpath = \"\";\n if(jPath === undefined) newJpath = property;\n else newJpath = jPath + \".\" + property;\n\n if(property === options.textNodeName){\n if(text === undefined) text = tagObj[property];\n else text += \"\" + tagObj[property];\n }else if(property === undefined){\n continue;\n }else if(tagObj[property]){\n \n let val = compress(tagObj[property], options, newJpath);\n const isLeaf = isLeafTag(val, options);\n\n if(tagObj[\":@\"]){\n assignAttributes( val, tagObj[\":@\"], newJpath, options);\n }else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode){\n val = val[options.textNodeName];\n }else if(Object.keys(val).length === 0){\n if(options.alwaysCreateTextNode) val[options.textNodeName] = \"\";\n else val = \"\";\n }\n\n if(compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) {\n if(!Array.isArray(compressedObj[property])) {\n compressedObj[property] = [ compressedObj[property] ];\n }\n compressedObj[property].push(val);\n }else{\n //TODO: if a node is not an array, then check if it should be an array\n //also determine if it is a leaf node\n if (options.isArray(property, newJpath, isLeaf )) {\n compressedObj[property] = [val];\n }else{\n compressedObj[property] = val;\n }\n }\n }\n \n }\n // if(text && text.length > 0) compressedObj[options.textNodeName] = text;\n if(typeof text === \"string\"){\n if(text.length > 0) compressedObj[options.textNodeName] = text;\n }else if(text !== undefined) compressedObj[options.textNodeName] = text;\n return compressedObj;\n}\n\nfunction propName(obj){\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if(key !== \":@\") return key;\n }\n}\n\nfunction assignAttributes(obj, attrMap, jpath, options){\n if (attrMap) {\n const keys = Object.keys(attrMap);\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n const atrrName = keys[i];\n if (options.isArray(atrrName, jpath + \".\" + atrrName, true, true)) {\n obj[atrrName] = [ attrMap[atrrName] ];\n } else {\n obj[atrrName] = attrMap[atrrName];\n }\n }\n }\n}\n\nfunction isLeafTag(obj, options){\n const { textNodeName } = options;\n const propCount = Object.keys(obj).length;\n \n if (propCount === 0) {\n return true;\n }\n\n if (\n propCount === 1 &&\n (obj[textNodeName] || typeof obj[textNodeName] === \"boolean\" || obj[textNodeName] === 0)\n ) {\n return true;\n }\n\n return false;\n}\nexports.prettify = prettify;\n","const { buildOptions} = require(\"./OptionsBuilder\");\nconst OrderedObjParser = require(\"./OrderedObjParser\");\nconst { prettify} = require(\"./node2json\");\nconst validator = require('../validator');\n\nclass XMLParser{\n \n constructor(options){\n this.externalEntities = {};\n this.options = buildOptions(options);\n \n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(xmlData,validationOption){\n if(typeof xmlData === \"string\"){\n }else if( xmlData.toString){\n xmlData = xmlData.toString();\n }else{\n throw new Error(\"XML data is accepted in String or Bytes[] form.\")\n }\n if( validationOption){\n if(validationOption === true) validationOption = {}; //validate with default options\n \n const result = validator.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` )\n }\n }\n const orderedObjParser = new OrderedObjParser(this.options);\n orderedObjParser.addExternalEntities(this.externalEntities);\n const orderedResult = orderedObjParser.parseXml(xmlData);\n if(this.options.preserveOrder || orderedResult === undefined) return orderedResult;\n else return prettify(orderedResult, this.options);\n }\n\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(key, value){\n if(value.indexOf(\"&\") !== -1){\n throw new Error(\"Entity value can't have '&'\")\n }else if(key.indexOf(\"&\") !== -1 || key.indexOf(\";\") !== -1){\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '
'\")\n }else if(value === \"&\"){\n throw new Error(\"An entity with value '&' is not permitted\");\n }else{\n this.externalEntities[key] = value;\n }\n }\n}\n\nmodule.exports = XMLParser;","const EOL = \"\\n\";\n\n/**\n * \n * @param {array} jArray \n * @param {any} options \n * @returns \n */\nfunction toXml(jArray, options) {\n let indentation = \"\";\n if (options.format && options.indentBy.length > 0) {\n indentation = EOL;\n }\n return arrToStr(jArray, options, \"\", indentation);\n}\n\nfunction arrToStr(arr, options, jPath, indentation) {\n let xmlStr = \"\";\n let isPreviousElementTag = false;\n\n\n if (!Array.isArray(arr)) {\n // Non-array values (e.g. string tag values) should be treated as text content\n if (arr !== undefined && arr !== null) {\n let text = arr.toString();\n text = replaceEntitiesValue(text, options);\n return text;\n }\n return \"\";\n }\n\n for (let i = 0; i < arr.length; i++) {\n const tagObj = arr[i];\n const tagName = propName(tagObj);\n if (tagName === undefined) continue;\n\n let newJPath = \"\";\n if (jPath.length === 0) newJPath = tagName\n else newJPath = `${jPath}.${tagName}`;\n\n if (tagName === options.textNodeName) {\n let tagText = tagObj[tagName];\n if (!isStopNode(newJPath, options)) {\n tagText = options.tagValueProcessor(tagName, tagText);\n tagText = replaceEntitiesValue(tagText, options);\n }\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += tagText;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.cdataPropName) {\n if (isPreviousElementTag) {\n xmlStr += indentation;\n }\n xmlStr += `<![CDATA[${tagObj[tagName][0][options.textNodeName]}]]>`;\n isPreviousElementTag = false;\n continue;\n } else if (tagName === options.commentPropName) {\n xmlStr += indentation + `<!--${tagObj[tagName][0][options.textNodeName]}-->`;\n isPreviousElementTag = true;\n continue;\n } else if (tagName[0] === \"?\") {\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tempInd = tagName === \"?xml\" ? \"\" : indentation;\n let piTextNodeName = tagObj[tagName][0][options.textNodeName];\n piTextNodeName = piTextNodeName.length !== 0 ? \" \" + piTextNodeName : \"\"; //remove extra spacing\n xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`;\n isPreviousElementTag = true;\n continue;\n }\n let newIdentation = indentation;\n if (newIdentation !== \"\") {\n newIdentation += options.indentBy;\n }\n const attStr = attr_to_str(tagObj[\":@\"], options);\n const tagStart = indentation + `<${tagName}${attStr}`;\n const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation);\n if (options.unpairedTags.indexOf(tagName) !== -1) {\n if (options.suppressUnpairedNode) xmlStr += tagStart + \">\";\n else xmlStr += tagStart + \"/>\";\n } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {\n xmlStr += tagStart + \"/>\";\n } else if (tagValue && tagValue.endsWith(\">\")) {\n xmlStr += tagStart + `>${tagValue}${indentation}</${tagName}>`;\n } else {\n xmlStr += tagStart + \">\";\n if (tagValue && indentation !== \"\" && (tagValue.includes(\"/>\") || tagValue.includes(\"</\"))) {\n xmlStr += indentation + options.indentBy + tagValue + indentation;\n } else {\n xmlStr += tagValue;\n }\n xmlStr += `</${tagName}>`;\n }\n isPreviousElementTag = true;\n }\n\n return xmlStr;\n}\n\nfunction propName(obj) {\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n if (key !== \":@\") return key;\n }\n}\n\nfunction attr_to_str(attrMap, options) {\n let attrStr = \"\";\n if (attrMap && !options.ignoreAttributes) {\n for (let attr in attrMap) {\n if (!Object.prototype.hasOwnProperty.call(attrMap, attr)) continue;\n let attrVal = options.attributeValueProcessor(attr, attrMap[attr]);\n attrVal = replaceEntitiesValue(attrVal, options);\n if (attrVal === true && options.suppressBooleanAttributes) {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;\n } else {\n attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}=\"${attrVal}\"`;\n }\n }\n }\n return attrStr;\n}\n\nfunction isStopNode(jPath, options) {\n jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1);\n let tagName = jPath.substr(jPath.lastIndexOf(\".\") + 1);\n for (let index in options.stopNodes) {\n if (options.stopNodes[index] === jPath || options.stopNodes[index] === \"*.\" + tagName) return true;\n }\n return false;\n}\n\nfunction replaceEntitiesValue(textValue, options) {\n if (textValue && textValue.length > 0 && options.processEntities) {\n for (let i = 0; i < options.entities.length; i++) {\n const entity = options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\nmodule.exports = toXml;\n","'use strict';\n//parse Empty Node as self closing node\nconst buildFromOrderedJs = require('./orderedJs2Xml');\nconst getIgnoreAttributesFn = require('../ignoreAttributes')\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attributesGroupName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataPropName: false,\n format: false,\n indentBy: ' ',\n suppressEmptyNode: false,\n suppressUnpairedNode: true,\n suppressBooleanAttributes: true,\n tagValueProcessor: function(key, a) {\n return a;\n },\n attributeValueProcessor: function(attrName, a) {\n return a;\n },\n preserveOrder: false,\n commentPropName: false,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"'\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \""\" }\n ],\n processEntities: true,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: false\n};\n\nfunction Builder(options) {\n this.options = Object.assign({}, defaultOptions, options);\n if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n\n this.processTextOrObjNode = processTextOrObjNode\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n}\n\nBuilder.prototype.build = function(jObj) {\n if(this.options.preserveOrder){\n return buildFromOrderedJs(jObj, this.options);\n }else {\n if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){\n jObj = {\n [this.options.arrayNodeName] : jObj\n }\n }\n return this.j2x(jObj, 0, []).val;\n }\n};\n\nBuilder.prototype.j2x = function(jObj, level, ajPath) {\n let attrStr = '';\n let val = '';\n const jPath = ajPath.join('.')\n for (let key in jObj) {\n if(!Object.prototype.hasOwnProperty.call(jObj, key)) continue;\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node only if it is not an attribute\n if (this.isAttribute(key)) {\n val += '';\n }\n } else if (jObj[key] === null) {\n // null attribute should be ignored by the attribute list, but should not cause the tag closing\n if (this.isAttribute(key)) {\n val += '';\n } else if (key === this.options.cdataPropName) {\n val += '';\n } else if (key[0] === '?') {\n val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n } else {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n }\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextValNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr && !this.ignoreAttributesFn(attr, jPath)) {\n attrStr += this.buildAttrPairStr(attr, '' + jObj[key]);\n } else if (!attr) {\n //tag value\n if (key === this.options.textNodeName) {\n let newval = this.options.tagValueProcessor(key, '' + jObj[key]);\n val += this.replaceEntitiesValue(newval);\n } else {\n val += this.buildTextValNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n const arrLen = jObj[key].length;\n let listTagVal = \"\";\n let listTagAttr = \"\";\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n if(key[0] === \"?\") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar;\n else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n if(this.options.oneListGroup){\n const result = this.j2x(item, level + 1, ajPath.concat(key));\n listTagVal += result.val;\n if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {\n listTagAttr += result.attrStr\n }\n }else{\n listTagVal += this.processTextOrObjNode(item, key, level, ajPath)\n }\n } else {\n if (this.options.oneListGroup) {\n let textValue = this.options.tagValueProcessor(key, item);\n textValue = this.replaceEntitiesValue(textValue);\n listTagVal += textValue;\n } else {\n listTagVal += this.buildTextValNode(item, key, '', level);\n }\n }\n }\n if(this.options.oneListGroup){\n listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level);\n }\n val += listTagVal;\n } else {\n //nested node\n if (this.options.attributesGroupName && key === this.options.attributesGroupName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]);\n }\n } else {\n val += this.processTextOrObjNode(jObj[key], key, level, ajPath)\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nBuilder.prototype.buildAttrPairStr = function(attrName, val){\n val = this.options.attributeValueProcessor(attrName, '' + val);\n val = this.replaceEntitiesValue(val);\n if (this.options.suppressBooleanAttributes && val === \"true\") {\n return ' ' + attrName;\n } else return ' ' + attrName + '=\"' + val + '\"';\n}\n\nfunction processTextOrObjNode (object, key, level, ajPath) {\n const result = this.j2x(object, level + 1, ajPath.concat(key));\n if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {\n return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level);\n } else {\n return this.buildObjectNode(result.val, key, result.attrStr, level);\n }\n}\n\nBuilder.prototype.buildObjectNode = function(val, key, attrStr, level) {\n if(val === \"\"){\n if(key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }\n }else{\n\n let tagEndExp = '</' + key + this.tagEndChar;\n let piClosingChar = \"\";\n \n if(key[0] === \"?\") {\n piClosingChar = \"?\";\n tagEndExp = \"\";\n }\n \n // attrStr is an empty string in case the attribute came as undefined or null\n if ((attrStr || attrStr === '') && val.indexOf('<') === -1) {\n return ( this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp );\n } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {\n return this.indentate(level) + `<!--${val}-->` + this.newLine;\n }else {\n return (\n this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +\n val +\n this.indentate(level) + tagEndExp );\n }\n }\n}\n\nBuilder.prototype.closeTag = function(key){\n let closeTag = \"\";\n if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired\n if(!this.options.suppressUnpairedNode) closeTag = \"/\"\n }else if(this.options.suppressEmptyNode){ //empty\n closeTag = \"/\";\n }else{\n closeTag = `></${key}`\n }\n return closeTag;\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildObjectNode(val, key, attrStr, level);\n } else {\n if(key[0] === \"?\") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar;\n else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n // return this.buildTagStr(level,key, attrStr);\n }\n }\n}\n\nBuilder.prototype.buildTextValNode = function(val, key, attrStr, level) {\n if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {\n return this.indentate(level) + `<![CDATA[${val}]]>` + this.newLine;\n }else if (this.options.commentPropName !== false && key === this.options.commentPropName) {\n return this.indentate(level) + `<!--${val}-->` + this.newLine;\n }else if(key[0] === \"?\") {//PI tag\n return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; \n }else{\n let textValue = this.options.tagValueProcessor(key, val);\n textValue = this.replaceEntitiesValue(textValue);\n \n if( textValue === ''){\n return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;\n }else{\n return this.indentate(level) + '<' + key + attrStr + '>' +\n textValue +\n '</' + key + this.tagEndChar;\n }\n }\n}\n\nBuilder.prototype.replaceEntitiesValue = function(textValue){\n if(textValue && textValue.length > 0 && this.options.processEntities){\n for (let i=0; i<this.options.entities.length; i++) {\n const entity = this.options.entities[i];\n textValue = textValue.replace(entity.regex, entity.val);\n }\n }\n return textValue;\n}\n\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\n\nmodule.exports = Builder;\n","'use strict';\n\nconst validator = require('./validator');\nconst XMLParser = require('./xmlparser/XMLParser');\nconst XMLBuilder = require('./xmlbuilder/json2xml');\n\nmodule.exports = {\n XMLParser: XMLParser,\n XMLValidator: validator,\n XMLBuilder: XMLBuilder\n}","/**\n * Typed model mirroring the RQML schema.\n *\n * Every section of the canonical 2.1.0 schema is modeled: meta, catalogs,\n * domain, goals, scenarios, requirements, behavior, interfaces, verification,\n * trace, and governance. Optional sections and fields are `?`-typed and omitted\n * (never set to `undefined`) so that parse → serialize → parse round-trips\n * preserve model equality. Mixed-content prose (TextBlockType) is modeled as a\n * plain string; markup fidelity inside prose is a documented follow-up.\n */\n\nexport type ReqStatus = \"draft\" | \"review\" | \"approved\" | \"deprecated\";\nexport type Priority = \"must\" | \"should\" | \"may\";\nexport type ReqType = \"FR\" | \"NFR\" | \"IR\" | \"DR\" | \"SR\" | \"CR\" | \"PR\" | \"UXR\" | \"OR\";\n\nexport type TraceType =\n | \"refines\"\n | \"satisfies\"\n | \"dependsOn\"\n | \"conflictsWith\"\n | \"threatens\"\n | \"mitigates\"\n | \"verifiedBy\"\n | \"covers\"\n | \"implements\"\n | \"supersedes\"\n | \"consumesInterface\"\n | \"providesInterface\"\n | \"conformsTo\"\n | \"deprecates\"\n | \"breaks\";\n\nexport type TestType =\n | \"acceptance\"\n | \"integration\"\n | \"unit\"\n | \"security\"\n | \"performance\"\n | \"inspection\";\n\nexport type StateKind = \"initial\" | \"normal\" | \"final\";\n\n// ---------------------------------------------------------------------------\n// meta\n// ---------------------------------------------------------------------------\n\nexport interface Author {\n name: string;\n role?: string;\n org?: string;\n contact?: string;\n}\n\nexport interface Dates {\n created?: string;\n updated?: string;\n targetRelease?: string;\n}\n\nexport interface Conventions {\n normativeKeywords?: string;\n idConventions?: string;\n}\n\nexport interface Profile {\n id: string;\n type: string;\n description?: string;\n}\n\nexport interface Meta {\n title: string;\n system: string;\n summary?: string;\n authors: Author[];\n dates?: Dates;\n conventions?: Conventions;\n profiles?: Profile[];\n}\n\n// ---------------------------------------------------------------------------\n// catalogs\n// ---------------------------------------------------------------------------\n\nexport interface Term {\n id: string;\n name: string;\n definition: string;\n synonyms?: string[];\n}\n\nexport interface Actor {\n id: string;\n name: string;\n type?: string;\n description?: string;\n /** 2.0.1 only: `<goals><ref ref=\"…\"/></goals>`. Dropped in 2.1.0. */\n goalRefs?: string[];\n}\n\nexport interface Stakeholder {\n id: string;\n name: string;\n org?: string;\n concerns?: string;\n}\n\nexport interface Constraint {\n id: string;\n severity?: string;\n statement: string;\n source?: string;\n}\n\nexport interface Policy {\n id: string;\n source?: string;\n obligation: string;\n evidence?: string;\n}\n\nexport interface Decision {\n id: string;\n status?: ReqStatus;\n context: string;\n decision: string;\n alternatives?: string;\n consequences?: string;\n}\n\nexport interface Risk {\n id: string;\n severity?: string;\n statement: string;\n mitigation?: string;\n}\n\nexport interface Catalogs {\n glossary?: Term[];\n actors?: Actor[];\n stakeholders?: Stakeholder[];\n constraints?: Constraint[];\n policies?: Policy[];\n decisions?: Decision[];\n risks?: Risk[];\n}\n\n// ---------------------------------------------------------------------------\n// domain\n// ---------------------------------------------------------------------------\n\nexport interface Attribute {\n id: string;\n name: string;\n type: string;\n required?: boolean;\n description?: string;\n constraints?: string;\n}\n\nexport interface Entity {\n id: string;\n name: string;\n description?: string;\n attrs?: Attribute[];\n}\n\nexport interface BusinessRule {\n id: string;\n statement: string;\n examples?: string;\n}\n\nexport interface Domain {\n overview?: string;\n entities?: Entity[];\n businessRules?: BusinessRule[];\n}\n\n// ---------------------------------------------------------------------------\n// goals\n// ---------------------------------------------------------------------------\n\nexport interface Goal {\n id: string;\n title: string;\n priority?: Priority;\n status?: ReqStatus;\n ownerRef?: string;\n statement: string;\n rationale?: string;\n}\n\nexport interface QualityGoal {\n id: string;\n title: string;\n priority?: Priority;\n status?: ReqStatus;\n statement: string;\n metric?: string;\n}\n\nexport interface Obstacle {\n id: string;\n title: string;\n likelihood?: string;\n severity?: string;\n statement: string;\n mitigation?: string;\n}\n\nexport interface GoalLink {\n id: string;\n from: string;\n to: string;\n type: TraceType;\n confidence?: number;\n}\n\nexport interface Goals {\n goals?: Goal[];\n qualityGoals?: QualityGoal[];\n obstacles?: Obstacle[];\n goalLinks?: GoalLink[];\n}\n\n// ---------------------------------------------------------------------------\n// scenarios\n// ---------------------------------------------------------------------------\n\nexport interface Scenario {\n id: string;\n title: string;\n actorRef?: string;\n narrative: string;\n}\n\nexport interface Scenarios {\n scenarios?: Scenario[];\n misuseCases?: Scenario[];\n edgeCases?: Scenario[];\n}\n\n// ---------------------------------------------------------------------------\n// requirements\n// ---------------------------------------------------------------------------\n\nexport interface Criterion {\n id?: string;\n given?: string;\n when?: string;\n then: string;\n}\n\nexport interface Requirement {\n id: string;\n type: ReqType;\n title: string;\n status?: ReqStatus;\n priority?: Priority;\n ownerRef?: string;\n appliesTo?: string;\n statement: string;\n rationale?: string;\n notes?: string;\n acceptance: Criterion[];\n}\n\nexport interface RequirementPackage {\n id: string;\n title: string;\n ownerRef?: string;\n description?: string;\n requirements: Requirement[];\n}\n\n// ---------------------------------------------------------------------------\n// behavior\n// ---------------------------------------------------------------------------\n\nexport interface State {\n id: string;\n name: string;\n /** Omitted when absent; the XSD default \"normal\" is never materialized. */\n type?: StateKind;\n description?: string;\n onEntry?: string;\n onExit?: string;\n invariant?: string;\n}\n\nexport interface Transition {\n id: string;\n from: string;\n to: string;\n event?: string;\n description?: string;\n trigger?: string;\n guard?: string;\n action?: string;\n}\n\nexport interface StateMachine {\n id: string;\n name: string;\n initial: string;\n entityRef?: string;\n description?: string;\n states: State[];\n transitions?: Transition[];\n}\n\nexport interface Behavior {\n stateMachines?: StateMachine[];\n}\n\n// ---------------------------------------------------------------------------\n// interfaces\n// ---------------------------------------------------------------------------\n\nexport interface Endpoint {\n id: string;\n method: string;\n path: string;\n summary?: string;\n request?: string;\n response?: string;\n errors?: string;\n}\n\nexport interface Api {\n id: string;\n name: string;\n protocol?: string;\n auth?: string;\n description?: string;\n endpoints?: Endpoint[];\n}\n\n/** RQML `<event>` under `<interfaces>`. Named to avoid colliding with DOM Event. */\nexport interface ApiEvent {\n id: string;\n name: string;\n description?: string;\n payload?: string;\n}\n\nexport interface Interfaces {\n apis?: Api[];\n events?: ApiEvent[];\n}\n\n// ---------------------------------------------------------------------------\n// verification\n// ---------------------------------------------------------------------------\n\nexport interface TestSuite {\n id: string;\n title: string;\n description?: string;\n}\n\nexport interface TestCase {\n id: string;\n type: TestType;\n title: string;\n purpose?: string;\n steps?: string;\n expected?: string;\n}\n\nexport interface Verification {\n testSuites?: TestSuite[];\n testCases?: TestCase[];\n}\n\n// ---------------------------------------------------------------------------\n// trace\n// ---------------------------------------------------------------------------\n\n/** A trace endpoint that points at an element in this document by id. */\nexport interface LocalLocator {\n kind: \"local\";\n id: string;\n /** Optional schema hint (`@kind`) about the referenced element's category. */\n hintKind?: string;\n title?: string;\n}\n\n/** A trace endpoint pointing at another RQML document. */\nexport interface DocLocator {\n kind: \"doc\";\n uri: string;\n id: string;\n docId?: string;\n version?: string;\n git?: string;\n hintKind?: string;\n title?: string;\n}\n\n/** A trace endpoint pointing at any external artifact by URI. */\nexport interface ExternalLocator {\n kind: \"external\";\n uri: string;\n hintKind?: string;\n title?: string;\n}\n\nexport type Locator = LocalLocator | DocLocator | ExternalLocator;\n\nexport interface TraceEdge {\n id: string;\n type: TraceType;\n from: Locator;\n to: Locator;\n confidence?: number;\n status?: ReqStatus;\n createdBy?: string;\n createdAt?: string;\n tags?: string[];\n notes?: string;\n}\n\n// ---------------------------------------------------------------------------\n// governance\n// ---------------------------------------------------------------------------\n\nexport interface Issue {\n id: string;\n status?: string;\n owner?: string;\n statement: string;\n notes?: string;\n}\n\nexport interface Approval {\n id: string;\n role: string;\n status?: string;\n description?: string;\n}\n\nexport interface Governance {\n issues?: Issue[];\n approvals?: Approval[];\n}\n\n// ---------------------------------------------------------------------------\n// document\n// ---------------------------------------------------------------------------\n\n/**\n * The fully-typed model of a parsed `.rqml` document — the central type of the\n * library, produced by {@link parse} and consumed by {@link serialize},\n * {@link lint}, {@link resolveTrace}, and {@link buildOutline}.\n *\n * It covers all eleven RQML sections. `meta`, `packages`/`looseRequirements`,\n * and `trace` are always present (possibly empty); the other sections are\n * optional and omitted entirely when absent, so a round-trip through\n * {@link serialize} reproduces a minimal document rather than empty shells.\n */\nexport interface RqmlDocument {\n version: string;\n docId: string;\n status: ReqStatus;\n meta: Meta;\n catalogs?: Catalogs;\n domain?: Domain;\n goals?: Goals;\n scenarios?: Scenarios;\n /** Requirements grouped into packages. */\n packages: RequirementPackage[];\n /** Requirements declared directly under `<requirements>` (not in a package). */\n looseRequirements: Requirement[];\n behavior?: Behavior;\n interfaces?: Interfaces;\n verification?: Verification;\n trace: TraceEdge[];\n governance?: Governance;\n}\n\n/** Convenience: every requirement in the document, regardless of grouping. */\nexport function allRequirements(doc: RqmlDocument): Requirement[] {\n return [...doc.packages.flatMap((p) => p.requirements), ...doc.looseRequirements];\n}\n\n/** A reference to any id-bearing element, tagged with its element kind. */\nexport interface ElementRef {\n id: string;\n kind: string;\n}\n\n/**\n * Every id-bearing element across all sections, in document order. Drives the\n * generalized trace index so edges to non-requirement targets (goals, risks,\n * states, tests, …) resolve correctly.\n */\nexport function declaredElements(doc: RqmlDocument): ElementRef[] {\n const out: ElementRef[] = [];\n const push = (id: string | undefined, kind: string): void => {\n if (id !== undefined) out.push({ id, kind });\n };\n\n for (const p of doc.meta.profiles ?? []) push(p.id, \"profile\");\n\n const c = doc.catalogs;\n if (c) {\n for (const t of c.glossary ?? []) push(t.id, \"term\");\n for (const a of c.actors ?? []) push(a.id, \"actor\");\n for (const s of c.stakeholders ?? []) push(s.id, \"stakeholder\");\n for (const x of c.constraints ?? []) push(x.id, \"constraint\");\n for (const x of c.policies ?? []) push(x.id, \"policy\");\n for (const x of c.decisions ?? []) push(x.id, \"decision\");\n for (const x of c.risks ?? []) push(x.id, \"risk\");\n }\n\n const d = doc.domain;\n if (d) {\n for (const e of d.entities ?? []) {\n push(e.id, \"entity\");\n for (const a of e.attrs ?? []) push(a.id, \"attr\");\n }\n for (const r of d.businessRules ?? []) push(r.id, \"rule\");\n }\n\n const g = doc.goals;\n if (g) {\n for (const x of g.goals ?? []) push(x.id, \"goal\");\n for (const x of g.qualityGoals ?? []) push(x.id, \"qgoal\");\n for (const x of g.obstacles ?? []) push(x.id, \"obstacle\");\n for (const x of g.goalLinks ?? []) push(x.id, \"goalLink\");\n }\n\n const sc = doc.scenarios;\n if (sc) {\n for (const x of sc.scenarios ?? []) push(x.id, \"scenario\");\n for (const x of sc.misuseCases ?? []) push(x.id, \"misuseCase\");\n for (const x of sc.edgeCases ?? []) push(x.id, \"edgeCase\");\n }\n\n for (const p of doc.packages) {\n push(p.id, \"reqPackage\");\n for (const r of p.requirements) {\n push(r.id, \"req\");\n for (const cr of r.acceptance) push(cr.id, \"criterion\");\n }\n }\n for (const r of doc.looseRequirements) {\n push(r.id, \"req\");\n for (const cr of r.acceptance) push(cr.id, \"criterion\");\n }\n\n const b = doc.behavior;\n if (b) {\n for (const sm of b.stateMachines ?? []) {\n push(sm.id, \"stateMachine\");\n for (const st of sm.states) push(st.id, \"state\");\n for (const tr of sm.transitions ?? []) push(tr.id, \"transition\");\n }\n }\n\n const it = doc.interfaces;\n if (it) {\n for (const api of it.apis ?? []) {\n push(api.id, \"api\");\n for (const ep of api.endpoints ?? []) push(ep.id, \"endpoint\");\n }\n for (const ev of it.events ?? []) push(ev.id, \"event\");\n }\n\n const v = doc.verification;\n if (v) {\n for (const ts of v.testSuites ?? []) push(ts.id, \"testSuite\");\n for (const tc of v.testCases ?? []) push(tc.id, \"testCase\");\n }\n\n for (const e of doc.trace) push(e.id, \"edge\");\n\n const gv = doc.governance;\n if (gv) {\n for (const x of gv.issues ?? []) push(x.id, \"issue\");\n for (const x of gv.approvals ?? []) push(x.id, \"approval\");\n }\n\n return out;\n}\n","import type { RqmlDocument } from \"../model/types.js\";\n\n/**\n * Forward-compatibility stash, keyed by the parsed document. Now that every\n * section of the schema is modeled, this holds only what the model does not\n * recognize: unknown root attributes and unknown top-level elements (e.g. a\n * section added by a newer schema). The serializer re-emits these verbatim so a\n * parse → serialize round-trip of a forward-version document does not silently\n * drop content. For fully-modeled documents the stash is empty, and documents\n * built by hand simply have no entry.\n */\nconst rawSections = new WeakMap<RqmlDocument, Record<string, unknown>>();\n\nexport function setRawSections(\n doc: RqmlDocument,\n sections: Record<string, unknown>,\n): void {\n rawSections.set(doc, sections);\n}\n\nexport function getRawSections(doc: RqmlDocument): Record<string, unknown> | undefined {\n return rawSections.get(doc);\n}\n","import { XMLParser, XMLValidator } from \"fast-xml-parser\";\nimport type { Diagnostic } from \"../model/diagnostic.js\";\nimport type {\n Actor,\n Api,\n ApiEvent,\n Approval,\n Attribute,\n Author,\n Behavior,\n BusinessRule,\n Catalogs,\n Constraint,\n Conventions,\n Criterion,\n Dates,\n Decision,\n DocLocator,\n Domain,\n Endpoint,\n Entity,\n ExternalLocator,\n Goal,\n GoalLink,\n Goals,\n Governance,\n Interfaces,\n Issue,\n LocalLocator,\n Locator,\n Meta,\n Obstacle,\n Policy,\n Priority,\n Profile,\n QualityGoal,\n ReqStatus,\n ReqType,\n Requirement,\n RequirementPackage,\n Risk,\n RqmlDocument,\n Scenario,\n Scenarios,\n Stakeholder,\n State,\n StateKind,\n StateMachine,\n Term,\n TestCase,\n TestSuite,\n TestType,\n TraceEdge,\n TraceType,\n Transition,\n Verification,\n} from \"../model/types.js\";\nimport { setRawSections } from \"./raw.js\";\n\nexport type ParseResult =\n | { ok: true; document: RqmlDocument }\n | { ok: false; error: Diagnostic };\n\nconst ATTR_PREFIX = \"@_\";\n\n/**\n * Tags that may legitimately repeat and so must always parse to arrays.\n *\n * Note: `decision` is intentionally omitted. The element name is used both as a\n * repeatable container child (`<decisions><decision/></decisions>`) and as a\n * leaf text element (`<decision><decision>…</decision></decision>`); forcing it\n * to an array would break reading the leaf. `asArray`/`collect` normalize the\n * container occurrences instead.\n */\nconst ARRAY_TAGS = new Set([\n \"author\",\n \"profile\",\n \"term\",\n \"synonym\",\n \"actor\",\n \"stakeholder\",\n \"constraint\",\n \"policy\",\n \"risk\",\n \"ref\",\n \"entity\",\n \"attr\",\n \"rule\",\n \"goal\",\n \"qgoal\",\n \"obstacle\",\n \"goalLink\",\n \"scenario\",\n \"misuseCase\",\n \"edgeCase\",\n \"stateMachine\",\n \"state\",\n \"transition\",\n \"api\",\n \"endpoint\",\n \"event\",\n \"testSuite\",\n \"testCase\",\n \"reqPackage\",\n \"req\",\n \"criterion\",\n \"edge\",\n \"traceEdge\",\n \"issue\",\n \"approval\",\n]);\n\n/** Top-level sections this model maps. Anything else is kept in the raw stash. */\nconst MODELED_SECTIONS = new Set([\n \"meta\",\n \"catalogs\",\n \"domain\",\n \"goals\",\n \"scenarios\",\n \"requirements\",\n \"behavior\",\n \"interfaces\",\n \"verification\",\n \"trace\",\n \"governance\",\n]);\n\n/** Root attributes the serializer reconstructs from the model/defaults. */\nconst KNOWN_ROOT_ATTRS = new Set([\n \"@_xmlns\",\n \"@_xmlns:xsi\",\n \"@_xsi:schemaLocation\",\n \"@_version\",\n \"@_docId\",\n \"@_status\",\n]);\n\nconst parser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: ATTR_PREFIX,\n parseAttributeValue: false,\n parseTagValue: false,\n trimValues: true,\n isArray: (name) => ARRAY_TAGS.has(name),\n});\n\ntype Node = Record<string, unknown>;\n\nfunction isNode(v: unknown): v is Node {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction child(node: unknown, name: string): unknown {\n return isNode(node) ? node[name] : undefined;\n}\n\nfunction attr(node: unknown, name: string): string | undefined {\n if (!isNode(node)) return undefined;\n const v = node[ATTR_PREFIX + name];\n return v == null ? undefined : String(v);\n}\n\nfunction numAttr(node: unknown, name: string): number | undefined {\n const v = attr(node, name);\n return v === undefined ? undefined : Number(v);\n}\n\nfunction boolAttr(node: unknown, name: string): boolean | undefined {\n const v = attr(node, name);\n if (v === undefined) return undefined;\n if (v === \"true\" || v === \"1\") return true;\n if (v === \"false\" || v === \"0\") return false;\n return undefined;\n}\n\n/** Extract the text content of an element node (string, or { '#text': ... }). */\nfunction text(node: unknown): string | undefined {\n if (node == null) return undefined;\n if (typeof node === \"string\") return node;\n if (typeof node === \"number\" || typeof node === \"boolean\") return String(node);\n if (isNode(node)) {\n const t = node[\"#text\"];\n return t == null ? undefined : String(t);\n }\n return undefined;\n}\n\nfunction asArray<T>(v: T | T[] | undefined | null): T[] {\n if (v == null) return [];\n return Array.isArray(v) ? v : [v];\n}\n\n/**\n * Collect the `childName` children across one or more container occurrences.\n * Handles a single container node, an array of containers (a repeated schema\n * choice), or an absent container.\n */\nfunction collect(container: unknown, childName: string): unknown[] {\n return asArray(container).flatMap((c) => asArray(child(c, childName)));\n}\n\n// ---------------------------------------------------------------------------\n// meta\n// ---------------------------------------------------------------------------\n\nfunction parseAuthor(node: unknown): Author {\n const a: Author = { name: text(child(node, \"name\")) ?? \"\" };\n const role = text(child(node, \"role\"));\n const org = text(child(node, \"org\"));\n const contact = text(child(node, \"contact\"));\n if (role !== undefined) a.role = role;\n if (org !== undefined) a.org = org;\n if (contact !== undefined) a.contact = contact;\n return a;\n}\n\nfunction parseProfile(node: unknown): Profile {\n const p: Profile = {\n id: attr(node, \"id\") ?? \"\",\n type: attr(node, \"type\") ?? \"\",\n };\n const description = text(child(node, \"description\"));\n if (description !== undefined) p.description = description;\n return p;\n}\n\nfunction parseMeta(node: unknown): Meta {\n const meta: Meta = {\n title: text(child(node, \"title\")) ?? \"\",\n system: text(child(node, \"system\")) ?? \"\",\n authors: [],\n };\n const summary = text(child(node, \"summary\"));\n if (summary !== undefined) meta.summary = summary;\n meta.authors = asArray(child(child(node, \"authors\"), \"author\")).map(parseAuthor);\n\n const datesNode = child(node, \"dates\");\n if (isNode(datesNode)) {\n const dates: Dates = {};\n const created = text(datesNode.created);\n const updated = text(datesNode.updated);\n const targetRelease = text(datesNode.targetRelease);\n if (created !== undefined) dates.created = created;\n if (updated !== undefined) dates.updated = updated;\n if (targetRelease !== undefined) dates.targetRelease = targetRelease;\n if (Object.keys(dates).length > 0) meta.dates = dates;\n }\n\n const convNode = child(node, \"conventions\");\n if (isNode(convNode)) {\n const conv: Conventions = {};\n const nk = text(convNode.normativeKeywords);\n const ic = text(convNode.idConventions);\n if (nk !== undefined) conv.normativeKeywords = nk;\n if (ic !== undefined) conv.idConventions = ic;\n if (Object.keys(conv).length > 0) meta.conventions = conv;\n }\n\n const profiles = asArray(child(child(node, \"profiles\"), \"profile\")).map(parseProfile);\n if (profiles.length > 0) meta.profiles = profiles;\n\n return meta;\n}\n\n// ---------------------------------------------------------------------------\n// catalogs\n// ---------------------------------------------------------------------------\n\nfunction parseTerm(node: unknown): Term {\n const t: Term = {\n id: attr(node, \"id\") ?? \"\",\n name: text(child(node, \"name\")) ?? \"\",\n definition: text(child(node, \"definition\")) ?? \"\",\n };\n const synonyms = asArray(child(child(node, \"synonyms\"), \"synonym\")).map(\n (s) => text(s) ?? \"\",\n );\n if (synonyms.length > 0) t.synonyms = synonyms;\n return t;\n}\n\nfunction parseActor(node: unknown): Actor {\n const a: Actor = { id: attr(node, \"id\") ?? \"\", name: attr(node, \"name\") ?? \"\" };\n const type = attr(node, \"type\");\n const description = text(child(node, \"description\"));\n if (type !== undefined) a.type = type;\n if (description !== undefined) a.description = description;\n const refs = asArray(child(child(node, \"goals\"), \"ref\")).map(\n (r) => attr(r, \"ref\") ?? \"\",\n );\n if (refs.length > 0) a.goalRefs = refs;\n return a;\n}\n\nfunction parseStakeholder(node: unknown): Stakeholder {\n const s: Stakeholder = {\n id: attr(node, \"id\") ?? \"\",\n name: attr(node, \"name\") ?? \"\",\n };\n const org = attr(node, \"org\");\n const concerns = text(child(node, \"concerns\"));\n if (org !== undefined) s.org = org;\n if (concerns !== undefined) s.concerns = concerns;\n return s;\n}\n\nfunction parseConstraint(node: unknown): Constraint {\n const c: Constraint = {\n id: attr(node, \"id\") ?? \"\",\n statement: text(child(node, \"statement\")) ?? \"\",\n };\n const severity = attr(node, \"severity\");\n const source = text(child(node, \"source\"));\n if (severity !== undefined) c.severity = severity;\n if (source !== undefined) c.source = source;\n return c;\n}\n\nfunction parsePolicy(node: unknown): Policy {\n const p: Policy = {\n id: attr(node, \"id\") ?? \"\",\n obligation: text(child(node, \"obligation\")) ?? \"\",\n };\n const source = attr(node, \"source\");\n const evidence = text(child(node, \"evidence\"));\n if (source !== undefined) p.source = source;\n if (evidence !== undefined) p.evidence = evidence;\n return p;\n}\n\nfunction parseDecision(node: unknown): Decision {\n const d: Decision = {\n id: attr(node, \"id\") ?? \"\",\n context: text(child(node, \"context\")) ?? \"\",\n decision: text(child(node, \"decision\")) ?? \"\",\n };\n const status = attr(node, \"status\") as ReqStatus | undefined;\n const alternatives = text(child(node, \"alternatives\"));\n const consequences = text(child(node, \"consequences\"));\n if (status !== undefined) d.status = status;\n if (alternatives !== undefined) d.alternatives = alternatives;\n if (consequences !== undefined) d.consequences = consequences;\n return d;\n}\n\nfunction parseRisk(node: unknown): Risk {\n const r: Risk = {\n id: attr(node, \"id\") ?? \"\",\n statement: text(child(node, \"statement\")) ?? \"\",\n };\n const severity = attr(node, \"severity\");\n const mitigation = text(child(node, \"mitigation\"));\n if (severity !== undefined) r.severity = severity;\n if (mitigation !== undefined) r.mitigation = mitigation;\n return r;\n}\n\nfunction parseCatalogs(node: unknown): Catalogs | undefined {\n if (!isNode(node)) return undefined;\n const c: Catalogs = {};\n const glossary = collect(node.glossary, \"term\").map(parseTerm);\n const actors = collect(node.actors, \"actor\").map(parseActor);\n const stakeholders = collect(node.stakeholders, \"stakeholder\").map(parseStakeholder);\n const constraints = collect(node.constraints, \"constraint\").map(parseConstraint);\n const policies = collect(node.policies, \"policy\").map(parsePolicy);\n const decisions = collect(node.decisions, \"decision\").map(parseDecision);\n const risks = collect(node.risks, \"risk\").map(parseRisk);\n if (glossary.length > 0) c.glossary = glossary;\n if (actors.length > 0) c.actors = actors;\n if (stakeholders.length > 0) c.stakeholders = stakeholders;\n if (constraints.length > 0) c.constraints = constraints;\n if (policies.length > 0) c.policies = policies;\n if (decisions.length > 0) c.decisions = decisions;\n if (risks.length > 0) c.risks = risks;\n return Object.keys(c).length > 0 ? c : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// domain\n// ---------------------------------------------------------------------------\n\nfunction parseAttribute(node: unknown): Attribute {\n const a: Attribute = {\n id: attr(node, \"id\") ?? \"\",\n name: attr(node, \"name\") ?? \"\",\n type: attr(node, \"type\") ?? \"\",\n };\n const required = boolAttr(node, \"required\");\n const description = text(child(node, \"description\"));\n const constraints = text(child(node, \"constraints\"));\n if (required !== undefined) a.required = required;\n if (description !== undefined) a.description = description;\n if (constraints !== undefined) a.constraints = constraints;\n return a;\n}\n\nfunction parseEntity(node: unknown): Entity {\n const e: Entity = { id: attr(node, \"id\") ?? \"\", name: attr(node, \"name\") ?? \"\" };\n const description = text(child(node, \"description\"));\n if (description !== undefined) e.description = description;\n const attrs = asArray(child(node, \"attr\")).map(parseAttribute);\n if (attrs.length > 0) e.attrs = attrs;\n return e;\n}\n\nfunction parseBusinessRule(node: unknown): BusinessRule {\n const r: BusinessRule = {\n id: attr(node, \"id\") ?? \"\",\n statement: text(child(node, \"statement\")) ?? \"\",\n };\n const examples = text(child(node, \"examples\"));\n if (examples !== undefined) r.examples = examples;\n return r;\n}\n\nfunction parseDomain(node: unknown): Domain | undefined {\n if (!isNode(node)) return undefined;\n const d: Domain = {};\n const overview = text(child(node, \"overview\"));\n if (overview !== undefined) d.overview = overview;\n const entities = collect(node.entities, \"entity\").map(parseEntity);\n const rules = collect(node.businessRules, \"rule\").map(parseBusinessRule);\n if (entities.length > 0) d.entities = entities;\n if (rules.length > 0) d.businessRules = rules;\n return Object.keys(d).length > 0 ? d : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// goals\n// ---------------------------------------------------------------------------\n\nfunction parseGoal(node: unknown): Goal {\n const g: Goal = {\n id: attr(node, \"id\") ?? \"\",\n title: attr(node, \"title\") ?? \"\",\n statement: text(child(node, \"statement\")) ?? \"\",\n };\n const priority = attr(node, \"priority\") as Priority | undefined;\n const status = attr(node, \"status\") as ReqStatus | undefined;\n const ownerRef = attr(node, \"ownerRef\");\n const rationale = text(child(node, \"rationale\"));\n if (priority !== undefined) g.priority = priority;\n if (status !== undefined) g.status = status;\n if (ownerRef !== undefined) g.ownerRef = ownerRef;\n if (rationale !== undefined) g.rationale = rationale;\n return g;\n}\n\nfunction parseQualityGoal(node: unknown): QualityGoal {\n const q: QualityGoal = {\n id: attr(node, \"id\") ?? \"\",\n title: attr(node, \"title\") ?? \"\",\n statement: text(child(node, \"statement\")) ?? \"\",\n };\n const priority = attr(node, \"priority\") as Priority | undefined;\n const status = attr(node, \"status\") as ReqStatus | undefined;\n const metric = text(child(node, \"metric\"));\n if (priority !== undefined) q.priority = priority;\n if (status !== undefined) q.status = status;\n if (metric !== undefined) q.metric = metric;\n return q;\n}\n\nfunction parseObstacle(node: unknown): Obstacle {\n const o: Obstacle = {\n id: attr(node, \"id\") ?? \"\",\n title: attr(node, \"title\") ?? \"\",\n statement: text(child(node, \"statement\")) ?? \"\",\n };\n const likelihood = attr(node, \"likelihood\");\n const severity = attr(node, \"severity\");\n const mitigation = text(child(node, \"mitigation\"));\n if (likelihood !== undefined) o.likelihood = likelihood;\n if (severity !== undefined) o.severity = severity;\n if (mitigation !== undefined) o.mitigation = mitigation;\n return o;\n}\n\nfunction parseGoalLink(node: unknown): GoalLink {\n const gl: GoalLink = {\n id: attr(node, \"id\") ?? \"\",\n from: attr(node, \"from\") ?? \"\",\n to: attr(node, \"to\") ?? \"\",\n type: (attr(node, \"type\") ?? \"refines\") as TraceType,\n };\n const confidence = numAttr(node, \"confidence\");\n if (confidence !== undefined) gl.confidence = confidence;\n return gl;\n}\n\nfunction parseGoals(node: unknown): Goals | undefined {\n if (!isNode(node)) return undefined;\n const g: Goals = {};\n const goals = asArray(node.goal).map(parseGoal);\n const qgoals = asArray(node.qgoal).map(parseQualityGoal);\n const obstacles = asArray(node.obstacle).map(parseObstacle);\n const goalLinks = asArray(node.goalLink).map(parseGoalLink);\n if (goals.length > 0) g.goals = goals;\n if (qgoals.length > 0) g.qualityGoals = qgoals;\n if (obstacles.length > 0) g.obstacles = obstacles;\n if (goalLinks.length > 0) g.goalLinks = goalLinks;\n return Object.keys(g).length > 0 ? g : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// scenarios\n// ---------------------------------------------------------------------------\n\nfunction parseScenario(node: unknown): Scenario {\n const s: Scenario = {\n id: attr(node, \"id\") ?? \"\",\n title: attr(node, \"title\") ?? \"\",\n narrative: text(child(node, \"narrative\")) ?? \"\",\n };\n const actorRef = attr(node, \"actorRef\");\n if (actorRef !== undefined) s.actorRef = actorRef;\n return s;\n}\n\nfunction parseScenarios(node: unknown): Scenarios | undefined {\n if (!isNode(node)) return undefined;\n const s: Scenarios = {};\n const scenarios = asArray(node.scenario).map(parseScenario);\n const misuseCases = asArray(node.misuseCase).map(parseScenario);\n const edgeCases = asArray(node.edgeCase).map(parseScenario);\n if (scenarios.length > 0) s.scenarios = scenarios;\n if (misuseCases.length > 0) s.misuseCases = misuseCases;\n if (edgeCases.length > 0) s.edgeCases = edgeCases;\n return Object.keys(s).length > 0 ? s : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// requirements\n// ---------------------------------------------------------------------------\n\nfunction parseCriterion(node: unknown): Criterion {\n const crit: Criterion = { then: text(child(node, \"then\")) ?? \"\" };\n const id = attr(node, \"id\");\n const given = text(child(node, \"given\"));\n const when = text(child(node, \"when\"));\n if (id !== undefined) crit.id = id;\n if (given !== undefined) crit.given = given;\n if (when !== undefined) crit.when = when;\n return crit;\n}\n\nfunction parseRequirement(node: unknown): Requirement {\n const req: Requirement = {\n id: attr(node, \"id\") ?? \"\",\n type: (attr(node, \"type\") ?? \"FR\") as ReqType,\n title: attr(node, \"title\") ?? \"\",\n statement: text(child(node, \"statement\")) ?? \"\",\n acceptance: [],\n };\n const status = attr(node, \"status\") as ReqStatus | undefined;\n const priority = attr(node, \"priority\") as Priority | undefined;\n const ownerRef = attr(node, \"ownerRef\");\n const appliesTo = attr(node, \"appliesTo\");\n const rationale = text(child(node, \"rationale\"));\n const notes = text(child(node, \"notes\"));\n if (status !== undefined) req.status = status;\n if (priority !== undefined) req.priority = priority;\n if (ownerRef !== undefined) req.ownerRef = ownerRef;\n if (appliesTo !== undefined) req.appliesTo = appliesTo;\n if (rationale !== undefined) req.rationale = rationale;\n if (notes !== undefined) req.notes = notes;\n\n req.acceptance = asArray(child(child(node, \"acceptance\"), \"criterion\")).map(\n parseCriterion,\n );\n return req;\n}\n\nfunction parsePackage(node: unknown): RequirementPackage {\n const pkg: RequirementPackage = {\n id: attr(node, \"id\") ?? \"\",\n title: attr(node, \"title\") ?? \"\",\n requirements: asArray(child(node, \"req\")).map(parseRequirement),\n };\n const ownerRef = attr(node, \"ownerRef\");\n const description = text(child(node, \"description\"));\n if (ownerRef !== undefined) pkg.ownerRef = ownerRef;\n if (description !== undefined) pkg.description = description;\n return pkg;\n}\n\n// ---------------------------------------------------------------------------\n// behavior\n// ---------------------------------------------------------------------------\n\nfunction parseState(node: unknown): State {\n const st: State = { id: attr(node, \"id\") ?? \"\", name: attr(node, \"name\") ?? \"\" };\n const type = attr(node, \"type\") as StateKind | undefined;\n const description = text(child(node, \"description\"));\n const onEntry = text(child(node, \"onEntry\"));\n const onExit = text(child(node, \"onExit\"));\n const invariant = text(child(node, \"invariant\"));\n if (type !== undefined) st.type = type;\n if (description !== undefined) st.description = description;\n if (onEntry !== undefined) st.onEntry = onEntry;\n if (onExit !== undefined) st.onExit = onExit;\n if (invariant !== undefined) st.invariant = invariant;\n return st;\n}\n\nfunction parseTransition(node: unknown): Transition {\n const tr: Transition = {\n id: attr(node, \"id\") ?? \"\",\n from: attr(node, \"from\") ?? \"\",\n to: attr(node, \"to\") ?? \"\",\n };\n const event = attr(node, \"event\");\n const description = text(child(node, \"description\"));\n const trigger = text(child(node, \"trigger\"));\n const guard = text(child(node, \"guard\"));\n const action = text(child(node, \"action\"));\n if (event !== undefined) tr.event = event;\n if (description !== undefined) tr.description = description;\n if (trigger !== undefined) tr.trigger = trigger;\n if (guard !== undefined) tr.guard = guard;\n if (action !== undefined) tr.action = action;\n return tr;\n}\n\nfunction parseStateMachine(node: unknown): StateMachine {\n const sm: StateMachine = {\n id: attr(node, \"id\") ?? \"\",\n name: attr(node, \"name\") ?? \"\",\n initial: attr(node, \"initial\") ?? \"\",\n states: asArray(child(node, \"state\")).map(parseState),\n };\n const entityRef = attr(node, \"entityRef\");\n const description = text(child(node, \"description\"));\n if (entityRef !== undefined) sm.entityRef = entityRef;\n if (description !== undefined) sm.description = description;\n const transitions = asArray(child(node, \"transition\")).map(parseTransition);\n if (transitions.length > 0) sm.transitions = transitions;\n return sm;\n}\n\nfunction parseBehavior(node: unknown): Behavior | undefined {\n if (!isNode(node)) return undefined;\n const stateMachines = asArray(node.stateMachine).map(parseStateMachine);\n return stateMachines.length > 0 ? { stateMachines } : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// interfaces\n// ---------------------------------------------------------------------------\n\nfunction parseEndpoint(node: unknown): Endpoint {\n const ep: Endpoint = {\n id: attr(node, \"id\") ?? \"\",\n method: attr(node, \"method\") ?? \"\",\n path: attr(node, \"path\") ?? \"\",\n };\n const summary = text(child(node, \"summary\"));\n const request = text(child(node, \"request\"));\n const response = text(child(node, \"response\"));\n const errors = text(child(node, \"errors\"));\n if (summary !== undefined) ep.summary = summary;\n if (request !== undefined) ep.request = request;\n if (response !== undefined) ep.response = response;\n if (errors !== undefined) ep.errors = errors;\n return ep;\n}\n\nfunction parseApi(node: unknown): Api {\n const api: Api = { id: attr(node, \"id\") ?? \"\", name: attr(node, \"name\") ?? \"\" };\n const protocol = attr(node, \"protocol\");\n const auth = attr(node, \"auth\");\n const description = text(child(node, \"description\"));\n if (protocol !== undefined) api.protocol = protocol;\n if (auth !== undefined) api.auth = auth;\n if (description !== undefined) api.description = description;\n const endpoints = asArray(child(node, \"endpoint\")).map(parseEndpoint);\n if (endpoints.length > 0) api.endpoints = endpoints;\n return api;\n}\n\nfunction parseEvent(node: unknown): ApiEvent {\n const ev: ApiEvent = { id: attr(node, \"id\") ?? \"\", name: attr(node, \"name\") ?? \"\" };\n const description = text(child(node, \"description\"));\n const payload = text(child(node, \"payload\"));\n if (description !== undefined) ev.description = description;\n if (payload !== undefined) ev.payload = payload;\n return ev;\n}\n\nfunction parseInterfaces(node: unknown): Interfaces | undefined {\n if (!isNode(node)) return undefined;\n const i: Interfaces = {};\n const apis = asArray(node.api).map(parseApi);\n const events = asArray(node.event).map(parseEvent);\n if (apis.length > 0) i.apis = apis;\n if (events.length > 0) i.events = events;\n return Object.keys(i).length > 0 ? i : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// verification\n// ---------------------------------------------------------------------------\n\nfunction parseTestSuite(node: unknown): TestSuite {\n const ts: TestSuite = {\n id: attr(node, \"id\") ?? \"\",\n title: attr(node, \"title\") ?? \"\",\n };\n const description = text(child(node, \"description\"));\n if (description !== undefined) ts.description = description;\n return ts;\n}\n\nfunction parseTestCase(node: unknown): TestCase {\n const tc: TestCase = {\n id: attr(node, \"id\") ?? \"\",\n type: (attr(node, \"type\") ?? \"acceptance\") as TestType,\n title: attr(node, \"title\") ?? \"\",\n };\n const purpose = text(child(node, \"purpose\"));\n const steps = text(child(node, \"steps\"));\n const expected = text(child(node, \"expected\"));\n if (purpose !== undefined) tc.purpose = purpose;\n if (steps !== undefined) tc.steps = steps;\n if (expected !== undefined) tc.expected = expected;\n return tc;\n}\n\nfunction parseVerification(node: unknown): Verification | undefined {\n if (!isNode(node)) return undefined;\n const v: Verification = {};\n const testSuites = asArray(node.testSuite).map(parseTestSuite);\n const testCases = asArray(node.testCase).map(parseTestCase);\n if (testSuites.length > 0) v.testSuites = testSuites;\n if (testCases.length > 0) v.testCases = testCases;\n return Object.keys(v).length > 0 ? v : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// trace\n// ---------------------------------------------------------------------------\n\nfunction parseLocator(parent: unknown): Locator | undefined {\n const loc = child(parent, \"locator\");\n if (!isNode(loc)) return undefined;\n if (isNode(loc.local)) {\n const out: LocalLocator = { kind: \"local\", id: attr(loc.local, \"id\") ?? \"\" };\n const hintKind = attr(loc.local, \"kind\");\n const title = attr(loc.local, \"title\");\n if (hintKind !== undefined) out.hintKind = hintKind;\n if (title !== undefined) out.title = title;\n return out;\n }\n if (isNode(loc.doc)) {\n const out: DocLocator = {\n kind: \"doc\",\n uri: attr(loc.doc, \"uri\") ?? \"\",\n id: attr(loc.doc, \"id\") ?? \"\",\n };\n const docId = attr(loc.doc, \"docId\");\n const version = attr(loc.doc, \"version\");\n const git = attr(loc.doc, \"git\");\n const hintKind = attr(loc.doc, \"kind\");\n const title = attr(loc.doc, \"title\");\n if (docId !== undefined) out.docId = docId;\n if (version !== undefined) out.version = version;\n if (git !== undefined) out.git = git;\n if (hintKind !== undefined) out.hintKind = hintKind;\n if (title !== undefined) out.title = title;\n return out;\n }\n if (isNode(loc.external)) {\n const out: ExternalLocator = {\n kind: \"external\",\n uri: attr(loc.external, \"uri\") ?? \"\",\n };\n const hintKind = attr(loc.external, \"kind\");\n const title = attr(loc.external, \"title\");\n if (hintKind !== undefined) out.hintKind = hintKind;\n if (title !== undefined) out.title = title;\n return out;\n }\n return undefined;\n}\n\n/** Apply the optional metadata shared by nested and flat trace edges. */\nfunction applyEdgeMeta(edge: TraceEdge, node: unknown): void {\n const confidence = numAttr(node, \"confidence\");\n const status = attr(node, \"status\") as ReqStatus | undefined;\n const createdBy = attr(node, \"createdBy\");\n const createdAt = attr(node, \"createdAt\");\n const tags = attr(node, \"tags\");\n const notes = text(child(node, \"notes\"));\n if (confidence !== undefined) edge.confidence = confidence;\n if (status !== undefined) edge.status = status;\n if (createdBy !== undefined) edge.createdBy = createdBy;\n if (createdAt !== undefined) edge.createdAt = createdAt;\n if (tags !== undefined) {\n const arr = tags.split(/\\s+/).filter((t) => t.length > 0);\n if (arr.length > 0) edge.tags = arr;\n }\n if (notes !== undefined) edge.notes = notes;\n}\n\n/** Nested 2.1.0 `<edge><from><locator>…</locator></from>…</edge>`. */\nfunction parseEdge(node: unknown): TraceEdge | undefined {\n const from = parseLocator(child(node, \"from\"));\n const to = parseLocator(child(node, \"to\"));\n if (!from || !to) return undefined;\n const edge: TraceEdge = {\n id: attr(node, \"id\") ?? \"\",\n type: (attr(node, \"type\") ?? \"satisfies\") as TraceType,\n from,\n to,\n };\n applyEdgeMeta(edge, node);\n return edge;\n}\n\n/** Flat 2.0.1 `<traceEdge from=\"A\" to=\"B\" type=\"…\"/>`. */\nfunction parseFlatEdge(node: unknown): TraceEdge | undefined {\n const fromId = attr(node, \"from\");\n const toId = attr(node, \"to\");\n const fromUri = attr(node, \"fromUri\");\n const toUri = attr(node, \"toUri\");\n let from: Locator | undefined;\n let to: Locator | undefined;\n if (fromId !== undefined) from = { kind: \"local\", id: fromId };\n else if (fromUri !== undefined) from = { kind: \"external\", uri: fromUri };\n if (toId !== undefined) to = { kind: \"local\", id: toId };\n else if (toUri !== undefined) to = { kind: \"external\", uri: toUri };\n if (!from || !to) return undefined;\n const edge: TraceEdge = {\n id: attr(node, \"id\") ?? \"\",\n type: (attr(node, \"type\") ?? \"satisfies\") as TraceType,\n from,\n to,\n };\n applyEdgeMeta(edge, node);\n return edge;\n}\n\n/** Read whichever trace serialization is present and normalize to TraceEdge[]. */\nfunction parseTrace(root: Node): TraceEdge[] {\n const traceNode = child(root, \"trace\");\n if (!isNode(traceNode)) return [];\n const edges: TraceEdge[] = [];\n for (const e of asArray(traceNode.edge)) {\n const parsed = parseEdge(e);\n if (parsed) edges.push(parsed);\n }\n for (const e of asArray(traceNode.traceEdge)) {\n const parsed = parseFlatEdge(e);\n if (parsed) edges.push(parsed);\n }\n return edges;\n}\n\n// ---------------------------------------------------------------------------\n// governance\n// ---------------------------------------------------------------------------\n\nfunction parseIssue(node: unknown): Issue {\n const iss: Issue = {\n id: attr(node, \"id\") ?? \"\",\n statement: text(child(node, \"statement\")) ?? \"\",\n };\n const status = attr(node, \"status\");\n const owner = attr(node, \"owner\");\n const notes = text(child(node, \"notes\"));\n if (status !== undefined) iss.status = status;\n if (owner !== undefined) iss.owner = owner;\n if (notes !== undefined) iss.notes = notes;\n return iss;\n}\n\nfunction parseApproval(node: unknown): Approval {\n const ap: Approval = { id: attr(node, \"id\") ?? \"\", role: attr(node, \"role\") ?? \"\" };\n const status = attr(node, \"status\");\n const description = text(child(node, \"description\"));\n if (status !== undefined) ap.status = status;\n if (description !== undefined) ap.description = description;\n return ap;\n}\n\nfunction parseGovernance(node: unknown): Governance | undefined {\n if (!isNode(node)) return undefined;\n const g: Governance = {};\n const issues = asArray(node.issue).map(parseIssue);\n const approvals = asArray(node.approval).map(parseApproval);\n if (issues.length > 0) g.issues = issues;\n if (approvals.length > 0) g.approvals = approvals;\n return Object.keys(g).length > 0 ? g : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// document\n// ---------------------------------------------------------------------------\n\n/**\n * Parse a .rqml document string into a typed model.\n *\n * Returns a structured {@link Diagnostic} instead of throwing when the input\n * is not well-formed XML.\n */\nexport function parse(xml: string): ParseResult {\n const wellFormed = XMLValidator.validate(xml, { allowBooleanAttributes: true });\n if (wellFormed !== true) {\n const err = wellFormed.err;\n const diag: Diagnostic = {\n source: \"parse\",\n severity: \"error\",\n message: err.msg,\n };\n if (typeof err.line === \"number\") diag.line = err.line;\n if (typeof err.col === \"number\") diag.column = err.col;\n return { ok: false, error: diag };\n }\n\n let obj: Node;\n try {\n obj = parser.parse(xml) as Node;\n } catch (e) {\n return {\n ok: false,\n error: {\n source: \"parse\",\n severity: \"error\",\n message: e instanceof Error ? e.message : String(e),\n },\n };\n }\n\n const root = obj.rqml;\n if (!isNode(root)) {\n return {\n ok: false,\n error: {\n source: \"parse\",\n severity: \"error\",\n message: \"Missing root <rqml> element.\",\n },\n };\n }\n\n const requirements = isNode(root.requirements) ? root.requirements : {};\n const document: RqmlDocument = {\n version: attr(root, \"version\") ?? \"\",\n docId: attr(root, \"docId\") ?? \"\",\n status: (attr(root, \"status\") ?? \"draft\") as ReqStatus,\n meta: parseMeta(root.meta),\n packages: asArray(requirements.reqPackage).map(parsePackage),\n looseRequirements: asArray(requirements.req).map(parseRequirement),\n trace: parseTrace(root),\n };\n\n const catalogs = parseCatalogs(root.catalogs);\n if (catalogs) document.catalogs = catalogs;\n const domain = parseDomain(root.domain);\n if (domain) document.domain = domain;\n const goals = parseGoals(root.goals);\n if (goals) document.goals = goals;\n const scenarios = parseScenarios(root.scenarios);\n if (scenarios) document.scenarios = scenarios;\n const behavior = parseBehavior(root.behavior);\n if (behavior) document.behavior = behavior;\n const interfaces = parseInterfaces(root.interfaces);\n if (interfaces) document.interfaces = interfaces;\n const verification = parseVerification(root.verification);\n if (verification) document.verification = verification;\n const governance = parseGovernance(root.governance);\n if (governance) document.governance = governance;\n\n // Forward-compatibility safety net: retain only unknown root attributes and\n // unknown top-level elements. Known sections and root attributes are fully\n // reconstructed by the serializer from the model.\n const raw: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(root)) {\n if (key.startsWith(ATTR_PREFIX)) {\n if (!KNOWN_ROOT_ATTRS.has(key)) raw[key] = value;\n } else if (!MODELED_SECTIONS.has(key)) {\n raw[key] = value;\n }\n }\n setRawSections(document, raw);\n\n return { ok: true, document };\n}\n","import { XMLBuilder } from \"fast-xml-parser\";\nimport type {\n Actor,\n Api,\n ApiEvent,\n Approval,\n Attribute,\n Author,\n Behavior,\n BusinessRule,\n Catalogs,\n Constraint,\n Criterion,\n Decision,\n Domain,\n Endpoint,\n Entity,\n Goal,\n GoalLink,\n Goals,\n Governance,\n Interfaces,\n Issue,\n Locator,\n Meta,\n Obstacle,\n Policy,\n Profile,\n QualityGoal,\n Requirement,\n RequirementPackage,\n Risk,\n RqmlDocument,\n Scenario,\n Scenarios,\n Stakeholder,\n State,\n StateMachine,\n Term,\n TestCase,\n TestSuite,\n TraceEdge,\n Transition,\n Verification,\n} from \"../model/types.js\";\nimport { getRawSections } from \"./raw.js\";\n\nconst ATTR_PREFIX = \"@_\";\n\nconst XSI = \"http://www.w3.org/2001/XMLSchema-instance\";\nconst NS_210 = {\n xmlns: \"https://rqml.org/schema/2.1.0\",\n schemaLocation: \"https://rqml.org/schema/2.1.0 https://rqml.org/schema/rqml-2.1.0.xsd\",\n};\nconst NS_201 = {\n xmlns: \"https://rqml.org/schema/2.0.1\",\n schemaLocation: \"https://rqml.org/schema/2.0.1 https://rqml.org/schema/rqml-2.0.1.xsd\",\n};\n\nfunction namespaceFor(version: string): { xmlns: string; schemaLocation: string } {\n return version === \"2.0.1\" ? NS_201 : NS_210;\n}\n\n/**\n * Canonical top-level section order (after `<meta>`, around `<requirements>`):\n * meta, catalogs, domain, goals, scenarios, requirements, behavior,\n * interfaces, verification, trace, governance. The assembly below inserts\n * sections in exactly this order so the emitted document is schema-valid.\n */\n\nconst builder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: ATTR_PREFIX,\n format: true,\n suppressEmptyNode: true,\n // Keep value=\"true\" attributes intact; otherwise XMLBuilder collapses them to\n // valueless attributes (e.g. `required`), which the parser then drops.\n suppressBooleanAttributes: false,\n});\n\ntype Obj = Record<string, unknown>;\n\nfunction setIfDefined(obj: Obj, key: string, value: unknown): void {\n if (value !== undefined && value !== null) obj[key] = value;\n}\n\n// ---------------------------------------------------------------------------\n// meta\n// ---------------------------------------------------------------------------\n\nfunction buildAuthor(a: Author): Obj {\n const out: Obj = { name: a.name };\n setIfDefined(out, \"role\", a.role);\n setIfDefined(out, \"org\", a.org);\n setIfDefined(out, \"contact\", a.contact);\n return out;\n}\n\nfunction buildProfile(p: Profile): Obj {\n const out: Obj = { \"@_id\": p.id, \"@_type\": p.type };\n setIfDefined(out, \"description\", p.description);\n return out;\n}\n\nfunction buildMeta(meta: Meta): Obj {\n const out: Obj = { title: meta.title, system: meta.system };\n setIfDefined(out, \"summary\", meta.summary);\n if (meta.authors.length > 0) {\n out.authors = { author: meta.authors.map(buildAuthor) };\n }\n if (meta.dates) {\n const dates: Obj = {};\n setIfDefined(dates, \"created\", meta.dates.created);\n setIfDefined(dates, \"updated\", meta.dates.updated);\n setIfDefined(dates, \"targetRelease\", meta.dates.targetRelease);\n out.dates = dates;\n }\n if (meta.conventions) {\n const conv: Obj = {};\n setIfDefined(conv, \"normativeKeywords\", meta.conventions.normativeKeywords);\n setIfDefined(conv, \"idConventions\", meta.conventions.idConventions);\n out.conventions = conv;\n }\n if (meta.profiles && meta.profiles.length > 0) {\n out.profiles = { profile: meta.profiles.map(buildProfile) };\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// catalogs\n// ---------------------------------------------------------------------------\n\nfunction buildTerm(t: Term): Obj {\n const out: Obj = { \"@_id\": t.id, name: t.name, definition: t.definition };\n if (t.synonyms && t.synonyms.length > 0) {\n out.synonyms = { synonym: t.synonyms };\n }\n return out;\n}\n\nfunction buildActor(a: Actor): Obj {\n const out: Obj = { \"@_id\": a.id, \"@_name\": a.name };\n setIfDefined(out, \"@_type\", a.type);\n setIfDefined(out, \"description\", a.description);\n if (a.goalRefs && a.goalRefs.length > 0) {\n out.goals = { ref: a.goalRefs.map((r) => ({ \"@_ref\": r })) };\n }\n return out;\n}\n\nfunction buildStakeholder(s: Stakeholder): Obj {\n const out: Obj = { \"@_id\": s.id, \"@_name\": s.name };\n setIfDefined(out, \"@_org\", s.org);\n setIfDefined(out, \"concerns\", s.concerns);\n return out;\n}\n\nfunction buildConstraint(c: Constraint): Obj {\n const out: Obj = { \"@_id\": c.id };\n setIfDefined(out, \"@_severity\", c.severity);\n out.statement = c.statement;\n setIfDefined(out, \"source\", c.source);\n return out;\n}\n\nfunction buildPolicy(p: Policy): Obj {\n const out: Obj = { \"@_id\": p.id };\n setIfDefined(out, \"@_source\", p.source);\n out.obligation = p.obligation;\n setIfDefined(out, \"evidence\", p.evidence);\n return out;\n}\n\nfunction buildDecision(d: Decision): Obj {\n const out: Obj = { \"@_id\": d.id };\n setIfDefined(out, \"@_status\", d.status);\n out.context = d.context;\n out.decision = d.decision;\n setIfDefined(out, \"alternatives\", d.alternatives);\n setIfDefined(out, \"consequences\", d.consequences);\n return out;\n}\n\nfunction buildRisk(r: Risk): Obj {\n const out: Obj = { \"@_id\": r.id };\n setIfDefined(out, \"@_severity\", r.severity);\n out.statement = r.statement;\n setIfDefined(out, \"mitigation\", r.mitigation);\n return out;\n}\n\nfunction buildCatalogs(c: Catalogs): Obj {\n const out: Obj = {};\n if (c.glossary && c.glossary.length > 0) {\n out.glossary = { term: c.glossary.map(buildTerm) };\n }\n if (c.actors && c.actors.length > 0) {\n out.actors = { actor: c.actors.map(buildActor) };\n }\n if (c.stakeholders && c.stakeholders.length > 0) {\n out.stakeholders = { stakeholder: c.stakeholders.map(buildStakeholder) };\n }\n if (c.constraints && c.constraints.length > 0) {\n out.constraints = { constraint: c.constraints.map(buildConstraint) };\n }\n if (c.policies && c.policies.length > 0) {\n out.policies = { policy: c.policies.map(buildPolicy) };\n }\n if (c.decisions && c.decisions.length > 0) {\n out.decisions = { decision: c.decisions.map(buildDecision) };\n }\n if (c.risks && c.risks.length > 0) {\n out.risks = { risk: c.risks.map(buildRisk) };\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// domain\n// ---------------------------------------------------------------------------\n\nfunction buildAttribute(a: Attribute): Obj {\n const out: Obj = { \"@_id\": a.id, \"@_name\": a.name, \"@_type\": a.type };\n // Emit as a string so XMLBuilder does not collapse a `true` boolean into a\n // valueless attribute (suppressBooleanAttributes), which the parser then drops.\n if (a.required !== undefined) out[\"@_required\"] = a.required ? \"true\" : \"false\";\n setIfDefined(out, \"description\", a.description);\n setIfDefined(out, \"constraints\", a.constraints);\n return out;\n}\n\nfunction buildEntity(e: Entity): Obj {\n const out: Obj = { \"@_id\": e.id, \"@_name\": e.name };\n setIfDefined(out, \"description\", e.description);\n if (e.attrs && e.attrs.length > 0) out.attr = e.attrs.map(buildAttribute);\n return out;\n}\n\nfunction buildBusinessRule(r: BusinessRule): Obj {\n const out: Obj = { \"@_id\": r.id, statement: r.statement };\n setIfDefined(out, \"examples\", r.examples);\n return out;\n}\n\nfunction buildDomain(d: Domain): Obj {\n const out: Obj = {};\n setIfDefined(out, \"overview\", d.overview);\n if (d.entities && d.entities.length > 0) {\n out.entities = { entity: d.entities.map(buildEntity) };\n }\n if (d.businessRules && d.businessRules.length > 0) {\n out.businessRules = { rule: d.businessRules.map(buildBusinessRule) };\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// goals\n// ---------------------------------------------------------------------------\n\nfunction buildGoal(g: Goal): Obj {\n const out: Obj = { \"@_id\": g.id, \"@_title\": g.title };\n setIfDefined(out, \"@_priority\", g.priority);\n setIfDefined(out, \"@_status\", g.status);\n setIfDefined(out, \"@_ownerRef\", g.ownerRef);\n out.statement = g.statement;\n setIfDefined(out, \"rationale\", g.rationale);\n return out;\n}\n\nfunction buildQualityGoal(q: QualityGoal): Obj {\n const out: Obj = { \"@_id\": q.id, \"@_title\": q.title };\n setIfDefined(out, \"@_priority\", q.priority);\n setIfDefined(out, \"@_status\", q.status);\n out.statement = q.statement;\n setIfDefined(out, \"metric\", q.metric);\n return out;\n}\n\nfunction buildObstacle(o: Obstacle): Obj {\n const out: Obj = { \"@_id\": o.id, \"@_title\": o.title };\n setIfDefined(out, \"@_likelihood\", o.likelihood);\n setIfDefined(out, \"@_severity\", o.severity);\n out.statement = o.statement;\n setIfDefined(out, \"mitigation\", o.mitigation);\n return out;\n}\n\nfunction buildGoalLink(gl: GoalLink): Obj {\n const out: Obj = {\n \"@_id\": gl.id,\n \"@_from\": gl.from,\n \"@_to\": gl.to,\n \"@_type\": gl.type,\n };\n setIfDefined(out, \"@_confidence\", gl.confidence);\n return out;\n}\n\nfunction buildGoals(g: Goals): Obj {\n const out: Obj = {};\n if (g.goals && g.goals.length > 0) out.goal = g.goals.map(buildGoal);\n if (g.qualityGoals && g.qualityGoals.length > 0) {\n out.qgoal = g.qualityGoals.map(buildQualityGoal);\n }\n if (g.obstacles && g.obstacles.length > 0) {\n out.obstacle = g.obstacles.map(buildObstacle);\n }\n if (g.goalLinks && g.goalLinks.length > 0) {\n out.goalLink = g.goalLinks.map(buildGoalLink);\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// scenarios\n// ---------------------------------------------------------------------------\n\nfunction buildScenario(s: Scenario): Obj {\n const out: Obj = { \"@_id\": s.id, \"@_title\": s.title };\n setIfDefined(out, \"@_actorRef\", s.actorRef);\n out.narrative = s.narrative;\n return out;\n}\n\nfunction buildScenarios(s: Scenarios): Obj {\n const out: Obj = {};\n if (s.scenarios && s.scenarios.length > 0) {\n out.scenario = s.scenarios.map(buildScenario);\n }\n if (s.misuseCases && s.misuseCases.length > 0) {\n out.misuseCase = s.misuseCases.map(buildScenario);\n }\n if (s.edgeCases && s.edgeCases.length > 0) {\n out.edgeCase = s.edgeCases.map(buildScenario);\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// requirements\n// ---------------------------------------------------------------------------\n\nfunction buildCriterion(c: Criterion): Obj {\n const out: Obj = {};\n setIfDefined(out, \"@_id\", c.id);\n setIfDefined(out, \"given\", c.given);\n setIfDefined(out, \"when\", c.when);\n out.then = c.then;\n return out;\n}\n\nfunction buildRequirement(req: Requirement): Obj {\n const out: Obj = {\n \"@_id\": req.id,\n \"@_type\": req.type,\n \"@_title\": req.title,\n };\n setIfDefined(out, \"@_status\", req.status);\n setIfDefined(out, \"@_priority\", req.priority);\n setIfDefined(out, \"@_ownerRef\", req.ownerRef);\n setIfDefined(out, \"@_appliesTo\", req.appliesTo);\n out.statement = req.statement;\n setIfDefined(out, \"rationale\", req.rationale);\n setIfDefined(out, \"notes\", req.notes);\n if (req.acceptance.length > 0) {\n out.acceptance = { criterion: req.acceptance.map(buildCriterion) };\n }\n return out;\n}\n\nfunction buildPackage(pkg: RequirementPackage): Obj {\n const out: Obj = { \"@_id\": pkg.id, \"@_title\": pkg.title };\n setIfDefined(out, \"@_ownerRef\", pkg.ownerRef);\n setIfDefined(out, \"description\", pkg.description);\n if (pkg.requirements.length > 0) {\n out.req = pkg.requirements.map(buildRequirement);\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// behavior\n// ---------------------------------------------------------------------------\n\nfunction buildState(st: State): Obj {\n const out: Obj = { \"@_id\": st.id, \"@_name\": st.name };\n setIfDefined(out, \"@_type\", st.type);\n setIfDefined(out, \"description\", st.description);\n setIfDefined(out, \"onEntry\", st.onEntry);\n setIfDefined(out, \"onExit\", st.onExit);\n setIfDefined(out, \"invariant\", st.invariant);\n return out;\n}\n\nfunction buildTransition(tr: Transition): Obj {\n const out: Obj = { \"@_id\": tr.id, \"@_from\": tr.from, \"@_to\": tr.to };\n setIfDefined(out, \"@_event\", tr.event);\n setIfDefined(out, \"description\", tr.description);\n setIfDefined(out, \"trigger\", tr.trigger);\n setIfDefined(out, \"guard\", tr.guard);\n setIfDefined(out, \"action\", tr.action);\n return out;\n}\n\nfunction buildStateMachine(sm: StateMachine): Obj {\n const out: Obj = { \"@_id\": sm.id, \"@_name\": sm.name };\n setIfDefined(out, \"@_entityRef\", sm.entityRef);\n out[\"@_initial\"] = sm.initial;\n setIfDefined(out, \"description\", sm.description);\n if (sm.states.length > 0) out.state = sm.states.map(buildState);\n if (sm.transitions && sm.transitions.length > 0) {\n out.transition = sm.transitions.map(buildTransition);\n }\n return out;\n}\n\nfunction buildBehavior(b: Behavior): Obj {\n const out: Obj = {};\n if (b.stateMachines && b.stateMachines.length > 0) {\n out.stateMachine = b.stateMachines.map(buildStateMachine);\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// interfaces\n// ---------------------------------------------------------------------------\n\nfunction buildEndpoint(ep: Endpoint): Obj {\n const out: Obj = { \"@_id\": ep.id, \"@_method\": ep.method, \"@_path\": ep.path };\n setIfDefined(out, \"summary\", ep.summary);\n setIfDefined(out, \"request\", ep.request);\n setIfDefined(out, \"response\", ep.response);\n setIfDefined(out, \"errors\", ep.errors);\n return out;\n}\n\nfunction buildApi(api: Api): Obj {\n const out: Obj = { \"@_id\": api.id, \"@_name\": api.name };\n setIfDefined(out, \"@_protocol\", api.protocol);\n setIfDefined(out, \"@_auth\", api.auth);\n setIfDefined(out, \"description\", api.description);\n if (api.endpoints && api.endpoints.length > 0) {\n out.endpoint = api.endpoints.map(buildEndpoint);\n }\n return out;\n}\n\nfunction buildEvent(ev: ApiEvent): Obj {\n const out: Obj = { \"@_id\": ev.id, \"@_name\": ev.name };\n setIfDefined(out, \"description\", ev.description);\n setIfDefined(out, \"payload\", ev.payload);\n return out;\n}\n\nfunction buildInterfaces(i: Interfaces): Obj {\n const out: Obj = {};\n if (i.apis && i.apis.length > 0) out.api = i.apis.map(buildApi);\n if (i.events && i.events.length > 0) out.event = i.events.map(buildEvent);\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// verification\n// ---------------------------------------------------------------------------\n\nfunction buildTestSuite(ts: TestSuite): Obj {\n const out: Obj = { \"@_id\": ts.id, \"@_title\": ts.title };\n setIfDefined(out, \"description\", ts.description);\n return out;\n}\n\nfunction buildTestCase(tc: TestCase): Obj {\n const out: Obj = { \"@_id\": tc.id, \"@_type\": tc.type, \"@_title\": tc.title };\n setIfDefined(out, \"purpose\", tc.purpose);\n setIfDefined(out, \"steps\", tc.steps);\n setIfDefined(out, \"expected\", tc.expected);\n return out;\n}\n\nfunction buildVerification(v: Verification): Obj {\n const out: Obj = {};\n if (v.testSuites && v.testSuites.length > 0) {\n out.testSuite = v.testSuites.map(buildTestSuite);\n }\n if (v.testCases && v.testCases.length > 0) {\n out.testCase = v.testCases.map(buildTestCase);\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// trace\n// ---------------------------------------------------------------------------\n\nfunction buildLocator(loc: Locator): Obj {\n switch (loc.kind) {\n case \"local\": {\n const local: Obj = { \"@_id\": loc.id };\n setIfDefined(local, \"@_kind\", loc.hintKind);\n setIfDefined(local, \"@_title\", loc.title);\n return { local };\n }\n case \"doc\": {\n const doc: Obj = { \"@_uri\": loc.uri };\n setIfDefined(doc, \"@_docId\", loc.docId);\n setIfDefined(doc, \"@_version\", loc.version);\n setIfDefined(doc, \"@_git\", loc.git);\n doc[\"@_id\"] = loc.id;\n setIfDefined(doc, \"@_kind\", loc.hintKind);\n setIfDefined(doc, \"@_title\", loc.title);\n return { doc };\n }\n case \"external\": {\n const ext: Obj = { \"@_uri\": loc.uri };\n setIfDefined(ext, \"@_kind\", loc.hintKind);\n setIfDefined(ext, \"@_title\", loc.title);\n return { external: ext };\n }\n }\n}\n\nfunction applyEdgeMetaAttrs(out: Obj, edge: TraceEdge): void {\n setIfDefined(out, \"@_confidence\", edge.confidence);\n setIfDefined(out, \"@_status\", edge.status);\n setIfDefined(out, \"@_createdBy\", edge.createdBy);\n setIfDefined(out, \"@_createdAt\", edge.createdAt);\n if (edge.tags && edge.tags.length > 0) out[\"@_tags\"] = edge.tags.join(\" \");\n}\n\n/** Nested 2.1.0 `<edge>` form. */\nfunction buildEdge(edge: TraceEdge): Obj {\n const out: Obj = { \"@_id\": edge.id, \"@_type\": edge.type };\n applyEdgeMetaAttrs(out, edge);\n out.from = { locator: buildLocator(edge.from) };\n out.to = { locator: buildLocator(edge.to) };\n setIfDefined(out, \"notes\", edge.notes);\n return out;\n}\n\n/**\n * Flat 2.0.1 `<traceEdge>` form. Local/doc endpoints collapse to an id\n * attribute; a doc locator's docId/version/git cannot be expressed in the flat\n * form and is dropped (documented lossy degradation within 2.0.1).\n */\nfunction buildFlatEdge(edge: TraceEdge): Obj {\n const out: Obj = { \"@_id\": edge.id, \"@_type\": edge.type };\n if (edge.from.kind === \"external\") out[\"@_fromUri\"] = edge.from.uri;\n else out[\"@_from\"] = edge.from.id;\n if (edge.to.kind === \"external\") out[\"@_toUri\"] = edge.to.uri;\n else out[\"@_to\"] = edge.to.id;\n applyEdgeMetaAttrs(out, edge);\n setIfDefined(out, \"notes\", edge.notes);\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// governance\n// ---------------------------------------------------------------------------\n\nfunction buildIssue(iss: Issue): Obj {\n const out: Obj = { \"@_id\": iss.id };\n setIfDefined(out, \"@_status\", iss.status);\n setIfDefined(out, \"@_owner\", iss.owner);\n out.statement = iss.statement;\n setIfDefined(out, \"notes\", iss.notes);\n return out;\n}\n\nfunction buildApproval(ap: Approval): Obj {\n const out: Obj = { \"@_id\": ap.id, \"@_role\": ap.role };\n setIfDefined(out, \"@_status\", ap.status);\n setIfDefined(out, \"description\", ap.description);\n return out;\n}\n\nfunction buildGovernance(g: Governance): Obj {\n const out: Obj = {};\n if (g.issues && g.issues.length > 0) out.issue = g.issues.map(buildIssue);\n if (g.approvals && g.approvals.length > 0) {\n out.approval = g.approvals.map(buildApproval);\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// document\n// ---------------------------------------------------------------------------\n\n/**\n * Serialize a model back to a well-formed `.rqml` XML string.\n *\n * The output namespace, schema location, and trace serialization are chosen\n * from `doc.version` (2.0.1 emits flat `<traceEdge>`; 2.1.0 emits nested\n * `<edge>`). Sections are written in canonical order and omitted when absent;\n * unknown root attributes and top-level elements retained by {@link parse} are\n * re-emitted, so an unmodified `parse` → `serialize` round-trip preserves the\n * document.\n */\nexport function serialize(doc: RqmlDocument): string {\n const raw = getRawSections(doc) ?? {};\n const ns = namespaceFor(doc.version);\n const root: Obj = {};\n\n // Root attributes: namespaces from the version-keyed table, then the\n // model-authoritative identity, then any unknown attrs (forward-compat).\n root[\"@_xmlns\"] = ns.xmlns;\n root[\"@_xmlns:xsi\"] = XSI;\n root[\"@_xsi:schemaLocation\"] = ns.schemaLocation;\n root[\"@_version\"] = doc.version;\n root[\"@_docId\"] = doc.docId;\n root[\"@_status\"] = doc.status;\n for (const [k, v] of Object.entries(raw)) {\n if (k.startsWith(ATTR_PREFIX) && !(k in root)) root[k] = v;\n }\n\n // Sections in canonical order.\n root.meta = buildMeta(doc.meta);\n if (doc.catalogs) root.catalogs = buildCatalogs(doc.catalogs);\n if (doc.domain) root.domain = buildDomain(doc.domain);\n if (doc.goals) root.goals = buildGoals(doc.goals);\n if (doc.scenarios) root.scenarios = buildScenarios(doc.scenarios);\n\n const requirements: Obj = {};\n if (doc.packages.length > 0) {\n requirements.reqPackage = doc.packages.map(buildPackage);\n }\n if (doc.looseRequirements.length > 0) {\n requirements.req = doc.looseRequirements.map(buildRequirement);\n }\n root.requirements = requirements;\n\n if (doc.behavior) root.behavior = buildBehavior(doc.behavior);\n if (doc.interfaces) root.interfaces = buildInterfaces(doc.interfaces);\n if (doc.verification) root.verification = buildVerification(doc.verification);\n\n if (doc.trace.length > 0) {\n root.trace =\n doc.version === \"2.0.1\"\n ? { traceEdge: doc.trace.map(buildFlatEdge) }\n : { edge: doc.trace.map(buildEdge) };\n }\n\n if (doc.governance) root.governance = buildGovernance(doc.governance);\n\n // Unknown top-level elements (forward-compat) trail the known sections.\n for (const [k, v] of Object.entries(raw)) {\n if (!k.startsWith(ATTR_PREFIX) && !(k in root)) root[k] = v;\n }\n\n const body = builder.build({ rqml: root }) as string;\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n${body}`;\n}\n","import type { Diagnostic, DiagnosticSeverity } from \"../model/diagnostic.js\";\nimport { type RqmlDocument, allRequirements } from \"../model/types.js\";\n\n/**\n * How aggressively lint rules report. Strictness scales a rule's severity\n * rather than toggling rules on and off, so the same finding surfaces as\n * advisory, a warning, or a hard error depending on the consumer's posture.\n */\nexport type Strictness = \"lenient\" | \"standard\" | \"strict\";\n\nexport interface LintOptions {\n /** Defaults to \"standard\". */\n strictness?: Strictness;\n}\n\n/**\n * Map a rule's nominal (standard) severity to the effective severity for a\n * strictness level. \"lenient\" relaxes one step (and drops infos), \"strict\"\n * escalates one step.\n */\nfunction scaleSeverity(\n nominal: DiagnosticSeverity,\n strictness: Strictness,\n): DiagnosticSeverity | undefined {\n const ladder: DiagnosticSeverity[] = [\"info\", \"warning\", \"error\"];\n const base = ladder.indexOf(nominal);\n const shift = strictness === \"lenient\" ? -1 : strictness === \"strict\" ? 1 : 0;\n const next = base + shift;\n if (next < 0) return undefined; // relaxed below info: suppressed\n return ladder[Math.min(next, ladder.length - 1)];\n}\n\n/** Requirements with no acceptance criteria are unverifiable. Nominal: warning. */\nfunction missingAcceptance(doc: RqmlDocument, strictness: Strictness): Diagnostic[] {\n const severity = scaleSeverity(\"warning\", strictness);\n if (severity === undefined) return [];\n return allRequirements(doc)\n .filter((req) => req.acceptance.length === 0)\n .map((req) => ({\n source: \"lint\",\n severity,\n rule: \"missing-acceptance\",\n message: `Requirement \"${req.id}\" has no acceptance criteria.`,\n }));\n}\n\n/** Run the semantic lint rules over a document. */\nexport function lint(doc: RqmlDocument, options?: LintOptions): Diagnostic[] {\n const strictness = options?.strictness ?? \"standard\";\n return [...missingAcceptance(doc, strictness)];\n}\n","import type { Diagnostic } from \"../model/diagnostic.js\";\nimport {\n type ElementRef,\n type Locator,\n type Requirement,\n type RqmlDocument,\n type TraceEdge,\n allRequirements,\n declaredElements,\n} from \"../model/types.js\";\n\n/** A trace endpoint resolved against the document's declared elements. */\nexport interface ResolvedEndpoint {\n locator: Locator;\n /** The element a local locator points at, across any section, when one exists. */\n target?: ElementRef;\n /**\n * The requirement a local locator points at, when the target is a\n * requirement. Retained for back-compat with requirement-centric callers;\n * `target` is the general field.\n */\n requirement?: Requirement;\n}\n\nexport interface ResolvedEdge {\n edge: TraceEdge;\n from: ResolvedEndpoint;\n to: ResolvedEndpoint;\n}\n\nexport interface TraceResolution {\n edges: ResolvedEdge[];\n /**\n * One diagnostic per local endpoint whose id matches no declared element in\n * the document. Non-local endpoints (doc/external) are left to the caller.\n */\n diagnostics: Diagnostic[];\n}\n\n/** Index every requirement in the document by its id. */\nexport function requirementIndex(doc: RqmlDocument): Map<string, Requirement> {\n const index = new Map<string, Requirement>();\n for (const req of allRequirements(doc)) index.set(req.id, req);\n return index;\n}\n\n/**\n * Index every id-bearing element across the whole document by its id. First\n * declaration wins (ids are expected unique; integrity checking flags dupes).\n */\nexport function declaredIdIndex(doc: RqmlDocument): Map<string, ElementRef> {\n const index = new Map<string, ElementRef>();\n for (const ref of declaredElements(doc)) {\n if (!index.has(ref.id)) index.set(ref.id, ref);\n }\n return index;\n}\n\n/**\n * Resolve trace edges to the elements they reference.\n *\n * Only `local` locators are resolved here, against every declared element in\n * the document (requirements, goals, risks, states, …). A local endpoint\n * pointing at an unknown id yields a `trace` diagnostic so callers can surface\n * dangling links. When the resolved target is a requirement, `requirement` is\n * populated alongside `target` for back-compat.\n */\nexport function resolveTrace(doc: RqmlDocument): TraceResolution {\n const idIndex = declaredIdIndex(doc);\n const reqIndex = requirementIndex(doc);\n const diagnostics: Diagnostic[] = [];\n\n const resolveEndpoint = (\n locator: Locator,\n edge: TraceEdge,\n side: \"from\" | \"to\",\n ): ResolvedEndpoint => {\n if (locator.kind !== \"local\") return { locator };\n const target = idIndex.get(locator.id);\n if (target === undefined) {\n diagnostics.push({\n source: \"trace\",\n severity: \"error\",\n rule: \"unresolved-local-ref\",\n message: `Trace edge \"${edge.id}\" (${side}) references unknown local id \"${locator.id}\".`,\n });\n return { locator };\n }\n const resolved: ResolvedEndpoint = { locator, target };\n const requirement = reqIndex.get(locator.id);\n if (requirement !== undefined) resolved.requirement = requirement;\n return resolved;\n };\n\n const edges = doc.trace.map((edge) => ({\n edge,\n from: resolveEndpoint(edge.from, edge, \"from\"),\n to: resolveEndpoint(edge.to, edge, \"to\"),\n }));\n\n return { edges, diagnostics };\n}\n","import { XMLParser } from \"fast-xml-parser\";\nimport type { Diagnostic } from \"../model/diagnostic.js\";\n\n/**\n * Referential-integrity checks: unique ids across the document, and trace\n * endpoints that resolve to a declared id.\n *\n * These mirror the canonical schema's `xs:key allIds` and `xs:keyref`\n * constraints, but are implemented in code because libxml2 does not enforce\n * those constraints against the bundled XSD: the schema has a target namespace\n * with `elementFormDefault=\"qualified\"`, yet the identity-constraint selectors\n * use unprefixed names (`.//req`, `.//edge/from/locator/local`). Per XPath 1.0\n * an unprefixed name matches the null namespace, so the selectors match nothing\n * and the constraints silently never fire. This check covers every element id\n * (goals, catalogs, behavior, ...), not just requirements, so a trace edge that\n * points at a valid goal is not falsely reported as dangling.\n */\n\nconst ATTR_PREFIX = \"@_\";\n\n/**\n * Locator elements whose `id` attribute references another element instead of\n * declaring a new one. Their ids must not enter the declared-id index.\n */\nconst REFERENCE_ELEMENTS = new Set([\"local\", \"doc\"]);\n\nconst parser = new XMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: ATTR_PREFIX,\n parseAttributeValue: false,\n parseTagValue: false,\n trimValues: true,\n});\n\ntype Node = Record<string, unknown>;\n\ninterface TraceRef {\n refId: string;\n edgeId: string;\n side: \"from\" | \"to\";\n /** true for the flat 2.0.1 `<traceEdge from to>` form, false for nested `<edge>`. */\n flat: boolean;\n}\n\nfunction isNode(v: unknown): v is Node {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\nfunction asArray<T>(v: T | T[] | undefined | null): T[] {\n if (v == null) return [];\n return Array.isArray(v) ? v : [v];\n}\n\nfunction str(v: unknown): string | undefined {\n return v == null ? undefined : String(v);\n}\n\nfunction attr(node: Node, name: string): string | undefined {\n return str(node[ATTR_PREFIX + name]);\n}\n\n/** Trace refs from a nested 2.1.0 `<edge><from><locator><local id/>`. */\nfunction nestedRefs(edge: Node, out: TraceRef[]): void {\n const edgeId = attr(edge, \"id\") ?? \"\";\n for (const side of [\"from\", \"to\"] as const) {\n const endpoint = edge[side];\n const locator = isNode(endpoint) ? endpoint.locator : undefined;\n const local = isNode(locator) ? locator.local : undefined;\n const refId = isNode(local) ? attr(local, \"id\") : undefined;\n if (refId !== undefined) out.push({ refId, edgeId, side, flat: false });\n }\n}\n\n/** Trace refs from a flat 2.0.1 `<traceEdge from to>`. */\nfunction flatRefs(edge: Node, out: TraceRef[]): void {\n const edgeId = attr(edge, \"id\") ?? \"\";\n const from = attr(edge, \"from\");\n const to = attr(edge, \"to\");\n if (from !== undefined) out.push({ refId: from, edgeId, side: \"from\", flat: true });\n if (to !== undefined) out.push({ refId: to, edgeId, side: \"to\", flat: true });\n}\n\n/** Collect declared ids and trace refs over the whole tree. */\nfunction walk(node: Node, declared: string[], refs: TraceRef[]): void {\n for (const [key, value] of Object.entries(node)) {\n if (key.startsWith(ATTR_PREFIX) || key === \"#text\") continue;\n for (const item of asArray<unknown>(value)) {\n if (!isNode(item)) continue;\n const id = attr(item, \"id\");\n if (id !== undefined && !REFERENCE_ELEMENTS.has(key)) declared.push(id);\n if (key === \"edge\") nestedRefs(item, refs);\n else if (key === \"traceEdge\") flatRefs(item, refs);\n walk(item, declared, refs);\n }\n }\n}\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n/** Byte offset of the start of each line, for offset → line lookup. */\nfunction lineStarts(xml: string): number[] {\n const starts = [0];\n for (let i = 0; i < xml.length; i++) if (xml[i] === \"\\n\") starts.push(i + 1);\n return starts;\n}\n\nfunction lineAtOffset(starts: number[], offset: number): number {\n let lo = 0;\n let hi = starts.length - 1;\n let ans = 0;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const start = starts[mid];\n if (start !== undefined && start <= offset) {\n ans = mid;\n lo = mid + 1;\n } else {\n hi = mid - 1;\n }\n }\n return ans + 1; // 1-based\n}\n\n/** 1-based source lines of every match of `re` (assumed global). */\nfunction matchLines(xml: string, starts: number[], re: RegExp): number[] {\n const lines: number[] = [];\n re.lastIndex = 0;\n let m: RegExpExecArray | null;\n // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic global-regex exec loop\n while ((m = re.exec(xml)) !== null) {\n lines.push(lineAtOffset(starts, m.index));\n if (m.index === re.lastIndex) re.lastIndex++;\n }\n return lines;\n}\n\n/**\n * Check a .rqml document string for duplicate ids and dangling trace\n * references. Returns one diagnostic per offending id occurrence / trace\n * endpoint. Best-effort on well-formed input; malformed XML (already reported\n * by {@link parse}) yields no diagnostics here.\n */\nexport function checkIntegrity(xml: string): Diagnostic[] {\n let root: Node | undefined;\n try {\n const obj = parser.parse(xml) as Node;\n root = isNode(obj.rqml) ? obj.rqml : undefined;\n } catch {\n return [];\n }\n if (!root) return [];\n\n const declared: string[] = [];\n const refs: TraceRef[] = [];\n walk(root, declared, refs);\n\n const starts = lineStarts(xml);\n const diagnostics: Diagnostic[] = [];\n\n // Duplicate ids (xs:key allIds). Flag every redeclaration after the first.\n const counts = new Map<string, number>();\n for (const id of declared) counts.set(id, (counts.get(id) ?? 0) + 1);\n for (const [id, count] of counts) {\n if (id === \"\" || count < 2) continue;\n const re = new RegExp(\n `<(?!local\\\\b|doc\\\\b)[A-Za-z][\\\\w.:-]*\\\\b[^>]*?\\\\sid\\\\s*=\\\\s*\"${escapeRegExp(id)}\"`,\n \"g\",\n );\n const lines = matchLines(xml, starts, re);\n const redeclLines = lines.length >= 2 ? lines.slice(1) : [undefined];\n for (const line of redeclLines) {\n const diag: Diagnostic = {\n source: \"validate\",\n severity: \"error\",\n rule: \"duplicate-id\",\n message: `Duplicate id \"${id}\": this id is already declared elsewhere in the document.`,\n };\n if (typeof line === \"number\") diag.line = line;\n diagnostics.push(diag);\n }\n }\n\n // Dangling trace endpoints (xs:keyref traceFromRef / traceToRef).\n const declaredSet = new Set(declared);\n for (const ref of refs) {\n if (ref.refId === \"\" || declaredSet.has(ref.refId)) continue;\n const re = ref.flat\n ? new RegExp(\n `<traceEdge\\\\b[^>]*?\\\\s${ref.side}\\\\s*=\\\\s*\"${escapeRegExp(ref.refId)}\"`,\n \"g\",\n )\n : new RegExp(`<local\\\\b[^>]*?\\\\sid\\\\s*=\\\\s*\"${escapeRegExp(ref.refId)}\"`, \"g\");\n const lines = matchLines(xml, starts, re);\n const diag: Diagnostic = {\n source: \"trace\",\n severity: \"error\",\n rule: \"unresolved-local-ref\",\n message: `Trace edge \"${ref.edgeId}\" (${ref.side}) references unknown id \"${ref.refId}\".`,\n };\n if (lines.length > 0) diag.line = lines[0];\n diagnostics.push(diag);\n }\n\n return diagnostics;\n}\n","import type { Diagnostic } from \"../model/diagnostic.js\";\nimport {\n type ElementRef,\n type RqmlDocument,\n type TraceType,\n allRequirements,\n} from \"../model/types.js\";\nimport { declaredIdIndex, resolveTrace } from \"../trace/index.js\";\n\n/** Trace edges grouped around a single artifact, split by direction and type. */\nexport interface ArtifactCoverage {\n id: string;\n /** Ids of edges leaving this artifact, grouped by trace type (each sorted). */\n outgoing: Partial<Record<TraceType, string[]>>;\n /** Ids of edges arriving at this artifact, grouped by trace type (each sorted). */\n incoming: Partial<Record<TraceType, string[]>>;\n}\n\n/**\n * Deterministic coverage of an RQML document over its trace graph\n * (REQ-CORE-COVERAGE). Every output array is sorted, so repeated runs on the\n * same document yield identical results (QGOAL-DETERMINISTIC).\n */\nexport interface CoverageReport {\n /** Per-requirement incoming/outgoing edges, sorted by requirement id. */\n requirements: ArtifactCoverage[];\n /** Goal/quality-goal ids with no incoming `satisfies` edge. */\n uncoveredGoals: string[];\n /** Requirement ids with no `verifiedBy` (out) or `covers` (in) edge. */\n unverifiedRequirements: string[];\n /** Requirement ids with no incoming `implements` edge from a code artifact. */\n unimplementedRequirements: string[];\n /** Requirement ids that satisfy no goal or scenario (trace up to nothing). */\n orphanRequirements: string[];\n /** Coverage findings plus dangling local-reference diagnostics from trace. */\n diagnostics: Diagnostic[];\n}\n\nconst UPWARD_TARGET_KINDS = new Set([\n \"goal\",\n \"qgoal\",\n \"scenario\",\n \"misuseCase\",\n \"edgeCase\",\n]);\n\nfunction add(\n group: Partial<Record<TraceType, string[]>>,\n type: TraceType,\n edgeId: string,\n) {\n const existing = group[type];\n if (existing) {\n existing.push(edgeId);\n } else {\n group[type] = [edgeId];\n }\n}\n\nfunction sortGroups(group: Partial<Record<TraceType, string[]>>) {\n for (const key of Object.keys(group) as TraceType[]) {\n group[key] = [...new Set(group[key])].sort();\n }\n}\n\n/** Compute coverage for a parsed document. Pure and deterministic. */\nexport function computeCoverage(doc: RqmlDocument): CoverageReport {\n const idIndex = declaredIdIndex(doc);\n const reqs = allRequirements(doc);\n const reqIds = new Set(reqs.map((r) => r.id));\n\n const outgoing = new Map<string, Partial<Record<TraceType, string[]>>>();\n const incoming = new Map<string, Partial<Record<TraceType, string[]>>>();\n const ensure = (m: Map<string, Partial<Record<TraceType, string[]>>>, id: string) => {\n let g = m.get(id);\n if (g === undefined) {\n g = {};\n m.set(id, g);\n }\n return g;\n };\n\n for (const edge of doc.trace) {\n if (edge.from.kind === \"local\")\n add(ensure(outgoing, edge.from.id), edge.type, edge.id);\n if (edge.to.kind === \"local\") add(ensure(incoming, edge.to.id), edge.type, edge.id);\n }\n\n const requirements: ArtifactCoverage[] = [...reqIds].sort().map((id) => {\n const out = outgoing.get(id) ?? {};\n const inc = incoming.get(id) ?? {};\n sortGroups(out);\n sortGroups(inc);\n return { id, outgoing: out, incoming: inc };\n });\n\n // Goals/qgoals with no incoming `satisfies` edge.\n const uncoveredGoals: string[] = [];\n for (const [id, ref] of idIndex) {\n if (ref.kind !== \"goal\" && ref.kind !== \"qgoal\") continue;\n if (!(incoming.get(id)?.satisfies?.length ?? 0)) uncoveredGoals.push(id);\n }\n uncoveredGoals.sort();\n\n const unverifiedRequirements: string[] = [];\n const unimplementedRequirements: string[] = [];\n const orphanRequirements: string[] = [];\n for (const id of [...reqIds].sort()) {\n const out = outgoing.get(id) ?? {};\n const inc = incoming.get(id) ?? {};\n const verified = (out.verifiedBy?.length ?? 0) > 0 || (inc.covers?.length ?? 0) > 0;\n if (!verified) unverifiedRequirements.push(id);\n if (!(inc.implements?.length ?? 0)) unimplementedRequirements.push(id);\n\n const satisfiesUpward = (out.satisfies ?? []).some((edgeId) => {\n const edge = doc.trace.find((e) => e.id === edgeId);\n const to = edge?.to;\n if (to?.kind !== \"local\") return false;\n const target: ElementRef | undefined = idIndex.get(to.id);\n return target !== undefined && UPWARD_TARGET_KINDS.has(target.kind);\n });\n if (!satisfiesUpward) orphanRequirements.push(id);\n }\n\n const diagnostics: Diagnostic[] = [];\n for (const id of uncoveredGoals)\n diagnostics.push(\n finding(\n \"coverage\",\n \"uncovered-goal\",\n `Goal \"${id}\" has no satisfying requirement.`,\n ),\n );\n for (const id of unverifiedRequirements)\n diagnostics.push(\n finding(\n \"coverage\",\n \"unverified-requirement\",\n `Requirement \"${id}\" has no verification edge.`,\n ),\n );\n for (const id of unimplementedRequirements)\n diagnostics.push(\n finding(\n \"coverage\",\n \"unimplemented-requirement\",\n `Requirement \"${id}\" has no implementation link.`,\n ),\n );\n for (const id of orphanRequirements)\n diagnostics.push(\n finding(\n \"coverage\",\n \"orphan-requirement\",\n `Requirement \"${id}\" satisfies no goal or scenario.`,\n ),\n );\n // Fold in dangling local-reference diagnostics (REQ-CORE-COVERAGE).\n diagnostics.push(...resolveTrace(doc).diagnostics);\n\n return {\n requirements,\n uncoveredGoals,\n unverifiedRequirements,\n unimplementedRequirements,\n orphanRequirements,\n diagnostics,\n };\n}\n\nfunction finding(\n source: Diagnostic[\"source\"],\n rule: string,\n message: string,\n): Diagnostic {\n return { source, severity: \"warning\", rule, message };\n}\n","import { existsSync } from \"node:fs\";\nimport { isAbsolute, resolve as resolvePath } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Diagnostic } from \"../model/diagnostic.js\";\nimport type { RqmlDocument } from \"../model/types.js\";\n\n/** An `implements` edge whose code-side endpoint is an external locator. */\nexport interface ImplementsLink {\n edgeId: string;\n /** The local (requirement) endpoint id, when the edge has one. */\n requirementId?: string;\n /** The external artifact URI: a file, symbol (`path#symbol`), or test URI. */\n uri: string;\n}\n\n/**\n * State of a linked artifact. The default filesystem resolver distinguishes\n * `present` from `missing`; a richer resolver with an approval baseline can also\n * return `changed` (the artifact exists but differs since the requirement was\n * last approved, per REQ-CORE-DRIFT). Anything other than `present` is drift.\n */\nexport type ArtifactStatus = \"present\" | \"missing\" | \"changed\";\n\nexport interface DriftFinding extends ImplementsLink {\n status: Exclude<ArtifactStatus, \"present\">;\n}\n\nexport interface DriftReport {\n /** Every `implements` link with an external endpoint, sorted by edge id. */\n links: ImplementsLink[];\n /** Links whose artifact is missing or changed, sorted by edge id. */\n drifted: DriftFinding[];\n diagnostics: Diagnostic[];\n}\n\nexport interface DriftOptions {\n /** Base directory relative `file:`/path locators resolve against. Defaults to `process.cwd()`. */\n baseDir?: string;\n /**\n * Pluggable artifact resolver. Injected in tests and non-filesystem hosts so\n * drift detection stays deterministic and side-effect-free by default\n * (REQ-CORE-DRIFT, REQ-CORE-NO-LLM). Defaults to a filesystem existence check.\n */\n resolve?: (link: ImplementsLink) => ArtifactStatus;\n}\n\n/** Extract every `implements` edge that links a requirement to external code. */\nexport function implementsLinks(doc: RqmlDocument): ImplementsLink[] {\n const out: ImplementsLink[] = [];\n for (const edge of doc.trace) {\n if (edge.type !== \"implements\") continue;\n const external =\n edge.from.kind === \"external\"\n ? edge.from\n : edge.to.kind === \"external\"\n ? edge.to\n : undefined;\n if (external === undefined) continue;\n const local =\n edge.from.kind === \"local\"\n ? edge.from.id\n : edge.to.kind === \"local\"\n ? edge.to.id\n : undefined;\n const link: ImplementsLink = { edgeId: edge.id, uri: external.uri };\n if (local !== undefined) link.requirementId = local;\n out.push(link);\n }\n return out.sort((a, b) => a.edgeId.localeCompare(b.edgeId));\n}\n\n/**\n * Resolve an artifact URI to a local filesystem path, or `undefined` if the URI\n * is not filesystem-checkable (e.g. `urn:`, `https:`). The fragment of a\n * `path#symbol` locator is dropped — existence is checked at file granularity.\n */\nfunction filePathFromUri(uri: string, baseDir: string): string | undefined {\n const noFragment = uri.split(\"#\")[0] ?? uri;\n if (noFragment.startsWith(\"file://\")) return fileURLToPath(noFragment);\n if (noFragment.startsWith(\"file:\")) {\n const path = noFragment.slice(\"file:\".length);\n return isAbsolute(path) ? path : resolvePath(baseDir, path);\n }\n // A bare relative or absolute path (no scheme).\n if (!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(noFragment)) {\n return isAbsolute(noFragment) ? noFragment : resolvePath(baseDir, noFragment);\n }\n return undefined;\n}\n\nfunction filesystemResolver(baseDir: string) {\n return (link: ImplementsLink): ArtifactStatus => {\n const filePath = filePathFromUri(link.uri, baseDir);\n // Non-filesystem URIs can't be checked offline; treat as present, not drift.\n if (filePath === undefined) return \"present\";\n return existsSync(filePath) ? \"present\" : \"missing\";\n };\n}\n\n/**\n * Detect spec/implementation drift by resolving the external locators of\n * `implements` edges and reporting links whose artifact is missing or changed\n * (REQ-CORE-DRIFT). Deterministic for a given document, base directory, and\n * resolver.\n */\nexport function detectDrift(doc: RqmlDocument, options: DriftOptions = {}): DriftReport {\n const baseDir = options.baseDir ?? process.cwd();\n const resolve = options.resolve ?? filesystemResolver(baseDir);\n\n const links = implementsLinks(doc);\n const drifted: DriftFinding[] = [];\n const diagnostics: Diagnostic[] = [];\n\n for (const link of links) {\n const status = resolve(link);\n if (status === \"present\") continue;\n drifted.push({ ...link, status });\n diagnostics.push({\n source: \"drift\",\n severity: \"error\",\n rule: status === \"missing\" ? \"missing-implementation\" : \"changed-implementation\",\n message:\n status === \"missing\"\n ? `implements edge \"${link.edgeId}\" points at \"${link.uri}\", which does not exist.`\n : `implements edge \"${link.edgeId}\" points at \"${link.uri}\", which has changed since approval.`,\n });\n }\n\n return { links, drifted, diagnostics };\n}\n","import type { Diagnostic } from \"@rqml/core\";\n\n/** Render a normalized diagnostic as a single human-readable line. */\nexport function formatDiagnostic(d: Diagnostic): string {\n const loc =\n d.line !== undefined\n ? `:${d.line}${d.column !== undefined ? `:${d.column}` : \"\"}`\n : \"\";\n const rule = d.rule !== undefined ? ` [${d.rule}]` : \"\";\n return ` ${d.severity}${loc} (${d.source})${rule}: ${d.message}`;\n}\n\nexport function printDiagnostics(diags: Diagnostic[]): void {\n for (const d of diags) process.stdout.write(`${formatDiagnostic(d)}\\n`);\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\n/**\n * Documented, stable process exit codes (REQ-CLI-EXIT-CODES). Loosely follows\n * sysexits.h: usage errors are 64.\n */\nexport const EXIT = {\n OK: 0,\n /** The document is not well-formed, schema-invalid, or fails integrity. */\n VALIDATION: 1,\n /** The check gate failed on blocking drift or coverage. */\n CHECK: 2,\n /** The command was invoked incorrectly. */\n USAGE: 64,\n} as const;\n\nexport type Strictness = \"relaxed\" | \"standard\" | \"strict\" | \"certified\";\n\nexport interface Args {\n positionals: string[];\n json: boolean;\n strictness: Strictness;\n baseDir: string;\n}\n\nexport class UsageError extends Error {}\n\nconst STRICTNESS = new Set<Strictness>([\"relaxed\", \"standard\", \"strict\", \"certified\"]);\n\n/** Minimal flag parser: `--json`, `--strictness <level>`, `--base-dir <dir>`. */\nexport function parseArgs(rest: string[]): Args {\n const positionals: string[] = [];\n const flags = new Map<string, string | boolean>();\n for (let i = 0; i < rest.length; i++) {\n const a = rest[i] as string;\n if (a.startsWith(\"--\")) {\n const eq = a.indexOf(\"=\");\n if (eq >= 0) {\n flags.set(a.slice(2, eq), a.slice(eq + 1));\n } else {\n const next = rest[i + 1];\n if (next !== undefined && !next.startsWith(\"-\")) {\n flags.set(a.slice(2), next);\n i++;\n } else {\n flags.set(a.slice(2), true);\n }\n }\n } else {\n positionals.push(a);\n }\n }\n const strictness = String(flags.get(\"strictness\") ?? \"standard\") as Strictness;\n if (!STRICTNESS.has(strictness)) {\n throw new UsageError(\n `unknown strictness \"${strictness}\" (relaxed|standard|strict|certified)`,\n );\n }\n return {\n positionals,\n json: flags.get(\"json\") === true || flags.get(\"json\") === \"true\",\n strictness,\n baseDir: resolve(String(flags.get(\"base-dir\") ?? process.cwd())),\n };\n}\n\n/**\n * Resolve the spec file: an explicit positional path, otherwise the lone\n * `*.rqml` document in the base directory (preferring `requirements.rqml`).\n */\nexport function resolveSpecPath(args: Args): string {\n const explicit = args.positionals[0];\n if (explicit !== undefined) {\n const p = resolve(args.baseDir, explicit);\n if (!existsSync(p)) throw new UsageError(`spec file not found: ${explicit}`);\n return p;\n }\n const candidates = readdirSync(args.baseDir)\n .filter((f) => f.endsWith(\".rqml\"))\n .sort();\n if (candidates.length === 0) {\n throw new UsageError(\"no .rqml document found in this directory; pass a path\");\n }\n const preferred = candidates.includes(\"requirements.rqml\")\n ? \"requirements.rqml\"\n : (candidates[0] as string);\n return resolve(args.baseDir, preferred);\n}\n\nexport function readSpec(args: Args): { path: string; xml: string } {\n const path = resolveSpecPath(args);\n return { path, xml: readFileSync(path, \"utf8\") };\n}\n","import { checkIntegrity, computeCoverage, detectDrift, parse } from \"@rqml/core\";\nimport { printDiagnostics } from \"../report.js\";\nimport { EXIT, type Strictness, parseArgs, readSpec } from \"../runtime.js\";\n\n/** Coverage findings block the gate at strict and certified levels. */\nfunction coverageBlocks(strictness: Strictness): boolean {\n return strictness === \"strict\" || strictness === \"certified\";\n}\n\n/**\n * `rqml check` — the deterministic enforcement gate. Composes XSD + integrity\n * validation, trace coverage, and implementation drift into a single verdict and\n * a stable exit code (REQ-CLI-CHECK-GATE, REQ-ENFORCE-DETERMINISM). It invokes no\n * language model, so identical inputs yield identical verdicts.\n */\nexport async function runCheck(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const { path, xml } = readSpec(args);\n\n const { validate } = await import(\"@rqml/core/validate\");\n const validation = validate(xml);\n const integrity = validation.valid ? checkIntegrity(xml) : [];\n\n const parsed = parse(xml);\n const coverage = parsed.ok ? computeCoverage(parsed.document) : undefined;\n const drift = parsed.ok\n ? detectDrift(parsed.document, { baseDir: args.baseDir })\n : undefined;\n\n const validationFailed = !validation.valid || integrity.length > 0;\n const driftFailed = (drift?.drifted.length ?? 0) > 0;\n const coverageProblemCount =\n (coverage?.uncoveredGoals.length ?? 0) +\n (coverage?.unverifiedRequirements.length ?? 0) +\n (coverage?.orphanRequirements.length ?? 0);\n const coverageFailed = coverageBlocks(args.strictness) && coverageProblemCount > 0;\n\n const verdict: \"pass\" | \"fail\" =\n validationFailed || driftFailed || coverageFailed ? \"fail\" : \"pass\";\n\n const diagnostics = [\n ...validation.diagnostics,\n ...integrity,\n ...(drift?.diagnostics ?? []),\n ...(coverageFailed ? (coverage?.diagnostics ?? []) : []),\n ];\n\n const report = {\n path,\n verdict,\n strictness: args.strictness,\n schemaVersion: validation.schemaVersion,\n valid: !validationFailed,\n drift: drift?.drifted ?? [],\n coverage: coverage\n ? {\n uncoveredGoals: coverage.uncoveredGoals,\n unverifiedRequirements: coverage.unverifiedRequirements,\n unimplementedRequirements: coverage.unimplementedRequirements,\n orphanRequirements: coverage.orphanRequirements,\n }\n : null,\n diagnostics,\n };\n\n if (args.json) {\n process.stdout.write(`${JSON.stringify(report, null, 2)}\\n`);\n } else {\n if (diagnostics.length > 0) printDiagnostics(diagnostics);\n process.stdout.write(\n `${verdict === \"pass\" ? \"✓\" : \"✗\"} check ${verdict} (${args.strictness}) — ${path}\\n`,\n );\n }\n\n if (validationFailed) return EXIT.VALIDATION;\n if (driftFailed || coverageFailed) return EXIT.CHECK;\n return EXIT.OK;\n}\n","# RQML Agent Guidelines\n\n## Strictness: `standard`\n\n| Level | Description |\n|-------|-------------|\n| `relaxed` | Prototyping. Spec is advisory. Quick iteration allowed. |\n| `standard` | Production default. Spec-first for features. Core traces. |\n| `strict` | Full traceability. All behavior specified. No ghost features. |\n| `certified` | Regulated/safety-critical. Audit-grade traces with metadata. |\n\n---\n\nThis project uses **RQML** as the single source of truth for system intent. Familiarize yourself with the documentation at https://rqml.org/docs/user-guide/\n\n**Specification file:** Specification lives in a single .rqml file in the root of the project - convention is `requirements.rqml`. Multiple .rqml files may be employed in multirepo projects, in such cases a .rqml spec applies to everything that is higher in the project tree, unless overridden by another .rqml file.\n\n**Schema file:**\nThe RQML XSD schema is at https://rqml.org/schema/rqml-2.1.0.xsd (insert correct version number). Make sure to adhere to the schema at all times and follow guidelines in schema comments. Use as much of the RQML tagset as is necessary to capture and describe high quality requirements.\n\n---\n\n## Core Principle: Spec-First Development\n\n```\n[Elicit] → [Specify] → [Implement] → [Verify] → [Trace]\n ↑____________________←______________________|\n```\n\nCode follows specification, not the reverse. If code and spec diverge, the spec is authoritative—update the code or negotiate a spec change with the developer.\n\n---\n\n## Workflow\n\n### 1. Elicit\nAsk clarifying questions until you understand the goal, scope, acceptance criteria, and constraints. Don't assume—capture assumptions as `<notes>` or `<issue>` elements.\n\n### 2. Specify\n**Never implement unspecified behavior.** Update the `.rqml` file before coding:\n- Add a `<req>` with statement and acceptance criteria\n- Set appropriate `type`, `priority`, and `status=\"draft\"`\n- Get developer confirmation before proceeding\n\n### 3. Implement\nReference requirement IDs in code comments. If you discover missing requirements, stop and add them to the spec first.\n\n### 4. Verify\nAdd tests that reference requirement IDs. Update `<trace>` section with verification links.\n\n---\n\n## When Code and Spec Diverge\n\n1. **Spec gap** (code has behavior not in spec): Propose adding the requirement, mark as `status=\"review\"`\n2. **Code bug** (code doesn't match spec): Fix the code\n3. **Spec bug** (spec is wrong): Propose correction, wait for developer confirmation\n\n**Never silently change the spec to match code.**\n\n---\n\n## Strictness Reference\n\n| Aspect | relaxed | standard | strict | certified |\n|--------|---------|----------|--------|-----------|\n| Elicitation | Major features | Testable reqs | Edge cases | Formal |\n| Spec-first | Recommended | Required | Required | Approved first |\n| Code traces | Optional | New features | All changes | With metadata |\n| Test traces | Optional | New reqs | All reqs | Full matrix |\n| Ghost features | Allowed | Blocked | Blocked | Blocked |\n\n---\n\n## Change Summary Template\n\nFor PRs and commits:\n\n```\n## RQML Trace Summary\n\n**Requirements:** REQ-xxx (added/modified/implemented)\n**Implementation:** `path/to/file` — what changed\n**Verification:** `path/to/test` — what it verifies\n**Open items:** gaps, assumptions, follow-ups\n```\n\n---\n\n## Schema Validation\n\nThe `.rqml` file must remain valid XML conforming to the version of RQML referenced in the version attribute in the spec document.\n\n**To validate:** Try xmllint first (pre-installed on macOS/Linux):\n```bash\nxmllint --schema https://rqml.org/schema/rqml-2.1.0.xsd <rqml-file-name> --noout\n```\n\nIf xmllint is unavailable, use Python with lxml:\n```bash\npip install lxml\npython -c \"from lxml import etree; s=etree.XMLSchema(etree.parse('https://rqml.org/schema/rqml-2.1.0.xsd')); print('Valid' if s.validate(etree.parse('<rqml-file-name>')) else s.error_log)\"\n```\n\n**IDE validation:** If the `.rqml` file includes `xsi:schemaLocation`, XML-aware editors (VS Code with XML extension, IntelliJ) validate automatically.\n\nThe schema comments contain detailed guidance on document structure, ID conventions, and requirement quality criteria.\n\n**If unsure:** Ask the developer before making structural changes to the spec.\n","import agentsTemplate from \"../templates/AGENTS.md\";\n/**\n * @rqml/schema — the single canonical source of every RQML schema version.\n *\n * The XSD text is inlined at build time (tsup `.xsd` text loader) so consumers\n * — the @rqml/core engine, the rqml CLI, the @rqml/mcp server, and the VS Code\n * extension that embeds core — get offline, bundler-friendly validation with no\n * filesystem or network access. The same files under `versions/` are published\n * by the documentation site to the stable `https://rqml.org/schema/<version>/`\n * URLs, so there is exactly one source of truth (REQ-SCHEMA-CANONICAL).\n */\nimport xsd201 from \"../versions/2.0.1/rqml-2.0.1.xsd\";\nimport xsd210 from \"../versions/2.1.0/rqml-2.1.0.xsd\";\n\n/** Supported RQML schema versions, oldest first, newest-supported last. */\nexport const SCHEMA_VERSIONS = [\"2.0.1\", \"2.1.0\"] as const;\n\n/** A version string known to have a bundled schema. */\nexport type SchemaVersion = (typeof SCHEMA_VERSIONS)[number];\n\n/** Schema version used when a document declares none and none is forced. */\nexport const DEFAULT_SCHEMA_VERSION: SchemaVersion = \"2.1.0\";\n\nconst SCHEMAS: Record<string, string> = {\n \"2.0.1\": xsd201,\n \"2.1.0\": xsd210,\n};\n\n/** The default RQML `AGENTS.md` template, published at `https://rqml.org/AGENTS.md`. */\nexport const AGENTS_TEMPLATE: string = agentsTemplate;\n\n/** Return the inlined XSD text for a version, or `undefined` if unsupported. */\nexport function resolveSchema(version: string): string | undefined {\n return SCHEMAS[version];\n}\n\n/** Versions for which a schema is bundled, newest-supported last. */\nexport function supportedSchemaVersions(): SchemaVersion[] {\n return [...SCHEMA_VERSIONS];\n}\n\n/** Narrow an arbitrary string to a {@link SchemaVersion}. */\nexport function isSchemaVersion(version: string): version is SchemaVersion {\n return version in SCHEMAS;\n}\n\n/** The XML namespace for a schema version (the document's default namespace). */\nexport function schemaNamespace(version: string): string {\n return `https://rqml.org/schema/${version}`;\n}\n\n/**\n * The stable published URL of a version's XSD — the immutable `schemaLocation`\n * contract that documents in the wild resolve against. This is the flat\n * `…/schema/rqml-<version>.xsd` form the serializer emits, not a versioned\n * subdirectory.\n */\nexport function schemaUrl(version: string): string {\n return `https://rqml.org/schema/rqml-${version}.xsd`;\n}\n","import { existsSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { AGENTS_TEMPLATE } from \"@rqml/schema\";\nimport { EXIT, parseArgs } from \"../runtime.js\";\n\nconst STARTER_SPEC = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rqml xmlns=\"https://rqml.org/schema/2.1.0\" version=\"2.1.0\" docId=\"PROJECT-001\" status=\"draft\">\n <meta>\n <title>My Project</title>\n <system>my-system</system>\n </meta>\n <requirements>\n <req id=\"REQ-EXAMPLE\" type=\"FR\" title=\"Example requirement\" priority=\"must\" status=\"draft\">\n <statement>The system SHALL do something useful.</statement>\n </req>\n </requirements>\n</rqml>\n`;\n\n/** `rqml init` — scaffold a starter spec and the AGENTS.md project marker. */\nexport async function runInit(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const specPath = resolve(args.baseDir, args.positionals[0] ?? \"requirements.rqml\");\n const agentsPath = resolve(args.baseDir, \"AGENTS.md\");\n let wrote = false;\n\n if (existsSync(specPath)) {\n process.stdout.write(`skip (exists) ${specPath}\\n`);\n } else {\n writeFileSync(specPath, STARTER_SPEC);\n process.stdout.write(`created ${specPath}\\n`);\n wrote = true;\n }\n\n if (existsSync(agentsPath)) {\n process.stdout.write(`skip (exists) ${agentsPath}\\n`);\n } else {\n writeFileSync(agentsPath, AGENTS_TEMPLATE);\n process.stdout.write(`created ${agentsPath}\\n`);\n wrote = true;\n }\n\n if (!wrote) process.stdout.write(\"nothing to do; project already initialized\\n\");\n return EXIT.OK;\n}\n","import { computeCoverage, lint, parse, resolveTrace } from \"@rqml/core\";\nimport { EXIT, parseArgs, readSpec } from \"../runtime.js\";\n\n/** `rqml status` — current spec, coverage, and lint state (informational). */\nexport async function runStatus(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const { path, xml } = readSpec(args);\n const parsed = parse(xml);\n if (!parsed.ok) {\n process.stderr.write(`✗ ${path}: ${parsed.error.message}\\n`);\n return EXIT.VALIDATION;\n }\n const doc = parsed.document;\n const coverage = computeCoverage(doc);\n const lintDiags = lint(doc);\n const trace = resolveTrace(doc);\n const reqCount =\n doc.packages.reduce((n, p) => n + p.requirements.length, 0) +\n doc.looseRequirements.length;\n\n const summary = {\n path,\n docId: doc.docId,\n version: doc.version,\n status: doc.status,\n requirements: reqCount,\n edges: doc.trace.length,\n uncoveredGoals: coverage.uncoveredGoals,\n unverifiedRequirements: coverage.unverifiedRequirements,\n unimplementedRequirements: coverage.unimplementedRequirements,\n orphanRequirements: coverage.orphanRequirements,\n danglingReferences: trace.diagnostics.length,\n lintFindings: lintDiags.length,\n };\n\n if (args.json) {\n process.stdout.write(`${JSON.stringify(summary, null, 2)}\\n`);\n } else {\n process.stdout.write(\n `RQML status — ${doc.docId} (${doc.version}, ${doc.status})\\n` +\n ` spec: ${path}\\n` +\n ` requirements: ${reqCount} trace edges: ${doc.trace.length}\\n` +\n ` uncovered goals: ${coverage.uncoveredGoals.length}\\n` +\n ` unverified reqs: ${coverage.unverifiedRequirements.length}\\n` +\n ` unimplemented reqs: ${coverage.unimplementedRequirements.length}\\n` +\n ` dangling refs: ${trace.diagnostics.length} lint findings: ${lintDiags.length}\\n`,\n );\n }\n return EXIT.OK;\n}\n","import { checkIntegrity } from \"@rqml/core\";\nimport { printDiagnostics } from \"../report.js\";\nimport { EXIT, parseArgs, readSpec } from \"../runtime.js\";\n\n/** `rqml validate` — XML well-formedness, XSD validity, and referential integrity. */\nexport async function runValidate(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const { path, xml } = readSpec(args);\n\n // Lazily load the XSD engine so its WASM cost is only paid when validating.\n const { validate } = await import(\"@rqml/core/validate\");\n const result = validate(xml);\n const integrity = result.valid ? checkIntegrity(xml) : [];\n const diagnostics = [...result.diagnostics, ...integrity];\n const ok = result.valid && integrity.length === 0;\n\n if (args.json) {\n process.stdout.write(\n `${JSON.stringify({ path, valid: ok, schemaVersion: result.schemaVersion, diagnostics }, null, 2)}\\n`,\n );\n } else {\n if (diagnostics.length > 0) printDiagnostics(diagnostics);\n process.stdout.write(\n ok\n ? `✓ ${path} is valid (schema ${result.schemaVersion})\\n`\n : `✗ ${path}: ${diagnostics.length} problem(s)\\n`,\n );\n }\n return ok ? EXIT.OK : EXIT.VALIDATION;\n}\n","#!/usr/bin/env node\nimport { runCheck } from \"./commands/check.js\";\nimport { runInit } from \"./commands/init.js\";\nimport { runStatus } from \"./commands/status.js\";\nimport { runValidate } from \"./commands/validate.js\";\nimport { EXIT, UsageError } from \"./runtime.js\";\n\nconst VERSION = \"0.1.0\";\n\nconst HELP = `rqml — RQML reference CLI (v${VERSION})\n\nUsage:\n rqml <command> [spec.rqml] [options]\n\nCommands:\n init [path] Scaffold a starter spec and AGENTS.md project marker\n validate [path] Validate XML well-formedness, XSD, and referential integrity\n status [path] Show spec, coverage, and lint summary\n check [path] Deterministic enforcement gate (validation + coverage + drift)\n\nOptions:\n --json Emit machine-readable JSON (status, check, validate)\n --strictness <level> relaxed | standard | strict | certified (default: standard)\n --base-dir <dir> Directory to resolve the spec and code links against\n -h, --help Show this help\n -v, --version Show version\n\nExit codes: 0 ok · 1 validation failure · 2 check (drift/coverage) failure · 64 usage\n`;\n\nasync function main(argv: string[]): Promise<number> {\n const [cmd, ...rest] = argv;\n switch (cmd) {\n case \"validate\":\n return runValidate(rest);\n case \"status\":\n return runStatus(rest);\n case \"check\":\n return runCheck(rest);\n case \"init\":\n return runInit(rest);\n case \"-v\":\n case \"--version\":\n process.stdout.write(`${VERSION}\\n`);\n return EXIT.OK;\n case undefined:\n case \"-h\":\n case \"--help\":\n process.stdout.write(HELP);\n return EXIT.OK;\n default:\n process.stderr.write(`rqml: unknown command \"${cmd}\"\\n\\n${HELP}`);\n return EXIT.USAGE;\n }\n}\n\nmain(process.argv.slice(2))\n .then((code) => {\n process.exitCode = code;\n })\n .catch((err) => {\n const isUsage = err instanceof UsageError;\n process.stderr.write(`rqml: ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exitCode = isUsage ? EXIT.USAGE : EXIT.VALIDATION;\n });\n"]}
|