From 506e609b7f6b5d6d2d899e78b6b630d5b8809b36 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Fri, 3 Apr 2026 16:55:40 +0200 Subject: [PATCH 01/28] feat: Include fixed discriminator values in slice flat types Add optional discriminator fields with literal types to slice flat types. Skip for constrained choice slices (field name collisions) and plain object match values (partial objects conflict with required base fields). Before: `Omit` After: `Omit & { coding?: [{ code: "vital-signs"; system: "..." }] }` --- .../writer-generator/typescript/profile.ts | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/api/writer-generator/typescript/profile.ts b/src/api/writer-generator/typescript/profile.ts index 0d4deac1..e314fb1b 100644 --- a/src/api/writer-generator/typescript/profile.ts +++ b/src/api/writer-generator/typescript/profile.ts @@ -607,6 +607,21 @@ const generateInlineExtensionInputTypes = (w: TypeScript, tsIndex: TypeSchemaInd } }; +/** Convert a JS value to a TypeScript type literal string (e.g. `{ code: "vital-signs"; system: "http://..." }`). */ +const valueToTypeLiteral = (value: unknown): string => { + if (value === null || value === undefined) return "undefined"; + if (typeof value === "string") return JSON.stringify(value); + if (typeof value === "number" || typeof value === "boolean") return String(value); + if (Array.isArray(value)) return `[${value.map(valueToTypeLiteral).join(", ")}]`; + if (typeof value === "object") { + const entries = Object.entries(value as Record) + .map(([k, v]) => `${k}: ${valueToTypeLiteral(v)}`) + .join("; "); + return `{ ${entries} }`; + } + return "unknown"; +}; + const generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, sliceDefs: SliceDef[]) => { if (sliceDefs.length === 0) return; const tsProfileName = tsResourceName(flatProfile.identifier); @@ -634,6 +649,19 @@ const generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, if (sliceDef.constrainedChoice) { typeExpr = `${typeExpr} & ${tsTypeFromIdentifier(sliceDef.constrainedChoice.variantType)}`; } + if (matchFields.length > 0 && !sliceDef.constrainedChoice) { + // Only include match fields whose values are arrays or scalars — + // plain object matches may be partial and conflict with required fields. + const safeEntries = matchFields + .filter((key) => { + const v = sliceDef.match[key]; + return Array.isArray(v) || typeof v !== "object" || v === null; + }) + .map((key) => `${key}?: ${valueToTypeLiteral(sliceDef.match[key])}`); + if (safeEntries.length > 0) { + typeExpr = `${typeExpr} & { ${safeEntries.join("; ")} }`; + } + } w.lineSM(`export type ${typeName} = ${typeExpr}`); } w.line(); From fb94f3e3ba361fa7596611931db4dbc317c71500 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Fri, 3 Apr 2026 16:55:44 +0200 Subject: [PATCH 02/28] test: Update snapshots for slice flat discriminator types --- .../__snapshots__/typescript.test.ts.snap | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index 616bd22e..3c253ec2 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -322,7 +322,7 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bodyweight_Category_VSCatSliceFlat = Omit; +export type Observation_bodyweight_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -534,7 +534,7 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bp_Category_VSCatSliceFlat = Omit; +export type Observation_bp_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; export type Observation_bp_Component_SystolicBPSliceFlat = Omit & Quantity; export type Observation_bp_Component_DiastolicBPSliceFlat = Omit & Quantity; @@ -1079,7 +1079,7 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = Omit; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = Omit & Quantity; export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = Omit & Quantity; @@ -1461,7 +1461,7 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = Omit; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -1774,7 +1774,7 @@ import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = Omit & Coding; export type USCoreRaceExtension_Extension_DetailedSliceFlat = Omit & Coding; -export type USCoreRaceExtension_Extension_TextSliceFlat = Omit; +export type USCoreRaceExtension_Extension_TextSliceFlat = Omit & { url?: "text" }; import { isRawExtensionInput, From b294a7344e7c1003e4e0f48b4d9c9e84eb92388b Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Fri, 3 Apr 2026 16:55:48 +0200 Subject: [PATCH 03/28] chore: Regenerate examples for slice flat discriminator types --- .../profiles/Observation_observation_bodyweight.ts | 2 +- .../hl7-fhir-r4-core/profiles/Observation_observation_bp.ts | 2 +- .../profiles/Observation_observation_vitalsigns.ts | 2 +- .../profiles/Observation_observation_vitalsigns.ts | 2 +- .../profiles/Extension_USCoreEthnicityExtension.ts | 2 +- .../hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts | 2 +- .../profiles/Extension_USCoreTribalAffiliationExtension.ts | 2 +- .../profiles/Observation_USCoreBloodPressureProfile.ts | 2 +- .../profiles/Observation_USCoreBodyWeightProfile.ts | 2 +- .../profiles/Observation_USCoreVitalSignsProfile.ts | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index f02e6c45..bc13da30 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -8,7 +8,7 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bodyweight_Category_VSCatSliceFlat = Omit; +export type Observation_bodyweight_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index 52f53ce9..7d8fca73 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -8,7 +8,7 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bp_Category_VSCatSliceFlat = Omit; +export type Observation_bp_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; export type Observation_bp_Component_SystolicBPSliceFlat = Omit & Quantity; export type Observation_bp_Component_DiastolicBPSliceFlat = Omit & Quantity; diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index d8cb909d..477ed5c1 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -7,7 +7,7 @@ import type { Observation } from "../../hl7-fhir-r4-core/Observation"; import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Omit; +export type Observation_vitalsigns_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index d8cb909d..477ed5c1 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -7,7 +7,7 @@ import type { Observation } from "../../hl7-fhir-r4-core/Observation"; import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Omit; +export type Observation_vitalsigns_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index f69e5c62..04c438fa 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -7,7 +7,7 @@ import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlat = Omit & Coding; export type USCoreEthnicityExtension_Extension_DetailedSliceFlat = Omit & Coding; -export type USCoreEthnicityExtension_Extension_TextSliceFlat = Omit; +export type USCoreEthnicityExtension_Extension_TextSliceFlat = Omit & { url?: "text" }; import { isRawExtensionInput, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index 03e5cc6d..16027f58 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -7,7 +7,7 @@ import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = Omit & Coding; export type USCoreRaceExtension_Extension_DetailedSliceFlat = Omit & Coding; -export type USCoreRaceExtension_Extension_TextSliceFlat = Omit; +export type USCoreRaceExtension_Extension_TextSliceFlat = Omit & { url?: "text" }; import { isRawExtensionInput, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index a6632772..6f8daea5 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -6,7 +6,7 @@ import type { CodeableConcept } from "../../hl7-fhir-r4-core/CodeableConcept"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = Omit & CodeableConcept; -export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = Omit; +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = Omit & { url?: "isEnrolled" }; import { isRawExtensionInput, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index d560fa53..3597c6a6 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -11,7 +11,7 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = Omit; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = Omit & Quantity; export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = Omit & Quantity; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index 9284e2b0..82a2f6a9 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -11,7 +11,7 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = Omit; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index a63b70c9..e1dce3d9 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -11,7 +11,7 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = Omit; +export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, From 7d3ca4cf60eb81a0deca23d24cc4c94839695ba8 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Fri, 3 Apr 2026 17:10:04 +0200 Subject: [PATCH 04/28] test: Add examples for slice flat type discriminator values --- .../typescript-r4/profile-bodyweight.test.ts | 19 +++++++++++++++++ .../profile-bodyweight.test.ts | 21 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/examples/typescript-r4/profile-bodyweight.test.ts b/examples/typescript-r4/profile-bodyweight.test.ts index 8de5b2ba..7ff23a9a 100644 --- a/examples/typescript-r4/profile-bodyweight.test.ts +++ b/examples/typescript-r4/profile-bodyweight.test.ts @@ -132,6 +132,25 @@ describe("slice accessors", () => { expect(profile.getVSCat("raw")!.text).toBe("Vital Signs"); }); + test("flat type includes optional discriminator values as literal types", () => { + const profile = bodyweightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" } }); + + // The flat type carries the discriminator values at the type level. + // The coding field is optional — auto-applied by setVSCat, visible via getVSCat("raw"). + profile.setVSCat({ text: "Vital Signs" }); + const flat = profile.getVSCat()!; + + // flat.coding is typed as optional discriminator literal: + // coding?: [{ code: "vital-signs"; system: "http://...observation-category" }] + // At runtime, getVSCat() strips it — but the type allows passing it through setVSCat + profile.setVSCat({ + text: "Vital Signs", + coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], + }); + expect(profile.getVSCat()!.text).toBe("Vital Signs"); + expect(flat.text).toBe("Vital Signs"); + }); + test("setVSCat replaces existing slice element", () => { const profile = bodyweightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" } }); profile.setVSCat({ text: "First" }); diff --git a/examples/typescript-us-core/profile-bodyweight.test.ts b/examples/typescript-us-core/profile-bodyweight.test.ts index 65359e0c..be62c312 100644 --- a/examples/typescript-us-core/profile-bodyweight.test.ts +++ b/examples/typescript-us-core/profile-bodyweight.test.ts @@ -104,6 +104,27 @@ describe("demo: read a US Core body weight observation from JSON", () => { }); }); +describe("slice flat types carry discriminator values", () => { + test("flat type includes optional discriminator as literal type", () => { + const profile = USCoreBodyWeightProfile.create({ + status: "final", + subject: { reference: "Patient/pt-1" }, + }); + + // setVSCat accepts flat input — discriminator coding is optional and auto-applied + profile.setVSCat({ text: "Vital Signs" }); + + // The flat type's coding field is typed with the exact discriminator values: + // coding?: [{ code: "vital-signs"; system: "http://...observation-category" }] + // This is useful for type-level documentation and checks + profile.setVSCat({ + text: "Vital Signs", + coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], + }); + expect(profile.getVSCat()!.text).toBe("Vital Signs"); + }); +}); + describe("validation", () => { test("catches disallowed value[x] variants", () => { const resource: Observation = { From 0643f904cf87980fb219a5093508a6f89fcec89b Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Fri, 3 Apr 2026 17:25:15 +0200 Subject: [PATCH 05/28] ref: Split slice types into SliceInput (setter) and SliceFlat (documentation) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SliceInput has no discriminator fields — used by setters and getter return. SliceFlat extends SliceInput with readonly discriminator literal types — available as a type-level reference for documentation. --- src/api/writer-generator/typescript/name.ts | 4 ++++ .../typescript/profile-slices.ts | 22 +++++++++-------- .../writer-generator/typescript/profile.ts | 24 +++++++++++-------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/api/writer-generator/typescript/name.ts b/src/api/writer-generator/typescript/name.ts index 6eacb528..6f41d98c 100644 --- a/src/api/writer-generator/typescript/name.ts +++ b/src/api/writer-generator/typescript/name.ts @@ -96,6 +96,10 @@ export const tsSliceFlatTypeName = (profileName: string, fieldName: string, slic return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlat`; }; +export const tsSliceInputTypeName = (profileName: string, fieldName: string, sliceName: string): string => { + return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceInput`; +}; + export const tsExtensionFlatTypeName = (profileName: string, extensionName: string): string => { return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(extensionName))}Flat`; }; diff --git a/src/api/writer-generator/typescript/profile-slices.ts b/src/api/writer-generator/typescript/profile-slices.ts index 6675e6e1..e112315f 100644 --- a/src/api/writer-generator/typescript/profile-slices.ts +++ b/src/api/writer-generator/typescript/profile-slices.ts @@ -13,7 +13,7 @@ import { tsProfileClassName, tsResolvedSliceBaseName, tsResourceName, - tsSliceFlatTypeName, + tsSliceInputTypeName, tsSliceStaticName, } from "./name"; import { tsGet, tsTypeFromIdentifier } from "./utils"; @@ -159,14 +159,14 @@ export const generateSliceSetters = ( for (const sliceDef of sliceDefs) { const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName); const methodName = `set${baseName}`; - const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const inputTypeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`; const tsField = tsFieldName(sliceDef.fieldName); const fieldAccess = tsGet("this.resource", tsField); const baseType = sliceDef.typedBaseType; // Make input optional when there are no required fields (input can be empty object) const inputOptional = sliceDef.required.length === 0; - const unionType = `${typeName} | ${baseType}`; + const unionType = `${inputTypeName} | ${baseType}`; const paramSignature = inputOptional ? `(input?: ${unionType}): this` : `(input: ${unionType}): this`; w.curlyBlock(["public", methodName, paramSignature], () => { w.line(`const match = ${matchRef}`); @@ -209,16 +209,16 @@ export const generateSliceGetters = ( for (const sliceDef of sliceDefs) { const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName); const getMethodName = `get${baseName}`; - const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const inputTypeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`; const matchKeys = JSON.stringify(Object.keys(sliceDef.match)); const tsField = tsFieldName(sliceDef.fieldName); const fieldAccess = tsGet("this.resource", tsField); const baseType = sliceDef.typedBaseType; - const defaultReturn = defaultMode === "raw" ? baseType : typeName; + const defaultReturn = defaultMode === "raw" ? baseType : inputTypeName; // Overload signatures - w.lineSM(`public ${getMethodName}(mode: 'flat'): ${typeName} | undefined`); + w.lineSM(`public ${getMethodName}(mode: 'flat'): ${inputTypeName} | undefined`); w.lineSM(`public ${getMethodName}(mode: 'raw'): ${baseType} | undefined`); w.lineSM(`public ${getMethodName}(): ${defaultReturn} | undefined`); @@ -227,7 +227,7 @@ export const generateSliceGetters = ( [ "public", getMethodName, - `(mode: 'flat' | 'raw' = '${defaultMode}'): ${typeName} | ${baseType} | undefined`, + `(mode: 'flat' | 'raw' = '${defaultMode}'): ${inputTypeName} | ${baseType} | undefined`, ], () => { w.line(`const match = ${matchRef}`); @@ -244,12 +244,14 @@ export const generateSliceGetters = ( w.line("if (mode === 'raw') return item"); } if (sliceDef.typeDiscriminator) { - w.line(`return item as ${typeName}`); + w.line(`return item as ${inputTypeName}`); } else if (sliceDef.constrainedChoice) { const cc = sliceDef.constrainedChoice; - w.line(`return unwrapSliceChoice<${typeName}>(item, ${matchKeys}, ${JSON.stringify(cc.variant)})`); + w.line( + `return unwrapSliceChoice<${inputTypeName}>(item, ${matchKeys}, ${JSON.stringify(cc.variant)})`, + ); } else { - w.line(`return stripMatchKeys<${typeName}>(item, ${matchKeys})`); + w.line(`return stripMatchKeys<${inputTypeName}>(item, ${matchKeys})`); } }, ); diff --git a/src/api/writer-generator/typescript/profile.ts b/src/api/writer-generator/typescript/profile.ts index e314fb1b..9908b810 100644 --- a/src/api/writer-generator/typescript/profile.ts +++ b/src/api/writer-generator/typescript/profile.ts @@ -28,6 +28,7 @@ import { tsQualifiedSliceMethodBaseName, tsResourceName, tsSliceFlatTypeName, + tsSliceInputTypeName, tsSliceMethodBaseName, tsSliceStaticName, } from "./name"; @@ -626,7 +627,8 @@ const generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, if (sliceDefs.length === 0) return; const tsProfileName = tsResourceName(flatProfile.identifier); for (const sliceDef of sliceDefs) { - const typeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const inputTypeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const flatTypeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchFields = sliceDef.typeDiscriminator ? [] : Object.keys(sliceDef.match); const allExcluded = [...new Set([...sliceDef.excluded, ...matchFields])]; if (sliceDef.constrainedChoice) { @@ -639,30 +641,32 @@ const generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, const excludedNames = allExcluded.map((name) => JSON.stringify(name)); const requiredNames = sliceDef.required.map((name) => JSON.stringify(name)); const baseType = sliceDef.typedBaseType; - let typeExpr = baseType; + let inputTypeExpr = baseType; if (excludedNames.length > 0) { - typeExpr = `Omit<${typeExpr}, ${excludedNames.join(" | ")}>`; + inputTypeExpr = `Omit<${inputTypeExpr}, ${excludedNames.join(" | ")}>`; } if (requiredNames.length > 0) { - typeExpr = `${typeExpr} & Required>`; + inputTypeExpr = `${inputTypeExpr} & Required>`; } if (sliceDef.constrainedChoice) { - typeExpr = `${typeExpr} & ${tsTypeFromIdentifier(sliceDef.constrainedChoice.variantType)}`; + inputTypeExpr = `${inputTypeExpr} & ${tsTypeFromIdentifier(sliceDef.constrainedChoice.variantType)}`; } + // Input type — setter parameter, no discriminator fields + w.lineSM(`export type ${inputTypeName} = ${inputTypeExpr}`); + // Flat type — getter return, includes readonly discriminator values as literal types + let flatTypeExpr = inputTypeName; if (matchFields.length > 0 && !sliceDef.constrainedChoice) { - // Only include match fields whose values are arrays or scalars — - // plain object matches may be partial and conflict with required fields. const safeEntries = matchFields .filter((key) => { const v = sliceDef.match[key]; return Array.isArray(v) || typeof v !== "object" || v === null; }) - .map((key) => `${key}?: ${valueToTypeLiteral(sliceDef.match[key])}`); + .map((key) => `readonly ${key}: ${valueToTypeLiteral(sliceDef.match[key])}`); if (safeEntries.length > 0) { - typeExpr = `${typeExpr} & { ${safeEntries.join("; ")} }`; + flatTypeExpr = `${flatTypeExpr} & { ${safeEntries.join("; ")} }`; } } - w.lineSM(`export type ${typeName} = ${typeExpr}`); + w.lineSM(`export type ${flatTypeName} = ${flatTypeExpr}`); } w.line(); }; From d9fc209aa8c4cfe80707a8ca7fc7d4af8ce90532 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Fri, 3 Apr 2026 17:25:20 +0200 Subject: [PATCH 06/28] test: Update snapshots for SliceInput/SliceFlat split --- .../__snapshots__/typescript.test.ts.snap | 143 ++++++++++-------- .../__snapshots__/local-package.test.ts.snap | 26 ++-- 2 files changed, 91 insertions(+), 78 deletions(-) diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index 3c253ec2..b70dfa23 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -322,7 +322,8 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bodyweight_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bodyweight_Category_VSCatSliceInput = Omit; +export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -469,7 +470,7 @@ export class observation_bodyweightProfile { // Extensions // Slices - public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceInput | CodeableConcept): this { const match = observation_bodyweightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -480,15 +481,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceInput | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation @@ -534,9 +535,12 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bp_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; -export type Observation_bp_Component_SystolicBPSliceFlat = Omit & Quantity; -export type Observation_bp_Component_DiastolicBPSliceFlat = Omit & Quantity; +export type Observation_bp_Category_VSCatSliceInput = Omit; +export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bp_Component_SystolicBPSliceInput = Omit & Quantity; +export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceInput; +export type Observation_bp_Component_DiastolicBPSliceInput = Omit & Quantity; +export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceInput; import { ensureProfile, @@ -708,7 +712,7 @@ export class observation_bpProfile { // Extensions // Slices - public setVSCat (input?: Observation_bp_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: Observation_bp_Category_VSCatSliceInput | CodeableConcept): this { const match = observation_bpProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -719,7 +723,7 @@ export class observation_bpProfile { return this } - public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent): this { + public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceInput | ObservationComponent): this { const match = observation_bpProfile.SystolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -731,7 +735,7 @@ export class observation_bpProfile { return this } - public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent): this { + public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceInput | ObservationComponent): this { const match = observation_bpProfile.DiastolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -743,37 +747,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceInput | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlat | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceInput | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlat | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceInput | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceInput | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceInput | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlat | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceInput | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceInput | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1079,9 +1083,12 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; -export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = Omit & Quantity; +export type USCoreBloodPressureProfile_Category_VSCatSliceInput = Omit; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBloodPressureProfile_Component_SystolicSliceInput = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceInput; +export type USCoreBloodPressureProfile_Component_DiastolicSliceInput = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceInput; import { ensureProfile, @@ -1343,7 +1350,7 @@ export class USCoreBloodPressureProfile { // Extensions // Slices - public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceInput | CodeableConcept): this { const match = USCoreBloodPressureProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -1354,7 +1361,7 @@ export class USCoreBloodPressureProfile { return this } - public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent): this { + public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceInput | ObservationComponent): this { const match = USCoreBloodPressureProfile.systolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -1366,7 +1373,7 @@ export class USCoreBloodPressureProfile { return this } - public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent): this { + public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceInput | ObservationComponent): this { const match = USCoreBloodPressureProfile.diastolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -1378,37 +1385,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceInput | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceInput | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceInput | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceInput | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceInput | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceInput | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceInput | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1461,7 +1468,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBodyWeightProfile_Category_VSCatSliceInput = Omit; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -1698,7 +1706,7 @@ export class USCoreBodyWeightProfile { // Extensions // Slices - public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceInput | CodeableConcept): this { const match = USCoreBodyWeightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -1709,15 +1717,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceInput | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation @@ -1772,9 +1780,12 @@ exports[`TypeScript US Core Example generates US Core Race extension profile 1`] import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = Omit & Coding; -export type USCoreRaceExtension_Extension_DetailedSliceFlat = Omit & Coding; -export type USCoreRaceExtension_Extension_TextSliceFlat = Omit & { url?: "text" }; +export type USCoreRaceExtension_Extension_OmbCategorySliceInput = Omit & Coding; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceInput; +export type USCoreRaceExtension_Extension_DetailedSliceInput = Omit & Coding; +export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceInput; +export type USCoreRaceExtension_Extension_TextSliceInput = Omit; +export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceInput & { readonly url: "text" }; import { isRawExtensionInput, @@ -1935,7 +1946,7 @@ export class USCoreRaceExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension): this { + public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceInput | Extension): this { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -1947,7 +1958,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceFlat | Extension): this { + public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceInput | Extension): this { const match = USCoreRaceExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -1959,7 +1970,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceFlat | Extension): this { + public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceInput | Extension): this { const match = USCoreRaceExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -1970,37 +1981,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceInput | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceInput | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceInput | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceInput | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceInput | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceInput | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceInput | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlat | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceInput | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceInput | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap index 09cf8599..2e779c21 100644 --- a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap +++ b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap @@ -37,8 +37,10 @@ import type { Bundle, BundleEntry } from "../../hl7-fhir-r4-core/Bundle"; import type { Organization } from "../../hl7-fhir-r4-core/Organization"; import type { Patient } from "../../hl7-fhir-r4-core/Patient"; -export type ExampleTypedBundle_Entry_PatientEntrySliceFlat = BundleEntry; -export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlat = BundleEntry; +export type ExampleTypedBundle_Entry_PatientEntrySliceInput = BundleEntry; +export type ExampleTypedBundle_Entry_PatientEntrySliceFlat = ExampleTypedBundle_Entry_PatientEntrySliceInput; +export type ExampleTypedBundle_Entry_OrganizationEntrySliceInput = BundleEntry; +export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlat = ExampleTypedBundle_Entry_OrganizationEntrySliceInput; import { ensureProfile, @@ -119,7 +121,7 @@ export class ExampleTypedBundleProfile { // Extensions // Slices - public setPatientEntry (input?: ExampleTypedBundle_Entry_PatientEntrySliceFlat | BundleEntry): this { + public setPatientEntry (input?: ExampleTypedBundle_Entry_PatientEntrySliceInput | BundleEntry): this { const match = ExampleTypedBundleProfile.PatientEntrySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.entry ??= [], match, input as BundleEntry) @@ -130,7 +132,7 @@ export class ExampleTypedBundleProfile { return this } - public setOrganizationEntry (input?: ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | BundleEntry): this { + public setOrganizationEntry (input?: ExampleTypedBundle_Entry_OrganizationEntrySliceInput | BundleEntry): this { const match = ExampleTypedBundleProfile.OrganizationEntrySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.entry ??= [], match, input as BundleEntry) @@ -141,26 +143,26 @@ export class ExampleTypedBundleProfile { return this } - public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlat | undefined; + public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceInput | undefined; public getPatientEntry(mode: 'raw'): BundleEntry | undefined; - public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceFlat | undefined; - public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlat | BundleEntry | undefined { + public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceInput | undefined; + public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceInput | BundleEntry | undefined { const match = ExampleTypedBundleProfile.PatientEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as ExampleTypedBundle_Entry_PatientEntrySliceFlat + return item as ExampleTypedBundle_Entry_PatientEntrySliceInput } - public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | undefined; + public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceInput | undefined; public getOrganizationEntry(mode: 'raw'): BundleEntry | undefined; - public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | undefined; - public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | BundleEntry | undefined { + public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceInput | undefined; + public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceInput | BundleEntry | undefined { const match = ExampleTypedBundleProfile.OrganizationEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as ExampleTypedBundle_Entry_OrganizationEntrySliceFlat + return item as ExampleTypedBundle_Entry_OrganizationEntrySliceInput } // Validation From 332e7b29b27d518b71d1c4b5c60d28830f8f6ff2 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Fri, 3 Apr 2026 17:25:24 +0200 Subject: [PATCH 07/28] chore: Regenerate examples and update tests for SliceInput/SliceFlat split --- .../Observation_observation_bodyweight.ts | 13 ++++--- .../profiles/Observation_observation_bp.ts | 39 ++++++++++--------- .../Observation_observation_vitalsigns.ts | 13 ++++--- .../typescript-r4/profile-bodyweight.test.ts | 21 +++++----- .../Observation_observation_vitalsigns.ts | 13 ++++--- .../Extension_USCoreEthnicityExtension.ts | 39 ++++++++++--------- .../profiles/Extension_USCoreRaceExtension.ts | 39 ++++++++++--------- ...ension_USCoreTribalAffiliationExtension.ts | 26 +++++++------ .../Observation_USCoreBloodPressureProfile.ts | 39 ++++++++++--------- .../Observation_USCoreBodyWeightProfile.ts | 13 ++++--- .../Observation_USCoreVitalSignsProfile.ts | 13 ++++--- .../profile-bodyweight.test.ts | 23 +++++------ 12 files changed, 154 insertions(+), 137 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index bc13da30..815a0116 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -8,7 +8,8 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bodyweight_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bodyweight_Category_VSCatSliceInput = Omit; +export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -155,7 +156,7 @@ export class observation_bodyweightProfile { // Extensions // Slices - public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceInput | CodeableConcept): this { const match = observation_bodyweightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -166,15 +167,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceInput | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index 7d8fca73..70bd609d 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -8,9 +8,12 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bp_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; -export type Observation_bp_Component_SystolicBPSliceFlat = Omit & Quantity; -export type Observation_bp_Component_DiastolicBPSliceFlat = Omit & Quantity; +export type Observation_bp_Category_VSCatSliceInput = Omit; +export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bp_Component_SystolicBPSliceInput = Omit & Quantity; +export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceInput; +export type Observation_bp_Component_DiastolicBPSliceInput = Omit & Quantity; +export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceInput; import { ensureProfile, @@ -182,7 +185,7 @@ export class observation_bpProfile { // Extensions // Slices - public setVSCat (input?: Observation_bp_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: Observation_bp_Category_VSCatSliceInput | CodeableConcept): this { const match = observation_bpProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -193,7 +196,7 @@ export class observation_bpProfile { return this } - public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent): this { + public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceInput | ObservationComponent): this { const match = observation_bpProfile.SystolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -205,7 +208,7 @@ export class observation_bpProfile { return this } - public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent): this { + public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceInput | ObservationComponent): this { const match = observation_bpProfile.DiastolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -217,37 +220,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceInput | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlat | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceInput | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlat | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceInput | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceInput | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceInput | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlat | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceInput | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceInput | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 477ed5c1..9902fe9d 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -7,7 +7,8 @@ import type { Observation } from "../../hl7-fhir-r4-core/Observation"; import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_vitalsigns_Category_VSCatSliceInput = Omit; +export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -148,7 +149,7 @@ export class observation_vitalsignsProfile { // Extensions // Slices - public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceInput | CodeableConcept): this { const match = observation_vitalsignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -159,15 +160,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceInput | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-r4/profile-bodyweight.test.ts b/examples/typescript-r4/profile-bodyweight.test.ts index 7ff23a9a..87b60007 100644 --- a/examples/typescript-r4/profile-bodyweight.test.ts +++ b/examples/typescript-r4/profile-bodyweight.test.ts @@ -132,23 +132,20 @@ describe("slice accessors", () => { expect(profile.getVSCat("raw")!.text).toBe("Vital Signs"); }); - test("flat type includes optional discriminator values as literal types", () => { + test("SliceInput and SliceFlat types serve different purposes", () => { const profile = bodyweightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" } }); - // The flat type carries the discriminator values at the type level. - // The coding field is optional — auto-applied by setVSCat, visible via getVSCat("raw"). + // setVSCat accepts SliceInput — no discriminator fields, they're auto-applied profile.setVSCat({ text: "Vital Signs" }); - const flat = profile.getVSCat()!; - // flat.coding is typed as optional discriminator literal: - // coding?: [{ code: "vital-signs"; system: "http://...observation-category" }] - // At runtime, getVSCat() strips it — but the type allows passing it through setVSCat - profile.setVSCat({ - text: "Vital Signs", - coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], - }); - expect(profile.getVSCat()!.text).toBe("Vital Signs"); + // getVSCat() returns SliceInput — discriminator keys are stripped at runtime + const flat = profile.getVSCat()!; expect(flat.text).toBe("Vital Signs"); + expect("coding" in flat).toBe(false); + + // SliceFlat type includes readonly discriminator literals for documentation: + // type VSCatSliceFlat = VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; ... }] } + // It's available as a type-level reference but not used in getter/setter signatures }); test("setVSCat replaces existing slice element", () => { diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 477ed5c1..9902fe9d 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -7,7 +7,8 @@ import type { Observation } from "../../hl7-fhir-r4-core/Observation"; import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_vitalsigns_Category_VSCatSliceInput = Omit; +export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -148,7 +149,7 @@ export class observation_vitalsignsProfile { // Extensions // Slices - public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceInput | CodeableConcept): this { const match = observation_vitalsignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -159,15 +160,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceInput | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index 04c438fa..f890e5d1 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -5,9 +5,12 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlat = Omit & Coding; -export type USCoreEthnicityExtension_Extension_DetailedSliceFlat = Omit & Coding; -export type USCoreEthnicityExtension_Extension_TextSliceFlat = Omit & { url?: "text" }; +export type USCoreEthnicityExtension_Extension_OmbCategorySliceInput = Omit & Coding; +export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlat = USCoreEthnicityExtension_Extension_OmbCategorySliceInput; +export type USCoreEthnicityExtension_Extension_DetailedSliceInput = Omit & Coding; +export type USCoreEthnicityExtension_Extension_DetailedSliceFlat = USCoreEthnicityExtension_Extension_DetailedSliceInput; +export type USCoreEthnicityExtension_Extension_TextSliceInput = Omit; +export type USCoreEthnicityExtension_Extension_TextSliceFlat = USCoreEthnicityExtension_Extension_TextSliceInput & { readonly url: "text" }; import { isRawExtensionInput, @@ -168,7 +171,7 @@ export class USCoreEthnicityExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | Extension): this { + public setExtensionOmbCategory (input?: USCoreEthnicityExtension_Extension_OmbCategorySliceInput | Extension): this { const match = USCoreEthnicityExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -180,7 +183,7 @@ export class USCoreEthnicityExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreEthnicityExtension_Extension_DetailedSliceFlat | Extension): this { + public setExtensionDetailed (input?: USCoreEthnicityExtension_Extension_DetailedSliceInput | Extension): this { const match = USCoreEthnicityExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -192,7 +195,7 @@ export class USCoreEthnicityExtensionProfile { return this } - public setExtensionText (input?: USCoreEthnicityExtension_Extension_TextSliceFlat | Extension): this { + public setExtensionText (input?: USCoreEthnicityExtension_Extension_TextSliceInput | Extension): this { const match = USCoreEthnicityExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -203,37 +206,37 @@ export class USCoreEthnicityExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceInput | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | Extension | undefined { + public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceInput | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceInput | Extension | undefined { const match = USCoreEthnicityExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceInput | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceFlat | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlat | Extension | undefined { + public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceInput | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceInput | Extension | undefined { const match = USCoreEthnicityExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlat | undefined; + public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceInput | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceFlat | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlat | Extension | undefined { + public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceInput | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceInput | Extension | undefined { const match = USCoreEthnicityExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index 16027f58..da64d8dc 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -5,9 +5,12 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = Omit & Coding; -export type USCoreRaceExtension_Extension_DetailedSliceFlat = Omit & Coding; -export type USCoreRaceExtension_Extension_TextSliceFlat = Omit & { url?: "text" }; +export type USCoreRaceExtension_Extension_OmbCategorySliceInput = Omit & Coding; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceInput; +export type USCoreRaceExtension_Extension_DetailedSliceInput = Omit & Coding; +export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceInput; +export type USCoreRaceExtension_Extension_TextSliceInput = Omit; +export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceInput & { readonly url: "text" }; import { isRawExtensionInput, @@ -168,7 +171,7 @@ export class USCoreRaceExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension): this { + public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceInput | Extension): this { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -180,7 +183,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceFlat | Extension): this { + public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceInput | Extension): this { const match = USCoreRaceExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -192,7 +195,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceFlat | Extension): this { + public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceInput | Extension): this { const match = USCoreRaceExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -203,37 +206,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceInput | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceInput | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceInput | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceInput | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceInput | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceInput | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceInput | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlat | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceInput | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceInput | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index 6f8daea5..812e3dac 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -5,8 +5,10 @@ import type { CodeableConcept } from "../../hl7-fhir-r4-core/CodeableConcept"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = Omit & CodeableConcept; -export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = Omit & { url?: "isEnrolled" }; +export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput = Omit & CodeableConcept; +export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput; +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput = Omit; +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput & { readonly url: "isEnrolled" }; import { isRawExtensionInput, @@ -146,7 +148,7 @@ export class USCoreTribalAffiliationExtensionProfile { } // Slices - public setExtensionTribalAffiliation (input?: USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | Extension): this { + public setExtensionTribalAffiliation (input?: USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput | Extension): this { const match = USCoreTribalAffiliationExtensionProfile.tribalAffiliationSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -158,7 +160,7 @@ export class USCoreTribalAffiliationExtensionProfile { return this } - public setExtensionIsEnrolled (input?: USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | Extension): this { + public setExtensionIsEnrolled (input?: USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput | Extension): this { const match = USCoreTribalAffiliationExtensionProfile.isEnrolledSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -169,26 +171,26 @@ export class USCoreTribalAffiliationExtensionProfile { return this } - public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | undefined; + public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput | undefined; public getExtensionTribalAffiliation(mode: 'raw'): Extension | undefined; - public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | undefined; - public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | Extension | undefined { + public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput | undefined; + public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.tribalAffiliationSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") + return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") } - public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | undefined; + public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput | undefined; public getExtensionIsEnrolled(mode: 'raw'): Extension | undefined; - public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | undefined; - public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | Extension | undefined { + public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput | undefined; + public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.isEnrolledSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index 3597c6a6..27a5c7c3 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -11,9 +11,12 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; -export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = Omit & Quantity; +export type USCoreBloodPressureProfile_Category_VSCatSliceInput = Omit; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBloodPressureProfile_Component_SystolicSliceInput = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceInput; +export type USCoreBloodPressureProfile_Component_DiastolicSliceInput = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceInput; import { ensureProfile, @@ -275,7 +278,7 @@ export class USCoreBloodPressureProfile { // Extensions // Slices - public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceInput | CodeableConcept): this { const match = USCoreBloodPressureProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -286,7 +289,7 @@ export class USCoreBloodPressureProfile { return this } - public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent): this { + public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceInput | ObservationComponent): this { const match = USCoreBloodPressureProfile.systolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -298,7 +301,7 @@ export class USCoreBloodPressureProfile { return this } - public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent): this { + public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceInput | ObservationComponent): this { const match = USCoreBloodPressureProfile.diastolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -310,37 +313,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceInput | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceInput | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceInput | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceInput | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceInput | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceInput | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceInput | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index 82a2f6a9..af29664f 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -11,7 +11,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBodyWeightProfile_Category_VSCatSliceInput = Omit; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -248,7 +249,7 @@ export class USCoreBodyWeightProfile { // Extensions // Slices - public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceInput | CodeableConcept): this { const match = USCoreBodyWeightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -259,15 +260,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceInput | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index e1dce3d9..9ab10d93 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -11,7 +11,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = Omit & { coding?: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreVitalSignsProfile_Category_VSCatSliceInput = Omit; +export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = USCoreVitalSignsProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -251,7 +252,7 @@ export class USCoreVitalSignsProfile { // Extensions // Slices - public setVSCat (input?: USCoreVitalSignsProfile_Category_VSCatSliceFlat | CodeableConcept): this { + public setVSCat (input?: USCoreVitalSignsProfile_Category_VSCatSliceInput | CodeableConcept): this { const match = USCoreVitalSignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -262,15 +263,15 @@ export class USCoreVitalSignsProfile { return this } - public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceInput | CodeableConcept | undefined { const match = USCoreVitalSignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/profile-bodyweight.test.ts b/examples/typescript-us-core/profile-bodyweight.test.ts index be62c312..af94e8b8 100644 --- a/examples/typescript-us-core/profile-bodyweight.test.ts +++ b/examples/typescript-us-core/profile-bodyweight.test.ts @@ -104,24 +104,25 @@ describe("demo: read a US Core body weight observation from JSON", () => { }); }); -describe("slice flat types carry discriminator values", () => { - test("flat type includes optional discriminator as literal type", () => { +describe("slice input/flat type split", () => { + test("setter accepts SliceInput (no discriminators), getter returns SliceInput (stripped)", () => { const profile = USCoreBodyWeightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" }, }); - // setVSCat accepts flat input — discriminator coding is optional and auto-applied + // setVSCat accepts SliceInput — only user data, discriminators auto-applied profile.setVSCat({ text: "Vital Signs" }); - // The flat type's coding field is typed with the exact discriminator values: - // coding?: [{ code: "vital-signs"; system: "http://...observation-category" }] - // This is useful for type-level documentation and checks - profile.setVSCat({ - text: "Vital Signs", - coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], - }); - expect(profile.getVSCat()!.text).toBe("Vital Signs"); + // getVSCat() returns SliceInput — discriminator keys stripped at runtime + const flat = profile.getVSCat()!; + expect(flat.text).toBe("Vital Signs"); + expect("coding" in flat).toBe(false); + + // getVSCat("raw") returns the full element with discriminators + expect(profile.getVSCat("raw")!.coding).toEqual([ + { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, + ]); }); }); From 14905f586c2be42118dbfbec1a620fc9d0adcaa6 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 10:43:16 +0200 Subject: [PATCH 08/28] ref: Rename SliceInput to SliceFlatInput --- src/api/writer-generator/typescript/name.ts | 4 ++-- src/api/writer-generator/typescript/profile-slices.ts | 6 +++--- src/api/writer-generator/typescript/profile.ts | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/api/writer-generator/typescript/name.ts b/src/api/writer-generator/typescript/name.ts index 6f41d98c..0db4be68 100644 --- a/src/api/writer-generator/typescript/name.ts +++ b/src/api/writer-generator/typescript/name.ts @@ -96,8 +96,8 @@ export const tsSliceFlatTypeName = (profileName: string, fieldName: string, slic return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlat`; }; -export const tsSliceInputTypeName = (profileName: string, fieldName: string, sliceName: string): string => { - return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceInput`; +export const tsSliceFlatInputTypeName = (profileName: string, fieldName: string, sliceName: string): string => { + return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlatInput`; }; export const tsExtensionFlatTypeName = (profileName: string, extensionName: string): string => { diff --git a/src/api/writer-generator/typescript/profile-slices.ts b/src/api/writer-generator/typescript/profile-slices.ts index e112315f..604b80cb 100644 --- a/src/api/writer-generator/typescript/profile-slices.ts +++ b/src/api/writer-generator/typescript/profile-slices.ts @@ -13,7 +13,7 @@ import { tsProfileClassName, tsResolvedSliceBaseName, tsResourceName, - tsSliceInputTypeName, + tsSliceFlatInputTypeName, tsSliceStaticName, } from "./name"; import { tsGet, tsTypeFromIdentifier } from "./utils"; @@ -159,7 +159,7 @@ export const generateSliceSetters = ( for (const sliceDef of sliceDefs) { const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName); const methodName = `set${baseName}`; - const inputTypeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const inputTypeName = tsSliceFlatInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`; const tsField = tsFieldName(sliceDef.fieldName); const fieldAccess = tsGet("this.resource", tsField); @@ -209,7 +209,7 @@ export const generateSliceGetters = ( for (const sliceDef of sliceDefs) { const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName); const getMethodName = `get${baseName}`; - const inputTypeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const inputTypeName = tsSliceFlatInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`; const matchKeys = JSON.stringify(Object.keys(sliceDef.match)); const tsField = tsFieldName(sliceDef.fieldName); diff --git a/src/api/writer-generator/typescript/profile.ts b/src/api/writer-generator/typescript/profile.ts index 9908b810..d6f4370d 100644 --- a/src/api/writer-generator/typescript/profile.ts +++ b/src/api/writer-generator/typescript/profile.ts @@ -27,8 +27,8 @@ import { tsQualifiedExtensionMethodBaseName, tsQualifiedSliceMethodBaseName, tsResourceName, + tsSliceFlatInputTypeName, tsSliceFlatTypeName, - tsSliceInputTypeName, tsSliceMethodBaseName, tsSliceStaticName, } from "./name"; @@ -627,7 +627,7 @@ const generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, if (sliceDefs.length === 0) return; const tsProfileName = tsResourceName(flatProfile.identifier); for (const sliceDef of sliceDefs) { - const inputTypeName = tsSliceInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const inputTypeName = tsSliceFlatInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const flatTypeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchFields = sliceDef.typeDiscriminator ? [] : Object.keys(sliceDef.match); const allExcluded = [...new Set([...sliceDef.excluded, ...matchFields])]; From 25a64eac1e9289302c8c220f26ee9f8272a840ed Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 10:43:22 +0200 Subject: [PATCH 09/28] test: Update snapshots for SliceFlatInput rename --- .../__snapshots__/typescript.test.ts.snap | 154 +++++++++--------- .../__snapshots__/local-package.test.ts.snap | 28 ++-- 2 files changed, 91 insertions(+), 91 deletions(-) diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index b70dfa23..36cba0f8 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -322,8 +322,8 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bodyweight_Category_VSCatSliceInput = Omit; -export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bodyweight_Category_VSCatSliceFlatInput = Omit; +export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -470,7 +470,7 @@ export class observation_bodyweightProfile { // Extensions // Slices - public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = observation_bodyweightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -481,15 +481,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation @@ -535,12 +535,12 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bp_Category_VSCatSliceInput = Omit; -export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; -export type Observation_bp_Component_SystolicBPSliceInput = Omit & Quantity; -export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceInput; -export type Observation_bp_Component_DiastolicBPSliceInput = Omit & Quantity; -export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceInput; +export type Observation_bp_Category_VSCatSliceFlatInput = Omit; +export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; +export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceFlatInput; +export type Observation_bp_Component_DiastolicBPSliceFlatInput = Omit & Quantity; +export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceFlatInput; import { ensureProfile, @@ -712,7 +712,7 @@ export class observation_bpProfile { // Extensions // Slices - public setVSCat (input?: Observation_bp_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: Observation_bp_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = observation_bpProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -723,7 +723,7 @@ export class observation_bpProfile { return this } - public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceInput | ObservationComponent): this { + public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceFlatInput | ObservationComponent): this { const match = observation_bpProfile.SystolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -735,7 +735,7 @@ export class observation_bpProfile { return this } - public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceInput | ObservationComponent): this { + public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceFlatInput | ObservationComponent): this { const match = observation_bpProfile.DiastolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -747,37 +747,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceInput | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatInput | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceInput | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceInput | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatInput | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatInput | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceInput | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatInput | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceInput | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceInput | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatInput | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatInput | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1083,12 +1083,12 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBloodPressureProfile_Category_VSCatSliceInput = Omit; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; -export type USCoreBloodPressureProfile_Component_SystolicSliceInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceInput; -export type USCoreBloodPressureProfile_Component_DiastolicSliceInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceInput; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; import { ensureProfile, @@ -1350,7 +1350,7 @@ export class USCoreBloodPressureProfile { // Extensions // Slices - public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = USCoreBloodPressureProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -1361,7 +1361,7 @@ export class USCoreBloodPressureProfile { return this } - public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceInput | ObservationComponent): this { + public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | ObservationComponent): this { const match = USCoreBloodPressureProfile.systolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -1373,7 +1373,7 @@ export class USCoreBloodPressureProfile { return this } - public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceInput | ObservationComponent): this { + public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | ObservationComponent): this { const match = USCoreBloodPressureProfile.diastolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -1385,37 +1385,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceInput | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceInput | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceInput | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceInput | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceInput | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceInput | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1468,8 +1468,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBodyWeightProfile_Category_VSCatSliceInput = Omit; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlatInput = Omit; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -1706,7 +1706,7 @@ export class USCoreBodyWeightProfile { // Extensions // Slices - public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = USCoreBodyWeightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -1717,15 +1717,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation @@ -1780,12 +1780,12 @@ exports[`TypeScript US Core Example generates US Core Race extension profile 1`] import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreRaceExtension_Extension_OmbCategorySliceInput = Omit & Coding; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceInput; -export type USCoreRaceExtension_Extension_DetailedSliceInput = Omit & Coding; -export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceInput; -export type USCoreRaceExtension_Extension_TextSliceInput = Omit; -export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceInput & { readonly url: "text" }; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit & Coding; +export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceFlatInput; +export type USCoreRaceExtension_Extension_TextSliceFlatInput = Omit; +export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; import { isRawExtensionInput, @@ -1946,7 +1946,7 @@ export class USCoreRaceExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceInput | Extension): this { + public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | Extension): this { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -1958,7 +1958,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceInput | Extension): this { + public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceFlatInput | Extension): this { const match = USCoreRaceExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -1970,7 +1970,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceInput | Extension): this { + public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceFlatInput | Extension): this { const match = USCoreRaceExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -1981,37 +1981,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceInput | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceInput | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceInput | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceInput | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatInput | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceInput | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceInput | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatInput | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatInput | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceInput | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatInput | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceInput | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceInput | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatInput | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatInput | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap index 2e779c21..91daebe3 100644 --- a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap +++ b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap @@ -37,10 +37,10 @@ import type { Bundle, BundleEntry } from "../../hl7-fhir-r4-core/Bundle"; import type { Organization } from "../../hl7-fhir-r4-core/Organization"; import type { Patient } from "../../hl7-fhir-r4-core/Patient"; -export type ExampleTypedBundle_Entry_PatientEntrySliceInput = BundleEntry; -export type ExampleTypedBundle_Entry_PatientEntrySliceFlat = ExampleTypedBundle_Entry_PatientEntrySliceInput; -export type ExampleTypedBundle_Entry_OrganizationEntrySliceInput = BundleEntry; -export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlat = ExampleTypedBundle_Entry_OrganizationEntrySliceInput; +export type ExampleTypedBundle_Entry_PatientEntrySliceFlatInput = BundleEntry; +export type ExampleTypedBundle_Entry_PatientEntrySliceFlat = ExampleTypedBundle_Entry_PatientEntrySliceFlatInput; +export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput = BundleEntry; +export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlat = ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput; import { ensureProfile, @@ -121,7 +121,7 @@ export class ExampleTypedBundleProfile { // Extensions // Slices - public setPatientEntry (input?: ExampleTypedBundle_Entry_PatientEntrySliceInput | BundleEntry): this { + public setPatientEntry (input?: ExampleTypedBundle_Entry_PatientEntrySliceFlatInput | BundleEntry): this { const match = ExampleTypedBundleProfile.PatientEntrySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.entry ??= [], match, input as BundleEntry) @@ -132,7 +132,7 @@ export class ExampleTypedBundleProfile { return this } - public setOrganizationEntry (input?: ExampleTypedBundle_Entry_OrganizationEntrySliceInput | BundleEntry): this { + public setOrganizationEntry (input?: ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput | BundleEntry): this { const match = ExampleTypedBundleProfile.OrganizationEntrySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.entry ??= [], match, input as BundleEntry) @@ -143,26 +143,26 @@ export class ExampleTypedBundleProfile { return this } - public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceInput | undefined; + public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatInput | undefined; public getPatientEntry(mode: 'raw'): BundleEntry | undefined; - public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceInput | undefined; - public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceInput | BundleEntry | undefined { + public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceFlatInput | undefined; + public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatInput | BundleEntry | undefined { const match = ExampleTypedBundleProfile.PatientEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as ExampleTypedBundle_Entry_PatientEntrySliceInput + return item as ExampleTypedBundle_Entry_PatientEntrySliceFlatInput } - public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceInput | undefined; + public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput | undefined; public getOrganizationEntry(mode: 'raw'): BundleEntry | undefined; - public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceInput | undefined; - public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceInput | BundleEntry | undefined { + public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput | undefined; + public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput | BundleEntry | undefined { const match = ExampleTypedBundleProfile.OrganizationEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as ExampleTypedBundle_Entry_OrganizationEntrySliceInput + return item as ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput } // Validation From 832ac02b1001986f1c7ec1283202ec66d8fb1ea0 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 10:43:22 +0200 Subject: [PATCH 10/28] chore: Regenerate examples for SliceFlatInput rename --- .../Observation_observation_bodyweight.ts | 14 +++---- .../profiles/Observation_observation_bp.ts | 42 +++++++++---------- .../Observation_observation_vitalsigns.ts | 14 +++---- .../Observation_observation_vitalsigns.ts | 14 +++---- .../Extension_USCoreEthnicityExtension.ts | 42 +++++++++---------- .../profiles/Extension_USCoreRaceExtension.ts | 42 +++++++++---------- ...ension_USCoreTribalAffiliationExtension.ts | 28 ++++++------- .../Observation_USCoreBloodPressureProfile.ts | 42 +++++++++---------- .../Observation_USCoreBodyWeightProfile.ts | 14 +++---- .../Observation_USCoreVitalSignsProfile.ts | 14 +++---- 10 files changed, 133 insertions(+), 133 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index 815a0116..4f6d5cd1 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -8,8 +8,8 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bodyweight_Category_VSCatSliceInput = Omit; -export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bodyweight_Category_VSCatSliceFlatInput = Omit; +export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -156,7 +156,7 @@ export class observation_bodyweightProfile { // Extensions // Slices - public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = observation_bodyweightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -167,15 +167,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index 70bd609d..b9408ec1 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -8,12 +8,12 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bp_Category_VSCatSliceInput = Omit; -export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; -export type Observation_bp_Component_SystolicBPSliceInput = Omit & Quantity; -export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceInput; -export type Observation_bp_Component_DiastolicBPSliceInput = Omit & Quantity; -export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceInput; +export type Observation_bp_Category_VSCatSliceFlatInput = Omit; +export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; +export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceFlatInput; +export type Observation_bp_Component_DiastolicBPSliceFlatInput = Omit & Quantity; +export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceFlatInput; import { ensureProfile, @@ -185,7 +185,7 @@ export class observation_bpProfile { // Extensions // Slices - public setVSCat (input?: Observation_bp_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: Observation_bp_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = observation_bpProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -196,7 +196,7 @@ export class observation_bpProfile { return this } - public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceInput | ObservationComponent): this { + public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceFlatInput | ObservationComponent): this { const match = observation_bpProfile.SystolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -208,7 +208,7 @@ export class observation_bpProfile { return this } - public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceInput | ObservationComponent): this { + public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceFlatInput | ObservationComponent): this { const match = observation_bpProfile.DiastolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -220,37 +220,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceInput | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatInput | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceInput | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceInput | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatInput | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatInput | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceInput | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatInput | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceInput | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceInput | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatInput | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatInput | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 9902fe9d..694d2a13 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -7,8 +7,8 @@ import type { Observation } from "../../hl7-fhir-r4-core/Observation"; import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_vitalsigns_Category_VSCatSliceInput = Omit; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_vitalsigns_Category_VSCatSliceFlatInput = Omit; +export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -149,7 +149,7 @@ export class observation_vitalsignsProfile { // Extensions // Slices - public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = observation_vitalsignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -160,15 +160,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 9902fe9d..694d2a13 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -7,8 +7,8 @@ import type { Observation } from "../../hl7-fhir-r4-core/Observation"; import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_vitalsigns_Category_VSCatSliceInput = Omit; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_vitalsigns_Category_VSCatSliceFlatInput = Omit; +export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -149,7 +149,7 @@ export class observation_vitalsignsProfile { // Extensions // Slices - public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = observation_vitalsignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -160,15 +160,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index f890e5d1..56cbc903 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -5,12 +5,12 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreEthnicityExtension_Extension_OmbCategorySliceInput = Omit & Coding; -export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlat = USCoreEthnicityExtension_Extension_OmbCategorySliceInput; -export type USCoreEthnicityExtension_Extension_DetailedSliceInput = Omit & Coding; -export type USCoreEthnicityExtension_Extension_DetailedSliceFlat = USCoreEthnicityExtension_Extension_DetailedSliceInput; -export type USCoreEthnicityExtension_Extension_TextSliceInput = Omit; -export type USCoreEthnicityExtension_Extension_TextSliceFlat = USCoreEthnicityExtension_Extension_TextSliceInput & { readonly url: "text" }; +export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; +export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlat = USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreEthnicityExtension_Extension_DetailedSliceFlatInput = Omit & Coding; +export type USCoreEthnicityExtension_Extension_DetailedSliceFlat = USCoreEthnicityExtension_Extension_DetailedSliceFlatInput; +export type USCoreEthnicityExtension_Extension_TextSliceFlatInput = Omit; +export type USCoreEthnicityExtension_Extension_TextSliceFlat = USCoreEthnicityExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; import { isRawExtensionInput, @@ -171,7 +171,7 @@ export class USCoreEthnicityExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreEthnicityExtension_Extension_OmbCategorySliceInput | Extension): this { + public setExtensionOmbCategory (input?: USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput | Extension): this { const match = USCoreEthnicityExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -183,7 +183,7 @@ export class USCoreEthnicityExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreEthnicityExtension_Extension_DetailedSliceInput | Extension): this { + public setExtensionDetailed (input?: USCoreEthnicityExtension_Extension_DetailedSliceFlatInput | Extension): this { const match = USCoreEthnicityExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -195,7 +195,7 @@ export class USCoreEthnicityExtensionProfile { return this } - public setExtensionText (input?: USCoreEthnicityExtension_Extension_TextSliceInput | Extension): this { + public setExtensionText (input?: USCoreEthnicityExtension_Extension_TextSliceFlatInput | Extension): this { const match = USCoreEthnicityExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -206,37 +206,37 @@ export class USCoreEthnicityExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceInput | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceInput | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceInput | Extension | undefined { + public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput | Extension | undefined { const match = USCoreEthnicityExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceInput | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatInput | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceInput | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceInput | Extension | undefined { + public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceFlatInput | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatInput | Extension | undefined { const match = USCoreEthnicityExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceInput | undefined; + public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatInput | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceInput | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceInput | Extension | undefined { + public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceFlatInput | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatInput | Extension | undefined { const match = USCoreEthnicityExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index da64d8dc..184d32c8 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -5,12 +5,12 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreRaceExtension_Extension_OmbCategorySliceInput = Omit & Coding; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceInput; -export type USCoreRaceExtension_Extension_DetailedSliceInput = Omit & Coding; -export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceInput; -export type USCoreRaceExtension_Extension_TextSliceInput = Omit; -export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceInput & { readonly url: "text" }; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit & Coding; +export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceFlatInput; +export type USCoreRaceExtension_Extension_TextSliceFlatInput = Omit; +export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; import { isRawExtensionInput, @@ -171,7 +171,7 @@ export class USCoreRaceExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceInput | Extension): this { + public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | Extension): this { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -183,7 +183,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceInput | Extension): this { + public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceFlatInput | Extension): this { const match = USCoreRaceExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -195,7 +195,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceInput | Extension): this { + public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceFlatInput | Extension): this { const match = USCoreRaceExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -206,37 +206,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceInput | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceInput | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceInput | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceInput | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatInput | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceInput | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceInput | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatInput | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatInput | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceInput | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatInput | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceInput | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceInput | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatInput | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatInput | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index 812e3dac..ad5a2c06 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -5,10 +5,10 @@ import type { CodeableConcept } from "../../hl7-fhir-r4-core/CodeableConcept"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput = Omit & CodeableConcept; -export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput; -export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput = Omit; -export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput & { readonly url: "isEnrolled" }; +export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput = Omit & CodeableConcept; +export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput; +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput = Omit; +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput & { readonly url: "isEnrolled" }; import { isRawExtensionInput, @@ -148,7 +148,7 @@ export class USCoreTribalAffiliationExtensionProfile { } // Slices - public setExtensionTribalAffiliation (input?: USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput | Extension): this { + public setExtensionTribalAffiliation (input?: USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput | Extension): this { const match = USCoreTribalAffiliationExtensionProfile.tribalAffiliationSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -160,7 +160,7 @@ export class USCoreTribalAffiliationExtensionProfile { return this } - public setExtensionIsEnrolled (input?: USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput | Extension): this { + public setExtensionIsEnrolled (input?: USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput | Extension): this { const match = USCoreTribalAffiliationExtensionProfile.isEnrolledSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -171,26 +171,26 @@ export class USCoreTribalAffiliationExtensionProfile { return this } - public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput | undefined; + public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput | undefined; public getExtensionTribalAffiliation(mode: 'raw'): Extension | undefined; - public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput | undefined; - public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceInput | Extension | undefined { + public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput | undefined; + public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.tribalAffiliationSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") + return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") } - public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput | undefined; + public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput | undefined; public getExtensionIsEnrolled(mode: 'raw'): Extension | undefined; - public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput | undefined; - public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceInput | Extension | undefined { + public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput | undefined; + public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.isEnrolledSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index 27a5c7c3..13b649f2 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -11,12 +11,12 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBloodPressureProfile_Category_VSCatSliceInput = Omit; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; -export type USCoreBloodPressureProfile_Component_SystolicSliceInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceInput; -export type USCoreBloodPressureProfile_Component_DiastolicSliceInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceInput; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; import { ensureProfile, @@ -278,7 +278,7 @@ export class USCoreBloodPressureProfile { // Extensions // Slices - public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = USCoreBloodPressureProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -289,7 +289,7 @@ export class USCoreBloodPressureProfile { return this } - public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceInput | ObservationComponent): this { + public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | ObservationComponent): this { const match = USCoreBloodPressureProfile.systolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -301,7 +301,7 @@ export class USCoreBloodPressureProfile { return this } - public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceInput | ObservationComponent): this { + public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | ObservationComponent): this { const match = USCoreBloodPressureProfile.diastolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -313,37 +313,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceInput | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceInput | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceInput | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceInput | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceInput | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceInput | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index af29664f..c8697b1a 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -11,8 +11,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBodyWeightProfile_Category_VSCatSliceInput = Omit; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlatInput = Omit; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -249,7 +249,7 @@ export class USCoreBodyWeightProfile { // Extensions // Slices - public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = USCoreBodyWeightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -260,15 +260,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index 9ab10d93..cf58b834 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -11,8 +11,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreVitalSignsProfile_Category_VSCatSliceInput = Omit; -export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = USCoreVitalSignsProfile_Category_VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreVitalSignsProfile_Category_VSCatSliceFlatInput = Omit; +export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = USCoreVitalSignsProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; import { ensureProfile, @@ -252,7 +252,7 @@ export class USCoreVitalSignsProfile { // Extensions // Slices - public setVSCat (input?: USCoreVitalSignsProfile_Category_VSCatSliceInput | CodeableConcept): this { + public setVSCat (input?: USCoreVitalSignsProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { const match = USCoreVitalSignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -263,15 +263,15 @@ export class USCoreVitalSignsProfile { return this } - public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceInput | undefined; + public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatInput | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceInput | CodeableConcept | undefined { + public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { const match = USCoreVitalSignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation From c9ae07e44b967ead230b694847837718e37d4758 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 15:20:36 +0200 Subject: [PATCH 11/28] fix: Add blank line between generated slice type pairs --- src/api/writer-generator/typescript/profile.ts | 2 +- .../write-generator/__snapshots__/typescript.test.ts.snap | 6 ++++++ .../multi-package/__snapshots__/local-package.test.ts.snap | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/api/writer-generator/typescript/profile.ts b/src/api/writer-generator/typescript/profile.ts index d6f4370d..0de5ce42 100644 --- a/src/api/writer-generator/typescript/profile.ts +++ b/src/api/writer-generator/typescript/profile.ts @@ -667,8 +667,8 @@ const generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, } } w.lineSM(`export type ${flatTypeName} = ${flatTypeExpr}`); + w.line(); } - w.line(); }; const generateRawType = (w: TypeScript, flatProfile: ProfileTypeSchema, factoryInfo: ProfileFactoryInfo) => { diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index 36cba0f8..89a3f00a 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -537,8 +537,10 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bp_Category_VSCatSliceFlatInput = Omit; export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; + export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceFlatInput; + export type Observation_bp_Component_DiastolicBPSliceFlatInput = Omit & Quantity; export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceFlatInput; @@ -1085,8 +1087,10 @@ import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; + export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; + export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput = Omit & Quantity; export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; @@ -1782,8 +1786,10 @@ import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreRaceExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; + export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit & Coding; export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceFlatInput; + export type USCoreRaceExtension_Extension_TextSliceFlatInput = Omit; export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; diff --git a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap index 91daebe3..758fb1c2 100644 --- a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap +++ b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap @@ -39,6 +39,7 @@ import type { Patient } from "../../hl7-fhir-r4-core/Patient"; export type ExampleTypedBundle_Entry_PatientEntrySliceFlatInput = BundleEntry; export type ExampleTypedBundle_Entry_PatientEntrySliceFlat = ExampleTypedBundle_Entry_PatientEntrySliceFlatInput; + export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput = BundleEntry; export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlat = ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput; From fdc19ed706825aa0f0fe67e7e987488f380e1cfa Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 15:20:36 +0200 Subject: [PATCH 12/28] chore: Regenerate examples --- .../hl7-fhir-r4-core/profiles/Observation_observation_bp.ts | 2 ++ .../profiles/Extension_USCoreEthnicityExtension.ts | 2 ++ .../hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts | 2 ++ .../profiles/Extension_USCoreTribalAffiliationExtension.ts | 1 + .../profiles/Observation_USCoreBloodPressureProfile.ts | 2 ++ 5 files changed, 9 insertions(+) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index b9408ec1..ebffd1df 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -10,8 +10,10 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bp_Category_VSCatSliceFlatInput = Omit; export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; + export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceFlatInput; + export type Observation_bp_Component_DiastolicBPSliceFlatInput = Omit & Quantity; export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceFlatInput; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index 56cbc903..67021620 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -7,8 +7,10 @@ import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlat = USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput; + export type USCoreEthnicityExtension_Extension_DetailedSliceFlatInput = Omit & Coding; export type USCoreEthnicityExtension_Extension_DetailedSliceFlat = USCoreEthnicityExtension_Extension_DetailedSliceFlatInput; + export type USCoreEthnicityExtension_Extension_TextSliceFlatInput = Omit; export type USCoreEthnicityExtension_Extension_TextSliceFlat = USCoreEthnicityExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index 184d32c8..a479a3f0 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -7,8 +7,10 @@ import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreRaceExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; + export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit & Coding; export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceFlatInput; + export type USCoreRaceExtension_Extension_TextSliceFlatInput = Omit; export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index ad5a2c06..7b8dd68a 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -7,6 +7,7 @@ import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput = Omit & CodeableConcept; export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput; + export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput = Omit; export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput & { readonly url: "isEnrolled" }; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index 13b649f2..1739714b 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -13,8 +13,10 @@ import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; + export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; + export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput = Omit & Quantity; export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; From 9070abb75cce6e9adee7a1a0127f8b3dc346a784 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 17:07:45 +0200 Subject: [PATCH 13/28] fix: Getter returns SliceFlat (with discriminator types) instead of SliceFlatInput --- .../writer-generator/typescript/profile-slices.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/api/writer-generator/typescript/profile-slices.ts b/src/api/writer-generator/typescript/profile-slices.ts index 604b80cb..4a164242 100644 --- a/src/api/writer-generator/typescript/profile-slices.ts +++ b/src/api/writer-generator/typescript/profile-slices.ts @@ -14,6 +14,7 @@ import { tsResolvedSliceBaseName, tsResourceName, tsSliceFlatInputTypeName, + tsSliceFlatTypeName, tsSliceStaticName, } from "./name"; import { tsGet, tsTypeFromIdentifier } from "./utils"; @@ -209,16 +210,16 @@ export const generateSliceGetters = ( for (const sliceDef of sliceDefs) { const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName); const getMethodName = `get${baseName}`; - const inputTypeName = tsSliceFlatInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const flatTypeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`; const matchKeys = JSON.stringify(Object.keys(sliceDef.match)); const tsField = tsFieldName(sliceDef.fieldName); const fieldAccess = tsGet("this.resource", tsField); const baseType = sliceDef.typedBaseType; - const defaultReturn = defaultMode === "raw" ? baseType : inputTypeName; + const defaultReturn = defaultMode === "raw" ? baseType : flatTypeName; // Overload signatures - w.lineSM(`public ${getMethodName}(mode: 'flat'): ${inputTypeName} | undefined`); + w.lineSM(`public ${getMethodName}(mode: 'flat'): ${flatTypeName} | undefined`); w.lineSM(`public ${getMethodName}(mode: 'raw'): ${baseType} | undefined`); w.lineSM(`public ${getMethodName}(): ${defaultReturn} | undefined`); @@ -227,7 +228,7 @@ export const generateSliceGetters = ( [ "public", getMethodName, - `(mode: 'flat' | 'raw' = '${defaultMode}'): ${inputTypeName} | ${baseType} | undefined`, + `(mode: 'flat' | 'raw' = '${defaultMode}'): ${flatTypeName} | ${baseType} | undefined`, ], () => { w.line(`const match = ${matchRef}`); @@ -244,14 +245,14 @@ export const generateSliceGetters = ( w.line("if (mode === 'raw') return item"); } if (sliceDef.typeDiscriminator) { - w.line(`return item as ${inputTypeName}`); + w.line(`return item as ${flatTypeName}`); } else if (sliceDef.constrainedChoice) { const cc = sliceDef.constrainedChoice; w.line( - `return unwrapSliceChoice<${inputTypeName}>(item, ${matchKeys}, ${JSON.stringify(cc.variant)})`, + `return unwrapSliceChoice<${flatTypeName}>(item, ${matchKeys}, ${JSON.stringify(cc.variant)})`, ); } else { - w.line(`return stripMatchKeys<${inputTypeName}>(item, ${matchKeys})`); + w.line(`return stripMatchKeys<${flatTypeName}>(item, ${matchKeys})`); } }, ); From fb4e868cd7d94c379a8fcdc978eef3f4f0dad05d Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 17:07:45 +0200 Subject: [PATCH 14/28] test: Update snapshots for SliceFlat getter return --- .../__snapshots__/typescript.test.ts.snap | 88 +++++++++---------- .../__snapshots__/local-package.test.ts.snap | 16 ++-- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index 89a3f00a..bc5f6a01 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -481,15 +481,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation @@ -749,37 +749,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatInput | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlat | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatInput | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatInput | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlat | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatInput | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatInput | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatInput | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlat | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1389,37 +1389,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1721,15 +1721,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation @@ -1987,37 +1987,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatInput | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatInput | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatInput | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatInput | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatInput | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatInput | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlat | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap index 758fb1c2..e0d8b160 100644 --- a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap +++ b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap @@ -144,26 +144,26 @@ export class ExampleTypedBundleProfile { return this } - public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatInput | undefined; + public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlat | undefined; public getPatientEntry(mode: 'raw'): BundleEntry | undefined; - public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceFlatInput | undefined; - public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatInput | BundleEntry | undefined { + public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceFlat | undefined; + public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlat | BundleEntry | undefined { const match = ExampleTypedBundleProfile.PatientEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as ExampleTypedBundle_Entry_PatientEntrySliceFlatInput + return item as ExampleTypedBundle_Entry_PatientEntrySliceFlat } - public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput | undefined; + public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | undefined; public getOrganizationEntry(mode: 'raw'): BundleEntry | undefined; - public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput | undefined; - public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput | BundleEntry | undefined { + public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | undefined; + public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | BundleEntry | undefined { const match = ExampleTypedBundleProfile.OrganizationEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput + return item as ExampleTypedBundle_Entry_OrganizationEntrySliceFlat } // Validation From 34c5d931c87118a5d4a81a0ea7da60ea1cf7486b Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 17:07:45 +0200 Subject: [PATCH 15/28] chore: Update example tests for SliceFlat getter return --- .../Observation_observation_bodyweight.ts | 8 +++--- .../profiles/Observation_observation_bp.ts | 24 ++++++++-------- .../Observation_observation_vitalsigns.ts | 8 +++--- .../typescript-r4/profile-bodyweight.test.ts | 28 ++++++++----------- .../Observation_observation_vitalsigns.ts | 8 +++--- .../Extension_USCoreEthnicityExtension.ts | 24 ++++++++-------- .../profiles/Extension_USCoreRaceExtension.ts | 24 ++++++++-------- ...ension_USCoreTribalAffiliationExtension.ts | 16 +++++------ .../Observation_USCoreBloodPressureProfile.ts | 24 ++++++++-------- .../Observation_USCoreBodyWeightProfile.ts | 8 +++--- .../Observation_USCoreVitalSignsProfile.ts | 8 +++--- .../profile-bodyweight.test.ts | 17 +++++------ .../typescript-us-core/profile-bp.test.ts | 4 +-- 13 files changed, 98 insertions(+), 103 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index 4f6d5cd1..073205d6 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -167,15 +167,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index ebffd1df..7c4aca8d 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -222,37 +222,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatInput | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlat | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatInput | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatInput | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlat | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatInput | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatInput | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatInput | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlat | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 694d2a13..9a154fb0 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -160,15 +160,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-r4/profile-bodyweight.test.ts b/examples/typescript-r4/profile-bodyweight.test.ts index 87b60007..86cd5202 100644 --- a/examples/typescript-r4/profile-bodyweight.test.ts +++ b/examples/typescript-r4/profile-bodyweight.test.ts @@ -96,7 +96,7 @@ describe("demo: read a bodyweight observation from JSON", () => { expect(profile.getCode()!.coding![0]!.code).toBe("29463-7"); // Slice accessor strips discriminator keys (coding) by default — only user data remains - expect(profile.getVSCat()).toEqual({ text: "Vital Signs" }); + expect(profile.getVSCat()!.text).toBe("Vital Signs"); // Use "raw" mode to see the full element including discriminator expect(profile.getVSCat("raw")!.coding).toEqual([ { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, @@ -123,29 +123,23 @@ describe("factory method equivalence", () => { }); describe("slice accessors", () => { - test("setVSCat merges discriminator and strips it in flat mode", () => { - const profile = bodyweightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" } }); - profile.setVSCat({ text: "Vital Signs" }); - - expect(profile.getVSCat()).toEqual({ text: "Vital Signs" }); - expect(profile.getVSCat("raw")!.coding).toBeDefined(); - expect(profile.getVSCat("raw")!.text).toBe("Vital Signs"); - }); - - test("SliceInput and SliceFlat types serve different purposes", () => { + test("setVSCat accepts SliceFlatInput, getVSCat returns SliceFlat", () => { const profile = bodyweightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" } }); - // setVSCat accepts SliceInput — no discriminator fields, they're auto-applied + // setVSCat accepts SliceFlatInput — only user data, discriminators auto-applied profile.setVSCat({ text: "Vital Signs" }); - // getVSCat() returns SliceInput — discriminator keys are stripped at runtime + // getVSCat() returns SliceFlat — typed with readonly discriminator literals + // type VSCatSliceFlat = Omit + // & { readonly coding: [{ code: "vital-signs"; system: "http://..." }] } const flat = profile.getVSCat()!; expect(flat.text).toBe("Vital Signs"); - expect("coding" in flat).toBe(false); - // SliceFlat type includes readonly discriminator literals for documentation: - // type VSCatSliceFlat = VSCatSliceInput & { readonly coding: [{ code: "vital-signs"; ... }] } - // It's available as a type-level reference but not used in getter/setter signatures + // getVSCat("raw") returns the full CodeableConcept including discriminator + expect(profile.getVSCat("raw")!.coding).toEqual([ + { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, + ]); + expect(profile.getVSCat("raw")!.text).toBe("Vital Signs"); }); test("setVSCat replaces existing slice element", () => { diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 694d2a13..9a154fb0 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -160,15 +160,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index 67021620..830f1fad 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -208,37 +208,37 @@ export class USCoreEthnicityExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput | Extension | undefined { + public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | Extension | undefined { const match = USCoreEthnicityExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatInput | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlat | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceFlatInput | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatInput | Extension | undefined { + public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlat | Extension | undefined { const match = USCoreEthnicityExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatInput | undefined; + public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlat | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceFlatInput | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatInput | Extension | undefined { + public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceFlat | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlat | Extension | undefined { const match = USCoreEthnicityExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index a479a3f0..a0f4763d 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -208,37 +208,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatInput | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatInput | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatInput | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatInput | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatInput | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatInput | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlat | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index 7b8dd68a..3a047b9b 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -172,26 +172,26 @@ export class USCoreTribalAffiliationExtensionProfile { return this } - public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput | undefined; + public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | undefined; public getExtensionTribalAffiliation(mode: 'raw'): Extension | undefined; - public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput | undefined; - public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput | Extension | undefined { + public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | undefined; + public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.tribalAffiliationSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") + return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") } - public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput | undefined; + public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | undefined; public getExtensionIsEnrolled(mode: 'raw'): Extension | undefined; - public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput | undefined; - public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput | Extension | undefined { + public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | undefined; + public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.isEnrolledSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return stripMatchKeys(item, ["url"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index 1739714b..09ddd175 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -315,37 +315,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index c8697b1a..072e043b 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -260,15 +260,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index cf58b834..ac8ea422 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -263,15 +263,15 @@ export class USCoreVitalSignsProfile { return this } - public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatInput | undefined; + public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlat | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceFlatInput | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatInput | CodeableConcept | undefined { + public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceFlat | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { const match = USCoreVitalSignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return stripMatchKeys(item, ["coding"]) } // Validation diff --git a/examples/typescript-us-core/profile-bodyweight.test.ts b/examples/typescript-us-core/profile-bodyweight.test.ts index af94e8b8..aec54c45 100644 --- a/examples/typescript-us-core/profile-bodyweight.test.ts +++ b/examples/typescript-us-core/profile-bodyweight.test.ts @@ -95,9 +95,11 @@ describe("demo: read a US Core body weight observation from JSON", () => { // Code is a fixed value — auto-set by the profile, read-only (no setter) expect(profile.getCode()!.coding![0]!.code).toBe("29463-7"); - // Slice accessor strips discriminator keys (coding) by default — only user data remains - expect(profile.getVSCat()).toEqual({ text: "Vital Signs" }); - // Use "raw" mode to see the full element including discriminator + // getVSCat() returns SliceFlat — typed with readonly discriminator literals + // Discriminator keys are stripped at runtime, user data remains + expect(profile.getVSCat()!.text).toBe("Vital Signs"); + + // getVSCat("raw") returns the full CodeableConcept including discriminator expect(profile.getVSCat("raw")!.coding).toEqual([ { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, ]); @@ -105,21 +107,20 @@ describe("demo: read a US Core body weight observation from JSON", () => { }); describe("slice input/flat type split", () => { - test("setter accepts SliceInput (no discriminators), getter returns SliceInput (stripped)", () => { + test("setVSCat accepts SliceFlatInput, getVSCat returns SliceFlat", () => { const profile = USCoreBodyWeightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" }, }); - // setVSCat accepts SliceInput — only user data, discriminators auto-applied + // setVSCat accepts SliceFlatInput — only user data, discriminators auto-applied profile.setVSCat({ text: "Vital Signs" }); - // getVSCat() returns SliceInput — discriminator keys stripped at runtime + // getVSCat() returns SliceFlat — includes readonly discriminator type info const flat = profile.getVSCat()!; expect(flat.text).toBe("Vital Signs"); - expect("coding" in flat).toBe(false); - // getVSCat("raw") returns the full element with discriminators + // getVSCat("raw") returns the full CodeableConcept with discriminator values expect(profile.getVSCat("raw")!.coding).toEqual([ { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, ]); diff --git a/examples/typescript-us-core/profile-bp.test.ts b/examples/typescript-us-core/profile-bp.test.ts index a2aa5760..a973313d 100644 --- a/examples/typescript-us-core/profile-bp.test.ts +++ b/examples/typescript-us-core/profile-bp.test.ts @@ -109,8 +109,8 @@ describe("demo: read a US Core blood pressure observation from JSON", () => { expect(profile.getSystolic("raw")!.valueQuantity!.value).toBe(120); expect(profile.getSystolic("raw")!.code?.coding?.[0]?.code).toBe("8480-6"); - // Category slice — flat strips discriminator, raw includes it - expect(profile.getVSCat()).toEqual({ text: "Vital Signs" }); + // Category slice — flat returns SliceFlat type, raw includes full element + expect(profile.getVSCat()!.text).toBe("Vital Signs"); expect(profile.getVSCat("raw")!.coding).toEqual([ { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, ]); From 3db477bb4b700aa3e1b352f70e543e92c45a8106 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 19:46:26 +0200 Subject: [PATCH 16/28] fix: Split long SliceFlat type lines using curlyBlock --- .../writer-generator/typescript/profile.ts | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/api/writer-generator/typescript/profile.ts b/src/api/writer-generator/typescript/profile.ts index 0de5ce42..650227f1 100644 --- a/src/api/writer-generator/typescript/profile.ts +++ b/src/api/writer-generator/typescript/profile.ts @@ -654,19 +654,24 @@ const generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, // Input type — setter parameter, no discriminator fields w.lineSM(`export type ${inputTypeName} = ${inputTypeExpr}`); // Flat type — getter return, includes readonly discriminator values as literal types - let flatTypeExpr = inputTypeName; - if (matchFields.length > 0 && !sliceDef.constrainedChoice) { - const safeEntries = matchFields - .filter((key) => { - const v = sliceDef.match[key]; - return Array.isArray(v) || typeof v !== "object" || v === null; - }) - .map((key) => `readonly ${key}: ${valueToTypeLiteral(sliceDef.match[key])}`); - if (safeEntries.length > 0) { - flatTypeExpr = `${flatTypeExpr} & { ${safeEntries.join("; ")} }`; - } + const safeMatchEntries = + matchFields.length > 0 && !sliceDef.constrainedChoice + ? matchFields + .filter((key) => { + const v = sliceDef.match[key]; + return Array.isArray(v) || typeof v !== "object" || v === null; + }) + .map((key) => ({ key, typeLiteral: valueToTypeLiteral(sliceDef.match[key]) })) + : []; + if (safeMatchEntries.length > 0) { + w.curlyBlock([`export type ${flatTypeName} = ${inputTypeName} &`], () => { + for (const entry of safeMatchEntries) { + w.lineSM(`readonly ${entry.key}: ${entry.typeLiteral}`); + } + }); + } else { + w.lineSM(`export type ${flatTypeName} = ${inputTypeName}`); } - w.lineSM(`export type ${flatTypeName} = ${flatTypeExpr}`); w.line(); } }; From fb224fd28603d31e4354ed795ed18dc618afddf7 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 19:46:26 +0200 Subject: [PATCH 17/28] test: Update snapshots for multiline SliceFlat --- .../__snapshots__/typescript.test.ts.snap | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index bc5f6a01..924e69b4 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -323,7 +323,9 @@ import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bodyweight_Category_VSCatSliceFlatInput = Omit; -export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} import { ensureProfile, @@ -536,7 +538,9 @@ import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bp_Category_VSCatSliceFlatInput = Omit; -export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceFlatInput; @@ -1086,7 +1090,9 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; @@ -1473,7 +1479,9 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBodyWeightProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} import { ensureProfile, @@ -1791,7 +1799,9 @@ export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit; -export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; +export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { + readonly url: "text"; +} import { isRawExtensionInput, From e96b635419ff7782c9944f286cb85c8e5f3fa07d Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 19:46:26 +0200 Subject: [PATCH 18/28] chore: Regenerate examples for multiline SliceFlat --- .../profiles/Observation_observation_bodyweight.ts | 4 +++- .../hl7-fhir-r4-core/profiles/Observation_observation_bp.ts | 4 +++- .../profiles/Observation_observation_vitalsigns.ts | 4 +++- .../profiles/Observation_observation_vitalsigns.ts | 4 +++- .../profiles/Extension_USCoreEthnicityExtension.ts | 4 +++- .../profiles/Extension_USCoreRaceExtension.ts | 4 +++- .../profiles/Extension_USCoreTribalAffiliationExtension.ts | 4 +++- .../profiles/Observation_USCoreBloodPressureProfile.ts | 4 +++- .../profiles/Observation_USCoreBodyWeightProfile.ts | 4 +++- .../profiles/Observation_USCoreVitalSignsProfile.ts | 4 +++- 10 files changed, 30 insertions(+), 10 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index 073205d6..2d868cf5 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -9,7 +9,9 @@ import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bodyweight_Category_VSCatSliceFlatInput = Omit; -export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} import { ensureProfile, diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index 7c4aca8d..7575dca5 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -9,7 +9,9 @@ import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bp_Category_VSCatSliceFlatInput = Omit; -export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceFlatInput; diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 9a154fb0..c99572fb 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -8,7 +8,9 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_vitalsigns_Category_VSCatSliceFlatInput = Omit; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} import { ensureProfile, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 9a154fb0..c99572fb 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -8,7 +8,9 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_vitalsigns_Category_VSCatSliceFlatInput = Omit; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} import { ensureProfile, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index 830f1fad..7498211e 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -12,7 +12,9 @@ export type USCoreEthnicityExtension_Extension_DetailedSliceFlatInput = Omit; -export type USCoreEthnicityExtension_Extension_TextSliceFlat = USCoreEthnicityExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; +export type USCoreEthnicityExtension_Extension_TextSliceFlat = USCoreEthnicityExtension_Extension_TextSliceFlatInput & { + readonly url: "text"; +} import { isRawExtensionInput, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index a0f4763d..4e6f560d 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -12,7 +12,9 @@ export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit; -export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { readonly url: "text" }; +export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { + readonly url: "text"; +} import { isRawExtensionInput, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index 3a047b9b..811e9670 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -9,7 +9,9 @@ export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFla export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput; export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput = Omit; -export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput & { readonly url: "isEnrolled" }; +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput & { + readonly url: "isEnrolled"; +} import { isRawExtensionInput, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index 09ddd175..7c942c75 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -12,7 +12,9 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index 072e043b..0a249a1f 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -12,7 +12,9 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBodyWeightProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} import { ensureProfile, diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index ac8ea422..8a6f5786 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -12,7 +12,9 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreVitalSignsProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = USCoreVitalSignsProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }] }; +export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = USCoreVitalSignsProfile_Category_VSCatSliceFlatInput & { + readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; +} import { ensureProfile, From 0540757ffe2034522522c7e30a22a31827137dab Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 21:49:54 +0200 Subject: [PATCH 19/28] fix: Split long SliceMatch static fields across multiple lines --- src/api/writer-generator/typescript/profile.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/api/writer-generator/typescript/profile.ts b/src/api/writer-generator/typescript/profile.ts index 650227f1..cded40f9 100644 --- a/src/api/writer-generator/typescript/profile.ts +++ b/src/api/writer-generator/typescript/profile.ts @@ -344,7 +344,17 @@ export const generateProfileImports = (w: TypeScript, tsIndex: TypeSchemaIndex, const generateStaticSliceFields = (w: TypeScript, sliceDefs: SliceDef[]) => { for (const sliceDef of sliceDefs) { const staticName = `${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`; - w.lineSM(`private static readonly ${staticName}: Record = ${JSON.stringify(sliceDef.match)}`); + const json = JSON.stringify(sliceDef.match); + const prefix = `private static readonly ${staticName}: Record = `; + if (prefix.length + json.length <= (w.opts.lineWidth ?? 120)) { + w.lineSM(`${prefix}${json}`); + } else { + w.curlyBlock([prefix.trimEnd()], () => { + for (const [key, value] of Object.entries(sliceDef.match)) { + w.line(`${JSON.stringify(key)}: ${JSON.stringify(value)},`); + } + }); + } } if (sliceDefs.length > 0) w.line(); }; From 0ceb98dd43980daf6069c0b73fdba867f0158917 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 21:49:54 +0200 Subject: [PATCH 20/28] chore: Regenerate snapshots and examples for multiline SliceMatch --- .../Observation_observation_bodyweight.ts | 4 ++- .../profiles/Observation_observation_bp.ts | 12 +++++-- .../Observation_observation_vitalsigns.ts | 4 ++- .../Observation_observation_vitalsigns.ts | 4 ++- .../Observation_USCoreBloodPressureProfile.ts | 12 +++++-- .../Observation_USCoreBodyWeightProfile.ts | 4 ++- .../Observation_USCoreVitalSignsProfile.ts | 4 ++- .../__snapshots__/typescript.test.ts.snap | 32 ++++++++++++++----- .../__snapshots__/local-package.test.ts.snap | 4 ++- 9 files changed, 60 insertions(+), 20 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index 2d868cf5..c915b7ad 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -41,7 +41,9 @@ export type observation_bodyweightProfileRaw = { export class observation_bodyweightProfile { static readonly canonicalUrl = "http://hl7.org/fhir/StructureDefinition/bodyweight"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } private resource: Observation; diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index 7575dca5..4804cf0a 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -50,9 +50,15 @@ export type observation_bpProfileRaw = { export class observation_bpProfile { static readonly canonicalUrl = "http://hl7.org/fhir/StructureDefinition/bp"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; - private static readonly SystolicBPSliceMatch: Record = {"code":{"coding":[{"code":"8480-6","system":"http://loinc.org"}]}}; - private static readonly DiastolicBPSliceMatch: Record = {"code":{"coding":[{"code":"8462-4","system":"http://loinc.org"}]}}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } + private static readonly SystolicBPSliceMatch: Record = { + "code": {"coding":[{"code":"8480-6","system":"http://loinc.org"}]}, + } + private static readonly DiastolicBPSliceMatch: Record = { + "code": {"coding":[{"code":"8462-4","system":"http://loinc.org"}]}, + } private resource: Observation; diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index c99572fb..bda9b6e0 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -41,7 +41,9 @@ export type observation_vitalsignsProfileRaw = { export class observation_vitalsignsProfile { static readonly canonicalUrl = "http://hl7.org/fhir/StructureDefinition/vitalsigns"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } private resource: Observation; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index c99572fb..bda9b6e0 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -41,7 +41,9 @@ export type observation_vitalsignsProfileRaw = { export class observation_vitalsignsProfile { static readonly canonicalUrl = "http://hl7.org/fhir/StructureDefinition/vitalsigns"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } private resource: Observation; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index 7c942c75..f07afb7f 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -53,9 +53,15 @@ export type USCoreBloodPressureProfileRaw = { export class USCoreBloodPressureProfile { static readonly canonicalUrl = "http://hl7.org/fhir/us/core/StructureDefinition/us-core-blood-pressure"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; - private static readonly systolicSliceMatch: Record = {"code":{"coding":[{"system":"http://loinc.org","code":"8480-6"}]}}; - private static readonly diastolicSliceMatch: Record = {"code":{"coding":[{"system":"http://loinc.org","code":"8462-4"}]}}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } + private static readonly systolicSliceMatch: Record = { + "code": {"coding":[{"system":"http://loinc.org","code":"8480-6"}]}, + } + private static readonly diastolicSliceMatch: Record = { + "code": {"coding":[{"system":"http://loinc.org","code":"8462-4"}]}, + } private resource: Observation; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index 0a249a1f..c1298703 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -44,7 +44,9 @@ export type USCoreBodyWeightProfileRaw = { export class USCoreBodyWeightProfile { static readonly canonicalUrl = "http://hl7.org/fhir/us/core/StructureDefinition/us-core-body-weight"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } private resource: Observation; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index 8a6f5786..4610cbfb 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -45,7 +45,9 @@ export type USCoreVitalSignsProfileRaw = { export class USCoreVitalSignsProfile { static readonly canonicalUrl = "http://hl7.org/fhir/us/core/StructureDefinition/us-core-vital-signs"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } private resource: Observation; diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index 924e69b4..0faeb81f 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -355,7 +355,9 @@ export type observation_bodyweightProfileRaw = { export class observation_bodyweightProfile { static readonly canonicalUrl = "http://hl7.org/fhir/StructureDefinition/bodyweight"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } private resource: Observation; @@ -579,9 +581,15 @@ export type observation_bpProfileRaw = { export class observation_bpProfile { static readonly canonicalUrl = "http://hl7.org/fhir/StructureDefinition/bp"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; - private static readonly SystolicBPSliceMatch: Record = {"code":{"coding":[{"code":"8480-6","system":"http://loinc.org"}]}}; - private static readonly DiastolicBPSliceMatch: Record = {"code":{"coding":[{"code":"8462-4","system":"http://loinc.org"}]}}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } + private static readonly SystolicBPSliceMatch: Record = { + "code": {"coding":[{"code":"8480-6","system":"http://loinc.org"}]}, + } + private static readonly DiastolicBPSliceMatch: Record = { + "code": {"coding":[{"code":"8462-4","system":"http://loinc.org"}]}, + } private resource: Observation; @@ -1131,9 +1139,15 @@ export type USCoreBloodPressureProfileRaw = { export class USCoreBloodPressureProfile { static readonly canonicalUrl = "http://hl7.org/fhir/us/core/StructureDefinition/us-core-blood-pressure"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; - private static readonly systolicSliceMatch: Record = {"code":{"coding":[{"system":"http://loinc.org","code":"8480-6"}]}}; - private static readonly diastolicSliceMatch: Record = {"code":{"coding":[{"system":"http://loinc.org","code":"8462-4"}]}}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } + private static readonly systolicSliceMatch: Record = { + "code": {"coding":[{"system":"http://loinc.org","code":"8480-6"}]}, + } + private static readonly diastolicSliceMatch: Record = { + "code": {"coding":[{"system":"http://loinc.org","code":"8462-4"}]}, + } private resource: Observation; @@ -1511,7 +1525,9 @@ export type USCoreBodyWeightProfileRaw = { export class USCoreBodyWeightProfile { static readonly canonicalUrl = "http://hl7.org/fhir/us/core/StructureDefinition/us-core-body-weight"; - private static readonly VSCatSliceMatch: Record = {"coding":[{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}]}; + private static readonly VSCatSliceMatch: Record = { + "coding": [{"code":"vital-signs","system":"http://terminology.hl7.org/CodeSystem/observation-category"}], + } private resource: Observation; diff --git a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap index e0d8b160..e0ffabdc 100644 --- a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap +++ b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap @@ -69,7 +69,9 @@ export class ExampleTypedBundleProfile { static readonly canonicalUrl = "http://example.org/fhir/StructureDefinition/ExampleTypedBundle"; private static readonly PatientEntrySliceMatch: Record = {"resource":{"resourceType":"Patient"}}; - private static readonly OrganizationEntrySliceMatch: Record = {"resource":{"resourceType":"Organization"}}; + private static readonly OrganizationEntrySliceMatch: Record = { + "resource": {"resourceType":"Organization"}, + } private resource: Bundle; From 97823bf86effa8f4096fb0cc49d3d6e119f095d8 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 21:52:58 +0200 Subject: [PATCH 21/28] test: Use SliceFlatInput and SliceFlat types explicitly in demo tests --- .../typescript-r4/profile-bodyweight.test.ts | 20 +++++++++++-------- .../profile-bodyweight.test.ts | 15 +++++++++----- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/examples/typescript-r4/profile-bodyweight.test.ts b/examples/typescript-r4/profile-bodyweight.test.ts index 86cd5202..6d0c9fe5 100644 --- a/examples/typescript-r4/profile-bodyweight.test.ts +++ b/examples/typescript-r4/profile-bodyweight.test.ts @@ -4,7 +4,11 @@ import { describe, expect, test } from "bun:test"; import type { Observation } from "./fhir-types/hl7-fhir-r4-core/Observation"; -import { observation_bodyweightProfile as bodyweightProfile } from "./fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight"; +import { + observation_bodyweightProfile as bodyweightProfile, + type Observation_bodyweight_Category_VSCatSliceFlat as VSCatFlat, + type Observation_bodyweight_Category_VSCatSliceFlatInput as VSCatFlatInput, +} from "./fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight"; describe("demo: create a bodyweight observation", () => { test("build a valid bodyweight resource step by step", () => { @@ -126,16 +130,16 @@ describe("slice accessors", () => { test("setVSCat accepts SliceFlatInput, getVSCat returns SliceFlat", () => { const profile = bodyweightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" } }); - // setVSCat accepts SliceFlatInput — only user data, discriminators auto-applied - profile.setVSCat({ text: "Vital Signs" }); + // Setter accepts SliceFlatInput — only user-supplied fields, no discriminators + const input: VSCatFlatInput = { text: "Vital Signs" }; + profile.setVSCat(input); - // getVSCat() returns SliceFlat — typed with readonly discriminator literals - // type VSCatSliceFlat = Omit - // & { readonly coding: [{ code: "vital-signs"; system: "http://..." }] } - const flat = profile.getVSCat()!; + // Getter returns SliceFlat — includes readonly discriminator literal types + const flat: VSCatFlat = profile.getVSCat()!; expect(flat.text).toBe("Vital Signs"); + // flat.coding is typed as readonly [{ code: "vital-signs"; system: "http://..." }] - // getVSCat("raw") returns the full CodeableConcept including discriminator + // Raw mode returns the full CodeableConcept including discriminator values expect(profile.getVSCat("raw")!.coding).toEqual([ { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, ]); diff --git a/examples/typescript-us-core/profile-bodyweight.test.ts b/examples/typescript-us-core/profile-bodyweight.test.ts index aec54c45..5e11bce2 100644 --- a/examples/typescript-us-core/profile-bodyweight.test.ts +++ b/examples/typescript-us-core/profile-bodyweight.test.ts @@ -5,6 +5,10 @@ import { describe, expect, test } from "bun:test"; import type { Observation } from "./fhir-types/hl7-fhir-r4-core/Observation"; import { USCoreBodyWeightProfile } from "./fhir-types/hl7-fhir-us-core/profiles"; +import type { + USCoreBodyWeightProfile_Category_VSCatSliceFlat as VSCatFlat, + USCoreBodyWeightProfile_Category_VSCatSliceFlatInput as VSCatFlatInput, +} from "./fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile"; describe("demo: create a US Core body weight observation", () => { test("build a valid body weight resource step by step", () => { @@ -113,14 +117,15 @@ describe("slice input/flat type split", () => { subject: { reference: "Patient/pt-1" }, }); - // setVSCat accepts SliceFlatInput — only user data, discriminators auto-applied - profile.setVSCat({ text: "Vital Signs" }); + // Setter accepts SliceFlatInput — only user-supplied fields, no discriminators + const input: VSCatFlatInput = { text: "Vital Signs" }; + profile.setVSCat(input); - // getVSCat() returns SliceFlat — includes readonly discriminator type info - const flat = profile.getVSCat()!; + // Getter returns SliceFlat — includes readonly discriminator literal types + const flat: VSCatFlat = profile.getVSCat()!; expect(flat.text).toBe("Vital Signs"); - // getVSCat("raw") returns the full CodeableConcept with discriminator values + // Raw mode returns the full CodeableConcept with discriminator values expect(profile.getVSCat("raw")!.coding).toEqual([ { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, ]); From 3223d429da4822960a69147ebec83314b90dac43 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 22:12:10 +0200 Subject: [PATCH 22/28] fix: Flat getter returns full element with discriminators instead of stripping them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getVSCat() now returns the item cast to SliceFlat (which includes readonly discriminator fields) instead of calling stripMatchKeys to remove them. This makes the runtime value match the type — flat.coding is actually present. --- src/api/writer-generator/typescript/profile-slices.ts | 6 ++---- src/api/writer-generator/typescript/profile.ts | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/api/writer-generator/typescript/profile-slices.ts b/src/api/writer-generator/typescript/profile-slices.ts index 4a164242..06028f03 100644 --- a/src/api/writer-generator/typescript/profile-slices.ts +++ b/src/api/writer-generator/typescript/profile-slices.ts @@ -244,15 +244,13 @@ export const generateSliceGetters = ( } else { w.line("if (mode === 'raw') return item"); } - if (sliceDef.typeDiscriminator) { - w.line(`return item as ${flatTypeName}`); - } else if (sliceDef.constrainedChoice) { + if (sliceDef.constrainedChoice) { const cc = sliceDef.constrainedChoice; w.line( `return unwrapSliceChoice<${flatTypeName}>(item, ${matchKeys}, ${JSON.stringify(cc.variant)})`, ); } else { - w.line(`return stripMatchKeys<${flatTypeName}>(item, ${matchKeys})`); + w.line(`return item as unknown as ${flatTypeName}`); } }, ); diff --git a/src/api/writer-generator/typescript/profile.ts b/src/api/writer-generator/typescript/profile.ts index cded40f9..5af53aca 100644 --- a/src/api/writer-generator/typescript/profile.ts +++ b/src/api/writer-generator/typescript/profile.ts @@ -248,7 +248,6 @@ const generateProfileHelpersImport = ( imports.push("applySliceMatch", "matchesValue", "setArraySlice", "getArraySlice", "ensureSliceDefaults"); if (extensions.some((ext) => ext.path.split(".").some((s) => s !== "extension"))) imports.push("ensurePath"); if (extensions.some((ext) => ext.isComplex && ext.subExtensions)) imports.push("extractComplexExtension"); - if (sliceDefs.some((s) => !s.typeDiscriminator)) imports.push("stripMatchKeys"); if (sliceDefs.some((s) => s.constrainedChoice)) imports.push("wrapSliceChoice", "unwrapSliceChoice"); if (extensions.some((ext) => ext.url)) { imports.push("isExtension", "getExtensionValue", "pushExtension"); From 9e23babd46e6ed0dd7fd8e04a03a206cbb5b9486 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 22:12:10 +0200 Subject: [PATCH 23/28] chore: Update snapshots and tests for flat getter with discriminators --- .../Observation_observation_bodyweight.ts | 3 +-- .../profiles/Observation_observation_bp.ts | 3 +-- .../Observation_observation_vitalsigns.ts | 3 +-- .../typescript-r4/profile-bodyweight.test.ts | 17 ++++++----------- .../Observation_observation_vitalsigns.ts | 3 +-- .../Extension_USCoreEthnicityExtension.ts | 3 +-- .../profiles/Extension_USCoreRaceExtension.ts | 3 +-- ...xtension_USCoreTribalAffiliationExtension.ts | 3 +-- .../Observation_USCoreBloodPressureProfile.ts | 3 +-- .../Observation_USCoreBodyWeightProfile.ts | 3 +-- .../Observation_USCoreVitalSignsProfile.ts | 3 +-- .../profile-bodyweight.test.ts | 3 +++ .../__snapshots__/typescript.test.ts.snap | 15 +++++---------- .../__snapshots__/local-package.test.ts.snap | 4 ++-- 14 files changed, 26 insertions(+), 43 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index c915b7ad..48ce7e92 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -20,7 +20,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, validateRequired, validateExcluded, validateFixedValue, @@ -179,7 +178,7 @@ export class observation_bodyweightProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as Observation_bodyweight_Category_VSCatSliceFlat } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index 4804cf0a..11cdd8aa 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -26,7 +26,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, wrapSliceChoice, unwrapSliceChoice, validateRequired, @@ -238,7 +237,7 @@ export class observation_bpProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as Observation_bp_Category_VSCatSliceFlat } public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlat | undefined; diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index bda9b6e0..03734ca0 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -19,7 +19,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, validateRequired, validateExcluded, validateFixedValue, @@ -172,7 +171,7 @@ export class observation_vitalsignsProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlat } // Validation diff --git a/examples/typescript-r4/profile-bodyweight.test.ts b/examples/typescript-r4/profile-bodyweight.test.ts index 6d0c9fe5..25a0d48e 100644 --- a/examples/typescript-r4/profile-bodyweight.test.ts +++ b/examples/typescript-r4/profile-bodyweight.test.ts @@ -99,13 +99,12 @@ describe("demo: read a bodyweight observation from JSON", () => { // Code is a fixed value — auto-set by the profile, read-only (no setter) expect(profile.getCode()!.coding![0]!.code).toBe("29463-7"); - // Slice accessor strips discriminator keys (coding) by default — only user data remains - expect(profile.getVSCat()!.text).toBe("Vital Signs"); - // Use "raw" mode to see the full element including discriminator - expect(profile.getVSCat("raw")!.coding).toEqual([ + // Slice getter returns SliceFlat — includes both user data and discriminator values + const vsCat = profile.getVSCat()!; + expect(vsCat.text).toBe("Vital Signs"); + expect(vsCat.coding).toEqual([ { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, ]); - expect(profile.getVSCat("raw")!.text).toBe("Vital Signs"); }); }); @@ -134,16 +133,12 @@ describe("slice accessors", () => { const input: VSCatFlatInput = { text: "Vital Signs" }; profile.setVSCat(input); - // Getter returns SliceFlat — includes readonly discriminator literal types + // Getter returns SliceFlat — includes discriminator values + user data const flat: VSCatFlat = profile.getVSCat()!; expect(flat.text).toBe("Vital Signs"); - // flat.coding is typed as readonly [{ code: "vital-signs"; system: "http://..." }] - - // Raw mode returns the full CodeableConcept including discriminator values - expect(profile.getVSCat("raw")!.coding).toEqual([ + expect(flat.coding).toEqual([ { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, ]); - expect(profile.getVSCat("raw")!.text).toBe("Vital Signs"); }); test("setVSCat replaces existing slice element", () => { diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index bda9b6e0..03734ca0 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -19,7 +19,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, validateRequired, validateExcluded, validateFixedValue, @@ -172,7 +171,7 @@ export class observation_vitalsignsProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlat } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index 7498211e..1c0f6b06 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -23,7 +23,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, wrapSliceChoice, unwrapSliceChoice, isExtension, @@ -240,7 +239,7 @@ export class USCoreEthnicityExtensionProfile { const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return item as unknown as USCoreEthnicityExtension_Extension_TextSliceFlat } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index 4e6f560d..7aaef84e 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -23,7 +23,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, wrapSliceChoice, unwrapSliceChoice, isExtension, @@ -240,7 +239,7 @@ export class USCoreRaceExtensionProfile { const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return item as unknown as USCoreRaceExtension_Extension_TextSliceFlat } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index 811e9670..ae5030aa 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -20,7 +20,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, wrapSliceChoice, unwrapSliceChoice, isExtension, @@ -193,7 +192,7 @@ export class USCoreTribalAffiliationExtensionProfile { const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return item as unknown as USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index f07afb7f..54695720 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -29,7 +29,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, wrapSliceChoice, unwrapSliceChoice, validateRequired, @@ -331,7 +330,7 @@ export class USCoreBloodPressureProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlat } public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index c1298703..fd91182c 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -23,7 +23,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, validateRequired, validateExcluded, validateFixedValue, @@ -272,7 +271,7 @@ export class USCoreBodyWeightProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlat } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index 4610cbfb..0e78d58d 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -23,7 +23,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, validateRequired, validateExcluded, validateFixedValue, @@ -275,7 +274,7 @@ export class USCoreVitalSignsProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as USCoreVitalSignsProfile_Category_VSCatSliceFlat } // Validation diff --git a/examples/typescript-us-core/profile-bodyweight.test.ts b/examples/typescript-us-core/profile-bodyweight.test.ts index 5e11bce2..11751619 100644 --- a/examples/typescript-us-core/profile-bodyweight.test.ts +++ b/examples/typescript-us-core/profile-bodyweight.test.ts @@ -124,6 +124,9 @@ describe("slice input/flat type split", () => { // Getter returns SliceFlat — includes readonly discriminator literal types const flat: VSCatFlat = profile.getVSCat()!; expect(flat.text).toBe("Vital Signs"); + expect(flat.coding).toEqual([ + { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, + ]); // Raw mode returns the full CodeableConcept with discriminator values expect(profile.getVSCat("raw")!.coding).toEqual([ diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index 0faeb81f..700a83d8 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -334,7 +334,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, validateRequired, validateExcluded, validateFixedValue, @@ -493,7 +492,7 @@ export class observation_bodyweightProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as Observation_bodyweight_Category_VSCatSliceFlat } // Validation @@ -557,7 +556,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, wrapSliceChoice, unwrapSliceChoice, validateRequired, @@ -769,7 +767,7 @@ export class observation_bpProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as Observation_bp_Category_VSCatSliceFlat } public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlat | undefined; @@ -1115,7 +1113,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, wrapSliceChoice, unwrapSliceChoice, validateRequired, @@ -1417,7 +1414,7 @@ export class USCoreBloodPressureProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlat } public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; @@ -1504,7 +1501,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, validateRequired, validateExcluded, validateFixedValue, @@ -1753,7 +1749,7 @@ export class USCoreBodyWeightProfile { const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["coding"]) + return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlat } // Validation @@ -1826,7 +1822,6 @@ import { setArraySlice, getArraySlice, ensureSliceDefaults, - stripMatchKeys, wrapSliceChoice, unwrapSliceChoice, isExtension, @@ -2043,7 +2038,7 @@ export class USCoreRaceExtensionProfile { const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return stripMatchKeys(item, ["url"]) + return item as unknown as USCoreRaceExtension_Extension_TextSliceFlat } // Validation diff --git a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap index e0ffabdc..03ed352d 100644 --- a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap +++ b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap @@ -154,7 +154,7 @@ export class ExampleTypedBundleProfile { const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as ExampleTypedBundle_Entry_PatientEntrySliceFlat + return item as unknown as ExampleTypedBundle_Entry_PatientEntrySliceFlat } public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | undefined; @@ -165,7 +165,7 @@ export class ExampleTypedBundleProfile { const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as ExampleTypedBundle_Entry_OrganizationEntrySliceFlat + return item as unknown as ExampleTypedBundle_Entry_OrganizationEntrySliceFlat } // Validation From a2a2c023f0f3662ada1f999e2f0197385ea19beb Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 22:22:17 +0200 Subject: [PATCH 24/28] test: Use toEqual for flat slice getter assertions in demo tests --- .../typescript-r4/profile-bodyweight.test.ts | 16 +++++------ .../profile-bodyweight.test.ts | 28 +++++++------------ 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/examples/typescript-r4/profile-bodyweight.test.ts b/examples/typescript-r4/profile-bodyweight.test.ts index 25a0d48e..bff38cec 100644 --- a/examples/typescript-r4/profile-bodyweight.test.ts +++ b/examples/typescript-r4/profile-bodyweight.test.ts @@ -101,10 +101,10 @@ describe("demo: read a bodyweight observation from JSON", () => { // Slice getter returns SliceFlat — includes both user data and discriminator values const vsCat = profile.getVSCat()!; - expect(vsCat.text).toBe("Vital Signs"); - expect(vsCat.coding).toEqual([ - { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, - ]); + expect(vsCat).toEqual({ + text: "Vital Signs", + coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], + }); }); }); @@ -135,10 +135,10 @@ describe("slice accessors", () => { // Getter returns SliceFlat — includes discriminator values + user data const flat: VSCatFlat = profile.getVSCat()!; - expect(flat.text).toBe("Vital Signs"); - expect(flat.coding).toEqual([ - { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, - ]); + expect(flat).toEqual({ + text: "Vital Signs", + coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], + }); }); test("setVSCat replaces existing slice element", () => { diff --git a/examples/typescript-us-core/profile-bodyweight.test.ts b/examples/typescript-us-core/profile-bodyweight.test.ts index 11751619..8daea585 100644 --- a/examples/typescript-us-core/profile-bodyweight.test.ts +++ b/examples/typescript-us-core/profile-bodyweight.test.ts @@ -99,14 +99,11 @@ describe("demo: read a US Core body weight observation from JSON", () => { // Code is a fixed value — auto-set by the profile, read-only (no setter) expect(profile.getCode()!.coding![0]!.code).toBe("29463-7"); - // getVSCat() returns SliceFlat — typed with readonly discriminator literals - // Discriminator keys are stripped at runtime, user data remains - expect(profile.getVSCat()!.text).toBe("Vital Signs"); - - // getVSCat("raw") returns the full CodeableConcept including discriminator - expect(profile.getVSCat("raw")!.coding).toEqual([ - { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, - ]); + // Slice getter returns SliceFlat — includes both user data and discriminator values + expect(profile.getVSCat()).toEqual({ + text: "Vital Signs", + coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], + }); }); }); @@ -121,17 +118,12 @@ describe("slice input/flat type split", () => { const input: VSCatFlatInput = { text: "Vital Signs" }; profile.setVSCat(input); - // Getter returns SliceFlat — includes readonly discriminator literal types + // Getter returns SliceFlat — includes discriminator values + user data const flat: VSCatFlat = profile.getVSCat()!; - expect(flat.text).toBe("Vital Signs"); - expect(flat.coding).toEqual([ - { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, - ]); - - // Raw mode returns the full CodeableConcept with discriminator values - expect(profile.getVSCat("raw")!.coding).toEqual([ - { code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }, - ]); + expect(flat).toEqual({ + text: "Vital Signs", + coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], + }); }); }); From 52d9732305da195f01b68dfaa750e9d7290a0401 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 22:25:58 +0200 Subject: [PATCH 25/28] ref: Rename SliceFlat to SliceFlatFull --- src/api/writer-generator/typescript/name.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/writer-generator/typescript/name.ts b/src/api/writer-generator/typescript/name.ts index 0db4be68..9466f77a 100644 --- a/src/api/writer-generator/typescript/name.ts +++ b/src/api/writer-generator/typescript/name.ts @@ -93,7 +93,7 @@ export const tsProfileClassName = (schema: ProfileTypeSchema): string => { }; export const tsSliceFlatTypeName = (profileName: string, fieldName: string, sliceName: string): string => { - return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlat`; + return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlatFull`; }; export const tsSliceFlatInputTypeName = (profileName: string, fieldName: string, sliceName: string): string => { From e3638b77509e77cc518747d7fabb36ba3af8ce2e Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 22:25:58 +0200 Subject: [PATCH 26/28] chore: Update snapshots, examples and tests for SliceFlatFull rename --- .../Observation_observation_bodyweight.ts | 10 +- .../profiles/Observation_observation_bp.ts | 30 ++--- .../Observation_observation_vitalsigns.ts | 10 +- .../typescript-r4/profile-bodyweight.test.ts | 2 +- .../Observation_observation_vitalsigns.ts | 10 +- .../Extension_USCoreEthnicityExtension.ts | 30 ++--- .../profiles/Extension_USCoreRaceExtension.ts | 30 ++--- ...ension_USCoreTribalAffiliationExtension.ts | 20 ++-- .../Observation_USCoreBloodPressureProfile.ts | 30 ++--- .../Observation_USCoreBodyWeightProfile.ts | 10 +- .../Observation_USCoreVitalSignsProfile.ts | 10 +- .../profile-bodyweight.test.ts | 2 +- .../__snapshots__/typescript.test.ts.snap | 110 +++++++++--------- .../__snapshots__/local-package.test.ts.snap | 20 ++-- 14 files changed, 162 insertions(+), 162 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index 48ce7e92..3c36abb3 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -9,7 +9,7 @@ import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bodyweight_Category_VSCatSliceFlatInput = Omit; -export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceFlatInput & { +export type Observation_bodyweight_Category_VSCatSliceFlatFull = Observation_bodyweight_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -170,15 +170,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_bodyweight_Category_VSCatSliceFlat + return item as unknown as Observation_bodyweight_Category_VSCatSliceFlatFull } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index 11cdd8aa..0857c43c 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -9,15 +9,15 @@ import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bp_Category_VSCatSliceFlatInput = Omit; -export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { +export type Observation_bp_Category_VSCatSliceFlatFull = Observation_bp_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; -export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceFlatInput; +export type Observation_bp_Component_SystolicBPSliceFlatFull = Observation_bp_Component_SystolicBPSliceFlatInput; export type Observation_bp_Component_DiastolicBPSliceFlatInput = Omit & Quantity; -export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceFlatInput; +export type Observation_bp_Component_DiastolicBPSliceFlatFull = Observation_bp_Component_DiastolicBPSliceFlatInput; import { ensureProfile, @@ -229,37 +229,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_bp_Category_VSCatSliceFlat + return item as unknown as Observation_bp_Category_VSCatSliceFlatFull } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlat | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatFull | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlat | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatFull | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatFull | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatFull | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlat | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatFull | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatFull | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 03734ca0..9e3e171e 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -8,7 +8,7 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_vitalsigns_Category_VSCatSliceFlatInput = Omit; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceFlatInput & { +export type Observation_vitalsigns_Category_VSCatSliceFlatFull = Observation_vitalsigns_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -163,15 +163,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlat + return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlatFull } // Validation diff --git a/examples/typescript-r4/profile-bodyweight.test.ts b/examples/typescript-r4/profile-bodyweight.test.ts index bff38cec..588d2a47 100644 --- a/examples/typescript-r4/profile-bodyweight.test.ts +++ b/examples/typescript-r4/profile-bodyweight.test.ts @@ -6,7 +6,7 @@ import { describe, expect, test } from "bun:test"; import type { Observation } from "./fhir-types/hl7-fhir-r4-core/Observation"; import { observation_bodyweightProfile as bodyweightProfile, - type Observation_bodyweight_Category_VSCatSliceFlat as VSCatFlat, + type Observation_bodyweight_Category_VSCatSliceFlatFull as VSCatFlat, type Observation_bodyweight_Category_VSCatSliceFlatInput as VSCatFlatInput, } from "./fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight"; diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 03734ca0..9e3e171e 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -8,7 +8,7 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_vitalsigns_Category_VSCatSliceFlatInput = Omit; -export type Observation_vitalsigns_Category_VSCatSliceFlat = Observation_vitalsigns_Category_VSCatSliceFlatInput & { +export type Observation_vitalsigns_Category_VSCatSliceFlatFull = Observation_vitalsigns_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -163,15 +163,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlat + return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlatFull } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index 1c0f6b06..fc9121fd 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -6,13 +6,13 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; -export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlat = USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlatFull = USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput; export type USCoreEthnicityExtension_Extension_DetailedSliceFlatInput = Omit & Coding; -export type USCoreEthnicityExtension_Extension_DetailedSliceFlat = USCoreEthnicityExtension_Extension_DetailedSliceFlatInput; +export type USCoreEthnicityExtension_Extension_DetailedSliceFlatFull = USCoreEthnicityExtension_Extension_DetailedSliceFlatInput; export type USCoreEthnicityExtension_Extension_TextSliceFlatInput = Omit; -export type USCoreEthnicityExtension_Extension_TextSliceFlat = USCoreEthnicityExtension_Extension_TextSliceFlatInput & { +export type USCoreEthnicityExtension_Extension_TextSliceFlatFull = USCoreEthnicityExtension_Extension_TextSliceFlatInput & { readonly url: "text"; } @@ -209,37 +209,37 @@ export class USCoreEthnicityExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatFull | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | Extension | undefined { + public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatFull | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatFull | Extension | undefined { const match = USCoreEthnicityExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatFull | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceFlat | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlat | Extension | undefined { + public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceFlatFull | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatFull | Extension | undefined { const match = USCoreEthnicityExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlat | undefined; + public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatFull | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceFlat | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlat | Extension | undefined { + public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceFlatFull | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatFull | Extension | undefined { const match = USCoreEthnicityExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreEthnicityExtension_Extension_TextSliceFlat + return item as unknown as USCoreEthnicityExtension_Extension_TextSliceFlatFull } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index 7aaef84e..7386ef4c 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -6,13 +6,13 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreRaceExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlatFull = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit & Coding; -export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceFlatInput; +export type USCoreRaceExtension_Extension_DetailedSliceFlatFull = USCoreRaceExtension_Extension_DetailedSliceFlatInput; export type USCoreRaceExtension_Extension_TextSliceFlatInput = Omit; -export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { +export type USCoreRaceExtension_Extension_TextSliceFlatFull = USCoreRaceExtension_Extension_TextSliceFlatInput & { readonly url: "text"; } @@ -209,37 +209,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatFull | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatFull | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatFull | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatFull | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlat | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatFull | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatFull | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreRaceExtension_Extension_TextSliceFlat + return item as unknown as USCoreRaceExtension_Extension_TextSliceFlatFull } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index ae5030aa..9fe7f77d 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -6,10 +6,10 @@ import type { CodeableConcept } from "../../hl7-fhir-r4-core/CodeableConcept"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput = Omit & CodeableConcept; -export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput; +export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatFull = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput; export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput = Omit; -export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput & { +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput & { readonly url: "isEnrolled"; } @@ -173,26 +173,26 @@ export class USCoreTribalAffiliationExtensionProfile { return this } - public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | undefined; + public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatFull | undefined; public getExtensionTribalAffiliation(mode: 'raw'): Extension | undefined; - public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | undefined; - public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | Extension | undefined { + public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatFull | undefined; + public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatFull | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.tribalAffiliationSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") + return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") } - public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | undefined; + public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull | undefined; public getExtensionIsEnrolled(mode: 'raw'): Extension | undefined; - public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | undefined; - public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | Extension | undefined { + public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull | undefined; + public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.isEnrolledSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat + return item as unknown as USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index 54695720..212cf895 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -12,15 +12,15 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { +export type USCoreBloodPressureProfile_Category_VSCatSliceFlatFull = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlatFull = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; import { ensureProfile, @@ -322,37 +322,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlat + return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlatFull } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index fd91182c..97e3011f 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -12,7 +12,7 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBodyWeightProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { +export type USCoreBodyWeightProfile_Category_VSCatSliceFlatFull = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -263,15 +263,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlat + return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlatFull } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index 0e78d58d..7502d102 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -12,7 +12,7 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreVitalSignsProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = USCoreVitalSignsProfile_Category_VSCatSliceFlatInput & { +export type USCoreVitalSignsProfile_Category_VSCatSliceFlatFull = USCoreVitalSignsProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -266,15 +266,15 @@ export class USCoreVitalSignsProfile { return this } - public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = USCoreVitalSignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreVitalSignsProfile_Category_VSCatSliceFlat + return item as unknown as USCoreVitalSignsProfile_Category_VSCatSliceFlatFull } // Validation diff --git a/examples/typescript-us-core/profile-bodyweight.test.ts b/examples/typescript-us-core/profile-bodyweight.test.ts index 8daea585..0b37775d 100644 --- a/examples/typescript-us-core/profile-bodyweight.test.ts +++ b/examples/typescript-us-core/profile-bodyweight.test.ts @@ -6,7 +6,7 @@ import { describe, expect, test } from "bun:test"; import type { Observation } from "./fhir-types/hl7-fhir-r4-core/Observation"; import { USCoreBodyWeightProfile } from "./fhir-types/hl7-fhir-us-core/profiles"; import type { - USCoreBodyWeightProfile_Category_VSCatSliceFlat as VSCatFlat, + USCoreBodyWeightProfile_Category_VSCatSliceFlatFull as VSCatFlat, USCoreBodyWeightProfile_Category_VSCatSliceFlatInput as VSCatFlatInput, } from "./fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile"; diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index 700a83d8..0818c2cb 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -323,7 +323,7 @@ import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bodyweight_Category_VSCatSliceFlatInput = Omit; -export type Observation_bodyweight_Category_VSCatSliceFlat = Observation_bodyweight_Category_VSCatSliceFlatInput & { +export type Observation_bodyweight_Category_VSCatSliceFlatFull = Observation_bodyweight_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -484,15 +484,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_bodyweight_Category_VSCatSliceFlat + return item as unknown as Observation_bodyweight_Category_VSCatSliceFlatFull } // Validation @@ -539,15 +539,15 @@ import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; export type Observation_bp_Category_VSCatSliceFlatInput = Omit; -export type Observation_bp_Category_VSCatSliceFlat = Observation_bp_Category_VSCatSliceFlatInput & { +export type Observation_bp_Category_VSCatSliceFlatFull = Observation_bp_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; -export type Observation_bp_Component_SystolicBPSliceFlat = Observation_bp_Component_SystolicBPSliceFlatInput; +export type Observation_bp_Component_SystolicBPSliceFlatFull = Observation_bp_Component_SystolicBPSliceFlatInput; export type Observation_bp_Component_DiastolicBPSliceFlatInput = Omit & Quantity; -export type Observation_bp_Component_DiastolicBPSliceFlat = Observation_bp_Component_DiastolicBPSliceFlatInput; +export type Observation_bp_Component_DiastolicBPSliceFlatFull = Observation_bp_Component_DiastolicBPSliceFlatInput; import { ensureProfile, @@ -759,37 +759,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_bp_Category_VSCatSliceFlat + return item as unknown as Observation_bp_Category_VSCatSliceFlatFull } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlat | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatFull | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlat | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatFull | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatFull | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatFull | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlat | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatFull | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatFull | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1096,15 +1096,15 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { +export type USCoreBloodPressureProfile_Category_VSCatSliceFlatFull = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlatFull = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; import { ensureProfile, @@ -1406,37 +1406,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlat + return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlatFull } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlat | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1490,7 +1490,7 @@ import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; export type USCoreBodyWeightProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { +export type USCoreBodyWeightProfile_Category_VSCatSliceFlatFull = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -1741,15 +1741,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlat | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlat + return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlatFull } // Validation @@ -1805,13 +1805,13 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; export type USCoreRaceExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlatFull = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit & Coding; -export type USCoreRaceExtension_Extension_DetailedSliceFlat = USCoreRaceExtension_Extension_DetailedSliceFlatInput; +export type USCoreRaceExtension_Extension_DetailedSliceFlatFull = USCoreRaceExtension_Extension_DetailedSliceFlatInput; export type USCoreRaceExtension_Extension_TextSliceFlatInput = Omit; -export type USCoreRaceExtension_Extension_TextSliceFlat = USCoreRaceExtension_Extension_TextSliceFlatInput & { +export type USCoreRaceExtension_Extension_TextSliceFlatFull = USCoreRaceExtension_Extension_TextSliceFlatInput & { readonly url: "text"; } @@ -2008,37 +2008,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlat | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatFull | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlat | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlat | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatFull | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatFull | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatFull | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlat | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlat | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatFull | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatFull | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreRaceExtension_Extension_TextSliceFlat + return item as unknown as USCoreRaceExtension_Extension_TextSliceFlatFull } // Validation diff --git a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap index 03ed352d..c4cb2515 100644 --- a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap +++ b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap @@ -38,10 +38,10 @@ import type { Organization } from "../../hl7-fhir-r4-core/Organization"; import type { Patient } from "../../hl7-fhir-r4-core/Patient"; export type ExampleTypedBundle_Entry_PatientEntrySliceFlatInput = BundleEntry; -export type ExampleTypedBundle_Entry_PatientEntrySliceFlat = ExampleTypedBundle_Entry_PatientEntrySliceFlatInput; +export type ExampleTypedBundle_Entry_PatientEntrySliceFlatFull = ExampleTypedBundle_Entry_PatientEntrySliceFlatInput; export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput = BundleEntry; -export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlat = ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput; +export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull = ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput; import { ensureProfile, @@ -146,26 +146,26 @@ export class ExampleTypedBundleProfile { return this } - public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlat | undefined; + public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatFull | undefined; public getPatientEntry(mode: 'raw'): BundleEntry | undefined; - public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceFlat | undefined; - public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlat | BundleEntry | undefined { + public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceFlatFull | undefined; + public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatFull | BundleEntry | undefined { const match = ExampleTypedBundleProfile.PatientEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as unknown as ExampleTypedBundle_Entry_PatientEntrySliceFlat + return item as unknown as ExampleTypedBundle_Entry_PatientEntrySliceFlatFull } - public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | undefined; + public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull | undefined; public getOrganizationEntry(mode: 'raw'): BundleEntry | undefined; - public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | undefined; - public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | BundleEntry | undefined { + public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull | undefined; + public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull | BundleEntry | undefined { const match = ExampleTypedBundleProfile.OrganizationEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as unknown as ExampleTypedBundle_Entry_OrganizationEntrySliceFlat + return item as unknown as ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull } // Validation From 18cd01f1e77f30d65ab39a869033fd4ab3c87590 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 22:33:48 +0200 Subject: [PATCH 27/28] ref: Rename SliceFlatInput to SliceFlat, SliceFlatFull to SliceFlatAll --- src/api/writer-generator/typescript/name.ts | 6 +++--- src/api/writer-generator/typescript/profile-slices.ts | 6 +++--- src/api/writer-generator/typescript/profile.ts | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/api/writer-generator/typescript/name.ts b/src/api/writer-generator/typescript/name.ts index 9466f77a..f6bcedca 100644 --- a/src/api/writer-generator/typescript/name.ts +++ b/src/api/writer-generator/typescript/name.ts @@ -93,11 +93,11 @@ export const tsProfileClassName = (schema: ProfileTypeSchema): string => { }; export const tsSliceFlatTypeName = (profileName: string, fieldName: string, sliceName: string): string => { - return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlatFull`; + return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlat`; }; -export const tsSliceFlatInputTypeName = (profileName: string, fieldName: string, sliceName: string): string => { - return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlatInput`; +export const tsSliceFlatAllTypeName = (profileName: string, fieldName: string, sliceName: string): string => { + return `${uppercaseFirstLetter(profileName)}_${uppercaseFirstLetter(normalizeTsName(fieldName))}_${uppercaseFirstLetter(normalizeTsName(sliceName))}SliceFlatAll`; }; export const tsExtensionFlatTypeName = (profileName: string, extensionName: string): string => { diff --git a/src/api/writer-generator/typescript/profile-slices.ts b/src/api/writer-generator/typescript/profile-slices.ts index 06028f03..a56ec722 100644 --- a/src/api/writer-generator/typescript/profile-slices.ts +++ b/src/api/writer-generator/typescript/profile-slices.ts @@ -13,7 +13,7 @@ import { tsProfileClassName, tsResolvedSliceBaseName, tsResourceName, - tsSliceFlatInputTypeName, + tsSliceFlatAllTypeName, tsSliceFlatTypeName, tsSliceStaticName, } from "./name"; @@ -160,7 +160,7 @@ export const generateSliceSetters = ( for (const sliceDef of sliceDefs) { const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName); const methodName = `set${baseName}`; - const inputTypeName = tsSliceFlatInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const inputTypeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`; const tsField = tsFieldName(sliceDef.fieldName); const fieldAccess = tsGet("this.resource", tsField); @@ -210,7 +210,7 @@ export const generateSliceGetters = ( for (const sliceDef of sliceDefs) { const baseName = tsResolvedSliceBaseName(sliceBaseNames, sliceDef.fieldName, sliceDef.sliceName); const getMethodName = `get${baseName}`; - const flatTypeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const flatTypeName = tsSliceFlatAllTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchRef = `${profileClassName}.${tsSliceStaticName(sliceDef.sliceName)}SliceMatch`; const matchKeys = JSON.stringify(Object.keys(sliceDef.match)); const tsField = tsFieldName(sliceDef.fieldName); diff --git a/src/api/writer-generator/typescript/profile.ts b/src/api/writer-generator/typescript/profile.ts index 5af53aca..45b90da2 100644 --- a/src/api/writer-generator/typescript/profile.ts +++ b/src/api/writer-generator/typescript/profile.ts @@ -27,7 +27,7 @@ import { tsQualifiedExtensionMethodBaseName, tsQualifiedSliceMethodBaseName, tsResourceName, - tsSliceFlatInputTypeName, + tsSliceFlatAllTypeName, tsSliceFlatTypeName, tsSliceMethodBaseName, tsSliceStaticName, @@ -636,8 +636,8 @@ const generateSliceInputTypes = (w: TypeScript, flatProfile: ProfileTypeSchema, if (sliceDefs.length === 0) return; const tsProfileName = tsResourceName(flatProfile.identifier); for (const sliceDef of sliceDefs) { - const inputTypeName = tsSliceFlatInputTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); - const flatTypeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const inputTypeName = tsSliceFlatTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); + const flatTypeName = tsSliceFlatAllTypeName(tsProfileName, sliceDef.fieldName, sliceDef.sliceName); const matchFields = sliceDef.typeDiscriminator ? [] : Object.keys(sliceDef.match); const allExcluded = [...new Set([...sliceDef.excluded, ...matchFields])]; if (sliceDef.constrainedChoice) { From f7a41b88f0bfc458b0e50eb38cfeaf4db51f85f3 Mon Sep 17 00:00:00 2001 From: Aleksandr Penskoi Date: Mon, 6 Apr 2026 22:33:48 +0200 Subject: [PATCH 28/28] chore: Update snapshots, examples and tests for SliceFlat/SliceFlatAll rename --- .../Observation_observation_bodyweight.ts | 14 +- .../profiles/Observation_observation_bp.ts | 42 ++--- .../Observation_observation_vitalsigns.ts | 14 +- .../typescript-r4/profile-bodyweight.test.ts | 10 +- .../Observation_observation_vitalsigns.ts | 14 +- .../Extension_USCoreEthnicityExtension.ts | 42 ++--- .../profiles/Extension_USCoreRaceExtension.ts | 42 ++--- ...ension_USCoreTribalAffiliationExtension.ts | 28 ++-- .../Observation_USCoreBloodPressureProfile.ts | 42 ++--- .../Observation_USCoreBodyWeightProfile.ts | 14 +- .../Observation_USCoreVitalSignsProfile.ts | 14 +- .../profile-bodyweight.test.ts | 12 +- .../__snapshots__/typescript.test.ts.snap | 154 +++++++++--------- .../__snapshots__/local-package.test.ts.snap | 28 ++-- 14 files changed, 235 insertions(+), 235 deletions(-) diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts index 3c36abb3..58c57126 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight.ts @@ -8,8 +8,8 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bodyweight_Category_VSCatSliceFlatInput = Omit; -export type Observation_bodyweight_Category_VSCatSliceFlatFull = Observation_bodyweight_Category_VSCatSliceFlatInput & { +export type Observation_bodyweight_Category_VSCatSliceFlat = Omit; +export type Observation_bodyweight_Category_VSCatSliceFlatAll = Observation_bodyweight_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -159,7 +159,7 @@ export class observation_bodyweightProfile { // Extensions // Slices - public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept): this { const match = observation_bodyweightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -170,15 +170,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_bodyweight_Category_VSCatSliceFlatFull + return item as unknown as Observation_bodyweight_Category_VSCatSliceFlatAll } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts index 0857c43c..677fbff6 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bp.ts @@ -8,16 +8,16 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bp_Category_VSCatSliceFlatInput = Omit; -export type Observation_bp_Category_VSCatSliceFlatFull = Observation_bp_Category_VSCatSliceFlatInput & { +export type Observation_bp_Category_VSCatSliceFlat = Omit; +export type Observation_bp_Category_VSCatSliceFlatAll = Observation_bp_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } -export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; -export type Observation_bp_Component_SystolicBPSliceFlatFull = Observation_bp_Component_SystolicBPSliceFlatInput; +export type Observation_bp_Component_SystolicBPSliceFlat = Omit & Quantity; +export type Observation_bp_Component_SystolicBPSliceFlatAll = Observation_bp_Component_SystolicBPSliceFlat; -export type Observation_bp_Component_DiastolicBPSliceFlatInput = Omit & Quantity; -export type Observation_bp_Component_DiastolicBPSliceFlatFull = Observation_bp_Component_DiastolicBPSliceFlatInput; +export type Observation_bp_Component_DiastolicBPSliceFlat = Omit & Quantity; +export type Observation_bp_Component_DiastolicBPSliceFlatAll = Observation_bp_Component_DiastolicBPSliceFlat; import { ensureProfile, @@ -194,7 +194,7 @@ export class observation_bpProfile { // Extensions // Slices - public setVSCat (input?: Observation_bp_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: Observation_bp_Category_VSCatSliceFlat | CodeableConcept): this { const match = observation_bpProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -205,7 +205,7 @@ export class observation_bpProfile { return this } - public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceFlatInput | ObservationComponent): this { + public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent): this { const match = observation_bpProfile.SystolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -217,7 +217,7 @@ export class observation_bpProfile { return this } - public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceFlatInput | ObservationComponent): this { + public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent): this { const match = observation_bpProfile.DiastolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -229,37 +229,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_bp_Category_VSCatSliceFlatFull + return item as unknown as Observation_bp_Category_VSCatSliceFlatAll } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatFull | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatAll | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatFull | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatFull | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatAll | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatAll | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatFull | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatAll | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatFull | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatFull | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatAll | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatAll | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 9e3e171e..a4c86d7d 100644 --- a/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-r4/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -7,8 +7,8 @@ import type { Observation } from "../../hl7-fhir-r4-core/Observation"; import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_vitalsigns_Category_VSCatSliceFlatInput = Omit; -export type Observation_vitalsigns_Category_VSCatSliceFlatFull = Observation_vitalsigns_Category_VSCatSliceFlatInput & { +export type Observation_vitalsigns_Category_VSCatSliceFlat = Omit; +export type Observation_vitalsigns_Category_VSCatSliceFlatAll = Observation_vitalsigns_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -152,7 +152,7 @@ export class observation_vitalsignsProfile { // Extensions // Slices - public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept): this { const match = observation_vitalsignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -163,15 +163,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlatFull + return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlatAll } // Validation diff --git a/examples/typescript-r4/profile-bodyweight.test.ts b/examples/typescript-r4/profile-bodyweight.test.ts index 588d2a47..dac9b017 100644 --- a/examples/typescript-r4/profile-bodyweight.test.ts +++ b/examples/typescript-r4/profile-bodyweight.test.ts @@ -6,8 +6,8 @@ import { describe, expect, test } from "bun:test"; import type { Observation } from "./fhir-types/hl7-fhir-r4-core/Observation"; import { observation_bodyweightProfile as bodyweightProfile, - type Observation_bodyweight_Category_VSCatSliceFlatFull as VSCatFlat, - type Observation_bodyweight_Category_VSCatSliceFlatInput as VSCatFlatInput, + type Observation_bodyweight_Category_VSCatSliceFlat as VSCatFlat, + type Observation_bodyweight_Category_VSCatSliceFlatAll as VSCatFlatAll, } from "./fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_bodyweight"; describe("demo: create a bodyweight observation", () => { @@ -130,11 +130,11 @@ describe("slice accessors", () => { const profile = bodyweightProfile.create({ status: "final", subject: { reference: "Patient/pt-1" } }); // Setter accepts SliceFlatInput — only user-supplied fields, no discriminators - const input: VSCatFlatInput = { text: "Vital Signs" }; + const input: VSCatFlat = { text: "Vital Signs" }; profile.setVSCat(input); - // Getter returns SliceFlat — includes discriminator values + user data - const flat: VSCatFlat = profile.getVSCat()!; + // Getter returns SliceFlatAll — includes discriminator values + user data + const flat: VSCatFlatAll = profile.getVSCat()!; expect(flat).toEqual({ text: "Vital Signs", coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts index 9e3e171e..a4c86d7d 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-r4-core/profiles/Observation_observation_vitalsigns.ts @@ -7,8 +7,8 @@ import type { Observation } from "../../hl7-fhir-r4-core/Observation"; import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_vitalsigns_Category_VSCatSliceFlatInput = Omit; -export type Observation_vitalsigns_Category_VSCatSliceFlatFull = Observation_vitalsigns_Category_VSCatSliceFlatInput & { +export type Observation_vitalsigns_Category_VSCatSliceFlat = Omit; +export type Observation_vitalsigns_Category_VSCatSliceFlatAll = Observation_vitalsigns_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -152,7 +152,7 @@ export class observation_vitalsignsProfile { // Extensions // Slices - public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: Observation_vitalsigns_Category_VSCatSliceFlat | CodeableConcept): this { const match = observation_vitalsignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -163,15 +163,15 @@ export class observation_vitalsignsProfile { return this } - public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): Observation_vitalsigns_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_vitalsigns_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = observation_vitalsignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlatFull + return item as unknown as Observation_vitalsigns_Category_VSCatSliceFlatAll } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts index fc9121fd..4794ccf3 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreEthnicityExtension.ts @@ -5,14 +5,14 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; -export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlatFull = USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlat = Omit & Coding; +export type USCoreEthnicityExtension_Extension_OmbCategorySliceFlatAll = USCoreEthnicityExtension_Extension_OmbCategorySliceFlat; -export type USCoreEthnicityExtension_Extension_DetailedSliceFlatInput = Omit & Coding; -export type USCoreEthnicityExtension_Extension_DetailedSliceFlatFull = USCoreEthnicityExtension_Extension_DetailedSliceFlatInput; +export type USCoreEthnicityExtension_Extension_DetailedSliceFlat = Omit & Coding; +export type USCoreEthnicityExtension_Extension_DetailedSliceFlatAll = USCoreEthnicityExtension_Extension_DetailedSliceFlat; -export type USCoreEthnicityExtension_Extension_TextSliceFlatInput = Omit; -export type USCoreEthnicityExtension_Extension_TextSliceFlatFull = USCoreEthnicityExtension_Extension_TextSliceFlatInput & { +export type USCoreEthnicityExtension_Extension_TextSliceFlat = Omit; +export type USCoreEthnicityExtension_Extension_TextSliceFlatAll = USCoreEthnicityExtension_Extension_TextSliceFlat & { readonly url: "text"; } @@ -174,7 +174,7 @@ export class USCoreEthnicityExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreEthnicityExtension_Extension_OmbCategorySliceFlatInput | Extension): this { + public setExtensionOmbCategory (input?: USCoreEthnicityExtension_Extension_OmbCategorySliceFlat | Extension): this { const match = USCoreEthnicityExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -186,7 +186,7 @@ export class USCoreEthnicityExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreEthnicityExtension_Extension_DetailedSliceFlatInput | Extension): this { + public setExtensionDetailed (input?: USCoreEthnicityExtension_Extension_DetailedSliceFlat | Extension): this { const match = USCoreEthnicityExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -198,7 +198,7 @@ export class USCoreEthnicityExtensionProfile { return this } - public setExtensionText (input?: USCoreEthnicityExtension_Extension_TextSliceFlatInput | Extension): this { + public setExtensionText (input?: USCoreEthnicityExtension_Extension_TextSliceFlat | Extension): this { const match = USCoreEthnicityExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -209,37 +209,37 @@ export class USCoreEthnicityExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatFull | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatAll | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatFull | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatFull | Extension | undefined { + public getExtensionOmbCategory(): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatAll | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_OmbCategorySliceFlatAll | Extension | undefined { const match = USCoreEthnicityExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatFull | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatAll | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceFlatFull | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatFull | Extension | undefined { + public getExtensionDetailed(): USCoreEthnicityExtension_Extension_DetailedSliceFlatAll | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_DetailedSliceFlatAll | Extension | undefined { const match = USCoreEthnicityExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatFull | undefined; + public getExtensionText(mode: 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatAll | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceFlatFull | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatFull | Extension | undefined { + public getExtensionText(): USCoreEthnicityExtension_Extension_TextSliceFlatAll | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreEthnicityExtension_Extension_TextSliceFlatAll | Extension | undefined { const match = USCoreEthnicityExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreEthnicityExtension_Extension_TextSliceFlatFull + return item as unknown as USCoreEthnicityExtension_Extension_TextSliceFlatAll } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts index 7386ef4c..da6e4171 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreRaceExtension.ts @@ -5,14 +5,14 @@ import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlatFull = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = Omit & Coding; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlatAll = USCoreRaceExtension_Extension_OmbCategorySliceFlat; -export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit & Coding; -export type USCoreRaceExtension_Extension_DetailedSliceFlatFull = USCoreRaceExtension_Extension_DetailedSliceFlatInput; +export type USCoreRaceExtension_Extension_DetailedSliceFlat = Omit & Coding; +export type USCoreRaceExtension_Extension_DetailedSliceFlatAll = USCoreRaceExtension_Extension_DetailedSliceFlat; -export type USCoreRaceExtension_Extension_TextSliceFlatInput = Omit; -export type USCoreRaceExtension_Extension_TextSliceFlatFull = USCoreRaceExtension_Extension_TextSliceFlatInput & { +export type USCoreRaceExtension_Extension_TextSliceFlat = Omit; +export type USCoreRaceExtension_Extension_TextSliceFlatAll = USCoreRaceExtension_Extension_TextSliceFlat & { readonly url: "text"; } @@ -174,7 +174,7 @@ export class USCoreRaceExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | Extension): this { + public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension): this { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -186,7 +186,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceFlatInput | Extension): this { + public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceFlat | Extension): this { const match = USCoreRaceExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -198,7 +198,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceFlatInput | Extension): this { + public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceFlat | Extension): this { const match = USCoreRaceExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -209,37 +209,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatAll | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatAll | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatAll | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatFull | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatAll | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatFull | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatFull | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatAll | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatAll | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatFull | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatAll | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatFull | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatFull | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatAll | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatAll | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreRaceExtension_Extension_TextSliceFlatFull + return item as unknown as USCoreRaceExtension_Extension_TextSliceFlatAll } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts index 9fe7f77d..ceda1a02 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Extension_USCoreTribalAffiliationExtension.ts @@ -5,11 +5,11 @@ import type { CodeableConcept } from "../../hl7-fhir-r4-core/CodeableConcept"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput = Omit & CodeableConcept; -export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatFull = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput; +export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat = Omit & CodeableConcept; +export type USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatAll = USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat; -export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput = Omit; -export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput & { +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat = Omit; +export type USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatAll = USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat & { readonly url: "isEnrolled"; } @@ -150,7 +150,7 @@ export class USCoreTribalAffiliationExtensionProfile { } // Slices - public setExtensionTribalAffiliation (input?: USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatInput | Extension): this { + public setExtensionTribalAffiliation (input?: USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlat | Extension): this { const match = USCoreTribalAffiliationExtensionProfile.tribalAffiliationSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -162,7 +162,7 @@ export class USCoreTribalAffiliationExtensionProfile { return this } - public setExtensionIsEnrolled (input?: USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatInput | Extension): this { + public setExtensionIsEnrolled (input?: USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlat | Extension): this { const match = USCoreTribalAffiliationExtensionProfile.isEnrolledSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -173,26 +173,26 @@ export class USCoreTribalAffiliationExtensionProfile { return this } - public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatFull | undefined; + public getExtensionTribalAffiliation(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatAll | undefined; public getExtensionTribalAffiliation(mode: 'raw'): Extension | undefined; - public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatFull | undefined; - public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatFull | Extension | undefined { + public getExtensionTribalAffiliation(): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatAll | undefined; + public getExtensionTribalAffiliation (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_TribalAffiliationSliceFlatAll | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.tribalAffiliationSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") + return unwrapSliceChoice(item, ["url"], "valueCodeableConcept") } - public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull | undefined; + public getExtensionIsEnrolled(mode: 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatAll | undefined; public getExtensionIsEnrolled(mode: 'raw'): Extension | undefined; - public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull | undefined; - public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull | Extension | undefined { + public getExtensionIsEnrolled(): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatAll | undefined; + public getExtensionIsEnrolled (mode: 'flat' | 'raw' = 'flat'): USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatAll | Extension | undefined { const match = USCoreTribalAffiliationExtensionProfile.isEnrolledSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatFull + return item as unknown as USCoreTribalAffiliationExtension_Extension_IsEnrolledSliceFlatAll } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts index 212cf895..e3bf5938 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBloodPressureProfile.ts @@ -11,16 +11,16 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlatFull = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = Omit; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlatAll = USCoreBloodPressureProfile_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } -export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_SystolicSliceFlatFull = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlatAll = USCoreBloodPressureProfile_Component_SystolicSliceFlat; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatAll = USCoreBloodPressureProfile_Component_DiastolicSliceFlat; import { ensureProfile, @@ -287,7 +287,7 @@ export class USCoreBloodPressureProfile { // Extensions // Slices - public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept): this { const match = USCoreBloodPressureProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -298,7 +298,7 @@ export class USCoreBloodPressureProfile { return this } - public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | ObservationComponent): this { + public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent): this { const match = USCoreBloodPressureProfile.systolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -310,7 +310,7 @@ export class USCoreBloodPressureProfile { return this } - public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | ObservationComponent): this { + public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent): this { const match = USCoreBloodPressureProfile.diastolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -322,37 +322,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlatFull + return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlatAll } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatAll | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatAll | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatAll | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatAll | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatAll | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatAll | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts index 97e3011f..86ad76a4 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile.ts @@ -11,8 +11,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlatFull = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = Omit; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlatAll = USCoreBodyWeightProfile_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -252,7 +252,7 @@ export class USCoreBodyWeightProfile { // Extensions // Slices - public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept): this { const match = USCoreBodyWeightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -263,15 +263,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlatFull + return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlatAll } // Validation diff --git a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts index 7502d102..e1c90666 100644 --- a/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts +++ b/examples/typescript-us-core/fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreVitalSignsProfile.ts @@ -11,8 +11,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreVitalSignsProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreVitalSignsProfile_Category_VSCatSliceFlatFull = USCoreVitalSignsProfile_Category_VSCatSliceFlatInput & { +export type USCoreVitalSignsProfile_Category_VSCatSliceFlat = Omit; +export type USCoreVitalSignsProfile_Category_VSCatSliceFlatAll = USCoreVitalSignsProfile_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -255,7 +255,7 @@ export class USCoreVitalSignsProfile { // Extensions // Slices - public setVSCat (input?: USCoreVitalSignsProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: USCoreVitalSignsProfile_Category_VSCatSliceFlat | CodeableConcept): this { const match = USCoreVitalSignsProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -266,15 +266,15 @@ export class USCoreVitalSignsProfile { return this } - public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): USCoreVitalSignsProfile_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreVitalSignsProfile_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = USCoreVitalSignsProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreVitalSignsProfile_Category_VSCatSliceFlatFull + return item as unknown as USCoreVitalSignsProfile_Category_VSCatSliceFlatAll } // Validation diff --git a/examples/typescript-us-core/profile-bodyweight.test.ts b/examples/typescript-us-core/profile-bodyweight.test.ts index 0b37775d..886c5eeb 100644 --- a/examples/typescript-us-core/profile-bodyweight.test.ts +++ b/examples/typescript-us-core/profile-bodyweight.test.ts @@ -6,8 +6,8 @@ import { describe, expect, test } from "bun:test"; import type { Observation } from "./fhir-types/hl7-fhir-r4-core/Observation"; import { USCoreBodyWeightProfile } from "./fhir-types/hl7-fhir-us-core/profiles"; import type { - USCoreBodyWeightProfile_Category_VSCatSliceFlatFull as VSCatFlat, - USCoreBodyWeightProfile_Category_VSCatSliceFlatInput as VSCatFlatInput, + USCoreBodyWeightProfile_Category_VSCatSliceFlat as VSCatFlat, + USCoreBodyWeightProfile_Category_VSCatSliceFlatAll as VSCatFlatAll, } from "./fhir-types/hl7-fhir-us-core/profiles/Observation_USCoreBodyWeightProfile"; describe("demo: create a US Core body weight observation", () => { @@ -114,12 +114,12 @@ describe("slice input/flat type split", () => { subject: { reference: "Patient/pt-1" }, }); - // Setter accepts SliceFlatInput — only user-supplied fields, no discriminators - const input: VSCatFlatInput = { text: "Vital Signs" }; + // Setter accepts SliceFlat — only user-supplied fields, no discriminators + const input: VSCatFlat = { text: "Vital Signs" }; profile.setVSCat(input); - // Getter returns SliceFlat — includes discriminator values + user data - const flat: VSCatFlat = profile.getVSCat()!; + // Getter returns SliceFlatAll — includes discriminator values + user data + const flat: VSCatFlatAll = profile.getVSCat()!; expect(flat).toEqual({ text: "Vital Signs", coding: [{ code: "vital-signs", system: "http://terminology.hl7.org/CodeSystem/observation-category" }], diff --git a/test/api/write-generator/__snapshots__/typescript.test.ts.snap b/test/api/write-generator/__snapshots__/typescript.test.ts.snap index 0818c2cb..27eed4b5 100644 --- a/test/api/write-generator/__snapshots__/typescript.test.ts.snap +++ b/test/api/write-generator/__snapshots__/typescript.test.ts.snap @@ -322,8 +322,8 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bodyweight_Category_VSCatSliceFlatInput = Omit; -export type Observation_bodyweight_Category_VSCatSliceFlatFull = Observation_bodyweight_Category_VSCatSliceFlatInput & { +export type Observation_bodyweight_Category_VSCatSliceFlat = Omit; +export type Observation_bodyweight_Category_VSCatSliceFlatAll = Observation_bodyweight_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -473,7 +473,7 @@ export class observation_bodyweightProfile { // Extensions // Slices - public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: Observation_bodyweight_Category_VSCatSliceFlat | CodeableConcept): this { const match = observation_bodyweightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -484,15 +484,15 @@ export class observation_bodyweightProfile { return this } - public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): Observation_bodyweight_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): Observation_bodyweight_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bodyweight_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = observation_bodyweightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_bodyweight_Category_VSCatSliceFlatFull + return item as unknown as Observation_bodyweight_Category_VSCatSliceFlatAll } // Validation @@ -538,16 +538,16 @@ import type { Period } from "../../hl7-fhir-r4-core/Period"; import type { Quantity } from "../../hl7-fhir-r4-core/Quantity"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; -export type Observation_bp_Category_VSCatSliceFlatInput = Omit; -export type Observation_bp_Category_VSCatSliceFlatFull = Observation_bp_Category_VSCatSliceFlatInput & { +export type Observation_bp_Category_VSCatSliceFlat = Omit; +export type Observation_bp_Category_VSCatSliceFlatAll = Observation_bp_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } -export type Observation_bp_Component_SystolicBPSliceFlatInput = Omit & Quantity; -export type Observation_bp_Component_SystolicBPSliceFlatFull = Observation_bp_Component_SystolicBPSliceFlatInput; +export type Observation_bp_Component_SystolicBPSliceFlat = Omit & Quantity; +export type Observation_bp_Component_SystolicBPSliceFlatAll = Observation_bp_Component_SystolicBPSliceFlat; -export type Observation_bp_Component_DiastolicBPSliceFlatInput = Omit & Quantity; -export type Observation_bp_Component_DiastolicBPSliceFlatFull = Observation_bp_Component_DiastolicBPSliceFlatInput; +export type Observation_bp_Component_DiastolicBPSliceFlat = Omit & Quantity; +export type Observation_bp_Component_DiastolicBPSliceFlatAll = Observation_bp_Component_DiastolicBPSliceFlat; import { ensureProfile, @@ -724,7 +724,7 @@ export class observation_bpProfile { // Extensions // Slices - public setVSCat (input?: Observation_bp_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: Observation_bp_Category_VSCatSliceFlat | CodeableConcept): this { const match = observation_bpProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -735,7 +735,7 @@ export class observation_bpProfile { return this } - public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceFlatInput | ObservationComponent): this { + public setSystolicBP (input?: Observation_bp_Component_SystolicBPSliceFlat | ObservationComponent): this { const match = observation_bpProfile.SystolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -747,7 +747,7 @@ export class observation_bpProfile { return this } - public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceFlatInput | ObservationComponent): this { + public setDiastolicBP (input?: Observation_bp_Component_DiastolicBPSliceFlat | ObservationComponent): this { const match = observation_bpProfile.DiastolicBPSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -759,37 +759,37 @@ export class observation_bpProfile { return this } - public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): Observation_bp_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): Observation_bp_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): Observation_bp_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = observation_bpProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as Observation_bp_Category_VSCatSliceFlatFull + return item as unknown as Observation_bp_Category_VSCatSliceFlatAll } - public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatFull | undefined; + public getSystolicBP(mode: 'flat'): Observation_bp_Component_SystolicBPSliceFlatAll | undefined; public getSystolicBP(mode: 'raw'): ObservationComponent | undefined; - public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatFull | undefined; - public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatFull | ObservationComponent | undefined { + public getSystolicBP(): Observation_bp_Component_SystolicBPSliceFlatAll | undefined; + public getSystolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_SystolicBPSliceFlatAll | ObservationComponent | undefined { const match = observation_bpProfile.SystolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatFull | undefined; + public getDiastolicBP(mode: 'flat'): Observation_bp_Component_DiastolicBPSliceFlatAll | undefined; public getDiastolicBP(mode: 'raw'): ObservationComponent | undefined; - public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatFull | undefined; - public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatFull | ObservationComponent | undefined { + public getDiastolicBP(): Observation_bp_Component_DiastolicBPSliceFlatAll | undefined; + public getDiastolicBP (mode: 'flat' | 'raw' = 'flat'): Observation_bp_Component_DiastolicBPSliceFlatAll | ObservationComponent | undefined { const match = observation_bpProfile.DiastolicBPSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1095,16 +1095,16 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBloodPressureProfile_Category_VSCatSliceFlatFull = USCoreBloodPressureProfile_Category_VSCatSliceFlatInput & { +export type USCoreBloodPressureProfile_Category_VSCatSliceFlat = Omit; +export type USCoreBloodPressureProfile_Category_VSCatSliceFlatAll = USCoreBloodPressureProfile_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } -export type USCoreBloodPressureProfile_Component_SystolicSliceFlatInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_SystolicSliceFlatFull = USCoreBloodPressureProfile_Component_SystolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlat = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_SystolicSliceFlatAll = USCoreBloodPressureProfile_Component_SystolicSliceFlat; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput = Omit & Quantity; -export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull = USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlat = Omit & Quantity; +export type USCoreBloodPressureProfile_Component_DiastolicSliceFlatAll = USCoreBloodPressureProfile_Component_DiastolicSliceFlat; import { ensureProfile, @@ -1371,7 +1371,7 @@ export class USCoreBloodPressureProfile { // Extensions // Slices - public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: USCoreBloodPressureProfile_Category_VSCatSliceFlat | CodeableConcept): this { const match = USCoreBloodPressureProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -1382,7 +1382,7 @@ export class USCoreBloodPressureProfile { return this } - public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceFlatInput | ObservationComponent): this { + public setSystolic (input?: USCoreBloodPressureProfile_Component_SystolicSliceFlat | ObservationComponent): this { const match = USCoreBloodPressureProfile.systolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -1394,7 +1394,7 @@ export class USCoreBloodPressureProfile { return this } - public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceFlatInput | ObservationComponent): this { + public setDiastolic (input?: USCoreBloodPressureProfile_Component_DiastolicSliceFlat | ObservationComponent): this { const match = USCoreBloodPressureProfile.diastolicSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.component ??= [], match, input as ObservationComponent) @@ -1406,37 +1406,37 @@ export class USCoreBloodPressureProfile { return this } - public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): USCoreBloodPressureProfile_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = USCoreBloodPressureProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlatFull + return item as unknown as USCoreBloodPressureProfile_Category_VSCatSliceFlatAll } - public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | undefined; + public getSystolic(mode: 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatAll | undefined; public getSystolic(mode: 'raw'): ObservationComponent | undefined; - public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | undefined; - public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatFull | ObservationComponent | undefined { + public getSystolic(): USCoreBloodPressureProfile_Component_SystolicSliceFlatAll | undefined; + public getSystolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_SystolicSliceFlatAll | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.systolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } - public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | undefined; + public getDiastolic(mode: 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatAll | undefined; public getDiastolic(mode: 'raw'): ObservationComponent | undefined; - public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | undefined; - public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatFull | ObservationComponent | undefined { + public getDiastolic(): USCoreBloodPressureProfile_Component_DiastolicSliceFlatAll | undefined; + public getDiastolic (mode: 'flat' | 'raw' = 'flat'): USCoreBloodPressureProfile_Component_DiastolicSliceFlatAll | ObservationComponent | undefined { const match = USCoreBloodPressureProfile.diastolicSliceMatch const item = getArraySlice(this.resource.component, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["code"], "valueQuantity") + return unwrapSliceChoice(item, ["code"], "valueQuantity") } // Validation @@ -1489,8 +1489,8 @@ import type { Ratio } from "../../hl7-fhir-r4-core/Ratio"; import type { Reference } from "../../hl7-fhir-r4-core/Reference"; import type { SampledData } from "../../hl7-fhir-r4-core/SampledData"; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlatInput = Omit; -export type USCoreBodyWeightProfile_Category_VSCatSliceFlatFull = USCoreBodyWeightProfile_Category_VSCatSliceFlatInput & { +export type USCoreBodyWeightProfile_Category_VSCatSliceFlat = Omit; +export type USCoreBodyWeightProfile_Category_VSCatSliceFlatAll = USCoreBodyWeightProfile_Category_VSCatSliceFlat & { readonly coding: [{ code: "vital-signs"; system: "http://terminology.hl7.org/CodeSystem/observation-category" }]; } @@ -1730,7 +1730,7 @@ export class USCoreBodyWeightProfile { // Extensions // Slices - public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceFlatInput | CodeableConcept): this { + public setVSCat (input?: USCoreBodyWeightProfile_Category_VSCatSliceFlat | CodeableConcept): this { const match = USCoreBodyWeightProfile.VSCatSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.category ??= [], match, input as CodeableConcept) @@ -1741,15 +1741,15 @@ export class USCoreBodyWeightProfile { return this } - public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | undefined; + public getVSCat(mode: 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatAll | undefined; public getVSCat(mode: 'raw'): CodeableConcept | undefined; - public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | undefined; - public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatFull | CodeableConcept | undefined { + public getVSCat(): USCoreBodyWeightProfile_Category_VSCatSliceFlatAll | undefined; + public getVSCat (mode: 'flat' | 'raw' = 'flat'): USCoreBodyWeightProfile_Category_VSCatSliceFlatAll | CodeableConcept | undefined { const match = USCoreBodyWeightProfile.VSCatSliceMatch const item = getArraySlice(this.resource.category, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlatFull + return item as unknown as USCoreBodyWeightProfile_Category_VSCatSliceFlatAll } // Validation @@ -1804,14 +1804,14 @@ exports[`TypeScript US Core Example generates US Core Race extension profile 1`] import type { Coding } from "../../hl7-fhir-r4-core/Coding"; import type { Extension } from "../../hl7-fhir-r4-core/Extension"; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlatInput = Omit & Coding; -export type USCoreRaceExtension_Extension_OmbCategorySliceFlatFull = USCoreRaceExtension_Extension_OmbCategorySliceFlatInput; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlat = Omit & Coding; +export type USCoreRaceExtension_Extension_OmbCategorySliceFlatAll = USCoreRaceExtension_Extension_OmbCategorySliceFlat; -export type USCoreRaceExtension_Extension_DetailedSliceFlatInput = Omit & Coding; -export type USCoreRaceExtension_Extension_DetailedSliceFlatFull = USCoreRaceExtension_Extension_DetailedSliceFlatInput; +export type USCoreRaceExtension_Extension_DetailedSliceFlat = Omit & Coding; +export type USCoreRaceExtension_Extension_DetailedSliceFlatAll = USCoreRaceExtension_Extension_DetailedSliceFlat; -export type USCoreRaceExtension_Extension_TextSliceFlatInput = Omit; -export type USCoreRaceExtension_Extension_TextSliceFlatFull = USCoreRaceExtension_Extension_TextSliceFlatInput & { +export type USCoreRaceExtension_Extension_TextSliceFlat = Omit; +export type USCoreRaceExtension_Extension_TextSliceFlatAll = USCoreRaceExtension_Extension_TextSliceFlat & { readonly url: "text"; } @@ -1973,7 +1973,7 @@ export class USCoreRaceExtensionProfile { } // Slices - public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceFlatInput | Extension): this { + public setExtensionOmbCategory (input?: USCoreRaceExtension_Extension_OmbCategorySliceFlat | Extension): this { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -1985,7 +1985,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceFlatInput | Extension): this { + public setExtensionDetailed (input?: USCoreRaceExtension_Extension_DetailedSliceFlat | Extension): this { const match = USCoreRaceExtensionProfile.detailedSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -1997,7 +1997,7 @@ export class USCoreRaceExtensionProfile { return this } - public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceFlatInput | Extension): this { + public setExtensionText (input?: USCoreRaceExtension_Extension_TextSliceFlat | Extension): this { const match = USCoreRaceExtensionProfile.textSliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.extension ??= [], match, input as Extension) @@ -2008,37 +2008,37 @@ export class USCoreRaceExtensionProfile { return this } - public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | undefined; + public getExtensionOmbCategory(mode: 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatAll | undefined; public getExtensionOmbCategory(mode: 'raw'): Extension | undefined; - public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | undefined; - public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatFull | Extension | undefined { + public getExtensionOmbCategory(): USCoreRaceExtension_Extension_OmbCategorySliceFlatAll | undefined; + public getExtensionOmbCategory (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_OmbCategorySliceFlatAll | Extension | undefined { const match = USCoreRaceExtensionProfile.ombCategorySliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatFull | undefined; + public getExtensionDetailed(mode: 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatAll | undefined; public getExtensionDetailed(mode: 'raw'): Extension | undefined; - public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatFull | undefined; - public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatFull | Extension | undefined { + public getExtensionDetailed(): USCoreRaceExtension_Extension_DetailedSliceFlatAll | undefined; + public getExtensionDetailed (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_DetailedSliceFlatAll | Extension | undefined { const match = USCoreRaceExtensionProfile.detailedSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return unwrapSliceChoice(item, ["url"], "valueCoding") + return unwrapSliceChoice(item, ["url"], "valueCoding") } - public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatFull | undefined; + public getExtensionText(mode: 'flat'): USCoreRaceExtension_Extension_TextSliceFlatAll | undefined; public getExtensionText(mode: 'raw'): Extension | undefined; - public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatFull | undefined; - public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatFull | Extension | undefined { + public getExtensionText(): USCoreRaceExtension_Extension_TextSliceFlatAll | undefined; + public getExtensionText (mode: 'flat' | 'raw' = 'flat'): USCoreRaceExtension_Extension_TextSliceFlatAll | Extension | undefined { const match = USCoreRaceExtensionProfile.textSliceMatch const item = getArraySlice(this.resource.extension, match) if (!item) return undefined if (mode === 'raw') return item - return item as unknown as USCoreRaceExtension_Extension_TextSliceFlatFull + return item as unknown as USCoreRaceExtension_Extension_TextSliceFlatAll } // Validation diff --git a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap index c4cb2515..0057d278 100644 --- a/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap +++ b/test/api/write-generator/multi-package/__snapshots__/local-package.test.ts.snap @@ -37,11 +37,11 @@ import type { Bundle, BundleEntry } from "../../hl7-fhir-r4-core/Bundle"; import type { Organization } from "../../hl7-fhir-r4-core/Organization"; import type { Patient } from "../../hl7-fhir-r4-core/Patient"; -export type ExampleTypedBundle_Entry_PatientEntrySliceFlatInput = BundleEntry; -export type ExampleTypedBundle_Entry_PatientEntrySliceFlatFull = ExampleTypedBundle_Entry_PatientEntrySliceFlatInput; +export type ExampleTypedBundle_Entry_PatientEntrySliceFlat = BundleEntry; +export type ExampleTypedBundle_Entry_PatientEntrySliceFlatAll = ExampleTypedBundle_Entry_PatientEntrySliceFlat; -export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput = BundleEntry; -export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull = ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput; +export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlat = BundleEntry; +export type ExampleTypedBundle_Entry_OrganizationEntrySliceFlatAll = ExampleTypedBundle_Entry_OrganizationEntrySliceFlat; import { ensureProfile, @@ -124,7 +124,7 @@ export class ExampleTypedBundleProfile { // Extensions // Slices - public setPatientEntry (input?: ExampleTypedBundle_Entry_PatientEntrySliceFlatInput | BundleEntry): this { + public setPatientEntry (input?: ExampleTypedBundle_Entry_PatientEntrySliceFlat | BundleEntry): this { const match = ExampleTypedBundleProfile.PatientEntrySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.entry ??= [], match, input as BundleEntry) @@ -135,7 +135,7 @@ export class ExampleTypedBundleProfile { return this } - public setOrganizationEntry (input?: ExampleTypedBundle_Entry_OrganizationEntrySliceFlatInput | BundleEntry): this { + public setOrganizationEntry (input?: ExampleTypedBundle_Entry_OrganizationEntrySliceFlat | BundleEntry): this { const match = ExampleTypedBundleProfile.OrganizationEntrySliceMatch if (input && matchesValue(input, match)) { setArraySlice(this.resource.entry ??= [], match, input as BundleEntry) @@ -146,26 +146,26 @@ export class ExampleTypedBundleProfile { return this } - public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatFull | undefined; + public getPatientEntry(mode: 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatAll | undefined; public getPatientEntry(mode: 'raw'): BundleEntry | undefined; - public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceFlatFull | undefined; - public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatFull | BundleEntry | undefined { + public getPatientEntry(): ExampleTypedBundle_Entry_PatientEntrySliceFlatAll | undefined; + public getPatientEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_PatientEntrySliceFlatAll | BundleEntry | undefined { const match = ExampleTypedBundleProfile.PatientEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as unknown as ExampleTypedBundle_Entry_PatientEntrySliceFlatFull + return item as unknown as ExampleTypedBundle_Entry_PatientEntrySliceFlatAll } - public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull | undefined; + public getOrganizationEntry(mode: 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatAll | undefined; public getOrganizationEntry(mode: 'raw'): BundleEntry | undefined; - public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull | undefined; - public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull | BundleEntry | undefined { + public getOrganizationEntry(): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatAll | undefined; + public getOrganizationEntry (mode: 'flat' | 'raw' = 'flat'): ExampleTypedBundle_Entry_OrganizationEntrySliceFlatAll | BundleEntry | undefined { const match = ExampleTypedBundleProfile.OrganizationEntrySliceMatch const item = getArraySlice(this.resource.entry, match) if (!item) return undefined if (mode === 'raw') return item as BundleEntry - return item as unknown as ExampleTypedBundle_Entry_OrganizationEntrySliceFlatFull + return item as unknown as ExampleTypedBundle_Entry_OrganizationEntrySliceFlatAll } // Validation