Skip to content

Commit 2a1afe9

Browse files
committed
refactor: move deps resolving from generator to converter
1 parent d58750c commit 2a1afe9

File tree

3 files changed

+45
-35
lines changed

3 files changed

+45
-35
lines changed

src/aidbox_sdk/converter.clj

+37-13
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
uppercase-first-letter vector->map]]
55
[clojure.set :as set]
66
[clojure.string :as str]
7-
[clojure.walk :as walk]))
7+
[clojure.walk :as walk]
8+
[aidbox-sdk.fhir :as fhir]))
89

910
(def primitives #{"dateTime" "xhtml" "Distance" "time" "date" "string" "uuid" "oid" "id" "Dosage" "Duration" "instant" "Count" "decimal" "code" "base64Binary" "unsignedInt" "url" "markdown" "uri" "positiveInt" "canonical" "Age" "Timing"})
1011

@@ -88,15 +89,16 @@
8889
(if (contains? v :choices)
8990
{:name (escape-keyword (name k))
9091
:choices (:choices v)}
91-
{:name (escape-keyword (name k))
92-
:base parent-name
93-
:array (boolean (:array v))
94-
:required (.contains required (name k))
95-
:value (transform-element
96-
(str (url->resource-name parent-name) "_" (uppercase-first-letter (name k)))
97-
v
98-
(.contains required (name k)))
99-
:type (:type v)
92+
{:name (escape-keyword (name k))
93+
:base parent-name
94+
:array (boolean (:array v))
95+
:required (.contains required (name k))
96+
:value (transform-element
97+
(str (url->resource-name parent-name) "_" (uppercase-first-letter (name k)))
98+
v
99+
(.contains required (name k)))
100+
:type (:type v)
101+
100102
:choice-option (boolean (:choiceOf v))}))
101103

102104
(defn- get-typings-and-imports [parent-name required data]
@@ -138,6 +140,7 @@
138140
(url->resource-name (:url schema)))
139141
(safe-conj
140142
(hash-map :base (get schema :base)
143+
:base-resource-name (url->resource-name (get schema :base))
141144
:package (get schema :package)
142145
:url (get schema :url)
143146
:type (get schema :type)
@@ -188,14 +191,35 @@
188191
(defn resolve-choices [schemas]
189192
(map resolve-schema-choices schemas))
190193

194+
(defn collect-dependencies [schema]
195+
(let [primitive-element? (partial fhir/primitive-element? (:package schema))]
196+
(set/union
197+
#{(:base-resource-name schema)}
198+
(->> (:elements schema)
199+
(remove primitive-element?)
200+
(map :type)
201+
(remove nil?)
202+
set)
203+
(->> (:backbone-elements schema)
204+
(map :elements)
205+
flatten
206+
(remove primitive-element?)
207+
(map :type)
208+
(remove nil?)
209+
set))))
210+
211+
(defn resolve-dependencies [schemas]
212+
(map #(assoc % :deps (collect-dependencies %)) schemas))
213+
191214
(defn convert [schemas]
192215
(->> schemas
193216
(resolve-references)
194217
(compile-elements)
195218
(combine-elements)
196-
(map (fn [schema] (update schema
197-
:backbone-elements #(resolve-choices (flatten-backbones % [])))))
198-
(resolve-choices)))
219+
(map (fn [schema]
220+
(update schema :backbone-elements #(resolve-choices (flatten-backbones % [])))))
221+
(resolve-choices)
222+
(resolve-dependencies)))
199223

200224
;;
201225
;; Search Params

src/aidbox_sdk/fhir.clj

+7-3
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@
126126
;;
127127

128128
(defmulti base-type? :package)
129-
(defmethod base-type? "hl7.fhir.r4.core" [schema] (contains? r4-base-types (:id schema)) )
130-
(defmethod base-type? "hl7.fhir.r4b.core" [schema] (contains? r4b-base-types (:id schema)) )
131-
(defmethod base-type? "hl7.fhir.r5.core" [schema] (contains? r5-base-types (:id schema)) )
129+
(defmethod base-type? "hl7.fhir.r4.core" [schema] (contains? r4-base-types (:id schema)))
130+
(defmethod base-type? "hl7.fhir.r4b.core" [schema] (contains? r4b-base-types (:id schema)))
131+
(defmethod base-type? "hl7.fhir.r5.core" [schema] (contains? r5-base-types (:id schema)))
132132

133133
(defn base-schema? [schema]
134134
(or (= (:url schema) "http://hl7.org/fhir/StructureDefinition/BackboneElement")
@@ -144,3 +144,7 @@
144144
(defn search-parameter-from-extension? [search-parameter]
145145
(str/includes? (:id search-parameter) "-extensions-"))
146146

147+
(defmulti primitive-element? (fn [package _element] package))
148+
(defmethod primitive-element? "hl7.fhir.r4.core" [_ {:keys [type]}] (contains? r4-primitive-types type))
149+
(defmethod primitive-element? "hl7.fhir.r4b.core" [_ {:keys [type]}] (contains? r4b-primitive-types type))
150+
(defmethod primitive-element? "hl7.fhir.r5.core" [_ {:keys [type]}] (contains? r5-primitive-types type))

src/aidbox_sdk/generator/typescript.clj

+1-19
Original file line numberDiff line numberDiff line change
@@ -134,23 +134,6 @@
134134
(map #(assoc % :base "BackboneElement"))
135135
(map generate-class)))
136136

137-
(defn collect-dependecies [ir-schema]
138-
(let [primitive? (fn [type] (= (subs type 0 1)
139-
(str/lower-case (subs type 0 1))))]
140-
(into
141-
(->> (:elements ir-schema)
142-
(map :type)
143-
(remove nil?)
144-
(remove primitive?)
145-
set)
146-
(->> (:backbone-elements ir-schema)
147-
(map :elements)
148-
flatten
149-
(map :type)
150-
(remove nil?)
151-
(remove primitive?)
152-
set))))
153-
154137
(defrecord TypeScriptCodeGenerator []
155138
CodeGenerator
156139
(generate-datatypes [_ ir-schemas]
@@ -165,10 +148,9 @@
165148
(generate-resource-module [_ ir-schema]
166149
{:path (resource-file-path ir-schema)
167150
:content (generate-module
168-
{:deps [{:module "../datatypes" :members (collect-dependecies ir-schema)}]
151+
{:deps [{:module "../datatypes" :members (:deps ir-schema)}]
169152
:classes [(generate-class ir-schema
170153
(generate-backbone-classes ir-schema))]})})
171-
172154
(generate-search-params [_ ir-schemas] [])
173155
(generate-constraints [_ ir-schemas] [])
174156
(generate-sdk-files [this] (generator/prepare-sdk-files :typescript)))

0 commit comments

Comments
 (0)