From 6ca747eb6ff5eaded5bb073e5f1dd551a843b19b Mon Sep 17 00:00:00 2001 From: Ilshat Sultanov Date: Thu, 22 Sep 2022 22:45:12 +0300 Subject: [PATCH] feat(cli/templates) add clojurescript (#185) * feat(cli/templates): add clojurescript * fix(cli/fragments/clojurescript): code review improvements - add a post init note about installing `java` and `clojure` - add an example using the `greet` command - move some resources to the `clojurescript` template - change ports for `shadow-cljs` and `tauri` - update ci pipeline - fix code formatting * fix(cli/fragments/clojurescript): remove test stuff * refactor(cli/templates): move `base/src/style.css` to the `_assets_` directory We can't import styles into cljs. * fix(cli/fragments/clojurescript): code review improvements - added the recommended `calva` plugin for `vscode` - updated deps - removed exclusions for the `reagent` dependency * refactor(cli/fragments/clojurescript): switch from `deps.edn` to `shadow-cljs` directly * fix(cli/fragments/clojurescript): fix issue with the `pnpm` These settings allow us to use `pnpm` as a package manager. Without these settings, we will receive several errors from the compiler: `object-assign`, `scheduler`, `scheduler/tracing` is not available. * Update .changes/clojurescript.md --- .changes/clojurescript.md | 6 +++ .scripts/generate-templates-matrix.js | 1 + README.md | 1 + .../{base/src => _assets_}/style.css | 0 .../fragments/fragment-angular/_cta_manifest_ | 3 +- .../.vscode/extensions.json | 7 +++ .../fragment-clojurescript/README.md | 7 +++ .../fragment-clojurescript/_[pnpm]_.npmrc | 7 +++ .../fragment-clojurescript/_cta_manifest_ | 12 +++++ .../fragment-clojurescript/_gitignore | 23 ++++++++ .../fragment-clojurescript/package.json | 20 +++++++ .../fragment-clojurescript/public/cljs.svg | 28 ++++++++++ .../fragment-clojurescript/public/index.html | 15 ++++++ .../fragment-clojurescript/shadow-cljs.edn | 10 ++++ .../src/main/clojure/app/core.cljs | 53 +++++++++++++++++++ .../fragments/fragment-next-ts/_cta_manifest_ | 3 +- .../fragments/fragment-next/_cta_manifest_ | 3 +- .../fragment-preact-ts/_cta_manifest_ | 3 +- .../fragments/fragment-preact/_cta_manifest_ | 3 +- .../fragment-react-ts/_cta_manifest_ | 3 +- .../fragments/fragment-react/_cta_manifest_ | 3 +- .../fragment-solid-ts/_cta_manifest_ | 3 +- .../fragments/fragment-solid/_cta_manifest_ | 3 +- .../fragment-svelte-ts/_cta_manifest_ | 3 +- .../fragments/fragment-svelte/_cta_manifest_ | 3 +- .../fragment-vanilla-ts/_cta_manifest_ | 1 + .../fragments/fragment-vanilla/_cta_manifest_ | 3 +- .../fragments/fragment-vue-ts/_cta_manifest_ | 3 +- .../cli/fragments/fragment-vue/_cta_manifest_ | 3 +- .../cli/fragments/fragment-yew/_cta_manifest_ | 3 +- packages/cli/node/README.md | 1 + packages/cli/src/package_manager.rs | 1 + packages/cli/src/template.rs | 16 ++++++ 33 files changed, 239 insertions(+), 15 deletions(-) create mode 100644 .changes/clojurescript.md rename packages/cli/fragments/{base/src => _assets_}/style.css (100%) create mode 100644 packages/cli/fragments/fragment-clojurescript/.vscode/extensions.json create mode 100644 packages/cli/fragments/fragment-clojurescript/README.md create mode 100644 packages/cli/fragments/fragment-clojurescript/_[pnpm]_.npmrc create mode 100644 packages/cli/fragments/fragment-clojurescript/_cta_manifest_ create mode 100644 packages/cli/fragments/fragment-clojurescript/_gitignore create mode 100644 packages/cli/fragments/fragment-clojurescript/package.json create mode 100644 packages/cli/fragments/fragment-clojurescript/public/cljs.svg create mode 100644 packages/cli/fragments/fragment-clojurescript/public/index.html create mode 100644 packages/cli/fragments/fragment-clojurescript/shadow-cljs.edn create mode 100644 packages/cli/fragments/fragment-clojurescript/src/main/clojure/app/core.cljs diff --git a/.changes/clojurescript.md b/.changes/clojurescript.md new file mode 100644 index 0000000000..7bb3cdd265 --- /dev/null +++ b/.changes/clojurescript.md @@ -0,0 +1,6 @@ +--- +"create-tauri-app": minor +"create-tauri-app-js": minor +--- + +Add `clojurescript` template. diff --git a/.scripts/generate-templates-matrix.js b/.scripts/generate-templates-matrix.js index ccd7ba4fbd..baf2f14efc 100644 --- a/.scripts/generate-templates-matrix.js +++ b/.scripts/generate-templates-matrix.js @@ -16,6 +16,7 @@ const nodeJsTemplates = [ "next-ts", "preact", "preact-ts", + "clojurescript", ]; const matrixConfig = [ diff --git a/README.md b/README.md index c76e411243..b6338ada1e 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ Currently supported template presets include: - `preact` - `preact-ts` - `angular` +- `clojurescript` You can use `.` for the project name to scaffold in the current directory. diff --git a/packages/cli/fragments/base/src/style.css b/packages/cli/fragments/_assets_/style.css similarity index 100% rename from packages/cli/fragments/base/src/style.css rename to packages/cli/fragments/_assets_/style.css diff --git a/packages/cli/fragments/fragment-angular/_cta_manifest_ b/packages/cli/fragments/fragment-angular/_cta_manifest_ index 46bf06c6e9..7d20f39b02 100644 --- a/packages/cli/fragments/fragment-angular/_cta_manifest_ +++ b/packages/cli/fragments/fragment-angular/_cta_manifest_ @@ -8,4 +8,5 @@ devPath = http://localhost:1420 distDir = ../dist [files] -tauri.svg = src/assets/tauri.svg \ No newline at end of file +tauri.svg = src/assets/tauri.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-clojurescript/.vscode/extensions.json b/packages/cli/fragments/fragment-clojurescript/.vscode/extensions.json new file mode 100644 index 0000000000..f81944f560 --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "tauri-apps.tauri-vscode", + "rust-lang.rust-analyzer", + "betterthantomorrow.calva" + ] +} diff --git a/packages/cli/fragments/fragment-clojurescript/README.md b/packages/cli/fragments/fragment-clojurescript/README.md new file mode 100644 index 0000000000..2a3f2a45a9 --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/README.md @@ -0,0 +1,7 @@ +# Tauri + ClojureScript + +This template should help get you started developing with Tauri and ClojureScript + shadow-cljs. + +## Recommended IDE Setup + +- [VS Code](https://code.visualstudio.com/) + [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode) + [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) + [calva](https://marketplace.visualstudio.com/items?itemName=betterthantomorrow.calva) diff --git a/packages/cli/fragments/fragment-clojurescript/_[pnpm]_.npmrc b/packages/cli/fragments/fragment-clojurescript/_[pnpm]_.npmrc new file mode 100644 index 0000000000..4c49f29fc5 --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/_[pnpm]_.npmrc @@ -0,0 +1,7 @@ +# You can remove these settings if you use `yarn` or `npm`. +# These settings allow us to use `pnpm` as a package manager. +# Without these settings, we will receive several errors from the compiler: +# `object-assign`, `scheduler`, `scheduler/tracing` is not available. + +public-hoist-pattern[]='object-assign' +public-hoist-pattern[]='scheduler' diff --git a/packages/cli/fragments/fragment-clojurescript/_cta_manifest_ b/packages/cli/fragments/fragment-clojurescript/_cta_manifest_ new file mode 100644 index 0000000000..18f8bcd1ac --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/_cta_manifest_ @@ -0,0 +1,12 @@ +# Copyright 2019-2022 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + +beforeDevCommand = {{pkg_manager_run_command}} dev +beforeBuildCommand = {{pkg_manager_run_command}} build +devPath = http://localhost:1420 +distDir = ../public + +[files] +tauri.svg = public/tauri.svg +style.css = public/style.css diff --git a/packages/cli/fragments/fragment-clojurescript/_gitignore b/packages/cli/fragments/fragment-clojurescript/_gitignore new file mode 100644 index 0000000000..8fb285a39e --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/_gitignore @@ -0,0 +1,23 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +.cpcache +.clj-kondo/.cache +.shadow-cljs +target diff --git a/packages/cli/fragments/fragment-clojurescript/package.json b/packages/cli/fragments/fragment-clojurescript/package.json new file mode 100644 index 0000000000..0a4ba4b074 --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/package.json @@ -0,0 +1,20 @@ +{ + "name": "{{package_name}}", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "shadow-cljs watch app", + "build": "shadow-cljs release app", + "shadow-cljs": "shadow-cljs", + "tauri": "tauri" + }, + "devDependencies": { + "@tauri-apps/cli": "^1.1.1", + "shadow-cljs": "^2.20.2" + }, + "dependencies": { + "@tauri-apps/api": "^1.1.0", + "react": "^17.0.2", + "react-dom": "^17.0.2" + } +} diff --git a/packages/cli/fragments/fragment-clojurescript/public/cljs.svg b/packages/cli/fragments/fragment-clojurescript/public/cljs.svg new file mode 100644 index 0000000000..0d24013bcb --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/public/cljs.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + diff --git a/packages/cli/fragments/fragment-clojurescript/public/index.html b/packages/cli/fragments/fragment-clojurescript/public/index.html new file mode 100644 index 0000000000..c6c7005f4e --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/public/index.html @@ -0,0 +1,15 @@ + + + + + + + + Tauri + ClojureScript + + + +
+ + + diff --git a/packages/cli/fragments/fragment-clojurescript/shadow-cljs.edn b/packages/cli/fragments/fragment-clojurescript/shadow-cljs.edn new file mode 100644 index 0000000000..3edc829081 --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/shadow-cljs.edn @@ -0,0 +1,10 @@ +{:source-paths ["src/main/clojure"] + + :dependencies [[reagent/reagent "1.1.1"]] + + :dev-http {1420 "public"} + + :builds {:app {:target :browser + :output-dir "public/js" + :asset-path "/js" + :modules {:main {:init-fn app.core/main}}}}} diff --git a/packages/cli/fragments/fragment-clojurescript/src/main/clojure/app/core.cljs b/packages/cli/fragments/fragment-clojurescript/src/main/clojure/app/core.cljs new file mode 100644 index 0000000000..edf3564965 --- /dev/null +++ b/packages/cli/fragments/fragment-clojurescript/src/main/clojure/app/core.cljs @@ -0,0 +1,53 @@ +(ns app.core + (:require + ["@tauri-apps/api/tauri" :as tauri] + [goog.dom :as gdom] + [reagent.core :as r] + [reagent.dom :as dom])) + +(def root + (let [*name (r/atom "") + *message (r/atom "") + handle-input (fn [new-value] + (reset! *name new-value)) + greet! (fn [name] + ;; Learn more about Tauri commands at https://tauri.app/v1/guides/features/command + (-> (.invoke tauri "greet" #js {:name name}) + (.then (fn [res] + (reset! *message res)))))] + (fn [] + [:div.container + [:h1 "Welcome to Tauri!"] + + [:div.row + [:a {:href "https://tauri.app" :target "_blank"} + [:img {:src "/tauri.svg" :class "logo tauri" :alt "Tauri logo"}]] + [:a {:href "https://clojurescript.org" :target "_blank"} + [:img {:src "/cljs.svg" :class "logo tauri" :alt "ClojureScript logo"}]]] + + [:p "Click on the Tauri, ClojureScript logos to learn more."] + + [:div.row + [:input {:type "text" + :id "greet-input" + :on-change #(handle-input (.. % -target -value)) + :placeholder "Enter a name..."}] + [:button {:type "button" :on-click #(greet! @*name)} "Greet"]] + + [:p @*message]]))) + + +(defn mount-root + "Mount root component." + {:dev/after-load true} + [] + (some->> + (gdom/getElement "root") + (dom/render [root]))) + + +(defn main + "Application entry point." + {:export true} + [& _args] + (mount-root)) diff --git a/packages/cli/fragments/fragment-next-ts/_cta_manifest_ b/packages/cli/fragments/fragment-next-ts/_cta_manifest_ index fb478a4ea6..08b2f53d50 100644 --- a/packages/cli/fragments/fragment-next-ts/_cta_manifest_ +++ b/packages/cli/fragments/fragment-next-ts/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] next.svg = src/assets/next.svg react.svg = src/assets/react.svg -tauri.svg = src/assets/tauri.svg \ No newline at end of file +tauri.svg = src/assets/tauri.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-next/_cta_manifest_ b/packages/cli/fragments/fragment-next/_cta_manifest_ index fb478a4ea6..08b2f53d50 100644 --- a/packages/cli/fragments/fragment-next/_cta_manifest_ +++ b/packages/cli/fragments/fragment-next/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] next.svg = src/assets/next.svg react.svg = src/assets/react.svg -tauri.svg = src/assets/tauri.svg \ No newline at end of file +tauri.svg = src/assets/tauri.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-preact-ts/_cta_manifest_ b/packages/cli/fragments/fragment-preact-ts/_cta_manifest_ index f9c72050bc..092bb769e3 100644 --- a/packages/cli/fragments/fragment-preact-ts/_cta_manifest_ +++ b/packages/cli/fragments/fragment-preact-ts/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] preact.svg = src/assets/preact.svg vite.svg = public/vite.svg -tauri.svg = public/tauri.svg \ No newline at end of file +tauri.svg = public/tauri.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-preact/_cta_manifest_ b/packages/cli/fragments/fragment-preact/_cta_manifest_ index f9c72050bc..092bb769e3 100644 --- a/packages/cli/fragments/fragment-preact/_cta_manifest_ +++ b/packages/cli/fragments/fragment-preact/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] preact.svg = src/assets/preact.svg vite.svg = public/vite.svg -tauri.svg = public/tauri.svg \ No newline at end of file +tauri.svg = public/tauri.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-react-ts/_cta_manifest_ b/packages/cli/fragments/fragment-react-ts/_cta_manifest_ index 9a632efa5d..a8e45f6dc1 100644 --- a/packages/cli/fragments/fragment-react-ts/_cta_manifest_ +++ b/packages/cli/fragments/fragment-react-ts/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] react.svg = src/assets/react.svg vite.svg = public/vite.svg -tauri.svg = public/tauri.svg \ No newline at end of file +tauri.svg = public/tauri.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-react/_cta_manifest_ b/packages/cli/fragments/fragment-react/_cta_manifest_ index 9a632efa5d..a8e45f6dc1 100644 --- a/packages/cli/fragments/fragment-react/_cta_manifest_ +++ b/packages/cli/fragments/fragment-react/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] react.svg = src/assets/react.svg vite.svg = public/vite.svg -tauri.svg = public/tauri.svg \ No newline at end of file +tauri.svg = public/tauri.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-solid-ts/_cta_manifest_ b/packages/cli/fragments/fragment-solid-ts/_cta_manifest_ index 4576bf9fd2..21cf06593c 100644 --- a/packages/cli/fragments/fragment-solid-ts/_cta_manifest_ +++ b/packages/cli/fragments/fragment-solid-ts/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] vite.svg = public/vite.svg tauri.svg = public/tauri.svg -solid.svg = src/assets/logo.svg \ No newline at end of file +solid.svg = src/assets/logo.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-solid/_cta_manifest_ b/packages/cli/fragments/fragment-solid/_cta_manifest_ index 4576bf9fd2..21cf06593c 100644 --- a/packages/cli/fragments/fragment-solid/_cta_manifest_ +++ b/packages/cli/fragments/fragment-solid/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] vite.svg = public/vite.svg tauri.svg = public/tauri.svg -solid.svg = src/assets/logo.svg \ No newline at end of file +solid.svg = src/assets/logo.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-svelte-ts/_cta_manifest_ b/packages/cli/fragments/fragment-svelte-ts/_cta_manifest_ index fa45db14f2..ce28e42094 100644 --- a/packages/cli/fragments/fragment-svelte-ts/_cta_manifest_ +++ b/packages/cli/fragments/fragment-svelte-ts/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] vite.svg = public/vite.svg tauri.svg = public/tauri.svg -svelte.svg = public/svelte.svg \ No newline at end of file +svelte.svg = public/svelte.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-svelte/_cta_manifest_ b/packages/cli/fragments/fragment-svelte/_cta_manifest_ index fa45db14f2..ce28e42094 100644 --- a/packages/cli/fragments/fragment-svelte/_cta_manifest_ +++ b/packages/cli/fragments/fragment-svelte/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] vite.svg = public/vite.svg tauri.svg = public/tauri.svg -svelte.svg = public/svelte.svg \ No newline at end of file +svelte.svg = public/svelte.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-vanilla-ts/_cta_manifest_ b/packages/cli/fragments/fragment-vanilla-ts/_cta_manifest_ index 4d9e628ca9..2cbd14eec3 100644 --- a/packages/cli/fragments/fragment-vanilla-ts/_cta_manifest_ +++ b/packages/cli/fragments/fragment-vanilla-ts/_cta_manifest_ @@ -7,3 +7,4 @@ withGlobalTauri = true [files] tauri.svg = src/assets/tauri.svg vite.svg = src/assets/vite.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-vanilla/_cta_manifest_ b/packages/cli/fragments/fragment-vanilla/_cta_manifest_ index dd3c9cc245..dc45ad2143 100644 --- a/packages/cli/fragments/fragment-vanilla/_cta_manifest_ +++ b/packages/cli/fragments/fragment-vanilla/_cta_manifest_ @@ -3,4 +3,5 @@ distDir = ../src withGlobalTauri = true [files] -tauri.svg = src/assets/tauri.svg \ No newline at end of file +tauri.svg = src/assets/tauri.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-vue-ts/_cta_manifest_ b/packages/cli/fragments/fragment-vue-ts/_cta_manifest_ index 8e17b372e5..27f07b2274 100644 --- a/packages/cli/fragments/fragment-vue-ts/_cta_manifest_ +++ b/packages/cli/fragments/fragment-vue-ts/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] vite.svg = public/vite.svg tauri.svg = public/tauri.svg -vue.svg = src/assets/vue.svg \ No newline at end of file +vue.svg = src/assets/vue.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-vue/_cta_manifest_ b/packages/cli/fragments/fragment-vue/_cta_manifest_ index 8e17b372e5..27f07b2274 100644 --- a/packages/cli/fragments/fragment-vue/_cta_manifest_ +++ b/packages/cli/fragments/fragment-vue/_cta_manifest_ @@ -10,4 +10,5 @@ distDir = ../dist [files] vite.svg = public/vite.svg tauri.svg = public/tauri.svg -vue.svg = src/assets/vue.svg \ No newline at end of file +vue.svg = src/assets/vue.svg +style.css = src/style.css diff --git a/packages/cli/fragments/fragment-yew/_cta_manifest_ b/packages/cli/fragments/fragment-yew/_cta_manifest_ index e632ad4d40..1d72835934 100644 --- a/packages/cli/fragments/fragment-yew/_cta_manifest_ +++ b/packages/cli/fragments/fragment-yew/_cta_manifest_ @@ -9,4 +9,5 @@ distDir = ../dist withGlobalTauri = true [files] -tauri.svg = public/tauri.svg \ No newline at end of file +tauri.svg = public/tauri.svg +style.css = src/style.css diff --git a/packages/cli/node/README.md b/packages/cli/node/README.md index cae27eb583..a4563d17d7 100644 --- a/packages/cli/node/README.md +++ b/packages/cli/node/README.md @@ -59,6 +59,7 @@ Currently supported template presets include: - `preact` - `preact-ts` - `angular` +- `clojurescript` You can use `.` for the project name to scaffold in the current directory. diff --git a/packages/cli/src/package_manager.rs b/packages/cli/src/package_manager.rs index 031e06c080..71ce26471d 100644 --- a/packages/cli/src/package_manager.rs +++ b/packages/cli/src/package_manager.rs @@ -49,6 +49,7 @@ impl PackageManager { Template::NextTs, Template::Preact, Template::PreactTs, + Template::ClojureScript, ], } } diff --git a/packages/cli/src/template.rs b/packages/cli/src/template.rs index 98b9151d23..c492a4fc60 100644 --- a/packages/cli/src/template.rs +++ b/packages/cli/src/template.rs @@ -32,6 +32,7 @@ pub enum Template { NextTs, Preact, PreactTs, + ClojureScript, } impl Default for Template { @@ -58,6 +59,7 @@ impl<'a> Template { Template::Preact, Template::PreactTs, Template::VanillaTs, + Template::ClojureScript, ]; pub fn post_init_info(&self, pkg_manager: PackageManager) -> Option { @@ -85,6 +87,18 @@ impl<'a> Template { BLUE = BLUE, ), ), + Template::ClojureScript => Some( + format!( + "{ITALIC}{DIM}You also need to install{DIMRESET} {YELLOW}java{WHITE} {DIM}(e.g. {DIMRESET}{BLUE}https://adoptium.net{WHITE}{DIM}) and{DIMRESET} {YELLOW}clojure{WHITE} {DIM}({DIMRESET}{BLUE}https://clojure.org/guides/install_clojure{WHITE}{DIM}){DIMRESET}{RESET}", + ITALIC = ITALIC, + DIM = DIM, + DIMRESET = DIMRESET, + YELLOW = YELLOW, + WHITE = WHITE, + BLUE = BLUE, + RESET = RESET + ), + ), _ => None, } } @@ -241,6 +255,7 @@ impl Display for Template { Template::NextTs => write!(f, "next-ts"), Template::Preact => write!(f, "preact"), Template::PreactTs => write!(f, "preact-ts"), + Template::ClojureScript => write!(f, "clojurescript"), } } } @@ -265,6 +280,7 @@ impl FromStr for Template { "preact" => Ok(Template::Preact), "preact-ts" => Ok(Template::PreactTs), "vanilla-ts" => Ok(Template::VanillaTs), + "clojurescript" => Ok(Template::ClojureScript), _ => Err("Invalid template".to_string()), } }