Skip to content

Instantly share code, notes, and snippets.

@roman01la
Last active April 23, 2025 22:06
Show Gist options
  • Save roman01la/6b3e0c62403a6d0172de81c50acac343 to your computer and use it in GitHub Desktop.
Save roman01la/6b3e0c62403a6d0172de81c50acac343 to your computer and use it in GitHub Desktop.
OpenAI o3 decompiles JS generated from cljs sources back into ClojureScript code
(ns uix.examples
(:require
;; TanStack Router v1 (CJS bundle brought in by Shadow)
["@tanstack/react-router" :as rr
:refer [Link Outlet RouterProvider]]
;; JS <‑‑> CLJ map/keyword conversion
[cljs-bean.core :refer [->clj]]
;; uix “React‑with‑hiccup” runtime
[uix.core :refer [$ defui strict-mode]]
[uix.dom :as dom]))
;; -- tiny hook helpers ------------------------------------------------------
(defn use-location [] (->clj (rr/useLocation)))
(defn use-params [] (->clj (rr/useParams #js{})))
(defn use-loader-data [] (rr/useLoaderData #js{}))
;; -- navbar ---------------------------------------------------------------
(def route->name
{"/" "new"
"/askstories" "ask"
"/showstories" "show"
"/jobstories" "job"
"/topstories" "top"
"/beststories" "best"})
(defui RootLayout []
(let [{:keys [pathname]} (use-location)]
($ :div.flex.flex-col.items-center
($ :ul.flex.gap-2.text-sm.py-1.font-medium
(for [[path title] route->name]
($ :li {:key path}
($ Link {:to path
:class-name (if (= path pathname)
"text-emerald-500"
"text-stone-800")}
title))))
($ :div.max-w-128
($ Outlet)))))
;; -- misc utils -------------------------------------------------------------
(defonce ^:private dom-parser (js/DOMParser.))
(defn unescape-text [s]
(.. dom-parser (parseFromString s "text/html") -documentElement -textContent))
(defn fetch-json [url]
(-> (js/fetch url)
(.then #(.json %))
(.then #(->clj % :keywordize-keys true))))
;; -- Hacker‑News data fetchers ----------------------------------------------
(def base "https://hacker-news.firebaseio.com/v0/")
(defn fetch-story+ [id]
(fetch-json (str base "item/" id ".json")))
(defn fetch-stories+
"Loader for /newstories etc. Takes the React‑Router context map."
[{:keys [location]}]
(let [path (or (-> location :pathname) "/")
kind (if (= path "/") "/newstories" path)]
(-> (fetch-json (str base kind ".json"))
(.then #(js/Promise.all
(map fetch-story+ (take 10 %)))))))
(defn fetch-item+
"Recursively pulls a story and its full comment tree."
[id]
(-> (fetch-story+ id)
(.then (fn [item]
(if-let [kids (:kids item)]
(-> (js/Promise.all (map fetch-item+ kids))
(.then #(assoc item :kids %)))
item)))))
;; -- presentational components ---------------------------------------------
(defui Story [{:keys [data]}]
(let [{:keys [id by score time title url kids]} data]
($ :div.text-stone-800.px-4.py-2.bg-emerald-600.border-b.border-emerald-700.hover:bg-emerald-700
($ :a.text-sm.text-emerald-50.mb-1.block.hover:underline
{:href url :target "_blank"} title)
($ :div.text-xs.flex.gap-2
($ :div "by " ($ :span.font-medium by)) " | "
($ :div score) " | "
($ :div (.toLocaleString (js/Date. (* 1000 time)))) " | "
($ Link {:to (str "/item/" id) :class-name "hover:underline"}
(str (count kids) " comments"))))))
(defui ItemComment [{:keys [data]}]
(let [{:keys [by text time deleted]} data]
($ :div.text-stone-800.px-4.py-2.bg-emerald-600.border-b.border-emerald-700.hover:bg-emerald-700
($ :div.text-sm.text-emerald-50.mb-1
(if deleted "[deleted]" (unescape-text text)))
($ :div.text-xs.flex.gap-2
(if deleted
($ :div (.toLocaleString (js/Date. (* 1000 time))))
($ :<>
($ :div "by " ($ :span.font-medium by)) " | "
($ :div (.toLocaleString (js/Date. (* 1000 time))))))))))
;; -- “screens” / route‑level wrappers --------------------------------------
(defui StoriesScreen []
(let [stories (use-loader-data)]
(map (fn [s] ($ Story {:key (:id s) :data s})) stories)))
(defui ItemScreen []
(let [{:keys [kids]} (use-loader-data)]
(map (fn [c] ($ ItemComment {:key (:id c) :data c})) kids)))
;; -- router description (data, not code) ------------------------------------
(def routes
{:layout RootLayout
:routes [{:path "/" :component #( $ StoriesScreen {:type :new})
:loader fetch-stories+}
{:path "/askstories" :component #( $ StoriesScreen {:type :ask})
:loader fetch-stories+}
{:path "/showstories" :component #( $ StoriesScreen {:type :show})
:loader fetch-stories+}
{:path "/jobstories" :component #( $ StoriesScreen {:type :job})
:loader fetch-stories+}
{:path "/topstories" :component #( $ StoriesScreen {:type :top})
:loader fetch-stories+}
{:path "/beststories" :component #( $ StoriesScreen {:type :best})
:loader fetch-stories+}
{:path "/item/$id" :component #( $ ItemScreen)
:loader (fn [{:keys [params]}]
(fetch-item+ (:id params)))}]})
;; -- tiny helper to turn the map above into a TanStack router ---------------
(defn create-router
[{:keys [layout routes]}]
(let [root (rr/createRootRoute #js{:component layout})
_ (doseq [{:keys [path component loader]} routes]
(rr/createRoute
#js{:getParentRoute (constantly root)
:path path
:loader (fn [ctx] (loader (->clj ctx)))
:component component}))
route-tree (.addChildren root (clj->js []))] ; addChildren mutates in‑place
(rr/createRouter #js{:routeTree route-tree})))
;; -- entry‑point ------------------------------------------------------------
(defn init []
(let [root (dom/create-root (.getElementById js/document "root"))]
(dom/render-root
($ strict-mode
($ RouterProvider {:router (create-router routes)}))
root)))
(ns uix.examples
(:require ["@tanstack/react-router" :as rr]
[cljs-bean.core :as bean]
[uix.core :as uix :refer [$ defui]]
[uix.dom]))
(defn use-location []
(bean/->clj (rr/useLocation)))
(defn use-params []
(bean/->clj (rr/useParams #js {})))
(defn use-loader-data []
(rr/useLoaderData #js {}))
(def route->name
{"/" "new"
"/askstories" "ask"
"/showstories" "show"
"/jobstories" "job"
"/topstories" "top"
"/beststories" "best"})
(defui root-layout []
(let [current-path (:pathname (use-location))]
($ :div.flex.flex-col.items-center
($ :ul.flex.gap-2.text-sm.py-1.font-medium
(for [[path title] route->name]
($ :li {:key path}
($ rr/Link
{:to path
:class-name (if (= path current-path)
"text-emerald-500"
"text-stone-800")}
title))))
($ :div.max-w-128
($ rr/Outlet)))))
(defonce dom-parser
(js/DOMParser.))
(defn unescape-text [s]
(.-textContent (.-documentElement (.parseFromString dom-parser s "text/html"))))
(defui story [{:keys [data]}]
(let [{:keys [by score time title url kids]} data]
($ :div.text-stone-800.px-4.py-2.bg-emerald-600.border-b.border-emerald-700.hover:bg-emerald-700
($ :a.text-sm.text-emerald-50.mb-1.block.hover:underline
{:href url
:target "_blank"}
title)
($ :div.text-xs.flex.gap-2
($ :div "by "
($ :span.font-medium by))
" | "
($ :div score)
" | "
($ :div
(.toLocaleString (js/Date. (* 1e3 time))))
" | "
($ rr/Link {:to (str "/item/" (:id data))
:class-name "hover:underline"}
(str (count kids) " comments"))))))
(defui item-comment [{:keys [data]}]
(let [{:keys [by text time deleted]} data]
($ :div.text-stone-800.px-4.py-2.bg-emerald-600.border-b.border-emerald-700.hover:bg-emerald-700
($ :div.text-sm.text-emerald-50.mb-1
(if deleted
"[deleted]"
(unescape-text text)))
($ :div.text-xs.flex.gap-2
(if deleted
($ :div
(.toLocaleString (js/Date. (* 1e3 time))))
($ :<>
($ :div "by "
($ :span.font-medium by))
" | "
($ :div
(.toLocaleString (js/Date. (* 1e3 time))))))))))
(defui stories []
(let [data (use-loader-data)]
(for [d data]
($ story {:key (:id d) :data d}))))
(defui item []
(let [{:keys [kids]} (use-loader-data)]
(for [d kids]
($ item-comment {:key (:id d) :data d}))))
(defn fetch [url]
(-> (js/fetch url)
(.then #(.json %))
(.then #(js->clj % :keywordize-keys true))))
(defn fetch-story+ [id]
(fetch (str "https://hacker-news.firebaseio.com/v0/item/" id ".json")))
(defn fetch-stories+ [props]
(let [pathname (-> props :location :pathname)
pathname (if (= pathname "/")
"/newstories"
pathname)]
(-> (fetch (str "https://hacker-news.firebaseio.com/v0/" pathname ".json"))
(.then #(js/Promise.all (map fetch-story+ (take 10 %)))))))
(defn fetch-item+ [id]
(-> (fetch-story+ id)
(.then #(if-let [kids (:kids %)]
(.then (js/Promise.all (map fetch-item+ kids))
(fn [kids]
(assoc % :kids kids)))
%))))
(def routes
{:layout root-layout
:routes [{:path "/"
:component #($ stories {:type :new})
:loader fetch-stories+}
{:path "/askstories"
:component #($ stories {:type :ask})
:loader fetch-stories+}
{:path "/showstories"
:component #($ stories {:type :show})
:loader fetch-stories+}
{:path "/jobstories"
:component #($ stories {:type :job})
:loader fetch-stories+}
{:path "/topstories"
:component #($ stories {:type :top})
:loader fetch-stories+}
{:path "/beststories"
:component #($ stories {:type :best})
:loader fetch-stories+}
{:path "/item/$id"
:component #($ item)
:loader #(-> % :params :id fetch-item+)}]})
(defn create-router [{:keys [layout routes]}]
(let [root (rr/createRootRoute #js {:component layout})
routes (for [{:keys [path component loader]} routes]
(rr/createRoute #js {:getParentRoute (constantly root)
:path path
:loader #(loader (bean/->clj %))
:component component}))
route-tree (.addChildren root (into-array routes))]
(rr/createRouter #js {:routeTree route-tree})))
(defn init []
(let [root (uix.dom/create-root (js/document.getElementById "root"))]
(uix.dom/render-root
($ uix/strict-mode
($ rr/RouterProvider {:router (create-router routes)}))
root)))
goog.provide('uix.examples');
var module$node_modules$$tanstack$react_router$dist$cjs$index_cjs = shadow.js.require("module$node_modules$$tanstack$react_router$dist$cjs$index_cjs", {});
uix.examples.use_location = (function uix$examples$use_location() {
return cljs_bean.core.__GT_clj.cljs$core$IFn$_invoke$arity$1(module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.useLocation());
}
);
uix.examples.use_params = (function uix$examples$use_params() {
return cljs_bean.core.__GT_clj.cljs$core$IFn$_invoke$arity$1(module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.useParams(({})));
}
);
uix.examples.use_loader_data = (function uix$examples$use_loader_data() {
return module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.useLoaderData(({}));
}
);
uix.examples.route__GT_name = new cljs.core.PersistentArrayMap(null,6,["/", "new", "/askstories", "ask", "/showstories", "show", "/jobstories", "job", "/topstories", "top", "/beststories", "best"],null);
uix.examples.root_layout = (function uix$examples$root_layout() {
var f__40879__auto__ = (function() {
if (goog.DEBUG) {
var temp__5804__auto___41599 = uix.examples.root_layout.fast_refresh_signature;
if (cljs.core.truth_(temp__5804__auto___41599)) {
var f__40798__auto___41600 = temp__5804__auto___41599;
(f__40798__auto___41600.cljs$core$IFn$_invoke$arity$0 ? f__40798__auto___41600.cljs$core$IFn$_invoke$arity$0() : f__40798__auto___41600.call(null, ));
} else {}
} else {}
var current_path = new cljs.core.Keyword(null,"pathname","pathname",-1420497528).cljs$core$IFn$_invoke$arity$1(uix.examples.use_location());
return uix.compiler.aot._GT_el("div", [{
'className': "flex flex-col items-center"
}], [uix.compiler.aot._GT_el("ul", uix.compiler.attributes.interpret_attrs(cljs.core.map.cljs$core$IFn$_invoke$arity$2((function(p__41541) {
var vec__41542 = p__41541;
var path = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__41542, (0), null);
var title = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__41542, (1), null);
return uix.compiler.aot._GT_el("li", [{
'key': uix.compiler.attributes.keyword__GT_string(path)
}], [uix.compiler.alpha.component_element(module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.Link, [new cljs.core.PersistentArrayMap(null,2,[new cljs.core.Keyword(null,"to","to",192099007), path, new cljs.core.Keyword(null,"class-name","class-name",945142584), ((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(path, current_path)) ? "text-emerald-500" : "text-stone-800")],null)], [title])]);
}
), uix.examples.route__GT_name), ["ul", null, "flex gap-2 text-sm py-1 font-medium", false], false), []), uix.compiler.aot._GT_el("div", [{
'className': "max-w-128"
}], [uix.compiler.alpha.component_element(module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.Outlet, [null], [])])]);
}
);
if (goog.DEBUG) {
var _STAR_current_component_STAR__orig_val__41545 = uix.core._STAR_current_component_STAR_;
var _STAR_current_component_STAR__temp_val__41546 = uix.examples.root_layout;
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__temp_val__41546);
try {
return f__40879__auto__();
} finally {
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__orig_val__41545);
}
} else {
return f__40879__auto__();
}
}
);
(uix.examples.root_layout.uix_component_QMARK_ = true);
uix.core.set_display_name(uix.examples.root_layout, "uix.examples/root-layout");
if (goog.DEBUG) {
if ((typeof window !== 'undefined') && (typeof window.uix !== 'undefined') && (typeof window.uix.dev !== 'undefined')) {
var sig__40807__auto___41601 = window.uix.dev.signature_BANG_();
(sig__40807__auto___41601.cljs$core$IFn$_invoke$arity$4 ? sig__40807__auto___41601.cljs$core$IFn$_invoke$arity$4(uix.examples.root_layout, "(use-location)", null, null) : sig__40807__auto___41601.call(null, uix.examples.root_layout, "(use-location)", null, null));
window.uix.dev.register_BANG_(uix.examples.root_layout, uix.examples.root_layout.displayName);
(uix.examples.root_layout.fast_refresh_signature = sig__40807__auto___41601);
} else {}
} else {}
if ((typeof uix !== 'undefined') && (typeof uix.examples !== 'undefined') && (typeof uix.examples.dom_parser !== 'undefined')) {} else {
uix.examples.dom_parser = (new DOMParser());
}
uix.examples.unescape_text = (function uix$examples$unescape_text(s) {
return uix.examples.dom_parser.parseFromString(s, "text/html").documentElement.textContent;
}
);
uix.examples.story = (function uix$examples$story(props__40886__auto__) {
var props41549 = uix.core.glue_args(props__40886__auto__);
var vec__41550 = [props41549];
var map__41553 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__41550, (0), null);
var map__41553__$1 = cljs.core.__destructure_map(map__41553);
var data = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41553__$1, new cljs.core.Keyword(null,"data","data",-232669377));
var ___40885__auto__ = cljs.core.dissoc.cljs$core$IFn$_invoke$arity$1(props41549);
var f__40887__auto__ = (function() {
if (goog.DEBUG) {
var temp__5804__auto___41602 = uix.examples.story.fast_refresh_signature;
if (cljs.core.truth_(temp__5804__auto___41602)) {
var f__40798__auto___41603 = temp__5804__auto___41602;
(f__40798__auto___41603.cljs$core$IFn$_invoke$arity$0 ? f__40798__auto___41603.cljs$core$IFn$_invoke$arity$0() : f__40798__auto___41603.call(null, ));
} else {}
} else {}
var map__41554 = data;
var map__41554__$1 = cljs.core.__destructure_map(map__41554);
var by = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41554__$1, new cljs.core.Keyword(null,"by","by",30600856));
var score = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41554__$1, new cljs.core.Keyword(null,"score","score",-1963588780));
var time = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41554__$1, new cljs.core.Keyword(null,"time","time",1385887882));
var title = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41554__$1, new cljs.core.Keyword(null,"title","title",636505583));
var url = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41554__$1, new cljs.core.Keyword(null,"url","url",276297046));
var kids = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41554__$1, new cljs.core.Keyword(null,"kids","kids",1156670771));
return uix.compiler.aot._GT_el("div", [{
'className': "text-stone-800 px-4 py-2 bg-emerald-600 border-b border-emerald-700 hover:bg-emerald-700"
}], [uix.compiler.aot._GT_el("a", [{
'className': "text-sm text-emerald-50 mb-1 block hover:underline",
'href': uix.compiler.attributes.keyword__GT_string(url),
'target': "_blank"
}], [title]), uix.compiler.aot._GT_el("div", [{
'className': "text-xs flex gap-2"
}], [uix.compiler.aot._GT_el("div", uix.compiler.attributes.interpret_attrs("by ", ["div", null, null, false], false), [uix.compiler.aot._GT_el("span", uix.compiler.attributes.interpret_attrs(by, ["span", null, "font-medium", false], false), [])]), " | ", uix.compiler.aot._GT_el("div", uix.compiler.attributes.interpret_attrs(score, ["div", null, null, false], false), []), " | ", uix.compiler.aot._GT_el("div", uix.compiler.attributes.interpret_attrs((new Date((1000.0 * time))).toLocaleString(), ["div", null, null, false], false), []), " | ", uix.compiler.alpha.component_element(module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.Link, [new cljs.core.PersistentArrayMap(null,2,[new cljs.core.Keyword(null,"to","to",192099007), ["/item/", cljs.core.str.cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(data))].join(''), new cljs.core.Keyword(null,"class-name","class-name",945142584), "hover:underline"],null)], [[cljs.core.str.cljs$core$IFn$_invoke$arity$1(cljs.core.count(kids)), " comments"].join('')])])]);
}
);
if (goog.DEBUG) {
var _STAR_current_component_STAR__orig_val__41555 = uix.core._STAR_current_component_STAR_;
var _STAR_current_component_STAR__temp_val__41556 = uix.examples.story;
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__temp_val__41556);
try {
if (((cljs.core.map_QMARK_(props41549)) || ((props41549 == null)))) {} else {
throw (new Error(["Assert failed: ", ["UIx component expects a map of props, but instead got ", cljs.core.str.cljs$core$IFn$_invoke$arity$1(props41549)].join(''), "\n", "(clojure.core/or (clojure.core/map? props41549) (clojure.core/nil? props41549))"].join('')));
}
return f__40887__auto__();
} finally {
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__orig_val__41555);
}
} else {
return f__40887__auto__();
}
}
);
(uix.examples.story.uix_component_QMARK_ = true);
uix.core.set_display_name(uix.examples.story, "uix.examples/story");
if (goog.DEBUG) {
if ((typeof window !== 'undefined') && (typeof window.uix !== 'undefined') && (typeof window.uix.dev !== 'undefined')) {
var sig__40807__auto___41604 = window.uix.dev.signature_BANG_();
(sig__40807__auto___41604.cljs$core$IFn$_invoke$arity$4 ? sig__40807__auto___41604.cljs$core$IFn$_invoke$arity$4(uix.examples.story, "", null, null) : sig__40807__auto___41604.call(null, uix.examples.story, "", null, null));
window.uix.dev.register_BANG_(uix.examples.story, uix.examples.story.displayName);
(uix.examples.story.fast_refresh_signature = sig__40807__auto___41604);
} else {}
} else {}
uix.examples.item_comment = (function uix$examples$item_comment(props__40886__auto__) {
var props41559 = uix.core.glue_args(props__40886__auto__);
var vec__41560 = [props41559];
var map__41563 = cljs.core.nth.cljs$core$IFn$_invoke$arity$3(vec__41560, (0), null);
var map__41563__$1 = cljs.core.__destructure_map(map__41563);
var data = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41563__$1, new cljs.core.Keyword(null,"data","data",-232669377));
var ___40885__auto__ = cljs.core.dissoc.cljs$core$IFn$_invoke$arity$1(props41559);
var f__40887__auto__ = (function() {
if (goog.DEBUG) {
var temp__5804__auto___41605 = uix.examples.item_comment.fast_refresh_signature;
if (cljs.core.truth_(temp__5804__auto___41605)) {
var f__40798__auto___41606 = temp__5804__auto___41605;
(f__40798__auto___41606.cljs$core$IFn$_invoke$arity$0 ? f__40798__auto___41606.cljs$core$IFn$_invoke$arity$0() : f__40798__auto___41606.call(null, ));
} else {}
} else {}
var map__41564 = data;
var map__41564__$1 = cljs.core.__destructure_map(map__41564);
var by = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41564__$1, new cljs.core.Keyword(null,"by","by",30600856));
var text = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41564__$1, new cljs.core.Keyword(null,"text","text",-1790561697));
var time = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41564__$1, new cljs.core.Keyword(null,"time","time",1385887882));
var deleted = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41564__$1, new cljs.core.Keyword(null,"deleted","deleted",-510100639));
return uix.compiler.aot._GT_el("div", [{
'className': "text-stone-800 px-4 py-2 bg-emerald-600 border-b border-emerald-700 hover:bg-emerald-700"
}], [uix.compiler.aot._GT_el("div", uix.compiler.attributes.interpret_attrs((cljs.core.truth_(deleted) ? "[deleted]" : uix.examples.unescape_text(text)), ["div", null, "text-sm text-emerald-50 mb-1", false], false), []), uix.compiler.aot._GT_el("div", uix.compiler.attributes.interpret_attrs((cljs.core.truth_(deleted) ? uix.compiler.aot._GT_el("div", uix.compiler.attributes.interpret_attrs((new Date((1000.0 * time))).toLocaleString(), ["div", null, null, false], false), []) : uix.compiler.aot._GT_el(uix.compiler.aot.fragment, uix.compiler.attributes.interpret_attrs(uix.compiler.aot._GT_el("div", uix.compiler.attributes.interpret_attrs("by ", ["div", null, null, false], false), [uix.compiler.aot._GT_el("span", uix.compiler.attributes.interpret_attrs(by, ["span", null, "font-medium", false], false), [])]), [], false), [" | ", uix.compiler.aot._GT_el("div", uix.compiler.attributes.interpret_attrs((new Date((1000.0 * time))).toLocaleString(), ["div", null, null, false], false), [])])), ["div", null, "text-xs flex gap-2", false], false), [])]);
}
);
if (goog.DEBUG) {
var _STAR_current_component_STAR__orig_val__41565 = uix.core._STAR_current_component_STAR_;
var _STAR_current_component_STAR__temp_val__41566 = uix.examples.item_comment;
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__temp_val__41566);
try {
if (((cljs.core.map_QMARK_(props41559)) || ((props41559 == null)))) {} else {
throw (new Error(["Assert failed: ", ["UIx component expects a map of props, but instead got ", cljs.core.str.cljs$core$IFn$_invoke$arity$1(props41559)].join(''), "\n", "(clojure.core/or (clojure.core/map? props41559) (clojure.core/nil? props41559))"].join('')));
}
return f__40887__auto__();
} finally {
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__orig_val__41565);
}
} else {
return f__40887__auto__();
}
}
);
(uix.examples.item_comment.uix_component_QMARK_ = true);
uix.core.set_display_name(uix.examples.item_comment, "uix.examples/item-comment");
if (goog.DEBUG) {
if ((typeof window !== 'undefined') && (typeof window.uix !== 'undefined') && (typeof window.uix.dev !== 'undefined')) {
var sig__40807__auto___41607 = window.uix.dev.signature_BANG_();
(sig__40807__auto___41607.cljs$core$IFn$_invoke$arity$4 ? sig__40807__auto___41607.cljs$core$IFn$_invoke$arity$4(uix.examples.item_comment, "", null, null) : sig__40807__auto___41607.call(null, uix.examples.item_comment, "", null, null));
window.uix.dev.register_BANG_(uix.examples.item_comment, uix.examples.item_comment.displayName);
(uix.examples.item_comment.fast_refresh_signature = sig__40807__auto___41607);
} else {}
} else {}
uix.examples.stories = (function uix$examples$stories() {
var f__40879__auto__ = (function() {
if (goog.DEBUG) {
var temp__5804__auto___41608 = uix.examples.stories.fast_refresh_signature;
if (cljs.core.truth_(temp__5804__auto___41608)) {
var f__40798__auto___41609 = temp__5804__auto___41608;
(f__40798__auto___41609.cljs$core$IFn$_invoke$arity$0 ? f__40798__auto___41609.cljs$core$IFn$_invoke$arity$0() : f__40798__auto___41609.call(null, ));
} else {}
} else {}
var data = uix.examples.use_loader_data();
return cljs.core.map.cljs$core$IFn$_invoke$arity$2((function(d) {
return uix.compiler.alpha.component_element(uix.examples.story, [new cljs.core.PersistentArrayMap(null,2,[new cljs.core.Keyword(null,"key","key",-1516042587), new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(d), new cljs.core.Keyword(null,"data","data",-232669377), d],null)], []);
}
), data);
}
);
if (goog.DEBUG) {
var _STAR_current_component_STAR__orig_val__41572 = uix.core._STAR_current_component_STAR_;
var _STAR_current_component_STAR__temp_val__41573 = uix.examples.stories;
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__temp_val__41573);
try {
return f__40879__auto__();
} finally {
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__orig_val__41572);
}
} else {
return f__40879__auto__();
}
}
);
(uix.examples.stories.uix_component_QMARK_ = true);
uix.core.set_display_name(uix.examples.stories, "uix.examples/stories");
if (goog.DEBUG) {
if ((typeof window !== 'undefined') && (typeof window.uix !== 'undefined') && (typeof window.uix.dev !== 'undefined')) {
var sig__40807__auto___41610 = window.uix.dev.signature_BANG_();
(sig__40807__auto___41610.cljs$core$IFn$_invoke$arity$4 ? sig__40807__auto___41610.cljs$core$IFn$_invoke$arity$4(uix.examples.stories, "(use-loader-data)", null, null) : sig__40807__auto___41610.call(null, uix.examples.stories, "(use-loader-data)", null, null));
window.uix.dev.register_BANG_(uix.examples.stories, uix.examples.stories.displayName);
(uix.examples.stories.fast_refresh_signature = sig__40807__auto___41610);
} else {}
} else {}
uix.examples.item = (function uix$examples$item() {
var f__40879__auto__ = (function() {
if (goog.DEBUG) {
var temp__5804__auto___41611 = uix.examples.item.fast_refresh_signature;
if (cljs.core.truth_(temp__5804__auto___41611)) {
var f__40798__auto___41612 = temp__5804__auto___41611;
(f__40798__auto___41612.cljs$core$IFn$_invoke$arity$0 ? f__40798__auto___41612.cljs$core$IFn$_invoke$arity$0() : f__40798__auto___41612.call(null, ));
} else {}
} else {}
var map__41580 = uix.examples.use_loader_data();
var map__41580__$1 = cljs.core.__destructure_map(map__41580);
var kids = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41580__$1, new cljs.core.Keyword(null,"kids","kids",1156670771));
return cljs.core.map.cljs$core$IFn$_invoke$arity$2((function(d) {
return uix.compiler.alpha.component_element(uix.examples.item_comment, [new cljs.core.PersistentArrayMap(null,2,[new cljs.core.Keyword(null,"key","key",-1516042587), new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(d), new cljs.core.Keyword(null,"data","data",-232669377), d],null)], []);
}
), kids);
}
);
if (goog.DEBUG) {
var _STAR_current_component_STAR__orig_val__41581 = uix.core._STAR_current_component_STAR_;
var _STAR_current_component_STAR__temp_val__41582 = uix.examples.item;
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__temp_val__41582);
try {
return f__40879__auto__();
} finally {
(uix.core._STAR_current_component_STAR_ = _STAR_current_component_STAR__orig_val__41581);
}
} else {
return f__40879__auto__();
}
}
);
(uix.examples.item.uix_component_QMARK_ = true);
uix.core.set_display_name(uix.examples.item, "uix.examples/item");
if (goog.DEBUG) {
if ((typeof window !== 'undefined') && (typeof window.uix !== 'undefined') && (typeof window.uix.dev !== 'undefined')) {
var sig__40807__auto___41613 = window.uix.dev.signature_BANG_();
(sig__40807__auto___41613.cljs$core$IFn$_invoke$arity$4 ? sig__40807__auto___41613.cljs$core$IFn$_invoke$arity$4(uix.examples.item, "(use-loader-data)", null, null) : sig__40807__auto___41613.call(null, uix.examples.item, "(use-loader-data)", null, null));
window.uix.dev.register_BANG_(uix.examples.item, uix.examples.item.displayName);
(uix.examples.item.fast_refresh_signature = sig__40807__auto___41613);
} else {}
} else {}
uix.examples.fetch = (function uix$examples$fetch(url) {
return fetch(url).then((function(p1__41583_SHARP_) {
return p1__41583_SHARP_.json();
}
)).then((function(p1__41584_SHARP_) {
return cljs.core.js__GT_clj.cljs$core$IFn$_invoke$arity$variadic(p1__41584_SHARP_, cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([new cljs.core.Keyword(null,"keywordize-keys","keywordize-keys",1310784252), true], 0));
}
));
}
);
uix.examples.fetch_story_PLUS_ = (function uix$examples$fetch_story_PLUS_(id) {
return uix.examples.fetch(["https://hacker-news.firebaseio.com/v0/item/", cljs.core.str.cljs$core$IFn$_invoke$arity$1(id), ".json"].join(''));
}
);
uix.examples.fetch_stories_PLUS_ = (function uix$examples$fetch_stories_PLUS_(props) {
var pathname = new cljs.core.Keyword(null,"pathname","pathname",-1420497528).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"location","location",1815599388).cljs$core$IFn$_invoke$arity$1(props));
var pathname__$1 = ((cljs.core._EQ_.cljs$core$IFn$_invoke$arity$2(pathname, "/")) ? "/newstories" : pathname);
return uix.examples.fetch(["https://hacker-news.firebaseio.com/v0/", cljs.core.str.cljs$core$IFn$_invoke$arity$1(pathname__$1), ".json"].join('')).then((function(p1__41585_SHARP_) {
return Promise.all(cljs.core.map.cljs$core$IFn$_invoke$arity$2(uix.examples.fetch_story_PLUS_, cljs.core.take.cljs$core$IFn$_invoke$arity$2((10), p1__41585_SHARP_)));
}
));
}
);
uix.examples.fetch_item_PLUS_ = (function uix$examples$fetch_item_PLUS_(id) {
return uix.examples.fetch_story_PLUS_(id).then((function(p1__41586_SHARP_) {
var temp__5802__auto__ = new cljs.core.Keyword(null,"kids","kids",1156670771).cljs$core$IFn$_invoke$arity$1(p1__41586_SHARP_);
if (cljs.core.truth_(temp__5802__auto__)) {
var kids = temp__5802__auto__;
return Promise.all(cljs.core.map.cljs$core$IFn$_invoke$arity$2(uix.examples.fetch_item_PLUS_, kids)).then((function(kids__$1) {
return cljs.core.assoc.cljs$core$IFn$_invoke$arity$3(p1__41586_SHARP_, new cljs.core.Keyword(null,"kids","kids",1156670771), kids__$1);
}
));
} else {
return p1__41586_SHARP_;
}
}
));
}
);
uix.examples.routes = new cljs.core.PersistentArrayMap(null,2,[new cljs.core.Keyword(null,"layout","layout",-2120940921), uix.examples.root_layout, new cljs.core.Keyword(null,"routes","routes",457900162), new cljs.core.PersistentVector(null,7,5,cljs.core.PersistentVector.EMPTY_NODE,[new cljs.core.PersistentArrayMap(null,3,[new cljs.core.Keyword(null,"path","path",-188191168), "/", new cljs.core.Keyword(null,"component","component",1555936782), (function() {
return uix.compiler.alpha.component_element(uix.examples.stories, [new cljs.core.PersistentArrayMap(null,1,[new cljs.core.Keyword(null,"type","type",1174270348), new cljs.core.Keyword(null,"new","new",-2085437848)],null)], []);
}
), new cljs.core.Keyword(null,"loader","loader",-462395423), uix.examples.fetch_stories_PLUS_],null), new cljs.core.PersistentArrayMap(null,3,[new cljs.core.Keyword(null,"path","path",-188191168), "/askstories", new cljs.core.Keyword(null,"component","component",1555936782), (function() {
return uix.compiler.alpha.component_element(uix.examples.stories, [new cljs.core.PersistentArrayMap(null,1,[new cljs.core.Keyword(null,"type","type",1174270348), new cljs.core.Keyword(null,"ask","ask",707712414)],null)], []);
}
), new cljs.core.Keyword(null,"loader","loader",-462395423), uix.examples.fetch_stories_PLUS_],null), new cljs.core.PersistentArrayMap(null,3,[new cljs.core.Keyword(null,"path","path",-188191168), "/showstories", new cljs.core.Keyword(null,"component","component",1555936782), (function() {
return uix.compiler.alpha.component_element(uix.examples.stories, [new cljs.core.PersistentArrayMap(null,1,[new cljs.core.Keyword(null,"type","type",1174270348), new cljs.core.Keyword(null,"show","show",-576705889)],null)], []);
}
), new cljs.core.Keyword(null,"loader","loader",-462395423), uix.examples.fetch_stories_PLUS_],null), new cljs.core.PersistentArrayMap(null,3,[new cljs.core.Keyword(null,"path","path",-188191168), "/jobstories", new cljs.core.Keyword(null,"component","component",1555936782), (function() {
return uix.compiler.alpha.component_element(uix.examples.stories, [new cljs.core.PersistentArrayMap(null,1,[new cljs.core.Keyword(null,"type","type",1174270348), new cljs.core.Keyword(null,"job","job",850873087)],null)], []);
}
), new cljs.core.Keyword(null,"loader","loader",-462395423), uix.examples.fetch_stories_PLUS_],null), new cljs.core.PersistentArrayMap(null,3,[new cljs.core.Keyword(null,"path","path",-188191168), "/topstories", new cljs.core.Keyword(null,"component","component",1555936782), (function() {
return uix.compiler.alpha.component_element(uix.examples.stories, [new cljs.core.PersistentArrayMap(null,1,[new cljs.core.Keyword(null,"type","type",1174270348), new cljs.core.Keyword(null,"top","top",-1856271961)],null)], []);
}
), new cljs.core.Keyword(null,"loader","loader",-462395423), uix.examples.fetch_stories_PLUS_],null), new cljs.core.PersistentArrayMap(null,3,[new cljs.core.Keyword(null,"path","path",-188191168), "/beststories", new cljs.core.Keyword(null,"component","component",1555936782), (function() {
return uix.compiler.alpha.component_element(uix.examples.stories, [new cljs.core.PersistentArrayMap(null,1,[new cljs.core.Keyword(null,"type","type",1174270348), new cljs.core.Keyword(null,"best","best",-2133361030)],null)], []);
}
), new cljs.core.Keyword(null,"loader","loader",-462395423), uix.examples.fetch_stories_PLUS_],null), new cljs.core.PersistentArrayMap(null,3,[new cljs.core.Keyword(null,"path","path",-188191168), "/item/$id", new cljs.core.Keyword(null,"component","component",1555936782), (function() {
return uix.compiler.alpha.component_element(uix.examples.item, [null], []);
}
), new cljs.core.Keyword(null,"loader","loader",-462395423), (function(p1__41587_SHARP_) {
return uix.examples.fetch_item_PLUS_(new cljs.core.Keyword(null,"id","id",-1388402092).cljs$core$IFn$_invoke$arity$1(new cljs.core.Keyword(null,"params","params",710516235).cljs$core$IFn$_invoke$arity$1(p1__41587_SHARP_)));
}
)],null)],null)],null);
uix.examples.create_router = (function uix$examples$create_router(p__41589) {
var map__41590 = p__41589;
var map__41590__$1 = cljs.core.__destructure_map(map__41590);
var layout = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41590__$1, new cljs.core.Keyword(null,"layout","layout",-2120940921));
var routes = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41590__$1, new cljs.core.Keyword(null,"routes","routes",457900162));
var root = module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.createRootRoute(({
"component": layout
}));
var routes__$1 = (function() {
var iter__5523__auto__ = (function uix$examples$create_router_$_iter__41591(s__41592) {
return (new cljs.core.LazySeq(null,(function() {
var s__41592__$1 = s__41592;
while (true) {
var temp__5804__auto__ = cljs.core.seq(s__41592__$1);
if (temp__5804__auto__) {
var s__41592__$2 = temp__5804__auto__;
if (cljs.core.chunked_seq_QMARK_(s__41592__$2)) {
var c__5521__auto__ = cljs.core.chunk_first(s__41592__$2);
var size__5522__auto__ = cljs.core.count(c__5521__auto__);
var b__41594 = cljs.core.chunk_buffer(size__5522__auto__);
if ((function() {
var i__41593 = (0);
while (true) {
if ((i__41593 < size__5522__auto__)) {
var map__41595 = cljs.core._nth(c__5521__auto__, i__41593);
var map__41595__$1 = cljs.core.__destructure_map(map__41595);
var path = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41595__$1, new cljs.core.Keyword(null,"path","path",-188191168));
var component = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41595__$1, new cljs.core.Keyword(null,"component","component",1555936782));
var loader = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41595__$1, new cljs.core.Keyword(null,"loader","loader",-462395423));
cljs.core.chunk_append(b__41594, module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.createRoute(({
"getParentRoute": cljs.core.constantly(root),
"path": path,
"loader": ((function(i__41593, map__41595, map__41595__$1, path, component, loader, c__5521__auto__, size__5522__auto__, b__41594, s__41592__$2, temp__5804__auto__, root, map__41590, map__41590__$1, layout, routes) {
return (function(p1__41588_SHARP_) {
var G__41596 = cljs_bean.core.__GT_clj.cljs$core$IFn$_invoke$arity$1(p1__41588_SHARP_);
return (loader.cljs$core$IFn$_invoke$arity$1 ? loader.cljs$core$IFn$_invoke$arity$1(G__41596) : loader.call(null, G__41596));
}
);
}
)(i__41593, map__41595, map__41595__$1, path, component, loader, c__5521__auto__, size__5522__auto__, b__41594, s__41592__$2, temp__5804__auto__, root, map__41590, map__41590__$1, layout, routes)),
"component": component
})));
var G__41614 = (i__41593 + (1));
i__41593 = G__41614;
continue;
} else {
return true;
}
break;
}
}
)()) {
return cljs.core.chunk_cons(cljs.core.chunk(b__41594), uix$examples$create_router_$_iter__41591(cljs.core.chunk_rest(s__41592__$2)));
} else {
return cljs.core.chunk_cons(cljs.core.chunk(b__41594), null);
}
} else {
var map__41597 = cljs.core.first(s__41592__$2);
var map__41597__$1 = cljs.core.__destructure_map(map__41597);
var path = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41597__$1, new cljs.core.Keyword(null,"path","path",-188191168));
var component = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41597__$1, new cljs.core.Keyword(null,"component","component",1555936782));
var loader = cljs.core.get.cljs$core$IFn$_invoke$arity$2(map__41597__$1, new cljs.core.Keyword(null,"loader","loader",-462395423));
return cljs.core.cons(module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.createRoute(({
"getParentRoute": cljs.core.constantly(root),
"path": path,
"loader": ((function(map__41597, map__41597__$1, path, component, loader, s__41592__$2, temp__5804__auto__, root, map__41590, map__41590__$1, layout, routes) {
return (function(p1__41588_SHARP_) {
var G__41598 = cljs_bean.core.__GT_clj.cljs$core$IFn$_invoke$arity$1(p1__41588_SHARP_);
return (loader.cljs$core$IFn$_invoke$arity$1 ? loader.cljs$core$IFn$_invoke$arity$1(G__41598) : loader.call(null, G__41598));
}
);
}
)(map__41597, map__41597__$1, path, component, loader, s__41592__$2, temp__5804__auto__, root, map__41590, map__41590__$1, layout, routes)),
"component": component
})), uix$examples$create_router_$_iter__41591(cljs.core.rest(s__41592__$2)));
}
} else {
return null;
}
break;
}
}
),null,null));
}
);
return iter__5523__auto__(routes);
}
)();
var route_tree = root.addChildren(cljs.core.into_array.cljs$core$IFn$_invoke$arity$1(routes__$1));
return module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.createRouter(({
"routeTree": route_tree
}));
}
);
uix.examples.init = (function uix$examples$init() {
var root = uix.dom.create_root.cljs$core$IFn$_invoke$arity$1(document.getElementById("root"));
return uix.dom.render_root(uix.compiler.alpha.component_element(uix.core.strict_mode, [cljs.core.PersistentArrayMap.EMPTY], [uix.compiler.alpha.component_element(module$node_modules$$tanstack$react_router$dist$cjs$index_cjs.RouterProvider, [new cljs.core.PersistentArrayMap(null,1,[new cljs.core.Keyword(null,"router","router",1091916230), uix.examples.create_router(uix.examples.routes)],null)], [])]), root);
}
);
//# sourceURL=http://localhost:3001/out/cljs-runtime/uix.examples.js
//# sourceMappingURL=uix.examples.js.map

