@gaias/basenode 1.0.13 → 1.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +8 -5
- package/README.md +574 -39
- package/cfg/apisix.yml +1 -0
- package/cfg/application.development.yml +1 -0
- package/cfg/application.yml +5 -0
- package/cfg/database.yml +7 -0
- package/cfg/logger.yml +5 -0
- package/cfg/openapiCfg.yml +1 -0
- package/cfg/rabbitmq.yml +1 -0
- package/cfg/redis.yml +6 -0
- package/dist/example/app.d.ts +2 -0
- package/dist/example/app.d.ts.map +1 -0
- package/dist/example/app.js +57 -0
- package/dist/example/app.js.map +1 -0
- package/dist/example/controllers/UserController.d.ts +42 -0
- package/dist/example/controllers/UserController.d.ts.map +1 -0
- package/dist/example/controllers/UserController.js +243 -0
- package/dist/example/controllers/UserController.js.map +1 -0
- package/dist/example/controllers/index.d.ts +2 -0
- package/dist/example/controllers/index.d.ts.map +1 -0
- package/dist/example/controllers/index.js +18 -0
- package/dist/example/controllers/index.js.map +1 -0
- package/dist/example/entities/CasbinRule.d.ts +12 -0
- package/dist/example/entities/CasbinRule.d.ts.map +1 -0
- package/dist/example/entities/CasbinRule.js +56 -0
- package/dist/example/entities/CasbinRule.js.map +1 -0
- package/dist/example/entities/Role.d.ts +11 -0
- package/dist/example/entities/Role.d.ts.map +1 -0
- package/dist/example/entities/Role.js +56 -0
- package/dist/example/entities/Role.js.map +1 -0
- package/dist/example/entities/User.d.ts +18 -0
- package/dist/example/entities/User.d.ts.map +1 -0
- package/dist/example/entities/User.js +91 -0
- package/dist/example/entities/User.js.map +1 -0
- package/dist/example/entities/UserRole.d.ts +7 -0
- package/dist/example/entities/UserRole.d.ts.map +1 -0
- package/dist/example/entities/UserRole.js +36 -0
- package/dist/example/entities/UserRole.js.map +1 -0
- package/dist/example/entities/index.d.ts +5 -0
- package/dist/example/entities/index.d.ts.map +1 -0
- package/dist/example/entities/index.js +21 -0
- package/dist/example/entities/index.js.map +1 -0
- package/dist/example/events/TestEventHandler.d.ts +6 -0
- package/dist/example/events/TestEventHandler.d.ts.map +1 -0
- package/dist/example/events/TestEventHandler.js +36 -0
- package/dist/example/events/TestEventHandler.js.map +1 -0
- package/dist/example/events/index.d.ts +2 -0
- package/dist/example/events/index.d.ts.map +1 -0
- package/dist/example/events/index.js +18 -0
- package/dist/example/events/index.js.map +1 -0
- package/dist/example/repositories/CasbinRuleRepo.d.ts +6 -0
- package/dist/example/repositories/CasbinRuleRepo.d.ts.map +1 -0
- package/dist/example/repositories/CasbinRuleRepo.js +30 -0
- package/dist/example/repositories/CasbinRuleRepo.js.map +1 -0
- package/dist/example/repositories/RoleRepo.d.ts +11 -0
- package/dist/example/repositories/RoleRepo.d.ts.map +1 -0
- package/dist/example/repositories/RoleRepo.js +52 -0
- package/dist/example/repositories/RoleRepo.js.map +1 -0
- package/dist/example/repositories/UserRepo.d.ts +6 -0
- package/dist/example/repositories/UserRepo.d.ts.map +1 -0
- package/dist/example/repositories/UserRepo.js +30 -0
- package/dist/example/repositories/UserRepo.js.map +1 -0
- package/dist/example/repositories/UserRoleRepo.d.ts +6 -0
- package/dist/example/repositories/UserRoleRepo.d.ts.map +1 -0
- package/dist/example/repositories/UserRoleRepo.js +30 -0
- package/dist/example/repositories/UserRoleRepo.js.map +1 -0
- package/dist/example/repositories/index.d.ts +5 -0
- package/dist/example/repositories/index.d.ts.map +1 -0
- package/dist/example/repositories/index.js +21 -0
- package/dist/example/repositories/index.js.map +1 -0
- package/dist/example/services/UserService.d.ts +24 -0
- package/dist/example/services/UserService.d.ts.map +1 -0
- package/dist/example/services/UserService.js +114 -0
- package/dist/example/services/UserService.js.map +1 -0
- package/dist/example/utils/MyUtils.d.ts +17 -0
- package/dist/example/utils/MyUtils.d.ts.map +1 -0
- package/dist/example/utils/MyUtils.js +142 -0
- package/dist/example/utils/MyUtils.js.map +1 -0
- package/dist/example/utils/index.d.ts +2 -0
- package/dist/example/utils/index.d.ts.map +1 -0
- package/dist/example/utils/index.js +18 -0
- package/dist/example/utils/index.js.map +1 -0
- package/dist/example/vo/Roles.d.ts +37 -0
- package/dist/example/vo/Roles.d.ts.map +1 -0
- package/dist/example/vo/Roles.js +167 -0
- package/dist/example/vo/Roles.js.map +1 -0
- package/dist/example/vo/UserVo.d.ts +16 -0
- package/dist/example/vo/UserVo.d.ts.map +1 -0
- package/dist/example/vo/UserVo.js +68 -0
- package/dist/example/vo/UserVo.js.map +1 -0
- package/dist/example/vo/index.d.ts +3 -0
- package/dist/example/vo/index.d.ts.map +1 -0
- package/dist/example/vo/index.js +19 -0
- package/dist/example/vo/index.js.map +1 -0
- package/dist/example/wsControllers/EmployeesWSController.d.ts +8 -0
- package/dist/example/wsControllers/EmployeesWSController.d.ts.map +1 -0
- package/dist/example/wsControllers/EmployeesWSController.js +56 -0
- package/dist/example/wsControllers/EmployeesWSController.js.map +1 -0
- package/dist/example/wsControllers/index.d.ts +2 -0
- package/dist/example/wsControllers/index.d.ts.map +1 -0
- package/dist/example/wsControllers/index.js +18 -0
- package/dist/example/wsControllers/index.js.map +1 -0
- package/dist/gen_db.json +7 -0
- package/dist/tools/DBSchemaGenerator.d.ts +2 -0
- package/dist/tools/DBSchemaGenerator.d.ts.map +1 -0
- package/dist/tools/DBSchemaGenerator.js +104 -0
- package/dist/tools/DBSchemaGenerator.js.map +1 -0
- package/dist/tools/RepositoryGenerator.d.ts +2 -0
- package/dist/tools/RepositoryGenerator.d.ts.map +1 -0
- package/dist/tools/RepositoryGenerator.js +121 -0
- package/dist/tools/RepositoryGenerator.js.map +1 -0
- package/package.json +34 -9
- package/tools/repository.mst +13 -0
- package/README.adoc +0 -44
- package/SECURITY.md +0 -296
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{index.d.ts.map → src/index.d.ts.map} +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{index.js.map → src/index.js.map} +0 -0
- /package/dist/{libs → src/libs}/apisix/ApisixTemplate.d.ts +0 -0
- /package/dist/{libs → src/libs}/apisix/ApisixTemplate.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/apisix/ApisixTemplate.js +0 -0
- /package/dist/{libs → src/libs}/apisix/ApisixTemplate.js.map +0 -0
- /package/dist/{libs → src/libs}/apisix/HttpPutter.d.ts +0 -0
- /package/dist/{libs → src/libs}/apisix/HttpPutter.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/apisix/HttpPutter.js +0 -0
- /package/dist/{libs → src/libs}/apisix/HttpPutter.js.map +0 -0
- /package/dist/{libs → src/libs}/apisix/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/apisix/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/apisix/index.js +0 -0
- /package/dist/{libs → src/libs}/apisix/index.js.map +0 -0
- /package/dist/{libs → src/libs}/cache/CacheService.d.ts +0 -0
- /package/dist/{libs → src/libs}/cache/CacheService.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/cache/CacheService.js +0 -0
- /package/dist/{libs → src/libs}/cache/CacheService.js.map +0 -0
- /package/dist/{libs → src/libs}/cache/Timer.d.ts +0 -0
- /package/dist/{libs → src/libs}/cache/Timer.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/cache/Timer.js +0 -0
- /package/dist/{libs → src/libs}/cache/Timer.js.map +0 -0
- /package/dist/{libs → src/libs}/cache/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/cache/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/cache/index.js +0 -0
- /package/dist/{libs → src/libs}/cache/index.js.map +0 -0
- /package/dist/{libs → src/libs}/configure/ApplicationConfig.d.ts +0 -0
- /package/dist/{libs → src/libs}/configure/ApplicationConfig.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/configure/ApplicationConfig.js +0 -0
- /package/dist/{libs → src/libs}/configure/ApplicationConfig.js.map +0 -0
- /package/dist/{libs → src/libs}/configure/ConfigManager.d.ts +0 -0
- /package/dist/{libs → src/libs}/configure/ConfigManager.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/configure/ConfigManager.js +0 -0
- /package/dist/{libs → src/libs}/configure/ConfigManager.js.map +0 -0
- /package/dist/{libs → src/libs}/configure/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/configure/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/configure/index.js +0 -0
- /package/dist/{libs → src/libs}/configure/index.js.map +0 -0
- /package/dist/{libs → src/libs}/deps/Libs.d.ts +0 -0
- /package/dist/{libs → src/libs}/deps/Libs.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/deps/Libs.js +0 -0
- /package/dist/{libs → src/libs}/deps/Libs.js.map +0 -0
- /package/dist/{libs → src/libs}/deps/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/deps/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/deps/index.js +0 -0
- /package/dist/{libs → src/libs}/deps/index.js.map +0 -0
- /package/dist/{libs → src/libs}/error/BizError.d.ts +0 -0
- /package/dist/{libs → src/libs}/error/BizError.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/error/BizError.js +0 -0
- /package/dist/{libs → src/libs}/error/BizError.js.map +0 -0
- /package/dist/{libs → src/libs}/error/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/error/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/error/index.js +0 -0
- /package/dist/{libs → src/libs}/error/index.js.map +0 -0
- /package/dist/{libs → src/libs}/gateway/ApiGatewayLoader.d.ts +0 -0
- /package/dist/{libs → src/libs}/gateway/ApiGatewayLoader.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/gateway/ApiGatewayLoader.js +0 -0
- /package/dist/{libs → src/libs}/gateway/ApiGatewayLoader.js.map +0 -0
- /package/dist/{libs → src/libs}/gateway/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/gateway/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/gateway/index.js +0 -0
- /package/dist/{libs → src/libs}/gateway/index.js.map +0 -0
- /package/dist/{libs → src/libs}/generator/IdGenerator.d.ts +0 -0
- /package/dist/{libs → src/libs}/generator/IdGenerator.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/generator/IdGenerator.js +0 -0
- /package/dist/{libs → src/libs}/generator/IdGenerator.js.map +0 -0
- /package/dist/{libs → src/libs}/generator/IndexCreator.d.ts +0 -0
- /package/dist/{libs → src/libs}/generator/IndexCreator.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/generator/IndexCreator.js +0 -0
- /package/dist/{libs → src/libs}/generator/IndexCreator.js.map +0 -0
- /package/dist/{libs → src/libs}/generator/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/generator/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/generator/index.js +0 -0
- /package/dist/{libs → src/libs}/generator/index.js.map +0 -0
- /package/dist/{libs → src/libs}/healthcheck/HealthCheckController.d.ts +0 -0
- /package/dist/{libs → src/libs}/healthcheck/HealthCheckController.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/healthcheck/HealthCheckController.js +0 -0
- /package/dist/{libs → src/libs}/healthcheck/HealthCheckController.js.map +0 -0
- /package/dist/{libs → src/libs}/healthcheck/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/healthcheck/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/healthcheck/index.js +0 -0
- /package/dist/{libs → src/libs}/healthcheck/index.js.map +0 -0
- /package/dist/{libs → src/libs}/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/index.js +0 -0
- /package/dist/{libs → src/libs}/index.js.map +0 -0
- /package/dist/{libs → src/libs}/koa/KoaControllerReturnHandler.d.ts +0 -0
- /package/dist/{libs → src/libs}/koa/KoaControllerReturnHandler.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/koa/KoaControllerReturnHandler.js +0 -0
- /package/dist/{libs → src/libs}/koa/KoaControllerReturnHandler.js.map +0 -0
- /package/dist/{libs → src/libs}/koa/KoaLoader.d.ts +0 -0
- /package/dist/{libs → src/libs}/koa/KoaLoader.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/koa/KoaLoader.js +0 -0
- /package/dist/{libs → src/libs}/koa/KoaLoader.js.map +0 -0
- /package/dist/{libs → src/libs}/koa/KoaLoaderOption.d.ts +0 -0
- /package/dist/{libs → src/libs}/koa/KoaLoaderOption.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/koa/KoaLoaderOption.js +0 -0
- /package/dist/{libs → src/libs}/koa/KoaLoaderOption.js.map +0 -0
- /package/dist/{libs → src/libs}/koa/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/koa/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/koa/index.js +0 -0
- /package/dist/{libs → src/libs}/koa/index.js.map +0 -0
- /package/dist/{libs → src/libs}/koa/setupRestfulControllers.d.ts +0 -0
- /package/dist/{libs → src/libs}/koa/setupRestfulControllers.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/koa/setupRestfulControllers.js +0 -0
- /package/dist/{libs → src/libs}/koa/setupRestfulControllers.js.map +0 -0
- /package/dist/{libs → src/libs}/koa/setupSocketControllers.d.ts +0 -0
- /package/dist/{libs → src/libs}/koa/setupSocketControllers.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/koa/setupSocketControllers.js +0 -0
- /package/dist/{libs → src/libs}/koa/setupSocketControllers.js.map +0 -0
- /package/dist/{libs → src/libs}/leader/Leader.d.ts +0 -0
- /package/dist/{libs → src/libs}/leader/Leader.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/leader/Leader.js +0 -0
- /package/dist/{libs → src/libs}/leader/Leader.js.map +0 -0
- /package/dist/{libs → src/libs}/leader/LeaderOptions.d.ts +0 -0
- /package/dist/{libs → src/libs}/leader/LeaderOptions.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/leader/LeaderOptions.js +0 -0
- /package/dist/{libs → src/libs}/leader/LeaderOptions.js.map +0 -0
- /package/dist/{libs → src/libs}/leader/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/leader/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/leader/index.js +0 -0
- /package/dist/{libs → src/libs}/leader/index.js.map +0 -0
- /package/dist/{libs → src/libs}/logger/Logger.d.ts +0 -0
- /package/dist/{libs → src/libs}/logger/Logger.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/logger/Logger.js +0 -0
- /package/dist/{libs → src/libs}/logger/Logger.js.map +0 -0
- /package/dist/{libs → src/libs}/logger/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/logger/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/logger/index.js +0 -0
- /package/dist/{libs → src/libs}/logger/index.js.map +0 -0
- /package/dist/{libs → src/libs}/network/getLocalIpAddress.d.ts +0 -0
- /package/dist/{libs → src/libs}/network/getLocalIpAddress.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/network/getLocalIpAddress.js +0 -0
- /package/dist/{libs → src/libs}/network/getLocalIpAddress.js.map +0 -0
- /package/dist/{libs → src/libs}/network/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/network/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/network/index.js +0 -0
- /package/dist/{libs → src/libs}/network/index.js.map +0 -0
- /package/dist/{libs → src/libs}/orm/BaseRepository.d.ts +0 -0
- /package/dist/{libs → src/libs}/orm/BaseRepository.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/orm/BaseRepository.js +0 -0
- /package/dist/{libs → src/libs}/orm/BaseRepository.js.map +0 -0
- /package/dist/{libs → src/libs}/orm/TypeormLoader.d.ts +0 -0
- /package/dist/{libs → src/libs}/orm/TypeormLoader.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/orm/TypeormLoader.js +0 -0
- /package/dist/{libs → src/libs}/orm/TypeormLoader.js.map +0 -0
- /package/dist/{libs → src/libs}/orm/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/orm/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/orm/index.js +0 -0
- /package/dist/{libs → src/libs}/orm/index.js.map +0 -0
- /package/dist/{libs → src/libs}/pagination/Pagination.d.ts +0 -0
- /package/dist/{libs → src/libs}/pagination/Pagination.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/pagination/Pagination.js +0 -0
- /package/dist/{libs → src/libs}/pagination/Pagination.js.map +0 -0
- /package/dist/{libs → src/libs}/pagination/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/pagination/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/pagination/index.js +0 -0
- /package/dist/{libs → src/libs}/pagination/index.js.map +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/DistributedEvents.d.ts +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/DistributedEvents.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/DistributedEvents.js +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/DistributedEvents.js.map +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/DistributedEventsLoader.d.ts +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/DistributedEventsLoader.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/DistributedEventsLoader.js +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/DistributedEventsLoader.js.map +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/EventsManager.d.ts +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/EventsManager.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/EventsManager.js +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/EventsManager.js.map +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/index.js +0 -0
- /package/dist/{libs → src/libs}/rabbitmq/index.js.map +0 -0
- /package/dist/{libs → src/libs}/redis/RedisClient.d.ts +0 -0
- /package/dist/{libs → src/libs}/redis/RedisClient.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/redis/RedisClient.js +0 -0
- /package/dist/{libs → src/libs}/redis/RedisClient.js.map +0 -0
- /package/dist/{libs → src/libs}/redis/RedisLoader.d.ts +0 -0
- /package/dist/{libs → src/libs}/redis/RedisLoader.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/redis/RedisLoader.js +0 -0
- /package/dist/{libs → src/libs}/redis/RedisLoader.js.map +0 -0
- /package/dist/{libs → src/libs}/redis/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/redis/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/redis/index.js +0 -0
- /package/dist/{libs → src/libs}/redis/index.js.map +0 -0
- /package/dist/{libs → src/libs}/register/ApiRegisterController.d.ts +0 -0
- /package/dist/{libs → src/libs}/register/ApiRegisterController.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/register/ApiRegisterController.js +0 -0
- /package/dist/{libs → src/libs}/register/ApiRegisterController.js.map +0 -0
- /package/dist/{libs → src/libs}/register/Converter.d.ts +0 -0
- /package/dist/{libs → src/libs}/register/Converter.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/register/Converter.js +0 -0
- /package/dist/{libs → src/libs}/register/Converter.js.map +0 -0
- /package/dist/{libs → src/libs}/register/HttpMethods.d.ts +0 -0
- /package/dist/{libs → src/libs}/register/HttpMethods.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/register/HttpMethods.js +0 -0
- /package/dist/{libs → src/libs}/register/HttpMethods.js.map +0 -0
- /package/dist/{libs → src/libs}/register/ResRegTypes.d.ts +0 -0
- /package/dist/{libs → src/libs}/register/ResRegTypes.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/register/ResRegTypes.js +0 -0
- /package/dist/{libs → src/libs}/register/ResRegTypes.js.map +0 -0
- /package/dist/{libs → src/libs}/register/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/register/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/register/index.js +0 -0
- /package/dist/{libs → src/libs}/register/index.js.map +0 -0
- /package/dist/{libs → src/libs}/type/builder.d.ts +0 -0
- /package/dist/{libs → src/libs}/type/builder.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/type/builder.js +0 -0
- /package/dist/{libs → src/libs}/type/builder.js.map +0 -0
- /package/dist/{libs → src/libs}/type/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/type/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/type/index.js +0 -0
- /package/dist/{libs → src/libs}/type/index.js.map +0 -0
- /package/dist/{libs → src/libs}/type/types.d.ts +0 -0
- /package/dist/{libs → src/libs}/type/types.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/type/types.js +0 -0
- /package/dist/{libs → src/libs}/type/types.js.map +0 -0
- /package/dist/{libs → src/libs}/universal/UniversalController.d.ts +0 -0
- /package/dist/{libs → src/libs}/universal/UniversalController.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/universal/UniversalController.js +0 -0
- /package/dist/{libs → src/libs}/universal/UniversalController.js.map +0 -0
- /package/dist/{libs → src/libs}/universal/UniversalService.d.ts +0 -0
- /package/dist/{libs → src/libs}/universal/UniversalService.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/universal/UniversalService.js +0 -0
- /package/dist/{libs → src/libs}/universal/UniversalService.js.map +0 -0
- /package/dist/{libs → src/libs}/universal/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/universal/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/universal/index.js +0 -0
- /package/dist/{libs → src/libs}/universal/index.js.map +0 -0
- /package/dist/{libs → src/libs}/validator/SafeUrlValidator.d.ts +0 -0
- /package/dist/{libs → src/libs}/validator/SafeUrlValidator.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/validator/SafeUrlValidator.js +0 -0
- /package/dist/{libs → src/libs}/validator/SafeUrlValidator.js.map +0 -0
- /package/dist/{libs → src/libs}/validator/ValidationHelper.d.ts +0 -0
- /package/dist/{libs → src/libs}/validator/ValidationHelper.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/validator/ValidationHelper.js +0 -0
- /package/dist/{libs → src/libs}/validator/ValidationHelper.js.map +0 -0
- /package/dist/{libs → src/libs}/validator/i18nValidator.d.ts +0 -0
- /package/dist/{libs → src/libs}/validator/i18nValidator.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/validator/i18nValidator.js +0 -0
- /package/dist/{libs → src/libs}/validator/i18nValidator.js.map +0 -0
- /package/dist/{libs → src/libs}/validator/index.d.ts +0 -0
- /package/dist/{libs → src/libs}/validator/index.d.ts.map +0 -0
- /package/dist/{libs → src/libs}/validator/index.js +0 -0
- /package/dist/{libs → src/libs}/validator/index.js.map +0 -0
- /package/dist/{server → src/server}/BootstrapLoader.d.ts +0 -0
- /package/dist/{server → src/server}/BootstrapLoader.d.ts.map +0 -0
- /package/dist/{server → src/server}/BootstrapLoader.js +0 -0
- /package/dist/{server → src/server}/BootstrapLoader.js.map +0 -0
- /package/dist/{server → src/server}/BootstrapOption.d.ts +0 -0
- /package/dist/{server → src/server}/BootstrapOption.d.ts.map +0 -0
- /package/dist/{server → src/server}/BootstrapOption.js +0 -0
- /package/dist/{server → src/server}/BootstrapOption.js.map +0 -0
- /package/dist/{server → src/server}/bootstrap.d.ts +0 -0
- /package/dist/{server → src/server}/bootstrap.d.ts.map +0 -0
- /package/dist/{server → src/server}/bootstrap.js +0 -0
- /package/dist/{server → src/server}/bootstrap.js.map +0 -0
- /package/dist/{server → src/server}/index.d.ts +0 -0
- /package/dist/{server → src/server}/index.d.ts.map +0 -0
- /package/dist/{server → src/server}/index.js +0 -0
- /package/dist/{server → src/server}/index.js.map +0 -0
- /package/dist/{utils → src/utils}/YamlUtil.d.ts +0 -0
- /package/dist/{utils → src/utils}/YamlUtil.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/YamlUtil.js +0 -0
- /package/dist/{utils → src/utils}/YamlUtil.js.map +0 -0
- /package/dist/{utils → src/utils}/crypto.d.ts +0 -0
- /package/dist/{utils → src/utils}/crypto.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/crypto.js +0 -0
- /package/dist/{utils → src/utils}/crypto.js.map +0 -0
- /package/dist/{utils → src/utils}/index.d.ts +0 -0
- /package/dist/{utils → src/utils}/index.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/index.js +0 -0
- /package/dist/{utils → src/utils}/index.js.map +0 -0
- /package/dist/{utils → src/utils}/jwtUtil.d.ts +0 -0
- /package/dist/{utils → src/utils}/jwtUtil.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/jwtUtil.js +0 -0
- /package/dist/{utils → src/utils}/jwtUtil.js.map +0 -0
- /package/dist/{utils → src/utils}/transformer.d.ts +0 -0
- /package/dist/{utils → src/utils}/transformer.d.ts.map +0 -0
- /package/dist/{utils → src/utils}/transformer.js +0 -0
- /package/dist/{utils → src/utils}/transformer.js.map +0 -0
package/CLAUDE.md
CHANGED
|
@@ -33,7 +33,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
33
33
|
|
|
34
34
|
## Project Overview
|
|
35
35
|
|
|
36
|
-
`@gaias/basenode` (v1.0.
|
|
36
|
+
`@gaias/basenode` (v1.0.24) is a Node.js API development framework built on Koa, TypeORM, TypeDI, and routing-controllers. It provides a microframework architecture with built-in support for RESTful APIs, WebSocket controllers, database ORM, distributed events via RabbitMQ, Redis caching, and API gateway integration with APISIX.
|
|
37
37
|
|
|
38
38
|
**Requirements:**
|
|
39
39
|
- Node.js: >=18.0.0
|
|
@@ -125,12 +125,14 @@ yarn security:summary
|
|
|
125
125
|
# Output audit results in JSON format
|
|
126
126
|
yarn security:json
|
|
127
127
|
|
|
128
|
-
#
|
|
129
|
-
yarn security:
|
|
128
|
+
# Run enhanced security check with mitigation context (recommended)
|
|
129
|
+
yarn security:check
|
|
130
130
|
```
|
|
131
131
|
|
|
132
132
|
**Security Policy:** See `SECURITY.md` for comprehensive security guidelines, vulnerability reporting procedures, and mitigation strategies. The project includes automated security auditing via `yarn audit` and custom reporting tools.
|
|
133
133
|
|
|
134
|
+
**Vulnerability Mitigation:** See `VULNERABILITY_MITIGATION.md` for detailed information about known vulnerabilities and their mitigation status. The enhanced security check (`yarn security:check`) provides contextual information about mitigated vulnerabilities and exit code 0 when all vulnerabilities are properly mitigated.
|
|
135
|
+
|
|
134
136
|
### Testing
|
|
135
137
|
```bash
|
|
136
138
|
# Run all tests
|
|
@@ -752,6 +754,7 @@ The project uses Husky for git hooks:
|
|
|
752
754
|
|
|
753
755
|
---
|
|
754
756
|
|
|
755
|
-
**Last Updated:** 2025-10-
|
|
756
|
-
**Framework Version:** 1.0.
|
|
757
|
+
**Last Updated:** 2025-10-23
|
|
758
|
+
**Framework Version:** 1.0.24
|
|
759
|
+
**Build Number:** 251022024
|
|
757
760
|
**Maintainer:** FOT Team
|
package/README.md
CHANGED
|
@@ -1,55 +1,590 @@
|
|
|
1
|
-
# basenode
|
|
1
|
+
# @gaias/basenode
|
|
2
2
|
|
|
3
|
+
[](https://github.com/gaias/basenode)
|
|
4
|
+
[](https://nodejs.org)
|
|
5
|
+
[]()
|
|
3
6
|
|
|
4
|
-
|
|
7
|
+
A comprehensive Node.js API development framework built on Koa, TypeORM, TypeDI, and routing-controllers. Provides a microframework architecture with built-in support for RESTful APIs, WebSocket controllers, database ORM, distributed events, Redis caching, and API gateway integration.
|
|
5
8
|
|
|
6
|
-
##
|
|
9
|
+
## Features
|
|
7
10
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
- **Modern Framework Stack**: Koa 3.x, TypeORM 0.3.x, TypeDI, routing-controllers
|
|
12
|
+
- **TypeScript First**: Full TypeScript support with decorators and strict type checking
|
|
13
|
+
- **RESTful & WebSocket**: Support for both REST APIs and WebSocket controllers
|
|
14
|
+
- **Database ORM**: TypeORM with MySQL/MariaDB support, automatic entity generation
|
|
15
|
+
- **Dependency Injection**: TypeDI-based IoC container for clean architecture
|
|
16
|
+
- **Validation**: class-validator with i18n support for error messages
|
|
17
|
+
- **Caching**: Two-level caching (L1 in-memory, L2 Redis)
|
|
18
|
+
- **Distributed Events**: RabbitMQ-based pub/sub system
|
|
19
|
+
- **API Gateway**: APISIX integration for service registration
|
|
20
|
+
- **Leader Election**: Redis-based leader election for distributed systems
|
|
21
|
+
- **Health Check**: Built-in health check endpoint with system metrics
|
|
22
|
+
- **Pagination**: Complete pagination solution with sorting support
|
|
23
|
+
- **Security**: Built-in security features, vulnerability tracking, and mitigation
|
|
24
|
+
- **OpenAPI**: Automatic OpenAPI/Swagger documentation generation
|
|
25
|
+
- **Development Tools**: Hot reload, linting, testing, code generation
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
## Quick Start
|
|
20
28
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
### Prerequisites
|
|
30
|
+
|
|
31
|
+
- Node.js >= 18.0.0
|
|
32
|
+
- Yarn >= 1.22.x
|
|
33
|
+
- MariaDB/MySQL 5.7+ or 8.0+ (for production)
|
|
34
|
+
- Redis 6.0+ (optional, for caching)
|
|
35
|
+
- RabbitMQ 3.8+ (optional, for distributed events)
|
|
36
|
+
|
|
37
|
+
### Installation
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Clone the repository
|
|
41
|
+
git clone https://github.com/gaias/basenode.git
|
|
42
|
+
cd basenode
|
|
43
|
+
|
|
44
|
+
# Install dependencies
|
|
25
45
|
yarn install
|
|
26
|
-
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Configuration
|
|
49
|
+
|
|
50
|
+
1. **Database Configuration**
|
|
51
|
+
|
|
52
|
+
Edit `cfg/database.yml`:
|
|
53
|
+
```yaml
|
|
54
|
+
mariaDBUrl: mysql://username:password@localhost:3306/database
|
|
55
|
+
output: ./example
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
2. **Application Configuration**
|
|
59
|
+
|
|
60
|
+
Edit `cfg/application.yml`:
|
|
61
|
+
```yaml
|
|
62
|
+
appName: example
|
|
63
|
+
version: 1
|
|
64
|
+
port: 3000
|
|
65
|
+
privateKeyPath: ./keys/privateKey
|
|
66
|
+
publicKeyPath: ./keys/publicKey
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
3. **Redis Configuration** (Optional)
|
|
70
|
+
|
|
71
|
+
Edit `cfg/redis.yml`:
|
|
72
|
+
```yaml
|
|
73
|
+
host: localhost
|
|
74
|
+
port: 6379
|
|
75
|
+
password: your_password
|
|
76
|
+
db: 0
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
4. **RabbitMQ Configuration** (Optional)
|
|
80
|
+
|
|
81
|
+
Edit `cfg/rabbitmq.yml`:
|
|
82
|
+
```yaml
|
|
83
|
+
url: amqp://localhost:5672
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
5. **Environment Variables** (Optional)
|
|
87
|
+
|
|
88
|
+
Create a `.env` file or export variables:
|
|
89
|
+
```bash
|
|
90
|
+
NODE_ENV=development # Environment: development, production, test
|
|
91
|
+
ENABLE_API_GATEWAY=true # Enable APISIX gateway registration
|
|
92
|
+
API_GATEWAY_HOST_PORT=192.168.1.100:9180 # Gateway admin API address
|
|
93
|
+
DOMAINS=example.com,*.example.com # Allowed domains for gateway
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Running the Application
|
|
27
97
|
|
|
28
|
-
|
|
98
|
+
```bash
|
|
99
|
+
# Development mode with hot reload
|
|
100
|
+
yarn dev
|
|
101
|
+
|
|
102
|
+
# Development mode with API gateway enabled
|
|
103
|
+
yarn devPro
|
|
104
|
+
|
|
105
|
+
# Production mode (after building)
|
|
106
|
+
yarn ncc:run
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
The application will start on `http://localhost:3000` (or configured port).
|
|
110
|
+
|
|
111
|
+
Access the health check endpoint: `http://localhost:3000/_healthcheck`
|
|
112
|
+
|
|
113
|
+
## Project Structure
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
.
|
|
117
|
+
├── src/ # Framework source code
|
|
118
|
+
│ ├── libs/ # Framework components
|
|
119
|
+
│ │ ├── apisix/ # APISIX HTTP client
|
|
120
|
+
│ │ ├── cache/ # Two-level caching system
|
|
121
|
+
│ │ ├── configure/ # YAML configuration management
|
|
122
|
+
│ │ ├── deps/ # Dependency library exports
|
|
123
|
+
│ │ ├── error/ # Error handling
|
|
124
|
+
│ │ ├── gateway/ # API Gateway integration
|
|
125
|
+
│ │ ├── generator/ # ID generation (nanoid, snowflake)
|
|
126
|
+
│ │ ├── healthcheck/ # Health check endpoint
|
|
127
|
+
│ │ ├── koa/ # Koa server setup
|
|
128
|
+
│ │ ├── leader/ # Redis-based leader election
|
|
129
|
+
│ │ ├── logger/ # Pino logger wrapper
|
|
130
|
+
│ │ ├── network/ # Network utilities
|
|
131
|
+
│ │ ├── orm/ # TypeORM extensions
|
|
132
|
+
│ │ ├── pagination/ # Pagination utilities
|
|
133
|
+
│ │ ├── rabbitmq/ # RabbitMQ distributed events
|
|
134
|
+
│ │ ├── redis/ # Redis client wrapper
|
|
135
|
+
│ │ ├── register/ # API route registration
|
|
136
|
+
│ │ ├── type/ # Type definitions
|
|
137
|
+
│ │ ├── universal/ # Universal CRUD patterns
|
|
138
|
+
│ │ └── validator/ # Validation helpers
|
|
139
|
+
│ ├── server/ # Bootstrap logic
|
|
140
|
+
│ └── utils/ # Utilities (JWT, crypto, YAML)
|
|
141
|
+
├── example/ # Example application
|
|
142
|
+
│ ├── app.ts # Entry point
|
|
143
|
+
│ ├── controllers/ # RESTful controllers
|
|
144
|
+
│ ├── wsControllers/ # WebSocket controllers
|
|
145
|
+
│ ├── entities/ # TypeORM entities
|
|
146
|
+
│ ├── repositories/ # Repository classes
|
|
147
|
+
│ ├── services/ # Business logic services
|
|
148
|
+
│ ├── vo/ # Value Objects (DTOs)
|
|
149
|
+
│ └── events/ # Distributed event handlers
|
|
150
|
+
├── cfg/ # YAML configuration files
|
|
151
|
+
│ ├── application.yml # App settings
|
|
152
|
+
│ ├── database.yml # Database connection
|
|
153
|
+
│ ├── redis.yml # Redis connection
|
|
154
|
+
│ ├── rabbitmq.yml # RabbitMQ connection
|
|
155
|
+
│ ├── logger.yml # Logger settings
|
|
156
|
+
│ ├── apisix.yml # API gateway settings
|
|
157
|
+
│ └── openapiCfg.yml # OpenAPI/Swagger config
|
|
158
|
+
├── tools/ # Development tools
|
|
159
|
+
│ ├── DBSchemaGenerator.ts # Generate entities from DB
|
|
160
|
+
│ ├── RepositoryGenerator.ts # Generate repositories
|
|
161
|
+
│ └── repository.mst # Mustache template
|
|
162
|
+
├── docs/ # Documentation
|
|
163
|
+
├── k8s/ # Kubernetes manifests
|
|
164
|
+
└── keys/ # JWT keys (generated)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Development Commands
|
|
29
168
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
169
|
+
### Running
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# Development with hot reload
|
|
33
173
|
yarn dev
|
|
34
|
-
----
|
|
35
174
|
|
|
175
|
+
# Development with API gateway
|
|
176
|
+
yarn devPro
|
|
177
|
+
|
|
178
|
+
# Run compiled app
|
|
179
|
+
yarn ncc:run
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Building
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Build for publishing
|
|
186
|
+
yarn build:publish
|
|
187
|
+
|
|
188
|
+
# Build single-file executable
|
|
189
|
+
yarn ncc:build
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Database Code Generation
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Generate entities from database schema
|
|
196
|
+
yarn gen:db-schema
|
|
197
|
+
|
|
198
|
+
# Generate repository classes
|
|
199
|
+
yarn gen:db-repo
|
|
200
|
+
|
|
201
|
+
# Generate both entities and repositories
|
|
202
|
+
yarn gen:db
|
|
203
|
+
|
|
204
|
+
# Generate index files
|
|
205
|
+
yarn gen:idx
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Note**: Define tables to generate in `gen_db.json` before running.
|
|
209
|
+
|
|
210
|
+
### Testing & Quality
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Run tests
|
|
214
|
+
yarn test
|
|
215
|
+
|
|
216
|
+
# Run tests in watch mode
|
|
217
|
+
yarn test:watch
|
|
218
|
+
|
|
219
|
+
# Run tests with coverage
|
|
220
|
+
yarn test:coverage
|
|
221
|
+
|
|
222
|
+
# Type check and lint
|
|
223
|
+
yarn lint
|
|
224
|
+
|
|
225
|
+
# Auto-fix linting issues
|
|
226
|
+
yarn lint:fix
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Security
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# Run security audit
|
|
233
|
+
yarn security
|
|
234
|
+
|
|
235
|
+
# Show audit summary
|
|
236
|
+
yarn security:summary
|
|
237
|
+
|
|
238
|
+
# Enhanced security check (recommended)
|
|
239
|
+
yarn security:check
|
|
240
|
+
|
|
241
|
+
# Generate security report
|
|
242
|
+
yarn security:json
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
See [docs/SECURITY.md](docs/SECURITY.md) for comprehensive security guidelines.
|
|
246
|
+
|
|
247
|
+
### Dependency Management
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Check for outdated dependencies
|
|
251
|
+
yarn deps:check
|
|
252
|
+
|
|
253
|
+
# Update dependencies
|
|
254
|
+
yarn deps:update
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Other Tools
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# Generate RSA keys for JWT
|
|
261
|
+
yarn gen:keys
|
|
262
|
+
|
|
263
|
+
# Update build number
|
|
264
|
+
yarn buildNum
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Usage Examples
|
|
268
|
+
|
|
269
|
+
### Creating a RESTful Controller
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
import { rest, di } from '@/libs/deps';
|
|
273
|
+
import { UniversalController } from '@/libs/universal';
|
|
274
|
+
import { UserService } from './services/UserService';
|
|
275
|
+
import { UserVo } from './vo/UserVo';
|
|
276
|
+
|
|
277
|
+
@rest.JsonController('/api/users')
|
|
278
|
+
@di.Service()
|
|
279
|
+
export class UserController extends UniversalController {
|
|
280
|
+
@di.Inject()
|
|
281
|
+
private userService: UserService;
|
|
282
|
+
|
|
283
|
+
@rest.Get('/')
|
|
284
|
+
async getAll() {
|
|
285
|
+
return this.userService.getAll(UserVo);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
@rest.Post('/')
|
|
289
|
+
async create(@rest.Body() data: UserVo) {
|
|
290
|
+
return this.userService.create(data);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
@rest.Get('/:id')
|
|
294
|
+
async getById(@rest.Param('id') id: number) {
|
|
295
|
+
return this.userService.readById(id, UserVo);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Creating a Service with Repository
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
import { di } from '@/libs/deps';
|
|
304
|
+
import { UniversalService } from '@/libs/universal';
|
|
305
|
+
import { User } from './entities/User';
|
|
306
|
+
import { UserRepo } from './repositories/UserRepo';
|
|
307
|
+
|
|
308
|
+
@di.Service()
|
|
309
|
+
export class UserService extends UniversalService<User> {
|
|
310
|
+
constructor(@di.Inject(() => UserRepo) private userRepo: UserRepo) {
|
|
311
|
+
super(userRepo);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
async findByEmail(email: string): Promise<User | null> {
|
|
315
|
+
return this.userRepo.findOne({ where: { email } });
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Validation with VO (Value Object)
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
import { cv } from '@/libs/deps';
|
|
324
|
+
import { i18n } from '@/libs/validator';
|
|
325
|
+
import { IsSafeUrl } from '@/libs/validator';
|
|
326
|
+
|
|
327
|
+
export class UserVo {
|
|
328
|
+
@i18n(cv.IsString)
|
|
329
|
+
@i18n(cv.MaxLength, 50)
|
|
330
|
+
userName: string;
|
|
331
|
+
|
|
332
|
+
@i18n(cv.IsEmail)
|
|
333
|
+
email: string;
|
|
334
|
+
|
|
335
|
+
@IsSafeUrl()
|
|
336
|
+
website?: string;
|
|
337
|
+
|
|
338
|
+
@i18n(cv.IsOptional)
|
|
339
|
+
@i18n(cv.MinLength, 6)
|
|
340
|
+
password?: string;
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Pagination
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
import { rest, di } from '@/libs/deps';
|
|
348
|
+
import { PaginationIn, PaginationOut } from '@/libs/pagination';
|
|
349
|
+
import { UserService } from './services/UserService';
|
|
350
|
+
import { UserVo } from './vo/UserVo';
|
|
351
|
+
|
|
352
|
+
@rest.JsonController('/api/users')
|
|
353
|
+
@di.Service()
|
|
354
|
+
export class UserController {
|
|
355
|
+
@di.Inject()
|
|
356
|
+
private userService: UserService;
|
|
357
|
+
|
|
358
|
+
@rest.Post('/search')
|
|
359
|
+
async search(@rest.Body() pagination: PaginationIn): Promise<PaginationOut<UserVo, User>> {
|
|
360
|
+
return this.userService.search(pagination);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### Caching
|
|
366
|
+
|
|
367
|
+
```typescript
|
|
368
|
+
import { rest, di } from '@/libs/deps';
|
|
369
|
+
import { L1Cache } from '@/libs/cache';
|
|
370
|
+
import { CacheService } from '@/libs/cache';
|
|
371
|
+
|
|
372
|
+
@rest.JsonController('/api/data')
|
|
373
|
+
@di.Service()
|
|
374
|
+
export class DataController {
|
|
375
|
+
@di.Inject()
|
|
376
|
+
private cacheService: CacheService;
|
|
377
|
+
|
|
378
|
+
@rest.Get('/cached')
|
|
379
|
+
@L1Cache({ ttlSeconds: 60 })
|
|
380
|
+
async getCachedData() {
|
|
381
|
+
// L1 cache - in-memory
|
|
382
|
+
return { data: 'This is cached for 60 seconds' };
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
@rest.Get('/redis')
|
|
386
|
+
async getRedisData() {
|
|
387
|
+
// L2 cache - Redis
|
|
388
|
+
const cached = await this.cacheService.get('key');
|
|
389
|
+
if (cached) return cached;
|
|
390
|
+
|
|
391
|
+
const data = { data: 'Fresh data' };
|
|
392
|
+
await this.cacheService.set('key', data, 300);
|
|
393
|
+
return data;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Distributed Events
|
|
399
|
+
|
|
400
|
+
```typescript
|
|
401
|
+
import { di } from '@/libs/deps';
|
|
402
|
+
import { DistributedEvents } from '@/libs/rabbitmq';
|
|
403
|
+
|
|
404
|
+
@di.Service()
|
|
405
|
+
export class UserService {
|
|
406
|
+
@di.Inject()
|
|
407
|
+
private events: DistributedEvents;
|
|
408
|
+
|
|
409
|
+
async createUser(data: UserVo) {
|
|
410
|
+
const user = await this.userRepo.save(data);
|
|
411
|
+
|
|
412
|
+
// Publish event to RabbitMQ
|
|
413
|
+
await this.events.pub('user.created', { userId: user.id });
|
|
414
|
+
|
|
415
|
+
return user;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// Event handler
|
|
420
|
+
@di.Service()
|
|
421
|
+
export class UserEventHandler {
|
|
422
|
+
@di.Inject()
|
|
423
|
+
private events: DistributedEvents;
|
|
424
|
+
|
|
425
|
+
async init() {
|
|
426
|
+
// Subscribe to events
|
|
427
|
+
await this.events.sub(['user.created']);
|
|
428
|
+
|
|
429
|
+
this.events.on('RemoteEvent', (eventName, data) => {
|
|
430
|
+
if (eventName === 'user.created') {
|
|
431
|
+
console.log('User created:', data);
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
## Key Technologies
|
|
439
|
+
|
|
440
|
+
### Core Framework
|
|
441
|
+
- **[Koa](https://koajs.com/)** 3.0.3 - Lightweight web framework
|
|
442
|
+
- **[routing-controllers](https://github.com/typestack/routing-controllers)** 0.11.3 - Decorator-based routing
|
|
443
|
+
- **[socket-controllers](https://github.com/typestack/socket-controllers)** 0.3.1 - WebSocket controllers
|
|
444
|
+
- **[TypeDI](https://github.com/typestack/typedi)** 0.10.0 - Dependency injection
|
|
445
|
+
- **[microframework](https://github.com/typestack/microframework)** 0.6.4 - Loader pattern
|
|
446
|
+
|
|
447
|
+
### Data Layer
|
|
448
|
+
- **[TypeORM](https://typeorm.io/)** 0.3.27 - SQL ORM
|
|
449
|
+
- **[typeorm-transactional](https://github.com/Aliheym/typeorm-transactional)** 0.5.0 - Transaction management
|
|
450
|
+
- **[mysql2](https://github.com/sidorares/node-mysql2)** 3.15.2 - MySQL/MariaDB driver
|
|
451
|
+
- **[class-validator](https://github.com/typestack/class-validator)** 0.14.2 - Validation
|
|
452
|
+
- **[class-transformer](https://github.com/typestack/class-transformer)** 0.5.1 - Transformation
|
|
453
|
+
|
|
454
|
+
### Caching & Messaging
|
|
455
|
+
- **[ioredis](https://github.com/luin/ioredis)** 5.8.1 - Redis client
|
|
456
|
+
- **[amqplib](https://github.com/amqp-node/amqplib)** 0.10.9 - RabbitMQ client
|
|
457
|
+
|
|
458
|
+
### Utilities
|
|
459
|
+
- **[pino](https://github.com/pinojs/pino)** 10.0.0 - High-performance logger
|
|
460
|
+
- **[jsonwebtoken](https://github.com/auth0/node-jsonwebtoken)** 9.0.2 - JWT authentication
|
|
461
|
+
- **[nanoid](https://github.com/ai/nanoid)** 5.1.6 - Unique ID generator
|
|
462
|
+
- **[axios](https://github.com/axios/axios)** 1.12.2 - HTTP client
|
|
463
|
+
- **[helmet](https://github.com/helmetjs/helmet)** 8.1.0 - Security headers
|
|
464
|
+
|
|
465
|
+
## Documentation
|
|
466
|
+
|
|
467
|
+
- **[CLAUDE.md](CLAUDE.md)** - Comprehensive framework documentation
|
|
468
|
+
- **[docs/SECURITY.md](docs/SECURITY.md)** - Security guidelines and best practices
|
|
469
|
+
- **[docs/VULNERABILITY_MITIGATION.md](docs/VULNERABILITY_MITIGATION.md)** - Vulnerability tracking
|
|
470
|
+
- **[docs/QUICKSTART.md](docs/QUICKSTART.md)** - Quick start guide
|
|
471
|
+
- **[docs/PUBLISHING.md](docs/PUBLISHING.md)** - Publishing guide
|
|
472
|
+
- **[docs/BUILD_AND_USE.md](docs/BUILD_AND_USE.md)** - Building and usage instructions
|
|
473
|
+
- **[docs/DOCKER_OPTIMIZATION.md](docs/DOCKER_OPTIMIZATION.md)** - Docker optimization guide
|
|
474
|
+
|
|
475
|
+
### Module Documentation
|
|
476
|
+
|
|
477
|
+
- `src/libs/deps/README.md` - Unified dependency exports
|
|
478
|
+
- `src/libs/validator/README.md` - Validation helpers
|
|
479
|
+
- `src/libs/apisix/README.md` - API gateway integration
|
|
480
|
+
- `src/libs/gateway/README.md` - Gateway loader
|
|
481
|
+
- `src/libs/generator/README.md` - ID generation
|
|
482
|
+
- `src/libs/koa/README.md` - Koa server setup
|
|
483
|
+
- `src/libs/network/README.md` - Network utilities
|
|
484
|
+
- `src/libs/rabbitmq/README.md` - Distributed events
|
|
485
|
+
- `src/libs/register/README.md` - API route registration
|
|
486
|
+
- `src/libs/type/README.md` - Type utilities
|
|
487
|
+
- `src/libs/universal/README.md` - Universal CRUD patterns
|
|
488
|
+
|
|
489
|
+
## Security
|
|
490
|
+
|
|
491
|
+
This project takes security seriously. We use:
|
|
492
|
+
|
|
493
|
+
- Regular security audits with `yarn security:check`
|
|
494
|
+
- Dependency vulnerability tracking and mitigation
|
|
495
|
+
- Custom validators to avoid known CVEs (e.g., `@IsSafeUrl()` instead of `@IsUrl()`)
|
|
496
|
+
- Secure dependency resolutions for transitive dependencies
|
|
497
|
+
- Security documentation and best practices
|
|
498
|
+
|
|
499
|
+
See [docs/SECURITY.md](docs/SECURITY.md) for detailed information.
|
|
500
|
+
|
|
501
|
+
**Important**: Always use `@IsSafeUrl()` instead of `@IsUrl()` to avoid CVE-2025-56200.
|
|
502
|
+
|
|
503
|
+
## Contributing
|
|
504
|
+
|
|
505
|
+
Contributions are welcome! Please follow these guidelines:
|
|
506
|
+
|
|
507
|
+
1. Fork the repository
|
|
508
|
+
2. Create a feature branch from `develope`
|
|
509
|
+
3. Make your changes with descriptive commits
|
|
510
|
+
4. Run tests and linting: `yarn test && yarn lint`
|
|
511
|
+
5. Run security check: `yarn security:check`
|
|
512
|
+
6. Create a pull request to `develope` branch
|
|
513
|
+
|
|
514
|
+
### Development Guidelines
|
|
515
|
+
|
|
516
|
+
- Follow existing code conventions
|
|
517
|
+
- Use TypeScript strict mode
|
|
518
|
+
- Add JSDoc comments for public APIs
|
|
519
|
+
- Write tests for new features
|
|
520
|
+
- Update documentation as needed
|
|
521
|
+
|
|
522
|
+
## Publishing
|
|
523
|
+
|
|
524
|
+
This is a private npm package. To publish:
|
|
525
|
+
|
|
526
|
+
```bash
|
|
527
|
+
# Update version in package.json
|
|
528
|
+
# Update build number
|
|
529
|
+
yarn buildNum
|
|
530
|
+
|
|
531
|
+
# Run pre-publish checks
|
|
532
|
+
yarn publish:check
|
|
533
|
+
|
|
534
|
+
# Build for publishing
|
|
535
|
+
yarn build:publish
|
|
536
|
+
|
|
537
|
+
# Publish to npm
|
|
538
|
+
yarn publish:npmjs
|
|
539
|
+
|
|
540
|
+
# Or publish to GitHub packages
|
|
541
|
+
yarn publish:github
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
See [docs/PUBLISHING.md](docs/PUBLISHING.md) for detailed publishing instructions.
|
|
545
|
+
|
|
546
|
+
## Troubleshooting
|
|
547
|
+
|
|
548
|
+
### Database Connection Issues
|
|
549
|
+
|
|
550
|
+
- Verify `cfg/database.yml` connection string
|
|
551
|
+
- Check MariaDB/MySQL is running
|
|
552
|
+
- Ensure database user has proper permissions
|
|
553
|
+
|
|
554
|
+
### Redis Connection Issues
|
|
555
|
+
|
|
556
|
+
- Check Redis is running: `redis-cli ping`
|
|
557
|
+
- Verify `cfg/redis.yml` settings
|
|
558
|
+
- Can disable Redis by setting `disableRedis: true` in bootstrap
|
|
559
|
+
|
|
560
|
+
### TypeORM Entity Not Found
|
|
561
|
+
|
|
562
|
+
- Ensure entity is registered in bootstrap `entities` array
|
|
563
|
+
- Check entity file has `@Entity()` decorator
|
|
564
|
+
- Verify import path is correct
|
|
565
|
+
|
|
566
|
+
## License
|
|
567
|
+
|
|
568
|
+
UNLICENSED - Private package
|
|
569
|
+
|
|
570
|
+
## Author
|
|
571
|
+
|
|
572
|
+
FOT Team
|
|
573
|
+
|
|
574
|
+
## Links
|
|
36
575
|
|
|
576
|
+
- [Repository](https://github.com/gaias/basenode)
|
|
577
|
+
- [Issue Tracker](https://github.com/gaias/basenode/issues)
|
|
578
|
+
- [npm Package](https://www.npmjs.com/package/@gaias/basenode)
|
|
37
579
|
|
|
38
|
-
##
|
|
39
|
-
* Restful controller:
|
|
40
|
-
https://github.com/typestack/routing-controllers/blob/master/README.md[routing-controllers]
|
|
41
|
-
* Socket.io controller:
|
|
42
|
-
https://github.com/typestack/socket-controllers/blob/master/README.md[socket-controllers]
|
|
43
|
-
* Validation: https://github.com/typestack/class-validator/blob/master/README.md[class-validator]
|
|
44
|
-
* Json <-> Object: https://github.com/typestack/class-transformer/blob/develop/README.md[class-transformer]
|
|
45
|
-
* socket.io: https://socket.io/docs/[socket.io]
|
|
46
|
-
* IoC: https://github.com/typestack/typedi/blob/master/README.md[typedi]
|
|
47
|
-
* ORM:
|
|
48
|
-
** https://typeorm.io/[typeorm]
|
|
49
|
-
** https://github.com/odavid/typeorm-transactional-cls-hooked/blob/master/README.md[tx decorators]
|
|
50
|
-
** https://github.com/typeorm/typeorm-typedi-extensions/blob/master/README.md[inject repo/conn]
|
|
580
|
+
## Version History
|
|
51
581
|
|
|
582
|
+
- **1.0.24** (Current) - Latest updates and improvements
|
|
583
|
+
- **1.0.13** - Security enhancements and dependency updates
|
|
584
|
+
- **1.0.0** - Initial release
|
|
52
585
|
|
|
586
|
+
---
|
|
53
587
|
|
|
54
|
-
|
|
55
|
-
|
|
588
|
+
**Last Updated**: 2025-10-23
|
|
589
|
+
**Framework Version**: 1.0.24
|
|
590
|
+
**Build Number**: 251022024
|
package/cfg/apisix.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
apiKey: yhwj2hUq9H4kGBHGMvwKcKjt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
proxy: http://www.dev.fot.cool:8888
|
package/cfg/database.yml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 数据库配置 / Database Configuration
|
|
2
|
+
# 优先使用环境变量 DATABASE_URL,如果未设置则使用下面的默认值
|
|
3
|
+
# Environment variable DATABASE_URL takes precedence over this default value
|
|
4
|
+
# 推荐:请在 .env 文件中设置真实的数据库连接信息
|
|
5
|
+
# Recommended: Set real database connection in .env file
|
|
6
|
+
mariaDBUrl: mysql://root:AyEB7kJjm4@192.168.88.10:3306/fotNet
|
|
7
|
+
output: ./example
|
package/cfg/logger.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
disabled: false
|
package/cfg/rabbitmq.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
connection: amqp://admin:admin@192.168.88.10:5672/
|