@atomic-ehr/codegen 0.0.1-canary.20251007145120.703d8ab → 0.0.1-canary.20251007214454.7cafa75
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/cli/index.js +16 -29
- package/dist/index.d.ts +2 -12
- package/dist/index.js +41 -259
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -3,12 +3,9 @@ import * as FS from '@atomic-ehr/fhirschema';
|
|
|
3
3
|
import { FHIRSchema, StructureDefinition } from '@atomic-ehr/fhirschema';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* CodeGen Logger
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Log levels in order of severity
|
|
8
|
+
* Clean, colorful logging designed for code generation tools
|
|
12
9
|
*/
|
|
13
10
|
declare enum LogLevel {
|
|
14
11
|
DEBUG = 0,
|
|
@@ -17,13 +14,6 @@ declare enum LogLevel {
|
|
|
17
14
|
ERROR = 3,
|
|
18
15
|
SILENT = 4
|
|
19
16
|
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* CodeGen Logger
|
|
23
|
-
*
|
|
24
|
-
* Clean, colorful logging designed for code generation tools
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
17
|
interface LogOptions {
|
|
28
18
|
prefix?: string;
|
|
29
19
|
timestamp?: boolean;
|
package/dist/index.js
CHANGED
|
@@ -1414,7 +1414,7 @@ function isBindingSchema(schema) {
|
|
|
1414
1414
|
}
|
|
1415
1415
|
|
|
1416
1416
|
// src/typeschema/register.ts
|
|
1417
|
-
var registerFromManager = async (manager,
|
|
1417
|
+
var registerFromManager = async (manager, logger) => {
|
|
1418
1418
|
const packages = await manager.packages();
|
|
1419
1419
|
const flatRawIndex = {};
|
|
1420
1420
|
const indexByPackages = [];
|
|
@@ -1450,7 +1450,7 @@ var registerFromManager = async (manager, logger2) => {
|
|
|
1450
1450
|
nameToCanonical[rfs.name] = rfs.url;
|
|
1451
1451
|
fsSuccess++;
|
|
1452
1452
|
} catch (error) {
|
|
1453
|
-
|
|
1453
|
+
logger?.warn(
|
|
1454
1454
|
`Failed to convert StructureDefinition ${sd.name || sd.id}: ${error instanceof Error ? error.message : String(error)}`
|
|
1455
1455
|
);
|
|
1456
1456
|
fsFailed++;
|
|
@@ -1463,7 +1463,7 @@ var registerFromManager = async (manager, logger2) => {
|
|
|
1463
1463
|
vsIndex[resource.url] = resource;
|
|
1464
1464
|
}
|
|
1465
1465
|
}
|
|
1466
|
-
|
|
1466
|
+
logger?.success(
|
|
1467
1467
|
`FHIR Schema conversion for '${packageMetaToFhir(packageMeta)}' completed: ${fsSuccess} successful, ${fsFailed} failed`
|
|
1468
1468
|
);
|
|
1469
1469
|
}
|
|
@@ -1596,7 +1596,7 @@ function mkBindingIdentifier(fhirSchema, path, bindingName) {
|
|
|
1596
1596
|
}
|
|
1597
1597
|
|
|
1598
1598
|
// src/typeschema/profile/processor.ts
|
|
1599
|
-
async function transformProfile(register, fhirSchema,
|
|
1599
|
+
async function transformProfile(register, fhirSchema, logger) {
|
|
1600
1600
|
const identifier = mkIdentifier(fhirSchema);
|
|
1601
1601
|
if (identifier.kind !== "profile") {
|
|
1602
1602
|
throw new Error(`Expected profile, got ${identifier.kind} for ${fhirSchema.name}`);
|
|
@@ -1628,7 +1628,7 @@ async function transformProfile(register, fhirSchema, logger2) {
|
|
|
1628
1628
|
profileSchema.metadata = metadata;
|
|
1629
1629
|
}
|
|
1630
1630
|
if (fhirSchema.elements) {
|
|
1631
|
-
const fields = await mkFields(register, fhirSchema, [], fhirSchema.elements,
|
|
1631
|
+
const fields = await mkFields(register, fhirSchema, [], fhirSchema.elements, logger);
|
|
1632
1632
|
if (fields && Object.keys(fields).length > 0) {
|
|
1633
1633
|
profileSchema.fields = fields;
|
|
1634
1634
|
}
|
|
@@ -1825,13 +1825,13 @@ function buildFieldType(register, fhirSchema, element) {
|
|
|
1825
1825
|
}
|
|
1826
1826
|
return void 0;
|
|
1827
1827
|
}
|
|
1828
|
-
var mkField = (register, fhirSchema, path, element,
|
|
1828
|
+
var mkField = (register, fhirSchema, path, element, logger) => {
|
|
1829
1829
|
let binding;
|
|
1830
1830
|
let enumValues;
|
|
1831
1831
|
if (element.binding) {
|
|
1832
1832
|
binding = mkBindingIdentifier(fhirSchema, path, element.binding.bindingName);
|
|
1833
1833
|
if (element.binding.strength === "required" && element.type === "code") {
|
|
1834
|
-
enumValues = buildEnum(register, element,
|
|
1834
|
+
enumValues = buildEnum(register, element, logger);
|
|
1835
1835
|
}
|
|
1836
1836
|
}
|
|
1837
1837
|
return {
|
|
@@ -1864,7 +1864,7 @@ function mkNestedField(register, fhirSchema, path, element) {
|
|
|
1864
1864
|
}
|
|
1865
1865
|
|
|
1866
1866
|
// src/typeschema/core/binding.ts
|
|
1867
|
-
function extractValueSetConceptsByUrl(register, valueSetUrl,
|
|
1867
|
+
function extractValueSetConceptsByUrl(register, valueSetUrl, logger) {
|
|
1868
1868
|
const cleanUrl = dropVersionFromUrl(valueSetUrl) || valueSetUrl;
|
|
1869
1869
|
const valueSet = register.resolveVs(cleanUrl);
|
|
1870
1870
|
if (!valueSet) return void 0;
|
|
@@ -1909,7 +1909,7 @@ function extractValueSetConcepts(register, valueSet, _logger) {
|
|
|
1909
1909
|
return concepts.length > 0 ? concepts : void 0;
|
|
1910
1910
|
}
|
|
1911
1911
|
var MAX_ENUM_LENGTH = 100;
|
|
1912
|
-
function buildEnum(register, element,
|
|
1912
|
+
function buildEnum(register, element, logger) {
|
|
1913
1913
|
if (!element.binding) return void 0;
|
|
1914
1914
|
const strength = element.binding.strength;
|
|
1915
1915
|
const valueSetUrl = element.binding.valueSet;
|
|
@@ -1920,14 +1920,14 @@ function buildEnum(register, element, logger2) {
|
|
|
1920
1920
|
if (!concepts || concepts.length === 0) return void 0;
|
|
1921
1921
|
const codes = concepts.map((c) => c.code).filter((code) => code && typeof code === "string" && code.trim().length > 0);
|
|
1922
1922
|
if (codes.length > MAX_ENUM_LENGTH) {
|
|
1923
|
-
|
|
1923
|
+
logger?.dry_warn(
|
|
1924
1924
|
`Value set ${valueSetUrl} has ${codes.length} which is more than ${MAX_ENUM_LENGTH} codes, which may cause issues with code generation.`
|
|
1925
1925
|
);
|
|
1926
1926
|
return void 0;
|
|
1927
1927
|
}
|
|
1928
1928
|
return codes.length > 0 ? codes : void 0;
|
|
1929
1929
|
}
|
|
1930
|
-
function generateBindingSchema(register, fhirSchema, path, element,
|
|
1930
|
+
function generateBindingSchema(register, fhirSchema, path, element, logger) {
|
|
1931
1931
|
if (!element.binding?.valueSet) return void 0;
|
|
1932
1932
|
const identifier = mkBindingIdentifier(fhirSchema, path, element.binding.bindingName);
|
|
1933
1933
|
const fieldType = buildFieldType(register, fhirSchema, element);
|
|
@@ -1937,7 +1937,7 @@ function generateBindingSchema(register, fhirSchema, path, element, logger2) {
|
|
|
1937
1937
|
dependencies.push(fieldType);
|
|
1938
1938
|
}
|
|
1939
1939
|
dependencies.push(valueSetIdentifier);
|
|
1940
|
-
const enumValues = buildEnum(register, element,
|
|
1940
|
+
const enumValues = buildEnum(register, element, logger);
|
|
1941
1941
|
return {
|
|
1942
1942
|
identifier,
|
|
1943
1943
|
type: fieldType,
|
|
@@ -1947,7 +1947,7 @@ function generateBindingSchema(register, fhirSchema, path, element, logger2) {
|
|
|
1947
1947
|
dependencies
|
|
1948
1948
|
};
|
|
1949
1949
|
}
|
|
1950
|
-
function collectBindingSchemas(register, fhirSchema,
|
|
1950
|
+
function collectBindingSchemas(register, fhirSchema, logger) {
|
|
1951
1951
|
const processedPaths = /* @__PURE__ */ new Set();
|
|
1952
1952
|
if (!fhirSchema.elements) return [];
|
|
1953
1953
|
const bindings = [];
|
|
@@ -1958,7 +1958,7 @@ function collectBindingSchemas(register, fhirSchema, logger2) {
|
|
|
1958
1958
|
if (processedPaths.has(pathKey)) continue;
|
|
1959
1959
|
processedPaths.add(pathKey);
|
|
1960
1960
|
if (element.binding) {
|
|
1961
|
-
const binding = generateBindingSchema(register, fhirSchema, path, element,
|
|
1961
|
+
const binding = generateBindingSchema(register, fhirSchema, path, element, logger);
|
|
1962
1962
|
if (binding) {
|
|
1963
1963
|
bindings.push(binding);
|
|
1964
1964
|
}
|
|
@@ -1995,19 +1995,19 @@ function collectNestedElements(fhirSchema, parentPath, elements) {
|
|
|
1995
1995
|
}
|
|
1996
1996
|
return nested;
|
|
1997
1997
|
}
|
|
1998
|
-
function transformNestedElements(fhirSchema, parentPath, elements, register,
|
|
1998
|
+
function transformNestedElements(fhirSchema, parentPath, elements, register, logger) {
|
|
1999
1999
|
const fields = {};
|
|
2000
2000
|
for (const [key, element] of Object.entries(elements)) {
|
|
2001
2001
|
const path = [...parentPath, key];
|
|
2002
2002
|
if (isNestedElement(element)) {
|
|
2003
2003
|
fields[key] = mkNestedField(register, fhirSchema, path, element);
|
|
2004
2004
|
} else {
|
|
2005
|
-
fields[key] = mkField(register, fhirSchema, path, element,
|
|
2005
|
+
fields[key] = mkField(register, fhirSchema, path, element, logger);
|
|
2006
2006
|
}
|
|
2007
2007
|
}
|
|
2008
2008
|
return fields;
|
|
2009
2009
|
}
|
|
2010
|
-
function mkNestedTypes(register, fhirSchema,
|
|
2010
|
+
function mkNestedTypes(register, fhirSchema, logger) {
|
|
2011
2011
|
if (!fhirSchema.elements) return void 0;
|
|
2012
2012
|
const nestedElements = collectNestedElements(fhirSchema, [], fhirSchema.elements);
|
|
2013
2013
|
const actualNested = nestedElements.filter(
|
|
@@ -2034,7 +2034,7 @@ function mkNestedTypes(register, fhirSchema, logger2) {
|
|
|
2034
2034
|
url: `http://hl7.org/fhir/StructureDefinition/${element.type}`
|
|
2035
2035
|
};
|
|
2036
2036
|
}
|
|
2037
|
-
const fields = transformNestedElements(fhirSchema, path, element.elements, register,
|
|
2037
|
+
const fields = transformNestedElements(fhirSchema, path, element.elements, register, logger);
|
|
2038
2038
|
const nestedType = {
|
|
2039
2039
|
identifier,
|
|
2040
2040
|
base,
|
|
@@ -2064,7 +2064,7 @@ function extractNestedDependencies(nestedTypes) {
|
|
|
2064
2064
|
}
|
|
2065
2065
|
|
|
2066
2066
|
// src/typeschema/core/transformer.ts
|
|
2067
|
-
function mkFields(register, fhirSchema, parentPath, elements,
|
|
2067
|
+
function mkFields(register, fhirSchema, parentPath, elements, logger) {
|
|
2068
2068
|
if (!elements) return void 0;
|
|
2069
2069
|
const geneology = register.resolveFsGenealogy(fhirSchema.url);
|
|
2070
2070
|
const elems = {};
|
|
@@ -2089,7 +2089,7 @@ function mkFields(register, fhirSchema, parentPath, elements, logger2) {
|
|
|
2089
2089
|
if (isNestedElement(elemSnapshot)) {
|
|
2090
2090
|
fields[key] = mkNestedField(register, fhirSchema, path, elemSnapshot);
|
|
2091
2091
|
} else {
|
|
2092
|
-
fields[key] = mkField(register, fhirSchema, path, elemSnapshot,
|
|
2092
|
+
fields[key] = mkField(register, fhirSchema, path, elemSnapshot, logger);
|
|
2093
2093
|
}
|
|
2094
2094
|
}
|
|
2095
2095
|
return fields;
|
|
@@ -2134,7 +2134,7 @@ function isExtensionSchema(fhirSchema, _identifier) {
|
|
|
2134
2134
|
}
|
|
2135
2135
|
return false;
|
|
2136
2136
|
}
|
|
2137
|
-
async function transformValueSet(register, valueSet,
|
|
2137
|
+
async function transformValueSet(register, valueSet, logger) {
|
|
2138
2138
|
if (!valueSet.url) throw new Error("ValueSet URL is required");
|
|
2139
2139
|
const identifier = mkValueSetIdentifierByUrl(register, valueSet.url);
|
|
2140
2140
|
const concept = extractValueSetConceptsByUrl(register, valueSet.url);
|
|
@@ -2145,7 +2145,7 @@ async function transformValueSet(register, valueSet, logger2) {
|
|
|
2145
2145
|
compose: !concept ? valueSet.compose : void 0
|
|
2146
2146
|
};
|
|
2147
2147
|
}
|
|
2148
|
-
async function transformExtension(fhirSchema, register,
|
|
2148
|
+
async function transformExtension(fhirSchema, register, logger) {
|
|
2149
2149
|
try {
|
|
2150
2150
|
const identifier = mkIdentifier(fhirSchema);
|
|
2151
2151
|
let base;
|
|
@@ -2182,13 +2182,13 @@ async function transformExtension(fhirSchema, register, logger2) {
|
|
|
2182
2182
|
extensionSchema.dependencies.push(base);
|
|
2183
2183
|
}
|
|
2184
2184
|
if (fhirSchema.elements) {
|
|
2185
|
-
const fields = mkFields(register, fhirSchema, [], fhirSchema.elements,
|
|
2185
|
+
const fields = mkFields(register, fhirSchema, [], fhirSchema.elements, logger);
|
|
2186
2186
|
if (fields && Object.keys(fields).length > 0) {
|
|
2187
2187
|
extensionSchema.fields = fields;
|
|
2188
2188
|
extensionSchema.dependencies.push(...extractFieldDependencies(fields));
|
|
2189
2189
|
}
|
|
2190
2190
|
}
|
|
2191
|
-
const nestedTypes = mkNestedTypes(register, fhirSchema,
|
|
2191
|
+
const nestedTypes = mkNestedTypes(register, fhirSchema, logger);
|
|
2192
2192
|
if (nestedTypes && nestedTypes.length > 0) {
|
|
2193
2193
|
extensionSchema.nested = nestedTypes;
|
|
2194
2194
|
extensionSchema.dependencies.push(...extractNestedDependencies(nestedTypes));
|
|
@@ -2215,7 +2215,7 @@ function extractDependencies(identifier, base, fields, nestedTypes) {
|
|
|
2215
2215
|
const result = Object.values(uniqDeps).filter((e) => !(e.kind === "nested" && localNestedTypeUrls.has(e.url))).sort((a, b) => a.url.localeCompare(b.url));
|
|
2216
2216
|
return result.length > 0 ? result : void 0;
|
|
2217
2217
|
}
|
|
2218
|
-
function transformFhirSchemaResource(register, fhirSchema,
|
|
2218
|
+
function transformFhirSchemaResource(register, fhirSchema, logger) {
|
|
2219
2219
|
const identifier = mkIdentifier(fhirSchema);
|
|
2220
2220
|
let base;
|
|
2221
2221
|
if (fhirSchema.base && fhirSchema.type !== "Element") {
|
|
@@ -2225,8 +2225,8 @@ function transformFhirSchemaResource(register, fhirSchema, logger2) {
|
|
|
2225
2225
|
}
|
|
2226
2226
|
base = mkIdentifier(baseFs);
|
|
2227
2227
|
}
|
|
2228
|
-
const fields = mkFields(register, fhirSchema, [], fhirSchema.elements,
|
|
2229
|
-
const nested = mkNestedTypes(register, fhirSchema,
|
|
2228
|
+
const fields = mkFields(register, fhirSchema, [], fhirSchema.elements, logger);
|
|
2229
|
+
const nested = mkNestedTypes(register, fhirSchema, logger);
|
|
2230
2230
|
const dependencies = extractDependencies(identifier, base, fields, nested);
|
|
2231
2231
|
const typeSchema = {
|
|
2232
2232
|
identifier,
|
|
@@ -2236,27 +2236,27 @@ function transformFhirSchemaResource(register, fhirSchema, logger2) {
|
|
|
2236
2236
|
description: fhirSchema.description,
|
|
2237
2237
|
dependencies
|
|
2238
2238
|
};
|
|
2239
|
-
const bindingSchemas = collectBindingSchemas(register, fhirSchema,
|
|
2239
|
+
const bindingSchemas = collectBindingSchemas(register, fhirSchema, logger);
|
|
2240
2240
|
return [typeSchema, ...bindingSchemas];
|
|
2241
2241
|
}
|
|
2242
|
-
async function transformFhirSchema(register, fhirSchema,
|
|
2242
|
+
async function transformFhirSchema(register, fhirSchema, logger) {
|
|
2243
2243
|
const results = [];
|
|
2244
2244
|
const identifier = mkIdentifier(fhirSchema);
|
|
2245
2245
|
if (identifier.kind === "profile") {
|
|
2246
|
-
const profileSchema = await transformProfile(register, fhirSchema,
|
|
2246
|
+
const profileSchema = await transformProfile(register, fhirSchema, logger);
|
|
2247
2247
|
results.push(profileSchema);
|
|
2248
|
-
const bindingSchemas = collectBindingSchemas(register, fhirSchema,
|
|
2248
|
+
const bindingSchemas = collectBindingSchemas(register, fhirSchema, logger);
|
|
2249
2249
|
results.push(...bindingSchemas);
|
|
2250
2250
|
return results;
|
|
2251
2251
|
}
|
|
2252
2252
|
if (isExtensionSchema(fhirSchema)) {
|
|
2253
|
-
const extensionSchema = await transformExtension(fhirSchema, register,
|
|
2253
|
+
const extensionSchema = await transformExtension(fhirSchema, register, logger);
|
|
2254
2254
|
if (extensionSchema) {
|
|
2255
2255
|
results.push(extensionSchema);
|
|
2256
2256
|
}
|
|
2257
2257
|
return results;
|
|
2258
2258
|
}
|
|
2259
|
-
return transformFhirSchemaResource(register, fhirSchema,
|
|
2259
|
+
return transformFhirSchemaResource(register, fhirSchema, logger);
|
|
2260
2260
|
}
|
|
2261
2261
|
var TypeSchemaCache = class {
|
|
2262
2262
|
cache = /* @__PURE__ */ new Map();
|
|
@@ -2476,224 +2476,6 @@ var TypeSchemaCache = class {
|
|
|
2476
2476
|
}
|
|
2477
2477
|
}
|
|
2478
2478
|
};
|
|
2479
|
-
|
|
2480
|
-
// src/logger.ts
|
|
2481
|
-
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
2482
|
-
LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
|
|
2483
|
-
LogLevel2[LogLevel2["INFO"] = 1] = "INFO";
|
|
2484
|
-
LogLevel2[LogLevel2["WARN"] = 2] = "WARN";
|
|
2485
|
-
LogLevel2[LogLevel2["ERROR"] = 3] = "ERROR";
|
|
2486
|
-
LogLevel2[LogLevel2["SILENT"] = 4] = "SILENT";
|
|
2487
|
-
return LogLevel2;
|
|
2488
|
-
})(LogLevel || {});
|
|
2489
|
-
var ConsoleOutput = class {
|
|
2490
|
-
constructor(useStderr = false) {
|
|
2491
|
-
this.useStderr = useStderr;
|
|
2492
|
-
}
|
|
2493
|
-
write(entry, formatted) {
|
|
2494
|
-
const output = this.useStderr || entry.level >= 2 /* WARN */ ? console.error : console.log;
|
|
2495
|
-
output(formatted);
|
|
2496
|
-
}
|
|
2497
|
-
};
|
|
2498
|
-
var Logger = class _Logger {
|
|
2499
|
-
config;
|
|
2500
|
-
constructor(config = {}) {
|
|
2501
|
-
this.config = {
|
|
2502
|
-
level: 1 /* INFO */,
|
|
2503
|
-
format: "pretty",
|
|
2504
|
-
includeTimestamp: true,
|
|
2505
|
-
includeContext: true,
|
|
2506
|
-
colorize: true,
|
|
2507
|
-
outputs: [new ConsoleOutput()],
|
|
2508
|
-
...config
|
|
2509
|
-
};
|
|
2510
|
-
}
|
|
2511
|
-
/**
|
|
2512
|
-
* Update logger configuration
|
|
2513
|
-
*/
|
|
2514
|
-
configure(config) {
|
|
2515
|
-
this.config = { ...this.config, ...config };
|
|
2516
|
-
}
|
|
2517
|
-
/**
|
|
2518
|
-
* Check if a log level should be output
|
|
2519
|
-
*/
|
|
2520
|
-
shouldLog(level) {
|
|
2521
|
-
return level >= this.config.level;
|
|
2522
|
-
}
|
|
2523
|
-
/**
|
|
2524
|
-
* Create a log entry
|
|
2525
|
-
*/
|
|
2526
|
-
createEntry(level, message, context, error, operation) {
|
|
2527
|
-
const entry = {
|
|
2528
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2529
|
-
level,
|
|
2530
|
-
levelName: LogLevel[level],
|
|
2531
|
-
message,
|
|
2532
|
-
component: this.config.component
|
|
2533
|
-
};
|
|
2534
|
-
if (context && this.config.includeContext) {
|
|
2535
|
-
entry.context = context;
|
|
2536
|
-
}
|
|
2537
|
-
if (operation) {
|
|
2538
|
-
entry.operation = operation;
|
|
2539
|
-
}
|
|
2540
|
-
if (error) {
|
|
2541
|
-
entry.error = {
|
|
2542
|
-
name: error.name,
|
|
2543
|
-
message: error.message,
|
|
2544
|
-
stack: error.stack
|
|
2545
|
-
};
|
|
2546
|
-
}
|
|
2547
|
-
return entry;
|
|
2548
|
-
}
|
|
2549
|
-
/**
|
|
2550
|
-
* Format log entry for output
|
|
2551
|
-
*/
|
|
2552
|
-
formatEntry(entry) {
|
|
2553
|
-
switch (this.config.format) {
|
|
2554
|
-
case "json":
|
|
2555
|
-
return JSON.stringify(entry);
|
|
2556
|
-
case "compact":
|
|
2557
|
-
return this.formatCompact(entry);
|
|
2558
|
-
default:
|
|
2559
|
-
return this.formatPretty(entry);
|
|
2560
|
-
}
|
|
2561
|
-
}
|
|
2562
|
-
/**
|
|
2563
|
-
* Format entry in compact format
|
|
2564
|
-
*/
|
|
2565
|
-
formatCompact(entry) {
|
|
2566
|
-
const timestamp = this.config.includeTimestamp ? `${entry.timestamp} ` : "";
|
|
2567
|
-
const component = entry.component ? `[${entry.component}] ` : "";
|
|
2568
|
-
const operation = entry.operation ? `(${entry.operation}) ` : "";
|
|
2569
|
-
const level = this.colorizeLevel(entry.levelName, entry.level);
|
|
2570
|
-
return `${timestamp}${level} ${component}${operation}${entry.message}`;
|
|
2571
|
-
}
|
|
2572
|
-
/**
|
|
2573
|
-
* Format entry in pretty format
|
|
2574
|
-
*/
|
|
2575
|
-
formatPretty(entry) {
|
|
2576
|
-
let formatted = "";
|
|
2577
|
-
const timestamp = this.config.includeTimestamp ? `${entry.timestamp} ` : "";
|
|
2578
|
-
const component = entry.component ? `[${entry.component}] ` : "";
|
|
2579
|
-
const operation = entry.operation ? `(${entry.operation}) ` : "";
|
|
2580
|
-
const level = this.colorizeLevel(entry.levelName.padEnd(5), entry.level);
|
|
2581
|
-
formatted += `${timestamp}${level} ${component}${operation}${entry.message}`;
|
|
2582
|
-
if (entry.context && Object.keys(entry.context).length > 0) {
|
|
2583
|
-
formatted += `
|
|
2584
|
-
Context: ${JSON.stringify(entry.context, null, 2).split("\n").join("\n ")}`;
|
|
2585
|
-
}
|
|
2586
|
-
if (entry.error) {
|
|
2587
|
-
formatted += `
|
|
2588
|
-
Error: [${entry.error.code || entry.error.name}] ${entry.error.message}`;
|
|
2589
|
-
if (entry.error.context && Object.keys(entry.error.context).length > 0) {
|
|
2590
|
-
formatted += `
|
|
2591
|
-
Error Context: ${JSON.stringify(entry.error.context, null, 2).split("\n").join("\n ")}`;
|
|
2592
|
-
}
|
|
2593
|
-
if (entry.error.suggestions && entry.error.suggestions.length > 0) {
|
|
2594
|
-
formatted += `
|
|
2595
|
-
Suggestions:
|
|
2596
|
-
${entry.error.suggestions.map((s) => ` \u2022 ${s}`).join("\n")}`;
|
|
2597
|
-
}
|
|
2598
|
-
if (entry.level === 0 /* DEBUG */ && entry.error.stack) {
|
|
2599
|
-
formatted += `
|
|
2600
|
-
Stack: ${entry.error.stack.split("\n").join("\n ")}`;
|
|
2601
|
-
}
|
|
2602
|
-
}
|
|
2603
|
-
return formatted;
|
|
2604
|
-
}
|
|
2605
|
-
/**
|
|
2606
|
-
* Colorize log level if enabled
|
|
2607
|
-
*/
|
|
2608
|
-
colorizeLevel(levelName, level) {
|
|
2609
|
-
if (!this.config.colorize) {
|
|
2610
|
-
return levelName;
|
|
2611
|
-
}
|
|
2612
|
-
const colors = {
|
|
2613
|
-
[0 /* DEBUG */]: "\x1B[36m",
|
|
2614
|
-
// Cyan
|
|
2615
|
-
[1 /* INFO */]: "\x1B[32m",
|
|
2616
|
-
// Green
|
|
2617
|
-
[2 /* WARN */]: "\x1B[33m",
|
|
2618
|
-
// Yellow
|
|
2619
|
-
[3 /* ERROR */]: "\x1B[31m"
|
|
2620
|
-
// Red
|
|
2621
|
-
};
|
|
2622
|
-
const reset = "\x1B[0m";
|
|
2623
|
-
const color = colors[level] || "";
|
|
2624
|
-
return `${color}${levelName}${reset}`;
|
|
2625
|
-
}
|
|
2626
|
-
/**
|
|
2627
|
-
* Write log entry to all outputs
|
|
2628
|
-
*/
|
|
2629
|
-
async writeEntry(entry) {
|
|
2630
|
-
if (!this.shouldLog(entry.level)) {
|
|
2631
|
-
return;
|
|
2632
|
-
}
|
|
2633
|
-
const formatted = this.formatEntry(entry);
|
|
2634
|
-
for (const output of this.config.outputs) {
|
|
2635
|
-
try {
|
|
2636
|
-
await output.write(entry, formatted);
|
|
2637
|
-
} catch (error) {
|
|
2638
|
-
console.error("Logger output failed:", error);
|
|
2639
|
-
console.error(formatted);
|
|
2640
|
-
}
|
|
2641
|
-
}
|
|
2642
|
-
}
|
|
2643
|
-
/**
|
|
2644
|
-
* Log debug message
|
|
2645
|
-
*/
|
|
2646
|
-
async debug(message, context, operation) {
|
|
2647
|
-
const entry = this.createEntry(0 /* DEBUG */, message, context, void 0, operation);
|
|
2648
|
-
await this.writeEntry(entry);
|
|
2649
|
-
}
|
|
2650
|
-
/**
|
|
2651
|
-
* Log info message
|
|
2652
|
-
*/
|
|
2653
|
-
async info(message, context, operation) {
|
|
2654
|
-
const entry = this.createEntry(1 /* INFO */, message, context, void 0, operation);
|
|
2655
|
-
await this.writeEntry(entry);
|
|
2656
|
-
}
|
|
2657
|
-
/**
|
|
2658
|
-
* Log warning message
|
|
2659
|
-
*/
|
|
2660
|
-
async warn(message, context, operation) {
|
|
2661
|
-
const entry = this.createEntry(2 /* WARN */, message, context, void 0, operation);
|
|
2662
|
-
await this.writeEntry(entry);
|
|
2663
|
-
}
|
|
2664
|
-
/**
|
|
2665
|
-
* Log error message
|
|
2666
|
-
*/
|
|
2667
|
-
async error(message, error, context, operation) {
|
|
2668
|
-
const entry = this.createEntry(3 /* ERROR */, message, context, error, operation);
|
|
2669
|
-
await this.writeEntry(entry);
|
|
2670
|
-
}
|
|
2671
|
-
/**
|
|
2672
|
-
* Create a child logger with additional context
|
|
2673
|
-
*/
|
|
2674
|
-
child(component, context) {
|
|
2675
|
-
const childLogger = new _Logger({
|
|
2676
|
-
...this.config,
|
|
2677
|
-
component: this.config.component ? `${this.config.component}.${component}` : component
|
|
2678
|
-
});
|
|
2679
|
-
if (context) {
|
|
2680
|
-
const originalMethods = {
|
|
2681
|
-
debug: childLogger.debug.bind(childLogger),
|
|
2682
|
-
info: childLogger.info.bind(childLogger),
|
|
2683
|
-
warn: childLogger.warn.bind(childLogger),
|
|
2684
|
-
error: childLogger.error.bind(childLogger)
|
|
2685
|
-
};
|
|
2686
|
-
childLogger.debug = (message, additionalContext, operation) => originalMethods.debug(message, { ...context, ...additionalContext }, operation);
|
|
2687
|
-
childLogger.info = (message, additionalContext, operation) => originalMethods.info(message, { ...context, ...additionalContext }, operation);
|
|
2688
|
-
childLogger.warn = (message, additionalContext, operation) => originalMethods.warn(message, { ...context, ...additionalContext }, operation);
|
|
2689
|
-
childLogger.error = (message, error, additionalContext, operation) => originalMethods.error(message, error, { ...context, ...additionalContext }, operation);
|
|
2690
|
-
}
|
|
2691
|
-
return childLogger;
|
|
2692
|
-
}
|
|
2693
|
-
};
|
|
2694
|
-
new Logger();
|
|
2695
|
-
|
|
2696
|
-
// src/utils/codegen-logger.ts
|
|
2697
2479
|
var CodegenLogger = class _CodegenLogger {
|
|
2698
2480
|
options;
|
|
2699
2481
|
dryWarnSet = /* @__PURE__ */ new Set();
|
|
@@ -2869,11 +2651,11 @@ var TypeSchemaGenerator = class {
|
|
|
2869
2651
|
);
|
|
2870
2652
|
return fhirSchemas;
|
|
2871
2653
|
}
|
|
2872
|
-
async generateValueSetSchemas(valueSets,
|
|
2654
|
+
async generateValueSetSchemas(valueSets, logger) {
|
|
2873
2655
|
if (valueSets.length > 0) {
|
|
2874
2656
|
this.logger?.debug(`${valueSets.length} ValueSets available for enum extraction`);
|
|
2875
2657
|
}
|
|
2876
|
-
const register = await registerFromManager(this.manager,
|
|
2658
|
+
const register = await registerFromManager(this.manager, logger);
|
|
2877
2659
|
const valueSetSchemas = [];
|
|
2878
2660
|
if (valueSets.length > 0) {
|
|
2879
2661
|
this.logger?.progress(`Converting ${valueSets.length} ValueSets to TypeSchema`);
|
|
@@ -2881,7 +2663,7 @@ var TypeSchemaGenerator = class {
|
|
|
2881
2663
|
let valueSetFailedCount = 0;
|
|
2882
2664
|
for (const vs of valueSets) {
|
|
2883
2665
|
try {
|
|
2884
|
-
const valueSetSchema = await transformValueSet(register, vs,
|
|
2666
|
+
const valueSetSchema = await transformValueSet(register, vs, logger);
|
|
2885
2667
|
if (valueSetSchema) {
|
|
2886
2668
|
valueSetSchemas.push(valueSetSchema);
|
|
2887
2669
|
valueSetConvertedCount++;
|
|
@@ -2900,7 +2682,7 @@ var TypeSchemaGenerator = class {
|
|
|
2900
2682
|
}
|
|
2901
2683
|
return valueSetSchemas;
|
|
2902
2684
|
}
|
|
2903
|
-
async generateFromPackage(packageName, packageVersion,
|
|
2685
|
+
async generateFromPackage(packageName, packageVersion, logger) {
|
|
2904
2686
|
await this.initializeCache();
|
|
2905
2687
|
if (this.cache && !(this.cacheConfig?.forceRegenerate ?? false)) {
|
|
2906
2688
|
const cachedSchemas = this.cache.getByPackage(packageName);
|
|
@@ -2916,8 +2698,8 @@ var TypeSchemaGenerator = class {
|
|
|
2916
2698
|
version: packageVersion || "latest"
|
|
2917
2699
|
};
|
|
2918
2700
|
const register = await this.registerFromPackageMetas([packageInfo]);
|
|
2919
|
-
const valueSets = await this.generateValueSetSchemas(register.allVs(),
|
|
2920
|
-
const fhirSchemas = (await Promise.all(register.allFs().map(async (fs2) => await transformFhirSchema(register, fs2,
|
|
2701
|
+
const valueSets = await this.generateValueSetSchemas(register.allVs(), logger);
|
|
2702
|
+
const fhirSchemas = (await Promise.all(register.allFs().map(async (fs2) => await transformFhirSchema(register, fs2, logger)))).flat();
|
|
2921
2703
|
const allSchemas = [...fhirSchemas, ...valueSets];
|
|
2922
2704
|
if (this.cache) {
|
|
2923
2705
|
for (const schema of allSchemas) {
|
|
@@ -3286,10 +3068,10 @@ var TypeSchemaParser = class {
|
|
|
3286
3068
|
};
|
|
3287
3069
|
|
|
3288
3070
|
// src/typeschema/index.ts
|
|
3289
|
-
var generateTypeSchemas = async (register,
|
|
3071
|
+
var generateTypeSchemas = async (register, logger) => {
|
|
3290
3072
|
const fhirSchemas = [];
|
|
3291
3073
|
for (const fhirSchema of register.allFs()) {
|
|
3292
|
-
fhirSchemas.push(...await transformFhirSchema(register, fhirSchema,
|
|
3074
|
+
fhirSchemas.push(...await transformFhirSchema(register, fhirSchema, logger));
|
|
3293
3075
|
}
|
|
3294
3076
|
for (const vsSchema of register.allVs()) {
|
|
3295
3077
|
fhirSchemas.push(await transformValueSet(register, vsSchema));
|