Here's a couple of example of clojurescript code with respective compiled javascript output.

(defn hello [msg] msg)
(def hello (fn [msg] msg))
(def hello (fn myfn [msg] msg))
(defn hello [msg] msg)
(hello 123)

cljs.user.hello = (function cljs$user$hello(msg){
return msg;
});
cljs.user.hello = (function cljs$user$hello(msg){
return msg;
});
cljs.user.hello = (function cljs$user$myfn(msg){
return msg;
});
cljs.user.hello = (function cljs$user$hello(msg){
return msg;
});
cljs.user.hello.call(null,(123));

(when (> 1 0) 1)
(if (> 1 0) 1 2)
(cond
  (> 1 0) 1
  (> 1 9) 2
  :else 3)
(case 0
  1 1
  2 2
  3)

if(((1) > (0))){
} else {
}
if(((1) > (0))){
} else {
}
if(((1) > (0))){
} else {
if(((1) > (9))){
} else {
}
}
var G__31_32 = (0);
switch (G__31_32) {
case (1):
break;
case (2):
break;
default:
}

(set! x 1)
(= 1 2)
(not= 1 2)
(= 1 2)
(not= 1 2)
(> 1 2)
(>= 1 2)
(< 1 2)
(<= 1 2)
(and true false)
(or true false)

