Skip to content

TS: Move createResource to a shared factory function on the base type module #124

@ryukzak

Description

@ryukzak

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions