@atomic-ehr/codegen 0.0.9 → 0.0.10-canary.20260327083848.a80dea0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/common-log.ts","../src/utils/log.ts","../src/api/writer-generator/utils.ts","../src/api/writer-generator/writer.ts","../src/typeschema/types.ts","../src/api/writer-generator/csharp/formatHelper.ts","../src/api/writer-generator/csharp/csharp.ts","../src/typeschema/utils.ts","../src/api/writer-generator/python.ts","../src/typeschema/skip-hack.ts","../src/typeschema/core/identifier.ts","../src/typeschema/core/binding.ts","../src/fhir-types/hl7-fhir-r4-core/CodeSystem.ts","../src/fhir-types/hl7-fhir-r4-core/ValueSet.ts","../src/typeschema/register.ts","../src/typeschema/core/nested-types.ts","../src/typeschema/core/field-builder.ts","../src/typeschema/core/profile-extensions.ts","../src/typeschema/core/transformer.ts","../src/typeschema/index.ts","../src/typeschema/ir/logic-promotion.ts","../src/typeschema/ir/tree-shake.ts","../src/api/writer-generator/introspection.ts","../src/typeschema/ir/report.ts","../src/api/writer-generator/ir-report.ts","../src/api/mustache/generator/DebugMixinProvider.ts","../src/api/mustache/generator/LambdaMixinProvider.ts","../src/api/mustache/generator/NameGenerator.ts","../src/api/mustache/generator/TemplateFileCache.ts","../src/api/mustache/generator/ListElementInformationMixinProvider.ts","../src/api/mustache/types.ts","../src/api/mustache/generator/ViewModelFactory.ts","../src/api/writer-generator/mustache.ts","../src/api/writer-generator/typescript/name.ts","../src/api/writer-generator/typescript/utils.ts","../src/api/writer-generator/typescript/profile-extensions.ts","../src/api/writer-generator/typescript/profile-slices.ts","../src/api/writer-generator/typescript/profile-validation.ts","../src/api/writer-generator/typescript/profile.ts","../src/api/writer-generator/typescript/writer.ts","../src/api/builder.ts"],"names":["s","Path","packageMeta","fs","typeSchemas","resolve","schema","afs","Path3","PRIMITIVE_TYPE_MAP","canonicalToName","Path4","fileURLToPath","assert","format","isStructureDefinition","pkg","f","treeShake","shaked","YAML","nested","Path7","fs5","name","tsFieldName","isRequired","Path8","exports","fs6","CanonicalManager","Path9"],"mappings":"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","file":"index.js","sourcesContent":["import pc from \"picocolors\";\n\nexport type LogLevel = \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\" | \"SILENT\";\n\nexport type LogEntry<T extends string = string> = {\n level: LogLevel;\n tag?: T;\n message: string;\n suppressed: boolean;\n prefix: string;\n timestamp: number;\n};\n\nexport type Log<T extends string = string> = {\n warn: TaggedLogFn<T>;\n dryWarn: TaggedLogFn<T>;\n info: TaggedLogFn<T>;\n error: TaggedLogFn<T>;\n debug: TaggedLogFn<T>;\n};\n\nexport type LogManager<T extends string = string> = Log<T> & {\n fork(prefix: string, opts?: Partial<LoggerOptions<T>>): LogManager<T>;\n as<Narrower extends string>(): LogManager<Narrower>;\n\n tagCounts(): Readonly<Record<string, number>>;\n printTagSummary(): void;\n\n buffer(): readonly LogEntry<T>[];\n bufferClear(): void;\n};\n\ntype TagsOf<L> = L extends LogManager<infer T> ? T : never;\n\nexport type ExtendLogManager<Extra extends string, Parent extends LogManager<any>> = LogManager<TagsOf<Parent> | Extra>;\n\ntype TaggedLogFn<T extends string> = (...args: [string] | [T, string]) => void;\n\nexport type LoggerOptions<T extends string> = {\n prefix?: string;\n suppressTags?: T[];\n level?: LogLevel;\n};\n\nconst LEVEL_PRIORITY: Record<LogLevel, number> = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, SILENT: 4 };\n\nexport function mkLogger<T extends string>(opts: LoggerOptions<T> = {}): LogManager<T> {\n const prefix = opts.prefix ?? \"\";\n const suppressedSet = new Set<string>(opts.suppressTags ?? []);\n const tagCounts: Record<string, number> = {};\n const entries: LogEntry<T>[] = [];\n const drySet = new Set<string>();\n const currentLevel: LogLevel = opts.level ?? \"INFO\";\n\n const shouldLog = (level: LogLevel): boolean => LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[currentLevel];\n\n const colorize: Record<LogLevel, (s: string) => string> = {\n DEBUG: (s) => s,\n INFO: (s) => s,\n WARN: pc.yellow,\n ERROR: pc.red,\n SILENT: (s) => s,\n };\n\n const fmt = (level: LogLevel, icon: string, msg: string, tag?: string) => {\n const pfx = prefix ? `${prefix}: ` : \"\";\n const tagSuffix = tag ? ` ${pc.dim(`(${tag})`)}` : \"\";\n return colorize[level](`${icon} ${pfx}${msg}`) + tagSuffix;\n };\n\n const pushEntry = (level: LogLevel, msg: string, tag?: T, suppressed = false) => {\n entries.push({ level, tag, message: msg, suppressed, prefix, timestamp: Date.now() });\n };\n\n const mkLogFn = (\n level: LogLevel,\n icon: string,\n consoleFn: (...args: any[]) => void,\n dedupe = false,\n ): TaggedLogFn<T> => {\n return (...args: [string] | [T, string]) => {\n const tag = args.length === 2 ? args[0] : undefined;\n const msg = args.length === 2 ? args[1] : args[0];\n if (tag) tagCounts[tag] = (tagCounts[tag] ?? 0) + 1;\n const isSuppressed = tag !== undefined && suppressedSet.has(tag);\n pushEntry(level, msg, tag, isSuppressed);\n if (isSuppressed) return;\n if (!shouldLog(level)) return;\n if (dedupe) {\n const key = `${level}::${tag ?? \"\"}::${msg}`;\n if (drySet.has(key)) return;\n drySet.add(key);\n }\n consoleFn(fmt(level, icon, msg, tag));\n };\n };\n\n const logger: LogManager<T> = {\n warn: mkLogFn(\"WARN\", \"!\", console.warn),\n dryWarn: mkLogFn(\"WARN\", \"!\", console.warn, true),\n info: mkLogFn(\"INFO\", \"i\", console.log),\n error: mkLogFn(\"ERROR\", \"X\", console.error),\n debug: mkLogFn(\"DEBUG\", \"D\", console.log),\n\n fork(childPrefix: string, childOpts?: Partial<LoggerOptions<T>>): LogManager<T> {\n const fullPrefix = prefix ? `${prefix}/${childPrefix}` : childPrefix;\n const merged = [...suppressedSet, ...(childOpts?.suppressTags ?? [])] as T[];\n return mkLogger<T>({\n prefix: fullPrefix,\n suppressTags: merged,\n level: childOpts?.level ?? currentLevel,\n });\n },\n\n as<Narrower extends string>(): LogManager<Narrower> {\n return logger as unknown as LogManager<Narrower>;\n },\n\n tagCounts(): Readonly<Record<string, number>> {\n return tagCounts;\n },\n\n printTagSummary() {\n const allTags = Object.entries(tagCounts);\n if (allTags.length === 0) return;\n const pfx = prefix ? `${prefix}: ` : \"\";\n const emitted = allTags.filter(([tag]) => !suppressedSet.has(tag));\n const suppressed = allTags.filter(([tag]) => suppressedSet.has(tag));\n if (emitted.length > 0) {\n const total = emitted.reduce((sum, [, c]) => sum + c, 0);\n const detail = emitted.map(([tag, c]) => `${tag}: ${c}`).join(\", \");\n console.warn(pc.yellow(`! ${pfx}${total} warnings (${detail})`));\n }\n if (suppressed.length > 0) {\n const total = suppressed.reduce((sum, [, c]) => sum + c, 0);\n const detail = suppressed.map(([tag, c]) => `${tag}: ${c}`).join(\", \");\n console.log(pc.dim(`i ${pfx}${total} suppressed (${detail})`));\n }\n },\n\n buffer(): readonly LogEntry<T>[] {\n return entries;\n },\n\n bufferClear() {\n entries.length = 0;\n },\n };\n\n return logger;\n}\n","import { type Log, type LoggerOptions, type LogManager, mkLogger } from \"./common-log\";\n\nexport type {\n ExtendLogManager,\n Log,\n LogEntry,\n LoggerOptions,\n LogLevel,\n LogManager,\n} from \"./common-log\";\nexport { mkLogger } from \"./common-log\";\n\nexport type CodegenTag =\n | \"#binding\"\n | \"#largeValueSet\"\n | \"#fieldTypeNotFound\"\n | \"#skipCanonical\"\n | \"#duplicateSchema\"\n | \"#duplicateCanonical\"\n | \"#resolveBase\";\n\nexport type CodegenLog = Log<CodegenTag>;\nexport type CodegenLogManager = LogManager<CodegenTag>;\n\nexport const mkCodegenLogger = (opts: LoggerOptions<CodegenTag> = {}) => mkLogger<CodegenTag>(opts);\n","import type { TypeSchema } from \"@root/typeschema\";\n\nexport const words = (s: string) => {\n return s.split(/(?<=[a-z])(?=[A-Z])|[-_.\\s]/).filter(Boolean);\n};\n\nexport const kebabCase = (s: string) => {\n return words(s)\n .map((s) => s.toLowerCase())\n .join(\"-\");\n};\n\nexport const capitalCase = (s: string) => {\n if (s.length === 0) throw new Error(\"Empty string\");\n return s[0]?.toUpperCase() + s.substring(1).toLowerCase();\n};\n\nexport const camelCase = (s: string) => {\n if (s.length === 0) throw new Error(\"Empty string\");\n const [first, ...rest] = words(s);\n return [first?.toLowerCase(), ...rest.map(capitalCase)].join(\"\");\n};\n\nexport const pascalCase = (s: string) => {\n return words(s).map(capitalCase).join(\"\");\n};\n\nexport const snakeCase = (s: string) => {\n return words(s)\n .map((s) => s.toLowerCase())\n .join(\"_\");\n};\n\nexport const uppercaseFirstLetter = (str: string): string => {\n if (!str || str.length === 0) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport const uppercaseFirstLetterOfEach = (strings: string[]): string[] => {\n return strings.map((str) => uppercaseFirstLetter(str));\n};\n\nexport function deepEqual<T>(obj1: T, obj2: T): boolean {\n if (obj1 === obj2) return true;\n\n if (obj1 === null || obj2 === null || typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n return false;\n }\n\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) return false;\n return obj1.every((item, index) => deepEqual(item, obj2[index]));\n }\n\n if (Array.isArray(obj1) || Array.isArray(obj2)) {\n return false;\n }\n\n const keys1 = Object.keys(obj1) as (keyof T)[];\n const keys2 = Object.keys(obj2) as (keyof T)[];\n\n if (keys1.length !== keys2.length) return false;\n\n return keys1.every((key) => keys2.includes(key) && deepEqual(obj1[key], obj2[key]));\n}\n\nexport const typeSchemaInfo = (schema: TypeSchema): string => {\n return `<${schema.identifier.url}> from ${schema.identifier.package}#${schema.identifier.version}`;\n};\n","import * as fs from \"node:fs\";\nimport * as fsPromises from \"node:fs/promises\";\nimport * as Path from \"node:path\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLog } from \"@root/utils/log\";\n\nexport type FileSystemWriterOptions = {\n outputDir: string;\n inMemoryOnly?: boolean;\n logger?: CodegenLog;\n resolveAssets?: (fn: string) => string;\n};\n\nexport type WriterOptions = FileSystemWriterOptions & {\n tabSize: number;\n withDebugComment?: boolean;\n commentLinePrefix: string;\n generateProfile?: boolean;\n};\n\ntype FileBufferInternal = { relPath: string; absPath: string; tokens: string[] };\nexport type FileBuffer = { relPath: string; absPath: string; content: string };\n\nexport abstract class FileSystemWriter<T extends FileSystemWriterOptions = FileSystemWriterOptions> {\n opts: T;\n currentDir?: string;\n currentFile?: { relPath: string; descriptor: number };\n writtenFilesBuffer: Record<string, FileBufferInternal> = {};\n\n constructor(opts: T) {\n this.opts = opts;\n }\n\n setOutputDir(path: string) {\n if (this.currentDir) throw new Error(\"Can't change output dir while writing\");\n this.opts.outputDir = path;\n }\n\n logger(): CodegenLog | undefined {\n return this.opts.logger;\n }\n\n onDiskMkDir(path: string) {\n if (this.opts.inMemoryOnly) return;\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n }\n\n onDiskOpenFile(relPath: string): number {\n if (this.opts.inMemoryOnly) return -1;\n return fs.openSync(relPath, \"w\");\n }\n\n onDiskCloseFile(descriptor: number) {\n if (this.opts.inMemoryOnly) return;\n fs.fsyncSync(descriptor);\n fs.closeSync(descriptor);\n }\n\n onDiskWrite(descriptor: number, token: string) {\n if (this.opts.inMemoryOnly) return;\n fs.writeSync(descriptor, token);\n }\n\n cd(path: string, gen: () => void) {\n const prev = this.currentDir;\n this.currentDir = path.startsWith(\"/\")\n ? Path.join(this.opts.outputDir, path)\n : Path.join(this.currentDir ?? this.opts.outputDir, path);\n this.onDiskMkDir(this.currentDir);\n this.logger()?.debug(`cd '${this.currentDir}'`);\n gen();\n this.currentDir = prev;\n }\n\n cat(fn: string, gen: () => void) {\n if (!this.currentDir) throw new Error(\"Should be in a directory (`cd`)\");\n if (this.currentFile) throw new Error(\"Can't open file when another file is open\");\n if (fn.includes(\"/\")) throw new Error(`Change file path separatly: ${fn}`);\n\n const relPath = Path.normalize(`${this.currentDir}/${fn}`);\n\n if (this.writtenFilesBuffer[relPath]) {\n this.logger()?.warn(`File will be rewritten '${relPath}'`);\n this.logger()?.debug(`File content: ${this.writtenFilesBuffer[relPath].tokens.join(\"\")}`);\n }\n\n try {\n const descriptor = this.onDiskOpenFile(relPath);\n\n this.logger()?.debug(`cat > '${relPath}'`);\n this.currentFile = { descriptor, relPath };\n this.writtenFilesBuffer[this.currentFile.relPath] = {\n relPath,\n absPath: Path.resolve(relPath),\n tokens: [],\n };\n\n gen();\n } finally {\n if (this.currentFile) this.onDiskCloseFile(this.currentFile.descriptor);\n this.currentFile = undefined;\n }\n }\n\n write(str: string) {\n if (!this.currentFile) throw new Error(\"No file opened\");\n this.onDiskWrite(this.currentFile.descriptor, str);\n\n const buf = this.writtenFilesBuffer[this.currentFile.relPath];\n if (!buf) throw new Error(\"No buffer found\");\n buf.tokens.push(str);\n }\n\n copyAssets(source: string, destination: string) {\n destination = Path.normalize(`${this.currentDir ?? this.opts.outputDir}/${destination}`);\n const content = fs.readFileSync(source, \"utf8\");\n this.writtenFilesBuffer[destination] = {\n relPath: destination,\n absPath: Path.resolve(destination),\n tokens: [content],\n };\n fs.cpSync(source, destination);\n }\n\n cp(source: string, destination: string) {\n if (!this.opts.resolveAssets) throw new Error(\"resolveAssets is not defined\");\n source = Path.resolve(this.opts.resolveAssets(source));\n destination = Path.normalize(`${this.currentDir ?? this.opts.outputDir}/${destination}`);\n const content = fs.readFileSync(source, \"utf8\");\n this.writtenFilesBuffer[destination] = {\n relPath: destination,\n absPath: Path.resolve(destination),\n tokens: [content],\n };\n fs.cpSync(source, destination);\n }\n\n abstract generate(_tsIndex: TypeSchemaIndex): Promise<void>;\n\n writtenFiles(): FileBuffer[] {\n return Object.values(this.writtenFilesBuffer)\n .map(({ relPath, absPath, tokens }) => {\n return { relPath, absPath, content: tokens.join(\"\") };\n })\n .sort((a, b) => a.relPath.localeCompare(b.relPath));\n }\n\n async flushAsync(): Promise<void> {\n const files = this.writtenFiles();\n const dirs = new Set<string>();\n\n for (const file of files) {\n dirs.add(Path.dirname(file.absPath));\n }\n\n await Promise.all(Array.from(dirs).map((dir) => fsPromises.mkdir(dir, { recursive: true })));\n\n await Promise.all(files.map((file) => fsPromises.writeFile(file.absPath, file.content)));\n }\n\n async generateAsync(tsIndex: TypeSchemaIndex): Promise<void> {\n const originalInMemoryOnly = this.opts.inMemoryOnly;\n this.opts.inMemoryOnly = true;\n\n try {\n await this.generate(tsIndex);\n } finally {\n this.opts.inMemoryOnly = originalInMemoryOnly;\n }\n\n await this.flushAsync();\n }\n}\n\nexport abstract class Writer<T extends WriterOptions = WriterOptions> extends FileSystemWriter<T> {\n currentIndent: number = 0;\n\n protected indent() {\n this.currentIndent += this.opts.tabSize;\n }\n\n protected deindent() {\n this.currentIndent -= this.opts.tabSize;\n }\n\n private writeIndent() {\n this.write(\" \".repeat(this.currentIndent));\n }\n\n line(...tokens: string[]) {\n if (tokens.length === 0) {\n this.write(\"\\n\");\n } else {\n this.writeIndent();\n this.write(`${tokens.join(\" \")}\\n`);\n }\n }\n\n lineSM(...tokens: string[]) {\n this.writeIndent();\n this.write(`${tokens.join(\" \")};\\n`);\n }\n\n comment(...tokens: string[]) {\n const lines = tokens.join(\" \").split(\"\\n\");\n for (const line of lines) {\n this.line(this.opts.commentLinePrefix, line);\n }\n }\n\n debugComment(...tokens: (string | any)[]) {\n if (this.opts.withDebugComment) {\n tokens = tokens.map((token) => {\n if (typeof token === \"string\") {\n return token;\n } else {\n return JSON.stringify(token, null, 2);\n }\n });\n this.comment(...tokens);\n }\n }\n\n disclaimer() {\n return [\n \"WARNING: This file is autogenerated by @atomic-ehr/codegen.\",\n \"GitHub: https://github.com/atomic-ehr/codegen\",\n \"Any manual changes made to this file may be overwritten.\",\n ];\n }\n\n generateDisclaimer() {\n this.disclaimer().forEach((e) => {\n this.comment(e);\n });\n this.line();\n }\n\n indentBlock(gencontent: () => void) {\n this.indent();\n gencontent();\n this.deindent();\n }\n\n curlyBlock(tokens: (string | undefined)[], gencontent: () => void, endTokens?: string[]) {\n this.line(`${tokens.filter(Boolean).join(\" \")} {`);\n this.indent();\n gencontent();\n this.deindent();\n this.line(`}${endTokens?.filter(Boolean).join(\" \") ?? \"\"}`);\n }\n\n squareBlock(tokens: (string | undefined)[], gencontent: () => void, endTokens?: string[]) {\n this.line(`${tokens.filter(Boolean).join(\" \")} [`);\n this.indent();\n gencontent();\n this.deindent();\n this.line(`]${endTokens?.filter(Boolean).join(\" \") ?? \"\"}`);\n }\n}\n","/**\n * A code generation friendly representation of FHIR StructureDefinition and\n * FHIR Schema designed to simplify SDK resource classes/types generation.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport type * as FS from \"@atomic-ehr/fhirschema\";\nimport type { StructureDefinition, ValueSet, ValueSetCompose } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLog } from \"@root/utils/log\";\n\nexport type Name = string & { readonly __brand: unique symbol };\nexport type CanonicalUrl = string & { readonly __brand: unique symbol };\n\nexport const extractNameFromCanonical = (canonical: CanonicalUrl, dropFragment = true) => {\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) {\n localName = localName.split(\"#\")[0];\n }\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return localName;\n};\n\nexport type ValueConstraint = {\n kind: \"pattern\" | \"fixed\";\n type: string;\n value: FS.FHIRValue;\n};\n\nexport type PkgName = string;\nexport type PkgVersion = string;\n\nexport interface PackageMeta {\n name: PkgName;\n version: PkgVersion;\n}\n\nexport const packageMeta = (schema: TypeSchema): PackageMeta => {\n return {\n name: schema.identifier.package,\n version: schema.identifier.version,\n };\n};\nexport const packageMetaToFhir = (packageMeta: PackageMeta) => `${packageMeta.name}#${packageMeta.version}`;\nexport const packageMetaToNpm = (packageMeta: PackageMeta) => `${packageMeta.name}@${packageMeta.version}`;\nexport const fhirToPackageMeta = (fhir: string) => {\n const [name, version] = fhir.split(\"#\");\n if (!name) throw new Error(`Invalid FHIR package meta: ${fhir}`);\n return { name, version: version ?? \"latest\" };\n};\nexport const npmToPackageMeta = (fhir: string) => {\n const [name, version] = fhir.split(\"@\");\n if (!name) throw new Error(`Invalid FHIR package meta: ${fhir}`);\n return { name, version: version ?? \"latest\" };\n};\n\nexport const hashSchema = (schema: TypeSchema): string => {\n const json = JSON.stringify(schema);\n return createHash(\"sha256\").update(json).digest(\"hex\").slice(0, 16);\n};\n\nexport type RichStructureDefinition = Omit<StructureDefinition, \"url\"> & {\n package_name: PkgName;\n package_version: PkgVersion;\n url: CanonicalUrl;\n};\n\nexport type RichFHIRSchema = Omit<FS.FHIRSchema, \"package_meta\" | \"base\" | \"name\" | \"url\"> & {\n package_meta: PackageMeta;\n name: Name;\n url: CanonicalUrl;\n base: CanonicalUrl;\n};\n\nexport const enrichFHIRSchema = (schema: FS.FHIRSchema, packageMeta: PackageMeta): RichFHIRSchema => {\n return {\n ...schema,\n package_meta: schema.package_meta || packageMeta,\n name: schema.name as Name,\n url: schema.url as CanonicalUrl,\n base: schema.base as CanonicalUrl,\n };\n};\n\ntype IdentifierBase = {\n name: Name;\n url: CanonicalUrl;\n package: PkgName;\n version: PkgVersion;\n};\n\ntype PrimitiveIdentifier = { kind: \"primitive-type\" } & IdentifierBase;\ntype ComplexTypeIdentifier = { kind: \"complex-type\" } & IdentifierBase;\ntype ResourceIdentifier = { kind: \"resource\" } & IdentifierBase;\nexport type ValueSetIdentifier = { kind: \"value-set\" } & IdentifierBase;\nexport type NestedIdentifier = { kind: \"nested\" } & IdentifierBase;\nexport type BindingIdentifier = { kind: \"binding\" } & IdentifierBase;\ntype ProfileIdentifier = { kind: \"profile\" } & IdentifierBase;\ntype LogicalIdentifier = { kind: \"logical\" } & IdentifierBase;\n\nexport type Identifier =\n | PrimitiveIdentifier\n | ComplexTypeIdentifier\n | ResourceIdentifier\n | NestedIdentifier\n | BindingIdentifier\n | ValueSetIdentifier\n | ProfileIdentifier\n | LogicalIdentifier;\n\nexport const isResourceIdentifier = (id: Identifier | undefined): id is ResourceIdentifier => {\n return id?.kind === \"resource\";\n};\n\nexport const isLogicalIdentifier = (id: Identifier | undefined): id is LogicalIdentifier => {\n return id?.kind === \"logical\";\n};\n\nexport const isComplexTypeIdentifier = (id: Identifier | undefined): id is ComplexTypeIdentifier => {\n return id?.kind === \"complex-type\";\n};\n\nexport const isPrimitiveIdentifier = (id: Identifier | undefined): id is PrimitiveIdentifier => {\n return id?.kind === \"primitive-type\";\n};\n\nexport const isNestedIdentifier = (id: Identifier | undefined): id is NestedIdentifier => {\n return id?.kind === \"nested\";\n};\n\nexport const isProfileIdentifier = (id: Identifier | undefined): id is ProfileIdentifier => {\n return id?.kind === \"profile\";\n};\n\nexport const concatIdentifiers = (...sources: (Identifier[] | undefined)[]): Identifier[] | undefined => {\n const entries = sources\n .filter((s): s is Identifier[] => s !== undefined)\n .flatMap((s) => s.map((id): [string, Identifier] => [id.url, id]));\n if (entries.length === 0) return undefined;\n const deduped = Object.values(Object.fromEntries(entries) as Record<string, Identifier>);\n return deduped.sort((a, b) => a.url.localeCompare(b.url));\n};\n\nexport type TypeSchema =\n | RegularTypeSchema\n | PrimitiveTypeSchema\n | ValueSetTypeSchema\n | BindingTypeSchema\n | ProfileTypeSchema;\n\nexport const isSpecializationTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return (\n schema?.identifier.kind === \"resource\" ||\n schema?.identifier.kind === \"complex-type\" ||\n schema?.identifier.kind === \"logical\"\n );\n};\n\nexport const isComplexTypeTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"complex-type\";\n};\n\nexport const isResourceTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"resource\";\n};\n\nexport const isPrimitiveTypeSchema = (schema: TypeSchema | undefined): schema is PrimitiveTypeSchema => {\n return schema?.identifier.kind === \"primitive-type\";\n};\n\nexport const isLogicalTypeSchema = (schema: TypeSchema | undefined): schema is RegularTypeSchema => {\n return schema?.identifier.kind === \"logical\";\n};\n\nexport const isProfileTypeSchema = (schema: TypeSchema | undefined): schema is ProfileTypeSchema => {\n return schema?.identifier.kind === \"profile\";\n};\n\nexport function isBindingSchema(schema: TypeSchema | undefined): schema is BindingTypeSchema {\n return schema?.identifier.kind === \"binding\";\n}\n\nexport function isValueSetTypeSchema(schema: TypeSchema | undefined): schema is ValueSetTypeSchema {\n return schema?.identifier.kind === \"value-set\";\n}\n\ninterface PrimitiveTypeSchema {\n identifier: PrimitiveIdentifier;\n description?: string;\n base: Identifier;\n dependencies?: Identifier[];\n}\n\nexport interface NestedType {\n identifier: NestedIdentifier;\n base: Identifier;\n fields: Record<string, Field>;\n}\n\nexport interface ProfileTypeSchema {\n identifier: ProfileIdentifier;\n base: Identifier;\n description?: string;\n fields?: Record<string, Field>;\n extensions?: ProfileExtension[];\n dependencies?: Identifier[];\n nested?: NestedType[];\n}\n\nexport interface FieldSlicing {\n discriminator?: Array<{ type?: string; path: string }>;\n rules?: string;\n ordered?: boolean;\n slices?: Record<string, FieldSlice>;\n}\n\nexport type ConstrainedChoiceInfo = {\n choiceBase: string;\n variant: string;\n variantType: Identifier;\n allChoiceNames: string[];\n};\n\nexport interface FieldSlice {\n min?: number;\n max?: number;\n match?: Record<string, unknown>;\n required?: string[];\n excluded?: string[];\n elements?: string[];\n}\n\nexport interface ExtensionSubField {\n name: string;\n url: string;\n valueType?: Identifier;\n min?: number;\n max?: string;\n}\n\nexport interface ProfileExtension {\n name: string;\n path: string;\n url?: string;\n min?: number;\n max?: string;\n mustSupport?: boolean;\n valueTypes?: Identifier[];\n subExtensions?: ExtensionSubField[];\n isComplex?: boolean;\n}\n\nexport interface RegularTypeSchema {\n // TODO: restrict to ResourceIdentifier | ComplexTypeIdentifier | LogicalIdentifier\n identifier: Identifier;\n base?: Identifier;\n description?: string;\n fields?: { [k: string]: Field };\n nested?: NestedType[];\n dependencies?: Identifier[];\n}\n\nexport interface RegularField {\n type: Identifier;\n reference?: Identifier[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n binding?: BindingIdentifier;\n enum?: EnumDefinition;\n min?: number;\n max?: number;\n slicing?: FieldSlicing;\n valueConstraint?: ValueConstraint;\n mustSupport?: boolean;\n}\n\nexport interface ChoiceFieldDeclaration {\n choices: string[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n min?: number;\n max?: number;\n}\n\nexport interface ChoiceFieldInstance {\n choiceOf: string;\n type: Identifier;\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n reference?: Identifier[];\n binding?: BindingIdentifier;\n enum?: EnumDefinition;\n min?: number;\n max?: number;\n slicing?: FieldSlicing;\n valueConstraint?: ValueConstraint;\n mustSupport?: boolean;\n}\n\nexport type Concept = {\n code: string;\n display?: string;\n system?: string;\n};\n\nexport type EnumDefinition = {\n values: string[];\n isOpen: boolean;\n};\n\nexport interface ValueSetTypeSchema {\n identifier: ValueSetIdentifier;\n description?: string;\n concept?: Concept[];\n compose?: ValueSetCompose;\n}\n\nexport interface BindingTypeSchema {\n identifier: BindingIdentifier;\n description?: string;\n strength?: string;\n enum?: EnumDefinition;\n valueset?: ValueSetIdentifier;\n dependencies?: Identifier[];\n}\n\nexport type Field = RegularField | ChoiceFieldDeclaration | ChoiceFieldInstance;\n\nexport const isNotChoiceDeclarationField = (field: Field | undefined): field is RegularField | ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices === undefined;\n};\n\nexport const isChoiceDeclarationField = (field: Field | undefined): field is ChoiceFieldDeclaration => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices !== undefined;\n};\n\nexport const isChoiceInstanceField = (field: Field | undefined): field is ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldInstance).choiceOf !== undefined;\n};\n\n///////////////////////////////////////////////////////////\n// ValueSet\n///////////////////////////////////////////////////////////\n\nexport type RichValueSet = Omit<ValueSet, \"name\" | \"url\"> & {\n package_meta: PackageMeta;\n name: Name;\n url: CanonicalUrl;\n};\n\nexport const enrichValueSet = (vs: ValueSet, packageMeta: PackageMeta): RichValueSet => {\n if (!vs.url) throw new Error(\"ValueSet must have a URL\");\n if (!vs.name) throw new Error(\"ValueSet must have a name\");\n return {\n ...vs,\n package_meta: (vs as RichValueSet).package_meta || packageMeta,\n name: vs.name as Name,\n url: vs.url as CanonicalUrl,\n };\n};\n\n///////////////////////////////////////////////////////////\n\nexport interface TypeschemaGeneratorOptions {\n logger?: CodegenLog;\n treeshake?: string[];\n manager: ReturnType<typeof CanonicalManager>;\n /** Custom FHIR package registry URL */\n registry?: string;\n}\n","import { camelCase, uppercaseFirstLetter } from \"../utils.ts\";\n\nconst ops: Record<string, string> = {\n \"!\": \"Not\",\n \"<=\": \"LessOrEqual\",\n \">=\": \"GreaterOrEqual\",\n \"<\": \"Less\",\n \">\": \"Greater\",\n \"=\": \"Equal\",\n \"-\": \"Dash\",\n \"+\": \"Plus\",\n \"*\": \"Asterisk\",\n \"/\": \"Slash\",\n \"%\": \"Percent\",\n \"&\": \"And\",\n \"|\": \"Or\",\n \"^\": \"Xor\",\n \"~\": \"Tilde\",\n \"?\": \"Question\",\n \".\": \"Dot\",\n};\n\nexport function formatEnumDashHandle(entry: string): string {\n return entry\n .split(\"-\")\n .map((part) => uppercaseFirstLetter(part))\n .join(\"-\");\n}\n\nexport function formatEnumEntryOperation(entry: string): string {\n let res: string = entry;\n for (const op in ops) res = res.replaceAll(op, ops[op] ?? \"\");\n return res;\n}\n\nexport function formatEnumNumber(entry: string): string {\n const num = Number(entry[0]);\n if (Number.isInteger(num) && !Number.isNaN(num)) {\n return `_${entry}`;\n }\n return entry;\n}\n\nexport function formatEnumEntry(entry: string): string {\n let res: string = formatEnumDashHandle(entry);\n res = formatEnumNumber(res);\n res = formatEnumEntryOperation(res);\n res = uppercaseFirstLetter(res);\n return res;\n}\n\nexport function formatName(input: string): string {\n return uppercaseFirstLetter(camelCase(input.replaceAll(\".\", \"-\")));\n}\n","import fs from \"node:fs\";\nimport Path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { pascalCase, uppercaseFirstLetter, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils.ts\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport type { PartialBy } from \"@root/utils/types.ts\";\nimport type { Field, Identifier, RegularField } from \"@typeschema/types\";\nimport { type ChoiceFieldInstance, isChoiceDeclarationField, type RegularTypeSchema } from \"@typeschema/types.ts\";\nimport type { TypeSchemaIndex } from \"@typeschema/utils.ts\";\nimport { formatEnumEntry, formatName } from \"./formatHelper.ts\";\n\nconst resolveCSharpAssets = (fn: string) => {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = Path.dirname(__filename);\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"csharp\", fn);\n } else {\n return Path.resolve(__dirname, \"../../../..\", \"assets\", \"api\", \"writer-generator\", \"csharp\", fn);\n }\n};\n\nconst PRIMITIVE_TYPE_MAP: Record<string, string> = {\n boolean: \"bool\",\n instant: \"string\",\n time: \"string\",\n date: \"string\",\n dateTime: \"string\",\n decimal: \"decimal\",\n integer: \"int\",\n unsignedInt: \"long\",\n positiveInt: \"long\",\n integer64: \"long\",\n base64Binary: \"string\",\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n string: \"string\",\n code: \"string\",\n markdown: \"string\",\n id: \"string\",\n xhtml: \"string\",\n};\n\nconst RESERVED_TYPE_NAMES = [\"Reference\", \"Expression\"];\n\nconst getFieldModifiers = (field: Field) => {\n return field.required ? [\"required\"] : [];\n};\n\nconst formatClassName = (schema: RegularTypeSchema) => {\n const name = prefixReservedTypeName(getResourceName(schema.identifier));\n return uppercaseFirstLetter(name);\n};\n\nconst formatBaseClass = (schema: RegularTypeSchema) => {\n return schema.base ? `: ${schema.base.name}` : \"\";\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true): string | undefined => {\n if (!canonical) return undefined;\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) localName = localName.split(\"#\")[0];\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return formatName(localName);\n};\n\nconst getResourceName = (id: Identifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n const path = canonicalToName(url, false);\n if (!path) return \"\";\n\n const [resourceName, fragment] = path.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return formatName([resourceName, name].join(\"\"));\n }\n return formatName(id.name);\n};\n\nconst isReservedTypeName = (name: string): boolean => RESERVED_TYPE_NAMES.includes(name);\n\nconst prefixReservedTypeName = (name: string): string => (isReservedTypeName(name) ? `Resource${name}` : name);\n\nexport type CSharpGeneratorOptions = WriterOptions & {\n outputDir: string;\n staticSourceDir?: string;\n rootNamespace: string;\n};\n\ninterface EnumRegistry {\n [packageName: string]: {\n [enumName: string]: string[];\n };\n}\n\nexport class CSharp extends Writer<CSharpGeneratorOptions> {\n private readonly enums: EnumRegistry = {};\n\n constructor(options: PartialBy<CSharpGeneratorOptions, \"tabSize\" | \"commentLinePrefix\">) {\n super({\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n resolveAssets: options.resolveAssets ?? resolveCSharpAssets,\n ...options,\n });\n }\n\n override async generate(typeSchemaIndex: TypeSchemaIndex): Promise<void> {\n const complexTypes = typeSchemaIndex.collectComplexTypes();\n const resources = typeSchemaIndex.collectResources();\n const packages = Array.from(new Set(resources.map((r) => formatName(r.identifier.package))));\n\n this.generateAllFiles(complexTypes, resources, packages);\n this.copyStaticFiles();\n }\n\n private generateAllFiles(\n complexTypes: RegularTypeSchema[],\n resources: RegularTypeSchema[],\n packages: string[],\n ): void {\n this.generateUsingFile(packages);\n this.generateBaseTypes(complexTypes);\n this.generateResources(resources);\n this.generateEnumFiles(packages);\n this.generateResourceDictionaries(resources, packages);\n this.generateHelperFile();\n }\n\n private generateType(schema: RegularTypeSchema, packageName: string): void {\n const className = formatClassName(schema);\n const baseClass = formatBaseClass(schema);\n\n this.curlyBlock([\"public\", \"class\", className, baseClass], () => {\n this.generateFields(schema, packageName);\n this.generateNestedTypes(schema, packageName);\n this.line();\n this.includeHelperMethods();\n });\n this.line();\n }\n\n private generateFields(schema: RegularTypeSchema, packageName: string): void {\n if (!schema.fields) return;\n\n const sortedFields = Object.entries(schema.fields).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [fieldName, field] of sortedFields) {\n this.generateField(fieldName, field, packageName);\n }\n }\n\n private generateNestedTypes(schema: RegularTypeSchema, packageName: string): void {\n if (!(\"nested\" in schema) || !schema.nested) return;\n\n this.line();\n for (const subtype of schema.nested) {\n this.generateType(subtype, packageName);\n }\n }\n\n private generateField(fieldName: string, field: Field, packageName: string): void {\n try {\n if (isChoiceDeclarationField(field)) return;\n\n const fieldDeclaration = this.buildFieldDeclaration(fieldName, field, packageName);\n this.line(...fieldDeclaration);\n } catch (error) {\n this.logger()?.error(`Error processing field ${fieldName}: ${(error as Error).message}`);\n }\n }\n\n private buildFieldDeclaration(fieldName: string, field: Field, packageName: string): string[] {\n const fieldType = this.determineFieldType(fieldName, field, packageName);\n const modifiers = getFieldModifiers(field);\n const propertyName = pascalCase(fieldName);\n const accessors = \"{ get; set; }\";\n\n return [\"public\", ...modifiers, fieldType, propertyName, accessors].filter(Boolean);\n }\n\n private determineFieldType(fieldName: string, field: Field, packageName: string): string {\n let typeName = this.getBaseTypeName(field);\n\n if (\"enum\" in field && field.enum && !field.enum.isOpen) {\n typeName = this.registerAndGetEnumType(fieldName, field, packageName);\n }\n\n typeName = prefixReservedTypeName(typeName);\n\n // questionable\n const baseNamespacePrefix = \"\";\n const nullable = field.required ? \"\" : \"?\";\n const arraySpecifier = field.array ? \"[]\" : \"\";\n\n return `${baseNamespacePrefix}${typeName}${arraySpecifier}${nullable}`;\n }\n\n private getBaseTypeName(field: Field): string {\n if (\"type\" in field) {\n let typeName = field.type.name.toString();\n\n if (field.type.kind === \"nested\") {\n typeName = getResourceName(field.type);\n } else if (field.type.kind === \"primitive-type\") typeName = PRIMITIVE_TYPE_MAP[field.type.name] ?? \"string\";\n\n return typeName;\n }\n return \"\";\n }\n\n private registerAndGetEnumType(\n fieldName: string,\n field: RegularField | ChoiceFieldInstance,\n packageName: string,\n ): string {\n const enumName = formatName(field.binding?.name ?? fieldName);\n const enumTypeName = `${enumName}Enum`;\n\n if (!this.enums[packageName]) this.enums[packageName] = {};\n if (field.enum) this.enums[packageName][enumTypeName] = field.enum.values;\n\n return enumTypeName;\n }\n\n private includeHelperMethods(): void {\n this.line(\"public override string ToString() => \");\n this.line(\" JsonSerializer.Serialize(this, Helper.JsonSerializerOptions);\");\n this.line();\n }\n\n private generateUsingFile(packages: string[]): void {\n this.cd(\"/\", async () => {\n this.cat(\"Usings.cs\", () => {\n this.generateDisclaimer();\n this.generateGlobalUsings(packages);\n });\n });\n }\n\n private generateGlobalUsings(packages: string[]): void {\n const globalUsings = [\n \"CSharpSDK\",\n \"System.Text.Json\",\n \"System.Text.Json.Serialization\",\n this.opts.rootNamespace,\n ...packages.map((pkg) => `${this.opts.rootNamespace}.${pkg}`),\n ];\n\n for (const using of globalUsings) this.lineSM(\"global\", \"using\", using);\n }\n\n private generateBaseTypes(complexTypes: RegularTypeSchema[]): void {\n this.cd(\"/\", async () => {\n this.cat(\"base.cs\", () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(\"namespace\", this.opts.rootNamespace);\n\n for (const schema of complexTypes) {\n const packageName = formatName(schema.identifier.package);\n this.generateType(schema, packageName);\n }\n });\n });\n }\n\n private generateResources(resources: RegularTypeSchema[]): void {\n for (const schema of resources) this.generateResourceFile(schema);\n }\n\n private generateResourceFile(schema: RegularTypeSchema): void {\n const packageName = formatName(schema.identifier.package);\n\n this.cd(`/${packageName}`, async () => {\n this.cat(`${schema.identifier.name}.cs`, () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(\"namespace\", `${this.opts.rootNamespace}.${packageName}`);\n this.line();\n this.generateType(schema, packageName);\n });\n });\n }\n\n private generateEnumFiles(packages: string[]): void {\n for (const packageName of packages) {\n this.generatePackageEnums(packageName);\n }\n }\n\n private generatePackageEnums(packageName: string): void {\n const packageEnums = this.enums[packageName];\n if (!packageEnums || Object.keys(packageEnums).length === 0) return;\n\n this.cd(`/${packageName}`, async () => {\n this.cat(`${packageName}Enums.cs`, () => {\n this.generateDisclaimer();\n this.generateEnumFileContent(packageName, packageEnums);\n });\n });\n }\n\n private generateEnumFileContent(packageName: string, enums: Record<string, string[]>): void {\n this.lineSM(\"using\", \"System.ComponentModel\");\n this.line();\n this.lineSM(`namespace ${this.opts.rootNamespace}.${packageName}`);\n\n for (const [enumName, values] of Object.entries(enums)) {\n this.generateEnum(enumName, values);\n }\n }\n\n private generateEnum(enumName: string, values: string[]): void {\n this.curlyBlock([\"public\", \"enum\", enumName], () => {\n for (const value of values) {\n this.line(`[Description(\"${value}\")]`);\n this.line(`${formatEnumEntry(value)},`);\n }\n });\n this.line();\n }\n\n private generateResourceDictionaries(resources: RegularTypeSchema[], packages: string[]): void {\n this.cd(\"/\", async () => {\n for (const packageName of packages) {\n const packageResources = resources.filter((r) => formatName(r.identifier.package) === packageName);\n\n if (packageResources.length === 0) return;\n\n this.cat(`${packageName}ResourceDictionary.cs`, () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(`namespace ${this.opts.rootNamespace}`);\n this.generateResourceDictionaryClass(packageName, packageResources);\n });\n }\n });\n }\n\n private generateResourceDictionaryClass(packageName: string, resources: RegularTypeSchema[]): void {\n this.curlyBlock([\"public\", \"static\", \"class\", \"ResourceDictionary\"], () => {\n this.curlyBlock([\"public static readonly Dictionary<Type, string> Map = new()\"], () => {\n for (const schema of resources) {\n const typeName = schema.identifier.name;\n this.line(`{ typeof(${packageName}.${typeName}), \"${typeName}\" },`);\n }\n });\n this.lineSM();\n });\n }\n\n private copyStaticFiles(): void {\n this.cp(\"Client.cs\", \"Client.cs\");\n this.cp(\"Helper.cs\", \"Helper.cs\");\n }\n\n private generateHelperFile(): void {\n if (this.opts.inMemoryOnly) return;\n const sourceFile = resolveCSharpAssets(\"Helper.cs\");\n const destFile = Path.join(this.opts.outputDir, \"Helper.cs\");\n fs.copyFileSync(sourceFile, destFile);\n }\n}\n","import * as afs from \"node:fs/promises\";\nimport * as Path from \"node:path\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport * as YAML from \"yaml\";\nimport type { IrReport } from \"./ir/types\";\nimport type { Register } from \"./register\";\nimport {\n type CanonicalUrl,\n type ConstrainedChoiceInfo,\n type Field,\n type Identifier,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isComplexTypeTypeSchema,\n isLogicalTypeSchema,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type PkgName,\n type ProfileExtension,\n type ProfileTypeSchema,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"./types\";\n\n///////////////////////////////////////////////////////////\n// TypeSchema processing\n\nexport const groupByPackages = (typeSchemas: TypeSchema[]): Record<PkgName, TypeSchema[]> => {\n const grouped = {} as Record<PkgName, TypeSchema[]>;\n for (const ts of typeSchemas) {\n const pkgName = ts.identifier.package;\n if (!grouped[pkgName]) grouped[pkgName] = [];\n grouped[pkgName].push(ts);\n }\n for (const [packageName, typeSchemas] of Object.entries(grouped)) {\n const dict: Record<string, TypeSchema> = {};\n for (const ts of typeSchemas) {\n dict[JSON.stringify(ts.identifier)] = ts;\n }\n const tmp = Object.values(dict);\n tmp.sort((a, b) => a.identifier.name.localeCompare(b.identifier.name));\n grouped[packageName] = tmp;\n }\n return grouped;\n};\n\nconst buildDependencyGraph = (schemas: RegularTypeSchema[]): Record<string, string[]> => {\n const nameToMap: Record<string, RegularTypeSchema> = {};\n for (const schema of schemas) {\n nameToMap[schema.identifier.name] = schema;\n }\n\n const graph: Record<string, string[]> = {};\n for (const schema of schemas) {\n const name = schema.identifier.name;\n const base = schema.base?.name;\n if (!graph[name]) {\n graph[name] = [];\n }\n if (base && nameToMap[base]) {\n graph[name].push(base);\n }\n }\n return graph;\n};\n\nconst topologicalSort = (graph: Record<string, string[]>): string[] => {\n const sorted: string[] = [];\n const visited: Record<string, boolean> = {};\n const temp: Record<string, boolean> = {};\n\n const visit = (node: string) => {\n if (temp[node]) {\n throw new Error(`Graph has cycles ${node}`);\n }\n if (!visited[node]) {\n temp[node] = true;\n for (const neighbor of graph[node] ?? []) {\n visit(neighbor);\n }\n temp[node] = false;\n visited[node] = true;\n sorted.push(node);\n }\n };\n\n for (const node in graph) {\n if (!visited[node]) {\n visit(node);\n }\n }\n return sorted;\n};\n\nexport const sortAsDeclarationSequence = (schemas: RegularTypeSchema[]): RegularTypeSchema[] => {\n const graph = buildDependencyGraph(schemas);\n const sorted = topologicalSort(graph);\n return sorted\n .map((name) => schemas.find((schema) => schema.identifier.name === name))\n .filter(Boolean) as RegularTypeSchema[];\n};\n\n///////////////////////////////////////////////////////////\n// Type Schema Relations\n\ninterface TypeRelation {\n parent: Identifier;\n child: Identifier;\n}\n\nconst resourceRelatives = (schemas: TypeSchema[]): TypeRelation[] => {\n const regularSchemas = schemas.filter(\n (e) => isResourceTypeSchema(e) || isLogicalTypeSchema(e) || isComplexTypeTypeSchema(e),\n );\n\n const directPairs: TypeRelation[] = [];\n const childrenByParent = new Map<string, Identifier[]>();\n\n for (const schema of regularSchemas) {\n if (schema.base) {\n directPairs.push({ parent: schema.base, child: schema.identifier });\n const parentName = schema.base.name;\n let children = childrenByParent.get(parentName);\n if (!children) {\n children = [];\n childrenByParent.set(parentName, children);\n }\n children.push(schema.identifier);\n }\n }\n\n const transitiveCache = new Map<string, Identifier[]>();\n const getTransitiveChildren = (parentName: string): Identifier[] => {\n const cached = transitiveCache.get(parentName);\n if (cached) return cached;\n\n const directChildren = childrenByParent.get(parentName) ?? [];\n const result: Identifier[] = [...directChildren];\n for (const child of directChildren) {\n result.push(...getTransitiveChildren(child.name));\n }\n transitiveCache.set(parentName, result);\n return result;\n };\n\n const seen = new Set<string>();\n const allPairs: TypeRelation[] = [];\n\n for (const pair of directPairs) {\n const key = `${pair.parent.name}|${pair.child.name}`;\n seen.add(key);\n allPairs.push(pair);\n\n for (const transitiveChild of getTransitiveChildren(pair.child.name)) {\n const transitiveKey = `${pair.parent.name}|${transitiveChild.name}`;\n if (!seen.has(transitiveKey)) {\n seen.add(transitiveKey);\n allPairs.push({ parent: pair.parent, child: transitiveChild });\n }\n }\n }\n\n return allPairs;\n};\n\n///////////////////////////////////////////////////////////\n// Type Schema Index\n\nexport type TypeSchemaIndex = {\n _schemaIndex: Record<CanonicalUrl, Record<PkgName, TypeSchema>>;\n _relations: TypeRelation[];\n schemas: TypeSchema[];\n schemasByPackage: Record<PkgName, TypeSchema[]>;\n register?: Register;\n collectComplexTypes: () => RegularTypeSchema[];\n collectResources: () => RegularTypeSchema[];\n collectLogicalModels: () => RegularTypeSchema[];\n collectProfiles: () => ProfileTypeSchema[];\n resolve: (id: Identifier) => TypeSchema | undefined;\n resolveByUrl: (pkgName: PkgName, url: CanonicalUrl) => TypeSchema | undefined;\n resourceChildren: (id: Identifier) => Identifier[];\n tryHierarchy: (schema: TypeSchema) => TypeSchema[] | undefined;\n hierarchy: (schema: TypeSchema) => TypeSchema[];\n findLastSpecialization: (schema: TypeSchema) => TypeSchema;\n findLastSpecializationByIdentifier: (id: Identifier) => Identifier;\n flatProfile: (schema: ProfileTypeSchema) => ProfileTypeSchema;\n constrainedChoice: (\n pkgName: PkgName,\n baseTypeId: Identifier,\n sliceElements: string[],\n ) => ConstrainedChoiceInfo | undefined;\n isWithMetaField: (profile: ProfileTypeSchema) => boolean;\n entityTree: () => EntityTree;\n exportTree: (filename: string) => Promise<void>;\n irReport: () => IrReport;\n replaceSchemas: (schemas: TypeSchema[]) => TypeSchemaIndex;\n};\n\ntype EntityTree = Record<PkgName, Record<Identifier[\"kind\"], Record<CanonicalUrl, object>>>;\n\nexport const mkTypeSchemaIndex = (\n schemas: TypeSchema[],\n {\n register,\n logger,\n irReport = {},\n }: {\n register?: Register;\n logger?: CodegenLog;\n irReport?: IrReport;\n },\n): TypeSchemaIndex => {\n const index: Record<CanonicalUrl, Record<PkgName, TypeSchema>> = {};\n const nestedIndex: Record<CanonicalUrl, Record<PkgName, TypeSchema>> = {};\n const append = (schema: TypeSchema) => {\n const url = schema.identifier.url;\n const pkg = schema.identifier.package;\n if (!index[url]) index[url] = {};\n\n if (index[url][pkg] && pkg !== \"shared\") {\n const r1 = JSON.stringify(schema.identifier, undefined, 2);\n const r2 = JSON.stringify(index[url][pkg]?.identifier, undefined, 2);\n if (r1 !== r2) throw new Error(`Duplicate schema: ${r1} and ${r2}`);\n return;\n }\n index[url][pkg] = schema;\n\n if (isSpecializationTypeSchema(schema) || isProfileTypeSchema(schema)) {\n if (schema.nested) {\n schema.nested.forEach((nschema) => {\n const nurl = nschema.identifier.url;\n const npkg = nschema.identifier.package;\n nestedIndex[nurl] ??= {};\n nestedIndex[nurl][npkg] = nschema;\n });\n }\n }\n };\n for (const schema of schemas) {\n append(schema);\n }\n const relations = resourceRelatives(schemas);\n\n const resolve = (id: Identifier) => {\n if (id.kind === \"nested\") return nestedIndex[id.url]?.[id.package];\n return index[id.url]?.[id.package];\n };\n const resolveByUrl = (pkgName: PkgName, url: CanonicalUrl) => {\n if (register) {\n const resolutionTree = register.resolutionTree();\n const resolution = resolutionTree[pkgName]?.[url]?.[0];\n if (resolution) {\n return index[url]?.[resolution.pkg.name];\n }\n }\n if (index[url]?.[pkgName]) return index[url]?.[pkgName];\n logger?.dryWarn(`Type '${url}' not found in '${pkgName}'`);\n\n // Fallback: search across all packages when type exists elsewhere\n if (index[url]) {\n const anyPkg = Object.keys(index[url])[0];\n if (anyPkg) {\n logger?.dryWarn(`Type '${url}' fallback to package ${anyPkg}`);\n return index[url]?.[anyPkg];\n }\n }\n return undefined;\n };\n\n const resourceChildren = (id: Identifier): Identifier[] => {\n return relations.filter((relative) => relative.parent.name === id.name).map((relative) => relative.child);\n };\n\n const tryHierarchy = (schema: TypeSchema): TypeSchema[] | undefined => {\n const res: TypeSchema[] = [];\n let cur: TypeSchema | undefined = schema;\n while (cur) {\n res.push(cur);\n const base = (cur as RegularTypeSchema).base;\n if (base === undefined) break;\n const resolved = resolve(base);\n if (!resolved) {\n logger?.warn(\n \"#resolveBase\",\n `Failed to resolve base type: ${res.map((e) => `${e.identifier.url} (${e.identifier.kind})`).join(\", \")}`,\n );\n return undefined;\n }\n cur = resolved;\n }\n return res;\n };\n\n const hierarchy = (schema: TypeSchema): TypeSchema[] => {\n const genealogy = tryHierarchy(schema);\n if (genealogy === undefined) {\n throw new Error(`Failed to resolve base type: ${schema.identifier.url} (${schema.identifier.kind})`);\n }\n return genealogy;\n };\n\n const findLastSpecialization = (schema: TypeSchema): TypeSchema => {\n const nonConstraintSchema = hierarchy(schema).find((s) => s.identifier.kind !== \"profile\");\n if (!nonConstraintSchema) {\n throw new Error(`No non-constraint schema found in hierarchy for: ${schema.identifier.name}`);\n }\n return nonConstraintSchema;\n };\n\n const findLastSpecializationByIdentifier = (id: Identifier): Identifier => {\n const schema = resolve(id);\n if (!schema) return id;\n return findLastSpecialization(schema).identifier;\n };\n\n const flatProfile = (schema: ProfileTypeSchema): ProfileTypeSchema => {\n const hierarchySchemas = hierarchy(schema);\n const constraintSchemas = hierarchySchemas.filter((s) => s.identifier.kind === \"profile\");\n const nonConstraintSchema = hierarchySchemas.find((s) => s.identifier.kind !== \"profile\");\n\n if (!nonConstraintSchema)\n throw new Error(`No non-constraint schema found in hierarchy for ${schema.identifier.name}`);\n\n const mergedFields = {} as Record<string, Field>;\n for (const anySchema of constraintSchemas.slice().reverse()) {\n const schema = anySchema as RegularTypeSchema;\n if (!schema.fields) continue;\n\n for (const [fieldName, fieldConstraints] of Object.entries(schema.fields)) {\n if (mergedFields[fieldName]) {\n mergedFields[fieldName] = {\n ...mergedFields[fieldName],\n ...fieldConstraints,\n };\n } else {\n mergedFields[fieldName] = { ...fieldConstraints };\n }\n }\n }\n\n const dependencies = Object.values(\n Object.fromEntries(\n constraintSchemas\n .flatMap((s) => (s as RegularTypeSchema).dependencies ?? [])\n .map((dep) => [dep.url, dep]),\n ),\n );\n\n const mergedExtensions = Object.values(\n [...constraintSchemas.filter(isProfileTypeSchema)]\n .reverse()\n .flatMap((s) => s.extensions ?? [])\n .reduce<Record<string, ProfileExtension>>((acc, ext) => {\n const key = `${ext.path}|${ext.name}`;\n // Prefer entries with a full canonical URL over short names\n if (!acc[key] || ext.url?.includes(\"/\")) acc[key] = ext;\n return acc;\n }, {}),\n );\n\n return {\n ...schema,\n base: nonConstraintSchema.identifier,\n fields: mergedFields,\n dependencies: dependencies,\n extensions: mergedExtensions.length > 0 ? mergedExtensions : undefined,\n };\n };\n\n const constrainedChoice = (\n pkgName: PkgName,\n baseTypeId: Identifier,\n sliceElements: string[],\n ): ConstrainedChoiceInfo | undefined => {\n const baseSchema = resolveByUrl(pkgName, baseTypeId.url as CanonicalUrl);\n if (!baseSchema || !(\"fields\" in baseSchema) || !baseSchema.fields) return undefined;\n for (const [fieldName, field] of Object.entries(baseSchema.fields)) {\n if (!isChoiceDeclarationField(field)) continue;\n const matchingVariants = field.choices.filter((c) => sliceElements.includes(c));\n if (matchingVariants.length !== 1) continue;\n const variantName = matchingVariants[0] as string;\n const variantField = baseSchema.fields[variantName];\n if (!variantField || !isChoiceInstanceField(variantField)) continue;\n return {\n choiceBase: fieldName,\n variant: variantName,\n variantType: variantField.type,\n allChoiceNames: field.choices,\n };\n }\n return undefined;\n };\n\n const isWithMetaField = (profile: ProfileTypeSchema): boolean => {\n const genealogy = tryHierarchy(profile);\n if (!genealogy) return false;\n return genealogy.filter(isSpecializationTypeSchema).some((schema) => {\n return schema.fields?.meta !== undefined;\n });\n };\n\n const entityTree = () => {\n const tree: EntityTree = {};\n for (const [pkgId, shemas] of Object.entries(groupByPackages(schemas))) {\n tree[pkgId] = {\n \"primitive-type\": {},\n \"complex-type\": {},\n resource: {},\n \"value-set\": {},\n nested: {},\n binding: {},\n profile: {},\n logical: {},\n };\n for (const schema of shemas) {\n tree[pkgId][schema.identifier.kind][schema.identifier.url] = {};\n }\n }\n return tree;\n };\n\n const exportTree = async (filename: string) => {\n const tree = entityTree();\n const raw = filename.endsWith(\".yaml\") ? YAML.stringify(tree) : JSON.stringify(tree, undefined, 2);\n await afs.mkdir(Path.dirname(filename), { recursive: true });\n await afs.writeFile(filename, raw);\n };\n\n return {\n _schemaIndex: index,\n _relations: relations,\n schemas,\n schemasByPackage: groupByPackages(schemas),\n register,\n collectComplexTypes: () => schemas.filter(isComplexTypeTypeSchema),\n collectResources: () => schemas.filter(isResourceTypeSchema),\n collectLogicalModels: () => schemas.filter(isLogicalTypeSchema),\n collectProfiles: () => schemas.filter(isProfileTypeSchema),\n resolve,\n resolveByUrl,\n resourceChildren,\n tryHierarchy,\n hierarchy,\n findLastSpecialization,\n findLastSpecializationByIdentifier,\n flatProfile,\n constrainedChoice,\n isWithMetaField,\n entityTree,\n exportTree,\n irReport: () => irReport,\n replaceSchemas: (newSchemas) => mkTypeSchemaIndex(newSchemas, { register, logger, irReport: { ...irReport } }),\n };\n};\n","import assert from \"node:assert\";\nimport fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { camelCase, pascalCase, snakeCase, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport { groupByPackages, sortAsDeclarationSequence, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { EnumDefinition, Field, Identifier, RegularTypeSchema } from \"@typeschema/types.ts\";\n\nconst PRIMITIVE_TYPE_MAP: Record<string, string> = {\n boolean: \"bool\",\n instant: \"str\",\n time: \"str\",\n date: \"str\",\n dateTime: \"str\",\n decimal: \"float\",\n integer: \"int\",\n unsignedInt: \"int\",\n positiveInt: \"PositiveInt\",\n integer64: \"int\",\n base64Binary: \"str\",\n uri: \"str\",\n url: \"str\",\n canonical: \"str\",\n oid: \"str\",\n uuid: \"str\",\n string: \"str\",\n code: \"str\",\n markdown: \"str\",\n id: \"str\",\n xhtml: \"str\",\n};\n\ntype StringFormatKey = \"snake_case\" | \"PascalCase\" | \"camelCase\";\n\nconst AVAILABLE_STRING_FORMATS: Record<StringFormatKey, (str: string) => string> = {\n snake_case: snakeCase,\n PascalCase: pascalCase,\n camelCase: camelCase,\n};\n\nconst PYTHON_KEYWORDS = new Set([\n \"False\",\n \"None\",\n \"True\",\n \"and\",\n \"as\",\n \"assert\",\n \"async\",\n \"await\",\n \"break\",\n \"class\",\n \"continue\",\n \"def\",\n \"del\",\n \"elif\",\n \"else\",\n \"except\",\n \"finally\",\n \"for\",\n \"from\",\n \"global\",\n \"if\",\n \"import\",\n \"in\",\n \"is\",\n \"lambda\",\n \"nonlocal\",\n \"not\",\n \"or\",\n \"pass\",\n \"raise\",\n \"return\",\n \"try\",\n \"while\",\n \"with\",\n \"yield\",\n \"List\",\n]);\n\nconst MAX_IMPORT_LINE_LENGTH = 100;\n\nconst GENERIC_FIELD_REWRITES: Record<string, Record<string, string>> = {\n Coding: { code: \"T\" },\n CodeableConcept: { coding: \"Coding[T]\" },\n};\n\nconst pyEnumType = (enumDef: EnumDefinition): string => {\n const values = enumDef.values.map((e) => `\"${e}\"`).join(\", \");\n return enumDef.isOpen ? `Literal[${values}] | str` : `Literal[${values}]`;\n};\n\nexport interface PythonGeneratorOptions extends WriterOptions {\n allowExtraFields?: boolean;\n rootPackageName: string; /// e.g. <rootPackageName>.hl7_fhir_r4_core.Patient.\n fieldFormat: StringFormatKey;\n fhirpyClient?: boolean;\n}\n\ninterface ImportGroup {\n [packageName: string]: string[];\n}\n\ninterface FieldInfo {\n name: string;\n type: string;\n defaultValue: string;\n}\n\nconst fixReservedWords = (name: string): string => {\n return PYTHON_KEYWORDS.has(name) ? `${name}_` : name;\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true) => {\n if (!canonical) return undefined;\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) {\n localName = localName.split(\"#\")[0];\n }\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return snakeCase(localName);\n};\n\nconst deriveResourceName = (id: Identifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n const path = canonicalToName(url, false);\n if (!path) return \"\";\n const [resourceName, fragment] = path.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return pascalCase([resourceName, name].join(\"\"));\n }\n return pascalCase(id.name);\n};\n\nconst resolvePyAssets = (fn: string) => {\n const __dirname = Path.dirname(fileURLToPath(import.meta.url));\n const __filename = fileURLToPath(import.meta.url);\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"python\", fn);\n } else {\n return Path.resolve(__dirname, \"../../..\", \"assets\", \"api\", \"writer-generator\", \"python\", fn);\n }\n};\n\ntype TypeSchemaPackageGroups = {\n groupedResources: Record<string, RegularTypeSchema[]>;\n groupedComplexTypes: Record<string, RegularTypeSchema[]>;\n};\n\nexport class Python extends Writer<PythonGeneratorOptions> {\n private readonly nameFormatFunction: (name: string) => string;\n private tsIndex: TypeSchemaIndex | undefined;\n private readonly forFhirpyClient: boolean;\n private readonly fieldFormat: StringFormatKey;\n constructor(options: PythonGeneratorOptions) {\n super({ ...options, resolveAssets: options.resolveAssets ?? resolvePyAssets });\n this.nameFormatFunction = this.getFieldFormatFunction(options.fieldFormat);\n this.forFhirpyClient = options.fhirpyClient ?? false;\n this.fieldFormat = options.fieldFormat;\n }\n\n override async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n this.tsIndex = tsIndex;\n const groups: TypeSchemaPackageGroups = {\n groupedComplexTypes: groupByPackages(tsIndex.collectComplexTypes()),\n groupedResources: groupByPackages(tsIndex.collectResources()),\n };\n this.generateRootPackages(groups);\n this.generateSDKPackages(groups);\n }\n\n private generateRootPackages(groups: TypeSchemaPackageGroups): void {\n this.generateRootInitFile(groups);\n if (this.forFhirpyClient) {\n if (this.fieldFormat === \"camelCase\") {\n this.copyAssets(resolvePyAssets(\"fhirpy_base_model_camel_case.py\"), \"fhirpy_base_model.py\");\n } else {\n this.copyAssets(resolvePyAssets(\"fhirpy_base_model.py\"), \"fhirpy_base_model.py\");\n }\n }\n this.copyAssets(resolvePyAssets(\"requirements.txt\"), \"requirements.txt\");\n }\n\n private generateSDKPackages(groups: TypeSchemaPackageGroups): void {\n this.generateComplexTypesPackages(groups.groupedComplexTypes);\n this.generateResourcePackages(groups);\n }\n\n private generateComplexTypesPackages(groupedComplexTypes: Record<string, RegularTypeSchema[]>): void {\n for (const [packageName, packageComplexTypes] of Object.entries(groupedComplexTypes)) {\n this.cd(`/${snakeCase(packageName)}`, () => {\n this.generateBasePy(packageComplexTypes);\n });\n }\n }\n\n private generateResourcePackages(groups: TypeSchemaPackageGroups): void {\n for (const [packageName, packageResources] of Object.entries(groups.groupedResources)) {\n this.cd(`/${snakeCase(packageName)}`, () => {\n this.generateResourcePackageContent(\n packageName,\n packageResources,\n groups.groupedComplexTypes[packageName] || [],\n );\n });\n }\n }\n\n private generateResourcePackageContent(\n packageName: string,\n packageResources: RegularTypeSchema[],\n packageComplexTypes: RegularTypeSchema[],\n ): void {\n const pyPackageName = this.pyFhirPackageByName(packageName);\n\n this.generateResourcePackageInit(pyPackageName, packageResources, packageComplexTypes);\n this.generateResourceFamilies(packageResources);\n\n for (const schema of packageResources) {\n this.generateResourceModule(schema);\n }\n }\n\n private generateRootInitFile(groups: TypeSchemaPackageGroups): void {\n this.cd(\"/\", () => {\n this.cat(\"__init__.py\", () => {\n this.generateDisclaimer();\n const pydanticModels: string[] = this.collectAndImportAllModels(groups);\n this.generateModelRebuilds(pydanticModels);\n });\n });\n }\n\n private collectAndImportAllModels(groups: TypeSchemaPackageGroups): string[] {\n const models: string[] = [];\n\n for (const packageName of Object.keys(groups.groupedResources)) {\n const fullPyPackageName = this.pyFhirPackageByName(packageName);\n models.push(...this.importComplexTypes(fullPyPackageName, groups.groupedComplexTypes[packageName]));\n models.push(...this.importResources(fullPyPackageName, false, groups.groupedResources[packageName]));\n }\n this.line();\n\n return models;\n }\n\n private generateModelRebuilds(models: string[]): void {\n for (const modelName of models.sort()) {\n this.line(`${modelName}.model_rebuild()`);\n }\n }\n\n private generateBasePy(packageComplexTypes: RegularTypeSchema[]): void {\n const hasGenericTypes = packageComplexTypes.some((s) => s.identifier.name in GENERIC_FIELD_REWRITES);\n this.cat(\"base.py\", () => {\n this.generateDisclaimer();\n this.generateDefaultImports(hasGenericTypes);\n if (hasGenericTypes) {\n this.line();\n this.line(\"T = TypeVar('T', bound=str, default=str)\");\n }\n this.line();\n this.generateComplexTypes(packageComplexTypes);\n this.line();\n });\n }\n\n private generateComplexTypes(complexTypes: RegularTypeSchema[]): void {\n for (const schema of sortAsDeclarationSequence(complexTypes)) {\n this.generateNestedTypes(schema);\n this.line();\n this.generateType(schema);\n }\n }\n\n private generateResourcePackageInit(\n fullPyPackageName: string,\n packageResources: RegularTypeSchema[],\n packageComplexTypes?: RegularTypeSchema[],\n ): void {\n this.cat(\"__init__.py\", () => {\n this.generateDisclaimer();\n this.importComplexTypes(fullPyPackageName, packageComplexTypes);\n const allResourceNames = this.importResources(fullPyPackageName, true, packageResources);\n this.line();\n this.generateExportsDeclaration(packageComplexTypes, allResourceNames);\n });\n }\n\n private importComplexTypes(fullPyPackageName: string, packageComplexTypes?: RegularTypeSchema[]): string[] {\n if (!packageComplexTypes || packageComplexTypes.length === 0) return [];\n\n const baseTypes = packageComplexTypes.map((t) => t.identifier.name).sort();\n this.pyImportFrom(`${fullPyPackageName}.base`, ...baseTypes);\n this.line();\n\n return baseTypes;\n }\n\n private buildImportLine(remaining: string[], maxImportLineLength: number): string {\n let line = \"\";\n while (remaining.length > 0 && line.length < maxImportLineLength) {\n const entity = remaining.shift();\n if (!entity) throw new Error(\"Unexpected empty entity\");\n if (line.length > 0) {\n line += \", \";\n }\n line += entity;\n }\n\n if (remaining.length > 0) {\n line += \", \\\\\";\n }\n\n return line;\n }\n\n private importResources(\n fullPyPackageName: string,\n importEmptyResources: boolean,\n packageResources?: RegularTypeSchema[],\n ): string[] {\n if (!packageResources || packageResources.length === 0) return [];\n const allResourceNames: string[] = [];\n\n for (const resource of packageResources) {\n const names = this.importOneResource(resource, fullPyPackageName);\n if (!importEmptyResources && !resource.fields) continue;\n allResourceNames.push(...names);\n }\n\n return allResourceNames;\n }\n\n private importOneResource(resource: RegularTypeSchema, fullPyPackageName: string): string[] {\n const moduleName = `${fullPyPackageName}.${snakeCase(resource.identifier.name)}`;\n const importNames = this.collectResourceImportNames(resource);\n\n this.pyImportFrom(moduleName, ...importNames);\n\n const names = [...importNames];\n\n if (this.shouldImportResourceFamily(resource)) {\n const familyName = `${resource.identifier.name}Family`;\n this.pyImportFrom(`${fullPyPackageName}.resource_families`, familyName);\n }\n\n return names;\n }\n\n private collectResourceImportNames(resource: RegularTypeSchema): string[] {\n const names = [deriveResourceName(resource.identifier)];\n\n for (const nested of resource.nested ?? []) {\n const nestedName = deriveResourceName(nested.identifier);\n names.push(nestedName);\n }\n\n return names;\n }\n\n private shouldImportResourceFamily(resource: RegularTypeSchema): boolean {\n assert(this.tsIndex !== undefined);\n return resource.identifier.kind === \"resource\" && this.tsIndex.resourceChildren(resource.identifier).length > 0;\n }\n\n private generateExportsDeclaration(\n packageComplexTypes: RegularTypeSchema[] | undefined,\n allResourceNames: string[],\n ): void {\n this.squareBlock([\"__all__\", \"=\"], () => {\n const allExports = [\n ...(packageComplexTypes || []).map((t) => t.identifier.name),\n ...allResourceNames,\n ].sort();\n\n for (const schemaName of allExports) {\n this.line(`'${schemaName}',`);\n }\n });\n }\n\n private generateResourceModule(schema: RegularTypeSchema): void {\n this.cat(`${snakeCase(schema.identifier.name)}.py`, () => {\n this.generateDisclaimer();\n this.generateDefaultImports(false);\n this.generateFhirBaseModelImport();\n this.line();\n this.generateDependenciesImports(schema);\n this.line();\n this.generateNestedTypes(schema);\n this.line();\n this.generateType(schema);\n });\n }\n\n private generateFhirBaseModelImport(): void {\n if (this.forFhirpyClient)\n this.pyImportFrom(`${this.opts.rootPackageName}.fhirpy_base_model`, \"FhirpyBaseModel\");\n }\n\n private generateType(schema: RegularTypeSchema): void {\n const className = deriveResourceName(schema.identifier);\n const superClasses = this.getSuperClasses(schema);\n\n this.line(`class ${className}(${superClasses.join(\", \")}):`);\n this.indentBlock(() => {\n this.generateClassBody(schema);\n });\n this.line();\n }\n\n private getSuperClasses(schema: RegularTypeSchema): string[] {\n const bases: string[] = [];\n if (schema.base) bases.push(schema.base.name);\n bases.push(...this.injectSuperClasses(schema.identifier.url));\n if (schema.identifier.name in GENERIC_FIELD_REWRITES) bases.push(\"Generic[T]\");\n return bases;\n }\n\n private generateClassBody(schema: RegularTypeSchema): void {\n this.generateModelConfig();\n\n if (!schema.fields) {\n this.line(\"pass\");\n return;\n }\n\n if (schema.identifier.kind === \"resource\") {\n this.generateResourceTypeField(schema);\n }\n\n this.generateFields(schema, schema.identifier.name);\n\n if (schema.identifier.kind === \"resource\") {\n this.generateResourceMethods(schema);\n }\n }\n\n private generateModelConfig(): void {\n const extraMode = this.opts.allowExtraFields ? \"allow\" : \"forbid\";\n this.line(`model_config = ConfigDict(validate_by_name=True, serialize_by_alias=True, extra=\"${extraMode}\")`);\n }\n\n private generateResourceTypeField(schema: RegularTypeSchema): void {\n assert(this.tsIndex !== undefined);\n const hasChildren = this.tsIndex.resourceChildren(schema.identifier).length > 0;\n\n if (hasChildren) {\n this.line(`${this.nameFormatFunction(\"resourceType\")}: str = Field(`);\n } else {\n this.line(`${this.nameFormatFunction(\"resourceType\")}: Literal['${schema.identifier.name}'] = Field(`);\n }\n this.indentBlock(() => {\n this.line(`default='${schema.identifier.name}',`);\n this.line(`alias='resourceType',`);\n this.line(`serialization_alias='resourceType',`);\n if (!this.forFhirpyClient) {\n // fhirpy client resource protocol expects the resourceType field not to be frozen\n this.line(\"frozen=True,\");\n }\n this.line(`pattern='${schema.identifier.name}'`);\n });\n this.line(\")\");\n }\n\n private generateFields(schema: RegularTypeSchema, schemaName: string): void {\n const sortedFields = Object.entries(schema.fields ?? []).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [fieldName, field] of sortedFields) {\n if (\"choices\" in field && field.choices) continue;\n\n const fieldInfo = this.buildFieldInfo(fieldName, field, schemaName);\n this.line(`${fieldInfo.name}: ${fieldInfo.type}${fieldInfo.defaultValue}`);\n }\n }\n\n private buildFieldInfo(fieldName: string, field: Field, schemaName: string): FieldInfo {\n const pyFieldName = fixReservedWords(this.nameFormatFunction(fieldName));\n const fieldType = this.determineFieldType(field, fieldName, schemaName);\n const defaultValue = this.getFieldDefaultValue(field, fieldName);\n\n return {\n name: pyFieldName,\n type: fieldType,\n defaultValue: defaultValue,\n };\n }\n\n private determineFieldType(field: Field, fieldName: string, schemaName: string): string {\n let fieldType = field ? this.getBaseFieldType(field) : \"\";\n\n // Check for generic type field rewrites (e.g., Coding.code → T, CodeableConcept.coding → Coding[T])\n const rewrite = GENERIC_FIELD_REWRITES[schemaName]?.[fieldName];\n if (rewrite) {\n fieldType = rewrite;\n if (field.array) fieldType = `PyList[${fieldType}]`;\n if (!field.required) fieldType = `${fieldType} | None`;\n return fieldType;\n }\n\n if (\"enum\" in field && field.enum) {\n const baseTypeName = \"type\" in field ? field.type.name : \"\";\n if (baseTypeName in GENERIC_FIELD_REWRITES) {\n fieldType = `${fieldType}[${pyEnumType(field.enum)}]`;\n } else if (!field.enum.isOpen) {\n const s: string = field.enum.values.map((e: string) => `\"${e}\"`).join(\", \");\n fieldType = `Literal[${s}]`;\n }\n }\n\n if (field.array) {\n fieldType = `PyList[${fieldType}]`;\n }\n\n if (!field.required) {\n fieldType = `${fieldType} | None`;\n }\n\n return fieldType;\n }\n\n private getBaseFieldType(field: Field): string {\n if (\"type\" in field && field.type.kind === \"resource\") return `${field.type.name}Family`;\n\n if (\"type\" in field && field.type.kind === \"nested\") return deriveResourceName(field.type);\n\n if (\"type\" in field && field.type.kind === \"primitive-type\")\n return PRIMITIVE_TYPE_MAP[field.type.name] ?? \"str\";\n\n return \"type\" in field ? field.type.name : \"\";\n }\n\n private getFieldDefaultValue(field: any, fieldName: string): string {\n const aliasSpec = `alias=\"${fieldName}\", serialization_alias=\"${fieldName}\"`;\n\n if (!field.required) {\n return ` = Field(None, ${aliasSpec})`;\n }\n\n return ` = Field(${aliasSpec})`;\n }\n\n private generateResourceMethods(schema: RegularTypeSchema): void {\n const className = schema.identifier.name.toString();\n\n this.line();\n this.line(\"def to_json(self, indent: int | None = None) -> str:\");\n this.line(\" return self.model_dump_json(exclude_unset=True, exclude_none=True, indent=indent)\");\n this.line();\n this.line(\"@classmethod\");\n this.line(`def from_json(cls, json: str) -> ${className}:`);\n this.line(\" return cls.model_validate_json(json)\");\n }\n\n private generateNestedTypes(schema: RegularTypeSchema): void {\n if (!schema.nested) return;\n\n this.line();\n for (const subtype of schema.nested) {\n this.generateType(subtype);\n }\n }\n\n private generateDefaultImports(includeGenericImports: boolean): void {\n this.pyImportFrom(\"__future__\", \"annotations\");\n this.pyImportFrom(\"pydantic\", \"BaseModel\", \"ConfigDict\", \"Field\", \"PositiveInt\");\n const typingImports = [\"List as PyList\", \"Literal\"];\n if (includeGenericImports) {\n typingImports.push(\"Generic\");\n }\n this.pyImportFrom(\"typing\", ...typingImports.sort());\n if (includeGenericImports) {\n this.pyImportFrom(\"typing_extensions\", \"TypeVar\");\n }\n }\n\n private generateDependenciesImports(schema: RegularTypeSchema): void {\n if (!schema.dependencies || schema.dependencies.length === 0) return;\n\n this.importComplexTypeDependencies(schema.dependencies);\n this.importResourceDependencies(schema.dependencies);\n }\n\n private importComplexTypeDependencies(dependencies: Identifier[]): void {\n const complexTypeDeps = dependencies.filter((dep) => dep.kind === \"complex-type\");\n const depsByPackage = this.groupDependenciesByPackage(complexTypeDeps);\n\n for (const [pyPackage, names] of Object.entries(depsByPackage)) {\n this.pyImportFrom(pyPackage, ...names.sort());\n }\n }\n\n private importResourceDependencies(dependencies: Identifier[]): void {\n const resourceDeps = dependencies.filter((dep) => dep.kind === \"resource\");\n\n for (const dep of resourceDeps) {\n this.pyImportType(dep);\n\n const familyName = `${pascalCase(dep.name)}Family`;\n const familyPackage = `${this.pyFhirPackage(dep)}.resource_families`;\n this.pyImportFrom(familyPackage, familyName);\n }\n }\n\n private groupDependenciesByPackage(dependencies: Identifier[]): ImportGroup {\n const grouped: ImportGroup = {};\n\n for (const dep of dependencies) {\n const pyPackage = this.pyPackage(dep);\n if (!grouped[pyPackage]) {\n grouped[pyPackage] = [];\n }\n grouped[pyPackage].push(dep.name);\n }\n\n return grouped;\n }\n\n private pyImportFrom(pyPackage: string, ...entities: string[]): void {\n const oneLine = `from ${pyPackage} import ${entities.join(\", \")}`;\n\n if (this.shouldUseSingleLineImport(oneLine, entities)) {\n this.line(oneLine);\n } else {\n this.writeMultiLineImport(pyPackage, entities);\n }\n }\n\n private shouldUseSingleLineImport(oneLine: string, entities: string[]): boolean {\n return oneLine.length <= MAX_IMPORT_LINE_LENGTH || entities.length === 1;\n }\n\n private writeMultiLineImport(pyPackage: string, entities: string[]): void {\n this.line(`from ${pyPackage} import (\\\\`);\n this.indentBlock(() => {\n const remaining = [...entities];\n while (remaining.length > 0) {\n const line = this.buildImportLine(remaining, MAX_IMPORT_LINE_LENGTH);\n this.line(line);\n }\n });\n this.line(\")\");\n }\n\n private pyImportType(identifier: Identifier): void {\n this.pyImportFrom(this.pyPackage(identifier), pascalCase(identifier.name));\n }\n\n private generateResourceFamilies(packageResources: RegularTypeSchema[]): void {\n assert(this.tsIndex !== undefined);\n const packages = //this.helper.getPackages(packageResources, this.opts.rootPackageName);\n Object.keys(groupByPackages(packageResources)).map(\n (pkgName) => `${this.opts.rootPackageName}.${pkgName.replaceAll(\".\", \"_\")}`,\n );\n const families: Record<string, string[]> = {};\n for (const resource of this.tsIndex.collectResources()) {\n const children: string[] = this.tsIndex.resourceChildren(resource.identifier).map((c) => c.name);\n if (children.length > 0) {\n const familyName = `${resource.identifier.name}Family`;\n families[familyName] = children;\n }\n }\n const exportList = Object.keys(families);\n\n if (exportList.length === 0) return;\n\n this.buildResourceFamiliesFile(packages, families, exportList);\n }\n\n private buildResourceFamiliesFile(\n packages: string[],\n families: Record<string, string[]>,\n exportList: string[],\n ): void {\n this.cat(\"resource_families.py\", () => {\n this.generateDisclaimer();\n this.includeResourceFamilyValidator();\n this.line();\n this.generateFamilyDefinitions(packages, families);\n this.generateFamilyExports(exportList);\n });\n }\n\n private includeResourceFamilyValidator(): void {\n const content = fs.readFileSync(resolvePyAssets(\"resource_family_validator.py\"), \"utf-8\");\n this.line(content);\n }\n\n private generateFamilyDefinitions(packages: string[], families: Record<string, string[]>): void {\n this.line(`packages = [${packages.map((p) => `'${p}'`).join(\", \")}]`);\n this.line();\n\n for (const [familyName, resources] of Object.entries(families)) {\n this.generateFamilyDefinition(familyName, resources);\n }\n }\n\n private generateFamilyDefinition(familyName: string, resources: string[]): void {\n const listName = `${familyName}_resources`;\n\n this.line(\n `${listName} = [${resources\n .map((r) => `'${r}'`)\n .sort()\n .join(\", \")}]`,\n );\n this.line();\n\n this.line(`def validate_and_downcast_${familyName}(v: Any) -> Any:`);\n this.line(` return validate_and_downcast(v, packages, ${listName})`);\n this.line();\n\n this.line(`type ${familyName} = Annotated[Any, BeforeValidator(validate_and_downcast_${familyName})]`);\n this.line();\n }\n\n private generateFamilyExports(exportList: string[]): void {\n this.line(`__all__ = [${exportList.map((e) => `'${e}'`).join(\", \")}]`);\n }\n\n private buildPyPackageName(packageName: string): string {\n const parts = packageName ? [snakeCase(packageName)] : [\"\"];\n return parts.join(\".\");\n }\n\n private pyFhirPackage(identifier: Identifier): string {\n return this.pyFhirPackageByName(identifier.package);\n }\n\n private pyFhirPackageByName(name: string): string {\n return [this.opts.rootPackageName, this.buildPyPackageName(name)].join(\".\");\n }\n\n private pyPackage(identifier: Identifier): string {\n if (identifier.kind === \"complex-type\") {\n return `${this.pyFhirPackage(identifier)}.base`;\n }\n if (identifier.kind === \"resource\") {\n return [this.pyFhirPackage(identifier), snakeCase(identifier.name)].join(\".\");\n }\n return this.pyFhirPackage(identifier);\n }\n\n private getFieldFormatFunction(format: StringFormatKey): (name: string) => string {\n if (!AVAILABLE_STRING_FORMATS[format]) {\n this.logger()?.warn(`Unknown field format '${format}'. Defaulting to SnakeCase.`);\n this.logger()?.warn(`Supported formats: ${Object.keys(AVAILABLE_STRING_FORMATS).join(\", \")}`);\n return snakeCase;\n }\n return AVAILABLE_STRING_FORMATS[format];\n }\n\n private injectSuperClasses(url: string): string[] {\n const name = canonicalToName(url);\n if (name === \"resource\") return this.forFhirpyClient ? [\"FhirpyBaseModel\"] : [\"BaseModel\"];\n if (name === \"element\") return [\"BaseModel\"];\n return [];\n }\n}\n","import type { CanonicalUrl, PackageMeta } from \"./types\";\n\nconst codeableReferenceInR4 = \"Use CodeableReference which is not provided by FHIR R4.\";\nconst availabilityInR4 = \"Use Availability which is not provided by FHIR R4.\";\n\nexport const skipList: Record<string, Record<CanonicalUrl, string>> = {\n \"hl7.fhir.uv.extensions.r4\": {\n \"http://hl7.org/fhir/StructureDefinition/extended-contact-availability\": availabilityInR4,\n \"http://hl7.org/fhir/StructureDefinition/immunization-procedure\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/specimen-additive\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-barrier\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-protectiveFactor\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-reason\": codeableReferenceInR4,\n } as Record<CanonicalUrl, string>,\n \"hl7.fhir.r5.core#5.0.0\": {\n \"http://hl7.org/fhir/StructureDefinition/shareablecodesystem\":\n \"FIXME: CodeSystem.concept.concept defined by ElementReference. FHIR Schema generator output broken value in it, so we just skip it for now.\",\n \"http://hl7.org/fhir/StructureDefinition/publishablecodesystem\":\n \"Uses R5-only base types not available in R4 generation.\",\n } as Record<CanonicalUrl, string>,\n};\n\nexport interface SkipCheckResult {\n shouldSkip: boolean;\n reason?: string;\n}\n\nexport function shouldSkipCanonical(packageMeta: PackageMeta, canonicalUrl: CanonicalUrl): SkipCheckResult {\n const pkgId = `${packageMeta.name}#${packageMeta.version}`;\n\n const reasonByPkgId = skipList[pkgId]?.[canonicalUrl];\n if (reasonByPkgId) {\n return { shouldSkip: true, reason: reasonByPkgId };\n }\n\n const reasonByName = skipList[packageMeta.name]?.[canonicalUrl];\n if (reasonByName) {\n return { shouldSkip: true, reason: reasonByName };\n }\n\n return { shouldSkip: false };\n}\n","/**\n * Identifier Building Utilities\n *\n * Functions for creating TypeSchema identifiers from FHIRSchema entities\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type {\n BindingIdentifier,\n CanonicalUrl,\n Identifier,\n Name,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n ValueSetIdentifier,\n} from \"@typeschema/types\";\nimport type { Register } from \"../register\";\n\nexport function dropVersionFromUrl(url: CanonicalUrl): CanonicalUrl {\n const baseUrl = url.split(\"|\")[0];\n return baseUrl ? (baseUrl as CanonicalUrl) : url;\n}\n\nfunction getVersionFromUrl(url: CanonicalUrl): string | undefined {\n const version = url.split(\"|\")[1];\n return version;\n}\n\nfunction determineKind(fhirSchema: RichFHIRSchema): Identifier[\"kind\"] {\n if (fhirSchema.derivation === \"constraint\") return \"profile\";\n if (fhirSchema.kind === \"primitive-type\") return \"primitive-type\";\n if (fhirSchema.kind === \"complex-type\") return \"complex-type\";\n if (fhirSchema.kind === \"resource\") return \"resource\";\n if (fhirSchema.kind === \"logical\") return \"logical\";\n return \"resource\";\n}\n\nexport function mkIdentifier(fhirSchema: RichFHIRSchema): Identifier {\n return {\n kind: determineKind(fhirSchema),\n package: fhirSchema.package_meta.name,\n version: fhirSchema.package_meta.version,\n name: fhirSchema.name,\n url: fhirSchema.url,\n };\n}\n\nconst getValueSetName = (url: CanonicalUrl): Name => {\n const urlParts = url.split(\"/\");\n const lastSegment = urlParts[urlParts.length - 1];\n\n if (lastSegment && lastSegment.length > 0) {\n return lastSegment\n .split(/[-_]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\"\") as Name;\n }\n return url as string as Name;\n};\n\nexport function mkValueSetIdentifierByUrl(\n register: Register,\n pkg: PackageMeta,\n fullValueSetUrl: CanonicalUrl,\n): ValueSetIdentifier {\n const valueSetUrl = dropVersionFromUrl(fullValueSetUrl);\n const valueSetNameFallback = getValueSetName(valueSetUrl);\n const valuesSetFallback: RichValueSet = {\n resourceType: \"ValueSet\",\n package_meta: {\n name: \"missing_valuesets\",\n version: getVersionFromUrl(valueSetUrl) || \"0.0.0\",\n },\n name: valueSetNameFallback,\n id: fullValueSetUrl,\n url: valueSetUrl,\n status: \"active\",\n };\n const valueSet: RichValueSet = register.resolveVs(pkg, valueSetUrl) || valuesSetFallback;\n // NOTE: ignore valueSet.name due to human name\n const valueSetName: Name =\n valueSet?.id && !/^[a-zA-Z0-9_-]{20,}$/.test(valueSet.id) ? (valueSet.id as Name) : valueSetNameFallback;\n\n return {\n kind: \"value-set\",\n package: valueSet.package_meta.name,\n version: valueSet.package_meta.version,\n name: valueSetName,\n url: valueSetUrl,\n };\n}\n\nexport function mkBindingIdentifier(\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n): BindingIdentifier {\n const bindingName = element.binding?.bindingName;\n const pathStr = path.join(\".\");\n // NOTE: if SD specify `bindingName`, the definition should be shared between all\n // packages. So we put it in the dedicated shared package.\n // TODO: provide setting for `shared` package name.\n const [pkg, name, url] = bindingName\n ? [{ name: \"shared\", version: \"1.0.0\" }, bindingName, `urn:fhir:binding:${bindingName}`]\n : [fhirSchema.package_meta, `${fhirSchema.name}.${pathStr}_binding`, `${fhirSchema.url}#${pathStr}_binding`];\n return {\n kind: \"binding\",\n package: pkg.name,\n version: pkg.version,\n name: name as Name,\n url: url as CanonicalUrl,\n };\n}\n","/**\n * Binding and Enum Handling\n *\n * Functions for processing value set bindings and generating enums\n */\n\nimport assert from \"node:assert\";\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { CodeSystem, CodeSystemConcept } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport type { Register } from \"@typeschema/register\";\nimport type {\n BindingTypeSchema,\n CanonicalUrl,\n Concept,\n EnumDefinition,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n} from \"@typeschema/types\";\nimport { dropVersionFromUrl, mkBindingIdentifier, mkValueSetIdentifierByUrl } from \"./identifier\";\n\nexport function extractValueSetConceptsByUrl(\n register: Register,\n pkg: PackageMeta,\n valueSetUrl: CanonicalUrl,\n logger?: CodegenLog,\n): Concept[] | undefined {\n const cleanUrl = dropVersionFromUrl(valueSetUrl) || valueSetUrl;\n const valueSet = register.resolveVs(pkg, cleanUrl as CanonicalUrl);\n if (!valueSet) return undefined;\n return extractValueSetConcepts(register, valueSet, logger);\n}\n\nfunction extractValueSetConcepts(\n register: Register,\n valueSet: RichValueSet,\n _logger?: CodegenLog,\n): Concept[] | undefined {\n if (valueSet.expansion?.contains) {\n return valueSet.expansion.contains\n .filter((item) => item.code !== undefined)\n .map((item) => {\n assert(item.code);\n return {\n code: item.code,\n display: item.display,\n system: item.system,\n };\n });\n }\n\n const concepts = [] as Concept[];\n if (valueSet.compose?.include) {\n for (const include of valueSet.compose.include) {\n if (include.concept) {\n for (const concept of include.concept) {\n concepts.push({\n system: include.system,\n code: concept.code,\n display: concept.display,\n });\n }\n } else if (include.system && !include.filter) {\n try {\n const codeSystem: CodeSystem = register.resolveAny(include.system as CanonicalUrl);\n if (codeSystem?.concept) {\n const extractConcepts = (conceptList: CodeSystemConcept[], system: string) => {\n for (const concept of conceptList) {\n concepts.push({\n system,\n code: concept.code,\n display: concept.display,\n });\n if (concept.concept) {\n extractConcepts(concept.concept, system);\n }\n }\n };\n extractConcepts(codeSystem.concept, include.system);\n }\n } catch {\n // Ignore if we can't resolve the CodeSystem\n }\n }\n }\n }\n return concepts.length > 0 ? concepts : undefined;\n}\n\nconst MAX_ENUM_LENGTH = 100;\n\n// eld-11: Types that can have bindings\nexport const BINDABLE_TYPES = new Set([\n \"code\",\n \"Coding\",\n \"CodeableConcept\",\n \"CodeableReference\",\n \"Quantity\",\n \"string\",\n \"uri\",\n \"Duration\",\n]);\n\nexport function buildEnum(\n register: Register,\n fhirSchema: RichFHIRSchema,\n element: FHIRSchemaElement,\n logger?: CodegenLog,\n): EnumDefinition | undefined {\n if (!element.binding) return undefined;\n\n const strength = element.binding.strength;\n const valueSetUrl = element.binding.valueSet as CanonicalUrl;\n if (!valueSetUrl) return undefined;\n\n if (!BINDABLE_TYPES.has(element.type ?? \"\")) {\n logger?.dryWarn(\n \"#binding\",\n `eld-11: Binding on non-bindable type '${element.type}' (valueSet: ${valueSetUrl})`,\n );\n return undefined;\n }\n\n // Generate enum for required/extensible/preferred bindings\n const shouldGenerateEnum = strength === \"required\" || strength === \"extensible\" || strength === \"preferred\";\n if (!shouldGenerateEnum) return undefined;\n\n const concepts = extractValueSetConceptsByUrl(register, fhirSchema.package_meta, valueSetUrl);\n if (!concepts || concepts.length === 0) return undefined;\n\n const codes = concepts\n .map((c) => c.code)\n .filter((code) => code && typeof code === \"string\" && code.trim().length > 0);\n\n if (codes.length > MAX_ENUM_LENGTH) {\n logger?.dryWarn(\n \"#largeValueSet\",\n `Value set ${valueSetUrl} has ${codes.length} which is more than ${MAX_ENUM_LENGTH} codes, which may cause issues with code generation.`,\n );\n return undefined;\n }\n if (codes.length === 0) return undefined;\n\n return { isOpen: strength !== \"required\", values: codes };\n}\n\nfunction generateBindingSchema(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLog,\n): BindingTypeSchema | undefined {\n if (!element.binding?.valueSet) return undefined;\n\n const identifier = mkBindingIdentifier(fhirSchema, path, element);\n const valueSetIdentifier = mkValueSetIdentifierByUrl(\n register,\n fhirSchema.package_meta,\n element.binding.valueSet as CanonicalUrl,\n );\n\n const enumResult = buildEnum(register, fhirSchema, element, logger);\n\n return {\n identifier,\n valueset: valueSetIdentifier,\n strength: element.binding.strength,\n enum: enumResult,\n dependencies: [valueSetIdentifier],\n };\n}\n\nexport function collectBindingSchemas(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): BindingTypeSchema[] {\n const processedPaths = new Set<string>();\n if (!fhirSchema.elements) return [];\n\n const bindings: BindingTypeSchema[] = [];\n function collectBindings(elements: Record<string, FHIRSchemaElement>, parentPath: string[]) {\n for (const [key, element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n const pathKey = path.join(\".\");\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n\n if (processedPaths.has(pathKey)) continue;\n processedPaths.add(pathKey);\n\n if (elemSnapshot.binding) {\n const binding = generateBindingSchema(register, fhirSchema, path, elemSnapshot, logger);\n if (binding) {\n bindings.push(binding);\n }\n }\n\n if (element.elements) {\n collectBindings(element.elements, path);\n }\n }\n }\n collectBindings(fhirSchema.elements, []);\n\n bindings.sort((a, b) => a.identifier.name.localeCompare(b.identifier.name));\n\n const uniqueBindings: BindingTypeSchema[] = [];\n const seenUrls = new Set<string>();\n\n for (const binding of bindings) {\n if (!seenUrls.has(binding.identifier.url)) {\n seenUrls.add(binding.identifier.url);\n uniqueBindings.push(binding);\n }\n }\n\n return uniqueBindings;\n}\n","// WARNING: This file is autogenerated by @atomic-ehr/codegen.\n// GitHub: https://github.com/atomic-ehr/codegen\n// Any manual changes made to this file may be overwritten.\n\nimport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nimport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nimport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nimport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nimport type { DomainResource } from \"../hl7-fhir-r4-core/DomainResource\";\nimport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nimport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nexport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nexport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nexport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nexport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nexport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport interface CodeSystemConcept extends BackboneElement {\n code: string;\n concept?: CodeSystemConcept[];\n definition?: string;\n designation?: CodeSystemConceptDesignation[];\n display?: string;\n property?: CodeSystemConceptProperty[];\n}\n\nexport interface CodeSystemConceptDesignation extends BackboneElement {\n language?: string;\n use?: Coding;\n value: string;\n}\n\nexport interface CodeSystemConceptProperty extends BackboneElement {\n code: string;\n valueBoolean?: boolean;\n valueCode?: string;\n valueCoding?: Coding;\n valueDateTime?: string;\n valueDecimal?: number;\n valueInteger?: number;\n valueString?: string;\n}\n\nexport interface CodeSystemFilter extends BackboneElement {\n code: string;\n description?: string;\n operator: (\"=\" | \"is-a\" | \"descendent-of\" | \"is-not-a\" | \"regex\" | \"in\" | \"not-in\" | \"generalizes\" | \"exists\")[];\n value: string;\n}\n\nexport interface CodeSystemProperty extends BackboneElement {\n code: string;\n description?: string;\n type: (\"code\" | \"Coding\" | \"string\" | \"integer\" | \"boolean\" | \"dateTime\" | \"decimal\");\n uri?: string;\n}\n\n// CanonicalURL: http://hl7.org/fhir/StructureDefinition/CodeSystem (pkg: hl7.fhir.r4.core#4.0.1)\nexport interface CodeSystem extends DomainResource {\n resourceType: \"CodeSystem\";\n\n caseSensitive?: boolean;\n compositional?: boolean;\n concept?: CodeSystemConcept[];\n contact?: ContactDetail[];\n content: (\"not-present\" | \"example\" | \"fragment\" | \"complete\" | \"supplement\");\n copyright?: string;\n count?: number;\n date?: string;\n description?: string;\n experimental?: boolean;\n filter?: CodeSystemFilter[];\n hierarchyMeaning?: (\"grouped-by\" | \"is-a\" | \"part-of\" | \"classified-with\");\n identifier?: Identifier[];\n jurisdiction?: CodeableConcept[];\n name?: string;\n property?: CodeSystemProperty[];\n publisher?: string;\n purpose?: string;\n status: (\"draft\" | \"active\" | \"retired\" | \"unknown\");\n supplements?: string;\n title?: string;\n url?: string;\n useContext?: UsageContext[];\n valueSet?: string;\n version?: string;\n versionNeeded?: boolean;\n}\nexport const isCodeSystem = (resource: unknown): resource is CodeSystem => {\n return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"CodeSystem\";\n}\n","// WARNING: This file is autogenerated by @atomic-ehr/codegen.\n// GitHub: https://github.com/atomic-ehr/codegen\n// Any manual changes made to this file may be overwritten.\n\nimport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nimport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nimport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nimport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nimport type { DomainResource } from \"../hl7-fhir-r4-core/DomainResource\";\nimport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nimport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nexport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nexport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nexport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nexport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nexport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport interface ValueSetCompose extends BackboneElement {\n exclude?: ValueSetComposeInclude[];\n inactive?: boolean;\n include: ValueSetComposeInclude[];\n lockedDate?: string;\n}\n\nexport interface ValueSetComposeInclude extends BackboneElement {\n concept?: ValueSetComposeIncludeConcept[];\n filter?: ValueSetComposeIncludeFilter[];\n system?: string;\n valueSet?: string[];\n version?: string;\n}\n\nexport interface ValueSetComposeIncludeConcept extends BackboneElement {\n code: string;\n designation?: ValueSetComposeIncludeConceptDesignation[];\n display?: string;\n}\n\nexport interface ValueSetComposeIncludeConceptDesignation extends BackboneElement {\n language?: string;\n use?: Coding;\n value: string;\n}\n\nexport interface ValueSetComposeIncludeFilter extends BackboneElement {\n op: (\"=\" | \"is-a\" | \"descendent-of\" | \"is-not-a\" | \"regex\" | \"in\" | \"not-in\" | \"generalizes\" | \"exists\");\n property: string;\n value: string;\n}\n\nexport interface ValueSetExpansion extends BackboneElement {\n contains?: ValueSetExpansionContains[];\n identifier?: string;\n offset?: number;\n parameter?: ValueSetExpansionParameter[];\n timestamp: string;\n total?: number;\n}\n\nexport interface ValueSetExpansionContains extends BackboneElement {\n abstract?: boolean;\n code?: string;\n contains?: ValueSetExpansionContains[];\n designation?: ValueSetComposeIncludeConceptDesignation[];\n display?: string;\n inactive?: boolean;\n system?: string;\n version?: string;\n}\n\nexport interface ValueSetExpansionParameter extends BackboneElement {\n name: string;\n valueBoolean?: boolean;\n valueCode?: string;\n valueDateTime?: string;\n valueDecimal?: number;\n valueInteger?: number;\n valueString?: string;\n valueUri?: string;\n}\n\n// CanonicalURL: http://hl7.org/fhir/StructureDefinition/ValueSet (pkg: hl7.fhir.r4.core#4.0.1)\nexport interface ValueSet extends DomainResource {\n resourceType: \"ValueSet\";\n\n compose?: ValueSetCompose;\n contact?: ContactDetail[];\n copyright?: string;\n date?: string;\n description?: string;\n expansion?: ValueSetExpansion;\n experimental?: boolean;\n identifier?: Identifier[];\n immutable?: boolean;\n jurisdiction?: CodeableConcept[];\n name?: string;\n publisher?: string;\n purpose?: string;\n status: (\"draft\" | \"active\" | \"retired\" | \"unknown\");\n title?: string;\n url?: string;\n useContext?: UsageContext[];\n version?: string;\n}\nexport const isValueSet = (resource: unknown): resource is ValueSet => {\n return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"ValueSet\";\n}\n","import { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport * as fhirschema from \"@atomic-ehr/fhirschema\";\nimport {\n type FHIRSchema,\n type FHIRSchemaElement,\n isStructureDefinition,\n type StructureDefinition,\n} from \"@atomic-ehr/fhirschema\";\nimport { type CodeSystem, isCodeSystem, isValueSet, type ValueSet } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport type {\n CanonicalUrl,\n Name,\n PackageMeta,\n RichFHIRSchema,\n RichStructureDefinition,\n RichValueSet,\n} from \"@typeschema/types\";\nimport { enrichFHIRSchema, enrichValueSet, packageMetaToFhir, packageMetaToNpm } from \"@typeschema/types\";\n\nexport type Register = {\n testAppendFs(fs: FHIRSchema): void;\n ensureSpecializationCanonicalUrl(name: string | Name | CanonicalUrl): CanonicalUrl;\n resolveSd(pkg: PackageMeta, canonicalUrl: CanonicalUrl): StructureDefinition | undefined;\n resolveFs(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema | undefined;\n resolveFsGenealogy(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[];\n resolveFsSpecializations(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[];\n allSd(): RichStructureDefinition[];\n /** Returns all FHIRSchemas from all packages in the resolver */\n allFs(): RichFHIRSchema[];\n /** Returns all ValueSets from all packages in the resolver */\n allVs(): RichValueSet[];\n resolveVs(_pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichValueSet | undefined;\n resolveAny(canonicalUrl: CanonicalUrl): any | undefined;\n resolveElementSnapshot(fhirSchema: RichFHIRSchema, path: string[]): FHIRSchemaElement;\n getAllElementKeys(elems: Record<string, FHIRSchemaElement>): string[];\n resolver: PackageAwareResolver;\n resolutionTree: () => ResolutionTree;\n};\n\nconst readPackageDependencies = async (manager: ReturnType<typeof CanonicalManager>, packageMeta: PackageMeta) => {\n const packageJSON = (await manager.packageJson(packageMeta.name)) as any;\n if (!packageJSON) return [];\n const dependencies = packageJSON.dependencies;\n if (dependencies !== undefined) {\n return Object.entries(dependencies).map(([name, version]): PackageMeta => {\n return { name: name as string, version: version as string };\n });\n }\n return [];\n};\n\n// FIXME: Tiding: PackageName, PkgId, PkgName\ntype PkgId = string;\ntype PkgName = string;\ntype FocusedResource = StructureDefinition | ValueSet | CodeSystem;\n\ntype CanonicalResolution<T> = {\n deep: number;\n pkg: PackageMeta;\n pkgId: PkgId;\n resource: T;\n};\n\ntype PackageIndex = {\n pkg: PackageMeta;\n canonicalResolution: Record<CanonicalUrl, CanonicalResolution<FocusedResource>[]>;\n fhirSchemas: Record<CanonicalUrl, RichFHIRSchema>;\n valueSets: Record<CanonicalUrl, RichValueSet>;\n};\n\ntype PackageAwareResolver = Record<PkgId, PackageIndex>;\nexport type ResolutionTree = Record<PkgName, Record<CanonicalUrl, { deep: number; pkg: PackageMeta }[]>>;\n\nconst mkEmptyPkgIndex = (pkg: PackageMeta): PackageIndex => {\n return {\n pkg,\n canonicalResolution: {},\n fhirSchemas: {},\n valueSets: {},\n };\n};\n\nconst mkPackageAwareResolver = async (\n manager: ReturnType<typeof CanonicalManager>,\n pkg: PackageMeta,\n deep: number,\n acc: PackageAwareResolver,\n logger?: CodegenLog,\n): Promise<PackageIndex> => {\n const pkgId = packageMetaToFhir(pkg);\n logger?.info(`${\" \".repeat(deep * 2)}+ ${pkgId}`);\n if (acc[pkgId]) return acc[pkgId];\n\n const index = mkEmptyPkgIndex(pkg);\n for (const resource of await manager.search({ package: pkg })) {\n const rawUrl = resource.url;\n if (!rawUrl) continue;\n if (!(isStructureDefinition(resource) || isValueSet(resource) || isCodeSystem(resource))) continue;\n const url = rawUrl as CanonicalUrl;\n if (index.canonicalResolution[url])\n logger?.dryWarn(\"#duplicateCanonical\", `Duplicate canonical URL: ${url} at ${pkgId}.`);\n index.canonicalResolution[url] = [{ deep, pkg: pkg, pkgId, resource: resource as FocusedResource }];\n }\n\n const deps = await readPackageDependencies(manager, pkg);\n for (const depPkg of deps) {\n const { canonicalResolution } = await mkPackageAwareResolver(manager, depPkg, deep + 1, acc, logger);\n for (const [surl, resolutions] of Object.entries(canonicalResolution)) {\n const url = surl as CanonicalUrl;\n index.canonicalResolution[url] = [...(index.canonicalResolution[url] || []), ...resolutions];\n }\n }\n for (const resolutionOptions of Object.values(index.canonicalResolution)) {\n resolutionOptions.sort((a, b) => a.deep - b.deep);\n }\n\n acc[pkgId] = index;\n return index;\n};\n\nconst enrichResolver = (resolver: PackageAwareResolver, logger?: CodegenLog) => {\n for (const { pkg, canonicalResolution } of Object.values(resolver)) {\n const pkgId = packageMetaToFhir(pkg);\n if (!resolver[pkgId]) throw new Error(`Package ${pkgId} not found`);\n let counter = 0;\n logger?.info(`FHIR Schema conversion for '${packageMetaToFhir(pkg)}' begins...`);\n for (const [_url, options] of Object.entries(canonicalResolution)) {\n const resolition = options[0];\n if (!resolition) throw new Error(`Resource not found`);\n const resource = resolition.resource;\n const resourcePkg = resolition.pkg;\n if (isStructureDefinition(resource)) {\n const fs = fhirschema.translate(resource as StructureDefinition) as FHIRSchema;\n const rfs = enrichFHIRSchema(fs, resourcePkg);\n counter++;\n resolver[pkgId].fhirSchemas[rfs.url] = rfs;\n }\n if (isValueSet(resource)) {\n const rvs = enrichValueSet(resource, resourcePkg);\n resolver[pkgId].valueSets[rvs.url] = rvs;\n }\n }\n logger?.info(`FHIR Schema conversion for '${packageMetaToFhir(pkg)}' completed: ${counter} successful`);\n }\n};\n\nconst packageAgnosticResolveCanonical = (resolver: PackageAwareResolver, url: CanonicalUrl, _logger?: CodegenLog) => {\n const options = Object.values(resolver).flatMap((pkg) => pkg.canonicalResolution[url]);\n if (!options) throw new Error(`No canonical resolution found for ${url} in any package`);\n // if (options.length > 1)\n // logger?.dry_warn(\n // `Multiple canonical resolutions found for ${url} in: ${options\n // .map((e) => {\n // return `\\n ${JSON.stringify({ ...e, resource: undefined, pkg: undefined })}`;\n // })\n // .join(\"\")}`,\n // );\n return options[0]?.resource;\n};\n\nexport type RegisterConfig = {\n logger?: CodegenLog;\n focusedPackages?: PackageMeta[];\n /** Custom FHIR package registry URL */\n registry?: string;\n};\n\nexport const registerFromManager = async (\n manager: ReturnType<typeof CanonicalManager>,\n { logger, focusedPackages }: RegisterConfig,\n): Promise<Register> => {\n const packages = focusedPackages ?? (await manager.packages());\n const resolver: PackageAwareResolver = {};\n for (const pkg of packages) {\n await mkPackageAwareResolver(manager, pkg, 0, resolver, logger);\n }\n enrichResolver(resolver, logger);\n\n const resolveFs = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const pkgIndex = resolver[packageMetaToFhir(pkg)];\n if (pkgIndex) {\n // Use canonicalResolution which is sorted by depth (closest first)\n const resolution = pkgIndex.canonicalResolution[canonicalUrl]?.[0];\n if (resolution) {\n return resolver[resolution.pkgId]?.fhirSchemas[canonicalUrl];\n }\n }\n // Fallback for packages not in resolver: search by package name in fhirSchemas\n for (const idx of Object.values(resolver)) {\n const fs = idx.fhirSchemas[canonicalUrl];\n if (fs && fs.package_meta.name === pkg.name) return fs;\n }\n // Last resort: return any match\n for (const idx of Object.values(resolver)) {\n const fs = idx.fhirSchemas[canonicalUrl];\n if (fs) return fs;\n }\n return undefined;\n };\n\n const resolveVs = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const pkgIndex = resolver[packageMetaToFhir(pkg)];\n if (pkgIndex) {\n // Use canonicalResolution which is sorted by depth (closest first)\n const resolution = pkgIndex.canonicalResolution[canonicalUrl]?.[0];\n if (resolution) {\n return resolver[resolution.pkgId]?.valueSets[canonicalUrl];\n }\n }\n // Fallback for packages not in resolver: search by package name in valueSets\n for (const idx of Object.values(resolver)) {\n const vs = idx.valueSets[canonicalUrl];\n if (vs && vs.package_meta.name === pkg.name) return vs;\n }\n // Last resort: return any match\n for (const idx of Object.values(resolver)) {\n const vs = idx.valueSets[canonicalUrl];\n if (vs) return vs;\n }\n return undefined;\n };\n\n const ensureSpecializationCanonicalUrl = (name: string | Name | CanonicalUrl): CanonicalUrl => {\n // Strip version suffix from canonical URL (e.g., \"Extension|4.0.1\" -> \"Extension\")\n if (name.includes(\"|\")) name = name.split(\"|\")[0] as CanonicalUrl;\n if (name.match(/^[a-zA-Z0-9]+$/)) {\n return `http://hl7.org/fhir/StructureDefinition/${name}` as CanonicalUrl;\n }\n return name as CanonicalUrl;\n };\n\n const resolveFsGenealogy = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n let fs = resolveFs(pkg, canonicalUrl);\n if (fs === undefined) throw new Error(`Failed to resolve FHIR Schema: '${canonicalUrl}'`);\n const genealogy = [fs];\n while (fs?.base) {\n const pkg = fs.package_meta;\n const baseUrl = ensureSpecializationCanonicalUrl(fs.base);\n fs = resolveFs(pkg, baseUrl);\n if (fs === undefined)\n throw new Error(\n `Failed to resolve FHIR Schema base for '${canonicalUrl}'. Problem: '${baseUrl}' from '${packageMetaToFhir(pkg)}'`,\n );\n genealogy.push(fs);\n }\n return genealogy;\n };\n\n const resolveFsSpecializations = (pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[] => {\n return resolveFsGenealogy(pkg, canonicalUrl).filter((fs) => fs.derivation === \"specialization\");\n };\n\n const resolveElementSnapshot = (fhirSchema: RichFHIRSchema, path: string[]): FHIRSchemaElement => {\n const geneology = resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url);\n const elemGeneology = resolveFsElementGenealogy(geneology, path);\n const elemSnapshot = mergeFsElementProps(elemGeneology);\n return elemSnapshot;\n };\n\n const getAllElementKeys = (elems: Record<string, FHIRSchemaElement>): string[] => {\n const keys: Set<string> = new Set();\n for (const [key, elem] of Object.entries(elems)) {\n keys.add(key);\n for (const choiceKey of elem?.choices || []) {\n if (!elems[choiceKey]) {\n keys.add(choiceKey);\n }\n }\n }\n return Array.from(keys);\n };\n\n let cachedResolutionTree: ResolutionTree | undefined;\n\n return {\n testAppendFs(rfs: RichFHIRSchema) {\n const pkgId = packageMetaToFhir(rfs.package_meta);\n if (!resolver[pkgId]) resolver[pkgId] = mkEmptyPkgIndex(rfs.package_meta);\n resolver[pkgId].fhirSchemas[rfs.url] = rfs;\n cachedResolutionTree = undefined;\n },\n resolveFs,\n resolveFsGenealogy: resolveFsGenealogy,\n resolveFsSpecializations: resolveFsSpecializations,\n ensureSpecializationCanonicalUrl,\n resolveSd: (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const res = resolver[packageMetaToFhir(pkg)]?.canonicalResolution[canonicalUrl]?.[0]?.resource;\n if (isStructureDefinition(res)) return res as StructureDefinition;\n return undefined;\n },\n allSd: () =>\n Object.values(resolver)\n .flatMap((pkgIndex) =>\n Object.values(pkgIndex.canonicalResolution).flatMap((resolutions) =>\n resolutions.map((r) => {\n const sd = r.resource as RichStructureDefinition;\n if (!sd.package_name) {\n return {\n ...sd,\n package_name: pkgIndex.pkg.name,\n package_version: pkgIndex.pkg.version,\n };\n }\n return sd;\n }),\n ),\n )\n .filter((r): r is RichStructureDefinition => isStructureDefinition(r))\n .sort((sd1, sd2) => sd1.url.localeCompare(sd2.url)),\n allFs: () => Object.values(resolver).flatMap((pkgIndex) => Object.values(pkgIndex.fhirSchemas)),\n allVs: () => Object.values(resolver).flatMap((pkgIndex) => Object.values(pkgIndex.valueSets)),\n resolveVs,\n resolveAny: (canonicalUrl: CanonicalUrl) => packageAgnosticResolveCanonical(resolver, canonicalUrl, logger),\n resolveElementSnapshot,\n getAllElementKeys,\n resolver,\n resolutionTree: () => {\n if (cachedResolutionTree) return cachedResolutionTree;\n const res: ResolutionTree = {};\n for (const [_pkgId, pkgIndex] of Object.entries(resolver)) {\n const pkgName = pkgIndex.pkg.name;\n res[pkgName] = {};\n for (const [surl, resolutions] of Object.entries(pkgIndex.canonicalResolution)) {\n const url = surl as CanonicalUrl;\n res[pkgName][url] = [];\n for (const resolution of resolutions) {\n res[pkgName][url].push({ deep: resolution.deep, pkg: resolution.pkg });\n }\n }\n }\n cachedResolutionTree = res;\n return res;\n },\n };\n};\n\nexport const registerFromPackageMetas = async (\n packageMetas: PackageMeta[],\n conf: RegisterConfig,\n): Promise<Register> => {\n const packageNames = packageMetas.map(packageMetaToNpm);\n conf?.logger?.info(`Loading FHIR packages: ${packageNames.join(\", \")}`);\n const manager = CanonicalManager({\n packages: packageNames,\n workingDir: \".codegen-cache/canonical-manager-cache\",\n registry: conf.registry || undefined,\n });\n await manager.init();\n return await registerFromManager(manager, {\n ...conf,\n focusedPackages: packageMetas,\n });\n};\n\nexport const resolveFsElementGenealogy = (genealogy: RichFHIRSchema[], path: string[]): FHIRSchemaElement[] => {\n const [top, ...rest] = path;\n if (top === undefined) return [];\n return genealogy\n .map((fs) => {\n if (!fs.elements) return undefined;\n let elem = fs.elements?.[top];\n for (const k of rest) {\n elem = elem?.elements?.[k];\n }\n return elem;\n })\n .filter((elem) => elem !== undefined);\n};\n\n/**\n * Merge scalar properties of an element across its genealogy chain.\n * Sub-elements are intentionally stripped — use resolveFsElementGenealogy\n * to access nested structure properly.\n */\nexport function mergeFsElementProps(genealogy: FHIRSchemaElement[]): FHIRSchemaElement {\n const revGenealogy = genealogy.reverse();\n const snapshot = Object.assign({}, ...revGenealogy);\n snapshot.elements = undefined;\n return snapshot;\n}\n","/**\n * Nested Types (BackboneElement) Handling\n *\n * Functions for extracting and transforming nested types from FHIRSchema\n */\n\nimport type { FHIRSchema, FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport { mergeFsElementProps, type Register, resolveFsElementGenealogy } from \"@root/typeschema/register\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport type { CanonicalUrl, Field, Identifier, Name, NestedIdentifier, NestedType, RichFHIRSchema } from \"../types\";\nimport { mkField, mkNestedField } from \"./field-builder\";\n\n/**\n * Check whether the specialization chain defines structural sub-elements at `path`.\n * \"Structural\" means the sub-elements define new fields, not just constrain\n * fields of the element's own type. For example:\n * - EN.item (type Base) has sub-elements family/given that Base doesn't define → structural\n * - typeId (type II) has sub-elements root/extension that II itself defines → constraining\n * - bodyweight.code (type CodeableConcept) has coding only in the constraint → not in specializations\n */\nconst hasStructuralElements = (register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean => {\n const specializations = register.resolveFsSpecializations(fhirSchema.package_meta, fhirSchema.url);\n const elemGens = resolveFsElementGenealogy(specializations, path);\n const elemType = mergeFsElementProps(elemGens).type;\n\n let typeKeys: Set<string> | undefined;\n if (elemType) {\n const typeUrl = register.ensureSpecializationCanonicalUrl(elemType);\n const typeGenealogy = register.resolveFsGenealogy(fhirSchema.package_meta, typeUrl);\n const keys = typeGenealogy.flatMap((fs) => Object.keys(fs.elements ?? {}));\n if (keys.length > 0) typeKeys = new Set(keys);\n }\n\n for (const elem of elemGens) {\n if (!elem.elements || Object.keys(elem.elements).length === 0) continue;\n if (typeKeys && !Object.keys(elem.elements).some((k) => !typeKeys.has(k))) continue;\n return true;\n }\n return false;\n};\n\n/**\n * Check if an element is structurally nested, using both the snapshot\n * (for BackboneElement detection) and specialization-chain element analysis.\n */\nexport const isNestedElement = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n snapshot: FHIRSchemaElement,\n raw?: FHIRSchemaElement,\n): boolean => {\n if (snapshot.type === \"BackboneElement\") return true;\n if (!raw?.elements || raw.choiceOf !== undefined) return false;\n return hasStructuralElements(register, fhirSchema, path);\n};\n\nconst collectNestedPaths = (fs: RichFHIRSchema): Set<string> => {\n if (!fs.elements) return new Set();\n return new Set(\n collectNestedElements(fs, [], fs.elements)\n .filter(([_, el]) => el.elements && Object.keys(el.elements).length > 0)\n .map(([path]) => path.join(\".\")),\n );\n};\n\nexport function mkNestedIdentifier(register: Register, fhirSchema: RichFHIRSchema, path: string[]): NestedIdentifier {\n // Resolve nested type origins from the genealogy so inherited nested types\n // (e.g. PN.item from EN) resolve to the defining type's nested type (EN#item).\n const nestedTypeOrigins = {} as Record<Name, CanonicalUrl>;\n const genealogy =\n fhirSchema.derivation === \"constraint\"\n ? register.resolveFsSpecializations(fhirSchema.package_meta, fhirSchema.url)\n : register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url);\n // Walk base-first so most-derived wins\n for (const fs of [...genealogy].reverse()) {\n const paths = collectNestedPaths(fs);\n for (const p of paths) {\n nestedTypeOrigins[p as Name] = `${fs.url}#${p}` as CanonicalUrl;\n }\n }\n const nestedName = path.join(\".\") as Name;\n const url = nestedTypeOrigins[nestedName] ?? (`${fhirSchema.url}#${nestedName}` as CanonicalUrl);\n const baseUrl = url.split(\"#\")[0] as CanonicalUrl;\n const baseFs = register.resolveFs(fhirSchema.package_meta, baseUrl);\n const packageMeta = baseFs?.package_meta ?? fhirSchema.package_meta;\n return {\n kind: \"nested\",\n package: packageMeta.name,\n version: packageMeta.version,\n name: nestedName,\n url: url,\n };\n}\n\nfunction collectNestedElements(\n fhirSchema: FHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement>,\n): [string[], FHIRSchemaElement][] {\n const nested: [string[], FHIRSchemaElement][] = [];\n\n for (const [key, element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n if (element.elements && element.choiceOf === undefined) nested.push([path, element]);\n if (element.elements) nested.push(...collectNestedElements(fhirSchema, path, element.elements));\n }\n\n return nested;\n}\n\nfunction transformNestedElements(\n register: Register,\n fhirSchema: RichFHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement>,\n logger?: CodegenLog,\n): Record<string, Field> {\n const fields: Record<string, Field> = {};\n\n // Collect all sub-element keys from the genealogy chain, not just the current type.\n // This ensures constraint profiles include inherited sub-elements from base types.\n const genealogy = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url);\n const elemGenealogy = resolveFsElementGenealogy(genealogy, parentPath);\n const allKeys = new Set<string>();\n for (const elem of elemGenealogy) {\n if (elem.elements) {\n for (const k of Object.keys(elem.elements)) {\n allKeys.add(k);\n }\n }\n }\n\n for (const key of allKeys) {\n const path = [...parentPath, key];\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n\n if (isNestedElement(register, fhirSchema, path, elemSnapshot, elements[key])) {\n fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot);\n } else {\n fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger);\n }\n }\n\n return fields;\n}\n\nexport function mkNestedTypes(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): NestedType[] | undefined {\n if (!fhirSchema.elements) return undefined;\n\n const nested = collectNestedElements(fhirSchema, [], fhirSchema.elements).filter(([path, element]) => {\n if (!element.elements || Object.keys(element.elements).length === 0) return false;\n // Verify the specialization chain also defines sub-elements for this path.\n // This filters out false positives from constraint profiles that add sub-elements\n // for constraining (e.g. bodyweight constraining code.coding — the base\n // Observation.code has no sub-elements, so it's not a nested type).\n if (element.type !== \"BackboneElement\") {\n return hasStructuralElements(register, fhirSchema, path);\n }\n return true;\n });\n\n const nestedTypes = [] as NestedType[];\n for (const [path, element] of nested) {\n const identifier = mkNestedIdentifier(register, fhirSchema, path);\n\n let baseName: Name;\n if (element.type === \"BackboneElement\" || !element.type) {\n baseName = \"BackboneElement\" as Name;\n } else {\n baseName = element.type as Name;\n }\n const baseUrl = register.ensureSpecializationCanonicalUrl(baseName);\n const baseFs = register.resolveFs(fhirSchema.package_meta, baseUrl);\n if (!baseFs) throw new Error(`Could not resolve base type ${baseName}`);\n const base: Identifier = {\n kind: \"complex-type\",\n package: baseFs.package_meta.name,\n version: baseFs.package_meta.version,\n name: baseName,\n url: baseUrl,\n };\n\n const fields = transformNestedElements(register, fhirSchema, path, element.elements ?? {}, logger);\n\n const nestedType: NestedType = {\n identifier,\n base,\n fields,\n };\n nestedTypes.push(nestedType);\n }\n\n nestedTypes.sort((a, b) => a.identifier.url.localeCompare(b.identifier.url));\n\n return nestedTypes.length === 0 ? undefined : nestedTypes;\n}\n\nexport function extractNestedDependencies(nestedTypes: NestedType[]): Identifier[] {\n const deps: Identifier[] = [];\n\n for (const nested of nestedTypes) {\n if (nested.base) {\n deps.push(nested.base);\n }\n\n for (const field of Object.values(nested.fields || {})) {\n if (\"type\" in field && field.type) {\n deps.push(field.type);\n }\n if (\"binding\" in field && field.binding) {\n deps.push(field.binding);\n }\n }\n }\n return deps;\n}\n","/**\n * Field Building Utilities\n *\n * Functions for transforming FHIRSchema elements into TypeSchema fields\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { Register } from \"@root/typeschema/register\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport { packageMetaToFhir } from \"@typeschema/types\";\nimport type {\n BindingIdentifier,\n EnumDefinition,\n Field,\n FieldSlice,\n FieldSlicing,\n Identifier,\n Name,\n RegularField,\n RichFHIRSchema,\n ValueConstraint,\n} from \"../types\";\nimport { BINDABLE_TYPES, buildEnum } from \"./binding\";\nimport { mkBindingIdentifier, mkIdentifier } from \"./identifier\";\nimport { mkNestedIdentifier } from \"./nested-types\";\n\nfunction isRequired(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean {\n const fieldName = path[path.length - 1];\n if (!fieldName) throw new Error(`Internal error: fieldName is missing for path ${path.join(\"/\")}`);\n const parentPath = path.slice(0, -1);\n\n const requires = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url).flatMap((fs) => {\n if (parentPath.length === 0) return fs.required || [];\n if (!fs.elements) return [];\n let elem: RichFHIRSchema | FHIRSchemaElement | undefined = fs;\n for (const k of parentPath) {\n elem = elem?.elements?.[k];\n }\n return elem?.required || [];\n });\n return new Set(requires).has(fieldName);\n}\n\nfunction isExcluded(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean {\n const fieldName = path[path.length - 1];\n if (!fieldName) throw new Error(`Internal error: fieldName is missing for path ${path.join(\"/\")}`);\n const parentPath = path.slice(0, -1);\n\n const requires = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url).flatMap((fs) => {\n if (parentPath.length === 0) return fs.excluded || [];\n if (!fs.elements) return [];\n let elem: RichFHIRSchema | FHIRSchemaElement | undefined = fs;\n for (const k of parentPath) {\n elem = elem?.elements?.[k];\n }\n return elem?.excluded || [];\n });\n\n return new Set(requires).has(fieldName);\n}\n\nconst buildReferences = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n element: FHIRSchemaElement,\n): Identifier[] | undefined => {\n if (!element.refers) return undefined;\n return element.refers.map((ref) => {\n const curl = register.ensureSpecializationCanonicalUrl(ref as Name);\n const fs = register.resolveFs(fhirSchema.package_meta, curl);\n if (!fs) throw new Error(`Failed to resolve fs for ${curl}`);\n return mkIdentifier(fs);\n });\n};\n\nconst extractSliceFieldNames = (schema: FHIRSchemaElement): Pick<FieldSlice, \"required\" | \"excluded\" | \"elements\"> => {\n const required = new Set<string>();\n const excluded = new Set<string>();\n\n if (schema.required) {\n for (const name of schema.required) required.add(name);\n }\n if (schema.excluded) {\n for (const name of schema.excluded) excluded.add(name);\n }\n if (schema.elements) {\n for (const [name, element] of Object.entries(schema.elements)) {\n if (element.min !== undefined && element.min > 0) {\n required.add(name);\n }\n }\n }\n\n const elements = schema.elements ? Object.keys(schema.elements) : undefined;\n\n return {\n required: required.size > 0 ? Array.from(required) : undefined,\n excluded: excluded.size > 0 ? Array.from(excluded) : undefined,\n elements: elements && elements.length > 0 ? elements : undefined,\n };\n};\n\nconst isEmptyMatch = (match: unknown): boolean => {\n if (!match) return true;\n if (typeof match === \"object\" && Object.keys(match as object).length === 0) return true;\n return false;\n};\n\nconst setNestedValue = (obj: Record<string, unknown>, path: string[], value: unknown): void => {\n let current = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i] as string;\n if (!current[key] || typeof current[key] !== \"object\") {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n const lastKey = path[path.length - 1] as string;\n current[lastKey] = value;\n};\n\n/** Navigate a remaining path through a match object to extract a leaf value */\nconst navigateMatch = (match: Record<string, unknown>, remainingPath: string[]): unknown => {\n let value: unknown = match;\n for (const seg of remainingPath) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n value = (value as Record<string, unknown>)[seg];\n } else {\n return undefined;\n }\n }\n return value;\n};\n\nconst collectDiscriminatorValue = (\n schema: FHIRSchemaElement,\n segments: string[],\n index: number,\n result: Record<string, unknown>,\n): void => {\n if (index >= segments.length || !schema.elements) return;\n\n const segment = segments[index] as string;\n const element = schema.elements[segment];\n if (!element) return;\n\n // Leaf: element has a fixed value\n if (index === segments.length - 1 && element.fixed?.value !== undefined) {\n setNestedValue(result, segments, element.fixed.value);\n return;\n }\n\n // Element has slicing with sub-slices — collect match values from required slices\n if (element.slicing?.slices) {\n const remainingSegments = segments.slice(index + 1);\n for (const subSlice of Object.values(element.slicing.slices)) {\n if (!subSlice.min || subSlice.min < 1 || !subSlice.match || typeof subSlice.match !== \"object\") continue;\n const match = subSlice.match as Record<string, unknown>;\n if (Object.keys(match).length === 0) continue;\n\n if (remainingSegments.length > 0) {\n const value = navigateMatch(match, remainingSegments);\n if (value !== undefined) setNestedValue(result, segments, value);\n } else {\n setNestedValue(result, segments.slice(0, index + 1), match);\n }\n }\n return;\n }\n\n // Continue navigating deeper\n collectDiscriminatorValue(element, segments, index + 1, result);\n};\n\n/**\n * Computes match values by navigating the slice's schema elements along discriminator paths.\n * Used when a slice has an empty match but the discriminator values are nested deeper\n * (e.g., component slices in BP where the discriminator crosses a nested slicing boundary).\n */\nconst computeMatchFromSchema = (\n discriminators: Array<{ path: string }>,\n schema: FHIRSchemaElement | undefined,\n): Record<string, unknown> | undefined => {\n if (!schema?.elements || !discriminators || discriminators.length === 0) return undefined;\n\n const result: Record<string, unknown> = {};\n for (const disc of discriminators) {\n const segments = disc.path.split(\".\");\n collectDiscriminatorValue(schema, segments, 0, result);\n }\n return Object.keys(result).length > 0 ? result : undefined;\n};\n\nconst buildSlicing = (element: FHIRSchemaElement): FieldSlicing | undefined => {\n const slicing = element.slicing;\n if (!slicing) return undefined;\n\n const slices: Record<string, FieldSlice> = {};\n for (const [name, slice] of Object.entries(slicing.slices ?? {})) {\n if (!slice) continue;\n const { required, excluded, elements } = slice.schema ? extractSliceFieldNames(slice.schema) : {};\n slices[name] = {\n min: slice.min,\n max: slice.max,\n match: isEmptyMatch(slice.match)\n ? computeMatchFromSchema(slicing.discriminator ?? [], slice.schema)\n : (slice.match as Record<string, unknown> | undefined),\n required,\n excluded,\n elements,\n };\n }\n\n return {\n discriminator: slicing.discriminator,\n rules: slicing.rules,\n ordered: slicing.ordered,\n slices: Object.keys(slices).length > 0 ? slices : undefined,\n };\n};\n\nexport function buildFieldType(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLog,\n): Identifier | undefined {\n if (element.elementReference) {\n const refPath = element.elementReference\n .slice(1) // drop canonicalUrl\n .filter((_, i) => i % 2 === 1); // drop `elements` from path\n return mkNestedIdentifier(register, fhirSchema, refPath);\n } else if (element.type) {\n const url = register.ensureSpecializationCanonicalUrl(element.type);\n const fieldFs = register.resolveFs(fhirSchema.package_meta, url);\n if (!fieldFs)\n throw new Error(\n `Could not resolve field type: <${fhirSchema.url}>.${path.join(\".\")}: <${element.type}> (pkg: '${packageMetaToFhir(fhirSchema.package_meta)}'))`,\n );\n return mkIdentifier(fieldFs);\n } else if (element.choices) {\n return undefined;\n } else if (fhirSchema.derivation === \"constraint\") {\n return undefined; // FIXME: should be removed\n } else {\n // Some packages (e.g., simplifier.core.r4.*) have incomplete element definitions\n // Log a warning but continue processing instead of throwing\n logger?.dryWarn(\n \"#fieldTypeNotFound\",\n `Can't recognize element type: <${fhirSchema.url}>.${path.join(\".\")} (pkg: '${packageMetaToFhir(fhirSchema.package_meta)}'): missing type info`,\n );\n return undefined;\n }\n}\n\nexport const mkField = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLog,\n rawElement?: FHIRSchemaElement,\n): Field => {\n let binding: BindingIdentifier | undefined;\n let enumResult: EnumDefinition | undefined;\n if (element.binding) {\n binding = mkBindingIdentifier(fhirSchema, path, element);\n\n if (BINDABLE_TYPES.has(element.type ?? \"\")) {\n enumResult = buildEnum(register, fhirSchema, element, logger);\n }\n }\n\n const fieldType = buildFieldType(register, fhirSchema, path, element, logger);\n // TODO: should be an exception\n if (!fieldType)\n logger?.dryWarn(\n \"#fieldTypeNotFound\",\n `Field type not found for '${fhirSchema.url}#${path.join(\".\")}' (${fhirSchema.derivation})`,\n );\n\n let valueConstraint: ValueConstraint | undefined;\n if (element.pattern) {\n valueConstraint = { kind: \"pattern\", type: element.pattern.type, value: element.pattern.value };\n } else if (element.fixed) {\n valueConstraint = { kind: \"fixed\", type: element.fixed.type, value: element.fixed.value };\n }\n\n // Auto-populate valueConstraint for CodeableConcept fields with fixed coding slices.\n // Uses rawElement because the resolved element snapshot has sub-elements stripped.\n const elemForCodingCheck = rawElement ?? element;\n if (!valueConstraint && elemForCodingCheck.elements?.coding?.slicing?.slices) {\n const codingSlices = elemForCodingCheck.elements.coding.slicing.slices;\n const allSliceValues = Object.values(codingSlices);\n const allRequired =\n allSliceValues.length > 0 &&\n allSliceValues.every(\n (s) =>\n s.min !== undefined &&\n s.min >= 1 &&\n s.match &&\n typeof s.match === \"object\" &&\n Object.keys(s.match as object).length > 0,\n );\n if (allRequired) {\n const codingValues = allSliceValues.map((s) => s.match as import(\"@atomic-ehr/fhirschema\").FHIRValue);\n valueConstraint = {\n kind: \"fixed\",\n type: \"CodeableConcept\",\n value: {\n coding: codingValues.length === 1 ? [codingValues[0]] : codingValues,\n } as unknown as import(\"@atomic-ehr/fhirschema\").FHIRValue,\n };\n }\n }\n\n return {\n type: fieldType as Identifier,\n required: isRequired(register, fhirSchema, path),\n excluded: isExcluded(register, fhirSchema, path),\n\n reference: buildReferences(register, fhirSchema, element),\n\n array: element.array || false,\n min: element.min,\n max: element.max,\n slicing: buildSlicing(element),\n\n choices: element.choices,\n choiceOf: element.choiceOf,\n\n binding: binding,\n enum: enumResult,\n valueConstraint,\n mustSupport: element.mustSupport,\n };\n};\n\nexport function mkNestedField(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n): RegularField {\n const nestedIdentifier = mkNestedIdentifier(register, fhirSchema, path);\n return {\n type: nestedIdentifier,\n array: element.array || false,\n required: isRequired(register, fhirSchema, path),\n excluded: isExcluded(register, fhirSchema, path),\n slicing: buildSlicing(element),\n };\n}\n","/**\n * Profile Extension Extraction\n *\n * Extracts ProfileExtension data from FHIR schemas with derivation === \"constraint\".\n * Handles both legacy sub-extension format (extension:name) and modern slicing format.\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { Register } from \"@root/typeschema/register\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport {\n type CanonicalUrl,\n concatIdentifiers,\n type ExtensionSubField,\n type Identifier,\n type Name,\n type ProfileExtension,\n type RichFHIRSchema,\n} from \"@typeschema/types\";\n\nimport { buildFieldType } from \"./field-builder\";\n\nconst extractExtensionValueTypes = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n extensionUrl: CanonicalUrl,\n logger?: CodegenLog,\n): Identifier[] | undefined => {\n const extensionSchema = register.resolveFs(fhirSchema.package_meta, extensionUrl);\n if (!extensionSchema?.elements) return undefined;\n\n const valueTypes: Identifier[] = [];\n for (const [key, element] of Object.entries(extensionSchema.elements)) {\n if (element.choiceOf !== \"value\" && !key.startsWith(\"value\")) continue;\n const fieldType = buildFieldType(register, extensionSchema, [key], element, logger);\n if (fieldType) valueTypes.push(fieldType);\n }\n\n return concatIdentifiers(valueTypes);\n};\n\nconst extractLegacySubExtensions = (\n register: Register,\n extensionSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): ExtensionSubField[] => {\n const subExtensions: ExtensionSubField[] = [];\n if (!extensionSchema.elements) return subExtensions;\n\n for (const [key, element] of Object.entries(extensionSchema.elements)) {\n if (!key.startsWith(\"extension:\")) continue;\n\n const sliceName = key.split(\":\")[1];\n if (!sliceName) continue;\n\n let valueType: Identifier | undefined;\n for (const [elemKey, elemValue] of Object.entries(element.elements ?? {})) {\n if (elemValue.choiceOf !== \"value\" && !elemKey.startsWith(\"value\")) continue;\n valueType = buildFieldType(register, extensionSchema, [key, elemKey], elemValue, logger);\n if (valueType) break;\n }\n\n subExtensions.push({\n name: sliceName,\n url: element.url ?? sliceName,\n valueType,\n min: element.min,\n max: element.max !== undefined ? String(element.max) : undefined,\n });\n }\n return subExtensions;\n};\n\nconst extractSlicingSubExtensions = (extensionSchema: RichFHIRSchema): ExtensionSubField[] => {\n const subExtensions: ExtensionSubField[] = [];\n const extensionElement = extensionSchema.elements?.extension as any;\n const slices = extensionElement?.slicing?.slices;\n if (!slices || typeof slices !== \"object\") return subExtensions;\n\n for (const [sliceName, sliceData] of Object.entries(slices)) {\n const slice = sliceData as any;\n const schema = slice.schema;\n if (!schema) continue;\n\n let valueType: Identifier | undefined;\n for (const [elemKey, elemValue] of Object.entries(schema.elements ?? {})) {\n const elem = elemValue as any;\n if (elem.choiceOf !== \"value\" && !elemKey.startsWith(\"value\")) continue;\n if (elem.type) {\n valueType = {\n kind: \"complex-type\" as const,\n package: extensionSchema.package_meta.name,\n version: extensionSchema.package_meta.version,\n name: elem.type as any,\n url: `http://hl7.org/fhir/StructureDefinition/${elem.type}` as CanonicalUrl,\n };\n break;\n }\n }\n\n subExtensions.push({\n name: sliceName,\n url: slice.match?.url ?? sliceName,\n valueType,\n min: schema._required ? 1 : (schema.min ?? 0),\n // biome-ignore lint/style/noNestedTernary : okay here\n max: schema.max !== undefined ? String(schema.max) : schema.array ? \"*\" : \"1\",\n });\n }\n return subExtensions;\n};\n\nconst extractSubExtensions = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n extensionUrl: CanonicalUrl,\n logger?: CodegenLog,\n): ExtensionSubField[] | undefined => {\n const extensionSchema = register.resolveFs(fhirSchema.package_meta, extensionUrl);\n if (!extensionSchema?.elements) return undefined;\n\n const legacySubs = extractLegacySubExtensions(register, extensionSchema, logger);\n const slicingSubs = extractSlicingSubExtensions(extensionSchema);\n const subExtensions = [...legacySubs, ...slicingSubs];\n\n return subExtensions.length > 0 ? subExtensions : undefined;\n};\n\nexport const extractProfileExtensions = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): ProfileExtension[] | undefined => {\n const extensions: ProfileExtension[] = [];\n\n const addExtensionEntry = (path: string[], name: string, schema: FHIRSchemaElement) => {\n let url = schema.url as CanonicalUrl | undefined;\n let valueTypes = url ? extractExtensionValueTypes(register, fhirSchema, url, logger) : undefined;\n const subExtensions = url ? extractSubExtensions(register, fhirSchema, url, logger) : undefined;\n\n // For extension profiles, sub-extension entries may lack a url.\n // Fall back to slicing data to extract the url and value type.\n if (!url) {\n const sliceSchema = (fhirSchema.elements?.extension as any)?.slicing?.slices?.[name]?.schema;\n if (sliceSchema) {\n url = (sliceSchema.elements?.url?.fixed?.value ?? name) as CanonicalUrl;\n for (const [_elemKey, elemValue] of Object.entries(sliceSchema.elements ?? {})) {\n const elem = elemValue as { choiceOf?: string; type?: string };\n if (elem.choiceOf === \"value\" && elem.type) {\n valueTypes = [\n {\n kind: \"complex-type\" as const,\n package: fhirSchema.package_meta.name,\n version: fhirSchema.package_meta.version,\n name: elem.type as Name,\n url: `http://hl7.org/fhir/StructureDefinition/${elem.type}` as CanonicalUrl,\n },\n ];\n break;\n }\n }\n }\n }\n\n const isComplex = subExtensions && subExtensions.length > 0;\n extensions.push({\n name,\n path: [...path, \"extension\"].join(\".\"),\n url,\n min: schema.min,\n max: schema.max !== undefined ? String(schema.max) : undefined,\n mustSupport: schema.mustSupport,\n valueTypes,\n subExtensions,\n isComplex,\n });\n };\n\n const walkElement = (path: string[], element: Pick<FHIRSchemaElement, \"extensions\" | \"elements\">) => {\n if (element.extensions) {\n for (const [name, schema] of Object.entries(element.extensions)) {\n addExtensionEntry(path, name, schema);\n }\n }\n if (element.elements) {\n for (const [key, child] of Object.entries(element.elements)) {\n walkElement([...path, key], child);\n }\n }\n };\n\n walkElement([], fhirSchema);\n\n const seen = new Set<string>();\n const deduped = extensions.filter((ext) => {\n const key = `${ext.url}:${ext.path}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n return deduped.length === 0 ? undefined : deduped;\n};\n","/**\n * Main FHIRSchema to TypeSchema Transformer\n *\n * Core transformation logic for converting FHIRSchema to TypeSchema format\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport { shouldSkipCanonical } from \"@root/typeschema/skip-hack\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport type { Register } from \"@typeschema/register\";\nimport {\n concatIdentifiers,\n type Field,\n type Identifier,\n isNestedIdentifier,\n isProfileIdentifier,\n type NestedType,\n packageMetaToFhir,\n type RichFHIRSchema,\n type RichValueSet,\n type TypeSchema,\n type ValueSetTypeSchema,\n} from \"@typeschema/types\";\n\nimport { collectBindingSchemas, extractValueSetConceptsByUrl } from \"./binding\";\nimport { mkField, mkNestedField } from \"./field-builder\";\nimport { mkIdentifier, mkValueSetIdentifierByUrl } from \"./identifier\";\nimport { extractNestedDependencies, isNestedElement, mkNestedTypes } from \"./nested-types\";\nimport { extractProfileExtensions } from \"./profile-extensions\";\n\nexport function mkFields(\n register: Register,\n fhirSchema: RichFHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement> | undefined,\n logger?: CodegenLog,\n): Record<string, Field> | undefined {\n if (!elements) return undefined;\n\n const fields: Record<string, Field> = {};\n for (const key of register.getAllElementKeys(elements)) {\n const path = [...parentPath, key];\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n const fcurl = elemSnapshot.type ? register.ensureSpecializationCanonicalUrl(elemSnapshot.type) : undefined;\n if (fcurl && shouldSkipCanonical(fhirSchema.package_meta, fcurl).shouldSkip) {\n logger?.warn(\n \"#skipCanonical\",\n `Skipping field ${path} for ${fcurl} due to skip hack ${shouldSkipCanonical(fhirSchema.package_meta, fcurl).reason}`,\n );\n continue;\n }\n if (isNestedElement(register, fhirSchema, path, elemSnapshot, elements[key])) {\n fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot);\n } else {\n fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger, elements[key]);\n }\n }\n\n return fields;\n}\n\nfunction extractFieldDependencies(fields: Record<string, Field>): Identifier[] {\n const deps: Identifier[] = [];\n\n for (const field of Object.values(fields)) {\n if (\"type\" in field && field.type) {\n deps.push(field.type);\n }\n if (\"binding\" in field && field.binding) {\n deps.push(field.binding);\n }\n }\n\n return deps;\n}\n\nexport async function transformValueSet(\n register: Register,\n valueSet: RichValueSet,\n logger?: CodegenLog,\n): Promise<ValueSetTypeSchema> {\n if (!valueSet.url) throw new Error(\"ValueSet URL is required\");\n\n const identifier = mkValueSetIdentifierByUrl(register, valueSet.package_meta, valueSet.url);\n const concept = extractValueSetConceptsByUrl(register, valueSet.package_meta, valueSet.url, logger);\n return {\n identifier: identifier,\n description: valueSet.description,\n concept: concept,\n compose: !concept ? valueSet.compose : undefined,\n };\n}\n\nexport function extractDependencies(\n identifier: Identifier,\n base: Identifier | undefined,\n fields: Record<string, Field> | undefined,\n nestedTypes: NestedType[] | undefined,\n): Identifier[] | undefined {\n const deps = [];\n if (base) deps.push(base);\n if (fields) deps.push(...extractFieldDependencies(fields));\n if (nestedTypes) deps.push(...extractNestedDependencies(nestedTypes));\n\n const localNestedTypeUrls = new Set(nestedTypes?.map((nt) => nt.identifier.url));\n\n const filtered = deps.filter((dep) => {\n if (dep.url === identifier.url) return false;\n if (isProfileIdentifier(identifier)) return true;\n if (!isNestedIdentifier(dep)) return true;\n return !localNestedTypeUrls.has(dep.url);\n });\n\n return concatIdentifiers(filtered);\n}\n\nfunction transformFhirSchemaResource(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): TypeSchema[] {\n const identifier = mkIdentifier(fhirSchema);\n\n let base: Identifier | undefined;\n if (fhirSchema.base) {\n const baseFs = register.resolveFs(\n fhirSchema.package_meta,\n register.ensureSpecializationCanonicalUrl(fhirSchema.base),\n );\n if (!baseFs)\n throw new Error(\n `Base resource not found '${fhirSchema.base}' for <${fhirSchema.url}> from ${packageMetaToFhir(fhirSchema.package_meta)}`,\n );\n base = mkIdentifier(baseFs);\n }\n\n const fields = mkFields(register, fhirSchema, [], fhirSchema.elements, logger);\n const nested = mkNestedTypes(register, fhirSchema, logger);\n\n const extensions =\n fhirSchema.derivation === \"constraint\" ? extractProfileExtensions(register, fhirSchema, logger) : undefined;\n const extensionDeps = extensions?.flatMap((ext) => ext.valueTypes ?? []) ?? [];\n const dependencies = extractDependencies(identifier, base, fields, nested);\n\n const typeSchema: TypeSchema = {\n identifier,\n base,\n fields,\n nested,\n description: fhirSchema.description,\n dependencies: concatIdentifiers(dependencies, extensionDeps),\n extensions,\n };\n\n const bindingSchemas = collectBindingSchemas(register, fhirSchema, logger);\n return [typeSchema, ...bindingSchemas];\n}\n\nexport async function transformFhirSchema(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): Promise<TypeSchema[]> {\n return transformFhirSchemaResource(register, fhirSchema, logger);\n}\n","/**\n * TypeSchema Core Module\n *\n * Main entry point for the TypeSchema library providing core functions\n * for FHIR-to-TypeSchema generation, parsing, and validation.\n *\n * This module focuses on:\n * - Converting FHIR to TypeSchema format\n * - Reading TypeSchema documents\n * - Validating TypeSchema documents\n */\n\nimport type { CodegenLog } from \"@root/utils/log\";\nimport { transformFhirSchema, transformValueSet } from \"./core/transformer\";\nimport type { TypeSchemaCollisions } from \"./ir/types\";\nimport type { Register } from \"./register\";\nimport { shouldSkipCanonical } from \"./skip-hack\";\nimport type { CanonicalUrl, PkgName } from \"./types\";\nimport { hashSchema, packageMetaToFhir, type TypeSchema } from \"./types\";\n\n// Re-export core dependencies\nexport { shouldSkipCanonical, skipList } from \"./skip-hack\";\nexport type { Identifier, TypeSchema } from \"./types\";\n\nexport interface GenerateTypeSchemasResult {\n schemas: TypeSchema[];\n collisions: TypeSchemaCollisions;\n}\n\ntype SchemaWithSource = {\n schema: TypeSchema;\n sourcePackage: PkgName;\n sourceCanonical: CanonicalUrl;\n};\n\nconst deduplicateSchemas = (schemasWithSources: SchemaWithSource[], logger?: CodegenLog): GenerateTypeSchemasResult => {\n // key -> hash\n const groups: Record<string, Record<string, { typeSchema: TypeSchema; sources: SchemaWithSource[] }>> = {};\n\n for (const item of schemasWithSources) {\n const key = `${item.schema.identifier.url}|${item.schema.identifier.package}`;\n const hash = hashSchema(item.schema);\n\n groups[key] ??= {};\n groups[key][hash] ??= { typeSchema: item.schema, sources: [] };\n groups[key][hash].sources.push(item);\n }\n\n const schemas: TypeSchema[] = [];\n const collisions: TypeSchemaCollisions = {};\n\n for (const versions of Object.values(groups)) {\n const sorted = Object.values(versions).sort((a, b) => b.sources.length - a.sources.length);\n const best = sorted[0];\n if (!best) continue;\n\n schemas.push(best.typeSchema);\n\n if (sorted.length > 1) {\n const pkg = best.typeSchema.identifier.package;\n const url = best.typeSchema.identifier.url;\n logger?.dryWarn(\"#duplicateSchema\", `'${url}' from '${pkg}' has ${sorted.length} versions`);\n collisions[pkg] ??= {};\n collisions[pkg][url] = sorted.flatMap((v) =>\n v.sources.map((s) => ({\n typeSchema: v.typeSchema,\n sourcePackage: s.sourcePackage,\n sourceCanonical: s.sourceCanonical,\n })),\n );\n }\n }\n\n return { schemas, collisions };\n};\n\nexport const generateTypeSchemas = async (\n register: Register,\n logger?: CodegenLog,\n): Promise<GenerateTypeSchemasResult> => {\n const schemasWithSources: { schema: TypeSchema; sourcePackage: PkgName; sourceCanonical: CanonicalUrl }[] = [];\n\n for (const fhirSchema of register.allFs()) {\n const pkgId = packageMetaToFhir(fhirSchema.package_meta);\n\n const skipCheck = shouldSkipCanonical(fhirSchema.package_meta, fhirSchema.url);\n if (skipCheck.shouldSkip) {\n logger?.dryWarn(\"#skipCanonical\", `Skip ${fhirSchema.url} from ${pkgId}. Reason: ${skipCheck.reason}`);\n continue;\n }\n\n for (const schema of await transformFhirSchema(register, fhirSchema, logger)) {\n schemasWithSources.push({\n schema,\n sourcePackage: pkgId,\n sourceCanonical: fhirSchema.url,\n });\n }\n }\n\n for (const vsSchema of register.allVs()) {\n schemasWithSources.push({\n schema: await transformValueSet(register, vsSchema, logger),\n sourcePackage: packageMetaToFhir(vsSchema.package_meta),\n sourceCanonical: vsSchema.url,\n });\n }\n\n return deduplicateSchemas(schemasWithSources, logger);\n};\n","import {\n type CanonicalUrl,\n type Field,\n type Identifier,\n isChoiceDeclarationField,\n isPrimitiveTypeSchema,\n isProfileTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type NestedType,\n type PkgName,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { LogicalPromotionConf } from \"./types\";\n\nexport const promoteLogical = (tsIndex: TypeSchemaIndex, promotes: LogicalPromotionConf): TypeSchemaIndex => {\n const promoteSets: Record<PkgName, Set<CanonicalUrl>> = Object.fromEntries(\n Object.entries(promotes).map(([pkg, urls]) => [pkg, new Set(urls)]),\n );\n\n const identifierToString = (i: Identifier): string => `${i.package}-${i.version}-${i.kind}-${i.url}`;\n const renames: Record<string, Identifier> = Object.fromEntries(\n tsIndex.schemas\n .map((schema) => {\n const promo = promoteSets[schema.identifier.package]?.has(schema.identifier.url);\n if (!promo) return undefined;\n if (schema.identifier.kind !== \"logical\")\n throw new Error(`Unexpected schema kind: ${JSON.stringify(schema.identifier)}`);\n return [identifierToString(schema.identifier), { ...schema.identifier, kind: \"resource\" }] as const;\n })\n .filter((e) => e !== undefined),\n );\n const replace = (i: Identifier): Identifier => renames[identifierToString(i)] || i;\n const replaceInFields = (fields: Record<string, Field> | undefined) => {\n if (!fields) return undefined;\n return Object.fromEntries(\n Object.entries(fields).map(([k, f]) => {\n if (isChoiceDeclarationField(f)) return [k, f];\n return [k, { ...f, type: f.type ? replace(f.type) : undefined }];\n }),\n );\n };\n\n const schemas = tsIndex.schemas.map((schema) => {\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema)) return schema;\n\n const cloned = JSON.parse(JSON.stringify(schema));\n cloned.identifier = replace(cloned.identifier);\n cloned.dependencies = cloned.dependencies?.map(replace);\n if (isSpecializationTypeSchema(cloned) || isProfileTypeSchema(cloned)) {\n cloned.fields = replaceInFields(cloned.fields);\n cloned.nested = cloned.nested?.map((n: NestedType) => {\n return {\n ...n,\n base: replace(n.base),\n fields: replaceInFields(n.fields),\n };\n });\n }\n return cloned;\n });\n\n const promotedIndex = tsIndex.replaceSchemas(schemas);\n promotedIndex.irReport().logicalPromotion = {\n packages: Object.fromEntries(\n Object.entries(promotes).map(([pkgName, urls]) => [pkgName, { promotedCanonicals: [...urls].sort() }]),\n ),\n };\n return promotedIndex;\n};\n","import assert from \"node:assert\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport { extractDependencies } from \"../core/transformer\";\nimport {\n type CanonicalUrl,\n type Field,\n isBindingSchema,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveTypeSchema,\n isProfileTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type NestedType,\n type PkgName,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"../types\";\nimport type { TypeSchemaIndex } from \"../utils\";\nimport type { IrReport, TreeShakeConf, TreeShakeReport, TreeShakeRule } from \"./types\";\n\nconst ensureIrReport = (indexOrReport: TypeSchemaIndex | IrReport): IrReport => {\n if (\"irReport\" in indexOrReport && typeof indexOrReport.irReport === \"function\") {\n return indexOrReport.irReport();\n } else {\n return indexOrReport as IrReport;\n }\n};\n\nexport const rootTreeShakeReadme = (report: TypeSchemaIndex | IrReport) => {\n const { treeShake: treeShakeReport } = ensureIrReport(report);\n assert(treeShakeReport);\n const lines = [\"# Tree Shake Report\", \"\"];\n if (treeShakeReport.skippedPackages.length === 0) lines.push(\"All packages are included.\");\n else lines.push(\"Skipped packages:\", \"\");\n for (const pkgName of treeShakeReport.skippedPackages) {\n lines.push(`- ${pkgName}`);\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n};\n\nexport const packageTreeShakeReadme = (report: TypeSchemaIndex | IrReport, pkgName: PkgName) => {\n const { treeShake: treeShakeReport } = ensureIrReport(report);\n assert(treeShakeReport);\n const lines = [`# Package: ${pkgName}`, \"\"];\n assert(treeShakeReport.packages[pkgName]);\n lines.push(\"## Canonical Fields Changes\", \"\");\n if (Object.keys(treeShakeReport.packages[pkgName].canonicals).length === 0) {\n lines.push(\"All canonicals translated as is.\", \"\");\n } else {\n for (const [canonicalUrl, { skippedFields }] of Object.entries(treeShakeReport.packages[pkgName].canonicals)) {\n lines.push(`- <${canonicalUrl}>`);\n if (skippedFields.length === 0) {\n lines.push(\" - All fields translated as is.\", \"\");\n } else {\n lines.push(` - Skipped fields: ${skippedFields.map((f: string) => `\\`${f}\\``).join(\", \")}`);\n lines.push(\"\");\n }\n }\n lines.push(\"\");\n }\n lines.push(\"## Skipped Canonicals\", \"\");\n if (treeShakeReport.packages[pkgName].skippedCanonicals.length === 0) {\n lines.push(\"No skipped canonicals\");\n } else {\n lines.push(\"Skipped canonicals:\", \"\");\n for (const canonicalUrl of treeShakeReport.packages[pkgName].skippedCanonicals) {\n lines.push(`- <${canonicalUrl}>`);\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n};\n\nconst mutableSelectFields = (schema: RegularTypeSchema, selectFields: string[]) => {\n const selectedFields: Record<string, Field> = {};\n\n const selectPolimorphic: Record<string, { declaration?: string[]; instances?: string[] }> = {};\n for (const fieldName of selectFields) {\n const field = schema.fields?.[fieldName];\n if (!schema.fields || !field) throw new Error(`Field ${fieldName} not found`);\n\n if (isChoiceDeclarationField(field)) {\n if (!selectPolimorphic[fieldName]) selectPolimorphic[fieldName] = {};\n selectPolimorphic[fieldName].declaration = field.choices;\n } else if (isChoiceInstanceField(field)) {\n const choiceName = field.choiceOf;\n if (!selectPolimorphic[choiceName]) selectPolimorphic[choiceName] = {};\n selectPolimorphic[choiceName].instances = [...(selectPolimorphic[choiceName].instances ?? []), fieldName];\n } else {\n selectedFields[fieldName] = field;\n }\n }\n\n for (const [choiceName, { declaration, instances }] of Object.entries(selectPolimorphic)) {\n const choices = instances ?? declaration;\n assert(choices);\n for (const choiceInstanceName of choices) {\n const field = schema.fields?.[choiceInstanceName];\n assert(field);\n selectedFields[choiceInstanceName] = field;\n }\n const decl = schema.fields?.[choiceName];\n assert(decl);\n selectedFields[choiceName] = { ...decl, choices: choices };\n }\n schema.fields = selectedFields;\n};\n\nconst mutableIgnoreFields = (schema: RegularTypeSchema, ignoreFields: string[]) => {\n for (const fieldName of ignoreFields) {\n const field = schema.fields?.[fieldName];\n if (!schema.fields || !field) throw new Error(`Field ${fieldName} not found`);\n if (schema.fields) {\n if (isChoiceDeclarationField(field)) {\n for (const choiceName of field.choices) {\n delete schema.fields[choiceName];\n }\n }\n\n if (isChoiceInstanceField(field)) {\n const choiceDeclaration = schema.fields[field.choiceOf];\n assert(isChoiceDeclarationField(choiceDeclaration));\n choiceDeclaration.choices = choiceDeclaration.choices.filter((c) => c !== fieldName);\n if (choiceDeclaration.choices.length === 0) {\n delete schema.fields[field.choiceOf];\n }\n }\n\n delete schema.fields[fieldName];\n }\n }\n};\n\nconst mutableFillReport = (report: TreeShakeReport, tsIndex: TypeSchemaIndex, shakedIndex: TypeSchemaIndex) => {\n const packages = Object.keys(tsIndex.schemasByPackage);\n const shakedPackages = Object.keys(shakedIndex.schemasByPackage);\n const skippedPackages = packages.filter((pkg) => !shakedPackages.includes(pkg));\n report.skippedPackages = skippedPackages;\n\n for (const [pkgName, shakedSchemas] of Object.entries(shakedIndex.schemasByPackage)) {\n if (skippedPackages.includes(pkgName)) continue;\n const tsSchemas = tsIndex.schemasByPackage[pkgName];\n assert(tsSchemas);\n report.packages[pkgName] = {\n skippedCanonicals: tsSchemas\n .filter((schema) => !shakedSchemas.includes(schema))\n .map((schema) => schema.identifier.url)\n .sort(),\n canonicals: Object.fromEntries(\n shakedSchemas\n .map((shakedSchema) => {\n const schema = tsIndex.resolve(shakedSchema.identifier);\n assert(schema);\n if (!isSpecializationTypeSchema(schema)) return undefined;\n assert(isSpecializationTypeSchema(shakedSchema));\n if (!schema.fields) return undefined;\n if (!shakedSchema.fields) {\n return [shakedSchema.identifier.url, Object.keys(schema.fields)];\n }\n const shakedFieldNames = Object.keys(shakedSchema.fields);\n const skippedFields = Object.keys(schema.fields)\n .filter((field) => !shakedFieldNames.includes(field))\n .sort();\n if (skippedFields.length === 0) return undefined;\n return [shakedSchema.identifier.url, { skippedFields }] as const;\n })\n .filter((e): e is readonly [CanonicalUrl, { skippedFields: string[] }] => e !== undefined),\n ),\n };\n }\n};\n\nexport const treeShakeTypeSchema = (schema: TypeSchema, rule: TreeShakeRule, _logger?: CodegenLog): TypeSchema => {\n schema = JSON.parse(JSON.stringify(schema));\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema) || isBindingSchema(schema)) return schema;\n\n if (rule.selectFields) {\n if (rule.ignoreFields) throw new Error(\"Cannot use both ignoreFields and selectFields in the same rule\");\n mutableSelectFields(schema, rule.selectFields);\n }\n\n if (rule.ignoreFields) {\n if (rule.selectFields) throw new Error(\"Cannot use both ignoreFields and selectFields in the same rule\");\n mutableIgnoreFields(schema, rule.ignoreFields);\n }\n\n if (schema.nested) {\n const usedTypes = new Set<CanonicalUrl>();\n const collectUsedNestedTypes = (s: RegularTypeSchema | NestedType) => {\n Object.values(s.fields ?? {})\n .filter(isNotChoiceDeclarationField)\n .filter((f) => isNestedIdentifier(f.type))\n .forEach((f) => {\n const url = f.type.url;\n if (!usedTypes.has(url)) {\n usedTypes.add(url);\n const nestedTypeDef = schema.nested?.find((f) => f.identifier.url === url);\n assert(nestedTypeDef);\n collectUsedNestedTypes(nestedTypeDef);\n }\n });\n };\n collectUsedNestedTypes(schema);\n schema.nested = schema.nested.filter((n) => usedTypes.has(n.identifier.url));\n }\n\n schema.dependencies = extractDependencies(schema.identifier, schema.base, schema.fields, schema.nested);\n return schema;\n};\n\nexport const treeShake = (tsIndex: TypeSchemaIndex, treeShake: TreeShakeConf): TypeSchemaIndex => {\n const focusedSchemas: TypeSchema[] = [];\n for (const [pkgId, requires] of Object.entries(treeShake)) {\n for (const [url, rule] of Object.entries(requires)) {\n const schema = tsIndex.resolveByUrl(pkgId, url as CanonicalUrl);\n if (!schema) throw new Error(`Schema not found for ${pkgId} ${url}`);\n const shaked = treeShakeTypeSchema(schema, rule);\n focusedSchemas.push(shaked);\n }\n }\n const collectDeps = (schemas: TypeSchema[], acc: Record<string, TypeSchema>): TypeSchema[] => {\n if (schemas.length === 0) return Object.values(acc);\n for (const schema of schemas) {\n acc[JSON.stringify(schema.identifier)] = schema;\n }\n\n const newSchemas: TypeSchema[] = [];\n\n for (const schema of schemas) {\n if (isSpecializationTypeSchema(schema) || isProfileTypeSchema(schema)) {\n if (!schema.dependencies) continue;\n schema.dependencies.forEach((dep) => {\n const depSchema = tsIndex.resolve(dep);\n if (!depSchema)\n throw new Error(\n `Dependent schema ${JSON.stringify(dep)} not found for ${JSON.stringify(schema.identifier)}`,\n );\n const id = JSON.stringify(depSchema.identifier);\n if (!acc[id]) newSchemas.push(depSchema);\n });\n if (schema.nested) {\n for (const nest of schema.nested) {\n if (isNestedIdentifier(nest.identifier)) continue;\n const id = JSON.stringify(nest.identifier);\n if (!acc[id]) newSchemas.push(nest);\n }\n }\n }\n }\n return collectDeps(newSchemas, acc);\n };\n\n const shaked = collectDeps(focusedSchemas, {});\n\n const shakedIndex = tsIndex.replaceSchemas(shaked);\n const treeShakeReport: TreeShakeReport = { skippedPackages: [], packages: {} };\n const irReport = shakedIndex.irReport();\n irReport.treeShake = treeShakeReport;\n mutableFillReport(treeShakeReport, tsIndex, shakedIndex);\n return shakedIndex;\n};\n","import assert from \"node:assert\";\nimport * as Path from \"node:path\";\nimport type { RichFHIRSchema, RichStructureDefinition } from \"@root/typeschema/types\";\nimport { type CanonicalUrl, extractNameFromCanonical, type TypeSchema } from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport YAML from \"yaml\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport interface IntrospectionWriterOptions extends FileSystemWriterOptions {\n typeSchemas?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n typeTree?: string /** .json or .yaml file */;\n fhirSchemas?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n structureDefinitions?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n}\n\nconst normalizeFileName = (str: string): string => {\n const res = str.replace(/[^a-zA-Z0-9\\-_.@#()]/g, \"\");\n if (res.length === 0) return \"unknown\";\n return res;\n};\n\nconst typeSchemaToJson = (ts: TypeSchema, pretty: boolean): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(ts.identifier.package);\n const name = normalizeFileName(`${ts.identifier.name}(${extractNameFromCanonical(ts.identifier.url)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n genContent: () => JSON.stringify(ts, null, pretty ? 2 : undefined),\n };\n};\n\nconst fhirSchemaToJson = (fs: RichFHIRSchema, pretty: boolean): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(fs.package_meta.name);\n const name = normalizeFileName(`${fs.name}(${extractNameFromCanonical(fs.url)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n genContent: () => JSON.stringify(fs, null, pretty ? 2 : undefined),\n };\n};\n\nconst structureDefinitionToJson = (\n sd: RichStructureDefinition,\n pretty: boolean,\n): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(sd.package_name ?? \"unknown\");\n const name = normalizeFileName(`${sd.name}(${extractNameFromCanonical(sd.url as CanonicalUrl)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n // HACK: for some reason ID may change between CI and local install\n genContent: () => JSON.stringify({ ...sd, id: undefined }, null, pretty ? 2 : undefined),\n };\n};\n\nexport class IntrospectionWriter extends FileSystemWriter<IntrospectionWriterOptions> {\n async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n this.logger()?.info(`IntrospectionWriter: Begin`);\n if (this.opts.typeTree) {\n await this.writeTypeTree(tsIndex);\n this.logger()?.info(`IntrospectionWriter: Type tree written to ${this.opts.typeTree}`);\n }\n\n if (this.opts.typeSchemas) {\n if (Path.extname(this.opts.typeSchemas) === \".ndjson\") {\n this.writeNdjson(tsIndex.schemas, this.opts.typeSchemas, typeSchemaToJson);\n } else {\n const items = tsIndex.schemas.map((ts) => typeSchemaToJson(ts, true));\n const seenFilenames = new Set<string>();\n const dedupedItems = items.filter((item) => {\n if (seenFilenames.has(item.filename)) return false;\n seenFilenames.add(item.filename);\n return true;\n });\n\n this.cd(this.opts.typeSchemas, () => {\n for (const { filename, genContent } of dedupedItems) {\n const fileName = `${filename}.json`;\n this.cd(Path.dirname(fileName), () => {\n this.cat(Path.basename(fileName), () => {\n this.write(genContent());\n });\n });\n }\n\n for (const [pkg, canonicals] of Object.entries(tsIndex.irReport().collisions ?? {})) {\n this.cd(`${normalizeFileName(pkg)}`, () => {\n for (const [canonical, entries] of Object.entries(canonicals)) {\n if (entries.length <= 1) continue;\n const firstEntry = entries[0];\n assert(firstEntry);\n const name = normalizeFileName(\n `${firstEntry.typeSchema.identifier.name}(${extractNameFromCanonical(canonical as CanonicalUrl)})`,\n );\n this.cd(Path.join(\"collisions\", name), () => {\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n this.cat(`${i + 1}.json`, () => {\n this.write(JSON.stringify(entry, null, 2));\n });\n }\n });\n }\n });\n }\n });\n }\n this.logger()?.info(\n `IntrospectionWriter: ${tsIndex.schemas.length} TypeSchema written to ${this.opts.typeSchemas}`,\n );\n }\n\n if (this.opts.fhirSchemas && tsIndex.register) {\n const outputPath = this.opts.fhirSchemas;\n const allFs = tsIndex.register.allFs();\n // Deduplicate FHIR schemas by URL (same schema can appear from different packages)\n const seenUrls = new Set<string>();\n const fhirSchemas = allFs.filter((fs) => {\n if (seenUrls.has(fs.url)) return false;\n seenUrls.add(fs.url);\n return true;\n });\n\n if (Path.extname(outputPath) === \".ndjson\") {\n this.writeNdjson(fhirSchemas, outputPath, fhirSchemaToJson);\n } else {\n this.writeJsonFiles(\n fhirSchemas.map((fs) => fhirSchemaToJson(fs, true)),\n outputPath,\n );\n }\n\n this.logger()?.info(`IntrospectionWriter: ${fhirSchemas.length} FHIR schema written to ${outputPath}`);\n }\n\n if (this.opts.structureDefinitions && tsIndex.register) {\n const outputPath = this.opts.structureDefinitions;\n const allSd = tsIndex.register.allSd();\n // Deduplicate SDs by URL (same SD can appear multiple times from different packages)\n const seenUrls = new Set<string>();\n const structureDefinitions = allSd.filter((sd) => {\n if (seenUrls.has(sd.url)) return false;\n seenUrls.add(sd.url);\n return true;\n });\n\n if (Path.extname(outputPath) === \".ndjson\") {\n this.writeNdjson(structureDefinitions, outputPath, structureDefinitionToJson);\n } else {\n this.writeJsonFiles(\n structureDefinitions.map((sd) => structureDefinitionToJson(sd, true)),\n outputPath,\n );\n }\n\n this.logger()?.info(\n `IntrospectionWriter: ${structureDefinitions.length} StructureDefinitions written to ${outputPath}`,\n );\n }\n }\n\n private async writeNdjson<T>(\n items: T[],\n outputFile: string,\n toJson: (item: T, pretty: boolean) => { filename: string; genContent: () => string },\n ): Promise<void> {\n this.cd(Path.dirname(outputFile), () => {\n this.cat(Path.basename(outputFile), () => {\n for (const item of items) {\n const { genContent } = toJson(item, false);\n this.write(`${genContent()}\\n`);\n }\n });\n });\n }\n\n private async writeJsonFiles(\n items: { filename: string; genContent: () => string }[],\n outputDir: string,\n ): Promise<void> {\n this.cd(outputDir, () => {\n for (const { filename, genContent } of items) {\n const fileName = `${filename}.json`;\n this.cd(Path.dirname(fileName), () => {\n this.cat(Path.basename(fileName), () => {\n this.write(genContent());\n });\n });\n }\n });\n }\n\n private async writeTypeTree(tsIndex: TypeSchemaIndex): Promise<void> {\n const filename = this.opts.typeTree;\n if (!filename) return;\n\n const tree = tsIndex.entityTree();\n const raw = filename.endsWith(\".yaml\") ? YAML.stringify(tree) : JSON.stringify(tree, undefined, 2);\n\n const dir = Path.dirname(filename);\n const file = Path.basename(filename);\n\n this.cd(dir, () => {\n this.cat(file, () => {\n this.write(raw);\n });\n });\n }\n}\n","import type { CanonicalUrl, PkgName } from \"@root/typeschema/types\";\nimport { extractNameFromCanonical } from \"@root/typeschema/types\";\nimport type { IrReport, TreeShakeReport, TypeSchemaCollisions } from \"./types\";\n\ntype TreeShakePackageReport = TreeShakeReport[\"packages\"][PkgName];\ntype CollisionEntry = TypeSchemaCollisions[PkgName][CanonicalUrl][number];\n\nconst generateSkippedPackagesSection = (lines: string[], skippedPackages: string[]): void => {\n lines.push(\"## Skipped Packages\", \"\");\n for (const pkg of skippedPackages) {\n lines.push(`- ${pkg}`);\n }\n lines.push(\"\");\n};\n\nconst generatePackageSection = (\n lines: string[],\n pkgName: PkgName,\n treeShakePkg: TreeShakePackageReport | undefined,\n promotedCanonicals: string[] | undefined,\n): void => {\n lines.push(`## Package: \\`${pkgName}\\``, \"\");\n\n if (promotedCanonicals?.length) {\n lines.push(\"### Promoted Logical Models\", \"\");\n for (const canonical of promotedCanonicals) {\n lines.push(`- \\`${canonical}\\``);\n }\n lines.push(\"\");\n }\n\n if (!treeShakePkg) return;\n\n const canonicalsWithChanges = Object.entries(treeShakePkg.canonicals).filter(\n ([_, data]) => data.skippedFields.length > 0,\n );\n\n if (canonicalsWithChanges.length > 0) {\n lines.push(\"### Modified Canonicals\", \"\");\n for (const [canonical, data] of canonicalsWithChanges) {\n lines.push(`#### \\`${canonical}\\``, \"\");\n lines.push(\"Skipped fields:\", \"\");\n for (const field of data.skippedFields) {\n lines.push(`- \\`${field}\\``);\n }\n lines.push(\"\");\n }\n }\n\n if (treeShakePkg.skippedCanonicals.length > 0) {\n lines.push(\"### Skipped Canonicals\", \"\");\n for (const canonical of treeShakePkg.skippedCanonicals) {\n lines.push(`- \\`${canonical}\\``);\n }\n lines.push(\"\");\n }\n};\n\nconst generateCollisionVersionLines = (entries: CollisionEntry[]): string[] => {\n const uniqueSchemas = new Map<string, CollisionEntry[]>();\n for (const entry of entries) {\n const key = JSON.stringify(entry.typeSchema);\n if (!uniqueSchemas.has(key)) uniqueSchemas.set(key, []);\n uniqueSchemas.get(key)?.push(entry);\n }\n\n const versionLines: string[] = [];\n const sortedVersions = [...uniqueSchemas.values()].sort((a, b) => b.length - a.length);\n let version = 1;\n for (const schemaEntries of sortedVersions) {\n const sourceList = schemaEntries\n .map((e) => {\n const name = extractNameFromCanonical(e.sourceCanonical as CanonicalUrl) ?? e.sourceCanonical;\n return `${name} (${e.sourcePackage})`;\n })\n .join(\", \");\n versionLines.push(` - Version ${version++}: ${sourceList}`);\n }\n return versionLines;\n};\n\nconst generateCollisionsSection = (lines: string[], collisions: IrReport[\"collisions\"]): void => {\n if (!collisions) return;\n\n lines.push(\"## Schema Collisions\", \"\");\n lines.push(\"The following canonicals have multiple schema versions with different content.\");\n lines.push(\"To inspect collision versions, export TypeSchemas using `.introspection({ typeSchemas: 'path' })`\");\n lines.push(\"and check `<pkg>/collisions/<name>/1.json, 2.json, ...` files.\", \"\");\n\n const collisionPackages = Object.keys(collisions).sort();\n for (const pkgName of collisionPackages) {\n const collisionsPkg = collisions[pkgName as PkgName];\n if (!collisionsPkg) throw new Error(`Missing collisions for package ${pkgName}`);\n\n const sortedEntries = Object.entries(collisionsPkg).sort(([a], [b]) => {\n const nameA = a.split(\"/\").pop() ?? a;\n const nameB = b.split(\"/\").pop() ?? b;\n return nameA.localeCompare(nameB);\n });\n\n if (sortedEntries.length > 0) {\n lines.push(`### \\`${pkgName}\\``, \"\");\n for (const [canonical, entries] of sortedEntries) {\n const versionLines = generateCollisionVersionLines(entries);\n lines.push(`- \\`${canonical}\\` (${versionLines.length} versions)`);\n lines.push(...versionLines);\n }\n lines.push(\"\");\n }\n }\n};\n\nexport const generateIrReportReadme = (report: IrReport): string => {\n const lines: string[] = [\"# IR Report\", \"\"];\n\n const irPackages = [\n ...new Set<PkgName>([\n ...Object.keys(report.treeShake?.packages ?? {}),\n ...Object.keys(report.logicalPromotion?.packages ?? {}),\n ]),\n ].sort();\n\n const hasIrChanges = irPackages.length > 0 || (report.treeShake?.skippedPackages.length ?? 0) > 0;\n const hasCollisions = Object.keys(report.collisions ?? {}).length > 0;\n\n if (!hasIrChanges && !hasCollisions) {\n lines.push(\"No IR modifications applied.\");\n return lines.join(\"\\n\");\n }\n\n if (report.treeShake?.skippedPackages.length) {\n generateSkippedPackagesSection(lines, report.treeShake.skippedPackages);\n }\n\n for (const pkgName of irPackages) {\n generatePackageSection(\n lines,\n pkgName,\n report.treeShake?.packages[pkgName],\n report.logicalPromotion?.packages[pkgName]?.promotedCanonicals,\n );\n }\n\n if (hasCollisions) {\n generateCollisionsSection(lines, report.collisions);\n }\n\n return lines.join(\"\\n\");\n};\n","import { generateIrReportReadme } from \"@root/typeschema/ir/report\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport interface IrReportWriterWriterOptions extends FileSystemWriterOptions {\n rootReadmeFileName: string;\n}\n\nexport class IrReportWriterWriter extends FileSystemWriter<IrReportWriterWriterOptions> {\n async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n const report = tsIndex.irReport();\n const md = generateIrReportReadme(report);\n this.cd(\"/\", () => {\n this.cat(this.opts.rootReadmeFileName, () => {\n this.write(md);\n });\n });\n }\n}\n","import type { DebugMixin } from \"@mustache/types\";\n\nexport class DebugMixinProvider {\n constructor(private readonly mode: \"FORMATTED\" | \"COMPACT\") {}\n\n public apply<T extends Record<string, unknown>>(target: T): T & DebugMixin {\n return this._addDebug(target) as T & DebugMixin;\n }\n\n private _addDebug(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((v) => this._addDebug(v));\n }\n\n if (value !== null && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n const debugString = JSON.stringify(obj, null, this.mode === \"FORMATTED\" ? 2 : undefined);\n for (const [key, val] of Object.entries(obj)) {\n result[key] = this._addDebug(val);\n }\n result.debug = debugString;\n return result;\n }\n\n return value;\n }\n}\n","import type { NameGenerator } from \"@mustache/generator/NameGenerator\";\nimport type { LambdaMixin } from \"@mustache/types\";\nimport { camelCase, kebabCase, pascalCase, snakeCase } from \"@root/api/writer-generator/utils\";\n\nexport class LambdaMixinProvider {\n private readonly lambda: LambdaMixin[\"lambda\"];\n constructor(private readonly nameGenerator: NameGenerator) {\n this.lambda = {\n saveTypeName: () => (text, render) => this.nameGenerator.generateType(render(text)),\n saveEnumValueName: () => (text, render) => this.nameGenerator.generateEnumValue(render(text)),\n saveFieldName: () => (text, render) => this.nameGenerator.generateField(render(text)),\n\n camelCase: () => (text, render) => camelCase(render(text)),\n snakeCase: () => (text, render) => snakeCase(render(text)),\n pascalCase: () => (text, render) => pascalCase(render(text)),\n kebabCase: () => (text, render) => kebabCase(render(text)),\n lowerCase: () => (text, render) => render(text).toLowerCase(),\n upperCase: () => (text, render) => render(text).toUpperCase(),\n };\n }\n\n public apply<T extends Record<string, unknown>>(target: T): T & LambdaMixin {\n return {\n ...target,\n lambda: this.lambda,\n };\n }\n}\n","import type { Field, Identifier, NestedType, TypeSchema } from \"@typeschema/types\";\n\nexport type NameTransformation = {\n pattern: RegExp | string;\n format: string;\n};\nexport type DistinctNameConfigurationType<T> = {\n common: T;\n enumValue: T;\n type: T;\n field: T;\n};\n\nexport class NameGenerator {\n constructor(\n private readonly keywords: Set<string>,\n private readonly typeMap: Record<string, string>,\n private readonly nameTransformations: DistinctNameConfigurationType<NameTransformation[]>,\n private readonly unsaveCharacterPattern: string | RegExp,\n ) {}\n\n private _replaceUnsaveChars(name: string): string {\n const pattern =\n this.unsaveCharacterPattern instanceof RegExp\n ? this.unsaveCharacterPattern\n : new RegExp(this.unsaveCharacterPattern, \"g\");\n return name.replace(pattern, \"_\");\n }\n\n private _applyNameTransformations(name: string, transformations: NameTransformation[]): string {\n for (const transformation of this.nameTransformations.common) {\n name = name.replace(\n transformation.pattern instanceof RegExp\n ? transformation.pattern\n : new RegExp(transformation.pattern, \"g\"),\n transformation.format,\n );\n }\n for (const transformation of transformations) {\n name = name.replace(\n transformation.pattern instanceof RegExp\n ? transformation.pattern\n : new RegExp(transformation.pattern, \"g\"),\n transformation.format,\n );\n }\n return name;\n }\n\n private _generateTypeName(name: string): string {\n if (this.typeMap[name]) {\n name = this.typeMap[name] as any;\n } else {\n name = this._applyNameTransformations(name, this.nameTransformations.type);\n name = name.charAt(0).toUpperCase() + name.slice(1);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name);\n }\n return name;\n }\n\n public generateEnumType(name: string): string {\n return this._generateTypeName(name);\n }\n\n private _generateTypeFromTypeRef(typeRef: Identifier): string {\n if (typeRef.kind === \"primitive-type\") {\n return this._generateTypeName(typeRef.name);\n }\n return this._generateTypeName(\n typeRef.url\n .split(\"/\")\n .pop()\n ?.split(\"#\")\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join(\"\") ?? \"<UNKNOWN>\",\n );\n }\n\n public generateFieldType(schema: Field): string {\n if ((schema as any).enum) {\n return this.generateEnumType((schema as any).binding?.name ?? (schema as any).type.name);\n }\n return this._generateTypeFromTypeRef((schema as any).type);\n }\n\n public generateType(schemaOrRefOrString: TypeSchema | NestedType | Identifier | string): string {\n if (typeof schemaOrRefOrString === \"string\") {\n return this._generateTypeName(schemaOrRefOrString);\n }\n if (\"url\" in schemaOrRefOrString) {\n return this._generateTypeFromTypeRef(schemaOrRefOrString);\n }\n return this._generateTypeFromTypeRef(schemaOrRefOrString.identifier);\n }\n\n public generateField(name: string): string {\n name = this._applyNameTransformations(name, this.nameTransformations.field);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name);\n return name;\n }\n public generateEnumValue(name: string): string {\n name = this._applyNameTransformations(name, this.nameTransformations.enumValue);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name).toUpperCase();\n return name;\n }\n}\n","import fs from \"node:fs\";\nimport Path from \"node:path\";\nimport type { Rendering } from \"@mustache/types\";\n\nexport class TemplateFileCache {\n private readonly templateBaseDir: string;\n private readonly templateCache: Record<string, string> = {};\n constructor(templateBaseDir: string) {\n this.templateBaseDir = Path.resolve(templateBaseDir);\n }\n\n private _normalizeName(name: string): string {\n if (name.endsWith(\".mustache\")) {\n return name;\n }\n return `${name}.mustache`;\n }\n\n public read(template: Pick<Rendering, \"source\">): string {\n return this.readTemplate(template.source);\n }\n public readTemplate(name: string): string {\n const normalizedName = this._normalizeName(name);\n if (!this.templateCache[normalizedName]) {\n this.templateCache[normalizedName] = fs.readFileSync(\n Path.join(this.templateBaseDir, normalizedName),\n \"utf-8\",\n );\n }\n return this.templateCache[normalizedName];\n }\n}\n","import type { ListElementInformationMixin } from \"@mustache/types\";\n\nexport class ListElementInformationMixinProvider {\n private static _array<T>(value: T[] | Set<T>): T[] {\n return Array.isArray(value) ? value : Array.from(value);\n }\n\n public apply<T extends Record<string, unknown>>(source: T): T {\n return this._addListElementInformation(source) as T;\n }\n\n private _addListElementInformation(value: unknown): unknown {\n if (Array.isArray(value) || value instanceof Set) {\n return ListElementInformationMixinProvider._array(value).map((v, index, array) => {\n if (typeof v === \"object\" && v !== null) {\n return {\n ...(this._addListElementInformation(v) as Record<string, unknown>),\n \"-index\": index,\n \"-length\": array.length,\n \"-first\": index === 0,\n \"-last\": index === array.length - 1,\n } satisfies ListElementInformationMixin;\n }\n return v;\n });\n }\n\n if (value !== null && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(obj)) {\n result[key] = this._addListElementInformation(val);\n }\n return result;\n }\n\n return value;\n }\n}\n","import type { IsPrefixed } from \"@root/utils/types\";\nimport type { Field, NestedType, TypeSchema } from \"@typeschema/types\";\n\nexport type DebugMixin = {\n debug: string;\n};\n\nexport type EnumValueViewModel = {\n name: string;\n saveName: string;\n};\n\nexport type EnumViewModel = NamedViewModel & {\n values: EnumValueViewModel[];\n};\n\nexport type FieldViewModel = {\n owner: NamedViewModel;\n\n schema: Field;\n name: string;\n saveName: string;\n\n typeName: string;\n\n isSizeConstrained: boolean;\n min?: number;\n max?: number;\n\n isArray: boolean;\n isRequired: boolean;\n isEnum: boolean;\n\n isPrimitive: Record<IsPrefixed<PrimitiveType>, boolean> | false;\n isComplexType: Record<IsPrefixed<string>, boolean> | false;\n isResource: Record<IsPrefixed<string>, boolean> | false;\n\n isCode: boolean;\n isIdentifier: boolean;\n isReference: boolean;\n};\n\nexport type FilterType = {\n whitelist?: (string | RegExp)[];\n blacklist?: (string | RegExp)[];\n};\n\nexport type HookType = {\n cmd: string;\n args?: string[];\n};\n\nexport type LambdaMixin = {\n lambda: {\n saveEnumValueName: () => (text: string, render: (input: string) => string) => string;\n saveFieldName: () => (text: string, render: (input: string) => string) => string;\n saveTypeName: () => (text: string, render: (input: string) => string) => string;\n\n camelCase: () => (text: string, render: (input: string) => string) => string;\n snakeCase: () => (text: string, render: (input: string) => string) => string;\n pascalCase: () => (text: string, render: (input: string) => string) => string;\n kebabCase: () => (text: string, render: (input: string) => string) => string;\n lowerCase: () => (text: string, render: (input: string) => string) => string;\n upperCase: () => (text: string, render: (input: string) => string) => string;\n };\n};\n\nexport type ListElementInformationMixin = {\n \"-index\": number;\n \"-length\": number;\n \"-last\": boolean;\n \"-first\": boolean;\n};\n\nexport type NamedViewModel = {\n name: string;\n saveName: string;\n};\n\nexport const PRIMITIVE_TYPES = [\n \"boolean\",\n \"instant\",\n \"time\",\n \"date\",\n \"dateTime\",\n\n \"decimal\",\n \"integer\",\n \"unsignedInt\",\n \"positiveInt\",\n \"integer64\",\n \"base64Binary\",\n\n \"uri\",\n \"url\",\n \"canonical\",\n \"oid\",\n \"uuid\",\n\n \"string\",\n \"code\",\n \"markdown\",\n \"id\",\n \"xhtml\",\n] as const;\n\nexport type PrimitiveType = (typeof PRIMITIVE_TYPES)[number];\n\nexport type Rendering = {\n source: string;\n fileNameFormat: string;\n path: string;\n filter?: FilterType;\n properties?: Record<string, any>;\n};\n\nexport type ResolvedTypeViewModel = TypeViewModel & {\n allFields: FieldViewModel[];\n inheritedFields: FieldViewModel[];\n parents: TypeViewModel[];\n children: TypeViewModel[];\n\n hasChildren: boolean;\n hasParents: boolean;\n hasInheritedFields: boolean;\n};\n\nexport type RootViewModel<T> = T & {\n resources: { name: string; saveName: string }[];\n complexTypes: { name: string; saveName: string }[];\n};\n\nexport type TypeViewModel = NamedViewModel & {\n schema: TypeSchema | NestedType;\n fields: FieldViewModel[];\n\n dependencies: {\n resources: NamedViewModel[];\n complexTypes: NamedViewModel[];\n };\n\n hasFields: boolean;\n hasNestedComplexTypes: boolean;\n hasNestedEnums: boolean;\n\n isNested: boolean;\n isComplexType: Record<IsPrefixed<string>, boolean> | false;\n isResource: Record<IsPrefixed<string>, boolean> | false;\n\n nestedComplexTypes: ResolvedTypeViewModel[];\n nestedEnums: EnumViewModel[];\n};\n\nexport type View<T extends ViewModel> = LambdaMixin & {\n model: T;\n meta: {\n timestamp: string;\n generator: string;\n };\n properties: Record<string, unknown>;\n};\n\nexport type ViewModel = Record<string, unknown>;\n","import { ListElementInformationMixinProvider } from \"@mustache/generator/ListElementInformationMixinProvider\";\nimport type { NameGenerator } from \"@mustache/generator/NameGenerator\";\nimport type {\n EnumViewModel,\n FieldViewModel,\n NamedViewModel,\n ResolvedTypeViewModel,\n RootViewModel,\n TypeViewModel,\n ViewModel,\n} from \"@mustache/types\";\nimport { PRIMITIVE_TYPES } from \"@mustache/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { IsPrefixed } from \"@root/utils/types\";\nimport {\n type ChoiceFieldInstance,\n type Field,\n type Identifier,\n isComplexTypeIdentifier,\n isNotChoiceDeclarationField,\n isResourceIdentifier,\n type NestedType,\n type RegularField,\n type TypeSchema,\n} from \"@typeschema/types\";\n\nexport type ViewModelCache = {\n resourcesByUri: Record<string, TypeViewModel>;\n complexTypesByUri: Record<string, TypeViewModel>;\n};\n\nexport class ViewModelFactory {\n private arrayMixinProvider: ListElementInformationMixinProvider = new ListElementInformationMixinProvider();\n\n constructor(\n private readonly tsIndex: TypeSchemaIndex,\n private readonly nameGenerator: NameGenerator,\n private readonly filterPred: (id: Identifier) => boolean,\n ) {}\n\n public createUtility(): RootViewModel<ViewModel> {\n return this._createForRoot();\n }\n\n public createComplexType(\n typeRef: Identifier,\n cache: ViewModelCache = { resourcesByUri: {}, complexTypesByUri: {} },\n ): RootViewModel<ResolvedTypeViewModel> {\n const base = this._createForComplexType(typeRef, cache);\n const parents = this._createParentsFor(base.schema, cache);\n const children = this._createChildrenFor(typeRef, cache);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return this.arrayMixinProvider.apply({\n ...this._createForRoot(),\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...parents.flatMap((p) => p.fields)],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n });\n }\n public createResource(\n typeRef: Identifier,\n cache: ViewModelCache = { resourcesByUri: {}, complexTypesByUri: {} },\n ): RootViewModel<ResolvedTypeViewModel> {\n const base = this._createForResource(typeRef, cache);\n const parents = this._createParentsFor(base.schema, cache);\n const children = this._createChildrenFor(typeRef, cache);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return this.arrayMixinProvider.apply({\n ...this._createForRoot(),\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...inheritedFields],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n });\n }\n\n private _createFor(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n if (typeRef.kind === \"complex-type\") {\n return this._createForComplexType(typeRef, cache, nestedIn);\n }\n if (typeRef.kind === \"resource\") {\n return this._createForResource(typeRef, cache, nestedIn);\n }\n throw new Error(`Unknown type ${typeRef.kind}`);\n }\n\n private _createForComplexType(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n const type = this.tsIndex.resolve(typeRef);\n if (!type) {\n throw new Error(`ComplexType ${typeRef.name} not found`);\n }\n if (!Object.hasOwn(cache.complexTypesByUri, type.identifier.url)) {\n cache.complexTypesByUri[type.identifier.url] = this._createTypeViewModel(type, cache, nestedIn);\n }\n const res = cache.complexTypesByUri[type.identifier.url];\n if (!res) throw new Error(`ComplexType ${typeRef.name} not found`);\n return res;\n }\n\n private _createForResource(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n const type = this.tsIndex.resolve(typeRef);\n if (!type) {\n throw new Error(`Resource ${typeRef.name} not found`);\n }\n if (!Object.hasOwn(cache.resourcesByUri, type.identifier.url)) {\n cache.resourcesByUri[type.identifier.url] = this._createTypeViewModel(type, cache, nestedIn);\n }\n const res = cache.resourcesByUri[type.identifier.url];\n if (!res) throw new Error(`Resource ${typeRef.name} not found`);\n return res;\n }\n\n private _createChildrenFor(typeRef: Identifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel[] {\n if (isComplexTypeIdentifier(typeRef)) {\n return this.tsIndex\n .resourceChildren(typeRef)\n .filter(isComplexTypeIdentifier)\n .filter(this.filterPred)\n .map((childRef: Identifier) => this._createFor(childRef, cache, nestedIn));\n }\n if (isResourceIdentifier(typeRef)) {\n return this.tsIndex\n .resourceChildren(typeRef)\n .filter(isResourceIdentifier)\n .filter(this.filterPred)\n .map((childRef: Identifier) => this._createFor(childRef, cache, nestedIn));\n }\n return [];\n }\n\n private _createParentsFor(base: TypeSchema | NestedType, cache: ViewModelCache) {\n const parents: TypeViewModel[] = [];\n let parentRef: Identifier | undefined = \"base\" in base ? base.base : undefined;\n while (parentRef) {\n parents.push(this._createFor(parentRef, cache, undefined));\n const parent = this.tsIndex.resolve(parentRef);\n parentRef = parent && \"base\" in parent ? parent.base : undefined;\n }\n return parents;\n }\n\n private _createForNestedType(\n nested: NestedType,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): ResolvedTypeViewModel {\n const base = this._createTypeViewModel(nested, cache, nestedIn);\n const parents = this._createParentsFor(nested, cache);\n const children = this._createChildrenFor(nested.identifier, cache, nestedIn);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return {\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...inheritedFields],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n };\n }\n\n private _createTypeViewModel(\n schema: TypeSchema | NestedType,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): TypeViewModel {\n const fields = Object.entries((\"fields\" in schema ? schema.fields : {}) ?? {});\n const nestedComplexTypes = this._collectNestedComplex(schema, cache);\n const nestedEnums = this._collectNestedEnums(fields as [string, Field][]);\n const dependencies = this._collectDependencies(schema);\n const name: NamedViewModel = {\n name: schema.identifier.name,\n saveName: this.nameGenerator.generateType(schema),\n };\n return {\n nestedComplexTypes,\n nestedEnums,\n dependencies,\n isNested: !!nestedIn,\n schema: schema,\n ...name,\n isResource: this._createIsResource(schema.identifier),\n isComplexType: this._createIsComplexType(schema.identifier),\n\n hasFields: fields.length > 0,\n hasNestedComplexTypes: nestedComplexTypes.length > 0,\n hasNestedEnums: nestedEnums.length > 0,\n fields: fields\n .filter((entry): entry is [string, RegularField | ChoiceFieldInstance] =>\n isNotChoiceDeclarationField(entry[1]),\n )\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([fieldName, field]) => {\n return {\n owner: name,\n schema: field,\n name: fieldName,\n saveName: this.nameGenerator.generateField(fieldName),\n typeName: this.nameGenerator.generateFieldType(field),\n\n isArray: field.array ?? false,\n isRequired: field.required ?? false,\n isEnum: !!field.enum && !field.enum.isOpen,\n\n isSizeConstrained: field.min !== undefined || field.max !== undefined,\n min: field.min,\n max: field.max,\n\n isResource: this._createIsResource(field.type),\n isComplexType: this._createIsComplexType(field.type),\n isPrimitive: this._createIsPrimitiveType(field.type),\n\n isCode: field.type?.name === \"code\",\n isIdentifier: field.type?.name === \"Identifier\",\n isReference: field.type?.name === \"Reference\",\n };\n }),\n };\n }\n\n private _collectDependencies(schema: TypeSchema | NestedType): TypeViewModel[\"dependencies\"] {\n const dependencies: TypeViewModel[\"dependencies\"] = {\n resources: [],\n complexTypes: [],\n };\n if (\"dependencies\" in schema && schema.dependencies) {\n schema.dependencies\n .filter((dependency) => dependency.kind === \"complex-type\")\n .map((dependency) => ({ name: dependency.name, saveName: this.nameGenerator.generateType(dependency) }))\n .forEach((dependency) => {\n dependencies.complexTypes.push(dependency);\n });\n schema.dependencies\n .filter((dependency) => dependency.kind === \"resource\")\n .map((dependency) => ({ name: dependency.name, saveName: this.nameGenerator.generateType(dependency) }))\n .forEach((dependency) => {\n dependencies.resources.push(dependency);\n });\n }\n if (\"nested\" in schema && schema.nested) {\n schema.nested\n .map((nested) => this._collectDependencies(nested))\n .forEach((d) => {\n d.complexTypes\n .filter(\n (complexType) =>\n !dependencies.complexTypes.some((dependency) => dependency.name === complexType.name),\n )\n .forEach((complexType) => {\n dependencies.complexTypes.push(complexType);\n });\n d.resources\n .filter(\n (resource) =>\n !dependencies.resources.some((dependency) => dependency.name === resource.name),\n )\n .forEach((resource) => {\n dependencies.resources.push(resource);\n });\n });\n }\n return dependencies;\n }\n\n private _createIsResource(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"resource\") {\n return false;\n }\n return Object.fromEntries(\n this.tsIndex\n .collectResources()\n .map((e) => e.identifier)\n .map((resourceRef: Identifier) => [\n `is${resourceRef.name.charAt(0).toUpperCase() + resourceRef.name.slice(1)}`,\n resourceRef.url === typeRef.url,\n ]),\n ) as Record<IsPrefixed<string>, boolean>;\n }\n private _createIsComplexType(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"complex-type\" && typeRef.kind !== \"nested\") {\n return false;\n }\n return Object.fromEntries(\n this.tsIndex\n .collectComplexTypes()\n .map((e) => e.identifier)\n .map((complexTypeRef: Identifier) => [\n `is${complexTypeRef.name.charAt(0).toUpperCase() + complexTypeRef.name.slice(1)}`,\n complexTypeRef.url === typeRef.url,\n ]),\n ) as Record<IsPrefixed<string>, boolean>;\n }\n private _createIsPrimitiveType(typeRef: Identifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"primitive-type\") {\n return false;\n }\n return Object.fromEntries(\n PRIMITIVE_TYPES.map((type) => [`is${type.charAt(0).toUpperCase()}${type.slice(1)}`, typeRef.name === type]),\n ) as FieldViewModel[\"isPrimitive\"];\n }\n\n private _collectNestedComplex(schema: TypeSchema | NestedType, cache: ViewModelCache): ResolvedTypeViewModel[] {\n const nested: ResolvedTypeViewModel[] = [];\n if (\"nested\" in schema && schema.nested) {\n schema.nested\n .map((nested) => this._createForNestedType(nested, cache, schema))\n .forEach((n) => {\n nested.push(n);\n });\n }\n return nested;\n }\n private _collectNestedEnums(fields: [string, Field][]): EnumViewModel[] {\n const nestedEnumValues: Record<string, Set<string>> = {};\n fields.forEach(([fieldName, fieldSchema]) => {\n if (\"enum\" in fieldSchema && fieldSchema.enum && !fieldSchema.enum.isOpen) {\n const name = (\"binding\" in fieldSchema && fieldSchema.binding?.name) ?? fieldName;\n if (typeof name === \"string\") {\n nestedEnumValues[name] = nestedEnumValues[name] ?? new Set<string>();\n fieldSchema.enum.values.forEach(nestedEnumValues[name].add.bind(nestedEnumValues[name]));\n }\n }\n });\n return Object.entries(nestedEnumValues).map(([name, values]) => ({\n name: name,\n saveName: this.nameGenerator.generateEnumType(name),\n values: Array.from(values).map((value) => ({\n name: value,\n saveName: this.nameGenerator.generateEnumValue(value),\n })),\n }));\n }\n\n private _createForRoot(): Pick<RootViewModel<unknown>, \"resources\" | \"complexTypes\"> {\n return this.arrayMixinProvider.apply({\n complexTypes: this.tsIndex\n .collectComplexTypes()\n .map((e) => e.identifier)\n .map((typeRef: Identifier) => ({\n name: typeRef.name,\n saveName: this.nameGenerator.generateType(typeRef),\n })),\n resources: this.tsIndex\n .collectResources()\n .map((e) => e.identifier)\n .map((typeRef: Identifier) => ({\n name: typeRef.name,\n saveName: this.nameGenerator.generateType(typeRef),\n })),\n });\n }\n}\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport * as util from \"node:util\";\nimport { DebugMixinProvider } from \"@mustache/generator/DebugMixinProvider\";\nimport { LambdaMixinProvider } from \"@mustache/generator/LambdaMixinProvider\";\nimport {\n type DistinctNameConfigurationType,\n NameGenerator,\n type NameTransformation,\n} from \"@mustache/generator/NameGenerator\";\nimport { TemplateFileCache } from \"@mustache/generator/TemplateFileCache\";\nimport type { ViewModelCache } from \"@mustache/generator/ViewModelFactory\";\nimport { ViewModelFactory } from \"@mustache/generator/ViewModelFactory\";\nimport type {\n HookType,\n NamedViewModel,\n PrimitiveType,\n Rendering,\n TypeViewModel,\n View,\n ViewModel,\n} from \"@mustache/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport { default as Mustache } from \"mustache\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport type FileBasedMustacheGeneratorOptions = {\n debug: \"OFF\" | \"FORMATTED\" | \"COMPACT\";\n meta: {\n timestamp?: string;\n generator?: string;\n };\n renderings: {\n utility: Rendering[];\n resource: Rendering[];\n complexType: Rendering[];\n };\n keywords: string[];\n primitiveTypeMap: Partial<Record<PrimitiveType, string>>;\n nameTransformations: DistinctNameConfigurationType<NameTransformation[]>;\n unsaveCharacterPattern: string | RegExp;\n shouldRunHooks: boolean;\n hooks: {\n afterGenerate?: HookType[];\n };\n};\n\nexport type MustacheGeneratorOptions = FileSystemWriterOptions &\n FileBasedMustacheGeneratorOptions & {\n sources: {\n templateSource: string;\n staticSource: string;\n };\n };\n\nexport function loadMustacheGeneratorConfig(\n templatePath: string,\n logger?: CodegenLog,\n): Partial<FileBasedMustacheGeneratorOptions> {\n const filePath = Path.resolve(templatePath, \"config.json\");\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === \"object\") {\n return parsed as Partial<FileBasedMustacheGeneratorOptions>;\n }\n } catch (_e) {}\n logger?.warn(`Failed to load JSON file with mustache generator config: ${filePath}`);\n return {};\n}\n\nexport const createGenerator = (\n templatePath: string,\n apiOpts: FileSystemWriterOptions & Partial<FileBasedMustacheGeneratorOptions>,\n): MustacheGenerator => {\n const defaultFileOpts: FileBasedMustacheGeneratorOptions = {\n debug: \"OFF\",\n hooks: {},\n meta: {},\n keywords: [],\n unsaveCharacterPattern: /[^a-zA-Z0-9]/g,\n nameTransformations: {\n common: [],\n enumValue: [],\n type: [],\n field: [],\n },\n renderings: {\n utility: [],\n resource: [],\n complexType: [],\n },\n shouldRunHooks: true,\n primitiveTypeMap: {},\n };\n const actualFileOpts = loadMustacheGeneratorConfig(templatePath);\n\n const mustacheOptions: MustacheGeneratorOptions = {\n ...defaultFileOpts,\n ...apiOpts,\n ...actualFileOpts,\n sources: {\n staticSource: Path.resolve(templatePath, \"static\"),\n templateSource: Path.resolve(templatePath, \"templates\"),\n },\n };\n return new MustacheGenerator(mustacheOptions);\n};\n\nfunction runCommand(cmd: string, args: string[] = [], options = {}) {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: \"inherit\",\n ...options,\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) resolve(code);\n else reject(new Error(`Prozess beendet mit Fehlercode ${code}`));\n });\n });\n}\n\nexport class MustacheGenerator extends FileSystemWriter<MustacheGeneratorOptions> {\n private readonly templateFileCache: TemplateFileCache;\n private readonly nameGenerator: NameGenerator;\n private readonly lambdaMixinProvider: LambdaMixinProvider;\n private readonly debugMixinProvider?: DebugMixinProvider;\n\n constructor(opts: MustacheGeneratorOptions) {\n super(opts);\n this.nameGenerator = new NameGenerator(\n new Set<string>(opts.keywords),\n opts.primitiveTypeMap,\n opts.nameTransformations,\n opts.unsaveCharacterPattern,\n );\n this.templateFileCache = new TemplateFileCache(opts.sources.templateSource);\n this.lambdaMixinProvider = new LambdaMixinProvider(this.nameGenerator);\n this.debugMixinProvider = opts.debug !== \"OFF\" ? new DebugMixinProvider(opts.debug) : undefined;\n }\n\n override async generate(tsIndex: TypeSchemaIndex) {\n const modelFactory = new ViewModelFactory(tsIndex, this.nameGenerator, () => true);\n const cache: ViewModelCache = {\n resourcesByUri: {},\n complexTypesByUri: {},\n };\n tsIndex\n .collectComplexTypes()\n .map((i) => i.identifier)\n .sort((a, b) => a.url.localeCompare(b.url))\n .map((typeRef) => modelFactory.createComplexType(typeRef, cache))\n .forEach(this._renderComplexType.bind(this));\n\n tsIndex\n .collectResources()\n .map((i) => i.identifier)\n .sort((a, b) => a.url.localeCompare(b.url))\n .map((typeRef) => modelFactory.createResource(typeRef, cache))\n .forEach(this._renderResource.bind(this));\n\n this._renderUtility(modelFactory.createUtility());\n this.copyStaticFiles();\n\n if (this.opts.shouldRunHooks) {\n await this._runHooks(this.opts.hooks.afterGenerate);\n }\n return;\n }\n\n copyStaticFiles() {\n const staticDir = Path.resolve(this.opts.sources.staticSource);\n if (!staticDir) {\n throw new Error(\"staticDir must be set in subclass.\");\n }\n fs.cpSync(staticDir, this.opts.outputDir, { recursive: true });\n }\n\n private async _runHooks(hooks?: HookType[]) {\n for (const hook of hooks ?? []) {\n console.info(`Running hook (${this.opts.outputDir}): ${hook.cmd} ${hook.args?.join(\" \")}`);\n await runCommand(hook.cmd, hook.args ?? [], {\n cwd: this.opts.outputDir,\n });\n console.info(`Completed hook: ${hook.cmd} ${hook.args?.join(\" \")}`);\n }\n }\n\n private _checkRenderingFilter(model: TypeViewModel, rendering: Rendering): boolean {\n if (!rendering.filter?.whitelist?.length && !rendering.filter?.blacklist?.length) {\n return true;\n }\n if ((rendering.filter?.blacklist ?? []).find((v) => model.name.match(v))) {\n return false;\n }\n if ((rendering.filter?.whitelist ?? []).find((v) => model.name.match(v))) {\n return true;\n }\n return !rendering.filter.whitelist?.length;\n }\n\n private _renderUtility(model: ViewModel) {\n this.opts.renderings.utility.forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(rendering.fileNameFormat, () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _renderResource(model: TypeViewModel) {\n this.opts.renderings.resource\n .filter((rendering) => this._checkRenderingFilter(model, rendering))\n .forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(this._calculateFilename(model, rendering), () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _renderComplexType(model: TypeViewModel) {\n this.opts.renderings.complexType\n .filter((rendering) => this._checkRenderingFilter(model, rendering))\n .forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(this._calculateFilename(model, rendering), () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _calculateFilename(model: NamedViewModel, rendering: Rendering): string {\n return util.format(rendering.fileNameFormat, model.saveName);\n }\n\n private _render<T extends ViewModel>(model: T, rendering: Rendering): string {\n let view: View<T> = this.lambdaMixinProvider.apply({\n meta: {\n timestamp: this.opts.meta.timestamp ?? new Date().toISOString(),\n generator: this.opts.meta.generator ?? \"@atomic-ehr/codegen mustache generator\",\n },\n model: model,\n properties: rendering.properties ?? {},\n });\n if (this.debugMixinProvider) {\n view = this.debugMixinProvider.apply(view);\n }\n return Mustache.render(this.templateFileCache.read(rendering), view, (partialName: string) =>\n this.templateFileCache.readTemplate(partialName),\n );\n }\n}\n","import {\n camelCase,\n kebabCase,\n uppercaseFirstLetter,\n uppercaseFirstLetterOfEach,\n} from \"@root/api/writer-generator/utils\";\nimport {\n type CanonicalUrl,\n extractNameFromCanonical,\n type Identifier,\n type ProfileTypeSchema,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\n\n// biome-ignore format: too long\nconst tsKeywords = new Set([ \"class\", \"function\", \"return\", \"if\", \"for\", \"while\", \"const\", \"let\", \"var\", \"import\", \"export\", \"interface\" ]);\n\nexport const normalizeTsName = (n: string): string => {\n if (tsKeywords.has(n)) n = `${n}_`;\n return n.replace(/\\[x\\]/g, \"_x_\").replace(/[- :.]/g, \"_\");\n};\n\nexport const tsCamelCase = (name: string): string => {\n if (!name) return \"\";\n // Remove [x] suffix and normalize special characters before camelCase\n const normalized = name.replace(/\\[x\\]/g, \"\").replace(/:/g, \"_\");\n return camelCase(normalized);\n};\n\nexport const tsPackageDir = (name: string): string => {\n return kebabCase(name);\n};\n\nexport const tsModuleName = (id: Identifier): string => {\n // NOTE: Why not pascal case?\n // In hl7-fhir-uv-xver-r5-r4 we have:\n // - http://hl7.org/fhir/5.0/StructureDefinition/extension-Subscription.topic (subscription_topic)\n // - http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic (SubscriptionTopic)\n // And they should not clash the names.\n return uppercaseFirstLetter(tsResourceName(id));\n};\n\nexport const tsModuleFileName = (id: Identifier): string => {\n return `${tsModuleName(id)}.ts`;\n};\n\nexport const tsModulePath = (id: Identifier): string => {\n return `${tsPackageDir(id.package)}/${tsModuleName(id)}`;\n};\n\nexport const tsNameFromCanonical = (canonical: string | undefined, dropFragment = true) => {\n if (!canonical) return undefined;\n const localName = extractNameFromCanonical(canonical as CanonicalUrl, dropFragment);\n if (!localName) return undefined;\n return normalizeTsName(localName);\n};\n\nexport const tsResourceName = (id: Identifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n // Extract name from URL without normalizing dots (needed for fragment splitting)\n const localName = extractNameFromCanonical(url as CanonicalUrl, false);\n if (!localName) return \"\";\n const [resourceName, fragment] = localName.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return normalizeTsName([resourceName, name].join(\"\"));\n }\n const name = id.name.includes(\"/\")\n ? (extractNameFromCanonical(id.name as unknown as CanonicalUrl) ?? id.name)\n : id.name;\n return normalizeTsName(name);\n};\n\nexport const tsFieldName = (n: string): string => {\n if (tsKeywords.has(n)) return `\"${n}\"`;\n if (n.includes(\" \") || n.includes(\"-\")) return `\"${n}\"`;\n return n;\n};\n\nexport const tsProfileModuleName = (tsIndex: TypeSchemaIndex, schema: ProfileTypeSchema): string => {\n const resourceSchema = tsIndex.findLastSpecialization(schema);\n const resourceName = uppercaseFirstLetter(normalizeTsName(resourceSchema.identifier.name));\n return `${resourceName}_${normalizeTsName(schema.identifier.name)}`;\n};\n\nexport const tsProfileModuleFileName = (tsIndex: TypeSchemaIndex, schema: ProfileTypeSchema): string => {\n return `${tsProfileModuleName(tsIndex, schema)}.ts`;\n};\n\nexport const tsProfileClassName = (schema: ProfileTypeSchema): string => {\n const name = normalizeTsName(schema.identifier.name);\n return name.endsWith(\"Profile\") ? name : `${name}Profile`;\n};\n\nexport const tsSliceFlatTypeName = (profileName: string, fieldName: string, sliceName: string): string => {\n return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlat`;\n};\n\nexport const tsExtensionFlatTypeName = (profileName: string, extensionName: string): string => {\n return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(extensionName))}Flat`;\n};\n\nexport const tsSliceStaticName = (name: string): string => name.replace(/\\[x\\]/g, \"\").replace(/[^a-zA-Z0-9_$]/g, \"_\");\n\nexport const tsSliceMethodBaseName = (sliceName: string): string =>\n uppercaseFirstLetter(normalizeTsName(sliceName) || \"Slice\");\n\nexport const tsExtensionMethodBaseName = (name: string): string =>\n uppercaseFirstLetter(tsCamelCase(name) || \"Extension\");\n\nexport const tsQualifiedExtensionMethodBaseName = (name: string, path?: string): string => {\n const rawPath =\n path\n ?.split(\".\")\n .filter((p) => p && p !== \"extension\")\n .join(\"_\") ?? \"\";\n const pathPart = rawPath ? uppercaseFirstLetter(tsCamelCase(rawPath)) : \"\";\n return `${pathPart}${uppercaseFirstLetter(tsCamelCase(name) || \"Extension\")}`;\n};\n\nexport const tsQualifiedSliceMethodBaseName = (fieldName: string, sliceName: string): string => {\n const fieldPart = uppercaseFirstLetter(tsCamelCase(fieldName) || \"Field\");\n const slicePart = uppercaseFirstLetter(normalizeTsName(sliceName) || \"Slice\");\n return `${fieldPart}${slicePart}`;\n};\n\nexport const tsResolvedExtensionBaseName = (\n extensionBaseNames: Record<string, string>,\n url: string,\n path: string,\n fallbackName: string,\n): string => extensionBaseNames[`${url}:${path}`] ?? fallbackName;\n\nexport const tsResolvedSliceBaseName = (\n sliceBaseNames: Record<string, string>,\n fieldName: string,\n sliceName: string,\n): string => sliceBaseNames[`${fieldName}:${sliceName}`] ?? sliceName;\n\nexport const tsValueFieldName = (id: Identifier): string => `value${uppercaseFirstLetter(id.name)}`;\n","import {\n type ChoiceFieldInstance,\n type EnumDefinition,\n type Identifier,\n isNestedIdentifier,\n isPrimitiveIdentifier,\n type RegularField,\n} from \"@root/typeschema/types\";\nimport { tsResourceName } from \"./name\";\n\nconst primitiveType2tsType: Record<string, string> = {\n boolean: \"boolean\",\n instant: \"string\",\n time: \"string\",\n date: \"string\",\n dateTime: \"string\",\n\n decimal: \"number\",\n integer: \"number\",\n unsignedInt: \"number\",\n positiveInt: \"number\",\n integer64: \"number\",\n base64Binary: \"string\",\n\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n\n string: \"string\",\n code: \"string\",\n markdown: \"string\",\n id: \"string\",\n xhtml: \"string\",\n};\n\nexport const resolvePrimitiveType = (name: string) => {\n const tsType = primitiveType2tsType[name];\n if (tsType === undefined) throw new Error(`Unknown primitive type ${name}`);\n return tsType;\n};\n\nexport const tsGet = (object: string, tsFieldName: string) => {\n if (tsFieldName.startsWith('\"')) return `${object}[${tsFieldName}]`;\n return `${object}.${tsFieldName}`;\n};\n\nexport const tsEnumType = (enumDef: EnumDefinition) => {\n const values = enumDef.values.map((e) => `\"${e}\"`).join(\" | \");\n return enumDef.isOpen ? `(${values} | string)` : `(${values})`;\n};\n\nconst rewriteFieldTypeDefs: Record<string, Record<string, () => string>> = {\n Coding: { code: () => \"T\" },\n // biome-ignore lint: that is exactly string what we want\n Reference: { reference: () => \"`${T}/${string}`\" },\n CodeableConcept: { coding: () => \"Coding<T>\" },\n};\n\nexport const resolveFieldTsType = (\n schemaName: string,\n tsName: string,\n field: RegularField | ChoiceFieldInstance,\n resolveRef?: (ref: Identifier) => Identifier,\n): string => {\n const rewriteFieldType = rewriteFieldTypeDefs[schemaName]?.[tsName];\n if (rewriteFieldType) return rewriteFieldType();\n\n if (field.enum) {\n if (field.type.name === \"Coding\") return `Coding<${tsEnumType(field.enum)}>`;\n if (field.type.name === \"CodeableConcept\") return `CodeableConcept<${tsEnumType(field.enum)}>`;\n return tsEnumType(field.enum);\n }\n if (field.reference && field.reference.length > 0) {\n const references = field.reference\n .map((ref) => (resolveRef ? resolveRef(ref) : ref))\n .map((ref) => `\"${ref.name}\"`)\n .join(\" | \");\n return `Reference<${references}>`;\n }\n if (isPrimitiveIdentifier(field.type)) return resolvePrimitiveType(field.type.name);\n if (isNestedIdentifier(field.type)) return tsResourceName(field.type);\n return field.type.name as string;\n};\n\nexport const fieldTsType = (\n field: RegularField | ChoiceFieldInstance,\n resolveRef?: (ref: Identifier) => Identifier,\n): string => resolveFieldTsType(\"\", \"\", field, resolveRef) + (field.array ? \"[]\" : \"\");\n\nexport const tsTypeFromIdentifier = (id: Identifier): string => {\n if (isNestedIdentifier(id)) return tsResourceName(id);\n if (isPrimitiveIdentifier(id)) return resolvePrimitiveType(id.name);\n // Fallback: check if id.name is a known primitive type even if kind isn't set\n const primitiveType = primitiveType2tsType[id.name];\n if (primitiveType !== undefined) return primitiveType;\n return id.name;\n};\n","import {\n type CanonicalUrl,\n type Identifier,\n isChoiceDeclarationField,\n isProfileTypeSchema,\n type ProfileExtension,\n type ProfileTypeSchema,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n tsCamelCase,\n tsExtensionFlatTypeName,\n tsProfileClassName,\n tsProfileModuleName,\n tsResolvedExtensionBaseName,\n tsResourceName,\n tsValueFieldName,\n} from \"./name\";\nimport { collectProfileFactoryInfo } from \"./profile\";\nimport { tsTypeFromIdentifier } from \"./utils\";\nimport type { TypeScript } from \"./writer\";\n\nexport type SubExtensionSliceInfo = {\n name: string;\n url: string;\n valueField: string;\n tsType: string;\n isArray: boolean;\n isRequired: boolean;\n};\n\nexport type ExtensionProfileInfo = {\n className: string;\n modulePath: string;\n flatProfile: ProfileTypeSchema;\n};\n\n/**\n * Extract value field name from a slice's `elements` list.\n * E.g. `[\"url\", \"value\", \"valueCoding\"]` → `\"valueCoding\"`\n */\nexport const extractValueField = (elements: string[] | undefined): string | undefined => {\n if (!elements) return undefined;\n return elements.find((e) => e.startsWith(\"value\") && e !== \"value\");\n};\n\n/**\n * Map a FHIR value field name (e.g. \"valueCoding\") to its TypeScript type.\n */\nexport const valueFieldToTsType = (valueField: string): string => {\n const fhirName = valueField.replace(/^value/, \"\");\n // Primitive types that map to TS primitives\n const primitives: Record<string, string> = {\n String: \"string\",\n Boolean: \"boolean\",\n Integer: \"number\",\n Decimal: \"number\",\n Date: \"string\",\n DateTime: \"string\",\n Time: \"string\",\n Instant: \"string\",\n Uri: \"string\",\n Url: \"string\",\n Canonical: \"string\",\n Code: \"string\",\n Oid: \"string\",\n Id: \"string\",\n Markdown: \"string\",\n UnsignedInt: \"number\",\n PositiveInt: \"number\",\n Uuid: \"string\",\n Base64Binary: \"string\",\n };\n return primitives[fhirName] ?? fhirName;\n};\n\n/**\n * Collect sub-extension \"flat input\" info from an extension profile's own\n * slice definitions on its `extension` field.\n */\nexport const collectSubExtensionSlices = (extProfile: ProfileTypeSchema): SubExtensionSliceInfo[] => {\n const extensionField = extProfile.fields?.extension;\n if (!extensionField || isChoiceDeclarationField(extensionField) || !extensionField.slicing?.slices) return [];\n const result: SubExtensionSliceInfo[] = [];\n for (const [sliceName, slice] of Object.entries(extensionField.slicing.slices)) {\n const valueField = extractValueField(slice.elements);\n if (!valueField) continue;\n const tsType = valueFieldToTsType(valueField);\n const isArray = slice.max === undefined;\n const isRequired = slice.min !== undefined && slice.min >= 1;\n result.push({\n name: tsCamelCase(sliceName) || sliceName,\n url: sliceName,\n valueField,\n tsType,\n isArray,\n isRequired,\n });\n }\n return result;\n};\n\n/**\n * Resolve extension URL → extension profile class info (if the extension has\n * its own generated profile class in the index).\n */\nexport const resolveExtensionProfile = (\n tsIndex: TypeSchemaIndex,\n pkgName: string,\n url: string,\n): ExtensionProfileInfo | undefined => {\n const schema = tsIndex.resolveByUrl(pkgName, url as CanonicalUrl);\n if (!schema || !isProfileTypeSchema(schema)) return undefined;\n // Only resolve extension profiles from the same package to avoid cross-package imports\n if (schema.identifier.package !== pkgName) return undefined;\n const className = tsProfileClassName(schema);\n const modulePath = `./${tsProfileModuleName(tsIndex, schema)}`;\n const flatProfile = tsIndex.flatProfile(schema);\n return { className, modulePath, flatProfile };\n};\n\n/** Generate the body of a raw Extension branch: validate url, then push. */\nconst generateRawExtensionBody = (w: TypeScript, ext: ProfileExtension, targetPath: string[], paramName = \"input\") => {\n w.line(\n `if (${paramName}.url !== ${JSON.stringify(ext.url)}) throw new Error(\\`Expected extension url '${ext.url}', got '\\${${paramName}.url}'\\`)`,\n );\n generateExtensionPush(w, targetPath, paramName);\n};\n\n/** Generate the code that pushes an extension onto the target (root or nested path). */\nexport const generateExtensionPush = (w: TypeScript, targetPath: string[], extExpr: string) => {\n if (targetPath.length === 0) {\n w.line(`pushExtension(this.resource, ${extExpr})`);\n } else {\n w.line(\n `const target = ensurePath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n w.line(\"if (!Array.isArray(target.extension)) target.extension = [] as Extension[]\");\n w.line(`pushExtension(target as unknown as { extension?: Extension[] }, ${extExpr})`);\n }\n};\n\n/** Generate the extension lookup code for getters. */\nconst generateExtLookup = (w: TypeScript, ext: ProfileExtension, targetPath: string[]) => {\n if (targetPath.length === 0) {\n w.line(`const ext = this.resource.extension?.find(e => e.url === \"${ext.url}\")`);\n } else {\n w.line(\n `const target = ensurePath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n w.line(`const ext = (target.extension as Extension[] | undefined)?.find(e => e.url === \"${ext.url}\")`);\n }\n};\n\nconst effectiveGetterDefault = (w: TypeScript, hasProfile: boolean): \"flat\" | \"profile\" | \"raw\" => {\n const configured = w.opts.extensionGetterDefault ?? \"flat\";\n if (configured === \"profile\" && !hasProfile) return \"flat\";\n return configured;\n};\n\nconst returnTypeForMode = (mode: \"flat\" | \"profile\" | \"raw\", inputType: string, profileClassName?: string): string => {\n if (mode === \"profile\" && profileClassName) return profileClassName;\n if (mode === \"raw\") return \"Extension\";\n return inputType;\n};\n\nconst generateExtensionGetterOverloads = (\n w: TypeScript,\n ext: ProfileExtension,\n targetPath: string[],\n methodName: string,\n inputType: string,\n extProfileInfo: ExtensionProfileInfo | undefined,\n generateInputBody: () => void,\n) => {\n const hasProfile = !!extProfileInfo;\n const defaultMode = effectiveGetterDefault(w, hasProfile);\n const modes: (\"flat\" | \"profile\" | \"raw\")[] = hasProfile ? [\"flat\", \"profile\", \"raw\"] : [\"flat\", \"raw\"];\n\n for (const mode of modes) {\n const rt = returnTypeForMode(mode, inputType, extProfileInfo?.className);\n w.lineSM(`public ${methodName}(mode: '${mode}'): ${rt} | undefined`);\n }\n const defaultReturn = returnTypeForMode(defaultMode, inputType, extProfileInfo?.className);\n w.lineSM(`public ${methodName}(): ${defaultReturn} | undefined`);\n\n const allReturns = [...new Set(modes.map((m) => returnTypeForMode(m, inputType, extProfileInfo?.className)))];\n const modesUnion = modes.map((m) => `'${m}'`).join(\" | \");\n w.curlyBlock(\n [\"public\", methodName, `(mode: ${modesUnion} = '${defaultMode}'): ${allReturns.join(\" | \")} | undefined`],\n () => {\n generateExtLookup(w, ext, targetPath);\n w.line(\"if (!ext) return undefined\");\n w.line(\"if (mode === 'raw') return ext\");\n if (hasProfile) {\n w.line(`if (mode === 'profile') return ${extProfileInfo?.className}.apply(ext)`);\n }\n generateInputBody();\n },\n );\n};\n\ntype ExtensionMethodInfo = {\n ext: ProfileExtension;\n flatProfile: ProfileTypeSchema;\n setMethodName: string;\n getMethodName: string;\n targetPath: string[];\n extProfileInfo: ExtensionProfileInfo | undefined;\n};\n\n// Complex extension — has sub-extensions (e.g., Race with ombCategory, detailed, text)\n\nconst generateComplexExtensionSetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, flatProfile, setMethodName, targetPath, extProfileInfo } = info;\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const inputTypeName = tsExtensionFlatTypeName(tsProfileName, ext.name);\n const extProfileHasFlatInput = extProfileInfo\n ? collectSubExtensionSlices(extProfileInfo.flatProfile).length > 0\n : false;\n\n if (extProfileInfo && extProfileHasFlatInput) {\n const paramType = `${extProfileInfo.className}Flat | ${extProfileInfo.className} | Extension`;\n w.curlyBlock([\"public\", setMethodName, `(input: ${paramType}): this`], () => {\n w.ifElseChain(\n [\n {\n cond: `input instanceof ${extProfileInfo.className}`,\n body: () => generateExtensionPush(w, targetPath, \"input.toResource()\"),\n },\n {\n cond: \"isExtension<Extension>(input)\",\n body: () => generateRawExtensionBody(w, ext, targetPath),\n },\n ],\n () => generateExtensionPush(w, targetPath, `${extProfileInfo.className}.createResource(input)`),\n );\n w.line(\"return this\");\n });\n } else {\n w.curlyBlock([\"public\", setMethodName, `(input: ${inputTypeName}): this`], () => {\n w.line(\"const subExtensions: Extension[] = []\");\n for (const sub of ext.subExtensions ?? []) {\n const valueField = sub.valueType ? tsValueFieldName(sub.valueType) : \"value\";\n if (sub.max === \"*\") {\n w.curlyBlock([\"if\", `(input.${sub.name})`], () => {\n w.curlyBlock([\"for\", `(const item of input.${sub.name})`], () => {\n w.line(`subExtensions.push({ url: \"${sub.url}\", ${valueField}: item } as Extension)`);\n });\n });\n } else {\n w.curlyBlock([\"if\", `(input.${sub.name} !== undefined)`], () => {\n w.line(\n `subExtensions.push({ url: \"${sub.url}\", ${valueField}: input.${sub.name} } as Extension)`,\n );\n });\n }\n }\n if (targetPath.length === 0) {\n w.line(\"const list = (this.resource.extension ??= [])\");\n w.line(`list.push({ url: \"${ext.url}\", extension: subExtensions })`);\n } else {\n w.line(\n `const target = ensurePath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n w.line(\"if (!Array.isArray(target.extension)) target.extension = [] as Extension[]\");\n w.line(`(target.extension as Extension[]).push({ url: \"${ext.url}\", extension: subExtensions })`);\n }\n w.line(\"return this\");\n });\n }\n};\n\nconst generateComplexExtensionGetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, flatProfile, getMethodName, targetPath, extProfileInfo } = info;\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const inputTypeName = tsExtensionFlatTypeName(tsProfileName, ext.name);\n const extProfileHasFlatInput = extProfileInfo\n ? collectSubExtensionSlices(extProfileInfo.flatProfile).length > 0\n : false;\n const inputType = extProfileHasFlatInput && extProfileInfo ? `${extProfileInfo.className}Flat` : inputTypeName;\n\n generateExtensionGetterOverloads(w, ext, targetPath, getMethodName, inputType, extProfileInfo, () => {\n const configItems = (ext.subExtensions ?? []).map((sub) => {\n const valueField = sub.valueType ? tsValueFieldName(sub.valueType) : \"value\";\n const isArray = sub.max === \"*\";\n return `{ name: \"${sub.url}\", valueField: \"${valueField}\", isArray: ${isArray} }`;\n });\n w.line(`const config = [${configItems.join(\", \")}]`);\n w.line(`return extractComplexExtension<${inputType}>(ext, config)`);\n });\n};\n\n// Single-value extension — one known value type (e.g., birthSex with valueCode)\n\nconst generateSingleValueExtensionSetter = (w: TypeScript, tsIndex: TypeSchemaIndex, info: ExtensionMethodInfo) => {\n const { ext, setMethodName, targetPath, extProfileInfo } = info;\n const firstValueType = ext.valueTypes?.[0];\n if (!firstValueType) return;\n const valueType = tsTypeFromIdentifier(firstValueType);\n const valueField = tsValueFieldName(firstValueType);\n\n if (extProfileInfo) {\n const paramType = `${extProfileInfo.className} | Extension | ${valueType}`;\n const extHasValueParam = collectProfileFactoryInfo(tsIndex, extProfileInfo.flatProfile).params.some(\n (p) => p.name === valueField,\n );\n const elseExpr = extHasValueParam\n ? `${extProfileInfo.className}.createResource({ ${valueField}: value as ${valueType} })`\n : `{ url: \"${ext.url}\", ${valueField}: value as ${valueType} } as Extension`;\n w.curlyBlock([\"public\", setMethodName, `(value: ${paramType}): this`], () => {\n w.ifElseChain(\n [\n {\n cond: `value instanceof ${extProfileInfo.className}`,\n body: () => generateExtensionPush(w, targetPath, \"value.toResource()\"),\n },\n {\n cond: \"isExtension(value)\",\n body: () => generateRawExtensionBody(w, ext, targetPath, \"value\"),\n },\n ],\n () => generateExtensionPush(w, targetPath, elseExpr),\n );\n w.line(\"return this\");\n });\n } else {\n w.curlyBlock([\"public\", setMethodName, `(value: ${valueType}): this`], () => {\n const extLiteral = `{ url: \"${ext.url}\", ${valueField}: value } as Extension`;\n generateExtensionPush(w, targetPath, extLiteral);\n w.line(\"return this\");\n });\n }\n};\n\nconst generateSingleValueExtensionGetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, getMethodName, targetPath, extProfileInfo } = info;\n const firstValueType = ext.valueTypes?.[0];\n if (!firstValueType) return;\n const valueType = tsTypeFromIdentifier(firstValueType);\n const valueField = tsValueFieldName(firstValueType);\n\n generateExtensionGetterOverloads(w, ext, targetPath, getMethodName, valueType, extProfileInfo, () => {\n w.line(`return getExtensionValue<${valueType}>(ext, \"${valueField}\")`);\n });\n};\n\n// Generic extension — no known value type\n\nconst generateGenericExtensionSetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, setMethodName, targetPath } = info;\n\n w.curlyBlock([\"public\", setMethodName, `(value: Omit<Extension, \"url\"> | Extension): this`], () => {\n w.ifElseChain(\n [\n {\n cond: \"isExtension(value)\",\n body: () => generateRawExtensionBody(w, ext, targetPath, \"value\"),\n },\n ],\n () => generateExtensionPush(w, targetPath, `{ url: \"${ext.url}\", ...value } as Extension`),\n );\n w.line(\"return this\");\n });\n};\n\nconst generateGenericExtensionGetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, getMethodName, targetPath } = info;\n\n w.curlyBlock([\"public\", getMethodName, \"(): Extension | undefined\"], () => {\n if (targetPath.length === 0) {\n w.line(`return this.resource.extension?.find(e => e.url === \"${ext.url}\")`);\n } else {\n w.line(\n `const target = ensurePath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n w.line(`return (target.extension as Extension[] | undefined)?.find(e => e.url === \"${ext.url}\")`);\n }\n });\n};\n\nexport const generateExtensionMethods = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n extensionBaseNames: Record<string, string>,\n) => {\n for (const ext of flatProfile.extensions ?? []) {\n if (!ext.url) continue;\n const baseName = tsResolvedExtensionBaseName(extensionBaseNames, ext.url, ext.path, ext.name);\n const targetPath = ext.path.split(\".\").filter((segment) => segment !== \"extension\");\n const extProfileInfo = resolveExtensionProfile(tsIndex, flatProfile.identifier.package, ext.url);\n const info: ExtensionMethodInfo = {\n ext,\n flatProfile,\n setMethodName: `set${baseName}`,\n getMethodName: `get${baseName}`,\n targetPath,\n extProfileInfo,\n };\n\n if (ext.isComplex && ext.subExtensions) {\n generateComplexExtensionSetter(w, info);\n w.line();\n generateComplexExtensionGetter(w, info);\n } else if (ext.valueTypes?.length === 1 && ext.valueTypes[0]) {\n generateSingleValueExtensionSetter(w, tsIndex, info);\n w.line();\n generateSingleValueExtensionGetter(w, info);\n } else {\n generateGenericExtensionSetter(w, info);\n w.line();\n generateGenericExtensionGetter(w, info);\n }\n w.line();\n }\n};\n\nexport const collectTypesFromExtensions = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n addType: (typeId: Identifier) => void,\n): boolean => {\n let needsExtensionType = false;\n\n for (const ext of flatProfile.extensions ?? []) {\n if (ext.isComplex && ext.subExtensions) {\n needsExtensionType = true;\n for (const sub of ext.subExtensions) {\n if (!sub.valueType) continue;\n const resolvedType = tsIndex.resolveByUrl(\n flatProfile.identifier.package,\n sub.valueType.url as CanonicalUrl,\n );\n addType(resolvedType?.identifier ?? sub.valueType);\n }\n } else if (ext.valueTypes && ext.valueTypes.length === 1) {\n needsExtensionType = true;\n if (ext.valueTypes[0]) {\n const resolvedType = tsIndex.resolveByUrl(\n flatProfile.identifier.package,\n ext.valueTypes[0].url as CanonicalUrl,\n );\n addType(resolvedType?.identifier ?? ext.valueTypes[0]);\n }\n } else {\n needsExtensionType = true;\n }\n }\n\n return needsExtensionType;\n};\n\n/** Collect types used in the FlatInput of extension profiles. */\nexport const collectTypesFromFlatInput = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n addType: (typeId: Identifier) => void,\n) => {\n if (flatProfile.base.name !== \"Extension\") return;\n const subSlices = collectSubExtensionSlices(flatProfile);\n for (const sub of subSlices) {\n const tsType = sub.tsType;\n // Primitive types (string, boolean, number) don't need imports\n if ([\"string\", \"boolean\", \"number\"].includes(tsType)) continue;\n // Resolve complex FHIR type by name\n const fhirUrl = `http://hl7.org/fhir/StructureDefinition/${tsType}` as CanonicalUrl;\n const schema = tsIndex.resolveByUrl(flatProfile.identifier.package, fhirUrl);\n if (schema) addType(schema.identifier);\n }\n};\n","import {\n type ConstrainedChoiceInfo,\n type Identifier,\n isChoiceDeclarationField,\n isNotChoiceDeclarationField,\n isPrimitiveIdentifier,\n type ProfileTypeSchema,\n type RegularField,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n tsFieldName,\n tsProfileClassName,\n tsResolvedSliceBaseName,\n tsResourceName,\n tsSliceFlatTypeName,\n tsSliceStaticName,\n} from \"./name\";\nimport { tsGet, tsTypeFromIdentifier } from \"./utils\";\nimport type { TypeScript } from \"./writer\";\n\n/** Collect choice declaration field names from a base type schema */\nconst collectChoiceBaseNames = (tsIndex: TypeSchemaIndex, typeId: Identifier): Set<string> => {\n const names = new Set<string>();\n const schema = tsIndex.resolve(typeId);\n if (schema && \"fields\" in schema && schema.fields) {\n for (const [name, f] of Object.entries(schema.fields)) {\n if (isChoiceDeclarationField(f)) names.add(name);\n }\n }\n return names;\n};\n\nexport const collectTypesFromSlices = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n addType: (typeId: Identifier) => void,\n) => {\n const pkgName = flatProfile.identifier.package;\n for (const field of Object.values(flatProfile.fields ?? {})) {\n if (!isNotChoiceDeclarationField(field) || !field.slicing?.slices || !field.type) continue;\n for (const slice of Object.values(field.slicing.slices)) {\n if (Object.keys(slice.match ?? {}).length > 0) {\n addType(field.type);\n const cc = slice.elements ? tsIndex.constrainedChoice(pkgName, field.type, slice.elements) : undefined;\n if (cc) addType(cc.variantType);\n }\n }\n }\n};\n\nexport const collectRequiredSliceNames = (field: RegularField): string[] | undefined => {\n if (!field.array || !field.slicing?.slices) return undefined;\n const names = Object.entries(field.slicing.slices)\n .filter(([_, s]) => s.min !== undefined && s.min >= 1 && s.match && Object.keys(s.match).length > 0)\n .map(([name]) => name);\n return names.length > 0 ? names : undefined;\n};\n\nexport type SliceDef = {\n fieldName: string;\n baseType: string;\n sliceName: string;\n match: Record<string, unknown>;\n /** Required fields, already filtered (match keys and polymorphic base names removed) */\n required: string[];\n excluded: string[];\n array: boolean;\n constrainedChoice: ConstrainedChoiceInfo | undefined;\n};\n\nexport const collectSliceDefs = (tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema): SliceDef[] =>\n Object.entries(flatProfile.fields ?? {})\n .filter(([_, field]) => isNotChoiceDeclarationField(field) && field.slicing?.slices)\n .flatMap(([fieldName, field]) => {\n if (!isNotChoiceDeclarationField(field) || !field.slicing?.slices || !field.type) return [];\n const baseType = tsTypeFromIdentifier(field.type);\n const pkgName = flatProfile.identifier.package;\n const choiceBaseNames = collectChoiceBaseNames(tsIndex, field.type);\n return Object.entries(field.slicing.slices)\n .filter(([_, slice]) => Object.keys(slice.match ?? {}).length > 0)\n .map(([sliceName, slice]) => {\n const matchFields = Object.keys(slice.match ?? {});\n const required = (slice.required ?? []).filter(\n (name) => !matchFields.includes(name) && !choiceBaseNames.has(name),\n );\n const cc = slice.elements\n ? tsIndex.constrainedChoice(pkgName, field.type, slice.elements)\n : undefined;\n // Skip flattening for primitive types — can't intersect object with boolean/string/etc.\n const constrainedChoice = cc && !isPrimitiveIdentifier(cc.variantType) ? cc : undefined;\n return {\n fieldName,\n baseType,\n sliceName,\n match: slice.match ?? {},\n required,\n excluded: slice.excluded ?? [],\n array: Boolean(field.array),\n constrainedChoice,\n };\n });\n });\n\nexport const generateSliceSetters = (\n w: TypeScript,\n sliceDefs: SliceDef[],\n flatProfile: ProfileTypeSchema,\n sliceBaseNames: Record<string, string>,\n) => {\n const profileClassName = tsProfileClassName(flatProfile);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n for (const sliceDef of sliceDefs) {\n const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName);\n const methodName = `set${baseName}`;\n const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`;\n const tsField = tsFieldName(sliceDef.fieldName);\n const fieldAccess = tsGet(\"this.resource\", tsField);\n const baseType = sliceDef.baseType;\n // Make input optional when there are no required fields (input can be empty object)\n const inputOptional = sliceDef.required.length === 0;\n const unionType = `${typeName} | ${baseType}`;\n const paramSignature = inputOptional ? `(input?: ${unionType}): this` : `(input: ${unionType}): this`;\n w.curlyBlock([\"public\", methodName, paramSignature], () => {\n w.line(`const match = ${matchRef}`);\n w.curlyBlock([\"if\", \"(input && matchesValue(input, match))\"], () => {\n if (sliceDef.array) {\n w.line(`setArraySlice(${fieldAccess} ??= [], match, input as ${baseType})`);\n } else {\n w.line(`${fieldAccess} = input as ${baseType}`);\n }\n w.line(\"return this\");\n });\n const inputExpr = inputOptional ? \"input ?? {}\" : \"input\";\n if (sliceDef.constrainedChoice) {\n const cc = sliceDef.constrainedChoice;\n w.line(`const wrapped = wrapSliceChoice<${baseType}>(${inputExpr}, ${JSON.stringify(cc.variant)})`);\n w.line(`const value = applySliceMatch<${baseType}>(wrapped, match)`);\n } else {\n w.line(`const value = applySliceMatch<${baseType}>(${inputExpr}, match)`);\n }\n if (sliceDef.array) {\n w.line(`setArraySlice(${fieldAccess} ??= [], match, value)`);\n } else {\n w.line(`${fieldAccess} = value`);\n }\n w.line(\"return this\");\n });\n w.line();\n }\n};\n\nexport const generateSliceGetters = (\n w: TypeScript,\n sliceDefs: SliceDef[],\n flatProfile: ProfileTypeSchema,\n sliceBaseNames: Record<string, string>,\n) => {\n const profileClassName = tsProfileClassName(flatProfile);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const defaultMode = w.opts.sliceGetterDefault ?? \"flat\";\n for (const sliceDef of sliceDefs) {\n const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName);\n const getMethodName = `get${baseName}`;\n const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`;\n const matchKeys = JSON.stringify(Object.keys(sliceDef.match));\n const tsField = tsFieldName(sliceDef.fieldName);\n const fieldAccess = tsGet(\"this.resource\", tsField);\n const baseType = sliceDef.baseType;\n const defaultReturn = defaultMode === \"raw\" ? baseType : typeName;\n\n // Overload signatures\n w.lineSM(`public ${getMethodName}(mode: 'flat'): ${typeName} | undefined`);\n w.lineSM(`public ${getMethodName}(mode: 'raw'): ${baseType} | undefined`);\n w.lineSM(`public ${getMethodName}(): ${defaultReturn} | undefined`);\n\n // Implementation\n w.curlyBlock(\n [\n \"public\",\n getMethodName,\n `(mode: 'flat' | 'raw' = '${defaultMode}'): ${typeName} | ${baseType} | undefined`,\n ],\n () => {\n w.line(`const match = ${matchRef}`);\n if (sliceDef.array) {\n w.line(`const item = getArraySlice(${fieldAccess}, match)`);\n w.line(\"if (!item) return undefined\");\n } else {\n w.line(`const item = ${fieldAccess}`);\n w.line(\"if (!item || !matchesValue(item, match)) return undefined\");\n }\n w.line(\"if (mode === 'raw') return item\");\n if (sliceDef.constrainedChoice) {\n const cc = sliceDef.constrainedChoice;\n w.line(`return unwrapSliceChoice<${typeName}>(item, ${matchKeys}, ${JSON.stringify(cc.variant)})`);\n } else {\n w.line(`return stripMatchKeys<${typeName}>(item, ${matchKeys})`);\n }\n },\n );\n w.line();\n }\n};\n","import {\n type ChoiceFieldInstance,\n type Identifier,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n type ProfileTypeSchema,\n type RegularField,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport { tsProfileClassName } from \"./name\";\nimport type { TypeScript } from \"./writer\";\n\nexport const collectRegularFieldValidation = (\n errors: string[],\n warnings: string[],\n name: string,\n field: RegularField | ChoiceFieldInstance,\n resolveRef: (ref: Identifier) => Identifier,\n canonicalUrlExpr?: { url: string; expr: string },\n) => {\n if (field.excluded) {\n errors.push(`...validateExcluded(res, profileName, ${JSON.stringify(name)})`);\n return;\n }\n\n if (field.required) errors.push(`...validateRequired(res, profileName, ${JSON.stringify(name)})`);\n\n if (field.valueConstraint) {\n const valueExpr =\n canonicalUrlExpr && name === \"url\" && field.valueConstraint.value === canonicalUrlExpr.url\n ? canonicalUrlExpr.expr\n : JSON.stringify(field.valueConstraint.value);\n errors.push(`...validateFixedValue(res, profileName, ${JSON.stringify(name)}, ${valueExpr})`);\n }\n\n if (field.enum) {\n const target = field.enum.isOpen ? warnings : errors;\n target.push(`...validateEnum(res, profileName, ${JSON.stringify(name)}, ${JSON.stringify(field.enum.values)})`);\n }\n\n if (field.mustSupport && !field.required)\n warnings.push(`...validateMustSupport(res, profileName, ${JSON.stringify(name)})`);\n\n if (field.reference && field.reference.length > 0)\n errors.push(\n `...validateReference(res, profileName, ${JSON.stringify(name)}, ${JSON.stringify(field.reference.map((ref) => resolveRef(ref).name))})`,\n );\n\n if (field.slicing?.slices) {\n for (const [sliceName, slice] of Object.entries(field.slicing.slices)) {\n if (slice.min === undefined && slice.max === undefined) continue;\n const match = slice.match ?? {};\n if (Object.keys(match).length === 0) continue;\n const min = slice.min ?? 0;\n const max = slice.max ?? 0;\n errors.push(\n `...validateSliceCardinality(res, profileName, ${JSON.stringify(name)}, ${JSON.stringify(match)}, ${JSON.stringify(sliceName)}, ${min}, ${max})`,\n );\n }\n }\n};\n\nexport const generateValidateMethod = (w: TypeScript, tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) => {\n const fields = flatProfile.fields ?? {};\n const profileName = flatProfile.identifier.name;\n const canonicalUrl = flatProfile.identifier.url;\n const canonicalUrlExpr = canonicalUrl\n ? { url: canonicalUrl, expr: `${tsProfileClassName(flatProfile)}.canonicalUrl` }\n : undefined;\n w.curlyBlock([\"validate(): { errors: string[]; warnings: string[] }\"], () => {\n w.line(`const profileName = \"${profileName}\"`);\n w.line(\"const res = this.resource\");\n\n const errors: string[] = [];\n const warnings: string[] = [];\n for (const [name, field] of Object.entries(fields)) {\n if (isChoiceInstanceField(field)) continue;\n\n if (isChoiceDeclarationField(field)) {\n if (field.required)\n errors.push(`...validateChoiceRequired(res, profileName, ${JSON.stringify(field.choices)})`);\n continue;\n }\n\n collectRegularFieldValidation(\n errors,\n warnings,\n name,\n field,\n tsIndex.findLastSpecializationByIdentifier,\n canonicalUrlExpr,\n );\n }\n\n const emitArray = (label: string, exprs: string[]) => {\n if (exprs.length === 0) {\n w.line(`${label}: [],`);\n } else {\n w.squareBlock([`${label}:`], () => {\n for (const expr of exprs) w.line(`${expr},`);\n }, [\",\"]);\n }\n };\n w.curlyBlock([\"return\"], () => {\n emitArray(\"errors\", errors);\n emitArray(\"warnings\", warnings);\n });\n });\n w.line();\n};\n","import { pascalCase, typeSchemaInfo, uppercaseFirstLetter } from \"@root/api/writer-generator/utils\";\nimport {\n type CanonicalUrl,\n type Identifier,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveIdentifier,\n isResourceIdentifier,\n isSpecializationTypeSchema,\n type ProfileExtension,\n type ProfileTypeSchema,\n packageMeta,\n packageMetaToFhir,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n tsCamelCase,\n tsExtensionFlatTypeName,\n tsExtensionMethodBaseName,\n tsFieldName,\n tsModulePath,\n tsNameFromCanonical,\n tsPackageDir,\n tsProfileClassName,\n tsProfileModuleName,\n tsQualifiedExtensionMethodBaseName,\n tsQualifiedSliceMethodBaseName,\n tsResourceName,\n tsSliceFlatTypeName,\n tsSliceMethodBaseName,\n tsSliceStaticName,\n} from \"./name\";\nimport {\n collectSubExtensionSlices,\n collectTypesFromExtensions,\n collectTypesFromFlatInput,\n generateExtensionMethods,\n resolveExtensionProfile,\n} from \"./profile-extensions\";\nimport {\n collectRequiredSliceNames,\n collectSliceDefs,\n collectTypesFromSlices,\n generateSliceGetters,\n generateSliceSetters,\n type SliceDef,\n} from \"./profile-slices\";\nimport { generateValidateMethod } from \"./profile-validation\";\nimport { fieldTsType, resolvePrimitiveType, tsEnumType, tsGet, tsTypeFromIdentifier } from \"./utils\";\nimport type { TypeScript } from \"./writer\";\n\ntype ProfileFactoryInfo = {\n autoFields: { name: string; value: string }[];\n /** Array fields with required slices — optional param with auto-merge of required stubs */\n sliceAutoFields: { name: string; tsType: string; typeId: Identifier; sliceNames: string[] }[];\n params: { name: string; tsType: string; typeId: Identifier }[];\n accessors: { name: string; tsType: string; typeId: Identifier }[];\n};\n\nconst collectChoiceAccessors = (\n flatProfile: ProfileTypeSchema,\n promotedChoices: Set<string>,\n): ProfileFactoryInfo[\"accessors\"] => {\n const accessors: ProfileFactoryInfo[\"accessors\"] = [];\n for (const [name, field] of Object.entries(flatProfile.fields ?? {})) {\n if (field.excluded) continue;\n if (!isChoiceInstanceField(field)) continue;\n if (promotedChoices.has(name)) continue;\n const tsType = tsTypeFromIdentifier(field.type) + (field.array ? \"[]\" : \"\");\n accessors.push({ name, tsType, typeId: field.type });\n }\n return accessors;\n};\n\n/** Try to promote a required single-choice declaration to a direct param */\nconst tryPromoteChoice = (\n field: NonNullable<ProfileTypeSchema[\"fields\"]>[string],\n fields: NonNullable<ProfileTypeSchema[\"fields\"]>,\n params: ProfileFactoryInfo[\"params\"],\n promotedChoices: Set<string>,\n): void => {\n if (!isChoiceDeclarationField(field) || !field.required || field.choices.length !== 1) return;\n const choiceName = field.choices[0];\n if (!choiceName) return;\n const choiceField = fields[choiceName];\n if (!choiceField || !isChoiceInstanceField(choiceField)) return;\n const tsType = tsTypeFromIdentifier(choiceField.type) + (choiceField.array ? \"[]\" : \"\");\n params.push({ name: choiceName, tsType, typeId: choiceField.type });\n promotedChoices.add(choiceName);\n};\n\nexport const collectProfileFactoryInfo = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n): ProfileFactoryInfo => {\n const autoFields: ProfileFactoryInfo[\"autoFields\"] = [];\n const sliceAutoFields: ProfileFactoryInfo[\"sliceAutoFields\"] = [];\n const params: ProfileFactoryInfo[\"params\"] = [];\n const autoAccessors: ProfileFactoryInfo[\"accessors\"] = [];\n const fields = flatProfile.fields ?? {};\n const promotedChoices = new Set<string>();\n const resolveRef = tsIndex.findLastSpecializationByIdentifier;\n\n if (isResourceIdentifier(flatProfile.base)) {\n autoFields.push({ name: \"resourceType\", value: JSON.stringify(flatProfile.base.name) });\n }\n\n for (const [name, field] of Object.entries(fields)) {\n if (field.excluded) continue;\n if (isChoiceInstanceField(field)) continue;\n\n if (isChoiceDeclarationField(field)) {\n tryPromoteChoice(field, fields, params, promotedChoices);\n continue;\n }\n\n if (field.valueConstraint) {\n const value = JSON.stringify(field.valueConstraint.value);\n autoFields.push({ name, value: field.array ? `[${value}]` : value });\n if (isNotChoiceDeclarationField(field) && field.type) {\n const tsType = fieldTsType(field, resolveRef);\n autoAccessors.push({ name, tsType, typeId: field.type });\n }\n continue;\n }\n\n if (isNotChoiceDeclarationField(field)) {\n const sliceNames = collectRequiredSliceNames(field);\n if (sliceNames) {\n if (field.type) {\n const tsType = fieldTsType(field, resolveRef);\n sliceAutoFields.push({\n name,\n tsType,\n typeId: field.type,\n sliceNames,\n });\n autoAccessors.push({ name, tsType, typeId: field.type });\n }\n continue;\n }\n }\n\n if (field.required) {\n const tsType = fieldTsType(field, resolveRef);\n params.push({ name, tsType, typeId: field.type });\n }\n }\n\n collectBaseRequiredParams(tsIndex, flatProfile, resolveRef, params, [\n ...autoFields.map((f) => f.name),\n ...sliceAutoFields.map((f) => f.name),\n ...params.map((f) => f.name),\n ...promotedChoices,\n ]);\n\n const accessors = [...autoAccessors, ...collectChoiceAccessors(flatProfile, promotedChoices)];\n return { autoFields, sliceAutoFields, params, accessors };\n};\n\n/** Include base-type required fields not already covered by profile constraints */\nconst collectBaseRequiredParams = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n resolveRef: TypeSchemaIndex[\"findLastSpecializationByIdentifier\"],\n params: ProfileFactoryInfo[\"params\"],\n coveredNames: string[],\n) => {\n const covered = new Set(coveredNames);\n const baseSchema = tsIndex.resolve(flatProfile.base);\n if (!baseSchema || !(\"fields\" in baseSchema) || !baseSchema.fields) return;\n for (const [name, field] of Object.entries(baseSchema.fields)) {\n if (covered.has(name)) continue;\n if (!field.required) continue;\n if (isChoiceInstanceField(field)) continue;\n if (isChoiceDeclarationField(field)) continue;\n if (isNotChoiceDeclarationField(field) && field.type) {\n const tsType = fieldTsType(field, resolveRef);\n params.push({ name, tsType, typeId: field.type });\n }\n }\n};\n\nexport const generateProfileIndexFile = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n initialProfiles: ProfileTypeSchema[],\n) => {\n if (initialProfiles.length === 0) return;\n w.cd(\"profiles\", () => {\n w.cat(\"index.ts\", () => {\n const profiles: [ProfileTypeSchema, string, string | undefined][] = initialProfiles.map((profile) => {\n const className = tsProfileClassName(profile);\n const resourceName = tsResourceName(profile.identifier);\n const overrides = detectFieldOverrides(tsIndex, profile);\n let typeExport;\n if (overrides.size > 0) typeExport = resourceName;\n return [profile, className, typeExport];\n });\n if (profiles.length === 0) return;\n const classExports: Map<string, string> = new Map();\n const typeExports: Map<string, string> = new Map();\n for (const [profile, className, typeName] of profiles) {\n const moduleName = tsProfileModuleName(tsIndex, profile);\n if (!classExports.has(className)) {\n classExports.set(className, `export { ${className} } from \"./${moduleName}\"`);\n }\n if (typeName && !typeExports.has(typeName) && !classExports.has(typeName)) {\n typeExports.set(typeName, `export type { ${typeName} } from \"./${moduleName}\"`);\n }\n }\n const allExports = [...classExports.values(), ...typeExports.values()].sort();\n for (const exp of allExports) {\n w.lineSM(exp);\n }\n });\n });\n};\n\nconst tsTypeForProfileField = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n fieldName: string,\n field: NonNullable<ProfileTypeSchema[\"fields\"]>[string],\n): string => {\n if (!isNotChoiceDeclarationField(field)) {\n throw new Error(`Choice declaration fields not supported for '${fieldName}'`);\n }\n\n let tsType: string;\n if (field.enum) {\n if (field.type?.name === \"Coding\") {\n tsType = `Coding<${tsEnumType(field.enum)}>`;\n } else if (field.type?.name === \"CodeableConcept\") {\n tsType = `CodeableConcept<${tsEnumType(field.enum)}>`;\n } else {\n tsType = tsEnumType(field.enum);\n }\n } else if (field.reference && field.reference.length > 0) {\n const specialization = tsIndex.findLastSpecialization(flatProfile);\n if (!isSpecializationTypeSchema(specialization))\n throw new Error(`Invalid specialization for ${flatProfile.identifier}`);\n\n const sField = specialization.fields?.[fieldName];\n if (sField === undefined || isChoiceDeclarationField(sField) || sField.reference === undefined)\n throw new Error(`Invalid field declaration for ${fieldName}`);\n\n const sRefs = sField.reference.map((e) => e.name);\n const references = field.reference\n .map((ref) => {\n const resRef = tsIndex.findLastSpecializationByIdentifier(ref);\n if (resRef.name !== ref.name) {\n return `\"${resRef.name}\" /*${ref.name}*/`;\n }\n return `'${ref.name}'`;\n })\n .join(\" | \");\n if (sRefs.length === 1 && sRefs[0] === \"Resource\" && references !== '\"Resource\"') {\n // FIXME: should be generilized to type families\n // Strip inner comments to avoid nested /* */ which is invalid\n const cleanRefs = references.replace(/\\/\\*[^*]*\\*\\//g, \"\").trim();\n tsType = `Reference<\"Resource\" /* ${cleanRefs} */ >`;\n } else {\n tsType = `Reference<${references}>`;\n }\n } else if (isPrimitiveIdentifier(field.type)) {\n tsType = resolvePrimitiveType(field.type.name);\n } else if (isNestedIdentifier(field.type)) {\n tsType = tsResourceName(field.type);\n } else if (field.type === undefined) {\n throw new Error(`Undefined type for '${fieldName}' field at ${typeSchemaInfo(flatProfile)}`);\n } else {\n tsType = field.type.name;\n }\n\n return tsType;\n};\n\nconst generateProfileHelpersImport = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n sliceDefs: SliceDef[],\n factoryInfo: ProfileFactoryInfo,\n) => {\n const extensions = flatProfile.extensions ?? [];\n const hasMeta = tsIndex.isWithMetaField(flatProfile);\n const canonicalUrl = flatProfile.identifier.url;\n\n const imports: string[] = [];\n if (!isPrimitiveIdentifier(flatProfile.base)) imports.push(\"buildResource\");\n if (flatProfile.base.name === \"Extension\" && !!canonicalUrl && collectSubExtensionSlices(flatProfile).length > 0)\n imports.push(\"isRawExtensionInput\");\n if (canonicalUrl && hasMeta) imports.push(\"ensureProfile\");\n if (sliceDefs.length > 0 || factoryInfo.sliceAutoFields.length > 0)\n imports.push(\"applySliceMatch\", \"matchesValue\", \"setArraySlice\", \"getArraySlice\", \"ensureSliceDefaults\");\n if (extensions.some((ext) => ext.path.split(\".\").some((s) => s !== \"extension\"))) imports.push(\"ensurePath\");\n if (extensions.some((ext) => ext.isComplex && ext.subExtensions)) imports.push(\"extractComplexExtension\");\n if (sliceDefs.length > 0) imports.push(\"stripMatchKeys\");\n if (sliceDefs.some((s) => s.constrainedChoice)) imports.push(\"wrapSliceChoice\", \"unwrapSliceChoice\");\n if (extensions.some((ext) => ext.url)) imports.push(\"isExtension\", \"getExtensionValue\", \"pushExtension\");\n if (Object.keys(flatProfile.fields ?? {}).length > 0)\n imports.push(\n \"validateRequired\",\n \"validateExcluded\",\n \"validateFixedValue\",\n \"validateSliceCardinality\",\n \"validateEnum\",\n \"validateReference\",\n \"validateChoiceRequired\",\n \"validateMustSupport\",\n );\n if (imports.length > 0) {\n w.tsImport(\"../../profile-helpers\", ...imports);\n w.line();\n }\n};\n\nexport const generateProfileImports = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n overrides: FieldOverrides,\n) => {\n const usedTypes = new Map<string, { importPath: string; tsName: string }>();\n\n const getModulePath = (typeId: Identifier): string => {\n if (isNestedIdentifier(typeId)) {\n const path = tsNameFromCanonical(typeId.url, true);\n if (path) return `../../${tsPackageDir(typeId.package)}/${pascalCase(path)}`;\n }\n return `../../${tsModulePath(typeId)}`;\n };\n\n const addType = (typeId: Identifier) => {\n if (typeId.kind === \"primitive-type\") return;\n const tsName = tsResourceName(typeId);\n if (!usedTypes.has(tsName)) {\n usedTypes.set(tsName, { importPath: getModulePath(typeId), tsName });\n }\n };\n\n addType(flatProfile.base);\n collectTypesFromSlices(tsIndex, flatProfile, addType);\n const needsExtensionType = collectTypesFromExtensions(tsIndex, flatProfile, addType);\n for (const { typeId } of overrides.values()) addType(typeId);\n collectTypesFromFlatInput(tsIndex, flatProfile, addType);\n\n const factoryInfo = collectProfileFactoryInfo(tsIndex, flatProfile);\n for (const param of factoryInfo.params) addType(param.typeId);\n for (const f of factoryInfo.sliceAutoFields) addType(f.typeId);\n for (const accessor of factoryInfo.accessors) addType(accessor.typeId);\n\n if (needsExtensionType) {\n const extensionUrl = \"http://hl7.org/fhir/StructureDefinition/Extension\" as CanonicalUrl;\n const extensionSchema = tsIndex.resolveByUrl(flatProfile.identifier.package, extensionUrl);\n if (extensionSchema) addType(extensionSchema.identifier);\n }\n\n const grouped = new Map<string, string[]>();\n for (const { importPath, tsName } of usedTypes.values()) {\n let names = grouped.get(importPath);\n if (!names) {\n names = [];\n grouped.set(importPath, names);\n }\n names.push(tsName);\n }\n const sortedModules = [...grouped.entries()].sort(([a], [b]) => a.localeCompare(b));\n for (const [importPath, names] of sortedModules) {\n w.tsImport(importPath, ...names.sort(), { typeOnly: true });\n }\n if (sortedModules.length > 0) w.line();\n\n // Import extension profile classes for delegation in setters\n const extProfileImports = new Map<string, { modulePath: string; hasFlatInput: boolean }>();\n for (const ext of flatProfile.extensions ?? []) {\n if (!ext.url) continue;\n const info = resolveExtensionProfile(tsIndex, flatProfile.identifier.package, ext.url);\n if (!info) continue;\n if (!extProfileImports.has(info.className)) {\n const hasFlatInput = collectSubExtensionSlices(info.flatProfile).length > 0;\n extProfileImports.set(info.className, { modulePath: info.modulePath, hasFlatInput });\n }\n }\n for (const [className, { modulePath, hasFlatInput }] of [...extProfileImports.entries()].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n const imports = [className, ...(hasFlatInput ? [`type ${className}Flat`] : [])];\n w.tsImport(modulePath, ...imports);\n }\n if (extProfileImports.size > 0) w.line();\n};\n\nconst generateStaticSliceFields = (w: TypeScript, sliceDefs: SliceDef[]) => {\n for (const sliceDef of sliceDefs) {\n const staticName = `${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`;\n w.lineSM(`private static readonly ${staticName}: Record<string, unknown> = ${JSON.stringify(sliceDef.match)}`);\n }\n if (sliceDefs.length > 0) w.line();\n};\n\nconst generateFactoryMethods = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n factoryInfo: ProfileFactoryInfo,\n) => {\n const profileClassName = tsProfileClassName(flatProfile);\n const tsBaseResourceName = tsTypeFromIdentifier(flatProfile.base);\n const hasMeta = tsIndex.isWithMetaField(flatProfile);\n const hasParams = factoryInfo.params.length > 0 || factoryInfo.sliceAutoFields.length > 0;\n const createArgsTypeName = `${profileClassName}Raw`;\n const paramSignature = hasParams ? `args: ${createArgsTypeName}` : \"\";\n const allFields = [\n ...factoryInfo.autoFields.map((f) => ({ name: f.name, value: f.value })),\n ...factoryInfo.sliceAutoFields.map((f) => ({ name: f.name, value: `${f.name}WithDefaults` })),\n ...factoryInfo.params.map((p) => ({ name: p.name, value: `args.${p.name}` })),\n ];\n w.curlyBlock([\"constructor\", `(resource: ${tsBaseResourceName})`], () => {\n w.lineSM(\"this.resource = resource\");\n });\n w.line();\n w.curlyBlock([\"static\", \"from\", `(resource: ${tsBaseResourceName})`, `: ${profileClassName}`], () => {\n if (hasMeta) {\n w.curlyBlock([\"if\", `(!resource.meta?.profile?.includes(${profileClassName}.canonicalUrl))`], () => {\n w.line(\n `throw new Error(\\`${profileClassName}: meta.profile must include \\${${profileClassName}.canonicalUrl}\\`)`,\n );\n });\n }\n w.lineSM(`const profile = new ${profileClassName}(resource)`);\n w.lineSM(\"const { errors } = profile.validate()\");\n w.line(`if (errors.length > 0) throw new Error(errors.join(\"; \"))`);\n w.lineSM(\"return profile\");\n });\n w.line();\n w.curlyBlock([\"static\", \"apply\", `(resource: ${tsBaseResourceName})`, `: ${profileClassName}`], () => {\n if (hasMeta) {\n w.lineSM(`ensureProfile(resource, ${profileClassName}.canonicalUrl)`);\n }\n w.lineSM(`return new ${profileClassName}(resource)`);\n });\n w.line();\n // For extension profiles with sub-extension slices: generate resolveInput helper,\n // widen createResource and create to accept Input | Raw\n const subSlicesForInput = flatProfile.base.name === \"Extension\" ? collectSubExtensionSlices(flatProfile) : [];\n const hasInputHelper = subSlicesForInput.length > 0;\n\n if (hasInputHelper) {\n const rawInputTypeName = `${profileClassName}Raw`;\n const inputTypeName = `${profileClassName}Flat`;\n\n // Private helper: converts Input to Extension[], passes through Raw.extension\n w.curlyBlock(\n [\"private static\", \"resolveInput\", `(args: ${rawInputTypeName} | ${inputTypeName})`, \": Extension[]\"],\n () => {\n w.ifElseChain(\n [\n {\n cond: `isRawExtensionInput<${rawInputTypeName}>(args)`,\n body: () => w.lineSM(\"return args.extension ?? []\"),\n },\n ],\n () => {\n w.lineSM(\"const result: Extension[] = []\");\n for (const sub of subSlicesForInput) {\n if (sub.isArray) {\n w.curlyBlock([\"if\", `(args.${sub.name})`], () => {\n w.curlyBlock([\"for\", `(const item of args.${sub.name})`], () => {\n w.lineSM(\n `result.push({ url: \"${sub.url}\", ${sub.valueField}: item } as Extension)`,\n );\n });\n });\n } else {\n w.curlyBlock([\"if\", `(args.${sub.name} !== undefined)`], () => {\n w.lineSM(\n `result.push({ url: \"${sub.url}\", ${sub.valueField}: args.${sub.name} } as Extension)`,\n );\n });\n }\n }\n w.lineSM(\"return result\");\n },\n );\n },\n );\n w.line();\n\n // createResource — accepts Input | Raw\n const createResourceSig = hasParams\n ? `args: ${rawInputTypeName} | ${inputTypeName}`\n : `args?: ${rawInputTypeName} | ${inputTypeName}`;\n w.curlyBlock([\"static\", \"createResource\", `(${createResourceSig})`, `: ${tsBaseResourceName}`], () => {\n w.lineSM(`const resolvedExtensions = ${profileClassName}.resolveInput(args ?? {})`);\n const extSliceField = factoryInfo.sliceAutoFields.find((f) => f.name === \"extension\");\n if (extSliceField) {\n const matchRefs = extSliceField.sliceNames.map(\n (s) => `${profileClassName}.${tsSliceStaticName(s)}SliceMatch`,\n );\n w.line(\"const extensionWithDefaults = ensureSliceDefaults(\");\n w.indentBlock(() => {\n w.line(\"resolvedExtensions,\");\n for (const ref of matchRefs) {\n w.line(`${ref},`);\n }\n });\n w.lineSM(\")\");\n }\n w.line();\n const extensionVar = extSliceField ? \"extensionWithDefaults\" : \"resolvedExtensions\";\n w.curlyBlock([`const resource = buildResource<${tsBaseResourceName}>(`], () => {\n for (const f of allFields) {\n if (f.name === \"extension\") continue;\n w.line(`${f.name}: ${f.value},`);\n }\n w.line(`extension: ${extensionVar},`);\n if (hasMeta) {\n w.line(`meta: { profile: [${profileClassName}.canonicalUrl] },`);\n }\n }, [\")\"]);\n\n w.lineSM(\"return resource\");\n });\n w.line();\n\n // create — accepts Input | Raw, delegates to createResource\n const createSig = hasParams\n ? `args: ${rawInputTypeName} | ${inputTypeName}`\n : `args?: ${rawInputTypeName} | ${inputTypeName}`;\n w.curlyBlock([\"static\", \"create\", `(${createSig})`, `: ${profileClassName}`], () => {\n w.lineSM(`return ${profileClassName}.apply(${profileClassName}.createResource(args))`);\n });\n } else {\n // Standard createResource / create (no Input helper)\n w.curlyBlock([\"static\", \"createResource\", `(${paramSignature})`, `: ${tsBaseResourceName}`], () => {\n for (const f of factoryInfo.sliceAutoFields) {\n const matchRefs = f.sliceNames.map((s) => `${profileClassName}.${tsSliceStaticName(s)}SliceMatch`);\n w.line(`const ${f.name}WithDefaults = ensureSliceDefaults(`);\n w.indentBlock(() => {\n w.line(`[...(args.${f.name} ?? [])],`);\n for (const ref of matchRefs) {\n w.line(`${ref},`);\n }\n });\n w.lineSM(\")\");\n }\n if (factoryInfo.sliceAutoFields.length > 0) {\n w.line();\n }\n if (isPrimitiveIdentifier(flatProfile.base)) {\n w.lineSM(`const resource = undefined as unknown as ${tsBaseResourceName}`);\n } else {\n w.curlyBlock([`const resource = buildResource<${tsBaseResourceName}>(`], () => {\n for (const f of allFields) {\n w.line(`${f.name}: ${f.value},`);\n }\n if (hasMeta) {\n w.line(`meta: { profile: [${profileClassName}.canonicalUrl] },`);\n }\n }, [\")\"]);\n }\n w.lineSM(\"return resource\");\n });\n w.line();\n w.curlyBlock([\"static\", \"create\", `(${paramSignature})`, `: ${profileClassName}`], () => {\n w.lineSM(\n `return ${profileClassName}.apply(${profileClassName}.createResource(${hasParams ? \"args\" : \"\"}))`,\n );\n });\n }\n w.line();\n // toResource() returns base type (e.g., Patient)\n w.curlyBlock([\"toResource\", \"()\", `: ${tsBaseResourceName}`], () => {\n w.lineSM(\"return this.resource\");\n });\n w.line();\n};\n\nconst generateFieldAccessors = (\n w: TypeScript,\n factoryInfo: ProfileFactoryInfo,\n extSliceMethodBaseNames: Set<string>,\n) => {\n w.line(\"// Field accessors\");\n for (const p of factoryInfo.params) {\n const methodBaseName = uppercaseFirstLetter(p.name);\n w.curlyBlock([`get${methodBaseName}`, \"()\", `: ${p.tsType} | undefined`], () => {\n w.lineSM(`return this.resource.${p.name} as ${p.tsType} | undefined`);\n });\n w.line();\n w.curlyBlock([`set${methodBaseName}`, `(value: ${p.tsType})`, \": this\"], () => {\n w.lineSM(`Object.assign(this.resource, { ${p.name}: value })`);\n w.lineSM(\"return this\");\n });\n w.line();\n }\n\n // Getter and setter methods for choice instance fields (skip if extension/slice has same name)\n for (const a of factoryInfo.accessors) {\n const methodBaseName = uppercaseFirstLetter(tsCamelCase(a.name));\n if (extSliceMethodBaseNames.has(methodBaseName)) continue;\n const fieldAccess = tsFieldName(a.name);\n w.curlyBlock([`get${methodBaseName}`, \"()\", `: ${a.tsType} | undefined`], () => {\n w.lineSM(`return ${tsGet(\"this.resource\", fieldAccess)} as ${a.tsType} | undefined`);\n });\n w.line();\n w.curlyBlock([`set${methodBaseName}`, `(value: ${a.tsType})`, \": this\"], () => {\n w.lineSM(`Object.assign(this.resource, { ${fieldAccess}: value })`);\n w.lineSM(\"return this\");\n });\n w.line();\n }\n};\n\n/** Generate inline extension input types only for complex extensions without a resolved FlatInput profile */\nconst generateInlineExtensionInputTypes = (w: TypeScript, tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) => {\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const complexExtensions = (flatProfile.extensions ?? []).filter((ext) => ext.isComplex && ext.subExtensions);\n for (const ext of complexExtensions) {\n if (!ext.url) continue;\n const extProfileInfo = resolveExtensionProfile(tsIndex, flatProfile.identifier.package, ext.url);\n const hasFlatInput = extProfileInfo ? collectSubExtensionSlices(extProfileInfo.flatProfile).length > 0 : false;\n if (hasFlatInput) continue;\n const typeName = tsExtensionFlatTypeName(tsProfileName, ext.name);\n w.curlyBlock([\"export\", \"type\", typeName, \"=\"], () => {\n for (const sub of ext.subExtensions ?? []) {\n const tsType = sub.valueType ? tsTypeFromIdentifier(sub.valueType) : \"unknown\";\n const isArray = sub.max === \"*\";\n const isRequired = sub.min !== undefined && sub.min > 0;\n w.lineSM(`${sub.name}${isRequired ? \"\" : \"?\"}: ${tsType}${isArray ? \"[]\" : \"\"}`);\n }\n });\n w.line();\n }\n};\n\nconst generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, sliceDefs: SliceDef[]) => {\n if (sliceDefs.length === 0) return;\n const tsProfileName = tsResourceName(flatProfile.identifier);\n for (const sliceDef of sliceDefs) {\n const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchFields = Object.keys(sliceDef.match);\n const allExcluded = [...new Set([...sliceDef.excluded, ...matchFields])];\n if (sliceDef.constrainedChoice) {\n const cc = sliceDef.constrainedChoice;\n allExcluded.push(cc.choiceBase);\n for (const name of cc.allChoiceNames) {\n if (!allExcluded.includes(name)) allExcluded.push(name);\n }\n }\n const excludedNames = allExcluded.map((name) => JSON.stringify(name));\n const requiredNames = sliceDef.required.map((name) => JSON.stringify(name));\n let typeExpr = sliceDef.baseType;\n if (excludedNames.length > 0) {\n typeExpr = `Omit<${typeExpr}, ${excludedNames.join(\" | \")}>`;\n }\n if (requiredNames.length > 0) {\n typeExpr = `${typeExpr} & Required<Pick<${sliceDef.baseType}, ${requiredNames.join(\" | \")}>>`;\n }\n if (sliceDef.constrainedChoice) {\n typeExpr = `${typeExpr} & ${tsTypeFromIdentifier(sliceDef.constrainedChoice.variantType)}`;\n }\n w.lineSM(`export type ${typeName} = ${typeExpr}`);\n }\n w.line();\n};\n\nconst generateRawType = (w: TypeScript, flatProfile: ProfileTypeSchema, factoryInfo: ProfileFactoryInfo) => {\n const hasParams = factoryInfo.params.length > 0 || factoryInfo.sliceAutoFields.length > 0;\n const subSlices = flatProfile.base.name === \"Extension\" ? collectSubExtensionSlices(flatProfile) : [];\n if (!hasParams && subSlices.length === 0) return;\n\n const createArgsTypeName = `${tsProfileClassName(flatProfile)}Raw`;\n w.curlyBlock([\"export\", \"type\", createArgsTypeName, \"=\"], () => {\n for (const p of factoryInfo.params) {\n w.lineSM(`${p.name}: ${p.tsType}`);\n }\n for (const f of factoryInfo.sliceAutoFields) {\n w.lineSM(`${f.name}?: ${f.tsType}`);\n }\n const extensionCovered =\n factoryInfo.params.some((p) => p.name === \"extension\") ||\n factoryInfo.sliceAutoFields.some((f) => f.name === \"extension\");\n if (subSlices.length > 0 && !extensionCovered) {\n w.lineSM(\"extension?: Extension[]\");\n }\n });\n w.line();\n};\n\nconst generateFlatInputType = (w: TypeScript, flatProfile: ProfileTypeSchema) => {\n const subSlices = flatProfile.base.name === \"Extension\" ? collectSubExtensionSlices(flatProfile) : [];\n if (subSlices.length === 0) return;\n\n const flatInputTypeName = `${tsProfileClassName(flatProfile)}Flat`;\n w.curlyBlock([\"export\", \"type\", flatInputTypeName, \"=\"], () => {\n for (const sub of subSlices) {\n const opt = sub.isRequired ? \"\" : \"?\";\n const arr = sub.isArray ? \"[]\" : \"\";\n w.lineSM(`${sub.name}${opt}: ${sub.tsType}${arr}`);\n }\n });\n w.line();\n};\n\ntype ResolvedProfileMethods = {\n /** \"url:path\" → method base name (e.g., \"Race\" or \"PathRace\") */\n extensions: Record<string, string>;\n /** \"fieldName:sliceName\" → method base name */\n slices: Record<string, string>;\n /** All resolved base names (extensions + slices) for field accessor dedup */\n allBaseNames: Set<string>;\n};\n\ntype NameEntry = { key: string; candidates: string[] };\n\nconst countBy = (entries: NameEntry[], level: number): Record<string, number> =>\n entries.reduce(\n (counts, e) => {\n const name = e.candidates[level] ?? \"\";\n counts[name] = (counts[name] ?? 0) + 1;\n return counts;\n },\n {} as Record<string, number>,\n );\n\n/** Resolve naming collisions across multiple levels of candidates.\n * Each entry provides candidate names in priority order (e.g. base → qualified → discriminated). */\nconst resolveNameCollisions = (entries: NameEntry[]): Record<string, string> => {\n const levels = entries[0]?.candidates.length ?? 0;\n\n const resolve = (unresolved: NameEntry[], level: number): Record<string, string> => {\n if (unresolved.length === 0 || level >= levels) return {};\n const counts = countBy(unresolved, level);\n const isLastLevel = level >= levels - 1;\n const [resolved, colliding] = unresolved.reduce(\n ([res, col], e) => {\n const name = e.candidates[level] ?? \"\";\n return (counts[name] ?? 0) > 1 && !isLastLevel ? [res, [...col, e]] : [{ ...res, [e.key]: name }, col];\n },\n [{} as Record<string, string>, [] as NameEntry[]],\n );\n return { ...resolved, ...resolve(colliding, level + 1) };\n };\n\n return resolve(entries, 0);\n};\n\nconst toRecord = (entries: NameEntry[], resolved: Record<string, string>): Record<string, string> =>\n Object.fromEntries(entries.map((e) => [e.key, resolved[e.key] ?? e.candidates[0] ?? \"\"]));\n\nconst resolveProfileMethodBaseNames = (\n extensions: ProfileExtension[],\n sliceDefs: SliceDef[],\n): ResolvedProfileMethods => {\n const extensionEntries: NameEntry[] = extensions\n .filter((ext) => ext.url)\n .map((ext) => {\n const base = tsExtensionMethodBaseName(ext.name);\n const qualified = tsQualifiedExtensionMethodBaseName(ext.name, ext.path);\n return { key: `${ext.url}:${ext.path}`, candidates: [base, qualified, `${qualified}Extension`] };\n });\n\n const sliceEntries: NameEntry[] = sliceDefs.map((slice) => {\n const base = tsSliceMethodBaseName(slice.sliceName);\n const qualified = tsQualifiedSliceMethodBaseName(slice.fieldName, slice.sliceName);\n return { key: `${slice.fieldName}:${slice.sliceName}`, candidates: [base, qualified, `${qualified}Slice`] };\n });\n\n const resolved = resolveNameCollisions([...extensionEntries, ...sliceEntries]);\n const extensionsRecords = toRecord(extensionEntries, resolved);\n const slicesRecords = toRecord(sliceEntries, resolved);\n const allBaseNames = new Set([...Object.values(extensionsRecords), ...Object.values(slicesRecords)]);\n\n return { extensions: extensionsRecords, slices: slicesRecords, allBaseNames };\n};\n\nexport const generateProfileClass = (w: TypeScript, tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) => {\n const tsBaseResourceName = tsTypeFromIdentifier(flatProfile.base);\n const profileClassName = tsProfileClassName(flatProfile);\n const sliceDefs = collectSliceDefs(tsIndex, flatProfile);\n const factoryInfo = collectProfileFactoryInfo(tsIndex, flatProfile);\n\n generateInlineExtensionInputTypes(w, tsIndex, flatProfile);\n generateSliceInputTypes(w, flatProfile, sliceDefs);\n\n generateProfileHelpersImport(w, tsIndex, flatProfile, sliceDefs, factoryInfo);\n\n generateRawType(w, flatProfile, factoryInfo);\n generateFlatInputType(w, flatProfile);\n\n const canonicalUrl = flatProfile.identifier.url;\n w.comment(\"CanonicalURL:\", canonicalUrl, `(pkg: ${packageMetaToFhir(packageMeta(flatProfile))})`);\n\n const resolvedMethodNames = resolveProfileMethodBaseNames(flatProfile.extensions ?? [], sliceDefs);\n\n w.curlyBlock([\"export\", \"class\", profileClassName], () => {\n w.lineSM(`static readonly canonicalUrl = ${JSON.stringify(canonicalUrl)}`);\n w.line();\n generateStaticSliceFields(w, sliceDefs);\n w.lineSM(`private resource: ${tsBaseResourceName}`);\n w.line();\n generateFactoryMethods(w, tsIndex, flatProfile, factoryInfo);\n generateFieldAccessors(w, factoryInfo, resolvedMethodNames.allBaseNames);\n\n w.line(\"// Extensions\");\n generateExtensionMethods(w, tsIndex, flatProfile, resolvedMethodNames.extensions);\n\n w.line(\"// Slices\");\n generateSliceSetters(w, sliceDefs, flatProfile, resolvedMethodNames.slices);\n generateSliceGetters(w, sliceDefs, flatProfile, resolvedMethodNames.slices);\n\n w.line(\"// Validation\");\n generateValidateMethod(w, tsIndex, flatProfile);\n });\n w.line();\n};\n\nexport type FieldOverrides = Map<\n string,\n { profileType: string; required: boolean; array: boolean; typeId: Identifier }\n>;\n\nexport const detectFieldOverrides = (tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema): FieldOverrides => {\n const overrides: FieldOverrides = new Map();\n const specialization = tsIndex.findLastSpecialization(flatProfile);\n if (!isSpecializationTypeSchema(specialization)) return overrides;\n\n const referenceUrl = \"http://hl7.org/fhir/StructureDefinition/Reference\" as CanonicalUrl;\n const referenceSchema = tsIndex.resolveByUrl(flatProfile.identifier.package, referenceUrl);\n\n for (const [fieldName, pField] of Object.entries(flatProfile.fields ?? {})) {\n if (!isNotChoiceDeclarationField(pField)) continue;\n const sField = specialization.fields?.[fieldName];\n if (!sField || isChoiceDeclarationField(sField)) continue;\n\n // Check for Reference narrowing\n if (pField.reference && sField.reference && pField.reference.length < sField.reference.length) {\n if (!referenceSchema) continue;\n const references = pField.reference\n .map((ref) => {\n const resRef = tsIndex.findLastSpecializationByIdentifier(ref);\n if (resRef.name !== ref.name) {\n return `\"${resRef.name}\"`;\n }\n return `\"${ref.name}\"`;\n })\n .join(\" | \");\n overrides.set(fieldName, {\n profileType: `Reference<${references}>`,\n required: pField.required ?? false,\n array: pField.array ?? false,\n typeId: referenceSchema.identifier,\n });\n }\n // Check for cardinality change (optional -> required)\n else if (pField.required && !sField.required) {\n const tsType = tsTypeForProfileField(tsIndex, flatProfile, fieldName, pField);\n overrides.set(fieldName, {\n profileType: tsType,\n required: true,\n array: pField.array ?? false,\n typeId: pField.type,\n });\n }\n }\n return overrides;\n};\n\nexport const generateProfileOverrideInterface = (\n w: TypeScript,\n flatProfile: ProfileTypeSchema,\n overrides: FieldOverrides,\n) => {\n if (overrides.size === 0) return;\n\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const tsBaseResourceName = tsResourceName(flatProfile.base);\n\n w.curlyBlock([\"export\", \"interface\", tsProfileName, \"extends\", tsBaseResourceName], () => {\n for (const [fieldName, override] of overrides) {\n const tsField = tsFieldName(fieldName);\n const optionalSymbol = override.required ? \"\" : \"?\";\n const arraySymbol = override.array ? \"[]\" : \"\";\n w.lineSM(`${tsField}${optionalSymbol}: ${override.profileType}${arraySymbol}`);\n }\n });\n w.line();\n};\n","import * as Path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer\";\nimport {\n type CanonicalUrl,\n isChoiceDeclarationField,\n isComplexTypeIdentifier,\n isLogicalTypeSchema,\n isNestedIdentifier,\n isPrimitiveIdentifier,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type Name,\n packageMeta,\n packageMetaToFhir,\n type RegularTypeSchema,\n type TypeSchema,\n} from \"@root/typeschema/types\";\nimport { groupByPackages, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n tsFieldName,\n tsModuleFileName,\n tsModuleName,\n tsModulePath,\n tsNameFromCanonical,\n tsPackageDir,\n tsProfileModuleFileName,\n tsResourceName,\n} from \"./name\";\nimport {\n detectFieldOverrides,\n generateProfileClass,\n generateProfileImports,\n generateProfileIndexFile,\n generateProfileOverrideInterface,\n} from \"./profile\";\nimport { resolveFieldTsType } from \"./utils\";\n\nexport const resolveTsAssets = (fn: string) => {\n const __dirname = Path.dirname(fileURLToPath(import.meta.url));\n const __filename = fileURLToPath(import.meta.url);\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"typescript\", fn);\n }\n return Path.resolve(__dirname, \"../../../..\", \"assets\", \"api\", \"writer-generator\", \"typescript\", fn);\n};\n\nexport type TypeScriptOptions = {\n lineWidth?: number;\n /** openResourceTypeSet -- for resource families (Resource, DomainResource) use open set for resourceType field.\n *\n * - when openResourceTypeSet is false: `type Resource = { resourceType: \"Resource\" | \"DomainResource\" | \"Patient\" }`\n * - when openResourceTypeSet is true: `type Resource = { resourceType: \"Resource\" | \"DomainResource\" | \"Patient\" | string }`\n */\n openResourceTypeSet: boolean;\n primitiveTypeExtension: boolean;\n extensionGetterDefault?: \"flat\" | \"profile\" | \"raw\";\n sliceGetterDefault?: \"flat\" | \"raw\";\n} & WriterOptions;\n\nexport class TypeScript extends Writer<TypeScriptOptions> {\n constructor(options: TypeScriptOptions) {\n super({ lineWidth: 120, ...options, resolveAssets: options.resolveAssets ?? resolveTsAssets });\n }\n\n ifElseChain(branches: { cond: string; body: () => void }[], elseBody?: () => void) {\n branches.forEach((branch, i) => {\n const prefix = i === 0 ? \"if\" : \"} else if\";\n this.line(`${prefix} (${branch.cond}) {`);\n this.indent();\n branch.body();\n this.deindent();\n });\n if (elseBody) {\n this.line(\"} else {\");\n this.indent();\n elseBody();\n this.deindent();\n }\n this.line(\"}\");\n }\n\n tsImport(tsPackageName: string, ...entities: string[]): void;\n tsImport(tsPackageName: string, ...args: [...string[], { typeOnly: boolean }]): void;\n tsImport(tsPackageName: string, ...rest: (string | { typeOnly: boolean })[]) {\n const last = rest[rest.length - 1];\n const typeOnly = typeof last === \"object\" ? last.typeOnly : false;\n const entities = (typeof last === \"object\" ? rest.slice(0, -1) : rest) as string[];\n const keyword = typeOnly ? \"import type\" : \"import\";\n const singleLine = `${keyword} { ${entities.join(\", \")} } from \"${tsPackageName}\"`;\n if (singleLine.length <= (this.opts.lineWidth ?? 120)) {\n this.lineSM(singleLine);\n } else {\n this.curlyBlock([keyword], () => {\n for (const entity of entities) {\n this.line(`${entity},`);\n }\n }, [` from \"${tsPackageName}\";`]);\n }\n }\n\n generateFhirPackageIndexFile(schemas: TypeSchema[]) {\n this.cat(\"index.ts\", () => {\n const profiles = schemas.filter(isProfileTypeSchema);\n if (profiles.length > 0) {\n this.lineSM(`export * from \"./profiles\"`);\n }\n\n let exports = schemas\n .flatMap((schema) => {\n const resourceName = tsResourceName(schema.identifier);\n const typeExports = isProfileTypeSchema(schema)\n ? []\n : [\n resourceName,\n ...((isResourceTypeSchema(schema) && schema.nested) ||\n (isLogicalTypeSchema(schema) && schema.nested)\n ? schema.nested.map((n) => tsResourceName(n.identifier))\n : []),\n ];\n const valueExports = isResourceTypeSchema(schema) ? [`is${resourceName}`] : [];\n\n return [\n {\n identifier: schema.identifier,\n tsPackageName: tsModuleName(schema.identifier),\n resourceName,\n typeExports,\n valueExports,\n },\n ];\n })\n .sort((a, b) => a.resourceName.localeCompare(b.resourceName));\n\n // FIXME: actually, duplication may means internal error...\n exports = Array.from(new Map(exports.map((exp) => [exp.resourceName.toLowerCase(), exp])).values()).sort(\n (a, b) => a.resourceName.localeCompare(b.resourceName),\n );\n\n for (const exp of exports) {\n this.debugComment(exp.identifier);\n if (exp.typeExports.length > 0) {\n this.lineSM(`export type { ${exp.typeExports.join(\", \")} } from \"./${exp.tsPackageName}\"`);\n }\n if (exp.valueExports.length > 0) {\n this.lineSM(`export { ${exp.valueExports.join(\", \")} } from \"./${exp.tsPackageName}\"`);\n }\n }\n });\n }\n\n generateDependenciesImports(tsIndex: TypeSchemaIndex, schema: RegularTypeSchema, importPrefix = \"../\") {\n if (schema.dependencies) {\n const imports = [];\n const skipped = [];\n for (const dep of schema.dependencies) {\n if ([\"complex-type\", \"resource\", \"logical\"].includes(dep.kind)) {\n imports.push({\n tsPackage: `${importPrefix}${tsModulePath(dep)}`,\n name: tsResourceName(dep),\n dep: dep,\n });\n } else if (isNestedIdentifier(dep)) {\n const ndep = { ...dep };\n ndep.name = tsNameFromCanonical(dep.url) as Name;\n imports.push({\n tsPackage: `${importPrefix}${tsModulePath(ndep)}`,\n name: tsResourceName(dep),\n dep: dep,\n });\n } else {\n skipped.push(dep);\n }\n }\n imports.sort((a, b) => a.name.localeCompare(b.name));\n for (const dep of imports) {\n this.debugComment(dep.dep);\n this.tsImport(dep.tsPackage, dep.name, { typeOnly: true });\n }\n for (const dep of skipped) {\n this.debugComment(\"skip:\", dep);\n }\n this.line();\n if (\n this.withPrimitiveTypeExtension(schema) &&\n schema.identifier.name !== \"Element\" &&\n schema.dependencies.find((e) => e.name === \"Element\") === undefined\n ) {\n const elementUrl = \"http://hl7.org/fhir/StructureDefinition/Element\" as CanonicalUrl;\n const element = tsIndex.resolveByUrl(schema.identifier.package, elementUrl);\n if (!element) throw new Error(`'${elementUrl}' not found for ${schema.identifier.package}.`);\n\n this.tsImport(`${importPrefix}${tsModulePath(element.identifier)}`, \"Element\", { typeOnly: true });\n }\n }\n }\n\n generateComplexTypeReexports(schema: RegularTypeSchema) {\n const complexTypeDeps = schema.dependencies?.filter(isComplexTypeIdentifier);\n if (complexTypeDeps && complexTypeDeps.length > 0) {\n for (const dep of complexTypeDeps) {\n this.debugComment(dep);\n this.lineSM(`export type { ${tsResourceName(dep)} } from \"${`../${tsModulePath(dep)}`}\"`);\n }\n this.line();\n }\n }\n\n addFieldExtension(fieldName: string, isArray: boolean): void {\n const extFieldName = tsFieldName(`_${fieldName}`);\n const typeExpr = isArray ? \"(Element | null)[]\" : \"Element\";\n this.lineSM(`${extFieldName}?: ${typeExpr}`);\n }\n\n generateType(tsIndex: TypeSchemaIndex, schema: RegularTypeSchema) {\n let name: string;\n // Generic types: Reference, Coding, CodeableConcept\n const genericTypes = [\"Reference\", \"Coding\", \"CodeableConcept\"];\n if (genericTypes.includes(schema.identifier.name)) {\n name = `${schema.identifier.name}<T extends string = string>`;\n } else if (schema.identifier.kind === \"nested\") {\n name = tsResourceName(schema.identifier);\n } else {\n name = tsResourceName(schema.identifier);\n }\n\n let extendsClause: string | undefined;\n if (schema.base) extendsClause = `extends ${tsNameFromCanonical(schema.base.url)}`;\n\n this.debugComment(schema.identifier);\n if (!schema.fields && !extendsClause && !isResourceTypeSchema(schema)) {\n this.lineSM(`export type ${name} = object`);\n return;\n }\n this.curlyBlock([\"export\", \"interface\", name, extendsClause], () => {\n if (isResourceTypeSchema(schema)) {\n const possibleResourceTypes = [schema.identifier];\n possibleResourceTypes.push(...tsIndex.resourceChildren(schema.identifier));\n const openSetSuffix =\n this.opts.openResourceTypeSet && possibleResourceTypes.length > 1 ? \" | string\" : \"\";\n this.lineSM(\n `resourceType: ${possibleResourceTypes\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((e) => `\"${e.name}\"`)\n .join(\" | \")}${openSetSuffix}`,\n );\n this.line();\n }\n\n if (!schema.fields) return;\n const fields = Object.entries(schema.fields).sort((a, b) => a[0].localeCompare(b[0]));\n\n for (const [fieldName, field] of fields) {\n if (isChoiceDeclarationField(field)) continue;\n // Skip fields without type info (can happen with incomplete StructureDefinitions)\n if (!field.type) continue;\n\n this.debugComment(fieldName, \":\", field);\n\n const tsName = tsFieldName(fieldName);\n const tsType = resolveFieldTsType(schema.identifier.name, tsName, field);\n const optionalSymbol = field.required ? \"\" : \"?\";\n const arraySymbol = field.array ? \"[]\" : \"\";\n this.lineSM(`${tsName}${optionalSymbol}: ${tsType}${arraySymbol}`);\n\n if (this.withPrimitiveTypeExtension(schema)) {\n if (isPrimitiveIdentifier(field.type)) {\n this.addFieldExtension(fieldName, field.array ?? false);\n }\n }\n }\n });\n }\n\n withPrimitiveTypeExtension(schema: TypeSchema): boolean {\n if (!this.opts.primitiveTypeExtension) return false;\n if (!isSpecializationTypeSchema(schema)) return false;\n for (const field of Object.values(schema.fields ?? {})) {\n if (isChoiceDeclarationField(field)) continue;\n if (isPrimitiveIdentifier(field.type)) return true;\n }\n return false;\n }\n\n generateResourceTypePredicate(schema: RegularTypeSchema) {\n if (!isResourceTypeSchema(schema)) return;\n const name = tsResourceName(schema.identifier);\n this.curlyBlock([\"export\", \"const\", `is${name}`, \"=\", `(resource: unknown): resource is ${name}`, \"=>\"], () => {\n this.lineSM(\n `return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"${schema.identifier.name}\"`,\n );\n });\n }\n\n generateNestedTypes(tsIndex: TypeSchemaIndex, schema: RegularTypeSchema) {\n if (schema.nested) {\n for (const subtype of schema.nested) {\n this.generateType(tsIndex, subtype);\n this.line();\n }\n }\n }\n\n generateResourceModule(tsIndex: TypeSchemaIndex, schema: TypeSchema) {\n if (isProfileTypeSchema(schema)) {\n this.cd(\"profiles\", () => {\n this.cat(`${tsProfileModuleFileName(tsIndex, schema)}`, () => {\n this.generateDisclaimer();\n const flatProfile = tsIndex.flatProfile(schema);\n const overrides = detectFieldOverrides(tsIndex, flatProfile);\n generateProfileImports(this, tsIndex, flatProfile, overrides);\n generateProfileOverrideInterface(this, flatProfile, overrides);\n generateProfileClass(this, tsIndex, flatProfile);\n });\n });\n } else if ([\"complex-type\", \"resource\", \"logical\"].includes(schema.identifier.kind)) {\n this.cat(`${tsModuleFileName(schema.identifier)}`, () => {\n this.generateDisclaimer();\n this.generateDependenciesImports(tsIndex, schema);\n this.generateComplexTypeReexports(schema);\n this.generateNestedTypes(tsIndex, schema);\n this.comment(\n \"CanonicalURL:\",\n schema.identifier.url,\n `(pkg: ${packageMetaToFhir(packageMeta(schema))})`,\n );\n this.generateType(tsIndex, schema);\n this.generateResourceTypePredicate(schema);\n });\n } else {\n throw new Error(`Profile generation not implemented for kind: ${schema.identifier.kind}`);\n }\n }\n\n override async generate(tsIndex: TypeSchemaIndex) {\n // Only generate code for schemas from focused packages\n const typesToGenerate = [\n ...tsIndex.collectComplexTypes(),\n ...tsIndex.collectResources(),\n ...tsIndex.collectLogicalModels(),\n ...(this.opts.generateProfile ? tsIndex.collectProfiles() : []),\n ];\n const grouped = groupByPackages(typesToGenerate);\n\n const hasProfiles = this.opts.generateProfile && typesToGenerate.some(isProfileTypeSchema);\n\n this.cd(\"/\", () => {\n if (hasProfiles) {\n this.cp(\"profile-helpers.ts\", \"profile-helpers.ts\");\n }\n\n for (const [packageName, packageSchemas] of Object.entries(grouped)) {\n const packageDir = tsPackageDir(packageName);\n this.cd(packageDir, () => {\n for (const schema of packageSchemas) {\n this.generateResourceModule(tsIndex, schema);\n }\n generateProfileIndexFile(this, tsIndex, packageSchemas.filter(isProfileTypeSchema));\n this.generateFhirPackageIndexFile(packageSchemas);\n });\n }\n });\n }\n}\n","/**\n * High-Level API Builder\n *\n * Provides a fluent, chainable API for common codegen use cases with pre-built generators.\n * This builder pattern allows users to configure generation in a declarative way.\n */\n\nimport assert from \"node:assert\";\nimport * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport {\n CanonicalManager,\n type LocalPackageConfig,\n type PreprocessContext,\n type TgzPackageConfig,\n} from \"@atomic-ehr/fhir-canonical-manager\";\nimport { CSharp, type CSharpGeneratorOptions } from \"@root/api/writer-generator/csharp/csharp\";\nimport { Python, type PythonGeneratorOptions } from \"@root/api/writer-generator/python\";\nimport { generateTypeSchemas } from \"@root/typeschema\";\nimport { promoteLogical } from \"@root/typeschema/ir/logic-promotion\";\nimport { treeShake } from \"@root/typeschema/ir/tree-shake\";\nimport type { IrConf, LogicalPromotionConf, TreeShakeConf } from \"@root/typeschema/ir/types\";\nimport { type Register, registerFromManager } from \"@root/typeschema/register\";\nimport { type PackageMeta, packageMetaToNpm } from \"@root/typeschema/types\";\nimport { mkTypeSchemaIndex, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLogManager } from \"@root/utils/log\";\nimport { mkLogger } from \"@root/utils/log\";\nimport { IntrospectionWriter, type IntrospectionWriterOptions } from \"./writer-generator/introspection\";\nimport { IrReportWriterWriter, type IrReportWriterWriterOptions } from \"./writer-generator/ir-report\";\nimport type { FileBasedMustacheGeneratorOptions } from \"./writer-generator/mustache\";\nimport * as Mustache from \"./writer-generator/mustache\";\nimport { TypeScript, type TypeScriptOptions } from \"./writer-generator/typescript/writer\";\nimport type { FileBuffer, FileSystemWriter, FileSystemWriterOptions, WriterOptions } from \"./writer-generator/writer\";\n\n/**\n * Configuration options for the API builder\n */\nexport interface APIBuilderOptions {\n outputDir: string;\n cleanOutput: boolean;\n throwException: boolean;\n treeShake: TreeShakeConf | undefined;\n promoteLogical: LogicalPromotionConf | undefined;\n\n /** Custom FHIR package registry URL (default: https://fs.get-ig.org/pkgs/) */\n registry: string | undefined;\n /** Drop the canonical manager cache */\n dropCanonicalManagerCache: boolean;\n}\n\nexport type GenerationReport = {\n success: boolean;\n outputDir: string;\n filesGenerated: Record<string, string>;\n errors: string[];\n warnings: string[];\n duration: number;\n};\n\nfunction countLinesByMatches(text: string): number {\n if (text === \"\") return 0;\n const m = text.match(/\\n/g);\n return m ? m.length + 1 : 1;\n}\n\nexport const prettyReport = (report: GenerationReport): string => {\n const { success, filesGenerated, errors, warnings, duration } = report;\n const errorsStr = errors.length > 0 ? `Errors: ${errors.join(\", \")}` : undefined;\n const warningsStr = warnings.length > 0 ? `Warnings: ${warnings.join(\", \")}` : undefined;\n let allLoc = 0;\n const files = Object.entries(filesGenerated)\n .map(([path, content]) => {\n const loc = countLinesByMatches(content);\n allLoc += loc;\n return ` - ${path} (${loc} loc)`;\n })\n .join(\"\\n\");\n return [\n `Generated files (${Math.round(allLoc / 1000)} kloc):`,\n files,\n errorsStr,\n warningsStr,\n `Duration: ${Math.round(duration)}ms`,\n `Status: ${success ? \"🟩 Success\" : \"🟥 Failure\"}`,\n ]\n .filter((e) => e)\n .join(\"\\n\");\n};\n\nexport interface LocalStructureDefinitionConfig {\n package: PackageMeta;\n path: string;\n dependencies?: PackageMeta[];\n}\n\nconst cleanup = async (opts: APIBuilderOptions, logger: CodegenLogManager): Promise<void> => {\n logger.info(`Cleaning outputs...`);\n try {\n logger.info(`Clean ${opts.outputDir}`);\n fs.rmSync(opts.outputDir, { recursive: true, force: true });\n } catch (error) {\n logger.warn(`Error cleaning output directory: ${error instanceof Error ? error.message : String(error)}`);\n }\n};\n\n/**\n * High-Level API Builder class\n *\n * Provides a fluent interface for configuring and executing code generation\n * from FHIR packages or TypeSchema documents.\n */\nexport class APIBuilder {\n private options: APIBuilderOptions;\n private manager: ReturnType<typeof CanonicalManager>;\n private prebuiltRegister: Register | undefined;\n private managerInput: {\n npmPackages: string[];\n localSDs: LocalPackageConfig[];\n localTgzPackages: TgzPackageConfig[];\n };\n private logger: CodegenLogManager;\n private generators: { name: string; writer: FileSystemWriter }[] = [];\n\n constructor(\n userOpts: Partial<APIBuilderOptions> & {\n manager?: ReturnType<typeof CanonicalManager>;\n register?: Register;\n preprocessPackage?: (context: PreprocessContext) => PreprocessContext;\n logger?: CodegenLogManager;\n } = {},\n ) {\n const defaultOpts: APIBuilderOptions = {\n outputDir: \"./generated\",\n cleanOutput: true,\n throwException: false,\n treeShake: undefined,\n promoteLogical: undefined,\n registry: undefined,\n dropCanonicalManagerCache: false,\n };\n const opts: APIBuilderOptions = {\n ...defaultOpts,\n ...Object.fromEntries(\n Object.entries(userOpts).filter(\n ([k, v]) =>\n v !== undefined &&\n k !== \"manager\" &&\n k !== \"register\" &&\n k !== \"preprocessPackage\" &&\n k !== \"logger\",\n ),\n ),\n };\n\n if (userOpts.manager && userOpts.register) {\n throw new Error(\"Cannot provide both 'manager' and 'register' options. Use one or the other.\");\n }\n\n this.managerInput = {\n npmPackages: [],\n localSDs: [],\n localTgzPackages: [],\n };\n this.prebuiltRegister = userOpts.register;\n this.manager =\n userOpts.manager ??\n CanonicalManager({\n packages: [],\n workingDir: \".codegen-cache/canonical-manager-cache\",\n registry: userOpts.registry,\n dropCache: userOpts.dropCanonicalManagerCache,\n preprocessPackage: userOpts.preprocessPackage,\n });\n this.logger = userOpts.logger ?? mkLogger({ prefix: \"api\" });\n this.options = opts;\n }\n\n fromPackage(packageName: string, version?: string): APIBuilder {\n const pkg = packageMetaToNpm({ name: packageName, version: version || \"latest\" });\n this.managerInput.npmPackages.push(pkg);\n return this;\n }\n\n fromPackageRef(packageRef: string): APIBuilder {\n this.managerInput.npmPackages.push(packageRef);\n return this;\n }\n\n localStructureDefinitions(config: LocalStructureDefinitionConfig): APIBuilder {\n this.logger.info(`Registering local StructureDefinitions for ${config.package.name}@${config.package.version}`);\n this.managerInput.localSDs.push({\n name: config.package.name,\n version: config.package.version,\n path: config.path,\n dependencies: config.dependencies?.map((dep) => packageMetaToNpm(dep)),\n });\n return this;\n }\n\n localTgzPackage(archivePath: string): APIBuilder {\n this.logger.info(`Registering local tgz package: ${archivePath}`);\n this.managerInput.localTgzPackages.push({ archivePath: Path.resolve(archivePath) });\n return this;\n }\n\n introspection(userOpts?: Partial<IntrospectionWriterOptions>): APIBuilder {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n inMemoryOnly: false,\n };\n const opts: IntrospectionWriterOptions = {\n ...defaultWriterOpts,\n ...Object.fromEntries(Object.entries(userOpts ?? {}).filter(([_, v]) => v !== undefined)),\n };\n\n const writer = new IntrospectionWriter(opts);\n this.generators.push({ name: \"introspection\", writer });\n this.logger.debug(`Configured introspection generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n typescript(userOpts: Partial<TypeScriptOptions>) {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: Path.join(this.options.outputDir, \"/types\"),\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n generateProfile: true,\n };\n const defaultTsOpts: TypeScriptOptions = {\n ...defaultWriterOpts,\n openResourceTypeSet: false,\n primitiveTypeExtension: true,\n };\n const opts: TypeScriptOptions = {\n ...defaultTsOpts,\n ...Object.fromEntries(Object.entries(userOpts).filter(([_, v]) => v !== undefined)),\n };\n const generator = new TypeScript(opts);\n this.generators.push({ name: \"typescript\", writer: generator });\n this.logger.debug(`Configured TypeScript generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n python(userOptions: Partial<PythonGeneratorOptions>): APIBuilder {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"#\",\n };\n\n const defaultPyOpts: PythonGeneratorOptions = {\n ...defaultWriterOpts,\n rootPackageName: \"fhir_types\",\n fieldFormat: \"snake_case\",\n };\n\n const opts: PythonGeneratorOptions = {\n ...defaultPyOpts,\n ...Object.fromEntries(Object.entries(userOptions).filter(([_, v]) => v !== undefined)),\n };\n\n const generator = new Python(opts);\n this.generators.push({ name: \"python\", writer: generator });\n this.logger.debug(`Configured python generator`);\n return this;\n }\n\n mustache(templatePath: string, userOpts: Partial<FileSystemWriterOptions & FileBasedMustacheGeneratorOptions>) {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n };\n const defaultMustacheOpts: Partial<FileBasedMustacheGeneratorOptions> = {\n meta: {\n timestamp: new Date().toISOString(),\n generator: \"atomic-codegen\",\n },\n };\n const opts = {\n ...defaultWriterOpts,\n ...defaultMustacheOpts,\n ...userOpts,\n };\n const generator = Mustache.createGenerator(templatePath, opts);\n this.generators.push({ name: `mustache[${templatePath}]`, writer: generator });\n this.logger.debug(`Configured TypeScript generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n csharp(userOptions: Partial<CSharpGeneratorOptions>): APIBuilder {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: Path.join(this.options.outputDir, \"/types\"),\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n };\n\n const defaultCSharpOpts: CSharpGeneratorOptions = {\n ...defaultWriterOpts,\n rootNamespace: \"Fhir.Types\",\n };\n\n const opts: CSharpGeneratorOptions = {\n ...defaultCSharpOpts,\n ...Object.fromEntries(Object.entries(userOptions).filter(([_, v]) => v !== undefined)),\n };\n\n const generator = new CSharp(opts);\n this.generators.push({ name: \"csharp\", writer: generator });\n this.logger.debug(`Configured C# generator`);\n return this;\n }\n\n /**\n * Set the output directory for all generators\n */\n outputTo(directory: string): APIBuilder {\n this.logger.debug(`Setting output directory: ${directory}`);\n this.options.outputDir = directory;\n\n // Update all configured generators\n for (const gen of this.generators) {\n gen.writer.setOutputDir(directory);\n }\n\n return this;\n }\n\n throwException(enabled = true): APIBuilder {\n this.options.throwException = enabled;\n return this;\n }\n\n cleanOutput(enabled = true): APIBuilder {\n this.options.cleanOutput = enabled;\n return this;\n }\n\n typeSchema(cfg: IrConf) {\n if (cfg.treeShake) {\n assert(this.options.treeShake === undefined, \"treeShake option is already set\");\n this.options.treeShake = cfg.treeShake;\n }\n if (cfg.promoteLogical) {\n assert(this.options.promoteLogical === undefined, \"promoteLogical option is already set\");\n this.options.promoteLogical = cfg.promoteLogical;\n }\n this.irReport({});\n return this;\n }\n\n irReport(userOpts: Partial<IrReportWriterWriterOptions>) {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n inMemoryOnly: false,\n };\n const opts: IrReportWriterWriterOptions = {\n ...defaultWriterOpts,\n rootReadmeFileName: \"README.md\",\n ...Object.fromEntries(Object.entries(userOpts ?? {}).filter(([_, v]) => v !== undefined)),\n };\n\n const writer = new IrReportWriterWriter(opts);\n this.generators.push({ name: \"ir-report\", writer });\n this.logger.debug(`Configured ir-report generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n async generate(): Promise<GenerationReport> {\n const startTime = performance.now();\n const result: GenerationReport = {\n success: false,\n outputDir: this.options.outputDir,\n filesGenerated: {},\n errors: [],\n warnings: [],\n duration: 0,\n };\n\n this.logger.debug(`Starting generation with ${this.generators.length} generators`);\n try {\n if (this.options.cleanOutput) cleanup(this.options, this.logger);\n\n let register: Register;\n if (this.prebuiltRegister) {\n this.logger.info(\"Using prebuilt register\");\n register = this.prebuiltRegister;\n } else {\n this.logger.info(\"Initialize Canonical Manager\");\n // Add all packages before initialization\n if (this.managerInput.npmPackages.length > 0) {\n await this.manager.addPackages(...this.managerInput.npmPackages.sort());\n }\n // Add local packages and archives\n for (const config of this.managerInput.localSDs) {\n await this.manager.addLocalPackage(config);\n }\n for (const tgzArchive of this.managerInput.localTgzPackages) {\n await this.manager.addTgzPackage(tgzArchive);\n }\n // Initialize after all packages are registered\n const ref2meta = await this.manager.init();\n\n const packageMetas = Object.values(ref2meta);\n register = await registerFromManager(this.manager, {\n logger: this.logger.fork(\"reg\"),\n focusedPackages: packageMetas,\n });\n }\n\n const tsLogger = this.logger.fork(\"ts\");\n\n const { schemas: typeSchemas, collisions } = await generateTypeSchemas(register, tsLogger);\n\n const tsIndexOpts = {\n register,\n logger: tsLogger,\n irReport: Object.keys(collisions).length > 0 ? { collisions } : {},\n };\n let tsIndex = mkTypeSchemaIndex(typeSchemas, tsIndexOpts);\n if (this.options.treeShake) tsIndex = treeShake(tsIndex, this.options.treeShake);\n if (this.options.promoteLogical) tsIndex = promoteLogical(tsIndex, this.options.promoteLogical);\n\n tsLogger.printTagSummary();\n\n this.logger.debug(`Executing ${this.generators.length} generators`);\n\n await this.executeGenerators(result, tsIndex);\n\n this.logger.info(\"Generation completed successfully\");\n\n result.success = result.errors.length === 0;\n\n this.logger.debug(`Generation completed: ${result.filesGenerated.length} files`);\n } catch (error) {\n this.logger.error(`Code generation failed: ${error instanceof Error ? error.message : String(error)}`);\n result.errors.push(error instanceof Error ? error.message : String(error));\n if (this.options.throwException) throw error;\n }\n\n return {\n ...result,\n success: result.errors.length === 0,\n duration: performance.now() - startTime,\n };\n }\n\n /**\n * Clear all configuration and start fresh\n */\n reset(): APIBuilder {\n this.generators = [];\n return this;\n }\n\n /**\n * Get configured generators (for inspection)\n */\n getGenerators(): string[] {\n return this.generators.map((g) => g.name);\n }\n\n private async executeGenerators(result: GenerationReport, tsIndex: TypeSchemaIndex): Promise<void> {\n for (const gen of this.generators) {\n this.logger.info(`Generating ${gen.name}...`);\n\n try {\n await gen.writer.generateAsync(tsIndex);\n const fileBuffer: FileBuffer[] = gen.writer.writtenFiles();\n fileBuffer.forEach((buf) => {\n result.filesGenerated[buf.relPath] = buf.content;\n });\n this.logger.info(`Generating ${gen.name} finished successfully`);\n } catch (error) {\n result.errors.push(\n `${gen.name} generator failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n if (this.options.throwException) throw error;\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/common-log.ts","../src/utils/log.ts","../src/api/writer-generator/utils.ts","../src/api/writer-generator/writer.ts","../src/typeschema/types.ts","../src/api/writer-generator/csharp/formatHelper.ts","../src/api/writer-generator/csharp/csharp.ts","../src/typeschema/utils.ts","../src/api/writer-generator/python.ts","../src/typeschema/skip-hack.ts","../src/typeschema/core/identifier.ts","../src/typeschema/core/binding.ts","../src/fhir-types/hl7-fhir-r4-core/CodeSystem.ts","../src/fhir-types/hl7-fhir-r4-core/ValueSet.ts","../src/typeschema/register.ts","../src/typeschema/core/nested-types.ts","../src/typeschema/core/field-builder.ts","../src/typeschema/core/profile-extensions.ts","../src/typeschema/core/transformer.ts","../src/typeschema/index.ts","../src/typeschema/ir/logic-promotion.ts","../src/typeschema/ir/tree-shake.ts","../src/api/writer-generator/introspection.ts","../src/typeschema/ir/report.ts","../src/api/writer-generator/ir-report.ts","../src/api/mustache/generator/DebugMixinProvider.ts","../src/api/mustache/generator/LambdaMixinProvider.ts","../src/api/mustache/generator/NameGenerator.ts","../src/api/mustache/generator/TemplateFileCache.ts","../src/api/mustache/generator/ListElementInformationMixinProvider.ts","../src/api/mustache/types.ts","../src/api/mustache/generator/ViewModelFactory.ts","../src/api/writer-generator/mustache.ts","../src/api/writer-generator/typescript/name.ts","../src/api/writer-generator/typescript/utils.ts","../src/api/writer-generator/typescript/profile-extensions.ts","../src/api/writer-generator/typescript/profile-slices.ts","../src/api/writer-generator/typescript/profile-validation.ts","../src/api/writer-generator/typescript/profile.ts","../src/api/writer-generator/typescript/writer.ts","../src/api/builder.ts"],"names":["s","Path","packageMeta","fs","typeSchemas","resolve","schema","afs","Path3","PRIMITIVE_TYPE_MAP","canonicalToName","Path4","fileURLToPath","assert","format","isStructureDefinition","pkg","identifier","f","treeShake","shaked","YAML","nested","Path7","fs5","name","tsFieldName","isRequired","exports","Path8","fs6","CanonicalManager","Path9"],"mappings":"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","file":"index.js","sourcesContent":["import pc from \"picocolors\";\n\nexport type LogLevel = \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\" | \"SILENT\";\n\nexport type LogEntry<T extends string = string> = {\n level: LogLevel;\n tag?: T;\n message: string;\n suppressed: boolean;\n prefix: string;\n timestamp: number;\n};\n\nexport type Log<T extends string = string> = {\n warn: TaggedLogFn<T>;\n dryWarn: TaggedLogFn<T>;\n info: TaggedLogFn<T>;\n error: TaggedLogFn<T>;\n debug: TaggedLogFn<T>;\n};\n\nexport type LogManager<T extends string = string> = Log<T> & {\n fork(prefix: string, opts?: Partial<LoggerOptions<T>>): LogManager<T>;\n as<Narrower extends string>(): LogManager<Narrower>;\n\n tagCounts(): Readonly<Record<string, number>>;\n printTagSummary(): void;\n\n buffer(): readonly LogEntry<T>[];\n bufferClear(): void;\n};\n\ntype TagsOf<L> = L extends LogManager<infer T> ? T : never;\n\nexport type ExtendLogManager<Extra extends string, Parent extends LogManager<any>> = LogManager<TagsOf<Parent> | Extra>;\n\ntype TaggedLogFn<T extends string> = (...args: [string] | [T, string]) => void;\n\nexport type LoggerOptions<T extends string> = {\n prefix?: string;\n suppressTags?: T[];\n level?: LogLevel;\n};\n\nconst LEVEL_PRIORITY: Record<LogLevel, number> = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, SILENT: 4 };\n\nexport function mkLogger<T extends string>(opts: LoggerOptions<T> = {}): LogManager<T> {\n const prefix = opts.prefix ?? \"\";\n const suppressedSet = new Set<string>(opts.suppressTags ?? []);\n const tagCounts: Record<string, number> = {};\n const entries: LogEntry<T>[] = [];\n const drySet = new Set<string>();\n const currentLevel: LogLevel = opts.level ?? \"INFO\";\n\n const shouldLog = (level: LogLevel): boolean => LEVEL_PRIORITY[level] >= LEVEL_PRIORITY[currentLevel];\n\n const colorize: Record<LogLevel, (s: string) => string> = {\n DEBUG: (s) => s,\n INFO: (s) => s,\n WARN: pc.yellow,\n ERROR: pc.red,\n SILENT: (s) => s,\n };\n\n const fmt = (level: LogLevel, icon: string, msg: string, tag?: string) => {\n const pfx = prefix ? `${prefix}: ` : \"\";\n const tagSuffix = tag ? ` ${pc.dim(`(${tag})`)}` : \"\";\n return colorize[level](`${icon} ${pfx}${msg}`) + tagSuffix;\n };\n\n const pushEntry = (level: LogLevel, msg: string, tag?: T, suppressed = false) => {\n entries.push({ level, tag, message: msg, suppressed, prefix, timestamp: Date.now() });\n };\n\n const mkLogFn = (\n level: LogLevel,\n icon: string,\n consoleFn: (...args: any[]) => void,\n dedupe = false,\n ): TaggedLogFn<T> => {\n return (...args: [string] | [T, string]) => {\n const tag = args.length === 2 ? args[0] : undefined;\n const msg = args.length === 2 ? args[1] : args[0];\n if (tag) tagCounts[tag] = (tagCounts[tag] ?? 0) + 1;\n const isSuppressed = tag !== undefined && suppressedSet.has(tag);\n pushEntry(level, msg, tag, isSuppressed);\n if (isSuppressed) return;\n if (!shouldLog(level)) return;\n if (dedupe) {\n const key = `${level}::${tag ?? \"\"}::${msg}`;\n if (drySet.has(key)) return;\n drySet.add(key);\n }\n consoleFn(fmt(level, icon, msg, tag));\n };\n };\n\n const logger: LogManager<T> = {\n warn: mkLogFn(\"WARN\", \"!\", console.warn),\n dryWarn: mkLogFn(\"WARN\", \"!\", console.warn, true),\n info: mkLogFn(\"INFO\", \"i\", console.log),\n error: mkLogFn(\"ERROR\", \"X\", console.error),\n debug: mkLogFn(\"DEBUG\", \"D\", console.log),\n\n fork(childPrefix: string, childOpts?: Partial<LoggerOptions<T>>): LogManager<T> {\n const fullPrefix = prefix ? `${prefix}/${childPrefix}` : childPrefix;\n const merged = [...suppressedSet, ...(childOpts?.suppressTags ?? [])] as T[];\n return mkLogger<T>({\n prefix: fullPrefix,\n suppressTags: merged,\n level: childOpts?.level ?? currentLevel,\n });\n },\n\n as<Narrower extends string>(): LogManager<Narrower> {\n return logger as unknown as LogManager<Narrower>;\n },\n\n tagCounts(): Readonly<Record<string, number>> {\n return tagCounts;\n },\n\n printTagSummary() {\n const allTags = Object.entries(tagCounts);\n if (allTags.length === 0) return;\n const pfx = prefix ? `${prefix}: ` : \"\";\n const emitted = allTags.filter(([tag]) => !suppressedSet.has(tag));\n const suppressed = allTags.filter(([tag]) => suppressedSet.has(tag));\n if (emitted.length > 0) {\n const total = emitted.reduce((sum, [, c]) => sum + c, 0);\n const detail = emitted.map(([tag, c]) => `${tag}: ${c}`).join(\", \");\n console.warn(pc.yellow(`! ${pfx}${total} warnings (${detail})`));\n }\n if (suppressed.length > 0) {\n const total = suppressed.reduce((sum, [, c]) => sum + c, 0);\n const detail = suppressed.map(([tag, c]) => `${tag}: ${c}`).join(\", \");\n console.log(pc.dim(`i ${pfx}${total} suppressed (${detail})`));\n }\n },\n\n buffer(): readonly LogEntry<T>[] {\n return entries;\n },\n\n bufferClear() {\n entries.length = 0;\n },\n };\n\n return logger;\n}\n","import { type Log, type LoggerOptions, type LogManager, mkLogger } from \"./common-log\";\n\nexport type {\n ExtendLogManager,\n Log,\n LogEntry,\n LoggerOptions,\n LogLevel,\n LogManager,\n} from \"./common-log\";\nexport { mkLogger } from \"./common-log\";\n\nexport type CodegenTag =\n | \"#binding\"\n | \"#largeValueSet\"\n | \"#fieldTypeNotFound\"\n | \"#skipCanonical\"\n | \"#duplicateSchema\"\n | \"#duplicateCanonical\"\n | \"#resolveBase\"\n | \"#resolveCollisionMiss\";\n\nexport type CodegenLog = Log<CodegenTag>;\nexport type CodegenLogManager = LogManager<CodegenTag>;\n\nexport const mkCodegenLogger = (opts: LoggerOptions<CodegenTag> = {}) => mkLogger<CodegenTag>(opts);\n","export const words = (s: string) => {\n return s.split(/(?<=[a-z])(?=[A-Z])|[-_.\\s]/).filter(Boolean);\n};\n\nexport const kebabCase = (s: string) => {\n return words(s)\n .map((s) => s.toLowerCase())\n .join(\"-\");\n};\n\nexport const capitalCase = (s: string) => {\n if (s.length === 0) throw new Error(\"Empty string\");\n return s[0]?.toUpperCase() + s.substring(1).toLowerCase();\n};\n\nexport const camelCase = (s: string) => {\n if (s.length === 0) throw new Error(\"Empty string\");\n const [first, ...rest] = words(s);\n return [first?.toLowerCase(), ...rest.map(capitalCase)].join(\"\");\n};\n\nexport const pascalCase = (s: string) => {\n return words(s).map(capitalCase).join(\"\");\n};\n\nexport const snakeCase = (s: string) => {\n return words(s)\n .map((s) => s.toLowerCase())\n .join(\"_\");\n};\n\nexport const uppercaseFirstLetter = (str: string): string => {\n if (!str || str.length === 0) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport const uppercaseFirstLetterOfEach = (strings: string[]): string[] => {\n return strings.map((str) => uppercaseFirstLetter(str));\n};\n\nexport function deepEqual<T>(obj1: T, obj2: T): boolean {\n if (obj1 === obj2) return true;\n\n if (obj1 === null || obj2 === null || typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n return false;\n }\n\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n if (obj1.length !== obj2.length) return false;\n return obj1.every((item, index) => deepEqual(item, obj2[index]));\n }\n\n if (Array.isArray(obj1) || Array.isArray(obj2)) {\n return false;\n }\n\n const keys1 = Object.keys(obj1) as (keyof T)[];\n const keys2 = Object.keys(obj2) as (keyof T)[];\n\n if (keys1.length !== keys2.length) return false;\n\n return keys1.every((key) => keys2.includes(key) && deepEqual(obj1[key], obj2[key]));\n}\n","import * as fs from \"node:fs\";\nimport * as fsPromises from \"node:fs/promises\";\nimport * as Path from \"node:path\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLog } from \"@root/utils/log\";\n\nexport type FileSystemWriterOptions = {\n outputDir: string;\n inMemoryOnly?: boolean;\n logger?: CodegenLog;\n resolveAssets?: (fn: string) => string;\n};\n\nexport type WriterOptions = FileSystemWriterOptions & {\n tabSize: number;\n withDebugComment?: boolean;\n commentLinePrefix: string;\n generateProfile?: boolean;\n};\n\ntype FileBufferInternal = { relPath: string; absPath: string; tokens: string[] };\nexport type FileBuffer = { relPath: string; absPath: string; content: string };\n\nexport abstract class FileSystemWriter<T extends FileSystemWriterOptions = FileSystemWriterOptions> {\n opts: T;\n currentDir?: string;\n currentFile?: { relPath: string; descriptor: number };\n writtenFilesBuffer: Record<string, FileBufferInternal> = {};\n\n constructor(opts: T) {\n this.opts = opts;\n }\n\n setOutputDir(path: string) {\n if (this.currentDir) throw new Error(\"Can't change output dir while writing\");\n this.opts.outputDir = path;\n }\n\n logger(): CodegenLog | undefined {\n return this.opts.logger;\n }\n\n onDiskMkDir(path: string) {\n if (this.opts.inMemoryOnly) return;\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n }\n\n onDiskOpenFile(relPath: string): number {\n if (this.opts.inMemoryOnly) return -1;\n return fs.openSync(relPath, \"w\");\n }\n\n onDiskCloseFile(descriptor: number) {\n if (this.opts.inMemoryOnly) return;\n fs.fsyncSync(descriptor);\n fs.closeSync(descriptor);\n }\n\n onDiskWrite(descriptor: number, token: string) {\n if (this.opts.inMemoryOnly) return;\n fs.writeSync(descriptor, token);\n }\n\n cd(path: string, gen: () => void) {\n const prev = this.currentDir;\n this.currentDir = path.startsWith(\"/\")\n ? Path.join(this.opts.outputDir, path)\n : Path.join(this.currentDir ?? this.opts.outputDir, path);\n this.onDiskMkDir(this.currentDir);\n this.logger()?.debug(`cd '${this.currentDir}'`);\n gen();\n this.currentDir = prev;\n }\n\n cat(fn: string, gen: () => void) {\n if (!this.currentDir) throw new Error(\"Should be in a directory (`cd`)\");\n if (this.currentFile) throw new Error(\"Can't open file when another file is open\");\n if (fn.includes(\"/\")) throw new Error(`Change file path separatly: ${fn}`);\n\n const relPath = Path.normalize(`${this.currentDir}/${fn}`);\n\n if (this.writtenFilesBuffer[relPath]) {\n this.logger()?.warn(`File will be rewritten '${relPath}'`);\n this.logger()?.debug(`File content: ${this.writtenFilesBuffer[relPath].tokens.join(\"\")}`);\n }\n\n try {\n const descriptor = this.onDiskOpenFile(relPath);\n\n this.logger()?.debug(`cat > '${relPath}'`);\n this.currentFile = { descriptor, relPath };\n this.writtenFilesBuffer[this.currentFile.relPath] = {\n relPath,\n absPath: Path.resolve(relPath),\n tokens: [],\n };\n\n gen();\n } finally {\n if (this.currentFile) this.onDiskCloseFile(this.currentFile.descriptor);\n this.currentFile = undefined;\n }\n }\n\n write(str: string) {\n if (!this.currentFile) throw new Error(\"No file opened\");\n this.onDiskWrite(this.currentFile.descriptor, str);\n\n const buf = this.writtenFilesBuffer[this.currentFile.relPath];\n if (!buf) throw new Error(\"No buffer found\");\n buf.tokens.push(str);\n }\n\n copyAssets(source: string, destination: string) {\n destination = Path.normalize(`${this.currentDir ?? this.opts.outputDir}/${destination}`);\n const content = fs.readFileSync(source, \"utf8\");\n this.writtenFilesBuffer[destination] = {\n relPath: destination,\n absPath: Path.resolve(destination),\n tokens: [content],\n };\n fs.cpSync(source, destination);\n }\n\n cp(source: string, destination: string) {\n if (!this.opts.resolveAssets) throw new Error(\"resolveAssets is not defined\");\n source = Path.resolve(this.opts.resolveAssets(source));\n destination = Path.normalize(`${this.currentDir ?? this.opts.outputDir}/${destination}`);\n const content = fs.readFileSync(source, \"utf8\");\n this.writtenFilesBuffer[destination] = {\n relPath: destination,\n absPath: Path.resolve(destination),\n tokens: [content],\n };\n fs.cpSync(source, destination);\n }\n\n abstract generate(_tsIndex: TypeSchemaIndex): Promise<void>;\n\n writtenFiles(): FileBuffer[] {\n return Object.values(this.writtenFilesBuffer)\n .map(({ relPath, absPath, tokens }) => {\n return { relPath, absPath, content: tokens.join(\"\") };\n })\n .sort((a, b) => a.relPath.localeCompare(b.relPath));\n }\n\n async flushAsync(): Promise<void> {\n const files = this.writtenFiles();\n const dirs = new Set<string>();\n\n for (const file of files) {\n dirs.add(Path.dirname(file.absPath));\n }\n\n await Promise.all(Array.from(dirs).map((dir) => fsPromises.mkdir(dir, { recursive: true })));\n\n await Promise.all(files.map((file) => fsPromises.writeFile(file.absPath, file.content)));\n }\n\n async generateAsync(tsIndex: TypeSchemaIndex): Promise<void> {\n const originalInMemoryOnly = this.opts.inMemoryOnly;\n this.opts.inMemoryOnly = true;\n\n try {\n await this.generate(tsIndex);\n } finally {\n this.opts.inMemoryOnly = originalInMemoryOnly;\n }\n\n await this.flushAsync();\n }\n}\n\nexport abstract class Writer<T extends WriterOptions = WriterOptions> extends FileSystemWriter<T> {\n currentIndent: number = 0;\n\n protected indent() {\n this.currentIndent += this.opts.tabSize;\n }\n\n protected deindent() {\n this.currentIndent -= this.opts.tabSize;\n }\n\n private writeIndent() {\n this.write(\" \".repeat(this.currentIndent));\n }\n\n line(...tokens: string[]) {\n if (tokens.length === 0) {\n this.write(\"\\n\");\n } else {\n this.writeIndent();\n this.write(`${tokens.join(\" \")}\\n`);\n }\n }\n\n lineSM(...tokens: string[]) {\n this.writeIndent();\n this.write(`${tokens.join(\" \")};\\n`);\n }\n\n comment(...tokens: string[]) {\n const lines = tokens.join(\" \").split(\"\\n\");\n for (const line of lines) {\n this.line(this.opts.commentLinePrefix, line);\n }\n }\n\n debugComment(...tokens: (string | any)[]) {\n if (this.opts.withDebugComment) {\n tokens = tokens.map((token) => {\n if (typeof token === \"string\") {\n return token;\n } else {\n return JSON.stringify(token, null, 2);\n }\n });\n this.comment(...tokens);\n }\n }\n\n disclaimer() {\n return [\n \"WARNING: This file is autogenerated by @atomic-ehr/codegen.\",\n \"GitHub: https://github.com/atomic-ehr/codegen\",\n \"Any manual changes made to this file may be overwritten.\",\n ];\n }\n\n generateDisclaimer() {\n this.disclaimer().forEach((e) => {\n this.comment(e);\n });\n this.line();\n }\n\n indentBlock(gencontent: () => void) {\n this.indent();\n gencontent();\n this.deindent();\n }\n\n curlyBlock(tokens: (string | undefined)[], gencontent: () => void, endTokens?: string[]) {\n this.line(`${tokens.filter(Boolean).join(\" \")} {`);\n this.indent();\n gencontent();\n this.deindent();\n this.line(`}${endTokens?.filter(Boolean).join(\" \") ?? \"\"}`);\n }\n\n squareBlock(tokens: (string | undefined)[], gencontent: () => void, endTokens?: string[]) {\n this.line(`${tokens.filter(Boolean).join(\" \")} [`);\n this.indent();\n gencontent();\n this.deindent();\n this.line(`]${endTokens?.filter(Boolean).join(\" \") ?? \"\"}`);\n }\n}\n","/**\n * A code generation friendly representation of FHIR StructureDefinition and\n * FHIR Schema designed to simplify SDK resource classes/types generation.\n */\n\nimport { createHash } from \"node:crypto\";\nimport type * as FS from \"@atomic-ehr/fhirschema\";\nimport type { StructureDefinition, ValueSet, ValueSetCompose } from \"@root/fhir-types/hl7-fhir-r4-core\";\n\nexport type Name = string & { readonly __brand: unique symbol };\nexport type CanonicalUrl = string & { readonly __brand: unique symbol };\n\nexport const extractNameFromCanonical = (canonical: CanonicalUrl, dropFragment = true) => {\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) {\n localName = localName.split(\"#\")[0];\n }\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return localName;\n};\n\nexport type ValueConstraint = {\n kind: \"pattern\" | \"fixed\";\n type: string;\n value: FS.FHIRValue;\n};\n\nexport type PkgName = string;\nexport type PkgVersion = string;\n\nexport interface PackageMeta {\n name: PkgName;\n version: PkgVersion;\n}\n\nexport const packageMeta = (schema: TypeSchema): PackageMeta => {\n return {\n name: schema.identifier.package,\n version: schema.identifier.version,\n };\n};\nexport const packageMetaToFhir = (packageMeta: PackageMeta) => `${packageMeta.name}#${packageMeta.version}`;\nexport const packageMetaToNpm = (packageMeta: PackageMeta) => `${packageMeta.name}@${packageMeta.version}`;\n\nexport const hashSchema = (schema: TypeSchema): string => {\n const json = JSON.stringify(schema);\n return createHash(\"sha256\").update(json).digest(\"hex\").slice(0, 16);\n};\n\nexport type RichStructureDefinition = Omit<StructureDefinition, \"url\"> & {\n package_name: PkgName;\n package_version: PkgVersion;\n url: CanonicalUrl;\n};\n\nexport type FHIRSchemaKind = \"primitive-type\" | \"complex-type\" | \"resource\" | \"logical\";\n\ntype RichFHIRSchemaBase = Omit<FS.FHIRSchema, \"package_meta\" | \"base\" | \"name\" | \"url\" | \"derivation\" | \"kind\"> & {\n package_meta: PackageMeta;\n name: Name;\n url: CanonicalUrl;\n base: CanonicalUrl;\n kind: FHIRSchemaKind;\n};\n\nexport type RichProfileFHIRSchema = RichFHIRSchemaBase & { derivation: \"constraint\" };\n\nexport type RichPrimitiveFHIRSchema = RichFHIRSchemaBase & { derivation: \"specialization\"; kind: \"primitive-type\" };\nexport type RichComplexTypeFHIRSchema = RichFHIRSchemaBase & { derivation: \"specialization\"; kind: \"complex-type\" };\nexport type RichResourceFHIRSchema = RichFHIRSchemaBase & { derivation: \"specialization\"; kind: \"resource\" };\nexport type RichLogicalFHIRSchema = RichFHIRSchemaBase & { derivation: \"specialization\"; kind: \"logical\" };\nexport type RichSpecializationFHIRSchema =\n | RichPrimitiveFHIRSchema\n | RichComplexTypeFHIRSchema\n | RichResourceFHIRSchema\n | RichLogicalFHIRSchema;\n\nexport type RichFHIRSchema = RichProfileFHIRSchema | RichSpecializationFHIRSchema;\n\nexport const enrichFHIRSchema = (schema: FS.FHIRSchema, packageMeta: PackageMeta): RichFHIRSchema => {\n const derivation = schema.derivation === \"constraint\" ? (\"constraint\" as const) : (\"specialization\" as const);\n return {\n ...schema,\n derivation,\n kind: schema.kind as FHIRSchemaKind,\n package_meta: schema.package_meta || packageMeta,\n name: schema.name as Name,\n url: schema.url as CanonicalUrl,\n base: schema.base as CanonicalUrl,\n };\n};\n\ntype IdentifierBase = {\n name: Name;\n url: CanonicalUrl;\n package: PkgName;\n version: PkgVersion;\n};\n\nexport type PrimitiveIdentifier = { kind: \"primitive-type\" } & IdentifierBase;\nexport type ComplexTypeIdentifier = { kind: \"complex-type\" } & IdentifierBase;\nexport type ResourceIdentifier = { kind: \"resource\" } & IdentifierBase;\nexport type ValueSetIdentifier = { kind: \"value-set\" } & IdentifierBase;\nexport type NestedIdentifier = { kind: \"nested\" } & IdentifierBase;\nexport type BindingIdentifier = { kind: \"binding\" } & IdentifierBase;\nexport type ProfileIdentifier = { kind: \"profile\" } & IdentifierBase;\nexport type LogicalIdentifier = { kind: \"logical\" } & IdentifierBase;\n\nexport type Identifier =\n | PrimitiveIdentifier\n | ComplexTypeIdentifier\n | ResourceIdentifier\n | BindingIdentifier\n | ValueSetIdentifier\n | ProfileIdentifier\n | LogicalIdentifier;\n\nexport type TypeIdentifier = Identifier | NestedIdentifier;\n\nexport const isResourceIdentifier = (id: TypeIdentifier | undefined): id is ResourceIdentifier => {\n return id?.kind === \"resource\";\n};\n\nexport const isLogicalIdentifier = (id: TypeIdentifier | undefined): id is LogicalIdentifier => {\n return id?.kind === \"logical\";\n};\n\nexport const isComplexTypeIdentifier = (id: TypeIdentifier | undefined): id is ComplexTypeIdentifier => {\n return id?.kind === \"complex-type\";\n};\n\nexport const isPrimitiveIdentifier = (id: TypeIdentifier | undefined): id is PrimitiveIdentifier => {\n return id?.kind === \"primitive-type\";\n};\n\nexport const isNestedIdentifier = (id: TypeIdentifier | undefined): id is NestedIdentifier => {\n return id?.kind === \"nested\";\n};\n\nexport const isProfileIdentifier = (id: TypeIdentifier | undefined): id is ProfileIdentifier => {\n return id?.kind === \"profile\";\n};\n\nexport const isSpecializationIdentifier = (\n id: TypeIdentifier | undefined,\n): id is ResourceIdentifier | ComplexTypeIdentifier | LogicalIdentifier => {\n return isResourceIdentifier(id) || isComplexTypeIdentifier(id) || isLogicalIdentifier(id);\n};\n\nexport const concatIdentifiers = <T extends TypeIdentifier = TypeIdentifier>(\n ...sources: (T[] | undefined)[]\n): T[] | undefined => {\n const entries = sources\n .filter((s): s is T[] => s !== undefined)\n .flatMap((s) => s.map((id): [string, T] => [id.url, id]));\n if (entries.length === 0) return undefined;\n const deduped = Object.values(Object.fromEntries(entries) as Record<string, T>);\n return deduped.sort((a, b) => a.url.localeCompare(b.url));\n};\n\nexport type TypeSchema =\n | SpecializationTypeSchema\n | PrimitiveTypeSchema\n | ValueSetTypeSchema\n | BindingTypeSchema\n | ProfileTypeSchema;\n\ntype TypeSchemaGuardInput = TypeSchema | NestedTypeSchema | undefined;\n\nexport const isNestedTypeSchema = (schema: TypeSchemaGuardInput): schema is NestedTypeSchema => {\n return schema !== undefined && isNestedIdentifier(schema.identifier);\n};\n\nexport const isSpecializationTypeSchema = (schema: TypeSchemaGuardInput): schema is SpecializationTypeSchema => {\n return (\n schema?.identifier.kind === \"resource\" ||\n schema?.identifier.kind === \"complex-type\" ||\n schema?.identifier.kind === \"logical\"\n );\n};\n\nexport const isComplexTypeTypeSchema = (schema: TypeSchemaGuardInput): schema is ComplexTypeTypeSchema => {\n return schema?.identifier.kind === \"complex-type\";\n};\n\nexport const isResourceTypeSchema = (schema: TypeSchemaGuardInput): schema is ResourceTypeSchema => {\n return schema?.identifier.kind === \"resource\";\n};\n\nexport const isPrimitiveTypeSchema = (schema: TypeSchemaGuardInput): schema is PrimitiveTypeSchema => {\n return schema?.identifier.kind === \"primitive-type\";\n};\n\nexport const isLogicalTypeSchema = (schema: TypeSchemaGuardInput): schema is LogicalTypeSchema => {\n return schema?.identifier.kind === \"logical\";\n};\n\nexport const isProfileTypeSchema = (schema: TypeSchemaGuardInput): schema is ProfileTypeSchema => {\n return schema?.identifier.kind === \"profile\";\n};\n\nexport const isBindingSchema = (schema: TypeSchemaGuardInput): schema is BindingTypeSchema => {\n return schema?.identifier.kind === \"binding\";\n};\n\nexport const isValueSetTypeSchema = (schema: TypeSchemaGuardInput): schema is ValueSetTypeSchema => {\n return schema?.identifier.kind === \"value-set\";\n};\n\ninterface PrimitiveTypeSchema {\n identifier: PrimitiveIdentifier;\n description?: string;\n base: TypeIdentifier;\n dependencies?: TypeIdentifier[];\n}\n\nexport interface NestedTypeSchema {\n identifier: NestedIdentifier;\n base: TypeIdentifier;\n fields: Record<string, Field>;\n}\n\nexport interface ProfileTypeSchema {\n identifier: ProfileIdentifier;\n base: TypeIdentifier;\n description?: string;\n fields?: Record<string, Field>;\n extensions?: ProfileExtension[];\n dependencies?: TypeIdentifier[];\n nested?: NestedTypeSchema[];\n}\n\nexport interface FieldSlicing {\n discriminator?: FS.FHIRSchemaDiscriminator[];\n rules?: string;\n ordered?: boolean;\n slices?: Record<string, FieldSlice>;\n}\n\nexport type ConstrainedChoiceInfo = {\n choiceBase: string;\n variant: string;\n variantType: TypeIdentifier;\n allChoiceNames: string[];\n};\n\nexport interface FieldSlice {\n min?: number;\n max?: number;\n match?: Record<string, unknown>;\n required?: string[];\n excluded?: string[];\n elements?: string[];\n}\n\nexport interface ExtensionSubField {\n name: string;\n url: string;\n valueFieldType?: TypeIdentifier;\n min?: number;\n max?: string;\n}\n\nexport interface ProfileExtension {\n profile?: ProfileIdentifier;\n name: string;\n path: string;\n url?: string;\n min?: number;\n max?: string;\n mustSupport?: boolean;\n valueFieldTypes?: TypeIdentifier[];\n subExtensions?: ExtensionSubField[];\n isComplex?: boolean;\n}\n\nexport const extractExtensionDeps = (ext: ProfileExtension): TypeIdentifier[] => [\n ...(ext.valueFieldTypes ?? []),\n ...(ext.profile ? [ext.profile] : []),\n ...(ext.subExtensions?.flatMap((sub) => (sub.valueFieldType ? [sub.valueFieldType] : [])) ?? []),\n];\n\ntype SpecializationTypeSchemaBody = {\n base?: TypeIdentifier;\n description?: string;\n fields?: { [k: string]: Field };\n nested?: NestedTypeSchema[];\n dependencies?: Identifier[];\n /** Transitive children grouped by kind (e.g. Resource → { resources: [DomainResource, Patient, …] }) */\n typeFamily?: TypeFamily;\n};\n\nexport type TypeFamily = {\n resources?: ResourceIdentifier[];\n complexTypes?: ComplexTypeIdentifier[];\n};\n\nexport type ResourceTypeSchema = { identifier: ResourceIdentifier } & SpecializationTypeSchemaBody;\nexport type ComplexTypeTypeSchema = { identifier: ComplexTypeIdentifier } & SpecializationTypeSchemaBody;\nexport type LogicalTypeSchema = { identifier: LogicalIdentifier } & SpecializationTypeSchemaBody;\n\nexport type SpecializationTypeSchema = ResourceTypeSchema | ComplexTypeTypeSchema | LogicalTypeSchema;\n\nexport interface RegularField {\n type: TypeIdentifier;\n reference?: TypeIdentifier[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n binding?: BindingIdentifier;\n enum?: EnumDefinition;\n min?: number;\n max?: number;\n slicing?: FieldSlicing;\n valueConstraint?: ValueConstraint;\n mustSupport?: boolean;\n}\n\nexport interface ChoiceFieldDeclaration {\n choices: string[];\n prohibited?: string[];\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n min?: number;\n max?: number;\n}\n\nexport interface ChoiceFieldInstance {\n choiceOf: string;\n type: TypeIdentifier;\n required?: boolean;\n excluded?: boolean;\n array?: boolean;\n reference?: TypeIdentifier[];\n binding?: BindingIdentifier;\n enum?: EnumDefinition;\n min?: number;\n max?: number;\n slicing?: FieldSlicing;\n valueConstraint?: ValueConstraint;\n mustSupport?: boolean;\n}\n\nexport type Concept = {\n code: string;\n display?: string;\n system?: string;\n};\n\nexport type EnumDefinition = {\n values: string[];\n isOpen: boolean;\n};\n\nexport interface ValueSetTypeSchema {\n identifier: ValueSetIdentifier;\n description?: string;\n concept?: Concept[];\n compose?: ValueSetCompose;\n}\n\nexport interface BindingTypeSchema {\n identifier: BindingIdentifier;\n description?: string;\n strength?: string;\n enum?: EnumDefinition;\n valueset?: ValueSetIdentifier;\n dependencies?: TypeIdentifier[];\n}\n\nexport type Field = RegularField | ChoiceFieldDeclaration | ChoiceFieldInstance;\n\nexport const isNotChoiceDeclarationField = (field: Field | undefined): field is RegularField | ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices === undefined;\n};\n\nexport const isChoiceDeclarationField = (field: Field | undefined): field is ChoiceFieldDeclaration => {\n if (!field) return false;\n return (field as ChoiceFieldDeclaration).choices !== undefined;\n};\n\nexport const isChoiceInstanceField = (field: Field | undefined): field is ChoiceFieldInstance => {\n if (!field) return false;\n return (field as ChoiceFieldInstance).choiceOf !== undefined;\n};\n\n///////////////////////////////////////////////////////////\n// ValueSet\n///////////////////////////////////////////////////////////\n\nexport type RichValueSet = Omit<ValueSet, \"name\" | \"url\"> & {\n package_meta: PackageMeta;\n name: Name;\n url: CanonicalUrl;\n};\n\nexport const enrichValueSet = (vs: ValueSet, packageMeta: PackageMeta): RichValueSet => {\n if (!vs.url) throw new Error(\"ValueSet must have a URL\");\n if (!vs.name) throw new Error(\"ValueSet must have a name\");\n return {\n ...vs,\n package_meta: (vs as RichValueSet).package_meta || packageMeta,\n name: vs.name as Name,\n url: vs.url as CanonicalUrl,\n };\n};\n\n///////////////////////////////////////////////////////////\n","import { camelCase, uppercaseFirstLetter } from \"../utils.ts\";\n\nconst ops: Record<string, string> = {\n \"!\": \"Not\",\n \"<=\": \"LessOrEqual\",\n \">=\": \"GreaterOrEqual\",\n \"<\": \"Less\",\n \">\": \"Greater\",\n \"=\": \"Equal\",\n \"-\": \"Dash\",\n \"+\": \"Plus\",\n \"*\": \"Asterisk\",\n \"/\": \"Slash\",\n \"%\": \"Percent\",\n \"&\": \"And\",\n \"|\": \"Or\",\n \"^\": \"Xor\",\n \"~\": \"Tilde\",\n \"?\": \"Question\",\n \".\": \"Dot\",\n};\n\nexport function formatEnumDashHandle(entry: string): string {\n return entry\n .split(\"-\")\n .map((part) => uppercaseFirstLetter(part))\n .join(\"-\");\n}\n\nexport function formatEnumEntryOperation(entry: string): string {\n let res: string = entry;\n for (const op in ops) res = res.replaceAll(op, ops[op] ?? \"\");\n return res;\n}\n\nexport function formatEnumNumber(entry: string): string {\n const num = Number(entry[0]);\n if (Number.isInteger(num) && !Number.isNaN(num)) {\n return `_${entry}`;\n }\n return entry;\n}\n\nexport function formatEnumEntry(entry: string): string {\n let res: string = formatEnumDashHandle(entry);\n res = formatEnumNumber(res);\n res = formatEnumEntryOperation(res);\n res = uppercaseFirstLetter(res);\n return res;\n}\n\nexport function formatName(input: string): string {\n return uppercaseFirstLetter(camelCase(input.replaceAll(\".\", \"-\")));\n}\n","import fs from \"node:fs\";\nimport Path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { pascalCase, uppercaseFirstLetter, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils.ts\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport type { PartialBy } from \"@root/utils/types.ts\";\nimport type { Field, RegularField, TypeIdentifier } from \"@typeschema/types\";\nimport {\n type ChoiceFieldInstance,\n isChoiceDeclarationField,\n type NestedTypeSchema,\n type SpecializationTypeSchema,\n} from \"@typeschema/types.ts\";\nimport type { TypeSchemaIndex } from \"@typeschema/utils.ts\";\nimport { formatEnumEntry, formatName } from \"./formatHelper.ts\";\n\nconst resolveCSharpAssets = (fn: string) => {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = Path.dirname(__filename);\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"csharp\", fn);\n } else {\n return Path.resolve(__dirname, \"../../../..\", \"assets\", \"api\", \"writer-generator\", \"csharp\", fn);\n }\n};\n\nconst PRIMITIVE_TYPE_MAP: Record<string, string> = {\n boolean: \"bool\",\n instant: \"string\",\n time: \"string\",\n date: \"string\",\n dateTime: \"string\",\n decimal: \"decimal\",\n integer: \"int\",\n unsignedInt: \"long\",\n positiveInt: \"long\",\n integer64: \"long\",\n base64Binary: \"string\",\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n string: \"string\",\n code: \"string\",\n markdown: \"string\",\n id: \"string\",\n xhtml: \"string\",\n};\n\nconst RESERVED_TYPE_NAMES = [\"Reference\", \"Expression\"];\n\nconst getFieldModifiers = (field: Field) => {\n return field.required ? [\"required\"] : [];\n};\n\nconst formatClassName = (schema: SpecializationTypeSchema | NestedTypeSchema) => {\n const name = prefixReservedTypeName(getResourceName(schema.identifier));\n return uppercaseFirstLetter(name);\n};\n\nconst formatBaseClass = (schema: SpecializationTypeSchema | NestedTypeSchema) => {\n return schema.base ? `: ${schema.base.name}` : \"\";\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true): string | undefined => {\n if (!canonical) return undefined;\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) localName = localName.split(\"#\")[0];\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return formatName(localName);\n};\n\nconst getResourceName = (id: TypeIdentifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n const path = canonicalToName(url, false);\n if (!path) return \"\";\n\n const [resourceName, fragment] = path.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return formatName([resourceName, name].join(\"\"));\n }\n return formatName(id.name);\n};\n\nconst isReservedTypeName = (name: string): boolean => RESERVED_TYPE_NAMES.includes(name);\n\nconst prefixReservedTypeName = (name: string): string => (isReservedTypeName(name) ? `Resource${name}` : name);\n\nexport type CSharpGeneratorOptions = WriterOptions & {\n outputDir: string;\n staticSourceDir?: string;\n rootNamespace: string;\n};\n\ninterface EnumRegistry {\n [packageName: string]: {\n [enumName: string]: string[];\n };\n}\n\nexport class CSharp extends Writer<CSharpGeneratorOptions> {\n private readonly enums: EnumRegistry = {};\n\n constructor(options: PartialBy<CSharpGeneratorOptions, \"tabSize\" | \"commentLinePrefix\">) {\n super({\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n resolveAssets: options.resolveAssets ?? resolveCSharpAssets,\n ...options,\n });\n }\n\n override async generate(typeSchemaIndex: TypeSchemaIndex): Promise<void> {\n const complexTypes = typeSchemaIndex.collectComplexTypes();\n const resources = typeSchemaIndex.collectResources();\n const packages = Array.from(new Set(resources.map((r) => formatName(r.identifier.package))));\n\n this.generateAllFiles(complexTypes, resources, packages);\n this.copyStaticFiles();\n }\n\n private generateAllFiles(\n complexTypes: SpecializationTypeSchema[],\n resources: SpecializationTypeSchema[],\n packages: string[],\n ): void {\n this.generateUsingFile(packages);\n this.generateBaseTypes(complexTypes);\n this.generateResources(resources);\n this.generateEnumFiles(packages);\n this.generateResourceDictionaries(resources, packages);\n this.generateHelperFile();\n }\n\n private generateType(schema: SpecializationTypeSchema | NestedTypeSchema, packageName: string): void {\n const className = formatClassName(schema);\n const baseClass = formatBaseClass(schema);\n\n this.curlyBlock([\"public\", \"class\", className, baseClass], () => {\n this.generateFields(schema, packageName);\n this.generateNestedTypes(schema, packageName);\n this.line();\n this.includeHelperMethods();\n });\n this.line();\n }\n\n private generateFields(schema: SpecializationTypeSchema | NestedTypeSchema, packageName: string): void {\n if (!schema.fields) return;\n\n const sortedFields = Object.entries(schema.fields).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [fieldName, field] of sortedFields) {\n this.generateField(fieldName, field, packageName);\n }\n }\n\n private generateNestedTypes(schema: SpecializationTypeSchema | NestedTypeSchema, packageName: string): void {\n if (!(\"nested\" in schema) || !schema.nested) return;\n\n this.line();\n for (const subtype of schema.nested) {\n this.generateType(subtype, packageName);\n }\n }\n\n private generateField(fieldName: string, field: Field, packageName: string): void {\n try {\n if (isChoiceDeclarationField(field)) return;\n\n const fieldDeclaration = this.buildFieldDeclaration(fieldName, field, packageName);\n this.line(...fieldDeclaration);\n } catch (error) {\n this.logger()?.error(`Error processing field ${fieldName}: ${(error as Error).message}`);\n }\n }\n\n private buildFieldDeclaration(fieldName: string, field: Field, packageName: string): string[] {\n const fieldType = this.determineFieldType(fieldName, field, packageName);\n const modifiers = getFieldModifiers(field);\n const propertyName = pascalCase(fieldName);\n const accessors = \"{ get; set; }\";\n\n return [\"public\", ...modifiers, fieldType, propertyName, accessors].filter(Boolean);\n }\n\n private determineFieldType(fieldName: string, field: Field, packageName: string): string {\n let typeName = this.getBaseTypeName(field);\n\n if (\"enum\" in field && field.enum && !field.enum.isOpen) {\n typeName = this.registerAndGetEnumType(fieldName, field, packageName);\n }\n\n typeName = prefixReservedTypeName(typeName);\n\n // questionable\n const baseNamespacePrefix = \"\";\n const nullable = field.required ? \"\" : \"?\";\n const arraySpecifier = field.array ? \"[]\" : \"\";\n\n return `${baseNamespacePrefix}${typeName}${arraySpecifier}${nullable}`;\n }\n\n private getBaseTypeName(field: Field): string {\n if (\"type\" in field) {\n let typeName = field.type.name.toString();\n\n if (field.type.kind === \"nested\") {\n typeName = getResourceName(field.type);\n } else if (field.type.kind === \"primitive-type\") typeName = PRIMITIVE_TYPE_MAP[field.type.name] ?? \"string\";\n\n return typeName;\n }\n return \"\";\n }\n\n private registerAndGetEnumType(\n fieldName: string,\n field: RegularField | ChoiceFieldInstance,\n packageName: string,\n ): string {\n const enumName = formatName(field.binding?.name ?? fieldName);\n const enumTypeName = `${enumName}Enum`;\n\n if (!this.enums[packageName]) this.enums[packageName] = {};\n if (field.enum) this.enums[packageName][enumTypeName] = field.enum.values;\n\n return enumTypeName;\n }\n\n private includeHelperMethods(): void {\n this.line(\"public override string ToString() => \");\n this.line(\" JsonSerializer.Serialize(this, Helper.JsonSerializerOptions);\");\n this.line();\n }\n\n private generateUsingFile(packages: string[]): void {\n this.cd(\"/\", async () => {\n this.cat(\"Usings.cs\", () => {\n this.generateDisclaimer();\n this.generateGlobalUsings(packages);\n });\n });\n }\n\n private generateGlobalUsings(packages: string[]): void {\n const globalUsings = [\n \"CSharpSDK\",\n \"System.Text.Json\",\n \"System.Text.Json.Serialization\",\n this.opts.rootNamespace,\n ...packages.map((pkg) => `${this.opts.rootNamespace}.${pkg}`),\n ];\n\n for (const using of globalUsings) this.lineSM(\"global\", \"using\", using);\n }\n\n private generateBaseTypes(complexTypes: SpecializationTypeSchema[]): void {\n this.cd(\"/\", async () => {\n this.cat(\"base.cs\", () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(\"namespace\", this.opts.rootNamespace);\n\n for (const schema of complexTypes) {\n const packageName = formatName(schema.identifier.package);\n this.generateType(schema, packageName);\n }\n });\n });\n }\n\n private generateResources(resources: SpecializationTypeSchema[]): void {\n for (const schema of resources) this.generateResourceFile(schema);\n }\n\n private generateResourceFile(schema: SpecializationTypeSchema): void {\n const packageName = formatName(schema.identifier.package);\n\n this.cd(`/${packageName}`, async () => {\n this.cat(`${schema.identifier.name}.cs`, () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(\"namespace\", `${this.opts.rootNamespace}.${packageName}`);\n this.line();\n this.generateType(schema, packageName);\n });\n });\n }\n\n private generateEnumFiles(packages: string[]): void {\n for (const packageName of packages) {\n this.generatePackageEnums(packageName);\n }\n }\n\n private generatePackageEnums(packageName: string): void {\n const packageEnums = this.enums[packageName];\n if (!packageEnums || Object.keys(packageEnums).length === 0) return;\n\n this.cd(`/${packageName}`, async () => {\n this.cat(`${packageName}Enums.cs`, () => {\n this.generateDisclaimer();\n this.generateEnumFileContent(packageName, packageEnums);\n });\n });\n }\n\n private generateEnumFileContent(packageName: string, enums: Record<string, string[]>): void {\n this.lineSM(\"using\", \"System.ComponentModel\");\n this.line();\n this.lineSM(`namespace ${this.opts.rootNamespace}.${packageName}`);\n\n for (const [enumName, values] of Object.entries(enums)) {\n this.generateEnum(enumName, values);\n }\n }\n\n private generateEnum(enumName: string, values: string[]): void {\n this.curlyBlock([\"public\", \"enum\", enumName], () => {\n for (const value of values) {\n this.line(`[Description(\"${value}\")]`);\n this.line(`${formatEnumEntry(value)},`);\n }\n });\n this.line();\n }\n\n private generateResourceDictionaries(resources: SpecializationTypeSchema[], packages: string[]): void {\n this.cd(\"/\", async () => {\n for (const packageName of packages) {\n const packageResources = resources.filter((r) => formatName(r.identifier.package) === packageName);\n\n if (packageResources.length === 0) return;\n\n this.cat(`${packageName}ResourceDictionary.cs`, () => {\n this.generateDisclaimer();\n this.line();\n this.lineSM(`namespace ${this.opts.rootNamespace}`);\n this.generateResourceDictionaryClass(packageName, packageResources);\n });\n }\n });\n }\n\n private generateResourceDictionaryClass(packageName: string, resources: SpecializationTypeSchema[]): void {\n this.curlyBlock([\"public\", \"static\", \"class\", \"ResourceDictionary\"], () => {\n this.curlyBlock([\"public static readonly Dictionary<Type, string> Map = new()\"], () => {\n for (const schema of resources) {\n const typeName = schema.identifier.name;\n this.line(`{ typeof(${packageName}.${typeName}), \"${typeName}\" },`);\n }\n });\n this.lineSM();\n });\n }\n\n private copyStaticFiles(): void {\n this.cp(\"Client.cs\", \"Client.cs\");\n this.cp(\"Helper.cs\", \"Helper.cs\");\n }\n\n private generateHelperFile(): void {\n if (this.opts.inMemoryOnly) return;\n const sourceFile = resolveCSharpAssets(\"Helper.cs\");\n const destFile = Path.join(this.opts.outputDir, \"Helper.cs\");\n fs.copyFileSync(sourceFile, destFile);\n }\n}\n","import * as afs from \"node:fs/promises\";\nimport * as Path from \"node:path\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport * as YAML from \"yaml\";\nimport type { IrReport } from \"./ir/types\";\nimport type { Register } from \"./register\";\nimport {\n type CanonicalUrl,\n type ChoiceFieldInstance,\n type ComplexTypeTypeSchema,\n type ConstrainedChoiceInfo,\n type Field,\n type Identifier,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isComplexTypeIdentifier,\n isComplexTypeTypeSchema,\n isLogicalTypeSchema,\n isNestedIdentifier,\n isNestedTypeSchema,\n isProfileTypeSchema,\n isResourceIdentifier,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type LogicalTypeSchema,\n type NestedTypeSchema,\n type PkgName,\n type ProfileExtension,\n type ProfileTypeSchema,\n type ResourceTypeSchema,\n type SpecializationTypeSchema,\n type TypeFamily,\n type TypeIdentifier,\n type TypeSchema,\n} from \"./types\";\n\n///////////////////////////////////////////////////////////\n// TypeSchema processing\n\nexport const groupByPackages = <T extends { identifier: TypeIdentifier }>(typeSchemas: T[]): Record<PkgName, T[]> => {\n const grouped = {} as Record<PkgName, T[]>;\n for (const ts of typeSchemas) {\n const pkgName = ts.identifier.package;\n if (!grouped[pkgName]) grouped[pkgName] = [];\n grouped[pkgName].push(ts);\n }\n for (const [packageName, typeSchemas] of Object.entries(grouped)) {\n const dict: Record<string, T> = {};\n for (const ts of typeSchemas) {\n dict[JSON.stringify(ts.identifier)] = ts;\n }\n const tmp = Object.values(dict);\n tmp.sort((a, b) => a.identifier.name.localeCompare(b.identifier.name));\n grouped[packageName] = tmp;\n }\n return grouped;\n};\n\nconst buildDependencyGraph = (schemas: SpecializationTypeSchema[]): Record<string, string[]> => {\n const nameToMap: Record<string, SpecializationTypeSchema> = {};\n for (const schema of schemas) {\n nameToMap[schema.identifier.name] = schema;\n }\n\n const graph: Record<string, string[]> = {};\n for (const schema of schemas) {\n const name = schema.identifier.name;\n const base = schema.base?.name;\n if (!graph[name]) {\n graph[name] = [];\n }\n if (base && nameToMap[base]) {\n graph[name].push(base);\n }\n }\n return graph;\n};\n\nconst topologicalSort = (graph: Record<string, string[]>): string[] => {\n const sorted: string[] = [];\n const visited: Record<string, boolean> = {};\n const temp: Record<string, boolean> = {};\n\n const visit = (node: string) => {\n if (temp[node]) {\n throw new Error(`Graph has cycles ${node}`);\n }\n if (!visited[node]) {\n temp[node] = true;\n for (const neighbor of graph[node] ?? []) {\n visit(neighbor);\n }\n temp[node] = false;\n visited[node] = true;\n sorted.push(node);\n }\n };\n\n for (const node in graph) {\n if (!visited[node]) {\n visit(node);\n }\n }\n return sorted;\n};\n\nexport const sortAsDeclarationSequence = (schemas: SpecializationTypeSchema[]): SpecializationTypeSchema[] => {\n const graph = buildDependencyGraph(schemas);\n const sorted = topologicalSort(graph);\n return sorted\n .map((name) => schemas.find((schema) => schema.identifier.name === name))\n .filter(Boolean) as SpecializationTypeSchema[];\n};\n\n///////////////////////////////////////////////////////////\n// Type Family\n\n/** Populate `typeFamily` on specialization schemas with transitive children grouped by kind. */\nconst populateTypeFamily = (schemas: TypeSchema[]): void => {\n const directChildrenByParent: Record<string, TypeIdentifier[]> = {};\n for (const schema of schemas) {\n if (!isSpecializationTypeSchema(schema) || !schema.base) continue;\n const parentUrl = schema.base.url;\n if (!directChildrenByParent[parentUrl]) directChildrenByParent[parentUrl] = [];\n directChildrenByParent[parentUrl].push(schema.identifier);\n }\n\n const transitiveCache: Record<string, TypeIdentifier[]> = {};\n const getTransitiveChildren = (parentUrl: string): TypeIdentifier[] => {\n if (transitiveCache[parentUrl]) return transitiveCache[parentUrl];\n const direct = directChildrenByParent[parentUrl] ?? [];\n const result: TypeIdentifier[] = [...direct];\n for (const child of direct) {\n result.push(...getTransitiveChildren(child.url));\n }\n transitiveCache[parentUrl] = result;\n return result;\n };\n\n for (const schema of schemas) {\n if (!isSpecializationTypeSchema(schema)) continue;\n const allChildren = getTransitiveChildren(schema.identifier.url);\n if (allChildren.length === 0) continue;\n const resources = allChildren.filter(isResourceIdentifier);\n const complexTypes = allChildren.filter(isComplexTypeIdentifier);\n const family: TypeFamily = {};\n if (resources.length > 0) family.resources = resources;\n if (complexTypes.length > 0) family.complexTypes = complexTypes;\n if (Object.keys(family).length > 0) schema.typeFamily = family;\n }\n};\n\n///////////////////////////////////////////////////////////\n// Type Schema Index\n\nexport type TypeSchemaIndex = {\n _schemaIndex: Record<CanonicalUrl, Record<PkgName, TypeSchema>>;\n schemas: TypeSchema[];\n schemasByPackage: Record<PkgName, TypeSchema[]>;\n register?: Register;\n collectComplexTypes: () => ComplexTypeTypeSchema[];\n collectResources: () => ResourceTypeSchema[];\n collectLogicalModels: () => LogicalTypeSchema[];\n collectProfiles: () => ProfileTypeSchema[];\n resolve: (id: Identifier) => TypeSchema | undefined;\n resolveType: (id: TypeIdentifier) => TypeSchema | NestedTypeSchema | undefined;\n resolveByUrl: (pkgName: PkgName, url: CanonicalUrl) => TypeSchema | NestedTypeSchema | undefined;\n tryHierarchy: (schema: TypeSchema) => TypeSchema[] | undefined;\n hierarchy: (schema: TypeSchema) => TypeSchema[];\n findLastSpecialization: (schema: TypeSchema) => TypeSchema;\n findLastSpecializationByIdentifier: (id: TypeIdentifier) => TypeIdentifier;\n flatProfile: (schema: ProfileTypeSchema) => ProfileTypeSchema;\n constrainedChoice: (\n pkgName: PkgName,\n baseTypeId: TypeIdentifier,\n sliceElements: string[],\n ) => ConstrainedChoiceInfo | undefined;\n isWithMetaField: (profile: ProfileTypeSchema) => boolean;\n entityTree: () => EntityTree;\n exportTree: (filename: string) => Promise<void>;\n irReport: () => IrReport;\n replaceSchemas: (schemas: TypeSchema[]) => TypeSchemaIndex;\n};\n\ntype EntityTree = Record<PkgName, Record<TypeIdentifier[\"kind\"], Record<CanonicalUrl, object>>>;\n\nexport const mkTypeSchemaIndex = (\n schemas: TypeSchema[],\n {\n register,\n logger,\n irReport = {},\n }: {\n register?: Register;\n logger?: CodegenLog;\n irReport?: IrReport;\n },\n): TypeSchemaIndex => {\n const index: Record<CanonicalUrl, Record<PkgName, TypeSchema>> = {};\n const nestedIndex: Record<CanonicalUrl, Record<PkgName, NestedTypeSchema>> = {};\n const append = (schema: TypeSchema) => {\n const url = schema.identifier.url;\n const pkg = schema.identifier.package;\n if (!index[url]) index[url] = {};\n\n if (index[url][pkg] && pkg !== \"shared\") {\n const r1 = JSON.stringify(schema.identifier, undefined, 2);\n const r2 = JSON.stringify(index[url][pkg]?.identifier, undefined, 2);\n if (r1 !== r2) throw new Error(`Duplicate schema: ${r1} and ${r2}`);\n return;\n }\n index[url][pkg] = schema;\n\n if (isSpecializationTypeSchema(schema) || isProfileTypeSchema(schema)) {\n if (schema.nested) {\n schema.nested.forEach((nschema) => {\n const nurl = nschema.identifier.url;\n const npkg = nschema.identifier.package;\n nestedIndex[nurl] ??= {};\n nestedIndex[nurl][npkg] = nschema;\n });\n }\n }\n };\n for (const schema of schemas) {\n append(schema);\n }\n populateTypeFamily(schemas);\n\n const resolve = (id: Identifier): TypeSchema | undefined => {\n return index[id.url]?.[id.package];\n };\n const resolveType = (id: TypeIdentifier): TypeSchema | NestedTypeSchema | undefined => {\n if (isNestedIdentifier(id)) return nestedIndex[id.url]?.[id.package];\n return index[id.url]?.[id.package];\n };\n const resolveByUrl = (pkgName: PkgName, url: CanonicalUrl): TypeSchema | NestedTypeSchema | undefined => {\n if (register) {\n const resolutionTree = register.resolutionTree();\n const resolution = resolutionTree[pkgName]?.[url]?.[0];\n if (resolution) {\n return index[url]?.[resolution.pkg.name];\n }\n }\n if (index[url]?.[pkgName]) return index[url]?.[pkgName];\n if (nestedIndex[url]?.[pkgName]) return nestedIndex[url]?.[pkgName];\n logger?.dryWarn(`Type '${url}' not found in '${pkgName}'`);\n\n // Fallback: search across all packages when type exists elsewhere\n if (index[url]) {\n const anyPkg = Object.keys(index[url])[0];\n if (anyPkg) {\n logger?.dryWarn(`Type '${url}' fallback to package ${anyPkg}`);\n return index[url]?.[anyPkg];\n }\n }\n if (nestedIndex[url]) {\n const anyPkg = Object.keys(nestedIndex[url])[0];\n if (anyPkg) {\n logger?.dryWarn(`Type '${url}' fallback to package ${anyPkg}`);\n return nestedIndex[url]?.[anyPkg];\n }\n }\n return undefined;\n };\n\n const tryHierarchy = (schema: TypeSchema): TypeSchema[] | undefined => {\n const res: TypeSchema[] = [];\n let cur: TypeSchema | undefined = schema;\n while (cur) {\n res.push(cur);\n const base = (cur as SpecializationTypeSchema).base;\n if (base === undefined) break;\n if (isNestedIdentifier(base)) break;\n const resolved = resolve(base);\n if (!resolved) {\n logger?.warn(\n \"#resolveBase\",\n `Failed to resolve base type: ${res.map((e) => `${e.identifier.url} (${e.identifier.kind})`).join(\", \")}`,\n );\n return undefined;\n }\n cur = resolved;\n }\n return res;\n };\n\n const hierarchy = (schema: TypeSchema): TypeSchema[] => {\n const genealogy = tryHierarchy(schema);\n if (genealogy === undefined) {\n throw new Error(`Failed to resolve base type: ${schema.identifier.url} (${schema.identifier.kind})`);\n }\n return genealogy;\n };\n\n const findLastSpecialization = (schema: TypeSchema): TypeSchema => {\n const nonConstraintSchema = hierarchy(schema).find((s) => s.identifier.kind !== \"profile\");\n if (!nonConstraintSchema) {\n throw new Error(`No non-constraint schema found in hierarchy for: ${schema.identifier.name}`);\n }\n return nonConstraintSchema;\n };\n\n const findLastSpecializationByIdentifier = (id: TypeIdentifier): TypeIdentifier => {\n const resolved = resolveType(id);\n if (!resolved) return id;\n if (isNestedTypeSchema(resolved)) return findLastSpecializationByIdentifier(resolved.base);\n return findLastSpecialization(resolved).identifier;\n };\n\n /** Narrow choice declarations by finding the most derived schema that constrains each choice group.\n * When a child profile declares only specific choice instances without re-declaring the declaration,\n * restrict the declaration's choices array to only the allowed instances. */\n const narrowMergedChoiceDeclarations = (\n mergedFields: Record<string, Field>,\n constraintSchemas: TypeSchema[],\n ): Record<string, Field> => {\n const result = { ...mergedFields };\n for (const [declName, declField] of Object.entries(result)) {\n if (!isChoiceDeclarationField(declField) || declField.excluded) continue;\n\n for (const cSchema of constraintSchemas) {\n const sFields = (cSchema as SpecializationTypeSchema).fields;\n if (!sFields) continue;\n if (sFields[declName] && isChoiceDeclarationField(sFields[declName])) continue;\n\n const instancesInSchema = Object.entries(sFields)\n .filter(([_, f]) => isChoiceInstanceField(f) && (f as ChoiceFieldInstance).choiceOf === declName)\n .map(([name]) => name);\n if (instancesInSchema.length === 0) continue;\n\n const allowed = new Set(instancesInSchema);\n result[declName] = { ...declField, choices: declField.choices.filter((c) => allowed.has(c)) };\n break;\n }\n }\n\n // Compute prohibited for all choice declarations\n for (const [declName, declField] of Object.entries(result)) {\n if (!isChoiceDeclarationField(declField)) continue;\n const permitted = new Set(declField.excluded ? [] : declField.choices);\n const prohibited = Object.entries(result)\n .filter(\n (e): e is [string, ChoiceFieldInstance] =>\n isChoiceInstanceField(e[1]) && e[1].choiceOf === declName,\n )\n .filter(([name]) => !permitted.has(name))\n .map(([name]) => name);\n if (prohibited.length > 0) result[declName] = { ...declField, prohibited };\n }\n\n return result;\n };\n\n const flatProfile = (schema: ProfileTypeSchema): ProfileTypeSchema => {\n const hierarchySchemas = hierarchy(schema);\n const constraintSchemas = hierarchySchemas.filter((s) => s.identifier.kind === \"profile\");\n const nonConstraintSchema = hierarchySchemas.find((s) => s.identifier.kind !== \"profile\");\n\n if (!nonConstraintSchema)\n throw new Error(`No non-constraint schema found in hierarchy for ${schema.identifier.name}`);\n\n const mergedFields = {} as Record<string, Field>;\n for (const anySchema of constraintSchemas.slice().reverse()) {\n const schema = anySchema as SpecializationTypeSchema;\n if (!schema.fields) continue;\n\n for (const [fieldName, fieldConstraints] of Object.entries(schema.fields)) {\n if (mergedFields[fieldName]) {\n mergedFields[fieldName] = {\n ...mergedFields[fieldName],\n ...fieldConstraints,\n };\n } else {\n mergedFields[fieldName] = { ...fieldConstraints };\n }\n }\n }\n\n const narrowedFields = narrowMergedChoiceDeclarations(mergedFields, constraintSchemas);\n\n const dependencies = Object.values(\n Object.fromEntries(\n constraintSchemas\n .flatMap((s) => (s as SpecializationTypeSchema).dependencies ?? [])\n .map((dep) => [dep.url, dep]),\n ),\n );\n\n const mergedExtensions = Object.values(\n [...constraintSchemas.filter(isProfileTypeSchema)]\n .reverse()\n .flatMap((s) => s.extensions ?? [])\n .reduce<Record<string, ProfileExtension>>((acc, ext) => {\n const key = `${ext.path}|${ext.name}`;\n // Prefer entries with a full canonical URL over short names\n if (!acc[key] || ext.url?.includes(\"/\")) acc[key] = ext;\n return acc;\n }, {}),\n );\n\n return {\n ...schema,\n base: nonConstraintSchema.identifier,\n fields: narrowedFields,\n dependencies: dependencies,\n extensions: mergedExtensions.length > 0 ? mergedExtensions : undefined,\n };\n };\n\n const constrainedChoice = (\n pkgName: PkgName,\n baseTypeId: TypeIdentifier,\n sliceElements: string[],\n ): ConstrainedChoiceInfo | undefined => {\n const baseSchema = resolveByUrl(pkgName, baseTypeId.url as CanonicalUrl);\n if (!baseSchema || !(\"fields\" in baseSchema) || !baseSchema.fields) return undefined;\n for (const [fieldName, field] of Object.entries(baseSchema.fields)) {\n if (!isChoiceDeclarationField(field)) continue;\n const matchingVariants = field.choices.filter((c) => sliceElements.includes(c));\n if (matchingVariants.length !== 1) continue;\n const variantName = matchingVariants[0] as string;\n const variantField = baseSchema.fields[variantName];\n if (!variantField || !isChoiceInstanceField(variantField)) continue;\n return {\n choiceBase: fieldName,\n variant: variantName,\n variantType: variantField.type,\n allChoiceNames: field.choices,\n };\n }\n return undefined;\n };\n\n const isWithMetaField = (profile: ProfileTypeSchema): boolean => {\n const genealogy = tryHierarchy(profile);\n if (!genealogy) return false;\n return genealogy.filter(isSpecializationTypeSchema).some((schema) => {\n return schema.fields?.meta !== undefined;\n });\n };\n\n const entityTree = () => {\n const tree: EntityTree = {};\n for (const [pkgId, shemas] of Object.entries(groupByPackages(schemas))) {\n tree[pkgId] = {\n \"primitive-type\": {},\n \"complex-type\": {},\n resource: {},\n \"value-set\": {},\n nested: {},\n binding: {},\n profile: {},\n logical: {},\n };\n for (const schema of shemas) {\n tree[pkgId][schema.identifier.kind][schema.identifier.url] = {};\n }\n }\n return tree;\n };\n\n const exportTree = async (filename: string) => {\n const tree = entityTree();\n const raw = filename.endsWith(\".yaml\") ? YAML.stringify(tree) : JSON.stringify(tree, undefined, 2);\n await afs.mkdir(Path.dirname(filename), { recursive: true });\n await afs.writeFile(filename, raw);\n };\n\n return {\n _schemaIndex: index,\n schemas,\n schemasByPackage: groupByPackages(schemas),\n register,\n collectComplexTypes: () => schemas.filter(isComplexTypeTypeSchema),\n collectResources: () => schemas.filter(isResourceTypeSchema),\n collectLogicalModels: () => schemas.filter(isLogicalTypeSchema),\n collectProfiles: () => schemas.filter(isProfileTypeSchema),\n resolve,\n resolveType,\n resolveByUrl,\n tryHierarchy,\n hierarchy,\n findLastSpecialization,\n findLastSpecializationByIdentifier,\n flatProfile,\n constrainedChoice,\n isWithMetaField,\n entityTree,\n exportTree,\n irReport: () => irReport,\n replaceSchemas: (newSchemas) => mkTypeSchemaIndex(newSchemas, { register, logger, irReport: { ...irReport } }),\n };\n};\n","import assert from \"node:assert\";\nimport fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { camelCase, pascalCase, snakeCase, uppercaseFirstLetterOfEach } from \"@root/api/writer-generator/utils\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer.ts\";\nimport { groupByPackages, sortAsDeclarationSequence, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n type EnumDefinition,\n type Field,\n isResourceTypeSchema,\n type NestedTypeSchema,\n type SpecializationTypeSchema,\n type TypeIdentifier,\n} from \"@typeschema/types.ts\";\n\nconst PRIMITIVE_TYPE_MAP: Record<string, string> = {\n boolean: \"bool\",\n instant: \"str\",\n time: \"str\",\n date: \"str\",\n dateTime: \"str\",\n decimal: \"float\",\n integer: \"int\",\n unsignedInt: \"int\",\n positiveInt: \"PositiveInt\",\n integer64: \"int\",\n base64Binary: \"str\",\n uri: \"str\",\n url: \"str\",\n canonical: \"str\",\n oid: \"str\",\n uuid: \"str\",\n string: \"str\",\n code: \"str\",\n markdown: \"str\",\n id: \"str\",\n xhtml: \"str\",\n};\n\ntype StringFormatKey = \"snake_case\" | \"PascalCase\" | \"camelCase\";\n\nconst AVAILABLE_STRING_FORMATS: Record<StringFormatKey, (str: string) => string> = {\n snake_case: snakeCase,\n PascalCase: pascalCase,\n camelCase: camelCase,\n};\n\nconst PYTHON_KEYWORDS = new Set([\n \"False\",\n \"None\",\n \"True\",\n \"and\",\n \"as\",\n \"assert\",\n \"async\",\n \"await\",\n \"break\",\n \"class\",\n \"continue\",\n \"def\",\n \"del\",\n \"elif\",\n \"else\",\n \"except\",\n \"finally\",\n \"for\",\n \"from\",\n \"global\",\n \"if\",\n \"import\",\n \"in\",\n \"is\",\n \"lambda\",\n \"nonlocal\",\n \"not\",\n \"or\",\n \"pass\",\n \"raise\",\n \"return\",\n \"try\",\n \"while\",\n \"with\",\n \"yield\",\n \"List\",\n]);\n\nconst MAX_IMPORT_LINE_LENGTH = 100;\n\nconst GENERIC_FIELD_REWRITES: Record<string, Record<string, string>> = {\n Coding: { code: \"T\" },\n CodeableConcept: { coding: \"Coding[T]\" },\n};\n\nconst pyEnumType = (enumDef: EnumDefinition): string => {\n const values = enumDef.values.map((e) => `\"${e}\"`).join(\", \");\n return enumDef.isOpen ? `Literal[${values}] | str` : `Literal[${values}]`;\n};\n\nexport interface PythonGeneratorOptions extends WriterOptions {\n allowExtraFields?: boolean;\n rootPackageName: string; /// e.g. <rootPackageName>.hl7_fhir_r4_core.Patient.\n fieldFormat: StringFormatKey;\n fhirpyClient?: boolean;\n}\n\ninterface ImportGroup {\n [packageName: string]: string[];\n}\n\ninterface FieldInfo {\n name: string;\n type: string;\n defaultValue: string;\n}\n\nconst fixReservedWords = (name: string): string => {\n return PYTHON_KEYWORDS.has(name) ? `${name}_` : name;\n};\n\nconst canonicalToName = (canonical: string | undefined, dropFragment = true) => {\n if (!canonical) return undefined;\n let localName = canonical.split(\"/\").pop();\n if (!localName) return undefined;\n if (dropFragment && localName.includes(\"#\")) {\n localName = localName.split(\"#\")[0];\n }\n if (!localName) return undefined;\n if (/^\\d/.test(localName)) {\n localName = `number_${localName}`;\n }\n return snakeCase(localName);\n};\n\nconst deriveResourceName = (id: TypeIdentifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n const path = canonicalToName(url, false);\n if (!path) return \"\";\n const [resourceName, fragment] = path.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return pascalCase([resourceName, name].join(\"\"));\n }\n return pascalCase(id.name);\n};\n\nconst resolvePyAssets = (fn: string) => {\n const __dirname = Path.dirname(fileURLToPath(import.meta.url));\n const __filename = fileURLToPath(import.meta.url);\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"python\", fn);\n } else {\n return Path.resolve(__dirname, \"../../..\", \"assets\", \"api\", \"writer-generator\", \"python\", fn);\n }\n};\n\ntype TypeSchemaPackageGroups = {\n groupedResources: Record<string, SpecializationTypeSchema[]>;\n groupedComplexTypes: Record<string, SpecializationTypeSchema[]>;\n};\n\nexport class Python extends Writer<PythonGeneratorOptions> {\n private readonly nameFormatFunction: (name: string) => string;\n private tsIndex: TypeSchemaIndex | undefined;\n private readonly forFhirpyClient: boolean;\n private readonly fieldFormat: StringFormatKey;\n constructor(options: PythonGeneratorOptions) {\n super({ ...options, resolveAssets: options.resolveAssets ?? resolvePyAssets });\n this.nameFormatFunction = this.getFieldFormatFunction(options.fieldFormat);\n this.forFhirpyClient = options.fhirpyClient ?? false;\n this.fieldFormat = options.fieldFormat;\n }\n\n override async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n this.tsIndex = tsIndex;\n const groups: TypeSchemaPackageGroups = {\n groupedComplexTypes: groupByPackages(tsIndex.collectComplexTypes()),\n groupedResources: groupByPackages(tsIndex.collectResources()),\n };\n this.generateRootPackages(groups);\n this.generateSDKPackages(groups);\n }\n\n private generateRootPackages(groups: TypeSchemaPackageGroups): void {\n this.generateRootInitFile(groups);\n if (this.forFhirpyClient) {\n if (this.fieldFormat === \"camelCase\") {\n this.copyAssets(resolvePyAssets(\"fhirpy_base_model_camel_case.py\"), \"fhirpy_base_model.py\");\n } else {\n this.copyAssets(resolvePyAssets(\"fhirpy_base_model.py\"), \"fhirpy_base_model.py\");\n }\n }\n this.copyAssets(resolvePyAssets(\"requirements.txt\"), \"requirements.txt\");\n }\n\n private generateSDKPackages(groups: TypeSchemaPackageGroups): void {\n this.generateComplexTypesPackages(groups.groupedComplexTypes);\n this.generateResourcePackages(groups);\n }\n\n private generateComplexTypesPackages(groupedComplexTypes: Record<string, SpecializationTypeSchema[]>): void {\n for (const [packageName, packageComplexTypes] of Object.entries(groupedComplexTypes)) {\n this.cd(`/${snakeCase(packageName)}`, () => {\n this.generateBasePy(packageComplexTypes);\n });\n }\n }\n\n private generateResourcePackages(groups: TypeSchemaPackageGroups): void {\n for (const [packageName, packageResources] of Object.entries(groups.groupedResources)) {\n this.cd(`/${snakeCase(packageName)}`, () => {\n this.generateResourcePackageContent(\n packageName,\n packageResources,\n groups.groupedComplexTypes[packageName] || [],\n );\n });\n }\n }\n\n private generateResourcePackageContent(\n packageName: string,\n packageResources: SpecializationTypeSchema[],\n packageComplexTypes: SpecializationTypeSchema[],\n ): void {\n const pyPackageName = this.pyFhirPackageByName(packageName);\n\n this.generateResourcePackageInit(pyPackageName, packageResources, packageComplexTypes);\n this.generateResourceFamilies(packageResources);\n\n for (const schema of packageResources) {\n this.generateResourceModule(schema);\n }\n }\n\n private generateRootInitFile(groups: TypeSchemaPackageGroups): void {\n this.cd(\"/\", () => {\n this.cat(\"__init__.py\", () => {\n this.generateDisclaimer();\n const pydanticModels: string[] = this.collectAndImportAllModels(groups);\n this.generateModelRebuilds(pydanticModels);\n });\n });\n }\n\n private collectAndImportAllModels(groups: TypeSchemaPackageGroups): string[] {\n const models: string[] = [];\n\n for (const packageName of Object.keys(groups.groupedResources)) {\n const fullPyPackageName = this.pyFhirPackageByName(packageName);\n models.push(...this.importComplexTypes(fullPyPackageName, groups.groupedComplexTypes[packageName]));\n models.push(...this.importResources(fullPyPackageName, false, groups.groupedResources[packageName]));\n }\n this.line();\n\n return models;\n }\n\n private generateModelRebuilds(models: string[]): void {\n for (const modelName of models.sort()) {\n this.line(`${modelName}.model_rebuild()`);\n }\n }\n\n private generateBasePy(packageComplexTypes: SpecializationTypeSchema[]): void {\n const hasGenericTypes = packageComplexTypes.some((s) => s.identifier.name in GENERIC_FIELD_REWRITES);\n this.cat(\"base.py\", () => {\n this.generateDisclaimer();\n this.generateDefaultImports(hasGenericTypes);\n if (hasGenericTypes) {\n this.line();\n this.line(\"T = TypeVar('T', bound=str, default=str)\");\n }\n this.line();\n this.generateComplexTypes(packageComplexTypes);\n this.line();\n });\n }\n\n private generateComplexTypes(complexTypes: SpecializationTypeSchema[]): void {\n for (const schema of sortAsDeclarationSequence(complexTypes)) {\n this.generateNestedTypes(schema);\n this.line();\n this.generateType(schema);\n }\n }\n\n private generateResourcePackageInit(\n fullPyPackageName: string,\n packageResources: SpecializationTypeSchema[],\n packageComplexTypes?: SpecializationTypeSchema[],\n ): void {\n this.cat(\"__init__.py\", () => {\n this.generateDisclaimer();\n this.importComplexTypes(fullPyPackageName, packageComplexTypes);\n const allResourceNames = this.importResources(fullPyPackageName, true, packageResources);\n this.line();\n this.generateExportsDeclaration(packageComplexTypes, allResourceNames);\n });\n }\n\n private importComplexTypes(fullPyPackageName: string, packageComplexTypes?: SpecializationTypeSchema[]): string[] {\n if (!packageComplexTypes || packageComplexTypes.length === 0) return [];\n\n const baseTypes = packageComplexTypes.map((t) => t.identifier.name).sort();\n this.pyImportFrom(`${fullPyPackageName}.base`, ...baseTypes);\n this.line();\n\n return baseTypes;\n }\n\n private buildImportLine(remaining: string[], maxImportLineLength: number): string {\n let line = \"\";\n while (remaining.length > 0 && line.length < maxImportLineLength) {\n const entity = remaining.shift();\n if (!entity) throw new Error(\"Unexpected empty entity\");\n if (line.length > 0) {\n line += \", \";\n }\n line += entity;\n }\n\n if (remaining.length > 0) {\n line += \", \\\\\";\n }\n\n return line;\n }\n\n private importResources(\n fullPyPackageName: string,\n importEmptyResources: boolean,\n packageResources?: SpecializationTypeSchema[],\n ): string[] {\n if (!packageResources || packageResources.length === 0) return [];\n const allResourceNames: string[] = [];\n\n for (const resource of packageResources) {\n const names = this.importOneResource(resource, fullPyPackageName);\n if (!importEmptyResources && !resource.fields) continue;\n allResourceNames.push(...names);\n }\n\n return allResourceNames;\n }\n\n private importOneResource(resource: SpecializationTypeSchema, fullPyPackageName: string): string[] {\n const moduleName = `${fullPyPackageName}.${snakeCase(resource.identifier.name)}`;\n const importNames = this.collectResourceImportNames(resource);\n\n this.pyImportFrom(moduleName, ...importNames);\n\n const names = [...importNames];\n\n if (this.shouldImportResourceFamily(resource)) {\n const familyName = `${resource.identifier.name}Family`;\n this.pyImportFrom(`${fullPyPackageName}.resource_families`, familyName);\n }\n\n return names;\n }\n\n private collectResourceImportNames(resource: SpecializationTypeSchema): string[] {\n const names = [deriveResourceName(resource.identifier)];\n\n for (const nested of resource.nested ?? []) {\n const nestedName = deriveResourceName(nested.identifier);\n names.push(nestedName);\n }\n\n return names;\n }\n\n private shouldImportResourceFamily(resource: SpecializationTypeSchema): boolean {\n return resource.identifier.kind === \"resource\" && (resource.typeFamily?.resources?.length ?? 0) > 0;\n }\n\n private generateExportsDeclaration(\n packageComplexTypes: SpecializationTypeSchema[] | undefined,\n allResourceNames: string[],\n ): void {\n this.squareBlock([\"__all__\", \"=\"], () => {\n const allExports = [\n ...(packageComplexTypes || []).map((t) => t.identifier.name),\n ...allResourceNames,\n ].sort();\n\n for (const schemaName of allExports) {\n this.line(`'${schemaName}',`);\n }\n });\n }\n\n private generateResourceModule(schema: SpecializationTypeSchema): void {\n this.cat(`${snakeCase(schema.identifier.name)}.py`, () => {\n this.generateDisclaimer();\n this.generateDefaultImports(false);\n this.generateFhirBaseModelImport();\n this.line();\n this.generateDependenciesImports(schema);\n this.line();\n this.generateNestedTypes(schema);\n this.line();\n this.generateType(schema);\n });\n }\n\n private generateFhirBaseModelImport(): void {\n if (this.forFhirpyClient)\n this.pyImportFrom(`${this.opts.rootPackageName}.fhirpy_base_model`, \"FhirpyBaseModel\");\n }\n\n private generateType(schema: SpecializationTypeSchema | NestedTypeSchema): void {\n const className = deriveResourceName(schema.identifier);\n const superClasses = this.getSuperClasses(schema);\n\n this.line(`class ${className}(${superClasses.join(\", \")}):`);\n this.indentBlock(() => {\n this.generateClassBody(schema);\n });\n this.line();\n }\n\n private getSuperClasses(schema: SpecializationTypeSchema | NestedTypeSchema): string[] {\n const bases: string[] = [];\n if (schema.base) bases.push(schema.base.name);\n bases.push(...this.injectSuperClasses(schema.identifier.url));\n if (schema.identifier.name in GENERIC_FIELD_REWRITES) bases.push(\"Generic[T]\");\n return bases;\n }\n\n private generateClassBody(schema: SpecializationTypeSchema | NestedTypeSchema): void {\n this.generateModelConfig();\n\n if (!schema.fields) {\n this.line(\"pass\");\n return;\n }\n\n if (isResourceTypeSchema(schema)) {\n this.generateResourceTypeField(schema);\n }\n\n this.generateFields(schema, schema.identifier.name);\n\n if (isResourceTypeSchema(schema)) {\n this.generateResourceMethods(schema);\n }\n }\n\n private generateModelConfig(): void {\n const extraMode = this.opts.allowExtraFields ? \"allow\" : \"forbid\";\n this.line(`model_config = ConfigDict(validate_by_name=True, serialize_by_alias=True, extra=\"${extraMode}\")`);\n }\n\n private generateResourceTypeField(schema: SpecializationTypeSchema): void {\n const hasChildren = (schema.typeFamily?.resources?.length ?? 0) > 0;\n\n if (hasChildren) {\n this.line(`${this.nameFormatFunction(\"resourceType\")}: str = Field(`);\n } else {\n this.line(`${this.nameFormatFunction(\"resourceType\")}: Literal['${schema.identifier.name}'] = Field(`);\n }\n this.indentBlock(() => {\n this.line(`default='${schema.identifier.name}',`);\n this.line(`alias='resourceType',`);\n this.line(`serialization_alias='resourceType',`);\n if (!this.forFhirpyClient) {\n // fhirpy client resource protocol expects the resourceType field not to be frozen\n this.line(\"frozen=True,\");\n }\n this.line(`pattern='${schema.identifier.name}'`);\n });\n this.line(\")\");\n }\n\n private generateFields(schema: SpecializationTypeSchema | NestedTypeSchema, schemaName: string): void {\n const sortedFields = Object.entries(schema.fields ?? []).sort(([a], [b]) => a.localeCompare(b));\n\n for (const [fieldName, field] of sortedFields) {\n if (\"choices\" in field && field.choices) continue;\n\n const fieldInfo = this.buildFieldInfo(fieldName, field, schemaName);\n this.line(`${fieldInfo.name}: ${fieldInfo.type}${fieldInfo.defaultValue}`);\n }\n }\n\n private buildFieldInfo(fieldName: string, field: Field, schemaName: string): FieldInfo {\n const pyFieldName = fixReservedWords(this.nameFormatFunction(fieldName));\n const fieldType = this.determineFieldType(field, fieldName, schemaName);\n const defaultValue = this.getFieldDefaultValue(field, fieldName);\n\n return {\n name: pyFieldName,\n type: fieldType,\n defaultValue: defaultValue,\n };\n }\n\n private determineFieldType(field: Field, fieldName: string, schemaName: string): string {\n let fieldType = field ? this.getBaseFieldType(field) : \"\";\n\n // Check for generic type field rewrites (e.g., Coding.code → T, CodeableConcept.coding → Coding[T])\n const rewrite = GENERIC_FIELD_REWRITES[schemaName]?.[fieldName];\n if (rewrite) {\n fieldType = rewrite;\n if (field.array) fieldType = `PyList[${fieldType}]`;\n if (!field.required) fieldType = `${fieldType} | None`;\n return fieldType;\n }\n\n if (\"enum\" in field && field.enum) {\n const baseTypeName = \"type\" in field ? field.type.name : \"\";\n if (baseTypeName in GENERIC_FIELD_REWRITES) {\n fieldType = `${fieldType}[${pyEnumType(field.enum)}]`;\n } else if (!field.enum.isOpen) {\n const s: string = field.enum.values.map((e: string) => `\"${e}\"`).join(\", \");\n fieldType = `Literal[${s}]`;\n }\n }\n\n if (field.array) {\n fieldType = `PyList[${fieldType}]`;\n }\n\n if (!field.required) {\n fieldType = `${fieldType} | None`;\n }\n\n return fieldType;\n }\n\n private getBaseFieldType(field: Field): string {\n if (\"type\" in field && field.type.kind === \"resource\") return `${field.type.name}Family`;\n\n if (\"type\" in field && field.type.kind === \"nested\") return deriveResourceName(field.type);\n\n if (\"type\" in field && field.type.kind === \"primitive-type\")\n return PRIMITIVE_TYPE_MAP[field.type.name] ?? \"str\";\n\n return \"type\" in field ? field.type.name : \"\";\n }\n\n private getFieldDefaultValue(field: any, fieldName: string): string {\n const aliasSpec = `alias=\"${fieldName}\", serialization_alias=\"${fieldName}\"`;\n\n if (!field.required) {\n return ` = Field(None, ${aliasSpec})`;\n }\n\n return ` = Field(${aliasSpec})`;\n }\n\n private generateResourceMethods(schema: SpecializationTypeSchema): void {\n const className = schema.identifier.name.toString();\n\n this.line();\n this.line(\"def to_json(self, indent: int | None = None) -> str:\");\n this.line(\" return self.model_dump_json(exclude_unset=True, exclude_none=True, indent=indent)\");\n this.line();\n this.line(\"@classmethod\");\n this.line(`def from_json(cls, json: str) -> ${className}:`);\n this.line(\" return cls.model_validate_json(json)\");\n }\n\n private generateNestedTypes(schema: SpecializationTypeSchema): void {\n if (!schema.nested) return;\n\n this.line();\n for (const subtype of schema.nested) {\n this.generateType(subtype);\n }\n }\n\n private generateDefaultImports(includeGenericImports: boolean): void {\n this.pyImportFrom(\"__future__\", \"annotations\");\n this.pyImportFrom(\"pydantic\", \"BaseModel\", \"ConfigDict\", \"Field\", \"PositiveInt\");\n const typingImports = [\"List as PyList\", \"Literal\"];\n if (includeGenericImports) {\n typingImports.push(\"Generic\");\n }\n this.pyImportFrom(\"typing\", ...typingImports.sort());\n if (includeGenericImports) {\n this.pyImportFrom(\"typing_extensions\", \"TypeVar\");\n }\n }\n\n private generateDependenciesImports(schema: SpecializationTypeSchema): void {\n if (!schema.dependencies || schema.dependencies.length === 0) return;\n\n this.importComplexTypeDependencies(schema.dependencies);\n this.importResourceDependencies(schema.dependencies);\n }\n\n private importComplexTypeDependencies(dependencies: TypeIdentifier[]): void {\n const complexTypeDeps = dependencies.filter((dep) => dep.kind === \"complex-type\");\n const depsByPackage = this.groupDependenciesByPackage(complexTypeDeps);\n\n for (const [pyPackage, names] of Object.entries(depsByPackage)) {\n this.pyImportFrom(pyPackage, ...names.sort());\n }\n }\n\n private importResourceDependencies(dependencies: TypeIdentifier[]): void {\n const resourceDeps = dependencies.filter((dep) => dep.kind === \"resource\");\n\n for (const dep of resourceDeps) {\n this.pyImportType(dep);\n\n const familyName = `${pascalCase(dep.name)}Family`;\n const familyPackage = `${this.pyFhirPackage(dep)}.resource_families`;\n this.pyImportFrom(familyPackage, familyName);\n }\n }\n\n private groupDependenciesByPackage(dependencies: TypeIdentifier[]): ImportGroup {\n const grouped: ImportGroup = {};\n\n for (const dep of dependencies) {\n const pyPackage = this.pyPackage(dep);\n if (!grouped[pyPackage]) {\n grouped[pyPackage] = [];\n }\n grouped[pyPackage].push(dep.name);\n }\n\n return grouped;\n }\n\n private pyImportFrom(pyPackage: string, ...entities: string[]): void {\n const oneLine = `from ${pyPackage} import ${entities.join(\", \")}`;\n\n if (this.shouldUseSingleLineImport(oneLine, entities)) {\n this.line(oneLine);\n } else {\n this.writeMultiLineImport(pyPackage, entities);\n }\n }\n\n private shouldUseSingleLineImport(oneLine: string, entities: string[]): boolean {\n return oneLine.length <= MAX_IMPORT_LINE_LENGTH || entities.length === 1;\n }\n\n private writeMultiLineImport(pyPackage: string, entities: string[]): void {\n this.line(`from ${pyPackage} import (\\\\`);\n this.indentBlock(() => {\n const remaining = [...entities];\n while (remaining.length > 0) {\n const line = this.buildImportLine(remaining, MAX_IMPORT_LINE_LENGTH);\n this.line(line);\n }\n });\n this.line(\")\");\n }\n\n private pyImportType(identifier: TypeIdentifier): void {\n this.pyImportFrom(this.pyPackage(identifier), pascalCase(identifier.name));\n }\n\n private generateResourceFamilies(packageResources: SpecializationTypeSchema[]): void {\n assert(this.tsIndex !== undefined);\n const packages = //this.helper.getPackages(packageResources, this.opts.rootPackageName);\n Object.keys(groupByPackages(packageResources)).map(\n (pkgName) => `${this.opts.rootPackageName}.${pkgName.replaceAll(\".\", \"_\")}`,\n );\n const families: Record<string, string[]> = {};\n for (const resource of this.tsIndex.collectResources()) {\n const children = (resource.typeFamily?.resources ?? []).map((c) => c.name);\n if (children.length > 0) {\n const familyName = `${resource.identifier.name}Family`;\n families[familyName] = children;\n }\n }\n const exportList = Object.keys(families);\n\n if (exportList.length === 0) return;\n\n this.buildResourceFamiliesFile(packages, families, exportList);\n }\n\n private buildResourceFamiliesFile(\n packages: string[],\n families: Record<string, string[]>,\n exportList: string[],\n ): void {\n this.cat(\"resource_families.py\", () => {\n this.generateDisclaimer();\n this.includeResourceFamilyValidator();\n this.line();\n this.generateFamilyDefinitions(packages, families);\n this.generateFamilyExports(exportList);\n });\n }\n\n private includeResourceFamilyValidator(): void {\n const content = fs.readFileSync(resolvePyAssets(\"resource_family_validator.py\"), \"utf-8\");\n this.line(content);\n }\n\n private generateFamilyDefinitions(packages: string[], families: Record<string, string[]>): void {\n this.line(`packages = [${packages.map((p) => `'${p}'`).join(\", \")}]`);\n this.line();\n\n for (const [familyName, resources] of Object.entries(families)) {\n this.generateFamilyDefinition(familyName, resources);\n }\n }\n\n private generateFamilyDefinition(familyName: string, resources: string[]): void {\n const listName = `${familyName}_resources`;\n\n this.line(\n `${listName} = [${resources\n .map((r) => `'${r}'`)\n .sort()\n .join(\", \")}]`,\n );\n this.line();\n\n this.line(`def validate_and_downcast_${familyName}(v: Any) -> Any:`);\n this.line(` return validate_and_downcast(v, packages, ${listName})`);\n this.line();\n\n this.line(`type ${familyName} = Annotated[Any, BeforeValidator(validate_and_downcast_${familyName})]`);\n this.line();\n }\n\n private generateFamilyExports(exportList: string[]): void {\n this.line(`__all__ = [${exportList.map((e) => `'${e}'`).join(\", \")}]`);\n }\n\n private buildPyPackageName(packageName: string): string {\n const parts = packageName ? [snakeCase(packageName)] : [\"\"];\n return parts.join(\".\");\n }\n\n private pyFhirPackage(identifier: TypeIdentifier): string {\n return this.pyFhirPackageByName(identifier.package);\n }\n\n private pyFhirPackageByName(name: string): string {\n return [this.opts.rootPackageName, this.buildPyPackageName(name)].join(\".\");\n }\n\n private pyPackage(identifier: TypeIdentifier): string {\n if (identifier.kind === \"complex-type\") {\n return `${this.pyFhirPackage(identifier)}.base`;\n }\n if (identifier.kind === \"resource\") {\n return [this.pyFhirPackage(identifier), snakeCase(identifier.name)].join(\".\");\n }\n return this.pyFhirPackage(identifier);\n }\n\n private getFieldFormatFunction(format: StringFormatKey): (name: string) => string {\n if (!AVAILABLE_STRING_FORMATS[format]) {\n this.logger()?.warn(`Unknown field format '${format}'. Defaulting to SnakeCase.`);\n this.logger()?.warn(`Supported formats: ${Object.keys(AVAILABLE_STRING_FORMATS).join(\", \")}`);\n return snakeCase;\n }\n return AVAILABLE_STRING_FORMATS[format];\n }\n\n private injectSuperClasses(url: string): string[] {\n const name = canonicalToName(url);\n if (name === \"resource\") return this.forFhirpyClient ? [\"FhirpyBaseModel\"] : [\"BaseModel\"];\n if (name === \"element\") return [\"BaseModel\"];\n return [];\n }\n}\n","import type { CanonicalUrl, PackageMeta } from \"./types\";\n\nconst codeableReferenceInR4 = \"Use CodeableReference which is not provided by FHIR R4.\";\nconst availabilityInR4 = \"Use Availability which is not provided by FHIR R4.\";\n\nexport const skipList: Record<string, Record<CanonicalUrl, string>> = {\n \"hl7.fhir.uv.extensions.r4\": {\n \"http://hl7.org/fhir/StructureDefinition/extended-contact-availability\": availabilityInR4,\n \"http://hl7.org/fhir/StructureDefinition/immunization-procedure\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/specimen-additive\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-barrier\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-protectiveFactor\": codeableReferenceInR4,\n \"http://hl7.org/fhir/StructureDefinition/workflow-reason\": codeableReferenceInR4,\n } as Record<CanonicalUrl, string>,\n \"hl7.fhir.r5.core#5.0.0\": {\n \"http://hl7.org/fhir/StructureDefinition/shareablecodesystem\":\n \"FIXME: CodeSystem.concept.concept defined by ElementReference. FHIR Schema generator output broken value in it, so we just skip it for now.\",\n \"http://hl7.org/fhir/StructureDefinition/publishablecodesystem\":\n \"Uses R5-only base types not available in R4 generation.\",\n } as Record<CanonicalUrl, string>,\n};\n\nexport interface SkipCheckResult {\n shouldSkip: boolean;\n reason?: string;\n}\n\nexport function shouldSkipCanonical(packageMeta: PackageMeta, canonicalUrl: CanonicalUrl): SkipCheckResult {\n const pkgId = `${packageMeta.name}#${packageMeta.version}`;\n\n const reasonByPkgId = skipList[pkgId]?.[canonicalUrl];\n if (reasonByPkgId) {\n return { shouldSkip: true, reason: reasonByPkgId };\n }\n\n const reasonByName = skipList[packageMeta.name]?.[canonicalUrl];\n if (reasonByName) {\n return { shouldSkip: true, reason: reasonByName };\n }\n\n return { shouldSkip: false };\n}\n","/**\n * Identifier Building Utilities\n *\n * Functions for creating TypeSchema identifiers from FHIRSchema entities\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type {\n BindingIdentifier,\n CanonicalUrl,\n ComplexTypeIdentifier,\n Identifier,\n LogicalIdentifier,\n Name,\n PackageMeta,\n PrimitiveIdentifier,\n ProfileIdentifier,\n ResourceIdentifier,\n RichComplexTypeFHIRSchema,\n RichFHIRSchema,\n RichLogicalFHIRSchema,\n RichPrimitiveFHIRSchema,\n RichProfileFHIRSchema,\n RichResourceFHIRSchema,\n RichValueSet,\n ValueSetIdentifier,\n} from \"@typeschema/types\";\nimport type { Register } from \"../register\";\n\nexport function dropVersionFromUrl(url: CanonicalUrl): CanonicalUrl {\n const baseUrl = url.split(\"|\")[0];\n return baseUrl ? (baseUrl as CanonicalUrl) : url;\n}\n\nfunction getVersionFromUrl(url: CanonicalUrl): string | undefined {\n const version = url.split(\"|\")[1];\n return version;\n}\n\nconst identifierBase = (fhirSchema: RichFHIRSchema) => ({\n package: fhirSchema.package_meta.name,\n version: fhirSchema.package_meta.version,\n name: fhirSchema.name,\n url: fhirSchema.url,\n});\n\nexport function mkIdentifier(fhirSchema: RichProfileFHIRSchema): ProfileIdentifier;\nexport function mkIdentifier(fhirSchema: RichPrimitiveFHIRSchema): PrimitiveIdentifier;\nexport function mkIdentifier(fhirSchema: RichComplexTypeFHIRSchema): ComplexTypeIdentifier;\nexport function mkIdentifier(fhirSchema: RichResourceFHIRSchema): ResourceIdentifier;\nexport function mkIdentifier(fhirSchema: RichLogicalFHIRSchema): LogicalIdentifier;\nexport function mkIdentifier(\n fhirSchema: RichComplexTypeFHIRSchema | RichResourceFHIRSchema | RichLogicalFHIRSchema,\n): ComplexTypeIdentifier | ResourceIdentifier | LogicalIdentifier;\nexport function mkIdentifier(fhirSchema: RichFHIRSchema): Identifier;\nexport function mkIdentifier(fhirSchema: RichFHIRSchema): Identifier {\n const fields = identifierBase(fhirSchema);\n if (fhirSchema.derivation === \"constraint\") return { kind: \"profile\", ...fields };\n if (fhirSchema.kind === \"primitive-type\") return { kind: \"primitive-type\", ...fields };\n if (fhirSchema.kind === \"complex-type\") return { kind: \"complex-type\", ...fields };\n if (fhirSchema.kind === \"resource\") return { kind: \"resource\", ...fields };\n if (fhirSchema.kind === \"logical\") return { kind: \"logical\", ...fields };\n return { kind: \"resource\", ...fields };\n}\n\nconst getValueSetName = (url: CanonicalUrl): Name => {\n const urlParts = url.split(\"/\");\n const lastSegment = urlParts[urlParts.length - 1];\n\n if (lastSegment && lastSegment.length > 0) {\n return lastSegment\n .split(/[-_]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\"\") as Name;\n }\n return url as string as Name;\n};\n\nexport function mkValueSetIdentifierByUrl(\n register: Register,\n pkg: PackageMeta,\n fullValueSetUrl: CanonicalUrl,\n): ValueSetIdentifier {\n const valueSetUrl = dropVersionFromUrl(fullValueSetUrl);\n const valueSetNameFallback = getValueSetName(valueSetUrl);\n const valuesSetFallback: RichValueSet = {\n resourceType: \"ValueSet\",\n package_meta: {\n name: \"missing_valuesets\",\n version: getVersionFromUrl(valueSetUrl) || \"0.0.0\",\n },\n name: valueSetNameFallback,\n id: fullValueSetUrl,\n url: valueSetUrl,\n status: \"active\",\n };\n const valueSet: RichValueSet = register.resolveVs(pkg, valueSetUrl) || valuesSetFallback;\n // NOTE: ignore valueSet.name due to human name\n const valueSetName: Name =\n valueSet?.id && !/^[a-zA-Z0-9_-]{20,}$/.test(valueSet.id) ? (valueSet.id as Name) : valueSetNameFallback;\n\n return {\n kind: \"value-set\",\n package: valueSet.package_meta.name,\n version: valueSet.package_meta.version,\n name: valueSetName,\n url: valueSetUrl,\n };\n}\n\nexport function mkBindingIdentifier(\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n): BindingIdentifier {\n const bindingName = element.binding?.bindingName;\n const pathStr = path.join(\".\");\n // NOTE: if SD specify `bindingName`, the definition should be shared between all\n // packages. So we put it in the dedicated shared package.\n // TODO: provide setting for `shared` package name.\n const [pkg, name, url] = bindingName\n ? [{ name: \"shared\", version: \"1.0.0\" }, bindingName, `urn:fhir:binding:${bindingName}`]\n : [fhirSchema.package_meta, `${fhirSchema.name}.${pathStr}_binding`, `${fhirSchema.url}#${pathStr}_binding`];\n return {\n kind: \"binding\",\n package: pkg.name,\n version: pkg.version,\n name: name as Name,\n url: url as CanonicalUrl,\n };\n}\n","/**\n * Binding and Enum Handling\n *\n * Functions for processing value set bindings and generating enums\n */\n\nimport assert from \"node:assert\";\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { CodeSystem, CodeSystemConcept } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport type { Register } from \"@typeschema/register\";\nimport type {\n BindingTypeSchema,\n CanonicalUrl,\n Concept,\n EnumDefinition,\n PackageMeta,\n RichFHIRSchema,\n RichValueSet,\n} from \"@typeschema/types\";\nimport { dropVersionFromUrl, mkBindingIdentifier, mkValueSetIdentifierByUrl } from \"./identifier\";\n\nexport function extractValueSetConceptsByUrl(\n register: Register,\n pkg: PackageMeta,\n valueSetUrl: CanonicalUrl,\n logger?: CodegenLog,\n): Concept[] | undefined {\n const cleanUrl = dropVersionFromUrl(valueSetUrl) || valueSetUrl;\n const valueSet = register.resolveVs(pkg, cleanUrl as CanonicalUrl);\n if (!valueSet) return undefined;\n return extractValueSetConcepts(register, valueSet, logger);\n}\n\nfunction extractValueSetConcepts(\n register: Register,\n valueSet: RichValueSet,\n _logger?: CodegenLog,\n): Concept[] | undefined {\n if (valueSet.expansion?.contains) {\n return valueSet.expansion.contains\n .filter((item) => item.code !== undefined)\n .map((item) => {\n assert(item.code);\n return {\n code: item.code,\n display: item.display,\n system: item.system,\n };\n });\n }\n\n const concepts = [] as Concept[];\n if (valueSet.compose?.include) {\n for (const include of valueSet.compose.include) {\n if (include.concept) {\n for (const concept of include.concept) {\n concepts.push({\n system: include.system,\n code: concept.code,\n display: concept.display,\n });\n }\n } else if (include.system && !include.filter) {\n try {\n const codeSystem: CodeSystem = register.resolveAny(include.system as CanonicalUrl);\n if (codeSystem?.concept) {\n const extractConcepts = (conceptList: CodeSystemConcept[], system: string) => {\n for (const concept of conceptList) {\n concepts.push({\n system,\n code: concept.code,\n display: concept.display,\n });\n if (concept.concept) {\n extractConcepts(concept.concept, system);\n }\n }\n };\n extractConcepts(codeSystem.concept, include.system);\n }\n } catch {\n // Ignore if we can't resolve the CodeSystem\n }\n }\n }\n }\n return concepts.length > 0 ? concepts : undefined;\n}\n\nconst MAX_ENUM_LENGTH = 100;\n\n// eld-11: Types that can have bindings\nexport const BINDABLE_TYPES = new Set([\n \"code\",\n \"Coding\",\n \"CodeableConcept\",\n \"CodeableReference\",\n \"Quantity\",\n \"string\",\n \"uri\",\n \"Duration\",\n]);\n\nexport function buildEnum(\n register: Register,\n fhirSchema: RichFHIRSchema,\n element: FHIRSchemaElement,\n logger?: CodegenLog,\n): EnumDefinition | undefined {\n if (!element.binding) return undefined;\n\n const strength = element.binding.strength;\n const valueSetUrl = element.binding.valueSet as CanonicalUrl;\n if (!valueSetUrl) return undefined;\n\n if (!BINDABLE_TYPES.has(element.type ?? \"\")) {\n logger?.dryWarn(\n \"#binding\",\n `eld-11: Binding on non-bindable type '${element.type}' (valueSet: ${valueSetUrl})`,\n );\n return undefined;\n }\n\n // Generate enum for required/extensible/preferred bindings\n const shouldGenerateEnum = strength === \"required\" || strength === \"extensible\" || strength === \"preferred\";\n if (!shouldGenerateEnum) return undefined;\n\n const concepts = extractValueSetConceptsByUrl(register, fhirSchema.package_meta, valueSetUrl);\n if (!concepts || concepts.length === 0) return undefined;\n\n const codes = concepts\n .map((c) => c.code)\n .filter((code) => code && typeof code === \"string\" && code.trim().length > 0);\n\n if (codes.length > MAX_ENUM_LENGTH) {\n logger?.dryWarn(\n \"#largeValueSet\",\n `Value set ${valueSetUrl} has ${codes.length} which is more than ${MAX_ENUM_LENGTH} codes, which may cause issues with code generation.`,\n );\n return undefined;\n }\n if (codes.length === 0) return undefined;\n\n return { isOpen: strength !== \"required\", values: codes };\n}\n\nfunction generateBindingSchema(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLog,\n): BindingTypeSchema | undefined {\n if (!element.binding?.valueSet) return undefined;\n\n const identifier = mkBindingIdentifier(fhirSchema, path, element);\n const valueSetIdentifier = mkValueSetIdentifierByUrl(\n register,\n fhirSchema.package_meta,\n element.binding.valueSet as CanonicalUrl,\n );\n\n const enumResult = buildEnum(register, fhirSchema, element, logger);\n\n return {\n identifier,\n valueset: valueSetIdentifier,\n strength: element.binding.strength,\n enum: enumResult,\n dependencies: [valueSetIdentifier],\n };\n}\n\nexport function collectBindingSchemas(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): BindingTypeSchema[] {\n const processedPaths = new Set<string>();\n if (!fhirSchema.elements) return [];\n\n const bindings: BindingTypeSchema[] = [];\n function collectBindings(elements: Record<string, FHIRSchemaElement>, parentPath: string[]) {\n for (const [key, element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n const pathKey = path.join(\".\");\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n\n if (processedPaths.has(pathKey)) continue;\n processedPaths.add(pathKey);\n\n if (elemSnapshot.binding) {\n const binding = generateBindingSchema(register, fhirSchema, path, elemSnapshot, logger);\n if (binding) {\n bindings.push(binding);\n }\n }\n\n if (element.elements) {\n collectBindings(element.elements, path);\n }\n }\n }\n collectBindings(fhirSchema.elements, []);\n\n bindings.sort((a, b) => a.identifier.name.localeCompare(b.identifier.name));\n\n const uniqueBindings: BindingTypeSchema[] = [];\n const seenUrls = new Set<string>();\n\n for (const binding of bindings) {\n if (!seenUrls.has(binding.identifier.url)) {\n seenUrls.add(binding.identifier.url);\n uniqueBindings.push(binding);\n }\n }\n\n return uniqueBindings;\n}\n","// WARNING: This file is autogenerated by @atomic-ehr/codegen.\n// GitHub: https://github.com/atomic-ehr/codegen\n// Any manual changes made to this file may be overwritten.\n\nimport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nimport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nimport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nimport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nimport type { DomainResource } from \"../hl7-fhir-r4-core/DomainResource\";\nimport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nimport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nexport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nexport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nexport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nexport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nexport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport interface CodeSystemConcept extends BackboneElement {\n code: string;\n concept?: CodeSystemConcept[];\n definition?: string;\n designation?: CodeSystemConceptDesignation[];\n display?: string;\n property?: CodeSystemConceptProperty[];\n}\n\nexport interface CodeSystemConceptDesignation extends BackboneElement {\n language?: (\"ar\" | \"bn\" | \"cs\" | \"da\" | \"de\" | \"de-AT\" | \"de-CH\" | \"de-DE\" | \"el\" | \"en\" | \"en-AU\" | \"en-CA\" | \"en-GB\" | \"en-IN\" | \"en-NZ\" | \"en-SG\" | \"en-US\" | \"es\" | \"es-AR\" | \"es-ES\" | \"es-UY\" | \"fi\" | \"fr\" | \"fr-BE\" | \"fr-CH\" | \"fr-FR\" | \"fy\" | \"fy-NL\" | \"hi\" | \"hr\" | \"it\" | \"it-CH\" | \"it-IT\" | \"ja\" | \"ko\" | \"nl\" | \"nl-BE\" | \"nl-NL\" | \"no\" | \"no-NO\" | \"pa\" | \"pl\" | \"pt\" | \"pt-BR\" | \"ru\" | \"ru-RU\" | \"sr\" | \"sr-RS\" | \"sv\" | \"sv-SE\" | \"te\" | \"zh\" | \"zh-CN\" | \"zh-HK\" | \"zh-SG\" | \"zh-TW\" | string);\n use?: Coding<(\"900000000000003001\" | \"900000000000013009\" | string)>;\n value: string;\n}\n\nexport interface CodeSystemConceptProperty extends BackboneElement {\n code: string;\n valueBoolean?: boolean;\n valueCode?: string;\n valueCoding?: Coding;\n valueDateTime?: string;\n valueDecimal?: number;\n valueInteger?: number;\n valueString?: string;\n}\n\nexport interface CodeSystemFilter extends BackboneElement {\n code: string;\n description?: string;\n operator: (\"=\" | \"is-a\" | \"descendent-of\" | \"is-not-a\" | \"regex\" | \"in\" | \"not-in\" | \"generalizes\" | \"exists\")[];\n value: string;\n}\n\nexport interface CodeSystemProperty extends BackboneElement {\n code: string;\n description?: string;\n type: (\"code\" | \"Coding\" | \"string\" | \"integer\" | \"boolean\" | \"dateTime\" | \"decimal\");\n uri?: string;\n}\n\n// CanonicalURL: http://hl7.org/fhir/StructureDefinition/CodeSystem (pkg: hl7.fhir.r4.core#4.0.1)\nexport interface CodeSystem extends DomainResource {\n resourceType: \"CodeSystem\";\n\n caseSensitive?: boolean;\n compositional?: boolean;\n concept?: CodeSystemConcept[];\n contact?: ContactDetail[];\n content: (\"not-present\" | \"example\" | \"fragment\" | \"complete\" | \"supplement\");\n copyright?: string;\n count?: number;\n date?: string;\n description?: string;\n experimental?: boolean;\n filter?: CodeSystemFilter[];\n hierarchyMeaning?: (\"grouped-by\" | \"is-a\" | \"part-of\" | \"classified-with\");\n identifier?: Identifier[];\n jurisdiction?: CodeableConcept[];\n name?: string;\n property?: CodeSystemProperty[];\n publisher?: string;\n purpose?: string;\n status: (\"draft\" | \"active\" | \"retired\" | \"unknown\");\n supplements?: string;\n title?: string;\n url?: string;\n useContext?: UsageContext[];\n valueSet?: string;\n version?: string;\n versionNeeded?: boolean;\n}\nexport const isCodeSystem = (resource: unknown): resource is CodeSystem => {\n return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"CodeSystem\";\n}\n","// WARNING: This file is autogenerated by @atomic-ehr/codegen.\n// GitHub: https://github.com/atomic-ehr/codegen\n// Any manual changes made to this file may be overwritten.\n\nimport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nimport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nimport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nimport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nimport type { DomainResource } from \"../hl7-fhir-r4-core/DomainResource\";\nimport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nimport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport type { BackboneElement } from \"../hl7-fhir-r4-core/BackboneElement\";\nexport type { CodeableConcept } from \"../hl7-fhir-r4-core/CodeableConcept\";\nexport type { Coding } from \"../hl7-fhir-r4-core/Coding\";\nexport type { ContactDetail } from \"../hl7-fhir-r4-core/ContactDetail\";\nexport type { Identifier } from \"../hl7-fhir-r4-core/Identifier\";\nexport type { UsageContext } from \"../hl7-fhir-r4-core/UsageContext\";\n\nexport interface ValueSetCompose extends BackboneElement {\n exclude?: ValueSetComposeInclude[];\n inactive?: boolean;\n include: ValueSetComposeInclude[];\n lockedDate?: string;\n}\n\nexport interface ValueSetComposeInclude extends BackboneElement {\n concept?: ValueSetComposeIncludeConcept[];\n filter?: ValueSetComposeIncludeFilter[];\n system?: string;\n valueSet?: string[];\n version?: string;\n}\n\nexport interface ValueSetComposeIncludeConcept extends BackboneElement {\n code: string;\n designation?: ValueSetComposeIncludeConceptDesignation[];\n display?: string;\n}\n\nexport interface ValueSetComposeIncludeConceptDesignation extends BackboneElement {\n language?: (\"ar\" | \"bn\" | \"cs\" | \"da\" | \"de\" | \"de-AT\" | \"de-CH\" | \"de-DE\" | \"el\" | \"en\" | \"en-AU\" | \"en-CA\" | \"en-GB\" | \"en-IN\" | \"en-NZ\" | \"en-SG\" | \"en-US\" | \"es\" | \"es-AR\" | \"es-ES\" | \"es-UY\" | \"fi\" | \"fr\" | \"fr-BE\" | \"fr-CH\" | \"fr-FR\" | \"fy\" | \"fy-NL\" | \"hi\" | \"hr\" | \"it\" | \"it-CH\" | \"it-IT\" | \"ja\" | \"ko\" | \"nl\" | \"nl-BE\" | \"nl-NL\" | \"no\" | \"no-NO\" | \"pa\" | \"pl\" | \"pt\" | \"pt-BR\" | \"ru\" | \"ru-RU\" | \"sr\" | \"sr-RS\" | \"sv\" | \"sv-SE\" | \"te\" | \"zh\" | \"zh-CN\" | \"zh-HK\" | \"zh-SG\" | \"zh-TW\" | string);\n use?: Coding<(\"900000000000003001\" | \"900000000000013009\" | string)>;\n value: string;\n}\n\nexport interface ValueSetComposeIncludeFilter extends BackboneElement {\n op: (\"=\" | \"is-a\" | \"descendent-of\" | \"is-not-a\" | \"regex\" | \"in\" | \"not-in\" | \"generalizes\" | \"exists\");\n property: string;\n value: string;\n}\n\nexport interface ValueSetExpansion extends BackboneElement {\n contains?: ValueSetExpansionContains[];\n identifier?: string;\n offset?: number;\n parameter?: ValueSetExpansionParameter[];\n timestamp: string;\n total?: number;\n}\n\nexport interface ValueSetExpansionContains extends BackboneElement {\n abstract?: boolean;\n code?: string;\n contains?: ValueSetExpansionContains[];\n designation?: ValueSetComposeIncludeConceptDesignation[];\n display?: string;\n inactive?: boolean;\n system?: string;\n version?: string;\n}\n\nexport interface ValueSetExpansionParameter extends BackboneElement {\n name: string;\n valueBoolean?: boolean;\n valueCode?: string;\n valueDateTime?: string;\n valueDecimal?: number;\n valueInteger?: number;\n valueString?: string;\n valueUri?: string;\n}\n\n// CanonicalURL: http://hl7.org/fhir/StructureDefinition/ValueSet (pkg: hl7.fhir.r4.core#4.0.1)\nexport interface ValueSet extends DomainResource {\n resourceType: \"ValueSet\";\n\n compose?: ValueSetCompose;\n contact?: ContactDetail[];\n copyright?: string;\n date?: string;\n description?: string;\n expansion?: ValueSetExpansion;\n experimental?: boolean;\n identifier?: Identifier[];\n immutable?: boolean;\n jurisdiction?: CodeableConcept[];\n name?: string;\n publisher?: string;\n purpose?: string;\n status: (\"draft\" | \"active\" | \"retired\" | \"unknown\");\n title?: string;\n url?: string;\n useContext?: UsageContext[];\n version?: string;\n}\nexport const isValueSet = (resource: unknown): resource is ValueSet => {\n return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"ValueSet\";\n}\n","import { CanonicalManager } from \"@atomic-ehr/fhir-canonical-manager\";\nimport * as fhirschema from \"@atomic-ehr/fhirschema\";\nimport {\n type FHIRSchema,\n type FHIRSchemaElement,\n isStructureDefinition,\n type StructureDefinition,\n} from \"@atomic-ehr/fhirschema\";\nimport { type CodeSystem, isCodeSystem, isValueSet, type ValueSet } from \"@root/fhir-types/hl7-fhir-r4-core\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport type {\n CanonicalUrl,\n Name,\n PackageMeta,\n RichFHIRSchema,\n RichStructureDefinition,\n RichValueSet,\n} from \"@typeschema/types\";\nimport { enrichFHIRSchema, enrichValueSet, packageMetaToFhir, packageMetaToNpm } from \"@typeschema/types\";\n\nexport type Register = {\n testAppendFs(fs: FHIRSchema): void;\n ensureSpecializationCanonicalUrl(name: string | Name | CanonicalUrl): CanonicalUrl;\n resolveSd(pkg: PackageMeta, canonicalUrl: CanonicalUrl): StructureDefinition | undefined;\n resolveFs(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema | undefined;\n resolveFsGenealogy(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[];\n resolveFsSpecializations(pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[];\n allSd(): RichStructureDefinition[];\n /** Returns all FHIRSchemas from all packages in the resolver */\n allFs(): RichFHIRSchema[];\n /** Returns all ValueSets from all packages in the resolver */\n allVs(): RichValueSet[];\n resolveVs(_pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichValueSet | undefined;\n resolveAny(canonicalUrl: CanonicalUrl): any | undefined;\n resolveElementSnapshot(fhirSchema: RichFHIRSchema, path: string[]): FHIRSchemaElement;\n getAllElementKeys(elems: Record<string, FHIRSchemaElement>): string[];\n resolver: PackageAwareResolver;\n resolutionTree: () => ResolutionTree;\n};\n\nconst readPackageDependencies = async (manager: ReturnType<typeof CanonicalManager>, packageMeta: PackageMeta) => {\n const packageJSON = (await manager.packageJson(packageMeta.name)) as any;\n if (!packageJSON) return [];\n const dependencies = packageJSON.dependencies;\n if (dependencies !== undefined) {\n return Object.entries(dependencies).map(([name, version]): PackageMeta => {\n return { name: name as string, version: version as string };\n });\n }\n return [];\n};\n\n// FIXME: Tiding: PackageName, PkgId, PkgName\ntype PkgId = string;\ntype PkgName = string;\ntype FocusedResource = StructureDefinition | ValueSet | CodeSystem;\n\ntype CanonicalResolution<T> = {\n deep: number;\n pkg: PackageMeta;\n pkgId: PkgId;\n resource: T;\n};\n\ntype PackageIndex = {\n pkg: PackageMeta;\n canonicalResolution: Record<CanonicalUrl, CanonicalResolution<FocusedResource>[]>;\n fhirSchemas: Record<CanonicalUrl, RichFHIRSchema>;\n valueSets: Record<CanonicalUrl, RichValueSet>;\n};\n\ntype PackageAwareResolver = Record<PkgId, PackageIndex>;\nexport type ResolutionTree = Record<PkgName, Record<CanonicalUrl, { deep: number; pkg: PackageMeta }[]>>;\n\nconst mkEmptyPkgIndex = (pkg: PackageMeta): PackageIndex => {\n return {\n pkg,\n canonicalResolution: {},\n fhirSchemas: {},\n valueSets: {},\n };\n};\n\nconst mkPackageAwareResolver = async (\n manager: ReturnType<typeof CanonicalManager>,\n pkg: PackageMeta,\n deep: number,\n acc: PackageAwareResolver,\n logger?: CodegenLog,\n): Promise<PackageIndex> => {\n const pkgId = packageMetaToFhir(pkg);\n logger?.info(`${\" \".repeat(deep * 2)}+ ${pkgId}`);\n if (acc[pkgId]) return acc[pkgId];\n\n const index = mkEmptyPkgIndex(pkg);\n for (const resource of await manager.search({ package: pkg })) {\n const rawUrl = resource.url;\n if (!rawUrl) continue;\n if (!(isStructureDefinition(resource) || isValueSet(resource) || isCodeSystem(resource))) continue;\n const url = rawUrl as CanonicalUrl;\n if (index.canonicalResolution[url])\n logger?.dryWarn(\"#duplicateCanonical\", `Duplicate canonical URL: ${url} at ${pkgId}.`);\n index.canonicalResolution[url] = [{ deep, pkg: pkg, pkgId, resource: resource as FocusedResource }];\n }\n\n const deps = await readPackageDependencies(manager, pkg);\n for (const depPkg of deps) {\n const { canonicalResolution } = await mkPackageAwareResolver(manager, depPkg, deep + 1, acc, logger);\n for (const [surl, resolutions] of Object.entries(canonicalResolution)) {\n const url = surl as CanonicalUrl;\n index.canonicalResolution[url] = [...(index.canonicalResolution[url] || []), ...resolutions];\n }\n }\n for (const resolutionOptions of Object.values(index.canonicalResolution)) {\n resolutionOptions.sort((a, b) => a.deep - b.deep);\n }\n\n acc[pkgId] = index;\n return index;\n};\n\nconst enrichResolver = (resolver: PackageAwareResolver, logger?: CodegenLog) => {\n for (const { pkg, canonicalResolution } of Object.values(resolver)) {\n const pkgId = packageMetaToFhir(pkg);\n if (!resolver[pkgId]) throw new Error(`Package ${pkgId} not found`);\n let counter = 0;\n logger?.info(`FHIR Schema conversion for '${packageMetaToFhir(pkg)}' begins...`);\n for (const [_url, options] of Object.entries(canonicalResolution)) {\n const resolition = options[0];\n if (!resolition) throw new Error(`Resource not found`);\n const resource = resolition.resource;\n const resourcePkg = resolition.pkg;\n if (isStructureDefinition(resource)) {\n const fs = fhirschema.translate(resource as StructureDefinition) as FHIRSchema;\n const rfs = enrichFHIRSchema(fs, resourcePkg);\n counter++;\n resolver[pkgId].fhirSchemas[rfs.url] = rfs;\n }\n if (isValueSet(resource)) {\n const rvs = enrichValueSet(resource, resourcePkg);\n resolver[pkgId].valueSets[rvs.url] = rvs;\n }\n }\n logger?.info(`FHIR Schema conversion for '${packageMetaToFhir(pkg)}' completed: ${counter} successful`);\n }\n};\n\nconst packageAgnosticResolveCanonical = (resolver: PackageAwareResolver, url: CanonicalUrl, _logger?: CodegenLog) => {\n const options = Object.values(resolver).flatMap((pkg) => pkg.canonicalResolution[url]);\n if (!options) throw new Error(`No canonical resolution found for ${url} in any package`);\n // if (options.length > 1)\n // logger?.dry_warn(\n // `Multiple canonical resolutions found for ${url} in: ${options\n // .map((e) => {\n // return `\\n ${JSON.stringify({ ...e, resource: undefined, pkg: undefined })}`;\n // })\n // .join(\"\")}`,\n // );\n return options[0]?.resource;\n};\n\nexport type RegisterConfig = {\n logger?: CodegenLog;\n focusedPackages?: PackageMeta[];\n /** Custom FHIR package registry URL */\n registry?: string;\n};\n\nexport const registerFromManager = async (\n manager: ReturnType<typeof CanonicalManager>,\n { logger, focusedPackages }: RegisterConfig,\n): Promise<Register> => {\n const packages = focusedPackages ?? (await manager.packages());\n const resolver: PackageAwareResolver = {};\n for (const pkg of packages) {\n await mkPackageAwareResolver(manager, pkg, 0, resolver, logger);\n }\n enrichResolver(resolver, logger);\n\n const resolveFs = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const pkgIndex = resolver[packageMetaToFhir(pkg)];\n if (pkgIndex) {\n // Use canonicalResolution which is sorted by depth (closest first)\n const resolution = pkgIndex.canonicalResolution[canonicalUrl]?.[0];\n if (resolution) {\n return resolver[resolution.pkgId]?.fhirSchemas[canonicalUrl];\n }\n }\n // Fallback for packages not in resolver: search by package name in fhirSchemas\n for (const idx of Object.values(resolver)) {\n const fs = idx.fhirSchemas[canonicalUrl];\n if (fs && fs.package_meta.name === pkg.name) return fs;\n }\n // Last resort: return any match\n for (const idx of Object.values(resolver)) {\n const fs = idx.fhirSchemas[canonicalUrl];\n if (fs) return fs;\n }\n return undefined;\n };\n\n const resolveVs = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const pkgIndex = resolver[packageMetaToFhir(pkg)];\n if (pkgIndex) {\n // Use canonicalResolution which is sorted by depth (closest first)\n const resolution = pkgIndex.canonicalResolution[canonicalUrl]?.[0];\n if (resolution) {\n return resolver[resolution.pkgId]?.valueSets[canonicalUrl];\n }\n }\n // Fallback for packages not in resolver: search by package name in valueSets\n for (const idx of Object.values(resolver)) {\n const vs = idx.valueSets[canonicalUrl];\n if (vs && vs.package_meta.name === pkg.name) return vs;\n }\n // Last resort: return any match\n for (const idx of Object.values(resolver)) {\n const vs = idx.valueSets[canonicalUrl];\n if (vs) return vs;\n }\n return undefined;\n };\n\n const ensureSpecializationCanonicalUrl = (name: string | Name | CanonicalUrl): CanonicalUrl => {\n // Strip version suffix from canonical URL (e.g., \"Extension|4.0.1\" -> \"Extension\")\n if (name.includes(\"|\")) name = name.split(\"|\")[0] as CanonicalUrl;\n if (name.match(/^[a-zA-Z0-9]+$/)) {\n return `http://hl7.org/fhir/StructureDefinition/${name}` as CanonicalUrl;\n }\n return name as CanonicalUrl;\n };\n\n const resolveFsGenealogy = (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n let fs = resolveFs(pkg, canonicalUrl);\n if (fs === undefined) throw new Error(`Failed to resolve FHIR Schema: '${canonicalUrl}'`);\n const genealogy = [fs];\n while (fs?.base) {\n const pkg = fs.package_meta;\n const baseUrl = ensureSpecializationCanonicalUrl(fs.base);\n fs = resolveFs(pkg, baseUrl);\n if (fs === undefined)\n throw new Error(\n `Failed to resolve FHIR Schema base for '${canonicalUrl}'. Problem: '${baseUrl}' from '${packageMetaToFhir(pkg)}'`,\n );\n genealogy.push(fs);\n }\n return genealogy;\n };\n\n const resolveFsSpecializations = (pkg: PackageMeta, canonicalUrl: CanonicalUrl): RichFHIRSchema[] => {\n return resolveFsGenealogy(pkg, canonicalUrl).filter((fs) => fs.derivation === \"specialization\");\n };\n\n const resolveElementSnapshot = (fhirSchema: RichFHIRSchema, path: string[]): FHIRSchemaElement => {\n const geneology = resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url);\n const elemGeneology = resolveFsElementGenealogy(geneology, path);\n const elemSnapshot = mergeFsElementProps(elemGeneology);\n return elemSnapshot;\n };\n\n const getAllElementKeys = (elems: Record<string, FHIRSchemaElement>): string[] => {\n const keys: Set<string> = new Set();\n for (const [key, elem] of Object.entries(elems)) {\n keys.add(key);\n for (const choiceKey of elem?.choices || []) {\n if (!elems[choiceKey]) {\n keys.add(choiceKey);\n }\n }\n }\n return Array.from(keys);\n };\n\n let cachedResolutionTree: ResolutionTree | undefined;\n\n return {\n testAppendFs(rfs: RichFHIRSchema) {\n const pkgId = packageMetaToFhir(rfs.package_meta);\n if (!resolver[pkgId]) resolver[pkgId] = mkEmptyPkgIndex(rfs.package_meta);\n resolver[pkgId].fhirSchemas[rfs.url] = rfs;\n cachedResolutionTree = undefined;\n },\n resolveFs,\n resolveFsGenealogy: resolveFsGenealogy,\n resolveFsSpecializations: resolveFsSpecializations,\n ensureSpecializationCanonicalUrl,\n resolveSd: (pkg: PackageMeta, canonicalUrl: CanonicalUrl) => {\n const res = resolver[packageMetaToFhir(pkg)]?.canonicalResolution[canonicalUrl]?.[0]?.resource;\n if (isStructureDefinition(res)) return res as StructureDefinition;\n return undefined;\n },\n allSd: () =>\n Object.values(resolver)\n .flatMap((pkgIndex) =>\n Object.values(pkgIndex.canonicalResolution).flatMap((resolutions) =>\n resolutions.map((r) => {\n const sd = r.resource as RichStructureDefinition;\n if (!sd.package_name) {\n return {\n ...sd,\n package_name: pkgIndex.pkg.name,\n package_version: pkgIndex.pkg.version,\n };\n }\n return sd;\n }),\n ),\n )\n .filter((r): r is RichStructureDefinition => isStructureDefinition(r))\n .sort((sd1, sd2) => sd1.url.localeCompare(sd2.url)),\n allFs: () => Object.values(resolver).flatMap((pkgIndex) => Object.values(pkgIndex.fhirSchemas)),\n allVs: () => Object.values(resolver).flatMap((pkgIndex) => Object.values(pkgIndex.valueSets)),\n resolveVs,\n resolveAny: (canonicalUrl: CanonicalUrl) => packageAgnosticResolveCanonical(resolver, canonicalUrl, logger),\n resolveElementSnapshot,\n getAllElementKeys,\n resolver,\n resolutionTree: () => {\n if (cachedResolutionTree) return cachedResolutionTree;\n const res: ResolutionTree = {};\n for (const [_pkgId, pkgIndex] of Object.entries(resolver)) {\n const pkgName = pkgIndex.pkg.name;\n res[pkgName] = {};\n for (const [surl, resolutions] of Object.entries(pkgIndex.canonicalResolution)) {\n const url = surl as CanonicalUrl;\n res[pkgName][url] = [];\n for (const resolution of resolutions) {\n res[pkgName][url].push({ deep: resolution.deep, pkg: resolution.pkg });\n }\n }\n }\n cachedResolutionTree = res;\n return res;\n },\n };\n};\n\nexport const registerFromPackageMetas = async (\n packageMetas: PackageMeta[],\n conf: RegisterConfig,\n): Promise<Register> => {\n const packageNames = packageMetas.map(packageMetaToNpm);\n conf?.logger?.info(`Loading FHIR packages: ${packageNames.join(\", \")}`);\n const manager = CanonicalManager({\n packages: packageNames,\n workingDir: \".codegen-cache/canonical-manager-cache\",\n registry: conf.registry || undefined,\n });\n await manager.init();\n return await registerFromManager(manager, {\n ...conf,\n focusedPackages: packageMetas,\n });\n};\n\nexport const resolveFsElementGenealogy = (genealogy: RichFHIRSchema[], path: string[]): FHIRSchemaElement[] => {\n const [top, ...rest] = path;\n if (top === undefined) return [];\n return genealogy\n .map((fs) => {\n if (!fs.elements) return undefined;\n let elem = fs.elements?.[top];\n for (const k of rest) {\n elem = elem?.elements?.[k];\n }\n return elem;\n })\n .filter((elem) => elem !== undefined);\n};\n\n/**\n * Merge scalar properties of an element across its genealogy chain.\n * Sub-elements are intentionally stripped — use resolveFsElementGenealogy\n * to access nested structure properly.\n */\nexport function mergeFsElementProps(genealogy: FHIRSchemaElement[]): FHIRSchemaElement {\n const revGenealogy = genealogy.reverse();\n const snapshot = Object.assign({}, ...revGenealogy);\n snapshot.elements = undefined;\n return snapshot;\n}\n","/**\n * Nested Types (BackboneElement) Handling\n *\n * Functions for extracting and transforming nested types from FHIRSchema\n */\n\nimport type { FHIRSchema, FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport { mergeFsElementProps, type Register, resolveFsElementGenealogy } from \"@root/typeschema/register\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport type {\n CanonicalUrl,\n Field,\n Name,\n NestedIdentifier,\n NestedTypeSchema,\n RichFHIRSchema,\n TypeIdentifier,\n} from \"../types\";\nimport { mkField, mkNestedField } from \"./field-builder\";\n\n/**\n * Check whether the specialization chain defines structural sub-elements at `path`.\n * \"Structural\" means the sub-elements define new fields, not just constrain\n * fields of the element's own type. For example:\n * - EN.item (type Base) has sub-elements family/given that Base doesn't define → structural\n * - typeId (type II) has sub-elements root/extension that II itself defines → constraining\n * - bodyweight.code (type CodeableConcept) has coding only in the constraint → not in specializations\n */\nconst hasStructuralElements = (register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean => {\n const specializations = register.resolveFsSpecializations(fhirSchema.package_meta, fhirSchema.url);\n const elemGens = resolveFsElementGenealogy(specializations, path);\n const elemType = mergeFsElementProps(elemGens).type;\n\n let typeKeys: Set<string> | undefined;\n if (elemType) {\n const typeUrl = register.ensureSpecializationCanonicalUrl(elemType);\n const typeGenealogy = register.resolveFsGenealogy(fhirSchema.package_meta, typeUrl);\n const keys = typeGenealogy.flatMap((fs) => Object.keys(fs.elements ?? {}));\n if (keys.length > 0) typeKeys = new Set(keys);\n }\n\n for (const elem of elemGens) {\n if (!elem.elements || Object.keys(elem.elements).length === 0) continue;\n if (typeKeys && !Object.keys(elem.elements).some((k) => !typeKeys.has(k))) continue;\n return true;\n }\n return false;\n};\n\n/**\n * Check if an element is structurally nested, using both the snapshot\n * (for BackboneElement detection) and specialization-chain element analysis.\n */\nexport const isNestedElement = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n snapshot: FHIRSchemaElement,\n raw?: FHIRSchemaElement,\n): boolean => {\n if (snapshot.type === \"BackboneElement\") return true;\n if (!raw?.elements || raw.choiceOf !== undefined) return false;\n return hasStructuralElements(register, fhirSchema, path);\n};\n\nconst collectNestedPaths = (fs: RichFHIRSchema): Set<string> => {\n if (!fs.elements) return new Set();\n return new Set(\n collectNestedElements(fs, [], fs.elements)\n .filter(([_, el]) => el.elements && Object.keys(el.elements).length > 0)\n .map(([path]) => path.join(\".\")),\n );\n};\n\nexport function mkNestedIdentifier(register: Register, fhirSchema: RichFHIRSchema, path: string[]): NestedIdentifier {\n // Resolve nested type origins from the genealogy so inherited nested types\n // (e.g. PN.item from EN) resolve to the defining type's nested type (EN#item).\n const nestedTypeOrigins = {} as Record<Name, CanonicalUrl>;\n const genealogy =\n fhirSchema.derivation === \"constraint\"\n ? register.resolveFsSpecializations(fhirSchema.package_meta, fhirSchema.url)\n : register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url);\n // Walk base-first so most-derived wins\n for (const fs of [...genealogy].reverse()) {\n const paths = collectNestedPaths(fs);\n for (const p of paths) {\n nestedTypeOrigins[p as Name] = `${fs.url}#${p}` as CanonicalUrl;\n }\n }\n const nestedName = path.join(\".\") as Name;\n const url = nestedTypeOrigins[nestedName] ?? (`${fhirSchema.url}#${nestedName}` as CanonicalUrl);\n const baseUrl = url.split(\"#\")[0] as CanonicalUrl;\n const baseFs = register.resolveFs(fhirSchema.package_meta, baseUrl);\n const packageMeta = baseFs?.package_meta ?? fhirSchema.package_meta;\n return {\n kind: \"nested\",\n package: packageMeta.name,\n version: packageMeta.version,\n name: nestedName,\n url: url,\n };\n}\n\nfunction collectNestedElements(\n fhirSchema: FHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement>,\n): [string[], FHIRSchemaElement][] {\n const nested: [string[], FHIRSchemaElement][] = [];\n\n for (const [key, element] of Object.entries(elements)) {\n const path = [...parentPath, key];\n if (element.elements && element.choiceOf === undefined) nested.push([path, element]);\n if (element.elements) nested.push(...collectNestedElements(fhirSchema, path, element.elements));\n }\n\n return nested;\n}\n\nfunction transformNestedElements(\n register: Register,\n fhirSchema: RichFHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement>,\n logger?: CodegenLog,\n): Record<string, Field> {\n const fields: Record<string, Field> = {};\n\n // Collect all sub-element keys from the genealogy chain, not just the current type.\n // This ensures constraint profiles include inherited sub-elements from base types.\n const genealogy = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url);\n const elemGenealogy = resolveFsElementGenealogy(genealogy, parentPath);\n const allKeys = new Set<string>();\n for (const elem of elemGenealogy) {\n if (elem.elements) {\n for (const k of Object.keys(elem.elements)) {\n allKeys.add(k);\n }\n }\n }\n\n for (const key of allKeys) {\n const path = [...parentPath, key];\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n\n if (isNestedElement(register, fhirSchema, path, elemSnapshot, elements[key])) {\n fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot);\n } else {\n fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger);\n }\n }\n\n return fields;\n}\n\nexport function mkNestedTypes(\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): NestedTypeSchema[] | undefined {\n if (!fhirSchema.elements) return undefined;\n\n const nested = collectNestedElements(fhirSchema, [], fhirSchema.elements).filter(([path, element]) => {\n if (!element.elements || Object.keys(element.elements).length === 0) return false;\n // Verify the specialization chain also defines sub-elements for this path.\n // This filters out false positives from constraint profiles that add sub-elements\n // for constraining (e.g. bodyweight constraining code.coding — the base\n // Observation.code has no sub-elements, so it's not a nested type).\n if (element.type !== \"BackboneElement\") {\n return hasStructuralElements(register, fhirSchema, path);\n }\n return true;\n });\n\n const nestedTypes = [] as NestedTypeSchema[];\n for (const [path, element] of nested) {\n const identifier = mkNestedIdentifier(register, fhirSchema, path);\n\n let baseName: Name;\n if (element.type === \"BackboneElement\" || !element.type) {\n baseName = \"BackboneElement\" as Name;\n } else {\n baseName = element.type as Name;\n }\n const baseUrl = register.ensureSpecializationCanonicalUrl(baseName);\n const baseFs = register.resolveFs(fhirSchema.package_meta, baseUrl);\n if (!baseFs) throw new Error(`Could not resolve base type ${baseName}`);\n const base: TypeIdentifier = {\n kind: \"complex-type\",\n package: baseFs.package_meta.name,\n version: baseFs.package_meta.version,\n name: baseName,\n url: baseUrl,\n };\n\n const fields = transformNestedElements(register, fhirSchema, path, element.elements ?? {}, logger);\n\n const nestedType: NestedTypeSchema = {\n identifier,\n base,\n fields,\n };\n nestedTypes.push(nestedType);\n }\n\n nestedTypes.sort((a, b) => a.identifier.url.localeCompare(b.identifier.url));\n\n return nestedTypes.length === 0 ? undefined : nestedTypes;\n}\n\nexport function extractNestedDependencies(nestedTypes: NestedTypeSchema[]): TypeIdentifier[] {\n const deps: TypeIdentifier[] = [];\n\n for (const nested of nestedTypes) {\n if (nested.base) {\n deps.push(nested.base);\n }\n\n for (const field of Object.values(nested.fields || {})) {\n if (\"type\" in field && field.type) {\n deps.push(field.type);\n }\n if (\"binding\" in field && field.binding) {\n deps.push(field.binding);\n }\n }\n }\n return deps;\n}\n","/**\n * Field Building Utilities\n *\n * Functions for transforming FHIRSchema elements into TypeSchema fields\n */\n\nimport type { FHIRSchemaDiscriminator, FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { Register } from \"@root/typeschema/register\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport { packageMetaToFhir } from \"@typeschema/types\";\nimport type {\n BindingIdentifier,\n EnumDefinition,\n Field,\n FieldSlice,\n FieldSlicing,\n Name,\n RegularField,\n RichFHIRSchema,\n TypeIdentifier,\n ValueConstraint,\n} from \"../types\";\nimport { BINDABLE_TYPES, buildEnum } from \"./binding\";\nimport { mkBindingIdentifier, mkIdentifier } from \"./identifier\";\nimport { mkNestedIdentifier } from \"./nested-types\";\n\nfunction isRequired(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean {\n const fieldName = path[path.length - 1];\n if (!fieldName) throw new Error(`Internal error: fieldName is missing for path ${path.join(\"/\")}`);\n const parentPath = path.slice(0, -1);\n\n const requires = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url).flatMap((fs) => {\n if (parentPath.length === 0) return fs.required || [];\n if (!fs.elements) return [];\n let elem: RichFHIRSchema | FHIRSchemaElement | undefined = fs;\n for (const k of parentPath) {\n elem = elem?.elements?.[k];\n }\n return elem?.required || [];\n });\n return new Set(requires).has(fieldName);\n}\n\nfunction isExcluded(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean {\n const fieldName = path[path.length - 1];\n if (!fieldName) throw new Error(`Internal error: fieldName is missing for path ${path.join(\"/\")}`);\n const parentPath = path.slice(0, -1);\n\n const requires = register.resolveFsGenealogy(fhirSchema.package_meta, fhirSchema.url).flatMap((fs) => {\n if (parentPath.length === 0) return fs.excluded || [];\n if (!fs.elements) return [];\n let elem: RichFHIRSchema | FHIRSchemaElement | undefined = fs;\n for (const k of parentPath) {\n elem = elem?.elements?.[k];\n }\n return elem?.excluded || [];\n });\n\n return new Set(requires).has(fieldName);\n}\n\nconst buildReferences = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n element: FHIRSchemaElement,\n): TypeIdentifier[] | undefined => {\n if (!element.refers) return undefined;\n return element.refers.map((ref) => {\n const curl = register.ensureSpecializationCanonicalUrl(ref as Name);\n const fs = register.resolveFs(fhirSchema.package_meta, curl);\n if (!fs) throw new Error(`Failed to resolve fs for ${curl}`);\n return mkIdentifier(fs);\n });\n};\n\nconst extractSliceFieldNames = (schema: FHIRSchemaElement): Pick<FieldSlice, \"required\" | \"excluded\" | \"elements\"> => {\n const required = new Set<string>();\n const excluded = new Set<string>();\n\n if (schema.required) {\n for (const name of schema.required) required.add(name);\n }\n if (schema.excluded) {\n for (const name of schema.excluded) excluded.add(name);\n }\n if (schema.elements) {\n for (const [name, element] of Object.entries(schema.elements)) {\n if (element.min !== undefined && element.min > 0) {\n required.add(name);\n }\n }\n }\n\n const elements = schema.elements ? Object.keys(schema.elements) : undefined;\n\n return {\n required: required.size > 0 ? Array.from(required) : undefined,\n excluded: excluded.size > 0 ? Array.from(excluded) : undefined,\n elements: elements && elements.length > 0 ? elements : undefined,\n };\n};\n\nconst isEmptyMatch = (match: unknown): boolean => {\n if (!match) return true;\n if (typeof match === \"object\" && Object.keys(match as object).length === 0) return true;\n return false;\n};\n\nconst setNestedValue = (obj: Record<string, unknown>, path: string[], value: unknown): void => {\n let current = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i] as string;\n if (!current[key] || typeof current[key] !== \"object\") {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n const lastKey = path[path.length - 1] as string;\n current[lastKey] = value;\n};\n\n/** Navigate a remaining path through a match object to extract a leaf value */\nconst navigateMatch = (match: Record<string, unknown>, remainingPath: string[]): unknown => {\n let value: unknown = match;\n for (const seg of remainingPath) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n value = (value as Record<string, unknown>)[seg];\n } else {\n return undefined;\n }\n }\n return value;\n};\n\nconst collectDiscriminatorValue = (\n schema: FHIRSchemaElement,\n segments: string[],\n index: number,\n result: Record<string, unknown>,\n): void => {\n if (index >= segments.length || !schema.elements) return;\n\n const segment = segments[index] as string;\n const element = schema.elements[segment];\n if (!element) return;\n\n // Leaf: element has a fixed value\n if (index === segments.length - 1 && element.fixed?.value !== undefined) {\n setNestedValue(result, segments, element.fixed.value);\n return;\n }\n\n // Element has slicing with sub-slices — collect match values from required slices\n if (element.slicing?.slices) {\n const remainingSegments = segments.slice(index + 1);\n for (const subSlice of Object.values(element.slicing.slices)) {\n if (!subSlice.min || subSlice.min < 1 || !subSlice.match || typeof subSlice.match !== \"object\") continue;\n const match = subSlice.match as Record<string, unknown>;\n if (Object.keys(match).length === 0) continue;\n\n if (remainingSegments.length > 0) {\n const value = navigateMatch(match, remainingSegments);\n if (value !== undefined) setNestedValue(result, segments, value);\n } else {\n setNestedValue(result, segments.slice(0, index + 1), match);\n }\n }\n return;\n }\n\n // Continue navigating deeper\n collectDiscriminatorValue(element, segments, index + 1, result);\n};\n\n/**\n * For type discriminators, navigate the discriminator path through schema.elements\n * and read the `type` field. If type is a simple name (not a URL), treat as FHIR\n * resource type and set `{ <path>: { resourceType: \"<type>\" } }`.\n */\nconst computeTypeDiscriminatorMatch = (\n path: string,\n schema: FHIRSchemaElement,\n result: Record<string, unknown>,\n): void => {\n if (path === \"$this\") return;\n const segments = path.split(\".\");\n let elem: FHIRSchemaElement | undefined = schema;\n for (const seg of segments) {\n elem = elem?.elements?.[seg];\n if (!elem) return;\n }\n const typeName = elem.type;\n if (!typeName || typeName.includes(\"/\")) return;\n setNestedValue(result, segments, { resourceType: typeName });\n};\n\n/**\n * Computes match values by navigating the slice's schema elements along discriminator paths.\n * Used when a slice has an empty match but the discriminator values are nested deeper\n * (e.g., component slices in BP where the discriminator crosses a nested slicing boundary).\n */\n\nconst computeMatchFromSchema = (\n discriminators: FHIRSchemaDiscriminator[],\n schema: FHIRSchemaElement | undefined,\n): Record<string, unknown> | undefined => {\n if (!schema || !discriminators || discriminators.length === 0) return undefined;\n\n const result: Record<string, unknown> = {};\n for (const disc of discriminators) {\n if (disc.type === \"type\") {\n computeTypeDiscriminatorMatch(disc.path, schema, result);\n } else {\n if (!schema.elements) continue;\n const segments = disc.path.split(\".\");\n collectDiscriminatorValue(schema, segments, 0, result);\n }\n }\n return Object.keys(result).length > 0 ? result : undefined;\n};\n\nconst buildSlicing = (element: FHIRSchemaElement): FieldSlicing | undefined => {\n const slicing = element.slicing;\n if (!slicing) return undefined;\n\n const slices: Record<string, FieldSlice> = {};\n for (const [name, slice] of Object.entries(slicing.slices ?? {})) {\n if (!slice) continue;\n const { required, excluded, elements } = slice.schema ? extractSliceFieldNames(slice.schema) : {};\n slices[name] = {\n min: slice.min,\n max: slice.max,\n match: isEmptyMatch(slice.match)\n ? computeMatchFromSchema(slicing.discriminator ?? [], slice.schema)\n : (slice.match as Record<string, unknown> | undefined),\n required,\n excluded,\n elements,\n };\n }\n\n return {\n discriminator: slicing.discriminator ?? [],\n rules: slicing.rules,\n ordered: slicing.ordered,\n slices: Object.keys(slices).length > 0 ? slices : undefined,\n };\n};\n\nexport function buildFieldType(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLog,\n): TypeIdentifier | undefined {\n if (element.elementReference) {\n const refPath = element.elementReference\n .slice(1) // drop canonicalUrl\n .filter((_, i) => i % 2 === 1); // drop `elements` from path\n return mkNestedIdentifier(register, fhirSchema, refPath);\n } else if (element.type) {\n const url = register.ensureSpecializationCanonicalUrl(element.type);\n const fieldFs = register.resolveFs(fhirSchema.package_meta, url);\n if (!fieldFs)\n throw new Error(\n `Could not resolve field type: <${fhirSchema.url}>.${path.join(\".\")}: <${element.type}> (pkg: '${packageMetaToFhir(fhirSchema.package_meta)}'))`,\n );\n return mkIdentifier(fieldFs);\n } else if (element.choices) {\n return undefined;\n } else if (fhirSchema.derivation === \"constraint\") {\n return undefined; // FIXME: should be removed\n } else {\n // Some packages (e.g., simplifier.core.r4.*) have incomplete element definitions\n // Log a warning but continue processing instead of throwing\n logger?.dryWarn(\n \"#fieldTypeNotFound\",\n `Can't recognize element type: <${fhirSchema.url}>.${path.join(\".\")} (pkg: '${packageMetaToFhir(fhirSchema.package_meta)}'): missing type info`,\n );\n return undefined;\n }\n}\n\nexport const mkField = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n logger?: CodegenLog,\n rawElement?: FHIRSchemaElement,\n): Field => {\n let binding: BindingIdentifier | undefined;\n let enumResult: EnumDefinition | undefined;\n if (element.binding) {\n binding = mkBindingIdentifier(fhirSchema, path, element);\n\n if (BINDABLE_TYPES.has(element.type ?? \"\")) {\n enumResult = buildEnum(register, fhirSchema, element, logger);\n }\n }\n\n const fieldType = buildFieldType(register, fhirSchema, path, element, logger);\n // TODO: should be an exception\n if (!fieldType)\n logger?.dryWarn(\n \"#fieldTypeNotFound\",\n `Field type not found for '${fhirSchema.url}#${path.join(\".\")}' (${fhirSchema.derivation})`,\n );\n\n let valueConstraint: ValueConstraint | undefined;\n if (element.pattern) {\n valueConstraint = { kind: \"pattern\", type: element.pattern.type, value: element.pattern.value };\n } else if (element.fixed) {\n valueConstraint = { kind: \"fixed\", type: element.fixed.type, value: element.fixed.value };\n }\n\n // Auto-populate valueConstraint for CodeableConcept fields with fixed coding slices.\n // Uses rawElement because the resolved element snapshot has sub-elements stripped.\n const elemForCodingCheck = rawElement ?? element;\n if (!valueConstraint && elemForCodingCheck.elements?.coding?.slicing?.slices) {\n const codingSlices = elemForCodingCheck.elements.coding.slicing.slices;\n const allSliceValues = Object.values(codingSlices);\n const allRequired =\n allSliceValues.length > 0 &&\n allSliceValues.every(\n (s) =>\n s.min !== undefined &&\n s.min >= 1 &&\n s.match &&\n typeof s.match === \"object\" &&\n Object.keys(s.match as object).length > 0,\n );\n if (allRequired) {\n const codingValues = allSliceValues.map((s) => s.match as import(\"@atomic-ehr/fhirschema\").FHIRValue);\n valueConstraint = {\n kind: \"fixed\",\n type: \"CodeableConcept\",\n value: {\n coding: codingValues.length === 1 ? [codingValues[0]] : codingValues,\n } as unknown as import(\"@atomic-ehr/fhirschema\").FHIRValue,\n };\n }\n }\n\n return {\n type: fieldType as TypeIdentifier,\n required: isRequired(register, fhirSchema, path),\n excluded: isExcluded(register, fhirSchema, path),\n\n reference: buildReferences(register, fhirSchema, element),\n\n array: element.array || false,\n min: element.min,\n max: element.max,\n slicing: buildSlicing(element),\n\n choices: element.choices,\n choiceOf: element.choiceOf,\n\n binding: binding,\n enum: enumResult,\n valueConstraint,\n mustSupport: element.mustSupport,\n };\n};\n\nexport function mkNestedField(\n register: Register,\n fhirSchema: RichFHIRSchema,\n path: string[],\n element: FHIRSchemaElement,\n): RegularField {\n const nestedIdentifier = mkNestedIdentifier(register, fhirSchema, path);\n return {\n type: nestedIdentifier,\n array: element.array || false,\n required: isRequired(register, fhirSchema, path),\n excluded: isExcluded(register, fhirSchema, path),\n slicing: buildSlicing(element),\n };\n}\n","/**\n * Profile Extension Extraction\n *\n * Extracts ProfileExtension data from FHIR schemas with derivation === \"constraint\".\n * Handles both legacy sub-extension format (extension:name) and modern slicing format.\n */\n\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport type { Register } from \"@root/typeschema/register\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport {\n type CanonicalUrl,\n concatIdentifiers,\n type ExtensionSubField,\n type ProfileExtension,\n type ProfileIdentifier,\n type RichFHIRSchema,\n type TypeIdentifier,\n} from \"@typeschema/types\";\n\nimport { buildFieldType } from \"./field-builder\";\nimport { mkIdentifier } from \"./identifier\";\n\nconst extractExtensionValueFieldTypes = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n extensionUrl: CanonicalUrl,\n logger?: CodegenLog,\n): TypeIdentifier[] | undefined => {\n const extensionSchema = register.resolveFs(fhirSchema.package_meta, extensionUrl);\n if (!extensionSchema?.elements) return undefined;\n\n const valueFieldTypes: TypeIdentifier[] = [];\n for (const [key, element] of Object.entries(extensionSchema.elements)) {\n if (element.choiceOf !== \"value\" && !key.startsWith(\"value\")) continue;\n const fieldType = buildFieldType(register, extensionSchema, [key], element, logger);\n if (fieldType) valueFieldTypes.push(fieldType);\n }\n\n return concatIdentifiers(valueFieldTypes);\n};\n\nconst extractLegacySubExtensions = (\n register: Register,\n extensionSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): ExtensionSubField[] => {\n const subExtensions: ExtensionSubField[] = [];\n if (!extensionSchema.elements) return subExtensions;\n\n for (const [key, element] of Object.entries(extensionSchema.elements)) {\n if (!key.startsWith(\"extension:\")) continue;\n\n const sliceName = key.split(\":\")[1];\n if (!sliceName) continue;\n\n let valueType: TypeIdentifier | undefined;\n for (const [elemKey, elemValue] of Object.entries(element.elements ?? {})) {\n if (elemValue.choiceOf !== \"value\" && !elemKey.startsWith(\"value\")) continue;\n valueType = buildFieldType(register, extensionSchema, [key, elemKey], elemValue, logger);\n if (valueType) break;\n }\n\n subExtensions.push({\n name: sliceName,\n url: element.url ?? sliceName,\n valueFieldType: valueType,\n min: element.min,\n max: element.max !== undefined ? String(element.max) : undefined,\n });\n }\n return subExtensions;\n};\n\nconst extractSlicingSubExtensions = (\n register: Register,\n extensionSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): ExtensionSubField[] => {\n const subExtensions: ExtensionSubField[] = [];\n const extensionElement = extensionSchema.elements?.extension as any;\n const slices = extensionElement?.slicing?.slices;\n if (!slices || typeof slices !== \"object\") return subExtensions;\n\n for (const [sliceName, sliceData] of Object.entries(slices)) {\n const slice = sliceData as any;\n const schema = slice.schema;\n if (!schema) continue;\n\n let valueType: TypeIdentifier | undefined;\n for (const [elemKey, elemValue] of Object.entries(schema.elements ?? {})) {\n const elem = elemValue as any;\n if (elem.choiceOf !== \"value\" && !elemKey.startsWith(\"value\")) continue;\n valueType = buildFieldType(register, extensionSchema, [elemKey], elem, logger);\n if (valueType) break;\n }\n\n subExtensions.push({\n name: sliceName,\n url: slice.match?.url ?? sliceName,\n valueFieldType: valueType,\n min: schema._required ? 1 : (schema.min ?? 0),\n // biome-ignore lint/style/noNestedTernary : okay here\n max: schema.max !== undefined ? String(schema.max) : schema.array ? \"*\" : \"1\",\n });\n }\n return subExtensions;\n};\n\nconst extractSubExtensions = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n extensionUrl: CanonicalUrl,\n logger?: CodegenLog,\n): ExtensionSubField[] | undefined => {\n const extensionSchema = register.resolveFs(fhirSchema.package_meta, extensionUrl);\n if (!extensionSchema?.elements) return undefined;\n\n const legacySubs = extractLegacySubExtensions(register, extensionSchema, logger);\n const slicingSubs = extractSlicingSubExtensions(register, extensionSchema, logger);\n const subExtensions = [...legacySubs, ...slicingSubs];\n\n return subExtensions.length > 0 ? subExtensions : undefined;\n};\n\nexport const extractProfileExtensions = (\n register: Register,\n fhirSchema: RichFHIRSchema,\n logger?: CodegenLog,\n): ProfileExtension[] | undefined => {\n const extensions: ProfileExtension[] = [];\n\n const addExtensionEntry = (path: string[], name: string, schema: FHIRSchemaElement) => {\n let url = schema.url as CanonicalUrl | undefined;\n let valueFieldTypes = url ? extractExtensionValueFieldTypes(register, fhirSchema, url, logger) : undefined;\n const subExtensions = url ? extractSubExtensions(register, fhirSchema, url, logger) : undefined;\n\n // For extension profiles, sub-extension entries may lack a url.\n // Fall back to slicing data to extract the url and value type.\n if (!url) {\n const sliceSchema = (fhirSchema.elements?.extension as any)?.slicing?.slices?.[name]?.schema;\n if (sliceSchema) {\n url = (sliceSchema.elements?.url?.fixed?.value ?? name) as CanonicalUrl;\n for (const [elemKey, elemValue] of Object.entries(sliceSchema.elements ?? {})) {\n const elem = elemValue as FHIRSchemaElement;\n if (elem.choiceOf === \"value\" || elemKey.startsWith(\"value\")) {\n const ft = buildFieldType(register, fhirSchema, [elemKey], elem, logger);\n if (ft) {\n valueFieldTypes = [ft];\n break;\n }\n }\n }\n }\n }\n\n const isComplex = subExtensions && subExtensions.length > 0;\n const extFs = url ? register.resolveFs(fhirSchema.package_meta, url) : undefined;\n const profile = extFs ? (mkIdentifier(extFs) as ProfileIdentifier) : undefined;\n\n extensions.push({\n name,\n path: [...path, \"extension\"].join(\".\"),\n url,\n profile,\n min: schema.min,\n max: schema.max !== undefined ? String(schema.max) : undefined,\n mustSupport: schema.mustSupport,\n valueFieldTypes,\n subExtensions,\n isComplex,\n });\n };\n\n const walkElement = (path: string[], element: Pick<FHIRSchemaElement, \"extensions\" | \"elements\">) => {\n if (element.extensions) {\n for (const [name, schema] of Object.entries(element.extensions)) {\n addExtensionEntry(path, name, schema);\n }\n }\n if (element.elements) {\n for (const [key, child] of Object.entries(element.elements)) {\n walkElement([...path, key], child);\n }\n }\n };\n\n walkElement([], fhirSchema);\n\n const seen = new Set<string>();\n const deduped = extensions.filter((ext) => {\n const key = `${ext.url}:${ext.path}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n return deduped.length === 0 ? undefined : deduped;\n};\n","/**\n * Main FHIRSchema to TypeSchema Transformer\n *\n * Core transformation logic for converting FHIRSchema to TypeSchema format\n */\n\nimport assert from \"node:assert\";\nimport type { FHIRSchemaElement } from \"@atomic-ehr/fhirschema\";\nimport { shouldSkipCanonical } from \"@root/typeschema/skip-hack\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport type { Register } from \"@typeschema/register\";\nimport {\n concatIdentifiers,\n extractExtensionDeps,\n type Field,\n type Identifier,\n isNestedIdentifier,\n type NestedTypeSchema,\n type ProfileIdentifier,\n packageMetaToFhir,\n type RichFHIRSchema,\n type RichValueSet,\n type SpecializationTypeSchema,\n type TypeIdentifier,\n type TypeSchema,\n type ValueSetTypeSchema,\n} from \"@typeschema/types\";\n\nimport { collectBindingSchemas, extractValueSetConceptsByUrl } from \"./binding\";\nimport { mkField, mkNestedField } from \"./field-builder\";\nimport { mkIdentifier, mkValueSetIdentifierByUrl } from \"./identifier\";\nimport { extractNestedDependencies, isNestedElement, mkNestedTypes } from \"./nested-types\";\nimport { extractProfileExtensions } from \"./profile-extensions\";\n\nexport function mkFields(\n register: Register,\n fhirSchema: RichFHIRSchema,\n parentPath: string[],\n elements: Record<string, FHIRSchemaElement> | undefined,\n logger?: CodegenLog,\n): Record<string, Field> | undefined {\n if (!elements) return undefined;\n\n const fields: Record<string, Field> = {};\n for (const key of register.getAllElementKeys(elements)) {\n const path = [...parentPath, key];\n const elemSnapshot = register.resolveElementSnapshot(fhirSchema, path);\n const fcurl = elemSnapshot.type ? register.ensureSpecializationCanonicalUrl(elemSnapshot.type) : undefined;\n if (fcurl && shouldSkipCanonical(fhirSchema.package_meta, fcurl).shouldSkip) {\n logger?.warn(\n \"#skipCanonical\",\n `Skipping field ${path} for ${fcurl} due to skip hack ${shouldSkipCanonical(fhirSchema.package_meta, fcurl).reason}`,\n );\n continue;\n }\n if (isNestedElement(register, fhirSchema, path, elemSnapshot, elements[key])) {\n fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot);\n } else {\n fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger, elements[key]);\n }\n }\n\n return fields;\n}\n\nfunction extractFieldDependencies(fields: Record<string, Field>): TypeIdentifier[] {\n const deps: TypeIdentifier[] = [];\n\n for (const field of Object.values(fields)) {\n if (\"type\" in field && field.type) {\n deps.push(field.type);\n }\n if (\"binding\" in field && field.binding) {\n deps.push(field.binding);\n }\n }\n\n return deps;\n}\n\nexport async function transformValueSet(\n register: Register,\n valueSet: RichValueSet,\n logger?: CodegenLog,\n): Promise<ValueSetTypeSchema> {\n if (!valueSet.url) throw new Error(\"ValueSet URL is required\");\n\n const identifier = mkValueSetIdentifierByUrl(register, valueSet.package_meta, valueSet.url);\n const concept = extractValueSetConceptsByUrl(register, valueSet.package_meta, valueSet.url, logger);\n return {\n identifier: identifier,\n description: valueSet.description,\n concept: concept,\n compose: !concept ? valueSet.compose : undefined,\n };\n}\n\nconst collectRawDeps = (\n base: TypeIdentifier | undefined,\n fields: Record<string, Field> | undefined,\n nestedTypes: NestedTypeSchema[] | undefined,\n): TypeIdentifier[] => {\n const deps: TypeIdentifier[] = [];\n if (base) deps.push(base);\n if (fields) deps.push(...extractFieldDependencies(fields));\n if (nestedTypes) deps.push(...extractNestedDependencies(nestedTypes));\n return deps;\n};\n\nexport const extractDependencies = (\n identifier: Identifier,\n base: TypeIdentifier | undefined,\n fields: Record<string, Field> | undefined,\n nestedTypes: NestedTypeSchema[] | undefined,\n): Identifier[] | undefined => {\n const deps = collectRawDeps(base, fields, nestedTypes);\n\n const filtered = deps.filter((dep): dep is Identifier => {\n if (dep.url === identifier.url) return false;\n if (isNestedIdentifier(dep)) return false;\n return true;\n });\n\n return concatIdentifiers(filtered);\n};\n\nexport const extractProfileDependencies = (\n identifier: ProfileIdentifier,\n base: TypeIdentifier | undefined,\n fields: Record<string, Field> | undefined,\n nestedTypes: NestedTypeSchema[] | undefined,\n): TypeIdentifier[] | undefined => {\n const deps = collectRawDeps(base, fields, nestedTypes);\n const filtered = deps.filter((dep) => dep.url !== identifier.url);\n return concatIdentifiers(filtered);\n};\n\nexport function transformFhirSchema(register: Register, fhirSchema: RichFHIRSchema, logger?: CodegenLog): TypeSchema[] {\n let base: Identifier | undefined;\n if (fhirSchema.base) {\n const baseFs = register.resolveFs(\n fhirSchema.package_meta,\n register.ensureSpecializationCanonicalUrl(fhirSchema.base),\n );\n if (!baseFs)\n throw new Error(\n `Base resource not found '${fhirSchema.base}' for <${fhirSchema.url}> from ${packageMetaToFhir(fhirSchema.package_meta)}`,\n );\n const baseId = mkIdentifier(baseFs);\n assert(!isNestedIdentifier(baseId), `Unexpected nested base for ${fhirSchema.url}`);\n base = baseId;\n }\n\n const fields = mkFields(register, fhirSchema, [], fhirSchema.elements, logger);\n const nested = mkNestedTypes(register, fhirSchema, logger);\n const bindingSchemas = collectBindingSchemas(register, fhirSchema, logger);\n\n if (fhirSchema.derivation === \"constraint\") {\n const identifier = mkIdentifier(fhirSchema);\n if (!base) throw new Error(`Profile ${fhirSchema.url} must have a base type`);\n const extensions = extractProfileExtensions(register, fhirSchema, logger);\n const extensionDeps = extensions?.flatMap(extractExtensionDeps);\n const rawDeps = extractProfileDependencies(identifier, base, fields, nested);\n return [\n {\n identifier,\n base,\n fields,\n nested,\n description: fhirSchema.description,\n dependencies: concatIdentifiers(rawDeps, extensionDeps),\n extensions,\n },\n ...bindingSchemas,\n ];\n }\n\n if (fhirSchema.kind === \"primitive-type\") {\n const identifier = mkIdentifier(fhirSchema);\n assert(base, `Primitive type ${fhirSchema.url} must have a base type`);\n return [\n {\n identifier,\n description: fhirSchema.description,\n base,\n dependencies: extractDependencies(identifier, base, fields, nested),\n },\n ...bindingSchemas,\n ];\n }\n\n const identifier = mkIdentifier(fhirSchema);\n const schema = {\n identifier,\n base,\n fields,\n nested,\n description: fhirSchema.description,\n dependencies: extractDependencies(identifier, base, fields, nested),\n typeFamily: undefined,\n } as SpecializationTypeSchema;\n return [schema, ...bindingSchemas];\n}\n","/**\n * TypeSchema Core Module\n *\n * Main entry point for the TypeSchema library providing core functions\n * for FHIR-to-TypeSchema generation, parsing, and validation.\n *\n * This module focuses on:\n * - Converting FHIR to TypeSchema format\n * - Reading TypeSchema documents\n * - Validating TypeSchema documents\n */\n\nimport type { CodegenLog } from \"@root/utils/log\";\nimport { transformFhirSchema, transformValueSet } from \"./core/transformer\";\nimport type { ResolveCollisionsConf, TypeSchemaCollisions } from \"./ir/types\";\nimport type { Register } from \"./register\";\nimport { shouldSkipCanonical } from \"./skip-hack\";\nimport type { CanonicalUrl, PkgName } from \"./types\";\nimport { hashSchema, packageMetaToFhir, type TypeSchema } from \"./types\";\n\n// Re-export core dependencies\nexport { shouldSkipCanonical, skipList } from \"./skip-hack\";\nexport type { TypeIdentifier as Identifier, TypeSchema } from \"./types\";\n\nexport interface GenerateTypeSchemasResult {\n schemas: TypeSchema[];\n collisions: TypeSchemaCollisions;\n}\n\ntype SchemaWithSource = {\n schema: TypeSchema;\n sourcePackage: PkgName;\n sourceCanonical: CanonicalUrl;\n};\n\nconst deduplicateSchemas = (\n schemasWithSources: SchemaWithSource[],\n resolveCollisions?: ResolveCollisionsConf,\n logger?: CodegenLog,\n): GenerateTypeSchemasResult => {\n // key -> hash\n const groups: Record<string, Record<string, { typeSchema: TypeSchema; sources: SchemaWithSource[] }>> = {};\n\n for (const item of schemasWithSources) {\n const key = `${item.schema.identifier.url}|${item.schema.identifier.package}`;\n const hash = hashSchema(item.schema);\n\n groups[key] ??= {};\n groups[key][hash] ??= { typeSchema: item.schema, sources: [] };\n groups[key][hash].sources.push(item);\n }\n\n const schemas: TypeSchema[] = [];\n const collisions: TypeSchemaCollisions = {};\n\n for (const versions of Object.values(groups)) {\n const sorted = Object.values(versions).sort((a, b) => b.sources.length - a.sources.length);\n const best = sorted[0];\n if (!best) continue;\n\n if (sorted.length > 1) {\n const url = best.typeSchema.identifier.url;\n const pkg = best.typeSchema.identifier.package;\n const preferredCanonical = resolveCollisions?.[url];\n\n if (preferredCanonical) {\n const allSources = sorted.flatMap((v) => v.sources);\n const match = sorted.find((v) =>\n v.sources.some(\n (s) =>\n s.sourceCanonical === preferredCanonical.canonical &&\n s.sourcePackage === preferredCanonical.package,\n ),\n );\n if (match) {\n schemas.push(match.typeSchema);\n } else {\n logger?.dryWarn(\n \"#resolveCollisionMiss\",\n `'${url}': preferred source '${preferredCanonical.canonical}' from '${preferredCanonical.package}' not found among variants: ${allSources.map((s) => `${s.sourceCanonical} (${s.sourcePackage})`).join(\", \")}`,\n );\n schemas.push(best.typeSchema);\n }\n } else {\n logger?.dryWarn(\"#duplicateSchema\", `'${url}' from '${pkg}' has ${sorted.length} versions`);\n schemas.push(best.typeSchema);\n }\n\n collisions[pkg] ??= {};\n collisions[pkg][url] = sorted.flatMap((v) =>\n v.sources.map((s) => ({\n typeSchema: v.typeSchema,\n sourcePackage: s.sourcePackage,\n sourceCanonical: s.sourceCanonical,\n })),\n );\n } else {\n schemas.push(best.typeSchema);\n }\n }\n\n return { schemas, collisions };\n};\n\nexport const generateTypeSchemas = async (\n register: Register,\n resolveCollisions?: ResolveCollisionsConf,\n logger?: CodegenLog,\n): Promise<GenerateTypeSchemasResult> => {\n const schemasWithSources: { schema: TypeSchema; sourcePackage: PkgName; sourceCanonical: CanonicalUrl }[] = [];\n\n for (const fhirSchema of register.allFs()) {\n const pkgId = packageMetaToFhir(fhirSchema.package_meta);\n\n const skipCheck = shouldSkipCanonical(fhirSchema.package_meta, fhirSchema.url);\n if (skipCheck.shouldSkip) {\n logger?.dryWarn(\"#skipCanonical\", `Skip ${fhirSchema.url} from ${pkgId}. Reason: ${skipCheck.reason}`);\n continue;\n }\n\n for (const schema of transformFhirSchema(register, fhirSchema, logger)) {\n schemasWithSources.push({\n schema,\n sourcePackage: pkgId,\n sourceCanonical: fhirSchema.url,\n });\n }\n }\n\n for (const vsSchema of register.allVs()) {\n schemasWithSources.push({\n schema: await transformValueSet(register, vsSchema, logger),\n sourcePackage: packageMetaToFhir(vsSchema.package_meta),\n sourceCanonical: vsSchema.url,\n });\n }\n\n return deduplicateSchemas(schemasWithSources, resolveCollisions, logger);\n};\n","import {\n type CanonicalUrl,\n type Field,\n type Identifier,\n isChoiceDeclarationField,\n isLogicalTypeSchema,\n isPrimitiveTypeSchema,\n isProfileTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type NestedTypeSchema,\n type PkgName,\n type TypeIdentifier,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { LogicalPromotionConf } from \"./types\";\n\nexport const promoteLogical = (tsIndex: TypeSchemaIndex, promotes: LogicalPromotionConf): TypeSchemaIndex => {\n const promoteSets: Record<PkgName, Set<CanonicalUrl>> = Object.fromEntries(\n Object.entries(promotes).map(([pkg, urls]) => [pkg, new Set(urls)]),\n );\n\n const identifierToString = (i: TypeIdentifier): string => `${i.package}-${i.version}-${i.kind}-${i.url}`;\n const renames: Record<string, TypeIdentifier> = Object.fromEntries(\n tsIndex.schemas\n .map((schema) => {\n const promo = promoteSets[schema.identifier.package]?.has(schema.identifier.url);\n if (!promo) return undefined;\n if (!isLogicalTypeSchema(schema))\n throw new Error(`Unexpected schema kind: ${JSON.stringify(schema.identifier)}`);\n return [identifierToString(schema.identifier), { ...schema.identifier, kind: \"resource\" }] as const;\n })\n .filter((e) => e !== undefined),\n );\n const replace = (i: TypeIdentifier): TypeIdentifier => renames[identifierToString(i)] || i;\n const replaceInFields = (fields: Record<string, Field> | undefined) => {\n if (!fields) return undefined;\n return Object.fromEntries(\n Object.entries(fields).map(([k, f]) => {\n if (isChoiceDeclarationField(f)) return [k, f];\n return [k, { ...f, type: f.type ? replace(f.type as Identifier) : undefined }];\n }),\n );\n };\n\n const schemas = tsIndex.schemas.map((schema) => {\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema)) return schema;\n\n const cloned = JSON.parse(JSON.stringify(schema));\n cloned.identifier = replace(cloned.identifier);\n cloned.dependencies = cloned.dependencies?.map(replace);\n if (isSpecializationTypeSchema(cloned) || isProfileTypeSchema(cloned)) {\n cloned.fields = replaceInFields(cloned.fields);\n cloned.nested = cloned.nested?.map((n: NestedTypeSchema) => {\n return {\n ...n,\n base: replace(n.base),\n fields: replaceInFields(n.fields),\n };\n });\n }\n return cloned;\n });\n\n const promotedIndex = tsIndex.replaceSchemas(schemas);\n promotedIndex.irReport().logicalPromotion = {\n packages: Object.fromEntries(\n Object.entries(promotes).map(([pkgName, urls]) => [pkgName, { promotedCanonicals: [...urls].sort() }]),\n ),\n };\n return promotedIndex;\n};\n","import assert from \"node:assert\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport { extractDependencies, extractProfileDependencies } from \"../core/transformer\";\nimport {\n type CanonicalUrl,\n concatIdentifiers,\n extractExtensionDeps,\n type Field,\n isBindingSchema,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isNestedIdentifier,\n isNestedTypeSchema,\n isNotChoiceDeclarationField,\n isPrimitiveTypeSchema,\n isProfileTypeSchema,\n isSpecializationTypeSchema,\n isValueSetTypeSchema,\n type PkgName,\n type ProfileTypeSchema,\n type SpecializationTypeSchema,\n type TypeSchema,\n} from \"../types\";\nimport type { TypeSchemaIndex } from \"../utils\";\nimport type { IrReport, TreeShakeConf, TreeShakeReport, TreeShakeRule } from \"./types\";\n\nconst ensureIrReport = (indexOrReport: TypeSchemaIndex | IrReport): IrReport => {\n if (\"irReport\" in indexOrReport && typeof indexOrReport.irReport === \"function\") {\n return indexOrReport.irReport();\n } else {\n return indexOrReport as IrReport;\n }\n};\n\nexport const rootTreeShakeReadme = (report: TypeSchemaIndex | IrReport) => {\n const { treeShake: treeShakeReport } = ensureIrReport(report);\n assert(treeShakeReport);\n const lines = [\"# Tree Shake Report\", \"\"];\n if (treeShakeReport.skippedPackages.length === 0) lines.push(\"All packages are included.\");\n else lines.push(\"Skipped packages:\", \"\");\n for (const pkgName of treeShakeReport.skippedPackages) {\n lines.push(`- ${pkgName}`);\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n};\n\nexport const packageTreeShakeReadme = (report: TypeSchemaIndex | IrReport, pkgName: PkgName) => {\n const { treeShake: treeShakeReport } = ensureIrReport(report);\n assert(treeShakeReport);\n const lines = [`# Package: ${pkgName}`, \"\"];\n assert(treeShakeReport.packages[pkgName]);\n lines.push(\"## Canonical Fields Changes\", \"\");\n if (Object.keys(treeShakeReport.packages[pkgName].canonicals).length === 0) {\n lines.push(\"All canonicals translated as is.\", \"\");\n } else {\n for (const [canonicalUrl, { skippedFields }] of Object.entries(treeShakeReport.packages[pkgName].canonicals)) {\n lines.push(`- <${canonicalUrl}>`);\n if (skippedFields.length === 0) {\n lines.push(\" - All fields translated as is.\", \"\");\n } else {\n lines.push(` - Skipped fields: ${skippedFields.map((f: string) => `\\`${f}\\``).join(\", \")}`);\n lines.push(\"\");\n }\n }\n lines.push(\"\");\n }\n lines.push(\"## Skipped Canonicals\", \"\");\n if (treeShakeReport.packages[pkgName].skippedCanonicals.length === 0) {\n lines.push(\"No skipped canonicals\");\n } else {\n lines.push(\"Skipped canonicals:\", \"\");\n for (const canonicalUrl of treeShakeReport.packages[pkgName].skippedCanonicals) {\n lines.push(`- <${canonicalUrl}>`);\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n};\n\nconst mutableSelectFields = (schema: SpecializationTypeSchema | ProfileTypeSchema, selectFields: string[]) => {\n const selectedFields: Record<string, Field> = {};\n\n const selectPolimorphic: Record<string, { declaration?: string[]; instances?: string[] }> = {};\n for (const fieldName of selectFields) {\n const field = schema.fields?.[fieldName];\n if (!schema.fields || !field) throw new Error(`Field ${fieldName} not found`);\n\n if (isChoiceDeclarationField(field)) {\n if (!selectPolimorphic[fieldName]) selectPolimorphic[fieldName] = {};\n selectPolimorphic[fieldName].declaration = field.choices;\n } else if (isChoiceInstanceField(field)) {\n const choiceName = field.choiceOf;\n if (!selectPolimorphic[choiceName]) selectPolimorphic[choiceName] = {};\n selectPolimorphic[choiceName].instances = [...(selectPolimorphic[choiceName].instances ?? []), fieldName];\n } else {\n selectedFields[fieldName] = field;\n }\n }\n\n for (const [choiceName, { declaration, instances }] of Object.entries(selectPolimorphic)) {\n const choices = instances ?? declaration;\n assert(choices);\n for (const choiceInstanceName of choices) {\n const field = schema.fields?.[choiceInstanceName];\n assert(field);\n selectedFields[choiceInstanceName] = field;\n }\n const decl = schema.fields?.[choiceName];\n assert(decl);\n selectedFields[choiceName] = { ...decl, choices: choices };\n }\n schema.fields = selectedFields;\n};\n\nconst mutableIgnoreFields = (schema: SpecializationTypeSchema | ProfileTypeSchema, ignoreFields: string[]) => {\n for (const fieldName of ignoreFields) {\n const field = schema.fields?.[fieldName];\n if (!schema.fields || !field) throw new Error(`Field ${fieldName} not found`);\n if (schema.fields) {\n if (isChoiceDeclarationField(field)) {\n for (const choiceName of field.choices) {\n delete schema.fields[choiceName];\n }\n }\n\n if (isChoiceInstanceField(field)) {\n const choiceDeclaration = schema.fields[field.choiceOf];\n assert(isChoiceDeclarationField(choiceDeclaration));\n choiceDeclaration.choices = choiceDeclaration.choices.filter((c) => c !== fieldName);\n if (choiceDeclaration.choices.length === 0) {\n delete schema.fields[field.choiceOf];\n }\n }\n\n delete schema.fields[fieldName];\n }\n }\n};\n\nconst mutableIgnoreExtensions = (schema: ProfileTypeSchema, ignoreExtensions: string[]) => {\n if (!schema.extensions) return;\n for (const url of ignoreExtensions) {\n if (!schema.extensions.some((ext) => ext.url === url))\n throw new Error(`Extension ${url} not found in profile ${schema.identifier.url}`);\n }\n schema.extensions = schema.extensions.filter((ext) => !ext.url || !ignoreExtensions.includes(ext.url));\n if (schema.extensions.length === 0) schema.extensions = undefined;\n};\n\nconst mutableFillReport = (report: TreeShakeReport, tsIndex: TypeSchemaIndex, shakedIndex: TypeSchemaIndex) => {\n const packages = Object.keys(tsIndex.schemasByPackage);\n const shakedPackages = Object.keys(shakedIndex.schemasByPackage);\n const skippedPackages = packages.filter((pkg) => !shakedPackages.includes(pkg));\n report.skippedPackages = skippedPackages;\n\n for (const [pkgName, shakedSchemas] of Object.entries(shakedIndex.schemasByPackage)) {\n if (skippedPackages.includes(pkgName)) continue;\n const tsSchemas = tsIndex.schemasByPackage[pkgName];\n assert(tsSchemas);\n report.packages[pkgName] = {\n skippedCanonicals: tsSchemas\n .filter((schema) => !shakedSchemas.includes(schema))\n .map((schema) => schema.identifier.url)\n .sort(),\n canonicals: Object.fromEntries(\n shakedSchemas\n .map((shakedSchema) => {\n const schema = tsIndex.resolve(shakedSchema.identifier);\n assert(schema);\n if (!isSpecializationTypeSchema(schema)) return undefined;\n assert(isSpecializationTypeSchema(shakedSchema));\n if (!schema.fields) return undefined;\n if (!shakedSchema.fields) {\n return [shakedSchema.identifier.url, Object.keys(schema.fields)];\n }\n const shakedFieldNames = Object.keys(shakedSchema.fields);\n const skippedFields = Object.keys(schema.fields)\n .filter((field) => !shakedFieldNames.includes(field))\n .sort();\n if (skippedFields.length === 0) return undefined;\n return [shakedSchema.identifier.url, { skippedFields }] as const;\n })\n .filter((e): e is readonly [CanonicalUrl, { skippedFields: string[] }] => e !== undefined),\n ),\n };\n }\n};\n\nexport const treeShakeTypeSchema = (schema: TypeSchema, rule: TreeShakeRule, _logger?: CodegenLog): TypeSchema => {\n schema = JSON.parse(JSON.stringify(schema));\n if (isPrimitiveTypeSchema(schema) || isValueSetTypeSchema(schema) || isBindingSchema(schema)) return schema;\n\n if (rule.selectFields) {\n if (rule.ignoreFields) throw new Error(\"Cannot use both ignoreFields and selectFields in the same rule\");\n mutableSelectFields(schema, rule.selectFields);\n }\n\n if (rule.ignoreFields) {\n if (rule.selectFields) throw new Error(\"Cannot use both ignoreFields and selectFields in the same rule\");\n mutableIgnoreFields(schema, rule.ignoreFields);\n }\n\n if (isProfileTypeSchema(schema) && rule.ignoreExtensions) {\n mutableIgnoreExtensions(schema, rule.ignoreExtensions);\n }\n\n if (schema.nested) {\n const usedTypes = new Set<CanonicalUrl>();\n const collectUsedNestedTypes = (s: { fields?: Record<string, Field> }) => {\n Object.values(s.fields ?? {})\n .filter(isNotChoiceDeclarationField)\n .filter((f) => isNestedIdentifier(f.type))\n .forEach((f) => {\n const url = f.type.url;\n if (!usedTypes.has(url)) {\n usedTypes.add(url);\n const nestedTypeDef = schema.nested?.find((f) => f.identifier.url === url);\n assert(nestedTypeDef);\n collectUsedNestedTypes(nestedTypeDef);\n }\n });\n };\n collectUsedNestedTypes(schema);\n schema.nested = schema.nested.filter((n) => usedTypes.has(n.identifier.url));\n }\n\n if (isProfileTypeSchema(schema)) {\n const extDeps = schema.extensions?.flatMap(extractExtensionDeps);\n schema.dependencies = concatIdentifiers(\n extractProfileDependencies(schema.identifier, schema.base, schema.fields, schema.nested),\n extDeps,\n );\n } else {\n assert(!isNestedIdentifier(schema.identifier));\n schema.dependencies = extractDependencies(schema.identifier, schema.base, schema.fields, schema.nested);\n }\n return schema;\n};\n\nexport const treeShake = (tsIndex: TypeSchemaIndex, treeShake: TreeShakeConf): TypeSchemaIndex => {\n const focusedSchemas: TypeSchema[] = [];\n for (const [pkgId, requires] of Object.entries(treeShake)) {\n for (const [url, rule] of Object.entries(requires)) {\n const schema = tsIndex.resolveByUrl(pkgId, url as CanonicalUrl);\n if (!schema || isNestedTypeSchema(schema)) throw new Error(`Schema not found for ${pkgId} ${url}`);\n const shaked = treeShakeTypeSchema(schema, rule);\n focusedSchemas.push(shaked);\n }\n }\n const collectDeps = (schemas: TypeSchema[], acc: Record<string, TypeSchema>): TypeSchema[] => {\n if (schemas.length === 0) return Object.values(acc);\n for (const schema of schemas) {\n acc[JSON.stringify(schema.identifier)] = schema;\n }\n\n const newSchemas: TypeSchema[] = [];\n\n for (const schema of schemas) {\n if (isSpecializationTypeSchema(schema) || isProfileTypeSchema(schema)) {\n if (!schema.dependencies) continue;\n schema.dependencies.forEach((dep) => {\n if (isNestedIdentifier(dep)) return;\n const depSchema = tsIndex.resolve(dep);\n if (!depSchema)\n throw new Error(\n `Dependent schema ${JSON.stringify(dep)} not found for ${JSON.stringify(schema.identifier)}`,\n );\n const id = JSON.stringify(depSchema.identifier);\n if (!acc[id]) newSchemas.push(depSchema);\n });\n // NOTE: nested types' deps are already included in the parent's dependencies\n // via extractNestedDependencies, so no need to collect them separately.\n }\n }\n return collectDeps(newSchemas, acc);\n };\n\n const shaked = collectDeps(focusedSchemas, {});\n\n const shakedIndex = tsIndex.replaceSchemas(shaked);\n const treeShakeReport: TreeShakeReport = { skippedPackages: [], packages: {} };\n const irReport = shakedIndex.irReport();\n irReport.treeShake = treeShakeReport;\n mutableFillReport(treeShakeReport, tsIndex, shakedIndex);\n return shakedIndex;\n};\n","import assert from \"node:assert\";\nimport * as Path from \"node:path\";\nimport type { RichFHIRSchema, RichStructureDefinition } from \"@root/typeschema/types\";\nimport { type CanonicalUrl, extractNameFromCanonical, type TypeSchema } from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport YAML from \"yaml\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport interface IntrospectionWriterOptions extends FileSystemWriterOptions {\n typeSchemas?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n typeTree?: string /** .json or .yaml file */;\n fhirSchemas?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n structureDefinitions?: string /** if .ndjson -- put in one file, else -- split into separated files*/;\n}\n\nconst normalizeFileName = (str: string): string => {\n const res = str.replace(/[^a-zA-Z0-9\\-_.@#()]/g, \"\");\n if (res.length === 0) return \"unknown\";\n return res;\n};\n\nconst typeSchemaToJson = (ts: TypeSchema, pretty: boolean): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(ts.identifier.package);\n const name = normalizeFileName(`${ts.identifier.name}(${extractNameFromCanonical(ts.identifier.url)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n genContent: () => JSON.stringify(ts, null, pretty ? 2 : undefined),\n };\n};\n\nconst fhirSchemaToJson = (fs: RichFHIRSchema, pretty: boolean): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(fs.package_meta.name);\n const name = normalizeFileName(`${fs.name}(${extractNameFromCanonical(fs.url)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n genContent: () => JSON.stringify(fs, null, pretty ? 2 : undefined),\n };\n};\n\nconst structureDefinitionToJson = (\n sd: RichStructureDefinition,\n pretty: boolean,\n): { filename: string; genContent: () => string } => {\n const pkgPath = normalizeFileName(sd.package_name ?? \"unknown\");\n const name = normalizeFileName(`${sd.name}(${extractNameFromCanonical(sd.url as CanonicalUrl)})`);\n const baseName = Path.join(pkgPath, name);\n\n return {\n filename: baseName,\n // HACK: for some reason ID may change between CI and local install\n genContent: () => JSON.stringify({ ...sd, id: undefined }, null, pretty ? 2 : undefined),\n };\n};\n\nexport class IntrospectionWriter extends FileSystemWriter<IntrospectionWriterOptions> {\n async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n this.logger()?.info(`IntrospectionWriter: Begin`);\n if (this.opts.typeTree) {\n await this.writeTypeTree(tsIndex);\n this.logger()?.info(`IntrospectionWriter: Type tree written to ${this.opts.typeTree}`);\n }\n\n if (this.opts.typeSchemas) {\n if (Path.extname(this.opts.typeSchemas) === \".ndjson\") {\n this.writeNdjson(tsIndex.schemas, this.opts.typeSchemas, typeSchemaToJson);\n } else {\n const items = tsIndex.schemas.map((ts) => typeSchemaToJson(ts, true));\n const seenFilenames = new Set<string>();\n const dedupedItems = items.filter((item) => {\n if (seenFilenames.has(item.filename)) return false;\n seenFilenames.add(item.filename);\n return true;\n });\n\n this.cd(this.opts.typeSchemas, () => {\n for (const { filename, genContent } of dedupedItems) {\n const fileName = `${filename}.json`;\n this.cd(Path.dirname(fileName), () => {\n this.cat(Path.basename(fileName), () => {\n this.write(genContent());\n });\n });\n }\n\n for (const [pkg, canonicals] of Object.entries(tsIndex.irReport().collisions ?? {})) {\n this.cd(`${normalizeFileName(pkg)}`, () => {\n for (const [canonical, entries] of Object.entries(canonicals)) {\n if (entries.length <= 1) continue;\n const firstEntry = entries[0];\n assert(firstEntry);\n const name = normalizeFileName(\n `${firstEntry.typeSchema.identifier.name}(${extractNameFromCanonical(canonical as CanonicalUrl)})`,\n );\n this.cd(Path.join(\"collisions\", name), () => {\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n this.cat(`${i + 1}.json`, () => {\n this.write(JSON.stringify(entry, null, 2));\n });\n }\n });\n }\n });\n }\n });\n }\n this.logger()?.info(\n `IntrospectionWriter: ${tsIndex.schemas.length} TypeSchema written to ${this.opts.typeSchemas}`,\n );\n }\n\n if (this.opts.fhirSchemas && tsIndex.register) {\n const outputPath = this.opts.fhirSchemas;\n const allFs = tsIndex.register.allFs();\n // Deduplicate FHIR schemas by URL (same schema can appear from different packages)\n const seenUrls = new Set<string>();\n const fhirSchemas = allFs.filter((fs) => {\n if (seenUrls.has(fs.url)) return false;\n seenUrls.add(fs.url);\n return true;\n });\n\n if (Path.extname(outputPath) === \".ndjson\") {\n this.writeNdjson(fhirSchemas, outputPath, fhirSchemaToJson);\n } else {\n this.writeJsonFiles(\n fhirSchemas.map((fs) => fhirSchemaToJson(fs, true)),\n outputPath,\n );\n }\n\n this.logger()?.info(`IntrospectionWriter: ${fhirSchemas.length} FHIR schema written to ${outputPath}`);\n }\n\n if (this.opts.structureDefinitions && tsIndex.register) {\n const outputPath = this.opts.structureDefinitions;\n const allSd = tsIndex.register.allSd();\n // Deduplicate SDs by URL (same SD can appear multiple times from different packages)\n const seenUrls = new Set<string>();\n const structureDefinitions = allSd.filter((sd) => {\n if (seenUrls.has(sd.url)) return false;\n seenUrls.add(sd.url);\n return true;\n });\n\n if (Path.extname(outputPath) === \".ndjson\") {\n this.writeNdjson(structureDefinitions, outputPath, structureDefinitionToJson);\n } else {\n this.writeJsonFiles(\n structureDefinitions.map((sd) => structureDefinitionToJson(sd, true)),\n outputPath,\n );\n }\n\n this.logger()?.info(\n `IntrospectionWriter: ${structureDefinitions.length} StructureDefinitions written to ${outputPath}`,\n );\n }\n }\n\n private async writeNdjson<T>(\n items: T[],\n outputFile: string,\n toJson: (item: T, pretty: boolean) => { filename: string; genContent: () => string },\n ): Promise<void> {\n this.cd(Path.dirname(outputFile), () => {\n this.cat(Path.basename(outputFile), () => {\n for (const item of items) {\n const { genContent } = toJson(item, false);\n this.write(`${genContent()}\\n`);\n }\n });\n });\n }\n\n private async writeJsonFiles(\n items: { filename: string; genContent: () => string }[],\n outputDir: string,\n ): Promise<void> {\n this.cd(outputDir, () => {\n for (const { filename, genContent } of items) {\n const fileName = `${filename}.json`;\n this.cd(Path.dirname(fileName), () => {\n this.cat(Path.basename(fileName), () => {\n this.write(genContent());\n });\n });\n }\n });\n }\n\n private async writeTypeTree(tsIndex: TypeSchemaIndex): Promise<void> {\n const filename = this.opts.typeTree;\n if (!filename) return;\n\n const tree = tsIndex.entityTree();\n const raw = filename.endsWith(\".yaml\") ? YAML.stringify(tree) : JSON.stringify(tree, undefined, 2);\n\n const dir = Path.dirname(filename);\n const file = Path.basename(filename);\n\n this.cd(dir, () => {\n this.cat(file, () => {\n this.write(raw);\n });\n });\n }\n}\n","import type { CanonicalUrl, PkgName } from \"@root/typeschema/types\";\nimport { extractNameFromCanonical } from \"@root/typeschema/types\";\nimport type {\n CollisionResolution,\n IrReport,\n ResolveCollisionsConf,\n TreeShakeReport,\n TypeSchemaCollisions,\n} from \"./types\";\n\ntype TreeShakePackageReport = TreeShakeReport[\"packages\"][PkgName];\ntype CollisionEntry = TypeSchemaCollisions[PkgName][CanonicalUrl][number];\n\nconst generateSkippedPackagesSection = (lines: string[], skippedPackages: string[]): void => {\n lines.push(\"## Skipped Packages\", \"\");\n for (const pkg of skippedPackages) {\n lines.push(`- ${pkg}`);\n }\n lines.push(\"\");\n};\n\nconst generatePackageSection = (\n lines: string[],\n pkgName: PkgName,\n treeShakePkg: TreeShakePackageReport | undefined,\n promotedCanonicals: string[] | undefined,\n): void => {\n lines.push(`## Package: \\`${pkgName}\\``, \"\");\n\n if (promotedCanonicals?.length) {\n lines.push(\"### Promoted Logical Models\", \"\");\n for (const canonical of promotedCanonicals) {\n lines.push(`- \\`${canonical}\\``);\n }\n lines.push(\"\");\n }\n\n if (!treeShakePkg) return;\n\n const canonicalsWithChanges = Object.entries(treeShakePkg.canonicals).filter(\n ([_, data]) => data.skippedFields.length > 0,\n );\n\n if (canonicalsWithChanges.length > 0) {\n lines.push(\"### Modified Canonicals\", \"\");\n for (const [canonical, data] of canonicalsWithChanges) {\n lines.push(`#### \\`${canonical}\\``, \"\");\n lines.push(\"Skipped fields:\", \"\");\n for (const field of data.skippedFields) {\n lines.push(`- \\`${field}\\``);\n }\n lines.push(\"\");\n }\n }\n\n if (treeShakePkg.skippedCanonicals.length > 0) {\n lines.push(\"### Skipped Canonicals\", \"\");\n for (const canonical of treeShakePkg.skippedCanonicals) {\n lines.push(`- \\`${canonical}\\``);\n }\n lines.push(\"\");\n }\n};\n\ntype VersionMark = \"selected\" | \"auto\" | undefined;\ntype VersionGroup = { entries: CollisionEntry[]; mark: VersionMark };\n\nconst groupCollisionVersions = (entries: CollisionEntry[], resolution?: CollisionResolution): VersionGroup[] => {\n const uniqueSchemas = new Map<string, CollisionEntry[]>();\n for (const entry of entries) {\n const key = JSON.stringify(entry.typeSchema);\n if (!uniqueSchemas.has(key)) uniqueSchemas.set(key, []);\n uniqueSchemas.get(key)?.push(entry);\n }\n\n const sorted = [...uniqueSchemas.values()].sort((a, b) => b.length - a.length);\n const markVersion = (group: CollisionEntry[], i: number): VersionMark => {\n if (resolution)\n return group.some(\n (e) => e.sourceCanonical === resolution.canonical && e.sourcePackage === resolution.package,\n )\n ? \"selected\"\n : undefined;\n return i === 0 ? \"auto\" : undefined;\n };\n return sorted.map((group, i) => ({ entries: group, mark: markVersion(group, i) }));\n};\n\nconst versionMarkLabel: Record<string, string> = { selected: \" (selected)\", auto: \" (auto)\" };\n\nconst generateCollisionVersionLines = (versions: VersionGroup[]): string[] => {\n let version = 1;\n return versions.map((v) => {\n const sourceList = v.entries\n .map((e) => {\n const name = extractNameFromCanonical(e.sourceCanonical as CanonicalUrl) ?? e.sourceCanonical;\n return `${name} (${e.sourcePackage})`;\n })\n .join(\", \");\n const mark = v.mark ? versionMarkLabel[v.mark] : \"\";\n return ` - Version ${version++}${mark}: ${sourceList}`;\n });\n};\n\nconst generateCollisionsSection = (\n lines: string[],\n collisions: IrReport[\"collisions\"],\n resolveCollisions?: ResolveCollisionsConf,\n): void => {\n if (!collisions) return;\n\n lines.push(\"## Schema Collisions\", \"\");\n lines.push(\"The following canonicals have multiple schema versions with different content.\");\n lines.push(\"To inspect collision versions, export TypeSchemas using `.introspection({ typeSchemas: 'path' })`\");\n lines.push(\"and check `<pkg>/collisions/<name>/1.json, 2.json, ...` files.\", \"\");\n\n const allCollisions: { url: string; firstSource: CollisionEntry }[] = [];\n\n const collisionPackages = Object.keys(collisions).sort();\n for (const pkgName of collisionPackages) {\n const collisionsPkg = collisions[pkgName as PkgName];\n if (!collisionsPkg) throw new Error(`Missing collisions for package ${pkgName}`);\n\n const sortedEntries = Object.entries(collisionsPkg).sort(([a], [b]) => {\n const nameA = a.split(\"/\").pop() ?? a;\n const nameB = b.split(\"/\").pop() ?? b;\n return nameA.localeCompare(nameB);\n });\n\n if (sortedEntries.length > 0) {\n lines.push(`### \\`${pkgName}\\``, \"\");\n for (const [canonical, entries] of sortedEntries) {\n const versions = groupCollisionVersions(entries, resolveCollisions?.[canonical]);\n const versionLines = generateCollisionVersionLines(versions);\n lines.push(`- \\`${canonical}\\` (${versions.length} versions)`);\n lines.push(...versionLines);\n if (entries[0]) allCollisions.push({ url: canonical, firstSource: entries[0] });\n }\n lines.push(\"\");\n }\n }\n\n if (allCollisions.length > 0) {\n const unresolved = allCollisions.filter((c) => !resolveCollisions?.[c.url]);\n if (unresolved.length > 0) {\n lines.push(\"### Suggested `resolveCollisions` config\", \"\");\n lines.push(\"Add to `.typeSchema({ resolveCollisions: { ... } })` to resolve remaining collisions:\", \"\");\n lines.push(\"```typescript\");\n lines.push(\".typeSchema({\");\n lines.push(\" resolveCollisions: {\");\n for (const { url, firstSource } of unresolved) {\n lines.push(` \"${url}\": {`);\n lines.push(` package: \"${firstSource.sourcePackage}\",`);\n lines.push(` canonical: \"${firstSource.sourceCanonical}\",`);\n lines.push(\" },\");\n }\n lines.push(\" },\");\n lines.push(\"})\");\n lines.push(\"```\", \"\");\n }\n }\n};\n\nexport const generateIrReportReadme = (report: IrReport): string => {\n const lines: string[] = [\"# IR Report\", \"\"];\n\n const irPackages = [\n ...new Set<PkgName>([\n ...Object.keys(report.treeShake?.packages ?? {}),\n ...Object.keys(report.logicalPromotion?.packages ?? {}),\n ]),\n ].sort();\n\n const hasIrChanges = irPackages.length > 0 || (report.treeShake?.skippedPackages.length ?? 0) > 0;\n const hasCollisions = Object.keys(report.collisions ?? {}).length > 0;\n\n if (!hasIrChanges && !hasCollisions) {\n lines.push(\"No IR modifications applied.\");\n return lines.join(\"\\n\");\n }\n\n if (report.treeShake?.skippedPackages.length) {\n generateSkippedPackagesSection(lines, report.treeShake.skippedPackages);\n }\n\n for (const pkgName of irPackages) {\n generatePackageSection(\n lines,\n pkgName,\n report.treeShake?.packages[pkgName],\n report.logicalPromotion?.packages[pkgName]?.promotedCanonicals,\n );\n }\n\n if (hasCollisions) {\n generateCollisionsSection(lines, report.collisions, report.resolveCollisions);\n }\n\n return lines.join(\"\\n\");\n};\n","import { generateIrReportReadme } from \"@root/typeschema/ir/report\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport interface IrReportWriterWriterOptions extends FileSystemWriterOptions {\n rootReadmeFileName: string;\n}\n\nexport class IrReportWriterWriter extends FileSystemWriter<IrReportWriterWriterOptions> {\n async generate(tsIndex: TypeSchemaIndex): Promise<void> {\n const report = tsIndex.irReport();\n const md = generateIrReportReadme(report);\n this.cd(\"/\", () => {\n this.cat(this.opts.rootReadmeFileName, () => {\n this.write(md);\n });\n });\n }\n}\n","import type { DebugMixin } from \"@mustache/types\";\n\nexport class DebugMixinProvider {\n constructor(private readonly mode: \"FORMATTED\" | \"COMPACT\") {}\n\n public apply<T extends Record<string, unknown>>(target: T): T & DebugMixin {\n return this._addDebug(target) as T & DebugMixin;\n }\n\n private _addDebug(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((v) => this._addDebug(v));\n }\n\n if (value !== null && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n const debugString = JSON.stringify(obj, null, this.mode === \"FORMATTED\" ? 2 : undefined);\n for (const [key, val] of Object.entries(obj)) {\n result[key] = this._addDebug(val);\n }\n result.debug = debugString;\n return result;\n }\n\n return value;\n }\n}\n","import type { NameGenerator } from \"@mustache/generator/NameGenerator\";\nimport type { LambdaMixin } from \"@mustache/types\";\nimport { camelCase, kebabCase, pascalCase, snakeCase } from \"@root/api/writer-generator/utils\";\n\nexport class LambdaMixinProvider {\n private readonly lambda: LambdaMixin[\"lambda\"];\n constructor(private readonly nameGenerator: NameGenerator) {\n this.lambda = {\n saveTypeName: () => (text, render) => this.nameGenerator.generateType(render(text)),\n saveEnumValueName: () => (text, render) => this.nameGenerator.generateEnumValue(render(text)),\n saveFieldName: () => (text, render) => this.nameGenerator.generateField(render(text)),\n\n camelCase: () => (text, render) => camelCase(render(text)),\n snakeCase: () => (text, render) => snakeCase(render(text)),\n pascalCase: () => (text, render) => pascalCase(render(text)),\n kebabCase: () => (text, render) => kebabCase(render(text)),\n lowerCase: () => (text, render) => render(text).toLowerCase(),\n upperCase: () => (text, render) => render(text).toUpperCase(),\n };\n }\n\n public apply<T extends Record<string, unknown>>(target: T): T & LambdaMixin {\n return {\n ...target,\n lambda: this.lambda,\n };\n }\n}\n","import type { Field, NestedTypeSchema, TypeIdentifier, TypeSchema } from \"@typeschema/types\";\n\nexport type NameTransformation = {\n pattern: RegExp | string;\n format: string;\n};\nexport type DistinctNameConfigurationType<T> = {\n common: T;\n enumValue: T;\n type: T;\n field: T;\n};\n\nexport class NameGenerator {\n constructor(\n private readonly keywords: Set<string>,\n private readonly typeMap: Record<string, string>,\n private readonly nameTransformations: DistinctNameConfigurationType<NameTransformation[]>,\n private readonly unsaveCharacterPattern: string | RegExp,\n ) {}\n\n private _replaceUnsaveChars(name: string): string {\n const pattern =\n this.unsaveCharacterPattern instanceof RegExp\n ? this.unsaveCharacterPattern\n : new RegExp(this.unsaveCharacterPattern, \"g\");\n return name.replace(pattern, \"_\");\n }\n\n private _applyNameTransformations(name: string, transformations: NameTransformation[]): string {\n for (const transformation of this.nameTransformations.common) {\n name = name.replace(\n transformation.pattern instanceof RegExp\n ? transformation.pattern\n : new RegExp(transformation.pattern, \"g\"),\n transformation.format,\n );\n }\n for (const transformation of transformations) {\n name = name.replace(\n transformation.pattern instanceof RegExp\n ? transformation.pattern\n : new RegExp(transformation.pattern, \"g\"),\n transformation.format,\n );\n }\n return name;\n }\n\n private _generateTypeName(name: string): string {\n if (this.typeMap[name]) {\n name = this.typeMap[name] as any;\n } else {\n name = this._applyNameTransformations(name, this.nameTransformations.type);\n name = name.charAt(0).toUpperCase() + name.slice(1);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name);\n }\n return name;\n }\n\n public generateEnumType(name: string): string {\n return this._generateTypeName(name);\n }\n\n private _generateTypeFromTypeRef(typeRef: TypeIdentifier): string {\n if (typeRef.kind === \"primitive-type\") {\n return this._generateTypeName(typeRef.name);\n }\n return this._generateTypeName(\n typeRef.url\n .split(\"/\")\n .pop()\n ?.split(\"#\")\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join(\"\") ?? \"<UNKNOWN>\",\n );\n }\n\n public generateFieldType(schema: Field): string {\n if ((schema as any).enum) {\n return this.generateEnumType((schema as any).binding?.name ?? (schema as any).type.name);\n }\n return this._generateTypeFromTypeRef((schema as any).type);\n }\n\n public generateType(schemaOrRefOrString: TypeSchema | NestedTypeSchema | TypeIdentifier | string): string {\n if (typeof schemaOrRefOrString === \"string\") {\n return this._generateTypeName(schemaOrRefOrString);\n }\n if (\"url\" in schemaOrRefOrString) {\n return this._generateTypeFromTypeRef(schemaOrRefOrString);\n }\n return this._generateTypeFromTypeRef(schemaOrRefOrString.identifier);\n }\n\n public generateField(name: string): string {\n name = this._applyNameTransformations(name, this.nameTransformations.field);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name);\n return name;\n }\n public generateEnumValue(name: string): string {\n name = this._applyNameTransformations(name, this.nameTransformations.enumValue);\n if (this.keywords.has(name)) {\n return `_${name}`;\n }\n name = this._replaceUnsaveChars(name).toUpperCase();\n return name;\n }\n}\n","import fs from \"node:fs\";\nimport Path from \"node:path\";\nimport type { Rendering } from \"@mustache/types\";\n\nexport class TemplateFileCache {\n private readonly templateBaseDir: string;\n private readonly templateCache: Record<string, string> = {};\n constructor(templateBaseDir: string) {\n this.templateBaseDir = Path.resolve(templateBaseDir);\n }\n\n private _normalizeName(name: string): string {\n if (name.endsWith(\".mustache\")) {\n return name;\n }\n return `${name}.mustache`;\n }\n\n public read(template: Pick<Rendering, \"source\">): string {\n return this.readTemplate(template.source);\n }\n public readTemplate(name: string): string {\n const normalizedName = this._normalizeName(name);\n if (!this.templateCache[normalizedName]) {\n this.templateCache[normalizedName] = fs.readFileSync(\n Path.join(this.templateBaseDir, normalizedName),\n \"utf-8\",\n );\n }\n return this.templateCache[normalizedName];\n }\n}\n","import type { ListElementInformationMixin } from \"@mustache/types\";\n\nexport class ListElementInformationMixinProvider {\n private static _array<T>(value: T[] | Set<T>): T[] {\n return Array.isArray(value) ? value : Array.from(value);\n }\n\n public apply<T extends Record<string, unknown>>(source: T): T {\n return this._addListElementInformation(source) as T;\n }\n\n private _addListElementInformation(value: unknown): unknown {\n if (Array.isArray(value) || value instanceof Set) {\n return ListElementInformationMixinProvider._array(value).map((v, index, array) => {\n if (typeof v === \"object\" && v !== null) {\n return {\n ...(this._addListElementInformation(v) as Record<string, unknown>),\n \"-index\": index,\n \"-length\": array.length,\n \"-first\": index === 0,\n \"-last\": index === array.length - 1,\n } satisfies ListElementInformationMixin;\n }\n return v;\n });\n }\n\n if (value !== null && typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(obj)) {\n result[key] = this._addListElementInformation(val);\n }\n return result;\n }\n\n return value;\n }\n}\n","import type { IsPrefixed } from \"@root/utils/types\";\nimport type { Field, NestedTypeSchema, TypeSchema } from \"@typeschema/types\";\n\nexport type DebugMixin = {\n debug: string;\n};\n\nexport type EnumValueViewModel = {\n name: string;\n saveName: string;\n};\n\nexport type EnumViewModel = NamedViewModel & {\n values: EnumValueViewModel[];\n};\n\nexport type FieldViewModel = {\n owner: NamedViewModel;\n\n schema: Field;\n name: string;\n saveName: string;\n\n typeName: string;\n\n isSizeConstrained: boolean;\n min?: number;\n max?: number;\n\n isArray: boolean;\n isRequired: boolean;\n isEnum: boolean;\n\n isPrimitive: Record<IsPrefixed<PrimitiveType>, boolean> | false;\n isComplexType: Record<IsPrefixed<string>, boolean> | false;\n isResource: Record<IsPrefixed<string>, boolean> | false;\n\n isCode: boolean;\n isIdentifier: boolean;\n isReference: boolean;\n};\n\nexport type FilterType = {\n whitelist?: (string | RegExp)[];\n blacklist?: (string | RegExp)[];\n};\n\nexport type HookType = {\n cmd: string;\n args?: string[];\n};\n\nexport type LambdaMixin = {\n lambda: {\n saveEnumValueName: () => (text: string, render: (input: string) => string) => string;\n saveFieldName: () => (text: string, render: (input: string) => string) => string;\n saveTypeName: () => (text: string, render: (input: string) => string) => string;\n\n camelCase: () => (text: string, render: (input: string) => string) => string;\n snakeCase: () => (text: string, render: (input: string) => string) => string;\n pascalCase: () => (text: string, render: (input: string) => string) => string;\n kebabCase: () => (text: string, render: (input: string) => string) => string;\n lowerCase: () => (text: string, render: (input: string) => string) => string;\n upperCase: () => (text: string, render: (input: string) => string) => string;\n };\n};\n\nexport type ListElementInformationMixin = {\n \"-index\": number;\n \"-length\": number;\n \"-last\": boolean;\n \"-first\": boolean;\n};\n\nexport type NamedViewModel = {\n name: string;\n saveName: string;\n};\n\nexport const PRIMITIVE_TYPES = [\n \"boolean\",\n \"instant\",\n \"time\",\n \"date\",\n \"dateTime\",\n\n \"decimal\",\n \"integer\",\n \"unsignedInt\",\n \"positiveInt\",\n \"integer64\",\n \"base64Binary\",\n\n \"uri\",\n \"url\",\n \"canonical\",\n \"oid\",\n \"uuid\",\n\n \"string\",\n \"code\",\n \"markdown\",\n \"id\",\n \"xhtml\",\n] as const;\n\nexport type PrimitiveType = (typeof PRIMITIVE_TYPES)[number];\n\nexport type Rendering = {\n source: string;\n fileNameFormat: string;\n path: string;\n filter?: FilterType;\n properties?: Record<string, any>;\n};\n\nexport type ResolvedTypeViewModel = TypeViewModel & {\n allFields: FieldViewModel[];\n inheritedFields: FieldViewModel[];\n parents: TypeViewModel[];\n children: TypeViewModel[];\n\n hasChildren: boolean;\n hasParents: boolean;\n hasInheritedFields: boolean;\n};\n\nexport type RootViewModel<T> = T & {\n resources: { name: string; saveName: string }[];\n complexTypes: { name: string; saveName: string }[];\n};\n\nexport type TypeViewModel = NamedViewModel & {\n schema: TypeSchema | NestedTypeSchema;\n fields: FieldViewModel[];\n\n dependencies: {\n resources: NamedViewModel[];\n complexTypes: NamedViewModel[];\n };\n\n hasFields: boolean;\n hasNestedComplexTypes: boolean;\n hasNestedEnums: boolean;\n\n isNested: boolean;\n isComplexType: Record<IsPrefixed<string>, boolean> | false;\n isResource: Record<IsPrefixed<string>, boolean> | false;\n\n nestedComplexTypes: ResolvedTypeViewModel[];\n nestedEnums: EnumViewModel[];\n};\n\nexport type View<T extends ViewModel> = LambdaMixin & {\n model: T;\n meta: {\n timestamp: string;\n generator: string;\n };\n properties: Record<string, unknown>;\n};\n\nexport type ViewModel = Record<string, unknown>;\n","import { ListElementInformationMixinProvider } from \"@mustache/generator/ListElementInformationMixinProvider\";\nimport type { NameGenerator } from \"@mustache/generator/NameGenerator\";\nimport type {\n EnumViewModel,\n FieldViewModel,\n NamedViewModel,\n ResolvedTypeViewModel,\n RootViewModel,\n TypeViewModel,\n ViewModel,\n} from \"@mustache/types\";\nimport { PRIMITIVE_TYPES } from \"@mustache/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { IsPrefixed } from \"@root/utils/types\";\nimport {\n type ChoiceFieldInstance,\n type Field,\n isComplexTypeTypeSchema,\n isNotChoiceDeclarationField,\n isResourceTypeSchema,\n type NestedTypeSchema,\n type RegularField,\n type TypeIdentifier,\n type TypeSchema,\n} from \"@typeschema/types\";\n\nexport type ViewModelCache = {\n resourcesByUri: Record<string, TypeViewModel>;\n complexTypesByUri: Record<string, TypeViewModel>;\n};\n\nexport class ViewModelFactory {\n private arrayMixinProvider: ListElementInformationMixinProvider = new ListElementInformationMixinProvider();\n\n constructor(\n private readonly tsIndex: TypeSchemaIndex,\n private readonly nameGenerator: NameGenerator,\n private readonly filterPred: (id: TypeIdentifier) => boolean,\n ) {}\n\n public createUtility(): RootViewModel<ViewModel> {\n return this._createForRoot();\n }\n\n public createComplexType(\n typeRef: TypeIdentifier,\n cache: ViewModelCache = { resourcesByUri: {}, complexTypesByUri: {} },\n ): RootViewModel<ResolvedTypeViewModel> {\n const base = this._createForComplexType(typeRef, cache);\n const parents = this._createParentsFor(base.schema, cache);\n const children = this._createChildrenFor(typeRef, cache);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return this.arrayMixinProvider.apply({\n ...this._createForRoot(),\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...parents.flatMap((p) => p.fields)],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n });\n }\n public createResource(\n typeRef: TypeIdentifier,\n cache: ViewModelCache = { resourcesByUri: {}, complexTypesByUri: {} },\n ): RootViewModel<ResolvedTypeViewModel> {\n const base = this._createForResource(typeRef, cache);\n const parents = this._createParentsFor(base.schema, cache);\n const children = this._createChildrenFor(typeRef, cache);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return this.arrayMixinProvider.apply({\n ...this._createForRoot(),\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...inheritedFields],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n });\n }\n\n private _createFor(typeRef: TypeIdentifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n if (typeRef.kind === \"complex-type\") {\n return this._createForComplexType(typeRef, cache, nestedIn);\n }\n if (typeRef.kind === \"resource\") {\n return this._createForResource(typeRef, cache, nestedIn);\n }\n throw new Error(`Unknown type ${typeRef.kind}`);\n }\n\n private _createForComplexType(\n typeRef: TypeIdentifier,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): TypeViewModel {\n const type = this.tsIndex.resolveType(typeRef);\n if (!type) {\n throw new Error(`ComplexType ${typeRef.name} not found`);\n }\n if (!Object.hasOwn(cache.complexTypesByUri, type.identifier.url)) {\n cache.complexTypesByUri[type.identifier.url] = this._createTypeViewModel(type, cache, nestedIn);\n }\n const res = cache.complexTypesByUri[type.identifier.url];\n if (!res) throw new Error(`ComplexType ${typeRef.name} not found`);\n return res;\n }\n\n private _createForResource(typeRef: TypeIdentifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel {\n const type = this.tsIndex.resolveType(typeRef);\n if (!type) {\n throw new Error(`Resource ${typeRef.name} not found`);\n }\n if (!Object.hasOwn(cache.resourcesByUri, type.identifier.url)) {\n cache.resourcesByUri[type.identifier.url] = this._createTypeViewModel(type, cache, nestedIn);\n }\n const res = cache.resourcesByUri[type.identifier.url];\n if (!res) throw new Error(`Resource ${typeRef.name} not found`);\n return res;\n }\n\n private _createChildrenFor(typeRef: TypeIdentifier, cache: ViewModelCache, nestedIn?: TypeSchema): TypeViewModel[] {\n const schema = this.tsIndex.resolveType(typeRef);\n if (!schema) return [];\n if (isComplexTypeTypeSchema(schema)) {\n return (schema.typeFamily?.complexTypes ?? [])\n .filter(this.filterPred)\n .map((childRef: TypeIdentifier) => this._createFor(childRef, cache, nestedIn));\n }\n if (isResourceTypeSchema(schema)) {\n return (schema.typeFamily?.resources ?? [])\n .filter(this.filterPred)\n .map((childRef: TypeIdentifier) => this._createFor(childRef, cache, nestedIn));\n }\n return [];\n }\n\n private _createParentsFor(base: TypeSchema | NestedTypeSchema, cache: ViewModelCache) {\n const parents: TypeViewModel[] = [];\n let parentRef: TypeIdentifier | undefined = \"base\" in base ? base.base : undefined;\n while (parentRef) {\n parents.push(this._createFor(parentRef, cache, undefined));\n const parent = this.tsIndex.resolveType(parentRef);\n parentRef = parent && \"base\" in parent ? parent.base : undefined;\n }\n return parents;\n }\n\n private _createForNestedType(\n nested: NestedTypeSchema,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): ResolvedTypeViewModel {\n const base = this._createTypeViewModel(nested, cache, nestedIn);\n const parents = this._createParentsFor(nested, cache);\n const children = this._createChildrenFor(nested.identifier, cache, nestedIn);\n const inheritedFields = parents.flatMap((p) => p.fields);\n return {\n ...base,\n parents,\n children,\n inheritedFields,\n allFields: [...base.fields, ...inheritedFields],\n\n hasChildren: children.length > 0,\n hasParents: parents.length > 0,\n hasInheritedFields: inheritedFields.length > 0,\n };\n }\n\n private _createTypeViewModel(\n schema: TypeSchema | NestedTypeSchema,\n cache: ViewModelCache,\n nestedIn?: TypeSchema,\n ): TypeViewModel {\n const fields = Object.entries((\"fields\" in schema ? schema.fields : {}) ?? {});\n const nestedComplexTypes = this._collectNestedComplex(schema, cache);\n const nestedEnums = this._collectNestedEnums(fields as [string, Field][]);\n const dependencies = this._collectDependencies(schema);\n const name: NamedViewModel = {\n name: schema.identifier.name,\n saveName: this.nameGenerator.generateType(schema),\n };\n return {\n nestedComplexTypes,\n nestedEnums,\n dependencies,\n isNested: !!nestedIn,\n schema: schema,\n ...name,\n isResource: this._createIsResource(schema.identifier),\n isComplexType: this._createIsComplexType(schema.identifier),\n\n hasFields: fields.length > 0,\n hasNestedComplexTypes: nestedComplexTypes.length > 0,\n hasNestedEnums: nestedEnums.length > 0,\n fields: fields\n .filter((entry): entry is [string, RegularField | ChoiceFieldInstance] =>\n isNotChoiceDeclarationField(entry[1]),\n )\n .sort((a, b) => a[0].localeCompare(b[0]))\n .map(([fieldName, field]) => {\n return {\n owner: name,\n schema: field,\n name: fieldName,\n saveName: this.nameGenerator.generateField(fieldName),\n typeName: this.nameGenerator.generateFieldType(field),\n\n isArray: field.array ?? false,\n isRequired: field.required ?? false,\n isEnum: !!field.enum && !field.enum.isOpen,\n\n isSizeConstrained: field.min !== undefined || field.max !== undefined,\n min: field.min,\n max: field.max,\n\n isResource: this._createIsResource(field.type),\n isComplexType: this._createIsComplexType(field.type),\n isPrimitive: this._createIsPrimitiveType(field.type),\n\n isCode: field.type?.name === \"code\",\n isIdentifier: field.type?.name === \"Identifier\",\n isReference: field.type?.name === \"Reference\",\n };\n }),\n };\n }\n\n private _collectDependencies(schema: TypeSchema | NestedTypeSchema): TypeViewModel[\"dependencies\"] {\n const dependencies: TypeViewModel[\"dependencies\"] = {\n resources: [],\n complexTypes: [],\n };\n if (\"dependencies\" in schema && schema.dependencies) {\n schema.dependencies\n .filter((dependency) => dependency.kind === \"complex-type\")\n .map((dependency) => ({ name: dependency.name, saveName: this.nameGenerator.generateType(dependency) }))\n .forEach((dependency) => {\n dependencies.complexTypes.push(dependency);\n });\n schema.dependencies\n .filter((dependency) => dependency.kind === \"resource\")\n .map((dependency) => ({ name: dependency.name, saveName: this.nameGenerator.generateType(dependency) }))\n .forEach((dependency) => {\n dependencies.resources.push(dependency);\n });\n }\n if (\"nested\" in schema && schema.nested) {\n schema.nested\n .map((nested) => this._collectDependencies(nested))\n .forEach((d) => {\n d.complexTypes\n .filter(\n (complexType) =>\n !dependencies.complexTypes.some((dependency) => dependency.name === complexType.name),\n )\n .forEach((complexType) => {\n dependencies.complexTypes.push(complexType);\n });\n d.resources\n .filter(\n (resource) =>\n !dependencies.resources.some((dependency) => dependency.name === resource.name),\n )\n .forEach((resource) => {\n dependencies.resources.push(resource);\n });\n });\n }\n return dependencies;\n }\n\n private _createIsResource(typeRef: TypeIdentifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"resource\") {\n return false;\n }\n return Object.fromEntries(\n this.tsIndex\n .collectResources()\n .map((e) => e.identifier)\n .map((resourceRef: TypeIdentifier) => [\n `is${resourceRef.name.charAt(0).toUpperCase() + resourceRef.name.slice(1)}`,\n resourceRef.url === typeRef.url,\n ]),\n ) as Record<IsPrefixed<string>, boolean>;\n }\n private _createIsComplexType(typeRef: TypeIdentifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"complex-type\" && typeRef.kind !== \"nested\") {\n return false;\n }\n return Object.fromEntries(\n this.tsIndex\n .collectComplexTypes()\n .map((e) => e.identifier)\n .map((complexTypeRef: TypeIdentifier) => [\n `is${complexTypeRef.name.charAt(0).toUpperCase() + complexTypeRef.name.slice(1)}`,\n complexTypeRef.url === typeRef.url,\n ]),\n ) as Record<IsPrefixed<string>, boolean>;\n }\n private _createIsPrimitiveType(typeRef: TypeIdentifier): Record<IsPrefixed<string>, boolean> | false {\n if (typeRef.kind !== \"primitive-type\") {\n return false;\n }\n return Object.fromEntries(\n PRIMITIVE_TYPES.map((type) => [`is${type.charAt(0).toUpperCase()}${type.slice(1)}`, typeRef.name === type]),\n ) as FieldViewModel[\"isPrimitive\"];\n }\n\n private _collectNestedComplex(\n schema: TypeSchema | NestedTypeSchema,\n cache: ViewModelCache,\n ): ResolvedTypeViewModel[] {\n const nested: ResolvedTypeViewModel[] = [];\n if (\"nested\" in schema && schema.nested) {\n schema.nested\n .map((nested) => this._createForNestedType(nested, cache, schema))\n .forEach((n) => {\n nested.push(n);\n });\n }\n return nested;\n }\n private _collectNestedEnums(fields: [string, Field][]): EnumViewModel[] {\n const nestedEnumValues: Record<string, Set<string>> = {};\n fields.forEach(([fieldName, fieldSchema]) => {\n if (\"enum\" in fieldSchema && fieldSchema.enum && !fieldSchema.enum.isOpen) {\n const name = (\"binding\" in fieldSchema && fieldSchema.binding?.name) ?? fieldName;\n if (typeof name === \"string\") {\n nestedEnumValues[name] = nestedEnumValues[name] ?? new Set<string>();\n fieldSchema.enum.values.forEach(nestedEnumValues[name].add.bind(nestedEnumValues[name]));\n }\n }\n });\n return Object.entries(nestedEnumValues).map(([name, values]) => ({\n name: name,\n saveName: this.nameGenerator.generateEnumType(name),\n values: Array.from(values).map((value) => ({\n name: value,\n saveName: this.nameGenerator.generateEnumValue(value),\n })),\n }));\n }\n\n private _createForRoot(): Pick<RootViewModel<unknown>, \"resources\" | \"complexTypes\"> {\n return this.arrayMixinProvider.apply({\n complexTypes: this.tsIndex\n .collectComplexTypes()\n .map((e) => e.identifier)\n .map((typeRef: TypeIdentifier) => ({\n name: typeRef.name,\n saveName: this.nameGenerator.generateType(typeRef),\n })),\n resources: this.tsIndex\n .collectResources()\n .map((e) => e.identifier)\n .map((typeRef: TypeIdentifier) => ({\n name: typeRef.name,\n saveName: this.nameGenerator.generateType(typeRef),\n })),\n });\n }\n}\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport * as util from \"node:util\";\nimport { DebugMixinProvider } from \"@mustache/generator/DebugMixinProvider\";\nimport { LambdaMixinProvider } from \"@mustache/generator/LambdaMixinProvider\";\nimport {\n type DistinctNameConfigurationType,\n NameGenerator,\n type NameTransformation,\n} from \"@mustache/generator/NameGenerator\";\nimport { TemplateFileCache } from \"@mustache/generator/TemplateFileCache\";\nimport type { ViewModelCache } from \"@mustache/generator/ViewModelFactory\";\nimport { ViewModelFactory } from \"@mustache/generator/ViewModelFactory\";\nimport type {\n HookType,\n NamedViewModel,\n PrimitiveType,\n Rendering,\n TypeViewModel,\n View,\n ViewModel,\n} from \"@mustache/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLog } from \"@root/utils/log\";\nimport { default as Mustache } from \"mustache\";\nimport { FileSystemWriter, type FileSystemWriterOptions } from \"./writer\";\n\nexport type FileBasedMustacheGeneratorOptions = {\n debug: \"OFF\" | \"FORMATTED\" | \"COMPACT\";\n meta: {\n timestamp?: string;\n generator?: string;\n };\n renderings: {\n utility: Rendering[];\n resource: Rendering[];\n complexType: Rendering[];\n };\n keywords: string[];\n primitiveTypeMap: Partial<Record<PrimitiveType, string>>;\n nameTransformations: DistinctNameConfigurationType<NameTransformation[]>;\n unsaveCharacterPattern: string | RegExp;\n shouldRunHooks: boolean;\n hooks: {\n afterGenerate?: HookType[];\n };\n};\n\nexport type MustacheGeneratorOptions = FileSystemWriterOptions &\n FileBasedMustacheGeneratorOptions & {\n sources: {\n templateSource: string;\n staticSource: string;\n };\n };\n\nexport function loadMustacheGeneratorConfig(\n templatePath: string,\n logger?: CodegenLog,\n): Partial<FileBasedMustacheGeneratorOptions> {\n const filePath = Path.resolve(templatePath, \"config.json\");\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === \"object\") {\n return parsed as Partial<FileBasedMustacheGeneratorOptions>;\n }\n } catch (_e) {}\n logger?.warn(`Failed to load JSON file with mustache generator config: ${filePath}`);\n return {};\n}\n\nexport const createGenerator = (\n templatePath: string,\n apiOpts: FileSystemWriterOptions & Partial<FileBasedMustacheGeneratorOptions>,\n): MustacheGenerator => {\n const defaultFileOpts: FileBasedMustacheGeneratorOptions = {\n debug: \"OFF\",\n hooks: {},\n meta: {},\n keywords: [],\n unsaveCharacterPattern: /[^a-zA-Z0-9]/g,\n nameTransformations: {\n common: [],\n enumValue: [],\n type: [],\n field: [],\n },\n renderings: {\n utility: [],\n resource: [],\n complexType: [],\n },\n shouldRunHooks: true,\n primitiveTypeMap: {},\n };\n const actualFileOpts = loadMustacheGeneratorConfig(templatePath);\n\n const mustacheOptions: MustacheGeneratorOptions = {\n ...defaultFileOpts,\n ...apiOpts,\n ...actualFileOpts,\n sources: {\n staticSource: Path.resolve(templatePath, \"static\"),\n templateSource: Path.resolve(templatePath, \"templates\"),\n },\n };\n return new MustacheGenerator(mustacheOptions);\n};\n\nfunction runCommand(cmd: string, args: string[] = [], options = {}) {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, args, {\n stdio: \"inherit\",\n ...options,\n });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) resolve(code);\n else reject(new Error(`Prozess beendet mit Fehlercode ${code}`));\n });\n });\n}\n\nexport class MustacheGenerator extends FileSystemWriter<MustacheGeneratorOptions> {\n private readonly templateFileCache: TemplateFileCache;\n private readonly nameGenerator: NameGenerator;\n private readonly lambdaMixinProvider: LambdaMixinProvider;\n private readonly debugMixinProvider?: DebugMixinProvider;\n\n constructor(opts: MustacheGeneratorOptions) {\n super(opts);\n this.nameGenerator = new NameGenerator(\n new Set<string>(opts.keywords),\n opts.primitiveTypeMap,\n opts.nameTransformations,\n opts.unsaveCharacterPattern,\n );\n this.templateFileCache = new TemplateFileCache(opts.sources.templateSource);\n this.lambdaMixinProvider = new LambdaMixinProvider(this.nameGenerator);\n this.debugMixinProvider = opts.debug !== \"OFF\" ? new DebugMixinProvider(opts.debug) : undefined;\n }\n\n override async generate(tsIndex: TypeSchemaIndex) {\n const modelFactory = new ViewModelFactory(tsIndex, this.nameGenerator, () => true);\n const cache: ViewModelCache = {\n resourcesByUri: {},\n complexTypesByUri: {},\n };\n tsIndex\n .collectComplexTypes()\n .map((i) => i.identifier)\n .sort((a, b) => a.url.localeCompare(b.url))\n .map((typeRef) => modelFactory.createComplexType(typeRef, cache))\n .forEach(this._renderComplexType.bind(this));\n\n tsIndex\n .collectResources()\n .map((i) => i.identifier)\n .sort((a, b) => a.url.localeCompare(b.url))\n .map((typeRef) => modelFactory.createResource(typeRef, cache))\n .forEach(this._renderResource.bind(this));\n\n this._renderUtility(modelFactory.createUtility());\n this.copyStaticFiles();\n\n if (this.opts.shouldRunHooks) {\n await this._runHooks(this.opts.hooks.afterGenerate);\n }\n return;\n }\n\n copyStaticFiles() {\n const staticDir = Path.resolve(this.opts.sources.staticSource);\n if (!staticDir) {\n throw new Error(\"staticDir must be set in subclass.\");\n }\n fs.cpSync(staticDir, this.opts.outputDir, { recursive: true });\n }\n\n private async _runHooks(hooks?: HookType[]) {\n for (const hook of hooks ?? []) {\n console.info(`Running hook (${this.opts.outputDir}): ${hook.cmd} ${hook.args?.join(\" \")}`);\n await runCommand(hook.cmd, hook.args ?? [], {\n cwd: this.opts.outputDir,\n });\n console.info(`Completed hook: ${hook.cmd} ${hook.args?.join(\" \")}`);\n }\n }\n\n private _checkRenderingFilter(model: TypeViewModel, rendering: Rendering): boolean {\n if (!rendering.filter?.whitelist?.length && !rendering.filter?.blacklist?.length) {\n return true;\n }\n if ((rendering.filter?.blacklist ?? []).find((v) => model.name.match(v))) {\n return false;\n }\n if ((rendering.filter?.whitelist ?? []).find((v) => model.name.match(v))) {\n return true;\n }\n return !rendering.filter.whitelist?.length;\n }\n\n private _renderUtility(model: ViewModel) {\n this.opts.renderings.utility.forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(rendering.fileNameFormat, () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _renderResource(model: TypeViewModel) {\n this.opts.renderings.resource\n .filter((rendering) => this._checkRenderingFilter(model, rendering))\n .forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(this._calculateFilename(model, rendering), () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _renderComplexType(model: TypeViewModel) {\n this.opts.renderings.complexType\n .filter((rendering) => this._checkRenderingFilter(model, rendering))\n .forEach((rendering) => {\n this.cd(rendering.path, () => {\n this.cat(this._calculateFilename(model, rendering), () => {\n this.write(this._render(model, rendering));\n });\n });\n });\n }\n\n private _calculateFilename(model: NamedViewModel, rendering: Rendering): string {\n return util.format(rendering.fileNameFormat, model.saveName);\n }\n\n private _render<T extends ViewModel>(model: T, rendering: Rendering): string {\n let view: View<T> = this.lambdaMixinProvider.apply({\n meta: {\n timestamp: this.opts.meta.timestamp ?? new Date().toISOString(),\n generator: this.opts.meta.generator ?? \"@atomic-ehr/codegen mustache generator\",\n },\n model: model,\n properties: rendering.properties ?? {},\n });\n if (this.debugMixinProvider) {\n view = this.debugMixinProvider.apply(view);\n }\n return Mustache.render(this.templateFileCache.read(rendering), view, (partialName: string) =>\n this.templateFileCache.readTemplate(partialName),\n );\n }\n}\n","import {\n camelCase,\n kebabCase,\n uppercaseFirstLetter,\n uppercaseFirstLetterOfEach,\n} from \"@root/api/writer-generator/utils\";\nimport {\n type CanonicalUrl,\n extractNameFromCanonical,\n type ProfileTypeSchema,\n type TypeIdentifier,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\n\n// biome-ignore format: too long\nconst tsKeywords = new Set([ \"class\", \"function\", \"return\", \"if\", \"for\", \"while\", \"const\", \"let\", \"var\", \"import\", \"export\", \"interface\" ]);\n\nexport const normalizeTsName = (n: string): string => {\n if (tsKeywords.has(n)) n = `${n}_`;\n return n.replace(/\\[x\\]/g, \"_x_\").replace(/[- :.]/g, \"_\");\n};\n\nexport const tsCamelCase = (name: string): string => {\n if (!name) return \"\";\n // Remove [x] suffix and normalize special characters before camelCase\n const normalized = name.replace(/\\[x\\]/g, \"\").replace(/:/g, \"_\");\n return camelCase(normalized);\n};\n\nexport const tsPackageDir = (name: string): string => {\n return kebabCase(name);\n};\n\nexport const tsModuleName = (id: TypeIdentifier): string => {\n // NOTE: Why not pascal case?\n // In hl7-fhir-uv-xver-r5-r4 we have:\n // - http://hl7.org/fhir/5.0/StructureDefinition/extension-Subscription.topic (subscription_topic)\n // - http://hl7.org/fhir/5.0/StructureDefinition/extension-SubscriptionTopic (SubscriptionTopic)\n // And they should not clash the names.\n return uppercaseFirstLetter(tsResourceName(id));\n};\n\nexport const tsModuleFileName = (id: TypeIdentifier): string => {\n return `${tsModuleName(id)}.ts`;\n};\n\nexport const tsModulePath = (id: TypeIdentifier): string => {\n return `${tsPackageDir(id.package)}/${tsModuleName(id)}`;\n};\n\nexport const tsNameFromCanonical = (canonical: string | undefined, dropFragment = true) => {\n if (!canonical) return undefined;\n const localName = extractNameFromCanonical(canonical as CanonicalUrl, dropFragment);\n if (!localName) return undefined;\n return normalizeTsName(localName);\n};\n\nexport const tsResourceName = (id: TypeIdentifier): string => {\n if (id.kind === \"nested\") {\n const url = id.url;\n // Extract name from URL without normalizing dots (needed for fragment splitting)\n const localName = extractNameFromCanonical(url as CanonicalUrl, false);\n if (!localName) return \"\";\n const [resourceName, fragment] = localName.split(\"#\");\n const name = uppercaseFirstLetterOfEach((fragment ?? \"\").split(\".\")).join(\"\");\n return normalizeTsName([resourceName, name].join(\"\"));\n }\n const name = id.name.includes(\"/\")\n ? (extractNameFromCanonical(id.name as unknown as CanonicalUrl) ?? id.name)\n : id.name;\n return normalizeTsName(name);\n};\n\nexport const tsFieldName = (n: string): string => {\n if (tsKeywords.has(n)) return `\"${n}\"`;\n if (n.includes(\" \") || n.includes(\"-\")) return `\"${n}\"`;\n return n;\n};\n\nexport const tsProfileModuleName = (tsIndex: TypeSchemaIndex, schema: ProfileTypeSchema): string => {\n const resourceSchema = tsIndex.findLastSpecialization(schema);\n const resourceName = uppercaseFirstLetter(normalizeTsName(resourceSchema.identifier.name));\n return `${resourceName}_${normalizeTsName(schema.identifier.name)}`;\n};\n\nexport const tsProfileModuleFileName = (tsIndex: TypeSchemaIndex, schema: ProfileTypeSchema): string => {\n return `${tsProfileModuleName(tsIndex, schema)}.ts`;\n};\n\nexport const tsProfileClassName = (schema: ProfileTypeSchema): string => {\n const name = normalizeTsName(schema.identifier.name);\n return name.endsWith(\"Profile\") ? name : `${name}Profile`;\n};\n\nexport const tsSliceFlatTypeName = (profileName: string, fieldName: string, sliceName: string): string => {\n return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlat`;\n};\n\nexport const tsExtensionFlatTypeName = (profileName: string, extensionName: string): string => {\n return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(extensionName))}Flat`;\n};\n\nexport const tsSliceStaticName = (name: string): string => name.replace(/\\[x\\]/g, \"\").replace(/[^a-zA-Z0-9_$]/g, \"_\");\n\nexport const tsSliceMethodBaseName = (sliceName: string): string =>\n uppercaseFirstLetter(normalizeTsName(sliceName) || \"Slice\");\n\nexport const tsExtensionMethodBaseName = (name: string): string =>\n uppercaseFirstLetter(tsCamelCase(name) || \"Extension\");\n\nexport const tsQualifiedExtensionMethodBaseName = (name: string, path?: string): string => {\n const rawPath =\n path\n ?.split(\".\")\n .filter((p) => p && p !== \"extension\")\n .join(\"_\") ?? \"\";\n const pathPart = rawPath ? uppercaseFirstLetter(tsCamelCase(rawPath)) : \"\";\n return `${pathPart}${uppercaseFirstLetter(tsCamelCase(name) || \"Extension\")}`;\n};\n\nexport const tsQualifiedSliceMethodBaseName = (fieldName: string, sliceName: string): string => {\n const fieldPart = uppercaseFirstLetter(tsCamelCase(fieldName) || \"Field\");\n const slicePart = uppercaseFirstLetter(normalizeTsName(sliceName) || \"Slice\");\n return `${fieldPart}${slicePart}`;\n};\n\nexport const tsResolvedExtensionBaseName = (\n extensionBaseNames: Record<string, string>,\n url: string,\n path: string,\n fallbackName: string,\n): string => extensionBaseNames[`${url}:${path}`] ?? fallbackName;\n\nexport const tsResolvedSliceBaseName = (\n sliceBaseNames: Record<string, string>,\n fieldName: string,\n sliceName: string,\n): string => sliceBaseNames[`${fieldName}:${sliceName}`] ?? sliceName;\n\nexport const tsValueFieldName = (id: TypeIdentifier): string => `value${uppercaseFirstLetter(id.name)}`;\n","import {\n type ChoiceFieldInstance,\n type EnumDefinition,\n isNestedIdentifier,\n isPrimitiveIdentifier,\n type RegularField,\n type TypeIdentifier,\n} from \"@root/typeschema/types\";\nimport { tsResourceName } from \"./name\";\n\nconst primitiveType2tsType: Record<string, string> = {\n boolean: \"boolean\",\n instant: \"string\",\n time: \"string\",\n date: \"string\",\n dateTime: \"string\",\n\n decimal: \"number\",\n integer: \"number\",\n unsignedInt: \"number\",\n positiveInt: \"number\",\n integer64: \"number\",\n base64Binary: \"string\",\n\n uri: \"string\",\n url: \"string\",\n canonical: \"string\",\n oid: \"string\",\n uuid: \"string\",\n\n string: \"string\",\n code: \"string\",\n markdown: \"string\",\n id: \"string\",\n xhtml: \"string\",\n};\n\nexport const resolvePrimitiveType = (name: string) => {\n const tsType = primitiveType2tsType[name];\n if (tsType === undefined) throw new Error(`Unknown primitive type ${name}`);\n return tsType;\n};\n\nexport const tsGet = (object: string, tsFieldName: string) => {\n if (tsFieldName.startsWith('\"')) return `${object}[${tsFieldName}]`;\n return `${object}.${tsFieldName}`;\n};\n\nexport const tsEnumType = (enumDef: EnumDefinition) => {\n const values = enumDef.values.map((e) => `\"${e}\"`).join(\" | \");\n return enumDef.isOpen ? `(${values} | string)` : `(${values})`;\n};\n\nconst rewriteFieldTypeDefs: Record<string, Record<string, () => string>> = {\n Coding: { code: () => \"T\" },\n // biome-ignore lint: that is exactly string what we want\n Reference: { reference: () => \"`${T}/${string}`\" },\n CodeableConcept: { coding: () => \"Coding<T>\" },\n};\n\nexport const resolveFieldTsType = (\n schemaName: string,\n tsName: string,\n field: RegularField | ChoiceFieldInstance,\n resolveRef?: (ref: TypeIdentifier) => TypeIdentifier,\n genericFieldMap?: Record<string, string>,\n): string => {\n if (genericFieldMap?.[tsName]) return genericFieldMap[tsName];\n\n const rewriteFieldType = rewriteFieldTypeDefs[schemaName]?.[tsName];\n if (rewriteFieldType) return rewriteFieldType();\n\n if (field.enum) {\n if (field.type.name === \"Coding\") return `Coding<${tsEnumType(field.enum)}>`;\n if (field.type.name === \"CodeableConcept\") return `CodeableConcept<${tsEnumType(field.enum)}>`;\n return tsEnumType(field.enum);\n }\n if (field.reference && field.reference.length > 0) {\n const references = field.reference\n .map((ref) => (resolveRef ? resolveRef(ref) : ref))\n .map((ref) => `\"${ref.name}\"`)\n .join(\" | \");\n return `Reference<${references}>`;\n }\n if (isPrimitiveIdentifier(field.type)) return resolvePrimitiveType(field.type.name);\n if (isNestedIdentifier(field.type)) return tsResourceName(field.type);\n return field.type.name as string;\n};\n\nexport const fieldTsType = (\n field: RegularField | ChoiceFieldInstance,\n resolveRef?: (ref: TypeIdentifier) => TypeIdentifier,\n): string => resolveFieldTsType(\"\", \"\", field, resolveRef) + (field.array ? \"[]\" : \"\");\n\nexport const tsTypeFromIdentifier = (id: TypeIdentifier): string => {\n if (isNestedIdentifier(id)) return tsResourceName(id);\n if (isPrimitiveIdentifier(id)) return resolvePrimitiveType(id.name);\n // Fallback: check if id.name is a known primitive type even if kind isn't set\n const primitiveType = primitiveType2tsType[id.name];\n if (primitiveType !== undefined) return primitiveType;\n return id.name;\n};\n","import {\n type CanonicalUrl,\n isChoiceDeclarationField,\n isProfileTypeSchema,\n type ProfileExtension,\n type ProfileTypeSchema,\n type TypeIdentifier,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n tsCamelCase,\n tsExtensionFlatTypeName,\n tsProfileClassName,\n tsProfileModuleName,\n tsResolvedExtensionBaseName,\n tsResourceName,\n tsValueFieldName,\n} from \"./name\";\nimport { collectProfileFactoryInfo } from \"./profile\";\nimport { tsTypeFromIdentifier } from \"./utils\";\nimport type { TypeScript } from \"./writer\";\n\nexport type SubExtensionSliceInfo = {\n name: string;\n url: string;\n valueField: string;\n tsType: string;\n isArray: boolean;\n isRequired: boolean;\n};\n\nexport type ExtensionProfileInfo = {\n className: string;\n modulePath: string;\n flatProfile: ProfileTypeSchema;\n};\n\n/**\n * Extract value field name from a slice's `elements` list.\n * E.g. `[\"url\", \"value\", \"valueCoding\"]` → `\"valueCoding\"`\n */\nexport const extractValueField = (elements: string[] | undefined): string | undefined => {\n if (!elements) return undefined;\n return elements.find((e) => e.startsWith(\"value\") && e !== \"value\");\n};\n\n/**\n * Map a FHIR value field name (e.g. \"valueCoding\") to its TypeScript type.\n */\nexport const valueFieldToTsType = (valueField: string): string => {\n const fhirName = valueField.replace(/^value/, \"\");\n // Primitive types that map to TS primitives\n const primitives: Record<string, string> = {\n String: \"string\",\n Boolean: \"boolean\",\n Integer: \"number\",\n Decimal: \"number\",\n Date: \"string\",\n DateTime: \"string\",\n Time: \"string\",\n Instant: \"string\",\n Uri: \"string\",\n Url: \"string\",\n Canonical: \"string\",\n Code: \"string\",\n Oid: \"string\",\n Id: \"string\",\n Markdown: \"string\",\n UnsignedInt: \"number\",\n PositiveInt: \"number\",\n Uuid: \"string\",\n Base64Binary: \"string\",\n };\n return primitives[fhirName] ?? fhirName;\n};\n\n/**\n * Collect sub-extension \"flat input\" info from an extension profile's own\n * slice definitions on its `extension` field.\n */\nexport const collectSubExtensionSlices = (extProfile: ProfileTypeSchema): SubExtensionSliceInfo[] => {\n const extensionField = extProfile.fields?.extension;\n if (!extensionField || isChoiceDeclarationField(extensionField) || !extensionField.slicing?.slices) return [];\n const result: SubExtensionSliceInfo[] = [];\n for (const [sliceName, slice] of Object.entries(extensionField.slicing.slices)) {\n const valueField = extractValueField(slice.elements);\n if (!valueField) continue;\n const tsType = valueFieldToTsType(valueField);\n const isArray = slice.max === undefined;\n const isRequired = slice.min !== undefined && slice.min >= 1;\n result.push({\n name: tsCamelCase(sliceName) || sliceName,\n url: sliceName,\n valueField,\n tsType,\n isArray,\n isRequired,\n });\n }\n return result;\n};\n\n/**\n * Resolve extension URL → extension profile class info (if the extension has\n * its own generated profile class in the index).\n */\nexport const resolveExtensionProfile = (\n tsIndex: TypeSchemaIndex,\n pkgName: string,\n url: string,\n): ExtensionProfileInfo | undefined => {\n const schema = tsIndex.resolveByUrl(pkgName, url as CanonicalUrl);\n if (!schema || !isProfileTypeSchema(schema)) return undefined;\n // Only resolve extension profiles from the same package to avoid cross-package imports\n if (schema.identifier.package !== pkgName) return undefined;\n const className = tsProfileClassName(schema);\n const modulePath = `./${tsProfileModuleName(tsIndex, schema)}`;\n const flatProfile = tsIndex.flatProfile(schema);\n return { className, modulePath, flatProfile };\n};\n\n/** Generate the body of a raw Extension branch: validate url, then push. */\nconst generateRawExtensionBody = (w: TypeScript, ext: ProfileExtension, targetPath: string[], paramName = \"input\") => {\n w.line(\n `if (${paramName}.url !== ${JSON.stringify(ext.url)}) throw new Error(\\`Expected extension url '${ext.url}', got '\\${${paramName}.url}'\\`)`,\n );\n generateExtensionPush(w, targetPath, paramName);\n};\n\n/** Generate the code that pushes an extension onto the target (root or nested path). */\nexport const generateExtensionPush = (w: TypeScript, targetPath: string[], extExpr: string) => {\n if (targetPath.length === 0) {\n w.line(`pushExtension(this.resource, ${extExpr})`);\n } else {\n w.line(\n `const target = ensurePath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n w.line(\"if (!Array.isArray(target.extension)) target.extension = [] as Extension[]\");\n w.line(`pushExtension(target as unknown as { extension?: Extension[] }, ${extExpr})`);\n }\n};\n\n/** Generate the extension lookup code for getters. */\nconst generateExtLookup = (w: TypeScript, ext: ProfileExtension, targetPath: string[]) => {\n if (targetPath.length === 0) {\n w.line(`const ext = this.resource.extension?.find(e => e.url === \"${ext.url}\")`);\n } else {\n w.line(\n `const target = ensurePath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n w.line(`const ext = (target.extension as Extension[] | undefined)?.find(e => e.url === \"${ext.url}\")`);\n }\n};\n\nconst effectiveGetterDefault = (w: TypeScript, hasProfile: boolean): \"flat\" | \"profile\" | \"raw\" => {\n const configured = w.opts.extensionGetterDefault ?? \"flat\";\n if (configured === \"profile\" && !hasProfile) return \"flat\";\n return configured;\n};\n\nconst returnTypeForMode = (mode: \"flat\" | \"profile\" | \"raw\", inputType: string, profileClassName?: string): string => {\n if (mode === \"profile\" && profileClassName) return profileClassName;\n if (mode === \"raw\") return \"Extension\";\n return inputType;\n};\n\nconst generateExtensionGetterOverloads = (\n w: TypeScript,\n ext: ProfileExtension,\n targetPath: string[],\n methodName: string,\n inputType: string,\n extProfileInfo: ExtensionProfileInfo | undefined,\n generateInputBody: () => void,\n) => {\n const hasProfile = !!extProfileInfo;\n const defaultMode = effectiveGetterDefault(w, hasProfile);\n const modes: (\"flat\" | \"profile\" | \"raw\")[] = hasProfile ? [\"flat\", \"profile\", \"raw\"] : [\"flat\", \"raw\"];\n\n for (const mode of modes) {\n const rt = returnTypeForMode(mode, inputType, extProfileInfo?.className);\n w.lineSM(`public ${methodName}(mode: '${mode}'): ${rt} | undefined`);\n }\n const defaultReturn = returnTypeForMode(defaultMode, inputType, extProfileInfo?.className);\n w.lineSM(`public ${methodName}(): ${defaultReturn} | undefined`);\n\n const allReturns = [...new Set(modes.map((m) => returnTypeForMode(m, inputType, extProfileInfo?.className)))];\n const modesUnion = modes.map((m) => `'${m}'`).join(\" | \");\n w.curlyBlock(\n [\"public\", methodName, `(mode: ${modesUnion} = '${defaultMode}'): ${allReturns.join(\" | \")} | undefined`],\n () => {\n generateExtLookup(w, ext, targetPath);\n w.line(\"if (!ext) return undefined\");\n w.line(\"if (mode === 'raw') return ext\");\n if (hasProfile) {\n w.line(`if (mode === 'profile') return ${extProfileInfo?.className}.apply(ext)`);\n }\n generateInputBody();\n },\n );\n};\n\ntype ExtensionMethodInfo = {\n ext: ProfileExtension;\n flatProfile: ProfileTypeSchema;\n setMethodName: string;\n getMethodName: string;\n targetPath: string[];\n extProfileInfo: ExtensionProfileInfo | undefined;\n};\n\n// Complex extension — has sub-extensions (e.g., Race with ombCategory, detailed, text)\n\nconst generateComplexExtensionSetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, flatProfile, setMethodName, targetPath, extProfileInfo } = info;\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const inputTypeName = tsExtensionFlatTypeName(tsProfileName, ext.name);\n const extProfileHasFlatInput = extProfileInfo\n ? collectSubExtensionSlices(extProfileInfo.flatProfile).length > 0\n : false;\n\n if (extProfileInfo && extProfileHasFlatInput) {\n const paramType = `${extProfileInfo.className}Flat | ${extProfileInfo.className} | Extension`;\n w.curlyBlock([\"public\", setMethodName, `(input: ${paramType}): this`], () => {\n w.ifElseChain(\n [\n {\n cond: `input instanceof ${extProfileInfo.className}`,\n body: () => generateExtensionPush(w, targetPath, \"input.toResource()\"),\n },\n {\n cond: \"isExtension<Extension>(input)\",\n body: () => generateRawExtensionBody(w, ext, targetPath),\n },\n ],\n () => generateExtensionPush(w, targetPath, `${extProfileInfo.className}.createResource(input)`),\n );\n w.line(\"return this\");\n });\n } else {\n w.curlyBlock([\"public\", setMethodName, `(input: ${inputTypeName}): this`], () => {\n w.line(\"const subExtensions: Extension[] = []\");\n for (const sub of ext.subExtensions ?? []) {\n const valueField = sub.valueFieldType ? tsValueFieldName(sub.valueFieldType) : \"value\";\n if (sub.max === \"*\") {\n w.curlyBlock([\"if\", `(input.${sub.name})`], () => {\n w.curlyBlock([\"for\", `(const item of input.${sub.name})`], () => {\n w.line(`subExtensions.push({ url: \"${sub.url}\", ${valueField}: item } as Extension)`);\n });\n });\n } else {\n w.curlyBlock([\"if\", `(input.${sub.name} !== undefined)`], () => {\n w.line(\n `subExtensions.push({ url: \"${sub.url}\", ${valueField}: input.${sub.name} } as Extension)`,\n );\n });\n }\n }\n if (targetPath.length === 0) {\n w.line(\"const list = (this.resource.extension ??= [])\");\n w.line(`list.push({ url: \"${ext.url}\", extension: subExtensions })`);\n } else {\n w.line(\n `const target = ensurePath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n w.line(\"if (!Array.isArray(target.extension)) target.extension = [] as Extension[]\");\n w.line(`(target.extension as Extension[]).push({ url: \"${ext.url}\", extension: subExtensions })`);\n }\n w.line(\"return this\");\n });\n }\n};\n\nconst generateComplexExtensionGetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, flatProfile, getMethodName, targetPath, extProfileInfo } = info;\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const inputTypeName = tsExtensionFlatTypeName(tsProfileName, ext.name);\n const extProfileHasFlatInput = extProfileInfo\n ? collectSubExtensionSlices(extProfileInfo.flatProfile).length > 0\n : false;\n const inputType = extProfileHasFlatInput && extProfileInfo ? `${extProfileInfo.className}Flat` : inputTypeName;\n\n generateExtensionGetterOverloads(w, ext, targetPath, getMethodName, inputType, extProfileInfo, () => {\n const configItems = (ext.subExtensions ?? []).map((sub) => {\n const valueField = sub.valueFieldType ? tsValueFieldName(sub.valueFieldType) : \"value\";\n const isArray = sub.max === \"*\";\n return `{ name: \"${sub.url}\", valueField: \"${valueField}\", isArray: ${isArray} }`;\n });\n w.line(`const config = [${configItems.join(\", \")}]`);\n w.line(`return extractComplexExtension<${inputType}>(ext, config)`);\n });\n};\n\n// Single-value extension — one known value type (e.g., birthSex with valueCode)\n\nconst generateSingleValueExtensionSetter = (w: TypeScript, tsIndex: TypeSchemaIndex, info: ExtensionMethodInfo) => {\n const { ext, setMethodName, targetPath, extProfileInfo } = info;\n const firstValueType = ext.valueFieldTypes?.[0];\n if (!firstValueType) return;\n const valueType = tsTypeFromIdentifier(firstValueType);\n const valueField = tsValueFieldName(firstValueType);\n\n if (extProfileInfo) {\n const paramType = `${extProfileInfo.className} | Extension | ${valueType}`;\n const extHasValueParam = collectProfileFactoryInfo(tsIndex, extProfileInfo.flatProfile).params.some(\n (p) => p.name === valueField,\n );\n const elseExpr = extHasValueParam\n ? `${extProfileInfo.className}.createResource({ ${valueField}: value as ${valueType} })`\n : `{ url: \"${ext.url}\", ${valueField}: value as ${valueType} } as Extension`;\n w.curlyBlock([\"public\", setMethodName, `(value: ${paramType}): this`], () => {\n w.ifElseChain(\n [\n {\n cond: `value instanceof ${extProfileInfo.className}`,\n body: () => generateExtensionPush(w, targetPath, \"value.toResource()\"),\n },\n {\n cond: \"isExtension(value)\",\n body: () => generateRawExtensionBody(w, ext, targetPath, \"value\"),\n },\n ],\n () => generateExtensionPush(w, targetPath, elseExpr),\n );\n w.line(\"return this\");\n });\n } else {\n w.curlyBlock([\"public\", setMethodName, `(value: ${valueType}): this`], () => {\n const extLiteral = `{ url: \"${ext.url}\", ${valueField}: value } as Extension`;\n generateExtensionPush(w, targetPath, extLiteral);\n w.line(\"return this\");\n });\n }\n};\n\nconst generateSingleValueExtensionGetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, getMethodName, targetPath, extProfileInfo } = info;\n const firstValueType = ext.valueFieldTypes?.[0];\n if (!firstValueType) return;\n const valueType = tsTypeFromIdentifier(firstValueType);\n const valueField = tsValueFieldName(firstValueType);\n\n generateExtensionGetterOverloads(w, ext, targetPath, getMethodName, valueType, extProfileInfo, () => {\n w.line(`return getExtensionValue<${valueType}>(ext, \"${valueField}\")`);\n });\n};\n\n// Generic extension — no known value type\n\nconst generateGenericExtensionSetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, setMethodName, targetPath } = info;\n\n w.curlyBlock([\"public\", setMethodName, `(value: Omit<Extension, \"url\"> | Extension): this`], () => {\n w.ifElseChain(\n [\n {\n cond: \"isExtension(value)\",\n body: () => generateRawExtensionBody(w, ext, targetPath, \"value\"),\n },\n ],\n () => generateExtensionPush(w, targetPath, `{ url: \"${ext.url}\", ...value } as Extension`),\n );\n w.line(\"return this\");\n });\n};\n\nconst generateGenericExtensionGetter = (w: TypeScript, info: ExtensionMethodInfo) => {\n const { ext, getMethodName, targetPath } = info;\n\n w.curlyBlock([\"public\", getMethodName, \"(): Extension | undefined\"], () => {\n if (targetPath.length === 0) {\n w.line(`return this.resource.extension?.find(e => e.url === \"${ext.url}\")`);\n } else {\n w.line(\n `const target = ensurePath(this.resource as unknown as Record<string, unknown>, ${JSON.stringify(targetPath)})`,\n );\n w.line(`return (target.extension as Extension[] | undefined)?.find(e => e.url === \"${ext.url}\")`);\n }\n });\n};\n\nexport const generateExtensionMethods = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n extensionBaseNames: Record<string, string>,\n) => {\n for (const ext of flatProfile.extensions ?? []) {\n if (!ext.url) continue;\n const baseName = tsResolvedExtensionBaseName(extensionBaseNames, ext.url, ext.path, ext.name);\n const targetPath = ext.path.split(\".\").filter((segment) => segment !== \"extension\");\n const extProfileInfo = resolveExtensionProfile(tsIndex, flatProfile.identifier.package, ext.url);\n const info: ExtensionMethodInfo = {\n ext,\n flatProfile,\n setMethodName: `set${baseName}`,\n getMethodName: `get${baseName}`,\n targetPath,\n extProfileInfo,\n };\n\n if (ext.isComplex && ext.subExtensions) {\n generateComplexExtensionSetter(w, info);\n w.line();\n generateComplexExtensionGetter(w, info);\n } else if (ext.valueFieldTypes?.length === 1 && ext.valueFieldTypes[0]) {\n generateSingleValueExtensionSetter(w, tsIndex, info);\n w.line();\n generateSingleValueExtensionGetter(w, info);\n } else {\n generateGenericExtensionSetter(w, info);\n w.line();\n generateGenericExtensionGetter(w, info);\n }\n w.line();\n }\n};\n\nexport const collectTypesFromExtensions = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n addType: (typeId: TypeIdentifier) => void,\n): boolean => {\n let needsExtensionType = false;\n\n for (const ext of flatProfile.extensions ?? []) {\n if (ext.isComplex && ext.subExtensions) {\n needsExtensionType = true;\n for (const sub of ext.subExtensions) {\n if (!sub.valueFieldType) continue;\n const resolvedType = tsIndex.resolveByUrl(\n flatProfile.identifier.package,\n sub.valueFieldType.url as CanonicalUrl,\n );\n addType(resolvedType?.identifier ?? sub.valueFieldType);\n }\n } else if (ext.valueFieldTypes && ext.valueFieldTypes.length === 1) {\n needsExtensionType = true;\n if (ext.valueFieldTypes[0]) {\n const resolvedType = tsIndex.resolveByUrl(\n flatProfile.identifier.package,\n ext.valueFieldTypes[0].url as CanonicalUrl,\n );\n addType(resolvedType?.identifier ?? ext.valueFieldTypes[0]);\n }\n } else {\n needsExtensionType = true;\n }\n }\n\n return needsExtensionType;\n};\n\n/** Collect types used in the FlatInput of extension profiles. */\nexport const collectTypesFromFlatInput = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n addType: (typeId: TypeIdentifier) => void,\n) => {\n if (flatProfile.base.name !== \"Extension\") return;\n const subSlices = collectSubExtensionSlices(flatProfile);\n for (const sub of subSlices) {\n const tsType = sub.tsType;\n // Primitive types (string, boolean, number) don't need imports\n if ([\"string\", \"boolean\", \"number\"].includes(tsType)) continue;\n // Resolve complex FHIR type by name\n const fhirUrl = `http://hl7.org/fhir/StructureDefinition/${tsType}` as CanonicalUrl;\n const schema = tsIndex.resolveByUrl(flatProfile.identifier.package, fhirUrl);\n if (schema) addType(schema.identifier);\n }\n};\n","import {\n type ConstrainedChoiceInfo,\n isChoiceDeclarationField,\n isNotChoiceDeclarationField,\n isPrimitiveIdentifier,\n type ProfileTypeSchema,\n type RegularField,\n type TypeIdentifier,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n tsFieldName,\n tsProfileClassName,\n tsResolvedSliceBaseName,\n tsResourceName,\n tsSliceFlatTypeName,\n tsSliceStaticName,\n} from \"./name\";\nimport { tsGet, tsTypeFromIdentifier } from \"./utils\";\nimport type { TypeScript } from \"./writer\";\n\n/** Collect choice declaration field names from a base type schema */\nconst collectChoiceBaseNames = (tsIndex: TypeSchemaIndex, typeId: TypeIdentifier): Set<string> => {\n const names = new Set<string>();\n const schema = tsIndex.resolveType(typeId);\n if (schema && \"fields\" in schema && schema.fields) {\n for (const [name, f] of Object.entries(schema.fields)) {\n if (isChoiceDeclarationField(f)) names.add(name);\n }\n }\n return names;\n};\n\n/** Extract resource type name from a type-discriminator match (e.g. {\"resource\":{\"resourceType\":\"Patient\"}} → \"Patient\") */\nexport const extractResourceTypeFromMatch = (match: Record<string, unknown>): string | undefined => {\n for (const value of Object.values(match)) {\n if (typeof value !== \"object\" || value === null) continue;\n const obj = value as Record<string, unknown>;\n if (typeof obj.resourceType === \"string\") return obj.resourceType;\n const nested = extractResourceTypeFromMatch(obj);\n if (nested) return nested;\n }\n return undefined;\n};\n\nexport const collectTypesFromSlices = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n addType: (typeId: TypeIdentifier) => void,\n) => {\n const pkgName = flatProfile.identifier.package;\n for (const field of Object.values(flatProfile.fields ?? {})) {\n if (!isNotChoiceDeclarationField(field) || !field.slicing?.slices || !field.type) continue;\n const isTypeDisc = field.slicing.discriminator?.some((d) => d.type === \"type\") ?? false;\n for (const slice of Object.values(field.slicing.slices)) {\n if (Object.keys(slice.match ?? {}).length > 0) {\n addType(field.type);\n const cc = slice.elements ? tsIndex.constrainedChoice(pkgName, field.type, slice.elements) : undefined;\n if (cc) addType(cc.variantType);\n // For type discriminator slices, also import the matched resource type\n if (isTypeDisc && slice.match) {\n const resourceTypeName = extractResourceTypeFromMatch(slice.match);\n if (resourceTypeName) {\n const resourceSchema = tsIndex.schemas.find(\n (s) => s.identifier.name === resourceTypeName && s.identifier.kind === \"resource\",\n );\n if (resourceSchema) addType(resourceSchema.identifier);\n }\n }\n }\n }\n }\n};\n\nexport const collectRequiredSliceNames = (field: RegularField): string[] | undefined => {\n if (!field.array || !field.slicing?.slices) return undefined;\n const names = Object.entries(field.slicing.slices)\n .filter(([_, s]) => s.min !== undefined && s.min >= 1 && s.match && Object.keys(s.match).length > 0)\n .map(([name]) => name);\n return names.length > 0 ? names : undefined;\n};\n\nexport type SliceDef = {\n fieldName: string;\n baseType: string;\n /** Base type parameterized with the matched resource type (e.g. \"BundleEntry<Patient>\") */\n typedBaseType: string;\n sliceName: string;\n match: Record<string, unknown>;\n /** Required fields, already filtered (match keys and polymorphic base names removed) */\n required: string[];\n excluded: string[];\n array: boolean;\n constrainedChoice: ConstrainedChoiceInfo | undefined;\n /** True when the slice uses a type discriminator (match by resourceType) */\n typeDiscriminator: boolean;\n};\n\nexport const collectSliceDefs = (tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema): SliceDef[] =>\n Object.entries(flatProfile.fields ?? {})\n .filter(([_, field]) => isNotChoiceDeclarationField(field) && field.slicing?.slices)\n .flatMap(([fieldName, field]) => {\n if (!isNotChoiceDeclarationField(field) || !field.slicing?.slices || !field.type) return [];\n const baseType = tsTypeFromIdentifier(field.type);\n const pkgName = flatProfile.identifier.package;\n const choiceBaseNames = collectChoiceBaseNames(tsIndex, field.type);\n const isTypeDisc = field.slicing.discriminator?.some((d) => d.type === \"type\") ?? false;\n return Object.entries(field.slicing.slices)\n .filter(([_, slice]) => Object.keys(slice.match ?? {}).length > 0)\n .map(([sliceName, slice]) => {\n const matchFields = Object.keys(slice.match ?? {});\n const required = (slice.required ?? []).filter(\n (name) => !matchFields.includes(name) && !choiceBaseNames.has(name),\n );\n const cc = slice.elements\n ? tsIndex.constrainedChoice(pkgName, field.type, slice.elements)\n : undefined;\n // Skip flattening for primitive types — can't intersect object with boolean/string/etc.\n const constrainedChoice = cc && !isPrimitiveIdentifier(cc.variantType) ? cc : undefined;\n const resourceType = isTypeDisc ? extractResourceTypeFromMatch(slice.match ?? {}) : undefined;\n const typedBaseType = resourceType ? `${baseType}<${resourceType}>` : baseType;\n return {\n fieldName,\n baseType,\n typedBaseType,\n sliceName,\n match: slice.match ?? {},\n required,\n excluded: slice.excluded ?? [],\n array: Boolean(field.array),\n constrainedChoice,\n typeDiscriminator: isTypeDisc,\n };\n });\n });\n\nexport const generateSliceSetters = (\n w: TypeScript,\n sliceDefs: SliceDef[],\n flatProfile: ProfileTypeSchema,\n sliceBaseNames: Record<string, string>,\n) => {\n const profileClassName = tsProfileClassName(flatProfile);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n for (const sliceDef of sliceDefs) {\n const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName);\n const methodName = `set${baseName}`;\n const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`;\n const tsField = tsFieldName(sliceDef.fieldName);\n const fieldAccess = tsGet(\"this.resource\", tsField);\n const baseType = sliceDef.typedBaseType;\n // Make input optional when there are no required fields (input can be empty object)\n const inputOptional = sliceDef.required.length === 0;\n const unionType = `${typeName} | ${baseType}`;\n const paramSignature = inputOptional ? `(input?: ${unionType}): this` : `(input: ${unionType}): this`;\n w.curlyBlock([\"public\", methodName, paramSignature], () => {\n w.line(`const match = ${matchRef}`);\n w.curlyBlock([\"if\", \"(input && matchesValue(input, match))\"], () => {\n if (sliceDef.array) {\n w.line(`setArraySlice(${fieldAccess} ??= [], match, input as ${baseType})`);\n } else {\n w.line(`${fieldAccess} = input as ${baseType}`);\n }\n w.line(\"return this\");\n });\n const inputExpr = inputOptional ? \"input ?? {}\" : \"input\";\n if (sliceDef.constrainedChoice) {\n const cc = sliceDef.constrainedChoice;\n w.line(`const wrapped = wrapSliceChoice<${baseType}>(${inputExpr}, ${JSON.stringify(cc.variant)})`);\n w.line(`const value = applySliceMatch<${baseType}>(wrapped, match)`);\n } else {\n w.line(`const value = applySliceMatch<${baseType}>(${inputExpr}, match)`);\n }\n if (sliceDef.array) {\n w.line(`setArraySlice(${fieldAccess} ??= [], match, value)`);\n } else {\n w.line(`${fieldAccess} = value`);\n }\n w.line(\"return this\");\n });\n w.line();\n }\n};\n\nexport const generateSliceGetters = (\n w: TypeScript,\n sliceDefs: SliceDef[],\n flatProfile: ProfileTypeSchema,\n sliceBaseNames: Record<string, string>,\n) => {\n const profileClassName = tsProfileClassName(flatProfile);\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const defaultMode = w.opts.sliceGetterDefault ?? \"flat\";\n for (const sliceDef of sliceDefs) {\n const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName);\n const getMethodName = `get${baseName}`;\n const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`;\n const matchKeys = JSON.stringify(Object.keys(sliceDef.match));\n const tsField = tsFieldName(sliceDef.fieldName);\n const fieldAccess = tsGet(\"this.resource\", tsField);\n const baseType = sliceDef.typedBaseType;\n const defaultReturn = defaultMode === \"raw\" ? baseType : typeName;\n\n // Overload signatures\n w.lineSM(`public ${getMethodName}(mode: 'flat'): ${typeName} | undefined`);\n w.lineSM(`public ${getMethodName}(mode: 'raw'): ${baseType} | undefined`);\n w.lineSM(`public ${getMethodName}(): ${defaultReturn} | undefined`);\n\n // Implementation\n w.curlyBlock(\n [\n \"public\",\n getMethodName,\n `(mode: 'flat' | 'raw' = '${defaultMode}'): ${typeName} | ${baseType} | undefined`,\n ],\n () => {\n w.line(`const match = ${matchRef}`);\n if (sliceDef.array) {\n w.line(`const item = getArraySlice(${fieldAccess}, match)`);\n w.line(\"if (!item) return undefined\");\n } else {\n w.line(`const item = ${fieldAccess}`);\n w.line(\"if (!item || !matchesValue(item, match)) return undefined\");\n }\n if (sliceDef.typeDiscriminator) {\n w.line(`if (mode === 'raw') return item as ${baseType}`);\n } else {\n w.line(\"if (mode === 'raw') return item\");\n }\n if (sliceDef.typeDiscriminator) {\n w.line(`return item as ${typeName}`);\n } else if (sliceDef.constrainedChoice) {\n const cc = sliceDef.constrainedChoice;\n w.line(`return unwrapSliceChoice<${typeName}>(item, ${matchKeys}, ${JSON.stringify(cc.variant)})`);\n } else {\n w.line(`return stripMatchKeys<${typeName}>(item, ${matchKeys})`);\n }\n },\n );\n w.line();\n }\n};\n","import {\n type ChoiceFieldInstance,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n type ProfileTypeSchema,\n type RegularField,\n type TypeIdentifier,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport { tsProfileClassName } from \"./name\";\nimport type { TypeScript } from \"./writer\";\n\nexport const collectRegularFieldValidation = (\n errors: string[],\n warnings: string[],\n name: string,\n field: RegularField | ChoiceFieldInstance,\n resolveRef: (ref: TypeIdentifier) => TypeIdentifier,\n canonicalUrlExpr?: { url: string; expr: string },\n) => {\n if (field.excluded) {\n errors.push(`...validateExcluded(res, profileName, ${JSON.stringify(name)})`);\n return;\n }\n\n if (field.required) errors.push(`...validateRequired(res, profileName, ${JSON.stringify(name)})`);\n\n if (field.valueConstraint) {\n const valueExpr =\n canonicalUrlExpr && name === \"url\" && field.valueConstraint.value === canonicalUrlExpr.url\n ? canonicalUrlExpr.expr\n : JSON.stringify(field.valueConstraint.value);\n errors.push(`...validateFixedValue(res, profileName, ${JSON.stringify(name)}, ${valueExpr})`);\n }\n\n if (field.enum) {\n const target = field.enum.isOpen ? warnings : errors;\n target.push(`...validateEnum(res, profileName, ${JSON.stringify(name)}, ${JSON.stringify(field.enum.values)})`);\n }\n\n if (field.mustSupport && !field.required)\n warnings.push(`...validateMustSupport(res, profileName, ${JSON.stringify(name)})`);\n\n if (field.reference && field.reference.length > 0)\n errors.push(\n `...validateReference(res, profileName, ${JSON.stringify(name)}, ${JSON.stringify(field.reference.map((ref) => resolveRef(ref).name))})`,\n );\n\n if (field.slicing?.slices) {\n for (const [sliceName, slice] of Object.entries(field.slicing.slices)) {\n if (slice.min === undefined && slice.max === undefined) continue;\n const match = slice.match ?? {};\n if (Object.keys(match).length === 0) continue;\n const min = slice.min ?? 0;\n const max = slice.max ?? 0;\n errors.push(\n `...validateSliceCardinality(res, profileName, ${JSON.stringify(name)}, ${JSON.stringify(match)}, ${JSON.stringify(sliceName)}, ${min}, ${max})`,\n );\n }\n }\n};\n\nexport const generateValidateMethod = (w: TypeScript, tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) => {\n const fields = flatProfile.fields ?? {};\n const profileName = flatProfile.identifier.name;\n const canonicalUrl = flatProfile.identifier.url;\n const canonicalUrlExpr = canonicalUrl\n ? { url: canonicalUrl, expr: `${tsProfileClassName(flatProfile)}.canonicalUrl` }\n : undefined;\n w.curlyBlock([\"validate(): { errors: string[]; warnings: string[] }\"], () => {\n w.line(`const profileName = \"${profileName}\"`);\n w.line(\"const res = this.resource\");\n\n const errors: string[] = [];\n const warnings: string[] = [];\n for (const [name, field] of Object.entries(fields)) {\n if (isChoiceInstanceField(field)) {\n const decl = fields[field.choiceOf];\n if (decl && isChoiceDeclarationField(decl) && decl.prohibited?.includes(name))\n errors.push(`...validateExcluded(res, profileName, ${JSON.stringify(name)})`);\n continue;\n }\n\n if (isChoiceDeclarationField(field)) {\n if (field.required)\n errors.push(`...validateChoiceRequired(res, profileName, ${JSON.stringify(field.choices)})`);\n continue;\n }\n\n collectRegularFieldValidation(\n errors,\n warnings,\n name,\n field,\n tsIndex.findLastSpecializationByIdentifier,\n canonicalUrlExpr,\n );\n }\n\n const emitArray = (label: string, exprs: string[]) => {\n if (exprs.length === 0) {\n w.line(`${label}: [],`);\n } else {\n w.squareBlock([`${label}:`], () => {\n for (const expr of exprs) w.line(`${expr},`);\n }, [\",\"]);\n }\n };\n w.curlyBlock([\"return\"], () => {\n emitArray(\"errors\", errors);\n emitArray(\"warnings\", warnings);\n });\n });\n w.line();\n};\n","import { pascalCase, uppercaseFirstLetter } from \"@root/api/writer-generator/utils\";\nimport {\n type CanonicalUrl,\n isChoiceDeclarationField,\n isChoiceInstanceField,\n isNestedIdentifier,\n isNotChoiceDeclarationField,\n isPrimitiveIdentifier,\n isResourceIdentifier,\n type ProfileExtension,\n type ProfileTypeSchema,\n packageMeta,\n packageMetaToFhir,\n type TypeIdentifier,\n} from \"@root/typeschema/types\";\nimport type { TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n tsCamelCase,\n tsExtensionFlatTypeName,\n tsExtensionMethodBaseName,\n tsFieldName,\n tsModulePath,\n tsNameFromCanonical,\n tsPackageDir,\n tsProfileClassName,\n tsProfileModuleName,\n tsQualifiedExtensionMethodBaseName,\n tsQualifiedSliceMethodBaseName,\n tsResourceName,\n tsSliceFlatTypeName,\n tsSliceMethodBaseName,\n tsSliceStaticName,\n} from \"./name\";\nimport {\n collectSubExtensionSlices,\n collectTypesFromExtensions,\n collectTypesFromFlatInput,\n generateExtensionMethods,\n resolveExtensionProfile,\n} from \"./profile-extensions\";\nimport {\n collectRequiredSliceNames,\n collectSliceDefs,\n collectTypesFromSlices,\n generateSliceGetters,\n generateSliceSetters,\n type SliceDef,\n} from \"./profile-slices\";\nimport { generateValidateMethod } from \"./profile-validation\";\nimport { fieldTsType, tsGet, tsTypeFromIdentifier } from \"./utils\";\nimport type { TypeScript } from \"./writer\";\n\ntype ProfileFactoryInfo = {\n autoFields: { name: string; value: string }[];\n /** Array fields with required slices — optional param with auto-merge of required stubs */\n sliceAutoFields: { name: string; tsType: string; typeId: TypeIdentifier; sliceNames: string[] }[];\n params: { name: string; tsType: string; typeId: TypeIdentifier }[];\n accessors: { name: string; tsType: string; typeId: TypeIdentifier }[];\n};\n\nconst collectChoiceAccessors = (\n flatProfile: ProfileTypeSchema,\n promotedChoices: Set<string>,\n): ProfileFactoryInfo[\"accessors\"] => {\n const accessors: ProfileFactoryInfo[\"accessors\"] = [];\n for (const [name, field] of Object.entries(flatProfile.fields ?? {})) {\n if (field.excluded) continue;\n if (!isChoiceInstanceField(field)) continue;\n if (promotedChoices.has(name)) continue;\n const tsType = tsTypeFromIdentifier(field.type) + (field.array ? \"[]\" : \"\");\n accessors.push({ name, tsType, typeId: field.type });\n }\n return accessors;\n};\n\n/** Try to promote a required single-choice declaration to a direct param */\nconst tryPromoteChoice = (\n field: NonNullable<ProfileTypeSchema[\"fields\"]>[string],\n fields: NonNullable<ProfileTypeSchema[\"fields\"]>,\n params: ProfileFactoryInfo[\"params\"],\n promotedChoices: Set<string>,\n): void => {\n if (!isChoiceDeclarationField(field) || !field.required || field.choices.length !== 1) return;\n const choiceName = field.choices[0];\n if (!choiceName) return;\n const choiceField = fields[choiceName];\n if (!choiceField || !isChoiceInstanceField(choiceField)) return;\n const tsType = tsTypeFromIdentifier(choiceField.type) + (choiceField.array ? \"[]\" : \"\");\n params.push({ name: choiceName, tsType, typeId: choiceField.type });\n promotedChoices.add(choiceName);\n};\n\nexport const collectProfileFactoryInfo = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n): ProfileFactoryInfo => {\n const autoFields: ProfileFactoryInfo[\"autoFields\"] = [];\n const sliceAutoFields: ProfileFactoryInfo[\"sliceAutoFields\"] = [];\n const params: ProfileFactoryInfo[\"params\"] = [];\n const autoAccessors: ProfileFactoryInfo[\"accessors\"] = [];\n const fields = flatProfile.fields ?? {};\n const promotedChoices = new Set<string>();\n const resolveRef = tsIndex.findLastSpecializationByIdentifier;\n\n if (isResourceIdentifier(flatProfile.base)) {\n autoFields.push({ name: \"resourceType\", value: JSON.stringify(flatProfile.base.name) });\n }\n\n for (const [name, field] of Object.entries(fields)) {\n if (field.excluded) continue;\n if (isChoiceInstanceField(field)) continue;\n\n if (isChoiceDeclarationField(field)) {\n tryPromoteChoice(field, fields, params, promotedChoices);\n continue;\n }\n\n if (field.valueConstraint) {\n const value = JSON.stringify(field.valueConstraint.value);\n autoFields.push({ name, value: field.array ? `[${value}]` : value });\n if (isNotChoiceDeclarationField(field) && field.type) {\n const tsType = fieldTsType(field, resolveRef);\n autoAccessors.push({ name, tsType, typeId: field.type });\n }\n continue;\n }\n\n if (isNotChoiceDeclarationField(field)) {\n const sliceNames = collectRequiredSliceNames(field);\n if (sliceNames) {\n if (field.type) {\n const tsType = fieldTsType(field, resolveRef);\n sliceAutoFields.push({\n name,\n tsType,\n typeId: field.type,\n sliceNames,\n });\n autoAccessors.push({ name, tsType, typeId: field.type });\n }\n continue;\n }\n }\n\n if (field.required) {\n const tsType = fieldTsType(field, resolveRef);\n params.push({ name, tsType, typeId: field.type });\n }\n }\n\n collectBaseRequiredParams(tsIndex, flatProfile, resolveRef, params, [\n ...autoFields.map((f) => f.name),\n ...sliceAutoFields.map((f) => f.name),\n ...params.map((f) => f.name),\n ...promotedChoices,\n ]);\n\n const accessors = [...autoAccessors, ...collectChoiceAccessors(flatProfile, promotedChoices)];\n return { autoFields, sliceAutoFields, params, accessors };\n};\n\n/** Include base-type required fields not already covered by profile constraints */\nconst collectBaseRequiredParams = (\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n resolveRef: TypeSchemaIndex[\"findLastSpecializationByIdentifier\"],\n params: ProfileFactoryInfo[\"params\"],\n coveredNames: string[],\n) => {\n const covered = new Set(coveredNames);\n const baseSchema = tsIndex.resolveType(flatProfile.base);\n if (!baseSchema || !(\"fields\" in baseSchema) || !baseSchema.fields) return;\n for (const [name, field] of Object.entries(baseSchema.fields)) {\n if (covered.has(name)) continue;\n if (!field.required) continue;\n if (isChoiceInstanceField(field)) continue;\n if (isChoiceDeclarationField(field)) continue;\n if (isNotChoiceDeclarationField(field) && field.type) {\n const tsType = fieldTsType(field, resolveRef);\n params.push({ name, tsType, typeId: field.type });\n }\n }\n};\n\nexport const generateProfileIndexFile = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n initialProfiles: ProfileTypeSchema[],\n) => {\n if (initialProfiles.length === 0) return;\n w.cd(\"profiles\", () => {\n w.cat(\"index.ts\", () => {\n const exports: Map<string, string> = new Map();\n for (const profile of initialProfiles) {\n const className = tsProfileClassName(profile);\n const moduleName = tsProfileModuleName(tsIndex, profile);\n if (!exports.has(className)) {\n exports.set(className, `export { ${className} } from \"./${moduleName}\"`);\n }\n }\n for (const exp of [...exports.values()].sort()) {\n w.lineSM(exp);\n }\n });\n });\n};\n\nconst generateProfileHelpersImport = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n sliceDefs: SliceDef[],\n factoryInfo: ProfileFactoryInfo,\n) => {\n const extensions = flatProfile.extensions ?? [];\n const hasMeta = tsIndex.isWithMetaField(flatProfile);\n const canonicalUrl = flatProfile.identifier.url;\n\n const imports: string[] = [];\n if (!isPrimitiveIdentifier(flatProfile.base)) imports.push(\"buildResource\");\n if (flatProfile.base.name === \"Extension\" && !!canonicalUrl && collectSubExtensionSlices(flatProfile).length > 0)\n imports.push(\"isRawExtensionInput\");\n if (canonicalUrl && hasMeta) imports.push(\"ensureProfile\");\n if (sliceDefs.length > 0 || factoryInfo.sliceAutoFields.length > 0)\n imports.push(\"applySliceMatch\", \"matchesValue\", \"setArraySlice\", \"getArraySlice\", \"ensureSliceDefaults\");\n if (extensions.some((ext) => ext.path.split(\".\").some((s) => s !== \"extension\"))) imports.push(\"ensurePath\");\n if (extensions.some((ext) => ext.isComplex && ext.subExtensions)) imports.push(\"extractComplexExtension\");\n if (sliceDefs.some((s) => !s.typeDiscriminator)) imports.push(\"stripMatchKeys\");\n if (sliceDefs.some((s) => s.constrainedChoice)) imports.push(\"wrapSliceChoice\", \"unwrapSliceChoice\");\n if (extensions.some((ext) => ext.url)) imports.push(\"isExtension\", \"getExtensionValue\", \"pushExtension\");\n if (Object.keys(flatProfile.fields ?? {}).length > 0)\n imports.push(\n \"validateRequired\",\n \"validateExcluded\",\n \"validateFixedValue\",\n \"validateSliceCardinality\",\n \"validateEnum\",\n \"validateReference\",\n \"validateChoiceRequired\",\n \"validateMustSupport\",\n );\n if (imports.length > 0) {\n w.tsImport(\"../../profile-helpers\", ...imports);\n w.line();\n }\n};\n\nexport const generateProfileImports = (w: TypeScript, tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) => {\n const usedTypes = new Map<string, { importPath: string; tsName: string }>();\n\n const getModulePath = (typeId: TypeIdentifier): string => {\n if (isNestedIdentifier(typeId)) {\n const path = tsNameFromCanonical(typeId.url, true);\n if (path) return `../../${tsPackageDir(typeId.package)}/${pascalCase(path)}`;\n }\n return `../../${tsModulePath(typeId)}`;\n };\n\n const addType = (typeId: TypeIdentifier) => {\n if (typeId.kind === \"primitive-type\") return;\n const tsName = tsResourceName(typeId);\n if (!usedTypes.has(tsName)) {\n usedTypes.set(tsName, { importPath: getModulePath(typeId), tsName });\n }\n };\n\n addType(flatProfile.base);\n collectTypesFromSlices(tsIndex, flatProfile, addType);\n const needsExtensionType = collectTypesFromExtensions(tsIndex, flatProfile, addType);\n collectTypesFromFlatInput(tsIndex, flatProfile, addType);\n\n const factoryInfo = collectProfileFactoryInfo(tsIndex, flatProfile);\n for (const param of factoryInfo.params) addType(param.typeId);\n for (const f of factoryInfo.sliceAutoFields) addType(f.typeId);\n for (const accessor of factoryInfo.accessors) addType(accessor.typeId);\n\n if (needsExtensionType) {\n const extensionUrl = \"http://hl7.org/fhir/StructureDefinition/Extension\" as CanonicalUrl;\n const extensionSchema = tsIndex.resolveByUrl(flatProfile.identifier.package, extensionUrl);\n if (extensionSchema) addType(extensionSchema.identifier);\n }\n\n const grouped = new Map<string, string[]>();\n for (const { importPath, tsName } of usedTypes.values()) {\n let names = grouped.get(importPath);\n if (!names) {\n names = [];\n grouped.set(importPath, names);\n }\n names.push(tsName);\n }\n const sortedModules = [...grouped.entries()].sort(([a], [b]) => a.localeCompare(b));\n for (const [importPath, names] of sortedModules) {\n w.tsImport(importPath, ...names.sort(), { typeOnly: true });\n }\n if (sortedModules.length > 0) w.line();\n\n // Import extension profile classes for delegation in setters\n const extProfileImports = new Map<string, { modulePath: string; hasFlatInput: boolean }>();\n for (const ext of flatProfile.extensions ?? []) {\n if (!ext.url) continue;\n const info = resolveExtensionProfile(tsIndex, flatProfile.identifier.package, ext.url);\n if (!info) continue;\n if (!extProfileImports.has(info.className)) {\n const hasFlatInput = collectSubExtensionSlices(info.flatProfile).length > 0;\n extProfileImports.set(info.className, { modulePath: info.modulePath, hasFlatInput });\n }\n }\n for (const [className, { modulePath, hasFlatInput }] of [...extProfileImports.entries()].sort(([a], [b]) =>\n a.localeCompare(b),\n )) {\n const imports = [className, ...(hasFlatInput ? [`type ${className}Flat`] : [])];\n w.tsImport(modulePath, ...imports);\n }\n if (extProfileImports.size > 0) w.line();\n};\n\nconst generateStaticSliceFields = (w: TypeScript, sliceDefs: SliceDef[]) => {\n for (const sliceDef of sliceDefs) {\n const staticName = `${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`;\n w.lineSM(`private static readonly ${staticName}: Record<string, unknown> = ${JSON.stringify(sliceDef.match)}`);\n }\n if (sliceDefs.length > 0) w.line();\n};\n\nconst generateFactoryMethods = (\n w: TypeScript,\n tsIndex: TypeSchemaIndex,\n flatProfile: ProfileTypeSchema,\n factoryInfo: ProfileFactoryInfo,\n) => {\n const profileClassName = tsProfileClassName(flatProfile);\n const tsBaseResourceName = tsTypeFromIdentifier(flatProfile.base);\n const hasMeta = tsIndex.isWithMetaField(flatProfile);\n const hasParams = factoryInfo.params.length > 0 || factoryInfo.sliceAutoFields.length > 0;\n const createArgsTypeName = `${profileClassName}Raw`;\n const paramSignature = hasParams ? `args: ${createArgsTypeName}` : \"\";\n const allFields = [\n ...factoryInfo.autoFields.map((f) => ({ name: f.name, value: f.value })),\n ...factoryInfo.sliceAutoFields.map((f) => ({ name: f.name, value: `${f.name}WithDefaults` })),\n ...factoryInfo.params.map((p) => ({ name: p.name, value: `args.${p.name}` })),\n ];\n w.curlyBlock([\"constructor\", `(resource: ${tsBaseResourceName})`], () => {\n w.lineSM(\"this.resource = resource\");\n });\n w.line();\n w.curlyBlock([\"static\", \"from\", `(resource: ${tsBaseResourceName})`, `: ${profileClassName}`], () => {\n if (hasMeta) {\n w.curlyBlock([\"if\", `(!resource.meta?.profile?.includes(${profileClassName}.canonicalUrl))`], () => {\n w.line(\n `throw new Error(\\`${profileClassName}: meta.profile must include \\${${profileClassName}.canonicalUrl}\\`)`,\n );\n });\n }\n w.lineSM(`const profile = new ${profileClassName}(resource)`);\n w.lineSM(\"const { errors } = profile.validate()\");\n w.line(`if (errors.length > 0) throw new Error(errors.join(\"; \"))`);\n w.lineSM(\"return profile\");\n });\n w.line();\n w.curlyBlock([\"static\", \"apply\", `(resource: ${tsBaseResourceName})`, `: ${profileClassName}`], () => {\n if (hasMeta) {\n w.lineSM(`ensureProfile(resource, ${profileClassName}.canonicalUrl)`);\n }\n w.lineSM(`return new ${profileClassName}(resource)`);\n });\n w.line();\n // For extension profiles with sub-extension slices: generate resolveInput helper,\n // widen createResource and create to accept Input | Raw\n const subSlicesForInput = flatProfile.base.name === \"Extension\" ? collectSubExtensionSlices(flatProfile) : [];\n const hasInputHelper = subSlicesForInput.length > 0;\n\n if (hasInputHelper) {\n const rawInputTypeName = `${profileClassName}Raw`;\n const inputTypeName = `${profileClassName}Flat`;\n\n // Private helper: converts Input to Extension[], passes through Raw.extension\n w.curlyBlock(\n [\"private static\", \"resolveInput\", `(args: ${rawInputTypeName} | ${inputTypeName})`, \": Extension[]\"],\n () => {\n w.ifElseChain(\n [\n {\n cond: `isRawExtensionInput<${rawInputTypeName}>(args)`,\n body: () => w.lineSM(\"return args.extension ?? []\"),\n },\n ],\n () => {\n w.lineSM(\"const result: Extension[] = []\");\n for (const sub of subSlicesForInput) {\n if (sub.isArray) {\n w.curlyBlock([\"if\", `(args.${sub.name})`], () => {\n w.curlyBlock([\"for\", `(const item of args.${sub.name})`], () => {\n w.lineSM(\n `result.push({ url: \"${sub.url}\", ${sub.valueField}: item } as Extension)`,\n );\n });\n });\n } else {\n w.curlyBlock([\"if\", `(args.${sub.name} !== undefined)`], () => {\n w.lineSM(\n `result.push({ url: \"${sub.url}\", ${sub.valueField}: args.${sub.name} } as Extension)`,\n );\n });\n }\n }\n w.lineSM(\"return result\");\n },\n );\n },\n );\n w.line();\n\n // createResource — accepts Input | Raw\n const createResourceSig = hasParams\n ? `args: ${rawInputTypeName} | ${inputTypeName}`\n : `args?: ${rawInputTypeName} | ${inputTypeName}`;\n w.curlyBlock([\"static\", \"createResource\", `(${createResourceSig})`, `: ${tsBaseResourceName}`], () => {\n w.lineSM(`const resolvedExtensions = ${profileClassName}.resolveInput(args ?? {})`);\n const extSliceField = factoryInfo.sliceAutoFields.find((f) => f.name === \"extension\");\n if (extSliceField) {\n const matchRefs = extSliceField.sliceNames.map(\n (s) => `${profileClassName}.${tsSliceStaticName(s)}SliceMatch`,\n );\n w.line(\"const extensionWithDefaults = ensureSliceDefaults(\");\n w.indentBlock(() => {\n w.line(\"resolvedExtensions,\");\n for (const ref of matchRefs) {\n w.line(`${ref},`);\n }\n });\n w.lineSM(\")\");\n }\n w.line();\n const extensionVar = extSliceField ? \"extensionWithDefaults\" : \"resolvedExtensions\";\n w.curlyBlock([`const resource = buildResource<${tsBaseResourceName}>(`], () => {\n for (const f of allFields) {\n if (f.name === \"extension\") continue;\n w.line(`${f.name}: ${f.value},`);\n }\n w.line(`extension: ${extensionVar},`);\n if (hasMeta) {\n w.line(`meta: { profile: [${profileClassName}.canonicalUrl] },`);\n }\n }, [\")\"]);\n\n w.lineSM(\"return resource\");\n });\n w.line();\n\n // create — accepts Input | Raw, delegates to createResource\n const createSig = hasParams\n ? `args: ${rawInputTypeName} | ${inputTypeName}`\n : `args?: ${rawInputTypeName} | ${inputTypeName}`;\n w.curlyBlock([\"static\", \"create\", `(${createSig})`, `: ${profileClassName}`], () => {\n w.lineSM(`return ${profileClassName}.apply(${profileClassName}.createResource(args))`);\n });\n } else {\n // Standard createResource / create (no Input helper)\n w.curlyBlock([\"static\", \"createResource\", `(${paramSignature})`, `: ${tsBaseResourceName}`], () => {\n for (const f of factoryInfo.sliceAutoFields) {\n const matchRefs = f.sliceNames.map((s) => `${profileClassName}.${tsSliceStaticName(s)}SliceMatch`);\n w.line(`const ${f.name}WithDefaults = ensureSliceDefaults(`);\n w.indentBlock(() => {\n w.line(`[...(args.${f.name} ?? [])],`);\n for (const ref of matchRefs) {\n w.line(`${ref},`);\n }\n });\n w.lineSM(\")\");\n }\n if (factoryInfo.sliceAutoFields.length > 0) {\n w.line();\n }\n if (isPrimitiveIdentifier(flatProfile.base)) {\n w.lineSM(`const resource = undefined as unknown as ${tsBaseResourceName}`);\n } else {\n w.curlyBlock([`const resource = buildResource<${tsBaseResourceName}>(`], () => {\n for (const f of allFields) {\n w.line(`${f.name}: ${f.value},`);\n }\n if (hasMeta) {\n w.line(`meta: { profile: [${profileClassName}.canonicalUrl] },`);\n }\n }, [\")\"]);\n }\n w.lineSM(\"return resource\");\n });\n w.line();\n w.curlyBlock([\"static\", \"create\", `(${paramSignature})`, `: ${profileClassName}`], () => {\n w.lineSM(\n `return ${profileClassName}.apply(${profileClassName}.createResource(${hasParams ? \"args\" : \"\"}))`,\n );\n });\n }\n w.line();\n // toResource() returns base type (e.g., Patient)\n w.curlyBlock([\"toResource\", \"()\", `: ${tsBaseResourceName}`], () => {\n w.lineSM(\"return this.resource\");\n });\n w.line();\n};\n\nconst generateFieldAccessors = (\n w: TypeScript,\n factoryInfo: ProfileFactoryInfo,\n extSliceMethodBaseNames: Set<string>,\n) => {\n w.line(\"// Field accessors\");\n for (const p of factoryInfo.params) {\n const methodBaseName = uppercaseFirstLetter(p.name);\n w.curlyBlock([`get${methodBaseName}`, \"()\", `: ${p.tsType} | undefined`], () => {\n w.lineSM(`return this.resource.${p.name} as ${p.tsType} | undefined`);\n });\n w.line();\n w.curlyBlock([`set${methodBaseName}`, `(value: ${p.tsType})`, \": this\"], () => {\n w.lineSM(`Object.assign(this.resource, { ${p.name}: value })`);\n w.lineSM(\"return this\");\n });\n w.line();\n }\n\n // Getter and setter methods for choice instance fields (skip if extension/slice has same name)\n for (const a of factoryInfo.accessors) {\n const methodBaseName = uppercaseFirstLetter(tsCamelCase(a.name));\n if (extSliceMethodBaseNames.has(methodBaseName)) continue;\n const fieldAccess = tsFieldName(a.name);\n w.curlyBlock([`get${methodBaseName}`, \"()\", `: ${a.tsType} | undefined`], () => {\n w.lineSM(`return ${tsGet(\"this.resource\", fieldAccess)} as ${a.tsType} | undefined`);\n });\n w.line();\n w.curlyBlock([`set${methodBaseName}`, `(value: ${a.tsType})`, \": this\"], () => {\n w.lineSM(`Object.assign(this.resource, { ${fieldAccess}: value })`);\n w.lineSM(\"return this\");\n });\n w.line();\n }\n};\n\n/** Generate inline extension input types only for complex extensions without a resolved FlatInput profile */\nconst generateInlineExtensionInputTypes = (w: TypeScript, tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) => {\n const tsProfileName = tsResourceName(flatProfile.identifier);\n const complexExtensions = (flatProfile.extensions ?? []).filter((ext) => ext.isComplex && ext.subExtensions);\n for (const ext of complexExtensions) {\n if (!ext.url) continue;\n const extProfileInfo = resolveExtensionProfile(tsIndex, flatProfile.identifier.package, ext.url);\n const hasFlatInput = extProfileInfo ? collectSubExtensionSlices(extProfileInfo.flatProfile).length > 0 : false;\n if (hasFlatInput) continue;\n const typeName = tsExtensionFlatTypeName(tsProfileName, ext.name);\n w.curlyBlock([\"export\", \"type\", typeName, \"=\"], () => {\n for (const sub of ext.subExtensions ?? []) {\n const tsType = sub.valueFieldType ? tsTypeFromIdentifier(sub.valueFieldType) : \"unknown\";\n const isArray = sub.max === \"*\";\n const isRequired = sub.min !== undefined && sub.min > 0;\n w.lineSM(`${sub.name}${isRequired ? \"\" : \"?\"}: ${tsType}${isArray ? \"[]\" : \"\"}`);\n }\n });\n w.line();\n }\n};\n\nconst generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, sliceDefs: SliceDef[]) => {\n if (sliceDefs.length === 0) return;\n const tsProfileName = tsResourceName(flatProfile.identifier);\n for (const sliceDef of sliceDefs) {\n const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName);\n const matchFields = sliceDef.typeDiscriminator ? [] : Object.keys(sliceDef.match);\n const allExcluded = [...new Set([...sliceDef.excluded, ...matchFields])];\n if (sliceDef.constrainedChoice) {\n const cc = sliceDef.constrainedChoice;\n allExcluded.push(cc.choiceBase);\n for (const name of cc.allChoiceNames) {\n if (!allExcluded.includes(name)) allExcluded.push(name);\n }\n }\n const excludedNames = allExcluded.map((name) => JSON.stringify(name));\n const requiredNames = sliceDef.required.map((name) => JSON.stringify(name));\n const baseType = sliceDef.typedBaseType;\n let typeExpr = baseType;\n if (excludedNames.length > 0) {\n typeExpr = `Omit<${typeExpr}, ${excludedNames.join(\" | \")}>`;\n }\n if (requiredNames.length > 0) {\n typeExpr = `${typeExpr} & Required<Pick<${baseType}, ${requiredNames.join(\" | \")}>>`;\n }\n if (sliceDef.constrainedChoice) {\n typeExpr = `${typeExpr} & ${tsTypeFromIdentifier(sliceDef.constrainedChoice.variantType)}`;\n }\n w.lineSM(`export type ${typeName} = ${typeExpr}`);\n }\n w.line();\n};\n\nconst generateRawType = (w: TypeScript, flatProfile: ProfileTypeSchema, factoryInfo: ProfileFactoryInfo) => {\n const hasParams = factoryInfo.params.length > 0 || factoryInfo.sliceAutoFields.length > 0;\n const subSlices = flatProfile.base.name === \"Extension\" ? collectSubExtensionSlices(flatProfile) : [];\n if (!hasParams && subSlices.length === 0) return;\n\n const createArgsTypeName = `${tsProfileClassName(flatProfile)}Raw`;\n w.curlyBlock([\"export\", \"type\", createArgsTypeName, \"=\"], () => {\n for (const p of factoryInfo.params) {\n w.lineSM(`${p.name}: ${p.tsType}`);\n }\n for (const f of factoryInfo.sliceAutoFields) {\n w.lineSM(`${f.name}?: ${f.tsType}`);\n }\n const extensionCovered =\n factoryInfo.params.some((p) => p.name === \"extension\") ||\n factoryInfo.sliceAutoFields.some((f) => f.name === \"extension\");\n if (subSlices.length > 0 && !extensionCovered) {\n w.lineSM(\"extension?: Extension[]\");\n }\n });\n w.line();\n};\n\nconst generateFlatInputType = (w: TypeScript, flatProfile: ProfileTypeSchema) => {\n const subSlices = flatProfile.base.name === \"Extension\" ? collectSubExtensionSlices(flatProfile) : [];\n if (subSlices.length === 0) return;\n\n const flatInputTypeName = `${tsProfileClassName(flatProfile)}Flat`;\n w.curlyBlock([\"export\", \"type\", flatInputTypeName, \"=\"], () => {\n for (const sub of subSlices) {\n const opt = sub.isRequired ? \"\" : \"?\";\n const arr = sub.isArray ? \"[]\" : \"\";\n w.lineSM(`${sub.name}${opt}: ${sub.tsType}${arr}`);\n }\n });\n w.line();\n};\n\ntype ResolvedProfileMethods = {\n /** \"url:path\" → method base name (e.g., \"Race\" or \"PathRace\") */\n extensions: Record<string, string>;\n /** \"fieldName:sliceName\" → method base name */\n slices: Record<string, string>;\n /** All resolved base names (extensions + slices) for field accessor dedup */\n allBaseNames: Set<string>;\n};\n\ntype NameEntry = { key: string; candidates: string[] };\n\nconst countBy = (entries: NameEntry[], level: number): Record<string, number> =>\n entries.reduce(\n (counts, e) => {\n const name = e.candidates[level] ?? \"\";\n counts[name] = (counts[name] ?? 0) + 1;\n return counts;\n },\n {} as Record<string, number>,\n );\n\n/** Resolve naming collisions across multiple levels of candidates.\n * Each entry provides candidate names in priority order (e.g. base → qualified → discriminated). */\nconst resolveNameCollisions = (entries: NameEntry[]): Record<string, string> => {\n const levels = entries[0]?.candidates.length ?? 0;\n\n const resolve = (unresolved: NameEntry[], level: number): Record<string, string> => {\n if (unresolved.length === 0 || level >= levels) return {};\n const counts = countBy(unresolved, level);\n const isLastLevel = level >= levels - 1;\n const [resolved, colliding] = unresolved.reduce(\n ([res, col], e) => {\n const name = e.candidates[level] ?? \"\";\n return (counts[name] ?? 0) > 1 && !isLastLevel ? [res, [...col, e]] : [{ ...res, [e.key]: name }, col];\n },\n [{} as Record<string, string>, [] as NameEntry[]],\n );\n return { ...resolved, ...resolve(colliding, level + 1) };\n };\n\n return resolve(entries, 0);\n};\n\nconst toRecord = (entries: NameEntry[], resolved: Record<string, string>): Record<string, string> =>\n Object.fromEntries(entries.map((e) => [e.key, resolved[e.key] ?? e.candidates[0] ?? \"\"]));\n\nconst resolveProfileMethodBaseNames = (\n extensions: ProfileExtension[],\n sliceDefs: SliceDef[],\n): ResolvedProfileMethods => {\n const extensionEntries: NameEntry[] = extensions\n .filter((ext) => ext.url)\n .map((ext) => {\n const base = tsExtensionMethodBaseName(ext.name);\n const qualified = tsQualifiedExtensionMethodBaseName(ext.name, ext.path);\n return { key: `${ext.url}:${ext.path}`, candidates: [base, qualified, `${qualified}Extension`] };\n });\n\n const sliceEntries: NameEntry[] = sliceDefs.map((slice) => {\n const base = tsSliceMethodBaseName(slice.sliceName);\n const qualified = tsQualifiedSliceMethodBaseName(slice.fieldName, slice.sliceName);\n return { key: `${slice.fieldName}:${slice.sliceName}`, candidates: [base, qualified, `${qualified}Slice`] };\n });\n\n const resolved = resolveNameCollisions([...extensionEntries, ...sliceEntries]);\n const extensionsRecords = toRecord(extensionEntries, resolved);\n const slicesRecords = toRecord(sliceEntries, resolved);\n const allBaseNames = new Set([...Object.values(extensionsRecords), ...Object.values(slicesRecords)]);\n\n return { extensions: extensionsRecords, slices: slicesRecords, allBaseNames };\n};\n\nexport const generateProfileClass = (w: TypeScript, tsIndex: TypeSchemaIndex, flatProfile: ProfileTypeSchema) => {\n const tsBaseResourceName = tsTypeFromIdentifier(flatProfile.base);\n const profileClassName = tsProfileClassName(flatProfile);\n const sliceDefs = collectSliceDefs(tsIndex, flatProfile);\n const factoryInfo = collectProfileFactoryInfo(tsIndex, flatProfile);\n\n generateInlineExtensionInputTypes(w, tsIndex, flatProfile);\n generateSliceInputTypes(w, flatProfile, sliceDefs);\n\n generateProfileHelpersImport(w, tsIndex, flatProfile, sliceDefs, factoryInfo);\n\n generateRawType(w, flatProfile, factoryInfo);\n generateFlatInputType(w, flatProfile);\n\n const canonicalUrl = flatProfile.identifier.url;\n w.comment(\"CanonicalURL:\", canonicalUrl, `(pkg: ${packageMetaToFhir(packageMeta(flatProfile))})`);\n\n const resolvedMethodNames = resolveProfileMethodBaseNames(flatProfile.extensions ?? [], sliceDefs);\n\n w.curlyBlock([\"export\", \"class\", profileClassName], () => {\n w.lineSM(`static readonly canonicalUrl = ${JSON.stringify(canonicalUrl)}`);\n w.line();\n generateStaticSliceFields(w, sliceDefs);\n w.lineSM(`private resource: ${tsBaseResourceName}`);\n w.line();\n generateFactoryMethods(w, tsIndex, flatProfile, factoryInfo);\n generateFieldAccessors(w, factoryInfo, resolvedMethodNames.allBaseNames);\n\n w.line(\"// Extensions\");\n generateExtensionMethods(w, tsIndex, flatProfile, resolvedMethodNames.extensions);\n\n w.line(\"// Slices\");\n generateSliceSetters(w, sliceDefs, flatProfile, resolvedMethodNames.slices);\n generateSliceGetters(w, sliceDefs, flatProfile, resolvedMethodNames.slices);\n\n w.line(\"// Validation\");\n generateValidateMethod(w, tsIndex, flatProfile);\n });\n w.line();\n};\n","import * as Path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { uppercaseFirstLetter } from \"@root/api/writer-generator/utils\";\nimport { Writer, type WriterOptions } from \"@root/api/writer-generator/writer\";\nimport {\n type CanonicalUrl,\n isChoiceDeclarationField,\n isComplexTypeIdentifier,\n isLogicalTypeSchema,\n isPrimitiveIdentifier,\n isProfileTypeSchema,\n isResourceTypeSchema,\n isSpecializationTypeSchema,\n type NestedTypeSchema,\n packageMeta,\n packageMetaToFhir,\n type SpecializationTypeSchema,\n type TypeSchema,\n} from \"@root/typeschema/types\";\nimport { groupByPackages, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport {\n tsFieldName,\n tsModuleFileName,\n tsModuleName,\n tsModulePath,\n tsNameFromCanonical,\n tsPackageDir,\n tsProfileModuleFileName,\n tsResourceName,\n} from \"./name\";\nimport { generateProfileClass, generateProfileImports, generateProfileIndexFile } from \"./profile\";\nimport { resolveFieldTsType } from \"./utils\";\n\nexport const resolveTsAssets = (fn: string) => {\n const __dirname = Path.dirname(fileURLToPath(import.meta.url));\n const __filename = fileURLToPath(import.meta.url);\n if (__filename.endsWith(\"dist/index.js\")) {\n return Path.resolve(__dirname, \"..\", \"assets\", \"api\", \"writer-generator\", \"typescript\", fn);\n }\n return Path.resolve(__dirname, \"../../../..\", \"assets\", \"api\", \"writer-generator\", \"typescript\", fn);\n};\n\nexport type TypeScriptOptions = {\n lineWidth?: number;\n /** openResourceTypeSet -- for resource families (Resource, DomainResource) use open set for resourceType field.\n *\n * - when openResourceTypeSet is false: `type Resource = { resourceType: \"Resource\" | \"DomainResource\" | \"Patient\" }`\n * - when openResourceTypeSet is true: `type Resource = { resourceType: \"Resource\" | \"DomainResource\" | \"Patient\" | string }`\n */\n openResourceTypeSet: boolean;\n primitiveTypeExtension: boolean;\n extensionGetterDefault?: \"flat\" | \"profile\" | \"raw\";\n sliceGetterDefault?: \"flat\" | \"raw\";\n} & WriterOptions;\n\nexport class TypeScript extends Writer<TypeScriptOptions> {\n constructor(options: TypeScriptOptions) {\n super({ lineWidth: 120, ...options, resolveAssets: options.resolveAssets ?? resolveTsAssets });\n }\n\n ifElseChain(branches: { cond: string; body: () => void }[], elseBody?: () => void) {\n branches.forEach((branch, i) => {\n const prefix = i === 0 ? \"if\" : \"} else if\";\n this.line(`${prefix} (${branch.cond}) {`);\n this.indent();\n branch.body();\n this.deindent();\n });\n if (elseBody) {\n this.line(\"} else {\");\n this.indent();\n elseBody();\n this.deindent();\n }\n this.line(\"}\");\n }\n\n tsImport(tsPackageName: string, ...entities: string[]): void;\n tsImport(tsPackageName: string, ...args: [...string[], { typeOnly: boolean }]): void;\n tsImport(tsPackageName: string, ...rest: (string | { typeOnly: boolean })[]) {\n const last = rest[rest.length - 1];\n const typeOnly = typeof last === \"object\" ? last.typeOnly : false;\n const entities = (typeof last === \"object\" ? rest.slice(0, -1) : rest) as string[];\n const keyword = typeOnly ? \"import type\" : \"import\";\n const singleLine = `${keyword} { ${entities.join(\", \")} } from \"${tsPackageName}\"`;\n if (singleLine.length <= (this.opts.lineWidth ?? 120)) {\n this.lineSM(singleLine);\n } else {\n this.curlyBlock([keyword], () => {\n for (const entity of entities) {\n this.line(`${entity},`);\n }\n }, [` from \"${tsPackageName}\";`]);\n }\n }\n\n generateFhirPackageIndexFile(schemas: TypeSchema[]) {\n this.cat(\"index.ts\", () => {\n const profiles = schemas.filter(isProfileTypeSchema);\n if (profiles.length > 0) {\n this.lineSM(`export * from \"./profiles\"`);\n }\n\n let exports = schemas\n .flatMap((schema) => {\n const resourceName = tsResourceName(schema.identifier);\n const typeExports = isProfileTypeSchema(schema)\n ? []\n : [\n resourceName,\n ...((isResourceTypeSchema(schema) && schema.nested) ||\n (isLogicalTypeSchema(schema) && schema.nested)\n ? schema.nested.map((n) => tsResourceName(n.identifier))\n : []),\n ];\n const valueExports = isResourceTypeSchema(schema) ? [`is${resourceName}`] : [];\n\n return [\n {\n identifier: schema.identifier,\n tsPackageName: tsModuleName(schema.identifier),\n resourceName,\n typeExports,\n valueExports,\n },\n ];\n })\n .sort((a, b) => a.resourceName.localeCompare(b.resourceName));\n\n // FIXME: actually, duplication may means internal error...\n exports = Array.from(new Map(exports.map((exp) => [exp.resourceName.toLowerCase(), exp])).values()).sort(\n (a, b) => a.resourceName.localeCompare(b.resourceName),\n );\n\n for (const exp of exports) {\n this.debugComment(exp.identifier);\n if (exp.typeExports.length > 0) {\n this.lineSM(`export type { ${exp.typeExports.join(\", \")} } from \"./${exp.tsPackageName}\"`);\n }\n if (exp.valueExports.length > 0) {\n this.lineSM(`export { ${exp.valueExports.join(\", \")} } from \"./${exp.tsPackageName}\"`);\n }\n }\n });\n }\n\n generateDependenciesImports(tsIndex: TypeSchemaIndex, schema: SpecializationTypeSchema, importPrefix = \"../\") {\n if (schema.dependencies) {\n const imports = [];\n const skipped = [];\n for (const dep of schema.dependencies) {\n if ([\"complex-type\", \"resource\", \"logical\"].includes(dep.kind)) {\n imports.push({\n tsPackage: `${importPrefix}${tsModulePath(dep)}`,\n name: tsResourceName(dep),\n dep: dep,\n });\n } else {\n skipped.push(dep);\n }\n }\n imports.sort((a, b) => a.name.localeCompare(b.name));\n for (const dep of imports) {\n this.debugComment(dep.dep);\n this.tsImport(dep.tsPackage, dep.name, { typeOnly: true });\n }\n for (const dep of skipped) {\n this.debugComment(\"skip:\", dep);\n }\n this.line();\n if (\n this.withPrimitiveTypeExtension(schema) &&\n schema.identifier.name !== \"Element\" &&\n schema.dependencies.find((e) => e.name === \"Element\") === undefined\n ) {\n const elementUrl = \"http://hl7.org/fhir/StructureDefinition/Element\" as CanonicalUrl;\n const element = tsIndex.resolveByUrl(schema.identifier.package, elementUrl);\n if (!element) throw new Error(`'${elementUrl}' not found for ${schema.identifier.package}.`);\n\n this.tsImport(`${importPrefix}${tsModulePath(element.identifier)}`, \"Element\", { typeOnly: true });\n }\n }\n }\n\n generateComplexTypeReexports(schema: SpecializationTypeSchema) {\n const complexTypeDeps = schema.dependencies?.filter(isComplexTypeIdentifier);\n if (complexTypeDeps && complexTypeDeps.length > 0) {\n for (const dep of complexTypeDeps) {\n this.debugComment(dep);\n this.lineSM(`export type { ${tsResourceName(dep)} } from \"${`../${tsModulePath(dep)}`}\"`);\n }\n this.line();\n }\n }\n\n addFieldExtension(fieldName: string, isArray: boolean): void {\n const extFieldName = tsFieldName(`_${fieldName}`);\n const typeExpr = isArray ? \"(Element | null)[]\" : \"Element\";\n this.lineSM(`${extFieldName}?: ${typeExpr}`);\n }\n\n generateType(tsIndex: TypeSchemaIndex, schema: SpecializationTypeSchema | NestedTypeSchema) {\n let name: string;\n // Generic types: Reference, Coding, CodeableConcept\n const genericTypes = [\"Reference\", \"Coding\", \"CodeableConcept\"];\n if (genericTypes.includes(schema.identifier.name)) {\n name = `${schema.identifier.name}<T extends string = string>`;\n } else {\n name = tsResourceName(schema.identifier);\n }\n\n // Collect fields whose type is a resource type family (has children)\n const typeFamilyFields: { fieldName: string; familyTypeName: string }[] = [];\n for (const [fieldName, field] of Object.entries(schema.fields ?? {})) {\n if (isChoiceDeclarationField(field) || !field.type) continue;\n const fieldTypeSchema = tsIndex.resolveType(field.type);\n if (\n isSpecializationTypeSchema(fieldTypeSchema) &&\n (fieldTypeSchema.typeFamily?.resources?.length ?? 0) > 0\n ) {\n typeFamilyFields.push({ fieldName: tsFieldName(fieldName), familyTypeName: field.type.name });\n }\n }\n\n // Build generic params from type-family fields\n const genericFieldMap: Record<string, string> = {};\n if (!genericTypes.includes(schema.identifier.name) && typeFamilyFields.length > 0) {\n const [first, ...rest] = typeFamilyFields;\n if (first && rest.length === 0) {\n genericFieldMap[first.fieldName] = \"T\";\n name += `<T extends ${first.familyTypeName} = ${first.familyTypeName}>`;\n } else {\n const params = typeFamilyFields.map((tf) => {\n const paramName = `T${uppercaseFirstLetter(tf.fieldName)}`;\n genericFieldMap[tf.fieldName] = paramName;\n return `${paramName} extends ${tf.familyTypeName} = ${tf.familyTypeName}`;\n });\n name += `<${params.join(\", \")}>`;\n }\n }\n\n let extendsClause: string | undefined;\n if (schema.base) extendsClause = `extends ${tsNameFromCanonical(schema.base.url)}`;\n\n this.debugComment(schema.identifier);\n if (!schema.fields && !extendsClause && !isResourceTypeSchema(schema)) {\n this.lineSM(`export type ${name} = object`);\n return;\n }\n this.curlyBlock([\"export\", \"interface\", name, extendsClause], () => {\n if (isResourceTypeSchema(schema)) {\n const possibleResourceTypes = [schema.identifier, ...(schema.typeFamily?.resources ?? [])];\n const openSetSuffix =\n this.opts.openResourceTypeSet && possibleResourceTypes.length > 1 ? \" | string\" : \"\";\n this.lineSM(\n `resourceType: ${possibleResourceTypes\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((e) => `\"${e.name}\"`)\n .join(\" | \")}${openSetSuffix}`,\n );\n this.line();\n }\n\n if (!schema.fields) return;\n const fields = Object.entries(schema.fields).sort((a, b) => a[0].localeCompare(b[0]));\n\n for (const [fieldName, field] of fields) {\n if (isChoiceDeclarationField(field)) continue;\n // Skip fields without type info (can happen with incomplete StructureDefinitions)\n if (!field.type) continue;\n\n this.debugComment(fieldName, \":\", field);\n\n const tsName = tsFieldName(fieldName);\n const tsType = resolveFieldTsType(schema.identifier.name, tsName, field, undefined, genericFieldMap);\n const optionalSymbol = field.required ? \"\" : \"?\";\n const arraySymbol = field.array ? \"[]\" : \"\";\n this.lineSM(`${tsName}${optionalSymbol}: ${tsType}${arraySymbol}`);\n\n if (this.withPrimitiveTypeExtension(schema)) {\n if (isPrimitiveIdentifier(field.type)) {\n this.addFieldExtension(fieldName, field.array ?? false);\n }\n }\n }\n });\n }\n\n withPrimitiveTypeExtension(schema: TypeSchema | NestedTypeSchema): boolean {\n if (!this.opts.primitiveTypeExtension) return false;\n if (!isSpecializationTypeSchema(schema)) return false;\n for (const field of Object.values(schema.fields ?? {})) {\n if (isChoiceDeclarationField(field)) continue;\n if (isPrimitiveIdentifier(field.type)) return true;\n }\n return false;\n }\n\n generateResourceTypePredicate(schema: SpecializationTypeSchema) {\n if (!isResourceTypeSchema(schema)) return;\n const name = tsResourceName(schema.identifier);\n this.curlyBlock([\"export\", \"const\", `is${name}`, \"=\", `(resource: unknown): resource is ${name}`, \"=>\"], () => {\n this.lineSM(\n `return resource !== null && typeof resource === \"object\" && (resource as {resourceType: string}).resourceType === \"${schema.identifier.name}\"`,\n );\n });\n }\n\n generateNestedTypes(tsIndex: TypeSchemaIndex, schema: SpecializationTypeSchema) {\n if (schema.nested) {\n for (const subtype of schema.nested) {\n this.generateType(tsIndex, subtype);\n this.line();\n }\n }\n }\n\n generateResourceModule(tsIndex: TypeSchemaIndex, schema: TypeSchema) {\n if (isProfileTypeSchema(schema)) {\n this.cd(\"profiles\", () => {\n this.cat(`${tsProfileModuleFileName(tsIndex, schema)}`, () => {\n this.generateDisclaimer();\n const flatProfile = tsIndex.flatProfile(schema);\n generateProfileImports(this, tsIndex, flatProfile);\n generateProfileClass(this, tsIndex, flatProfile);\n });\n });\n } else if (isSpecializationTypeSchema(schema)) {\n this.cat(`${tsModuleFileName(schema.identifier)}`, () => {\n this.generateDisclaimer();\n this.generateDependenciesImports(tsIndex, schema);\n this.generateComplexTypeReexports(schema);\n this.generateNestedTypes(tsIndex, schema);\n this.comment(\n \"CanonicalURL:\",\n schema.identifier.url,\n `(pkg: ${packageMetaToFhir(packageMeta(schema))})`,\n );\n this.generateType(tsIndex, schema);\n this.generateResourceTypePredicate(schema);\n });\n } else {\n throw new Error(`Profile generation not implemented for kind: ${schema.identifier.kind}`);\n }\n }\n\n override async generate(tsIndex: TypeSchemaIndex) {\n // Only generate code for schemas from focused packages\n const typesToGenerate = [\n ...tsIndex.collectComplexTypes(),\n ...tsIndex.collectResources(),\n ...tsIndex.collectLogicalModels(),\n ...(this.opts.generateProfile ? tsIndex.collectProfiles() : []),\n ];\n const grouped = groupByPackages(typesToGenerate);\n\n const hasProfiles = this.opts.generateProfile && typesToGenerate.some(isProfileTypeSchema);\n\n this.cd(\"/\", () => {\n if (hasProfiles) {\n this.cp(\"profile-helpers.ts\", \"profile-helpers.ts\");\n }\n\n for (const [packageName, packageSchemas] of Object.entries(grouped)) {\n const packageDir = tsPackageDir(packageName);\n this.cd(packageDir, () => {\n for (const schema of packageSchemas) {\n this.generateResourceModule(tsIndex, schema);\n }\n generateProfileIndexFile(this, tsIndex, packageSchemas.filter(isProfileTypeSchema));\n this.generateFhirPackageIndexFile(packageSchemas);\n });\n }\n });\n }\n}\n","/**\n * High-Level API Builder\n *\n * Provides a fluent, chainable API for common codegen use cases with pre-built generators.\n * This builder pattern allows users to configure generation in a declarative way.\n */\n\nimport assert from \"node:assert\";\nimport * as fs from \"node:fs\";\nimport * as Path from \"node:path\";\nimport {\n CanonicalManager,\n type LocalPackageConfig,\n type PreprocessContext,\n type TgzPackageConfig,\n} from \"@atomic-ehr/fhir-canonical-manager\";\nimport { CSharp, type CSharpGeneratorOptions } from \"@root/api/writer-generator/csharp/csharp\";\nimport { Python, type PythonGeneratorOptions } from \"@root/api/writer-generator/python\";\nimport { generateTypeSchemas } from \"@root/typeschema\";\nimport { promoteLogical } from \"@root/typeschema/ir/logic-promotion\";\nimport { treeShake } from \"@root/typeschema/ir/tree-shake\";\nimport type { IrConf } from \"@root/typeschema/ir/types\";\nimport { type Register, registerFromManager } from \"@root/typeschema/register\";\nimport { type PackageMeta, packageMetaToNpm } from \"@root/typeschema/types\";\nimport { mkTypeSchemaIndex, type TypeSchemaIndex } from \"@root/typeschema/utils\";\nimport type { CodegenLogManager } from \"@root/utils/log\";\nimport { mkLogger } from \"@root/utils/log\";\nimport { IntrospectionWriter, type IntrospectionWriterOptions } from \"./writer-generator/introspection\";\nimport { IrReportWriterWriter, type IrReportWriterWriterOptions } from \"./writer-generator/ir-report\";\nimport type { FileBasedMustacheGeneratorOptions } from \"./writer-generator/mustache\";\nimport * as Mustache from \"./writer-generator/mustache\";\nimport { TypeScript, type TypeScriptOptions } from \"./writer-generator/typescript/writer\";\nimport type { FileBuffer, FileSystemWriter, FileSystemWriterOptions, WriterOptions } from \"./writer-generator/writer\";\n\n/**\n * Configuration options for the API builder\n */\nexport interface APIBuilderOptions {\n outputDir: string;\n cleanOutput: boolean;\n throwException: boolean;\n typeSchema?: IrConf;\n\n /** Custom FHIR package registry URL (default: https://fs.get-ig.org/pkgs/) */\n registry: string | undefined;\n /** Drop the canonical manager cache */\n dropCanonicalManagerCache: boolean;\n}\n\nexport type GenerationReport = {\n success: boolean;\n outputDir: string;\n filesGenerated: Record<string, string>;\n errors: string[];\n warnings: string[];\n duration: number;\n};\n\nfunction countLinesByMatches(text: string): number {\n if (text === \"\") return 0;\n const m = text.match(/\\n/g);\n return m ? m.length + 1 : 1;\n}\n\nexport const prettyReport = (report: GenerationReport): string => {\n const { success, filesGenerated, errors, warnings, duration } = report;\n const errorsStr = errors.length > 0 ? `Errors: ${errors.join(\", \")}` : undefined;\n const warningsStr = warnings.length > 0 ? `Warnings: ${warnings.join(\", \")}` : undefined;\n let allLoc = 0;\n const files = Object.entries(filesGenerated)\n .map(([path, content]) => {\n const loc = countLinesByMatches(content);\n allLoc += loc;\n return ` - ${path} (${loc} loc)`;\n })\n .join(\"\\n\");\n return [\n `Generated files (${Math.round(allLoc / 1000)} kloc):`,\n files,\n errorsStr,\n warningsStr,\n `Duration: ${Math.round(duration)}ms`,\n `Status: ${success ? \"🟩 Success\" : \"🟥 Failure\"}`,\n ]\n .filter((e) => e)\n .join(\"\\n\");\n};\n\nexport interface LocalStructureDefinitionConfig {\n package: PackageMeta;\n path: string;\n dependencies?: PackageMeta[];\n}\n\nconst cleanup = async (opts: APIBuilderOptions, logger: CodegenLogManager): Promise<void> => {\n logger.info(`Cleaning outputs...`);\n try {\n logger.info(`Clean ${opts.outputDir}`);\n fs.rmSync(opts.outputDir, { recursive: true, force: true });\n } catch (error) {\n logger.warn(`Error cleaning output directory: ${error instanceof Error ? error.message : String(error)}`);\n }\n};\n\n/**\n * High-Level API Builder class\n *\n * Provides a fluent interface for configuring and executing code generation\n * from FHIR packages or TypeSchema documents.\n */\nexport class APIBuilder {\n private options: APIBuilderOptions;\n private manager: ReturnType<typeof CanonicalManager>;\n private prebuiltRegister: Register | undefined;\n private managerInput: {\n npmPackages: string[];\n localSDs: LocalPackageConfig[];\n localTgzPackages: TgzPackageConfig[];\n };\n private logger: CodegenLogManager;\n private generators: { name: string; writer: FileSystemWriter }[] = [];\n\n constructor(\n userOpts: Partial<APIBuilderOptions> & {\n manager?: ReturnType<typeof CanonicalManager>;\n register?: Register;\n preprocessPackage?: (context: PreprocessContext) => PreprocessContext;\n logger?: CodegenLogManager;\n } = {},\n ) {\n const defaultOpts: APIBuilderOptions = {\n outputDir: \"./generated\",\n cleanOutput: true,\n throwException: false,\n registry: undefined,\n dropCanonicalManagerCache: false,\n };\n const opts: APIBuilderOptions = {\n ...defaultOpts,\n ...Object.fromEntries(\n Object.entries(userOpts).filter(\n ([k, v]) =>\n v !== undefined &&\n k !== \"manager\" &&\n k !== \"register\" &&\n k !== \"preprocessPackage\" &&\n k !== \"logger\",\n ),\n ),\n };\n\n if (userOpts.manager && userOpts.register) {\n throw new Error(\"Cannot provide both 'manager' and 'register' options. Use one or the other.\");\n }\n\n this.managerInput = {\n npmPackages: [],\n localSDs: [],\n localTgzPackages: [],\n };\n this.prebuiltRegister = userOpts.register;\n this.manager =\n userOpts.manager ??\n CanonicalManager({\n packages: [],\n workingDir: \".codegen-cache/canonical-manager-cache\",\n registry: userOpts.registry,\n dropCache: userOpts.dropCanonicalManagerCache,\n preprocessPackage: userOpts.preprocessPackage,\n });\n this.logger = userOpts.logger ?? mkLogger({ prefix: \"api\" });\n this.options = opts;\n }\n\n fromPackage(packageName: string, version?: string): APIBuilder {\n const pkg = packageMetaToNpm({ name: packageName, version: version || \"latest\" });\n this.managerInput.npmPackages.push(pkg);\n return this;\n }\n\n fromPackageRef(packageRef: string): APIBuilder {\n this.managerInput.npmPackages.push(packageRef);\n return this;\n }\n\n localStructureDefinitions(config: LocalStructureDefinitionConfig): APIBuilder {\n this.logger.info(`Registering local StructureDefinitions for ${config.package.name}@${config.package.version}`);\n this.managerInput.localSDs.push({\n name: config.package.name,\n version: config.package.version,\n path: config.path,\n dependencies: config.dependencies?.map((dep) => packageMetaToNpm(dep)),\n });\n return this;\n }\n\n localTgzPackage(archivePath: string): APIBuilder {\n this.logger.info(`Registering local tgz package: ${archivePath}`);\n this.managerInput.localTgzPackages.push({ archivePath: Path.resolve(archivePath) });\n return this;\n }\n\n introspection(userOpts?: Partial<IntrospectionWriterOptions>): APIBuilder {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n inMemoryOnly: false,\n };\n const opts: IntrospectionWriterOptions = {\n ...defaultWriterOpts,\n ...Object.fromEntries(Object.entries(userOpts ?? {}).filter(([_, v]) => v !== undefined)),\n };\n\n const writer = new IntrospectionWriter(opts);\n this.generators.push({ name: \"introspection\", writer });\n this.logger.debug(`Configured introspection generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n typescript(userOpts: Partial<TypeScriptOptions>) {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: Path.join(this.options.outputDir, \"/types\"),\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n generateProfile: true,\n };\n const defaultTsOpts: TypeScriptOptions = {\n ...defaultWriterOpts,\n openResourceTypeSet: false,\n primitiveTypeExtension: true,\n };\n const opts: TypeScriptOptions = {\n ...defaultTsOpts,\n ...Object.fromEntries(Object.entries(userOpts).filter(([_, v]) => v !== undefined)),\n };\n const generator = new TypeScript(opts);\n this.generators.push({ name: \"typescript\", writer: generator });\n this.logger.debug(`Configured TypeScript generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n python(userOptions: Partial<PythonGeneratorOptions>): APIBuilder {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"#\",\n };\n\n const defaultPyOpts: PythonGeneratorOptions = {\n ...defaultWriterOpts,\n rootPackageName: \"fhir_types\",\n fieldFormat: \"snake_case\",\n };\n\n const opts: PythonGeneratorOptions = {\n ...defaultPyOpts,\n ...Object.fromEntries(Object.entries(userOptions).filter(([_, v]) => v !== undefined)),\n };\n\n const generator = new Python(opts);\n this.generators.push({ name: \"python\", writer: generator });\n this.logger.debug(`Configured python generator`);\n return this;\n }\n\n mustache(templatePath: string, userOpts: Partial<FileSystemWriterOptions & FileBasedMustacheGeneratorOptions>) {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n };\n const defaultMustacheOpts: Partial<FileBasedMustacheGeneratorOptions> = {\n meta: {\n timestamp: new Date().toISOString(),\n generator: \"atomic-codegen\",\n },\n };\n const opts = {\n ...defaultWriterOpts,\n ...defaultMustacheOpts,\n ...userOpts,\n };\n const generator = Mustache.createGenerator(templatePath, opts);\n this.generators.push({ name: `mustache[${templatePath}]`, writer: generator });\n this.logger.debug(`Configured TypeScript generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n csharp(userOptions: Partial<CSharpGeneratorOptions>): APIBuilder {\n const defaultWriterOpts: WriterOptions = {\n logger: this.logger,\n outputDir: Path.join(this.options.outputDir, \"/types\"),\n tabSize: 4,\n withDebugComment: false,\n commentLinePrefix: \"//\",\n };\n\n const defaultCSharpOpts: CSharpGeneratorOptions = {\n ...defaultWriterOpts,\n rootNamespace: \"Fhir.Types\",\n };\n\n const opts: CSharpGeneratorOptions = {\n ...defaultCSharpOpts,\n ...Object.fromEntries(Object.entries(userOptions).filter(([_, v]) => v !== undefined)),\n };\n\n const generator = new CSharp(opts);\n this.generators.push({ name: \"csharp\", writer: generator });\n this.logger.debug(`Configured C# generator`);\n return this;\n }\n\n /**\n * Set the output directory for all generators\n */\n outputTo(directory: string): APIBuilder {\n this.logger.debug(`Setting output directory: ${directory}`);\n this.options.outputDir = directory;\n\n // Update all configured generators\n for (const gen of this.generators) {\n gen.writer.setOutputDir(directory);\n }\n\n return this;\n }\n\n throwException(enabled = true): APIBuilder {\n this.options.throwException = enabled;\n return this;\n }\n\n cleanOutput(enabled = true): APIBuilder {\n this.options.cleanOutput = enabled;\n return this;\n }\n\n typeSchema(cfg: IrConf) {\n this.options.typeSchema ??= {};\n if (cfg.treeShake) {\n assert(this.options.typeSchema.treeShake === undefined, \"treeShake option is already set\");\n this.options.typeSchema.treeShake = cfg.treeShake;\n }\n if (cfg.promoteLogical) {\n assert(this.options.typeSchema.promoteLogical === undefined, \"promoteLogical option is already set\");\n this.options.typeSchema.promoteLogical = cfg.promoteLogical;\n }\n if (cfg.resolveCollisions) {\n assert(this.options.typeSchema.resolveCollisions === undefined, \"resolveCollisions option is already set\");\n this.options.typeSchema.resolveCollisions = cfg.resolveCollisions;\n }\n this.irReport({});\n return this;\n }\n\n irReport(userOpts: Partial<IrReportWriterWriterOptions>) {\n const defaultWriterOpts: FileSystemWriterOptions = {\n logger: this.logger,\n outputDir: this.options.outputDir,\n inMemoryOnly: false,\n };\n const opts: IrReportWriterWriterOptions = {\n ...defaultWriterOpts,\n rootReadmeFileName: \"README.md\",\n ...Object.fromEntries(Object.entries(userOpts ?? {}).filter(([_, v]) => v !== undefined)),\n };\n\n const writer = new IrReportWriterWriter(opts);\n this.generators.push({ name: \"ir-report\", writer });\n this.logger.debug(`Configured ir-report generator (${JSON.stringify(opts, undefined, 2)})`);\n return this;\n }\n\n async generate(): Promise<GenerationReport> {\n const startTime = performance.now();\n const result: GenerationReport = {\n success: false,\n outputDir: this.options.outputDir,\n filesGenerated: {},\n errors: [],\n warnings: [],\n duration: 0,\n };\n\n this.logger.debug(`Starting generation with ${this.generators.length} generators`);\n try {\n if (this.options.cleanOutput) cleanup(this.options, this.logger);\n\n let register: Register;\n if (this.prebuiltRegister) {\n this.logger.info(\"Using prebuilt register\");\n register = this.prebuiltRegister;\n } else {\n this.logger.info(\"Initialize Canonical Manager\");\n // Add all packages before initialization\n if (this.managerInput.npmPackages.length > 0) {\n await this.manager.addPackages(...this.managerInput.npmPackages.sort());\n }\n // Add local packages and archives\n for (const config of this.managerInput.localSDs) {\n await this.manager.addLocalPackage(config);\n }\n for (const tgzArchive of this.managerInput.localTgzPackages) {\n await this.manager.addTgzPackage(tgzArchive);\n }\n // Initialize after all packages are registered\n const ref2meta = await this.manager.init();\n\n const packageMetas = Object.values(ref2meta);\n register = await registerFromManager(this.manager, {\n logger: this.logger.fork(\"reg\"),\n focusedPackages: packageMetas,\n });\n }\n\n const tsLogger = this.logger.fork(\"ts\");\n\n const { schemas: typeSchemas, collisions } = await generateTypeSchemas(\n register,\n this.options.typeSchema?.resolveCollisions,\n tsLogger,\n );\n\n const irReport = {\n resolveCollisions: this.options.typeSchema?.resolveCollisions,\n collisions,\n };\n const tsIndexOpts = { register, irReport, logger: tsLogger };\n let tsIndex = mkTypeSchemaIndex(typeSchemas, tsIndexOpts);\n if (this.options.typeSchema?.treeShake) tsIndex = treeShake(tsIndex, this.options.typeSchema.treeShake);\n if (this.options.typeSchema?.promoteLogical)\n tsIndex = promoteLogical(tsIndex, this.options.typeSchema.promoteLogical);\n\n tsLogger.printTagSummary();\n\n this.logger.debug(`Executing ${this.generators.length} generators`);\n\n await this.executeGenerators(result, tsIndex);\n\n this.logger.info(\"Generation completed successfully\");\n\n result.success = result.errors.length === 0;\n\n this.logger.debug(`Generation completed: ${result.filesGenerated.length} files`);\n } catch (error) {\n this.logger.error(`Code generation failed: ${error instanceof Error ? error.message : String(error)}`);\n result.errors.push(error instanceof Error ? error.message : String(error));\n if (this.options.throwException) throw error;\n }\n\n return {\n ...result,\n success: result.errors.length === 0,\n duration: performance.now() - startTime,\n };\n }\n\n /**\n * Clear all configuration and start fresh\n */\n reset(): APIBuilder {\n this.generators = [];\n return this;\n }\n\n /**\n * Get configured generators (for inspection)\n */\n getGenerators(): string[] {\n return this.generators.map((g) => g.name);\n }\n\n private async executeGenerators(result: GenerationReport, tsIndex: TypeSchemaIndex): Promise<void> {\n for (const gen of this.generators) {\n this.logger.info(`Generating ${gen.name}...`);\n\n try {\n await gen.writer.generateAsync(tsIndex);\n const fileBuffer: FileBuffer[] = gen.writer.writtenFiles();\n fileBuffer.forEach((buf) => {\n result.filesGenerated[buf.relPath] = buf.content;\n });\n this.logger.info(`Generating ${gen.name} finished successfully`);\n } catch (error) {\n result.errors.push(\n `${gen.name} generator failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n if (this.options.throwException) throw error;\n }\n }\n }\n}\n"]}