@atomic-ehr/fhir-canonical-manager 0.0.13 → 0.0.15
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/dist/cache.d.ts +17 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +50 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +15 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +7 -10
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/list.d.ts.map +1 -1
- package/dist/cli/list.js +14 -10
- package/dist/cli/list.js.map +1 -1
- package/dist/cli/resolve.js +7 -7
- package/dist/cli/resolve.js.map +1 -1
- package/dist/cli/search.js +9 -9
- package/dist/cli/search.js.map +1 -1
- package/dist/cli/searchparam.d.ts.map +1 -1
- package/dist/cli/searchparam.js +27 -24
- package/dist/cli/searchparam.js.map +1 -1
- package/dist/fs/index.d.ts +1 -1
- package/dist/fs/index.d.ts.map +1 -1
- package/dist/fs/index.js +1 -1
- package/dist/fs/index.js.map +1 -1
- package/dist/fs/utils.js +2 -2
- package/dist/fs/utils.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/manager/canonical.d.ts +1 -1
- package/dist/manager/canonical.d.ts.map +1 -1
- package/dist/manager/canonical.js +77 -45
- package/dist/manager/canonical.js.map +1 -1
- package/dist/manager/index.d.ts +1 -2
- package/dist/manager/index.d.ts.map +1 -1
- package/dist/manager/index.js +1 -2
- package/dist/manager/index.js.map +1 -1
- package/dist/package.d.ts +4 -0
- package/dist/package.d.ts.map +1 -0
- package/dist/package.js +69 -0
- package/dist/package.js.map +1 -0
- package/dist/{reference/manager.d.ts → reference.d.ts} +8 -3
- package/dist/reference.d.ts.map +1 -0
- package/dist/{reference/manager.js → reference.js} +13 -4
- package/dist/reference.js.map +1 -0
- package/dist/resolver.d.ts +4 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/{resolver/context.js → resolver.js} +2 -2
- package/dist/resolver.js.map +1 -0
- package/dist/scanner/directory.d.ts +2 -2
- package/dist/scanner/directory.d.ts.map +1 -1
- package/dist/scanner/directory.js +24 -27
- package/dist/scanner/directory.js.map +1 -1
- package/dist/scanner/index.d.ts +4 -4
- package/dist/scanner/index.d.ts.map +1 -1
- package/dist/scanner/index.js +4 -4
- package/dist/scanner/index.js.map +1 -1
- package/dist/scanner/package.d.ts +1 -1
- package/dist/scanner/package.d.ts.map +1 -1
- package/dist/scanner/package.js +4 -4
- package/dist/scanner/package.js.map +1 -1
- package/dist/scanner/parser.d.ts +2 -2
- package/dist/scanner/parser.d.ts.map +1 -1
- package/dist/scanner/parser.js +1 -1
- package/dist/scanner/parser.js.map +1 -1
- package/dist/scanner/processor.d.ts +2 -2
- package/dist/scanner/processor.d.ts.map +1 -1
- package/dist/scanner/processor.js +3 -3
- package/dist/scanner/processor.js.map +1 -1
- package/dist/search/index.d.ts +2 -2
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +2 -2
- package/dist/search/index.js.map +1 -1
- package/dist/search/smart.d.ts +1 -1
- package/dist/search/smart.d.ts.map +1 -1
- package/dist/search/smart.js +3 -7
- package/dist/search/smart.js.map +1 -1
- package/dist/search/terms.js.map +1 -1
- package/dist/types/core.d.ts +5 -4
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +2 -2
- package/dist/types/internal.d.ts +7 -4
- package/dist/types/internal.d.ts.map +1 -1
- package/package.json +12 -2
- package/src/cache.ts +59 -0
- package/src/cli/index.ts +112 -114
- package/src/cli/init.ts +104 -108
- package/src/cli/list.ts +84 -77
- package/src/cli/resolve.ts +57 -57
- package/src/cli/search.ts +72 -72
- package/src/cli/searchparam.ts +118 -117
- package/src/constants.ts +1 -1
- package/src/fs/index.ts +1 -1
- package/src/fs/utils.ts +16 -16
- package/src/index.ts +9 -12
- package/src/manager/canonical.ts +349 -360
- package/src/manager/index.ts +1 -3
- package/src/package.ts +79 -0
- package/src/reference.ts +77 -0
- package/src/resolver.ts +38 -0
- package/src/scanner/directory.ts +25 -31
- package/src/scanner/index.ts +4 -4
- package/src/scanner/package.ts +26 -29
- package/src/scanner/parser.ts +25 -27
- package/src/scanner/processor.ts +51 -55
- package/src/search/index.ts +2 -2
- package/src/search/smart.ts +41 -48
- package/src/search/terms.ts +17 -17
- package/src/types/core.ts +102 -89
- package/src/types/index.ts +2 -2
- package/src/types/internal.ts +36 -34
- package/dist/cache/core.d.ts +0 -7
- package/dist/cache/core.d.ts.map +0 -1
- package/dist/cache/core.js +0 -11
- package/dist/cache/core.js.map +0 -1
- package/dist/cache/index.d.ts +0 -4
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -4
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/persistence.d.ts +0 -5
- package/dist/cache/persistence.d.ts.map +0 -1
- package/dist/cache/persistence.js +0 -25
- package/dist/cache/persistence.js.map +0 -1
- package/dist/cache/validation.d.ts +0 -2
- package/dist/cache/validation.d.ts.map +0 -1
- package/dist/cache/validation.js +0 -21
- package/dist/cache/validation.js.map +0 -1
- package/dist/package/detector.d.ts +0 -2
- package/dist/package/detector.d.ts.map +0 -1
- package/dist/package/detector.js +0 -19
- package/dist/package/detector.js.map +0 -1
- package/dist/package/index.d.ts +0 -3
- package/dist/package/index.d.ts.map +0 -1
- package/dist/package/index.js +0 -3
- package/dist/package/index.js.map +0 -1
- package/dist/package/installer.d.ts +0 -2
- package/dist/package/installer.d.ts.map +0 -1
- package/dist/package/installer.js +0 -55
- package/dist/package/installer.js.map +0 -1
- package/dist/reference/index.d.ts +0 -5
- package/dist/reference/index.d.ts.map +0 -1
- package/dist/reference/index.js +0 -4
- package/dist/reference/index.js.map +0 -1
- package/dist/reference/manager.d.ts.map +0 -1
- package/dist/reference/manager.js.map +0 -1
- package/dist/reference/store.d.ts +0 -6
- package/dist/reference/store.d.ts.map +0 -1
- package/dist/reference/store.js +0 -6
- package/dist/reference/store.js.map +0 -1
- package/dist/resolver/context.d.ts +0 -4
- package/dist/resolver/context.d.ts.map +0 -1
- package/dist/resolver/context.js.map +0 -1
- package/dist/resolver/index.d.ts +0 -2
- package/dist/resolver/index.d.ts.map +0 -1
- package/dist/resolver/index.js +0 -2
- package/dist/resolver/index.js.map +0 -1
- package/src/cache/core.ts +0 -20
- package/src/cache/index.ts +0 -7
- package/src/cache/persistence.ts +0 -39
- package/src/cache/validation.ts +0 -27
- package/src/package/detector.ts +0 -24
- package/src/package/index.ts +0 -6
- package/src/package/installer.ts +0 -77
- package/src/reference/index.ts +0 -10
- package/src/reference/manager.ts +0 -51
- package/src/reference/store.ts +0 -15
- package/src/resolver/context.ts +0 -25
- package/src/resolver/index.ts +0 -5
package/src/cli/index.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import * as fs from "fs";
|
|
4
|
-
import * as path from "path";
|
|
5
|
-
import { fileURLToPath } from "url";
|
|
6
|
-
import {
|
|
7
|
-
import type { Config, IndexEntry, PackageInfo } from "../index.js";
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import type { Config } from "../index.js";
|
|
8
7
|
|
|
9
8
|
// Command handlers
|
|
10
9
|
import { initCommand } from "./init.js";
|
|
11
10
|
import { listCommand } from "./list.js";
|
|
12
|
-
import { searchCommand } from "./search.js";
|
|
13
11
|
import { resolveCommand } from "./resolve.js";
|
|
12
|
+
import { searchCommand } from "./search.js";
|
|
14
13
|
import { searchParamCommand } from "./searchparam.js";
|
|
15
14
|
|
|
16
15
|
// Get version from package.json
|
|
@@ -20,15 +19,15 @@ const packageJsonPath = path.join(__dirname, "..", "..", "package.json");
|
|
|
20
19
|
|
|
21
20
|
let VERSION = "unknown";
|
|
22
21
|
try {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} catch (
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
23
|
+
VERSION = packageJson.version;
|
|
24
|
+
} catch (_error) {
|
|
25
|
+
// Fallback version if package.json can't be read
|
|
26
|
+
VERSION = "0.0.3";
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
function showHelp() {
|
|
31
|
-
|
|
30
|
+
console.log(`
|
|
32
31
|
fcm - FHIR Canonical Manager CLI
|
|
33
32
|
|
|
34
33
|
Usage: fcm <command> [options]
|
|
@@ -54,130 +53,129 @@ Examples:
|
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
async function main() {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
56
|
+
const args = process.argv.slice(2);
|
|
57
|
+
const command = args[0];
|
|
58
|
+
|
|
59
|
+
if (!command || command === "--help" || command === "-h") {
|
|
60
|
+
showHelp();
|
|
61
|
+
if (process.env.NODE_ENV === "test") {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
process.exit(0);
|
|
64
65
|
}
|
|
65
|
-
process.exit(0);
|
|
66
|
-
}
|
|
67
66
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
if (command === "--version" || command === "-v") {
|
|
68
|
+
console.log(VERSION);
|
|
69
|
+
if (process.env.NODE_ENV === "test") {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
process.exit(0);
|
|
72
73
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
74
|
+
|
|
75
|
+
const commands: Record<string, (args: string[]) => Promise<void>> = {
|
|
76
|
+
init: initCommand,
|
|
77
|
+
list: listCommand,
|
|
78
|
+
search: searchCommand,
|
|
79
|
+
resolve: resolveCommand,
|
|
80
|
+
searchparam: searchParamCommand,
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
if (!commands[command]) {
|
|
84
|
+
console.error(`Error: Unknown command '${command}'`);
|
|
85
|
+
console.error(`Run 'fcm --help' for usage information`);
|
|
86
|
+
if (process.env.NODE_ENV === "test") {
|
|
87
|
+
throw new Error(`Unknown command '${command}'`);
|
|
88
|
+
}
|
|
89
|
+
process.exit(1);
|
|
89
90
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (process.env.NODE_ENV === 'test') {
|
|
100
|
-
throw error;
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
await commands[command](args.slice(1));
|
|
94
|
+
} catch (error) {
|
|
95
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
96
|
+
if (process.env.NODE_ENV === "test") {
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
process.exit(1);
|
|
101
100
|
}
|
|
102
|
-
process.exit(1);
|
|
103
|
-
}
|
|
104
101
|
}
|
|
105
102
|
|
|
106
103
|
// Export utility functions for commands
|
|
107
104
|
export function parseArgs(args: string[]): {
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
positional: string[];
|
|
106
|
+
options: Record<string, string | boolean>;
|
|
110
107
|
} {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
108
|
+
const positional: string[] = [];
|
|
109
|
+
const options: Record<string, string | boolean> = {};
|
|
110
|
+
|
|
111
|
+
for (let i = 0; i < args.length; i++) {
|
|
112
|
+
const arg = args[i];
|
|
113
|
+
if (arg?.startsWith("--")) {
|
|
114
|
+
const key = arg.slice(2);
|
|
115
|
+
const nextArg = args[i + 1];
|
|
116
|
+
if (nextArg && !nextArg.startsWith("--")) {
|
|
117
|
+
options[key] = nextArg;
|
|
118
|
+
i++;
|
|
119
|
+
} else {
|
|
120
|
+
options[key] = true;
|
|
121
|
+
}
|
|
122
|
+
} else if (arg?.startsWith("-")) {
|
|
123
|
+
// Handle short aliases
|
|
124
|
+
switch (arg) {
|
|
125
|
+
case "-sd":
|
|
126
|
+
options.resourceType = "StructureDefinition";
|
|
127
|
+
break;
|
|
128
|
+
case "-cs":
|
|
129
|
+
options.resourceType = "CodeSystem";
|
|
130
|
+
break;
|
|
131
|
+
case "-vs":
|
|
132
|
+
options.resourceType = "ValueSet";
|
|
133
|
+
break;
|
|
134
|
+
default: {
|
|
135
|
+
// Handle other single-letter flags
|
|
136
|
+
const key = arg.slice(1);
|
|
137
|
+
const nextArg = args[i + 1];
|
|
138
|
+
if (nextArg && !nextArg.startsWith("-")) {
|
|
139
|
+
options[key] = nextArg;
|
|
140
|
+
i++;
|
|
141
|
+
} else {
|
|
142
|
+
options[key] = true;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
} else if (arg) {
|
|
147
|
+
positional.push(arg);
|
|
148
|
+
}
|
|
150
149
|
}
|
|
151
|
-
}
|
|
152
150
|
|
|
153
|
-
|
|
151
|
+
return { positional, options };
|
|
154
152
|
}
|
|
155
153
|
|
|
156
154
|
export async function loadPackageJson(): Promise<any> {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
155
|
+
const packagePath = path.join(process.cwd(), "package.json");
|
|
156
|
+
try {
|
|
157
|
+
if (fs.existsSync(packagePath)) {
|
|
158
|
+
const content = fs.readFileSync(packagePath, "utf-8");
|
|
159
|
+
return JSON.parse(content);
|
|
160
|
+
}
|
|
161
|
+
} catch (_error) {
|
|
162
|
+
// Ignore parse errors
|
|
162
163
|
}
|
|
163
|
-
|
|
164
|
-
// Ignore parse errors
|
|
165
|
-
}
|
|
166
|
-
return null;
|
|
164
|
+
return null;
|
|
167
165
|
}
|
|
168
166
|
|
|
169
167
|
export async function savePackageJson(data: any): Promise<void> {
|
|
170
|
-
|
|
171
|
-
|
|
168
|
+
const packagePath = path.join(process.cwd(), "package.json");
|
|
169
|
+
fs.writeFileSync(packagePath, `${JSON.stringify(data, null, 2)}\n`);
|
|
172
170
|
}
|
|
173
171
|
|
|
174
172
|
export function getConfigFromPackageJson(packageJson: any): Partial<Config> {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
173
|
+
const fcm = packageJson?.fcm || {};
|
|
174
|
+
return {
|
|
175
|
+
packages: fcm.packages || [],
|
|
176
|
+
registry: fcm.registry,
|
|
177
|
+
workingDir: process.cwd(),
|
|
178
|
+
};
|
|
181
179
|
}
|
|
182
180
|
|
|
183
181
|
main();
|
package/src/cli/init.ts
CHANGED
|
@@ -1,116 +1,112 @@
|
|
|
1
|
-
import
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import {
|
|
4
|
-
import { promisify } from "util";
|
|
5
|
-
import { parseArgs, loadPackageJson, savePackageJson } from "./index.js";
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { promisify } from "node:util";
|
|
6
4
|
import { CanonicalManager } from "../index.js";
|
|
5
|
+
import { loadPackageJson, parseArgs, savePackageJson } from "./index.js";
|
|
7
6
|
|
|
8
7
|
const execAsync = promisify(exec);
|
|
9
8
|
|
|
10
9
|
export async function initCommand(args: string[]): Promise<void> {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Initialize fcm config
|
|
29
|
-
if (!packageJson.fcm) {
|
|
30
|
-
packageJson.fcm = {
|
|
31
|
-
packages: [],
|
|
32
|
-
registry: registry
|
|
33
|
-
? (registry.endsWith('/') ? registry : `${registry}/`)
|
|
34
|
-
: "https://fs.get-ig.org/pkgs/",
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// If no packages specified, use packages from config
|
|
39
|
-
const packagesToInstall =
|
|
40
|
-
packages.length > 0 ? packages : packageJson.fcm.packages;
|
|
41
|
-
|
|
42
|
-
if (packagesToInstall.length === 0) {
|
|
43
|
-
console.error("Error: No packages specified");
|
|
44
|
-
console.error("Usage: fcm init [packages...]");
|
|
45
|
-
console.error("Example: fcm init hl7.fhir.r4.core hl7.fhir.us.core@5.0.1");
|
|
46
|
-
if (process.env.NODE_ENV === 'test') {
|
|
47
|
-
throw new Error("No packages specified");
|
|
10
|
+
const { positional, options } = parseArgs(args);
|
|
11
|
+
const packages = positional;
|
|
12
|
+
const registry = options.registry as string | undefined;
|
|
13
|
+
|
|
14
|
+
// Load or create package.json
|
|
15
|
+
let packageJson = await loadPackageJson();
|
|
16
|
+
const isNewPackageJson = !packageJson;
|
|
17
|
+
|
|
18
|
+
if (!packageJson) {
|
|
19
|
+
// Create minimal package.json
|
|
20
|
+
packageJson = {
|
|
21
|
+
name: path.basename(process.cwd()),
|
|
22
|
+
version: "1.0.0",
|
|
23
|
+
type: "module",
|
|
24
|
+
};
|
|
48
25
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
26
|
+
|
|
27
|
+
// Initialize fcm config
|
|
28
|
+
if (!packageJson.fcm) {
|
|
29
|
+
packageJson.fcm = {
|
|
30
|
+
packages: [],
|
|
31
|
+
registry: registry ? (registry.endsWith("/") ? registry : `${registry}/`) : "https://fs.get-ig.org/pkgs/",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// If no packages specified, use packages from config
|
|
36
|
+
const packagesToInstall = packages.length > 0 ? packages : packageJson.fcm.packages;
|
|
37
|
+
|
|
38
|
+
if (packagesToInstall.length === 0) {
|
|
39
|
+
console.error("Error: No packages specified");
|
|
40
|
+
console.error("Usage: fcm init [packages...]");
|
|
41
|
+
console.error("Example: fcm init hl7.fhir.r4.core hl7.fhir.us.core@5.0.1");
|
|
42
|
+
if (process.env.NODE_ENV === "test") {
|
|
43
|
+
throw new Error("No packages specified");
|
|
44
|
+
}
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Update fcm packages list (merge with existing)
|
|
49
|
+
const existingPackages = new Set(packageJson.fcm.packages);
|
|
50
|
+
packagesToInstall.forEach((pkg: string) => {
|
|
51
|
+
existingPackages.add(pkg);
|
|
52
|
+
});
|
|
53
|
+
packageJson.fcm.packages = Array.from(existingPackages);
|
|
54
|
+
|
|
55
|
+
// Update registry if provided, ensuring it ends with /
|
|
56
|
+
if (registry) {
|
|
57
|
+
packageJson.fcm.registry = registry.endsWith("/") ? registry : `${registry}/`;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Initialize dependencies if not present
|
|
61
|
+
if (!packageJson.dependencies) {
|
|
62
|
+
packageJson.dependencies = {};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Save package.json
|
|
66
|
+
await savePackageJson(packageJson);
|
|
67
|
+
|
|
68
|
+
if (isNewPackageJson) {
|
|
69
|
+
console.log("Created package.json");
|
|
93
70
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
71
|
+
|
|
72
|
+
// Install packages using npm
|
|
73
|
+
console.log("Installing FHIR packages...");
|
|
74
|
+
|
|
75
|
+
for (const pkg of packagesToInstall) {
|
|
76
|
+
console.log(`Installing ${pkg}...`);
|
|
77
|
+
try {
|
|
78
|
+
const command = packageJson.fcm.registry
|
|
79
|
+
? `npm install ${pkg} --registry ${packageJson.fcm.registry}`
|
|
80
|
+
: `npm install ${pkg}`;
|
|
81
|
+
|
|
82
|
+
await execAsync(command, {
|
|
83
|
+
cwd: process.cwd(),
|
|
84
|
+
maxBuffer: 10 * 1024 * 1024, // 10MB buffer
|
|
85
|
+
});
|
|
86
|
+
} catch (error) {
|
|
87
|
+
console.error(`Failed to install ${pkg}`);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Initialize CanonicalManager to build cache
|
|
93
|
+
console.log("Building package index...");
|
|
94
|
+
console.log("Registry", packageJson?.fcm?.registry);
|
|
95
|
+
const manager = CanonicalManager({
|
|
96
|
+
packages: packageJson.fcm.packages,
|
|
97
|
+
workingDir: process.cwd(),
|
|
98
|
+
registry: packageJson.fcm.registry,
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
await manager.init();
|
|
102
|
+
|
|
103
|
+
// Show summary
|
|
104
|
+
const installedPackages = await manager.packages();
|
|
105
|
+
console.log("\nInstalled packages:");
|
|
106
|
+
installedPackages.forEach((pkg) => {
|
|
107
|
+
console.log(` ${pkg.name}@${pkg.version}`);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
await manager.destroy();
|
|
111
|
+
console.log("\nInitialization complete!");
|
|
116
112
|
}
|