From 10b0a014ae652f159bdf1aff0700b7e72b310543 Mon Sep 17 00:00:00 2001 From: ImAlpha Date: Sun, 14 Apr 2024 17:42:09 -0700 Subject: [PATCH] created project with vite --- .eslintrc.cjs | 18 ++++++++++++ .gitignore | 27 +++++++++++++++++ README.md | 31 ++++++++++++++++++-- bun.lockb | Bin 0 -> 77937 bytes index.html | 13 +++++++++ package.json | 28 ++++++++++++++++++ public/vite.svg | 1 + src/App.css | 42 ++++++++++++++++++++++++++ src/App.tsx | 35 ++++++++++++++++++++++ src/assets/react.svg | 1 + src/index.css | 68 +++++++++++++++++++++++++++++++++++++++++++ src/main.tsx | 10 +++++++ src/vite-env.d.ts | 1 + tsconfig.json | 25 ++++++++++++++++ tsconfig.node.json | 11 +++++++ vite.config.ts | 7 +++++ 16 files changed, 316 insertions(+), 2 deletions(-) create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100755 bun.lockb create mode 100644 index.html create mode 100644 package.json create mode 100644 public/vite.svg create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/assets/react.svg create mode 100644 src/index.css create mode 100644 src/main.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..d6c9537 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..09726a3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +.env +.env.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md index 1c3e34f..0d6babe 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,30 @@ -# kevos-backend +# React + TypeScript + Vite -Kept separate from frontend temporarily as the site gains traction and features are necessary. \ No newline at end of file +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default { + // other rules... + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + project: ['./tsconfig.json', './tsconfig.node.json'], + tsconfigRootDir: __dirname, + }, +} +``` + +- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` +- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..5953465ef2d2f8cb289314d5e4530529c91bfd56 GIT binary patch literal 77937 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 CP-`au literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..9240141 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "kevos-backend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react-swc": "^3.5.0", + "eslint": "^8.57.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "typescript": "^5.2.2", + "vite": "^5.2.0" + } +} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..afe48ac --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> + +

Vite + React

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..6119ad9 --- /dev/null +++ b/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..3d7150d --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import App from './App.tsx' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a7fc6fb --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..97ede7e --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..861b04b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react-swc' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +})