From c78e96994d6f9e16d59abcd875402b3da7c74bd3 Mon Sep 17 00:00:00 2001 From: Fernando Araoz Date: Sun, 26 Jan 2025 15:00:34 -0500 Subject: [PATCH] Init --- .env | 1 + .gitignore | 2 ++ README.md | 13 ++++++++ bun.lockb | Bin 0 -> 137702 bytes eslint.config.js | 70 +++++++++++++++++++++++++++++++++++++++ index.html | 39 ++++++++++++++++++++++ package.json | 36 ++++++++++++++++++++ src/assets/favicon.ico | Bin 0 -> 15086 bytes src/components/input.tsx | 18 ++++++++++ src/index.tsx | 27 +++++++++++++++ src/pages/index.tsx | 8 +++++ src/pages/login.tsx | 44 ++++++++++++++++++++++++ src/utils/query.ts | 21 ++++++++++++ src/utils/types.ts | 1 + tsconfig.json | 15 +++++++++ uno.config.ts | 20 +++++++++++ vite.config.ts | 16 +++++++++ 17 files changed, 331 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package.json create mode 100644 src/assets/favicon.ico create mode 100644 src/components/input.tsx create mode 100644 src/index.tsx create mode 100644 src/pages/index.tsx create mode 100644 src/pages/login.tsx create mode 100644 src/utils/query.ts create mode 100644 src/utils/types.ts create mode 100644 tsconfig.json create mode 100644 uno.config.ts create mode 100644 vite.config.ts diff --git a/.env b/.env new file mode 100644 index 0000000..e4fa827 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +VITE_BACKEND_URL=http://localhost:8000/api diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..76add87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8d9b3cd --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# Reezer + +Yet another rewrite of deemix, this time with: + +- Rust in the backend + - Rocket.rs as server + - Swagger API docs +- Solidjs in the frontend + - SPA mode + - Bun + - UnoCSS +- Docker + diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..2471ce62e9fc2e94c9695bae3553a8e1012a5245 GIT binary patch literal 137702 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 + + + + + + + + + Solid App + + + + + + +
+ + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..c45a137 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "vite-template-solid", + "version": "0.0.0", + "description": "", + "type": "module", + "scripts": { + "start": "vite", + "dev": "vite", + "lint": "eslint . --fix", + "build": "vite build", + "serve": "vite preview" + }, + "license": "MIT", + "devDependencies": { + "@eslint/js": "^9.17.0", + "@types/bun": "latest", + "@typescript-eslint/eslint-plugin": "^8.19.0", + "@unocss/preset-wind": "^0.65.3", + "eslint": "^9.17.0", + "eslint-plugin-solid": "^0.14.5", + "globals": "^15.14.0", + "typescript": "^5.7.2", + "typescript-eslint": "^8.19.0", + "unocss": "^0.65.3", + "vite": "^6.0.0", + "vite-plugin-solid": "^2.11.0" + }, + "dependencies": { + "@solidjs/router": "^0.15.2", + "@tanstack/solid-query": "^5.62.10", + "@unocss/reset": "^0.65.3", + "add": "^2.0.6", + "solid-js": "^1.9.3" + }, + "module": "index.ts" +} diff --git a/src/assets/favicon.ico b/src/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b836b2bccac650e0e7d90514083add91d2c027ff GIT binary patch literal 15086 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 WLaxim%Fn{v*G + ) +} diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..5f18a87 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,27 @@ +/* @refresh reload */ +import { render } from "solid-js/web" +import { Route, HashRouter } from "@solidjs/router" +import { QueryClientProvider } from "@tanstack/solid-query" +import { query_client } from "./utils/query" + +import "virtual:uno.css" +import "@unocss/reset/tailwind.css" + +import { IndexPage } from "./pages" +import { LoginPage } from "./pages/login" + +const root = document.getElementById("root") + +if (import.meta.env.DEV && !(root instanceof HTMLElement)) +{ + throw new Error("Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?") +} + +render(() => ( + + + + + + +), root!) diff --git a/src/pages/index.tsx b/src/pages/index.tsx new file mode 100644 index 0000000..ca86d54 --- /dev/null +++ b/src/pages/index.tsx @@ -0,0 +1,8 @@ +export function IndexPage() +{ + return ( +
+ :D (happy) +
+ ) +} diff --git a/src/pages/login.tsx b/src/pages/login.tsx new file mode 100644 index 0000000..1855a2e --- /dev/null +++ b/src/pages/login.tsx @@ -0,0 +1,44 @@ +import { Input } from "../components/input" +import { fetch_api } from "../utils/query" + +export function LoginPage() +{ + async function onSubmit(ev: SubmitEvent) + { + fetch_api("/login", { + method: "post", + }) + ev.preventDefault() + console.log("loggin :D (submit)") + } + + return ( +
+

+ Login to Reezer +

+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ ) +} diff --git a/src/utils/query.ts b/src/utils/query.ts new file mode 100644 index 0000000..e901af2 --- /dev/null +++ b/src/utils/query.ts @@ -0,0 +1,21 @@ +import { QueryClient } from "@tanstack/solid-query" + +const backend_url = import.meta.env.VITE_BACKEND_URL + +export async function fetch_api(url: string, options?: RequestInit) +{ + const response = await fetch(`${backend_url}${url}`, { + credentials: "include", + ...options, + }) + if (!response.ok) throw new Error("API error") + return response.json() +} + +export const query_client = new QueryClient({ + defaultOptions: { + queries: { + queryFn: ({ queryKey }) => fetch_api(queryKey[0]), + }, + }, +}) diff --git a/src/utils/types.ts b/src/utils/types.ts new file mode 100644 index 0000000..d48b08f --- /dev/null +++ b/src/utils/types.ts @@ -0,0 +1 @@ +export type Result = [Result | null, Error | null]; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..249b273 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + "types": ["vite/client"], + "noEmit": true, + "isolatedModules": true + } +} diff --git a/uno.config.ts b/uno.config.ts new file mode 100644 index 0000000..244a855 --- /dev/null +++ b/uno.config.ts @@ -0,0 +1,20 @@ +import presetWind from "@unocss/preset-wind" +import { defineConfig } from "unocss" + +export default defineConfig({ + // ...UnoCSS options + presets: [ + presetWind(), + ], + theme: { + colors: { + "c-bg": "var(--bg)", + "c-on-bg": "var(--on-bg)", + "c-root-color": "var(--root-color)", + "c-primary": "var(--primary)", + "c-on-primary": "var(--on-primary)", + "c-outline": "var(--outline)", + "c-on-surface-variant": "var(--on-surface-variant)", + }, + }, +}) diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..988e8bd --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import UnoCSS from "unocss/vite" +import { defineConfig } from "vite" +import solidPlugin from "vite-plugin-solid" + +export default defineConfig({ + plugins: [ + UnoCSS(), + solidPlugin(), + ], + server: { + port: 3000, + }, + build: { + target: "esnext", + }, +})