import MemberVariable from "../../../model/dataTypes/MemberVariable"; import DataType from "../../../model/dataTypes/DataType"; import EntityMetadata from "../../../model/dataTypes/EntityMetadata"; import EntityImports from "../../../model/dataTypes/EntityImports"; import PrimaryCode from "../../../model/dataTypes/PrimaryCode"; export declare const source = "/* eslint-disable import/prefer-default-export, import/no-cycle */\n{{# if imports.dataTypes }}import {\n{{# if (eq dataType.normalizedName \"Resource\") }}\n lookupResourceType,\n{{/ if }}\n{{# if (eq dataType.normalizedName \"Type\") }}\n getFieldList,\n getTypeName,\n getParentTypeName,\n getFieldInfo,\n lookupType,\n FieldMetadata,\n{{/ if }}\n{{# each imports.dataTypes }}\n {{ this.normalizedName }},\n{{/ each }}\n FhirType\n} from \"../internal\";\n\n{{/ if }}\n@FhirType(\"{{ dataType.normalizedName }}\"{{# if parentDataType }}, \"{{ parentDataType.normalizedName }}\"{{/ if }})\nexport class {{ dataType.normalizedName }}{{# if parentDataType }} extends {{ parentDataType.normalizedName }}{{/ if }} {\n static readonly baseType: string = \"{{ metadata.parentTypeName }}\";\n\n static readonly namespace: string = \"{{ metadata.namespace }}\";\n\n static readonly typeName: string = \"{{ metadata.originalTypeName }}\";\n\n static readonly primaryCodePath: string | null = {{# if metadata.primaryCodePath ~}}\n \"{{ metadata.primaryCodePath }}\"\n {{~ else ~}}\n null\n {{~/ if }};\n\n {{# if (eq dataType.normalizedName \"Type\") }}\n static get fieldList(): ReadonlyArray {\n return getFieldList(this.prototype);\n }\n\n static get parentType(): typeof Type | null {\n const parentTypeName = getParentTypeName(this.prototype) || \"\";\n const parentTypeRef = lookupType(parentTypeName);\n return parentTypeRef || null;\n }\n\n get fhirTypeRef(): typeof Type {\n const typeName = getTypeName(this) || \"\";\n const typeRef = lookupType(typeName);\n if (!typeRef) {\n throw new Error(\"Cannot find name of FHIR type\");\n }\n return typeRef;\n }\n\n static get fieldInfo(): ReadonlyArray {\n const result = this.fieldList.map((fieldName) => {\n const fieldMetadata = getFieldInfo(this.prototype, fieldName);\n if (!fieldMetadata) {\n throw new Error(`Cannot find metadata for field ${fieldName}`);\n }\n return fieldMetadata;\n });\n return result;\n }\n\n {{/ if }}\n {{# each memberVariables }}\n {{> complexMember member=this }}\n\n\n {{ else }}\n {{/ each }}\n{{# if (eq dataType.normalizedName \"Resource\") }}\n constructor() {\n super();\n this.resourceType = this.getTypeName();\n }\n \n{{/ if }}\n{{> primaryCode }}\n{{# if dataType.primitive }}\n {{> primitiveParse }}\n{{ else }}\n {{> complexParse }}\n{{/ if }}\n\n public static is{{ dataType.normalizedName }}(input?: unknown): input is {{ dataType.normalizedName }} {\n const castInput = input as {{ dataType.normalizedName }};\n return !!input && castInput.getTypeName && castInput.getTypeName() === \"{{ dataType.normalizedName }}\";\n }\n{{# if (eq dataType.normalizedName \"Extension\") }}\n\n public static serializePrimitiveExtension(\n primitive: Element\n ): IElement | undefined {\n let result: IElement | undefined;\n if (primitive.id || primitive.extension) {\n result = {};\n result.id = primitive.id;\n result.extension = primitive?.extension?.map((x) => x.toJSON());\n }\n return result;\n }\n\n public static serializePrimitiveExtensionArray(\n primitives: Array\n ): Array | undefined {\n const initial: Array = [];\n const result = primitives.reduce((accumulator, currentPrim) => {\n const serializedExtension = Extension.serializePrimitiveExtension(\n currentPrim\n );\n if (serializedExtension) {\n accumulator.push(serializedExtension);\n } else {\n accumulator.push(null);\n }\n return accumulator;\n }, initial);\n\n if (result.find((x) => !!x)) {\n return result;\n }\n return undefined;\n }\n{{/ if }}\n{{# unless dataType.primitive }}\n\n public toJSON(): I{{ dataType.normalizedName }} {\n const result: I{{ dataType.normalizedName }} = {{# if parentDataType ~}}\n super.toJSON()\n {{~ else ~}}\n {}\n {{~/ if ~}};\n\n {{# each memberVariables }}\n {{# each choiceTypes }}\n if (this.{{ ../variableName }} && {{ normalizedName }}.is{{ normalizedName }}(this.{{ ../variableName }})) {\n result.{{ ../variableName }}{{ trimPrimitiveName normalizedName}} = this.{{ ../variableName }}\n {{~# unless systemType ~}}\n {{~# if primitive ~}}\n .value\n {{~ else ~}}\n .toJSON()\n {{~/ if ~}}\n {{~/ unless ~}};\n {{# if primitive }}\n result._{{ ../variableName }}{{ trimPrimitiveName normalizedName}} = Extension.serializePrimitiveExtension(this.{{ ../variableName }});\n {{/ if }}\n }\n\n {{ else }}\n if (this.{{ variableName }}) {\n result.{{ variableName }} = this.{{ variableName }}\n {{~# unless dataType.systemType ~}}\n {{~# if isArray ~}}\n {{~# if dataType.primitive ~}}\n .filter(x => !!x).map(x => x.value) as typeof result.{{ variableName }}\n {{~ else ~}}\n .map((x) => x.toJSON())\n {{~/ if ~}}\n {{~ else ~}}\n {{~# if dataType.primitive ~}}\n .value\n {{~ else ~}}\n .toJSON()\n {{~/ if ~}}\n {{~/ if ~}}\n {{~/ unless ~}};\n {{# if dataType.primitive }}\n {{# if isArray }}\n result._{{ variableName }} = Extension.serializePrimitiveExtensionArray(this.{{ variableName }});\n {{ else }}\n result._{{ variableName }} = Extension.serializePrimitiveExtension(this.{{ variableName }});\n {{/ if }}\n {{/ if }}\n }\n\n {{/ each }}\n {{/ each }}\n return result;\n }\n{{/ unless }}\n\n public clone(): {{ dataType.normalizedName }} {\n {{# if dataType.primitive }}\n const result = new {{ dataType.normalizedName }}();\n const parentClone = super.clone();\n result.id = parentClone.id;\n result.extension = parentClone.extension;\n result.value = this.value;\n return result;\n {{ else }}\n return {{ dataType.normalizedName }}.parse(this.toJSON());\n {{/ if }}\n }\n\n public getTypeName(): string {\n return \"{{ dataType.normalizedName }}\";\n }\n}\n/* eslint-enable import/prefer-default-export, import/no-cycle */\n"; export interface TemplateContext { dataType: DataType; parentDataType: DataType | null; metadata: EntityMetadata; memberVariables: Array; imports: EntityImports; primaryCode: PrimaryCode | null; } declare const _default: HandlebarsTemplateDelegate; export default _default; //# sourceMappingURL=classTemplate.d.ts.map