(cljs.user.x = (1));
cljs.core._EQ_.call(null,(1),(2));
cljs.core.not_EQ_.call(null,(1),(2));
cljs.core._EQ_.call(null,(1),(2));
cljs.core.not_EQ_.call(null,(1),(2));
((1) > (2));
((1) >= (2));
((1) < (2));
((1) <= (2));
((true) && (false));
((true) || (false));

(->
  (js/fetch "https://api.github.com/users/roman01la/repos")
  (.then (fn [res] (.json res)))
  (.then (fn [json] (.log js/console (.stringify js/JSON (aget json 0)))))
  (.catch (fn [err] (.log js/console err))))

fetch("https://api.github.com/users/roman01la/repos").then((function (res){
return res.json();
})).then((function (json){
return console.log(JSON.stringify((json[(0)])));
})).catch((function (err){
return console.log(err);
}));

(prn (map inc [1 2 3 4]))

cljs.core.prn.cljs$core$IFn$_invoke$arity$variadic(cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2([cljs.core.map.cljs$core$IFn$_invoke$arity$2(cljs.core.inc, new cljs.core.PersistentVector(null,4,5,cljs.core.PersistentVector.EMPTY_NODE,[(1), (2), (3), (4)],null))], 0));

(for [x (range 0 100)]
  (+ 8 x))

