feat: replace CRA by vite and add vitest

issue #9
This commit is contained in:
Ricardo Campos
2024-08-24 16:56:40 -03:00
parent c46fe2bc3c
commit ccc6bc99c0
12 changed files with 6334 additions and 22399 deletions
+1
View File
@@ -10,6 +10,7 @@
# production
/build
/dist
# misc
.DS_Store
+19
View File
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#ffffff" />
<meta name="description" content="TaskNote App - Your daily-basis friend" />
<link rel="apple-touch-icon" href="/logo192.png" />
<link rel="manifest" href="/manifest.json" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css">
<title>TaskNote - Your daily-basis friend</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>
</html>
+6216 -22385
View File
File diff suppressed because it is too large Load Diff
+23 -7
View File
@@ -8,19 +8,20 @@
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^29.5.12",
"@types/node": "^22.5.0",
"@types/react": "^18.3.4",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-scripts": "5.0.1",
"typescript": "^4.8.4",
"web-vitals": "^2.1.4"
"vite": "^5.4.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
"start": "vite --host",
"build": "tsc && vite build",
"preview": "vite build && vite preview",
"test": "vitest -u",
"test:coverage": "vitest run --coverage --watch=false",
"lint": "./node_modules/.bin/eslint \"src/**\""
},
"eslintConfig": {
"extends": [
@@ -39,5 +40,20 @@
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@types/react": "^18.3.4",
"@typescript-eslint/eslint-plugin": "^8.2.0",
"@vitest/coverage-v8": "^2.0.5",
"eslint": "^8.57.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsdoc": "^50.2.2",
"eslint-plugin-promise": "^7.1.0",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-react-hooks": "^4.6.2",
"jsdom": "^24.1.1",
"source-map-support": "^0.5.21",
"vitest": "^2.0.5"
}
}
+4 -4
View File
@@ -14,7 +14,7 @@ import styles from './App.module.css';
import { ITask } from './interfaces/Task';
function App() {
const App: React.FC = () => {
const [taskList, setTaskList] = useState<ITask[]>([]);
const [taskToUpdate, setTaskToUpdate] = useState<ITask | null>(null);
@@ -51,7 +51,7 @@ function App() {
};
return (
<div>
<>
<Modal children={
<TaskForm
btnText='Update task'
@@ -83,8 +83,8 @@ function App() {
</main>
<Footer />
</div>
</>
);
}
};
export default App;
+8
View File
@@ -0,0 +1,8 @@
declare global {
// eslint-disable-next-line no-unused-vars
interface Window {
config: any
}
}
export const env: Record<string, any> = { ...import.meta.env, ...window.config };
+4 -1
View File
@@ -1,11 +1,14 @@
window.global ||= window;
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import './index.css';
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
);
root.render(
<React.StrictMode>
<App />
+1
View File
@@ -0,0 +1 @@
/// <reference types="vite/client" />
+3
View File
@@ -0,0 +1,3 @@
{
"extends": "./tsconfig"
}
+5 -2
View File
@@ -1,6 +1,8 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Node 20",
"compilerOptions": {
"target": "es5",
"target": "ESNext",
"lib": [
"dom",
"dom.iterable",
@@ -18,7 +20,8 @@
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
"jsx": "react-jsx",
"outDir": "./dist/"
},
"include": [
"src"
+33
View File
@@ -0,0 +1,33 @@
import { ConfigEnv, defineConfig, UserConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { fileURLToPath } from 'url';
export default defineConfig(({ mode }: ConfigEnv) => {
const config: UserConfig = {
define: {} as any,
plugins: [react()],
build: {
outDir: 'dist',
sourcemap: true
},
server: {
port: 5000
},
preview: {
port: 5000
},
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
};
if (mode === 'development') {
if (config.define) {
config.define.global = {};
}
}
return config;
});
+17
View File
@@ -0,0 +1,17 @@
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
import { fileURLToPath } from 'url';
export default defineConfig({
plugins: [react()],
test: {
globals: true,
environment: 'jsdom',
setupFiles: './src/__test__/setup.ts',
css: false,
coverage: {
provider: 'v8',
reporter: ['lcov', 'cobertura', 'html']
}
}
});