babelfhir-ts 1.0.14 → 1.0.16
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/out/main.js +49 -28
- package/package.json +2 -1
package/out/main.js
CHANGED
|
@@ -12,7 +12,7 @@ function printUsage() {
|
|
|
12
12
|
console.log("");
|
|
13
13
|
console.log("Usage:");
|
|
14
14
|
console.log(" babelfhir-ts [options] [<input> [output]]");
|
|
15
|
-
console.log(" babelfhir-ts install [--package] <pkg@version> [--registry <url>] [options]");
|
|
15
|
+
console.log(" babelfhir-ts install [--package] <pkg@version|path> [--registry <url>] [options]");
|
|
16
16
|
console.log("");
|
|
17
17
|
console.log("Arguments:");
|
|
18
18
|
console.log(" input Input can be:");
|
|
@@ -35,12 +35,13 @@ function printUsage() {
|
|
|
35
35
|
console.log(" --registry <url> FHIR package registry URL (default: https://packages.simplifier.net)");
|
|
36
36
|
console.log("");
|
|
37
37
|
console.log("Examples:");
|
|
38
|
-
console.log(" babelfhir-ts
|
|
39
|
-
console.log(" babelfhir-ts package.tgz # Process package to
|
|
38
|
+
console.log(" babelfhir-ts # Process ./input to ./output");
|
|
39
|
+
console.log(" babelfhir-ts package.tgz # Process package to current directory");
|
|
40
40
|
console.log(" babelfhir-ts package.tgz modified-package.tgz # Embed interfaces in package");
|
|
41
41
|
console.log(" babelfhir-ts profiles/ generated/ # Process directory to directory");
|
|
42
42
|
console.log(" babelfhir-ts --package hl7.fhir.us.core@8.0.0 # Download and process from default registry");
|
|
43
43
|
console.log(" babelfhir-ts install de.gematik.isik-basismodul@3.1.0 # Download, process, and npm install");
|
|
44
|
+
console.log(" babelfhir-ts install ./package.tgz # Install from local package file");
|
|
44
45
|
console.log(" babelfhir-ts install hl7.fhir.us.core@8.0.0 --registry <url> # Install from custom registry");
|
|
45
46
|
console.log(" babelfhir-ts install --package hl7.fhir.us.core@8.0.0 --registry <url> # Alternative syntax");
|
|
46
47
|
}
|
|
@@ -203,57 +204,69 @@ async function run() {
|
|
|
203
204
|
// Package can come from --package flag OR as positional argument after 'install'
|
|
204
205
|
const packageToInstall = packageSpec || positionals[1];
|
|
205
206
|
if (!packageToInstall) {
|
|
206
|
-
console.error('Error: install command requires a package name');
|
|
207
|
+
console.error('Error: install command requires a package name or local .tgz/.zip file');
|
|
207
208
|
console.error('Example: babelfhir-ts install de.gematik.isik-basismodul@3.1.0');
|
|
208
209
|
console.error(' or: babelfhir-ts install --package hl7.fhir.us.core@8.0.0');
|
|
210
|
+
console.error(' or: babelfhir-ts install ./package.tgz');
|
|
209
211
|
process.exit(1);
|
|
210
212
|
}
|
|
213
|
+
// Force no-cache for install command
|
|
214
|
+
flags.noCache = true;
|
|
211
215
|
try {
|
|
212
|
-
|
|
213
|
-
|
|
216
|
+
let downloadedPath;
|
|
217
|
+
// Check if packageToInstall is a local file path
|
|
218
|
+
if (fs.existsSync(packageToInstall) && (packageToInstall.endsWith('.tgz') || packageToInstall.endsWith('.zip'))) {
|
|
219
|
+
console.log(`Using local package: ${packageToInstall}`);
|
|
220
|
+
downloadedPath = path.resolve(packageToInstall);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// Download from registry
|
|
224
|
+
downloadedPath = await downloadPackage(packageToInstall, registry);
|
|
225
|
+
}
|
|
214
226
|
console.log(`Processing package...`);
|
|
215
227
|
const baseName = path.basename(downloadedPath, path.extname(downloadedPath));
|
|
216
228
|
const outputArchive = path.join(process.cwd(), `${baseName}.with-generated.tgz`);
|
|
217
229
|
await generateIntoPackage(downloadedPath, outputArchive, flags);
|
|
218
|
-
// Clean up temp directory
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
fs.
|
|
230
|
+
// Clean up temp directory only if we downloaded from registry (not for local files)
|
|
231
|
+
if (!fs.existsSync(packageToInstall) || !(packageToInstall.endsWith('.tgz') || packageToInstall.endsWith('.zip'))) {
|
|
232
|
+
const tempDir = path.join(process.cwd(), '.temp-download');
|
|
233
|
+
if (fs.existsSync(tempDir)) {
|
|
234
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
235
|
+
}
|
|
222
236
|
}
|
|
223
237
|
console.log(`✓ Package processed successfully: ${path.basename(outputArchive)}`);
|
|
224
238
|
// Extract the archive to access generated folder
|
|
225
|
-
console.log(`Extracting
|
|
239
|
+
console.log(`Extracting generated code...`);
|
|
226
240
|
const { extract } = await import('tar');
|
|
227
241
|
const extractDir = path.join(process.cwd(), '.temp-install');
|
|
228
242
|
if (!fs.existsSync(extractDir)) {
|
|
229
243
|
fs.mkdirSync(extractDir, { recursive: true });
|
|
230
244
|
}
|
|
231
245
|
await extract({ cwd: extractDir, file: outputArchive });
|
|
232
|
-
//
|
|
233
|
-
|
|
246
|
+
// Look for generated folder - could be at root or under 'package' subfolder
|
|
247
|
+
let generatedDir = path.join(extractDir, 'generated');
|
|
248
|
+
if (!fs.existsSync(generatedDir)) {
|
|
249
|
+
generatedDir = path.join(extractDir, 'package', 'generated');
|
|
250
|
+
}
|
|
234
251
|
if (!fs.existsSync(generatedDir)) {
|
|
235
252
|
throw new Error('Generated folder not found in package archive');
|
|
236
253
|
}
|
|
237
|
-
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
//
|
|
246
|
-
await npmInstall(generatedTarball);
|
|
247
|
-
// Clean up extraction directory and archives
|
|
254
|
+
// Verify package.json exists
|
|
255
|
+
const pkgJsonPath = path.join(generatedDir, 'package.json');
|
|
256
|
+
if (!fs.existsSync(pkgJsonPath)) {
|
|
257
|
+
throw new Error(`package.json not found in generated folder: ${generatedDir}`);
|
|
258
|
+
}
|
|
259
|
+
console.log(`Installing from: ${path.relative(process.cwd(), generatedDir)}`);
|
|
260
|
+
// Install directly from the generated folder
|
|
261
|
+
await npmInstall(generatedDir);
|
|
262
|
+
// Clean up temporary files
|
|
248
263
|
console.log(`Cleaning up temporary files...`);
|
|
249
264
|
if (fs.existsSync(extractDir)) {
|
|
250
265
|
fs.rmSync(extractDir, { recursive: true, force: true });
|
|
251
266
|
}
|
|
252
267
|
if (fs.existsSync(outputArchive)) {
|
|
253
268
|
fs.unlinkSync(outputArchive);
|
|
254
|
-
|
|
255
|
-
if (fs.existsSync(generatedTarball)) {
|
|
256
|
-
fs.unlinkSync(generatedTarball);
|
|
269
|
+
console.log(`✓ Removed ${path.basename(outputArchive)}`);
|
|
257
270
|
}
|
|
258
271
|
if (flags.noCache) {
|
|
259
272
|
cleanupCache();
|
|
@@ -262,7 +275,7 @@ async function run() {
|
|
|
262
275
|
return;
|
|
263
276
|
}
|
|
264
277
|
catch (error) {
|
|
265
|
-
// Clean up
|
|
278
|
+
// Clean up temporary files on error
|
|
266
279
|
const tempDir = path.join(process.cwd(), '.temp-download');
|
|
267
280
|
if (fs.existsSync(tempDir)) {
|
|
268
281
|
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
@@ -271,6 +284,14 @@ async function run() {
|
|
|
271
284
|
if (fs.existsSync(extractDir)) {
|
|
272
285
|
fs.rmSync(extractDir, { recursive: true, force: true });
|
|
273
286
|
}
|
|
287
|
+
// Clean up any leftover archive
|
|
288
|
+
const baseName = packageToInstall.includes('@')
|
|
289
|
+
? packageToInstall.replace('@', '-').replace(/\//g, '-')
|
|
290
|
+
: path.basename(packageToInstall, path.extname(packageToInstall));
|
|
291
|
+
const outputArchive = path.join(process.cwd(), `${baseName}.with-generated.tgz`);
|
|
292
|
+
if (fs.existsSync(outputArchive)) {
|
|
293
|
+
fs.unlinkSync(outputArchive);
|
|
294
|
+
}
|
|
274
295
|
console.error(`Error: ${error.message}`);
|
|
275
296
|
process.exit(1);
|
|
276
297
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "babelfhir-ts",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"description": "BabelFHIR-TS: generate TypeScript interfaces, validators, and helper classes from FHIR R4 StructureDefinitions (profiles) directly inside package archives.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "out/main.js",
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
"@vitest/eslint-plugin": "^1.1.44",
|
|
67
67
|
"axios": "^1.8.4",
|
|
68
68
|
"fhirpath": "^4.0.0",
|
|
69
|
+
"pink.admission-generated": "file:.temp-install/generated",
|
|
69
70
|
"tar": "^7.4.3",
|
|
70
71
|
"ts-morph": "^25.0.1",
|
|
71
72
|
"tsx": "^4.19.3",
|