var iter__5523__auto___41191 = (function uix$examples$iter__41187(s__41188){
return (new cljs.core.LazySeq(null,(function (){
var s__41188__$1 = s__41188;
while(true){
var temp__5804__auto__ = cljs.core.seq(s__41188__$1);
if(temp__5804__auto__){
var s__41188__$2 = temp__5804__auto__;
if(cljs.core.chunked_seq_QMARK_(s__41188__$2)){
var c__5521__auto__ = cljs.core.chunk_first(s__41188__$2);
var size__5522__auto__ = cljs.core.count(c__5521__auto__);
var b__41190 = cljs.core.chunk_buffer(size__5522__auto__);
if((function (){var i__41189 = (0);
while(true){
if((i__41189 < size__5522__auto__)){
var x = cljs.core._nth(c__5521__auto__,i__41189);
cljs.core.chunk_append(b__41190,((8) + x));
var G__41192 = (i__41189 + (1));
i__41189 = G__41192;
continue;
} else {
return true;
}
break;
}
})()){
return cljs.core.chunk_cons(cljs.core.chunk(b__41190),uix$examples$iter__41187(cljs.core.chunk_rest(s__41188__$2)));
} else {
return cljs.core.chunk_cons(cljs.core.chunk(b__41190),null);
}
} else {
var x = cljs.core.first(s__41188__$2);
return cljs.core.cons(((8) + x),uix$examples$iter__41187(cljs.core.rest(s__41188__$2)));
}
} else {
return null;
}
break;
}
}),null,null));
});
iter__5523__auto___41191(cljs.core.range.cljs$core$IFn$_invoke$arity$2((0),(100)));

