@atomic-ehr/codegen 0.0.1-canary.20250822114054.4ca1428 → 0.0.1-canary.20250822150706.c3b8669
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/api/builder.d.ts +3 -3
- package/dist/api/builder.d.ts.map +1 -1
- package/dist/api/builder.js +374 -0
- package/dist/api/generators/base/BaseGenerator.d.ts +4 -4
- package/dist/api/generators/base/BaseGenerator.d.ts.map +1 -1
- package/dist/api/generators/base/BaseGenerator.js +572 -0
- package/dist/api/generators/base/FileManager.d.ts +2 -2
- package/dist/api/generators/base/FileManager.d.ts.map +1 -1
- package/dist/api/generators/base/FileManager.js +204 -0
- package/dist/api/generators/base/PythonTypeMapper.d.ts +2 -2
- package/dist/api/generators/base/PythonTypeMapper.d.ts.map +1 -1
- package/dist/api/generators/base/PythonTypeMapper.js +71 -0
- package/dist/api/generators/base/TemplateEngine.d.ts +1 -1
- package/dist/api/generators/base/TemplateEngine.d.ts.map +1 -1
- package/dist/api/generators/base/TemplateEngine.js +133 -0
- package/dist/api/generators/base/TypeMapper.js +153 -0
- package/dist/api/generators/base/TypeScriptTypeMapper.d.ts +1 -1
- package/dist/api/generators/base/TypeScriptTypeMapper.d.ts.map +1 -1
- package/dist/api/generators/base/TypeScriptTypeMapper.js +232 -0
- package/dist/api/generators/base/builders/DirectoryBuilder.d.ts +4 -4
- package/dist/api/generators/base/builders/DirectoryBuilder.d.ts.map +1 -1
- package/dist/api/generators/base/builders/DirectoryBuilder.js +215 -0
- package/dist/api/generators/base/builders/FileBuilder.d.ts +2 -2
- package/dist/api/generators/base/builders/FileBuilder.d.ts.map +1 -1
- package/dist/api/generators/base/builders/FileBuilder.js +408 -0
- package/dist/api/generators/base/builders/IndexBuilder.d.ts +2 -2
- package/dist/api/generators/base/builders/IndexBuilder.d.ts.map +1 -1
- package/dist/api/generators/base/builders/IndexBuilder.js +290 -0
- package/dist/api/generators/base/enhanced-errors.d.ts +2 -2
- package/dist/api/generators/base/enhanced-errors.d.ts.map +1 -1
- package/dist/api/generators/base/enhanced-errors.js +259 -0
- package/dist/api/generators/base/error-handler.d.ts +1 -1
- package/dist/api/generators/base/error-handler.d.ts.map +1 -1
- package/dist/api/generators/base/error-handler.js +243 -0
- package/dist/api/generators/base/errors.d.ts +2 -2
- package/dist/api/generators/base/errors.d.ts.map +1 -1
- package/dist/api/generators/base/errors.js +694 -0
- package/dist/api/generators/base/index.d.ts +22 -22
- package/dist/api/generators/base/index.d.ts.map +1 -1
- package/dist/api/generators/base/index.js +161 -0
- package/dist/api/generators/base/types.d.ts +2 -2
- package/dist/api/generators/base/types.d.ts.map +1 -1
- package/dist/api/generators/base/types.js +12 -0
- package/dist/api/generators/rest-client.d.ts +2 -2
- package/dist/api/generators/rest-client.d.ts.map +1 -1
- package/dist/api/generators/rest-client.js +847 -0
- package/dist/api/generators/search-parameter-enhancer.d.ts +1 -1
- package/dist/api/generators/search-parameter-enhancer.d.ts.map +1 -1
- package/dist/api/generators/search-parameter-enhancer.js +801 -0
- package/dist/api/generators/types.js +4 -0
- package/dist/api/generators/typescript.d.ts +3 -3
- package/dist/api/generators/typescript.d.ts.map +1 -1
- package/dist/api/generators/typescript.js +537 -0
- package/dist/api/generators/validation-generator.js +632 -0
- package/dist/api/index.d.ts +10 -10
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +51 -0
- package/dist/cli/commands/generate/typescript.d.ts +1 -1
- package/dist/cli/commands/generate/typescript.d.ts.map +1 -1
- package/dist/cli/commands/generate/typescript.js +52 -0
- package/dist/cli/commands/generate.d.ts +5 -12
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +158 -0
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +100 -0
- package/dist/cli/commands/typeschema/generate.js +130 -0
- package/dist/cli/commands/typeschema.js +48 -0
- package/dist/cli/index.js +12 -8664
- package/dist/cli/utils/log.d.ts +2 -2
- package/dist/cli/utils/log.d.ts.map +1 -1
- package/dist/cli/utils/log.js +23 -0
- package/dist/cli/utils/prompts.js +224 -0
- package/dist/cli/utils/spinner.js +270 -0
- package/dist/config.js +703 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -40
- package/dist/logger.js +290 -0
- package/dist/typeschema/cache.d.ts +2 -2
- package/dist/typeschema/cache.d.ts.map +1 -1
- package/dist/typeschema/cache.js +285 -0
- package/dist/typeschema/core/binding.d.ts +1 -1
- package/dist/typeschema/core/binding.d.ts.map +1 -1
- package/dist/typeschema/core/binding.js +187 -0
- package/dist/typeschema/core/field-builder.d.ts +1 -1
- package/dist/typeschema/core/field-builder.d.ts.map +1 -1
- package/dist/typeschema/core/field-builder.js +259 -0
- package/dist/typeschema/core/identifier.js +117 -0
- package/dist/typeschema/core/nested-types.d.ts +1 -1
- package/dist/typeschema/core/nested-types.d.ts.map +1 -1
- package/dist/typeschema/core/nested-types.js +111 -0
- package/dist/typeschema/core/transformer.d.ts +2 -2
- package/dist/typeschema/core/transformer.d.ts.map +1 -1
- package/dist/typeschema/core/transformer.js +345 -0
- package/dist/typeschema/generator.d.ts +3 -3
- package/dist/typeschema/generator.d.ts.map +1 -1
- package/dist/typeschema/generator.js +352 -0
- package/dist/typeschema/index.d.ts +14 -14
- package/dist/typeschema/index.d.ts.map +1 -1
- package/dist/typeschema/index.js +92 -0
- package/dist/typeschema/parser.d.ts +2 -2
- package/dist/typeschema/parser.d.ts.map +1 -1
- package/dist/typeschema/parser.js +310 -0
- package/dist/typeschema/profile/processor.d.ts +1 -1
- package/dist/typeschema/profile/processor.d.ts.map +1 -1
- package/dist/typeschema/profile/processor.js +268 -0
- package/dist/typeschema/schema.js +456 -0
- package/dist/typeschema/type-schema.types.js +39 -0
- package/dist/typeschema/types.js +4 -0
- package/dist/typeschema/utils.d.ts +1 -1
- package/dist/typeschema/utils.d.ts.map +1 -1
- package/dist/typeschema/utils.js +13 -0
- package/dist/typeschema/value-set/processor.d.ts +1 -1
- package/dist/typeschema/value-set/processor.d.ts.map +1 -1
- package/dist/typeschema/value-set/processor.js +168 -0
- package/dist/utils/codegen-logger.js +204 -0
- package/dist/utils.js +42 -0
- package/package.json +15 -4
- package/dist/index-fgcebdva.js +0 -8515
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { transformProfile } from "../profile/processor.js";
|
|
3
|
+
import { collectBindingSchemas } from "./binding.js";
|
|
4
|
+
import { buildField, buildNestedField, getElementHierarchy, isNestedElement, mergeElementHierarchy, } from "./field-builder.js";
|
|
5
|
+
import { buildSchemaIdentifier } from "./identifier.js";
|
|
6
|
+
import { buildNestedTypes, extractNestedDependencies } from "./nested-types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Transform elements into fields
|
|
9
|
+
*/
|
|
10
|
+
export async function transformElements(fhirSchema, parentPath, elements, manager, packageInfo) {
|
|
11
|
+
const fields = {};
|
|
12
|
+
for (const [key, element] of Object.entries(elements)) {
|
|
13
|
+
const path = [...parentPath, key];
|
|
14
|
+
// Get element snapshot from hierarchy
|
|
15
|
+
const hierarchy = getElementHierarchy(fhirSchema, path, manager);
|
|
16
|
+
const snapshot = hierarchy.length > 0 ? mergeElementHierarchy(hierarchy) : element;
|
|
17
|
+
if (isNestedElement(snapshot)) {
|
|
18
|
+
// Reference to nested type
|
|
19
|
+
fields[key] = buildNestedField(fhirSchema, path, snapshot, manager, packageInfo);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
// Regular field
|
|
23
|
+
fields[key] = await buildField(fhirSchema, path, snapshot, manager, packageInfo);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return fields;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Extract dependencies from fields
|
|
30
|
+
*/
|
|
31
|
+
function extractFieldDependencies(fields) {
|
|
32
|
+
const deps = [];
|
|
33
|
+
for (const field of Object.values(fields)) {
|
|
34
|
+
if ("type" in field && field.type) {
|
|
35
|
+
deps.push(field.type);
|
|
36
|
+
}
|
|
37
|
+
if ("binding" in field && field.binding) {
|
|
38
|
+
deps.push(field.binding);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return deps;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Remove duplicate dependencies
|
|
45
|
+
*/
|
|
46
|
+
function deduplicateDependencies(deps) {
|
|
47
|
+
const seen = new Set();
|
|
48
|
+
const unique = [];
|
|
49
|
+
for (const dep of deps) {
|
|
50
|
+
const key = dep.url;
|
|
51
|
+
if (!seen.has(key)) {
|
|
52
|
+
seen.add(key);
|
|
53
|
+
unique.push(dep);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Sort by name for consistent output (matching Clojure implementation)
|
|
57
|
+
unique.sort((a, b) => a.name.localeCompare(b.name));
|
|
58
|
+
return unique;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if a FHIR schema represents an extension
|
|
62
|
+
*/
|
|
63
|
+
function isExtensionSchema(fhirSchema, _identifier) {
|
|
64
|
+
// Check if this is based on Extension
|
|
65
|
+
if (fhirSchema.base === "Extension" ||
|
|
66
|
+
fhirSchema.base === "http://hl7.org/fhir/StructureDefinition/Extension") {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
// Check if the URL indicates this is an extension
|
|
70
|
+
if (fhirSchema.url?.includes("/extension/") ||
|
|
71
|
+
fhirSchema.url?.includes("-extension")) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
// Check if the name indicates this is an extension
|
|
75
|
+
if (fhirSchema.name?.toLowerCase().includes("extension")) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
// Check if the type is Extension
|
|
79
|
+
if (fhirSchema.type === "Extension") {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Transform a ValueSet FHIRSchema to TypeSchemaValueSet
|
|
86
|
+
*/
|
|
87
|
+
async function transformValueSet(fhirSchema, _manager, packageInfo) {
|
|
88
|
+
try {
|
|
89
|
+
const identifier = buildSchemaIdentifier(fhirSchema, packageInfo);
|
|
90
|
+
identifier.kind = "value-set"; // Ensure correct kind
|
|
91
|
+
const valueSetSchema = {
|
|
92
|
+
identifier,
|
|
93
|
+
description: fhirSchema.description,
|
|
94
|
+
};
|
|
95
|
+
// If there are elements that represent concepts
|
|
96
|
+
if (fhirSchema.elements) {
|
|
97
|
+
const concepts = [];
|
|
98
|
+
// Extract concepts from elements (simplified approach)
|
|
99
|
+
for (const [_key, element] of Object.entries(fhirSchema.elements)) {
|
|
100
|
+
if ("code" in element && element.code) {
|
|
101
|
+
concepts.push({
|
|
102
|
+
code: element.code,
|
|
103
|
+
// @ts-ignore
|
|
104
|
+
display: element.short || element.definition,
|
|
105
|
+
// @ts-ignore
|
|
106
|
+
system: element.system,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (concepts.length > 0) {
|
|
111
|
+
valueSetSchema.concept = concepts;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return valueSetSchema;
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.warn(`Failed to transform value set ${fhirSchema.name}: ${error}`);
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Transform an Extension FHIRSchema to TypeSchema with extension metadata
|
|
123
|
+
*/
|
|
124
|
+
async function transformExtension(fhirSchema, manager, packageInfo) {
|
|
125
|
+
try {
|
|
126
|
+
const identifier = buildSchemaIdentifier(fhirSchema, packageInfo);
|
|
127
|
+
// Build base identifier if present
|
|
128
|
+
let base;
|
|
129
|
+
if (fhirSchema.base && fhirSchema.base !== "Extension") {
|
|
130
|
+
const baseUrl = fhirSchema.base.includes("/")
|
|
131
|
+
? fhirSchema.base
|
|
132
|
+
: `http://hl7.org/fhir/StructureDefinition/${fhirSchema.base}`;
|
|
133
|
+
const baseName = fhirSchema.base.split("/").pop() || fhirSchema.base;
|
|
134
|
+
base = {
|
|
135
|
+
kind: "complex-type",
|
|
136
|
+
package: packageInfo?.name || "hl7.fhir.r4.core",
|
|
137
|
+
version: packageInfo?.version || "4.0.1",
|
|
138
|
+
name: baseName,
|
|
139
|
+
url: baseUrl,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// Default to Extension base
|
|
144
|
+
base = {
|
|
145
|
+
kind: "complex-type",
|
|
146
|
+
package: "hl7.fhir.r4.core",
|
|
147
|
+
version: "4.0.1",
|
|
148
|
+
name: "Extension",
|
|
149
|
+
url: "http://hl7.org/fhir/StructureDefinition/Extension",
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const extensionSchema = {
|
|
153
|
+
identifier,
|
|
154
|
+
base,
|
|
155
|
+
description: fhirSchema.description,
|
|
156
|
+
dependencies: [],
|
|
157
|
+
metadata: {
|
|
158
|
+
isExtension: true, // Mark as extension for file organization
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
// Add base to dependencies
|
|
162
|
+
if (base) {
|
|
163
|
+
extensionSchema.dependencies.push(base);
|
|
164
|
+
}
|
|
165
|
+
// Transform elements into fields if present
|
|
166
|
+
if (fhirSchema.elements) {
|
|
167
|
+
const fields = await transformElements(fhirSchema, [], fhirSchema.elements, manager, packageInfo);
|
|
168
|
+
if (Object.keys(fields).length > 0) {
|
|
169
|
+
extensionSchema.fields = fields;
|
|
170
|
+
extensionSchema.dependencies.push(...extractFieldDependencies(fields));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Build nested types
|
|
174
|
+
const nestedTypes = await buildNestedTypes(fhirSchema, manager, packageInfo);
|
|
175
|
+
if (nestedTypes.length > 0) {
|
|
176
|
+
extensionSchema.nested = nestedTypes;
|
|
177
|
+
extensionSchema.dependencies.push(...extractNestedDependencies(nestedTypes));
|
|
178
|
+
}
|
|
179
|
+
// Deduplicate and sort dependencies
|
|
180
|
+
extensionSchema.dependencies = deduplicateDependencies(extensionSchema.dependencies);
|
|
181
|
+
// Remove self-reference from dependencies
|
|
182
|
+
extensionSchema.dependencies = extensionSchema.dependencies.filter((dep) => dep.url !== identifier.url);
|
|
183
|
+
return extensionSchema;
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
console.warn(`Failed to transform extension ${fhirSchema.name}: ${error}`);
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Transform a single FHIRSchema to TypeSchema(s) with enhanced categorization
|
|
192
|
+
* Returns the main schema plus any binding schemas
|
|
193
|
+
*/
|
|
194
|
+
export async function transformFHIRSchema(fhirSchema, manager, packageInfo) {
|
|
195
|
+
const results = [];
|
|
196
|
+
// Extract package info from schema if not provided
|
|
197
|
+
if (!packageInfo && (fhirSchema.package_name || fhirSchema.package_id)) {
|
|
198
|
+
packageInfo = {
|
|
199
|
+
name: fhirSchema.package_name || fhirSchema.package_id || "undefined",
|
|
200
|
+
version: fhirSchema.package_version || "undefined",
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
// Build main identifier with enhanced categorization
|
|
204
|
+
const identifier = buildSchemaIdentifier(fhirSchema, packageInfo);
|
|
205
|
+
// Handle profiles with specialized processor
|
|
206
|
+
if (identifier.kind === "profile") {
|
|
207
|
+
const profileSchema = await transformProfile(fhirSchema, manager, packageInfo);
|
|
208
|
+
results.push(profileSchema);
|
|
209
|
+
// Collect binding schemas for profiles too
|
|
210
|
+
const bindingSchemas = await collectBindingSchemas(fhirSchema, manager, packageInfo);
|
|
211
|
+
results.push(...bindingSchemas);
|
|
212
|
+
return results;
|
|
213
|
+
}
|
|
214
|
+
// Handle value sets specially
|
|
215
|
+
if (identifier.kind === "value-set" || fhirSchema.kind === "value-set") {
|
|
216
|
+
const valueSetSchema = await transformValueSet(fhirSchema, manager, packageInfo);
|
|
217
|
+
if (valueSetSchema) {
|
|
218
|
+
results.push(valueSetSchema);
|
|
219
|
+
}
|
|
220
|
+
return results;
|
|
221
|
+
}
|
|
222
|
+
// Handle extensions specially
|
|
223
|
+
if (isExtensionSchema(fhirSchema, identifier)) {
|
|
224
|
+
const extensionSchema = await transformExtension(fhirSchema, manager, packageInfo);
|
|
225
|
+
if (extensionSchema) {
|
|
226
|
+
results.push(extensionSchema);
|
|
227
|
+
}
|
|
228
|
+
return results;
|
|
229
|
+
}
|
|
230
|
+
// Build base identifier if present
|
|
231
|
+
let base;
|
|
232
|
+
if (fhirSchema.base && fhirSchema.type !== "Element") {
|
|
233
|
+
// Create base identifier directly
|
|
234
|
+
const baseUrl = fhirSchema.base.includes("/")
|
|
235
|
+
? fhirSchema.base
|
|
236
|
+
: `http://hl7.org/fhir/StructureDefinition/${fhirSchema.base}`;
|
|
237
|
+
const baseName = fhirSchema.base.split("/").pop() || fhirSchema.base;
|
|
238
|
+
// Check if this is a known complex type by looking at common FHIR complex types
|
|
239
|
+
const complexTypes = new Set([
|
|
240
|
+
"Element",
|
|
241
|
+
"BackboneElement",
|
|
242
|
+
"Quantity",
|
|
243
|
+
"Duration",
|
|
244
|
+
"Distance",
|
|
245
|
+
"Count",
|
|
246
|
+
"Age",
|
|
247
|
+
"Address",
|
|
248
|
+
"Annotation",
|
|
249
|
+
"Attachment",
|
|
250
|
+
"CodeableConcept",
|
|
251
|
+
"Coding",
|
|
252
|
+
"ContactPoint",
|
|
253
|
+
"HumanName",
|
|
254
|
+
"Identifier",
|
|
255
|
+
"Period",
|
|
256
|
+
"Range",
|
|
257
|
+
"Ratio",
|
|
258
|
+
"Reference",
|
|
259
|
+
"Timing",
|
|
260
|
+
"Money",
|
|
261
|
+
"SampledData",
|
|
262
|
+
"Signature",
|
|
263
|
+
"ContactDetail",
|
|
264
|
+
"Contributor",
|
|
265
|
+
"DataRequirement",
|
|
266
|
+
"Expression",
|
|
267
|
+
"ParameterDefinition",
|
|
268
|
+
"RelatedArtifact",
|
|
269
|
+
"TriggerDefinition",
|
|
270
|
+
"UsageContext",
|
|
271
|
+
"Dosage",
|
|
272
|
+
"Meta",
|
|
273
|
+
"Extension",
|
|
274
|
+
]);
|
|
275
|
+
const kind = complexTypes.has(baseName) ? "complex-type" : "resource";
|
|
276
|
+
// For standard FHIR types, use the standard package even if no package info
|
|
277
|
+
const isStandardFhir = baseUrl.startsWith("http://hl7.org/fhir/");
|
|
278
|
+
base = {
|
|
279
|
+
kind: kind,
|
|
280
|
+
package: isStandardFhir
|
|
281
|
+
? "hl7.fhir.r4.core"
|
|
282
|
+
: packageInfo?.name || fhirSchema.package_name || "undefined",
|
|
283
|
+
version: isStandardFhir
|
|
284
|
+
? "4.0.1"
|
|
285
|
+
: packageInfo?.version || fhirSchema.package_version || "undefined",
|
|
286
|
+
name: baseName,
|
|
287
|
+
url: baseUrl,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
// Initialize the main schema
|
|
291
|
+
const mainSchema = {
|
|
292
|
+
identifier,
|
|
293
|
+
dependencies: [],
|
|
294
|
+
};
|
|
295
|
+
// Collect dependencies in the same order as Clojure implementation
|
|
296
|
+
const allDependencies = [];
|
|
297
|
+
// Add base if present (first in dependencies)
|
|
298
|
+
if (base) {
|
|
299
|
+
mainSchema.base = base;
|
|
300
|
+
allDependencies.push(base);
|
|
301
|
+
}
|
|
302
|
+
// Add description if present
|
|
303
|
+
if (fhirSchema.description) {
|
|
304
|
+
mainSchema.description = fhirSchema.description;
|
|
305
|
+
}
|
|
306
|
+
// Transform elements into fields (for non-primitive types)
|
|
307
|
+
if (fhirSchema.kind !== "primitive-type" && fhirSchema.elements) {
|
|
308
|
+
const fields = await transformElements(fhirSchema, [], fhirSchema.elements, manager, packageInfo);
|
|
309
|
+
if (Object.keys(fields).length > 0) {
|
|
310
|
+
mainSchema.fields = fields;
|
|
311
|
+
}
|
|
312
|
+
// Extract field dependencies (types and bindings)
|
|
313
|
+
allDependencies.push(...extractFieldDependencies(fields));
|
|
314
|
+
// Build nested types
|
|
315
|
+
const nestedTypes = await buildNestedTypes(fhirSchema, manager, packageInfo);
|
|
316
|
+
if (nestedTypes.length > 0) {
|
|
317
|
+
mainSchema.nested = nestedTypes;
|
|
318
|
+
// Add nested type dependencies
|
|
319
|
+
allDependencies.push(...extractNestedDependencies(nestedTypes));
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Set all dependencies at once
|
|
323
|
+
mainSchema.dependencies = allDependencies;
|
|
324
|
+
// Deduplicate and sort dependencies
|
|
325
|
+
mainSchema.dependencies = deduplicateDependencies(mainSchema.dependencies);
|
|
326
|
+
// Remove self-reference from dependencies
|
|
327
|
+
mainSchema.dependencies = mainSchema.dependencies.filter((dep) => dep.url !== identifier.url);
|
|
328
|
+
// Add main schema to results
|
|
329
|
+
results.push(mainSchema);
|
|
330
|
+
// Collect and add binding schemas
|
|
331
|
+
const bindingSchemas = await collectBindingSchemas(fhirSchema, manager, packageInfo);
|
|
332
|
+
results.push(...bindingSchemas);
|
|
333
|
+
return results;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Transform multiple FHIRSchemas
|
|
337
|
+
*/
|
|
338
|
+
export async function transformFHIRSchemas(fhirSchemas, manager, packageInfo) {
|
|
339
|
+
const allResults = [];
|
|
340
|
+
for (const fhirSchema of fhirSchemas) {
|
|
341
|
+
const results = await transformFHIRSchema(fhirSchema, manager, packageInfo);
|
|
342
|
+
allResults.push(...results);
|
|
343
|
+
}
|
|
344
|
+
return allResults;
|
|
345
|
+
}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* Provides high-level API for converting FHIR Structure Definitions to TypeSchema format.
|
|
6
6
|
*/
|
|
7
7
|
import { type FHIRSchema } from "@atomic-ehr/fhirschema";
|
|
8
|
-
import type { TypeSchemaConfig } from "../config";
|
|
9
|
-
import type { TypeSchema } from "./type-schema.types";
|
|
10
|
-
import type { PackageInfo, TypeschemaGeneratorOptions } from "./types";
|
|
8
|
+
import type { TypeSchemaConfig } from "../config.js";
|
|
9
|
+
import type { TypeSchema } from "./type-schema.types.js";
|
|
10
|
+
import type { PackageInfo, TypeschemaGeneratorOptions } from "./types.js";
|
|
11
11
|
/**
|
|
12
12
|
* TypeSchema Generator class
|
|
13
13
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/typeschema/generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,KAAK,UAAU,EAGf,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/typeschema/generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,KAAK,UAAU,EAGf,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAQrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAmB;IACvC,OAAO,CAAC,MAAM,CAAgB;gBAG7B,OAAO,GAAE,0BAA+B,EACxC,WAAW,CAAC,EAAE,gBAAgB;IAkB/B;;OAEG;YACW,eAAe;IAO7B;;OAEG;IACG,mBAAmB,CACxB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,EAAE,CAAC;IAmGxB;;OAEG;IACG,kBAAkB,CACvB,UAAU,EAAE,UAAU,EACtB,WAAW,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC;IAMxB;;OAEG;IACG,mBAAmB,CACxB,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC;IA8DxB,OAAO,CAAC,gBAAgB;YAqDV,eAAe;YAIf,iBAAiB;YAMjB,gBAAgB;YAIhB,kBAAkB;IAMhC;;;OAGG;IACH,OAAO,CAAC,mCAAmC;IAuG3C;;;OAGG;IACH,OAAO,CAAC,oDAAoD;IAqD5D;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAIlC;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAClD,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAClD,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CACjD,UAAU,EAAE,UAAU,EACtB,WAAW,CAAC,EAAE,WAAW,EACzB,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB"}
|