Skip to content

Commit d72af07

Browse files
authored
Merge pull request #1 from Softx0/develop
v1.0.0
2 parents 939d190 + 5619bbd commit d72af07

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1001
-1
lines changed

.eslintignore

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
node_modules
2+
**/dist
3+
**/build
4+
**/coverage
5+
*.css
6+
*.svg
7+
**/configs
8+
.eslintrc
9+
.prettierrc
10+
index.html
11+
package.json
12+
README.md
13+
src/vite-env.d.ts
14+
tsconfig.json
15+
tsconfig.node.json
16+
vite.config.ts

.eslintrc

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"root": true,
3+
"extends": ["./configs/eslint/recommended.cjs", "prettier"],
4+
"plugins": ["prettier"],
5+
"parser": "@typescript-eslint/parser",
6+
"parserOptions": {
7+
"ecmaFeatures": {
8+
"jsx": true
9+
},
10+
"ecmaVersion": "latest",
11+
"sourceType": "module"
12+
},
13+
"env": {
14+
"browser": true,
15+
"es2021": true,
16+
"node": true,
17+
"jest": true
18+
}
19+
20+
}

.gitignore

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
yarn.lock
15+
.env
16+
.env.development
17+
.env.production
18+
.env.staging
19+
20+
# Editor directories and files
21+
.vscode/*
22+
!.vscode/extensions.json
23+
.idea
24+
.DS_Store
25+
*.suo
26+
*.ntvs*
27+
*.njsproj
28+
*.sln
29+
*.sw?

.husky/pre-commit

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/usr/bin/env sh
2+
. "$(dirname -- "$0")/_/husky.sh"
3+
4+
yarn run lint-and-prettier

.prettierignore

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Ignore artifacts:
2+
build
3+
coverage
4+
**/configs
5+
6+
.eslintrc
7+
.prettierrc
8+
index.html
9+
package.json
10+
README.md
11+
src/vite-env.d.ts
12+
tsconfig.json
13+
tsconfig.node.json
14+
vite.config.ts

.prettierrc

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"bracketSameLine": true,
3+
"bracketSpacing": false,
4+
"jsxSingleQuote": false,
5+
"semi": true,
6+
"trailingComma": "none",
7+
"singleQuote": false,
8+
"tabWidth": 2,
9+
"printWidth": 160,
10+
"arrowParens": "always",
11+
"endOfLine": "auto"
12+
}

README.md

