@haste-health/operation-execution 0.14.3

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 ADDED
@@ -0,0 +1 @@
1
+ # operation_execution
package/lib/index.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ import { OperationDefinition, OperationOutcomeIssue, Parameters, Resource, code } from "@haste-health/fhir-types/r4/types";
2
+ import type { ValidationCTX } from "@haste-health/fhir-validation/types";
3
+ type ParameterDefinitions = NonNullable<OperationDefinition["parameter"]>;
4
+ export declare function mapToParameter(definition: NonNullable<ParameterDefinitions[number]>, use: "out" | "in", valueMap: any): NonNullable<Parameters["parameter"]>;
5
+ export declare function toParametersResource(operationDefinition: OperationDefinition, use: "out" | "in", value: Record<string, unknown>): Parameters;
6
+ export declare function parseParameters(operationDefinition: OperationDefinition, use: "out" | "in", parameters: Parameters): Record<string, unknown>;
7
+ type InputOutput<I, O> = {
8
+ in: I;
9
+ out: O;
10
+ };
11
+ export declare function isParameters(input: unknown): input is Parameters;
12
+ export interface OpCTX extends ValidationCTX {
13
+ level: "system" | "type" | "instance";
14
+ }
15
+ export interface IOperation<I, O> {
16
+ code: code;
17
+ get operationDefinition(): OperationDefinition;
18
+ parseToObject<Use extends "in" | "out">(use: Use, input: unknown): InputOutput<I, O>[Use];
19
+ parseToParameters<Use extends "in" | "out">(use: Use, input: InputOutput<I, O>[Use]): Parameters | I | O;
20
+ validate<Use extends "in" | "out">(ctx: OpCTX, use: Use, value: unknown): Promise<OperationOutcomeIssue[]>;
21
+ }
22
+ export type Executor<CTX, I, O> = (ctx: CTX, input: I) => Promise<O>;
23
+ export type OPMetadata<O> = O extends IOperation<infer Input, infer Output> ? {
24
+ Input: Input;
25
+ Output: Output;
26
+ } : never;
27
+ export declare class Operation<I, O> implements IOperation<I, O> {
28
+ private _operationDefinition;
29
+ code: code;
30
+ constructor(operationDefinition: OperationDefinition);
31
+ get operationDefinition(): OperationDefinition;
32
+ parseToObject<Use extends "in" | "out">(use: Use, passedInInput: Parameters | Resource): InputOutput<I, O>[Use];
33
+ parseToParameters(use: "in" | "out", input: I | O): Parameters | I | O;
34
+ validate<Use extends "in" | "out">(ctx: OpCTX, use: Use, value: unknown): Promise<OperationOutcomeIssue[]>;
35
+ }
36
+ export type Invocation = <T extends IOperation<unknown, unknown>, CTX extends OpCTX>(op: T, ctx: CTX, input: OPMetadata<T>["Input"]) => Promise<OPMetadata<T>["Output"]>;
37
+ export {};
package/lib/index.js ADDED
@@ -0,0 +1,301 @@
1
+ import { descend, typedPointer } from "@haste-health/fhir-pointer";
2
+ import { resourceTypes } from "@haste-health/fhir-types/r4/sets";
3
+ import validate from "@haste-health/fhir-validation";
4
+ import { OperationError, issueError, outcomeError, } from "@haste-health/operation-outcomes";
5
+ function capitalize(string) {
6
+ return string.charAt(0).toUpperCase() + string.slice(1);
7
+ }
8
+ export function mapToParameter(definition, use, valueMap) {
9
+ const isArray = definition.max !== "1";
10
+ let value = valueMap[definition.name];
11
+ if (value === undefined || value === null)
12
+ return [];
13
+ if (!isArray)
14
+ value = [value];
15
+ if (isArray && !Array.isArray(value))
16
+ value = [value];
17
+ const params = value.map((value) => {
18
+ if (definition.type) {
19
+ if (definition.type === "Type")
20
+ throw new Error("Cannot process 'Type'");
21
+ if (definition.type === "Any" || resourceTypes.has(definition.type)) {
22
+ return { name: definition.name, resource: value };
23
+ }
24
+ const fieldName = `value${capitalize(definition.type || "")}`;
25
+ return {
26
+ name: definition.name,
27
+ [fieldName]: value,
28
+ };
29
+ }
30
+ else {
31
+ if (!definition.part)
32
+ throw new OperationError(outcomeError("invalid", `No type or part found on parameter definition ${definition.name}`));
33
+ }
34
+ return {
35
+ name: definition.name,
36
+ part: definition.part
37
+ .map((partDefinition) => {
38
+ return mapToParameter(partDefinition, use, value);
39
+ })
40
+ .flat(),
41
+ };
42
+ });
43
+ return params;
44
+ }
45
+ export function toParametersResource(operationDefinition, use, value) {
46
+ const definitions = operationDefinition.parameter?.filter((param) => param.use === use) || [];
47
+ const parameters = {
48
+ resourceType: "Parameters",
49
+ parameter: definitions
50
+ .map((definition) => mapToParameter(definition, use, value))
51
+ .flat(),
52
+ };
53
+ return parameters;
54
+ }
55
+ function validateNoExtraFields(definitions, use, parameters) {
56
+ const definitionNames = new Set(definitions
57
+ .filter((d) => d.use === use)
58
+ .map((definition) => definition.name));
59
+ const paramNames = new Set(parameters.map((param) => param.name));
60
+ paramNames.forEach((paramName) => {
61
+ if (!definitionNames.has(paramName)) {
62
+ throw new OperationError(outcomeError("invalid", `Parameter '${paramName}' not supported`));
63
+ }
64
+ });
65
+ }
66
+ function parseParameter(definition, use, parameters) {
67
+ const isRequired = definition.min > 1;
68
+ const isArray = definition.max !== "1";
69
+ const parsedParameters = parameters
70
+ .map((param) => {
71
+ if (definition.type || definition.searchType) {
72
+ if (definition.type === "Any" ||
73
+ resourceTypes.has(definition.type || "")) {
74
+ return param.resource;
75
+ }
76
+ else {
77
+ if (!definition.type) {
78
+ throw new OperationError(outcomeError("invalid", `No type found on parameter definition ${definition.name}`));
79
+ }
80
+ // if (definition.searchType)
81
+ // throw new OperationError(
82
+ // outcomeError("not-supported", `SearchType not supported`)
83
+ // );
84
+ if (definition.type === "Type")
85
+ throw new Error("Cannot process 'Type'");
86
+ // @ts-ignore
87
+ return param[`value${capitalize(definition.type || "")}`];
88
+ }
89
+ // Means this is a primitive
90
+ }
91
+ else {
92
+ if (!definition.part)
93
+ throw new OperationError(outcomeError("invalid", `No type or part found on parameter definition ${definition.name}`));
94
+ validateNoExtraFields(definition.part, use, param.part || []);
95
+ return (definition.part || []).reduce((acc, paramDefinition) => {
96
+ const parsedParam = parseParameter(paramDefinition, use, (param.part || []).filter((param) => param.name === paramDefinition.name));
97
+ if (parsedParam !== undefined)
98
+ acc[paramDefinition.name] = parsedParam;
99
+ return acc;
100
+ }, {});
101
+ }
102
+ })
103
+ .filter((v) => v !== undefined);
104
+ if (isRequired && parsedParameters.length === 0)
105
+ throw new OperationError(outcomeError("required", `Missing required parameter ${definition.name}`));
106
+ if (definition.max !== "*" &&
107
+ parsedParameters.length > parseInt(definition.max)) {
108
+ throw new OperationError(outcomeError("too-costly", `Too many parameters ${definition.name}`));
109
+ }
110
+ if (!isArray) {
111
+ return parsedParameters[0];
112
+ }
113
+ return parsedParameters.length > 0 ? parsedParameters : undefined;
114
+ }
115
+ export function parseParameters(operationDefinition, use, parameters) {
116
+ const paramDefinitions = operationDefinition.parameter?.filter((param) => param.use === use) || [];
117
+ validateNoExtraFields(paramDefinitions, use, parameters.parameter || []);
118
+ const parametersParsed = paramDefinitions.reduce((parametersParsed, parameterDefinition) => {
119
+ const curParameters = parameters.parameter?.filter((param) => param.name === parameterDefinition.name) || [];
120
+ const parsedParam = parseParameter(parameterDefinition, use, curParameters);
121
+ if (parsedParam !== undefined) {
122
+ parametersParsed[parameterDefinition.name] = parsedParam;
123
+ }
124
+ return parametersParsed;
125
+ }, {});
126
+ return parametersParsed;
127
+ }
128
+ export function isParameters(input) {
129
+ return (Object.prototype.hasOwnProperty.call(input, "resourceType") &&
130
+ input.resourceType === "Parameters");
131
+ }
132
+ function isRecord(input) {
133
+ return typeof input === "object" && input !== null;
134
+ }
135
+ function validateRequired(definitions, value) {
136
+ return definitions
137
+ .filter((d) => d.min > 0)
138
+ .reduce((issues, definition) => {
139
+ if (!(definition.name in value))
140
+ return [
141
+ ...issues,
142
+ issueError("required", `Missing required parameter '${definition.name}'`),
143
+ ];
144
+ return issues;
145
+ }, []);
146
+ }
147
+ function validateCardinalities(definition, value) {
148
+ if (definition.min > value.length)
149
+ throw new OperationError(outcomeError("required", `Must have '${definition.min}' minimum for field ${definition.min}`));
150
+ if (definition.max !== "*" && value.length > parseInt(definition.max)) {
151
+ throw new OperationError(outcomeError("too-costly", `Too many parameters ${definition.name}`));
152
+ }
153
+ }
154
+ async function validateParameter(ctx, paramDefinition, use, value) {
155
+ let arr = (value = Array.isArray(value) ? value : [value]);
156
+ validateCardinalities(paramDefinition, value);
157
+ let issues = [];
158
+ for (const index in arr) {
159
+ if (paramDefinition.type) {
160
+ const type = paramDefinition.type === "Any" ||
161
+ paramDefinition.type === "Resource" ||
162
+ paramDefinition.type === "DomainResource"
163
+ ? arr[index].resourceType
164
+ : paramDefinition.type;
165
+ issues = [
166
+ ...issues,
167
+ ...(await validate(ctx, type, arr, descend(typedPointer(), index))),
168
+ ];
169
+ }
170
+ else {
171
+ if (!paramDefinition.part) {
172
+ issues = [
173
+ ...issues,
174
+ issueError("invalid", `Invalid definition '${paramDefinition.name}' must have either part or type`),
175
+ ];
176
+ }
177
+ else {
178
+ issues = [
179
+ ...issues,
180
+ ...validateRequired(paramDefinition.part, arr[index]),
181
+ ];
182
+ for (const part of paramDefinition.part) {
183
+ if (!isRecord(arr[index])) {
184
+ issues = [
185
+ ...issues,
186
+ issueError("invalid", `Parameter ${part.name} must be an object found: '${arr[index]}'`),
187
+ ];
188
+ }
189
+ issues = [
190
+ ...issues,
191
+ ...(await validateParameter(ctx, part, use, arr[index][part.name])),
192
+ ];
193
+ }
194
+ }
195
+ }
196
+ }
197
+ return issues;
198
+ }
199
+ async function validateParameters(ctx, op, use, value) {
200
+ let issues = [];
201
+ const definitions = (op.operationDefinition.parameter || []).filter((p) => p.use === use);
202
+ const parameterName = use === "in" ? "input" : "output";
203
+ if (!isRecord(value))
204
+ return [
205
+ ...issues,
206
+ issueError("invalid", `Invalid ${parameterName}: Must be an object but instead is '${value === null ? "null" : typeof value}'`),
207
+ ];
208
+ issues = [...issues, ...validateRequired(definitions, value)];
209
+ for (const key of Object.keys(value)) {
210
+ const paramDefinition = definitions.find((d) => d.name === key);
211
+ if (paramDefinition === undefined) {
212
+ issues = [
213
+ ...issues,
214
+ issueError("invalid", `Invalid ${parameterName}: '${key}' not found in definition`),
215
+ ];
216
+ }
217
+ else {
218
+ issues = [
219
+ ...issues,
220
+ ...(await validateParameter(ctx, paramDefinition, use, value[key])),
221
+ ];
222
+ }
223
+ }
224
+ return issues;
225
+ }
226
+ function isStrictlyReturn(op) {
227
+ const outputParameters = op.parameter?.filter((p) => p.use === "out") || [];
228
+ if (outputParameters.length === 1) {
229
+ return (outputParameters[0].name === "return" &&
230
+ outputParameters[0].max === "1" &&
231
+ outputParameters[0].min === 1 &&
232
+ (outputParameters[0].type === "Any" ||
233
+ resourceTypes.has(outputParameters[0].type || "")));
234
+ }
235
+ return false;
236
+ }
237
+ /**
238
+ * If, when invoking the operation, there is exactly one input parameter of type Resource (irrespective of whether other possible parameters are defined), that the operation can also be executed by a POST with that resource as the body of the request (and no parameters on the url).
239
+ * @param op OperationDefinition
240
+ */
241
+ function singleResource(op, type) {
242
+ const foundName = op.parameter?.filter((p) => p.type === type || p.type === "Resource" || p.type === "DomainResource");
243
+ if (foundName?.length !== 1)
244
+ return undefined;
245
+ return foundName[0].name;
246
+ }
247
+ export class Operation {
248
+ _operationDefinition;
249
+ code;
250
+ constructor(operationDefinition) {
251
+ this.code = operationDefinition.code;
252
+ this._operationDefinition = operationDefinition;
253
+ }
254
+ get operationDefinition() {
255
+ return this._operationDefinition;
256
+ }
257
+ parseToObject(use, passedInInput) {
258
+ let input = passedInInput;
259
+ if (use === "out" &&
260
+ !isParameters(input) &&
261
+ isStrictlyReturn(this.operationDefinition)) {
262
+ return input;
263
+ }
264
+ // Allow for single resource input.
265
+ if (use === "in" &&
266
+ input.resourceType !== "Parameters" &&
267
+ resourceTypes.has(input.resourceType)) {
268
+ const fieldName = singleResource(this.operationDefinition, input.resourceType);
269
+ if (fieldName) {
270
+ return {
271
+ [fieldName]: input,
272
+ };
273
+ }
274
+ throw new OperationError(outcomeError("invalid", "Invalid input, input must be a Parameters"));
275
+ }
276
+ else if (!isParameters(input)) {
277
+ throw new OperationError(outcomeError("invalid", "Invalid input, input must be a Parameters"));
278
+ }
279
+ const output = parseParameters(this._operationDefinition, use, input);
280
+ return output;
281
+ }
282
+ parseToParameters(use, input) {
283
+ if (use === "out" &&
284
+ !isParameters(input) &&
285
+ isStrictlyReturn(this.operationDefinition)) {
286
+ return input;
287
+ }
288
+ return toParametersResource(this._operationDefinition, use, input);
289
+ }
290
+ async validate(ctx, use, value) {
291
+ if (isStrictlyReturn(this.operationDefinition) && use === "out") {
292
+ const type = this.operationDefinition.parameter?.find((p) => p.use === "out")
293
+ ?.type || "Resource";
294
+ const fhirtype = type === "Any" ? "Resource" : type;
295
+ const issues = await validate(ctx, fhirtype, value);
296
+ return issues;
297
+ }
298
+ return await validateParameters(ctx, this, use, value);
299
+ }
300
+ }
301
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@haste-health/operation-execution",
3
+ "version": "0.14.3",
4
+ "homepage": "https://haste.health",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/HasteHealth/HasteHealth.git"
8
+ },
9
+ "description": "Package to create operation definition executables.",
10
+ "type": "module",
11
+ "main": "lib/index.js",
12
+ "types": "lib/index.d.ts",
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "test": "pnpm node --experimental-vm-modules $(pnpm bin jest)",
16
+ "publish": "pnpm build && pnpm npm publish --access public --tolerate-republish"
17
+ },
18
+ "dependencies": {
19
+ "@haste-health/fhir-pointer": "workspace:^",
20
+ "@haste-health/fhir-types": "workspace:^",
21
+ "@haste-health/fhir-validation": "workspace:^",
22
+ "@haste-health/operation-outcomes": "workspace:^"
23
+ },
24
+ "devDependencies": {
25
+ "@haste-health/artifacts": "workspace:^",
26
+ "@haste-health/haste-health.fhir.r4.core": "workspace:^",
27
+ "@haste-health/hl7.fhir.r4.core": "workspace:^",
28
+ "@jest/globals": "^29.7.0",
29
+ "jest": "^29.7.0",
30
+ "ts-jest": "^29.3.2",
31
+ "typescript": "5.9.2"
32
+ },
33
+ "files": [
34
+ "lib/**"
35
+ ]
36
+ }