create-nexwire 4.3.0 → 4.4.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 +10 -5
- package/express/src/framework/facade.ts +1 -0
- package/express/src/framework/http/logger.ts +13 -4
- package/express/src/framework/maker-cli/runtime/core.mjs +1 -2
- package/express/src/framework/notification/channels/mail.ts +8 -6
- package/express/src/middlewares/auth-middleware.ts +1 -2
- package/express/src/middlewares/role-middleware.ts +3 -13
- package/express/src/modules/auth/routes/index.ts +1 -2
- package/express/src/providers/notification.ts +2 -2
- package/express/src/resources/src/components/Switch.vue +60 -65
- package/express/src/resources/src/pages/auth/forgetPassword.vue +23 -30
- package/express/src/resources/src/pages/auth/login.vue +25 -28
- package/express/src/resources/src/pages/auth/register.vue +35 -39
- package/express/src/resources/src/pages/auth/resetPassword.vue +29 -37
- package/express/src/resources/src/pages/auth/verifyEmail.vue +15 -19
- package/express/src/resources/src/plugins/gum.ts +519 -203
- package/express/src/resources/src/stores/auth.ts +9 -6
- package/express/src/storage/database/nexwire.sqlite +0 -0
- package/fastify/.dockerignore +14 -0
- package/fastify/.env +44 -0
- package/fastify/.env.example +42 -0
- package/fastify/.vscode/extensions.json +6 -0
- package/fastify/.vscode/settings.json +37 -0
- package/fastify/LICENSE +21 -0
- package/fastify/README.md +232 -0
- package/fastify/biome.json +99 -0
- package/fastify/drizzle.config.ts +25 -0
- package/fastify/gitignore-stub +31 -0
- package/fastify/package.json +130 -0
- package/fastify/public/.gitkeep +0 -0
- package/fastify/src/config/app.ts +41 -0
- package/fastify/src/config/auth.ts +12 -0
- package/fastify/src/config/cache.ts +16 -0
- package/fastify/src/config/cookie.ts +15 -0
- package/fastify/src/config/cors.ts +12 -0
- package/fastify/src/config/database.ts +48 -0
- package/fastify/src/config/index.ts +83 -0
- package/fastify/src/config/jwt.ts +19 -0
- package/fastify/src/config/logging.ts +13 -0
- package/fastify/src/config/mail.ts +24 -0
- package/fastify/src/config/openapi.ts +36 -0
- package/fastify/src/config/queue.ts +30 -0
- package/fastify/src/config/rateLimit.ts +17 -0
- package/fastify/src/config/realtime.ts +15 -0
- package/fastify/src/config/redis.ts +18 -0
- package/fastify/src/config/security.ts +44 -0
- package/fastify/src/config/session.ts +17 -0
- package/fastify/src/config/storage.ts +22 -0
- package/fastify/src/config/validate.ts +50 -0
- package/fastify/src/database/migrations/sqlite/0000_init.sql +48 -0
- package/fastify/src/database/migrations/sqlite/meta/0000_snapshot.json +324 -0
- package/fastify/src/database/migrations/sqlite/meta/_journal.json +13 -0
- package/fastify/src/database/schema.ts +2 -0
- package/fastify/src/env.ts +76 -0
- package/fastify/src/framework/cache/cache.ts +114 -0
- package/fastify/src/framework/circuit-breaker/cb.ts +88 -0
- package/fastify/src/framework/database/app-schema.ts +37 -0
- package/fastify/src/framework/database/connection.ts +223 -0
- package/fastify/src/framework/database/migrate-hooks.ts +87 -0
- package/fastify/src/framework/database/paginate.ts +226 -0
- package/fastify/src/framework/database/schema.ts +20 -0
- package/fastify/src/framework/database/seed.ts +152 -0
- package/fastify/src/framework/events/dispatcher.ts +61 -0
- package/fastify/src/framework/facade.ts +96 -0
- package/fastify/src/framework/http/app.ts +176 -0
- package/fastify/src/framework/http/cors.ts +13 -0
- package/fastify/src/framework/http/fastify.d.ts +13 -0
- package/fastify/src/framework/http/logger.ts +110 -0
- package/fastify/src/framework/http/metrics.ts +22 -0
- package/fastify/src/framework/http/openapi.ts +48 -0
- package/fastify/src/framework/http/ratelimiter.ts +47 -0
- package/fastify/src/framework/http/security.ts +25 -0
- package/fastify/src/framework/http/static.ts +83 -0
- package/fastify/src/framework/http/validation.ts +49 -0
- package/fastify/src/framework/kernel.ts +43 -0
- package/fastify/src/framework/maker-cli/db/core.mjs +291 -0
- package/fastify/src/framework/maker-cli/db/index.mjs +204 -0
- package/fastify/src/framework/maker-cli/deploy/core.mjs +1046 -0
- package/fastify/src/framework/maker-cli/deploy/index.mjs +91 -0
- package/fastify/src/framework/maker-cli/index.mjs +65 -0
- package/fastify/src/framework/maker-cli/middleware/core.mjs +41 -0
- package/fastify/src/framework/maker-cli/middleware/index.mjs +17 -0
- package/fastify/src/framework/maker-cli/module/core.mjs +1066 -0
- package/fastify/src/framework/maker-cli/module/index.mjs +211 -0
- package/fastify/src/framework/maker-cli/provider/core.mjs +49 -0
- package/fastify/src/framework/maker-cli/provider/index.mjs +12 -0
- package/fastify/src/framework/maker-cli/runtime/build-ui.mjs +16 -0
- package/fastify/src/framework/maker-cli/runtime/core.mjs +560 -0
- package/fastify/src/framework/maker-cli/runtime/index.mjs +120 -0
- package/fastify/src/framework/maker-cli/runtime/redis-commander-patch.cjs +20 -0
- package/fastify/src/framework/maker-cli/stubs/controller/openapi.ts.stub +74 -0
- package/fastify/src/framework/maker-cli/stubs/controller/plain.ts.stub +77 -0
- package/fastify/src/framework/maker-cli/stubs/controller/standalone.ts.stub +51 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/Dockerfile.bun.stub +52 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/Dockerfile.pnpm.stub +55 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/Dockerfile.stub +51 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/Dockerfile.yarn.stub +55 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/README.stub +59 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/compose/mysql.server.stub +45 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/compose/postgres.server.stub +45 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/compose/sqlite.stub +45 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/env/mysql.server.stub +68 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/env/postgres.server.stub +68 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/env/sqlite.stub +67 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/scripts/auto-migrate.sh.stub +41 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/README.stub +78 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/compose/noredis.stub +120 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/compose/redis.dev.stub +133 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/compose/redis.stub +131 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/env/local.example.stub +11 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/env/noredis.stub +25 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/env/redis.stub +25 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/README.stub +16 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/app.example.com.stub +13 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/pgadmin/servers.stub +14 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/server/redis/redis.conf.stub +7 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/supervisor/noredis.stub +54 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/supervisor/redis.stub +70 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/workflow/local.json.stub +25 -0
- package/fastify/src/framework/maker-cli/stubs/deploy/workflow/remote.json.stub +24 -0
- package/fastify/src/framework/maker-cli/stubs/facade/name.ts.stub +12 -0
- package/fastify/src/framework/maker-cli/stubs/helper/name.ts.stub +14 -0
- package/fastify/src/framework/maker-cli/stubs/job/name.ts.stub +25 -0
- package/fastify/src/framework/maker-cli/stubs/middleware/name.local.ts.stub +15 -0
- package/fastify/src/framework/maker-cli/stubs/middleware/name.ts.stub +15 -0
- package/fastify/src/framework/maker-cli/stubs/model/name.mysql.ts.stub +10 -0
- package/fastify/src/framework/maker-cli/stubs/model/name.postgresql.ts.stub +10 -0
- package/fastify/src/framework/maker-cli/stubs/model/name.sqlite.ts.stub +10 -0
- package/fastify/src/framework/maker-cli/stubs/notification/controller.ts.stub +79 -0
- package/fastify/src/framework/maker-cli/stubs/notification/job.ts.stub +11 -0
- package/fastify/src/framework/maker-cli/stubs/notification/model.ts.stub +29 -0
- package/fastify/src/framework/maker-cli/stubs/notification/provider.ts.stub +174 -0
- package/fastify/src/framework/maker-cli/stubs/notification/route.api.ts.stub +71 -0
- package/fastify/src/framework/maker-cli/stubs/notification/route.plain.ts.stub +15 -0
- package/fastify/src/framework/maker-cli/stubs/notification/schema.plain.ts.stub +26 -0
- package/fastify/src/framework/maker-cli/stubs/notification/schema.ts.stub +26 -0
- package/fastify/src/framework/maker-cli/stubs/provider/module-barrel.ts.stub +19 -0
- package/fastify/src/framework/maker-cli/stubs/provider/module.ts.stub +21 -0
- package/fastify/src/framework/maker-cli/stubs/provider/name.ts.stub +21 -0
- package/fastify/src/framework/maker-cli/stubs/route/api.ts.stub +101 -0
- package/fastify/src/framework/maker-cli/stubs/route/plain.ts.stub +23 -0
- package/fastify/src/framework/maker-cli/stubs/route/standalone.api.ts.stub +120 -0
- package/fastify/src/framework/maker-cli/stubs/route/standalone.plain.ts.stub +50 -0
- package/fastify/src/framework/maker-cli/stubs/schedule/name.ts.stub +36 -0
- package/fastify/src/framework/maker-cli/stubs/schema/name.plain.ts.stub +14 -0
- package/fastify/src/framework/maker-cli/stubs/schema/name.ts.stub +33 -0
- package/fastify/src/framework/maker-cli/stubs/seeder/name.ts.stub +18 -0
- package/fastify/src/framework/maker-cli/stubs/seeder/standalone.ts.stub +22 -0
- package/fastify/src/framework/maker-cli/stubs/service/name.plain.ts.stub +67 -0
- package/fastify/src/framework/maker-cli/stubs/service/name.ts.stub +65 -0
- package/fastify/src/framework/maker-cli/stubs/test/unit.ts.stub +22 -0
- package/fastify/src/framework/maker-cli/stubs/type/name.ts.stub +22 -0
- package/fastify/src/framework/maker-cli/utils/env-config.mjs +44 -0
- package/fastify/src/framework/maker-cli/utils/env-db.mjs +61 -0
- package/fastify/src/framework/maker-cli/utils/file-ops.mjs +30 -0
- package/fastify/src/framework/maker-cli/utils/flags.mjs +14 -0
- package/fastify/src/framework/maker-cli/utils/help.mjs +379 -0
- package/fastify/src/framework/maker-cli/utils/naming.mjs +119 -0
- package/fastify/src/framework/maker-cli/utils/process.mjs +52 -0
- package/fastify/src/framework/maker-cli/utils/project-commands.mjs +201 -0
- package/fastify/src/framework/modules/discover.ts +57 -0
- package/fastify/src/framework/modules/routes.ts +31 -0
- package/fastify/src/framework/notification/channels/broadcast.ts +15 -0
- package/fastify/src/framework/notification/channels/mail.ts +42 -0
- package/fastify/src/framework/notification/contracts.ts +29 -0
- package/fastify/src/framework/notification/index.ts +59 -0
- package/fastify/src/framework/notification/registry.ts +15 -0
- package/fastify/src/framework/providers/adapter.ts +149 -0
- package/fastify/src/framework/providers/contracts.ts +126 -0
- package/fastify/src/framework/providers/loader.ts +105 -0
- package/fastify/src/framework/providers/registry.ts +88 -0
- package/fastify/src/framework/queue/clear.ts +22 -0
- package/fastify/src/framework/queue/queue.ts +401 -0
- package/fastify/src/framework/queue/ui.ts +194 -0
- package/fastify/src/framework/queue/worker.ts +61 -0
- package/fastify/src/framework/realtime/broadcast.ts +70 -0
- package/fastify/src/framework/realtime/index.ts +2 -0
- package/fastify/src/framework/realtime/socket-cookie.ts +72 -0
- package/fastify/src/framework/realtime/socket.ts +149 -0
- package/fastify/src/framework/realtime/types.ts +6 -0
- package/fastify/src/framework/realtime/ui.ts +16 -0
- package/fastify/src/framework/redis/client.ts +148 -0
- package/fastify/src/framework/runtime/runtime.ts +23 -0
- package/fastify/src/framework/runtime/server-adapter.ts +33 -0
- package/fastify/src/framework/scheduler/lock.ts +128 -0
- package/fastify/src/framework/scheduler/run.ts +48 -0
- package/fastify/src/framework/scheduler/scheduler.ts +155 -0
- package/fastify/src/framework/server.ts +162 -0
- package/fastify/src/framework/session/session.ts +160 -0
- package/fastify/src/framework/storage/storage.ts +744 -0
- package/fastify/src/framework/support/cookie.ts +71 -0
- package/fastify/src/framework/support/jwt.ts +33 -0
- package/fastify/src/framework/support/lifecycle.ts +35 -0
- package/fastify/src/framework/support/logger.ts +148 -0
- package/fastify/src/framework/support/mail.ts +56 -0
- package/fastify/src/framework/support/password.ts +23 -0
- package/fastify/src/framework/support/status-codes.ts +75 -0
- package/fastify/src/framework/support/upload.ts +181 -0
- package/fastify/src/framework/support/url.ts +41 -0
- package/fastify/src/middlewares/auth-middleware.ts +134 -0
- package/fastify/src/middlewares/role-middleware.ts +19 -0
- package/fastify/src/modules/auth/__tests__/forgetpass.test.ts +200 -0
- package/fastify/src/modules/auth/__tests__/login.test.ts +171 -0
- package/fastify/src/modules/auth/__tests__/logout.test.ts +60 -0
- package/fastify/src/modules/auth/__tests__/logoutalldevices.test.ts +49 -0
- package/fastify/src/modules/auth/__tests__/me.test.ts +91 -0
- package/fastify/src/modules/auth/__tests__/refreshtoken.test.ts +305 -0
- package/fastify/src/modules/auth/__tests__/register.test.ts +291 -0
- package/fastify/src/modules/auth/__tests__/resetpass.test.ts +206 -0
- package/fastify/src/modules/auth/__tests__/verifyemail.test.ts +183 -0
- package/fastify/src/modules/auth/controllers/auth.ts +252 -0
- package/fastify/src/modules/auth/controllers/role.ts +35 -0
- package/fastify/src/modules/auth/database/models/role.ts +14 -0
- package/fastify/src/modules/auth/database/models/user.ts +46 -0
- package/fastify/src/modules/auth/database/seeders/role.ts +18 -0
- package/fastify/src/modules/auth/database/seeders/user.ts +35 -0
- package/fastify/src/modules/auth/facade.ts +12 -0
- package/fastify/src/modules/auth/helpers/auth.ts +115 -0
- package/fastify/src/modules/auth/jobs/forgetpass.ts +20 -0
- package/fastify/src/modules/auth/jobs/registeruser.ts +23 -0
- package/fastify/src/modules/auth/jobs/verifyemail.ts +18 -0
- package/fastify/src/modules/auth/routes/index.ts +185 -0
- package/fastify/src/modules/auth/routes/role.ts +56 -0
- package/fastify/src/modules/auth/schemas/auth.ts +116 -0
- package/fastify/src/modules/auth/services/forgetpassword.ts +66 -0
- package/fastify/src/modules/auth/services/login.ts +63 -0
- package/fastify/src/modules/auth/services/logout.ts +25 -0
- package/fastify/src/modules/auth/services/logoutalldevices.ts +19 -0
- package/fastify/src/modules/auth/services/me.ts +31 -0
- package/fastify/src/modules/auth/services/refreshtoken.ts +110 -0
- package/fastify/src/modules/auth/services/register.ts +141 -0
- package/fastify/src/modules/auth/services/resetpassword.ts +69 -0
- package/fastify/src/modules/auth/services/verifyemail.ts +77 -0
- package/fastify/src/modules/auth/types/auth.ts +31 -0
- package/fastify/src/providers/README.md +107 -0
- package/fastify/src/providers/notification.ts +4 -0
- package/fastify/src/resources/index.html +17 -0
- package/fastify/src/resources/src/App.vue +5 -0
- package/fastify/src/resources/src/assets/css/styles.css +14761 -0
- package/fastify/src/resources/src/assets/css/styles.css.map +1 -0
- package/fastify/src/resources/src/assets/fonts/public-sans/public-sans-latin-ext.woff2 +0 -0
- package/fastify/src/resources/src/assets/fonts/public-sans/public-sans-latin.woff2 +0 -0
- package/fastify/src/resources/src/assets/images/favicon/favicon.ico +0 -0
- package/fastify/src/resources/src/assets/images/logo.png +0 -0
- package/fastify/src/resources/src/assets/scss/custom.css +217 -0
- package/fastify/src/resources/src/assets/scss/custom.css.map +1 -0
- package/fastify/src/resources/src/assets/scss/custom.scss +1346 -0
- package/fastify/src/resources/src/components/Button.vue +32 -0
- package/fastify/src/resources/src/components/Checkbox.vue +32 -0
- package/fastify/src/resources/src/components/Datepicker.vue +106 -0
- package/fastify/src/resources/src/components/FeatureButton.vue +53 -0
- package/fastify/src/resources/src/components/FloatButton.vue +33 -0
- package/fastify/src/resources/src/components/Href.vue +32 -0
- package/fastify/src/resources/src/components/Input.vue +243 -0
- package/fastify/src/resources/src/components/InputGroup.vue +147 -0
- package/fastify/src/resources/src/components/InputPasswordToggle.vue +229 -0
- package/fastify/src/resources/src/components/Modal.vue +71 -0
- package/fastify/src/resources/src/components/Pagebar.vue +26 -0
- package/fastify/src/resources/src/components/Refresh.vue +19 -0
- package/fastify/src/resources/src/components/Select.vue +384 -0
- package/fastify/src/resources/src/components/Spinner.vue +42 -0
- package/fastify/src/resources/src/components/Switch.vue +60 -0
- package/fastify/src/resources/src/components/TextArea.vue +117 -0
- package/fastify/src/resources/src/components/Toast.vue +56 -0
- package/fastify/src/resources/src/components/datatable/DataTableSkeleton.vue +98 -0
- package/fastify/src/resources/src/components/datatable/Pagination.vue +147 -0
- package/fastify/src/resources/src/components/datatable/SelectOpption.vue +64 -0
- package/fastify/src/resources/src/components/datatable/index.vue +199 -0
- package/fastify/src/resources/src/composables/useAuth.ts +52 -0
- package/fastify/src/resources/src/helpers/assets.ts +51 -0
- package/fastify/src/resources/src/helpers/nformatter.ts +10 -0
- package/fastify/src/resources/src/helpers/utils.ts +75 -0
- package/fastify/src/resources/src/layouts/AuthLayout.vue +20 -0
- package/fastify/src/resources/src/layouts/Layout/Footer.vue +23 -0
- package/fastify/src/resources/src/layouts/Layout/Header.vue +124 -0
- package/fastify/src/resources/src/layouts/Layout/Sidebar.vue +137 -0
- package/fastify/src/resources/src/layouts/Layout/index.vue +87 -0
- package/fastify/src/resources/src/main.ts +28 -0
- package/fastify/src/resources/src/pages/auth/forgetPassword.vue +76 -0
- package/fastify/src/resources/src/pages/auth/login.vue +96 -0
- package/fastify/src/resources/src/pages/auth/register.vue +129 -0
- package/fastify/src/resources/src/pages/auth/resetPassword.vue +110 -0
- package/fastify/src/resources/src/pages/auth/verifyEmail.vue +64 -0
- package/fastify/src/resources/src/pages/dashboard/index.vue +66 -0
- package/fastify/src/resources/src/plugins/axios.ts +31 -0
- package/fastify/src/resources/src/plugins/browserDetect.ts +55 -0
- package/fastify/src/resources/src/plugins/dialog.ts +216 -0
- package/fastify/src/resources/src/plugins/gum.ts +683 -0
- package/fastify/src/resources/src/plugins/pulse.ts +157 -0
- package/fastify/src/resources/src/plugins/routeProgress.ts +87 -0
- package/fastify/src/resources/src/router/index.ts +85 -0
- package/fastify/src/resources/src/stores/admin-ui.ts +148 -0
- package/fastify/src/resources/src/stores/auth.ts +187 -0
- package/fastify/src/resources/tsconfig.json +19 -0
- package/fastify/src/resources/vite.config.ts +64 -0
- package/fastify/src/storage/app/private/.gitkeep +0 -0
- package/fastify/src/storage/app/public/.gitkeep +0 -0
- package/fastify/src/storage/app/tmp/generated/.gitkeep +0 -0
- package/fastify/src/storage/database/nexwire.sqlite +0 -0
- package/fastify/src/storage/logs/.gitkeep +0 -0
- package/fastify/src/storage/logs/app.log +0 -0
- package/fastify/src/storage/logs/fatal.log +0 -0
- package/fastify/src/storage/tmp/.gitkeep +0 -0
- package/fastify/src/storage/trash/modules/.gitkeep +0 -0
- package/fastify/src/types/global.d.ts +32 -0
- package/fastify/tsconfig.json +19 -0
- package/fastify/vitest.config.ts +38 -0
- package/hono/src/framework/facade.ts +1 -0
- package/hono/src/framework/http/logger.ts +86 -81
- package/hono/src/framework/maker-cli/runtime/core.mjs +1 -2
- package/hono/src/framework/notification/channels/mail.ts +8 -6
- package/hono/src/middlewares/auth-middleware.ts +1 -2
- package/hono/src/middlewares/role-middleware.ts +3 -13
- package/hono/src/modules/auth/routes/index.ts +1 -2
- package/hono/src/providers/notification.ts +2 -2
- package/hono/src/resources/src/components/Switch.vue +60 -65
- package/hono/src/resources/src/pages/auth/forgetPassword.vue +23 -29
- package/hono/src/resources/src/pages/auth/login.vue +26 -29
- package/hono/src/resources/src/pages/auth/register.vue +36 -40
- package/hono/src/resources/src/pages/auth/resetPassword.vue +29 -37
- package/hono/src/resources/src/pages/auth/verifyEmail.vue +15 -19
- package/hono/src/resources/src/plugins/gum.ts +519 -203
- package/hono/src/resources/src/stores/auth.ts +9 -6
- package/hono/src/storage/database/nexwire.sqlite +0 -0
- package/package.json +3 -2
- package/src/index.js +11 -8
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { runSeed } from "../db/core.mjs";
|
|
2
|
+
import { assertName } from "../utils/naming.mjs";
|
|
3
|
+
import {
|
|
4
|
+
assertModuleHasSeeders,
|
|
5
|
+
cleanModuleTrash,
|
|
6
|
+
deleteModule,
|
|
7
|
+
deleteNotificationModule,
|
|
8
|
+
listModules,
|
|
9
|
+
makeController,
|
|
10
|
+
makeHelper,
|
|
11
|
+
makeJob,
|
|
12
|
+
makeLocalMiddleware,
|
|
13
|
+
makeModel,
|
|
14
|
+
makeModule,
|
|
15
|
+
makeModuleProvider,
|
|
16
|
+
makeModules,
|
|
17
|
+
makeNotificationModule,
|
|
18
|
+
makeRoute,
|
|
19
|
+
makeSchedule,
|
|
20
|
+
makeSchema,
|
|
21
|
+
makeSeeder,
|
|
22
|
+
makeService,
|
|
23
|
+
makeTest,
|
|
24
|
+
makeType,
|
|
25
|
+
runModuleMigrate
|
|
26
|
+
} from "./core.mjs";
|
|
27
|
+
|
|
28
|
+
/** Register module:* subcommands on the CLI program. */
|
|
29
|
+
export function registerModuleCommands(program, rawArgs) {
|
|
30
|
+
program
|
|
31
|
+
.command("module:make <names...>")
|
|
32
|
+
.description("Create one or more modules with facade, providers, schema, service, controller, route, model, and seeder folders")
|
|
33
|
+
.option("--path <panel>", "Nest the module(s) under a panel folder (e.g. --path=admin)")
|
|
34
|
+
.option("--force", "Overwrite the files of modules that already exist")
|
|
35
|
+
.allowUnknownOption(true)
|
|
36
|
+
.action(async (names) => {
|
|
37
|
+
const result = await makeModules(names, rawArgs.slice(1 + names.length));
|
|
38
|
+
if (result.failed.length) process.exitCode = 1;
|
|
39
|
+
});
|
|
40
|
+
program
|
|
41
|
+
.command("module:make-notification [name]")
|
|
42
|
+
.description("Generate the notification HTTP module, and the shared store the first time")
|
|
43
|
+
.option("--path <panel>", "Nest the module under a panel folder (e.g. --path=admin)")
|
|
44
|
+
.option("--notifiable <type>", "Owner type recorded with each notification (default: user)")
|
|
45
|
+
.option("--force", "Overwrite the files of a module that already exists")
|
|
46
|
+
.allowUnknownOption(true)
|
|
47
|
+
.action(async (name) => {
|
|
48
|
+
const maybeModule = name && !name.startsWith("--") ? name : "";
|
|
49
|
+
const flagStart = maybeModule ? 2 : 1;
|
|
50
|
+
await makeNotificationModule(maybeModule || "notification", rawArgs.slice(flagStart));
|
|
51
|
+
});
|
|
52
|
+
program
|
|
53
|
+
.command("module:delete-notification [name]")
|
|
54
|
+
.description("Remove notification module (moves to trash)")
|
|
55
|
+
.option("--yes", "Confirm deletion without prompt")
|
|
56
|
+
.option("--dry-run", "Print what would be deleted without executing")
|
|
57
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
58
|
+
.allowUnknownOption(true)
|
|
59
|
+
.action(async (name) => {
|
|
60
|
+
const maybeModule = name && !name.startsWith("--") ? name : "";
|
|
61
|
+
const flagStart = maybeModule ? 2 : 1;
|
|
62
|
+
await deleteNotificationModule(maybeModule || "notification", rawArgs.slice(flagStart));
|
|
63
|
+
});
|
|
64
|
+
program
|
|
65
|
+
.command("module:delete <name>")
|
|
66
|
+
.description("Move a module directory to storage trash (soft delete)")
|
|
67
|
+
.option("--yes", "Confirm deletion without prompt")
|
|
68
|
+
.option("--dry-run", "Print what would be deleted without executing")
|
|
69
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
70
|
+
.allowUnknownOption(true)
|
|
71
|
+
.action(async (name) => deleteModule(name, rawArgs.slice(2)));
|
|
72
|
+
program
|
|
73
|
+
.command("module:trash:clean [name]")
|
|
74
|
+
.description("Permanently remove entries from module trash storage")
|
|
75
|
+
.option("--yes", "Confirm cleanup without prompt")
|
|
76
|
+
.option("--dry-run", "Print what would be cleaned without executing")
|
|
77
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
78
|
+
.allowUnknownOption(true)
|
|
79
|
+
.action(async (name) => {
|
|
80
|
+
const maybeModule = name && !name.startsWith("--") ? name : "";
|
|
81
|
+
const flagStart = maybeModule ? 2 : 1;
|
|
82
|
+
await cleanModuleTrash(maybeModule, rawArgs.slice(flagStart));
|
|
83
|
+
});
|
|
84
|
+
program
|
|
85
|
+
.command("module:make-route <module> [controller]")
|
|
86
|
+
.description("Generate a route file for an existing module")
|
|
87
|
+
.option("--force", "Overwrite existing route file")
|
|
88
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
89
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
90
|
+
.allowUnknownOption(true)
|
|
91
|
+
.action(async (moduleName, controller) => makeRoute(moduleName, controller, rawArgs.slice(controller ? 3 : 2)));
|
|
92
|
+
program
|
|
93
|
+
.command("module:make-controller <module> [name]")
|
|
94
|
+
.description("Generate a controller for an existing module")
|
|
95
|
+
.option("--force", "Overwrite existing controller file")
|
|
96
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
97
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
98
|
+
.allowUnknownOption(true)
|
|
99
|
+
.action(async (moduleName, name) => makeController(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
100
|
+
program
|
|
101
|
+
.command("module:make-schema <module> [name]")
|
|
102
|
+
.description("Generate a schema file for an existing module")
|
|
103
|
+
.option("--force", "Overwrite existing schema file")
|
|
104
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
105
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
106
|
+
.allowUnknownOption(true)
|
|
107
|
+
.action(async (moduleName, name) => makeSchema(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
108
|
+
program
|
|
109
|
+
.command("module:make-service <module> [name]")
|
|
110
|
+
.description("Generate a service file for an existing module")
|
|
111
|
+
.option("--with-model", "Query database/models/<name>.ts instead of returning empty defaults")
|
|
112
|
+
.option("--force", "Overwrite existing service file")
|
|
113
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
114
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
115
|
+
.allowUnknownOption(true)
|
|
116
|
+
.action(async (moduleName, name) => makeService(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
117
|
+
program
|
|
118
|
+
.command("module:make-helper <module> [name]")
|
|
119
|
+
.description("Generate a helper file in the module's helpers folder")
|
|
120
|
+
.option("--force", "Overwrite existing helper file")
|
|
121
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
122
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
123
|
+
.allowUnknownOption(true)
|
|
124
|
+
.action(async (moduleName, name) => makeHelper(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
125
|
+
program
|
|
126
|
+
.command("module:make-middleware <module> [name]")
|
|
127
|
+
.description("Generate a module-local middleware file for an existing module")
|
|
128
|
+
.option("--force", "Overwrite existing middleware file")
|
|
129
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
130
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
131
|
+
.allowUnknownOption(true)
|
|
132
|
+
.action(async (moduleName, name) => makeLocalMiddleware(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
133
|
+
program
|
|
134
|
+
.command("module:make-provider <module> [name]")
|
|
135
|
+
.description("Generate a provider file in the module's providers folder")
|
|
136
|
+
.option("--force", "Overwrite existing provider file")
|
|
137
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
138
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
139
|
+
.allowUnknownOption(true)
|
|
140
|
+
.action(async (moduleName, name) => makeModuleProvider(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
141
|
+
program
|
|
142
|
+
.command("module:make-type <module> [name]")
|
|
143
|
+
.description("Generate a types file for an existing module")
|
|
144
|
+
.option("--force", "Overwrite existing types file")
|
|
145
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
146
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
147
|
+
.allowUnknownOption(true)
|
|
148
|
+
.action(async (moduleName, name) => makeType(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
149
|
+
program
|
|
150
|
+
.command("module:make-model <module> [name]")
|
|
151
|
+
.description("Generate a model file for an existing module")
|
|
152
|
+
.option("--force", "Overwrite existing model file")
|
|
153
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
154
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
155
|
+
.allowUnknownOption(true)
|
|
156
|
+
.action(async (moduleName, name) => makeModel(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
157
|
+
program
|
|
158
|
+
.command("module:make-seeder <module> [name]")
|
|
159
|
+
.description("Generate a seeder file for an existing module model")
|
|
160
|
+
.option("--force", "Overwrite existing seeder file")
|
|
161
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
162
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
163
|
+
.allowUnknownOption(true)
|
|
164
|
+
.action(async (moduleName, name) => makeSeeder(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
165
|
+
program
|
|
166
|
+
.command("module:make-job <module> [name]")
|
|
167
|
+
.description("Generate a job file for an existing module")
|
|
168
|
+
.option("--force", "Overwrite existing job file")
|
|
169
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
170
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
171
|
+
.allowUnknownOption(true)
|
|
172
|
+
.action(async (moduleName, name) => makeJob(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
173
|
+
program
|
|
174
|
+
.command("module:make-console <module> [name]")
|
|
175
|
+
.description("Generate a scheduler/console file for an existing module")
|
|
176
|
+
.option("--force", "Overwrite existing console file")
|
|
177
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
178
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
179
|
+
.allowUnknownOption(true)
|
|
180
|
+
.action(async (moduleName, name) => makeSchedule(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
181
|
+
program
|
|
182
|
+
.command("module:list")
|
|
183
|
+
.description("List all discovered modules")
|
|
184
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
185
|
+
.allowUnknownOption(true)
|
|
186
|
+
.action(async () => listModules());
|
|
187
|
+
program
|
|
188
|
+
.command("module:seed <module>")
|
|
189
|
+
.description("Run seeders for one module")
|
|
190
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
191
|
+
.allowUnknownOption(true)
|
|
192
|
+
.action(async (moduleName) => {
|
|
193
|
+
const normalized = assertName(moduleName, "Module name");
|
|
194
|
+
await assertModuleHasSeeders(normalized);
|
|
195
|
+
await runSeed(normalized);
|
|
196
|
+
});
|
|
197
|
+
program
|
|
198
|
+
.command("module:migrate <module>")
|
|
199
|
+
.description("Generate and run a migration that includes the module")
|
|
200
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
201
|
+
.allowUnknownOption(true)
|
|
202
|
+
.action(async (moduleName) => runModuleMigrate(moduleName, rawArgs));
|
|
203
|
+
program
|
|
204
|
+
.command("module:make-test <module> [name]")
|
|
205
|
+
.description("Generate a unit test file for a module")
|
|
206
|
+
.option("--force", "Overwrite existing test file")
|
|
207
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
208
|
+
.option("--path <panel>", "Address a module inside a panel folder (e.g. --path=admin)")
|
|
209
|
+
.allowUnknownOption(true)
|
|
210
|
+
.action(async (moduleName, name) => makeTest(moduleName, name, rawArgs.slice(name ? 3 : 2)));
|
|
211
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { hasFlag } from "../utils/flags.mjs";
|
|
4
|
+
import { assertName, camelCase } from "../utils/naming.mjs";
|
|
5
|
+
|
|
6
|
+
const stubsRoot = path.resolve(import.meta.dirname, "../stubs");
|
|
7
|
+
|
|
8
|
+
/** Read a stub file and replace {{key}} placeholders, removing unfilled ones. */
|
|
9
|
+
async function stub(name, values = {}) {
|
|
10
|
+
let content = await fs.readFile(path.join(stubsRoot, name), "utf8");
|
|
11
|
+
for (const [key, value] of Object.entries(values)) {
|
|
12
|
+
content = content.replaceAll(`{{${key}}}`, String(value));
|
|
13
|
+
}
|
|
14
|
+
return content.replace(/\{\{[A-Z0-9_]+\}\}/g, "");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Why: Generates the app-wide provider file.
|
|
19
|
+
* When: A developer wants to plug an implementation into the whole app.
|
|
20
|
+
* Where: src/providers/<name>.ts - imported automatically at boot.
|
|
21
|
+
* How: Writes the stub and prints how to reach the provider from anywhere.
|
|
22
|
+
*/
|
|
23
|
+
export async function makeProvider(rawName, flags = []) {
|
|
24
|
+
const name = assertName(rawName, "Provider name");
|
|
25
|
+
const camel = camelCase(name);
|
|
26
|
+
const dryRun = hasFlag(flags, "--dry-run");
|
|
27
|
+
const force = hasFlag(flags, "--force") || hasFlag(flags, "--yes");
|
|
28
|
+
|
|
29
|
+
const filePath = path.resolve(process.cwd(), "src/providers", `${name}.ts`);
|
|
30
|
+
if (dryRun) {
|
|
31
|
+
console.log(`Would create provider file: ${path.relative(process.cwd(), filePath)}`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let exists = false;
|
|
36
|
+
try {
|
|
37
|
+
await fs.access(filePath);
|
|
38
|
+
exists = true;
|
|
39
|
+
} catch {}
|
|
40
|
+
if (exists && !force) {
|
|
41
|
+
throw new Error(`Provider already exists: ${path.relative(process.cwd(), filePath)}. Re-run with --force to overwrite.`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const content = await stub("provider/name.ts.stub", { name, camel });
|
|
45
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
46
|
+
await fs.writeFile(filePath, content);
|
|
47
|
+
console.log(`Provider ready: ${path.relative(process.cwd(), filePath)}`);
|
|
48
|
+
console.log(`It is imported at boot. Reach it with: getProvider("${name}")`);
|
|
49
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { makeProvider } from "./core.mjs";
|
|
2
|
+
|
|
3
|
+
/** Register provider:* subcommands on the CLI program. */
|
|
4
|
+
export function registerProviderCommands(program, rawArgs) {
|
|
5
|
+
program
|
|
6
|
+
.command("provider:make <name>")
|
|
7
|
+
.description("Generate a provider file in src/providers")
|
|
8
|
+
.option("--force", "Overwrite existing provider file")
|
|
9
|
+
.option("--dry-run", "Print what would be created without executing")
|
|
10
|
+
.allowUnknownOption(true)
|
|
11
|
+
.action(async (name) => makeProvider(name, rawArgs.filter((arg) => arg.startsWith("--"))));
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
|
|
5
|
+
const isFalse = (v) => v === "false" || v === "0";
|
|
6
|
+
|
|
7
|
+
const envFile = resolve(process.cwd(), ".env");
|
|
8
|
+
const fileDisabled = existsSync(envFile) && /^UI=(?:false|0)\s*$/m.test(readFileSync(envFile, "utf-8"));
|
|
9
|
+
|
|
10
|
+
if (isFalse(process.env.UI) || fileDisabled) {
|
|
11
|
+
console.log("UI build skipped (UI=false)");
|
|
12
|
+
mkdirSync("public", { recursive: true });
|
|
13
|
+
process.exit(0);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
execSync("vite build --config src/resources/vite.config.ts", { stdio: "inherit" });
|