|
4 | 4 | uppercase-first-letter vector->map]]
|
5 | 5 | [clojure.set :as set]
|
6 | 6 | [clojure.string :as str]
|
7 |
| - [clojure.walk :as walk])) |
| 7 | + [clojure.walk :as walk] |
| 8 | + [aidbox-sdk.fhir :as fhir])) |
8 | 9 |
|
9 | 10 | (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"})
|
10 | 11 |
|
|
88 | 89 | (if (contains? v :choices)
|
89 | 90 | {:name (escape-keyword (name k))
|
90 | 91 | :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 | + |
100 | 102 | :choice-option (boolean (:choiceOf v))}))
|
101 | 103 |
|
102 | 104 | (defn- get-typings-and-imports [parent-name required data]
|
|
138 | 140 | (url->resource-name (:url schema)))
|
139 | 141 | (safe-conj
|
140 | 142 | (hash-map :base (get schema :base)
|
| 143 | + :base-resource-name (url->resource-name (get schema :base)) |
141 | 144 | :package (get schema :package)
|
142 | 145 | :url (get schema :url)
|
143 | 146 | :type (get schema :type)
|
|
188 | 191 | (defn resolve-choices [schemas]
|
189 | 192 | (map resolve-schema-choices schemas))
|
190 | 193 |
|
| 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 | + |
191 | 214 | (defn convert [schemas]
|
192 | 215 | (->> schemas
|
193 | 216 | (resolve-references)
|
194 | 217 | (compile-elements)
|
195 | 218 | (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))) |
199 | 223 |
|
200 | 224 | ;;
|
201 | 225 | ;; Search Params
|
|
0 commit comments