@abapify/ts-xsd 0.4.1 → 0.4.3

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-DnX2dJZe.mjs","names":[],"sources":["../src/codegen/generate.ts"],"sourcesContent":["/**\n * Schema Literal Generator\n *\n * Transforms a parsed Schema object into a TypeScript literal string\n * that preserves type information for InferSchema<T>.\n */\n\nimport { parseXsd } from '../xsd';\nimport type { Schema } from '../xsd/types';\n\nexport interface GenerateOptions {\n /** Variable name for the exported schema */\n name?: string;\n /** Add JSDoc comment */\n comment?: string;\n /** Pretty print with indentation */\n pretty?: boolean;\n /** Indentation string (default: ' ') */\n indent?: string;\n /**\n * Enable specific $ metadata features in output.\n * - `$xmlns`: Keep `$xmlns` in output (already parsed as $xmlns)\n * - `$imports`: Rename `import` → `$imports` for schema linking\n * - `$filename`: Include `$filename` (uses `name` option + '.xsd')\n *\n * @example\n * ```typescript\n * features: { $xmlns: true, $imports: true, $filename: true }\n * ```\n */\n features?: {\n /** Keep `$xmlns` in output */\n $xmlns?: boolean;\n /** Rename `import` → `$imports` for schema linking */\n $imports?: boolean;\n /** Include `$filename` (uses `name` + '.xsd') */\n $filename?: boolean;\n };\n /**\n * Property names to exclude from output.\n * Useful for removing annotations, documentation, etc.\n *\n * @example\n * ```typescript\n * exclude: ['annotation'] // Remove all annotation elements\n * ```\n */\n exclude?: string[];\n /** Resolver for import paths (schemaLocation -> module path) */\n importResolver?: (schemaLocation: string) => string | null;\n /**\n * Generate isolatedDeclarations-compatible output.\n * Uses `satisfies Schema as const` instead of just `as const`.\n */\n isolatedDeclarations?: boolean;\n /** Use single quotes for string literals and property names */\n singleQuote?: boolean;\n}\n\n/**\n * Generate a TypeScript literal string from XSD content.\n *\n * @param xsdContent - XSD file content as string\n * @param options - Generation options\n * @returns TypeScript code with schema as const literal\n *\n * @example\n * ```typescript\n * const xsd = `<xs:schema>...</xs:schema>`;\n * const code = generateSchemaLiteral(xsd, { name: 'PersonSchema' });\n * // export const PersonSchema = { ... } as const;\n * ```\n */\nexport function generateSchemaLiteral(\n xsdContent: string,\n options: GenerateOptions = {},\n): string {\n const schema = parseXsd(xsdContent);\n const features = options.features ?? {};\n const exclude = new Set(options.exclude ?? []);\n\n // Transform schema\n let outputSchema: Record<string, unknown> = { ...schema };\n\n // Add $filename when enabled (uses name option)\n if (features.$filename && options.name) {\n outputSchema = { $filename: `${options.name}.xsd`, ...outputSchema };\n }\n\n // Apply transformations (features + exclude)\n outputSchema = applyTransforms(outputSchema, features, exclude);\n\n return schemaToLiteral(outputSchema as Schema, options);\n}\n\n/**\n * Apply transformations: features ($xmlns, $imports) and exclude filter.\n * Used by generateSchemaLiteral (without imports).\n */\nfunction applyTransforms(\n schema: Record<string, unknown>,\n features: NonNullable<GenerateOptions['features']>,\n exclude: Set<string>,\n): Record<string, unknown> {\n return applyTransformsWithImports(schema, features, exclude, []);\n}\n\n/**\n * Special marker for schema references (not serialized as strings).\n */\nclass SchemaRef {\n constructor(public readonly name: string) {}\n}\n\n/**\n * Apply transformations with schema imports as references.\n */\nfunction applyTransformsWithImports(\n schema: Record<string, unknown>,\n features: NonNullable<GenerateOptions['features']>,\n exclude: Set<string>,\n importedSchemaNames: string[],\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(schema)) {\n // Skip excluded properties\n if (exclude.has(key)) {\n continue;\n }\n\n if (key === '$xmlns') {\n // $xmlns is already parsed - keep only if feature enabled\n if (features.$xmlns) {\n result[key] = value;\n }\n } else if (key === 'import') {\n // Convert import to $imports with schema references\n if (features.$imports && importedSchemaNames.length > 0) {\n result['$imports'] = importedSchemaNames.map(\n (name) => new SchemaRef(name),\n );\n }\n // If no imports resolved, skip the import property entirely\n } else {\n // Recursively filter nested objects/arrays for exclude\n result[key] = filterDeep(value, exclude);\n }\n }\n\n return result;\n}\n\n/**\n * Recursively filter excluded properties from nested structures.\n */\nfunction filterDeep(value: unknown, exclude: Set<string>): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => filterDeep(item, exclude));\n }\n\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n if (!exclude.has(k)) {\n result[k] = filterDeep(v, exclude);\n }\n }\n return result;\n }\n\n return value;\n}\n\n/**\n * Generate a complete TypeScript file from XSD content.\n *\n * @param xsdContent - XSD file content as string\n * @param options - Generation options\n * @returns Complete TypeScript file content\n */\nexport function generateSchemaFile(\n xsdContent: string,\n options: GenerateOptions = {},\n): string {\n const {\n name = 'schema',\n comment,\n features = {},\n importResolver,\n isolatedDeclarations = false,\n } = options;\n\n // Parse to extract imports\n const schema = parseXsd(xsdContent);\n const xsdImports = (schema.import ?? []) as Array<{\n schemaLocation?: string;\n namespace?: string;\n }>;\n\n // Generate TypeScript import statements if $imports feature enabled\n const tsImports: string[] = [];\n const importedSchemaNames: string[] = [];\n\n // Add Schema type import for isolatedDeclarations mode\n if (isolatedDeclarations) {\n tsImports.push(\"import type { Schema } from '@abapify/ts-xsd';\");\n }\n\n if (features.$imports && importResolver) {\n for (const imp of xsdImports) {\n if (imp.schemaLocation) {\n const modulePath = importResolver(imp.schemaLocation);\n if (modulePath) {\n // Derive schema name from schemaLocation basename (e.g., \"../sap/adtcore.xsd\" → \"adtcore\")\n const schemaName = imp.schemaLocation\n .replace(/\\.xsd$/, '')\n .replace(/^.*\\//, '');\n tsImports.push(`import ${schemaName} from '${modulePath}';`);\n importedSchemaNames.push(schemaName);\n }\n }\n }\n }\n\n const lines: string[] = [\n '/**',\n ' * Auto-generated schema literal from XSD',\n ' * ',\n ' * DO NOT EDIT - Generated by ts-xsd codegen',\n comment ? ` * ${comment}` : null,\n ' */',\n '',\n // Add TypeScript imports\n ...tsImports,\n tsImports.length > 0 ? '' : null,\n // Generate schema with $imports as array of schema references\n generateSchemaLiteralWithImports(xsdContent, options, importedSchemaNames),\n '',\n `export type ${pascalCase(name)}Type = typeof ${name};`,\n '',\n ].filter((line): line is string => line !== null);\n\n return lines.join('\\n');\n}\n\n/**\n * Generate schema literal with $imports as schema references.\n */\nfunction generateSchemaLiteralWithImports(\n xsdContent: string,\n options: GenerateOptions,\n importedSchemaNames: string[],\n): string {\n const schema = parseXsd(xsdContent);\n const features = options.features ?? {};\n const exclude = new Set(options.exclude ?? []);\n\n // Transform schema\n let outputSchema: Record<string, unknown> = { ...schema };\n\n // Add $filename when enabled (uses name option)\n if (features.$filename && options.name) {\n outputSchema = { $filename: `${options.name}.xsd`, ...outputSchema };\n }\n\n // Apply transformations (features + exclude), passing imported schema names\n outputSchema = applyTransformsWithImports(\n outputSchema,\n features,\n exclude,\n importedSchemaNames,\n );\n\n return schemaToLiteral(outputSchema as Schema, options);\n}\n\n/**\n * Escape reserved words by adding underscore suffix.\n */\nfunction escapeReservedWord(name: string): string {\n return RESERVED_WORDS.has(name) ? `${name}_` : name;\n}\n\n/**\n * Convert a Schema object to a TypeScript literal string.\n */\nfunction schemaToLiteral(\n schema: Schema,\n options: GenerateOptions = {},\n): string {\n const {\n name = 'schema',\n pretty = true,\n indent = ' ',\n isolatedDeclarations = false,\n singleQuote = false,\n } = options;\n\n const safeName = escapeReservedWord(name);\n const literal = objectToLiteral(schema, pretty, indent, 0, singleQuote);\n\n // For isolatedDeclarations compatibility, use `satisfies Schema as const`\n // This makes the type explicit so TypeScript can emit declarations\n const typeAssertion = isolatedDeclarations\n ? 'satisfies Schema as const'\n : 'as const';\n\n return `export const ${safeName} = ${literal} ${typeAssertion};`;\n}\n\n/**\n * Format a string value as a single-quoted literal, unescaping JSON double quotes\n * and escaping any single quotes.\n */\nfunction toSingleQuoteLiteral(jsonStr: string): string {\n const inner = jsonStr\n .slice(1, -1)\n .replaceAll('\\\\\"', '\"')\n .replaceAll(\"'\", \"\\\\'\");\n return `'${inner}'`;\n}\n\n/**\n * Convert any value to a TypeScript literal string.\n */\nfunction objectToLiteral(\n value: unknown,\n pretty: boolean,\n indent: string,\n depth: number,\n singleQuote = false,\n): string {\n if (value === null || value === undefined) {\n return 'undefined';\n }\n\n // Handle SchemaRef - output as bare identifier (not quoted)\n if (value instanceof SchemaRef) {\n return value.name;\n }\n\n if (typeof value === 'string') {\n const json = JSON.stringify(value);\n if (singleQuote) {\n return toSingleQuoteLiteral(json);\n }\n return json;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]';\n }\n\n const items = value.map((item) =>\n objectToLiteral(item, pretty, indent, depth + 1, singleQuote),\n );\n\n if (pretty) {\n const itemIndent = indent.repeat(depth + 1);\n const closeIndent = indent.repeat(depth);\n return `[\\n${items\n .map((item) => `${itemIndent}${item}`)\n .join(',\\n')},\\n${closeIndent}]`;\n }\n\n return `[${items.join(', ')}]`;\n }\n\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n const entries = Object.entries(obj).filter(([, v]) => v !== undefined);\n\n if (entries.length === 0) {\n return '{}';\n }\n\n const props = entries.map(([key, val]) => {\n let keyStr = key;\n if (!isValidIdentifier(key)) {\n const json = JSON.stringify(key);\n keyStr = singleQuote ? toSingleQuoteLiteral(json) : json;\n }\n const valStr = objectToLiteral(\n val,\n pretty,\n indent,\n depth + 1,\n singleQuote,\n );\n return `${keyStr}: ${valStr}`;\n });\n\n if (pretty) {\n const propIndent = indent.repeat(depth + 1);\n const closeIndent = indent.repeat(depth);\n return `{\\n${props\n .map((prop) => `${propIndent}${prop}`)\n .join(',\\n')},\\n${closeIndent}}`;\n }\n\n return `{ ${props.join(', ')} }`;\n }\n\n return 'undefined';\n}\n\n/**\n * JavaScript reserved words that cannot be used as variable names.\n */\nconst RESERVED_WORDS = new Set([\n 'break',\n 'case',\n 'catch',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'else',\n 'finally',\n 'for',\n 'function',\n 'if',\n 'in',\n 'instanceof',\n 'new',\n 'return',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'while',\n 'with',\n 'class',\n 'const',\n 'enum',\n 'export',\n 'extends',\n 'import',\n 'super',\n 'implements',\n 'interface',\n 'let',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'static',\n 'yield',\n 'await',\n 'null',\n 'true',\n 'false',\n]);\n\n/**\n * Check if a string is a valid JavaScript identifier.\n */\nfunction isValidIdentifier(str: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(str) && !RESERVED_WORDS.has(str);\n}\n\n/**\n * Convert string to PascalCase.\n */\nfunction pascalCase(str: string): string {\n return str\n .replaceAll(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''))\n .replace(/^./, (s) => s.toUpperCase());\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner-C4_p2y5e.d.mts","names":[],"sources":["../src/xsd/types.ts","../src/codegen/types.ts","../src/xsd/resolve.ts","../src/codegen/runner.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner-CRhT3smd.mjs","names":[],"sources":["../src/xml/dom-utils.ts","../src/xsd/parse.ts","../src/xsd/build.ts","../src/xsd/helpers.ts","../src/xsd/traverser.ts","../src/xsd/resolve.ts","../src/xsd/loader.ts","../src/codegen/runner.ts"],"sourcesContent":["/**\n * DOM Utilities for XML parsing/building\n *\n * Shared utilities for working with xmldom elements.\n * These handle namespace-aware attribute/element access.\n * Uses xmldom's native iterators where possible.\n */\n\nimport type { Element, Node } from '@xmldom/xmldom';\n\n/**\n * Type guard to check if a Node is an Element\n */\nfunction isElement(node: Node): node is Element {\n return node.nodeType === 1; // ELEMENT_NODE\n}\n\n/**\n * Get attribute value, handling namespaced attributes\n * Tries direct attribute first, then searches by local name\n */\nexport function getAttributeValue(node: Element, name: string): string | null {\n // Try direct attribute\n if (node.hasAttribute(name)) {\n return node.getAttribute(name);\n }\n\n // Try with any namespace prefix (search by local name)\n // NamedNodeMap is not iterable in xmldom — use index-based access\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes[i];\n const localName = attr.localName || attr.name.split(':').pop();\n if (localName === name) {\n return attr.value;\n }\n }\n\n return null;\n}\n\n/**\n * Get child elements by local name (namespace-agnostic)\n */\nexport function getChildElements(parent: Element, name: string): Element[] {\n const result: Element[] = [];\n // NodeList is not iterable in xmldom — use index-based access\n for (let i = 0; i < parent.childNodes.length; i++) {\n const child = parent.childNodes[i];\n if (isElement(child)) {\n const localName = child.localName || child.tagName.split(':').pop();\n if (localName === name) {\n result.push(child);\n }\n }\n }\n return result;\n}\n\n/**\n * Get all child elements (any name)\n */\nexport function getAllChildElements(parent: Element): Element[] {\n const result: Element[] = [];\n // NodeList is not iterable in xmldom — use index-based access\n for (let i = 0; i < parent.childNodes.length; i++) {\n const child = parent.childNodes[i];\n if (isElement(child)) {\n result.push(child);\n }\n }\n return result;\n}\n\n/**\n * Get text content of an element (concatenates all text nodes)\n */\nexport function getTextContent(node: Element): string {\n let text = '';\n // NodeList is not iterable in xmldom — use index-based access\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes[i];\n if (child.nodeType === 3) {\n // TEXT_NODE\n text += child.textContent || '';\n }\n }\n return text.trim();\n}\n\n/**\n * Get local name of an element (strips namespace prefix)\n */\nexport function getLocalName(node: Element): string {\n return node.localName || node.tagName.split(':').pop() || node.tagName;\n}\n\n/**\n * Check if element has a specific local name (case-insensitive option)\n */\nexport function hasLocalName(\n node: Element,\n name: string,\n caseInsensitive = false,\n): boolean {\n const localName = getLocalName(node);\n if (caseInsensitive) {\n return localName.toLowerCase() === name.toLowerCase();\n }\n return localName === name;\n}\n","/**\n * XSD Parser - Parse XSD documents to typed Schema objects\n *\n * This parser understands XSD semantics and produces correctly typed output\n * matching the W3C XMLSchema.xsd specification.\n *\n * No intermediate JSON - direct XSD to typed objects.\n */\n\nimport { DOMParser } from '@xmldom/xmldom';\nimport {\n getLocalName,\n getAllChildElements,\n getTextContent,\n} from '../xml/dom-utils';\nimport type {\n Schema,\n Annotation,\n Documentation,\n Appinfo,\n Include,\n Import,\n Redefine,\n Override,\n TopLevelElement,\n LocalElement,\n TopLevelAttribute,\n LocalAttribute,\n TopLevelComplexType,\n LocalComplexType,\n TopLevelSimpleType,\n LocalSimpleType,\n SimpleTypeRestriction,\n List,\n Union,\n ComplexContent,\n SimpleContent,\n ComplexContentRestriction,\n ComplexContentExtension,\n SimpleContentRestriction,\n SimpleContentExtension,\n ExplicitGroup,\n All,\n NamedGroup,\n GroupRef,\n NamedAttributeGroup,\n AttributeGroupRef,\n Any,\n AnyAttribute,\n Unique,\n Key,\n Keyref,\n Selector,\n Field,\n Facet,\n Pattern,\n OpenContent,\n DefaultOpenContent,\n Assertion,\n Alternative,\n Notation,\n} from './types';\n\nimport type { Element } from '@xmldom/xmldom';\n\n/**\n * Mutable version of a type - removes readonly modifiers for building objects incrementally.\n * Used during parsing to construct typed objects before returning them as readonly.\n */\ntype Mutable<T> = { -readonly [P in keyof T]: T[P] };\n\n/**\n * Parse an XSD string to a typed Schema object\n */\nexport function parseXsd(xml: string): Schema {\n const doc = new DOMParser().parseFromString(xml, 'text/xml');\n const root = doc.documentElement;\n\n if (!root || getLocalName(root) !== 'schema') {\n throw new Error('Invalid XSD: root element must be xs:schema');\n }\n\n return parseSchema(root);\n}\n\n// =============================================================================\n// Schema (root)\n// =============================================================================\n\nfunction parseSchema(el: Element): Schema {\n const schema: Mutable<Schema> = {};\n\n // XML namespace declarations (xmlns:prefix -> URI)\n copyXmlns(el, schema);\n\n // Attributes\n copyAttr(el, schema, 'id');\n copyAttr(el, schema, 'targetNamespace');\n copyAttr(el, schema, 'version');\n copyAttr(el, schema, 'finalDefault');\n copyAttr(el, schema, 'blockDefault');\n copyAttr(el, schema, 'attributeFormDefault');\n copyAttr(el, schema, 'elementFormDefault');\n copyAttr(el, schema, 'defaultAttributes');\n copyAttr(el, schema, 'xpathDefaultNamespace');\n copyAttr(el, schema, 'xml:lang');\n\n // Child elements\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'annotation':\n pushTo(schema, 'annotation', parseAnnotation(child));\n break;\n case 'include':\n pushTo(schema, 'include', parseInclude(child));\n break;\n case 'import':\n pushTo(schema, 'import', parseImport(child));\n break;\n case 'redefine':\n pushTo(schema, 'redefine', parseRedefine(child));\n break;\n case 'override':\n pushTo(schema, 'override', parseOverride(child));\n break;\n case 'element':\n pushTo(schema, 'element', parseTopLevelElement(child));\n break;\n case 'attribute':\n pushTo(schema, 'attribute', parseTopLevelAttribute(child));\n break;\n case 'simpleType':\n pushTo(schema, 'simpleType', parseTopLevelSimpleType(child));\n break;\n case 'complexType':\n pushTo(schema, 'complexType', parseTopLevelComplexType(child));\n break;\n case 'group':\n pushTo(schema, 'group', parseNamedGroup(child));\n break;\n case 'attributeGroup':\n pushTo(schema, 'attributeGroup', parseNamedAttributeGroup(child));\n break;\n case 'notation':\n pushTo(schema, 'notation', parseNotation(child));\n break;\n case 'defaultOpenContent':\n schema.defaultOpenContent = parseDefaultOpenContent(child);\n break;\n }\n }\n\n return schema;\n}\n\n// =============================================================================\n// Annotation\n// =============================================================================\n\nfunction parseAnnotation(el: Element): Annotation {\n const result: Mutable<Annotation> = {};\n copyAttr(el, result, 'id');\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n if (name === 'documentation') {\n pushTo(result, 'documentation', parseDocumentation(child));\n } else if (name === 'appinfo') {\n pushTo(result, 'appinfo', parseAppinfo(child));\n }\n }\n\n return result;\n}\n\nfunction parseDocumentation(el: Element): Documentation {\n const result: Mutable<Documentation> = {};\n copyAttr(el, result, 'source');\n copyAttr(el, result, 'xml:lang');\n\n const text = getTextContent(el);\n if (text) {\n result._text = text;\n }\n\n return result;\n}\n\nfunction parseAppinfo(el: Element): Appinfo {\n const result: Mutable<Appinfo> = {};\n copyAttr(el, result, 'source');\n\n const text = getTextContent(el);\n if (text) {\n result._text = text;\n }\n\n return result;\n}\n\n// =============================================================================\n// Include / Import / Redefine / Override\n// =============================================================================\n\nfunction parseInclude(el: Element): Include {\n const result: Mutable<Include> = { schemaLocation: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'schemaLocation');\n parseAnnotationChild(el, result);\n return result;\n}\n\nfunction parseImport(el: Element): Import {\n const result: Mutable<Import> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'namespace');\n copyAttr(el, result, 'schemaLocation');\n parseAnnotationChild(el, result);\n return result;\n}\n\nfunction parseRedefine(el: Element): Redefine {\n const result: Mutable<Redefine> = { schemaLocation: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'schemaLocation');\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'annotation':\n pushTo(result, 'annotation', parseAnnotation(child));\n break;\n case 'simpleType':\n pushTo(result, 'simpleType', parseTopLevelSimpleType(child));\n break;\n case 'complexType':\n pushTo(result, 'complexType', parseTopLevelComplexType(child));\n break;\n case 'group':\n pushTo(result, 'group', parseNamedGroup(child));\n break;\n case 'attributeGroup':\n pushTo(result, 'attributeGroup', parseNamedAttributeGroup(child));\n break;\n }\n }\n\n return result;\n}\n\nfunction parseOverride(el: Element): Override {\n const result: Mutable<Override> = { schemaLocation: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'schemaLocation');\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'annotation':\n pushTo(result, 'annotation', parseAnnotation(child));\n break;\n case 'simpleType':\n pushTo(result, 'simpleType', parseTopLevelSimpleType(child));\n break;\n case 'complexType':\n pushTo(result, 'complexType', parseTopLevelComplexType(child));\n break;\n case 'group':\n pushTo(result, 'group', parseNamedGroup(child));\n break;\n case 'attributeGroup':\n pushTo(result, 'attributeGroup', parseNamedAttributeGroup(child));\n break;\n case 'element':\n pushTo(result, 'element', parseTopLevelElement(child));\n break;\n case 'attribute':\n pushTo(result, 'attribute', parseTopLevelAttribute(child));\n break;\n case 'notation':\n pushTo(result, 'notation', parseNotation(child));\n break;\n }\n }\n\n return result;\n}\n\n// =============================================================================\n// Element Declarations\n// =============================================================================\n\nfunction parseTopLevelElement(el: Element): TopLevelElement {\n const result: Mutable<TopLevelElement> = { name: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'type');\n copyAttr(el, result, 'substitutionGroup');\n copyAttr(el, result, 'default');\n copyAttr(el, result, 'fixed');\n copyBoolAttr(el, result, 'nillable');\n copyBoolAttr(el, result, 'abstract');\n copyAttr(el, result, 'final');\n copyAttr(el, result, 'block');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'simpleType':\n result.simpleType = parseLocalSimpleType(child);\n break;\n case 'complexType':\n result.complexType = parseLocalComplexType(child);\n break;\n case 'unique':\n pushTo(result, 'unique', parseUnique(child));\n break;\n case 'key':\n pushTo(result, 'key', parseKey(child));\n break;\n case 'keyref':\n pushTo(result, 'keyref', parseKeyref(child));\n break;\n case 'alternative':\n pushTo(result, 'alternative', parseAlternative(child));\n break;\n }\n }\n\n return result;\n}\n\nfunction parseLocalElement(el: Element): LocalElement {\n const result: Mutable<LocalElement> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'ref');\n copyAttr(el, result, 'type');\n copyAttr(el, result, 'minOccurs');\n copyAttr(el, result, 'maxOccurs');\n copyAttr(el, result, 'default');\n copyAttr(el, result, 'fixed');\n copyBoolAttr(el, result, 'nillable');\n copyAttr(el, result, 'block');\n copyAttr(el, result, 'form');\n copyAttr(el, result, 'targetNamespace');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'simpleType':\n result.simpleType = parseLocalSimpleType(child);\n break;\n case 'complexType':\n result.complexType = parseLocalComplexType(child);\n break;\n case 'unique':\n pushTo(result, 'unique', parseUnique(child));\n break;\n case 'key':\n pushTo(result, 'key', parseKey(child));\n break;\n case 'keyref':\n pushTo(result, 'keyref', parseKeyref(child));\n break;\n case 'alternative':\n pushTo(result, 'alternative', parseAlternative(child));\n break;\n }\n }\n\n return result;\n}\n\n// =============================================================================\n// Attribute Declarations\n// =============================================================================\n\nfunction parseTopLevelAttribute(el: Element): TopLevelAttribute {\n const result: Mutable<TopLevelAttribute> = { name: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'type');\n copyAttr(el, result, 'default');\n copyAttr(el, result, 'fixed');\n copyBoolAttr(el, result, 'inheritable');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n if (getLocalName(child) === 'simpleType') {\n result.simpleType = parseLocalSimpleType(child);\n }\n }\n\n return result;\n}\n\nfunction parseLocalAttribute(el: Element): LocalAttribute {\n const result: Mutable<LocalAttribute> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'ref');\n copyAttr(el, result, 'type');\n copyAttr(el, result, 'use');\n copyAttr(el, result, 'default');\n copyAttr(el, result, 'fixed');\n copyAttr(el, result, 'form');\n copyAttr(el, result, 'targetNamespace');\n copyBoolAttr(el, result, 'inheritable');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n if (getLocalName(child) === 'simpleType') {\n result.simpleType = parseLocalSimpleType(child);\n }\n }\n\n return result;\n}\n\n// =============================================================================\n// Complex Types\n// =============================================================================\n\nfunction parseTopLevelComplexType(el: Element): TopLevelComplexType {\n const result: Mutable<TopLevelComplexType> = { name: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyBoolAttr(el, result, 'mixed');\n copyBoolAttr(el, result, 'abstract');\n copyAttr(el, result, 'final');\n copyAttr(el, result, 'block');\n copyBoolAttr(el, result, 'defaultAttributesApply');\n\n parseAnnotationChild(el, result);\n parseComplexTypeContent(el, result);\n\n return result;\n}\n\nfunction parseLocalComplexType(el: Element): LocalComplexType {\n const result: Mutable<LocalComplexType> = {};\n copyAttr(el, result, 'id');\n copyBoolAttr(el, result, 'mixed');\n\n parseAnnotationChild(el, result);\n parseComplexTypeContent(el, result);\n\n return result;\n}\n\nfunction parseComplexTypeContent(\n el: Element,\n result: Mutable<TopLevelComplexType> | Mutable<LocalComplexType>,\n): void {\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'simpleContent':\n result.simpleContent = parseSimpleContent(child);\n break;\n case 'complexContent':\n result.complexContent = parseComplexContent(child);\n break;\n case 'openContent':\n result.openContent = parseOpenContent(child);\n break;\n case 'group':\n result.group = parseGroupRef(child);\n break;\n case 'all':\n result.all = parseAll(child);\n break;\n case 'choice':\n result.choice = parseExplicitGroup(child);\n break;\n case 'sequence':\n result.sequence = parseExplicitGroup(child);\n break;\n case 'attribute':\n pushTo(result, 'attribute', parseLocalAttribute(child));\n break;\n case 'attributeGroup':\n pushTo(result, 'attributeGroup', parseAttributeGroupRef(child));\n break;\n case 'anyAttribute':\n result.anyAttribute = parseAnyAttribute(child);\n break;\n case 'assert':\n pushTo(result, 'assert', parseAssertion(child));\n break;\n }\n }\n}\n\n// =============================================================================\n// Simple Types\n// =============================================================================\n\nfunction parseTopLevelSimpleType(el: Element): TopLevelSimpleType {\n const result: Mutable<TopLevelSimpleType> = { name: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'final');\n\n parseAnnotationChild(el, result);\n parseSimpleTypeContent(el, result);\n\n return result;\n}\n\nfunction parseLocalSimpleType(el: Element): LocalSimpleType {\n const result: Mutable<LocalSimpleType> = {};\n copyAttr(el, result, 'id');\n\n parseAnnotationChild(el, result);\n parseSimpleTypeContent(el, result);\n\n return result;\n}\n\nfunction parseSimpleTypeContent(\n el: Element,\n result: Mutable<TopLevelSimpleType> | Mutable<LocalSimpleType>,\n): void {\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'restriction':\n result.restriction = parseSimpleTypeRestriction(child);\n break;\n case 'list':\n result.list = parseList(child);\n break;\n case 'union':\n result.union = parseUnion(child);\n break;\n }\n }\n}\n\nfunction parseSimpleTypeRestriction(el: Element): SimpleTypeRestriction {\n const result: Mutable<SimpleTypeRestriction> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'base');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'simpleType':\n result.simpleType = parseLocalSimpleType(child);\n break;\n case 'minExclusive':\n case 'minInclusive':\n case 'maxExclusive':\n case 'maxInclusive':\n case 'totalDigits':\n case 'fractionDigits':\n case 'length':\n case 'minLength':\n case 'maxLength':\n case 'enumeration':\n case 'whiteSpace':\n case 'explicitTimezone':\n pushTo(result, name, parseFacet(child));\n break;\n case 'pattern':\n pushTo(result, 'pattern', parsePattern(child));\n break;\n case 'assertion':\n pushTo(result, 'assertion', parseAssertion(child));\n break;\n }\n }\n\n return result;\n}\n\nfunction parseList(el: Element): List {\n const result: Mutable<List> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'itemType');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n if (getLocalName(child) === 'simpleType') {\n result.simpleType = parseLocalSimpleType(child);\n }\n }\n\n return result;\n}\n\nfunction parseUnion(el: Element): Union {\n const result: Mutable<Union> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'memberTypes');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n if (getLocalName(child) === 'simpleType') {\n pushTo(result, 'simpleType', parseLocalSimpleType(child));\n }\n }\n\n return result;\n}\n\nfunction parseFacet(el: Element): Facet {\n const result: Mutable<Facet> = { value: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'value');\n copyBoolAttr(el, result, 'fixed');\n parseAnnotationChild(el, result);\n return result;\n}\n\nfunction parsePattern(el: Element): Pattern {\n const result: Mutable<Pattern> = { value: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'value');\n parseAnnotationChild(el, result);\n return result;\n}\n\n// =============================================================================\n// Complex Content / Simple Content\n// =============================================================================\n\nfunction parseComplexContent(el: Element): ComplexContent {\n const result: Mutable<ComplexContent> = {};\n copyAttr(el, result, 'id');\n copyBoolAttr(el, result, 'mixed');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n if (name === 'restriction') {\n result.restriction = parseComplexContentRestriction(child);\n } else if (name === 'extension') {\n result.extension = parseComplexContentExtension(child);\n }\n }\n\n return result;\n}\n\nfunction parseSimpleContent(el: Element): SimpleContent {\n const result: Mutable<SimpleContent> = {};\n copyAttr(el, result, 'id');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n if (name === 'restriction') {\n result.restriction = parseSimpleContentRestriction(child);\n } else if (name === 'extension') {\n result.extension = parseSimpleContentExtension(child);\n }\n }\n\n return result;\n}\n\nfunction parseComplexContentRestriction(\n el: Element,\n): ComplexContentRestriction {\n const result: Mutable<ComplexContentRestriction> = { base: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'base');\n\n parseAnnotationChild(el, result);\n parseComplexTypeContent(el, result);\n\n return result;\n}\n\nfunction parseComplexContentExtension(el: Element): ComplexContentExtension {\n const result: Mutable<ComplexContentExtension> = { base: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'base');\n\n parseAnnotationChild(el, result);\n parseComplexTypeContent(el, result);\n\n return result;\n}\n\nfunction parseSimpleContentRestriction(el: Element): SimpleContentRestriction {\n const result: Mutable<SimpleContentRestriction> = { base: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'base');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'simpleType':\n result.simpleType = parseLocalSimpleType(child);\n break;\n case 'minExclusive':\n case 'minInclusive':\n case 'maxExclusive':\n case 'maxInclusive':\n case 'totalDigits':\n case 'fractionDigits':\n case 'length':\n case 'minLength':\n case 'maxLength':\n case 'enumeration':\n case 'whiteSpace':\n case 'explicitTimezone':\n pushTo(result, name, parseFacet(child));\n break;\n case 'pattern':\n pushTo(result, 'pattern', parsePattern(child));\n break;\n case 'assertion':\n pushTo(result, 'assertion', parseAssertion(child));\n break;\n case 'attribute':\n pushTo(result, 'attribute', parseLocalAttribute(child));\n break;\n case 'attributeGroup':\n pushTo(result, 'attributeGroup', parseAttributeGroupRef(child));\n break;\n case 'anyAttribute':\n result.anyAttribute = parseAnyAttribute(child);\n break;\n case 'assert':\n pushTo(result, 'assert', parseAssertion(child));\n break;\n }\n }\n\n return result;\n}\n\nfunction parseSimpleContentExtension(el: Element): SimpleContentExtension {\n const result: Mutable<SimpleContentExtension> = { base: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'base');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'attribute':\n pushTo(result, 'attribute', parseLocalAttribute(child));\n break;\n case 'attributeGroup':\n pushTo(result, 'attributeGroup', parseAttributeGroupRef(child));\n break;\n case 'anyAttribute':\n result.anyAttribute = parseAnyAttribute(child);\n break;\n case 'assert':\n pushTo(result, 'assert', parseAssertion(child));\n break;\n }\n }\n\n return result;\n}\n\n// =============================================================================\n// Model Groups\n// =============================================================================\n\nfunction parseExplicitGroup(el: Element): ExplicitGroup {\n const result: Mutable<ExplicitGroup> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'minOccurs');\n copyAttr(el, result, 'maxOccurs');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'element':\n pushTo(result, 'element', parseLocalElement(child));\n break;\n case 'group':\n pushTo(result, 'group', parseGroupRef(child));\n break;\n case 'choice':\n pushTo(result, 'choice', parseExplicitGroup(child));\n break;\n case 'sequence':\n pushTo(result, 'sequence', parseExplicitGroup(child));\n break;\n case 'any':\n pushTo(result, 'any', parseAny(child));\n break;\n }\n }\n\n return result;\n}\n\nfunction parseAll(el: Element): All {\n const result: Mutable<All> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'minOccurs');\n copyAttr(el, result, 'maxOccurs');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'element':\n pushTo(result, 'element', parseLocalElement(child));\n break;\n case 'any':\n pushTo(result, 'any', parseAny(child));\n break;\n case 'group':\n pushTo(result, 'group', parseGroupRef(child));\n break;\n }\n }\n\n return result;\n}\n\n// =============================================================================\n// Groups and Attribute Groups\n// =============================================================================\n\nfunction parseNamedGroup(el: Element): NamedGroup {\n const result: Mutable<NamedGroup> = { name: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'all':\n result.all = parseAll(child);\n break;\n case 'choice':\n result.choice = parseExplicitGroup(child);\n break;\n case 'sequence':\n result.sequence = parseExplicitGroup(child);\n break;\n }\n }\n\n return result;\n}\n\nfunction parseGroupRef(el: Element): GroupRef {\n const result: Mutable<GroupRef> = { ref: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'ref');\n copyAttr(el, result, 'minOccurs');\n copyAttr(el, result, 'maxOccurs');\n parseAnnotationChild(el, result);\n return result;\n}\n\nfunction parseNamedAttributeGroup(el: Element): NamedAttributeGroup {\n const result: Mutable<NamedAttributeGroup> = { name: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n switch (name) {\n case 'attribute':\n pushTo(result, 'attribute', parseLocalAttribute(child));\n break;\n case 'attributeGroup':\n pushTo(result, 'attributeGroup', parseAttributeGroupRef(child));\n break;\n case 'anyAttribute':\n result.anyAttribute = parseAnyAttribute(child);\n break;\n }\n }\n\n return result;\n}\n\nfunction parseAttributeGroupRef(el: Element): AttributeGroupRef {\n const result: Mutable<AttributeGroupRef> = { ref: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'ref');\n parseAnnotationChild(el, result);\n return result;\n}\n\n// =============================================================================\n// Wildcards\n// =============================================================================\n\nfunction parseAny(el: Element): Any {\n const result: Mutable<Any> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'minOccurs');\n copyAttr(el, result, 'maxOccurs');\n copyAttr(el, result, 'namespace');\n copyAttr(el, result, 'processContents');\n copyAttr(el, result, 'notNamespace');\n copyAttr(el, result, 'notQName');\n parseAnnotationChild(el, result);\n return result;\n}\n\nfunction parseAnyAttribute(el: Element): AnyAttribute {\n const result: Mutable<AnyAttribute> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'namespace');\n copyAttr(el, result, 'processContents');\n copyAttr(el, result, 'notNamespace');\n copyAttr(el, result, 'notQName');\n parseAnnotationChild(el, result);\n return result;\n}\n\n// =============================================================================\n// Identity Constraints\n// =============================================================================\n\nfunction parseUnique(el: Element): Unique {\n const result: Mutable<Unique> = { name: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'ref');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n if (name === 'selector') {\n result.selector = parseSelector(child);\n } else if (name === 'field') {\n pushTo(result, 'field', parseField(child));\n }\n }\n\n return result;\n}\n\nfunction parseKey(el: Element): Key {\n const result: Mutable<Key> = { name: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'ref');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n if (name === 'selector') {\n result.selector = parseSelector(child);\n } else if (name === 'field') {\n pushTo(result, 'field', parseField(child));\n }\n }\n\n return result;\n}\n\nfunction parseKeyref(el: Element): Keyref {\n const result: Mutable<Keyref> = { name: '', refer: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'ref');\n copyAttr(el, result, 'refer');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n if (name === 'selector') {\n result.selector = parseSelector(child);\n } else if (name === 'field') {\n pushTo(result, 'field', parseField(child));\n }\n }\n\n return result;\n}\n\nfunction parseSelector(el: Element): Selector {\n const result: Mutable<Selector> = { xpath: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'xpath');\n copyAttr(el, result, 'xpathDefaultNamespace');\n parseAnnotationChild(el, result);\n return result;\n}\n\nfunction parseField(el: Element): Field {\n const result: Mutable<Field> = { xpath: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'xpath');\n copyAttr(el, result, 'xpathDefaultNamespace');\n parseAnnotationChild(el, result);\n return result;\n}\n\n// =============================================================================\n// XSD 1.1 Features\n// =============================================================================\n\nfunction parseOpenContent(el: Element): OpenContent {\n const result: Mutable<OpenContent> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'mode');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n if (getLocalName(child) === 'any') {\n result.any = parseAny(child);\n }\n }\n\n return result;\n}\n\nfunction parseDefaultOpenContent(el: Element): DefaultOpenContent {\n const result: Mutable<DefaultOpenContent> = { any: {} };\n copyAttr(el, result, 'id');\n copyBoolAttr(el, result, 'appliesToEmpty');\n copyAttr(el, result, 'mode');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n if (getLocalName(child) === 'any') {\n result.any = parseAny(child);\n }\n }\n\n return result;\n}\n\nfunction parseAssertion(el: Element): Assertion {\n const result: Mutable<Assertion> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'test');\n copyAttr(el, result, 'xpathDefaultNamespace');\n parseAnnotationChild(el, result);\n return result;\n}\n\nfunction parseAlternative(el: Element): Alternative {\n const result: Mutable<Alternative> = {};\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'test');\n copyAttr(el, result, 'type');\n copyAttr(el, result, 'xpathDefaultNamespace');\n\n parseAnnotationChild(el, result);\n\n for (const child of getAllChildElements(el)) {\n const name = getLocalName(child);\n if (name === 'simpleType') {\n result.simpleType = parseLocalSimpleType(child);\n } else if (name === 'complexType') {\n result.complexType = parseLocalComplexType(child);\n }\n }\n\n return result;\n}\n\nfunction parseNotation(el: Element): Notation {\n const result: Mutable<Notation> = { name: '', public: '' };\n copyAttr(el, result, 'id');\n copyAttr(el, result, 'name');\n copyAttr(el, result, 'public');\n copyAttr(el, result, 'system');\n parseAnnotationChild(el, result);\n return result;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nfunction copyAttr(\n el: Element,\n target: Record<string, unknown>,\n name: string,\n): void {\n if (el.hasAttribute(name)) {\n const value = el.getAttribute(name);\n if (value !== null) {\n target[name] = value;\n }\n }\n}\n\nfunction copyBoolAttr(\n el: Element,\n target: Record<string, unknown>,\n name: string,\n): void {\n if (el.hasAttribute(name)) {\n const value = el.getAttribute(name);\n if (value !== null) {\n target[name] = value === 'true';\n }\n }\n}\n\nfunction pushTo(\n target: Record<string, unknown>,\n name: string,\n value: unknown,\n): void {\n if (!target[name]) {\n target[name] = [];\n }\n (target[name] as unknown[]).push(value);\n}\n\nfunction parseAnnotationChild(\n el: Element,\n result: { annotation?: Annotation },\n): void {\n for (const child of getAllChildElements(el)) {\n if (getLocalName(child) === 'annotation') {\n result.annotation = parseAnnotation(child);\n break; // Only one annotation per element\n }\n }\n}\n\n/**\n * Extract xmlns declarations from an element's attributes.\n * Returns undefined if no xmlns declarations found.\n *\n * @example\n * For <xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:tns=\"http://example.com\">\n * Returns: { xs: \"http://www.w3.org/2001/XMLSchema\", tns: \"http://example.com\" }\n *\n * For <xs:element xmlns=\"http://default.com\">\n * Returns: { \"\": \"http://default.com\" }\n */\nfunction extractXmlns(el: Element): Record<string, string> | undefined {\n const xmlns: Record<string, string> = {};\n let hasXmlns = false;\n\n // NamedNodeMap is not iterable in xmldom — use index-based access\n for (let i = 0; i < el.attributes.length; i++) {\n const attr = el.attributes[i];\n const name = attr.name;\n const value = attr.value;\n\n if (name === 'xmlns') {\n // Default namespace (no prefix)\n xmlns[''] = value;\n hasXmlns = true;\n } else if (name.startsWith('xmlns:')) {\n // Prefixed namespace\n const prefix = name.substring(6); // Remove 'xmlns:'\n xmlns[prefix] = value;\n hasXmlns = true;\n }\n }\n\n return hasXmlns ? xmlns : undefined;\n}\n\n/**\n * Copy xmlns declarations to target if present\n */\nfunction copyXmlns(\n el: Element,\n target: { $xmlns?: Record<string, string> },\n): void {\n const xmlns = extractXmlns(el);\n if (xmlns) {\n target.$xmlns = xmlns;\n }\n}\n\nexport default parseXsd;\n","/**\n * XSD Builder - Build XSD documents from typed Schema objects\n *\n * This builder produces valid XSD XML from Schema objects,\n * completing the roundtrip: XSD → Schema → XSD\n */\n\nimport type {\n Schema,\n Annotation,\n Documentation,\n Appinfo,\n Include,\n Import,\n Redefine,\n Override,\n TopLevelElement,\n LocalElement,\n TopLevelAttribute,\n LocalAttribute,\n TopLevelComplexType,\n LocalComplexType,\n TopLevelSimpleType,\n LocalSimpleType,\n SimpleTypeRestriction,\n List,\n Union,\n ComplexContent,\n SimpleContent,\n ComplexContentRestriction,\n ComplexContentExtension,\n SimpleContentRestriction,\n SimpleContentExtension,\n ExplicitGroup,\n All,\n NamedGroup,\n GroupRef,\n NamedAttributeGroup,\n AttributeGroupRef,\n Any,\n AnyAttribute,\n Unique,\n Key,\n Keyref,\n Selector,\n Field,\n Facet,\n Pattern,\n OpenContent,\n DefaultOpenContent,\n Assertion,\n Alternative,\n Notation,\n} from './types';\n\nexport interface BuildOptions {\n /** XML namespace prefix for XSD elements (default: 'xs') */\n prefix?: string;\n /** Pretty print with indentation (default: true) */\n pretty?: boolean;\n /** Indentation string (default: ' ') */\n indent?: string;\n}\n\n/**\n * Build an XSD string from a typed Schema object\n */\nexport function buildXsd(schema: Schema, options: BuildOptions = {}): string {\n const prefix = options.prefix ?? 'xs';\n const pretty = options.pretty ?? true;\n const indentStr = options.indent ?? ' ';\n\n const ctx: BuildContext = {\n prefix,\n pretty,\n indent: indentStr,\n level: 0,\n };\n\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\"?>');\n lines.push(buildSchema(schema, ctx));\n\n return lines.join(pretty ? '\\n' : '');\n}\n\ninterface BuildContext {\n prefix: string;\n pretty: boolean;\n indent: string;\n level: number;\n}\n\n// =============================================================================\n// Schema (root)\n// =============================================================================\n\nfunction buildSchema(schema: Schema, ctx: BuildContext): string {\n const attrs: string[] = [];\n\n // XML namespace declarations (only if present in schema)\n if (schema.$xmlns) {\n for (const [prefix, uri] of Object.entries(schema.$xmlns)) {\n if (prefix === '') {\n attrs.push(`xmlns=\"${uri}\"`);\n } else {\n attrs.push(`xmlns:${prefix}=\"${uri}\"`);\n }\n }\n }\n\n // Schema attributes\n addAttr(attrs, 'id', schema.id);\n addAttr(attrs, 'targetNamespace', schema.targetNamespace);\n addAttr(attrs, 'version', schema.version);\n addAttr(attrs, 'finalDefault', schema.finalDefault);\n addAttr(attrs, 'blockDefault', schema.blockDefault);\n addAttr(attrs, 'attributeFormDefault', schema.attributeFormDefault);\n addAttr(attrs, 'elementFormDefault', schema.elementFormDefault);\n addAttr(attrs, 'defaultAttributes', schema.defaultAttributes);\n addAttr(attrs, 'xpathDefaultNamespace', schema.xpathDefaultNamespace);\n addAttr(attrs, 'xml:lang', schema['xml:lang']);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n // Annotations first\n if (schema.annotation) {\n for (const ann of schema.annotation) {\n children.push(buildAnnotation(ann, childCtx));\n }\n }\n\n // Imports/includes\n if (schema.include) {\n for (const inc of schema.include) {\n children.push(buildInclude(inc, childCtx));\n }\n }\n if (schema.import) {\n for (const imp of schema.import) {\n children.push(buildImport(imp, childCtx));\n }\n }\n if (schema.redefine) {\n for (const red of schema.redefine) {\n children.push(buildRedefine(red, childCtx));\n }\n }\n if (schema.override) {\n for (const ovr of schema.override) {\n children.push(buildOverride(ovr, childCtx));\n }\n }\n\n // Default open content\n if (schema.defaultOpenContent) {\n children.push(buildDefaultOpenContent(schema.defaultOpenContent, childCtx));\n }\n\n // Top-level declarations\n if (schema.simpleType && Array.isArray(schema.simpleType)) {\n for (const st of schema.simpleType) {\n children.push(buildTopLevelSimpleType(st, childCtx));\n }\n }\n if (schema.complexType && Array.isArray(schema.complexType)) {\n for (const ct of schema.complexType) {\n children.push(buildTopLevelComplexType(ct, childCtx));\n }\n }\n if (schema.group) {\n for (const grp of schema.group) {\n children.push(buildNamedGroup(grp, childCtx));\n }\n }\n if (schema.attributeGroup) {\n for (const ag of schema.attributeGroup) {\n children.push(buildNamedAttributeGroup(ag, childCtx));\n }\n }\n if (schema.element) {\n for (const el of schema.element) {\n children.push(buildTopLevelElement(el, childCtx));\n }\n }\n if (schema.attribute) {\n for (const attr of schema.attribute) {\n children.push(buildTopLevelAttribute(attr, childCtx));\n }\n }\n if (schema.notation) {\n for (const not of schema.notation) {\n children.push(buildNotation(not, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:schema`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Annotation\n// =============================================================================\n\nfunction buildAnnotation(ann: Annotation, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', ann.id);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (ann.appinfo) {\n for (const ai of ann.appinfo) {\n children.push(buildAppinfo(ai, childCtx));\n }\n }\n if (ann.documentation) {\n for (const doc of ann.documentation) {\n children.push(buildDocumentation(doc, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:annotation`, attrs, children, ctx);\n}\n\nfunction buildDocumentation(doc: Documentation, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'source', doc.source);\n addAttr(attrs, 'xml:lang', doc['xml:lang']);\n\n if (doc._text) {\n return buildElementWithText(\n `${ctx.prefix}:documentation`,\n attrs,\n doc._text,\n ctx,\n );\n }\n return buildElement(`${ctx.prefix}:documentation`, attrs, [], ctx);\n}\n\nfunction buildAppinfo(ai: Appinfo, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'source', ai.source);\n\n if (ai._text) {\n return buildElementWithText(`${ctx.prefix}:appinfo`, attrs, ai._text, ctx);\n }\n return buildElement(`${ctx.prefix}:appinfo`, attrs, [], ctx);\n}\n\n// =============================================================================\n// Include / Import / Redefine / Override\n// =============================================================================\n\nfunction buildInclude(inc: Include, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', inc.id);\n addAttr(attrs, 'schemaLocation', inc.schemaLocation);\n\n const children: string[] = [];\n if (inc.annotation) {\n children.push(\n buildAnnotation(inc.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:include`, attrs, children, ctx);\n}\n\nfunction buildImport(imp: Import, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', imp.id);\n addAttr(attrs, 'namespace', imp.namespace);\n addAttr(attrs, 'schemaLocation', imp.schemaLocation);\n\n const children: string[] = [];\n if (imp.annotation) {\n children.push(\n buildAnnotation(imp.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:import`, attrs, children, ctx);\n}\n\nfunction buildRedefine(red: Redefine, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', red.id);\n addAttr(attrs, 'schemaLocation', red.schemaLocation);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (red.annotation) {\n for (const ann of red.annotation) {\n children.push(buildAnnotation(ann, childCtx));\n }\n }\n if (red.simpleType) {\n for (const st of red.simpleType) {\n children.push(buildTopLevelSimpleType(st, childCtx));\n }\n }\n if (red.complexType) {\n for (const ct of red.complexType) {\n children.push(buildTopLevelComplexType(ct, childCtx));\n }\n }\n if (red.group) {\n for (const grp of red.group) {\n children.push(buildNamedGroup(grp, childCtx));\n }\n }\n if (red.attributeGroup) {\n for (const ag of red.attributeGroup) {\n children.push(buildNamedAttributeGroup(ag, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:redefine`, attrs, children, ctx);\n}\n\nfunction buildOverride(ovr: Override, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', ovr.id);\n addAttr(attrs, 'schemaLocation', ovr.schemaLocation);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (ovr.annotation) {\n for (const ann of ovr.annotation) {\n children.push(buildAnnotation(ann, childCtx));\n }\n }\n if (ovr.simpleType) {\n for (const st of ovr.simpleType) {\n children.push(buildTopLevelSimpleType(st, childCtx));\n }\n }\n if (ovr.complexType) {\n for (const ct of ovr.complexType) {\n children.push(buildTopLevelComplexType(ct, childCtx));\n }\n }\n if (ovr.group) {\n for (const grp of ovr.group) {\n children.push(buildNamedGroup(grp, childCtx));\n }\n }\n if (ovr.attributeGroup) {\n for (const ag of ovr.attributeGroup) {\n children.push(buildNamedAttributeGroup(ag, childCtx));\n }\n }\n if (ovr.element) {\n for (const el of ovr.element) {\n children.push(buildTopLevelElement(el, childCtx));\n }\n }\n if (ovr.attribute) {\n for (const attr of ovr.attribute) {\n children.push(buildTopLevelAttribute(attr, childCtx));\n }\n }\n if (ovr.notation) {\n for (const not of ovr.notation) {\n children.push(buildNotation(not, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:override`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Element Declarations\n// =============================================================================\n\nfunction buildTopLevelElement(el: TopLevelElement, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', el.id);\n addAttr(attrs, 'name', el.name);\n addAttr(attrs, 'type', el.type);\n addAttr(attrs, 'substitutionGroup', el.substitutionGroup);\n addAttr(attrs, 'default', el.default);\n addAttr(attrs, 'fixed', el.fixed);\n addBoolAttr(attrs, 'nillable', el.nillable);\n addBoolAttr(attrs, 'abstract', el.abstract);\n addAttr(attrs, 'final', el.final);\n addAttr(attrs, 'block', el.block);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (el.annotation) {\n children.push(buildAnnotation(el.annotation, childCtx));\n }\n if (el.simpleType) {\n children.push(buildLocalSimpleType(el.simpleType, childCtx));\n }\n if (el.complexType) {\n children.push(buildLocalComplexType(el.complexType, childCtx));\n }\n if (el.alternative) {\n for (const alt of el.alternative) {\n children.push(buildAlternative(alt, childCtx));\n }\n }\n if (el.unique) {\n for (const u of el.unique) {\n children.push(buildUnique(u, childCtx));\n }\n }\n if (el.key) {\n for (const k of el.key) {\n children.push(buildKey(k, childCtx));\n }\n }\n if (el.keyref) {\n for (const kr of el.keyref) {\n children.push(buildKeyref(kr, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:element`, attrs, children, ctx);\n}\n\nfunction buildLocalElement(el: LocalElement, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', el.id);\n addAttr(attrs, 'name', el.name);\n addAttr(attrs, 'ref', el.ref);\n addAttr(attrs, 'type', el.type);\n addOccursAttr(attrs, 'minOccurs', el.minOccurs);\n addOccursAttr(attrs, 'maxOccurs', el.maxOccurs);\n addAttr(attrs, 'default', el.default);\n addAttr(attrs, 'fixed', el.fixed);\n addBoolAttr(attrs, 'nillable', el.nillable);\n addAttr(attrs, 'block', el.block);\n addAttr(attrs, 'form', el.form);\n addAttr(attrs, 'targetNamespace', el.targetNamespace);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (el.annotation) {\n children.push(buildAnnotation(el.annotation, childCtx));\n }\n if (el.simpleType) {\n children.push(buildLocalSimpleType(el.simpleType, childCtx));\n }\n if (el.complexType) {\n children.push(buildLocalComplexType(el.complexType, childCtx));\n }\n if (el.alternative) {\n for (const alt of el.alternative) {\n children.push(buildAlternative(alt, childCtx));\n }\n }\n if (el.unique) {\n for (const u of el.unique) {\n children.push(buildUnique(u, childCtx));\n }\n }\n if (el.key) {\n for (const k of el.key) {\n children.push(buildKey(k, childCtx));\n }\n }\n if (el.keyref) {\n for (const kr of el.keyref) {\n children.push(buildKeyref(kr, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:element`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Attribute Declarations\n// =============================================================================\n\nfunction buildTopLevelAttribute(\n attr: TopLevelAttribute,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', attr.id);\n addAttr(attrs, 'name', attr.name);\n addAttr(attrs, 'type', attr.type);\n addAttr(attrs, 'default', attr.default);\n addAttr(attrs, 'fixed', attr.fixed);\n addBoolAttr(attrs, 'inheritable', attr.inheritable);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (attr.annotation) {\n children.push(buildAnnotation(attr.annotation, childCtx));\n }\n if (attr.simpleType) {\n children.push(buildLocalSimpleType(attr.simpleType, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:attribute`, attrs, children, ctx);\n}\n\nfunction buildLocalAttribute(attr: LocalAttribute, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', attr.id);\n addAttr(attrs, 'name', attr.name);\n addAttr(attrs, 'ref', attr.ref);\n addAttr(attrs, 'type', attr.type);\n addAttr(attrs, 'use', attr.use);\n addAttr(attrs, 'default', attr.default);\n addAttr(attrs, 'fixed', attr.fixed);\n addAttr(attrs, 'form', attr.form);\n addAttr(attrs, 'targetNamespace', attr.targetNamespace);\n addBoolAttr(attrs, 'inheritable', attr.inheritable);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (attr.annotation) {\n children.push(buildAnnotation(attr.annotation, childCtx));\n }\n if (attr.simpleType) {\n children.push(buildLocalSimpleType(attr.simpleType, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:attribute`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Complex Types\n// =============================================================================\n\nfunction buildTopLevelComplexType(\n ct: TopLevelComplexType,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', ct.id);\n addAttr(attrs, 'name', ct.name);\n addBoolAttr(attrs, 'mixed', ct.mixed);\n addBoolAttr(attrs, 'abstract', ct.abstract);\n addAttr(attrs, 'final', ct.final);\n addAttr(attrs, 'block', ct.block);\n addBoolAttr(attrs, 'defaultAttributesApply', ct.defaultAttributesApply);\n\n return buildComplexTypeContent(ct, attrs, ctx);\n}\n\nfunction buildLocalComplexType(\n ct: LocalComplexType,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', ct.id);\n addBoolAttr(attrs, 'mixed', ct.mixed);\n\n return buildComplexTypeContent(ct, attrs, ctx);\n}\n\nfunction buildComplexTypeContent(\n ct: TopLevelComplexType | LocalComplexType,\n attrs: string[],\n ctx: BuildContext,\n): string {\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (ct.annotation) {\n children.push(buildAnnotation(ct.annotation, childCtx));\n }\n\n // Content model (choice)\n if (ct.simpleContent) {\n children.push(buildSimpleContent(ct.simpleContent, childCtx));\n } else if (ct.complexContent) {\n children.push(buildComplexContent(ct.complexContent, childCtx));\n } else {\n // Short form\n if (ct.openContent) {\n children.push(buildOpenContent(ct.openContent, childCtx));\n }\n if (ct.group) {\n children.push(buildGroupRef(ct.group, childCtx));\n }\n if (ct.all) {\n children.push(buildAll(ct.all, childCtx));\n }\n if (ct.choice) {\n children.push(buildExplicitGroup(ct.choice, 'choice', childCtx));\n }\n if (ct.sequence) {\n children.push(buildExplicitGroup(ct.sequence, 'sequence', childCtx));\n }\n if (ct.attribute) {\n for (const attr of ct.attribute) {\n children.push(buildLocalAttribute(attr, childCtx));\n }\n }\n if (ct.attributeGroup) {\n for (const ag of ct.attributeGroup) {\n children.push(buildAttributeGroupRef(ag, childCtx));\n }\n }\n if (ct.anyAttribute) {\n children.push(buildAnyAttribute(ct.anyAttribute, childCtx));\n }\n if (ct.assert) {\n for (const a of ct.assert) {\n children.push(buildAssertion(a, childCtx));\n }\n }\n }\n\n return buildElement(`${ctx.prefix}:complexType`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Simple Types\n// =============================================================================\n\nfunction buildTopLevelSimpleType(\n st: TopLevelSimpleType,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', st.id);\n addAttr(attrs, 'name', st.name);\n addAttr(attrs, 'final', st.final);\n\n return buildSimpleTypeContent(st, attrs, ctx);\n}\n\nfunction buildLocalSimpleType(st: LocalSimpleType, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', st.id);\n\n return buildSimpleTypeContent(st, attrs, ctx);\n}\n\nfunction buildSimpleTypeContent(\n st: TopLevelSimpleType | LocalSimpleType,\n attrs: string[],\n ctx: BuildContext,\n): string {\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (st.annotation) {\n children.push(buildAnnotation(st.annotation, childCtx));\n }\n\n if (st.restriction) {\n children.push(buildSimpleTypeRestriction(st.restriction, childCtx));\n } else if (st.list) {\n children.push(buildList(st.list, childCtx));\n } else if (st.union) {\n children.push(buildUnion(st.union, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:simpleType`, attrs, children, ctx);\n}\n\nfunction buildSimpleTypeRestriction(\n r: SimpleTypeRestriction,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', r.id);\n addAttr(attrs, 'base', r.base);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (r.annotation) {\n children.push(buildAnnotation(r.annotation, childCtx));\n }\n if (r.simpleType) {\n children.push(buildLocalSimpleType(r.simpleType, childCtx));\n }\n\n // Facets\n buildFacets(r, children, childCtx);\n\n return buildElement(`${ctx.prefix}:restriction`, attrs, children, ctx);\n}\n\nfunction buildFacets(\n r: SimpleTypeRestriction | SimpleContentRestriction,\n children: string[],\n ctx: BuildContext,\n): void {\n if (r.minExclusive) {\n for (const f of r.minExclusive) {\n children.push(buildFacet(f, 'minExclusive', ctx));\n }\n }\n if (r.minInclusive) {\n for (const f of r.minInclusive) {\n children.push(buildFacet(f, 'minInclusive', ctx));\n }\n }\n if (r.maxExclusive) {\n for (const f of r.maxExclusive) {\n children.push(buildFacet(f, 'maxExclusive', ctx));\n }\n }\n if (r.maxInclusive) {\n for (const f of r.maxInclusive) {\n children.push(buildFacet(f, 'maxInclusive', ctx));\n }\n }\n if (r.totalDigits) {\n for (const f of r.totalDigits) {\n children.push(buildFacet(f, 'totalDigits', ctx));\n }\n }\n if (r.fractionDigits) {\n for (const f of r.fractionDigits) {\n children.push(buildFacet(f, 'fractionDigits', ctx));\n }\n }\n if (r.length) {\n for (const f of r.length) {\n children.push(buildFacet(f, 'length', ctx));\n }\n }\n if (r.minLength) {\n for (const f of r.minLength) {\n children.push(buildFacet(f, 'minLength', ctx));\n }\n }\n if (r.maxLength) {\n for (const f of r.maxLength) {\n children.push(buildFacet(f, 'maxLength', ctx));\n }\n }\n if (r.enumeration) {\n for (const f of r.enumeration) {\n children.push(buildFacet(f, 'enumeration', ctx));\n }\n }\n if (r.whiteSpace) {\n for (const f of r.whiteSpace) {\n children.push(buildFacet(f, 'whiteSpace', ctx));\n }\n }\n if (r.pattern) {\n for (const p of r.pattern) {\n children.push(buildPattern(p, ctx));\n }\n }\n if (r.assertion) {\n for (const a of r.assertion) {\n children.push(buildAssertion(a, ctx));\n }\n }\n if (r.explicitTimezone) {\n for (const f of r.explicitTimezone) {\n children.push(buildFacet(f, 'explicitTimezone', ctx));\n }\n }\n}\n\nfunction buildFacet(f: Facet, name: string, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', f.id);\n addAttr(attrs, 'value', f.value);\n addBoolAttr(attrs, 'fixed', f.fixed);\n\n const children: string[] = [];\n if (f.annotation) {\n children.push(\n buildAnnotation(f.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:${name}`, attrs, children, ctx);\n}\n\nfunction buildPattern(p: Pattern, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', p.id);\n addAttr(attrs, 'value', p.value);\n\n const children: string[] = [];\n if (p.annotation) {\n children.push(\n buildAnnotation(p.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:pattern`, attrs, children, ctx);\n}\n\nfunction buildList(l: List, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', l.id);\n addAttr(attrs, 'itemType', l.itemType);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (l.annotation) {\n children.push(buildAnnotation(l.annotation, childCtx));\n }\n if (l.simpleType) {\n children.push(buildLocalSimpleType(l.simpleType, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:list`, attrs, children, ctx);\n}\n\nfunction buildUnion(u: Union, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', u.id);\n addAttr(attrs, 'memberTypes', u.memberTypes);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (u.annotation) {\n children.push(buildAnnotation(u.annotation, childCtx));\n }\n if (u.simpleType) {\n for (const st of u.simpleType) {\n children.push(buildLocalSimpleType(st, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:union`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Complex Content / Simple Content\n// =============================================================================\n\nfunction buildComplexContent(cc: ComplexContent, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', cc.id);\n addBoolAttr(attrs, 'mixed', cc.mixed);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (cc.annotation) {\n children.push(buildAnnotation(cc.annotation, childCtx));\n }\n if (cc.restriction) {\n children.push(buildComplexContentRestriction(cc.restriction, childCtx));\n } else if (cc.extension) {\n children.push(buildComplexContentExtension(cc.extension, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:complexContent`, attrs, children, ctx);\n}\n\nfunction buildSimpleContent(sc: SimpleContent, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', sc.id);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (sc.annotation) {\n children.push(buildAnnotation(sc.annotation, childCtx));\n }\n if (sc.restriction) {\n children.push(buildSimpleContentRestriction(sc.restriction, childCtx));\n } else if (sc.extension) {\n children.push(buildSimpleContentExtension(sc.extension, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:simpleContent`, attrs, children, ctx);\n}\n\nfunction buildComplexContentRestriction(\n r: ComplexContentRestriction,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', r.id);\n addAttr(attrs, 'base', r.base);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (r.annotation) {\n children.push(buildAnnotation(r.annotation, childCtx));\n }\n if (r.openContent) {\n children.push(buildOpenContent(r.openContent, childCtx));\n }\n if (r.group) {\n children.push(buildGroupRef(r.group, childCtx));\n }\n if (r.all) {\n children.push(buildAll(r.all, childCtx));\n }\n if (r.choice) {\n children.push(buildExplicitGroup(r.choice, 'choice', childCtx));\n }\n if (r.sequence) {\n children.push(buildExplicitGroup(r.sequence, 'sequence', childCtx));\n }\n if (r.attribute) {\n for (const attr of r.attribute) {\n children.push(buildLocalAttribute(attr, childCtx));\n }\n }\n if (r.attributeGroup) {\n for (const ag of r.attributeGroup) {\n children.push(buildAttributeGroupRef(ag, childCtx));\n }\n }\n if (r.anyAttribute) {\n children.push(buildAnyAttribute(r.anyAttribute, childCtx));\n }\n if (r.assert) {\n for (const a of r.assert) {\n children.push(buildAssertion(a, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:restriction`, attrs, children, ctx);\n}\n\nfunction buildComplexContentExtension(\n e: ComplexContentExtension,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', e.id);\n addAttr(attrs, 'base', e.base);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (e.annotation) {\n children.push(buildAnnotation(e.annotation, childCtx));\n }\n if (e.openContent) {\n children.push(buildOpenContent(e.openContent, childCtx));\n }\n if (e.group) {\n children.push(buildGroupRef(e.group, childCtx));\n }\n if (e.all) {\n children.push(buildAll(e.all, childCtx));\n }\n if (e.choice) {\n children.push(buildExplicitGroup(e.choice, 'choice', childCtx));\n }\n if (e.sequence) {\n children.push(buildExplicitGroup(e.sequence, 'sequence', childCtx));\n }\n if (e.attribute) {\n for (const attr of e.attribute) {\n children.push(buildLocalAttribute(attr, childCtx));\n }\n }\n if (e.attributeGroup) {\n for (const ag of e.attributeGroup) {\n children.push(buildAttributeGroupRef(ag, childCtx));\n }\n }\n if (e.anyAttribute) {\n children.push(buildAnyAttribute(e.anyAttribute, childCtx));\n }\n if (e.assert) {\n for (const a of e.assert) {\n children.push(buildAssertion(a, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:extension`, attrs, children, ctx);\n}\n\nfunction buildSimpleContentRestriction(\n r: SimpleContentRestriction,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', r.id);\n addAttr(attrs, 'base', r.base);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (r.annotation) {\n children.push(buildAnnotation(r.annotation, childCtx));\n }\n if (r.simpleType) {\n children.push(buildLocalSimpleType(r.simpleType, childCtx));\n }\n\n // Facets\n buildFacets(r, children, childCtx);\n\n // Attributes\n if (r.attribute) {\n for (const attr of r.attribute) {\n children.push(buildLocalAttribute(attr, childCtx));\n }\n }\n if (r.attributeGroup) {\n for (const ag of r.attributeGroup) {\n children.push(buildAttributeGroupRef(ag, childCtx));\n }\n }\n if (r.anyAttribute) {\n children.push(buildAnyAttribute(r.anyAttribute, childCtx));\n }\n if (r.assert) {\n for (const a of r.assert) {\n children.push(buildAssertion(a, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:restriction`, attrs, children, ctx);\n}\n\nfunction buildSimpleContentExtension(\n e: SimpleContentExtension,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', e.id);\n addAttr(attrs, 'base', e.base);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (e.annotation) {\n children.push(buildAnnotation(e.annotation, childCtx));\n }\n if (e.attribute) {\n for (const attr of e.attribute) {\n children.push(buildLocalAttribute(attr, childCtx));\n }\n }\n if (e.attributeGroup) {\n for (const ag of e.attributeGroup) {\n children.push(buildAttributeGroupRef(ag, childCtx));\n }\n }\n if (e.anyAttribute) {\n children.push(buildAnyAttribute(e.anyAttribute, childCtx));\n }\n if (e.assert) {\n for (const a of e.assert) {\n children.push(buildAssertion(a, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:extension`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Model Groups (sequence, choice, all)\n// =============================================================================\n\nfunction buildExplicitGroup(\n g: ExplicitGroup,\n name: 'sequence' | 'choice',\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', g.id);\n addOccursAttr(attrs, 'minOccurs', g.minOccurs);\n addOccursAttr(attrs, 'maxOccurs', g.maxOccurs);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (g.annotation) {\n children.push(buildAnnotation(g.annotation, childCtx));\n }\n if (g.element) {\n for (const el of g.element) {\n children.push(buildLocalElement(el, childCtx));\n }\n }\n if (g.group) {\n for (const grp of g.group) {\n children.push(buildGroupRef(grp, childCtx));\n }\n }\n if (g.choice) {\n for (const c of g.choice) {\n children.push(buildExplicitGroup(c, 'choice', childCtx));\n }\n }\n if (g.sequence) {\n for (const s of g.sequence) {\n children.push(buildExplicitGroup(s, 'sequence', childCtx));\n }\n }\n if (g.any) {\n for (const a of g.any) {\n children.push(buildAny(a, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:${name}`, attrs, children, ctx);\n}\n\nfunction buildAll(a: All, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', a.id);\n addOccursAttr(attrs, 'minOccurs', a.minOccurs);\n addOccursAttr(attrs, 'maxOccurs', a.maxOccurs);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (a.annotation) {\n children.push(buildAnnotation(a.annotation, childCtx));\n }\n if (a.element) {\n for (const el of a.element) {\n children.push(buildLocalElement(el, childCtx));\n }\n }\n if (a.any) {\n for (const any of a.any) {\n children.push(buildAny(any, childCtx));\n }\n }\n if (a.group) {\n for (const grp of a.group) {\n children.push(buildGroupRef(grp, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:all`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Groups and Attribute Groups\n// =============================================================================\n\nfunction buildNamedGroup(g: NamedGroup, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', g.id);\n addAttr(attrs, 'name', g.name);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (g.annotation) {\n children.push(buildAnnotation(g.annotation, childCtx));\n }\n if (g.all) {\n children.push(buildAll(g.all, childCtx));\n }\n if (g.choice) {\n children.push(buildExplicitGroup(g.choice, 'choice', childCtx));\n }\n if (g.sequence) {\n children.push(buildExplicitGroup(g.sequence, 'sequence', childCtx));\n }\n\n return buildElement(`${ctx.prefix}:group`, attrs, children, ctx);\n}\n\nfunction buildGroupRef(g: GroupRef, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', g.id);\n addAttr(attrs, 'ref', g.ref);\n addOccursAttr(attrs, 'minOccurs', g.minOccurs);\n addOccursAttr(attrs, 'maxOccurs', g.maxOccurs);\n\n const children: string[] = [];\n if (g.annotation) {\n children.push(\n buildAnnotation(g.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:group`, attrs, children, ctx);\n}\n\nfunction buildNamedAttributeGroup(\n ag: NamedAttributeGroup,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', ag.id);\n addAttr(attrs, 'name', ag.name);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (ag.annotation) {\n children.push(buildAnnotation(ag.annotation, childCtx));\n }\n if (ag.attribute) {\n for (const attr of ag.attribute) {\n children.push(buildLocalAttribute(attr, childCtx));\n }\n }\n if (ag.attributeGroup) {\n for (const agr of ag.attributeGroup) {\n children.push(buildAttributeGroupRef(agr, childCtx));\n }\n }\n if (ag.anyAttribute) {\n children.push(buildAnyAttribute(ag.anyAttribute, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:attributeGroup`, attrs, children, ctx);\n}\n\nfunction buildAttributeGroupRef(\n ag: AttributeGroupRef,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', ag.id);\n addAttr(attrs, 'ref', ag.ref);\n\n const children: string[] = [];\n if (ag.annotation) {\n children.push(\n buildAnnotation(ag.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:attributeGroup`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Wildcards\n// =============================================================================\n\nfunction buildAny(a: Any, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', a.id);\n addOccursAttr(attrs, 'minOccurs', a.minOccurs);\n addOccursAttr(attrs, 'maxOccurs', a.maxOccurs);\n addAttr(attrs, 'namespace', a.namespace);\n addAttr(attrs, 'processContents', a.processContents);\n addAttr(attrs, 'notNamespace', a.notNamespace);\n addAttr(attrs, 'notQName', a.notQName);\n\n const children: string[] = [];\n if (a.annotation) {\n children.push(\n buildAnnotation(a.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:any`, attrs, children, ctx);\n}\n\nfunction buildAnyAttribute(aa: AnyAttribute, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', aa.id);\n addAttr(attrs, 'namespace', aa.namespace);\n addAttr(attrs, 'processContents', aa.processContents);\n addAttr(attrs, 'notNamespace', aa.notNamespace);\n addAttr(attrs, 'notQName', aa.notQName);\n\n const children: string[] = [];\n if (aa.annotation) {\n children.push(\n buildAnnotation(aa.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:anyAttribute`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Identity Constraints\n// =============================================================================\n\nfunction buildUnique(u: Unique, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', u.id);\n addAttr(attrs, 'name', u.name);\n addAttr(attrs, 'ref', u.ref);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (u.annotation) {\n children.push(buildAnnotation(u.annotation, childCtx));\n }\n if (u.selector) {\n children.push(buildSelector(u.selector, childCtx));\n }\n if (u.field) {\n for (const f of u.field) {\n children.push(buildField(f, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:unique`, attrs, children, ctx);\n}\n\nfunction buildKey(k: Key, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', k.id);\n addAttr(attrs, 'name', k.name);\n addAttr(attrs, 'ref', k.ref);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (k.annotation) {\n children.push(buildAnnotation(k.annotation, childCtx));\n }\n if (k.selector) {\n children.push(buildSelector(k.selector, childCtx));\n }\n if (k.field) {\n for (const f of k.field) {\n children.push(buildField(f, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:key`, attrs, children, ctx);\n}\n\nfunction buildKeyref(kr: Keyref, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', kr.id);\n addAttr(attrs, 'name', kr.name);\n addAttr(attrs, 'ref', kr.ref);\n addAttr(attrs, 'refer', kr.refer);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (kr.annotation) {\n children.push(buildAnnotation(kr.annotation, childCtx));\n }\n if (kr.selector) {\n children.push(buildSelector(kr.selector, childCtx));\n }\n if (kr.field) {\n for (const f of kr.field) {\n children.push(buildField(f, childCtx));\n }\n }\n\n return buildElement(`${ctx.prefix}:keyref`, attrs, children, ctx);\n}\n\nfunction buildSelector(s: Selector, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', s.id);\n addAttr(attrs, 'xpath', s.xpath);\n addAttr(attrs, 'xpathDefaultNamespace', s.xpathDefaultNamespace);\n\n const children: string[] = [];\n if (s.annotation) {\n children.push(\n buildAnnotation(s.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:selector`, attrs, children, ctx);\n}\n\nfunction buildField(f: Field, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', f.id);\n addAttr(attrs, 'xpath', f.xpath);\n addAttr(attrs, 'xpathDefaultNamespace', f.xpathDefaultNamespace);\n\n const children: string[] = [];\n if (f.annotation) {\n children.push(\n buildAnnotation(f.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:field`, attrs, children, ctx);\n}\n\n// =============================================================================\n// XSD 1.1 Features\n// =============================================================================\n\nfunction buildOpenContent(oc: OpenContent, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', oc.id);\n addAttr(attrs, 'mode', oc.mode);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (oc.annotation) {\n children.push(buildAnnotation(oc.annotation, childCtx));\n }\n if (oc.any) {\n children.push(buildAny(oc.any, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:openContent`, attrs, children, ctx);\n}\n\nfunction buildDefaultOpenContent(\n doc: DefaultOpenContent,\n ctx: BuildContext,\n): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', doc.id);\n addBoolAttr(attrs, 'appliesToEmpty', doc.appliesToEmpty);\n addAttr(attrs, 'mode', doc.mode);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (doc.annotation) {\n children.push(buildAnnotation(doc.annotation, childCtx));\n }\n children.push(buildAny(doc.any, childCtx));\n\n return buildElement(`${ctx.prefix}:defaultOpenContent`, attrs, children, ctx);\n}\n\nfunction buildAssertion(a: Assertion, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', a.id);\n addAttr(attrs, 'test', a.test);\n addAttr(attrs, 'xpathDefaultNamespace', a.xpathDefaultNamespace);\n\n const children: string[] = [];\n if (a.annotation) {\n children.push(\n buildAnnotation(a.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:assert`, attrs, children, ctx);\n}\n\nfunction buildAlternative(alt: Alternative, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', alt.id);\n addAttr(attrs, 'test', alt.test);\n addAttr(attrs, 'type', alt.type);\n addAttr(attrs, 'xpathDefaultNamespace', alt.xpathDefaultNamespace);\n\n const children: string[] = [];\n const childCtx = { ...ctx, level: ctx.level + 1 };\n\n if (alt.annotation) {\n children.push(buildAnnotation(alt.annotation, childCtx));\n }\n if (alt.simpleType) {\n children.push(buildLocalSimpleType(alt.simpleType, childCtx));\n }\n if (alt.complexType) {\n children.push(buildLocalComplexType(alt.complexType, childCtx));\n }\n\n return buildElement(`${ctx.prefix}:alternative`, attrs, children, ctx);\n}\n\nfunction buildNotation(n: Notation, ctx: BuildContext): string {\n const attrs: string[] = [];\n addAttr(attrs, 'id', n.id);\n addAttr(attrs, 'name', n.name);\n addAttr(attrs, 'public', n.public);\n addAttr(attrs, 'system', n.system);\n\n const children: string[] = [];\n if (n.annotation) {\n children.push(\n buildAnnotation(n.annotation, { ...ctx, level: ctx.level + 1 }),\n );\n }\n\n return buildElement(`${ctx.prefix}:notation`, attrs, children, ctx);\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nfunction addAttr(\n attrs: string[],\n name: string,\n value: string | undefined,\n): void {\n if (value !== undefined) {\n attrs.push(`${name}=\"${escapeXml(value)}\"`);\n }\n}\n\nfunction addBoolAttr(\n attrs: string[],\n name: string,\n value: boolean | undefined,\n): void {\n if (value !== undefined) {\n attrs.push(`${name}=\"${value}\"`);\n }\n}\n\nfunction addOccursAttr(\n attrs: string[],\n name: string,\n value: number | string | undefined,\n): void {\n if (value !== undefined) {\n attrs.push(`${name}=\"${value}\"`);\n }\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replaceAll(/&/g, '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&apos;');\n}\n\nfunction buildElement(\n tag: string,\n attrs: string[],\n children: string[],\n ctx: BuildContext,\n): string {\n const indent = ctx.pretty ? ctx.indent.repeat(ctx.level) : '';\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n\n if (children.length === 0) {\n return `${indent}<${tag}${attrStr}/>`;\n }\n\n const nl = ctx.pretty ? '\\n' : '';\n const childContent = children.join(nl);\n return `${indent}<${tag}${attrStr}>${nl}${childContent}${nl}${indent}</${tag}>`;\n}\n\nfunction buildElementWithText(\n tag: string,\n attrs: string[],\n text: string,\n ctx: BuildContext,\n): string {\n const indent = ctx.pretty ? ctx.indent.repeat(ctx.level) : '';\n const attrStr = attrs.length > 0 ? ' ' + attrs.join(' ') : '';\n return `${indent}<${tag}${attrStr}>${escapeXml(text)}</${tag}>`;\n}\n\nexport default buildXsd;\n","/**\n * Schema Helpers\n *\n * Utility functions for working with Schema objects,\n * particularly for resolving cross-schema relationships.\n */\n\nimport type { Schema } from './types';\n\n/**\n * Resolve $imports for a schema by matching import schemaLocation to $filename.\n *\n * @param schema - The schema to resolve imports for\n * @param availableSchemas - Array of schemas that may be imported\n * @returns A new schema object with $imports populated\n *\n * @example\n * ```typescript\n * const orderSchema = parseXsd(orderXsd);\n * const commonSchema = { ...parseXsd(commonXsd), $filename: 'common.xsd' };\n *\n * // orderSchema has: import: [{ schemaLocation: 'common.xsd', ... }]\n * const resolved = resolveImports(orderSchema, [commonSchema]);\n * // resolved.$imports = [commonSchema]\n * ```\n */\nexport function resolveImports<T extends Schema>(\n schema: T,\n availableSchemas: readonly Schema[],\n): T & { $imports: readonly Schema[] } {\n const imports: Schema[] = [];\n\n if (schema.import) {\n for (const imp of schema.import) {\n if (imp.schemaLocation) {\n // Find schema by $filename match\n const found = availableSchemas.find(\n (s) => s.$filename === imp.schemaLocation,\n );\n if (found) {\n imports.push(found);\n }\n }\n }\n }\n\n return {\n ...schema,\n $imports: imports,\n };\n}\n\n/**\n * Resolve $imports for multiple schemas, linking them together.\n *\n * @param schemas - Array of schemas to link together\n * @returns Array of schemas with $imports populated\n *\n * @example\n * ```typescript\n * const schemas = [\n * { ...parseXsd(orderXsd), $filename: 'order.xsd' },\n * { ...parseXsd(commonXsd), $filename: 'common.xsd' },\n * ];\n * const linked = linkSchemas(schemas);\n * // Each schema now has $imports resolved\n * ```\n */\nexport function linkSchemas<T extends Schema>(\n schemas: readonly T[],\n): (T & { $imports: readonly Schema[] })[] {\n return schemas.map((schema) => resolveImports(schema, schemas));\n}\n","/**\n * Schema Traverser - OO pattern for XSD schema traversal\n *\n * Uses real W3C XSD types from types.ts (not the *Like inference types).\n * Subclass and override `on*` methods to handle specific node types.\n * Context is available via `this` - no parameter passing needed.\n *\n * @example\n * ```typescript\n * class TypeCollector extends SchemaTraverser {\n * readonly types: TopLevelComplexType[] = [];\n *\n * protected override onComplexType(ct: TopLevelComplexType): void {\n * this.types.push(ct);\n * // Access context: this.currentSchema, this.source, this.depth\n * }\n * }\n *\n * const collector = new TypeCollector();\n * collector.traverse(schema);\n * console.log(collector.types);\n * ```\n */\n\nimport type {\n Schema,\n TopLevelComplexType,\n TopLevelSimpleType,\n TopLevelElement,\n TopLevelAttribute,\n NamedGroup,\n NamedAttributeGroup,\n Redefine,\n Override,\n} from './types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Source of a node in the schema hierarchy */\nexport type NodeSource =\n | 'direct'\n | 'redefine'\n | 'override'\n | 'include'\n | 'import';\n\n/** Traversal options */\nexport interface TraverseOptions {\n /** Include $imports in traversal (default: true) */\n readonly includeImports?: boolean;\n /** Include $includes in traversal (default: true) */\n readonly includeIncludes?: boolean;\n /** Maximum depth to traverse (default: unlimited) */\n readonly maxDepth?: number;\n}\n\n// =============================================================================\n// Schema Traverser - Base class for OO traversal\n// =============================================================================\n\n/**\n * Base class for OO schema traversal using real W3C XSD types.\n *\n * Subclass and override the `on*` methods you need.\n * Context is available via `this` - no parameter passing needed.\n */\nexport abstract class SchemaTraverser {\n // -------------------------------------------------------------------------\n // Context - Available via `this` in subclasses\n // -------------------------------------------------------------------------\n\n /** Root schema being traversed */\n protected rootSchema!: Schema;\n\n /** Current schema being visited */\n protected currentSchema!: Schema;\n\n /** Source of current node (direct, redefine, override, include, import) */\n protected source: NodeSource = 'direct';\n\n /** Depth in schema hierarchy (0 = root) */\n protected depth = 0;\n\n /** Traversal options */\n protected options: Required<TraverseOptions> = {\n includeImports: true,\n includeIncludes: true,\n maxDepth: Infinity,\n };\n\n /** Visited schemas (prevents infinite loops) */\n private readonly visited = new Set<Schema>();\n\n // -------------------------------------------------------------------------\n // Public API\n // -------------------------------------------------------------------------\n\n /**\n * Traverse a schema and all its imports/includes.\n * Override `on*` methods to handle specific node types.\n */\n traverse(schema: Schema, options: TraverseOptions = {}): this {\n this.rootSchema = schema;\n this.options = { ...this.options, ...options };\n this.visited.clear();\n this.traverseSchema(schema, 'direct', 0);\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Override these methods in subclasses\n // -------------------------------------------------------------------------\n\n /** Called when entering a schema */\n protected onEnterSchema(_schema: Schema): void {\n /* override in subclass */\n }\n\n /** Called when leaving a schema */\n protected onLeaveSchema(_schema: Schema): void {\n /* override in subclass */\n }\n\n /** Called for each top-level complexType */\n protected onComplexType(_ct: TopLevelComplexType): void {\n /* override in subclass */\n }\n\n /** Called for each top-level simpleType */\n protected onSimpleType(_st: TopLevelSimpleType): void {\n /* override in subclass */\n }\n\n /** Called for each top-level element */\n protected onElement(_element: TopLevelElement): void {\n /* override in subclass */\n }\n\n /** Called for each top-level attribute */\n protected onAttribute(_attr: TopLevelAttribute): void {\n /* override in subclass */\n }\n\n /** Called for each named group */\n protected onGroup(_group: NamedGroup): void {\n /* override in subclass */\n }\n\n /** Called for each named attributeGroup */\n protected onAttributeGroup(_group: NamedAttributeGroup): void {\n /* override in subclass */\n }\n\n /** Called for each redefine block */\n protected onRedefine(_redefine: Redefine): void {\n /* override in subclass */\n }\n\n /** Called for each override block */\n protected onOverride(_override: Override): void {\n /* override in subclass */\n }\n\n // -------------------------------------------------------------------------\n // Internal traversal logic\n // -------------------------------------------------------------------------\n\n private traverseSchema(\n schema: Schema,\n source: NodeSource,\n depth: number,\n ): void {\n if (this.visited.has(schema)) return;\n if (depth > this.options.maxDepth) return;\n\n this.visited.add(schema);\n this.currentSchema = schema;\n this.source = source;\n this.depth = depth;\n\n this.onEnterSchema(schema);\n this.traverseSchemaChildren(schema);\n this.traverseRedefines(schema);\n this.traverseOverrides(schema);\n this.traverseIncludes(schema, depth);\n this.traverseImports(schema, depth);\n this.onLeaveSchema(schema);\n }\n\n private traverseSchemaChildren(schema: Schema): void {\n // ComplexTypes\n if (schema.complexType) {\n for (const ct of schema.complexType) {\n this.onComplexType(ct);\n }\n }\n\n // SimpleTypes\n if (schema.simpleType) {\n for (const st of schema.simpleType) {\n this.onSimpleType(st);\n }\n }\n\n // Elements\n if (schema.element) {\n for (const element of schema.element) {\n this.onElement(element);\n }\n }\n\n // Attributes\n if (schema.attribute) {\n for (const attr of schema.attribute) {\n this.onAttribute(attr);\n }\n }\n\n // Groups\n if (schema.group) {\n for (const group of schema.group) {\n this.onGroup(group);\n }\n }\n\n // AttributeGroups\n if (schema.attributeGroup) {\n for (const group of schema.attributeGroup) {\n this.onAttributeGroup(group);\n }\n }\n }\n\n private traverseRedefines(schema: Schema): void {\n if (!schema.redefine) return;\n\n const prevSource = this.source;\n this.source = 'redefine';\n\n for (const redefine of schema.redefine) {\n this.onRedefine(redefine);\n\n if (redefine.complexType) {\n for (const ct of redefine.complexType) {\n this.onComplexType(ct);\n }\n }\n if (redefine.simpleType) {\n for (const st of redefine.simpleType) {\n this.onSimpleType(st);\n }\n }\n if (redefine.group) {\n for (const group of redefine.group) {\n this.onGroup(group);\n }\n }\n if (redefine.attributeGroup) {\n for (const group of redefine.attributeGroup) {\n this.onAttributeGroup(group);\n }\n }\n }\n\n this.source = prevSource;\n }\n\n private traverseOverrides(schema: Schema): void {\n if (!schema.override) return;\n\n const prevSource = this.source;\n this.source = 'override';\n\n for (const override of schema.override) {\n this.onOverride(override);\n\n if (override.complexType) {\n for (const ct of override.complexType) {\n this.onComplexType(ct);\n }\n }\n if (override.simpleType) {\n for (const st of override.simpleType) {\n this.onSimpleType(st);\n }\n }\n if (override.element) {\n for (const element of override.element) {\n this.onElement(element);\n }\n }\n if (override.attribute) {\n for (const attr of override.attribute) {\n this.onAttribute(attr);\n }\n }\n if (override.group) {\n for (const group of override.group) {\n this.onGroup(group);\n }\n }\n if (override.attributeGroup) {\n for (const group of override.attributeGroup) {\n this.onAttributeGroup(group);\n }\n }\n }\n\n this.source = prevSource;\n }\n\n private traverseIncludes(schema: Schema, depth: number): void {\n if (!this.options.includeIncludes || !schema.$includes) return;\n\n for (const included of schema.$includes) {\n this.traverseSchema(included, 'include', depth + 1);\n }\n }\n\n private traverseImports(schema: Schema, depth: number): void {\n if (!this.options.includeImports || !schema.$imports) return;\n\n for (const imported of schema.$imports) {\n this.traverseSchema(imported, 'import', depth + 1);\n }\n }\n}\n\n// =============================================================================\n// Built-in Traversers\n// =============================================================================\n\n/** Result of schema resolution */\nexport interface ResolvedSchema {\n readonly complexTypes: Map<\n string,\n { ct: TopLevelComplexType; schema: Schema }\n >;\n readonly simpleTypes: Map<string, { st: TopLevelSimpleType; schema: Schema }>;\n readonly elements: Map<string, { element: TopLevelElement; schema: Schema }>;\n readonly attributes: Map<string, { attr: TopLevelAttribute; schema: Schema }>;\n readonly groups: Map<string, { group: NamedGroup; schema: Schema }>;\n readonly attributeGroups: Map<\n string,\n { group: NamedAttributeGroup; schema: Schema }\n >;\n readonly xmlns: Map<string, string>;\n readonly substitutionGroups: Map<string, TopLevelElement[]>;\n}\n\n/**\n * Resolves a schema hierarchy into a flat structure.\n * All types are collected into Maps for O(1) lookup.\n *\n * Precedence rules:\n * - redefine/override types take precedence over original\n * - root schema types take precedence over imported/included\n */\nexport class SchemaResolver extends SchemaTraverser {\n readonly complexTypes = new Map<\n string,\n { ct: TopLevelComplexType; schema: Schema }\n >();\n readonly simpleTypes = new Map<\n string,\n { st: TopLevelSimpleType; schema: Schema }\n >();\n readonly elements = new Map<\n string,\n { element: TopLevelElement; schema: Schema }\n >();\n readonly attributes = new Map<\n string,\n { attr: TopLevelAttribute; schema: Schema }\n >();\n readonly groups = new Map<string, { group: NamedGroup; schema: Schema }>();\n readonly attributeGroups = new Map<\n string,\n { group: NamedAttributeGroup; schema: Schema }\n >();\n readonly xmlns = new Map<string, string>();\n readonly substitutionGroups = new Map<string, TopLevelElement[]>();\n\n /** Get the resolved schema structure */\n getResolved(): ResolvedSchema {\n return {\n complexTypes: this.complexTypes,\n simpleTypes: this.simpleTypes,\n elements: this.elements,\n attributes: this.attributes,\n groups: this.groups,\n attributeGroups: this.attributeGroups,\n xmlns: this.xmlns,\n substitutionGroups: this.substitutionGroups,\n };\n }\n\n protected override onEnterSchema(schema: Schema): void {\n // Collect xmlns\n if (schema.$xmlns) {\n for (const [prefix, uri] of Object.entries(schema.$xmlns)) {\n if (!this.xmlns.has(prefix)) {\n this.xmlns.set(prefix, uri);\n }\n }\n }\n }\n\n protected override onComplexType(ct: TopLevelComplexType): void {\n const shouldReplace =\n !this.complexTypes.has(ct.name) ||\n this.source === 'redefine' ||\n this.source === 'override' ||\n (this.depth === 0 && this.source === 'direct');\n\n if (shouldReplace) {\n this.complexTypes.set(ct.name, { ct, schema: this.currentSchema });\n }\n }\n\n protected override onSimpleType(st: TopLevelSimpleType): void {\n const shouldReplace =\n !this.simpleTypes.has(st.name) ||\n this.source === 'redefine' ||\n this.source === 'override' ||\n (this.depth === 0 && this.source === 'direct');\n\n if (shouldReplace) {\n this.simpleTypes.set(st.name, { st, schema: this.currentSchema });\n }\n }\n\n protected override onElement(element: TopLevelElement): void {\n const shouldReplace =\n !this.elements.has(element.name) ||\n this.source === 'override' ||\n (this.depth === 0 && this.source === 'direct');\n\n if (shouldReplace) {\n this.elements.set(element.name, { element, schema: this.currentSchema });\n }\n\n // Track substitution groups\n if (element.substitutionGroup) {\n const abstractName = stripNsPrefix(element.substitutionGroup);\n const existing = this.substitutionGroups.get(abstractName) ?? [];\n existing.push(element);\n this.substitutionGroups.set(abstractName, existing);\n }\n }\n\n protected override onAttribute(attr: TopLevelAttribute): void {\n const shouldReplace =\n !this.attributes.has(attr.name) ||\n this.source === 'override' ||\n (this.depth === 0 && this.source === 'direct');\n\n if (shouldReplace) {\n this.attributes.set(attr.name, { attr, schema: this.currentSchema });\n }\n }\n\n protected override onGroup(group: NamedGroup): void {\n const shouldReplace =\n !this.groups.has(group.name) ||\n this.source === 'redefine' ||\n this.source === 'override' ||\n (this.depth === 0 && this.source === 'direct');\n\n if (shouldReplace) {\n this.groups.set(group.name, { group, schema: this.currentSchema });\n }\n }\n\n protected override onAttributeGroup(group: NamedAttributeGroup): void {\n const shouldReplace =\n !this.attributeGroups.has(group.name) ||\n this.source === 'redefine' ||\n this.source === 'override' ||\n (this.depth === 0 && this.source === 'direct');\n\n if (shouldReplace) {\n this.attributeGroups.set(group.name, {\n group,\n schema: this.currentSchema,\n });\n }\n }\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Strip namespace prefix from a QName (e.g., \"xs:string\" -> \"string\")\n */\nexport function stripNsPrefix(qname: string): string {\n const colonIndex = qname.indexOf(':');\n return colonIndex >= 0 ? qname.slice(colonIndex + 1) : qname;\n}\n\n/**\n * Resolve a schema hierarchy into a flat structure.\n * Convenience function that creates a SchemaResolver and returns the result.\n */\nexport function resolveSchemaTypes(\n schema: Schema,\n options: TraverseOptions = {},\n): ResolvedSchema {\n const resolver = new SchemaResolver();\n resolver.traverse(schema, options);\n return resolver.getResolved();\n}\n\n/**\n * Find a complexType by name in a schema hierarchy.\n */\nexport function findComplexType(\n name: string,\n schema: Schema,\n options: TraverseOptions = {},\n): { ct: TopLevelComplexType; schema: Schema } | undefined {\n const resolved = resolveSchemaTypes(schema, options);\n return resolved.complexTypes.get(name);\n}\n\n/**\n * Find a simpleType by name in a schema hierarchy.\n */\nexport function findSimpleType(\n name: string,\n schema: Schema,\n options: TraverseOptions = {},\n): { st: TopLevelSimpleType; schema: Schema } | undefined {\n const resolved = resolveSchemaTypes(schema, options);\n return resolved.simpleTypes.get(name);\n}\n\n/**\n * Find an element by name in a schema hierarchy.\n */\nexport function findElement(\n name: string,\n schema: Schema,\n options: TraverseOptions = {},\n): { element: TopLevelElement; schema: Schema } | undefined {\n const resolved = resolveSchemaTypes(schema, options);\n return resolved.elements.get(name);\n}\n\n/**\n * Get all substitutes for an abstract element.\n */\nexport function getSubstitutes(\n abstractElementName: string,\n schema: Schema,\n options: TraverseOptions = {},\n): TopLevelElement[] {\n const resolved = resolveSchemaTypes(schema, options);\n return resolved.substitutionGroups.get(abstractElementName) ?? [];\n}\n","/**\n * Schema Resolver\n *\n * Resolves a schema with all its imports, includes, extensions, and substitution groups\n * into a single self-contained schema. This makes codegen straightforward - no need to\n * track cross-schema dependencies.\n *\n * Uses the SchemaTraverser for OO traversal with real W3C XSD types.\n *\n * Features:\n * - Merges types from $imports (xs:import)\n * - Expands complexContent/extension - flattens inheritance\n * - Expands substitutionGroup - replaces abstract element refs with concrete elements\n */\n\nimport type {\n Schema,\n TopLevelComplexType,\n TopLevelSimpleType,\n TopLevelElement,\n NamedGroup,\n NamedAttributeGroup,\n LocalElement,\n LocalAttribute,\n ExplicitGroup,\n All,\n} from './types';\nimport { SchemaTraverser, stripNsPrefix } from './traverser';\n\n/** Options for schema resolution */\nexport interface ResolveOptions {\n /** Resolve xs:import - merge types from imported schemas (default: true) */\n resolveImports?: boolean;\n /** Resolve xs:include - merge content from included schemas (default: true) */\n resolveIncludes?: boolean;\n /** Expand complexContent/extension - flatten inheritance (default: true) */\n expandExtensions?: boolean;\n /** Expand substitutionGroup - replace abstract refs with concrete elements (default: true) */\n expandSubstitutions?: boolean;\n /** Filter to root elements only - exclude abstract and referenced elements (default: false) */\n filterToRootElements?: boolean;\n /** Keep original $imports array for reference (default: false) */\n keepImportsRef?: boolean;\n}\n\n// =============================================================================\n// Schema Collector - Traverser that collects all schema components\n// =============================================================================\n\n/**\n * Collects all schema components into Maps for resolution.\n *\n * IMPORTANT: Elements are only collected from schemas with the SAME targetNamespace\n * as the root schema. This follows XSD semantics where xs:import brings in types\n * from a different namespace but doesn't merge elements into the current namespace.\n */\nclass SchemaCollector extends SchemaTraverser {\n readonly complexTypes = new Map<string, TopLevelComplexType>();\n readonly simpleTypes = new Map<string, TopLevelSimpleType>();\n readonly elements = new Map<string, TopLevelElement>();\n readonly groups = new Map<string, NamedGroup>();\n readonly attributeGroups = new Map<string, NamedAttributeGroup>();\n readonly substitutionGroups = new Map<string, TopLevelElement[]>();\n readonly xmlns = new Map<string, string>();\n\n protected override onEnterSchema(schema: Schema): void {\n if (schema.$xmlns) {\n for (const [prefix, uri] of Object.entries(schema.$xmlns)) {\n if (!this.xmlns.has(prefix)) {\n this.xmlns.set(prefix, uri);\n }\n }\n }\n }\n\n protected override onComplexType(ct: TopLevelComplexType): void {\n // Types are collected from all schemas (needed for extension resolution)\n // First one wins (root schema takes precedence)\n if (!this.complexTypes.has(ct.name)) {\n this.complexTypes.set(ct.name, ct);\n }\n }\n\n protected override onSimpleType(st: TopLevelSimpleType): void {\n if (!this.simpleTypes.has(st.name)) {\n this.simpleTypes.set(st.name, st);\n }\n }\n\n protected override onElement(element: TopLevelElement): void {\n // Collect elements from:\n // 1. Same targetNamespace as root schema\n // 2. Schemas with NO targetNamespace (chameleon schemas - adopt importing namespace)\n // 3. Elements with substitutionGroup (needed for substitution expansion)\n // 4. Abstract elements (targets of substitution groups)\n //\n // This follows XSD semantics where:\n // - xs:include merges schemas with same/no namespace\n // - xs:import references schemas with different namespace (elements stay separate)\n // - Chameleon schemas (no targetNamespace) adopt the importing schema's namespace\n const rootNs = this.rootSchema.targetNamespace;\n const currentNs = this.currentSchema.targetNamespace;\n // Treat empty string as \"no namespace\" — XSD parser sets \"\" when targetNamespace is absent\n const sameOrNoNamespace = currentNs === rootNs || !currentNs;\n const hasSubstitutionGroup = !!element.substitutionGroup;\n const isAbstract = !!(element as { abstract?: boolean }).abstract;\n\n if (\n (sameOrNoNamespace || hasSubstitutionGroup || isAbstract) &&\n !this.elements.has(element.name)\n ) {\n this.elements.set(element.name, element);\n }\n\n // Track substitution groups (from any namespace - substitutes can be cross-namespace)\n if (element.substitutionGroup) {\n const abstractName = stripNsPrefix(element.substitutionGroup);\n const existing = this.substitutionGroups.get(abstractName) ?? [];\n existing.push(element);\n this.substitutionGroups.set(abstractName, existing);\n }\n }\n\n protected override onGroup(group: NamedGroup): void {\n if (!this.groups.has(group.name)) {\n this.groups.set(group.name, group);\n }\n }\n\n protected override onAttributeGroup(group: NamedAttributeGroup): void {\n if (!this.attributeGroups.has(group.name)) {\n this.attributeGroups.set(group.name, group);\n }\n }\n}\n\n// =============================================================================\n// Main Resolution Function\n// =============================================================================\n\n/**\n * Resolve a schema by merging all imports/includes and expanding all references.\n * Returns a new self-contained schema with no external dependencies.\n */\nexport function resolveSchema(\n schema: Schema,\n options: ResolveOptions = {},\n): Schema {\n const {\n resolveImports = true,\n resolveIncludes = true,\n expandExtensions = true,\n expandSubstitutions = true,\n filterToRootElements = false,\n keepImportsRef = false,\n } = options;\n\n // Use traverser to collect all types\n const collector = new SchemaCollector();\n collector.traverse(schema, {\n includeImports: resolveImports,\n includeIncludes: resolveIncludes,\n });\n\n // Determine which elements to include\n let elements: TopLevelElement[];\n if (filterToRootElements) {\n // Filter to only root elements (not abstract, not referenced)\n const referencedElements = new Set<string>();\n for (const el of collector.elements.values()) {\n collectElementRefs(el, referencedElements);\n }\n for (const ct of collector.complexTypes.values()) {\n collectElementRefsFromType(ct, referencedElements);\n }\n elements = Array.from(collector.elements.values()).filter((el) => {\n if ((el as Record<string, unknown>).abstract === true) return false;\n if (referencedElements.has(el.name)) return false;\n return true;\n });\n } else {\n // Keep ALL elements (including abstract and referenced)\n elements = Array.from(collector.elements.values());\n }\n\n // Expand extensions if requested\n let resolvedComplexTypes = Array.from(collector.complexTypes.values());\n if (expandExtensions) {\n resolvedComplexTypes = resolvedComplexTypes.map((ct) =>\n expandComplexTypeExtension(ct, collector.complexTypes),\n );\n }\n\n // Expand substitution groups in complex types if requested\n if (expandSubstitutions) {\n resolvedComplexTypes = resolvedComplexTypes.map((ct) =>\n expandSubstitutionGroupsInType(\n ct,\n collector.elements,\n collector.substitutionGroups,\n ),\n );\n }\n\n // Build resolved schema\n const resolved: Record<string, unknown> = {\n targetNamespace: schema.targetNamespace,\n elementFormDefault: schema.elementFormDefault,\n $filename: schema.$filename,\n $xmlns:\n collector.xmlns.size > 0\n ? Object.fromEntries(collector.xmlns)\n : schema.$xmlns,\n };\n\n // Add elements\n if (elements.length > 0) {\n resolved.element = elements;\n }\n if (resolvedComplexTypes.length > 0) {\n resolved.complexType = resolvedComplexTypes;\n }\n if (collector.simpleTypes.size > 0) {\n resolved.simpleType = Array.from(collector.simpleTypes.values());\n }\n if (collector.groups.size > 0) {\n resolved.group = Array.from(collector.groups.values());\n }\n if (collector.attributeGroups.size > 0) {\n resolved.attributeGroup = Array.from(collector.attributeGroups.values());\n }\n\n // Optionally keep imports reference\n if (keepImportsRef && schema.$imports) {\n resolved.$imports = schema.$imports;\n }\n\n return resolved as Schema;\n}\n\n// =============================================================================\n// Extension Expansion\n// =============================================================================\n\n/**\n * Expand complexContent/extension by merging base type properties.\n * Uses a visited set to prevent infinite recursion on circular inheritance.\n */\nfunction expandComplexTypeExtension(\n ct: TopLevelComplexType,\n allTypes: Map<string, TopLevelComplexType>,\n visited: Set<string> = new Set(),\n): TopLevelComplexType {\n const extension = ct.complexContent?.extension;\n if (!extension?.base) return ct;\n\n // Prevent circular inheritance\n if (visited.has(ct.name)) {\n return ct;\n }\n visited.add(ct.name);\n\n // Collect elements from base type and extension\n const mergedElements: LocalElement[] = [];\n const mergedAttributes: LocalAttribute[] = [];\n\n // Get base type elements\n const baseName = stripNsPrefix(extension.base);\n const baseType = allTypes.get(baseName);\n if (baseType && !visited.has(baseName)) {\n // Recursively expand base type first\n const expandedBase = expandComplexTypeExtension(\n baseType,\n allTypes,\n visited,\n );\n\n // Collect elements from base\n collectElementsFromType(expandedBase, mergedElements);\n\n // Collect attributes from base\n if (expandedBase.attribute) {\n mergedAttributes.push(...expandedBase.attribute);\n }\n }\n\n // Add extension elements\n collectElementsFromGroup(extension.sequence, mergedElements);\n collectElementsFromGroup(extension.choice, mergedElements);\n collectElementsFromGroup(extension.all, mergedElements);\n\n // Add extension attributes\n if (extension.attribute) {\n mergedAttributes.push(...extension.attribute);\n }\n\n // Build flattened type\n const flattened: Record<string, unknown> = {\n name: ct.name,\n };\n\n if (mergedElements.length > 0) {\n flattened.all = { element: mergedElements };\n }\n\n if (mergedAttributes.length > 0) {\n flattened.attribute = mergedAttributes;\n }\n\n // Copy other properties (excluding complexContent which we've flattened)\n for (const [key, value] of Object.entries(ct)) {\n if (\n ![\n 'name',\n 'complexContent',\n 'all',\n 'sequence',\n 'choice',\n 'attribute',\n ].includes(key)\n ) {\n flattened[key] = value;\n }\n }\n\n return flattened as TopLevelComplexType;\n}\n\n/**\n * Collect elements from a complex type's content model.\n */\nfunction collectElementsFromType(\n ct: TopLevelComplexType,\n elements: LocalElement[],\n): void {\n collectElementsFromGroup(ct.sequence, elements);\n collectElementsFromGroup(ct.choice, elements);\n collectElementsFromGroup(ct.all, elements);\n}\n\n/**\n * Collect elements from a group (sequence/choice/all).\n */\nfunction collectElementsFromGroup(\n group: ExplicitGroup | All | undefined,\n elements: LocalElement[],\n): void {\n if (!group?.element) return;\n elements.push(...group.element);\n}\n\n// =============================================================================\n// Substitution Group Expansion\n// =============================================================================\n\n/**\n * Expand substitution group references in a complex type.\n * Replaces abstract element refs with concrete substitute elements.\n */\nfunction expandSubstitutionGroupsInType(\n ct: TopLevelComplexType,\n allElements: Map<string, TopLevelElement>,\n substitutionGroups: Map<string, TopLevelElement[]>,\n): TopLevelComplexType {\n let changed = false;\n const result = { ...ct } as Record<string, unknown>;\n\n // Process sequence\n if (ct.sequence) {\n const expanded = expandSubstitutionGroupsInGroup(\n ct.sequence,\n allElements,\n substitutionGroups,\n );\n if (expanded !== ct.sequence) {\n result.sequence = expanded;\n changed = true;\n }\n }\n\n // Process all\n if (ct.all) {\n const expanded = expandSubstitutionGroupsInGroup(\n ct.all,\n allElements,\n substitutionGroups,\n );\n if (expanded !== ct.all) {\n result.all = expanded;\n changed = true;\n }\n }\n\n // Process choice\n if (ct.choice) {\n const expanded = expandSubstitutionGroupsInGroup(\n ct.choice,\n allElements,\n substitutionGroups,\n );\n if (expanded !== ct.choice) {\n result.choice = expanded;\n changed = true;\n }\n }\n\n return changed ? (result as TopLevelComplexType) : ct;\n}\n\n/**\n * Expand substitution groups in a group (sequence/all/choice).\n */\nfunction expandSubstitutionGroupsInGroup(\n group: ExplicitGroup | All,\n allElements: Map<string, TopLevelElement>,\n substitutionGroups: Map<string, TopLevelElement[]>,\n): ExplicitGroup | All {\n if (!group.element) return group;\n\n const expandedElements: LocalElement[] = [];\n let hasChanges = false;\n\n for (const el of group.element) {\n // Check if this is a ref to an abstract element\n if (el.ref) {\n const refName = stripNsPrefix(el.ref);\n const refElement = allElements.get(refName);\n\n if (refElement?.abstract) {\n // This is an abstract element - expand to substitutes\n const substitutes = substitutionGroups.get(refName);\n if (substitutes && substitutes.length > 0) {\n // Add each substitute as a separate optional element\n for (const sub of substitutes) {\n expandedElements.push({\n name: sub.name,\n type: sub.type,\n minOccurs: el.minOccurs ?? 0,\n maxOccurs: el.maxOccurs,\n });\n }\n hasChanges = true;\n continue;\n }\n }\n }\n\n // Keep original element\n expandedElements.push(el);\n }\n\n if (!hasChanges) return group;\n\n return {\n ...group,\n element: expandedElements,\n };\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get all substitutes for an abstract element.\n */\nexport function getSubstitutes(\n abstractElementName: string,\n schema: Schema,\n): TopLevelElement[] {\n const collector = new SchemaCollector();\n collector.traverse(schema);\n return collector.substitutionGroups.get(abstractElementName) ?? [];\n}\n\n/**\n * Collect element refs from an element's nested structure\n */\nfunction collectElementRefs(el: TopLevelElement, refs: Set<string>): void {\n const record = el as Record<string, unknown>;\n if (record.complexType) {\n collectElementRefsFromType(record.complexType as TopLevelComplexType, refs);\n }\n}\n\n/**\n * Recursively collect element refs from a complex type\n */\nfunction collectElementRefsFromType(\n ct: TopLevelComplexType,\n refs: Set<string>,\n): void {\n const record = ct as Record<string, unknown>;\n\n // Check sequence/all/choice for element refs\n for (const groupKey of ['sequence', 'all', 'choice']) {\n const group = record[groupKey] as Record<string, unknown> | undefined;\n if (group?.element) {\n const elements = group.element as Array<Record<string, unknown>>;\n for (const el of elements) {\n if (el.ref) {\n // Strip namespace prefix and add to refs\n const refName = stripNsPrefix(el.ref as string);\n refs.add(refName);\n }\n // Recurse into nested complexType\n if (el.complexType) {\n collectElementRefsFromType(\n el.complexType as TopLevelComplexType,\n refs,\n );\n }\n }\n }\n }\n\n // Check complexContent/extension\n if (record.complexContent) {\n const cc = record.complexContent as Record<string, unknown>;\n if (cc.extension) {\n collectElementRefsFromType(cc.extension as TopLevelComplexType, refs);\n }\n }\n}\n","/**\n * Schema Loader - Load and parse XSD files from disk\n *\n * Simple loader that reads XSD files and parses them into Schema objects.\n * Resolution of imports/includes is handled by the resolver.\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport type { Schema } from './types';\nimport { parseXsd } from './parse';\nimport { resolveSchema } from './resolve';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Function to load XSD content from a schemaLocation path */\nexport type XsdLoader = (\n schemaLocation: string,\n basePath: string,\n) => string | null;\n\n/** Options for schema loading */\nexport interface LoaderOptions {\n /** Base directory for resolving relative paths */\n basePath?: string;\n /** Custom loader function (default: reads from filesystem) */\n loader?: XsdLoader;\n /**\n * Automatically link schemaLocation references (default: false)\n * Populates $imports/$includes with actual Schema objects.\n * The schema structure is preserved - use this when you need cross-schema type resolution.\n */\n autoLink?: boolean;\n /**\n * Fully resolve the schema after linking (default: false)\n * Flattens all imports/includes into a single self-contained schema.\n * Use this when you need a single schema with all types merged.\n * Implies autoLink: true.\n */\n autoResolve?: boolean;\n /** Throw error if referenced schema cannot be loaded (default: false) */\n throwOnMissing?: boolean;\n}\n\n// =============================================================================\n// Default Loader\n// =============================================================================\n\n/**\n * Default XSD loader - reads from filesystem\n */\nexport function defaultLoader(\n schemaLocation: string,\n basePath: string,\n): string | null {\n const fullPath = resolve(basePath, schemaLocation);\n if (!existsSync(fullPath)) {\n return null;\n }\n return readFileSync(fullPath, 'utf-8');\n}\n\n// =============================================================================\n// Schema Loader Functions\n// =============================================================================\n\n/**\n * Load and parse a single XSD file.\n *\n * @param schemaPath - Path to the XSD file\n * @param options - Loader options\n * @param options.autoLink - Populate $imports/$includes with loaded schemas (preserves structure)\n * @param options.autoResolve - Flatten into single schema with all types merged (implies autoLink)\n * @returns Parsed schema\n *\n * @example\n * ```typescript\n * // Just parse - no linking\n * const schema = loadSchema('/path/to/schema.xsd');\n *\n * // Link - populate $imports/$includes (preserves multi-schema structure)\n * const linked = loadSchema('/path/to/schema.xsd', { autoLink: true });\n * // linked.$imports contains actual Schema objects\n *\n * // Resolve - flatten everything into one schema\n * const resolved = loadSchema('/path/to/schema.xsd', { autoResolve: true });\n * // resolved has all types merged, no $imports/$includes\n * ```\n */\nexport function loadSchema(\n schemaPath: string,\n options: LoaderOptions = {},\n): Schema {\n const {\n basePath = dirname(schemaPath),\n loader = defaultLoader,\n autoLink = false,\n autoResolve = false,\n throwOnMissing = false,\n } = options;\n\n const content = loader(schemaPath, basePath);\n if (!content) {\n throw new Error(`Failed to load schema: ${schemaPath}`);\n }\n\n let schema = parseXsd(content);\n // Set $filename for reference\n Object.assign(schema, { $filename: schemaPath });\n\n // Auto-link if requested (or if autoResolve is set)\n if (autoLink || autoResolve) {\n linkSchema(schema, { basePath, loader, throwOnMissing });\n }\n\n // Auto-resolve if requested - flatten into single schema\n if (autoResolve) {\n schema = resolveSchema(schema);\n }\n\n return schema;\n}\n\n/**\n * Load and parse XSD content from a string.\n */\nexport function parseSchemaContent(content: string, filename?: string): Schema {\n const schema = parseXsd(content);\n if (filename) {\n Object.assign(schema, { $filename: filename });\n }\n return schema;\n}\n\n/**\n * Create a schema loader function that can be passed to the resolver.\n * The resolver will call this to load schemas referenced by schemaLocation.\n */\nexport function createSchemaLoader(\n basePath: string,\n loader: XsdLoader = defaultLoader,\n): (schemaLocation: string) => Schema | null {\n const cache = new Map<string, Schema>();\n\n return (schemaLocation: string): Schema | null => {\n const fullPath = resolve(basePath, schemaLocation);\n\n // Check cache\n const cached = cache.get(fullPath);\n if (cached) {\n return cached;\n }\n\n // Load and parse\n const content = loader(schemaLocation, basePath);\n if (!content) {\n return null;\n }\n\n const schema = parseXsd(content);\n Object.assign(schema, { $filename: schemaLocation });\n cache.set(fullPath, schema);\n\n return schema;\n };\n}\n\n// =============================================================================\n// Schema Linking - Resolve schemaLocation references\n// =============================================================================\n\n/** Options for schema linking */\nexport interface LinkOptions {\n /** Base directory for resolving relative schemaLocation paths */\n basePath: string;\n /** Custom loader function (default: reads from filesystem) */\n loader?: XsdLoader;\n /** Whether to throw on missing schemas (default: false - skip missing) */\n throwOnMissing?: boolean;\n}\n\n/**\n * Link a schema by resolving all schemaLocation references.\n *\n * Processes:\n * - xs:import → populates $imports\n * - xs:include → populates $includes\n * - xs:redefine → loads base schema, keeps redefinitions in redefine array\n * - xs:override → loads base schema, keeps overrides in override array\n *\n * @param schema - Schema to link (will be mutated with $imports/$includes)\n * @param options - Link options including basePath for resolving paths\n * @returns The same schema with $imports and $includes populated\n *\n * @example\n * ```typescript\n * const schema = parseXsd(xsdContent);\n * linkSchema(schema, { basePath: '/path/to/xsd/files' });\n * // schema.$imports and schema.$includes are now populated\n * ```\n */\nexport function linkSchema(schema: Schema, options: LinkOptions): Schema {\n const { basePath, loader = defaultLoader, throwOnMissing = true } = options;\n\n // Cache to prevent infinite loops and duplicate loading\n const cache = new Map<string, Schema>();\n const inProgress = new Set<string>();\n\n // Helper to load and link a schema by schemaLocation\n const loadAndLink = (\n schemaLocation: string,\n currentBasePath: string,\n ): Schema | null => {\n const fullPath = resolve(currentBasePath, schemaLocation);\n\n // Check cache first\n const cached = cache.get(fullPath);\n if (cached) return cached;\n\n // Detect circular references\n if (inProgress.has(fullPath)) {\n return cache.get(fullPath) ?? null;\n }\n\n // Load the schema\n const content = loader(schemaLocation, currentBasePath);\n if (!content) {\n if (throwOnMissing) {\n throw new Error(\n `Failed to load schema: ${schemaLocation} (resolved: ${fullPath})`,\n );\n }\n return null;\n }\n\n // Parse and mark as in progress\n const loadedSchema = parseXsd(content);\n Object.assign(loadedSchema, { $filename: schemaLocation });\n inProgress.add(fullPath);\n cache.set(fullPath, loadedSchema);\n\n // Recursively link the loaded schema\n const newBasePath = dirname(fullPath);\n linkSchemaInternal(loadedSchema, newBasePath);\n\n inProgress.delete(fullPath);\n return loadedSchema;\n };\n\n // Internal linking function\n const linkSchemaInternal = (s: Schema, currentBasePath: string): void => {\n const imports: Schema[] = [];\n const includes: Schema[] = [];\n\n // Process xs:import elements\n if (s.import) {\n for (const imp of s.import) {\n if (imp.schemaLocation) {\n const linked = loadAndLink(imp.schemaLocation, currentBasePath);\n if (linked) {\n imports.push(linked);\n }\n }\n }\n }\n\n // Process xs:include elements\n if (s.include) {\n for (const inc of s.include) {\n if (inc.schemaLocation) {\n const linked = loadAndLink(inc.schemaLocation, currentBasePath);\n if (linked) {\n includes.push(linked);\n }\n }\n }\n }\n\n // Process xs:redefine elements - load base schema and attach to redefine.$schema\n if (s.redefine) {\n for (const redef of s.redefine) {\n if (redef.schemaLocation) {\n const linked = loadAndLink(redef.schemaLocation, currentBasePath);\n if (linked) {\n // Attach base schema directly to redefine element\n Object.assign(redef, { $schema: linked });\n }\n }\n }\n }\n\n // Process xs:override elements - load base schema and attach to override.$schema\n if (s.override) {\n for (const ovr of s.override) {\n if (ovr.schemaLocation) {\n const linked = loadAndLink(ovr.schemaLocation, currentBasePath);\n if (linked) {\n // Attach base schema directly to override element\n Object.assign(ovr, { $schema: linked });\n }\n }\n }\n }\n\n // Set $imports and $includes\n if (imports.length > 0) {\n Object.assign(s, { $imports: imports });\n }\n if (includes.length > 0) {\n Object.assign(s, { $includes: includes });\n }\n };\n\n // Start linking from the root schema\n linkSchemaInternal(schema, basePath);\n\n return schema;\n}\n\n/**\n * Load and link a schema from a file path.\n * Convenience function that combines loadSchema + linkSchema.\n *\n * @param schemaPath - Path to the XSD file\n * @param options - Optional loader options\n * @returns Fully linked schema with $imports and $includes populated\n *\n * @example\n * ```typescript\n * const schema = loadAndLinkSchema('/path/to/schema.xsd');\n * // schema.$imports and schema.$includes are populated\n * // Ready for type inference or resolution\n * ```\n */\nexport function loadAndLinkSchema(\n schemaPath: string,\n options: Omit<LoaderOptions, 'basePath'> = {},\n): Schema {\n const basePath = dirname(schemaPath);\n const schema = loadSchema(schemaPath, { ...options, basePath });\n return linkSchema(schema, { basePath, loader: options.loader });\n}\n","/**\n * Config Runner\n *\n * Executes the generator pipeline based on configuration.\n */\n\nimport {\n readFileSync,\n writeFileSync,\n mkdirSync,\n existsSync,\n rmSync,\n} from 'node:fs';\nimport { join, dirname, relative, isAbsolute, basename } from 'node:path';\nimport { parseXsd } from '../xsd';\nimport { linkSchema } from '../xsd/loader';\nimport type {\n CodegenConfig,\n SchemaInfo,\n SourceInfo,\n SetupContext,\n TransformContext,\n FinalizeContext,\n AfterAllContext,\n} from './types';\n\n// ============================================================================\n// Runner\n// ============================================================================\n\nexport interface RunnerOptions {\n /** Root directory (where config file is located) */\n rootDir: string;\n /** Dry run - don't write files, just return what would be written */\n dryRun?: boolean;\n /** Verbose logging */\n verbose?: boolean;\n}\n\nexport interface RunnerResult {\n /** Files that were written (or would be written in dry run) */\n files: Array<{ path: string; source: string }>;\n /** Schemas that were processed */\n schemas: Array<{ name: string; source: string }>;\n /** Errors that occurred */\n errors: Array<{ schema?: string; source?: string; error: Error }>;\n}\n\n/**\n * Run the codegen pipeline\n */\nexport async function runCodegen(\n config: CodegenConfig,\n options: RunnerOptions,\n): Promise<RunnerResult> {\n const { rootDir, dryRun = false, verbose = false } = options;\n const result: RunnerResult = { files: [], schemas: [], errors: [] };\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const log = verbose ? console.log.bind(console) : () => {};\n\n // Build source info map - expand schemas if autoLink is enabled\n const sources: Record<string, SourceInfo> = {};\n for (const [name, sourceConfig] of Object.entries(config.sources)) {\n const xsdDir = isAbsolute(sourceConfig.xsdDir)\n ? sourceConfig.xsdDir\n : join(rootDir, sourceConfig.xsdDir);\n\n // If autoLink is enabled, discover all dependent schemas\n let schemas = sourceConfig.schemas;\n if (sourceConfig.autoLink) {\n schemas = discoverDependentSchemas(sourceConfig.schemas, xsdDir, log);\n }\n\n sources[name] = {\n name,\n xsdDir,\n outputDir: isAbsolute(sourceConfig.outputDir)\n ? sourceConfig.outputDir\n : join(rootDir, sourceConfig.outputDir),\n schemas,\n };\n }\n\n // Setup context\n const setupCtx: SetupContext = { sources, rootDir };\n\n // Clean output directories if requested\n if (config.clean) {\n log(`\\n🧹 Cleaning output directories...`);\n for (const source of Object.values(sources)) {\n if (existsSync(source.outputDir)) {\n rmSync(source.outputDir, { recursive: true, force: true });\n log(` ✅ Cleaned ${relative(rootDir, source.outputDir)}`);\n }\n }\n }\n\n // Run beforeAll hook\n if (config.beforeAll) {\n log(`\\n🔧 Running beforeAll hook...`);\n await config.beforeAll({ sources, rootDir });\n }\n\n // Run setup for all generators\n for (const generator of config.generators) {\n if (generator.setup) {\n log(`[${generator.name}] Running setup...`);\n await generator.setup(setupCtx);\n }\n }\n\n // First pass: parse ALL schemas from ALL sources into a global map\n // This is needed for cross-source type resolution (e.g., custom schemas importing SAP schemas)\n const processedSchemas = new Map<string, SchemaInfo[]>();\n const globalAllSchemas = new Map<string, SchemaInfo>();\n\n /**\n * Recursively discover and parse schemas referenced via xs:include or xs:redefine.\n * This ensures schemas like types/devc.xsd are in globalAllSchemas when devc.xsd references them.\n *\n * @param schema - The parsed schema object\n * @param xsdDir - The root XSD directory (e.g., '.xsd')\n * @param currentXsdPath - The path of the current XSD file (for resolving relative paths)\n * @param sourceName - The source name for logging\n * @param discovered - Set of already discovered schema names\n */\n function discoverReferencedSchemas(\n schema: Record<string, unknown>,\n xsdDir: string,\n currentXsdPath: string,\n sourceName: string,\n discovered: Set<string> = new Set(),\n ): void {\n // Get includes and redefines from schema\n const includes = schema.include as\n | Array<{ schemaLocation?: string }>\n | undefined;\n const redefines = schema.redefine as\n | Array<{ schemaLocation?: string }>\n | undefined;\n const refs = [...(includes ?? []), ...(redefines ?? [])];\n\n for (const ref of refs) {\n if (!ref.schemaLocation) continue;\n\n // Get schema name with path (e.g., \"types/devc\" from \"types/devc.xsd\")\n const schemaNameWithPath = ref.schemaLocation.replace(/\\.xsd$/, '');\n\n // Skip if already discovered or already in global map\n if (\n discovered.has(schemaNameWithPath) ||\n globalAllSchemas.has(schemaNameWithPath)\n ) {\n continue;\n }\n discovered.add(schemaNameWithPath);\n\n // Resolve the referenced schema path relative to the current XSD file's directory\n const currentXsdDir = dirname(currentXsdPath);\n const refXsdPath = join(currentXsdDir, ref.schemaLocation);\n if (!existsSync(refXsdPath)) {\n log(\n ` ⚠️ Referenced schema not found: ${ref.schemaLocation} (resolved from ${currentXsdDir})`,\n );\n continue;\n }\n\n try {\n const refXsdContent = readFileSync(refXsdPath, 'utf-8');\n const refSchema = parseXsd(refXsdContent);\n\n // Set $filename with path for proper identification\n (refSchema as { $filename?: string }).$filename = ref.schemaLocation;\n\n const refSchemaInfo: SchemaInfo = {\n name: schemaNameWithPath,\n xsdContent: refXsdContent,\n schema: refSchema,\n sourceName,\n xsdPath: refXsdPath,\n };\n\n // Add to global map with path-qualified name\n globalAllSchemas.set(schemaNameWithPath, refSchemaInfo);\n log(` 📎 Auto-discovered: ${schemaNameWithPath}`);\n\n // Recursively discover schemas referenced by this one\n discoverReferencedSchemas(\n refSchema as Record<string, unknown>,\n xsdDir,\n refXsdPath,\n sourceName,\n discovered,\n );\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n log(\n ` ⚠️ Failed to parse referenced schema ${ref.schemaLocation}: ${err.message}`,\n );\n }\n }\n }\n\n for (const [sourceName, source] of Object.entries(sources)) {\n log(`\\n📦 Processing source: ${sourceName}`);\n const schemaInfos: SchemaInfo[] = [];\n\n for (const schemaName of source.schemas) {\n const xsdPath = join(source.xsdDir, `${schemaName}.xsd`);\n\n if (!existsSync(xsdPath)) {\n log(` ⚠️ Skipping ${schemaName} - XSD not found`);\n continue;\n }\n\n try {\n const xsdContent = readFileSync(xsdPath, 'utf-8');\n const schema = parseXsd(xsdContent);\n\n // Set $filename for schema identification (used by linkSchemas and interface generator)\n (schema as { $filename?: string }).$filename = `${schemaName}.xsd`;\n\n // Link schema - populates $imports/$includes from schemaLocation references\n // This is done once here so generators receive pre-linked schemas\n const basePath = dirname(xsdPath);\n linkSchema(schema, { basePath, throwOnMissing: false });\n\n const schemaInfo: SchemaInfo = {\n name: schemaName,\n xsdContent,\n schema,\n sourceName,\n xsdPath,\n };\n\n schemaInfos.push(schemaInfo);\n // Add to global map with unique key (sourceName/schemaName to avoid collisions)\n globalAllSchemas.set(schemaName, schemaInfo);\n result.schemas.push({ name: schemaName, source: sourceName });\n\n // Auto-discover schemas referenced via xs:include or xs:redefine\n discoverReferencedSchemas(\n schema as Record<string, unknown>,\n source.xsdDir,\n xsdPath,\n sourceName,\n );\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n log(` ❌ Failed to parse ${schemaName}: ${err.message}`);\n result.errors.push({\n schema: schemaName,\n source: sourceName,\n error: err,\n });\n }\n }\n\n processedSchemas.set(sourceName, schemaInfos);\n }\n\n // Second pass: run transforms with global schema map\n for (const [sourceName, source] of Object.entries(sources)) {\n const schemaInfos = processedSchemas.get(sourceName) ?? [];\n\n for (const schemaInfo of schemaInfos) {\n const transformCtx: TransformContext = {\n schema: schemaInfo,\n source,\n allSchemas: globalAllSchemas, // Use global map for cross-source resolution\n allSources: sources,\n rootDir,\n resolveImport: createImportResolver(\n schemaInfo,\n source,\n sources,\n config,\n ),\n };\n\n for (const generator of config.generators) {\n if (generator.transform) {\n try {\n const files = await generator.transform(transformCtx);\n for (const file of files) {\n const fullPath = join(source.outputDir, file.path);\n\n if (!dryRun) {\n mkdirSync(dirname(fullPath), { recursive: true });\n writeFileSync(fullPath, file.content);\n }\n\n result.files.push({ path: fullPath, source: sourceName });\n log(` ✅ [${generator.name}] Generated ${file.path}`);\n }\n } catch (error) {\n const err =\n error instanceof Error ? error : new Error(String(error));\n log(\n ` ❌ [${generator.name}] Failed ${schemaInfo.name}: ${err.message}`,\n );\n result.errors.push({\n schema: schemaInfo.name,\n source: sourceName,\n error: err,\n });\n }\n }\n }\n }\n }\n\n // Run finalize for all generators\n const finalizeCtx: FinalizeContext = {\n processedSchemas,\n sources,\n rootDir,\n };\n\n for (const generator of config.generators) {\n if (generator.finalize) {\n try {\n log(`\\n[${generator.name}] Running finalize...`);\n const files = await generator.finalize(finalizeCtx);\n\n for (const file of files) {\n // Finalize files go to each source's output dir\n for (const [sourceName, source] of Object.entries(sources)) {\n const fullPath = join(source.outputDir, file.path);\n\n if (!dryRun) {\n mkdirSync(dirname(fullPath), { recursive: true });\n writeFileSync(fullPath, file.content);\n }\n\n result.files.push({ path: fullPath, source: sourceName });\n log(\n ` ✅ [${generator.name}] Generated ${file.path} for ${sourceName}`,\n );\n }\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n log(` ❌ [${generator.name}] Finalize failed: ${err.message}`);\n result.errors.push({ error: err });\n }\n }\n }\n\n // Run afterAll hook\n if (config.afterAll) {\n log(`\\n🔧 Running afterAll hook...`);\n const afterAllCtx: AfterAllContext = {\n sources,\n rootDir,\n processedSchemas,\n generatedFiles: result.files.map((f) => ({ path: f.path, content: '' })), // Content not tracked\n };\n\n const extraFiles = await config.afterAll(afterAllCtx);\n if (extraFiles && Array.isArray(extraFiles)) {\n for (const file of extraFiles) {\n const fullPath = join(rootDir, file.path);\n\n if (!dryRun) {\n mkdirSync(dirname(fullPath), { recursive: true });\n writeFileSync(fullPath, file.content);\n }\n\n result.files.push({ path: fullPath, source: 'afterAll' });\n log(` ✅ [afterAll] Generated ${file.path}`);\n }\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Import Resolution\n// ============================================================================\n\nfunction createImportResolver(\n currentSchema: SchemaInfo,\n currentSource: SourceInfo,\n allSources: Record<string, SourceInfo>,\n config: CodegenConfig,\n): (schemaLocation: string) => string | null {\n const ext = config.importExtension ?? ''; // Default to extensionless for bundler compatibility\n\n return (schemaLocation: string) => {\n // Remove .xsd extension but preserve path (e.g., \"types/dd01v.xsd\" -> \"types/dd01v\")\n const schemaPath = schemaLocation.replace(/\\.xsd$/, '');\n // Also try just the base name for backward compatibility\n const schemaBaseName = schemaPath.replace(/^.*\\//, '');\n\n // Get the directory of the current schema (for resolving relative paths)\n // e.g., \"sap/classes\" -> \"sap\", \"custom/discovery\" -> \"custom\"\n const currentSchemaDir = dirname(currentSchema.name);\n\n // Resolve the schemaLocation relative to the current schema's directory\n // e.g., if current is \"sap/classes\" and schemaLocation is \"adtcore.xsd\" -> \"sap/adtcore\"\n // e.g., if current is \"custom/discovery\" and schemaLocation is \"../sap/atom.xsd\" -> \"sap/atom\"\n const resolvedPath =\n currentSchemaDir !== '.'\n ? join(currentSchemaDir, schemaPath).replaceAll(/\\\\/g, '/')\n : schemaPath;\n\n // Normalize the path (handle ../ etc.)\n const normalizedPath = resolvedPath\n .split('/')\n .reduce((acc: string[], part) => {\n if (part === '..') acc.pop();\n else if (part !== '.') acc.push(part);\n return acc;\n }, [])\n .join('/');\n\n // Check if the resolved path is in the current source\n if (currentSource.schemas.includes(normalizedPath)) {\n // Calculate relative import path from current schema to target\n const fromDir = dirname(currentSchema.name);\n const toPath = normalizedPath;\n const relImport =\n fromDir === dirname(toPath)\n ? `./${basename(toPath)}${ext}`\n : relative(fromDir || '.', toPath).replaceAll(/\\\\/g, '/') ||\n `./${basename(toPath)}`;\n return relImport.startsWith('.')\n ? `${relImport}${ext}`\n : `./${relImport}${ext}`;\n }\n\n // Try the original schemaPath (for backward compatibility with flat structures)\n if (currentSource.schemas.includes(schemaPath)) {\n return `./${schemaPath}${ext}`;\n }\n if (currentSource.schemas.includes(schemaBaseName)) {\n return `./${schemaBaseName}${ext}`;\n }\n\n // Check other sources\n for (const [sourceName, source] of Object.entries(allSources)) {\n if (sourceName === currentSource.name) continue;\n\n if (source.schemas.includes(normalizedPath)) {\n const relPath = relative(currentSource.outputDir, source.outputDir);\n return `${relPath}/${normalizedPath}${ext}`.replaceAll(/\\\\/g, '/');\n }\n if (source.schemas.includes(schemaPath)) {\n const relPath = relative(currentSource.outputDir, source.outputDir);\n return `${relPath}/${schemaPath}${ext}`.replaceAll(/\\\\/g, '/');\n }\n if (source.schemas.includes(schemaBaseName)) {\n const relPath = relative(currentSource.outputDir, source.outputDir);\n return `${relPath}/${schemaBaseName}${ext}`.replaceAll(/\\\\/g, '/');\n }\n }\n\n return null;\n };\n}\n\n// ============================================================================\n// Schema Discovery\n// ============================================================================\n\n/**\n * Discover all dependent schemas by recursively parsing XSD files\n * and extracting schemaLocation from xs:import, xs:include, xs:redefine\n */\nfunction discoverDependentSchemas(\n entrySchemas: string[],\n xsdDir: string,\n log: (...args: unknown[]) => void,\n): string[] {\n const discovered = new Set<string>();\n const queue = [...entrySchemas];\n\n while (queue.length > 0) {\n const schemaName = queue.shift();\n if (!schemaName) continue;\n\n // Skip if already processed\n if (discovered.has(schemaName)) continue;\n\n // Try to find and parse the XSD file\n const xsdPath = join(xsdDir, `${schemaName}.xsd`);\n if (!existsSync(xsdPath)) {\n throw new Error(\n `Schema not found: ${schemaName}.xsd (resolved: ${xsdPath})`,\n );\n }\n\n discovered.add(schemaName);\n\n try {\n const xsdContent = readFileSync(xsdPath, 'utf-8');\n const schema = parseXsd(xsdContent);\n\n // Extract schemaLocation from import, include, redefine\n const deps = extractSchemaLocations(schema, xsdDir, schemaName);\n\n for (const dep of deps) {\n if (!discovered.has(dep)) {\n queue.push(dep);\n log(` 🔗 Discovered dependency: ${dep} (from ${schemaName})`);\n }\n }\n } catch {\n log(` ❌ Failed to parse ${schemaName} for dependency discovery`);\n }\n }\n\n return Array.from(discovered);\n}\n\n/**\n * Extract schema names from schemaLocation attributes\n */\nfunction extractSchemaLocations(\n schema: Record<string, unknown>,\n xsdDir: string,\n currentSchema: string,\n): string[] {\n const locations: string[] = [];\n const currentDir = dirname(join(xsdDir, `${currentSchema}.xsd`));\n\n // xs:import\n const imports = schema.import as\n | Array<{ schemaLocation?: string }>\n | undefined;\n if (imports) {\n for (const imp of imports) {\n if (imp.schemaLocation) {\n const name = resolveSchemaName(imp.schemaLocation, currentDir, xsdDir);\n if (name) locations.push(name);\n }\n }\n }\n\n // xs:include\n const includes = schema.include as\n | Array<{ schemaLocation?: string }>\n | undefined;\n if (includes) {\n for (const inc of includes) {\n if (inc.schemaLocation) {\n const name = resolveSchemaName(inc.schemaLocation, currentDir, xsdDir);\n if (name) locations.push(name);\n }\n }\n }\n\n // xs:redefine\n const redefines = schema.redefine as\n | Array<{ schemaLocation?: string }>\n | undefined;\n if (redefines) {\n for (const red of redefines) {\n if (red.schemaLocation) {\n const name = resolveSchemaName(red.schemaLocation, currentDir, xsdDir);\n if (name) locations.push(name);\n }\n }\n }\n\n return locations;\n}\n\n/**\n * Resolve schemaLocation to a schema name relative to xsdDir\n */\nfunction resolveSchemaName(\n schemaLocation: string,\n currentDir: string,\n xsdDir: string,\n): string | null {\n // Resolve the full path\n const fullPath = join(currentDir, schemaLocation);\n\n // Make it relative to xsdDir\n const relativePath = relative(xsdDir, fullPath);\n\n // Remove .xsd extension\n const name = relativePath.replace(/\\.xsd$/, '');\n\n // Check if file exists\n if (existsSync(fullPath)) {\n return name;\n }\n\n return null;\n}\n"],"mappings":"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"}