Skip to content

Commit ea940b5

Browse files
authored
Fix valuesets imports in typescript (#32)
1 parent 6c64d2e commit ea940b5

File tree

6 files changed

+195
-96
lines changed

6 files changed

+195
-96
lines changed

src/aidbox_sdk/converter.clj

+25-15
Original file line numberDiff line numberDiff line change
@@ -280,27 +280,37 @@
280280
(defn resolve-choices [schemas]
281281
(map resolve-schema-choices schemas))
282282

283-
(defn collect-dependencies [schema]
284-
(let [primitive-element? (partial fhir/primitive-element? (:fhir-version schema))]
283+
(defn collect-dependencies
284+
"Returns the set of dependencies for the provided schema."
285+
[schema]
286+
(let [primitive-element? (partial fhir/primitive-element? (:fhir-version schema))
287+
backbones-elements (->> (:backbone-elements schema)
288+
(map :elements)
289+
flatten)
290+
all-elements (into (:elements schema) backbones-elements)
291+
types (->> all-elements
292+
(remove primitive-element?)
293+
(map :type))]
285294
(set/union
286295
(cond-> #{}
287296
(:base-resource-name schema) (conj (:base-resource-name schema))
288297
(fhir/constraint? schema) (conj "Meta"))
289-
(->> (:elements schema)
290-
(remove primitive-element?)
291-
(map :type)
292-
(remove nil?)
293-
set)
294-
(->> (:backbone-elements schema)
295-
(map :elements)
296-
flatten
297-
(remove primitive-element?)
298-
(map :type)
299-
(remove nil?)
300-
set))))
298+
(set (remove nil? types)))))
299+
300+
(defn collect-valueset-dependencies
301+
[schema]
302+
(let [backbones-elements (->> (:backbone-elements schema)
303+
(map :elements)
304+
flatten)
305+
all-elements (into (:elements schema) backbones-elements)
306+
valusets (map :valueset all-elements)]
307+
(set (remove nil? valusets))))
301308

302309
(defn resolve-dependencies [schemas]
303-
(map #(assoc % :deps (collect-dependencies %)) schemas))
310+
(map #(-> %
311+
(assoc :deps (collect-dependencies %))
312+
(assoc :valueset-deps (collect-valueset-dependencies %)))
313+
schemas))
304314

305315
(defn resolve-valuesets [schema available-valuesets]
306316
(let [available-valuesets (get available-valuesets (:fhir-version schema))]

src/aidbox_sdk/core.clj

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
(doseq [{:keys [path content]} files]
4646
(save-to-file! (io/file output-dir path) content)))
4747

48+
4849
;;
4950
;;
5051

src/aidbox_sdk/generator/typescript.clj

+18-7
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,14 @@
103103
(->backbone-type element)
104104

105105
(:valueset element)
106-
(str "vs." (class-name (:valueset element)))
106+
(class-name (:valueset element))
107107

108108
:else
109109
(->lang-type (:type element)))
110110
primitive-type? (fhir/primitive-element? fhir-version element)]
111111
(str (str (->camel-case name) optional ": " type' (when array "[]") ";")
112112
(when primitive-type?
113-
(str "\n" u/indent "_" (->camel-case name) ": Element;")))))))
113+
(str "\n" u/indent "_" (->camel-case name) "?: Element;")))))))
114114

115115
(defn generate-class
116116
"Generates TypeScript type from IR (intermediate representation) schema."
@@ -131,6 +131,7 @@
131131
(remove nil?)
132132
(map u/add-indent)
133133
(str/join "\n"))]
134+
134135
(str
135136
(when (seq inner-classes)
136137
(str (str/join "\n\n" inner-classes) "\n\n"))
@@ -171,18 +172,28 @@
171172
(let [relative-path (if (fhir/base-package? ir-schema)
172173
"./"
173174
(str "../" (package->directory (:fhir-version ir-schema)) "/"))
174-
valueset-dep (when (fhir/base-package? ir-schema)
175-
"import * as vs from \"./valuesets\"")]
175+
valueset-deps (when (and (fhir/base-package? ir-schema)
176+
(seq (:valueset-deps ir-schema)))
177+
(format "import { %s } from \"./valuesets\""
178+
(->> (:valueset-deps ir-schema)
179+
(map class-name)
180+
(str/join ", "))))]
176181
(str (->> (:deps ir-schema)
177182
(map class-name)
178183
(map (fn [d] {:module (str relative-path d) :members [d]}))
179184
(map (fn [{:keys [module members]}]
180-
(if (seq members) (format "import { %s } from \"%s\";" (str/join ", " members) module) (format "import * as %s from \"%s\";" (path->name module) module))))
185+
(if (seq members)
186+
(format "import { %s } from \"%s\";"
187+
(str/join ", " members)
188+
module)
189+
(format "import * as %s from \"%s\";"
190+
(path->name module)
191+
module))))
181192
(str/join "\n"))
182-
(when valueset-dep
193+
(when valueset-deps
183194
(str
184195
"\n"
185-
valueset-dep)))))
196+
valueset-deps)))))
186197

187198
(defn generate-module
188199
[& {:keys [deps classes]

test/aidbox_sdk/converter_test.clj

+23-3
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,16 @@
9898

9999
(deftest test-convert
100100
(testing "convert resource"
101-
(match (sut/convert [fixtures/patient-fhir-schema] #{})
101+
(match (sut/convert [fixtures/patient-fhir-schema]
102+
{"hl7.fhir.r4.core"
103+
#{"http://hl7.org/fhir/ValueSet/administrative-gender"}})
104+
102105
[fixtures/patient-ir-schema]))
103106

104107
(testing "convert constraint"
105-
(is (= [(fixt/get-data :organization-preferred-contact-ir-schema)]
106-
(sut/convert [(fixt/get-data :organization-preferred-contact-fhir-schema)] #{})))))
108+
(match
109+
(sut/convert [(fixt/get-data :organization-preferred-contact-fhir-schema)] #{})
110+
[(fixt/get-data :organization-preferred-contact-ir-schema)])))
107111

108112
(deftest test-apply-constraints
109113
(testing "constraints"
@@ -133,9 +137,25 @@
133137
{:url "http://hl7.org/fhir/StructureDefinition/SampledData",
134138
:base "http://hl7.org/fhir/StructureDefinition/Element"}]))
135139

140+
(deftest test-collect-dependencies
141+
(match
142+
(sut/collect-dependencies (fixt/get-data :patient-ir-schema))
143+
#{"Address"
144+
"Attachment"
145+
"Period"
146+
"CodeableConcept"
147+
"ContactPoint"
148+
"HumanName"
149+
"DomainResource"
150+
"Reference"
151+
"Identifier"
152+
"BackboneElement"}))
153+
136154
(comment
137155
(fixt/load-data!)
138156

139157
@fixt/data
140158

159+
(keys @fixt/data)
160+
141161
::close)

test/aidbox_sdk/fixtures/patient_ir_schema.edn

+2
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
:array false,
154154
:required false,
155155
:value "string",
156+
:valueset "administrative-gender"
156157
:type "code",
157158
:choice-option false}
158159
{:name "maritalStatus",
@@ -259,6 +260,7 @@
259260
:base "BackboneElement"
260261
:name "Patient_Contact"}],
261262
:base "http://hl7.org/fhir/StructureDefinition/DomainResource",
263+
:valueset-deps #{"administrative-gender"}
262264
:deps
263265
#{"Address"
264266
"Attachment"

0 commit comments

Comments
 (0)