|
163 | 163 | (client-component? tag) (render-component-element-client-ref el sb) |
164 | 164 | (fn? tag) (render-component-element-server el sb) |
165 | 165 | (= :<> tag) (render-fragment-element el sb) |
166 | | - (= :uix.core/suspense tag) (render-suspense-element el sb) |
| 166 | + (= :uix/suspense tag) (render-suspense-element el sb) |
167 | 167 | (keyword? tag) (render-dom-element el sb) |
168 | 168 | :else (throw (IllegalArgumentException. (str (type tag) " " tag " is not a valid element type"))))) |
169 | 169 |
|
|
225 | 225 |
|
226 | 226 | (defn- source-fn [v] |
227 | 227 | (when-let [filepath (:file (meta v))] |
228 | | - (with-open [rdr (LineNumberReader. (io/reader (io/resource filepath)))] |
| 228 | + (with-open [rdr (LineNumberReader. (io/reader (or (io/resource filepath) (io/file filepath))))] |
229 | 229 | (dotimes [_ (dec (:line (meta v)))] (.readLine rdr)) |
230 | 230 | (let [text (StringBuilder.) |
231 | 231 | pbr (proxy [PushbackReader] [rdr] |
|
243 | 243 | st (.getStackTrace error) |
244 | 244 | stack (->> st |
245 | 245 | (mapv (fn [^java.lang.StackTraceElement frame] |
246 | | - (str/join " " |
247 | | - [" at" |
248 | | - (str (.getClassName frame) |
249 | | - " " |
250 | | - (.getMethodName frame)) |
251 | | - (str |
252 | | - "(" |
253 | | - (.getFileName frame) |
254 | | - ":" |
255 | | - (.getLineNumber frame) |
256 | | - ")")]))) |
| 246 | + (let [filename (.getFileName frame) |
| 247 | + clj? (re-find #"\.cljc?$" filename) |
| 248 | + class-name (cond-> (.getClassName frame) |
| 249 | + clj? (clojure.lang.Compiler/demunge))] |
| 250 | + (str/join " " |
| 251 | + [" at" |
| 252 | + (str class-name |
| 253 | + " " |
| 254 | + (.getMethodName frame)) |
| 255 | + (str |
| 256 | + "(" |
| 257 | + filename |
| 258 | + ":" |
| 259 | + (.getLineNumber frame) |
| 260 | + ")")])))) |
257 | 261 | (into [(str (type error) ": " (ex-message error))]) |
258 | 262 | (str/join "\n")) |
259 | 263 | component-src (source-fn var) |
|
292 | 296 | (-> (render-fn [(derive-error-state e) identity] props) |
293 | 297 | (-unwrap sb)))))) |
294 | 298 |
|
| 299 | +(defn- unwrap-context-element [element sb] |
| 300 | + (let [[_ binder children] element] |
| 301 | + (binder #(-unwrap children sb)))) |
| 302 | + |
295 | 303 | (defn unwrap-element [[tag :as el] sb] |
296 | 304 | (cond |
297 | 305 | (client-component? tag) el |
298 | 306 | (fn? tag) (unwrap-component-element el sb) |
299 | 307 | (= :<> tag) (unwrap-fragment-element el sb) |
300 | | - (= :uix.core/suspense tag) (unwrap-suspense-element el sb) |
| 308 | + (= :uix/suspense tag) (unwrap-suspense-element el sb) |
| 309 | + (= :uix/context tag) (unwrap-context-element el sb) |
301 | 310 | (keyword? tag) (unwrap-dom-element el sb) |
302 | 311 | (and (map? tag) (-> tag meta :uix.core/error-boundary)) (unwrap-error-boundary el sb) |
303 | 312 | :else (throw (IllegalArgumentException. (str (type tag) " " tag " is not a valid element type"))))) |
304 | 313 |
|
305 | 314 | (extend-protocol FlightRenderer |
306 | 315 | IPersistentVector |
307 | 316 | (-unwrap [this sb] |
308 | | - (if (vector? (first this)) |
309 | | - (map #(-unwrap % sb) this) |
310 | | - (unwrap-element this sb))) |
| 317 | + (let [tag (first this)] |
| 318 | + (if (vector? tag) |
| 319 | + (doall (map #(-unwrap % sb) this)) |
| 320 | + (unwrap-element this sb)))) |
311 | 321 | (-render [this sb] |
312 | 322 | (if (vector? (first this)) |
313 | 323 | (map #(-render % sb) this) |
|
0 commit comments