@synanetics/fhir-fml-convert
Version:
Converts StructureMaps written in FML to JSON ($convert operation)
43 lines • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const antlr4ts_1 = require("antlr4ts");
const FhirMapperLexer_1 = require("./generated/FhirMapperLexer");
const FhirMapperParser_1 = require("./generated/FhirMapperParser");
const StructureMapVisitorSTU3_1 = require("./StructureMapVisitorSTU3");
const StructureMapVisitorR5_1 = require("./StructureMapVisitorR5");
const StructureMapVisitorR4_1 = require("./StructureMapVisitorR4");
/**
* Converts the supplied FML into a FHIR StructureMap, according the the [ANTLR grammar](https://www.hl7.org/fhir/mapping.g4)
* @param fml The FML string
* @param options Options for performing the conversion, such as the desired FHIR version of the
* resultant StructureMap.
* @returns A deserialised FHIR StructureMap resource.
*/
function convert(fml, options) {
const input = antlr4ts_1.CharStreams.fromString(fml);
const lexer = new FhirMapperLexer_1.FhirMapperLexer(input);
lexer.removeErrorListeners();
// @ts-ignore
const tokens = new antlr4ts_1.CommonTokenStream(lexer);
const parser = new FhirMapperParser_1.FhirMapperParser(tokens);
parser.removeErrorListeners();
const tree = parser.structureMap();
let visitor;
const version = options?.fhirVersion ?? 'R4';
switch (version) {
case 'STU3':
visitor = new StructureMapVisitorSTU3_1.StructureMapVisitorSTU3();
break;
case 'R5':
visitor = new StructureMapVisitorR5_1.StructureMapVisitorR5();
break;
case 'R4':
visitor = new StructureMapVisitorR4_1.StructureMapVisitorR4();
break;
default:
throw new Error(`Unsupported FHIR version from options.fhirVersion: ${version}`);
}
return visitor.visit(tree);
}
exports.default = convert;
//# sourceMappingURL=index.js.map