@haste-health/cli 1.12.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
+ # HasteHealth CLI
@@ -0,0 +1 @@
1
+ export declare function createClient(location: string): Promise<import("@haste-health/client").AsynchronousClient<import("@haste-health/client/http").HTTPContext>>;
package/lib/client.js ADDED
@@ -0,0 +1,67 @@
1
+ import httpClient from "@haste-health/client/http";
2
+ import { R4, R4B } from "@haste-health/fhir-types/versions";
3
+ import { getCurrentTenant, loadConfig } from "./config.js";
4
+ function configureAuthHeader(tenant) {
5
+ return {
6
+ headers: {
7
+ Authorization: `Basic ${btoa(`${tenant.auth.client_id}:${tenant.auth.client_secret}`)}`,
8
+ },
9
+ };
10
+ }
11
+ function isTokenResponseValid(timeReceived, tokenResponse,
12
+ // Auto setting window to 10 minutes.
13
+ window = 600) {
14
+ if (!tokenResponse)
15
+ return false;
16
+ const curSeconds = new Date().getTime() / 1000;
17
+ return curSeconds - timeReceived < tokenResponse.expires_in - window;
18
+ }
19
+ export async function createClient(location) {
20
+ const config = loadConfig(location);
21
+ const tenant = getCurrentTenant(location, config);
22
+ if (!tenant)
23
+ throw new Error("No tenant configured run config add-tenant.");
24
+ let accessTokenResponse = undefined;
25
+ let timeSent = new Date().getTime() / 1000;
26
+ let wellknown = undefined;
27
+ if (tenant.oidc_discovery_uri) {
28
+ wellknown = await fetch(tenant.oidc_discovery_uri).then((res) => res.json());
29
+ }
30
+ return httpClient({
31
+ url: (fhirversion) => {
32
+ switch (fhirversion) {
33
+ case R4:
34
+ return tenant.r4_url;
35
+ case R4B:
36
+ return tenant.r4b_url;
37
+ default:
38
+ throw new Error(`Unsupported FHIR version: ${fhirversion}`);
39
+ }
40
+ },
41
+ getAccessToken: tenant.auth.type === "public"
42
+ ? undefined
43
+ : async function () {
44
+ if (accessTokenResponse &&
45
+ isTokenResponseValid(timeSent, accessTokenResponse)) {
46
+ return accessTokenResponse.access_token;
47
+ }
48
+ timeSent = new Date().getTime() / 1000;
49
+ const response = await fetch(wellknown.token_endpoint, {
50
+ method: "POST",
51
+ body: new URLSearchParams({
52
+ grant_type: "client_credentials",
53
+ }),
54
+ ...configureAuthHeader(tenant),
55
+ });
56
+ accessTokenResponse = await response.json();
57
+ if (response.status >= 400) {
58
+ throw new Error(JSON.stringify(accessTokenResponse));
59
+ }
60
+ if (!accessTokenResponse) {
61
+ throw new Error("No access token received");
62
+ }
63
+ return accessTokenResponse.access_token;
64
+ },
65
+ });
66
+ }
67
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAE5D,OAAO,EAAU,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEnE,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO;QACL,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,IAAI,CAC1B,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CACxD,EAAE;SACJ;KACF,CAAC;AACJ,CAAC;AAQD,SAAS,oBAAoB,CAC3B,YAAoB,EACpB,aAAwC;AACxC,qCAAqC;AACrC,SAAiB,GAAG;IAEpB,IAAI,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAE/C,OAAO,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAE5E,IAAI,mBAAmB,GAA8B,SAAS,CAAC;IAC/D,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAE3C,IAAI,SAAS,GAAG,SAAS,CAAC;IAE1B,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,SAAS,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9D,GAAG,CAAC,IAAI,EAAE,CACX,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE;YACnB,QAAQ,WAAW,EAAE,CAAC;gBACpB,KAAK,EAAE;oBACL,OAAO,MAAM,CAAC,MAAM,CAAC;gBACvB,KAAK,GAAG;oBACN,OAAO,MAAM,CAAC,OAAO,CAAC;gBACxB;oBACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,cAAc,EACZ,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC3B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK;gBACH,IACE,mBAAmB;oBACnB,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EACnD,CAAC;oBACD,OAAO,mBAAmB,CAAC,YAAY,CAAC;gBAC1C,CAAC;gBAED,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;gBACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE;oBACrD,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,IAAI,eAAe,CAAC;wBACxB,UAAU,EAAE,oBAAoB;qBACjC,CAAC;oBACF,GAAG,mBAAmB,CAAC,MAAM,CAAC;iBAC/B,CAAC,CAAC;gBAEH,mBAAmB,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAE5C,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACvD,CAAC;gBACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAC9C,CAAC;gBAED,OAAO,mBAAmB,CAAC,YAAY,CAAC;YAC1C,CAAC;KACR,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function apiCommands(command: Command): void;
@@ -0,0 +1,273 @@
1
+ import { confirm } from "@inquirer/prompts";
2
+ import * as r4Sets from "@haste-health/fhir-types/r4/sets";
3
+ import * as r4bSets from "@haste-health/fhir-types/r4b/sets";
4
+ import { R4, R4B } from "@haste-health/fhir-types/versions";
5
+ import { createClient } from "../client.js";
6
+ import { CONFIG_LOCATION } from "../config.js";
7
+ import logger from "../logger.js";
8
+ import { conversion, dataCommand } from "../utilities.js";
9
+ function validateResourceType(fhirVersion, resourceType) {
10
+ switch (fhirVersion) {
11
+ case R4: {
12
+ return r4Sets.resourceTypes.has(resourceType);
13
+ }
14
+ case R4B: {
15
+ return r4bSets.resourceTypes.has(resourceType);
16
+ }
17
+ }
18
+ }
19
+ function isBundle(value) {
20
+ return value?.resourceType === "Bundle";
21
+ }
22
+ function isParameters(value) {
23
+ return value?.resourceType === "Parameters";
24
+ }
25
+ export function apiCommands(command) {
26
+ command
27
+ .command("capabilities")
28
+ .argument("<fhirVersion>", "FHIR Version")
29
+ .action(async (userFHIRVersion) => {
30
+ const client = await createClient(CONFIG_LOCATION);
31
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
32
+ const capabilities = await client.capabilities({}, FHIRVersion);
33
+ logger.info(capabilities);
34
+ });
35
+ dataCommand.command(command
36
+ .command("create")
37
+ .argument("<fhirVersion>", "FHIR Version")
38
+ .action(async (userFHIRVersion, options) => {
39
+ const resourceToSave = dataCommand.readData(options);
40
+ const client = await createClient(CONFIG_LOCATION);
41
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
42
+ if (!resourceToSave) {
43
+ throw new Error("No resource provided to save");
44
+ }
45
+ const resource = await client.create({}, FHIRVersion, resourceToSave);
46
+ logger.info(resource);
47
+ }));
48
+ dataCommand.command(command
49
+ .command("update")
50
+ .argument("<fhirVersion>", "FHIR Version")
51
+ .argument("<resourceType>", "Resource Type")
52
+ .argument("<id>", "Resource ID")
53
+ .action(async (userFHIRVersion, resourceType, id, options) => {
54
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
55
+ if (!validateResourceType(FHIRVersion, resourceType))
56
+ throw new Error("Invalid resource type");
57
+ const resourceToSave = dataCommand.readData(options);
58
+ const client = await createClient(CONFIG_LOCATION);
59
+ if (!resourceToSave) {
60
+ throw new Error("No resource provided to save");
61
+ }
62
+ const resource = await client.update({}, FHIRVersion, resourceType, id, resourceToSave);
63
+ logger.info(resource);
64
+ }));
65
+ dataCommand.command(command
66
+ .command("batch")
67
+ .argument("<fhirVersion>", "FHIR Version")
68
+ .action(async (userFHIRVersion, options) => {
69
+ const batchBundle = dataCommand.readData(options);
70
+ const client = await createClient(CONFIG_LOCATION);
71
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
72
+ if (!batchBundle) {
73
+ throw new Error("No resource provided to save");
74
+ }
75
+ if (!isBundle(batchBundle))
76
+ throw new Error("invalid resource type must be a 'Bundle'.");
77
+ const resource = await client.batch({}, FHIRVersion, batchBundle);
78
+ logger.info(resource);
79
+ }));
80
+ dataCommand.command(command
81
+ .command("transaction")
82
+ .argument("<fhirVersion>", "FHIR Version")
83
+ .action(async (userFHIRVersion, options) => {
84
+ const transaction = dataCommand.readData(options);
85
+ const client = await createClient(CONFIG_LOCATION);
86
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
87
+ if (!transaction) {
88
+ throw new Error("No resource provided to save");
89
+ }
90
+ if (!isBundle(transaction))
91
+ throw new Error("invalid resource type must be a 'Bundle'.");
92
+ const resource = await client.transaction({}, FHIRVersion, transaction);
93
+ logger.info(resource);
94
+ }));
95
+ dataCommand.command(command
96
+ .command("patch")
97
+ .argument("<fhirVersion>", "FHIR Version")
98
+ .argument("<resourceType>", "Resource Type")
99
+ .argument("<id>", "Resource ID")
100
+ .action(async (userFHIRVersion, resourceType, id, options) => {
101
+ const patches = dataCommand.readData(options);
102
+ const client = await createClient(CONFIG_LOCATION);
103
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
104
+ if (!validateResourceType(FHIRVersion, resourceType))
105
+ throw new Error("Invalid resource type");
106
+ if (!patches) {
107
+ throw new Error("No patches provided.");
108
+ }
109
+ const resource = await client.patch({}, FHIRVersion, resourceType, id, patches);
110
+ logger.info(resource);
111
+ }));
112
+ command
113
+ .command("delete")
114
+ .argument("<fhirVersion>", "FHIR Version")
115
+ .argument("<resourceType>", "Resource Type")
116
+ .argument("<id>", "Resource ID")
117
+ .action(async (userFHIRVersion, resourceType, id) => {
118
+ const client = await createClient(CONFIG_LOCATION);
119
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
120
+ if (!validateResourceType(FHIRVersion, resourceType))
121
+ throw new Error("Invalid resource type");
122
+ const shouldDelete = await confirm({
123
+ message: "Are you sure you want to delete this resource?",
124
+ });
125
+ if (shouldDelete) {
126
+ await client.delete_instance({}, FHIRVersion, resourceType, id);
127
+ logger.info("Resource has been deleted.");
128
+ }
129
+ });
130
+ command
131
+ .command("search_system")
132
+ .argument("<fhirVersion>", "FHIR Version")
133
+ .argument("[query]", "query")
134
+ .action(async (userFHIRVersion, query) => {
135
+ const client = await createClient(CONFIG_LOCATION);
136
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
137
+ const searchResponse = await client.search_system({}, FHIRVersion, query ?? "");
138
+ logger.info(searchResponse);
139
+ });
140
+ command
141
+ .command("search_type")
142
+ .argument("<fhirVersion>", "FHIR Version")
143
+ .argument("<resourceType>", "Resource Type")
144
+ .argument("[query]", "query")
145
+ .action(async (userFHIRVersion, resourceType, query) => {
146
+ const client = await createClient(CONFIG_LOCATION);
147
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
148
+ if (!validateResourceType(FHIRVersion, resourceType))
149
+ throw new Error("Invalid resource type");
150
+ const searchResponse = await client.search_type({}, FHIRVersion, resourceType, query ?? "");
151
+ logger.info(searchResponse);
152
+ });
153
+ command
154
+ .command("read")
155
+ .argument("<fhirVersion>", "FHIR Version")
156
+ .argument("<resourceType>", "Resource Type")
157
+ .argument("<id>", "Resource ID")
158
+ .action(async (userFHIRVersion, resourceType, id) => {
159
+ const client = await createClient(CONFIG_LOCATION);
160
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
161
+ if (!validateResourceType(FHIRVersion, resourceType))
162
+ throw new Error("Invalid resource type");
163
+ const resource = await client.read({}, FHIRVersion, resourceType, id);
164
+ logger.info(resource);
165
+ });
166
+ command
167
+ .command("vread")
168
+ .argument("<fhirVersion>", "FHIR Version")
169
+ .argument("<resourceType>", "Resource Type")
170
+ .argument("<id>", "Resource ID")
171
+ .argument("<versionId>", "Resource version ID")
172
+ .action(async (userFHIRVersion, resourceType, id, versionId) => {
173
+ const client = await createClient(CONFIG_LOCATION);
174
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
175
+ if (!validateResourceType(FHIRVersion, resourceType))
176
+ throw new Error("Invalid resource type");
177
+ const resourceVersion = await client.vread({}, FHIRVersion, resourceType, id, versionId);
178
+ logger.info(resourceVersion);
179
+ });
180
+ command
181
+ .command("history_system")
182
+ .argument("<fhirVersion>", "FHIR Version")
183
+ .argument("[query]", "query")
184
+ .action(async (userFHIRVersion, query) => {
185
+ const client = await createClient(CONFIG_LOCATION);
186
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
187
+ const history = await client.history_system({}, FHIRVersion, query);
188
+ logger.info(history);
189
+ });
190
+ command
191
+ .command("history_type")
192
+ .argument("<fhirVersion>", "FHIR Version")
193
+ .argument("<resourceType>", "Resource Type")
194
+ .argument("[query]", "query")
195
+ .action(async (userFHIRVersion, resourceType, query) => {
196
+ const client = await createClient(CONFIG_LOCATION);
197
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
198
+ if (!validateResourceType(FHIRVersion, resourceType))
199
+ throw new Error("Invalid resource type");
200
+ const history = await client.history_type({}, FHIRVersion, resourceType, query);
201
+ logger.info(history);
202
+ });
203
+ command
204
+ .command("history_instance")
205
+ .argument("<fhirVersion>", "FHIR Version")
206
+ .argument("<resourceType>", "Resource Type")
207
+ .argument("<id>", "Resource ID")
208
+ .argument("[query]", "query")
209
+ .action(async (userFHIRVersion, resourceType, id, query) => {
210
+ const client = await createClient(CONFIG_LOCATION);
211
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
212
+ if (!validateResourceType(FHIRVersion, resourceType))
213
+ throw new Error("Invalid resource type");
214
+ const history = await client.history_instance({}, FHIRVersion, resourceType, id, query);
215
+ logger.info(history);
216
+ });
217
+ dataCommand.command(command
218
+ .command("invoke_system")
219
+ .argument("<fhirVersion>", "FHIR Version")
220
+ .argument("<code>", "code")
221
+ .action(async (userFHIRVersion, code, options) => {
222
+ const client = await createClient(CONFIG_LOCATION);
223
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
224
+ const parameters = dataCommand.readData(options);
225
+ if (!parameters) {
226
+ throw new Error("No Parameters provided");
227
+ }
228
+ if (!isParameters(parameters))
229
+ throw new Error("invalid Parameters.");
230
+ const output = await client.invoke_system(code, {}, FHIRVersion, parameters);
231
+ logger.info(output);
232
+ }));
233
+ dataCommand.command(command
234
+ .command("invoke_type")
235
+ .argument("<fhirVersion>", "FHIR Version")
236
+ .argument("<resourceType>", "Resource Type")
237
+ .argument("<code>", "code")
238
+ .action(async (userFHIRVersion, resourceType, code, options) => {
239
+ const client = await createClient(CONFIG_LOCATION);
240
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
241
+ const parameters = dataCommand.readData(options);
242
+ if (!parameters) {
243
+ throw new Error("No Parameters provided");
244
+ }
245
+ if (!isParameters(parameters))
246
+ throw new Error("invalid Parameters.");
247
+ if (!validateResourceType(FHIRVersion, resourceType))
248
+ throw new Error("Invalid resource type");
249
+ const output = await client.invoke_type(code, {}, FHIRVersion, resourceType, parameters);
250
+ logger.info(output);
251
+ }));
252
+ dataCommand.command(command
253
+ .command("invoke_instance")
254
+ .argument("<fhirVersion>", "FHIR Version")
255
+ .argument("<resourceType>", "Resource Type")
256
+ .argument("<id>", "Resource ID")
257
+ .argument("<code>", "code")
258
+ .action(async (userFHIRVersion, resourceType, id, code, options) => {
259
+ const client = await createClient(CONFIG_LOCATION);
260
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
261
+ const parameters = dataCommand.readData(options);
262
+ if (!parameters) {
263
+ throw new Error("No Parameters provided");
264
+ }
265
+ if (!isParameters(parameters))
266
+ throw new Error("invalid Parameters.");
267
+ if (!validateResourceType(FHIRVersion, resourceType))
268
+ throw new Error("Invalid resource type");
269
+ const output = await client.invoke_instance(code, {}, FHIRVersion, resourceType, id, parameters);
270
+ logger.info(output);
271
+ }));
272
+ }
273
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function codeGenerationCommands(command: Command): void;
@@ -0,0 +1,135 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from "fs";
2
+ import path from "path";
3
+ import { fileURLToPath } from "url";
4
+ import { generateIndexFile, loadArtifacts } from "@haste-health/artifacts";
5
+ import { generateMetaData } from "@haste-health/codegen/generate/meta-data";
6
+ import generateOps from "@haste-health/codegen/generate/operation-definition";
7
+ import { generateSets } from "@haste-health/codegen/generate/sets";
8
+ import { generateTypeToCanonicalMap } from "@haste-health/codegen/generate/type-to-canonical";
9
+ import { generateTypes } from "@haste-health/codegen/generate/typescript-types";
10
+ import { FHIR_VERSIONS_SUPPORTED, R4, } from "@haste-health/fhir-types/versions";
11
+ import { StructureDefinitionSnapshot } from "@haste-health/generated-ops/lib/r4/ops";
12
+ import { createClient } from "../client.js";
13
+ import { CONFIG_LOCATION } from "../config.js";
14
+ import logger from "../logger.js";
15
+ import { conversion, getAllFiles } from "../utilities.js";
16
+ export function codeGenerationCommands(command) {
17
+ command
18
+ .command("meta")
19
+ .description("Generate metadata")
20
+ .requiredOption("-o, --output <output>", "output file")
21
+ .option("-v, --version <version>", "FHIR Profiles to use", R4)
22
+ .action(async (options) => {
23
+ const structureDefinitions = loadArtifacts({
24
+ fhirVersion: options.version,
25
+ resourceType: "StructureDefinition",
26
+ currentDirectory: fileURLToPath(import.meta.url),
27
+ });
28
+ mkdirSync(path.join(options.output, ".."), { recursive: true });
29
+ const metadata = generateMetaData(structureDefinitions);
30
+ writeFileSync(options.output, "// Do not this code is generated \nexport default " +
31
+ JSON.stringify(metadata, null, 2));
32
+ });
33
+ command
34
+ .command("type-to-canonical")
35
+ .description("Generate type to canonical url for SD.")
36
+ .requiredOption("-o, --output <output>", "output file")
37
+ .option("-v, --version <version>", "FHIR Profiles to use", R4)
38
+ .action(async (options) => {
39
+ const structureDefinitions = loadArtifacts({
40
+ fhirVersion: options.version,
41
+ resourceType: "StructureDefinition",
42
+ currentDirectory: fileURLToPath(import.meta.url),
43
+ });
44
+ mkdirSync(path.join(options.output, ".."), { recursive: true });
45
+ const typeToCanonical = generateTypeToCanonicalMap(structureDefinitions);
46
+ writeFileSync(options.output, "// Do not this code is generated \nexport default " +
47
+ JSON.stringify(typeToCanonical, null, 2) +
48
+ " as Record<string, string>");
49
+ });
50
+ command
51
+ .command("types-artifacts")
52
+ .description("Generates typescript types off profiles")
53
+ .option("-o, --output <output>", "output file")
54
+ .option("-v, --version <version>", "FHIR Profiles to use", R4)
55
+ .action((options) => {
56
+ if (FHIR_VERSIONS_SUPPORTED.indexOf(options.version) === -1) {
57
+ throw new Error(`${options.version} is not supported must be oneof ${JSON.stringify(FHIR_VERSIONS_SUPPORTED)}`);
58
+ }
59
+ const structureDefinitions = loadArtifacts({
60
+ fhirVersion: options.version,
61
+ resourceType: "StructureDefinition",
62
+ currentDirectory: fileURLToPath(import.meta.url),
63
+ });
64
+ mkdirSync(options.output, { recursive: true });
65
+ const generatedTypes = generateTypes(options.version, structureDefinitions);
66
+ const generatedSets = generateSets(options.version, structureDefinitions);
67
+ writeFileSync(path.join(options.output, "types.ts"), generatedTypes);
68
+ writeFileSync(path.join(options.output, "sets.ts"), generatedSets);
69
+ });
70
+ command
71
+ .command("operations")
72
+ .description("Generate Operation types and classes")
73
+ .option("-o, --output <output>", "output file")
74
+ .option("-v, --version <version>", "FHIR Profiles to use", R4)
75
+ .action(async (options) => {
76
+ if (options.version !== R4) {
77
+ throw new Error("Currently only support r4");
78
+ }
79
+ const operationDefinitions = loadArtifacts({
80
+ fhirVersion: options.version,
81
+ resourceType: "OperationDefinition",
82
+ currentDirectory: fileURLToPath(import.meta.url),
83
+ });
84
+ mkdirSync(options.output, { recursive: true });
85
+ const generatedOpCode = await generateOps(options.version, operationDefinitions);
86
+ writeFileSync(path.join(options.output, "ops.ts"), generatedOpCode);
87
+ });
88
+ command
89
+ .command("index-file")
90
+ .description("Generate a FHIR npm package index file ")
91
+ .option("-p, --packagedir <packagedir>", "")
92
+ .option("-r, --resources <resources>", "")
93
+ .option("-i, --ignore [ignore...]", "")
94
+ .option("-e, --extension <extension>", "")
95
+ .action((options) => {
96
+ const indexFile = generateIndexFile({
97
+ root: options.packagedir,
98
+ artifactLocations: [options.resources],
99
+ ignore: options.ignore,
100
+ extension: options.extension,
101
+ });
102
+ logger.info("generating index file");
103
+ const indexLoc = path.join(options.packagedir, ".index.json");
104
+ writeFileSync(indexLoc, JSON.stringify(indexFile, null, 2));
105
+ logger.info(`index generated and saved at '${indexLoc}'`);
106
+ });
107
+ command
108
+ .command("snapshot")
109
+ .argument("<fhirVersion>", "FHIR Version")
110
+ .description("Generate a snapshot of a StructureDefinition")
111
+ .option("-d, --directory <directory>", "Directory with artifacts to minimize.")
112
+ .action(async (userFHIRVersion, options) => {
113
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
114
+ const profileLocs = getAllFiles(options.directory).filter((f) => !f.endsWith("min.json") && f.endsWith(".json"));
115
+ for (const profileLoc of profileLocs) {
116
+ const fileContents = readFileSync(profileLoc);
117
+ const profile = JSON.parse(fileContents.toString("utf8"));
118
+ if (typeof profile === "object" &&
119
+ profile.resourceType === "StructureDefinition") {
120
+ const client = await createClient(CONFIG_LOCATION);
121
+ if (!profile ||
122
+ typeof profile !== "object" ||
123
+ profile?.resourceType !==
124
+ "StructureDefinition") {
125
+ throw new Error("No StructureDefinition to generate snapshot.");
126
+ }
127
+ const sd = await client.invoke_type(StructureDefinitionSnapshot.Op, {}, FHIRVersion, "StructureDefinition", {
128
+ definition: profile,
129
+ });
130
+ writeFileSync(profileLoc, JSON.stringify(sd, null, 2));
131
+ }
132
+ }
133
+ });
134
+ }
135
+ //# sourceMappingURL=generation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation.js","sourceRoot":"","sources":["../../src/commands/generation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Minimize artifacts Namely StructureDefinition, OperationDefinition, ValueSet, CodeSystem
4
+ */
5
+ export declare function minimizeCommands(command: Command): void;
@@ -0,0 +1,69 @@
1
+ import fs from "node:fs";
2
+ import { getAllFiles } from "../utilities.js";
3
+ function minimizeResource(resource) {
4
+ switch (resource.resourceType) {
5
+ case "StructureDefinition": {
6
+ const minimizedSd = {
7
+ id: resource.id,
8
+ resourceType: resource.resourceType,
9
+ name: resource.name,
10
+ title: resource.title,
11
+ abstract: resource.abstract,
12
+ url: resource.url,
13
+ version: resource.version,
14
+ context: resource.context,
15
+ type: resource.type,
16
+ baseDefinition: resource.baseDefinition,
17
+ kind: resource.kind,
18
+ derivation: resource.derivation,
19
+ status: resource.status,
20
+ snapshot: {
21
+ element: resource.snapshot?.element?.map((element) => {
22
+ delete element["mapping"];
23
+ return element;
24
+ }) ?? [],
25
+ },
26
+ };
27
+ return minimizedSd;
28
+ }
29
+ case "ValueSet":
30
+ case "CodeSystem":
31
+ case "OperationDefinition":
32
+ default: {
33
+ return resource;
34
+ }
35
+ }
36
+ }
37
+ /**
38
+ * Minimize artifacts Namely StructureDefinition, OperationDefinition, ValueSet, CodeSystem
39
+ */
40
+ export function minimizeCommands(command) {
41
+ command
42
+ .command("artifacts")
43
+ .description("Minimize Artifacts (Will output as [filename].min.json)")
44
+ .option("-d, --directory <output>", "Directory with artifacts to minimize.")
45
+ .action((options) => {
46
+ const directory = options.directory;
47
+ const files = getAllFiles(directory).filter((f) => !f.endsWith("min.json") && f.endsWith(".json"));
48
+ for (const file of files) {
49
+ const fileContents = fs.readFileSync(file);
50
+ const json = JSON.parse(fileContents.toString("utf8"));
51
+ if (json.resourceType === "Bundle") {
52
+ const bundle = json;
53
+ fs.writeFileSync(file.replace(".json", ".min.json"), JSON.stringify({
54
+ ...bundle,
55
+ entry: bundle.entry?.map((e) => {
56
+ if (e.resource) {
57
+ e.resource = minimizeResource(e.resource);
58
+ }
59
+ return e;
60
+ }),
61
+ }));
62
+ }
63
+ else if (json.resourceType) {
64
+ fs.writeFileSync(file.replace(".json", ".min.json"), JSON.stringify(minimizeResource(json)));
65
+ }
66
+ }
67
+ });
68
+ }
69
+ //# sourceMappingURL=minimize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimize.js","sourceRoot":"","sources":["../../src/commands/minimize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function testscriptCommands(command: Command): void;
@@ -0,0 +1,82 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import * as ts from "@haste-health/testscript-runner";
4
+ import { createClient } from "../client.js";
5
+ import { CONFIG_LOCATION } from "../config.js";
6
+ import logger from "../logger.js";
7
+ function getAllFiles(location) {
8
+ if (fs.lstatSync(location).isFile()) {
9
+ return [location];
10
+ }
11
+ const files = [];
12
+ const filesInDirectory = fs.readdirSync(location);
13
+ for (const file of filesInDirectory) {
14
+ const absolute = path.join(location, file);
15
+ if (fs.statSync(absolute).isDirectory()) {
16
+ files.push(...getAllFiles(absolute));
17
+ }
18
+ else {
19
+ files.push(absolute);
20
+ }
21
+ }
22
+ return files;
23
+ }
24
+ async function executeTestScript(fhirVersion, testScript, timeout = 0) {
25
+ const client = await createClient(CONFIG_LOCATION);
26
+ const report = await ts.run(logger, client, fhirVersion, testScript, timeout);
27
+ return report;
28
+ }
29
+ export function testscriptCommands(command) {
30
+ command
31
+ .command("run")
32
+ .description("Run testscript files against server.")
33
+ .requiredOption("-i, --input <input>")
34
+ .option("-o --output <output>", "Where to output files")
35
+ .option("-e, --extension <extension>", "Extensions to search for tests", ".testscript.json")
36
+ .option("-t, --timeout <timeout>", "wait time between operations", ".testscript.json")
37
+ .option("--fhir-version <fhirVersion>", "FHIR Version to use", "4.0")
38
+ .action(async (options) => {
39
+ let exitCode = 0;
40
+ const files = getAllFiles(options.input)
41
+ .flat()
42
+ .filter((f) => f.endsWith(options.extension))
43
+ .sort((a, b) => a.localeCompare(b));
44
+ const output = {
45
+ resourceType: "Bundle",
46
+ type: "collection",
47
+ entry: [],
48
+ };
49
+ for (const file of files) {
50
+ const fileContents = fs.readFileSync(file);
51
+ const json = JSON.parse(fileContents.toString("utf8"));
52
+ if (json.resourceType === "Bundle") {
53
+ const bundle = json;
54
+ const testscripts = bundle.entry
55
+ ?.map((e) => e.resource)
56
+ .filter((r) => r?.resourceType === "TestScript") ?? [];
57
+ for (const testScript of testscripts) {
58
+ output.entry?.push({ resource: testScript });
59
+ const report = await executeTestScript(options.fhirVersion, testScript, parseInt(options.timeout ?? "0"));
60
+ output.entry?.push({ resource: report });
61
+ if (report.result === "fail") {
62
+ exitCode = 1;
63
+ }
64
+ }
65
+ }
66
+ else if (json.resourceType === "TestScript") {
67
+ const testScript = json;
68
+ output.entry?.push({ resource: testScript });
69
+ const report = await executeTestScript(options.fhirVersion, testScript, parseInt(options.timeout ?? "0"));
70
+ output.entry?.push({ resource: report });
71
+ if (report.result === "fail") {
72
+ exitCode = 1;
73
+ }
74
+ }
75
+ }
76
+ if (options.output) {
77
+ fs.writeFileSync(options.output, JSON.stringify(output, null, 2));
78
+ }
79
+ process.exit(exitCode);
80
+ });
81
+ }
82
+ //# sourceMappingURL=testscript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testscript.js","sourceRoot":"","sources":["../../src/commands/testscript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function validate(command: Command): void;
@@ -0,0 +1,30 @@
1
+ import { R4, R4B, } from "@haste-health/fhir-types/versions";
2
+ import { createClient } from "../client.js";
3
+ import { CONFIG_LOCATION } from "../config.js";
4
+ import logger from "../logger.js";
5
+ import { conversion, dataCommand } from "../utilities.js";
6
+ export function validate(command) {
7
+ dataCommand.command(command
8
+ .command("validate")
9
+ .argument("<fhirVersion>", "FHIR Version")
10
+ .action(async (userFHIRVersion, options) => {
11
+ const resource = dataCommand.readData(options);
12
+ const FHIRVersion = conversion.asFHIRType(userFHIRVersion);
13
+ const client = await createClient(CONFIG_LOCATION);
14
+ switch (FHIRVersion) {
15
+ case R4: {
16
+ const result = await client.invoke_type("validate", {}, FHIRVersion, resource.resourceType, {
17
+ resourceType: "Parameters",
18
+ parameter: [{ name: "resource", resource }],
19
+ });
20
+ logger.warn(result);
21
+ return;
22
+ }
23
+ case R4B:
24
+ default: {
25
+ throw new Error("Unsupported FHIR Version");
26
+ }
27
+ }
28
+ }));
29
+ }
30
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,EAAE,EACF,GAAG,GAEJ,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,WAAW,CAAC,OAAO,CACjB,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CAAC,eAAe,EAAE,cAAc,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAG5C,CAAC;QACF,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,CAAC;QAEnD,QAAQ,WAAW,EAAE,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,CAAC;gBACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CACrC,UAAkB,EAClB,EAAE,EACF,WAAW,EACX,QAAQ,CAAC,YAAY,EACrB;oBACE,YAAY,EAAE,YAAY;oBAC1B,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;iBAC5C,CACF,CAAC;gBAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,KAAK,GAAG,CAAC;YACT,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { JsonMap } from "@iarna/toml";
2
+ import { Command } from "commander";
3
+ export declare const CONFIG_LOCATION: string;
4
+ export interface Tenant extends JsonMap {
5
+ name: string;
6
+ r4_url: string;
7
+ r4b_url: string;
8
+ oidc_discovery_uri: string;
9
+ auth: {
10
+ type: "public" | "client_credentials";
11
+ client_id?: string;
12
+ client_secret?: string;
13
+ };
14
+ }
15
+ export interface Config extends JsonMap {
16
+ lastUpdated: string;
17
+ defaultTenant: Tenant["name"];
18
+ tenants: Tenant[];
19
+ }
20
+ export declare function loadConfig(location: string): Config;
21
+ export declare function saveConfig(location: string, config: Config): void;
22
+ export declare function getCurrentTenant(location: string, config: Config): Tenant | undefined;
23
+ export declare function configurationCommands(command: Command): void;
package/lib/config.js ADDED
@@ -0,0 +1,171 @@
1
+ import toml from "@iarna/toml";
2
+ import * as inquirer from "@inquirer/prompts";
3
+ import fs from "node:fs";
4
+ import { homedir } from "node:os";
5
+ import path from "node:path";
6
+ import logger from "./logger.js";
7
+ export const CONFIG_LOCATION = path.join(homedir(), ".haste-health/config.toml");
8
+ function initializeConfig(location) {
9
+ logger.info("Initializing configuration file");
10
+ const initialConfig = {
11
+ defaultTenant: "",
12
+ lastUpdated: new Date().toISOString(),
13
+ tenants: [],
14
+ };
15
+ saveConfig(location, initialConfig);
16
+ return initialConfig;
17
+ }
18
+ export function loadConfig(location) {
19
+ let config;
20
+ try {
21
+ const configuration = fs.readFileSync(location, "utf8");
22
+ config = toml.parse(configuration);
23
+ }
24
+ catch (e) {
25
+ config = initializeConfig(location);
26
+ }
27
+ return config;
28
+ }
29
+ export function saveConfig(location, config) {
30
+ if (!fs.existsSync(path.join(location, "../"))) {
31
+ fs.mkdirSync(path.join(location, "../"), { recursive: true });
32
+ }
33
+ fs.writeFileSync(location, toml.stringify(config), "utf8");
34
+ }
35
+ export function getCurrentTenant(location, config) {
36
+ if (!config.defaultTenant) {
37
+ config = {
38
+ ...config,
39
+ defaultTenant: config.tenants[0]?.name,
40
+ };
41
+ saveConfig(location, config);
42
+ }
43
+ return config.tenants.find((tenant) => tenant.name === config.defaultTenant);
44
+ }
45
+ export function configurationCommands(command) {
46
+ command
47
+ .command("switch-tenant")
48
+ .description("Switch tenant to use to add a tenant use add-tenant")
49
+ .option("-t, --tenant <tenant>", "Tenant name")
50
+ .action(async (options) => {
51
+ const config = loadConfig(CONFIG_LOCATION);
52
+ if (options.tenant) {
53
+ const tenant = config.tenants.find((t) => t.name === options.tenant);
54
+ if (!tenant)
55
+ throw new Error("No tenant found with that name");
56
+ saveConfig(CONFIG_LOCATION, { ...config, defaultTenant: tenant.name });
57
+ }
58
+ else {
59
+ const defaultTenant = await inquirer.select({
60
+ message: "Switch tenant to use",
61
+ choices: config.tenants.map((t) => ({
62
+ name: t.name,
63
+ value: t.name,
64
+ })),
65
+ });
66
+ saveConfig(CONFIG_LOCATION, { ...config, defaultTenant });
67
+ }
68
+ });
69
+ command
70
+ .command("delete-tenant")
71
+ .description("Delete a tenant")
72
+ .requiredOption("-t, --tenant <tenant>", "Tenant name")
73
+ .action(async (options) => {
74
+ const config = loadConfig(CONFIG_LOCATION);
75
+ const tenants = config.tenants.filter((t) => t.name !== options.tenant);
76
+ saveConfig(CONFIG_LOCATION, {
77
+ ...config,
78
+ defaultTenant: options.tenant === config.defaultTenant ? "" : config.defaultTenant,
79
+ tenants,
80
+ });
81
+ });
82
+ command
83
+ .command("show-tenant")
84
+ .description("Display the current tenant.")
85
+ .action(async () => {
86
+ const config = loadConfig(CONFIG_LOCATION);
87
+ const currentTenant = getCurrentTenant(CONFIG_LOCATION, config);
88
+ if (currentTenant) {
89
+ logger.info(currentTenant);
90
+ }
91
+ else {
92
+ logger.warn("No tenant configured");
93
+ }
94
+ });
95
+ command
96
+ .command("add-tenant")
97
+ .description("Add a tenant to the configuration file")
98
+ .option("-r4, --r4-url <r4Url>", "r4 URL")
99
+ .option("-r4b, --r4b-url <r4bUrl>", "r4b URL")
100
+ .option("-i, --oidc <oidcDiscovery>", "Enter the OIDC discovery URL")
101
+ .option("-a, --auth <authMethod>", "Enter auth method")
102
+ .option("-n, --name <name>", "Tenant name")
103
+ .option("--client-id <clientId>", "Client id")
104
+ .option("--client-secret <clientSecret>", "Client secret")
105
+ .action(async (options) => {
106
+ const config = loadConfig(CONFIG_LOCATION);
107
+ const name = options.name
108
+ ? options.name
109
+ : await inquirer.input({
110
+ message: "Enter tenant name:",
111
+ validate: async (value) => {
112
+ const existingTenant = config.tenants.find((t) => t.name === value);
113
+ return existingTenant !== undefined
114
+ ? `Tenant with name '${value}' already exists. Must be unique.`
115
+ : true;
116
+ },
117
+ });
118
+ const r4Url = options.r4Url
119
+ ? options.r4Url
120
+ : await inquirer.input({
121
+ message: "Enter the R4 URL",
122
+ });
123
+ const r4bUrl = options.r4bUrl
124
+ ? options.r4bUrl
125
+ : await inquirer.input({
126
+ message: "Enter an R4B URL. ",
127
+ });
128
+ const authMethod = options.auth
129
+ ? options.auth
130
+ : await inquirer.select({
131
+ message: "Select an auth method",
132
+ choices: [
133
+ { name: "public", value: "public" },
134
+ { name: "client_credentials", value: "client_credentials" },
135
+ ],
136
+ });
137
+ let oidcDiscovery = "";
138
+ let client_id = "";
139
+ let client_secret = "";
140
+ if (authMethod === "client_credentials") {
141
+ oidcDiscovery = options.oidc
142
+ ? options.oidc
143
+ : await inquirer.input({
144
+ message: "Enter the url for discovery. ",
145
+ });
146
+ client_id = options.clientId
147
+ ? options.clientId
148
+ : await inquirer.input({
149
+ message: "Enter client id:",
150
+ });
151
+ client_secret = options.clientSecret
152
+ ? options.clientSecret
153
+ : await inquirer.password({
154
+ message: "Enter client secret:",
155
+ });
156
+ }
157
+ config.tenants.push({
158
+ r4_url: r4Url,
159
+ r4b_url: r4bUrl,
160
+ oidc_discovery_uri: oidcDiscovery,
161
+ name,
162
+ auth: {
163
+ type: authMethod,
164
+ client_id,
165
+ client_secret,
166
+ },
167
+ });
168
+ saveConfig(CONFIG_LOCATION, config);
169
+ });
170
+ }
171
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { Command } from "commander";
4
+ import { apiCommands } from "./commands/api.js";
5
+ import { codeGenerationCommands } from "./commands/generation.js";
6
+ import { minimizeCommands } from "./commands/minimize.js";
7
+ import { testscriptCommands } from "./commands/testscript.js";
8
+ import { validate } from "./commands/validate.js";
9
+ import { configurationCommands } from "./config.js";
10
+ const program = new Command();
11
+ program.name("HasteHealth CLI Tool").description("HasteHealth CLI interface.");
12
+ configurationCommands(program.command("config"));
13
+ codeGenerationCommands(program.command("generate"));
14
+ apiCommands(program.command("api"));
15
+ validate(program);
16
+ minimizeCommands(program.command("minimize"));
17
+ testscriptCommands(program.command("test"));
18
+ program.parse();
19
+ //# sourceMappingURL=hastehealth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hastehealth.js","sourceRoot":"","sources":["../src/hastehealth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;AAE/E,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACpD,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClB,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5C,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const logger: import("pino").Logger<string, boolean>;
2
+ export default logger;
package/lib/logger.js ADDED
@@ -0,0 +1,9 @@
1
+ import { pino } from "pino";
2
+ import pretty from "pino-pretty";
3
+ const prettyStream = pretty({
4
+ levelFirst: true,
5
+ colorize: true,
6
+ });
7
+ const logger = pino({}, process.env.NODE_ENV !== "production" ? prettyStream : undefined);
8
+ export default logger;
9
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,YAAY,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,IAAI,CACjB,EAAE,EACF,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CACjE,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { Command } from "commander";
4
+ import { apiCommands } from "./commands/api.js";
5
+ import { codeGenerationCommands } from "./commands/generation.js";
6
+ import { minimizeCommands } from "./commands/minimize.js";
7
+ import { testscriptCommands } from "./commands/testscript.js";
8
+ import { validate } from "./commands/validate.js";
9
+ import { configurationCommands } from "./config.js";
10
+ const program = new Command();
11
+ program
12
+ .name("OxidizedHealth CLI Tool")
13
+ .description("OxidizedHealth CLI interface.");
14
+ configurationCommands(program.command("config"));
15
+ codeGenerationCommands(program.command("generate"));
16
+ apiCommands(program.command("api"));
17
+ validate(program);
18
+ minimizeCommands(program.command("minimize"));
19
+ testscriptCommands(program.command("test"));
20
+ program.parse();
21
+ //# sourceMappingURL=oxidizedhealth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oxidizedhealth.js","sourceRoot":"","sources":["../src/oxidizedhealth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,yBAAyB,CAAC;KAC/B,WAAW,CAAC,+BAA+B,CAAC,CAAC;AAEhD,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACpD,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClB,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9C,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5C,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Command } from "commander";
2
+ import { FHIR_VERSION } from "@haste-health/fhir-types/versions";
3
+ type MutationOptions = {
4
+ file?: string;
5
+ data?: string;
6
+ };
7
+ export declare namespace conversion {
8
+ function asFHIRType(fhirType: string): FHIR_VERSION;
9
+ }
10
+ export declare function getAllFiles(directory: string): string[];
11
+ export declare namespace dataCommand {
12
+ function readData(option: MutationOptions): unknown;
13
+ function command(command: Command): Command;
14
+ }
15
+ export {};
@@ -0,0 +1,57 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { R4, R4B } from "@haste-health/fhir-types/versions";
4
+ export var conversion;
5
+ (function (conversion) {
6
+ function asFHIRType(fhirType) {
7
+ switch (fhirType) {
8
+ case "r4":
9
+ case R4: {
10
+ return R4;
11
+ }
12
+ case "r4b":
13
+ case R4B: {
14
+ return R4B;
15
+ }
16
+ default: {
17
+ throw new Error("invalid FHIR version must be 'r4' or 'r4b' or '4.3' or '4.0'");
18
+ }
19
+ }
20
+ }
21
+ conversion.asFHIRType = asFHIRType;
22
+ })(conversion || (conversion = {}));
23
+ export function getAllFiles(directory) {
24
+ const files = [];
25
+ const filesInDirectory = fs.readdirSync(directory);
26
+ for (const file of filesInDirectory) {
27
+ const absolute = path.join(directory, file);
28
+ if (fs.statSync(absolute).isDirectory()) {
29
+ files.push(...getAllFiles(absolute));
30
+ }
31
+ else {
32
+ files.push(absolute);
33
+ }
34
+ }
35
+ return files;
36
+ }
37
+ export var dataCommand;
38
+ (function (dataCommand) {
39
+ function readData(option) {
40
+ if (option.file) {
41
+ return JSON.parse(fs.readFileSync(option.file, "utf-8"));
42
+ }
43
+ if (option.data) {
44
+ return JSON.parse(option.data);
45
+ }
46
+ throw new Error("No resource provided");
47
+ }
48
+ dataCommand.readData = readData;
49
+ function command(command) {
50
+ command
51
+ .option("-f, --file <file>", "File for resource")
52
+ .option("-d, --data <data>", "Data for resource");
53
+ return command;
54
+ }
55
+ dataCommand.command = command;
56
+ })(dataCommand || (dataCommand = {}));
57
+ //# sourceMappingURL=utilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utilities.js","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAgB,EAAE,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AAI1E,MAAM,KAAW,UAAU,CAkB1B;AAlBD,WAAiB,UAAU;IACzB,SAAgB,UAAU,CAAC,QAAgB;QACzC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC;YACV,KAAK,EAAE,CAAC,CAAC,CAAC;gBACR,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,KAAK,KAAK,CAAC;YACX,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,OAAO,GAAG,CAAC;YACb,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAhBe,qBAAU,aAgBzB,CAAA;AACH,CAAC,EAlBgB,UAAU,KAAV,UAAU,QAkB1B;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,gBAAgB,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,KAAW,WAAW,CAkB3B;AAlBD,WAAiB,WAAW;IAC1B,SAAgB,QAAQ,CAAC,MAAuB;QAC9C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IATe,oBAAQ,WASvB,CAAA;IAED,SAAgB,OAAO,CAAC,OAAgB;QACtC,OAAO;aACJ,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;aAChD,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC;IACjB,CAAC;IALe,mBAAO,UAKtB,CAAA;AACH,CAAC,EAlBgB,WAAW,KAAX,WAAW,QAkB3B"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@haste-health/cli",
3
+ "version": "1.12.3",
4
+ "homepage": "https://haste.health",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/HasteHealth/HasteHealth.git"
8
+ },
9
+ "bin": {
10
+ "haste-health": "lib/hastehealth.js"
11
+ },
12
+ "types": "lib/haste-health.d.ts",
13
+ "target": "node",
14
+ "type": "module",
15
+ "dependencies": {
16
+ "@haste-health/artifacts": "workspace:^",
17
+ "@haste-health/client": "workspace:^",
18
+ "@haste-health/codegen": "workspace:^",
19
+ "@haste-health/generated-ops": "workspace:^",
20
+ "@haste-health/haste-health.fhir.r4.core": "workspace:^",
21
+ "@haste-health/hl7.fhir.r4.core": "workspace:^",
22
+ "@haste-health/hl7.fhir.r4b.core": "workspace:^",
23
+ "@haste-health/testscript-runner": "workspace:^",
24
+ "@iarna/toml": "^2.2.5",
25
+ "@inquirer/prompts": "^5.5.0",
26
+ "@types/node": "^22.15.17",
27
+ "commander": "^12.1.0",
28
+ "pino": "^9.6.0",
29
+ "pino-pretty": "^11.3.0"
30
+ },
31
+ "devDependencies": {
32
+ "@haste-health/fhir-types": "workspace:^",
33
+ "typescript": "5.9.2"
34
+ },
35
+ "scripts": {
36
+ "build": "tsc && node executable.js ./lib/hastehealth.js && chmod +x ./lib/hastehealth.js",
37
+ "publish": "pnpm build && pnpm npm publish --access public --tolerate-republish"
38
+ },
39
+ "files": [
40
+ "lib/**"
41
+ ]
42
+ }