;; UI/React components

(defui button [{:keys [on-click children]}]
  ($ :button.btn {:on-click on-click}
    children))

(defui app []
  (let [[state set-state!] (uix.core/use-state 0)]
    ($ :<>
      ($ button {:on-click #(set-state! dec)} "-")
      ($ :span state)
      ($ button {:on-click #(set-state! inc)} "+"))))

Decompile the following JS output into readable clojurescript:

{{generated js here}}

@roman01la
Copy link
Author

There's only one issue at https://gist.github.com/roman01la/6b3e0c62403a6d0172de81c50acac343#file-decompiled-cljs-L141, where o3 wrote doseq instead of for, fixing that the code works perfectly fine.

@p-himik
Copy link

p-himik commented Apr 23, 2025

Interesting. Have you tried with a minified output?

@roman01la
Copy link
Author

@p-himik no, since in this particular case minified bundle is gonna include react/cljs runtime etc which is ~800kb of text which is too much for openai to consume all at once

@p-himik
Copy link

p-himik commented Apr 23, 2025

Ah, right. Perhaps module splitting would help, but might be too much of a hassle just for something mildly curious and with no clear application.

@thheller
Copy link

You could try and :advanced optimized build that uses :js-options {:js-provider :external}. Then it won't include any npm dependencies and basically only CLJS. Probably still won't get very far, but would be interesting.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment