{"id":18086106,"url":"https://github.com/FacundoRocha18/ApexTS","last_synced_at":"2025-03-29T01:31:09.503Z","repository":{"id":258478998,"uuid":"863308750","full_name":"FacundoRocha18/ApexTS","owner":"FacundoRocha18","description":"This project is a Nodejs web framework created using Typescript. I am doing this project as a way to practice concepts like testing, design patterns, software architecture and gain experience and deep knowledge on how a web framework works.   ","archived":false,"fork":false,"pushed_at":"2024-12-02T23:54:11.000Z","size":781,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-03T00:19:51.046Z","etag":null,"topics":["design-patterns","framework","jest","nodejs","software-architecture","software-testing","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FacundoRocha18.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-26T04:39:39.000Z","updated_at":"2024-12-02T23:46:27.000Z","dependencies_parsed_at":"2024-10-26T03:04:56.893Z","dependency_job_id":"4959d617-0960-4696-acae-f0d8d9169dbf","html_url":"https://github.com/FacundoRocha18/ApexTS","commit_stats":null,"previous_names":["facundorocha18/framework-project","facundorocha18/swiftts","facundorocha18/apexts"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FacundoRocha18%2FApexTS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FacundoRocha18%2FApexTS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FacundoRocha18%2FApexTS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FacundoRocha18%2FApexTS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FacundoRocha18","download_url":"https://codeload.github.com/FacundoRocha18/ApexTS/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246125539,"owners_count":20727442,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design-patterns","framework","jest","nodejs","software-architecture","software-testing","typescript"],"created_at":"2024-10-31T16:06:36.890Z","updated_at":"2025-03-29T01:31:09.491Z","avatar_url":"https://github.com/FacundoRocha18.png","language":"TypeScript","readme":"# ApexTS\n\n## Lightweight framework with TypeScript power\n\nApex.ts es un framework web ligero, escrito en Node.js y TypeScript, diseñado para simplificar la creación de aplicaciones RESTful con un manejo eficiente de rutas y middlewares.\n\nTabla de Contenidos\n\n- Características\n- Instalación\n- Ejemplo de Uso\n- Estructura de Carpetas\n- API\n  - Router\n  - MiddlewareManager\n  - RequestHandlerService\n- Configuración\n- Pruebas\n- Contribuciones\n- Licencia\n\n## Características\n\n- Enrutamiento Dinámico: Permite crear rutas dinámicamente y manejar parámetros de ruta.\n- Middlewares Flexibles: Maneja middlewares de forma eficiente para añadir funciones como validación, logging y más.\n- Soporte para JSON y Respuestas Personalizadas: Incluye métodos extendidos de respuesta como res.json para facilitar la creación de API REST.\n- Modular y Extensible: Construido para facilitar el uso de dependencias y ser extendido con nuevos módulos.\n\n## Instalación\n\n```Typescript\nnpm install apex.ts\n```\n\n## Ejemplo de Uso\n\n### Crear un Servidor Básico\n\n```typescript\nimport \"reflect-metadata\";\n\nimport {\n  HttpRequest,\n  HttpResponse,\n  ApexCore,\n  ApexFactory,\n  authMiddleware,\n  errorHandlerMiddleware,\n  loggerMiddleware,\n} from \"@apex.ts\";\n\nconst app: ApexCore = new ApexFactory().create();\nconst { NODE_ENV, PORT } = app.EnvConfig;\n\napp.useMiddleware(authMiddleware);\napp.useMiddleware(loggerMiddleware);\napp.useMiddleware(errorHandlerMiddleware);\n\napp.options(\"*\", (req: HttpRequest, res: HttpResponse) =\u003e {\n  res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n  res.setHeader(\"Access-Control-Allow-Methods\", \"GET, POST, PUT, DELETE, PATCH, OPTIONS\");\n  res.setHeader(\"Access-Control-Allow-Headers\", \"Content-Type, Authorization\");\n  res.status(204);\n  res.end();\n});\n\napp.listen(PORT, NODE_ENV);\n\n```\n\n## Estructura de Carpetas\n\n```bash\n/framework\n|-- /__tests__  # Tests del framework\n|-- /examples  # Ejemplos de uso del framework\n|-- /lib\n|   |-- /application  # Módulo de la aplicación\n|   |   |-- framework.interface.ts  # Interfaz de IFramework\n|   |   |-- framework.ts  # Clase principal del framework\n|   |-- /config  # Módulo de configuración\n|   |   |-- environment-config.ts   # Configuración del ambiente\n|   |   |-- framework-config.ts     # Configuración y arranque del servidor\n|   |-- /errors  # Módulo de errores\n|   |   |-- /middlewares\n|   |   |   |-- middleware-error.interface.ts  # Interfaz del error de los middlewares\n|   |-- /http # Módulo de HTTP\n|   |   |-- /request\n|   |   |   |-- request-handler.interface.ts  # Interfaz de RequestHandler\n|   |   |   |-- request-handler.ts  # Clase RequestHandler\n|   |   |-- http-methods.ts  # Librería de métodos HTTP\n|   |   |-- http-not-found-exception.ts  # Excepcion para ruta inexistente\n|   |-- /interfaces  # Módulo de interfaces generales\n|   |   |-- request.interface.ts\n|   |   |-- response.interface.ts\n|   |-- /middlewares # Módulo de middlewares\n|   |   |-- /parsing\n|   |   |   |-- json-response-middleware.ts\n|   |   |-- middleware-manager.interface.ts\n|   |   |-- middleware-manager.ts\n|   |   |-- middleware.types.ts\n|   |-- /parser  # Módulo de parseo\n|   |   |-- parse-params.interface.ts\n|   |   |-- parser-service.interface.ts\n|   |   |-- parse-service.ts\n|   |-- /router  # Módulo de rutas\n|   |   |-- route-procesor-service.interface.ts\n|   |   |-- route-procesor-service.ts\n|   |   |-- router.interface.ts\n|   |   |-- router.ts\n|   |   |-- router.types.ts\n|   |-- /types  # Módulo de tipos\n|   |-- index.ts  # Indice de exportación para framework y la configuración del ambiente\n|-- .env  # Configuración del ambiente\n|-- .env.example  # Configuración del ambiente de ejemplo\n|-- tsconfig.json  # Configuración de TypeScript\n|-- nodemon.json  # Configuración de Nodemon\n|-- package.json  # Configuración de NodeJS\n|-- README.md  # Documentación del proyecto\n```\n\n## API\n\n### Router\n\nPermite definir y manejar rutas de diferentes métodos HTTP.\n\n#### Métodos Router\n\n- get(path: string, handler: Handler): Define una ruta GET.\n- post(path: string, handler: Handler): Define una ruta POST.\n- put(path: string, handler: Handler): Define una ruta PUT.\n- delete(path: string, handler: Handler): Define una ruta DELETE.\n\n### MiddlewareManager\n\nClase que administra middlewares y asegura su ejecución en el orden registrado.\n\n#### Métodos MiddlewareManager\n\n- use(middleware: Middleware): Registra un middleware que será ejecutado para cada solicitud.\n- executeMiddlewares(req: Request, res: Response, next: () =\u003e void): Ejecuta todos los middlewares en orden.\n\n### RequestHandlerService\n\nGestiona la solicitud y procesa la ruta.\n\n#### Métodos RequestHandlerService\n\n- handleRequest(req: Request, res: Response): Ejecuta los middlewares y resuelve la ruta correspondiente a la solicitud.\n\n## Configuración\n\n### tsconfig.json\n\nPara soportar varias carpetas raíz y el uso de TypeScript, configura tu tsconfig.json de la siguiente manera:\n\n```json\n{\n  \"compilerOptions\": {\n    \"outDir\": \"./dist\",\n    \"target\": \"ES6\",\n    \"module\": \"commonjs\",\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"typeRoots\": [\"./global.d.ts\", \"lib/Types/Utils.d.ts\", \"./node_modules/@types\"],\n    \"paths\": {\n      \"@src/*\": [\"./lib/*\"],\n      \"@tests/*\": [\"./tests/*\"]\n    }\n  },\n  \"include\": [\"lib/**/*\", \"examples/**/*\", \"tests/**/*\"]\n}\n```\n\n### Configuración del Servidor\n\nAl iniciar una instancia de MyFramework, puedes pasar opciones adicionales para configurar el entorno y los módulos de respuesta personalizados.\n\n## Pruebas\n\nPara ejecutar los tests, instala Jest:\n\n```bash\nnpm install --save-dev jest\n```\n\nLuego, puedes ejecutar las pruebas con:\n\n```bash\nnpm run test\n```\n\n## Licencia\n\nEste proyecto está bajo la Licencia MIT.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFacundoRocha18%2FApexTS","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FFacundoRocha18%2FApexTS","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFacundoRocha18%2FApexTS/lists"}