Currently each profile class has a static createResource() method that builds a plain resource with buildResource<T>():
// In Bundle_ExampleTypedBundle.ts (profile module)
static createResource (args: ExampleTypedBundleProfileRaw) : Bundle {
const resource = buildResource<Bundle>( {
resourceType: "Bundle",
type: args.type,
meta: { profile: [ExampleTypedBundleProfile.canonicalUrl] },
})
return resource;
}
This duplicates the base resource construction across every profile on the same type (e.g. multiple Observation profiles each have their own buildResource<Observation>(...)).
Proposal
Generate a shared createResource factory function in the base type module (e.g. Bundle.ts, Observation.ts) and have profile classes call it:
// In Bundle.ts (base type module)
export const createBundle = (args: { type: Bundle["type"], ... }): Bundle =>
buildResource<Bundle>({ resourceType: "Bundle", ...args });
// In Bundle_ExampleTypedBundle.ts (profile module)
import { createBundle } from "../../hl7-fhir-r4-core/Bundle";
static createResource (args: ExampleTypedBundleProfileRaw) : Bundle {
return createBundle({ type: args.type, meta: { profile: [canonicalUrl] } });
}
This keeps resource construction in one place per base type, shared across all profiles.
Currently each profile class has a
static createResource()method that builds a plain resource withbuildResource<T>():This duplicates the base resource construction across every profile on the same type (e.g. multiple Observation profiles each have their own
buildResource<Observation>(...)).Proposal
Generate a shared
createResourcefactory function in the base type module (e.g.Bundle.ts,Observation.ts) and have profile classes call it:This keeps resource construction in one place per base type, shared across all profiles.