@haste-health/meta-value 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 +0 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/lib/interface.d.ts +21 -0
- package/lib/interface.js +2 -0
- package/lib/interface.js.map +1 -0
- package/lib/loc.d.ts +8 -0
- package/lib/loc.js +38 -0
- package/lib/loc.js.map +1 -0
- package/lib/type-to-canonical.d.ts +3 -0
- package/lib/type-to-canonical.js +14 -0
- package/lib/type-to-canonical.js.map +1 -0
- package/lib/utilities.d.ts +16 -0
- package/lib/utilities.js +64 -0
- package/lib/utilities.js.map +1 -0
- package/lib/v2/generated/meta/r4.d.ts +67328 -0
- package/lib/v2/generated/meta/r4.js +185415 -0
- package/lib/v2/generated/meta/r4.js.map +1 -0
- package/lib/v2/generated/meta/r4b.d.ts +68992 -0
- package/lib/v2/generated/meta/r4b.js +187593 -0
- package/lib/v2/generated/meta/r4b.js.map +1 -0
- package/lib/v2/generated/r4.d.ts +37567 -0
- package/lib/v2/generated/r4.js +49241 -0
- package/lib/v2/generated/r4.js.map +1 -0
- package/lib/v2/generated/r4b.d.ts +39615 -0
- package/lib/v2/generated/r4b.js +49334 -0
- package/lib/v2/generated/r4b.js.map +1 -0
- package/lib/v2/generated/type-canonical/r4.d.ts +2 -0
- package/lib/v2/generated/type-canonical/r4.js +220 -0
- package/lib/v2/generated/type-canonical/r4.js.map +1 -0
- package/lib/v2/generated/type-canonical/r4b.d.ts +2 -0
- package/lib/v2/generated/type-canonical/r4b.js +209 -0
- package/lib/v2/generated/type-canonical/r4b.js.map +1 -0
- package/lib/v2/index.d.ts +2 -0
- package/lib/v2/index.js +295 -0
- package/lib/v2/index.js.map +1 -0
- package/lib/v2/meta.d.ts +24 -0
- package/lib/v2/meta.js +89 -0
- package/lib/v2/meta.js.map +1 -0
- package/lib/v2/spoof.d.ts +25 -0
- package/lib/v2/spoof.js +160 -0
- package/lib/v2/spoof.js.map +1 -0
- package/package.json +50 -0
package/lib/v2/index.js
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { R4 } from "@haste-health/fhir-types/versions";
|
|
3
|
+
import { descendLoc } from "../loc.js";
|
|
4
|
+
import { isArray, isFPPrimitive, isObject, isPrimitiveType, toFPPrimitive, } from "../utilities.js";
|
|
5
|
+
import { getMeta, getStartingMeta, resolveMeta } from "./meta.js";
|
|
6
|
+
import { SpoofMetaValueV2 } from "./spoof.js";
|
|
7
|
+
function conversion(fhirVersion, meta, value, location) {
|
|
8
|
+
return value.map((v, i) => {
|
|
9
|
+
if (v instanceof MetaValueV2Singular)
|
|
10
|
+
return v;
|
|
11
|
+
return new MetaValueV2Singular(fhirVersion, { ...meta, cardinality: "single" }, v, [...location, i]);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
class MetaValueV2Array {
|
|
15
|
+
_value;
|
|
16
|
+
_location;
|
|
17
|
+
constructor(value, location) {
|
|
18
|
+
this._value = value;
|
|
19
|
+
this._location = location;
|
|
20
|
+
}
|
|
21
|
+
keys() {
|
|
22
|
+
throw new Error("Method not allowed on arrays.");
|
|
23
|
+
}
|
|
24
|
+
getValue() {
|
|
25
|
+
return this._value.map((v) => v.getValue());
|
|
26
|
+
}
|
|
27
|
+
isType(_type) {
|
|
28
|
+
throw new Error("Method not allowed on arrays.");
|
|
29
|
+
}
|
|
30
|
+
asType(type) {
|
|
31
|
+
if (this.isType(type)) {
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
toArray() {
|
|
37
|
+
return this._value;
|
|
38
|
+
}
|
|
39
|
+
isArray() {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
meta() {
|
|
43
|
+
const meta = this._value[0]?.meta();
|
|
44
|
+
if (meta) {
|
|
45
|
+
return {
|
|
46
|
+
...meta,
|
|
47
|
+
cardinality: "array",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
location() {
|
|
53
|
+
return this._location;
|
|
54
|
+
}
|
|
55
|
+
descend(field) {
|
|
56
|
+
return this._value[field];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function deriveFHIRPrimitives(value, element) {
|
|
60
|
+
if (value === undefined && element === undefined)
|
|
61
|
+
return undefined;
|
|
62
|
+
if (isArray(value)) {
|
|
63
|
+
return value.map((v, i) => toFPPrimitive(v, element?.[i]));
|
|
64
|
+
}
|
|
65
|
+
return toFPPrimitive(value, element);
|
|
66
|
+
}
|
|
67
|
+
class MetaValueV2Singular {
|
|
68
|
+
_value;
|
|
69
|
+
_meta;
|
|
70
|
+
_fhirVersion;
|
|
71
|
+
_location;
|
|
72
|
+
constructor(fhirVersion, meta, value, location) {
|
|
73
|
+
this._fhirVersion = fhirVersion;
|
|
74
|
+
this._meta = meta;
|
|
75
|
+
this._value = value;
|
|
76
|
+
this._location = location;
|
|
77
|
+
}
|
|
78
|
+
get _internal_meta_() {
|
|
79
|
+
return this._meta;
|
|
80
|
+
}
|
|
81
|
+
getValue() {
|
|
82
|
+
if (isFPPrimitive(this._value)) {
|
|
83
|
+
return this._value.value;
|
|
84
|
+
}
|
|
85
|
+
return this._value;
|
|
86
|
+
}
|
|
87
|
+
keys() {
|
|
88
|
+
if ("properties" in this._meta) {
|
|
89
|
+
return Object.keys(this._meta.properties ?? {});
|
|
90
|
+
}
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
meta() {
|
|
94
|
+
return {
|
|
95
|
+
type: this._meta.type,
|
|
96
|
+
fhirVersion: this._fhirVersion,
|
|
97
|
+
cardinality: this._meta.cardinality,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
isArray() {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
asType(type) {
|
|
104
|
+
if (this.isType(type)) {
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
isType(type) {
|
|
110
|
+
switch (true) {
|
|
111
|
+
case type === "Resource" || type === "DomainResource": {
|
|
112
|
+
return this.getValue().resourceType !== undefined;
|
|
113
|
+
}
|
|
114
|
+
case this.meta()?.type === "Reference" && type !== "Reference": {
|
|
115
|
+
return this.getValue().reference?.split("/")[0] === type;
|
|
116
|
+
}
|
|
117
|
+
default: {
|
|
118
|
+
return this.meta()?.type === type;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
location() {
|
|
123
|
+
return this._location;
|
|
124
|
+
}
|
|
125
|
+
descend(_field) {
|
|
126
|
+
const unresolvedMeta = getMeta(this._fhirVersion, this._meta, _field);
|
|
127
|
+
if (!unresolvedMeta)
|
|
128
|
+
return undefined;
|
|
129
|
+
const nextMeta = resolveMeta(this._fhirVersion, unresolvedMeta, this._value, _field);
|
|
130
|
+
if (!nextMeta?.meta)
|
|
131
|
+
return undefined;
|
|
132
|
+
switch (true) {
|
|
133
|
+
case isPrimitiveType(this._fhirVersion, nextMeta.meta.type):
|
|
134
|
+
{
|
|
135
|
+
const value = this._value?.[nextMeta.field];
|
|
136
|
+
const element = this._value?.[`_${nextMeta.field}`];
|
|
137
|
+
switch (true) {
|
|
138
|
+
case value === undefined && element === undefined: {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
case nextMeta.meta.cardinality === "array": {
|
|
142
|
+
return new MetaValueV2Array(conversion(this._fhirVersion, nextMeta.meta, [
|
|
143
|
+
...new Array(Math.max(value?.length ?? 0, element?.length ?? 0)),
|
|
144
|
+
].map((_z, i) => toFPPrimitive(value?.[i], element?.[i])), descendLoc(this, nextMeta.field)), descendLoc(this, nextMeta.field));
|
|
145
|
+
}
|
|
146
|
+
default: {
|
|
147
|
+
return new MetaValueV2Singular(this._fhirVersion, nextMeta.meta, toFPPrimitive(value, element), descendLoc(this, nextMeta.field));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
default: {
|
|
152
|
+
const value = this._value?.[nextMeta.field];
|
|
153
|
+
switch (true) {
|
|
154
|
+
case value === undefined: {
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
case nextMeta.meta.cardinality === "array": {
|
|
158
|
+
return new MetaValueV2Array(conversion(this._fhirVersion, nextMeta.meta, this._value?.[nextMeta.field] ?? [], descendLoc(this, nextMeta.field)), descendLoc(this, nextMeta.field));
|
|
159
|
+
}
|
|
160
|
+
default: {
|
|
161
|
+
return new MetaValueV2Singular(this._fhirVersion, nextMeta.meta, this._value?.[nextMeta.field], descendLoc(this, nextMeta.field));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
class NonMetaValue {
|
|
169
|
+
_value;
|
|
170
|
+
_fhirVersion;
|
|
171
|
+
_location;
|
|
172
|
+
constructor(fhirVersion, value, location) {
|
|
173
|
+
this._value = value;
|
|
174
|
+
this._fhirVersion = fhirVersion;
|
|
175
|
+
this._location = location;
|
|
176
|
+
}
|
|
177
|
+
meta() {
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
isType(type) {
|
|
181
|
+
if (type === "Resource" || type === "DomainResource") {
|
|
182
|
+
return this.getValue().resourceType !== undefined;
|
|
183
|
+
}
|
|
184
|
+
return (this.getValue()?.resourceType ===
|
|
185
|
+
type);
|
|
186
|
+
}
|
|
187
|
+
keys() {
|
|
188
|
+
if (isObject(this._value)) {
|
|
189
|
+
return Object.keys(this._value);
|
|
190
|
+
}
|
|
191
|
+
return [];
|
|
192
|
+
}
|
|
193
|
+
getValue() {
|
|
194
|
+
return this._value;
|
|
195
|
+
}
|
|
196
|
+
toArray() {
|
|
197
|
+
if (this.isArray()) {
|
|
198
|
+
return this._value?.map((v, i) => {
|
|
199
|
+
return new NonMetaValue(this._fhirVersion, v, [...this._location, i]);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
return [this];
|
|
203
|
+
}
|
|
204
|
+
asType(type) {
|
|
205
|
+
if (this.isType(type)) {
|
|
206
|
+
return this;
|
|
207
|
+
}
|
|
208
|
+
return undefined;
|
|
209
|
+
}
|
|
210
|
+
isArray() {
|
|
211
|
+
return isArray(this._value);
|
|
212
|
+
}
|
|
213
|
+
location() {
|
|
214
|
+
return this._location;
|
|
215
|
+
}
|
|
216
|
+
descend(field) {
|
|
217
|
+
const value = this._value?.[field];
|
|
218
|
+
switch (true) {
|
|
219
|
+
// When we can with primitives set them to a type.
|
|
220
|
+
case this._value?.[`_${field}`] !== undefined: {
|
|
221
|
+
const fpPrimitive = deriveFHIRPrimitives(value, this._value?.[`_${field}`]);
|
|
222
|
+
if (Array.isArray(fpPrimitive)) {
|
|
223
|
+
return new MetaValueV2Array(conversion(R4, getStartingMeta(R4, "Element"), fpPrimitive, descendLoc(this, field.toString())), descendLoc(this, field.toString()));
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
return new MetaValueV2Singular(R4, {
|
|
227
|
+
...getStartingMeta(R4, "Element"),
|
|
228
|
+
cardinality: "single",
|
|
229
|
+
}, fpPrimitive, descendLoc(this, field.toString()));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
case value === undefined: {
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
default: {
|
|
236
|
+
// Should handle array for type determination?
|
|
237
|
+
const type = attemptDetermineType(value);
|
|
238
|
+
const loc = descendLoc(this, field.toString());
|
|
239
|
+
if (type) {
|
|
240
|
+
const meta = getStartingMeta(R4, type);
|
|
241
|
+
if (isArray(value)) {
|
|
242
|
+
return new MetaValueV2Array(conversion(R4, meta, value, loc), loc);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
return new MetaValueV2Singular(R4, meta, value, loc);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
return new NonMetaValue(this._fhirVersion, value, loc);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function attemptDetermineType(value) {
|
|
256
|
+
if (isObject(value) && typeof value.resourceType === "string") {
|
|
257
|
+
return value.resourceType;
|
|
258
|
+
}
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
export function metaValue(metaOptions = { fhirVersion: R4 }, value, location = []) {
|
|
262
|
+
let { type, fhirVersion } = metaOptions;
|
|
263
|
+
if (!fhirVersion) {
|
|
264
|
+
fhirVersion = R4;
|
|
265
|
+
}
|
|
266
|
+
switch (true) {
|
|
267
|
+
case value === undefined: {
|
|
268
|
+
return undefined;
|
|
269
|
+
}
|
|
270
|
+
case value instanceof SpoofMetaValueV2 ||
|
|
271
|
+
value instanceof MetaValueV2Array ||
|
|
272
|
+
value instanceof MetaValueV2Singular:
|
|
273
|
+
{
|
|
274
|
+
return value;
|
|
275
|
+
}
|
|
276
|
+
default: {
|
|
277
|
+
// Assign a type automatically if the value is a resourceType
|
|
278
|
+
if (isArray(value)) {
|
|
279
|
+
return new MetaValueV2Array(value.map((v, i) => metaValue(metaOptions, v, [
|
|
280
|
+
...location,
|
|
281
|
+
i,
|
|
282
|
+
])), location);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
type = type ?? attemptDetermineType(value);
|
|
286
|
+
const meta = getStartingMeta(fhirVersion, type);
|
|
287
|
+
if (meta === undefined || type === undefined) {
|
|
288
|
+
return new NonMetaValue(fhirVersion, value, location);
|
|
289
|
+
}
|
|
290
|
+
return new MetaValueV2Singular(fhirVersion, meta, value, location);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"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"}
|
package/lib/v2/meta.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ContentReferenceNode, ElementNode, FPPrimitiveNode, MetaNode, TypeChoiceNode, TypeNode } from "@haste-health/codegen/generate/meta-data";
|
|
2
|
+
import { uri } from "@haste-health/fhir-types/r4/types";
|
|
3
|
+
import { FHIR_VERSION } from "@haste-health/fhir-types/versions";
|
|
4
|
+
import { FHIRPathPrimitive as FHIRPrimitive, RawPrimitive } from "../utilities.js";
|
|
5
|
+
export { MetaNode, ElementNode, TypeNode, TypeChoiceNode };
|
|
6
|
+
export declare function getStartingMeta(fhirVersion: FHIR_VERSION, type: uri): ElementNode | FPPrimitiveNode | undefined;
|
|
7
|
+
export declare function getMeta(fhirVersion: FHIR_VERSION, meta: ElementNode | FPPrimitiveNode, field: string): ElementNode | TypeNode | TypeChoiceNode | undefined;
|
|
8
|
+
export declare function resolveTypeNode(fhirVersion: FHIR_VERSION, meta: TypeNode | TypeChoiceNode, type: uri, field: string): {
|
|
9
|
+
field: string;
|
|
10
|
+
base: uri;
|
|
11
|
+
meta: {
|
|
12
|
+
cardinality: "single" | "array";
|
|
13
|
+
_type_: "primitive-type" | "complex-type" | "resource";
|
|
14
|
+
type: uri;
|
|
15
|
+
definition: import("@haste-health/fhir-types/versions").Data<FHIR_VERSION, "ElementDefinition">;
|
|
16
|
+
properties: Record<string, number>;
|
|
17
|
+
base: uri;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare function resolveContentReference(fhirVersion: FHIR_VERSION, meta: ContentReferenceNode): MetaNode;
|
|
21
|
+
export declare function resolveMeta<T>(fhirVersion: FHIR_VERSION, meta: MetaNode, value: T | FHIRPrimitive<RawPrimitive>, field: string): {
|
|
22
|
+
meta: ElementNode;
|
|
23
|
+
field: string;
|
|
24
|
+
} | undefined;
|
package/lib/v2/meta.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { R4, R4B } from "@haste-health/fhir-types/versions";
|
|
2
|
+
import { isObject, } from "../utilities.js";
|
|
3
|
+
import _r4Meta from "./generated/meta/r4.js";
|
|
4
|
+
import _r4bMeta from "./generated/meta/r4b.js";
|
|
5
|
+
const R4_META = _r4Meta;
|
|
6
|
+
const R4B_META = _r4bMeta;
|
|
7
|
+
function getGlobalMeta(fhirVersion) {
|
|
8
|
+
switch (fhirVersion) {
|
|
9
|
+
case R4:
|
|
10
|
+
return R4_META;
|
|
11
|
+
case R4B:
|
|
12
|
+
return R4B_META;
|
|
13
|
+
default:
|
|
14
|
+
throw new Error(`Unsupported FHIR version: ${fhirVersion}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function getStartingMeta(fhirVersion, type) {
|
|
18
|
+
return getGlobalMeta(fhirVersion)[type]?.[0];
|
|
19
|
+
}
|
|
20
|
+
export function getMeta(fhirVersion, meta, field) {
|
|
21
|
+
if (meta._type_ === "fp-primitive")
|
|
22
|
+
return undefined;
|
|
23
|
+
const globalMeta = getGlobalMeta(fhirVersion);
|
|
24
|
+
const fieldIndex = meta.properties?.[field];
|
|
25
|
+
if (!fieldIndex) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
return globalMeta[meta.base][fieldIndex];
|
|
29
|
+
}
|
|
30
|
+
export function resolveTypeNode(fhirVersion, meta, type, field) {
|
|
31
|
+
return {
|
|
32
|
+
field,
|
|
33
|
+
base: type,
|
|
34
|
+
meta: {
|
|
35
|
+
...getStartingMeta(fhirVersion, type),
|
|
36
|
+
cardinality: meta.cardinality,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function resolveResourceType(fhirVersion, meta, value, field) {
|
|
41
|
+
const type = isObject(value) && isObject(value?.[field])
|
|
42
|
+
? value?.[field].resourceType
|
|
43
|
+
: meta.type;
|
|
44
|
+
return resolveTypeNode(fhirVersion, meta, type, field);
|
|
45
|
+
}
|
|
46
|
+
export function resolveContentReference(fhirVersion, meta) {
|
|
47
|
+
return getGlobalMeta(fhirVersion)[meta.base][meta.reference];
|
|
48
|
+
}
|
|
49
|
+
export function resolveMeta(fhirVersion, meta, value, field) {
|
|
50
|
+
switch (true) {
|
|
51
|
+
case meta === undefined: {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
case meta._type_ === "type": {
|
|
55
|
+
// Special handling for Bundle.entry.resource which is abstract Resource;
|
|
56
|
+
// Descend into the resourceType field to get the actual type.
|
|
57
|
+
if (meta.type === "Resource" || meta.type === "DomainResource") {
|
|
58
|
+
return resolveResourceType(fhirVersion, meta, value, field);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return resolveTypeNode(fhirVersion, meta, meta.type, field);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
case meta._type_ === "typechoice": {
|
|
65
|
+
for (const typeChoiceField of Object.keys(meta.fieldsToType)) {
|
|
66
|
+
if (value?.[typeChoiceField] !== undefined) {
|
|
67
|
+
return resolveTypeNode(fhirVersion, meta, meta.fieldsToType[typeChoiceField], typeChoiceField);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
case meta._type_ === "content-reference": {
|
|
73
|
+
const nextMeta = resolveMeta(fhirVersion, resolveContentReference(fhirVersion, meta), value, field);
|
|
74
|
+
if (!nextMeta)
|
|
75
|
+
throw new Error(`Could not derive meta from content-reference '${meta.definition.path}'`);
|
|
76
|
+
return nextMeta;
|
|
77
|
+
}
|
|
78
|
+
case meta._type_ === "complex-type":
|
|
79
|
+
case meta._type_ === "resource":
|
|
80
|
+
case meta._type_ === "primitive-type": {
|
|
81
|
+
return { meta, field };
|
|
82
|
+
}
|
|
83
|
+
default: {
|
|
84
|
+
// @ts-ignore
|
|
85
|
+
throw new Error(`Unknown meta type: ${meta._type_}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/v2/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { FPPrimitiveNode } from "@haste-health/codegen/generate/meta-data";
|
|
2
|
+
import { uri } from "@haste-health/fhir-types/lib/generated/r4/types";
|
|
3
|
+
import { FHIR_VERSION } from "@haste-health/fhir-types/versions";
|
|
4
|
+
import { IMetaValue, IMetaValueArray, Location, TypeInfo } from "../interface.js";
|
|
5
|
+
import { ElementNode, TypeChoiceNode } from "./meta.js";
|
|
6
|
+
export declare function isResourceType(version: FHIR_VERSION, type: string): boolean;
|
|
7
|
+
export declare class SpoofMetaValueV2<T> implements IMetaValue<T> {
|
|
8
|
+
private readonly _fhirVersion;
|
|
9
|
+
private readonly _meta;
|
|
10
|
+
private readonly _nestedCardinality;
|
|
11
|
+
constructor(fhirVersion: FHIR_VERSION, fullCardinality: "single" | "array", meta: ElementNode | TypeChoiceNode | FPPrimitiveNode);
|
|
12
|
+
cardinality(): "single" | "array";
|
|
13
|
+
isTypeChoice(): boolean;
|
|
14
|
+
types(): TypeInfo[] | undefined;
|
|
15
|
+
meta(): TypeInfo | undefined;
|
|
16
|
+
getValue(): T;
|
|
17
|
+
isArray(): this is IMetaValueArray<T>;
|
|
18
|
+
toArray(): IMetaValue<T>[];
|
|
19
|
+
location(): Location | undefined;
|
|
20
|
+
asType(type: string): IMetaValue<undefined> | undefined;
|
|
21
|
+
isType(type: string): boolean;
|
|
22
|
+
descend(field: string | number): IMetaValue<unknown> | undefined;
|
|
23
|
+
keys(): (string | number)[];
|
|
24
|
+
}
|
|
25
|
+
export default function spoof(fhirVersion: FHIR_VERSION, type: uri): IMetaValue<undefined>;
|
package/lib/v2/spoof.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import * as r4sets from "@haste-health/fhir-types/r4/sets";
|
|
2
|
+
import * as r4bsets from "@haste-health/fhir-types/r4b/sets";
|
|
3
|
+
import { R4, R4B } from "@haste-health/fhir-types/versions";
|
|
4
|
+
import { getMeta, getStartingMeta, resolveContentReference, resolveTypeNode, } from "./meta.js";
|
|
5
|
+
function resolve(fhirVersion, meta, field) {
|
|
6
|
+
switch (meta._type_) {
|
|
7
|
+
case "content-reference": {
|
|
8
|
+
return resolve(fhirVersion, resolveContentReference(fhirVersion, meta), field);
|
|
9
|
+
}
|
|
10
|
+
case "type": {
|
|
11
|
+
return resolveTypeNode(fhirVersion, meta, meta.type, field);
|
|
12
|
+
}
|
|
13
|
+
case "typechoice":
|
|
14
|
+
case "resource":
|
|
15
|
+
case "primitive-type":
|
|
16
|
+
case "complex-type": {
|
|
17
|
+
return { meta, field };
|
|
18
|
+
}
|
|
19
|
+
case "fp-primitive":
|
|
20
|
+
default: {
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
throw new Error(`Unknown meta type: ${meta._type_}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function descendMeta(fhirVersion, meta, field) {
|
|
27
|
+
const nextMeta = getMeta(fhirVersion, meta, field);
|
|
28
|
+
if (nextMeta === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
return resolve(fhirVersion, nextMeta, field);
|
|
31
|
+
}
|
|
32
|
+
export function isResourceType(version, type) {
|
|
33
|
+
switch (version) {
|
|
34
|
+
case R4: {
|
|
35
|
+
return r4sets.resourceTypes.has(type);
|
|
36
|
+
}
|
|
37
|
+
case R4B: {
|
|
38
|
+
return r4bsets.resourceTypes.has(type);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export class SpoofMetaValueV2 {
|
|
43
|
+
_fhirVersion;
|
|
44
|
+
_meta;
|
|
45
|
+
_nestedCardinality;
|
|
46
|
+
constructor(fhirVersion, fullCardinality, meta) {
|
|
47
|
+
this._fhirVersion = fhirVersion;
|
|
48
|
+
this._meta = meta;
|
|
49
|
+
this._nestedCardinality = fullCardinality;
|
|
50
|
+
}
|
|
51
|
+
cardinality() {
|
|
52
|
+
return this._nestedCardinality;
|
|
53
|
+
}
|
|
54
|
+
isTypeChoice() {
|
|
55
|
+
if (this._meta._type_ === "typechoice") {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
types() {
|
|
61
|
+
if (this._meta._type_ === "typechoice") {
|
|
62
|
+
return Object.values(this._meta.fieldsToType).map((type) => {
|
|
63
|
+
return {
|
|
64
|
+
type: type,
|
|
65
|
+
fhirVersion: this._fhirVersion,
|
|
66
|
+
cardinality: this._meta.cardinality,
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const meta = this.meta();
|
|
71
|
+
return meta ? [meta] : undefined;
|
|
72
|
+
}
|
|
73
|
+
meta() {
|
|
74
|
+
if (this._meta._type_ === "typechoice") {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
type: this._meta.type,
|
|
79
|
+
fhirVersion: this._fhirVersion,
|
|
80
|
+
cardinality: this._meta.cardinality,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
getValue() {
|
|
84
|
+
return {};
|
|
85
|
+
}
|
|
86
|
+
isArray() {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
toArray() {
|
|
90
|
+
return [this];
|
|
91
|
+
}
|
|
92
|
+
location() {
|
|
93
|
+
throw new Error("Method not implemented.");
|
|
94
|
+
}
|
|
95
|
+
asType(type) {
|
|
96
|
+
if (this.isType(type)) {
|
|
97
|
+
const nextMeta = getStartingMeta(this._fhirVersion, type);
|
|
98
|
+
if (!nextMeta)
|
|
99
|
+
return undefined;
|
|
100
|
+
return new SpoofMetaValueV2(this._fhirVersion, this._nestedCardinality, nextMeta);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
isType(type) {
|
|
104
|
+
switch (this._meta._type_) {
|
|
105
|
+
case "resource": {
|
|
106
|
+
// Special Handle for Resource + Domain Resource Type.
|
|
107
|
+
if (this._meta.type === "Resource" ||
|
|
108
|
+
this._meta.type === "DomainResource") {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return this._meta.type === type;
|
|
112
|
+
}
|
|
113
|
+
case "typechoice": {
|
|
114
|
+
return Object.values(this._meta.fieldsToType).includes(type);
|
|
115
|
+
}
|
|
116
|
+
case "fp-primitive":
|
|
117
|
+
case "primitive-type":
|
|
118
|
+
case "complex-type": {
|
|
119
|
+
return this._meta.type === type;
|
|
120
|
+
}
|
|
121
|
+
default: {
|
|
122
|
+
// @ts-ignore
|
|
123
|
+
throw new Error(`Unknown meta type: ${this._meta._type_}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
descend(field) {
|
|
128
|
+
if (this._meta._type_ === "typechoice") {
|
|
129
|
+
throw new Error("Cannot descend on a type choice");
|
|
130
|
+
}
|
|
131
|
+
if (this._meta._type_ === "fp-primitive") {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
if (typeof field === "number") {
|
|
135
|
+
if (this._meta.cardinality !== "array")
|
|
136
|
+
return undefined;
|
|
137
|
+
return new SpoofMetaValueV2(this._fhirVersion, this._nestedCardinality, {
|
|
138
|
+
...this._meta,
|
|
139
|
+
cardinality: "single",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const nextMeta = descendMeta(this._fhirVersion, this._meta, field);
|
|
143
|
+
if (!nextMeta?.meta)
|
|
144
|
+
return undefined;
|
|
145
|
+
return new SpoofMetaValueV2(this._fhirVersion,
|
|
146
|
+
// If descending a field from an array that means full cardinality must be array.
|
|
147
|
+
nextMeta.meta.cardinality === "array" ? "array" : this._nestedCardinality, nextMeta.meta);
|
|
148
|
+
}
|
|
149
|
+
keys() {
|
|
150
|
+
throw new Error("Method not implemented.");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export default function spoof(fhirVersion, type) {
|
|
154
|
+
const meta = getStartingMeta(fhirVersion, type);
|
|
155
|
+
if (!meta) {
|
|
156
|
+
throw new Error(`No meta found for ${type}`);
|
|
157
|
+
}
|
|
158
|
+
return new SpoofMetaValueV2(fhirVersion, "single", meta);
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=spoof.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spoof.js","sourceRoot":"","sources":["../../src/v2/spoof.ts"],"names":[],"mappings":"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"}
|