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
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
declare module "*.vue" {
|
|
2
|
+
import type { DefineComponent } from "vue";
|
|
3
|
+
|
|
4
|
+
const component: DefineComponent<Record<string, unknown>, Record<string, unknown>, unknown>;
|
|
5
|
+
export default component;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
declare module "bootstrap/js/dist/modal.js" {
|
|
9
|
+
export default class Modal {
|
|
10
|
+
constructor(element: Element, options?: { backdrop?: boolean | "static"; keyboard?: boolean });
|
|
11
|
+
show(): void;
|
|
12
|
+
hide(): void;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
declare module "bootstrap/js/dist/toast.js" {
|
|
18
|
+
export default class Toast {
|
|
19
|
+
static getOrCreateInstance(element: Element): Toast;
|
|
20
|
+
show(): void;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
declare module "luxon";
|
|
25
|
+
declare module "nodemailer";
|
|
26
|
+
declare module "vue-select";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ESNext",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"jsx": "react-jsx",
|
|
7
|
+
"paths": {
|
|
8
|
+
"@/*": ["./src/*"]
|
|
9
|
+
},
|
|
10
|
+
"strict": false,
|
|
11
|
+
"esModuleInterop": true,
|
|
12
|
+
"allowSyntheticDefaultImports": true,
|
|
13
|
+
"outDir": "./dist",
|
|
14
|
+
"skipLibCheck": true,
|
|
15
|
+
"types": ["node"]
|
|
16
|
+
},
|
|
17
|
+
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/framework/maker-cli/**/*.mjs", "drizzle.config.ts"],
|
|
18
|
+
"exclude": ["node_modules", "dist", "src/resources", "src/storage/trash"]
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { defineConfig } from "vitest/config";
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
resolve: {
|
|
7
|
+
alias: {
|
|
8
|
+
"@": fileURLToPath(new URL("./src", import.meta.url))
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
test: {
|
|
12
|
+
globals: true,
|
|
13
|
+
include: ["src/**/*.test.ts", "src/**/*.spec.ts"],
|
|
14
|
+
exclude: ["src/resources/**", "src/storage/**", "node_modules/**", "dist/**"],
|
|
15
|
+
environment: "node",
|
|
16
|
+
coverage: {
|
|
17
|
+
provider: "v8",
|
|
18
|
+
reporter: ["text", "json", "html"],
|
|
19
|
+
include: ["src/**/*.ts"],
|
|
20
|
+
exclude: ["src/resources/**", "src/storage/**", "src/framework/maker-cli/**", "src/**/*.d.ts", "src/**/*.test.ts", "src/**/*.spec.ts"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
});
|
package/hono/.env
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# ── App ────────────────────────────────────────────
|
|
2
|
+
APP_NAME=nexwire
|
|
3
|
+
APP_ENV=development
|
|
4
|
+
APP_PORT=3000
|
|
5
|
+
APP_URL=http://localhost:3000
|
|
6
|
+
|
|
7
|
+
# Frontend origin when UI is on a different domain than the API.
|
|
8
|
+
# Leave empty if UI is served from the same APP_URL.
|
|
9
|
+
FRONTEND_URL=
|
|
10
|
+
|
|
11
|
+
# ── Database ───────────────────────────────────────
|
|
12
|
+
# Supported: sqlite:, mysql://, postgres://
|
|
13
|
+
# Default is SQLite so a fresh clone runs with zero setup (no server to install).
|
|
14
|
+
# The dev stack migrates + seeds automatically on first run.
|
|
15
|
+
# Switch later, e.g. mysql://root:@localhost:3306/nexwire
|
|
16
|
+
DATABASE_URL=sqlite:./src/storage/database/nexwire.sqlite
|
|
17
|
+
|
|
18
|
+
# ── Secrets ────────────────────────────────────────
|
|
19
|
+
JWT_ACCESS_SECRET=change-me-access
|
|
20
|
+
JWT_REFRESH_SECRET=change-me-refresh
|
|
21
|
+
COOKIE_SECRET=change-me-cookie
|
|
22
|
+
STORAGE_ACCESS_KEY_ID=
|
|
23
|
+
STORAGE_SECRET_ACCESS_KEY=
|
|
24
|
+
MAIL_USERNAME=
|
|
25
|
+
MAIL_PASSWORD=
|
|
26
|
+
|
|
27
|
+
# ── Redis ──────────────────────────────────────────
|
|
28
|
+
# Set true to enable cache, session, queue, events, and Queue Dashboard
|
|
29
|
+
REDIS=false
|
|
30
|
+
# Shared key prefix for cache, session, queue, events, and dashboards
|
|
31
|
+
REDIS_URL=redis://127.0.0.1:6379
|
|
32
|
+
REDIS_PREFIX=nexwire
|
|
33
|
+
|
|
34
|
+
# ── Feature Toggle ─────────────────────────────────
|
|
35
|
+
# Set false for API-only mode (no UI build/serve)
|
|
36
|
+
UI=true
|
|
37
|
+
# Set true to enable OpenAPI / Scalar docs at /api-docs
|
|
38
|
+
OPEN_API=true
|
|
39
|
+
# Set false to disable Socket.IO realtime server
|
|
40
|
+
SOCKET=true
|
|
41
|
+
# Set false to disable browser security headers (CSP, HSTS, X-Frame)
|
|
42
|
+
SECURITY_HEADERS=true
|
|
43
|
+
|
|
44
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# ── App ────────────────────────────────────────────
|
|
2
|
+
APP_ENV=development
|
|
3
|
+
APP_NAME=nexwire
|
|
4
|
+
APP_PORT=3000
|
|
5
|
+
APP_URL=http://localhost:3000
|
|
6
|
+
|
|
7
|
+
# Frontend origin when UI is on a different domain than the API.
|
|
8
|
+
# Leave empty if UI is served from the same APP_URL.
|
|
9
|
+
FRONTEND_URL=
|
|
10
|
+
|
|
11
|
+
# ── Database ───────────────────────────────────────
|
|
12
|
+
# Supported: sqlite:, mysql://, postgres://
|
|
13
|
+
# Default is SQLite so a fresh clone runs with zero setup (no server to install).
|
|
14
|
+
# The dev stack migrates + seeds automatically on first run.
|
|
15
|
+
# Switch later, e.g. mysql://root:@localhost:3306/nexwire
|
|
16
|
+
DATABASE_URL=sqlite:./src/storage/database/nexwire.sqlite
|
|
17
|
+
|
|
18
|
+
# ── Secrets ────────────────────────────────────────
|
|
19
|
+
JWT_ACCESS_SECRET=change-me-access
|
|
20
|
+
JWT_REFRESH_SECRET=change-me-refresh
|
|
21
|
+
COOKIE_SECRET=change-me-cookie
|
|
22
|
+
STORAGE_ACCESS_KEY_ID=
|
|
23
|
+
STORAGE_SECRET_ACCESS_KEY=
|
|
24
|
+
MAIL_USERNAME=
|
|
25
|
+
MAIL_PASSWORD=
|
|
26
|
+
|
|
27
|
+
# ── Redis ──────────────────────────────────────────
|
|
28
|
+
# Set true to enable cache, session, queue, events, and Queue Dashboard
|
|
29
|
+
REDIS=false
|
|
30
|
+
# Shared key prefix for cache, session, queue, events, and dashboards
|
|
31
|
+
REDIS_URL=redis://127.0.0.1:6379
|
|
32
|
+
REDIS_PREFIX=nexwire
|
|
33
|
+
|
|
34
|
+
# ── Feature Toggle ─────────────────────────────────
|
|
35
|
+
# Set false for API-only mode (no UI build/serve)
|
|
36
|
+
UI=true
|
|
37
|
+
# Set true to enable OpenAPI / Scalar docs at /api-docs
|
|
38
|
+
OPEN_API=true
|
|
39
|
+
# Set false to disable Socket.IO realtime server
|
|
40
|
+
SOCKET=false
|
|
41
|
+
# Set false to disable browser security headers (CSP, HSTS, X-Frame)
|
|
42
|
+
SECURITY_HEADERS=true
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"editor.defaultFormatter": "biomejs.biome",
|
|
3
|
+
"[typescript]": {
|
|
4
|
+
"editor.defaultFormatter": "biomejs.biome"
|
|
5
|
+
},
|
|
6
|
+
"[typescriptreact]": {
|
|
7
|
+
"editor.defaultFormatter": "biomejs.biome"
|
|
8
|
+
},
|
|
9
|
+
"[javascript]": {
|
|
10
|
+
"editor.defaultFormatter": "biomejs.biome"
|
|
11
|
+
},
|
|
12
|
+
"[javascriptreact]": {
|
|
13
|
+
"editor.defaultFormatter": "biomejs.biome"
|
|
14
|
+
},
|
|
15
|
+
"[json]": {
|
|
16
|
+
"editor.defaultFormatter": "biomejs.biome"
|
|
17
|
+
},
|
|
18
|
+
"[jsonc]": {
|
|
19
|
+
"editor.defaultFormatter": "biomejs.biome"
|
|
20
|
+
},
|
|
21
|
+
"editor.codeActionsOnSave": {
|
|
22
|
+
"source.organizeImports.biome": "explicit",
|
|
23
|
+
"source.fixAll.biome": "explicit"
|
|
24
|
+
},
|
|
25
|
+
"files.eol": "\n"
|
|
26
|
+
}
|
package/hono/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 - present, niYam
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/hono/README.md
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://github.com/niyamulahsan/nexwire">
|
|
3
|
+
<img alt="nexwire" src="https://raw.githubusercontent.com/niyamulahsan/nexwire/main/logo-favicon/nexwire.png" width="300">
|
|
4
|
+
</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<h3 align="center">Full-stack TypeScript framework for modern web applications</h3>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://niyamulahsan.github.io/nexwire"><img src="https://img.shields.io/badge/docs-3b8eed" alt="Documentation"></a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/create-nexwire"><img src="https://img.shields.io/npm/v/create-nexwire" alt="npm version"></a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/create-nexwire"><img src="https://img.shields.io/npm/dt/create-nexwire" alt="npm downloads"></a>
|
|
13
|
+
<a href="https://github.com/niyamulahsan/nexwire/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
|
|
14
|
+
<a href="https://github.com/niyamulahsan/nexwire"><img src="https://img.shields.io/github/stars/niyamulahsan/nexwire?style=social" alt="GitHub Stars"></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
nexwire is a batteries-included TypeScript framework that combines modular backends (Hono, Express) with Drizzle ORM, BullMQ, Socket.IO, Redis, and a Vue 3 SPA frontend — all scaffolded with a single command and deployed with Docker Compose.
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
### Hono (default)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm create nexwire@latest my-app
|
|
27
|
+
cd my-app
|
|
28
|
+
npm install
|
|
29
|
+
npm run maker db:migrate --seed
|
|
30
|
+
npm run maker dev
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Express
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm create nexwire@latest my-app -- --engine=express
|
|
37
|
+
cd my-app
|
|
38
|
+
npm install
|
|
39
|
+
npm run maker db:migrate --seed
|
|
40
|
+
npm run maker dev
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Your API is live at `http://localhost:3000`, Scalar docs at `/api-docs`, and the Vue frontend at `http://localhost:5173`.
|
|
44
|
+
|
|
45
|
+
Requires **Node.js >= 22.12** or **Bun >= 1.3**.
|
|
46
|
+
|
|
47
|
+
### Current directory
|
|
48
|
+
|
|
49
|
+
Scaffold directly into the current directory:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm create nexwire@latest .
|
|
53
|
+
npm create nexwire@latest . -- --engine=express
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Works with any package manager: `pnpm`, `yarn`, or `bun`.
|
|
57
|
+
|
|
58
|
+
### Package Manager
|
|
59
|
+
|
|
60
|
+
All examples use `npm` as the default. nexwire works with any major package manager:
|
|
61
|
+
|
|
62
|
+
| Manager | Create project | Run commands |
|
|
63
|
+
| -------- | ---------------------------------- | --------------------- |
|
|
64
|
+
| **npm** | `npm create nexwire@latest my-app` | `npm run maker <cmd>` |
|
|
65
|
+
| **pnpm** | `pnpm create nexwire@latest my-app` | `pnpm maker <cmd>` |
|
|
66
|
+
| **yarn** | `yarn create nexwire@latest my-app` | `yarn maker <cmd>` |
|
|
67
|
+
| **bun** | `bun create nexwire@latest my-app` | `bun maker <cmd>` |
|
|
68
|
+
| **all** | `npm create nexwire@latest .` | current directory |
|
|
69
|
+
|
|
70
|
+
### Runtime
|
|
71
|
+
|
|
72
|
+
nexwire runs on **Node.js** or **Bun** — pick whichever fits your deployment:
|
|
73
|
+
|
|
74
|
+
| Runtime | Minimum version | Notes |
|
|
75
|
+
| ----------- | --------------- | --------------------------------------------------------------------- |
|
|
76
|
+
| **Node.js** | `>= 22.12` | Default. Uses `node` in Dockerfile. |
|
|
77
|
+
| **Bun** | `>= 1.3` | Pass `--runtime=bun` to `deploy:init`. Uses `oven/bun` in Dockerfile. |
|
|
78
|
+
|
|
79
|
+
## Features
|
|
80
|
+
|
|
81
|
+
| Category | What you get |
|
|
82
|
+
| ------------------- | -------------------------------------------------------------------------------------- |
|
|
83
|
+
| **API** | Hono/Express HTTP server with Zod validation, OpenAPI/Scalar docs, CORS, rate limiting |
|
|
84
|
+
| **Database** | Drizzle ORM — SQLite, MySQL, or PostgreSQL. Auto-detected from `DATABASE_URL`. |
|
|
85
|
+
| **Auth** | JWT access + refresh token rotation, signed httpOnly cookies, role middleware |
|
|
86
|
+
| **Queue** | BullMQ background jobs with `shouldQueue` decorator and Bull Board dashboard |
|
|
87
|
+
| **Realtime** | Socket.IO with auto room joining (user, role, auth) and broadcast events |
|
|
88
|
+
| **Cache & Session** | Redis-backed with graceful fallback when Redis is disabled |
|
|
89
|
+
| **Scheduler** | Cron-based task scheduling with distributed Redis lock |
|
|
90
|
+
| **Storage** | Local disk or S3-compatible (AWS S3, R2, MinIO, DigitalOcean Spaces) |
|
|
91
|
+
| **Notifications** | Database-persisted notifications with broadcast + mail delivery |
|
|
92
|
+
| **Frontend** | Vue 3 SPA — Vite, Pinia, Vue Router, Bootstrap 5, real-time Pulse plugin |
|
|
93
|
+
| **Security** | CSP, HSTS, X-Frame headers — configured in one place, toggled per environment |
|
|
94
|
+
| **Reliability** | Circuit breakers for Redis, mail, and S3 with auto-fallback; startup config validation |
|
|
95
|
+
| **CLI** | `maker` command for code generation, migrations, runtime, and deploy |
|
|
96
|
+
| **Deploy** | Two-layer Docker Compose — nginx-proxy, auto SSL, supervisor |
|
|
97
|
+
|
|
98
|
+
## Architecture
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
src/
|
|
102
|
+
├── env.ts # Zod-validated environment config
|
|
103
|
+
├── database/ # Drizzle schema, migrations, seeders
|
|
104
|
+
├── framework/ # Reusable engine (HTTP, auth, queue, cache, etc.)
|
|
105
|
+
├── modules/ # Application modules (auto-discovered)
|
|
106
|
+
├── middlewares/ # Auth & role guards
|
|
107
|
+
├── resources/ # Vue 3 SPA frontend
|
|
108
|
+
└── storage/ # Uploaded files & logs
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Modules
|
|
112
|
+
|
|
113
|
+
Every feature is a self-contained module under `src/modules/<name>/`:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
src/modules/posts/
|
|
117
|
+
├── console/ # CLI commands & scheduled tasks
|
|
118
|
+
├── controllers/ # Request handlers + Zod schemas
|
|
119
|
+
├── database/
|
|
120
|
+
│ ├── models/ # Drizzle table definitions
|
|
121
|
+
│ └── seeders/ # Test data generators
|
|
122
|
+
├── jobs/ # BullMQ queue handlers
|
|
123
|
+
├── routes/ # HTTP route definitions (auto-discovered)
|
|
124
|
+
└── __test__/ # Unit test
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Modules are **auto-discovered** — no manual registration. Create one with:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npm run maker module:make blog
|
|
131
|
+
npm run maker module:make-controller blog post
|
|
132
|
+
npm run maker module:make-route blog post
|
|
133
|
+
npm run maker module:make-model blog post
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Framework Facade
|
|
137
|
+
|
|
138
|
+
Access all subsystems through a single import:
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import {
|
|
142
|
+
db,
|
|
143
|
+
cache,
|
|
144
|
+
session,
|
|
145
|
+
queue,
|
|
146
|
+
dispatchEvent,
|
|
147
|
+
notify,
|
|
148
|
+
storage,
|
|
149
|
+
jwt,
|
|
150
|
+
mail,
|
|
151
|
+
password,
|
|
152
|
+
urls,
|
|
153
|
+
logger,
|
|
154
|
+
} from "@/framework/facade.js";
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## CLI Reference
|
|
158
|
+
|
|
159
|
+
| Command | Description |
|
|
160
|
+
| ------------------------------ | ---------------------------------------------- |
|
|
161
|
+
| `maker dev` | Start API server + frontend HMR + queue worker |
|
|
162
|
+
| `maker serve [--prod]` | API server (dev or production) |
|
|
163
|
+
| `maker queue:work` | BullMQ worker process |
|
|
164
|
+
| `maker schedule:work` | Cron scheduler |
|
|
165
|
+
| `maker db:migrate --seed` | Run migrations + seeders |
|
|
166
|
+
| `maker db:fresh` | Drop all tables, re-migrate, re-seed |
|
|
167
|
+
| `maker module:make <name>` | Scaffold a new module |
|
|
168
|
+
| `maker deploy:init` | Generate Docker deploy scaffolding |
|
|
169
|
+
| `maker deploy:workflow` | Local deploy (Docker Desktop) |
|
|
170
|
+
| `maker deploy:workflow:remote` | Remote deploy via SSH + rsync |
|
|
171
|
+
|
|
172
|
+
## Deployment
|
|
173
|
+
|
|
174
|
+
nexwire includes a complete Docker deployment system out of the box.
|
|
175
|
+
|
|
176
|
+
### Local (Docker Desktop)
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
npm run maker deploy:init # Generate deploy files (one-time)
|
|
180
|
+
npm run maker deploy:workflow # Build and start everything
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Remote (VPS / Cloud)
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
npm run maker deploy:init # Generate files
|
|
187
|
+
# Edit deploy/workflow.remote.json with your SSH details
|
|
188
|
+
npm run maker deploy:workflow:remote # Deploy to server
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The deploy system provisions:
|
|
192
|
+
|
|
193
|
+
- **Multi-stage Dockerfile** — builder (install + build) → runner (minimal production image)
|
|
194
|
+
- **Shared infrastructure** — nginx-proxy, MySQL/PostgreSQL, Redis, phpMyAdmin, pgAdmin
|
|
195
|
+
- **Auto SSL** — Let's Encrypt via nginx-proxy companion
|
|
196
|
+
- **Process supervisor** — API server, queue worker, cron scheduler, auto-migration
|
|
197
|
+
- **Two-layer architecture** — server infra runs once per host, app stack rebuilds per deploy
|
|
198
|
+
|
|
199
|
+
See the [deploy documentation](https://niyamulahsan.github.io/nexwire/deploy/overview) for full details.
|
|
200
|
+
|
|
201
|
+
## Documentation
|
|
202
|
+
|
|
203
|
+
Complete documentation is available at **[Documentation](https://niyamulahsan.github.io/nexwire)**
|
|
204
|
+
|
|
205
|
+
## Contributing
|
|
206
|
+
|
|
207
|
+
Contributions are welcome. Open an issue or pull request on [GitHub](https://github.com/niyamulahsan/nexwire).
|
|
208
|
+
|
|
209
|
+
## License
|
|
210
|
+
|
|
211
|
+
nexwire is open-sourced software licensed under the [MIT license](LICENSE).
|
package/hono/biome.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
|
3
|
+
"vcs": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"clientKind": "git",
|
|
6
|
+
"useIgnoreFile": true
|
|
7
|
+
},
|
|
8
|
+
"formatter": {
|
|
9
|
+
"indentStyle": "space",
|
|
10
|
+
"indentWidth": 2,
|
|
11
|
+
"lineWidth": 140,
|
|
12
|
+
"bracketSameLine": true
|
|
13
|
+
},
|
|
14
|
+
"linter": {
|
|
15
|
+
"rules": {
|
|
16
|
+
"preset": "recommended",
|
|
17
|
+
"correctness": {
|
|
18
|
+
"noUnusedVariables": "off",
|
|
19
|
+
"useVueValidTemplateRoot": "off",
|
|
20
|
+
"noUnusedImports": "off"
|
|
21
|
+
},
|
|
22
|
+
"complexity": {
|
|
23
|
+
"noUselessEscapeInRegex": "off"
|
|
24
|
+
},
|
|
25
|
+
"style": {
|
|
26
|
+
"noNonNullAssertion": "off",
|
|
27
|
+
"useVueMultiWordComponentNames": "off",
|
|
28
|
+
"useImportType": "off"
|
|
29
|
+
},
|
|
30
|
+
"suspicious": {
|
|
31
|
+
"noEmptyBlockStatements": "off",
|
|
32
|
+
"noExplicitAny": "off",
|
|
33
|
+
"noRedeclare": "off",
|
|
34
|
+
"noAssignInExpressions": "off",
|
|
35
|
+
"useIterableCallbackReturn": "off"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"javascript": {
|
|
40
|
+
"formatter": {
|
|
41
|
+
"quoteStyle": "double",
|
|
42
|
+
"semicolons": "always",
|
|
43
|
+
"trailingCommas": "none"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"overrides": [
|
|
47
|
+
{
|
|
48
|
+
"includes": [
|
|
49
|
+
"**/*.{js,mjs,cjs,ts,tsx,vue}"
|
|
50
|
+
],
|
|
51
|
+
"javascript": {
|
|
52
|
+
"globals": [
|
|
53
|
+
"exports",
|
|
54
|
+
"location"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"assist": {
|
|
60
|
+
"actions": {
|
|
61
|
+
"source": {
|
|
62
|
+
"organizeImports": {
|
|
63
|
+
"level": "on",
|
|
64
|
+
"options": {
|
|
65
|
+
"groups": [
|
|
66
|
+
":NODE:",
|
|
67
|
+
":PACKAGE:",
|
|
68
|
+
":ALIAS:",
|
|
69
|
+
":PATH:"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { config } from "dotenv";
|
|
2
|
+
import { defineConfig } from "drizzle-kit";
|
|
3
|
+
|
|
4
|
+
config({ path: ".env" });
|
|
5
|
+
|
|
6
|
+
function sqlitePathFromUrl(url: string) {
|
|
7
|
+
if (url.startsWith("sqlite:///")) return url.replace("sqlite:///", "");
|
|
8
|
+
if (url.startsWith("sqlite://")) return url.replace("sqlite://", "");
|
|
9
|
+
if (url.startsWith("sqlite:")) return url.replace("sqlite:", "");
|
|
10
|
+
return url;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const databaseUrl = process.env.DATABASE_URL || "sqlite:./src/storage/database/nexwire.sqlite";
|
|
14
|
+
const dialect = databaseUrl.startsWith("mysql") ? "mysql" : databaseUrl.startsWith("postgres") ? "postgresql" : "sqlite";
|
|
15
|
+
|
|
16
|
+
export default defineConfig({
|
|
17
|
+
schema: process.env.DRIZZLE_SCHEMA || "./src/database/schema.ts",
|
|
18
|
+
out: `./src/database/migrations/${dialect}`,
|
|
19
|
+
dialect,
|
|
20
|
+
dbCredentials: databaseUrl.startsWith("mysql")
|
|
21
|
+
? { url: databaseUrl }
|
|
22
|
+
: databaseUrl.startsWith("postgres")
|
|
23
|
+
? { url: databaseUrl }
|
|
24
|
+
: { url: `file:${sqlitePathFromUrl(databaseUrl)}` }
|
|
25
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
.env
|
|
2
|
+
node_modules/
|
|
3
|
+
dist/
|
|
4
|
+
|
|
5
|
+
public/*
|
|
6
|
+
!public/.gitkeep
|
|
7
|
+
|
|
8
|
+
deploy/.env
|
|
9
|
+
deploy/server/.env
|
|
10
|
+
|
|
11
|
+
*.log
|
|
12
|
+
npm-debug.log*
|
|
13
|
+
yarn-debug.log*
|
|
14
|
+
yarn-error.log*
|
|
15
|
+
pnpm-debug.log*
|
|
16
|
+
|
|
17
|
+
.DS_Store
|
|
18
|
+
Thumbs.db
|
|
19
|
+
|
|
20
|
+
# Lock files — regenerated per developer's package manager
|
|
21
|
+
bun.lock
|
|
22
|
+
package-lock.json
|
|
23
|
+
pnpm-lock.yaml
|
|
24
|
+
yarn.lock
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nexwire-hono",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"bin": {
|
|
7
|
+
"maker": "./src/framework/maker-cli/index.mjs"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "npm run build:all",
|
|
11
|
+
"build:all": "npm run build:backend && npm run build:ui",
|
|
12
|
+
"build:backend": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
|
|
13
|
+
"build:ui": "node src/framework/maker-cli/runtime/build-ui.mjs",
|
|
14
|
+
"dev": "node src/framework/maker-cli/index.mjs dev",
|
|
15
|
+
"backend": "node src/framework/maker-cli/index.mjs serve --src",
|
|
16
|
+
"ui": "node src/framework/maker-cli/index.mjs ui:dev",
|
|
17
|
+
"maildev:view": "node src/framework/maker-cli/index.mjs maildev:view",
|
|
18
|
+
"redis:view": "node src/framework/maker-cli/index.mjs redis:view",
|
|
19
|
+
"db:studio": "node src/framework/maker-cli/index.mjs db:studio",
|
|
20
|
+
"maker": "node src/framework/maker-cli/index.mjs",
|
|
21
|
+
"lint": "biome check .",
|
|
22
|
+
"lint:fix": "biome check --write .",
|
|
23
|
+
"format": "biome format --write .",
|
|
24
|
+
"format:check": "biome format .",
|
|
25
|
+
"test": "vitest",
|
|
26
|
+
"test:run": "vitest run",
|
|
27
|
+
"test:ui": "vitest --ui",
|
|
28
|
+
"test:coverage": "vitest --coverage"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@aws-sdk/client-s3": "^3.1111.0",
|
|
32
|
+
"@aws-sdk/s3-request-presigner": "^3.1111.0",
|
|
33
|
+
"@bull-board/api": "^8.6.1",
|
|
34
|
+
"@bull-board/hono": "^8.6.1",
|
|
35
|
+
"@hono/node-server": "^2.1.0",
|
|
36
|
+
"@hono/zod-openapi": "~1.5.3",
|
|
37
|
+
"@libsql/client": "^0.17.4",
|
|
38
|
+
"@scalar/hono-api-reference": "^0.10.20",
|
|
39
|
+
"@socket.io/admin-ui": "^0.5.1",
|
|
40
|
+
"@socket.io/bun-engine": "^0.1.1",
|
|
41
|
+
"@socket.io/redis-adapter": "^8.3.0",
|
|
42
|
+
"@vitejs/plugin-vue": "^6.0.8",
|
|
43
|
+
"@vuepic/vue-datepicker": "^14.0.0",
|
|
44
|
+
"@vueuse/core": "^14.4.0",
|
|
45
|
+
"@vueuse/head": "^2.0.0",
|
|
46
|
+
"axios": "^1.19.0",
|
|
47
|
+
"bcryptjs": "^3.0.3",
|
|
48
|
+
"bootstrap": "^5.3.8",
|
|
49
|
+
"bootstrap-icons": "^1.13.1",
|
|
50
|
+
"bullmq": "^5.81.3",
|
|
51
|
+
"bullmq-durable": "^0.2.0",
|
|
52
|
+
"chalk": "^5.6.2",
|
|
53
|
+
"commander": "^14.0.3",
|
|
54
|
+
"croner": "^10.0.1",
|
|
55
|
+
"dotenv": "^17.4.2",
|
|
56
|
+
"dotenv-expand": "^13.0.0",
|
|
57
|
+
"drizzle-orm": "^0.45.2",
|
|
58
|
+
"glob": "^13.0.6",
|
|
59
|
+
"hono": "^4.13.1",
|
|
60
|
+
"hono-rate-limiter": "^0.5.3",
|
|
61
|
+
"ioredis": "^5.11.1",
|
|
62
|
+
"lodash-es": "^4.18.1",
|
|
63
|
+
"luxon": "^3.7.2",
|
|
64
|
+
"maildev": "^2.2.1",
|
|
65
|
+
"mysql2": "^3.23.3",
|
|
66
|
+
"nodemailer": "^9.0.5",
|
|
67
|
+
"pinia": "^3.0.4",
|
|
68
|
+
"pino": "^10.3.1",
|
|
69
|
+
"postgres": "^3.4.9",
|
|
70
|
+
"redis-commander": "^0.9.0",
|
|
71
|
+
"sass-embedded": "^1.100.0",
|
|
72
|
+
"socket.io": "^4.8.3",
|
|
73
|
+
"socket.io-client": "^4.8.3",
|
|
74
|
+
"stoker": "^2.0.1",
|
|
75
|
+
"vite": "^8.2.1",
|
|
76
|
+
"vue": "^3.5.41",
|
|
77
|
+
"vue-router": "^5.2.0",
|
|
78
|
+
"vue-select": "^4.0.0-beta.6",
|
|
79
|
+
"zod": "^4.4.3"
|
|
80
|
+
},
|
|
81
|
+
"devDependencies": {
|
|
82
|
+
"@biomejs/biome": "^2.5.7",
|
|
83
|
+
"@types/bootstrap": "^5.2.11",
|
|
84
|
+
"@types/lodash-es": "^4.17.12",
|
|
85
|
+
"@types/node": "^25.9.5",
|
|
86
|
+
"@vitest/coverage-v8": "^4.1.10",
|
|
87
|
+
"drizzle-kit": "^0.31.10",
|
|
88
|
+
"tsc-alias": "^1.9.2",
|
|
89
|
+
"tsx": "^4.23.12",
|
|
90
|
+
"typescript": "^6.0.3",
|
|
91
|
+
"vitest": "^4.1.10"
|
|
92
|
+
},
|
|
93
|
+
"engines": {
|
|
94
|
+
"node": ">=22.12.0",
|
|
95
|
+
"bun": ">=1.3",
|
|
96
|
+
"pnpm": ">=11",
|
|
97
|
+
"yarn": ">=4"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
File without changes
|