@rqml/cli 0.4.0 → 0.4.1

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/dist/index.js.map CHANGED
@@ -1 +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/trace/impact.ts","../../core/src/analyze/integrity.ts","../../core/src/edit/link.ts","../../core/src/export/outline.ts","../../core/src/export/extract.ts","../../core/src/export/skeleton.ts","../../core/src/check/coverage.ts","../../core/src/analyze/matrix.ts","../../core/src/check/drift.ts","../src/report.ts","../src/runtime.ts","../src/commands/check.ts","../src/commands/impact.ts","../../schema/templates/AGENTS.md","../../schema/src/index.ts","../src/commands/init.ts","../src/commands/link.ts","../src/commands/matrix.ts","../src/commands/show.ts","../src/commands/skeleton.ts","../src/commands/status.ts","../src/commands/validate.ts","../src/index.ts"],"names":["matches","str","result","text","XMLParser","attStr","attr","XMLBuilder","ATTR_PREFIX","parser","isNode","asArray","escapeRegExp","endpointKey","ref","escapeCell","resolvePath","resolve","existsSync","readFileSync","path","writeFileSync","edgeId"],"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 '&#xD;'\")\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: \"&amp;\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \"&gt;\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"&lt;\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"&apos;\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \"&quot;\" }\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 type { Locator, RqmlDocument, TraceType } from \"../model/types.js\";\nimport { declaredIdIndex } from \"./index.js\";\n\n/** One edge traversal in an impact path. */\nexport interface ImpactStep {\n edgeId: string;\n type: TraceType;\n /** \"outgoing\" follows from→to; \"incoming\" follows to→from. */\n direction: \"outgoing\" | \"incoming\";\n /** Local id or doc/external URI at the far end of the edge. */\n target: string;\n}\n\n/** An artifact reachable from the queried id over the trace graph. */\nexport interface ImpactedArtifact {\n /** Local id, or the URI of a doc/external endpoint. */\n id: string;\n /** Element kind for local artifacts (\"req\", \"goal\", …), else the locator kind. */\n kind: string;\n /** Edge distance from the queried artifact. */\n distance: number;\n /** Edge chain from the queried artifact to this one. */\n path: ImpactStep[];\n}\n\n/** Affected ids grouped by the type/direction of the edge that reached them. */\nexport interface ImpactGroup {\n direction: \"outgoing\" | \"incoming\";\n type: TraceType;\n ids: string[];\n}\n\nexport interface ImpactReport {\n id: string;\n /** Every reachable artifact, sorted by distance then id. */\n affected: ImpactedArtifact[];\n groups: ImpactGroup[];\n}\n\nfunction endpointKey(locator: Locator): string {\n return locator.kind === \"local\" ? locator.id : locator.uri;\n}\n\n/**\n * Answer \"what is affected if this artifact changes?\" by traversing the trace\n * graph transitively in both directions from `id` (REQ-LOOP-IMPACT, SCN-IMPACT).\n * Breadth-first, cycle-safe, and deterministic: edges are visited in document\n * order and every output list is sorted. Doc and external endpoints are\n * reported but not traversed through; goalLinks are out of scope.\n */\nexport function impactOf(doc: RqmlDocument, id: string): ImpactReport {\n const idIndex = declaredIdIndex(doc);\n const visited = new Set<string>([id]);\n const affected: ImpactedArtifact[] = [];\n\n let frontier: { key: string; path: ImpactStep[] }[] = [{ key: id, path: [] }];\n let distance = 0;\n while (frontier.length > 0) {\n distance += 1;\n const next: typeof frontier = [];\n for (const node of frontier) {\n for (const edge of doc.trace) {\n const fromKey = endpointKey(edge.from);\n const toKey = endpointKey(edge.to);\n const hops: { direction: \"outgoing\" | \"incoming\"; here: string; far: Locator }[] =\n [\n { direction: \"outgoing\", here: fromKey, far: edge.to },\n { direction: \"incoming\", here: toKey, far: edge.from },\n ];\n for (const hop of hops) {\n const farKey = endpointKey(hop.far);\n if (hop.here !== node.key || visited.has(farKey)) continue;\n visited.add(farKey);\n const local = hop.far.kind === \"local\";\n const kind = local ? (idIndex.get(farKey)?.kind ?? \"unknown\") : hop.far.kind;\n const step: ImpactStep = {\n edgeId: edge.id,\n type: edge.type,\n direction: hop.direction,\n target: farKey,\n };\n const path = [...node.path, step];\n affected.push({ id: farKey, kind, distance, path });\n if (local) next.push({ key: farKey, path });\n }\n }\n }\n frontier = next;\n }\n\n affected.sort((a, b) => a.distance - b.distance || a.id.localeCompare(b.id));\n\n const groupIndex = new Map<string, ImpactGroup>();\n for (const artifact of affected) {\n const last = artifact.path[artifact.path.length - 1];\n if (last === undefined) continue;\n const key = `${last.direction}:${last.type}`;\n let group = groupIndex.get(key);\n if (group === undefined) {\n group = { direction: last.direction, type: last.type, ids: [] };\n groupIndex.set(key, group);\n }\n group.ids.push(artifact.id);\n }\n const groups = [...groupIndex.values()]\n .map((g) => ({ ...g, ids: [...new Set(g.ids)].sort() }))\n .sort(\n (a, b) => a.direction.localeCompare(b.direction) || a.type.localeCompare(b.type),\n );\n\n return { id, affected, groups };\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, trace refs, and state machines over the whole tree. */\nfunction walk(node: Node, declared: string[], refs: TraceRef[], machines: Node[]): 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 else if (key === \"stateMachine\") machines.push(item);\n walk(item, declared, refs, machines);\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 const machines: Node[] = [];\n walk(root, declared, refs, machines);\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 // State-machine reference integrity (REQ-CORE-SM-INTEGRITY). The XSD declares\n // smInitialRef and transition keyrefs, but they never fire for the same\n // namespace reason as allIds above, so: @initial and transition @from/@to\n // must resolve to states of the same machine, and final states must have no\n // outgoing transitions.\n for (const sm of machines) {\n const smId = attr(sm, \"id\") ?? \"\";\n const stateIds = new Set<string>();\n const finalStates = new Set<string>();\n for (const st of asArray<unknown>(sm.state).filter(isNode)) {\n const sid = attr(st, \"id\");\n if (sid === undefined) continue;\n stateIds.add(sid);\n if (attr(st, \"type\") === \"final\") finalStates.add(sid);\n }\n\n const initial = attr(sm, \"initial\");\n if (initial !== undefined && !stateIds.has(initial)) {\n const re = new RegExp(\n `<stateMachine\\\\b[^>]*?\\\\sinitial\\\\s*=\\\\s*\"${escapeRegExp(initial)}\"`,\n \"g\",\n );\n const lines = matchLines(xml, starts, re);\n const diag: Diagnostic = {\n source: \"validate\",\n severity: \"error\",\n rule: \"unresolved-state-ref\",\n message: `State machine \"${smId}\" initial state \"${initial}\" is not a declared state of the machine.`,\n };\n if (lines.length > 0) diag.line = lines[0];\n diagnostics.push(diag);\n }\n\n for (const tr of asArray<unknown>(sm.transition).filter(isNode)) {\n const trId = attr(tr, \"id\") ?? \"\";\n for (const side of [\"from\", \"to\"] as const) {\n const refId = attr(tr, side);\n if (refId === undefined || stateIds.has(refId)) continue;\n const re = new RegExp(\n `<transition\\\\b[^>]*?\\\\s${side}\\\\s*=\\\\s*\"${escapeRegExp(refId)}\"`,\n \"g\",\n );\n const lines = matchLines(xml, starts, re);\n const diag: Diagnostic = {\n source: \"validate\",\n severity: \"error\",\n rule: \"unresolved-state-ref\",\n message: `Transition \"${trId}\" (${side}) references unknown state \"${refId}\" in state machine \"${smId}\".`,\n };\n if (lines.length > 0) diag.line = lines[0];\n diagnostics.push(diag);\n }\n const from = attr(tr, \"from\");\n if (from !== undefined && finalStates.has(from)) {\n const re = new RegExp(\n `<transition\\\\b[^>]*?\\\\sid\\\\s*=\\\\s*\"${escapeRegExp(trId)}\"`,\n \"g\",\n );\n const lines = matchLines(xml, starts, re);\n const diag: Diagnostic = {\n source: \"validate\",\n severity: \"error\",\n rule: \"final-state-outgoing\",\n message: `Final state \"${from}\" has outgoing transition \"${trId}\" in state machine \"${smId}\".`,\n };\n if (lines.length > 0) diag.line = lines[0];\n diagnostics.push(diag);\n }\n }\n }\n\n return diagnostics;\n}\n","import { checkIntegrity } from \"../analyze/integrity.js\";\nimport type { TraceEdge } from \"../model/types.js\";\nimport { parse } from \"../parse/parse.js\";\nimport { declaredIdIndex } from \"../trace/index.js\";\n\n/**\n * Mechanical trace-link recording (REQ-LOOP-LINK) and maintenance\n * (REQ-LOOP-RELINK): append a schema-valid `implements` or `verifiedBy` edge\n * to a document's trace section, or repoint an existing edge's external\n * locator in place.\n *\n * The edits are textual — an edge block is inserted before `</trace>`, or one\n * locator element is replaced within its edge — rather than a parse/serialize\n * round-trip, so XML comments and hand formatting in the spec survive\n * untouched. The result is re-parsed and integrity-checked before being\n * returned; XSD validation is left to the caller, which keeps this entry\n * WASM-free.\n */\n\nexport interface LinkRequest {\n /** Declared local artifact id, usually a requirement. */\n artifactId: string;\n /** External locator URI of the code or test artifact (repo-relative path, file:, …). */\n uri: string;\n type: \"implements\" | \"verifiedBy\";\n /** Explicit edge id; derived from the artifact id when omitted. */\n edgeId?: string;\n /** Locator @kind hint; defaults to \"code\" for implements, \"test\" for verifiedBy. */\n kind?: string;\n /** Locator @title hint. */\n title?: string;\n}\n\nexport type LinkResult =\n | { ok: true; xml: string; edgeId: string; edgeXml: string }\n | { ok: false; error: string };\n\nconst ID_PATTERN = /^[A-Za-z][A-Za-z0-9._-]{1,79}$/;\n\nfunction escapeAttr(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction deriveEdgeId(\n type: LinkRequest[\"type\"],\n artifactId: string,\n taken: (id: string) => boolean,\n): string {\n const prefix = type === \"implements\" ? \"E-IMPL-\" : \"E-VER-\";\n const base = prefix + artifactId.replace(/^REQ-/, \"\");\n if (!taken(base)) return base;\n for (let n = 2; ; n++) {\n const candidate = `${base}-${n}`;\n if (!taken(candidate)) return candidate;\n }\n}\n\nfunction edgeBlock(request: LinkRequest, edgeId: string, indent: string): string {\n const kind = request.kind ?? (request.type === \"implements\" ? \"code\" : \"test\");\n const titleAttr =\n request.title !== undefined ? ` title=\"${escapeAttr(request.title)}\"` : \"\";\n const external = `<external uri=\"${escapeAttr(request.uri)}\" kind=\"${escapeAttr(kind)}\"${titleAttr}/>`;\n const local = `<local id=\"${request.artifactId}\"/>`;\n // implements: code → requirement (coverage counts the incoming edge);\n // verifiedBy: requirement → test.\n const [from, to] =\n request.type === \"implements\" ? [external, local] : [local, external];\n return [\n `${indent}<edge id=\"${edgeId}\" type=\"${request.type}\">`,\n `${indent} <from><locator>${from}</locator></from>`,\n `${indent} <to><locator>${to}</locator></to>`,\n `${indent}</edge>`,\n ].join(\"\\n\");\n}\n\n/** Start-of-line offset and leading whitespace of the line containing `index`. */\nfunction lineInfo(xml: string, index: number): { start: number; indent: string } {\n const start = xml.lastIndexOf(\"\\n\", index - 1) + 1;\n const prefix = xml.slice(start, index);\n return { start, indent: /^[ \\t]*$/.test(prefix) ? prefix : \"\" };\n}\n\n/**\n * Append a trace edge to the document text. Deterministic: the same document\n * and request always produce the same edge id and output.\n */\nexport function appendTraceEdge(xml: string, request: LinkRequest): LinkResult {\n const parsed = parse(xml);\n if (!parsed.ok) {\n return { ok: false, error: `document does not parse: ${parsed.error.message}` };\n }\n const idIndex = declaredIdIndex(parsed.document);\n if (!idIndex.has(request.artifactId)) {\n return {\n ok: false,\n error: `artifact \"${request.artifactId}\" is not declared in the document`,\n };\n }\n if (request.uri.trim() === \"\") {\n return { ok: false, error: \"locator uri must not be empty\" };\n }\n\n let edgeId: string;\n if (request.edgeId !== undefined) {\n if (!ID_PATTERN.test(request.edgeId)) {\n return {\n ok: false,\n error: `edge id \"${request.edgeId}\" does not match the RQML id pattern`,\n };\n }\n if (idIndex.has(request.edgeId)) {\n return { ok: false, error: `edge id \"${request.edgeId}\" is already declared` };\n }\n edgeId = request.edgeId;\n } else {\n edgeId = deriveEdgeId(request.type, request.artifactId, (id) => idIndex.has(id));\n }\n\n let updated: string;\n let edgeXml: string;\n const closeIdx = xml.lastIndexOf(\"</trace>\");\n if (closeIdx >= 0) {\n const { start, indent } = lineInfo(xml, closeIdx);\n edgeXml = edgeBlock(request, edgeId, `${indent} `);\n updated = `${xml.slice(0, start)}${edgeXml}\\n${xml.slice(start)}`;\n } else {\n // No trace section yet: create one in its fixed position, before\n // governance when present, else before the document close.\n const anchorIdx = (() => {\n const gov = xml.indexOf(\"<governance\");\n return gov >= 0 ? gov : xml.lastIndexOf(\"</rqml>\");\n })();\n if (anchorIdx < 0) return { ok: false, error: \"no </rqml> close tag found\" };\n const { start, indent } = lineInfo(xml, anchorIdx);\n const sectionIndent = indent === \"\" ? \" \" : indent;\n edgeXml = edgeBlock(request, edgeId, `${sectionIndent} `);\n const section = `${sectionIndent}<trace>\\n${edgeXml}\\n${sectionIndent}</trace>\\n`;\n updated = `${xml.slice(0, start)}${section}${xml.slice(start)}`;\n }\n\n const before = checkIntegrity(xml).length;\n const reparsed = parse(updated);\n if (!reparsed.ok) {\n return {\n ok: false,\n error: `edit produced an unparseable document: ${reparsed.error.message}`,\n };\n }\n if (checkIntegrity(updated).length > before) {\n return {\n ok: false,\n error: \"edit introduced an integrity violation; document left unchanged\",\n };\n }\n\n return { ok: true, xml: updated, edgeId, edgeXml: edgeXml.trim() };\n}\n\nexport interface UpdateLinkRequest {\n /** Declared local artifact id the edge must link. */\n artifactId: string;\n /** Replacement external locator URI. */\n uri: string;\n type: \"implements\" | \"verifiedBy\";\n /** Explicit edge id; matched by the append-time derivation when omitted. */\n edgeId?: string;\n /** Locator @kind; the edge's existing kind is preserved when omitted. */\n kind?: string;\n /** Locator @title; the edge's existing title is preserved when omitted. */\n title?: string;\n}\n\nexport type UpdateLinkResult =\n | { ok: true; xml: string; edgeId: string; edgeXml: string; previousUri: string }\n | { ok: false; error: string };\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst EXTERNAL_ELEMENT = /<external\\b[^>]*(?:\\/>|>[\\s\\S]*?<\\/external>)/g;\n\n/**\n * Replace the external locator of an existing `implements`/`verifiedBy` edge\n * (REQ-LOOP-RELINK). Only the locator element changes; the edge id, type,\n * orientation, and everything else in the document are left untouched.\n * Deterministic: the same document and request always produce the same output.\n */\nexport function updateTraceEdge(\n xml: string,\n request: UpdateLinkRequest,\n): UpdateLinkResult {\n const parsed = parse(xml);\n if (!parsed.ok) {\n return { ok: false, error: `document does not parse: ${parsed.error.message}` };\n }\n if (request.uri.trim() === \"\") {\n return { ok: false, error: \"locator uri must not be empty\" };\n }\n\n const prefix = request.type === \"implements\" ? \"E-IMPL-\" : \"E-VER-\";\n const edgeId = request.edgeId ?? prefix + request.artifactId.replace(/^REQ-/, \"\");\n const edge: TraceEdge | undefined = parsed.document.trace.find((e) => e.id === edgeId);\n if (edge === undefined) {\n return {\n ok: false,\n error:\n request.edgeId !== undefined\n ? `no trace edge with id \"${edgeId}\" exists`\n : `no trace edge with the derived id \"${edgeId}\" exists; pass --id for an explicitly named edge`,\n };\n }\n if (edge.type !== request.type) {\n return {\n ok: false,\n error: `edge \"${edgeId}\" has type \"${edge.type}\", not \"${request.type}\"`,\n };\n }\n const local =\n edge.from.kind === \"local\"\n ? edge.from\n : edge.to.kind === \"local\"\n ? edge.to\n : undefined;\n if (local === undefined || local.id !== request.artifactId) {\n return {\n ok: false,\n error: `edge \"${edgeId}\" does not link artifact \"${request.artifactId}\"`,\n };\n }\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) {\n return { ok: false, error: `edge \"${edgeId}\" has no external locator to update` };\n }\n\n const openTag = new RegExp(`<edge\\\\b[^>]*\\\\bid=\"${escapeRegExp(edgeId)}\"[^>]*>`);\n const open = openTag.exec(xml);\n const closeIdx = open === null ? -1 : xml.indexOf(\"</edge>\", open.index);\n if (open === null || closeIdx < 0) {\n return { ok: false, error: `could not locate edge \"${edgeId}\" in the document text` };\n }\n const span = xml.slice(open.index, closeIdx);\n const occurrences = span.match(EXTERNAL_ELEMENT) ?? [];\n if (occurrences.length !== 1) {\n return {\n ok: false,\n error: `edge \"${edgeId}\" does not contain exactly one external locator element`,\n };\n }\n\n const kind =\n request.kind ??\n external.hintKind ??\n (request.type === \"implements\" ? \"code\" : \"test\");\n const title = request.title ?? external.title;\n const titleAttr = title !== undefined ? ` title=\"${escapeAttr(title)}\"` : \"\";\n const replacement = `<external uri=\"${escapeAttr(request.uri)}\" kind=\"${escapeAttr(kind)}\"${titleAttr}/>`;\n // Replacer function, not a string: a `$` in the escaped URI must stay literal.\n const editedSpan = span.replace(occurrences[0] as string, () => replacement);\n const updated = xml.slice(0, open.index) + editedSpan + xml.slice(closeIdx);\n\n const before = checkIntegrity(xml).length;\n const reparsed = parse(updated);\n if (!reparsed.ok) {\n return {\n ok: false,\n error: `edit produced an unparseable document: ${reparsed.error.message}`,\n };\n }\n if (checkIntegrity(updated).length > before) {\n return {\n ok: false,\n error: \"edit introduced an integrity violation; document left unchanged\",\n };\n }\n\n return {\n ok: true,\n xml: updated,\n edgeId,\n edgeXml: `${editedSpan}</edge>`.trim(),\n previousUri: external.uri,\n };\n}\n","/**\n * Document outline: a normalized, fully-typed, stable-ordered projection of an\n * RqmlDocument across every present section. It is the reusable intermediate\n * the export pipeline (and the markdown serializer) consume instead of the raw\n * XML or the WASM-backed validator. Pure and deterministic: no XML, no WASM.\n *\n * Trace edges are resolved via `resolveTrace`, so each element node carries its\n * outgoing references with target titles and a resolved/dangling flag.\n */\n\nimport type { Criterion, Locator, Requirement, RqmlDocument } from \"../model/types.js\";\nimport { type ResolvedEndpoint, resolveTrace } from \"../trace/index.js\";\n\nexport interface OutlineField {\n label: string;\n value: string;\n}\n\nexport interface OutlineRef {\n /** The trace edge type, e.g. \"satisfies\", \"refines\". */\n relation: string;\n /** Local id, or the URI for doc/external targets. */\n targetId: string;\n /** Whether a local target id resolved to a declared element. */\n resolved: boolean;\n targetTitle?: string;\n}\n\nexport interface OutlineNode {\n /** Element kind (\"req\", \"goal\", …) or \"section\" for section wrappers. */\n kind: string;\n id?: string;\n title: string;\n fields: OutlineField[];\n refs?: OutlineRef[];\n children?: OutlineNode[];\n}\n\nexport interface DocumentOutline {\n docId: string;\n version: string;\n status: string;\n title: string;\n system: string;\n summary?: string;\n sections: OutlineNode[];\n}\n\nfunction fields(...pairs: Array<[string, string | undefined]>): OutlineField[] {\n const out: OutlineField[] = [];\n for (const [label, value] of pairs) {\n if (value !== undefined && value !== \"\") out.push({ label, value });\n }\n return out;\n}\n\nfunction locatorLabel(loc: Locator): string {\n if (loc.kind === \"local\") return loc.id;\n if (loc.kind === \"doc\") return `${loc.uri}#${loc.id}`;\n return loc.uri;\n}\n\n/**\n * Human title for every id-bearing element, so trace tables and refs to\n * non-requirement targets (goals, risks, states, …) read meaningfully. First\n * declaration wins, mirroring `declaredElements`/`declaredIdIndex`.\n */\nexport function collectTitles(doc: RqmlDocument): Map<string, string> {\n const m = new Map<string, string>();\n const set = (id: string | undefined, title: string | undefined): void => {\n if (id !== undefined && title !== undefined && title !== \"\" && !m.has(id)) {\n m.set(id, title);\n }\n };\n for (const p of doc.meta.profiles ?? []) set(p.id, p.type);\n const c = doc.catalogs;\n if (c) {\n for (const t of c.glossary ?? []) set(t.id, t.name);\n for (const a of c.actors ?? []) set(a.id, a.name);\n for (const s of c.stakeholders ?? []) set(s.id, s.name);\n for (const x of c.constraints ?? []) set(x.id, x.statement);\n for (const x of c.policies ?? []) set(x.id, x.obligation);\n for (const x of c.decisions ?? []) set(x.id, x.decision);\n for (const x of c.risks ?? []) set(x.id, x.statement);\n }\n const d = doc.domain;\n if (d) {\n for (const e of d.entities ?? []) {\n set(e.id, e.name);\n for (const a of e.attrs ?? []) set(a.id, a.name);\n }\n for (const r of d.businessRules ?? []) set(r.id, r.statement);\n }\n const g = doc.goals;\n if (g) {\n for (const x of g.goals ?? []) set(x.id, x.title);\n for (const x of g.qualityGoals ?? []) set(x.id, x.title);\n for (const x of g.obstacles ?? []) set(x.id, x.title);\n for (const x of g.goalLinks ?? []) set(x.id, x.id);\n }\n const sc = doc.scenarios;\n if (sc) {\n for (const x of sc.scenarios ?? []) set(x.id, x.title);\n for (const x of sc.misuseCases ?? []) set(x.id, x.title);\n for (const x of sc.edgeCases ?? []) set(x.id, x.title);\n }\n for (const p of doc.packages) {\n set(p.id, p.title);\n for (const r of p.requirements) set(r.id, r.title);\n }\n for (const r of doc.looseRequirements) set(r.id, r.title);\n const b = doc.behavior;\n if (b) {\n for (const sm of b.stateMachines ?? []) {\n set(sm.id, sm.name);\n for (const st of sm.states) set(st.id, st.name);\n }\n }\n const it = doc.interfaces;\n if (it) {\n for (const api of it.apis ?? []) {\n set(api.id, api.name);\n for (const ep of api.endpoints ?? []) set(ep.id, `${ep.method} ${ep.path}`);\n }\n for (const ev of it.events ?? []) set(ev.id, ev.name);\n }\n const v = doc.verification;\n if (v) {\n for (const ts of v.testSuites ?? []) set(ts.id, ts.title);\n for (const tc of v.testCases ?? []) set(tc.id, tc.title);\n }\n const gv = doc.governance;\n if (gv) {\n for (const x of gv.issues ?? []) set(x.id, x.statement);\n for (const x of gv.approvals ?? []) set(x.id, x.role);\n }\n return m;\n}\n\nfunction endpointTitle(\n ep: ResolvedEndpoint,\n titleById: Map<string, string>,\n): string | undefined {\n if (ep.requirement !== undefined) return ep.requirement.title;\n if (ep.locator.title !== undefined) return ep.locator.title;\n if (ep.locator.kind === \"local\") return titleById.get(ep.locator.id);\n return undefined;\n}\n\nfunction endpointLabel(ep: ResolvedEndpoint, titleById: Map<string, string>): string {\n let s = locatorLabel(ep.locator);\n const hint = endpointTitle(ep, titleById);\n if (hint !== undefined) s += ` (${hint})`;\n if (ep.locator.kind === \"local\" && ep.target === undefined) s += \" [unresolved]\";\n return s;\n}\n\nexport function buildOutline(doc: RqmlDocument): DocumentOutline {\n const res = resolveTrace(doc);\n const titleById = collectTitles(doc);\n\n const refsBySource = new Map<string, OutlineRef[]>();\n for (const re of res.edges) {\n if (re.from.locator.kind !== \"local\") continue;\n const toLoc = re.to.locator;\n const targetId = toLoc.kind === \"local\" ? toLoc.id : toLoc.uri;\n const resolved = toLoc.kind === \"local\" ? re.to.target !== undefined : true;\n const ref: OutlineRef = { relation: re.edge.type, targetId, resolved };\n const tt = endpointTitle(re.to, titleById);\n if (tt !== undefined) ref.targetTitle = tt;\n const arr = refsBySource.get(re.from.locator.id);\n if (arr) arr.push(ref);\n else refsBySource.set(re.from.locator.id, [ref]);\n }\n\n const node = (\n kind: string,\n id: string | undefined,\n title: string,\n flds: OutlineField[],\n children?: OutlineNode[],\n ): OutlineNode => {\n const n: OutlineNode = { kind, title, fields: flds };\n if (id !== undefined) n.id = id;\n const refs = id !== undefined ? refsBySource.get(id) : undefined;\n if (refs && refs.length > 0) n.refs = refs;\n if (children && children.length > 0) n.children = children;\n return n;\n };\n\n const sections: OutlineNode[] = [];\n const pushSection = (\n title: string,\n flds: OutlineField[],\n nodes: OutlineNode[],\n ): void => {\n if (flds.length === 0 && nodes.length === 0) return;\n const s: OutlineNode = { kind: \"section\", title, fields: flds };\n if (nodes.length > 0) s.children = nodes;\n sections.push(s);\n };\n\n const meta = doc.meta;\n\n // --- Meta extras (dates, conventions, profiles) ---\n pushSection(\n \"Meta\",\n fields(\n [\"Created\", meta.dates?.created],\n [\"Updated\", meta.dates?.updated],\n [\"Target release\", meta.dates?.targetRelease],\n [\"Normative keywords\", meta.conventions?.normativeKeywords],\n [\"ID conventions\", meta.conventions?.idConventions],\n ),\n (meta.profiles ?? []).map((p) =>\n node(\"profile\", p.id, p.type, fields([\"Description\", p.description])),\n ),\n );\n\n // --- Catalogs ---\n const cat = doc.catalogs;\n if (cat) {\n pushSection(\n \"Glossary\",\n [],\n (cat.glossary ?? []).map((t) =>\n node(\n \"term\",\n t.id,\n t.name,\n fields([\"Definition\", t.definition], [\"Synonyms\", t.synonyms?.join(\", \")]),\n ),\n ),\n );\n pushSection(\n \"Actors\",\n [],\n (cat.actors ?? []).map((a) =>\n node(\n \"actor\",\n a.id,\n a.name,\n fields(\n [\"Type\", a.type],\n [\"Description\", a.description],\n [\"Goal refs\", a.goalRefs?.join(\", \")],\n ),\n ),\n ),\n );\n pushSection(\n \"Stakeholders\",\n [],\n (cat.stakeholders ?? []).map((s) =>\n node(\n \"stakeholder\",\n s.id,\n s.name,\n fields([\"Org\", s.org], [\"Concerns\", s.concerns]),\n ),\n ),\n );\n pushSection(\n \"Constraints\",\n [],\n (cat.constraints ?? []).map((c) =>\n node(\n \"constraint\",\n c.id,\n c.statement,\n fields([\"Severity\", c.severity], [\"Source\", c.source]),\n ),\n ),\n );\n pushSection(\n \"Policies\",\n [],\n (cat.policies ?? []).map((p) =>\n node(\n \"policy\",\n p.id,\n p.obligation,\n fields([\"Source\", p.source], [\"Evidence\", p.evidence]),\n ),\n ),\n );\n pushSection(\n \"Decisions\",\n [],\n (cat.decisions ?? []).map((d) =>\n node(\n \"decision\",\n d.id,\n d.decision,\n fields(\n [\"Status\", d.status],\n [\"Context\", d.context],\n [\"Alternatives\", d.alternatives],\n [\"Consequences\", d.consequences],\n ),\n ),\n ),\n );\n pushSection(\n \"Risks\",\n [],\n (cat.risks ?? []).map((r) =>\n node(\n \"risk\",\n r.id,\n r.statement,\n fields([\"Severity\", r.severity], [\"Mitigation\", r.mitigation]),\n ),\n ),\n );\n }\n\n // --- Domain ---\n const dom = doc.domain;\n if (dom) {\n const entityNodes = (dom.entities ?? []).map((e) =>\n node(\n \"entity\",\n e.id,\n e.name,\n fields([\"Description\", e.description]),\n (e.attrs ?? []).map((a) =>\n node(\n \"attr\",\n a.id,\n a.name,\n fields(\n [\"Type\", a.type],\n [\"Required\", a.required === undefined ? undefined : String(a.required)],\n [\"Description\", a.description],\n [\"Constraints\", a.constraints],\n ),\n ),\n ),\n ),\n );\n const ruleNodes = (dom.businessRules ?? []).map((r) =>\n node(\"rule\", r.id, r.statement, fields([\"Examples\", r.examples])),\n );\n pushSection(\"Domain\", fields([\"Overview\", dom.overview]), [\n ...entityNodes,\n ...ruleNodes,\n ]);\n }\n\n // --- Goals ---\n const goals = doc.goals;\n if (goals) {\n pushSection(\n \"Goals\",\n [],\n (goals.goals ?? []).map((g) =>\n node(\n \"goal\",\n g.id,\n g.title,\n fields(\n [\"Priority\", g.priority],\n [\"Status\", g.status],\n [\"Owner\", g.ownerRef],\n [\"Statement\", g.statement],\n [\"Rationale\", g.rationale],\n ),\n ),\n ),\n );\n pushSection(\n \"Quality goals\",\n [],\n (goals.qualityGoals ?? []).map((g) =>\n node(\n \"qgoal\",\n g.id,\n g.title,\n fields(\n [\"Priority\", g.priority],\n [\"Status\", g.status],\n [\"Statement\", g.statement],\n [\"Metric\", g.metric],\n ),\n ),\n ),\n );\n pushSection(\n \"Obstacles\",\n [],\n (goals.obstacles ?? []).map((o) =>\n node(\n \"obstacle\",\n o.id,\n o.title,\n fields(\n [\"Likelihood\", o.likelihood],\n [\"Severity\", o.severity],\n [\"Statement\", o.statement],\n [\"Mitigation\", o.mitigation],\n ),\n ),\n ),\n );\n pushSection(\n \"Goal links\",\n [],\n (goals.goalLinks ?? []).map((l) =>\n node(\n \"goalLink\",\n l.id,\n l.id,\n fields(\n [\"From\", l.from],\n [\"To\", l.to],\n [\"Type\", l.type],\n [\"Confidence\", l.confidence?.toString()],\n ),\n ),\n ),\n );\n }\n\n // --- Scenarios ---\n const sc = doc.scenarios;\n if (sc) {\n const scNode =\n (kind: string) =>\n (s: { id: string; title: string; actorRef?: string; narrative: string }) =>\n node(\n kind,\n s.id,\n s.title,\n fields([\"Actor\", s.actorRef], [\"Narrative\", s.narrative]),\n );\n pushSection(\"Scenarios\", [], (sc.scenarios ?? []).map(scNode(\"scenario\")));\n pushSection(\"Misuse cases\", [], (sc.misuseCases ?? []).map(scNode(\"misuseCase\")));\n pushSection(\"Edge cases\", [], (sc.edgeCases ?? []).map(scNode(\"edgeCase\")));\n }\n\n // --- Requirements ---\n const criterionNode = (c: Criterion): OutlineNode =>\n node(\n \"criterion\",\n c.id,\n c.id ?? \"Acceptance criterion\",\n fields([\"Given\", c.given], [\"When\", c.when], [\"Then\", c.then]),\n );\n const reqNode = (r: Requirement): OutlineNode =>\n node(\n \"req\",\n r.id,\n r.title,\n fields(\n [\"Type\", r.type],\n [\"Status\", r.status],\n [\"Priority\", r.priority],\n [\"Owner\", r.ownerRef],\n [\"Applies to\", r.appliesTo],\n [\"Statement\", r.statement],\n [\"Rationale\", r.rationale],\n [\"Notes\", r.notes],\n ),\n r.acceptance.map(criterionNode),\n );\n const reqNodes: OutlineNode[] = [\n ...doc.packages.map((p) =>\n node(\n \"reqPackage\",\n p.id,\n p.title,\n fields([\"Owner\", p.ownerRef], [\"Description\", p.description]),\n p.requirements.map(reqNode),\n ),\n ),\n ...doc.looseRequirements.map(reqNode),\n ];\n pushSection(\"Requirements\", [], reqNodes);\n\n // --- Behavior ---\n const beh = doc.behavior;\n if (beh) {\n pushSection(\n \"Behavior\",\n [],\n (beh.stateMachines ?? []).map((sm) =>\n node(\n \"stateMachine\",\n sm.id,\n sm.name,\n fields(\n [\"Initial\", sm.initial],\n [\"Entity\", sm.entityRef],\n [\"Description\", sm.description],\n ),\n [\n ...sm.states.map((st) =>\n node(\n \"state\",\n st.id,\n st.name,\n fields(\n [\"Type\", st.type],\n [\"Description\", st.description],\n [\"On entry\", st.onEntry],\n [\"On exit\", st.onExit],\n [\"Invariant\", st.invariant],\n ),\n ),\n ),\n ...(sm.transitions ?? []).map((tr) =>\n node(\n \"transition\",\n tr.id,\n `${tr.from} → ${tr.to}`,\n fields(\n [\"From\", tr.from],\n [\"To\", tr.to],\n [\"Event\", tr.event],\n [\"Trigger\", tr.trigger],\n [\"Guard\", tr.guard],\n [\"Action\", tr.action],\n [\"Description\", tr.description],\n ),\n ),\n ),\n ],\n ),\n ),\n );\n }\n\n // --- Interfaces ---\n const ifaces = doc.interfaces;\n if (ifaces) {\n const apiNodes = (ifaces.apis ?? []).map((api) =>\n node(\n \"api\",\n api.id,\n api.name,\n fields(\n [\"Protocol\", api.protocol],\n [\"Auth\", api.auth],\n [\"Description\", api.description],\n ),\n (api.endpoints ?? []).map((ep) =>\n node(\n \"endpoint\",\n ep.id,\n `${ep.method} ${ep.path}`,\n fields(\n [\"Summary\", ep.summary],\n [\"Request\", ep.request],\n [\"Response\", ep.response],\n [\"Errors\", ep.errors],\n ),\n ),\n ),\n ),\n );\n const eventNodes = (ifaces.events ?? []).map((ev) =>\n node(\n \"event\",\n ev.id,\n ev.name,\n fields([\"Description\", ev.description], [\"Payload\", ev.payload]),\n ),\n );\n pushSection(\"Interfaces\", [], [...apiNodes, ...eventNodes]);\n }\n\n // --- Verification ---\n const ver = doc.verification;\n if (ver) {\n const suiteNodes = (ver.testSuites ?? []).map((ts) =>\n node(\"testSuite\", ts.id, ts.title, fields([\"Description\", ts.description])),\n );\n const caseNodes = (ver.testCases ?? []).map((tc) =>\n node(\n \"testCase\",\n tc.id,\n tc.title,\n fields(\n [\"Type\", tc.type],\n [\"Purpose\", tc.purpose],\n [\"Steps\", tc.steps],\n [\"Expected\", tc.expected],\n ),\n ),\n );\n pushSection(\"Verification\", [], [...suiteNodes, ...caseNodes]);\n }\n\n // --- Trace ---\n const edgeNodes = res.edges.map((re) => {\n const e = re.edge;\n return node(\n \"edge\",\n e.id,\n e.id,\n fields(\n [\"Type\", e.type],\n [\"From\", endpointLabel(re.from, titleById)],\n [\"To\", endpointLabel(re.to, titleById)],\n [\"Confidence\", e.confidence?.toString()],\n [\"Status\", e.status],\n [\"Created by\", e.createdBy],\n [\"Created at\", e.createdAt],\n [\"Tags\", e.tags?.join(\" \")],\n [\"Notes\", e.notes],\n ),\n );\n });\n pushSection(\"Trace\", [], edgeNodes);\n\n // --- Governance ---\n const gov = doc.governance;\n if (gov) {\n const issueNodes = (gov.issues ?? []).map((i) =>\n node(\n \"issue\",\n i.id,\n i.statement,\n fields([\"Status\", i.status], [\"Owner\", i.owner], [\"Notes\", i.notes]),\n ),\n );\n const approvalNodes = (gov.approvals ?? []).map((a) =>\n node(\n \"approval\",\n a.id,\n a.role,\n fields([\"Status\", a.status], [\"Description\", a.description]),\n ),\n );\n pushSection(\"Governance\", [], [...issueNodes, ...approvalNodes]);\n }\n\n const outline: DocumentOutline = {\n docId: doc.docId,\n version: doc.version,\n status: doc.status,\n title: meta.title,\n system: meta.system,\n sections,\n };\n if (meta.summary !== undefined) outline.summary = meta.summary;\n return outline;\n}\n","import type { Criterion, Locator, RqmlDocument, TraceType } from \"../model/types.js\";\nimport { declaredIdIndex, requirementIndex } from \"../trace/index.js\";\n\n/** One trace edge touching the extracted artifact, with its far endpoint. */\nexport interface SliceEdge {\n edgeId: string;\n type: TraceType;\n direction: \"outgoing\" | \"incoming\";\n /** Local id or doc/external URI at the far end. */\n target: string;\n /** Element kind for local targets, else the locator kind. */\n targetKind: string;\n title?: string;\n}\n\n/**\n * A single artifact extracted with everything an agent needs to work on it,\n * and nothing else (REQ-LOOP-SHOW): identity, normative content, acceptance\n * criteria, and the trace neighborhood.\n */\nexport interface ArtifactSlice {\n id: string;\n kind: string;\n title?: string;\n /** Statement, narrative, definition, or description — whatever the kind carries. */\n statement?: string;\n reqType?: string;\n status?: string;\n priority?: string;\n rationale?: string;\n notes?: string;\n acceptance?: Criterion[];\n edges: SliceEdge[];\n}\n\nfunction endpointKey(locator: Locator): string {\n return locator.kind === \"local\" ? locator.id : locator.uri;\n}\n\n/** Best-effort title/statement lookup for non-requirement kinds. */\nfunction details(doc: RqmlDocument, id: string, kind: string): Partial<ArtifactSlice> {\n switch (kind) {\n case \"goal\": {\n const g = doc.goals?.goals?.find((x) => x.id === id);\n return g\n ? {\n title: g.title,\n statement: g.statement,\n status: g.status,\n priority: g.priority,\n rationale: g.rationale,\n }\n : {};\n }\n case \"qgoal\": {\n const g = doc.goals?.qualityGoals?.find((x) => x.id === id);\n return g\n ? {\n title: g.title,\n statement: g.statement,\n status: g.status,\n priority: g.priority,\n notes: g.metric,\n }\n : {};\n }\n case \"obstacle\": {\n const o = doc.goals?.obstacles?.find((x) => x.id === id);\n return o ? { title: o.title, statement: o.statement, notes: o.mitigation } : {};\n }\n case \"scenario\":\n case \"misuseCase\":\n case \"edgeCase\": {\n const all = [\n ...(doc.scenarios?.scenarios ?? []),\n ...(doc.scenarios?.misuseCases ?? []),\n ...(doc.scenarios?.edgeCases ?? []),\n ];\n const s = all.find((x) => x.id === id);\n return s ? { title: s.title, statement: s.narrative } : {};\n }\n case \"testCase\": {\n const t = doc.verification?.testCases?.find((x) => x.id === id);\n return t ? { title: t.title, statement: t.purpose, notes: t.expected } : {};\n }\n case \"testSuite\": {\n const t = doc.verification?.testSuites?.find((x) => x.id === id);\n return t ? { title: t.title, statement: t.description } : {};\n }\n case \"risk\": {\n const r = doc.catalogs?.risks?.find((x) => x.id === id);\n return r ? { statement: r.statement, notes: r.mitigation } : {};\n }\n case \"constraint\": {\n const c = doc.catalogs?.constraints?.find((x) => x.id === id);\n return c ? { statement: c.statement } : {};\n }\n case \"decision\": {\n const d = doc.catalogs?.decisions?.find((x) => x.id === id);\n return d ? { statement: d.decision, rationale: d.context, status: d.status } : {};\n }\n case \"term\": {\n const t = doc.catalogs?.glossary?.find((x) => x.id === id);\n return t ? { title: t.name, statement: t.definition } : {};\n }\n case \"rule\": {\n const r = doc.domain?.businessRules?.find((x) => x.id === id);\n return r ? { statement: r.statement, notes: r.examples } : {};\n }\n case \"entity\": {\n const e = doc.domain?.entities?.find((x) => x.id === id);\n return e ? { title: e.name, statement: e.description } : {};\n }\n case \"stateMachine\": {\n const sm = doc.behavior?.stateMachines?.find((x) => x.id === id);\n return sm ? { title: sm.name, statement: sm.description } : {};\n }\n default:\n return {};\n }\n}\n\n/**\n * Extract one artifact by id with its trace neighborhood, or `undefined` when\n * the id is not declared in the document. Pure and deterministic; edges appear\n * in document order.\n */\nexport function extractArtifact(\n doc: RqmlDocument,\n id: string,\n): ArtifactSlice | undefined {\n const idIndex = declaredIdIndex(doc);\n const ref = idIndex.get(id);\n if (ref === undefined) return undefined;\n\n const slice: ArtifactSlice = { id, kind: ref.kind, edges: [] };\n\n const req = requirementIndex(doc).get(id);\n if (req !== undefined) {\n slice.title = req.title;\n slice.statement = req.statement;\n slice.reqType = req.type;\n if (req.status !== undefined) slice.status = req.status;\n if (req.priority !== undefined) slice.priority = req.priority;\n if (req.rationale !== undefined) slice.rationale = req.rationale;\n if (req.notes !== undefined) slice.notes = req.notes;\n if (req.acceptance.length > 0) slice.acceptance = req.acceptance;\n } else {\n const extra = Object.fromEntries(\n Object.entries(details(doc, id, ref.kind)).filter(([, v]) => v !== undefined),\n );\n Object.assign(slice, extra);\n }\n\n for (const edge of doc.trace) {\n const fromKey = endpointKey(edge.from);\n const toKey = endpointKey(edge.to);\n if (fromKey !== id && toKey !== id) continue;\n const direction: SliceEdge[\"direction\"] = fromKey === id ? \"outgoing\" : \"incoming\";\n const far = direction === \"outgoing\" ? edge.to : edge.from;\n const target = endpointKey(far);\n const targetKind =\n far.kind === \"local\" ? (idIndex.get(target)?.kind ?? \"unknown\") : far.kind;\n const sliceEdge: SliceEdge = {\n edgeId: edge.id,\n type: edge.type,\n direction,\n target,\n targetKind,\n };\n if (far.kind !== \"local\" && far.title !== undefined) sliceEdge.title = far.title;\n slice.edges.push(sliceEdge);\n }\n\n return slice;\n}\n\n/** Render a slice as compact markdown for human or agent consumption. */\nexport function sliceToMarkdown(slice: ArtifactSlice): string {\n const lines: string[] = [];\n const heading = slice.title !== undefined ? `${slice.id} — ${slice.title}` : slice.id;\n lines.push(`## ${heading}`);\n\n const facts: string[] = [\n `kind: ${slice.kind}${slice.reqType !== undefined ? ` (${slice.reqType})` : \"\"}`,\n ];\n if (slice.status !== undefined) facts.push(`status: ${slice.status}`);\n if (slice.priority !== undefined) facts.push(`priority: ${slice.priority}`);\n lines.push(facts.join(\" · \"), \"\");\n\n if (slice.statement !== undefined) lines.push(slice.statement.trim(), \"\");\n if (slice.rationale !== undefined) {\n lines.push(`**Rationale:** ${slice.rationale.trim()}`, \"\");\n }\n if (slice.notes !== undefined) lines.push(`**Notes:** ${slice.notes.trim()}`, \"\");\n\n if (slice.acceptance !== undefined && slice.acceptance.length > 0) {\n lines.push(\"### Acceptance\");\n for (const c of slice.acceptance) {\n const parts: string[] = [];\n if (c.given !== undefined) parts.push(`GIVEN ${c.given.trim()}`);\n if (c.when !== undefined) parts.push(`WHEN ${c.when.trim()}`);\n parts.push(`THEN ${c.then.trim()}`);\n lines.push(`- ${c.id !== undefined ? `\\`${c.id}\\` ` : \"\"}${parts.join(\" \")}`);\n }\n lines.push(\"\");\n }\n\n if (slice.edges.length > 0) {\n lines.push(\"### Trace\");\n for (const e of slice.edges) {\n const arrow = e.direction === \"outgoing\" ? \"→\" : \"←\";\n lines.push(`- ${arrow} ${e.type} ${e.target} (${e.targetKind}, \\`${e.edgeId}\\`)`);\n }\n lines.push(\"\");\n }\n\n return `${lines.join(\"\\n\").trimEnd()}\\n`;\n}\n","/**\n * Schema-valid RQML snippet skeletons (REQ-LOOP-SKELETON). Scope is RQML\n * structure only — generation of target-language code or tests is excluded by\n * design (ISS-LOOP-SCOPE); the snippets exist so authoring tools and agents\n * never emit structurally invalid XML.\n */\n\nexport type SkeletonKind = \"req\" | \"edge\" | \"testCase\" | \"stateMachine\";\n\nexport const SKELETON_KINDS: readonly SkeletonKind[] = [\n \"req\",\n \"edge\",\n \"testCase\",\n \"stateMachine\",\n];\n\nexport interface SkeletonOptions {\n /** Override the placeholder id of the skeleton's root element. */\n id?: string;\n}\n\nconst TEMPLATES: Record<SkeletonKind, (id: string) => string> = {\n req: (id) => `<req id=\"${id}\" type=\"FR\" title=\"Title\" status=\"draft\" priority=\"must\">\n <statement>The system SHALL ...</statement>\n <acceptance>\n <criterion id=\"${id}-CRIT-1\">\n <given>...</given>\n <when>...</when>\n <then>...</then>\n </criterion>\n </acceptance>\n</req>`,\n edge: (id) => `<edge id=\"${id}\" type=\"satisfies\">\n <from><locator><local id=\"REQ-AREA-001\"/></locator></from>\n <to><locator><local id=\"GOAL-NAME\"/></locator></to>\n</edge>`,\n testCase: (id) => `<testCase id=\"${id}\" type=\"unit\" title=\"Title\">\n <purpose>...</purpose>\n <steps>...</steps>\n <expected>...</expected>\n</testCase>`,\n stateMachine: (id) => `<stateMachine id=\"${id}\" name=\"Name\" initial=\"ST-START\">\n <state id=\"ST-START\" name=\"Start\" type=\"initial\"/>\n <state id=\"ST-DONE\" name=\"Done\" type=\"final\"/>\n <transition id=\"TR-FINISH\" from=\"ST-START\" to=\"ST-DONE\" event=\"finish\"/>\n</stateMachine>`,\n};\n\nconst DEFAULT_IDS: Record<SkeletonKind, string> = {\n req: \"REQ-AREA-001\",\n edge: \"E-AREA-001\",\n testCase: \"TC-NAME\",\n stateMachine: \"SM-NAME\",\n};\n\n/**\n * Return a schema-valid XML snippet for the given element kind. Inserting the\n * snippet into the matching section of a valid document keeps it XSD-valid\n * (CRIT-SKELETON-VALID); placeholder references (edge endpoints, machine\n * states) still need to be pointed at real ids.\n */\nexport function skeleton(kind: SkeletonKind, options: SkeletonOptions = {}): string {\n const template = TEMPLATES[kind];\n return `${template(options.id ?? DEFAULT_IDS[kind])}\\n`;\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/** An implements edge whose requirement endpoint is not approved. */\nexport interface PrematureImplementation {\n edgeId: string;\n requirementId: 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 /**\n * Approved requirement ids with no incoming `implements` edge — the\n * lifecycle-aware implementation gap, since only approved artifacts should\n * drive implementation (REQ-CORE-STATUS-AWARE).\n */\n unimplementedApprovedRequirements: string[];\n /** Implements edges targeting a requirement that is not approved. */\n prematureImplementations: PrematureImplementation[];\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 statusOf = new Map(reqs.map((r) => [r.id, r.status]));\n\n const unverifiedRequirements: string[] = [];\n const unimplementedRequirements: string[] = [];\n const unimplementedApprovedRequirements: 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)) {\n unimplementedRequirements.push(id);\n if (statusOf.get(id) === \"approved\") unimplementedApprovedRequirements.push(id);\n }\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 // Implements edges pointing at a requirement that is not approved\n // (REQ-CORE-STATUS-AWARE): implementation preceded approval.\n const prematureImplementations: PrematureImplementation[] = [];\n for (const edge of doc.trace) {\n if (edge.type !== \"implements\" || edge.to.kind !== \"local\") continue;\n const requirementId = edge.to.id;\n if (!reqIds.has(requirementId)) continue;\n if (statusOf.get(requirementId) === \"approved\") continue;\n prematureImplementations.push({ edgeId: edge.id, requirementId });\n }\n prematureImplementations.sort((a, b) => a.edgeId.localeCompare(b.edgeId));\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 for (const p of prematureImplementations)\n diagnostics.push(\n finding(\n \"coverage\",\n \"premature-implementation\",\n `implements edge \"${p.edgeId}\" targets requirement \"${p.requirementId}\", which is not approved.`,\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 unimplementedApprovedRequirements,\n prematureImplementations,\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","/**\n * Traceability matrix derivation (REQ-CORE-MATRIX): one row per requirement,\n * carrying its lifecycle status, the goals it satisfies, the code that\n * implements it, the tests that verify it, and the coverage warnings on it.\n *\n * It is a presentation of {@link computeCoverage} plus resolved endpoint titles\n * from {@link resolveTrace}/{@link collectTitles} — derived once here so the\n * CLI, the MCP server, and the editor render one source and never disagree\n * about spec health (REQ-CORE-API, REQ-MCP-PARITY). Pure and deterministic:\n * rows follow coverage's sorted requirement order and every cell is stable.\n */\n\nimport { computeCoverage } from \"../check/coverage.js\";\nimport { collectTitles } from \"../export/outline.js\";\nimport { type RqmlDocument, allRequirements } from \"../model/types.js\";\nimport { type ResolvedEndpoint, resolveTrace } from \"../trace/index.js\";\n\n/** A reference to a goal, a code artifact, or a test from a matrix row. */\nexport interface MatrixRef {\n /** Local id, or the URI (doc locators as `uri#id`) for external targets. */\n id: string;\n title?: string;\n /** True when the reference points at a doc/external artifact, not a local id. */\n external?: boolean;\n /** True when a local reference resolves to no declared element. */\n broken?: boolean;\n}\n\nexport type VerificationStatus = \"verified\" | \"unverified\";\nexport type ImplementationStatus = \"implemented\" | \"unimplemented\" | \"premature\";\n\n/** Stable warning codes a row can carry, suitable for filtering. */\nexport type MatrixWarning =\n | \"unverified\"\n | \"unimplemented\"\n | \"orphan\"\n | \"premature\"\n | \"broken-trace\";\n\nexport interface MatrixRow {\n id: string;\n title: string;\n /** Requirement type (FR / NFR / IR / DR / SR / CR / PR / UXR / OR). */\n type: string;\n /** Lifecycle status (draft / review / approved / deprecated). */\n status: string;\n priority?: string;\n /** Upstream goals/scenarios this requirement satisfies (outgoing satisfies). */\n goals: MatrixRef[];\n /** Code artifacts implementing this requirement (incoming implements). */\n implementations: MatrixRef[];\n /** Tests verifying this requirement (outgoing verifiedBy). */\n tests: MatrixRef[];\n verification: VerificationStatus;\n implementation: ImplementationStatus;\n warnings: MatrixWarning[];\n}\n\nexport interface MatrixSummary {\n total: number;\n verified: number;\n unverified: number;\n implemented: number;\n unimplemented: number;\n premature: number;\n orphans: number;\n brokenTraces: number;\n}\n\nexport interface MatrixReport {\n rows: MatrixRow[];\n summary: MatrixSummary;\n}\n\n/** Optional row selection. A row is kept only if it matches every set filter. */\nexport interface MatrixFilter {\n /** Keep rows whose requirement status is in this set. */\n status?: string[];\n /** Keep rows whose requirement type is in this set. */\n type?: string[];\n /** Keep rows carrying at least one of these warning codes. */\n warning?: string[];\n}\n\nfunction refFromEndpoint(\n ep: ResolvedEndpoint,\n titleById: Map<string, string>,\n): MatrixRef {\n const loc = ep.locator;\n if (loc.kind === \"local\") {\n const ref: MatrixRef = { id: loc.id };\n const title = ep.requirement?.title ?? loc.title ?? titleById.get(loc.id);\n if (title !== undefined) ref.title = title;\n if (ep.target === undefined) ref.broken = true;\n return ref;\n }\n const ref: MatrixRef = {\n id: loc.kind === \"doc\" ? `${loc.uri}#${loc.id}` : loc.uri,\n external: true,\n };\n if (loc.title !== undefined) ref.title = loc.title;\n return ref;\n}\n\nfunction matches(row: MatrixRow, filter: MatrixFilter | undefined): boolean {\n if (filter === undefined) return true;\n if (filter.status && !filter.status.includes(row.status)) return false;\n if (filter.type && !filter.type.includes(row.type)) return false;\n if (\n filter.warning &&\n !filter.warning.some((w) => row.warnings.includes(w as MatrixWarning))\n )\n return false;\n return true;\n}\n\n/**\n * Build the traceability matrix for a parsed document, optionally filtered.\n * The summary counts the rows actually included.\n */\nexport function buildMatrix(doc: RqmlDocument, filter?: MatrixFilter): MatrixReport {\n const cov = computeCoverage(doc);\n const reqById = new Map(allRequirements(doc).map((r) => [r.id, r]));\n const titleById = collectTitles(doc);\n const edgeById = new Map(resolveTrace(doc).edges.map((re) => [re.edge.id, re]));\n\n const unverified = new Set(cov.unverifiedRequirements);\n const unimplemented = new Set(cov.unimplementedRequirements);\n const orphans = new Set(cov.orphanRequirements);\n const premature = new Set(cov.prematureImplementations.map((p) => p.requirementId));\n\n const rows: MatrixRow[] = [];\n // cov.requirements is already sorted by requirement id (deterministic).\n for (const ac of cov.requirements) {\n const req = reqById.get(ac.id);\n if (req === undefined) continue;\n\n const goals = (ac.outgoing.satisfies ?? []).flatMap((edgeId) => {\n const re = edgeById.get(edgeId);\n return re ? [refFromEndpoint(re.to, titleById)] : [];\n });\n const implementations = (ac.incoming.implements ?? []).flatMap((edgeId) => {\n const re = edgeById.get(edgeId);\n return re ? [refFromEndpoint(re.from, titleById)] : [];\n });\n const tests = (ac.outgoing.verifiedBy ?? []).flatMap((edgeId) => {\n const re = edgeById.get(edgeId);\n return re ? [refFromEndpoint(re.to, titleById)] : [];\n });\n\n const verification: VerificationStatus = unverified.has(ac.id)\n ? \"unverified\"\n : \"verified\";\n const implementation: ImplementationStatus = premature.has(ac.id)\n ? \"premature\"\n : unimplemented.has(ac.id)\n ? \"unimplemented\"\n : \"implemented\";\n\n const warnings: MatrixWarning[] = [];\n if (unverified.has(ac.id)) warnings.push(\"unverified\");\n if (unimplemented.has(ac.id)) warnings.push(\"unimplemented\");\n if (orphans.has(ac.id)) warnings.push(\"orphan\");\n if (premature.has(ac.id)) warnings.push(\"premature\");\n if ([...goals, ...implementations, ...tests].some((r) => r.broken))\n warnings.push(\"broken-trace\");\n\n const row: MatrixRow = {\n id: ac.id,\n title: req.title,\n type: req.type,\n status: req.status ?? \"draft\",\n goals,\n implementations,\n tests,\n verification,\n implementation,\n warnings,\n };\n if (req.priority !== undefined) row.priority = req.priority;\n rows.push(row);\n }\n\n const kept = rows.filter((r) => matches(r, filter));\n const summary: MatrixSummary = {\n total: kept.length,\n verified: kept.filter((r) => r.verification === \"verified\").length,\n unverified: kept.filter((r) => r.verification === \"unverified\").length,\n implemented: kept.filter((r) => r.implementation === \"implemented\").length,\n unimplemented: kept.filter((r) => r.implementation === \"unimplemented\").length,\n premature: kept.filter((r) => r.implementation === \"premature\").length,\n orphans: kept.filter((r) => r.warnings.includes(\"orphan\")).length,\n brokenTraces: kept.filter((r) => r.warnings.includes(\"broken-trace\")).length,\n };\n\n return { rows: kept, summary };\n}\n\nfunction escapeCell(value: string): string {\n return value.replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \");\n}\n\nfunction refLabel(r: MatrixRef): string {\n const base = r.title !== undefined ? `${r.id} (${r.title})` : r.id;\n return r.broken ? `${base} [broken]` : base;\n}\n\n/** Render a {@link MatrixReport} to a deterministic markdown table + summary. */\nexport function matrixToMarkdown(report: MatrixReport): string {\n const s = report.summary;\n const lines: string[] = [\n \"# Traceability matrix\",\n \"\",\n `- **Requirements:** ${s.total}`,\n `- **Verified:** ${s.verified} · **Unverified:** ${s.unverified}`,\n `- **Implemented:** ${s.implemented} · **Unimplemented:** ${s.unimplemented} · **Premature:** ${s.premature}`,\n `- **Orphans:** ${s.orphans} · **Broken traces:** ${s.brokenTraces}`,\n \"\",\n \"| ID | Title | Type | Status | Verify | Impl | Goals | Implemented by | Verified by | Warnings |\",\n \"| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\",\n ];\n for (const row of report.rows) {\n const cells = [\n row.id,\n row.title,\n row.type,\n row.status,\n row.verification,\n row.implementation,\n row.goals.map(refLabel).join(\", \"),\n row.implementations.map(refLabel).join(\", \"),\n row.tests.map(refLabel).join(\", \"),\n row.warnings.join(\", \"),\n ].map(escapeCell);\n lines.push(`| ${cells.join(\" | \")} |`);\n }\n while (lines.length > 0 && lines[lines.length - 1] === \"\") lines.pop();\n return `${lines.join(\"\\n\")}\\n`;\n}\n","import { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, 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 * Recorded content hashes per implements edge (REQ-CORE-DRIFT-BASELINE).\n * When present, the default resolver reports `changed` for a link whose\n * artifact exists but no longer matches its recorded hash.\n */\n baseline?: DriftBaseline;\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 * plus a baseline hash comparison when a baseline is provided.\n */\n resolve?: (link: ImplementsLink) => ArtifactStatus;\n}\n\n/**\n * Content hashes (sha256 hex) per implements-edge id, recorded when a link is\n * created or its requirement approved (REQ-CORE-DRIFT-BASELINE).\n */\nexport type DriftBaseline = Record<string, string>;\n\n/** Conventional baseline location, relative to the project base directory. */\nexport const BASELINE_PATH = \".rqml/baseline.json\";\n\nfunction hashFileAt(filePath: string): string | undefined {\n try {\n return createHash(\"sha256\").update(readFileSync(filePath)).digest(\"hex\");\n } catch {\n return undefined;\n }\n}\n\n/**\n * Hash every filesystem-resolvable implements link of the document, producing\n * the baseline that future drift runs compare against. Deterministic for a\n * given document and filesystem state.\n */\nexport function computeBaseline(\n doc: RqmlDocument,\n options: { baseDir?: string } = {},\n): DriftBaseline {\n const baseDir = options.baseDir ?? process.cwd();\n const baseline: DriftBaseline = {};\n for (const link of implementsLinks(doc)) {\n const filePath = filePathFromUri(link.uri, baseDir);\n if (filePath === undefined) continue;\n const hash = hashFileAt(filePath);\n if (hash !== undefined) baseline[link.edgeId] = hash;\n }\n return baseline;\n}\n\n/** Read the baseline store under `baseDir`, or `undefined` when absent/invalid. */\nexport function loadBaseline(baseDir: string): DriftBaseline | undefined {\n try {\n const parsed: unknown = JSON.parse(\n readFileSync(join(baseDir, BASELINE_PATH), \"utf8\"),\n );\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return undefined;\n }\n const out: DriftBaseline = {};\n for (const [edgeId, hash] of Object.entries(parsed)) {\n if (typeof hash === \"string\") out[edgeId] = hash;\n }\n return out;\n } catch {\n return undefined;\n }\n}\n\n/** Write the baseline store with sorted keys so repeated saves diff cleanly. */\nexport function saveBaseline(baseDir: string, baseline: DriftBaseline): void {\n const path = join(baseDir, BASELINE_PATH);\n mkdirSync(dirname(path), { recursive: true });\n const sorted = Object.fromEntries(\n Object.entries(baseline).sort(([a], [b]) => a.localeCompare(b)),\n );\n writeFileSync(path, `${JSON.stringify(sorted, null, 2)}\\n`);\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, baseline?: DriftBaseline) {\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 if (!existsSync(filePath)) return \"missing\";\n const recorded = baseline?.[link.edgeId];\n if (recorded !== undefined) {\n const current = hashFileAt(filePath);\n if (current !== undefined && current !== recorded) return \"changed\";\n }\n return \"present\";\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, options.baseline);\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, statSync } 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 /** Every raw `--flag` value, for command-specific options. */\n flags: Map<string, string | boolean>;\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 flags,\n };\n}\n\n/** A flag's string value, or `undefined` when absent or value-less. */\nexport function flagString(args: Args, name: string): string | undefined {\n const value = args.flags.get(name);\n return typeof value === \"string\" ? value : undefined;\n}\n\n/**\n * Args for spec resolution in commands whose positionals are not the spec\n * path: an explicit `--spec <path>` wins, else the base-dir spec is discovered.\n */\nexport function specArgs(args: Args): Args {\n const override = flagString(args, \"spec\");\n return { ...args, positionals: override !== undefined ? [override] : [] };\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 if (statSync(p).isDirectory()) {\n throw new UsageError(`\"${explicit}\" is a directory, not an .rqml file`);\n }\n return p;\n }\n // Only regular files — a directory whose name ends in \".rqml\" (e.g. the\n // project's `.rqml/` governance folder) must not be mistaken for the spec.\n const candidates = readdirSync(args.baseDir, { withFileTypes: true })\n .filter((e) => e.isFile() && e.name.endsWith(\".rqml\"))\n .map((e) => e.name)\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 {\n checkIntegrity,\n computeCoverage,\n detectDrift,\n loadBaseline,\n parse,\n} 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 driftOptions: Parameters<typeof detectDrift>[1] = { baseDir: args.baseDir };\n const baseline = loadBaseline(args.baseDir);\n if (baseline !== undefined) driftOptions.baseline = baseline;\n const drift = parsed.ok ? detectDrift(parsed.document, driftOptions) : 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 (coverage?.unimplementedApprovedRequirements.length ?? 0) +\n (coverage?.prematureImplementations.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 unimplementedApprovedRequirements: coverage.unimplementedApprovedRequirements,\n prematureImplementations: coverage.prematureImplementations,\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","import { declaredIdIndex, impactOf, parse } from \"@rqml/core\";\nimport { EXIT, UsageError, parseArgs, readSpec, specArgs } from \"../runtime.js\";\n\n/**\n * `rqml impact` — what is affected if this artifact changes? Transitive,\n * bidirectional trace-graph traversal (REQ-LOOP-IMPACT, SCN-IMPACT).\n */\nexport async function runImpact(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const id = args.positionals[0];\n if (id === undefined) {\n throw new UsageError(\"usage: rqml impact <id> [--json] [--spec <path>]\");\n }\n const { path, xml } = readSpec(specArgs(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 if (!declaredIdIndex(parsed.document).has(id)) {\n process.stderr.write(`✗ no artifact with id \"${id}\" in ${path}\\n`);\n return EXIT.USAGE;\n }\n\n const report = impactOf(parsed.document, id);\n if (args.json) {\n process.stdout.write(`${JSON.stringify(report, null, 2)}\\n`);\n return EXIT.OK;\n }\n\n process.stdout.write(`Impact of ${id} — ${report.affected.length} affected\\n`);\n for (const group of report.groups) {\n const arrow = group.direction === \"outgoing\" ? \"→\" : \"←\";\n process.stdout.write(` ${arrow} ${group.type}: ${group.ids.join(\", \")}\\n`);\n }\n const transitive = report.affected.filter((a) => a.distance > 1);\n if (transitive.length > 0) {\n process.stdout.write(\" transitively:\\n\");\n for (const a of transitive) {\n const path = a.path.map((s) => s.edgeId).join(\" › \");\n process.stdout.write(\n ` ${a.id} (${a.kind}, distance ${a.distance} via ${path})\\n`,\n );\n }\n }\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/ and the development process at https://rqml.org/docs/development-process/\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## Toolchain\n\nThe spec-first loop is enforced by the `rqml` CLI (npm: `@rqml/cli`; the `@rqml/mcp` server exposes the same engine as agent tools):\n\n```bash\nrqml check # deterministic gate: validation + coverage + drift (exit 0 = pass)\nrqml status # re-anchor: spec, coverage, and drift state\nrqml show <REQ-ID> # one requirement: statement, acceptance criteria, trace neighborhood\nrqml impact <ID> # what is affected, transitively, if this artifact changes\nrqml link <REQ-ID> <path> # record an implements edge + drift baseline (--type verifiedBy for tests)\nrqml skeleton <kind> # schema-valid snippet: req | edge | testCase | stateMachine\n```\n\nRun `rqml status` when you start a session to re-anchor on the spec. Run `rqml check` before finishing any task — it must exit 0.\n\n---\n\n## Core Principle: Spec-First Development\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\nRQML organizes work into a **five-stage process** (https://rqml.org/docs/development-process/). Each stage produces a durable artifact in version control; verification feeds back to the spec, so it is a loop:\n\n| Stage | Task | Output |\n|-------|------|--------|\n| **Spec** | Capture intent as requirements | `requirements.rqml` |\n| **Design** | Decide architecture, record decisions | ADRs in `.rqml/adr/` |\n| **Plan** | Break work into agent-sized stages | `.rqml/plan.md` |\n| **Code** | Implement specified behavior, keep traces current | code + tests |\n| **Verify** | Prove coverage and catch drift | trace graph + `rqml check` |\n\nNever skip ahead: do not implement behavior that is not specified, and do not make a significant architectural choice without recording it as an ADR.\n\n---\n\n## Workflow\n\n### 1. Spec\nAsk clarifying questions until you understand the goal, scope, acceptance criteria, and constraints. Don't assume—capture assumptions as `<notes>` or `<issue>` elements. **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; only `status=\"approved\"` requirements drive implementation\n\n### 2. Design\nBefore building, decide *how*. Record each significant architectural decision as an **Architecture Decision Record (ADR)** in `.rqml/adr/`, following the canonical format (https://rqml.org/docs/development-process/design): `NNNN-kebab-case-slug.md`, with Status, Classification, Context, Options considered, Decision, and Consequences. A decision is ADR-worthy when there are real alternatives or the choice constrains future work; skip ADRs for low-level implementation details. ADRs are immutable once accepted—supersede, don't edit.\n\n### 3. Plan\nBreak approved requirements into a staged implementation plan at `.rqml/plan.md`, framed for coding agents: each stage names its goal, the requirement IDs it addresses, the files it touches, and how to verify it.\n\n### 4. Code (Implement)\nRead the requirement first: `rqml show REQ-XXX`. Check blast radius before changing existing artifacts: `rqml impact REQ-XXX`. Honor the ADRs. If you discover missing requirements, stop and add them to the spec first. After implementing, record the trace link:\n\n```bash\nrqml link REQ-XXX src/path/to/implementation.ts\n```\n\n### 5. Verify\nAdd tests that reference requirement IDs, then record verification and run the gate:\n\n```bash\nrqml link REQ-XXX test/path/to/test.ts --type verifiedBy\nrqml check # must exit 0 before you are done\n```\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| Spec (elicitation) | Major features | Testable reqs | Edge cases | Formal |\n| Spec-first | Recommended | Required | Required | Approved first |\n| Design (ADRs) | Optional | Significant choices | All architectural choices | With approval |\n| Plan | Optional | For multi-stage work | Required | Required |\n| Code traces | Optional | New features | All changes | With metadata |\n| Verify (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**Design:** ADR-xxxx — decision recorded (if any)\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:** Use the toolchain — it validates offline against the bundled schema and also checks referential integrity the XSD alone cannot enforce:\n```bash\nrqml validate\n```\n\nIf the `rqml` CLI is not installed, `npx @rqml/cli validate` works without installation. As a last resort, xmllint (pre-installed on macOS/Linux) checks XSD validity only:\n```bash\nxmllint --schema https://rqml.org/schema/rqml-2.1.0.xsd <rqml-file-name> --noout\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 { writeFileSync } from \"node:fs\";\nimport {\n type LinkRequest,\n appendTraceEdge,\n computeBaseline,\n implementsLinks,\n loadBaseline,\n parse,\n saveBaseline,\n updateTraceEdge,\n} from \"@rqml/core\";\nimport { printDiagnostics } from \"../report.js\";\nimport {\n type Args,\n EXIT,\n UsageError,\n flagString,\n parseArgs,\n readSpec,\n specArgs,\n} from \"../runtime.js\";\n\nconst USAGE =\n \"usage: rqml link <artifact-id> <uri> [--update] [--type implements|verifiedBy] [--id <edge-id>] [--kind <k>] [--title <t>] [--spec <path>]\\n\" +\n \" rqml link --refresh <edge-id> [--spec <path>]\";\n\n/**\n * `rqml link` — record an implements/verifiedBy trace edge mechanically\n * (REQ-LOOP-LINK) and the drift baseline for the linked artifact\n * (REQ-CORE-DRIFT-BASELINE). With `--update` the existing edge's external\n * locator is replaced in place, and with `--refresh <edge-id>` only the\n * baseline entry is re-recorded (REQ-LOOP-RELINK). The spec file is only\n * written when the edited document still validates.\n */\nexport async function runLink(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n if (args.flags.has(\"refresh\")) {\n const edgeId = flagString(args, \"refresh\");\n if (edgeId === undefined) throw new UsageError(USAGE);\n return runRefresh(args, edgeId);\n }\n\n const [artifactId, uri] = args.positionals;\n if (artifactId === undefined || uri === undefined) throw new UsageError(USAGE);\n const type = flagString(args, \"type\") ?? \"implements\";\n if (type !== \"implements\" && type !== \"verifiedBy\") {\n throw new UsageError(`unknown link type \"${type}\" (implements|verifiedBy)`);\n }\n const update = args.flags.get(\"update\") === true || args.flags.get(\"update\") === \"true\";\n\n const { path, xml } = readSpec(specArgs(args));\n const request: LinkRequest = { artifactId, uri, type };\n const edgeId = flagString(args, \"id\");\n if (edgeId !== undefined) request.edgeId = edgeId;\n const kind = flagString(args, \"kind\");\n if (kind !== undefined) request.kind = kind;\n const title = flagString(args, \"title\");\n if (title !== undefined) request.title = title;\n\n const result = update ? updateTraceEdge(xml, request) : appendTraceEdge(xml, request);\n if (!result.ok) {\n process.stderr.write(`✗ link failed: ${result.error}\\n`);\n return EXIT.VALIDATION;\n }\n\n const { validate } = await import(\"@rqml/core/validate\");\n const validation = validate(result.xml);\n if (!validation.valid) {\n printDiagnostics(validation.diagnostics);\n process.stderr.write(\"✗ link would invalidate the document; nothing written\\n\");\n return EXIT.VALIDATION;\n }\n writeFileSync(path, result.xml);\n\n // Hash the newly linked artifact only — re-hashing every link here would\n // silently bless drifted artifacts.\n let baselineRecorded = false;\n const parsed = parse(result.xml);\n if (parsed.ok) {\n const fresh = computeBaseline(parsed.document, { baseDir: args.baseDir });\n const hash = fresh[result.edgeId];\n if (hash !== undefined) {\n const baseline = loadBaseline(args.baseDir) ?? {};\n baseline[result.edgeId] = hash;\n saveBaseline(args.baseDir, baseline);\n baselineRecorded = true;\n }\n }\n\n if (args.json) {\n const report = {\n spec: path,\n mode: update ? \"update\" : \"append\",\n edgeId: result.edgeId,\n type,\n artifactId,\n uri,\n baselineRecorded,\n };\n process.stdout.write(`${JSON.stringify(report, null, 2)}\\n`);\n } else {\n const arrow = type === \"implements\" ? \"←\" : \"→\";\n const mode = update ? \", updated\" : \"\";\n const baseline = baselineRecorded ? \", baseline recorded\" : \"\";\n process.stdout.write(\n `✓ ${artifactId} ${arrow} ${uri} (${result.edgeId}, ${type}${mode}${baseline})\\n`,\n );\n }\n return EXIT.OK;\n}\n\n/**\n * `rqml link --refresh <edge-id>` — re-record the drift baseline for one\n * intentionally changed artifact (REQ-LOOP-RELINK). Edge-scoped on purpose:\n * the spec document is never touched, and no other entry is re-hashed.\n */\nfunction runRefresh(args: Args, edgeId: string): number {\n const { path, xml } = readSpec(specArgs(args));\n const parsed = parse(xml);\n if (!parsed.ok) {\n process.stderr.write(`✗ refresh failed: ${parsed.error.message}\\n`);\n return EXIT.VALIDATION;\n }\n const link = implementsLinks(parsed.document).find((l) => l.edgeId === edgeId);\n if (link === undefined) {\n process.stderr.write(\n `✗ refresh failed: no implements edge \"${edgeId}\" with an external locator exists (only implements edges carry baselines)\\n`,\n );\n return EXIT.VALIDATION;\n }\n const hash = computeBaseline(parsed.document, { baseDir: args.baseDir })[edgeId];\n if (hash === undefined) {\n process.stderr.write(\n `✗ refresh failed: \"${link.uri}\" cannot be hashed (missing file or non-filesystem URI)\\n`,\n );\n return EXIT.VALIDATION;\n }\n const baseline = loadBaseline(args.baseDir) ?? {};\n baseline[edgeId] = hash;\n saveBaseline(args.baseDir, baseline);\n\n if (args.json) {\n const report = { spec: path, mode: \"refresh\", edgeId, uri: link.uri, hash };\n process.stdout.write(`${JSON.stringify(report, null, 2)}\\n`);\n } else {\n process.stdout.write(`✓ baseline refreshed for ${edgeId} (${link.uri})\\n`);\n }\n return EXIT.OK;\n}\n","import { type MatrixFilter, buildMatrix, matrixToMarkdown, parse } from \"@rqml/core\";\nimport { EXIT, flagString, parseArgs, readSpec, specArgs } from \"../runtime.js\";\n\n/**\n * `rqml matrix` — the traceability matrix (REQ-LOOP-MATRIX): one row per\n * requirement with status, upstream goals, implementing code, verifying tests,\n * and coverage warnings, as a markdown table or `--json`. Backed by\n * @rqml/core's buildMatrix, so it equals the rqml_matrix MCP tool\n * (REQ-MCP-PARITY). Optional `--status`/`--type`/`--warning` filter rows.\n */\nfunction list(value: string | undefined): string[] | undefined {\n if (value === undefined) return undefined;\n const items = value\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n return items.length > 0 ? items : undefined;\n}\n\nexport async function runMatrix(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const { path, xml } = readSpec(specArgs(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 status = list(flagString(args, \"status\"));\n const type = list(flagString(args, \"type\"));\n const warning = list(flagString(args, \"warning\"));\n const filter: MatrixFilter = {};\n if (status) filter.status = status;\n if (type) filter.type = type;\n if (warning) filter.warning = warning;\n const filtered = status !== undefined || type !== undefined || warning !== undefined;\n\n const matrix = buildMatrix(parsed.document, filtered ? filter : undefined);\n process.stdout.write(\n args.json ? `${JSON.stringify(matrix, null, 2)}\\n` : matrixToMarkdown(matrix),\n );\n return EXIT.OK;\n}\n","import { extractArtifact, parse, sliceToMarkdown } from \"@rqml/core\";\nimport { EXIT, UsageError, parseArgs, readSpec, specArgs } from \"../runtime.js\";\n\n/**\n * `rqml show` — extract one artifact with its statement, acceptance criteria,\n * and trace neighborhood (REQ-LOOP-SHOW), so an agent reads a slice of the\n * spec instead of the whole document.\n */\nexport async function runShow(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const id = args.positionals[0];\n if (id === undefined) {\n throw new UsageError(\"usage: rqml show <id> [--json] [--spec <path>]\");\n }\n const { path, xml } = readSpec(specArgs(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 slice = extractArtifact(parsed.document, id);\n if (slice === undefined) {\n process.stderr.write(`✗ no artifact with id \"${id}\" in ${path}\\n`);\n return EXIT.USAGE;\n }\n process.stdout.write(\n args.json ? `${JSON.stringify(slice, null, 2)}\\n` : sliceToMarkdown(slice),\n );\n return EXIT.OK;\n}\n","import { SKELETON_KINDS, type SkeletonKind, skeleton } from \"@rqml/core\";\nimport { EXIT, UsageError, flagString, parseArgs } from \"../runtime.js\";\n\n/**\n * `rqml skeleton` — print a schema-valid RQML snippet (REQ-LOOP-SKELETON) so\n * authors and agents never hand-roll invalid structure.\n */\nexport async function runSkeleton(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const kind = args.positionals[0];\n const kinds = SKELETON_KINDS.join(\"|\");\n if (kind === undefined || !(SKELETON_KINDS as readonly string[]).includes(kind)) {\n throw new UsageError(`usage: rqml skeleton <${kinds}> [--id <id>]`);\n }\n const id = flagString(args, \"id\");\n process.stdout.write(skeleton(kind as SkeletonKind, id !== undefined ? { id } : {}));\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 unimplementedApprovedRequirements: coverage.unimplementedApprovedRequirements,\n prematureImplementations: coverage.prematureImplementations,\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 ` (approved: ${coverage.unimplementedApprovedRequirements.length})\\n` +\n ` premature implementations: ${coverage.prematureImplementations.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 { createRequire } from \"node:module\";\nimport { runCheck } from \"./commands/check.js\";\nimport { runImpact } from \"./commands/impact.js\";\nimport { runInit } from \"./commands/init.js\";\nimport { runLink } from \"./commands/link.js\";\nimport { runMatrix } from \"./commands/matrix.js\";\nimport { runShow } from \"./commands/show.js\";\nimport { runSkeleton } from \"./commands/skeleton.js\";\nimport { runStatus } from \"./commands/status.js\";\nimport { runValidate } from \"./commands/validate.js\";\nimport { EXIT, UsageError } from \"./runtime.js\";\n\n// The version lives in package.json (changesets bumps it there); resolving it\n// at runtime keeps `rqml --version` truthful. From dist/index.js and from\n// src/index.ts alike, ../package.json is this package's manifest.\nconst VERSION = (createRequire(import.meta.url)(\"../package.json\") as { version: string })\n .version;\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 link <id> <uri> Record an implements/verifiedBy edge and its drift baseline\n (--update repoints an existing edge; --refresh <edge-id>\n re-records only the baseline for an intentional change)\n show <id> Extract one artifact with its trace neighborhood\n impact <id> What is affected, transitively, if this artifact changes\n matrix [path] Traceability matrix: status, goals, code, tests, warnings\n skeleton <kind> Print a schema-valid snippet (req|edge|testCase|stateMachine)\n\nOptions:\n --json Emit machine-readable JSON (status, check, validate, link, show, impact, matrix)\n --status/--type/--warning Filter matrix rows (comma-separated, e.g. --warning unverified)\n --strictness <level> relaxed | standard | strict | certified (default: standard)\n --base-dir <dir> Directory to resolve the spec and code links against\n --spec <path> Explicit spec file (link, show, impact)\n --type <type> Link type: implements | verifiedBy (default: implements)\n --id <id> Explicit edge id (link) or skeleton root id\n --kind <kind> Locator kind hint for link (default: code/test by type)\n --title <title> Locator title hint for link\n --update Replace the external locator of an existing edge (link)\n --refresh <edge-id> Re-record the drift baseline for one edge (link)\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 \"link\":\n return runLink(rest);\n case \"show\":\n return runShow(rest);\n case \"impact\":\n return runImpact(rest);\n case \"matrix\":\n return runMatrix(rest);\n case \"skeleton\":\n return runSkeleton(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"]}
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/trace/impact.ts","../../core/src/analyze/integrity.ts","../../core/src/edit/link.ts","../../core/src/export/outline.ts","../../core/src/export/extract.ts","../../core/src/export/skeleton.ts","../../core/src/check/coverage.ts","../../core/src/analyze/matrix.ts","../../core/src/check/drift.ts","../src/report.ts","../src/runtime.ts","../src/commands/check.ts","../src/commands/impact.ts","../../schema/templates/AGENTS.md","../../schema/src/index.ts","../src/commands/init.ts","../src/commands/link.ts","../src/commands/matrix.ts","../src/commands/show.ts","../src/commands/skeleton.ts","../src/commands/status.ts","../src/commands/validate.ts","../src/index.ts"],"names":["matches","str","result","text","XMLParser","attStr","attr","XMLBuilder","ATTR_PREFIX","parser","isNode","asArray","escapeRegExp","endpointKey","ref","escapeCell","resolvePath","resolve","existsSync","readFileSync","path","writeFileSync","edgeId"],"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 '&#xD;'\")\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: \"&amp;\" },//it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \"&gt;\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"&lt;\" },\n { regex: new RegExp(\"\\'\", \"g\"), val: \"&apos;\" },\n { regex: new RegExp(\"\\\"\", \"g\"), val: \"&quot;\" }\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 type { Locator, RqmlDocument, TraceType } from \"../model/types.js\";\nimport { declaredIdIndex } from \"./index.js\";\n\n/** One edge traversal in an impact path. */\nexport interface ImpactStep {\n edgeId: string;\n type: TraceType;\n /** \"outgoing\" follows from→to; \"incoming\" follows to→from. */\n direction: \"outgoing\" | \"incoming\";\n /** Local id or doc/external URI at the far end of the edge. */\n target: string;\n}\n\n/** An artifact reachable from the queried id over the trace graph. */\nexport interface ImpactedArtifact {\n /** Local id, or the URI of a doc/external endpoint. */\n id: string;\n /** Element kind for local artifacts (\"req\", \"goal\", …), else the locator kind. */\n kind: string;\n /** Edge distance from the queried artifact. */\n distance: number;\n /** Edge chain from the queried artifact to this one. */\n path: ImpactStep[];\n}\n\n/** Affected ids grouped by the type/direction of the edge that reached them. */\nexport interface ImpactGroup {\n direction: \"outgoing\" | \"incoming\";\n type: TraceType;\n ids: string[];\n}\n\nexport interface ImpactReport {\n id: string;\n /** Every reachable artifact, sorted by distance then id. */\n affected: ImpactedArtifact[];\n groups: ImpactGroup[];\n}\n\nfunction endpointKey(locator: Locator): string {\n return locator.kind === \"local\" ? locator.id : locator.uri;\n}\n\n/**\n * Answer \"what is affected if this artifact changes?\" by traversing the trace\n * graph transitively in both directions from `id` (REQ-LOOP-IMPACT, SCN-IMPACT).\n * Breadth-first, cycle-safe, and deterministic: edges are visited in document\n * order and every output list is sorted. Doc and external endpoints are\n * reported but not traversed through; goalLinks are out of scope.\n */\nexport function impactOf(doc: RqmlDocument, id: string): ImpactReport {\n const idIndex = declaredIdIndex(doc);\n const visited = new Set<string>([id]);\n const affected: ImpactedArtifact[] = [];\n\n let frontier: { key: string; path: ImpactStep[] }[] = [{ key: id, path: [] }];\n let distance = 0;\n while (frontier.length > 0) {\n distance += 1;\n const next: typeof frontier = [];\n for (const node of frontier) {\n for (const edge of doc.trace) {\n const fromKey = endpointKey(edge.from);\n const toKey = endpointKey(edge.to);\n const hops: { direction: \"outgoing\" | \"incoming\"; here: string; far: Locator }[] =\n [\n { direction: \"outgoing\", here: fromKey, far: edge.to },\n { direction: \"incoming\", here: toKey, far: edge.from },\n ];\n for (const hop of hops) {\n const farKey = endpointKey(hop.far);\n if (hop.here !== node.key || visited.has(farKey)) continue;\n visited.add(farKey);\n const local = hop.far.kind === \"local\";\n const kind = local ? (idIndex.get(farKey)?.kind ?? \"unknown\") : hop.far.kind;\n const step: ImpactStep = {\n edgeId: edge.id,\n type: edge.type,\n direction: hop.direction,\n target: farKey,\n };\n const path = [...node.path, step];\n affected.push({ id: farKey, kind, distance, path });\n if (local) next.push({ key: farKey, path });\n }\n }\n }\n frontier = next;\n }\n\n affected.sort((a, b) => a.distance - b.distance || a.id.localeCompare(b.id));\n\n const groupIndex = new Map<string, ImpactGroup>();\n for (const artifact of affected) {\n const last = artifact.path[artifact.path.length - 1];\n if (last === undefined) continue;\n const key = `${last.direction}:${last.type}`;\n let group = groupIndex.get(key);\n if (group === undefined) {\n group = { direction: last.direction, type: last.type, ids: [] };\n groupIndex.set(key, group);\n }\n group.ids.push(artifact.id);\n }\n const groups = [...groupIndex.values()]\n .map((g) => ({ ...g, ids: [...new Set(g.ids)].sort() }))\n .sort(\n (a, b) => a.direction.localeCompare(b.direction) || a.type.localeCompare(b.type),\n );\n\n return { id, affected, groups };\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, trace refs, and state machines over the whole tree. */\nfunction walk(node: Node, declared: string[], refs: TraceRef[], machines: Node[]): 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 else if (key === \"stateMachine\") machines.push(item);\n walk(item, declared, refs, machines);\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 const machines: Node[] = [];\n walk(root, declared, refs, machines);\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 // State-machine reference integrity (REQ-CORE-SM-INTEGRITY). The XSD declares\n // smInitialRef and transition keyrefs, but they never fire for the same\n // namespace reason as allIds above, so: @initial and transition @from/@to\n // must resolve to states of the same machine, and final states must have no\n // outgoing transitions.\n for (const sm of machines) {\n const smId = attr(sm, \"id\") ?? \"\";\n const stateIds = new Set<string>();\n const finalStates = new Set<string>();\n for (const st of asArray<unknown>(sm.state).filter(isNode)) {\n const sid = attr(st, \"id\");\n if (sid === undefined) continue;\n stateIds.add(sid);\n if (attr(st, \"type\") === \"final\") finalStates.add(sid);\n }\n\n const initial = attr(sm, \"initial\");\n if (initial !== undefined && !stateIds.has(initial)) {\n const re = new RegExp(\n `<stateMachine\\\\b[^>]*?\\\\sinitial\\\\s*=\\\\s*\"${escapeRegExp(initial)}\"`,\n \"g\",\n );\n const lines = matchLines(xml, starts, re);\n const diag: Diagnostic = {\n source: \"validate\",\n severity: \"error\",\n rule: \"unresolved-state-ref\",\n message: `State machine \"${smId}\" initial state \"${initial}\" is not a declared state of the machine.`,\n };\n if (lines.length > 0) diag.line = lines[0];\n diagnostics.push(diag);\n }\n\n for (const tr of asArray<unknown>(sm.transition).filter(isNode)) {\n const trId = attr(tr, \"id\") ?? \"\";\n for (const side of [\"from\", \"to\"] as const) {\n const refId = attr(tr, side);\n if (refId === undefined || stateIds.has(refId)) continue;\n const re = new RegExp(\n `<transition\\\\b[^>]*?\\\\s${side}\\\\s*=\\\\s*\"${escapeRegExp(refId)}\"`,\n \"g\",\n );\n const lines = matchLines(xml, starts, re);\n const diag: Diagnostic = {\n source: \"validate\",\n severity: \"error\",\n rule: \"unresolved-state-ref\",\n message: `Transition \"${trId}\" (${side}) references unknown state \"${refId}\" in state machine \"${smId}\".`,\n };\n if (lines.length > 0) diag.line = lines[0];\n diagnostics.push(diag);\n }\n const from = attr(tr, \"from\");\n if (from !== undefined && finalStates.has(from)) {\n const re = new RegExp(\n `<transition\\\\b[^>]*?\\\\sid\\\\s*=\\\\s*\"${escapeRegExp(trId)}\"`,\n \"g\",\n );\n const lines = matchLines(xml, starts, re);\n const diag: Diagnostic = {\n source: \"validate\",\n severity: \"error\",\n rule: \"final-state-outgoing\",\n message: `Final state \"${from}\" has outgoing transition \"${trId}\" in state machine \"${smId}\".`,\n };\n if (lines.length > 0) diag.line = lines[0];\n diagnostics.push(diag);\n }\n }\n }\n\n return diagnostics;\n}\n","import { checkIntegrity } from \"../analyze/integrity.js\";\nimport type { TraceEdge } from \"../model/types.js\";\nimport { parse } from \"../parse/parse.js\";\nimport { declaredIdIndex } from \"../trace/index.js\";\n\n/**\n * Mechanical trace-link recording (REQ-LOOP-LINK) and maintenance\n * (REQ-LOOP-RELINK): append a schema-valid `implements` or `verifiedBy` edge\n * to a document's trace section, or repoint an existing edge's external\n * locator in place.\n *\n * The edits are textual — an edge block is inserted before `</trace>`, or one\n * locator element is replaced within its edge — rather than a parse/serialize\n * round-trip, so XML comments and hand formatting in the spec survive\n * untouched. The result is re-parsed and integrity-checked before being\n * returned; XSD validation is left to the caller, which keeps this entry\n * WASM-free.\n */\n\nexport interface LinkRequest {\n /** Declared local artifact id, usually a requirement. */\n artifactId: string;\n /** External locator URI of the code or test artifact (repo-relative path, file:, …). */\n uri: string;\n type: \"implements\" | \"verifiedBy\";\n /** Explicit edge id; derived from the artifact id when omitted. */\n edgeId?: string;\n /** Locator @kind hint; defaults to \"code\" for implements, \"test\" for verifiedBy. */\n kind?: string;\n /** Locator @title hint. */\n title?: string;\n}\n\nexport type LinkResult =\n | { ok: true; xml: string; edgeId: string; edgeXml: string }\n | { ok: false; error: string };\n\nconst ID_PATTERN = /^[A-Za-z][A-Za-z0-9._-]{1,79}$/;\n\nfunction escapeAttr(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction deriveEdgeId(\n type: LinkRequest[\"type\"],\n artifactId: string,\n taken: (id: string) => boolean,\n): string {\n const prefix = type === \"implements\" ? \"E-IMPL-\" : \"E-VER-\";\n const base = prefix + artifactId.replace(/^REQ-/, \"\");\n if (!taken(base)) return base;\n for (let n = 2; ; n++) {\n const candidate = `${base}-${n}`;\n if (!taken(candidate)) return candidate;\n }\n}\n\nfunction edgeBlock(request: LinkRequest, edgeId: string, indent: string): string {\n const kind = request.kind ?? (request.type === \"implements\" ? \"code\" : \"test\");\n const titleAttr =\n request.title !== undefined ? ` title=\"${escapeAttr(request.title)}\"` : \"\";\n const external = `<external uri=\"${escapeAttr(request.uri)}\" kind=\"${escapeAttr(kind)}\"${titleAttr}/>`;\n const local = `<local id=\"${request.artifactId}\"/>`;\n // implements: code → requirement (coverage counts the incoming edge);\n // verifiedBy: requirement → test.\n const [from, to] =\n request.type === \"implements\" ? [external, local] : [local, external];\n return [\n `${indent}<edge id=\"${edgeId}\" type=\"${request.type}\">`,\n `${indent} <from><locator>${from}</locator></from>`,\n `${indent} <to><locator>${to}</locator></to>`,\n `${indent}</edge>`,\n ].join(\"\\n\");\n}\n\n/** Start-of-line offset and leading whitespace of the line containing `index`. */\nfunction lineInfo(xml: string, index: number): { start: number; indent: string } {\n const start = xml.lastIndexOf(\"\\n\", index - 1) + 1;\n const prefix = xml.slice(start, index);\n return { start, indent: /^[ \\t]*$/.test(prefix) ? prefix : \"\" };\n}\n\n/**\n * Append a trace edge to the document text. Deterministic: the same document\n * and request always produce the same edge id and output.\n */\nexport function appendTraceEdge(xml: string, request: LinkRequest): LinkResult {\n const parsed = parse(xml);\n if (!parsed.ok) {\n return { ok: false, error: `document does not parse: ${parsed.error.message}` };\n }\n const idIndex = declaredIdIndex(parsed.document);\n if (!idIndex.has(request.artifactId)) {\n return {\n ok: false,\n error: `artifact \"${request.artifactId}\" is not declared in the document`,\n };\n }\n if (request.uri.trim() === \"\") {\n return { ok: false, error: \"locator uri must not be empty\" };\n }\n\n let edgeId: string;\n if (request.edgeId !== undefined) {\n if (!ID_PATTERN.test(request.edgeId)) {\n return {\n ok: false,\n error: `edge id \"${request.edgeId}\" does not match the RQML id pattern`,\n };\n }\n if (idIndex.has(request.edgeId)) {\n return { ok: false, error: `edge id \"${request.edgeId}\" is already declared` };\n }\n edgeId = request.edgeId;\n } else {\n edgeId = deriveEdgeId(request.type, request.artifactId, (id) => idIndex.has(id));\n }\n\n let updated: string;\n let edgeXml: string;\n const closeIdx = xml.lastIndexOf(\"</trace>\");\n if (closeIdx >= 0) {\n const { start, indent } = lineInfo(xml, closeIdx);\n edgeXml = edgeBlock(request, edgeId, `${indent} `);\n updated = `${xml.slice(0, start)}${edgeXml}\\n${xml.slice(start)}`;\n } else {\n // No trace section yet: create one in its fixed position, before\n // governance when present, else before the document close.\n const anchorIdx = (() => {\n const gov = xml.indexOf(\"<governance\");\n return gov >= 0 ? gov : xml.lastIndexOf(\"</rqml>\");\n })();\n if (anchorIdx < 0) return { ok: false, error: \"no </rqml> close tag found\" };\n const { start, indent } = lineInfo(xml, anchorIdx);\n const sectionIndent = indent === \"\" ? \" \" : indent;\n edgeXml = edgeBlock(request, edgeId, `${sectionIndent} `);\n const section = `${sectionIndent}<trace>\\n${edgeXml}\\n${sectionIndent}</trace>\\n`;\n updated = `${xml.slice(0, start)}${section}${xml.slice(start)}`;\n }\n\n const before = checkIntegrity(xml).length;\n const reparsed = parse(updated);\n if (!reparsed.ok) {\n return {\n ok: false,\n error: `edit produced an unparseable document: ${reparsed.error.message}`,\n };\n }\n if (checkIntegrity(updated).length > before) {\n return {\n ok: false,\n error: \"edit introduced an integrity violation; document left unchanged\",\n };\n }\n\n return { ok: true, xml: updated, edgeId, edgeXml: edgeXml.trim() };\n}\n\nexport interface UpdateLinkRequest {\n /** Declared local artifact id the edge must link. */\n artifactId: string;\n /** Replacement external locator URI. */\n uri: string;\n type: \"implements\" | \"verifiedBy\";\n /** Explicit edge id; matched by the append-time derivation when omitted. */\n edgeId?: string;\n /** Locator @kind; the edge's existing kind is preserved when omitted. */\n kind?: string;\n /** Locator @title; the edge's existing title is preserved when omitted. */\n title?: string;\n}\n\nexport type UpdateLinkResult =\n | { ok: true; xml: string; edgeId: string; edgeXml: string; previousUri: string }\n | { ok: false; error: string };\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst EXTERNAL_ELEMENT = /<external\\b[^>]*(?:\\/>|>[\\s\\S]*?<\\/external>)/g;\n\n/**\n * Replace the external locator of an existing `implements`/`verifiedBy` edge\n * (REQ-LOOP-RELINK). Only the locator element changes; the edge id, type,\n * orientation, and everything else in the document are left untouched.\n * Deterministic: the same document and request always produce the same output.\n */\nexport function updateTraceEdge(\n xml: string,\n request: UpdateLinkRequest,\n): UpdateLinkResult {\n const parsed = parse(xml);\n if (!parsed.ok) {\n return { ok: false, error: `document does not parse: ${parsed.error.message}` };\n }\n if (request.uri.trim() === \"\") {\n return { ok: false, error: \"locator uri must not be empty\" };\n }\n\n const prefix = request.type === \"implements\" ? \"E-IMPL-\" : \"E-VER-\";\n const edgeId = request.edgeId ?? prefix + request.artifactId.replace(/^REQ-/, \"\");\n const edge: TraceEdge | undefined = parsed.document.trace.find((e) => e.id === edgeId);\n if (edge === undefined) {\n return {\n ok: false,\n error:\n request.edgeId !== undefined\n ? `no trace edge with id \"${edgeId}\" exists`\n : `no trace edge with the derived id \"${edgeId}\" exists; pass --id for an explicitly named edge`,\n };\n }\n if (edge.type !== request.type) {\n return {\n ok: false,\n error: `edge \"${edgeId}\" has type \"${edge.type}\", not \"${request.type}\"`,\n };\n }\n const local =\n edge.from.kind === \"local\"\n ? edge.from\n : edge.to.kind === \"local\"\n ? edge.to\n : undefined;\n if (local === undefined || local.id !== request.artifactId) {\n return {\n ok: false,\n error: `edge \"${edgeId}\" does not link artifact \"${request.artifactId}\"`,\n };\n }\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) {\n return { ok: false, error: `edge \"${edgeId}\" has no external locator to update` };\n }\n\n const openTag = new RegExp(`<edge\\\\b[^>]*\\\\bid=\"${escapeRegExp(edgeId)}\"[^>]*>`);\n const open = openTag.exec(xml);\n const closeIdx = open === null ? -1 : xml.indexOf(\"</edge>\", open.index);\n if (open === null || closeIdx < 0) {\n return { ok: false, error: `could not locate edge \"${edgeId}\" in the document text` };\n }\n const span = xml.slice(open.index, closeIdx);\n const occurrences = span.match(EXTERNAL_ELEMENT) ?? [];\n if (occurrences.length !== 1) {\n return {\n ok: false,\n error: `edge \"${edgeId}\" does not contain exactly one external locator element`,\n };\n }\n\n const kind =\n request.kind ??\n external.hintKind ??\n (request.type === \"implements\" ? \"code\" : \"test\");\n const title = request.title ?? external.title;\n const titleAttr = title !== undefined ? ` title=\"${escapeAttr(title)}\"` : \"\";\n const replacement = `<external uri=\"${escapeAttr(request.uri)}\" kind=\"${escapeAttr(kind)}\"${titleAttr}/>`;\n // Replacer function, not a string: a `$` in the escaped URI must stay literal.\n const editedSpan = span.replace(occurrences[0] as string, () => replacement);\n const updated = xml.slice(0, open.index) + editedSpan + xml.slice(closeIdx);\n\n const before = checkIntegrity(xml).length;\n const reparsed = parse(updated);\n if (!reparsed.ok) {\n return {\n ok: false,\n error: `edit produced an unparseable document: ${reparsed.error.message}`,\n };\n }\n if (checkIntegrity(updated).length > before) {\n return {\n ok: false,\n error: \"edit introduced an integrity violation; document left unchanged\",\n };\n }\n\n return {\n ok: true,\n xml: updated,\n edgeId,\n edgeXml: `${editedSpan}</edge>`.trim(),\n previousUri: external.uri,\n };\n}\n","/**\n * Document outline: a normalized, fully-typed, stable-ordered projection of an\n * RqmlDocument across every present section. It is the reusable intermediate\n * the export pipeline (and the markdown serializer) consume instead of the raw\n * XML or the WASM-backed validator. Pure and deterministic: no XML, no WASM.\n *\n * Trace edges are resolved via `resolveTrace`, so each element node carries its\n * outgoing references with target titles and a resolved/dangling flag.\n */\n\nimport type { Criterion, Locator, Requirement, RqmlDocument } from \"../model/types.js\";\nimport { type ResolvedEndpoint, resolveTrace } from \"../trace/index.js\";\n\nexport interface OutlineField {\n label: string;\n value: string;\n}\n\nexport interface OutlineRef {\n /** The trace edge type, e.g. \"satisfies\", \"refines\". */\n relation: string;\n /** Local id, or the URI for doc/external targets. */\n targetId: string;\n /** Whether a local target id resolved to a declared element. */\n resolved: boolean;\n targetTitle?: string;\n}\n\nexport interface OutlineNode {\n /** Element kind (\"req\", \"goal\", …) or \"section\" for section wrappers. */\n kind: string;\n id?: string;\n title: string;\n fields: OutlineField[];\n refs?: OutlineRef[];\n children?: OutlineNode[];\n}\n\nexport interface DocumentOutline {\n docId: string;\n version: string;\n status: string;\n title: string;\n system: string;\n summary?: string;\n sections: OutlineNode[];\n}\n\nfunction fields(...pairs: Array<[string, string | undefined]>): OutlineField[] {\n const out: OutlineField[] = [];\n for (const [label, value] of pairs) {\n if (value !== undefined && value !== \"\") out.push({ label, value });\n }\n return out;\n}\n\nfunction locatorLabel(loc: Locator): string {\n if (loc.kind === \"local\") return loc.id;\n if (loc.kind === \"doc\") return `${loc.uri}#${loc.id}`;\n return loc.uri;\n}\n\n/**\n * Human title for every id-bearing element, so trace tables and refs to\n * non-requirement targets (goals, risks, states, …) read meaningfully. First\n * declaration wins, mirroring `declaredElements`/`declaredIdIndex`.\n */\nexport function collectTitles(doc: RqmlDocument): Map<string, string> {\n const m = new Map<string, string>();\n const set = (id: string | undefined, title: string | undefined): void => {\n if (id !== undefined && title !== undefined && title !== \"\" && !m.has(id)) {\n m.set(id, title);\n }\n };\n for (const p of doc.meta.profiles ?? []) set(p.id, p.type);\n const c = doc.catalogs;\n if (c) {\n for (const t of c.glossary ?? []) set(t.id, t.name);\n for (const a of c.actors ?? []) set(a.id, a.name);\n for (const s of c.stakeholders ?? []) set(s.id, s.name);\n for (const x of c.constraints ?? []) set(x.id, x.statement);\n for (const x of c.policies ?? []) set(x.id, x.obligation);\n for (const x of c.decisions ?? []) set(x.id, x.decision);\n for (const x of c.risks ?? []) set(x.id, x.statement);\n }\n const d = doc.domain;\n if (d) {\n for (const e of d.entities ?? []) {\n set(e.id, e.name);\n for (const a of e.attrs ?? []) set(a.id, a.name);\n }\n for (const r of d.businessRules ?? []) set(r.id, r.statement);\n }\n const g = doc.goals;\n if (g) {\n for (const x of g.goals ?? []) set(x.id, x.title);\n for (const x of g.qualityGoals ?? []) set(x.id, x.title);\n for (const x of g.obstacles ?? []) set(x.id, x.title);\n for (const x of g.goalLinks ?? []) set(x.id, x.id);\n }\n const sc = doc.scenarios;\n if (sc) {\n for (const x of sc.scenarios ?? []) set(x.id, x.title);\n for (const x of sc.misuseCases ?? []) set(x.id, x.title);\n for (const x of sc.edgeCases ?? []) set(x.id, x.title);\n }\n for (const p of doc.packages) {\n set(p.id, p.title);\n for (const r of p.requirements) set(r.id, r.title);\n }\n for (const r of doc.looseRequirements) set(r.id, r.title);\n const b = doc.behavior;\n if (b) {\n for (const sm of b.stateMachines ?? []) {\n set(sm.id, sm.name);\n for (const st of sm.states) set(st.id, st.name);\n }\n }\n const it = doc.interfaces;\n if (it) {\n for (const api of it.apis ?? []) {\n set(api.id, api.name);\n for (const ep of api.endpoints ?? []) set(ep.id, `${ep.method} ${ep.path}`);\n }\n for (const ev of it.events ?? []) set(ev.id, ev.name);\n }\n const v = doc.verification;\n if (v) {\n for (const ts of v.testSuites ?? []) set(ts.id, ts.title);\n for (const tc of v.testCases ?? []) set(tc.id, tc.title);\n }\n const gv = doc.governance;\n if (gv) {\n for (const x of gv.issues ?? []) set(x.id, x.statement);\n for (const x of gv.approvals ?? []) set(x.id, x.role);\n }\n return m;\n}\n\nfunction endpointTitle(\n ep: ResolvedEndpoint,\n titleById: Map<string, string>,\n): string | undefined {\n if (ep.requirement !== undefined) return ep.requirement.title;\n if (ep.locator.title !== undefined) return ep.locator.title;\n if (ep.locator.kind === \"local\") return titleById.get(ep.locator.id);\n return undefined;\n}\n\nfunction endpointLabel(ep: ResolvedEndpoint, titleById: Map<string, string>): string {\n let s = locatorLabel(ep.locator);\n const hint = endpointTitle(ep, titleById);\n if (hint !== undefined) s += ` (${hint})`;\n if (ep.locator.kind === \"local\" && ep.target === undefined) s += \" [unresolved]\";\n return s;\n}\n\nexport function buildOutline(doc: RqmlDocument): DocumentOutline {\n const res = resolveTrace(doc);\n const titleById = collectTitles(doc);\n\n const refsBySource = new Map<string, OutlineRef[]>();\n for (const re of res.edges) {\n if (re.from.locator.kind !== \"local\") continue;\n const toLoc = re.to.locator;\n const targetId = toLoc.kind === \"local\" ? toLoc.id : toLoc.uri;\n const resolved = toLoc.kind === \"local\" ? re.to.target !== undefined : true;\n const ref: OutlineRef = { relation: re.edge.type, targetId, resolved };\n const tt = endpointTitle(re.to, titleById);\n if (tt !== undefined) ref.targetTitle = tt;\n const arr = refsBySource.get(re.from.locator.id);\n if (arr) arr.push(ref);\n else refsBySource.set(re.from.locator.id, [ref]);\n }\n\n const node = (\n kind: string,\n id: string | undefined,\n title: string,\n flds: OutlineField[],\n children?: OutlineNode[],\n ): OutlineNode => {\n const n: OutlineNode = { kind, title, fields: flds };\n if (id !== undefined) n.id = id;\n const refs = id !== undefined ? refsBySource.get(id) : undefined;\n if (refs && refs.length > 0) n.refs = refs;\n if (children && children.length > 0) n.children = children;\n return n;\n };\n\n const sections: OutlineNode[] = [];\n const pushSection = (\n title: string,\n flds: OutlineField[],\n nodes: OutlineNode[],\n ): void => {\n if (flds.length === 0 && nodes.length === 0) return;\n const s: OutlineNode = { kind: \"section\", title, fields: flds };\n if (nodes.length > 0) s.children = nodes;\n sections.push(s);\n };\n\n const meta = doc.meta;\n\n // --- Meta extras (dates, conventions, profiles) ---\n pushSection(\n \"Meta\",\n fields(\n [\"Created\", meta.dates?.created],\n [\"Updated\", meta.dates?.updated],\n [\"Target release\", meta.dates?.targetRelease],\n [\"Normative keywords\", meta.conventions?.normativeKeywords],\n [\"ID conventions\", meta.conventions?.idConventions],\n ),\n (meta.profiles ?? []).map((p) =>\n node(\"profile\", p.id, p.type, fields([\"Description\", p.description])),\n ),\n );\n\n // --- Catalogs ---\n const cat = doc.catalogs;\n if (cat) {\n pushSection(\n \"Glossary\",\n [],\n (cat.glossary ?? []).map((t) =>\n node(\n \"term\",\n t.id,\n t.name,\n fields([\"Definition\", t.definition], [\"Synonyms\", t.synonyms?.join(\", \")]),\n ),\n ),\n );\n pushSection(\n \"Actors\",\n [],\n (cat.actors ?? []).map((a) =>\n node(\n \"actor\",\n a.id,\n a.name,\n fields(\n [\"Type\", a.type],\n [\"Description\", a.description],\n [\"Goal refs\", a.goalRefs?.join(\", \")],\n ),\n ),\n ),\n );\n pushSection(\n \"Stakeholders\",\n [],\n (cat.stakeholders ?? []).map((s) =>\n node(\n \"stakeholder\",\n s.id,\n s.name,\n fields([\"Org\", s.org], [\"Concerns\", s.concerns]),\n ),\n ),\n );\n pushSection(\n \"Constraints\",\n [],\n (cat.constraints ?? []).map((c) =>\n node(\n \"constraint\",\n c.id,\n c.statement,\n fields([\"Severity\", c.severity], [\"Source\", c.source]),\n ),\n ),\n );\n pushSection(\n \"Policies\",\n [],\n (cat.policies ?? []).map((p) =>\n node(\n \"policy\",\n p.id,\n p.obligation,\n fields([\"Source\", p.source], [\"Evidence\", p.evidence]),\n ),\n ),\n );\n pushSection(\n \"Decisions\",\n [],\n (cat.decisions ?? []).map((d) =>\n node(\n \"decision\",\n d.id,\n d.decision,\n fields(\n [\"Status\", d.status],\n [\"Context\", d.context],\n [\"Alternatives\", d.alternatives],\n [\"Consequences\", d.consequences],\n ),\n ),\n ),\n );\n pushSection(\n \"Risks\",\n [],\n (cat.risks ?? []).map((r) =>\n node(\n \"risk\",\n r.id,\n r.statement,\n fields([\"Severity\", r.severity], [\"Mitigation\", r.mitigation]),\n ),\n ),\n );\n }\n\n // --- Domain ---\n const dom = doc.domain;\n if (dom) {\n const entityNodes = (dom.entities ?? []).map((e) =>\n node(\n \"entity\",\n e.id,\n e.name,\n fields([\"Description\", e.description]),\n (e.attrs ?? []).map((a) =>\n node(\n \"attr\",\n a.id,\n a.name,\n fields(\n [\"Type\", a.type],\n [\"Required\", a.required === undefined ? undefined : String(a.required)],\n [\"Description\", a.description],\n [\"Constraints\", a.constraints],\n ),\n ),\n ),\n ),\n );\n const ruleNodes = (dom.businessRules ?? []).map((r) =>\n node(\"rule\", r.id, r.statement, fields([\"Examples\", r.examples])),\n );\n pushSection(\"Domain\", fields([\"Overview\", dom.overview]), [\n ...entityNodes,\n ...ruleNodes,\n ]);\n }\n\n // --- Goals ---\n const goals = doc.goals;\n if (goals) {\n pushSection(\n \"Goals\",\n [],\n (goals.goals ?? []).map((g) =>\n node(\n \"goal\",\n g.id,\n g.title,\n fields(\n [\"Priority\", g.priority],\n [\"Status\", g.status],\n [\"Owner\", g.ownerRef],\n [\"Statement\", g.statement],\n [\"Rationale\", g.rationale],\n ),\n ),\n ),\n );\n pushSection(\n \"Quality goals\",\n [],\n (goals.qualityGoals ?? []).map((g) =>\n node(\n \"qgoal\",\n g.id,\n g.title,\n fields(\n [\"Priority\", g.priority],\n [\"Status\", g.status],\n [\"Statement\", g.statement],\n [\"Metric\", g.metric],\n ),\n ),\n ),\n );\n pushSection(\n \"Obstacles\",\n [],\n (goals.obstacles ?? []).map((o) =>\n node(\n \"obstacle\",\n o.id,\n o.title,\n fields(\n [\"Likelihood\", o.likelihood],\n [\"Severity\", o.severity],\n [\"Statement\", o.statement],\n [\"Mitigation\", o.mitigation],\n ),\n ),\n ),\n );\n pushSection(\n \"Goal links\",\n [],\n (goals.goalLinks ?? []).map((l) =>\n node(\n \"goalLink\",\n l.id,\n l.id,\n fields(\n [\"From\", l.from],\n [\"To\", l.to],\n [\"Type\", l.type],\n [\"Confidence\", l.confidence?.toString()],\n ),\n ),\n ),\n );\n }\n\n // --- Scenarios ---\n const sc = doc.scenarios;\n if (sc) {\n const scNode =\n (kind: string) =>\n (s: { id: string; title: string; actorRef?: string; narrative: string }) =>\n node(\n kind,\n s.id,\n s.title,\n fields([\"Actor\", s.actorRef], [\"Narrative\", s.narrative]),\n );\n pushSection(\"Scenarios\", [], (sc.scenarios ?? []).map(scNode(\"scenario\")));\n pushSection(\"Misuse cases\", [], (sc.misuseCases ?? []).map(scNode(\"misuseCase\")));\n pushSection(\"Edge cases\", [], (sc.edgeCases ?? []).map(scNode(\"edgeCase\")));\n }\n\n // --- Requirements ---\n const criterionNode = (c: Criterion): OutlineNode =>\n node(\n \"criterion\",\n c.id,\n c.id ?? \"Acceptance criterion\",\n fields([\"Given\", c.given], [\"When\", c.when], [\"Then\", c.then]),\n );\n const reqNode = (r: Requirement): OutlineNode =>\n node(\n \"req\",\n r.id,\n r.title,\n fields(\n [\"Type\", r.type],\n [\"Status\", r.status],\n [\"Priority\", r.priority],\n [\"Owner\", r.ownerRef],\n [\"Applies to\", r.appliesTo],\n [\"Statement\", r.statement],\n [\"Rationale\", r.rationale],\n [\"Notes\", r.notes],\n ),\n r.acceptance.map(criterionNode),\n );\n const reqNodes: OutlineNode[] = [\n ...doc.packages.map((p) =>\n node(\n \"reqPackage\",\n p.id,\n p.title,\n fields([\"Owner\", p.ownerRef], [\"Description\", p.description]),\n p.requirements.map(reqNode),\n ),\n ),\n ...doc.looseRequirements.map(reqNode),\n ];\n pushSection(\"Requirements\", [], reqNodes);\n\n // --- Behavior ---\n const beh = doc.behavior;\n if (beh) {\n pushSection(\n \"Behavior\",\n [],\n (beh.stateMachines ?? []).map((sm) =>\n node(\n \"stateMachine\",\n sm.id,\n sm.name,\n fields(\n [\"Initial\", sm.initial],\n [\"Entity\", sm.entityRef],\n [\"Description\", sm.description],\n ),\n [\n ...sm.states.map((st) =>\n node(\n \"state\",\n st.id,\n st.name,\n fields(\n [\"Type\", st.type],\n [\"Description\", st.description],\n [\"On entry\", st.onEntry],\n [\"On exit\", st.onExit],\n [\"Invariant\", st.invariant],\n ),\n ),\n ),\n ...(sm.transitions ?? []).map((tr) =>\n node(\n \"transition\",\n tr.id,\n `${tr.from} → ${tr.to}`,\n fields(\n [\"From\", tr.from],\n [\"To\", tr.to],\n [\"Event\", tr.event],\n [\"Trigger\", tr.trigger],\n [\"Guard\", tr.guard],\n [\"Action\", tr.action],\n [\"Description\", tr.description],\n ),\n ),\n ),\n ],\n ),\n ),\n );\n }\n\n // --- Interfaces ---\n const ifaces = doc.interfaces;\n if (ifaces) {\n const apiNodes = (ifaces.apis ?? []).map((api) =>\n node(\n \"api\",\n api.id,\n api.name,\n fields(\n [\"Protocol\", api.protocol],\n [\"Auth\", api.auth],\n [\"Description\", api.description],\n ),\n (api.endpoints ?? []).map((ep) =>\n node(\n \"endpoint\",\n ep.id,\n `${ep.method} ${ep.path}`,\n fields(\n [\"Summary\", ep.summary],\n [\"Request\", ep.request],\n [\"Response\", ep.response],\n [\"Errors\", ep.errors],\n ),\n ),\n ),\n ),\n );\n const eventNodes = (ifaces.events ?? []).map((ev) =>\n node(\n \"event\",\n ev.id,\n ev.name,\n fields([\"Description\", ev.description], [\"Payload\", ev.payload]),\n ),\n );\n pushSection(\"Interfaces\", [], [...apiNodes, ...eventNodes]);\n }\n\n // --- Verification ---\n const ver = doc.verification;\n if (ver) {\n const suiteNodes = (ver.testSuites ?? []).map((ts) =>\n node(\"testSuite\", ts.id, ts.title, fields([\"Description\", ts.description])),\n );\n const caseNodes = (ver.testCases ?? []).map((tc) =>\n node(\n \"testCase\",\n tc.id,\n tc.title,\n fields(\n [\"Type\", tc.type],\n [\"Purpose\", tc.purpose],\n [\"Steps\", tc.steps],\n [\"Expected\", tc.expected],\n ),\n ),\n );\n pushSection(\"Verification\", [], [...suiteNodes, ...caseNodes]);\n }\n\n // --- Trace ---\n const edgeNodes = res.edges.map((re) => {\n const e = re.edge;\n return node(\n \"edge\",\n e.id,\n e.id,\n fields(\n [\"Type\", e.type],\n [\"From\", endpointLabel(re.from, titleById)],\n [\"To\", endpointLabel(re.to, titleById)],\n [\"Confidence\", e.confidence?.toString()],\n [\"Status\", e.status],\n [\"Created by\", e.createdBy],\n [\"Created at\", e.createdAt],\n [\"Tags\", e.tags?.join(\" \")],\n [\"Notes\", e.notes],\n ),\n );\n });\n pushSection(\"Trace\", [], edgeNodes);\n\n // --- Governance ---\n const gov = doc.governance;\n if (gov) {\n const issueNodes = (gov.issues ?? []).map((i) =>\n node(\n \"issue\",\n i.id,\n i.statement,\n fields([\"Status\", i.status], [\"Owner\", i.owner], [\"Notes\", i.notes]),\n ),\n );\n const approvalNodes = (gov.approvals ?? []).map((a) =>\n node(\n \"approval\",\n a.id,\n a.role,\n fields([\"Status\", a.status], [\"Description\", a.description]),\n ),\n );\n pushSection(\"Governance\", [], [...issueNodes, ...approvalNodes]);\n }\n\n const outline: DocumentOutline = {\n docId: doc.docId,\n version: doc.version,\n status: doc.status,\n title: meta.title,\n system: meta.system,\n sections,\n };\n if (meta.summary !== undefined) outline.summary = meta.summary;\n return outline;\n}\n","import type { Criterion, Locator, RqmlDocument, TraceType } from \"../model/types.js\";\nimport { declaredIdIndex, requirementIndex } from \"../trace/index.js\";\n\n/** One trace edge touching the extracted artifact, with its far endpoint. */\nexport interface SliceEdge {\n edgeId: string;\n type: TraceType;\n direction: \"outgoing\" | \"incoming\";\n /** Local id or doc/external URI at the far end. */\n target: string;\n /** Element kind for local targets, else the locator kind. */\n targetKind: string;\n title?: string;\n}\n\n/**\n * A single artifact extracted with everything an agent needs to work on it,\n * and nothing else (REQ-LOOP-SHOW): identity, normative content, acceptance\n * criteria, and the trace neighborhood.\n */\nexport interface ArtifactSlice {\n id: string;\n kind: string;\n title?: string;\n /** Statement, narrative, definition, or description — whatever the kind carries. */\n statement?: string;\n reqType?: string;\n status?: string;\n priority?: string;\n rationale?: string;\n notes?: string;\n acceptance?: Criterion[];\n edges: SliceEdge[];\n}\n\nfunction endpointKey(locator: Locator): string {\n return locator.kind === \"local\" ? locator.id : locator.uri;\n}\n\n/** Best-effort title/statement lookup for non-requirement kinds. */\nfunction details(doc: RqmlDocument, id: string, kind: string): Partial<ArtifactSlice> {\n switch (kind) {\n case \"goal\": {\n const g = doc.goals?.goals?.find((x) => x.id === id);\n return g\n ? {\n title: g.title,\n statement: g.statement,\n status: g.status,\n priority: g.priority,\n rationale: g.rationale,\n }\n : {};\n }\n case \"qgoal\": {\n const g = doc.goals?.qualityGoals?.find((x) => x.id === id);\n return g\n ? {\n title: g.title,\n statement: g.statement,\n status: g.status,\n priority: g.priority,\n notes: g.metric,\n }\n : {};\n }\n case \"obstacle\": {\n const o = doc.goals?.obstacles?.find((x) => x.id === id);\n return o ? { title: o.title, statement: o.statement, notes: o.mitigation } : {};\n }\n case \"scenario\":\n case \"misuseCase\":\n case \"edgeCase\": {\n const all = [\n ...(doc.scenarios?.scenarios ?? []),\n ...(doc.scenarios?.misuseCases ?? []),\n ...(doc.scenarios?.edgeCases ?? []),\n ];\n const s = all.find((x) => x.id === id);\n return s ? { title: s.title, statement: s.narrative } : {};\n }\n case \"testCase\": {\n const t = doc.verification?.testCases?.find((x) => x.id === id);\n return t ? { title: t.title, statement: t.purpose, notes: t.expected } : {};\n }\n case \"testSuite\": {\n const t = doc.verification?.testSuites?.find((x) => x.id === id);\n return t ? { title: t.title, statement: t.description } : {};\n }\n case \"risk\": {\n const r = doc.catalogs?.risks?.find((x) => x.id === id);\n return r ? { statement: r.statement, notes: r.mitigation } : {};\n }\n case \"constraint\": {\n const c = doc.catalogs?.constraints?.find((x) => x.id === id);\n return c ? { statement: c.statement } : {};\n }\n case \"decision\": {\n const d = doc.catalogs?.decisions?.find((x) => x.id === id);\n return d ? { statement: d.decision, rationale: d.context, status: d.status } : {};\n }\n case \"term\": {\n const t = doc.catalogs?.glossary?.find((x) => x.id === id);\n return t ? { title: t.name, statement: t.definition } : {};\n }\n case \"rule\": {\n const r = doc.domain?.businessRules?.find((x) => x.id === id);\n return r ? { statement: r.statement, notes: r.examples } : {};\n }\n case \"entity\": {\n const e = doc.domain?.entities?.find((x) => x.id === id);\n return e ? { title: e.name, statement: e.description } : {};\n }\n case \"stateMachine\": {\n const sm = doc.behavior?.stateMachines?.find((x) => x.id === id);\n return sm ? { title: sm.name, statement: sm.description } : {};\n }\n default:\n return {};\n }\n}\n\n/**\n * Extract one artifact by id with its trace neighborhood, or `undefined` when\n * the id is not declared in the document. Pure and deterministic; edges appear\n * in document order.\n */\nexport function extractArtifact(\n doc: RqmlDocument,\n id: string,\n): ArtifactSlice | undefined {\n const idIndex = declaredIdIndex(doc);\n const ref = idIndex.get(id);\n if (ref === undefined) return undefined;\n\n const slice: ArtifactSlice = { id, kind: ref.kind, edges: [] };\n\n const req = requirementIndex(doc).get(id);\n if (req !== undefined) {\n slice.title = req.title;\n slice.statement = req.statement;\n slice.reqType = req.type;\n if (req.status !== undefined) slice.status = req.status;\n if (req.priority !== undefined) slice.priority = req.priority;\n if (req.rationale !== undefined) slice.rationale = req.rationale;\n if (req.notes !== undefined) slice.notes = req.notes;\n if (req.acceptance.length > 0) slice.acceptance = req.acceptance;\n } else {\n const extra = Object.fromEntries(\n Object.entries(details(doc, id, ref.kind)).filter(([, v]) => v !== undefined),\n );\n Object.assign(slice, extra);\n }\n\n for (const edge of doc.trace) {\n const fromKey = endpointKey(edge.from);\n const toKey = endpointKey(edge.to);\n if (fromKey !== id && toKey !== id) continue;\n const direction: SliceEdge[\"direction\"] = fromKey === id ? \"outgoing\" : \"incoming\";\n const far = direction === \"outgoing\" ? edge.to : edge.from;\n const target = endpointKey(far);\n const targetKind =\n far.kind === \"local\" ? (idIndex.get(target)?.kind ?? \"unknown\") : far.kind;\n const sliceEdge: SliceEdge = {\n edgeId: edge.id,\n type: edge.type,\n direction,\n target,\n targetKind,\n };\n if (far.kind !== \"local\" && far.title !== undefined) sliceEdge.title = far.title;\n slice.edges.push(sliceEdge);\n }\n\n return slice;\n}\n\n/** Render a slice as compact markdown for human or agent consumption. */\nexport function sliceToMarkdown(slice: ArtifactSlice): string {\n const lines: string[] = [];\n const heading = slice.title !== undefined ? `${slice.id} — ${slice.title}` : slice.id;\n lines.push(`## ${heading}`);\n\n const facts: string[] = [\n `kind: ${slice.kind}${slice.reqType !== undefined ? ` (${slice.reqType})` : \"\"}`,\n ];\n if (slice.status !== undefined) facts.push(`status: ${slice.status}`);\n if (slice.priority !== undefined) facts.push(`priority: ${slice.priority}`);\n lines.push(facts.join(\" · \"), \"\");\n\n if (slice.statement !== undefined) lines.push(slice.statement.trim(), \"\");\n if (slice.rationale !== undefined) {\n lines.push(`**Rationale:** ${slice.rationale.trim()}`, \"\");\n }\n if (slice.notes !== undefined) lines.push(`**Notes:** ${slice.notes.trim()}`, \"\");\n\n if (slice.acceptance !== undefined && slice.acceptance.length > 0) {\n lines.push(\"### Acceptance\");\n for (const c of slice.acceptance) {\n const parts: string[] = [];\n if (c.given !== undefined) parts.push(`GIVEN ${c.given.trim()}`);\n if (c.when !== undefined) parts.push(`WHEN ${c.when.trim()}`);\n parts.push(`THEN ${c.then.trim()}`);\n lines.push(`- ${c.id !== undefined ? `\\`${c.id}\\` ` : \"\"}${parts.join(\" \")}`);\n }\n lines.push(\"\");\n }\n\n if (slice.edges.length > 0) {\n lines.push(\"### Trace\");\n for (const e of slice.edges) {\n const arrow = e.direction === \"outgoing\" ? \"→\" : \"←\";\n lines.push(`- ${arrow} ${e.type} ${e.target} (${e.targetKind}, \\`${e.edgeId}\\`)`);\n }\n lines.push(\"\");\n }\n\n return `${lines.join(\"\\n\").trimEnd()}\\n`;\n}\n","/**\n * Schema-valid RQML snippet skeletons (REQ-LOOP-SKELETON). Scope is RQML\n * structure only — generation of target-language code or tests is excluded by\n * design (ISS-LOOP-SCOPE); the snippets exist so authoring tools and agents\n * never emit structurally invalid XML.\n */\n\nexport type SkeletonKind = \"req\" | \"edge\" | \"testCase\" | \"stateMachine\";\n\nexport const SKELETON_KINDS: readonly SkeletonKind[] = [\n \"req\",\n \"edge\",\n \"testCase\",\n \"stateMachine\",\n];\n\nexport interface SkeletonOptions {\n /** Override the placeholder id of the skeleton's root element. */\n id?: string;\n}\n\nconst TEMPLATES: Record<SkeletonKind, (id: string) => string> = {\n req: (id) => `<req id=\"${id}\" type=\"FR\" title=\"Title\" status=\"draft\" priority=\"must\">\n <statement>The system SHALL ...</statement>\n <acceptance>\n <criterion id=\"${id}-CRIT-1\">\n <given>...</given>\n <when>...</when>\n <then>...</then>\n </criterion>\n </acceptance>\n</req>`,\n edge: (id) => `<edge id=\"${id}\" type=\"satisfies\">\n <from><locator><local id=\"REQ-AREA-001\"/></locator></from>\n <to><locator><local id=\"GOAL-NAME\"/></locator></to>\n</edge>`,\n testCase: (id) => `<testCase id=\"${id}\" type=\"unit\" title=\"Title\">\n <purpose>...</purpose>\n <steps>...</steps>\n <expected>...</expected>\n</testCase>`,\n stateMachine: (id) => `<stateMachine id=\"${id}\" name=\"Name\" initial=\"ST-START\">\n <state id=\"ST-START\" name=\"Start\" type=\"initial\"/>\n <state id=\"ST-DONE\" name=\"Done\" type=\"final\"/>\n <transition id=\"TR-FINISH\" from=\"ST-START\" to=\"ST-DONE\" event=\"finish\"/>\n</stateMachine>`,\n};\n\nconst DEFAULT_IDS: Record<SkeletonKind, string> = {\n req: \"REQ-AREA-001\",\n edge: \"E-AREA-001\",\n testCase: \"TC-NAME\",\n stateMachine: \"SM-NAME\",\n};\n\n/**\n * Return a schema-valid XML snippet for the given element kind. Inserting the\n * snippet into the matching section of a valid document keeps it XSD-valid\n * (CRIT-SKELETON-VALID); placeholder references (edge endpoints, machine\n * states) still need to be pointed at real ids.\n */\nexport function skeleton(kind: SkeletonKind, options: SkeletonOptions = {}): string {\n const template = TEMPLATES[kind];\n return `${template(options.id ?? DEFAULT_IDS[kind])}\\n`;\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/** An implements edge whose requirement endpoint is not approved. */\nexport interface PrematureImplementation {\n edgeId: string;\n requirementId: 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 /**\n * Approved requirement ids with no incoming `implements` edge — the\n * lifecycle-aware implementation gap, since only approved artifacts should\n * drive implementation (REQ-CORE-STATUS-AWARE).\n */\n unimplementedApprovedRequirements: string[];\n /** Implements edges targeting a requirement that is not approved. */\n prematureImplementations: PrematureImplementation[];\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 statusOf = new Map(reqs.map((r) => [r.id, r.status]));\n\n const unverifiedRequirements: string[] = [];\n const unimplementedRequirements: string[] = [];\n const unimplementedApprovedRequirements: 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)) {\n unimplementedRequirements.push(id);\n if (statusOf.get(id) === \"approved\") unimplementedApprovedRequirements.push(id);\n }\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 // Implements edges pointing at a requirement that is not approved\n // (REQ-CORE-STATUS-AWARE): implementation preceded approval.\n const prematureImplementations: PrematureImplementation[] = [];\n for (const edge of doc.trace) {\n if (edge.type !== \"implements\" || edge.to.kind !== \"local\") continue;\n const requirementId = edge.to.id;\n if (!reqIds.has(requirementId)) continue;\n if (statusOf.get(requirementId) === \"approved\") continue;\n prematureImplementations.push({ edgeId: edge.id, requirementId });\n }\n prematureImplementations.sort((a, b) => a.edgeId.localeCompare(b.edgeId));\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 for (const p of prematureImplementations)\n diagnostics.push(\n finding(\n \"coverage\",\n \"premature-implementation\",\n `implements edge \"${p.edgeId}\" targets requirement \"${p.requirementId}\", which is not approved.`,\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 unimplementedApprovedRequirements,\n prematureImplementations,\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","/**\n * Traceability matrix derivation (REQ-CORE-MATRIX): one row per requirement,\n * carrying its lifecycle status, the goals it satisfies, the code that\n * implements it, the tests that verify it, and the coverage warnings on it.\n *\n * It is a presentation of {@link computeCoverage} plus resolved endpoint titles\n * from {@link resolveTrace}/{@link collectTitles} — derived once here so the\n * CLI, the MCP server, and the editor render one source and never disagree\n * about spec health (REQ-CORE-API, REQ-MCP-PARITY). Pure and deterministic:\n * rows follow coverage's sorted requirement order and every cell is stable.\n */\n\nimport { computeCoverage } from \"../check/coverage.js\";\nimport { collectTitles } from \"../export/outline.js\";\nimport { type RqmlDocument, allRequirements } from \"../model/types.js\";\nimport { type ResolvedEndpoint, resolveTrace } from \"../trace/index.js\";\n\n/** A reference to a goal, a code artifact, or a test from a matrix row. */\nexport interface MatrixRef {\n /** Local id, or the URI (doc locators as `uri#id`) for external targets. */\n id: string;\n title?: string;\n /** True when the reference points at a doc/external artifact, not a local id. */\n external?: boolean;\n /** True when a local reference resolves to no declared element. */\n broken?: boolean;\n}\n\nexport type VerificationStatus = \"verified\" | \"unverified\";\nexport type ImplementationStatus = \"implemented\" | \"unimplemented\" | \"premature\";\n\n/** Stable warning codes a row can carry, suitable for filtering. */\nexport type MatrixWarning =\n | \"unverified\"\n | \"unimplemented\"\n | \"orphan\"\n | \"premature\"\n | \"broken-trace\";\n\nexport interface MatrixRow {\n id: string;\n title: string;\n /** Requirement type (FR / NFR / IR / DR / SR / CR / PR / UXR / OR). */\n type: string;\n /** Lifecycle status (draft / review / approved / deprecated). */\n status: string;\n priority?: string;\n /** Upstream goals/scenarios this requirement satisfies (outgoing satisfies). */\n goals: MatrixRef[];\n /** Code artifacts implementing this requirement (incoming implements). */\n implementations: MatrixRef[];\n /** Tests verifying this requirement (outgoing verifiedBy). */\n tests: MatrixRef[];\n verification: VerificationStatus;\n implementation: ImplementationStatus;\n warnings: MatrixWarning[];\n}\n\nexport interface MatrixSummary {\n total: number;\n verified: number;\n unverified: number;\n implemented: number;\n unimplemented: number;\n premature: number;\n orphans: number;\n brokenTraces: number;\n}\n\nexport interface MatrixReport {\n rows: MatrixRow[];\n summary: MatrixSummary;\n}\n\n/** Optional row selection. A row is kept only if it matches every set filter. */\nexport interface MatrixFilter {\n /** Keep rows whose requirement status is in this set. */\n status?: string[];\n /** Keep rows whose requirement type is in this set. */\n type?: string[];\n /** Keep rows carrying at least one of these warning codes. */\n warning?: string[];\n}\n\nfunction refFromEndpoint(\n ep: ResolvedEndpoint,\n titleById: Map<string, string>,\n): MatrixRef {\n const loc = ep.locator;\n if (loc.kind === \"local\") {\n const ref: MatrixRef = { id: loc.id };\n const title = ep.requirement?.title ?? loc.title ?? titleById.get(loc.id);\n if (title !== undefined) ref.title = title;\n if (ep.target === undefined) ref.broken = true;\n return ref;\n }\n const ref: MatrixRef = {\n id: loc.kind === \"doc\" ? `${loc.uri}#${loc.id}` : loc.uri,\n external: true,\n };\n if (loc.title !== undefined) ref.title = loc.title;\n return ref;\n}\n\nfunction matches(row: MatrixRow, filter: MatrixFilter | undefined): boolean {\n if (filter === undefined) return true;\n if (filter.status && !filter.status.includes(row.status)) return false;\n if (filter.type && !filter.type.includes(row.type)) return false;\n if (\n filter.warning &&\n !filter.warning.some((w) => row.warnings.includes(w as MatrixWarning))\n )\n return false;\n return true;\n}\n\n/**\n * Build the traceability matrix for a parsed document, optionally filtered.\n * The summary counts the rows actually included.\n */\nexport function buildMatrix(doc: RqmlDocument, filter?: MatrixFilter): MatrixReport {\n const cov = computeCoverage(doc);\n const reqById = new Map(allRequirements(doc).map((r) => [r.id, r]));\n const titleById = collectTitles(doc);\n const edgeById = new Map(resolveTrace(doc).edges.map((re) => [re.edge.id, re]));\n\n const unverified = new Set(cov.unverifiedRequirements);\n const unimplemented = new Set(cov.unimplementedRequirements);\n const orphans = new Set(cov.orphanRequirements);\n const premature = new Set(cov.prematureImplementations.map((p) => p.requirementId));\n\n const rows: MatrixRow[] = [];\n // cov.requirements is already sorted by requirement id (deterministic).\n for (const ac of cov.requirements) {\n const req = reqById.get(ac.id);\n if (req === undefined) continue;\n\n const goals = (ac.outgoing.satisfies ?? []).flatMap((edgeId) => {\n const re = edgeById.get(edgeId);\n return re ? [refFromEndpoint(re.to, titleById)] : [];\n });\n const implementations = (ac.incoming.implements ?? []).flatMap((edgeId) => {\n const re = edgeById.get(edgeId);\n return re ? [refFromEndpoint(re.from, titleById)] : [];\n });\n const tests = (ac.outgoing.verifiedBy ?? []).flatMap((edgeId) => {\n const re = edgeById.get(edgeId);\n return re ? [refFromEndpoint(re.to, titleById)] : [];\n });\n\n const verification: VerificationStatus = unverified.has(ac.id)\n ? \"unverified\"\n : \"verified\";\n const implementation: ImplementationStatus = premature.has(ac.id)\n ? \"premature\"\n : unimplemented.has(ac.id)\n ? \"unimplemented\"\n : \"implemented\";\n\n const warnings: MatrixWarning[] = [];\n if (unverified.has(ac.id)) warnings.push(\"unverified\");\n if (unimplemented.has(ac.id)) warnings.push(\"unimplemented\");\n if (orphans.has(ac.id)) warnings.push(\"orphan\");\n if (premature.has(ac.id)) warnings.push(\"premature\");\n if ([...goals, ...implementations, ...tests].some((r) => r.broken))\n warnings.push(\"broken-trace\");\n\n const row: MatrixRow = {\n id: ac.id,\n title: req.title,\n type: req.type,\n status: req.status ?? \"draft\",\n goals,\n implementations,\n tests,\n verification,\n implementation,\n warnings,\n };\n if (req.priority !== undefined) row.priority = req.priority;\n rows.push(row);\n }\n\n const kept = rows.filter((r) => matches(r, filter));\n const summary: MatrixSummary = {\n total: kept.length,\n verified: kept.filter((r) => r.verification === \"verified\").length,\n unverified: kept.filter((r) => r.verification === \"unverified\").length,\n implemented: kept.filter((r) => r.implementation === \"implemented\").length,\n unimplemented: kept.filter((r) => r.implementation === \"unimplemented\").length,\n premature: kept.filter((r) => r.implementation === \"premature\").length,\n orphans: kept.filter((r) => r.warnings.includes(\"orphan\")).length,\n brokenTraces: kept.filter((r) => r.warnings.includes(\"broken-trace\")).length,\n };\n\n return { rows: kept, summary };\n}\n\nfunction escapeCell(value: string): string {\n return value.replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \");\n}\n\nfunction refLabel(r: MatrixRef): string {\n const base = r.title !== undefined ? `${r.id} (${r.title})` : r.id;\n return r.broken ? `${base} [broken]` : base;\n}\n\n/** Render a {@link MatrixReport} to a deterministic markdown table + summary. */\nexport function matrixToMarkdown(report: MatrixReport): string {\n const s = report.summary;\n const lines: string[] = [\n \"# Traceability matrix\",\n \"\",\n `- **Requirements:** ${s.total}`,\n `- **Verified:** ${s.verified} · **Unverified:** ${s.unverified}`,\n `- **Implemented:** ${s.implemented} · **Unimplemented:** ${s.unimplemented} · **Premature:** ${s.premature}`,\n `- **Orphans:** ${s.orphans} · **Broken traces:** ${s.brokenTraces}`,\n \"\",\n \"| ID | Title | Type | Status | Verify | Impl | Goals | Implemented by | Verified by | Warnings |\",\n \"| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\",\n ];\n for (const row of report.rows) {\n const cells = [\n row.id,\n row.title,\n row.type,\n row.status,\n row.verification,\n row.implementation,\n row.goals.map(refLabel).join(\", \"),\n row.implementations.map(refLabel).join(\", \"),\n row.tests.map(refLabel).join(\", \"),\n row.warnings.join(\", \"),\n ].map(escapeCell);\n lines.push(`| ${cells.join(\" | \")} |`);\n }\n while (lines.length > 0 && lines[lines.length - 1] === \"\") lines.pop();\n return `${lines.join(\"\\n\")}\\n`;\n}\n","import { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, 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 * Recorded content hashes per implements edge (REQ-CORE-DRIFT-BASELINE).\n * When present, the default resolver reports `changed` for a link whose\n * artifact exists but no longer matches its recorded hash.\n */\n baseline?: DriftBaseline;\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 * plus a baseline hash comparison when a baseline is provided.\n */\n resolve?: (link: ImplementsLink) => ArtifactStatus;\n}\n\n/**\n * Content hashes (sha256 hex) per implements-edge id, recorded when a link is\n * created or its requirement approved (REQ-CORE-DRIFT-BASELINE).\n */\nexport type DriftBaseline = Record<string, string>;\n\n/** Conventional baseline location, relative to the project base directory. */\nexport const BASELINE_PATH = \".rqml/baseline.json\";\n\nfunction hashFileAt(filePath: string): string | undefined {\n try {\n return createHash(\"sha256\").update(readFileSync(filePath)).digest(\"hex\");\n } catch {\n return undefined;\n }\n}\n\n/**\n * Hash every filesystem-resolvable implements link of the document, producing\n * the baseline that future drift runs compare against. Deterministic for a\n * given document and filesystem state.\n */\nexport function computeBaseline(\n doc: RqmlDocument,\n options: { baseDir?: string } = {},\n): DriftBaseline {\n const baseDir = options.baseDir ?? process.cwd();\n const baseline: DriftBaseline = {};\n for (const link of implementsLinks(doc)) {\n const filePath = filePathFromUri(link.uri, baseDir);\n if (filePath === undefined) continue;\n const hash = hashFileAt(filePath);\n if (hash !== undefined) baseline[link.edgeId] = hash;\n }\n return baseline;\n}\n\n/** Read the baseline store under `baseDir`, or `undefined` when absent/invalid. */\nexport function loadBaseline(baseDir: string): DriftBaseline | undefined {\n try {\n const parsed: unknown = JSON.parse(\n readFileSync(join(baseDir, BASELINE_PATH), \"utf8\"),\n );\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return undefined;\n }\n const out: DriftBaseline = {};\n for (const [edgeId, hash] of Object.entries(parsed)) {\n if (typeof hash === \"string\") out[edgeId] = hash;\n }\n return out;\n } catch {\n return undefined;\n }\n}\n\n/** Write the baseline store with sorted keys so repeated saves diff cleanly. */\nexport function saveBaseline(baseDir: string, baseline: DriftBaseline): void {\n const path = join(baseDir, BASELINE_PATH);\n mkdirSync(dirname(path), { recursive: true });\n const sorted = Object.fromEntries(\n Object.entries(baseline).sort(([a], [b]) => a.localeCompare(b)),\n );\n writeFileSync(path, `${JSON.stringify(sorted, null, 2)}\\n`);\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, baseline?: DriftBaseline) {\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 if (!existsSync(filePath)) return \"missing\";\n const recorded = baseline?.[link.edgeId];\n if (recorded !== undefined) {\n const current = hashFileAt(filePath);\n if (current !== undefined && current !== recorded) return \"changed\";\n }\n return \"present\";\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, options.baseline);\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, statSync } 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 /** Every raw `--flag` value, for command-specific options. */\n flags: Map<string, string | boolean>;\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 flags,\n };\n}\n\n/** A flag's string value, or `undefined` when absent or value-less. */\nexport function flagString(args: Args, name: string): string | undefined {\n const value = args.flags.get(name);\n return typeof value === \"string\" ? value : undefined;\n}\n\n/**\n * Args for spec resolution in commands whose positionals are not the spec\n * path: an explicit `--spec <path>` wins, else the base-dir spec is discovered.\n */\nexport function specArgs(args: Args): Args {\n const override = flagString(args, \"spec\");\n return { ...args, positionals: override !== undefined ? [override] : [] };\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 if (statSync(p).isDirectory()) {\n throw new UsageError(`\"${explicit}\" is a directory, not an .rqml file`);\n }\n return p;\n }\n // Only regular files — a directory whose name ends in \".rqml\" (e.g. the\n // project's `.rqml/` governance folder) must not be mistaken for the spec.\n const candidates = readdirSync(args.baseDir, { withFileTypes: true })\n .filter((e) => e.isFile() && e.name.endsWith(\".rqml\"))\n .map((e) => e.name)\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 {\n checkIntegrity,\n computeCoverage,\n detectDrift,\n loadBaseline,\n parse,\n} 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 driftOptions: Parameters<typeof detectDrift>[1] = { baseDir: args.baseDir };\n const baseline = loadBaseline(args.baseDir);\n if (baseline !== undefined) driftOptions.baseline = baseline;\n const drift = parsed.ok ? detectDrift(parsed.document, driftOptions) : 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 (coverage?.unimplementedApprovedRequirements.length ?? 0) +\n (coverage?.prematureImplementations.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 unimplementedApprovedRequirements: coverage.unimplementedApprovedRequirements,\n prematureImplementations: coverage.prematureImplementations,\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","import { declaredIdIndex, impactOf, parse } from \"@rqml/core\";\nimport { EXIT, UsageError, parseArgs, readSpec, specArgs } from \"../runtime.js\";\n\n/**\n * `rqml impact` — what is affected if this artifact changes? Transitive,\n * bidirectional trace-graph traversal (REQ-LOOP-IMPACT, SCN-IMPACT).\n */\nexport async function runImpact(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const id = args.positionals[0];\n if (id === undefined) {\n throw new UsageError(\"usage: rqml impact <id> [--json] [--spec <path>]\");\n }\n const { path, xml } = readSpec(specArgs(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 if (!declaredIdIndex(parsed.document).has(id)) {\n process.stderr.write(`✗ no artifact with id \"${id}\" in ${path}\\n`);\n return EXIT.USAGE;\n }\n\n const report = impactOf(parsed.document, id);\n if (args.json) {\n process.stdout.write(`${JSON.stringify(report, null, 2)}\\n`);\n return EXIT.OK;\n }\n\n process.stdout.write(`Impact of ${id} — ${report.affected.length} affected\\n`);\n for (const group of report.groups) {\n const arrow = group.direction === \"outgoing\" ? \"→\" : \"←\";\n process.stdout.write(` ${arrow} ${group.type}: ${group.ids.join(\", \")}\\n`);\n }\n const transitive = report.affected.filter((a) => a.distance > 1);\n if (transitive.length > 0) {\n process.stdout.write(\" transitively:\\n\");\n for (const a of transitive) {\n const path = a.path.map((s) => s.edgeId).join(\" › \");\n process.stdout.write(\n ` ${a.id} (${a.kind}, distance ${a.distance} via ${path})\\n`,\n );\n }\n }\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/ and the development process at https://rqml.org/docs/development-process/\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## Toolchain\n\nThe spec-first loop is enforced by the `rqml` CLI (npm: `@rqml/cli`; the `@rqml/mcp` server exposes the same engine as agent tools):\n\n```bash\nrqml check # deterministic gate: validation + coverage + drift (exit 0 = pass)\nrqml status # re-anchor: spec, coverage, and drift state\nrqml show <REQ-ID> # one requirement: statement, acceptance criteria, trace neighborhood\nrqml impact <ID> # what is affected, transitively, if this artifact changes\nrqml matrix # traceability matrix: status, goals, code, tests, coverage gaps\nrqml link <REQ-ID> <path> # record an implements edge + drift baseline (--type verifiedBy for tests)\nrqml skeleton <kind> # schema-valid snippet: req | edge | testCase | stateMachine\n```\n\nRun `rqml status` when you start a session to re-anchor on the spec. Run `rqml check` before finishing any task — it must exit 0.\n\n---\n\n## Core Principle: Spec-First Development\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\nRQML organizes work into a **five-stage process** (https://rqml.org/docs/development-process/). Each stage produces a durable artifact in version control; verification feeds back to the spec, so it is a loop:\n\n| Stage | Task | Output |\n|-------|------|--------|\n| **Spec** | Capture intent as requirements | `requirements.rqml` |\n| **Design** | Decide architecture, record decisions | ADRs in `.rqml/adr/` |\n| **Plan** | Break work into agent-sized stages | `.rqml/plan.md` |\n| **Code** | Implement specified behavior, keep traces current | code + tests |\n| **Verify** | Prove coverage and catch drift | trace graph + `rqml check` |\n\nNever skip ahead: do not implement behavior that is not specified, and do not make a significant architectural choice without recording it as an ADR.\n\n---\n\n## Workflow\n\n### 1. Spec\nAsk clarifying questions until you understand the goal, scope, acceptance criteria, and constraints. Don't assume—capture assumptions as `<notes>` or `<issue>` elements. **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; only `status=\"approved\"` requirements drive implementation\n\n### 2. Design\nBefore building, decide *how*. Record each significant architectural decision as an **Architecture Decision Record (ADR)** in `.rqml/adr/`, following the canonical format (https://rqml.org/docs/development-process/design): `NNNN-kebab-case-slug.md`, with Status, Classification, Context, Options considered, Decision, and Consequences. A decision is ADR-worthy when there are real alternatives or the choice constrains future work; skip ADRs for low-level implementation details. ADRs are immutable once accepted—supersede, don't edit.\n\n### 3. Plan\nBreak approved requirements into a staged implementation plan at `.rqml/plan.md`, framed for coding agents: each stage names its goal, the requirement IDs it addresses, the files it touches, and how to verify it.\n\n### 4. Code (Implement)\nRead the requirement first: `rqml show REQ-XXX`. Check blast radius before changing existing artifacts: `rqml impact REQ-XXX`. Honor the ADRs. If you discover missing requirements, stop and add them to the spec first. After implementing, record the trace link:\n\n```bash\nrqml link REQ-XXX src/path/to/implementation.ts\n```\n\n### 5. Verify\nAdd tests that reference requirement IDs, then record verification and run the gate:\n\n```bash\nrqml link REQ-XXX test/path/to/test.ts --type verifiedBy\nrqml check # must exit 0 before you are done\n```\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| Spec (elicitation) | Major features | Testable reqs | Edge cases | Formal |\n| Spec-first | Recommended | Required | Required | Approved first |\n| Design (ADRs) | Optional | Significant choices | All architectural choices | With approval |\n| Plan | Optional | For multi-stage work | Required | Required |\n| Code traces | Optional | New features | All changes | With metadata |\n| Verify (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**Design:** ADR-xxxx — decision recorded (if any)\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:** Use the toolchain — it validates offline against the bundled schema and also checks referential integrity the XSD alone cannot enforce:\n```bash\nrqml validate\n```\n\nIf the `rqml` CLI is not installed, `npx @rqml/cli validate` works without installation. As a last resort, xmllint (pre-installed on macOS/Linux) checks XSD validity only:\n```bash\nxmllint --schema https://rqml.org/schema/rqml-2.1.0.xsd <rqml-file-name> --noout\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 { writeFileSync } from \"node:fs\";\nimport {\n type LinkRequest,\n appendTraceEdge,\n computeBaseline,\n implementsLinks,\n loadBaseline,\n parse,\n saveBaseline,\n updateTraceEdge,\n} from \"@rqml/core\";\nimport { printDiagnostics } from \"../report.js\";\nimport {\n type Args,\n EXIT,\n UsageError,\n flagString,\n parseArgs,\n readSpec,\n specArgs,\n} from \"../runtime.js\";\n\nconst USAGE =\n \"usage: rqml link <artifact-id> <uri> [--update] [--type implements|verifiedBy] [--id <edge-id>] [--kind <k>] [--title <t>] [--spec <path>]\\n\" +\n \" rqml link --refresh <edge-id> [--spec <path>]\";\n\n/**\n * `rqml link` — record an implements/verifiedBy trace edge mechanically\n * (REQ-LOOP-LINK) and the drift baseline for the linked artifact\n * (REQ-CORE-DRIFT-BASELINE). With `--update` the existing edge's external\n * locator is replaced in place, and with `--refresh <edge-id>` only the\n * baseline entry is re-recorded (REQ-LOOP-RELINK). The spec file is only\n * written when the edited document still validates.\n */\nexport async function runLink(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n if (args.flags.has(\"refresh\")) {\n const edgeId = flagString(args, \"refresh\");\n if (edgeId === undefined) throw new UsageError(USAGE);\n return runRefresh(args, edgeId);\n }\n\n const [artifactId, uri] = args.positionals;\n if (artifactId === undefined || uri === undefined) throw new UsageError(USAGE);\n const type = flagString(args, \"type\") ?? \"implements\";\n if (type !== \"implements\" && type !== \"verifiedBy\") {\n throw new UsageError(`unknown link type \"${type}\" (implements|verifiedBy)`);\n }\n const update = args.flags.get(\"update\") === true || args.flags.get(\"update\") === \"true\";\n\n const { path, xml } = readSpec(specArgs(args));\n const request: LinkRequest = { artifactId, uri, type };\n const edgeId = flagString(args, \"id\");\n if (edgeId !== undefined) request.edgeId = edgeId;\n const kind = flagString(args, \"kind\");\n if (kind !== undefined) request.kind = kind;\n const title = flagString(args, \"title\");\n if (title !== undefined) request.title = title;\n\n const result = update ? updateTraceEdge(xml, request) : appendTraceEdge(xml, request);\n if (!result.ok) {\n process.stderr.write(`✗ link failed: ${result.error}\\n`);\n return EXIT.VALIDATION;\n }\n\n const { validate } = await import(\"@rqml/core/validate\");\n const validation = validate(result.xml);\n if (!validation.valid) {\n printDiagnostics(validation.diagnostics);\n process.stderr.write(\"✗ link would invalidate the document; nothing written\\n\");\n return EXIT.VALIDATION;\n }\n writeFileSync(path, result.xml);\n\n // Hash the newly linked artifact only — re-hashing every link here would\n // silently bless drifted artifacts.\n let baselineRecorded = false;\n const parsed = parse(result.xml);\n if (parsed.ok) {\n const fresh = computeBaseline(parsed.document, { baseDir: args.baseDir });\n const hash = fresh[result.edgeId];\n if (hash !== undefined) {\n const baseline = loadBaseline(args.baseDir) ?? {};\n baseline[result.edgeId] = hash;\n saveBaseline(args.baseDir, baseline);\n baselineRecorded = true;\n }\n }\n\n if (args.json) {\n const report = {\n spec: path,\n mode: update ? \"update\" : \"append\",\n edgeId: result.edgeId,\n type,\n artifactId,\n uri,\n baselineRecorded,\n };\n process.stdout.write(`${JSON.stringify(report, null, 2)}\\n`);\n } else {\n const arrow = type === \"implements\" ? \"←\" : \"→\";\n const mode = update ? \", updated\" : \"\";\n const baseline = baselineRecorded ? \", baseline recorded\" : \"\";\n process.stdout.write(\n `✓ ${artifactId} ${arrow} ${uri} (${result.edgeId}, ${type}${mode}${baseline})\\n`,\n );\n }\n return EXIT.OK;\n}\n\n/**\n * `rqml link --refresh <edge-id>` — re-record the drift baseline for one\n * intentionally changed artifact (REQ-LOOP-RELINK). Edge-scoped on purpose:\n * the spec document is never touched, and no other entry is re-hashed.\n */\nfunction runRefresh(args: Args, edgeId: string): number {\n const { path, xml } = readSpec(specArgs(args));\n const parsed = parse(xml);\n if (!parsed.ok) {\n process.stderr.write(`✗ refresh failed: ${parsed.error.message}\\n`);\n return EXIT.VALIDATION;\n }\n const link = implementsLinks(parsed.document).find((l) => l.edgeId === edgeId);\n if (link === undefined) {\n process.stderr.write(\n `✗ refresh failed: no implements edge \"${edgeId}\" with an external locator exists (only implements edges carry baselines)\\n`,\n );\n return EXIT.VALIDATION;\n }\n const hash = computeBaseline(parsed.document, { baseDir: args.baseDir })[edgeId];\n if (hash === undefined) {\n process.stderr.write(\n `✗ refresh failed: \"${link.uri}\" cannot be hashed (missing file or non-filesystem URI)\\n`,\n );\n return EXIT.VALIDATION;\n }\n const baseline = loadBaseline(args.baseDir) ?? {};\n baseline[edgeId] = hash;\n saveBaseline(args.baseDir, baseline);\n\n if (args.json) {\n const report = { spec: path, mode: \"refresh\", edgeId, uri: link.uri, hash };\n process.stdout.write(`${JSON.stringify(report, null, 2)}\\n`);\n } else {\n process.stdout.write(`✓ baseline refreshed for ${edgeId} (${link.uri})\\n`);\n }\n return EXIT.OK;\n}\n","import { type MatrixFilter, buildMatrix, matrixToMarkdown, parse } from \"@rqml/core\";\nimport { EXIT, flagString, parseArgs, readSpec, specArgs } from \"../runtime.js\";\n\n/**\n * `rqml matrix` — the traceability matrix (REQ-LOOP-MATRIX): one row per\n * requirement with status, upstream goals, implementing code, verifying tests,\n * and coverage warnings, as a markdown table or `--json`. Backed by\n * @rqml/core's buildMatrix, so it equals the rqml_matrix MCP tool\n * (REQ-MCP-PARITY). Optional `--status`/`--type`/`--warning` filter rows.\n */\nfunction list(value: string | undefined): string[] | undefined {\n if (value === undefined) return undefined;\n const items = value\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n return items.length > 0 ? items : undefined;\n}\n\nexport async function runMatrix(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const { path, xml } = readSpec(specArgs(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 status = list(flagString(args, \"status\"));\n const type = list(flagString(args, \"type\"));\n const warning = list(flagString(args, \"warning\"));\n const filter: MatrixFilter = {};\n if (status) filter.status = status;\n if (type) filter.type = type;\n if (warning) filter.warning = warning;\n const filtered = status !== undefined || type !== undefined || warning !== undefined;\n\n const matrix = buildMatrix(parsed.document, filtered ? filter : undefined);\n process.stdout.write(\n args.json ? `${JSON.stringify(matrix, null, 2)}\\n` : matrixToMarkdown(matrix),\n );\n return EXIT.OK;\n}\n","import { extractArtifact, parse, sliceToMarkdown } from \"@rqml/core\";\nimport { EXIT, UsageError, parseArgs, readSpec, specArgs } from \"../runtime.js\";\n\n/**\n * `rqml show` — extract one artifact with its statement, acceptance criteria,\n * and trace neighborhood (REQ-LOOP-SHOW), so an agent reads a slice of the\n * spec instead of the whole document.\n */\nexport async function runShow(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const id = args.positionals[0];\n if (id === undefined) {\n throw new UsageError(\"usage: rqml show <id> [--json] [--spec <path>]\");\n }\n const { path, xml } = readSpec(specArgs(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 slice = extractArtifact(parsed.document, id);\n if (slice === undefined) {\n process.stderr.write(`✗ no artifact with id \"${id}\" in ${path}\\n`);\n return EXIT.USAGE;\n }\n process.stdout.write(\n args.json ? `${JSON.stringify(slice, null, 2)}\\n` : sliceToMarkdown(slice),\n );\n return EXIT.OK;\n}\n","import { SKELETON_KINDS, type SkeletonKind, skeleton } from \"@rqml/core\";\nimport { EXIT, UsageError, flagString, parseArgs } from \"../runtime.js\";\n\n/**\n * `rqml skeleton` — print a schema-valid RQML snippet (REQ-LOOP-SKELETON) so\n * authors and agents never hand-roll invalid structure.\n */\nexport async function runSkeleton(rest: string[]): Promise<number> {\n const args = parseArgs(rest);\n const kind = args.positionals[0];\n const kinds = SKELETON_KINDS.join(\"|\");\n if (kind === undefined || !(SKELETON_KINDS as readonly string[]).includes(kind)) {\n throw new UsageError(`usage: rqml skeleton <${kinds}> [--id <id>]`);\n }\n const id = flagString(args, \"id\");\n process.stdout.write(skeleton(kind as SkeletonKind, id !== undefined ? { id } : {}));\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 unimplementedApprovedRequirements: coverage.unimplementedApprovedRequirements,\n prematureImplementations: coverage.prematureImplementations,\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 ` (approved: ${coverage.unimplementedApprovedRequirements.length})\\n` +\n ` premature implementations: ${coverage.prematureImplementations.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 { createRequire } from \"node:module\";\nimport { runCheck } from \"./commands/check.js\";\nimport { runImpact } from \"./commands/impact.js\";\nimport { runInit } from \"./commands/init.js\";\nimport { runLink } from \"./commands/link.js\";\nimport { runMatrix } from \"./commands/matrix.js\";\nimport { runShow } from \"./commands/show.js\";\nimport { runSkeleton } from \"./commands/skeleton.js\";\nimport { runStatus } from \"./commands/status.js\";\nimport { runValidate } from \"./commands/validate.js\";\nimport { EXIT, UsageError } from \"./runtime.js\";\n\n// The version lives in package.json (changesets bumps it there); resolving it\n// at runtime keeps `rqml --version` truthful. From dist/index.js and from\n// src/index.ts alike, ../package.json is this package's manifest.\nconst VERSION = (createRequire(import.meta.url)(\"../package.json\") as { version: string })\n .version;\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 link <id> <uri> Record an implements/verifiedBy edge and its drift baseline\n (--update repoints an existing edge; --refresh <edge-id>\n re-records only the baseline for an intentional change)\n show <id> Extract one artifact with its trace neighborhood\n impact <id> What is affected, transitively, if this artifact changes\n matrix [path] Traceability matrix: status, goals, code, tests, warnings\n skeleton <kind> Print a schema-valid snippet (req|edge|testCase|stateMachine)\n\nOptions:\n --json Emit machine-readable JSON (status, check, validate, link, show, impact, matrix)\n --status/--type/--warning Filter matrix rows (comma-separated, e.g. --warning unverified)\n --strictness <level> relaxed | standard | strict | certified (default: standard)\n --base-dir <dir> Directory to resolve the spec and code links against\n --spec <path> Explicit spec file (link, show, impact)\n --type <type> Link type: implements | verifiedBy (default: implements)\n --id <id> Explicit edge id (link) or skeleton root id\n --kind <kind> Locator kind hint for link (default: code/test by type)\n --title <title> Locator title hint for link\n --update Replace the external locator of an existing edge (link)\n --refresh <edge-id> Re-record the drift baseline for one edge (link)\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 \"link\":\n return runLink(rest);\n case \"show\":\n return runShow(rest);\n case \"impact\":\n return runImpact(rest);\n case \"matrix\":\n return runMatrix(rest);\n case \"skeleton\":\n return runSkeleton(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"]}