@haste-health/codegen 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/lib/generate/index.d.ts +4 -0
- package/lib/generate/index.js +5 -0
- package/lib/generate/index.js.map +1 -0
- package/lib/generate/meta-data.d.ts +38 -0
- package/lib/generate/meta-data.js +224 -0
- package/lib/generate/meta-data.js.map +1 -0
- package/lib/generate/operation-definition.d.ts +3 -0
- package/lib/generate/operation-definition.js +65 -0
- package/lib/generate/operation-definition.js.map +1 -0
- package/lib/generate/sets.d.ts +2 -0
- package/lib/generate/sets.js +20 -0
- package/lib/generate/sets.js.map +1 -0
- package/lib/generate/type-to-canonical.d.ts +5 -0
- package/lib/generate/type-to-canonical.js +8 -0
- package/lib/generate/type-to-canonical.js.map +1 -0
- package/lib/generate/typescript-types.d.ts +3 -0
- package/lib/generate/typescript-types.js +290 -0
- package/lib/generate/typescript-types.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -0
- package/lib/sdTraversal.d.ts +8 -0
- package/lib/sdTraversal.js +41 -0
- package/lib/sdTraversal.js.map +1 -0
- package/lib/utilities.d.ts +2 -0
- package/lib/utilities.js +8 -0
- package/lib/utilities.js.map +1 -0
- package/package.json +39 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Codegen
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generate/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,eAAe,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { uri } from "@haste-health/fhir-types/r4/types";
|
|
2
|
+
import { Data, FHIR_VERSION, Resource } from "@haste-health/fhir-types/versions";
|
|
3
|
+
interface Node {
|
|
4
|
+
_type_: "fp-primitive" | "primitive-type" | "complex-type" | "resource" | "type" | "typechoice" | "content-reference";
|
|
5
|
+
cardinality: "array" | "single";
|
|
6
|
+
base: uri;
|
|
7
|
+
}
|
|
8
|
+
export interface TypeChoiceNode extends Node {
|
|
9
|
+
_type_: "typechoice";
|
|
10
|
+
definition: Data<FHIR_VERSION, "ElementDefinition">;
|
|
11
|
+
fieldsToType: Record<string, uri>;
|
|
12
|
+
}
|
|
13
|
+
export interface ElementNode extends Node {
|
|
14
|
+
_type_: "primitive-type" | "complex-type" | "resource";
|
|
15
|
+
type: uri;
|
|
16
|
+
definition: Data<FHIR_VERSION, "ElementDefinition">;
|
|
17
|
+
properties: Record<string, number>;
|
|
18
|
+
}
|
|
19
|
+
export interface FPPrimitiveNode extends Node {
|
|
20
|
+
_type_: "fp-primitive";
|
|
21
|
+
type: uri;
|
|
22
|
+
}
|
|
23
|
+
export interface TypeNode extends Node {
|
|
24
|
+
_type_: "type";
|
|
25
|
+
type: uri;
|
|
26
|
+
definition: Data<FHIR_VERSION, "ElementDefinition">;
|
|
27
|
+
}
|
|
28
|
+
export interface ContentReferenceNode extends Node {
|
|
29
|
+
_type_: "content-reference";
|
|
30
|
+
definition: Data<FHIR_VERSION, "ElementDefinition">;
|
|
31
|
+
reference: number;
|
|
32
|
+
}
|
|
33
|
+
export type MetaNode = ElementNode | TypeNode | ContentReferenceNode | TypeChoiceNode | FPPrimitiveNode;
|
|
34
|
+
export interface MetaV2Compiled {
|
|
35
|
+
[key: string]: Array<MetaNode>;
|
|
36
|
+
}
|
|
37
|
+
export declare function generateMetaData<Version extends FHIR_VERSION>(sds: Resource<Version, "StructureDefinition">[]): MetaV2Compiled;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { traversalBottomUp } from "../sdTraversal.js";
|
|
2
|
+
import { filterSDForTypes } from "../utilities.js";
|
|
3
|
+
function createFPPrimitiveNode(type) {
|
|
4
|
+
return [
|
|
5
|
+
{
|
|
6
|
+
_type_: "fp-primitive",
|
|
7
|
+
type,
|
|
8
|
+
cardinality: "single",
|
|
9
|
+
base: type,
|
|
10
|
+
},
|
|
11
|
+
];
|
|
12
|
+
}
|
|
13
|
+
const FP_PRIMITIVES_TYPES = [
|
|
14
|
+
"http://hl7.org/fhirpath/System.Boolean",
|
|
15
|
+
"http://hl7.org/fhirpath/System.String",
|
|
16
|
+
"http://hl7.org/fhirpath/System.Date",
|
|
17
|
+
"http://hl7.org/fhirpath/System.DateTime",
|
|
18
|
+
"http://hl7.org/fhirpath/System.Decimal",
|
|
19
|
+
"http://hl7.org/fhirpath/System.Integer",
|
|
20
|
+
"http://hl7.org/fhirpath/System.Time",
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @param type
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
function addFPPrimitiveNodes(metadata) {
|
|
28
|
+
return FP_PRIMITIVES_TYPES.reduce((metadata, type) => {
|
|
29
|
+
metadata[type] = createFPPrimitiveNode(type);
|
|
30
|
+
return metadata;
|
|
31
|
+
}, metadata);
|
|
32
|
+
}
|
|
33
|
+
function determineIsTypeChoice(element) {
|
|
34
|
+
return (element.type ?? []).length > 1;
|
|
35
|
+
}
|
|
36
|
+
function combineWithPath(path, type) {
|
|
37
|
+
return `${path}:${type}`;
|
|
38
|
+
}
|
|
39
|
+
// Generate indices around the element path and it's type which correlate to location in the meta.
|
|
40
|
+
function preGenerateIndices(sd) {
|
|
41
|
+
let curIndex = 0;
|
|
42
|
+
// Record
|
|
43
|
+
const indices = {};
|
|
44
|
+
for (let i = 0; i < (sd.snapshot?.element ?? []).length; i++) {
|
|
45
|
+
const element = sd.snapshot?.element[i];
|
|
46
|
+
if (!element)
|
|
47
|
+
throw new Error("No Element");
|
|
48
|
+
indices[element.path] = curIndex++;
|
|
49
|
+
}
|
|
50
|
+
return indices;
|
|
51
|
+
}
|
|
52
|
+
// function to capaitalize a string
|
|
53
|
+
function capitalize(str) {
|
|
54
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
55
|
+
}
|
|
56
|
+
function getElementField(element, type) {
|
|
57
|
+
const path = element.path;
|
|
58
|
+
const pathSplit = path.split(".");
|
|
59
|
+
const field = pathSplit[pathSplit.length - 1];
|
|
60
|
+
if (type) {
|
|
61
|
+
return field.replace("[x]", capitalize(type));
|
|
62
|
+
}
|
|
63
|
+
return (element.type ?? []).length > 1 ? field.replace("[x]", "") : field;
|
|
64
|
+
}
|
|
65
|
+
function getAllTypeChoice(beginning, element) {
|
|
66
|
+
return Object.keys(element)
|
|
67
|
+
.filter((k) => k.startsWith(beginning))
|
|
68
|
+
.reduce((acc, k) => {
|
|
69
|
+
acc[k] = element[k];
|
|
70
|
+
return acc;
|
|
71
|
+
}, {});
|
|
72
|
+
}
|
|
73
|
+
function simpleElementDefinition(element) {
|
|
74
|
+
return {
|
|
75
|
+
path: element.path,
|
|
76
|
+
min: element.min,
|
|
77
|
+
max: element.max,
|
|
78
|
+
...getAllTypeChoice("pattern", element),
|
|
79
|
+
...getAllTypeChoice("minValue", element),
|
|
80
|
+
...getAllTypeChoice("maxValue", element),
|
|
81
|
+
...getAllTypeChoice("fixed", element),
|
|
82
|
+
maxLength: element.maxLength,
|
|
83
|
+
type: element.type,
|
|
84
|
+
base: element.base
|
|
85
|
+
? {
|
|
86
|
+
path: element.base.path,
|
|
87
|
+
max: element.base.max,
|
|
88
|
+
min: element.base.min,
|
|
89
|
+
}
|
|
90
|
+
: undefined,
|
|
91
|
+
binding: element.binding
|
|
92
|
+
? {
|
|
93
|
+
strength: element.binding.strength,
|
|
94
|
+
valueSet: element.binding.valueSet,
|
|
95
|
+
}
|
|
96
|
+
: undefined,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function getElementCardinality(element) {
|
|
100
|
+
const cardinality = element.max === "1" ? "single" : "array";
|
|
101
|
+
return cardinality;
|
|
102
|
+
}
|
|
103
|
+
function createContentReferenceNode(sd, element, reference) {
|
|
104
|
+
return {
|
|
105
|
+
_type_: "content-reference",
|
|
106
|
+
definition: simpleElementDefinition(element),
|
|
107
|
+
base: sd.type,
|
|
108
|
+
cardinality: getElementCardinality(element),
|
|
109
|
+
reference,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function createSingularNode(sd, index, element, children) {
|
|
113
|
+
if (index === 0) {
|
|
114
|
+
if (!["primitive-type", "complex-type", "resource"].includes(sd.kind)) {
|
|
115
|
+
throw new Error("sd must be of type 'primitive-type', 'complex-type' or 'resource'");
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
_type_: sd.kind,
|
|
119
|
+
base: sd.type,
|
|
120
|
+
type: sd.type,
|
|
121
|
+
// Set as singular to ensure that the first element is always singular.
|
|
122
|
+
// Also removing base to ensure singular.
|
|
123
|
+
definition: simpleElementDefinition(element),
|
|
124
|
+
cardinality: "single",
|
|
125
|
+
properties: children.reduce((acc, k) => {
|
|
126
|
+
acc[k.field] = k.index;
|
|
127
|
+
return acc;
|
|
128
|
+
}, {}),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const type = element.type?.[0];
|
|
132
|
+
if ((element.type ?? []).length > 1) {
|
|
133
|
+
throw new Error("Multiple types are not supported for creating singular node.");
|
|
134
|
+
}
|
|
135
|
+
const cardinality = getElementCardinality(element);
|
|
136
|
+
if (children.length === 0) {
|
|
137
|
+
return {
|
|
138
|
+
_type_: "type",
|
|
139
|
+
base: sd.type,
|
|
140
|
+
type: type?.code,
|
|
141
|
+
definition: simpleElementDefinition(element),
|
|
142
|
+
cardinality,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
_type_: "complex-type",
|
|
147
|
+
base: sd.type,
|
|
148
|
+
type: type?.code,
|
|
149
|
+
definition: simpleElementDefinition(element),
|
|
150
|
+
properties: children.reduce((acc, k) => {
|
|
151
|
+
acc[k.field] = k.index;
|
|
152
|
+
return acc;
|
|
153
|
+
}, {}),
|
|
154
|
+
cardinality,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function createTypeChoiceNode(sd, element) {
|
|
158
|
+
return {
|
|
159
|
+
_type_: "typechoice",
|
|
160
|
+
base: sd.type,
|
|
161
|
+
definition: simpleElementDefinition(element),
|
|
162
|
+
cardinality: getElementCardinality(element),
|
|
163
|
+
fieldsToType: (element.type ?? []).reduce((acc, type) => {
|
|
164
|
+
acc[getElementField(element, type.code)] = type.code;
|
|
165
|
+
return acc;
|
|
166
|
+
}, {}),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function SDToMetaData(sd) {
|
|
170
|
+
// Used to handle content references so know ahead of time where to point.
|
|
171
|
+
const indices = preGenerateIndices(sd);
|
|
172
|
+
const metaInfo = [
|
|
173
|
+
...new Array(Math.max(...Object.values(indices))),
|
|
174
|
+
];
|
|
175
|
+
traversalBottomUp(sd, (element, children) => {
|
|
176
|
+
const index = indices[element.path];
|
|
177
|
+
if (element.contentReference) {
|
|
178
|
+
const elementIndex = indices[element.contentReference.substring(1)];
|
|
179
|
+
metaInfo[index] = createContentReferenceNode(sd, element, elementIndex);
|
|
180
|
+
return [
|
|
181
|
+
{
|
|
182
|
+
index,
|
|
183
|
+
field: getElementField(element),
|
|
184
|
+
},
|
|
185
|
+
];
|
|
186
|
+
}
|
|
187
|
+
if (determineIsTypeChoice(element)) {
|
|
188
|
+
metaInfo[index] = createTypeChoiceNode(sd, element);
|
|
189
|
+
return [
|
|
190
|
+
...(element.type ?? []).map((type) => {
|
|
191
|
+
const indexKey = combineWithPath(element.path, type.code);
|
|
192
|
+
const index = indices[indexKey];
|
|
193
|
+
return {
|
|
194
|
+
index,
|
|
195
|
+
field: getElementField(element, type.code),
|
|
196
|
+
};
|
|
197
|
+
}),
|
|
198
|
+
{
|
|
199
|
+
index,
|
|
200
|
+
field: getElementField(element),
|
|
201
|
+
},
|
|
202
|
+
];
|
|
203
|
+
// For Type choices include a typechoice node which points to the types loc.
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
metaInfo[index] = createSingularNode(sd, index, element, children);
|
|
207
|
+
return [
|
|
208
|
+
{
|
|
209
|
+
index,
|
|
210
|
+
field: getElementField(element),
|
|
211
|
+
},
|
|
212
|
+
];
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
return metaInfo;
|
|
216
|
+
}
|
|
217
|
+
export function generateMetaData(sds) {
|
|
218
|
+
const metav2compiled = filterSDForTypes(sds).reduce((acc, sd) => {
|
|
219
|
+
acc[sd.type] = SDToMetaData(sd);
|
|
220
|
+
return acc;
|
|
221
|
+
}, {});
|
|
222
|
+
return addFPPrimitiveNodes(metav2compiled);
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=meta-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-data.js","sourceRoot":"","sources":["../../src/generate/meta-data.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAwDnD,SAAS,qBAAqB,CAAC,IAAS;IACtC,OAAO;QACL;YACE,MAAM,EAAE,cAAc;YACtB,IAAI;YACJ,WAAW,EAAE,QAAQ;YACrB,IAAI,EAAE,IAAI;SACX;KACF,CAAC;AACJ,CAAC;AAED,MAAM,mBAAmB,GAAU;IACjC,wCAAwC;IACxC,uCAAuC;IACvC,qCAAqC;IACrC,yCAAyC;IACzC,wCAAwC;IACxC,wCAAwC;IACxC,qCAAqC;CAC7B,CAAC;AAEX;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,QAAwB;IACnD,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACnD,QAAQ,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,QAAQ,CAAC,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA0B;IACvD,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACzC,CAAC;AAKD,SAAS,eAAe,CAAC,IAAiB,EAAE,IAAS;IACnD,OAAO,GAAG,IAAI,IAAI,IAAI,EAAqB,CAAC;AAC9C,CAAC;AAED,kGAAkG;AAClG,SAAS,kBAAkB,CACzB,EAAiD;IAEjD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,SAAS;IACT,MAAM,OAAO,GAAkD,EAAE,CAAC;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,CAAC,OAAO,CAAC,IAAmB,CAAC,GAAG,QAAQ,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mCAAmC;AACnC,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,eAAe,CAAC,OAA0B,EAAE,IAAa;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5E,CAAC;AAED,SAAS,gBAAgB,CACvB,SAAiB,EACjB,OAA0B;IAE1B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SACpE,MAAM,CAAC,CAAC,GAA4B,EAAE,CAAC,EAAE,EAAE;QAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAgD;IAEhD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;QACvC,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;QACxC,GAAG,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;QACxC,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;QACrC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAChB,CAAC,CAAC;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;gBACvB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG;gBACrB,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG;aACtB;YACH,CAAC,CAAC,SAAS;QACb,OAAO,EAAE,OAAO,CAAC,OAAO;YACtB,CAAC,CAAC;gBACE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAClC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;aACnC;YACH,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,OAA0B;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,0BAA0B,CACjC,EAA4C,EAC5C,OAA2C,EAC3C,SAAiB;IAEjB,OAAO;QACL,MAAM,EAAE,mBAAmB;QAC3B,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC;QAC5C,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,WAAW,EAAE,qBAAqB,CAAC,OAAO,CAAC;QAC3C,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,EAA4C,EAC5C,KAAa,EACb,OAA2C,EAC3C,QAA4C;IAE5C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,gBAAgB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,IAAsD;YACjE,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,uEAAuE;YACvE,yCAAyC;YACzC,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC;YAC5C,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAA2B,EAAE,CAAC,EAAE,EAAE;gBAC7D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBACvB,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC;SACP,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAsC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,IAAI,EAAE,IAAI,EAAE,IAAW;YACvB,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC;YAC5C,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,IAAI,EAAE,IAAI,EAAE,IAAW;QACvB,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC;QAC5C,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAA2B,EAAE,CAAC,EAAE,EAAE;YAC7D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACvB,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC;QACN,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,EAA4C,EAC5C,OAA2C;IAE3C,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC;QAC5C,WAAW,EAAE,qBAAqB,CAAC,OAAO,CAAC;QAC3C,YAAY,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CACvC,CAAC,GAAwB,EAAE,IAAI,EAAE,EAAE;YACjC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACrD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,CACH;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,EAA4C;IAE5C,0EAA0E;IAC1E,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAoB;QAChC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KAClD,CAAC;IAEF,iBAAiB,CACf,EAAE,EACF,CAAC,OAA0B,EAAE,QAAQ,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAmB,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,MAAM,YAAY,GAChB,OAAO,CACL,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAA2B,CAChE,CAAC;YACJ,QAAQ,CAAC,KAAK,CAAC,GAAG,0BAA0B,CAC1C,EAAE,EACF,OAA6C,EAC7C,YAAY,CACb,CAAC;YAEF,OAAO;gBACL;oBACE,KAAK;oBACL,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC;iBAChC;aACF,CAAC;QACJ,CAAC;QAED,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,KAAK,CAAC,GAAG,oBAAoB,CACpC,EAAE,EACF,OAA6C,CAC9C,CAAC;YAEF,OAAO;gBACL,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACnC,MAAM,QAAQ,GAAG,eAAe,CAC9B,OAAO,CAAC,IAAmB,EAC3B,IAAI,CAAC,IAAI,CACV,CAAC;oBAEF,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAChC,OAAO;wBACL,KAAK;wBACL,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;qBAC3C,CAAC;gBACJ,CAAC,CAAC;gBACF;oBACE,KAAK;oBACL,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC;iBAChC;aACF,CAAC;YACF,4EAA4E;QAC9E,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAClC,EAAE,EACF,KAAK,EACL,OAA6C,EAC7C,QAAQ,CACT,CAAC;YAEF,OAAO;gBACL;oBACE,KAAK;oBACL,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC;iBAChC;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,GAA+C;IAE/C,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,CACjD,CAAC,GAAmB,EAAE,EAAE,EAAE,EAAE;QAC1B,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAoB,CACrB,CAAC;IAEF,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { FHIR_VERSION, Resource } from "@haste-health/fhir-types/versions";
|
|
2
|
+
export declare function generateOp(op: Resource<FHIR_VERSION, "OperationDefinition">): string;
|
|
3
|
+
export default function operationGeneration<Version extends FHIR_VERSION>(fhirVersion: Version, operations: Readonly<Array<Resource<Version, "OperationDefinition">>>): Promise<string>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { resourceTypes } from "@haste-health/fhir-types/r4/sets";
|
|
2
|
+
function generateParameterType(parameters) {
|
|
3
|
+
if (parameters.length === 0)
|
|
4
|
+
return `Record<string, never>`;
|
|
5
|
+
const fields = parameters
|
|
6
|
+
.map((p) => {
|
|
7
|
+
const isArray = p.max !== "1";
|
|
8
|
+
const required = p.min > 0;
|
|
9
|
+
const fieldName = `"${p.name}"${required ? "" : "?"}`;
|
|
10
|
+
const type = p.type === "Any" ? "Resource" : p.type;
|
|
11
|
+
const singularValue = p.type
|
|
12
|
+
? `fhirTypes.${type}`
|
|
13
|
+
: generateParameterType(p.part || []);
|
|
14
|
+
const value = isArray ? `Array<${singularValue}>` : singularValue;
|
|
15
|
+
return `${fieldName}: ${value}`;
|
|
16
|
+
})
|
|
17
|
+
.join(",\n");
|
|
18
|
+
return `{${fields}}`;
|
|
19
|
+
}
|
|
20
|
+
function capitalize(s) {
|
|
21
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
22
|
+
}
|
|
23
|
+
function getName(op) {
|
|
24
|
+
if (!op.id)
|
|
25
|
+
throw new Error("Must have id for generating operation");
|
|
26
|
+
return capitalize(op.id
|
|
27
|
+
.split("-")
|
|
28
|
+
.map((s) => capitalize(s))
|
|
29
|
+
.join(""));
|
|
30
|
+
}
|
|
31
|
+
function generateOutput(parameters) {
|
|
32
|
+
if (parameters.length === 1 &&
|
|
33
|
+
parameters[0].name === "return" &&
|
|
34
|
+
(parameters[0].type === "Any" ||
|
|
35
|
+
resourceTypes.has(parameters[0].type || ""))) {
|
|
36
|
+
return `fhirTypes.${parameters[0].type === "Any" ? "Resource" : parameters[0].type}`;
|
|
37
|
+
}
|
|
38
|
+
return generateParameterType(parameters);
|
|
39
|
+
}
|
|
40
|
+
export function generateOp(op) {
|
|
41
|
+
const namespace = getName(op);
|
|
42
|
+
const interfaceName = "IOp";
|
|
43
|
+
const operationName = "Op";
|
|
44
|
+
const inputName = `Input`;
|
|
45
|
+
const outputName = `Output`;
|
|
46
|
+
const inputParameters = (op.parameter || []).filter((op) => op.use === "in");
|
|
47
|
+
const outputParameters = (op.parameter || []).filter((op) => op.use === "out");
|
|
48
|
+
const inputType = `export type ${inputName} = ${generateParameterType(inputParameters)}`;
|
|
49
|
+
const outputType = `export type ${outputName} = ${generateOutput(outputParameters)}`;
|
|
50
|
+
const operationType = `export type ${interfaceName} = IOperation<${inputName}, ${outputName}>`;
|
|
51
|
+
const operationInstance = `export const ${operationName}: ${interfaceName} = new Operation<${inputName}, ${outputName}>(${JSON.stringify(op)} as fhirTypes.OperationDefinition)`;
|
|
52
|
+
return `export namespace ${namespace} {
|
|
53
|
+
${[inputType, outputType, operationType, operationInstance].join("\n")}}`;
|
|
54
|
+
}
|
|
55
|
+
export default async function operationGeneration(fhirVersion, operations) {
|
|
56
|
+
if (fhirVersion !== "4.0")
|
|
57
|
+
throw new Error("Only support 4.0");
|
|
58
|
+
const code = [
|
|
59
|
+
`import type * as fhirTypes from "@haste-health/fhir-types/r4/types";`,
|
|
60
|
+
`import { Operation, IOperation } from "@haste-health/operation-execution";`,
|
|
61
|
+
...operations.map((op) => generateOp(op)),
|
|
62
|
+
].join("\n");
|
|
63
|
+
return code;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=operation-definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-definition.js","sourceRoot":"","sources":["../../src/generate/operation-definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
function generateTypeSet(name, sds) {
|
|
2
|
+
return `export const ${name}: Set<string> = new Set([${sds
|
|
3
|
+
.map((sd) => `"${sd.id}"`)
|
|
4
|
+
.join(",")}])\n`;
|
|
5
|
+
}
|
|
6
|
+
export function generateSets(version, structureDefinitions) {
|
|
7
|
+
// Ignore templates for now during type generation.
|
|
8
|
+
structureDefinitions = structureDefinitions
|
|
9
|
+
.filter((sd) => sd.kind !== "logical")
|
|
10
|
+
.filter((sd) => sd.derivation !== "constraint");
|
|
11
|
+
const primitiveTypes = structureDefinitions
|
|
12
|
+
.filter((sd) => sd.kind === "primitive-type")
|
|
13
|
+
.filter((sd) => sd.derivation !== "constraint");
|
|
14
|
+
const complexTypes = structureDefinitions
|
|
15
|
+
.filter((sd) => sd.kind === "complex-type")
|
|
16
|
+
.filter((sd) => sd.derivation !== "constraint");
|
|
17
|
+
const resourceTypes = structureDefinitions.filter((sd) => sd.kind === "resource");
|
|
18
|
+
return `${generateTypeSet("resourceTypes", resourceTypes)}\n${generateTypeSet("complexTypes", complexTypes)}\n${generateTypeSet("primitiveTypes", primitiveTypes)}\n`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=sets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sets.js","sourceRoot":"","sources":["../../src/generate/sets.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe,CACtB,IAAY,EACZ,GAAmE;IAEnE,OAAO,gBAAgB,IAAI,6BAA6B,GAAG;SACxD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;SACzB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,oBAEC;IAED,mDAAmD;IACnD,oBAAoB,GAAG,oBAAoB;SACxC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;SACrC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,YAAY,CAAC,CAAC;IAElD,MAAM,cAAc,GAAG,oBAAoB;SACxC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC;SAC5C,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,YAAY,CAAC,CAAC;IAElD,MAAM,YAAY,GAAG,oBAAoB;SACtC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC;SAC1C,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,YAAY,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAC/C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,UAAU,CAC/B,CAAC;IAEF,OAAO,GAAG,eAAe,CAAC,eAAe,EAAE,aAAa,CAAC,KAAK,eAAe,CAC3E,cAAc,EACd,YAAY,CACb,KAAK,eAAe,CAAC,gBAAgB,EAAE,cAAc,CAAC,IAAI,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { uri } from "@haste-health/fhir-types/lib/generated/r4/types";
|
|
2
|
+
import { FHIR_VERSION, Resource } from "@haste-health/fhir-types/versions";
|
|
3
|
+
type CanonicalMap = Record<uri, uri>;
|
|
4
|
+
export declare function generateTypeToCanonicalMap<Version extends FHIR_VERSION>(sds: Resource<Version, "StructureDefinition">[]): CanonicalMap;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-to-canonical.js","sourceRoot":"","sources":["../../src/generate/type-to-canonical.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAInD,MAAM,UAAU,0BAA0B,CACxC,GAA+C;IAE/C,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAiB,EAAE,EAAE,EAAE,EAAE;QAC5D,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { FHIR_VERSION, Resource } from "@haste-health/fhir-types/versions";
|
|
2
|
+
export declare const primitiveTypes: Set<string>;
|
|
3
|
+
export declare function generateTypes<Version extends FHIR_VERSION>(fhirVersion: Version, structureDefinitions: Readonly<Array<Resource<Version, "StructureDefinition">>>): string;
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { traversalBottomUp } from "../sdTraversal.js";
|
|
2
|
+
export const primitiveTypes = new Set([
|
|
3
|
+
"base64Binary",
|
|
4
|
+
"boolean",
|
|
5
|
+
"canonical",
|
|
6
|
+
"code",
|
|
7
|
+
"date",
|
|
8
|
+
"dateTime",
|
|
9
|
+
"decimal",
|
|
10
|
+
"id",
|
|
11
|
+
"instant",
|
|
12
|
+
"integer",
|
|
13
|
+
"markdown",
|
|
14
|
+
"oid",
|
|
15
|
+
"positiveInt",
|
|
16
|
+
"string",
|
|
17
|
+
"time",
|
|
18
|
+
"unsignedInt",
|
|
19
|
+
"uri",
|
|
20
|
+
"url",
|
|
21
|
+
"uuid",
|
|
22
|
+
"xhtml",
|
|
23
|
+
]);
|
|
24
|
+
function fhirSystemTypePredicate(type) {
|
|
25
|
+
switch (type) {
|
|
26
|
+
case "http://hl7.org/fhirpath/System.Boolean": {
|
|
27
|
+
return "boolean";
|
|
28
|
+
}
|
|
29
|
+
case "http://hl7.org/fhirpath/System.String": {
|
|
30
|
+
return "string";
|
|
31
|
+
}
|
|
32
|
+
case "http://hl7.org/fhirpath/System.Date": {
|
|
33
|
+
return "string";
|
|
34
|
+
}
|
|
35
|
+
case "http://hl7.org/fhirpath/System.DateTime": {
|
|
36
|
+
return "string";
|
|
37
|
+
}
|
|
38
|
+
case "http://hl7.org/fhirpath/System.Decimal": {
|
|
39
|
+
return "number";
|
|
40
|
+
}
|
|
41
|
+
case "http://hl7.org/fhirpath/System.Integer": {
|
|
42
|
+
return "number";
|
|
43
|
+
}
|
|
44
|
+
case "http://hl7.org/fhirpath/System.Time": {
|
|
45
|
+
return "string";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// function to capaitalize a string
|
|
50
|
+
function capitalize(str) {
|
|
51
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
52
|
+
}
|
|
53
|
+
function isRoot(sd, elementDefinition) {
|
|
54
|
+
return elementDefinition.path === sd.id;
|
|
55
|
+
}
|
|
56
|
+
function documentation(element) {
|
|
57
|
+
if (element.short)
|
|
58
|
+
return ` /** \n * ${element.short}\n */\n`;
|
|
59
|
+
return "";
|
|
60
|
+
}
|
|
61
|
+
function getElementField(element, type) {
|
|
62
|
+
const path = element.path;
|
|
63
|
+
const isRequired = element.min && element.min > 0;
|
|
64
|
+
const pathSplit = path.split(".");
|
|
65
|
+
let field = pathSplit[pathSplit.length - 1];
|
|
66
|
+
if (type) {
|
|
67
|
+
field = field.replace("[x]", capitalize(type));
|
|
68
|
+
}
|
|
69
|
+
// Type choice is always optional
|
|
70
|
+
if (!isRequired || type) {
|
|
71
|
+
field = field + "?";
|
|
72
|
+
}
|
|
73
|
+
return `${field}`;
|
|
74
|
+
}
|
|
75
|
+
function primitiveToTypescriptType(primitiveSd) {
|
|
76
|
+
const primitiveValueType = primitiveSd.snapshot?.element.filter((element) => element.path.endsWith(".value"))[0]?.type?.[0]?.code;
|
|
77
|
+
// http://hl7.org/fhir/StructureDefinition/uri
|
|
78
|
+
// Skip over these primitive types as already exist in typescript
|
|
79
|
+
if (primitiveValueType) {
|
|
80
|
+
const primitiveType = `export type ${primitiveSd.id} = ${fhirSystemTypePredicate(primitiveValueType)}`;
|
|
81
|
+
// Avoid compiler issues by ts-ignoring boolean and string
|
|
82
|
+
// which don't allow type aliasing
|
|
83
|
+
if (primitiveSd.id === "boolean" || primitiveSd.id === "string") {
|
|
84
|
+
return `// @ts-ignore\n${primitiveType};`;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
let extension = "";
|
|
88
|
+
if (primitiveSd.baseDefinition &&
|
|
89
|
+
primitiveSd.baseDefinition !==
|
|
90
|
+
"http://hl7.org/fhir/StructureDefinition/Element") {
|
|
91
|
+
extension = ` & ${primitiveSd.baseDefinition.replace("http://hl7.org/fhir/StructureDefinition/", "")}`;
|
|
92
|
+
}
|
|
93
|
+
// For primitives that aren't string or boolean, add branding to have more type constraints.
|
|
94
|
+
return `${primitiveType} & { _${primitiveSd.id}: "fhir_${primitiveSd.id}"; } ${extension};`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw new Error("No type found for primitive");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function isCollection(elementDefinition) {
|
|
102
|
+
switch (elementDefinition.max) {
|
|
103
|
+
case "*":
|
|
104
|
+
return true;
|
|
105
|
+
default:
|
|
106
|
+
if (!elementDefinition.max)
|
|
107
|
+
return false;
|
|
108
|
+
return parseInt(elementDefinition.max) > 1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function wrapAsCollection(elementDefinition, typescriptString) {
|
|
112
|
+
if (isCollection(elementDefinition)) {
|
|
113
|
+
return `Array<${typescriptString}>`;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
return typescriptString;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function _typeToTypescriptType(type) {
|
|
120
|
+
// .id fields are often typed as http://hl7.org/fhirpath/System.String
|
|
121
|
+
// setting them to fhir primitive id instead
|
|
122
|
+
if (fhirSystemTypePredicate(type) &&
|
|
123
|
+
type !== "http://hl7.org/fhirpath/System.String") {
|
|
124
|
+
throw new Error("System type not supported '${type}'");
|
|
125
|
+
}
|
|
126
|
+
else if (type === "http://hl7.org/fhirpath/System.String") {
|
|
127
|
+
return "id";
|
|
128
|
+
}
|
|
129
|
+
return type;
|
|
130
|
+
}
|
|
131
|
+
function typeToTypescriptType(elementDefinition, type) {
|
|
132
|
+
const typescriptType = _typeToTypescriptType(type);
|
|
133
|
+
return wrapAsCollection(elementDefinition, typescriptType);
|
|
134
|
+
}
|
|
135
|
+
function isNested(element) {
|
|
136
|
+
return (element.type?.[0]?.code === "BackboneElement" ||
|
|
137
|
+
element.type?.[0]?.code === "Element");
|
|
138
|
+
}
|
|
139
|
+
function getInterfaceName(element) {
|
|
140
|
+
if (!element.id)
|
|
141
|
+
throw new Error("Cannot create interface name for '" + element.path + "'");
|
|
142
|
+
return element.id.split(".").map(capitalize).join("");
|
|
143
|
+
}
|
|
144
|
+
/*
|
|
145
|
+
Resolves an elements content Reference
|
|
146
|
+
*/
|
|
147
|
+
function contentReference(sd, element) {
|
|
148
|
+
const contentReference = element.contentReference?.split("#")[1];
|
|
149
|
+
const referenceElement = sd.snapshot?.element.filter((element) => element.id === contentReference)[0];
|
|
150
|
+
if (!referenceElement)
|
|
151
|
+
throw new Error("unable to resolve contentreference: '" + element.contentReference + "'");
|
|
152
|
+
let referenceTypescriptType;
|
|
153
|
+
if (isNested(referenceElement)) {
|
|
154
|
+
referenceTypescriptType = getInterfaceName(referenceElement);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const type = referenceElement.type?.[0]?.code;
|
|
158
|
+
if (type === undefined) {
|
|
159
|
+
throw new Error("No type found for content reference: '" + referenceElement.id + "'");
|
|
160
|
+
}
|
|
161
|
+
referenceTypescriptType = typeToTypescriptType(referenceElement, type);
|
|
162
|
+
}
|
|
163
|
+
// Handle cardinality on reference type.
|
|
164
|
+
if (element.max !== "1") {
|
|
165
|
+
referenceTypescriptType = `Array<${referenceTypescriptType}>`;
|
|
166
|
+
}
|
|
167
|
+
return [
|
|
168
|
+
`${documentation(element)} ${getElementField(element)}: ${referenceTypescriptType};`,
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
function getPrimitiveExtension(element, type) {
|
|
172
|
+
return `${documentation(element)} _${getElementField({ ...element, min: 0 }, type)}: ${typeToTypescriptType(element, "Element")}`;
|
|
173
|
+
}
|
|
174
|
+
function processLeaf(sd, element) {
|
|
175
|
+
if (element.contentReference) {
|
|
176
|
+
return contentReference(sd, element);
|
|
177
|
+
}
|
|
178
|
+
else if (element.type?.length && element.type?.length > 1) {
|
|
179
|
+
return element.type
|
|
180
|
+
?.map((type) => {
|
|
181
|
+
const fields = [
|
|
182
|
+
`${documentation(element)} ${getElementField(element, type.code)}: ${typeToTypescriptType(element, type.code)};`,
|
|
183
|
+
];
|
|
184
|
+
if (primitiveTypes.has(type.code)) {
|
|
185
|
+
fields.push(getPrimitiveExtension(element, type.code));
|
|
186
|
+
}
|
|
187
|
+
return fields;
|
|
188
|
+
})
|
|
189
|
+
.flat();
|
|
190
|
+
}
|
|
191
|
+
const fields = [
|
|
192
|
+
`${documentation(element)} ${getElementField(element)}: ${typeToTypescriptType(element, element.type?.[0]?.code)};`,
|
|
193
|
+
];
|
|
194
|
+
if (primitiveTypes.has(element.type?.[0]?.code)) {
|
|
195
|
+
fields.push(getPrimitiveExtension(element, element.type?.[0]?.code));
|
|
196
|
+
}
|
|
197
|
+
return fields;
|
|
198
|
+
}
|
|
199
|
+
function processComplexToTypescript(sd, element, children) {
|
|
200
|
+
const interfaceName = getInterfaceName(element);
|
|
201
|
+
// for resources include the resourceType filed
|
|
202
|
+
if (isRoot(sd, element) && sd.kind === "resource") {
|
|
203
|
+
children.unshift(`resourceType: "${sd.id}"`);
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
typescriptInterface: `export interface ${interfaceName} {
|
|
207
|
+
${children.join("\n")}
|
|
208
|
+
}`,
|
|
209
|
+
field: [
|
|
210
|
+
`${documentation(element)} ${getElementField(element)}: ${wrapAsCollection(element, interfaceName)};`,
|
|
211
|
+
],
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function resourceOrComplexFhirToTypescript(sd) {
|
|
215
|
+
let typescriptTypes = "";
|
|
216
|
+
traversalBottomUp(sd, (element, children) => {
|
|
217
|
+
if (children.length === 0) {
|
|
218
|
+
return processLeaf(sd, element);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const { typescriptInterface, field } = processComplexToTypescript(sd, element, children);
|
|
222
|
+
typescriptTypes = `${typescriptTypes}\n${typescriptInterface}`;
|
|
223
|
+
return field;
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
return typescriptTypes;
|
|
227
|
+
}
|
|
228
|
+
function getNonAbstractResourceTypes(sds) {
|
|
229
|
+
return sds.filter((sd) => !sd.abstract);
|
|
230
|
+
}
|
|
231
|
+
// Handle DomainResource and Resource by union joining existing generated types.
|
|
232
|
+
function generateAbstracts({ resourceSDs, complexSDs, }) {
|
|
233
|
+
// Resources
|
|
234
|
+
const abstractResourceTypes = resourceSDs.filter((sd) => sd.abstract);
|
|
235
|
+
const nonAbstractResourceTypes = resourceSDs.filter((sd) => !sd.abstract);
|
|
236
|
+
const ResourceMap = `export type ResourceMap = {\n${nonAbstractResourceTypes
|
|
237
|
+
.map((resource) => {
|
|
238
|
+
return ` ${resource.id}: ${resource.id};`;
|
|
239
|
+
})
|
|
240
|
+
.join("\n")}\n}\n`;
|
|
241
|
+
const ResourceType = `export type ResourceType = keyof ResourceMap`;
|
|
242
|
+
const AResource = `export type AResource<T extends keyof ResourceMap> = ResourceMap[T];`;
|
|
243
|
+
const ConcreteType = `export type ConcreteType = ResourceMap[keyof ResourceMap]`;
|
|
244
|
+
const abstractResourceTypesTypescript = abstractResourceTypes
|
|
245
|
+
.map((abstractResource) => `export type ${abstractResource.id} = ConcreteType`)
|
|
246
|
+
.join("\n");
|
|
247
|
+
// Complex
|
|
248
|
+
const ComplexMap = `type ComplexMap = {\n${complexSDs
|
|
249
|
+
.map((complex) => {
|
|
250
|
+
return ` ${complex.id}: ${complex.id};`;
|
|
251
|
+
})
|
|
252
|
+
.join("\n")}\n}\n`;
|
|
253
|
+
const ComplexTypes = `type ComplexTypes = keyof ComplexMap`;
|
|
254
|
+
const DataMap = `type DataMap = ComplexMap & ResourceMap`;
|
|
255
|
+
const DataType = `export type DataType = keyof DataMap`;
|
|
256
|
+
const AData = `export type AData<T extends DataType> = DataMap[T];`;
|
|
257
|
+
return `${ResourceMap}\n
|
|
258
|
+
${ResourceType}\n
|
|
259
|
+
${AResource}\n
|
|
260
|
+
${ConcreteType}\n
|
|
261
|
+
${abstractResourceTypesTypescript}\n
|
|
262
|
+
${ComplexMap}\n
|
|
263
|
+
${ComplexTypes}\n
|
|
264
|
+
${DataMap}\n
|
|
265
|
+
${DataType}\n
|
|
266
|
+
${AData}`;
|
|
267
|
+
}
|
|
268
|
+
export function generateTypes(fhirVersion, structureDefinitions) {
|
|
269
|
+
const primitiveSDs = structureDefinitions.filter((sd) => sd.kind === "primitive-type" && sd.derivation !== "constraint");
|
|
270
|
+
const complexSDs = structureDefinitions
|
|
271
|
+
.filter((sd) => sd.kind === "complex-type")
|
|
272
|
+
.filter((sd) => sd.derivation !== "constraint");
|
|
273
|
+
const resourceSDs = structureDefinitions
|
|
274
|
+
.filter((sd) => sd.kind === "resource")
|
|
275
|
+
.filter((sd) => sd.derivation !== "constraint");
|
|
276
|
+
const typescriptTypes = primitiveSDs
|
|
277
|
+
.map(primitiveToTypescriptType)
|
|
278
|
+
.filter((type) => type)
|
|
279
|
+
// Generate Complex types
|
|
280
|
+
.concat(complexSDs.map(resourceOrComplexFhirToTypescript))
|
|
281
|
+
// Generate Resources
|
|
282
|
+
.concat(getNonAbstractResourceTypes(resourceSDs)
|
|
283
|
+
.map(resourceOrComplexFhirToTypescript)
|
|
284
|
+
.filter((type) => type))
|
|
285
|
+
// Generate Maps
|
|
286
|
+
.concat(generateAbstracts({ resourceSDs, complexSDs }))
|
|
287
|
+
.join("\n");
|
|
288
|
+
return typescriptTypes;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=typescript-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-types.js","sourceRoot":"","sources":["../../src/generate/typescript-types.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ElementDefinition } from "@haste-health/fhir-types/r4/types";
|
|
2
|
+
import { FHIR_VERSION, Resource } from "@haste-health/fhir-types/versions";
|
|
3
|
+
type VisitorFunction<T> = (element: ElementDefinition, children: T[], info: {
|
|
4
|
+
curIndex: number;
|
|
5
|
+
}) => T[];
|
|
6
|
+
export declare function eleIndexToChildIndices(elements: Array<ElementDefinition>, index?: number): Array<number>;
|
|
7
|
+
export declare function traversalBottomUp<T>(sd: Resource<FHIR_VERSION, "StructureDefinition">, visitorFunction: VisitorFunction<T>): T[];
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function eleIndexToChildIndices(elements, index) {
|
|
2
|
+
if (index === undefined) {
|
|
3
|
+
return eleIndexToChildIndices(elements, 0);
|
|
4
|
+
}
|
|
5
|
+
else {
|
|
6
|
+
const parent = elements[index];
|
|
7
|
+
const parentPath = parent.path;
|
|
8
|
+
const depth = (parentPath.match(/\./g) ?? []).length;
|
|
9
|
+
const parentPathEscaped = parentPath.replace(/\./g, "\\."); // Escape periods
|
|
10
|
+
const childRegex = new RegExp("^" + parentPathEscaped + "\\." + "[^\\.]+$");
|
|
11
|
+
let curIndex = index + 1;
|
|
12
|
+
const childrenIndices = [];
|
|
13
|
+
while (curIndex < elements.length &&
|
|
14
|
+
// Conform that the child is a direct child of the parent
|
|
15
|
+
(elements[curIndex]?.path?.match(/\./g) ?? []).length > depth) {
|
|
16
|
+
if (elements[curIndex].path.match(childRegex)) {
|
|
17
|
+
childrenIndices.push(curIndex);
|
|
18
|
+
}
|
|
19
|
+
curIndex++;
|
|
20
|
+
}
|
|
21
|
+
return childrenIndices;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function traversalBottomUpSdElements(elements, index, visitorFunction) {
|
|
25
|
+
const childIndices = eleIndexToChildIndices(elements, index);
|
|
26
|
+
const childTraversalValues = childIndices
|
|
27
|
+
.map((childIndex) => {
|
|
28
|
+
return traversalBottomUpSdElements(elements, childIndex, visitorFunction);
|
|
29
|
+
})
|
|
30
|
+
.flatMap((x) => x);
|
|
31
|
+
return visitorFunction(elements[index], childTraversalValues, {
|
|
32
|
+
curIndex: index,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export function traversalBottomUp(sd, visitorFunction) {
|
|
36
|
+
const elements = sd.snapshot?.element;
|
|
37
|
+
if (!elements)
|
|
38
|
+
throw new Error("StructureDefinition has no elements");
|
|
39
|
+
return traversalBottomUpSdElements(elements, 0, visitorFunction);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=sdTraversal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdTraversal.js","sourceRoot":"","sources":["../src/sdTraversal.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,sBAAsB,CACpC,QAAkC,EAClC,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,sBAAsB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACrD,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB;QAC7E,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,iBAAiB,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC;QAE5E,IAAI,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QACzB,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,OACE,QAAQ,GAAG,QAAQ,CAAC,MAAM;YAC1B,yDAAyD;YACzD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,KAAK,EAC7D,CAAC;YACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9C,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;YACD,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,QAAkC,EAClC,KAAa,EACb,eAAmC;IAEnC,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,oBAAoB,GAAmC,YAAY;SACtE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QAClB,OAAO,2BAA2B,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC,CAAC;SACD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,EAAE;QAC5D,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,EAAiD,EACjD,eAAmC;IAEnC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACtE,OAAO,2BAA2B,CAAC,QAAQ,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;AACnE,CAAC"}
|
package/lib/utilities.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilities.js","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC9B,GAA+C;IAE/C,OAAO,CACL,GAAG;QACD,yBAAyB;SACxB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,YAAY,CAAC;QAC/C,kCAAkC;SACjC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CACzC,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@haste-health/codegen",
|
|
3
|
+
"version": "0.12.1",
|
|
4
|
+
"homepage": "https://haste.health",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/HasteHealth/HasteHealth.git"
|
|
8
|
+
},
|
|
9
|
+
"description": "",
|
|
10
|
+
"type": "module",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"publish": "pnpm build && pnpm npm publish --access public --tolerate-republish"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [],
|
|
16
|
+
"author": "",
|
|
17
|
+
"license": "ISC",
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/node": "^22.15.17",
|
|
20
|
+
"typescript": "5.9.2"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@haste-health/artifacts": "workspace:^",
|
|
24
|
+
"@haste-health/fhir-types": "workspace:^",
|
|
25
|
+
"commander": "^12.1.0"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"lib/**"
|
|
29
|
+
],
|
|
30
|
+
"exports": {
|
|
31
|
+
".": "./lib/index.js",
|
|
32
|
+
"./generate/type-to-canonical": "./lib/generate/type-to-canonical.js",
|
|
33
|
+
"./generate/meta-data": "./lib/generate/meta-data.js",
|
|
34
|
+
"./generate/operation-definition": "./lib/generate/operation-definition.js",
|
|
35
|
+
"./generate/sets": "./lib/generate/sets.js",
|
|
36
|
+
"./generate/typescript-types": "./lib/generate/typescript-types.js",
|
|
37
|
+
"./traversal/structure-definition": "./lib/sdTraversal.js"
|
|
38
|
+
}
|
|
39
|
+
}
|