|
5 | 5 | ->camel-case]]
|
6 | 6 | [aidbox-sdk.generator.utils :as u]
|
7 | 7 | [clojure.java.io :as io]
|
8 |
| - [clojure.string :as str]) |
| 8 | + [clojure.string :as str] |
| 9 | + [aidbox-sdk.fhir :as fhir]) |
9 | 10 | (:import
|
10 | 11 | [aidbox_sdk.generator CodeGenerator]))
|
11 | 12 |
|
12 |
| -(defn package->directory |
13 |
| - "Generates directory name from package name. |
| 13 | +(defn package->directory "Generates directory name from package name. |
14 | 14 |
|
15 | 15 | Example:
|
16 | 16 | hl7.fhir.r4.core -> hl7-fhir-r4-core"
|
|
149 | 149 | (str/replace path #"(\.ts)|[\.\/]" ""))
|
150 | 150 |
|
151 | 151 | (defn generate-deps
|
152 |
| - "Takes a list of resource names and generates import declarations." |
153 |
| - [deps] |
154 |
| - (->> deps |
155 |
| - (map (fn [{:keys [module members]}] |
156 |
| - (if (seq members) |
157 |
| - (format "import { %s } from \"%s\";" (str/join ", " members) module) |
158 |
| - (format "import * as %s from \"%s\";" (path->name module) module)))) |
159 |
| - (str/join "\n"))) |
| 152 | + "Takes an IR schema generates import declarations." |
| 153 | + [{:keys [deps package fhir-version] :as ir-schema}] |
| 154 | + (let [relative-path (if (fhir/base-package? ir-schema) |
| 155 | + "./" |
| 156 | + (str "../" (package->directory (:fhir-version ir-schema)) "/"))] |
| 157 | + (->> (:deps ir-schema) |
| 158 | + (map class-name) |
| 159 | + (map (fn [d] {:module (str relative-path d) :members [d]})) |
| 160 | + (map (fn [{:keys [module members]}] |
| 161 | + (if (seq members) (format "import { %s } from \"%s\";" (str/join ", " members) module) (format "import * as %s from \"%s\";" (path->name module) module)))) |
| 162 | + (str/join "\n")))) |
160 | 163 |
|
161 | 164 | (defn generate-module
|
162 | 165 | [& {:keys [deps classes]
|
163 | 166 | :or {classes []}}]
|
164 | 167 | (->> (conj []
|
165 |
| - (->> deps |
166 |
| - (map class-name) |
167 |
| - (map (fn [d] {:module (str "./" d) :members [d]})) |
168 |
| - generate-deps) |
169 |
| - |
| 168 | + deps |
170 | 169 | classes)
|
171 | 170 | (flatten)
|
172 | 171 | (str/join "\n\n")))
|
|
178 | 177 | (map (fn [ir-schema]
|
179 | 178 | {:path (resource-file-path ir-schema)
|
180 | 179 | :content (generate-module
|
181 |
| - :deps (:deps ir-schema) |
| 180 | + :deps (generate-deps ir-schema) |
182 | 181 | :classes [(generate-class ir-schema (map generate-class (:backbone-elements ir-schema)))])})
|
183 | 182 | ir-schemas)))
|
184 | 183 |
|
185 | 184 | (generate-resource-module [_ ir-schema]
|
186 | 185 | {:path (resource-file-path ir-schema)
|
187 | 186 | :content (generate-module
|
188 |
| - {:deps (:deps ir-schema) |
| 187 | + {:deps (generate-deps ir-schema) |
189 | 188 | :classes [(generate-class ir-schema
|
190 | 189 | (map generate-class (:backbone-elements ir-schema)))]})})
|
191 | 190 |
|
192 | 191 | (generate-search-params [_ ir-schemas]
|
193 | 192 | (map (fn [ir-schema]
|
194 | 193 | {:path (search-param-filepath ir-schema)
|
195 | 194 | :content (generate-module
|
196 |
| - :deps (map #(format "%sSearchParameters" %) (:deps ir-schema)) |
| 195 | + :deps (generate-deps {:package "hl7.fhir.r4.core" :deps (map #(format "%sSearchParameters" %) (:deps ir-schema))}) |
197 | 196 | :classes [(generate-class
|
198 | 197 | {:name (format "%sSearchParameters" (:name ir-schema))
|
199 | 198 | :base (when (:base ir-schema)
|
|
205 | 204 | (map (fn [ir-schema]
|
206 | 205 | {:path (resource-file-path ir-schema)
|
207 | 206 | :content (generate-module
|
208 |
| - {:deps (:deps ir-schema) |
| 207 | + {:deps (generate-deps ir-schema) |
209 | 208 | :classes [(generate-class ir-schema
|
210 | 209 | (map generate-class (:backbone-elements ir-schema)))]})})
|
211 | 210 | ir-schemas))
|
|
0 commit comments