create-nexwire 4.0.0
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/README.md +233 -0
- package/express/.dockerignore +14 -0
- package/express/.env +44 -0
- package/express/.env.example +42 -0
- package/express/.vscode/settings.json +26 -0
- package/express/LICENSE +21 -0
- package/express/README.md +211 -0
- package/express/biome.json +66 -0
- package/express/drizzle.config.ts +25 -0
- package/express/gitignore-stub +24 -0
- package/express/package.json +108 -0
- package/express/public/.gitkeep +0 -0
- package/express/src/config/app.ts +41 -0
- package/express/src/config/auth.ts +12 -0
- package/express/src/config/cache.ts +16 -0
- package/express/src/config/cookie.ts +15 -0
- package/express/src/config/cors.ts +12 -0
- package/express/src/config/database.ts +29 -0
- package/express/src/config/index.ts +83 -0
- package/express/src/config/jwt.ts +19 -0
- package/express/src/config/logging.ts +13 -0
- package/express/src/config/mail.ts +24 -0
- package/express/src/config/openapi.ts +54 -0
- package/express/src/config/queue.ts +30 -0
- package/express/src/config/rateLimit.ts +17 -0
- package/express/src/config/realtime.ts +15 -0
- package/express/src/config/redis.ts +18 -0
- package/express/src/config/security.ts +44 -0
- package/express/src/config/session.ts +17 -0
- package/express/src/config/storage.ts +22 -0
- package/express/src/config/validate.ts +40 -0
- package/express/src/database/migrations/sqlite/0000_init.sql +61 -0
- package/express/src/database/migrations/sqlite/meta/0000_snapshot.json +412 -0
- package/express/src/database/migrations/sqlite/meta/_journal.json +13 -0
- package/express/src/database/schema.ts +3 -0
- package/express/src/env.ts +76 -0
- package/express/src/framework/cache/cache.ts +81 -0
- package/express/src/framework/circuit-breaker/cb.ts +60 -0
- package/express/src/framework/database/connection.ts +196 -0
- package/express/src/framework/database/migrate-hooks.ts +87 -0
- package/express/src/framework/database/paginate.ts +227 -0
- package/express/src/framework/database/schema.ts +20 -0
- package/express/src/framework/database/seed.ts +139 -0
- package/express/src/framework/events/dispatcher.ts +49 -0
- package/express/src/framework/facade.ts +48 -0
- package/express/src/framework/http/app.ts +107 -0
- package/express/src/framework/http/cors.ts +7 -0
- package/express/src/framework/http/logger.ts +69 -0
- package/express/src/framework/http/metrics.ts +22 -0
- package/express/src/framework/http/openapi.ts +54 -0
- package/express/src/framework/http/ratelimiter.ts +16 -0
- package/express/src/framework/http/router.ts +178 -0
- package/express/src/framework/http/security.ts +23 -0
- package/express/src/framework/http/static.ts +23 -0
- package/express/src/framework/http/validation.ts +18 -0
- package/express/src/framework/kernel.ts +52 -0
- package/express/src/framework/maker-cli/db/core.mjs +288 -0
- package/express/src/framework/maker-cli/db/index.mjs +204 -0
- package/express/src/framework/maker-cli/deploy/core.mjs +1047 -0
- package/express/src/framework/maker-cli/deploy/index.mjs +91 -0
- package/express/src/framework/maker-cli/index.mjs +53 -0
- package/express/src/framework/maker-cli/middleware/core.mjs +47 -0
- package/express/src/framework/maker-cli/middleware/index.mjs +17 -0
- package/express/src/framework/maker-cli/module/core.mjs +684 -0
- package/express/src/framework/maker-cli/module/index.mjs +140 -0
- package/express/src/framework/maker-cli/runtime/build-ui.mjs +16 -0
- package/express/src/framework/maker-cli/runtime/core.mjs +543 -0
- package/express/src/framework/maker-cli/runtime/index.mjs +104 -0
- package/express/src/framework/maker-cli/runtime/redis-commander-patch.cjs +20 -0
- package/express/src/framework/maker-cli/stubs/controller/openapi.ts.stub +47 -0
- package/express/src/framework/maker-cli/stubs/controller/openapi.with-model.ts.stub +48 -0
- package/express/src/framework/maker-cli/stubs/controller/plain.ts.stub +54 -0
- package/express/src/framework/maker-cli/stubs/controller/schema.plain.ts.stub +14 -0
- package/express/src/framework/maker-cli/stubs/controller/schema.ts.stub +33 -0
- package/express/src/framework/maker-cli/stubs/deploy/Dockerfile.bun.stub +52 -0
- package/express/src/framework/maker-cli/stubs/deploy/Dockerfile.pnpm.stub +55 -0
- package/express/src/framework/maker-cli/stubs/deploy/Dockerfile.stub +51 -0
- package/express/src/framework/maker-cli/stubs/deploy/Dockerfile.yarn.stub +55 -0
- package/express/src/framework/maker-cli/stubs/deploy/README.stub +59 -0
- package/express/src/framework/maker-cli/stubs/deploy/compose/mysql.server.stub +45 -0
- package/express/src/framework/maker-cli/stubs/deploy/compose/postgres.server.stub +45 -0
- package/express/src/framework/maker-cli/stubs/deploy/compose/sqlite.stub +45 -0
- package/express/src/framework/maker-cli/stubs/deploy/env/mysql.server.stub +68 -0
- package/express/src/framework/maker-cli/stubs/deploy/env/postgres.server.stub +68 -0
- package/express/src/framework/maker-cli/stubs/deploy/env/sqlite.stub +67 -0
- package/express/src/framework/maker-cli/stubs/deploy/scripts/auto-migrate.sh.stub +41 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/README.stub +78 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/compose/noredis.stub +120 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/compose/redis.dev.stub +133 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/compose/redis.stub +131 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/env/local.example.stub +11 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/env/noredis.stub +25 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/env/redis.stub +25 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/README.stub +16 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/app.example.com.stub +13 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/pgadmin/servers.stub +14 -0
- package/express/src/framework/maker-cli/stubs/deploy/server/redis/redis.conf.stub +7 -0
- package/express/src/framework/maker-cli/stubs/deploy/supervisor/noredis.stub +54 -0
- package/express/src/framework/maker-cli/stubs/deploy/supervisor/redis.stub +70 -0
- package/express/src/framework/maker-cli/stubs/deploy/workflow/local.json.stub +25 -0
- package/express/src/framework/maker-cli/stubs/deploy/workflow/remote.json.stub +24 -0
- package/express/src/framework/maker-cli/stubs/example/console.ts.stub +34 -0
- package/express/src/framework/maker-cli/stubs/example/controller.ts.stub +418 -0
- package/express/src/framework/maker-cli/stubs/example/job.ts.stub +75 -0
- package/express/src/framework/maker-cli/stubs/example/route.api.ts.stub +207 -0
- package/express/src/framework/maker-cli/stubs/example/route.plain.ts.stub +18 -0
- package/express/src/framework/maker-cli/stubs/example/schema.plain.ts.stub +42 -0
- package/express/src/framework/maker-cli/stubs/example/schema.ts.stub +42 -0
- package/express/src/framework/maker-cli/stubs/job/name.ts.stub +25 -0
- package/express/src/framework/maker-cli/stubs/middleware/name.ts.stub +14 -0
- package/express/src/framework/maker-cli/stubs/model/name.mysql.ts.stub +9 -0
- package/express/src/framework/maker-cli/stubs/model/name.postgresql.ts.stub +9 -0
- package/express/src/framework/maker-cli/stubs/model/name.sqlite.ts.stub +9 -0
- package/express/src/framework/maker-cli/stubs/notification/controller.ts.stub +77 -0
- package/express/src/framework/maker-cli/stubs/notification/job.ts.stub +13 -0
- package/express/src/framework/maker-cli/stubs/notification/route.api.ts.stub +50 -0
- package/express/src/framework/maker-cli/stubs/notification/route.plain.ts.stub +12 -0
- package/express/src/framework/maker-cli/stubs/notification/schema.plain.ts.stub +26 -0
- package/express/src/framework/maker-cli/stubs/notification/schema.ts.stub +26 -0
- package/express/src/framework/maker-cli/stubs/route/api.ts.stub +80 -0
- package/express/src/framework/maker-cli/stubs/route/plain.ts.stub +11 -0
- package/express/src/framework/maker-cli/stubs/schedule/name.ts.stub +36 -0
- package/express/src/framework/maker-cli/stubs/seeder/name.ts.stub +20 -0
- package/express/src/framework/maker-cli/stubs/test/unit.ts.stub +22 -0
- package/express/src/framework/maker-cli/utils/env-config.mjs +44 -0
- package/express/src/framework/maker-cli/utils/env-db.mjs +61 -0
- package/express/src/framework/maker-cli/utils/file-ops.mjs +30 -0
- package/express/src/framework/maker-cli/utils/flags.mjs +14 -0
- package/express/src/framework/maker-cli/utils/help.mjs +50 -0
- package/express/src/framework/maker-cli/utils/naming.mjs +13 -0
- package/express/src/framework/maker-cli/utils/process.mjs +52 -0
- package/express/src/framework/modules/discover.ts +54 -0
- package/express/src/framework/modules/routes.ts +21 -0
- package/express/src/framework/notification/index.ts +116 -0
- package/express/src/framework/queue/clear.ts +22 -0
- package/express/src/framework/queue/queue.ts +342 -0
- package/express/src/framework/queue/ui.ts +187 -0
- package/express/src/framework/queue/worker.ts +61 -0
- package/express/src/framework/realtime/broadcast.ts +46 -0
- package/express/src/framework/realtime/index.ts +2 -0
- package/express/src/framework/realtime/socket-cookie.ts +71 -0
- package/express/src/framework/realtime/socket.ts +119 -0
- package/express/src/framework/realtime/types.ts +6 -0
- package/express/src/framework/realtime/ui.ts +16 -0
- package/express/src/framework/redis/client.ts +151 -0
- package/express/src/framework/runtime/runtime.ts +23 -0
- package/express/src/framework/runtime/server-adapter.ts +34 -0
- package/express/src/framework/scheduler/lock.ts +116 -0
- package/express/src/framework/scheduler/run.ts +48 -0
- package/express/src/framework/scheduler/scheduler.ts +155 -0
- package/express/src/framework/server.ts +177 -0
- package/express/src/framework/session/session.ts +98 -0
- package/express/src/framework/storage/storage.ts +785 -0
- package/express/src/framework/support/cookie.ts +62 -0
- package/express/src/framework/support/jwt.ts +33 -0
- package/express/src/framework/support/lifecycle.ts +35 -0
- package/express/src/framework/support/logger.ts +148 -0
- package/express/src/framework/support/mail.ts +48 -0
- package/express/src/framework/support/password.ts +23 -0
- package/express/src/framework/support/upload.ts +160 -0
- package/express/src/framework/support/url.ts +41 -0
- package/express/src/middlewares/auth-middleware.ts +98 -0
- package/express/src/middlewares/role-middleware.ts +25 -0
- package/express/src/modules/auth/controllers/auth.controller.ts +358 -0
- package/express/src/modules/auth/controllers/auth.helpers.ts +104 -0
- package/express/src/modules/auth/controllers/auth.schema.ts +102 -0
- package/express/src/modules/auth/controllers/role.controller.ts +15 -0
- package/express/src/modules/auth/database/models/notifications.ts +24 -0
- package/express/src/modules/auth/database/models/role.ts +14 -0
- package/express/src/modules/auth/database/models/user.ts +46 -0
- package/express/src/modules/auth/database/seeders/role.ts +18 -0
- package/express/src/modules/auth/database/seeders/user.ts +35 -0
- package/express/src/modules/auth/jobs/forgetpass.ts +20 -0
- package/express/src/modules/auth/jobs/registeruser.ts +23 -0
- package/express/src/modules/auth/jobs/verifyemail.ts +18 -0
- package/express/src/modules/auth/routes/api.ts +150 -0
- package/express/src/modules/auth/routes/role.ts +33 -0
- package/express/src/resources/index.html +17 -0
- package/express/src/resources/src/App.vue +5 -0
- package/express/src/resources/src/assets/css/styles.css +14761 -0
- package/express/src/resources/src/assets/css/styles.css.map +1 -0
- package/express/src/resources/src/assets/fonts/public-sans/public-sans-latin-ext.woff2 +0 -0
- package/express/src/resources/src/assets/fonts/public-sans/public-sans-latin.woff2 +0 -0
- package/express/src/resources/src/assets/images/favicon/favicon.ico +0 -0
- package/express/src/resources/src/assets/images/logo.png +0 -0
- package/express/src/resources/src/assets/scss/custom.css +217 -0
- package/express/src/resources/src/assets/scss/custom.css.map +1 -0
- package/express/src/resources/src/assets/scss/custom.scss +1346 -0
- package/express/src/resources/src/components/Button.vue +32 -0
- package/express/src/resources/src/components/Checkbox.vue +29 -0
- package/express/src/resources/src/components/Datepicker.vue +106 -0
- package/express/src/resources/src/components/FeatureButton.vue +53 -0
- package/express/src/resources/src/components/FloatButton.vue +33 -0
- package/express/src/resources/src/components/Href.vue +32 -0
- package/express/src/resources/src/components/Input.vue +223 -0
- package/express/src/resources/src/components/InputGroup.vue +145 -0
- package/express/src/resources/src/components/InputPasswordToggle.vue +213 -0
- package/express/src/resources/src/components/Modal.vue +55 -0
- package/express/src/resources/src/components/Pagebar.vue +26 -0
- package/express/src/resources/src/components/Select.vue +384 -0
- package/express/src/resources/src/components/Spinner.vue +42 -0
- package/express/src/resources/src/components/Switch.vue +65 -0
- package/express/src/resources/src/components/TextArea.vue +117 -0
- package/express/src/resources/src/components/Toast.vue +56 -0
- package/express/src/resources/src/components/datatable/DataTableSkeleton.vue +98 -0
- package/express/src/resources/src/components/datatable/Pagination.vue +147 -0
- package/express/src/resources/src/components/datatable/SelectOpption.vue +64 -0
- package/express/src/resources/src/components/datatable/index.vue +199 -0
- package/express/src/resources/src/composables/useAuth.ts +52 -0
- package/express/src/resources/src/helpers/nformatter.ts +10 -0
- package/express/src/resources/src/helpers/utils.ts +75 -0
- package/express/src/resources/src/layouts/AuthLayout.vue +20 -0
- package/express/src/resources/src/layouts/Layout/Footer.vue +23 -0
- package/express/src/resources/src/layouts/Layout/Header.vue +105 -0
- package/express/src/resources/src/layouts/Layout/Sidebar.vue +137 -0
- package/express/src/resources/src/layouts/Layout/index.vue +87 -0
- package/express/src/resources/src/main.ts +26 -0
- package/express/src/resources/src/pages/auth/forgetPassword.vue +82 -0
- package/express/src/resources/src/pages/auth/login.vue +99 -0
- package/express/src/resources/src/pages/auth/register.vue +133 -0
- package/express/src/resources/src/pages/auth/resetPassword.vue +118 -0
- package/express/src/resources/src/pages/auth/verifyEmail.vue +68 -0
- package/express/src/resources/src/pages/dashboard/index.vue +66 -0
- package/express/src/resources/src/plugins/axios.ts +31 -0
- package/express/src/resources/src/plugins/browserDetect.ts +55 -0
- package/express/src/resources/src/plugins/dialog.ts +216 -0
- package/express/src/resources/src/plugins/gum.ts +367 -0
- package/express/src/resources/src/plugins/pulse.ts +147 -0
- package/express/src/resources/src/plugins/routeProgress.ts +87 -0
- package/express/src/resources/src/router/index.ts +85 -0
- package/express/src/resources/src/stores/admin-ui.ts +148 -0
- package/express/src/resources/src/stores/auth.ts +164 -0
- package/express/src/resources/tsconfig.json +19 -0
- package/express/src/resources/vite.config.ts +46 -0
- package/express/src/storage/app/private/.gitkeep +0 -0
- package/express/src/storage/app/public/.gitkeep +0 -0
- package/express/src/storage/app/tmp/generated/.gitkeep +0 -0
- package/express/src/storage/database/nexwire.sqlite +0 -0
- package/express/src/storage/logs/.gitkeep +0 -0
- package/express/src/storage/tmp/.gitkeep +0 -0
- package/express/src/storage/trash/modules/.gitkeep +0 -0
- package/express/src/types/global.d.ts +26 -0
- package/express/tsconfig.json +19 -0
- package/express/vitest.config.ts +23 -0
- package/hono/.dockerignore +14 -0
- package/hono/.env +44 -0
- package/hono/.env.example +42 -0
- package/hono/.vscode/settings.json +26 -0
- package/hono/LICENSE +21 -0
- package/hono/README.md +211 -0
- package/hono/biome.json +76 -0
- package/hono/drizzle.config.ts +25 -0
- package/hono/gitignore-stub +24 -0
- package/hono/package.json +99 -0
- package/hono/public/.gitkeep +0 -0
- package/hono/src/config/app.ts +41 -0
- package/hono/src/config/auth.ts +12 -0
- package/hono/src/config/cache.ts +16 -0
- package/hono/src/config/cookie.ts +15 -0
- package/hono/src/config/cors.ts +12 -0
- package/hono/src/config/database.ts +29 -0
- package/hono/src/config/index.ts +83 -0
- package/hono/src/config/jwt.ts +19 -0
- package/hono/src/config/logging.ts +13 -0
- package/hono/src/config/mail.ts +24 -0
- package/hono/src/config/openapi.ts +54 -0
- package/hono/src/config/queue.ts +30 -0
- package/hono/src/config/rateLimit.ts +17 -0
- package/hono/src/config/realtime.ts +15 -0
- package/hono/src/config/redis.ts +18 -0
- package/hono/src/config/security.ts +44 -0
- package/hono/src/config/session.ts +17 -0
- package/hono/src/config/storage.ts +22 -0
- package/hono/src/config/validate.ts +40 -0
- package/hono/src/database/migrations/sqlite/0000_init.sql +61 -0
- package/hono/src/database/migrations/sqlite/meta/0000_snapshot.json +412 -0
- package/hono/src/database/migrations/sqlite/meta/_journal.json +13 -0
- package/hono/src/database/schema.ts +3 -0
- package/hono/src/env.ts +76 -0
- package/hono/src/framework/cache/cache.ts +81 -0
- package/hono/src/framework/circuit-breaker/cb.ts +60 -0
- package/hono/src/framework/database/connection.ts +196 -0
- package/hono/src/framework/database/migrate-hooks.ts +87 -0
- package/hono/src/framework/database/paginate.ts +253 -0
- package/hono/src/framework/database/schema.ts +20 -0
- package/hono/src/framework/database/seed.ts +139 -0
- package/hono/src/framework/events/dispatcher.ts +49 -0
- package/hono/src/framework/facade.ts +29 -0
- package/hono/src/framework/http/app.ts +109 -0
- package/hono/src/framework/http/cors.ts +19 -0
- package/hono/src/framework/http/logger.ts +81 -0
- package/hono/src/framework/http/metrics.ts +22 -0
- package/hono/src/framework/http/openapi.ts +42 -0
- package/hono/src/framework/http/ratelimiter.ts +172 -0
- package/hono/src/framework/http/router.ts +76 -0
- package/hono/src/framework/http/security.ts +23 -0
- package/hono/src/framework/http/static.ts +70 -0
- package/hono/src/framework/http/validation.ts +21 -0
- package/hono/src/framework/kernel.ts +48 -0
- package/hono/src/framework/maker-cli/db/core.mjs +288 -0
- package/hono/src/framework/maker-cli/db/index.mjs +204 -0
- package/hono/src/framework/maker-cli/deploy/core.mjs +1038 -0
- package/hono/src/framework/maker-cli/deploy/index.mjs +91 -0
- package/hono/src/framework/maker-cli/index.mjs +53 -0
- package/hono/src/framework/maker-cli/middleware/core.mjs +47 -0
- package/hono/src/framework/maker-cli/middleware/index.mjs +12 -0
- package/hono/src/framework/maker-cli/module/core.mjs +684 -0
- package/hono/src/framework/maker-cli/module/index.mjs +140 -0
- package/hono/src/framework/maker-cli/runtime/build-ui.mjs +17 -0
- package/hono/src/framework/maker-cli/runtime/core.mjs +543 -0
- package/hono/src/framework/maker-cli/runtime/index.mjs +104 -0
- package/hono/src/framework/maker-cli/runtime/redis-commander-patch.cjs +20 -0
- package/hono/src/framework/maker-cli/stubs/controller/openapi.ts.stub +57 -0
- package/hono/src/framework/maker-cli/stubs/controller/openapi.with-model.ts.stub +58 -0
- package/hono/src/framework/maker-cli/stubs/controller/plain.ts.stub +59 -0
- package/hono/src/framework/maker-cli/stubs/controller/schema.plain.ts.stub +14 -0
- package/hono/src/framework/maker-cli/stubs/controller/schema.ts.stub +33 -0
- package/hono/src/framework/maker-cli/stubs/deploy/Dockerfile.bun.stub +52 -0
- package/hono/src/framework/maker-cli/stubs/deploy/Dockerfile.pnpm.stub +55 -0
- package/hono/src/framework/maker-cli/stubs/deploy/Dockerfile.stub +51 -0
- package/hono/src/framework/maker-cli/stubs/deploy/Dockerfile.yarn.stub +55 -0
- package/hono/src/framework/maker-cli/stubs/deploy/README.stub +59 -0
- package/hono/src/framework/maker-cli/stubs/deploy/compose/mysql.server.stub +45 -0
- package/hono/src/framework/maker-cli/stubs/deploy/compose/postgres.server.stub +45 -0
- package/hono/src/framework/maker-cli/stubs/deploy/compose/sqlite.stub +45 -0
- package/hono/src/framework/maker-cli/stubs/deploy/env/mysql.server.stub +68 -0
- package/hono/src/framework/maker-cli/stubs/deploy/env/postgres.server.stub +68 -0
- package/hono/src/framework/maker-cli/stubs/deploy/env/sqlite.stub +67 -0
- package/hono/src/framework/maker-cli/stubs/deploy/scripts/auto-migrate.sh.stub +41 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/README.stub +78 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/compose/noredis.stub +120 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/compose/redis.dev.stub +133 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/compose/redis.stub +131 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/env/local.example.stub +11 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/env/noredis.stub +25 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/env/redis.stub +25 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/README.stub +16 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/app.example.com.stub +13 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/pgadmin/servers.stub +14 -0
- package/hono/src/framework/maker-cli/stubs/deploy/server/redis/redis.conf.stub +7 -0
- package/hono/src/framework/maker-cli/stubs/deploy/supervisor/noredis.stub +54 -0
- package/hono/src/framework/maker-cli/stubs/deploy/supervisor/redis.stub +70 -0
- package/hono/src/framework/maker-cli/stubs/deploy/workflow/local.json.stub +25 -0
- package/hono/src/framework/maker-cli/stubs/deploy/workflow/remote.json.stub +24 -0
- package/hono/src/framework/maker-cli/stubs/example/console.ts.stub +34 -0
- package/hono/src/framework/maker-cli/stubs/example/controller.ts.stub +505 -0
- package/hono/src/framework/maker-cli/stubs/example/job.ts.stub +75 -0
- package/hono/src/framework/maker-cli/stubs/example/route.api.ts.stub +207 -0
- package/hono/src/framework/maker-cli/stubs/example/route.plain.ts.stub +18 -0
- package/hono/src/framework/maker-cli/stubs/example/schema.plain.ts.stub +42 -0
- package/hono/src/framework/maker-cli/stubs/example/schema.ts.stub +42 -0
- package/hono/src/framework/maker-cli/stubs/job/name.ts.stub +25 -0
- package/hono/src/framework/maker-cli/stubs/middleware/name.ts.stub +14 -0
- package/hono/src/framework/maker-cli/stubs/model/name.mysql.ts.stub +9 -0
- package/hono/src/framework/maker-cli/stubs/model/name.postgresql.ts.stub +9 -0
- package/hono/src/framework/maker-cli/stubs/model/name.sqlite.ts.stub +9 -0
- package/hono/src/framework/maker-cli/stubs/notification/controller.ts.stub +86 -0
- package/hono/src/framework/maker-cli/stubs/notification/job.ts.stub +13 -0
- package/hono/src/framework/maker-cli/stubs/notification/route.api.ts.stub +50 -0
- package/hono/src/framework/maker-cli/stubs/notification/route.plain.ts.stub +12 -0
- package/hono/src/framework/maker-cli/stubs/notification/schema.plain.ts.stub +26 -0
- package/hono/src/framework/maker-cli/stubs/notification/schema.ts.stub +26 -0
- package/hono/src/framework/maker-cli/stubs/route/api.ts.stub +80 -0
- package/hono/src/framework/maker-cli/stubs/route/plain.ts.stub +11 -0
- package/hono/src/framework/maker-cli/stubs/schedule/name.ts.stub +36 -0
- package/hono/src/framework/maker-cli/stubs/seeder/name.ts.stub +20 -0
- package/hono/src/framework/maker-cli/stubs/test/unit.ts.stub +22 -0
- package/hono/src/framework/maker-cli/utils/env-config.mjs +44 -0
- package/hono/src/framework/maker-cli/utils/env-db.mjs +61 -0
- package/hono/src/framework/maker-cli/utils/file-ops.mjs +30 -0
- package/hono/src/framework/maker-cli/utils/flags.mjs +14 -0
- package/hono/src/framework/maker-cli/utils/help.mjs +50 -0
- package/hono/src/framework/maker-cli/utils/naming.mjs +13 -0
- package/hono/src/framework/maker-cli/utils/process.mjs +52 -0
- package/hono/src/framework/modules/discover.ts +54 -0
- package/hono/src/framework/modules/routes.ts +24 -0
- package/hono/src/framework/notification/index.ts +116 -0
- package/hono/src/framework/queue/clear.ts +22 -0
- package/hono/src/framework/queue/queue.ts +342 -0
- package/hono/src/framework/queue/ui.ts +214 -0
- package/hono/src/framework/queue/worker.ts +61 -0
- package/hono/src/framework/realtime/broadcast.ts +46 -0
- package/hono/src/framework/realtime/index.ts +2 -0
- package/hono/src/framework/realtime/socket-cookie.ts +68 -0
- package/hono/src/framework/realtime/socket.ts +196 -0
- package/hono/src/framework/realtime/types.ts +6 -0
- package/hono/src/framework/realtime/ui.ts +16 -0
- package/hono/src/framework/redis/client.ts +151 -0
- package/hono/src/framework/runtime/runtime.ts +23 -0
- package/hono/src/framework/runtime/server-adapter.ts +94 -0
- package/hono/src/framework/scheduler/lock.ts +116 -0
- package/hono/src/framework/scheduler/run.ts +48 -0
- package/hono/src/framework/scheduler/scheduler.ts +155 -0
- package/hono/src/framework/server.ts +183 -0
- package/hono/src/framework/session/session.ts +116 -0
- package/hono/src/framework/storage/storage.ts +785 -0
- package/hono/src/framework/support/cookie.ts +99 -0
- package/hono/src/framework/support/jwt.ts +45 -0
- package/hono/src/framework/support/lifecycle.ts +35 -0
- package/hono/src/framework/support/logger.ts +148 -0
- package/hono/src/framework/support/mail.ts +48 -0
- package/hono/src/framework/support/password.ts +23 -0
- package/hono/src/framework/support/url.ts +41 -0
- package/hono/src/middlewares/auth-middleware.ts +98 -0
- package/hono/src/middlewares/role-middleware.ts +25 -0
- package/hono/src/modules/auth/controllers/auth.controller.ts +413 -0
- package/hono/src/modules/auth/controllers/auth.helpers.ts +128 -0
- package/hono/src/modules/auth/controllers/auth.schema.ts +102 -0
- package/hono/src/modules/auth/controllers/role.controller.ts +25 -0
- package/hono/src/modules/auth/database/models/notifications.ts +24 -0
- package/hono/src/modules/auth/database/models/role.ts +14 -0
- package/hono/src/modules/auth/database/models/user.ts +46 -0
- package/hono/src/modules/auth/database/seeders/role.ts +18 -0
- package/hono/src/modules/auth/database/seeders/user.ts +35 -0
- package/hono/src/modules/auth/jobs/forgetpass.ts +20 -0
- package/hono/src/modules/auth/jobs/registeruser.ts +23 -0
- package/hono/src/modules/auth/jobs/verifyemail.ts +18 -0
- package/hono/src/modules/auth/routes/api.ts +150 -0
- package/hono/src/modules/auth/routes/role.ts +33 -0
- package/hono/src/resources/index.html +17 -0
- package/hono/src/resources/src/App.vue +5 -0
- package/hono/src/resources/src/assets/css/styles.css +14913 -0
- package/hono/src/resources/src/assets/css/styles.css.map +1 -0
- package/hono/src/resources/src/assets/fonts/public-sans/public-sans-latin-ext.woff2 +0 -0
- package/hono/src/resources/src/assets/fonts/public-sans/public-sans-latin.woff2 +0 -0
- package/hono/src/resources/src/assets/images/favicon/favicon.ico +0 -0
- package/hono/src/resources/src/assets/images/logo.png +0 -0
- package/hono/src/resources/src/assets/scss/custom.css +217 -0
- package/hono/src/resources/src/assets/scss/custom.css.map +1 -0
- package/hono/src/resources/src/assets/scss/custom.scss +1346 -0
- package/hono/src/resources/src/components/Button.vue +32 -0
- package/hono/src/resources/src/components/Checkbox.vue +29 -0
- package/hono/src/resources/src/components/Datepicker.vue +106 -0
- package/hono/src/resources/src/components/FeatureButton.vue +53 -0
- package/hono/src/resources/src/components/FloatButton.vue +33 -0
- package/hono/src/resources/src/components/Href.vue +32 -0
- package/hono/src/resources/src/components/Input.vue +234 -0
- package/hono/src/resources/src/components/InputGroup.vue +149 -0
- package/hono/src/resources/src/components/InputPasswordToggle.vue +222 -0
- package/hono/src/resources/src/components/Modal.vue +55 -0
- package/hono/src/resources/src/components/Pagebar.vue +26 -0
- package/hono/src/resources/src/components/Select.vue +415 -0
- package/hono/src/resources/src/components/Spinner.vue +42 -0
- package/hono/src/resources/src/components/Switch.vue +65 -0
- package/hono/src/resources/src/components/TextArea.vue +121 -0
- package/hono/src/resources/src/components/Toast.vue +56 -0
- package/hono/src/resources/src/components/datatable/DataTableSkeleton.vue +98 -0
- package/hono/src/resources/src/components/datatable/Pagination.vue +147 -0
- package/hono/src/resources/src/components/datatable/SelectOpption.vue +64 -0
- package/hono/src/resources/src/components/datatable/index.vue +199 -0
- package/hono/src/resources/src/composables/useAuth.ts +52 -0
- package/hono/src/resources/src/helpers/nformatter.ts +10 -0
- package/hono/src/resources/src/helpers/utils.ts +75 -0
- package/hono/src/resources/src/layouts/AuthLayout.vue +20 -0
- package/hono/src/resources/src/layouts/Layout/Footer.vue +23 -0
- package/hono/src/resources/src/layouts/Layout/Header.vue +105 -0
- package/hono/src/resources/src/layouts/Layout/Sidebar.vue +137 -0
- package/hono/src/resources/src/layouts/Layout/index.vue +87 -0
- package/hono/src/resources/src/main.ts +26 -0
- package/hono/src/resources/src/pages/auth/forgetPassword.vue +82 -0
- package/hono/src/resources/src/pages/auth/login.vue +99 -0
- package/hono/src/resources/src/pages/auth/register.vue +133 -0
- package/hono/src/resources/src/pages/auth/resetPassword.vue +118 -0
- package/hono/src/resources/src/pages/auth/verifyEmail.vue +68 -0
- package/hono/src/resources/src/pages/dashboard/index.vue +66 -0
- package/hono/src/resources/src/plugins/axios.ts +31 -0
- package/hono/src/resources/src/plugins/browserDetect.ts +55 -0
- package/hono/src/resources/src/plugins/dialog.ts +216 -0
- package/hono/src/resources/src/plugins/gum.ts +367 -0
- package/hono/src/resources/src/plugins/pulse.ts +147 -0
- package/hono/src/resources/src/plugins/routeProgress.ts +87 -0
- package/hono/src/resources/src/router/index.ts +85 -0
- package/hono/src/resources/src/stores/admin-ui.ts +148 -0
- package/hono/src/resources/src/stores/auth.ts +164 -0
- package/hono/src/resources/tsconfig.json +19 -0
- package/hono/src/resources/vite.config.ts +46 -0
- package/hono/src/storage/app/private/.gitkeep +0 -0
- package/hono/src/storage/app/public/.gitkeep +0 -0
- package/hono/src/storage/app/tmp/generated/.gitkeep +0 -0
- package/hono/src/storage/database/nexwire.sqlite +0 -0
- package/hono/src/storage/logs/.gitkeep +0 -0
- package/hono/src/storage/tmp/.gitkeep +0 -0
- package/hono/src/storage/trash/modules/.gitkeep +0 -0
- package/hono/src/types/global.d.ts +26 -0
- package/hono/tsconfig.json +20 -0
- package/hono/vitest.config.ts +23 -0
- package/package.json +238 -0
- package/src/index.js +204 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { clearViteCache, runRuntime, runTest, runTestCoverage, runTestUI, runTestWatch, runUi, runVite } from "./core.mjs";
|
|
2
|
+
|
|
3
|
+
/** Register runtime commands (dev, serve, queue, schedule, UI tools) on the CLI program. */
|
|
4
|
+
export function registerRuntimeCommands(program, rawArgs) {
|
|
5
|
+
program
|
|
6
|
+
.command("dev")
|
|
7
|
+
.description("Start API + Vue 3 UI plus optional workers/tools")
|
|
8
|
+
.option("--view <tools>", "Comma-separated UI tools to launch (redis,maildev,studio)")
|
|
9
|
+
.option("--viewer <tools>", "Alias for --view (npm expands --view to --viewer)")
|
|
10
|
+
.option("--with <tools>", "Alias for --view")
|
|
11
|
+
.option("--with-redis-view", "Launch Redis Commander")
|
|
12
|
+
.option("--with-maildev", "Launch MailDev")
|
|
13
|
+
.option("--with-db-studio", "Launch Drizzle Studio")
|
|
14
|
+
.allowUnknownOption(true)
|
|
15
|
+
.action(async () => runRuntime("dev", rawArgs));
|
|
16
|
+
program
|
|
17
|
+
.command("serve")
|
|
18
|
+
.description("Start HTTP server (dist first if built, else src)")
|
|
19
|
+
.option("--prod", "Run production build")
|
|
20
|
+
.option("--runtime <name>", "Runtime: node or bun", "node")
|
|
21
|
+
.option("--watch", "Watch for file changes (src mode)")
|
|
22
|
+
.option("--src", "Force source mode even if dist exists")
|
|
23
|
+
.allowUnknownOption(true)
|
|
24
|
+
.action(async () => runRuntime("serve", rawArgs));
|
|
25
|
+
program
|
|
26
|
+
.command("queue:work")
|
|
27
|
+
.description("Start queue worker (dist first if built, else src)")
|
|
28
|
+
.option("--queue <name>", "Queue name", "default")
|
|
29
|
+
.option("--prod", "Run production build")
|
|
30
|
+
.option("--runtime <name>", "Runtime: node or bun", "node")
|
|
31
|
+
.option("--src", "Force source mode even if dist exists")
|
|
32
|
+
.allowUnknownOption(true)
|
|
33
|
+
.action(async () => runRuntime("queue:work", rawArgs));
|
|
34
|
+
program
|
|
35
|
+
.command("queue:clear")
|
|
36
|
+
.description("Clear all queue keys")
|
|
37
|
+
.allowUnknownOption(true)
|
|
38
|
+
.action(async () => runRuntime("queue:clear", rawArgs));
|
|
39
|
+
program
|
|
40
|
+
.command("schedule:work")
|
|
41
|
+
.description("Start scheduler worker (dist first if built, else src)")
|
|
42
|
+
.option("--prod", "Run production build")
|
|
43
|
+
.option("--runtime <name>", "Runtime: node or bun", "node")
|
|
44
|
+
.option("--src", "Force source mode even if dist exists")
|
|
45
|
+
.allowUnknownOption(true)
|
|
46
|
+
.action(async () => runRuntime("schedule:work", rawArgs));
|
|
47
|
+
program
|
|
48
|
+
.command("maildev:view")
|
|
49
|
+
.description("Start MailDev SMTP and web UI")
|
|
50
|
+
.allowUnknownOption(true)
|
|
51
|
+
.action(async () => runUi("maildev:view"));
|
|
52
|
+
program
|
|
53
|
+
.command("redis:view")
|
|
54
|
+
.description("Start Redis Commander UI")
|
|
55
|
+
.allowUnknownOption(true)
|
|
56
|
+
.action(async () => runUi("redis:view"));
|
|
57
|
+
program
|
|
58
|
+
.command("ui:dev")
|
|
59
|
+
.description("Start Vue 3 UI from src/resources")
|
|
60
|
+
.allowUnknownOption(true)
|
|
61
|
+
.action(async () => runVite("src/resources/vite.config.ts"));
|
|
62
|
+
program
|
|
63
|
+
.command("admin:dev")
|
|
64
|
+
.description("Start admin UI dev server")
|
|
65
|
+
.allowUnknownOption(true)
|
|
66
|
+
.action(async () => runVite("src/resources/vite.config.ts"));
|
|
67
|
+
program
|
|
68
|
+
.command("vite:cache:clear")
|
|
69
|
+
.description("Clear Vite cache folders (cross-platform)")
|
|
70
|
+
.allowUnknownOption(true)
|
|
71
|
+
.action(async () => clearViteCache());
|
|
72
|
+
program
|
|
73
|
+
.command("test")
|
|
74
|
+
.description("Run Vitest backend tests")
|
|
75
|
+
.allowUnknownOption(true)
|
|
76
|
+
.action(async () => {
|
|
77
|
+
const args = process.argv.slice(3);
|
|
78
|
+
await runTest(args);
|
|
79
|
+
});
|
|
80
|
+
program
|
|
81
|
+
.command("test:watch")
|
|
82
|
+
.description("Run Vitest backend tests in watch mode")
|
|
83
|
+
.allowUnknownOption(true)
|
|
84
|
+
.action(async () => {
|
|
85
|
+
const args = process.argv.slice(3);
|
|
86
|
+
await runTestWatch(args);
|
|
87
|
+
});
|
|
88
|
+
program
|
|
89
|
+
.command("test:coverage")
|
|
90
|
+
.description("Run Vitest backend tests with code coverage")
|
|
91
|
+
.allowUnknownOption(true)
|
|
92
|
+
.action(async () => {
|
|
93
|
+
const args = process.argv.slice(3);
|
|
94
|
+
await runTestCoverage(args);
|
|
95
|
+
});
|
|
96
|
+
program
|
|
97
|
+
.command("test:ui")
|
|
98
|
+
.description("Run Vitest backend tests in UI mode")
|
|
99
|
+
.allowUnknownOption(true)
|
|
100
|
+
.action(async () => {
|
|
101
|
+
const args = process.argv.slice(3);
|
|
102
|
+
await runTestUI(args);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Why: Redis Commander 0.4.5 bundles legacy `connect`/`serve-static`/`send`
|
|
2
|
+
// whose `SendStream#isFresh` reads `http.ServerResponse#_headers`, which
|
|
3
|
+
// Node removed in v15. Without this shim it crashes with:
|
|
4
|
+
// TypeError: Cannot read properties of undefined (reading 'last-modified')
|
|
5
|
+
// When: Loaded via `node --require` before Redis Commander starts.
|
|
6
|
+
// Where: maker-cli redis:view launcher.
|
|
7
|
+
// How: Re-exposes `_headers` on the ServerResponse prototype, backed by the
|
|
8
|
+
// modern `getHeaders()` API. Safe on older Node too (getHeaders is the
|
|
9
|
+
// same data `_headers` used to return).
|
|
10
|
+
const http = require("node:http");
|
|
11
|
+
|
|
12
|
+
if (!("_headers" in http.ServerResponse.prototype)) {
|
|
13
|
+
Object.defineProperty(http.ServerResponse.prototype, "_headers", {
|
|
14
|
+
configurable: true,
|
|
15
|
+
enumerable: false,
|
|
16
|
+
get() {
|
|
17
|
+
return this.getHeaders();
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Request, Response } from "express";
|
|
2
|
+
import { HttpStatusCodes } from "@/framework/facade.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Why: Returns collection response shape for list pages.
|
|
6
|
+
* When: Used by GET list endpoint.
|
|
7
|
+
* Where: GET /{{controller}} route.
|
|
8
|
+
*/
|
|
9
|
+
export const index = async (_req: Request, res: Response) => {
|
|
10
|
+
res.json({ message: "{{controller}} list fetched successfully", data: [] });
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Why: Returns one resource by validated route id.
|
|
15
|
+
* When: Used by detail screens or fetch-by-id calls.
|
|
16
|
+
* Where: GET /{{controller}}/{id} route.
|
|
17
|
+
*/
|
|
18
|
+
export const show = async (req: Request, res: Response) => {
|
|
19
|
+
res.json({ message: "{{controller}} fetched successfully", data: { id: req.params.id, name: "" } });
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Why: Creates a new resource from validated request body.
|
|
24
|
+
* When: Used by create form submissions.
|
|
25
|
+
* Where: POST /{{controller}} route.
|
|
26
|
+
*/
|
|
27
|
+
export const store = async (_req: Request, res: Response) => {
|
|
28
|
+
res.status(HttpStatusCodes.CREATED).json({ message: "{{controller}} created successfully" });
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Why: Updates an existing resource using id + body validation.
|
|
33
|
+
* When: Used by edit/update form submissions.
|
|
34
|
+
* Where: PUT/PATCH /{{controller}}/{id} route.
|
|
35
|
+
*/
|
|
36
|
+
export const update = async (_req: Request, res: Response) => {
|
|
37
|
+
res.json({ message: "{{controller}} updated successfully" });
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Why: Deletes one resource by validated route id.
|
|
42
|
+
* When: Used by delete actions.
|
|
43
|
+
* Where: DELETE /{{controller}}/{id} route.
|
|
44
|
+
*/
|
|
45
|
+
export const destroy = async (_req: Request, res: Response) => {
|
|
46
|
+
res.json({ message: "{{controller}} deleted successfully" });
|
|
47
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Request, Response } from "express";
|
|
2
|
+
import { HttpStatusCodes } from "@/framework/facade.js";
|
|
3
|
+
import { {{tableVariable}} } from "@/modules/{{module}}/database/models/{{controller}}.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Why: Returns collection response shape for list pages.
|
|
7
|
+
* When: Used by GET list endpoint.
|
|
8
|
+
* Where: GET /{{controller}} route.
|
|
9
|
+
*/
|
|
10
|
+
export const index = async (_req: Request, res: Response) => {
|
|
11
|
+
res.json({ message: "{{controller}} list fetched successfully", data: [] });
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Why: Returns one resource by validated route id.
|
|
16
|
+
* When: Used by detail screens or fetch-by-id calls.
|
|
17
|
+
* Where: GET /{{controller}}/{id} route.
|
|
18
|
+
*/
|
|
19
|
+
export const show = async (req: Request, res: Response) => {
|
|
20
|
+
res.json({ message: "{{controller}} fetched successfully", data: { id: req.params.id, name: "" } });
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Why: Creates a new resource from validated request body.
|
|
25
|
+
* When: Used by create form submissions.
|
|
26
|
+
* Where: POST /{{controller}} route.
|
|
27
|
+
*/
|
|
28
|
+
export const store = async (_req: Request, res: Response) => {
|
|
29
|
+
res.status(HttpStatusCodes.CREATED).json({ message: "{{controller}} created successfully" });
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Why: Updates an existing resource using id + body validation.
|
|
34
|
+
* When: Used by edit/update form submissions.
|
|
35
|
+
* Where: PUT/PATCH /{{controller}}/{id} route.
|
|
36
|
+
*/
|
|
37
|
+
export const update = async (_req: Request, res: Response) => {
|
|
38
|
+
res.json({ message: "{{controller}} updated successfully" });
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Why: Deletes one resource by validated route id.
|
|
43
|
+
* When: Used by delete actions.
|
|
44
|
+
* Where: DELETE /{{controller}}/{id} route.
|
|
45
|
+
*/
|
|
46
|
+
export const destroy = async (_req: Request, res: Response) => {
|
|
47
|
+
res.json({ message: "{{controller}} deleted successfully" });
|
|
48
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Request, Response } from "express";
|
|
2
|
+
import { HttpStatusCodes } from "@/framework/facade.js";
|
|
3
|
+
import { validate } from "@/framework/facade.js";
|
|
4
|
+
import { Create{{ClassName}}Schema, Update{{ClassName}}Schema, {{ClassName}}IdParamsSchema } from "@/modules/{{module}}/controllers/{{controller}}.schema.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Why: Returns collection response shape for list pages.
|
|
8
|
+
* When: Used by GET list endpoint.
|
|
9
|
+
* Where: GET /{{controller}} route.
|
|
10
|
+
*/
|
|
11
|
+
export const index = async (_req: Request, res: Response) => {
|
|
12
|
+
res.json({ message: "{{controller}} list fetched successfully", data: [] });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Why: Returns one resource by validated route id.
|
|
17
|
+
* When: Used by detail screens or fetch-by-id calls.
|
|
18
|
+
* Where: GET /{{controller}}/{id} route.
|
|
19
|
+
*/
|
|
20
|
+
export const show = async (req: Request, res: Response) => {
|
|
21
|
+
const params = await validate({{ClassName}}IdParamsSchema, req.params);
|
|
22
|
+
res.json({ message: "{{controller}} fetched successfully", data: { id: params.id, name: "" } });
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Why: Creates a new resource from validated request body.
|
|
27
|
+
* When: Used by create form submissions.
|
|
28
|
+
* Where: POST /{{controller}} route.
|
|
29
|
+
*/
|
|
30
|
+
export const store = async (req: Request, res: Response) => {
|
|
31
|
+
await validate(Create{{ClassName}}Schema, req.body);
|
|
32
|
+
res.status(HttpStatusCodes.CREATED).json({ message: "{{controller}} created successfully" });
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Why: Updates an existing resource using id + body validation.
|
|
37
|
+
* When: Used by edit/update form submissions.
|
|
38
|
+
* Where: PUT/PATCH /{{controller}}/{id} route.
|
|
39
|
+
*/
|
|
40
|
+
export const update = async (req: Request, res: Response) => {
|
|
41
|
+
await validate({{ClassName}}IdParamsSchema, req.params);
|
|
42
|
+
await validate(Update{{ClassName}}Schema, req.body);
|
|
43
|
+
res.json({ message: "{{controller}} updated successfully" });
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Why: Deletes one resource by validated route id.
|
|
48
|
+
* When: Used by delete actions.
|
|
49
|
+
* Where: DELETE /{{controller}}/{id} route.
|
|
50
|
+
*/
|
|
51
|
+
export const destroy = async (req: Request, res: Response) => {
|
|
52
|
+
await validate({{ClassName}}IdParamsSchema, req.params);
|
|
53
|
+
res.json({ message: "{{controller}} deleted successfully" });
|
|
54
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from "@/framework/facade.js";
|
|
2
|
+
|
|
3
|
+
export const Create{{ClassName}}Schema = z.object({
|
|
4
|
+
name: z.string().min(1)
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
export const Update{{ClassName}}Schema = z.object({
|
|
8
|
+
name: z.string().min(1)
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export const {{ClassName}}IdParamsSchema = z.object({
|
|
12
|
+
id: z.coerce.number().int().positive()
|
|
13
|
+
});
|
|
14
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "@/framework/facade.js";
|
|
2
|
+
|
|
3
|
+
export const {{ClassName}}ItemSchema = z.object({
|
|
4
|
+
id: z.number(),
|
|
5
|
+
name: z.string()
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export const Create{{ClassName}}Schema = z.object({
|
|
9
|
+
name: z.string().min(1)
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
export const Update{{ClassName}}Schema = z.object({
|
|
13
|
+
name: z.string().min(1)
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export const {{ClassName}}IdParamsSchema = z.object({
|
|
17
|
+
id: z.coerce.number().int().positive()
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export const {{ClassName}}ListResponseSchema = z.object({
|
|
21
|
+
message: z.string(),
|
|
22
|
+
data: z.array({{ClassName}}ItemSchema)
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export const {{ClassName}}ResponseSchema = z.object({
|
|
26
|
+
message: z.string(),
|
|
27
|
+
data: {{ClassName}}ItemSchema
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export const {{ClassName}}MessageSchema = z.object({
|
|
31
|
+
message: z.string()
|
|
32
|
+
});
|
|
33
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
ARG BUN_VERSION=1.4.0
|
|
2
|
+
FROM oven/bun:${BUN_VERSION}-slim AS builder
|
|
3
|
+
|
|
4
|
+
WORKDIR /app
|
|
5
|
+
|
|
6
|
+
ENV APP_URL=http://localhost:3000
|
|
7
|
+
ARG UI=true
|
|
8
|
+
ENV UI=${UI}
|
|
9
|
+
|
|
10
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
11
|
+
ca-certificates \
|
|
12
|
+
python3 \
|
|
13
|
+
make \
|
|
14
|
+
g++ \
|
|
15
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
16
|
+
|
|
17
|
+
COPY package.json bun.lockb* bun.lock* package-lock.json* ./
|
|
18
|
+
RUN bun install --frozen-lockfile
|
|
19
|
+
|
|
20
|
+
COPY . .
|
|
21
|
+
RUN cp deploy/.env .env || true
|
|
22
|
+
RUN bun src/framework/maker-cli/index.mjs db:schema
|
|
23
|
+
RUN bun run build
|
|
24
|
+
|
|
25
|
+
FROM oven/bun:${BUN_VERSION}-slim AS runner
|
|
26
|
+
|
|
27
|
+
WORKDIR /app
|
|
28
|
+
|
|
29
|
+
ENV NODE_ENV=production
|
|
30
|
+
ENV APP_URL=http://localhost:3000
|
|
31
|
+
|
|
32
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
33
|
+
supervisor \
|
|
34
|
+
ca-certificates \
|
|
35
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
36
|
+
|
|
37
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
38
|
+
COPY --from=builder /app/package.json ./package.json
|
|
39
|
+
COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
|
|
40
|
+
COPY --from=builder /app/tsconfig.json ./tsconfig.json
|
|
41
|
+
COPY --from=builder /app/dist ./dist
|
|
42
|
+
COPY --from=builder /app/public ./public
|
|
43
|
+
COPY --from=builder /app/src ./src
|
|
44
|
+
COPY --from=builder /app/deploy/scripts ./deploy/scripts
|
|
45
|
+
COPY --from=builder /app/deploy/.env ./.env
|
|
46
|
+
|
|
47
|
+
COPY deploy/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
|
48
|
+
|
|
49
|
+
EXPOSE 3000
|
|
50
|
+
|
|
51
|
+
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
|
52
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
ARG NODE_VERSION=24
|
|
2
|
+
FROM node:${NODE_VERSION}-bookworm-slim AS builder
|
|
3
|
+
|
|
4
|
+
ARG PNPM_VERSION=10.33.2
|
|
5
|
+
ARG UI=true
|
|
6
|
+
ENV UI=${UI}
|
|
7
|
+
|
|
8
|
+
WORKDIR /app
|
|
9
|
+
|
|
10
|
+
ENV APP_URL=http://localhost:3000
|
|
11
|
+
|
|
12
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
13
|
+
ca-certificates \
|
|
14
|
+
python3 \
|
|
15
|
+
make \
|
|
16
|
+
g++ \
|
|
17
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
18
|
+
|
|
19
|
+
RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
|
|
20
|
+
|
|
21
|
+
COPY package.json pnpm-lock.yaml* ./
|
|
22
|
+
RUN if [ -f pnpm-lock.yaml ]; then pnpm install --frozen-lockfile; else pnpm install --no-frozen-lockfile; fi
|
|
23
|
+
|
|
24
|
+
COPY . .
|
|
25
|
+
RUN node src/framework/maker-cli/index.mjs db:schema
|
|
26
|
+
RUN pnpm run build
|
|
27
|
+
|
|
28
|
+
FROM node:${NODE_VERSION}-bookworm-slim AS runner
|
|
29
|
+
|
|
30
|
+
WORKDIR /app
|
|
31
|
+
|
|
32
|
+
ENV NODE_ENV=production
|
|
33
|
+
ENV APP_URL=http://localhost:3000
|
|
34
|
+
|
|
35
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
36
|
+
supervisor \
|
|
37
|
+
ca-certificates \
|
|
38
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
39
|
+
|
|
40
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
41
|
+
COPY --from=builder /app/package.json ./package.json
|
|
42
|
+
COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
|
|
43
|
+
COPY --from=builder /app/tsconfig.json ./tsconfig.json
|
|
44
|
+
COPY --from=builder /app/dist ./dist
|
|
45
|
+
COPY --from=builder /app/public ./public
|
|
46
|
+
COPY --from=builder /app/src ./src
|
|
47
|
+
COPY --from=builder /app/deploy/scripts ./deploy/scripts
|
|
48
|
+
COPY --from=builder /app/deploy/.env ./.env
|
|
49
|
+
|
|
50
|
+
COPY deploy/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
|
51
|
+
|
|
52
|
+
EXPOSE 3000
|
|
53
|
+
|
|
54
|
+
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
|
55
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
ARG NODE_VERSION=24
|
|
2
|
+
FROM node:${NODE_VERSION}-bookworm-slim AS builder
|
|
3
|
+
|
|
4
|
+
WORKDIR /app
|
|
5
|
+
|
|
6
|
+
ENV APP_URL=http://localhost:3000
|
|
7
|
+
ARG UI=true
|
|
8
|
+
ENV UI=${UI}
|
|
9
|
+
|
|
10
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
11
|
+
ca-certificates \
|
|
12
|
+
python3 \
|
|
13
|
+
make \
|
|
14
|
+
g++ \
|
|
15
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
16
|
+
|
|
17
|
+
COPY package.json package-lock.json* ./
|
|
18
|
+
RUN if [ -f package-lock.json ]; then npm ci --legacy-peer-deps || npm install --legacy-peer-deps; else npm install --legacy-peer-deps; fi
|
|
19
|
+
|
|
20
|
+
COPY . .
|
|
21
|
+
RUN node src/framework/maker-cli/index.mjs db:schema
|
|
22
|
+
RUN npm run build
|
|
23
|
+
|
|
24
|
+
FROM node:${NODE_VERSION}-bookworm-slim AS runner
|
|
25
|
+
|
|
26
|
+
WORKDIR /app
|
|
27
|
+
|
|
28
|
+
ENV NODE_ENV=production
|
|
29
|
+
ENV APP_URL=http://localhost:3000
|
|
30
|
+
|
|
31
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
32
|
+
supervisor \
|
|
33
|
+
ca-certificates \
|
|
34
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
35
|
+
|
|
36
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
37
|
+
COPY --from=builder /app/package.json ./package.json
|
|
38
|
+
COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
|
|
39
|
+
COPY --from=builder /app/tsconfig.json ./tsconfig.json
|
|
40
|
+
COPY --from=builder /app/dist ./dist
|
|
41
|
+
COPY --from=builder /app/public ./public
|
|
42
|
+
COPY --from=builder /app/src ./src
|
|
43
|
+
COPY --from=builder /app/deploy/scripts ./deploy/scripts
|
|
44
|
+
COPY --from=builder /app/deploy/.env ./.env
|
|
45
|
+
|
|
46
|
+
COPY deploy/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
|
47
|
+
|
|
48
|
+
EXPOSE 3000
|
|
49
|
+
|
|
50
|
+
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
|
51
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
ARG NODE_VERSION=24
|
|
2
|
+
FROM node:${NODE_VERSION}-bookworm-slim AS builder
|
|
3
|
+
|
|
4
|
+
ARG YARN_VERSION=1.22.22
|
|
5
|
+
ARG UI=true
|
|
6
|
+
ENV UI=${UI}
|
|
7
|
+
|
|
8
|
+
WORKDIR /app
|
|
9
|
+
|
|
10
|
+
ENV APP_URL=http://localhost:3000
|
|
11
|
+
|
|
12
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
13
|
+
ca-certificates \
|
|
14
|
+
python3 \
|
|
15
|
+
make \
|
|
16
|
+
g++ \
|
|
17
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
18
|
+
|
|
19
|
+
RUN corepack enable && corepack prepare yarn@${YARN_VERSION} --activate
|
|
20
|
+
|
|
21
|
+
COPY package.json yarn.lock* ./
|
|
22
|
+
RUN yarn install --immutable
|
|
23
|
+
|
|
24
|
+
COPY . .
|
|
25
|
+
RUN node src/framework/maker-cli/index.mjs db:schema
|
|
26
|
+
RUN yarn build
|
|
27
|
+
|
|
28
|
+
FROM node:${NODE_VERSION}-bookworm-slim AS runner
|
|
29
|
+
|
|
30
|
+
WORKDIR /app
|
|
31
|
+
|
|
32
|
+
ENV NODE_ENV=production
|
|
33
|
+
ENV APP_URL=http://localhost:3000
|
|
34
|
+
|
|
35
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
36
|
+
supervisor \
|
|
37
|
+
ca-certificates \
|
|
38
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
39
|
+
|
|
40
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
41
|
+
COPY --from=builder /app/package.json ./package.json
|
|
42
|
+
COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
|
|
43
|
+
COPY --from=builder /app/tsconfig.json ./tsconfig.json
|
|
44
|
+
COPY --from=builder /app/dist ./dist
|
|
45
|
+
COPY --from=builder /app/public ./public
|
|
46
|
+
COPY --from=builder /app/src ./src
|
|
47
|
+
COPY --from=builder /app/deploy/scripts ./deploy/scripts
|
|
48
|
+
COPY --from=builder /app/deploy/.env ./.env
|
|
49
|
+
|
|
50
|
+
COPY deploy/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
|
51
|
+
|
|
52
|
+
EXPOSE 3000
|
|
53
|
+
|
|
54
|
+
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
|
55
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Deploy
|
|
2
|
+
|
|
3
|
+
Generated from current project .env.
|
|
4
|
+
|
|
5
|
+
- Database mode: {{DATABASE_MODE}}
|
|
6
|
+
- Redis enabled: {{REDIS_STATUS}}
|
|
7
|
+
- Runtime: {{RUNTIME_NAME}}
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
- External docker networks exist:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
docker network create nginx-proxy || true
|
|
15
|
+
docker network create infra || true
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- Proxy stack from `server-setup` is running (jwilder + letsencrypt companion).
|
|
19
|
+
|
|
20
|
+
## Start app stack
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
docker compose --env-file deploy/server/.env --env-file deploy/.env -f deploy/docker-compose.yml up -d --build
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Equivalent maker command:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
bun maker deploy:workflow --app-only
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## DB Import
|
|
33
|
+
|
|
34
|
+
Import SQL dump into local Docker container (auto-detects MySQL or PostgreSQL):
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
bun maker deploy:db:import --file=deploy/nexwire.sql --database=nexwire
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
PostgreSQL restores into a fresh database by default (drops and recreates the
|
|
41
|
+
target database first). Pass `--no-drop` to keep the existing database.
|
|
42
|
+
|
|
43
|
+
Import SQL dump into remote Docker container (auto-detects MySQL or PostgreSQL):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
bun maker deploy:db:import:remote --config=deploy/workflow.remote.json --file=deploy/nexwire.sql --database=nexwire
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Runtime
|
|
50
|
+
|
|
51
|
+
Supervisor starts:
|
|
52
|
+
|
|
53
|
+
- API: `maker serve --prod --runtime={{RUNTIME_NAME}}`
|
|
54
|
+
{{QUEUE_LINE}}- Scheduler: `maker schedule:work --prod --runtime={{RUNTIME_NAME}}`
|
|
55
|
+
|
|
56
|
+
{{REDIS_NOTE}}
|
|
57
|
+
|
|
58
|
+
This deploy style follows `server-setup` and `statistic_postgre` patterns (external `nginx-proxy` + `infra` networks).
|
|
59
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: ${COMPOSE_PROJECT_NAME:-nexwire}
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
app:
|
|
5
|
+
build:
|
|
6
|
+
context: ..
|
|
7
|
+
dockerfile: deploy/Dockerfile
|
|
8
|
+
args:
|
|
9
|
+
UI: ${UI}
|
|
10
|
+
container_name: ${APP_NAME:-nexwire}-app
|
|
11
|
+
restart: unless-stopped
|
|
12
|
+
working_dir: /app
|
|
13
|
+
ports:
|
|
14
|
+
- "${APP_PORT:-3000}:3000"
|
|
15
|
+
expose:
|
|
16
|
+
- "3000"
|
|
17
|
+
env_file:
|
|
18
|
+
- .env
|
|
19
|
+
environment:
|
|
20
|
+
APP_ENV: production
|
|
21
|
+
APP_PORT: 3000
|
|
22
|
+
APP_URL: ${APP_URL:-http://localhost:3000}
|
|
23
|
+
DATABASE_URL: ${DATABASE_URL}
|
|
24
|
+
{{REDIS_ENV_LINE}} APP_HOST: ${APP_HOST:-localhost}
|
|
25
|
+
VIRTUAL_HOST: ${VIRTUAL_HOST:-}
|
|
26
|
+
VIRTUAL_PORT: ${VIRTUAL_PORT:-3000}
|
|
27
|
+
LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-}
|
|
28
|
+
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-}
|
|
29
|
+
volumes:
|
|
30
|
+
- app-storage:/app/src/storage
|
|
31
|
+
networks:
|
|
32
|
+
- infra
|
|
33
|
+
- nginx-proxy
|
|
34
|
+
|
|
35
|
+
volumes:
|
|
36
|
+
app-storage:
|
|
37
|
+
|
|
38
|
+
networks:
|
|
39
|
+
infra:
|
|
40
|
+
external: true
|
|
41
|
+
name: infra
|
|
42
|
+
nginx-proxy:
|
|
43
|
+
external: true
|
|
44
|
+
name: nginx-proxy
|
|
45
|
+
|