+103-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,103 @@
1-
# react-templater-2023
1+
## React Boilerplate
2+
3+
Proyecto con la estructura inicial para todos los proyectos basados en React.js + Typescript
4+
5+
## Que debo conocer antes de:
6+
7+
### Tecnologias
8+
9+
- ViteJS
10+
- React v18
11+
- Docker
12+
- ESLint
13+
- Prettier
14+
- Husky
15+
- Axios
16+
17+
### Setup
18+
19+
1. Clonar el repositorio
20+
2. Crear archivo `.env` con las variables especificadas en el `.env.sample`
21+
3. Para correrlo sin docker:
22+
23+
3.1. Situarse en la raiz del proyecto, proceder a instalar las dependencias con `yarn install`
24+
25+
3.2. Ejecutar `yarn start`
26+
27+
4. Para correrlo con docker:
28+
4.1. Construimos la imagen
29+
```
30+
docker build -t IMAGE_NAME:$TAG_IMAGE_DEV -f Dockerfile .
31+
```
32+
4.2. Procedemos a crear el container
33+
```
34+
docker run -dp 3000:3000 --name PROJECT_NAME IMAGE_NAME:$TAG_IMAGE_DEV
35+
```
36+
5. Abrir el browser y dirigirse a `localhost:3000`
37+
38+
### Consideraciones para el CI-CD
39+
40+
Como se presenta en el `Dockerfile`, se debe tener en cuenta antes de emitir un lanzamiento hacia el CI se debe de con antelación crear el archivo yarn.lock localmente. Esto con el objetivo de optimizar el despliegue y liberación del proyecto en el servidor, así como también que el motivo es que a nivel del Dockerfile se esta utilizando el comando `yarn install --frozen-lockfile` buscando mejorar el rendimiento del pipeline.
41+
42+
## Arquitectura
43+
44+
### Clean Architecture
45+
46+
En _Clean Architecture_, una aplicación se divide en responsabilidades y cada una de estas responsabilidades se representa en forma de capa.
47+
48+
Se basa en que la capa de dominio (Models/State) no dependa de ninguna capa exterior.
49+
La de aplicación sólo depende de la de dominio y el resto (normalmente presentación y acceso a datos) depende de la capa de aplicación.
50+
Esto se logra con la implementación de interfaces que luego tendrán que implementar las capas externas mediante la inyección de dependencias.
51+
52+
El siguiente diagrama representa la adaptación hecha de Clean Architecture para un proyecto Frontend basado en Typescrit y React
53+
54+
![CleanArchitectureReact](https://user-images.githubusercontent.com/32858351/173492130-2400f1b6-0262-4214-86c8-2733a5219f57.svg)
55+
56+
### Capas
57+
58+
- **Servicios Externos:** es la capa que contiene los servicios que conectan el dominio con el mundo exterior (capas exteriores). Aquí se definen los contratos, interfaces destinados a consumir los servicios externos.
59+
60+
- **services**: todos aquellos lugares donde vamos a estar llamando para buscar la información
61+
62+
- **Adaptadores:** es la capa de estandarización datos. Implementa interfaces definida en la capa de Servicios Externos y estandariza los responses de los servicios externos buscando llevar a la aplicación la menor cantidad errores humanos.
63+
64+
- **adapters**: estandarizar en base al modelo y el endpoint de momento. Reciben informacion y la devuelven.
65+
- **interceptors**: se busca en base a los adapters adaptar lo que enviamos y lo que recibimos (usalmente se utiliza axios como estandar)
66+
67+
- **Componentes:** Aqui se define toda la logica de negocio, mediante los components como tal, los hooks, utilities entre otros...
68+
69+
- **components**: logica de negocio / componentes estilizados
70+
- **hooks**: custom hooks que sean reutilizables en un segmento o toda la aplicación, para controlar su ciclo de vida.
71+
- **routes**: definir las rutas de la aplicación y sus conexiones
72+
- **utilities**: porciones de logica reutilizables en la aplicacion
73+
- **assets**: estilos, fonts, recursos graficos, entre otros.
74+
75+
- **Models/State:** es el corazon de la aplicación y tiene que estar totalmente aislada de cualquier dependencia ajena a la lógica o los datos de negocio. Puede contener entidades, value objects, eventos y servicios del dominio. Representan el state y el state en sí.
76+
77+
- **types/interfaces/models**: dar la representacion de nuestras entidades, y estandarizar un contrato sobre lo que se utilizara.
78+
- **context**: cualquier recurso que se necesite para manejar el state dentro de un alcance definido y que no sera necesario en toda la aplicación en todo momento.
79+
- **redux**: información que se necesita en toda la aplicación en todo momento.
80+
81+
### Patrones y metodologías utilizadas:
82+
83+
- **Axios:** Para el consumo de servicios en la capa de Servicios Externos
84+
85+
- **Pruebas unitarias:** Se debe utilizar jest asi como react-testing-library
86+
87+
- **ESLint:** En este proyecto se utiliza eslinter para la estandarización y verificación del código
88+
89+
- **Prettier:** De igual manera buscando establecer un estandar de legibilidad del código formateando un estilo en comun.
90+
91+
- **Husky:** Utilizando las virtudes, como pre-commits en el cual se ejecutan los comandos de eslint y prettier, para que antes de cada commit se le de formato con prettier y se valide el codigo que se trata de commitear con ESLint
92+
93+
### Tecnología CSS
94+
95+
**Importante:** Hasta ahora no se ajustara el template a una tecnologias de css en especifica, con el objetivo de que cada quien al utilizar el template pueda configurar e instalar la tecnologia que le guste
96+
97+
#### Opciones recomendadas:
98+
99+
- **TaildWindCSS**
100+
- **StyledComponents**
101+
- **Emotion**
102+
- **Bootstrap**
103+
- **AntDesign**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
module.exports = {
2+
rules: {
3+
"accessor-pairs": "error",
4+
"array-callback-return": "error",
5+
"block-scoped-var": "error",
6+
complexity: "error",
7+
curly: ["error", "multi-line"],
8+
"default-case": "error",
9+
"default-case-last": "error",
10+
"dot-location": ["error", "property"],
11+
"dot-notation": "error",
12+
eqeqeq: "error",
13+
"guard-for-in": "error",
14+
"no-caller": "error",
15+
"no-div-regex": "error",
16+
"no-else-return": "error",
17+
"no-eq-null": "error",
18+
"no-eval": "error",
19+
"no-extend-native": "error",
20+
"no-extra-bind": "error",
21+
"no-extra-label": "error",
22+
"no-floating-decimal": "error",
23+
"no-implicit-coercion": "error",
24+
"no-implicit-globals": "error",
25+
"no-implied-eval": "error",
26+
"no-iterator": "error",
27+
"no-labels": "error",
28+
"no-lone-blocks": "error",
29+
"no-loop-func": "error",
30+
"no-loss-of-precision": "error",
31+
"no-multi-spaces": "error",
32+
"no-multi-str": "error",
33+
"no-new": "error",
34+
"no-new-func": "error",
35+
"no-new-wrappers": "error",
36+
"no-nonoctal-decimal-escape": "error",
37+
"no-octal-escape": "error",
38+
"no-proto": "error",
39+
"no-restricted-properties": "error",
40+
"no-return-await": "error",
41+
"no-script-url": "error",
42+
"no-self-compare": "error",
43+
"no-sequences": "error",
44+
"no-throw-literal": "error",
45+
"no-unmodified-loop-condition": "error",
46+
"no-unused-expressions": 0,
47+
"no-useless-call": "error",
48+
"no-useless-concat": "error",
49+
"no-useless-return": "error",
50+
"no-void": "error",
51+
"prefer-named-capture-group": "error",
52+
"prefer-promise-reject-errors": "error",
53+
radix: "error",
54+
// "require-unicode-regexp": "error",
55+
"vars-on-top": "error",
56+
"wrap-iife": "error",
57+
yoda: "error",
58+
"default-param-last": "error",
59+
"grouped-accessor-pairs": ["error", "getBeforeSet"],
60+
"no-case-declarations": "error",
61+
"no-constructor-return": "error",
62+
"no-empty-pattern": "error",
63+
"no-fallthrough": "error",
64+
"no-global-assign": "error",
65+
"no-octal": "error",
66+
"no-redeclare": "error",
67+
"no-self-assign": "error",
68+
"no-unused-labels": "error",
69+
"no-useless-catch": "error",
70+
"no-useless-escape": "error",
71+
"no-with": "error",
72+
"prefer-regex-literals": "error",
73+
"no-only-tests/no-only-tests": [
74+
"error",
75+
{
76+
block: ['describe', 'it', 'context', 'test', 'tape', 'fixture', 'serial', 'suite'],
77+
},
78+
],
79+
"class-methods-use-this": "off",
80+
"consistent-return": "off",
81+
"max-classes-per-file": "off",
82+
"no-alert": "off",
83+
"no-empty-function": "off",
84+
"no-invalid-this": "off",
85+
"no-magic-numbers": "off",
86+
"no-param-reassign": "off",
87+
"no-return-assign": "off",
88+
"no-warning-comments": "off",
89+
"require-await": "off",
90+
"prettier/prettier": "error",
91+
},
92+
};
+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
module.exports = {
2+
rules: {
3+
"arrow-body-style": ["error", "as-needed"],
4+
"arrow-parens": "error",
5+
"arrow-spacing": "error",
6+
"generator-star-spacing": "error",
7+
"no-confusing-arrow": ["error", { allowParens: true }],
8+
"no-duplicate-imports": "error",
9+
"no-useless-computed-key": "error",
10+
"no-useless-constructor": "error",
11+
"no-useless-rename": "error",
12+
"no-var": "error",
13+
"object-shorthand": "error",
14+
"prefer-const": "error",
15+
"prefer-destructuring": [
16+
"error",
17+
{
18+
VariableDeclarator: {
19+
array: true,
20+
object: true,
21+
},
22+
AssignmentExpression: {
23+
array: false,
24+
object: true,
25+
},
26+
},
27+
{
28+
enforceForRenamedProperties: false,
29+
},
30+
],
31+
"prefer-numeric-literals": "error",
32+
"prefer-spread": "error",
33+
"prefer-template": "error",
34+
"rest-spread-spacing": "error",
35+
"symbol-description": "error",
36+
"template-curly-spacing": "error",
37+
"yield-star-spacing": "error",
38+
"constructor-super": "error",
39+
"no-class-assign": "error",
40+
"no-const-assign": "error",
41+
"no-dupe-class-members": "error",
42+
"no-new-symbol": "error",
43+
"no-restricted-exports": "error",
44+
"no-this-before-super": "error",
45+
"require-yield": "error",
46+
47+
"no-restricted-imports": "off",
48+
"prefer-arrow-callback": "off",
49+
"prefer-rest-params": "off",
50+
"sort-imports": "off",
51+
},
52+
};

0 commit comments

Comments
 (0)