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.
Files changed (488) hide show
  1. package/README.md +233 -0
  2. package/express/.dockerignore +14 -0
  3. package/express/.env +44 -0
  4. package/express/.env.example +42 -0
  5. package/express/.vscode/settings.json +26 -0
  6. package/express/LICENSE +21 -0
  7. package/express/README.md +211 -0
  8. package/express/biome.json +66 -0
  9. package/express/drizzle.config.ts +25 -0
  10. package/express/gitignore-stub +24 -0
  11. package/express/package.json +108 -0
  12. package/express/public/.gitkeep +0 -0
  13. package/express/src/config/app.ts +41 -0
  14. package/express/src/config/auth.ts +12 -0
  15. package/express/src/config/cache.ts +16 -0
  16. package/express/src/config/cookie.ts +15 -0
  17. package/express/src/config/cors.ts +12 -0
  18. package/express/src/config/database.ts +29 -0
  19. package/express/src/config/index.ts +83 -0
  20. package/express/src/config/jwt.ts +19 -0
  21. package/express/src/config/logging.ts +13 -0
  22. package/express/src/config/mail.ts +24 -0
  23. package/express/src/config/openapi.ts +54 -0
  24. package/express/src/config/queue.ts +30 -0
  25. package/express/src/config/rateLimit.ts +17 -0
  26. package/express/src/config/realtime.ts +15 -0
  27. package/express/src/config/redis.ts +18 -0
  28. package/express/src/config/security.ts +44 -0
  29. package/express/src/config/session.ts +17 -0
  30. package/express/src/config/storage.ts +22 -0
  31. package/express/src/config/validate.ts +40 -0
  32. package/express/src/database/migrations/sqlite/0000_init.sql +61 -0
  33. package/express/src/database/migrations/sqlite/meta/0000_snapshot.json +412 -0
  34. package/express/src/database/migrations/sqlite/meta/_journal.json +13 -0
  35. package/express/src/database/schema.ts +3 -0
  36. package/express/src/env.ts +76 -0
  37. package/express/src/framework/cache/cache.ts +81 -0
  38. package/express/src/framework/circuit-breaker/cb.ts +60 -0
  39. package/express/src/framework/database/connection.ts +196 -0
  40. package/express/src/framework/database/migrate-hooks.ts +87 -0
  41. package/express/src/framework/database/paginate.ts +227 -0
  42. package/express/src/framework/database/schema.ts +20 -0
  43. package/express/src/framework/database/seed.ts +139 -0
  44. package/express/src/framework/events/dispatcher.ts +49 -0
  45. package/express/src/framework/facade.ts +48 -0
  46. package/express/src/framework/http/app.ts +107 -0
  47. package/express/src/framework/http/cors.ts +7 -0
  48. package/express/src/framework/http/logger.ts +69 -0
  49. package/express/src/framework/http/metrics.ts +22 -0
  50. package/express/src/framework/http/openapi.ts +54 -0
  51. package/express/src/framework/http/ratelimiter.ts +16 -0
  52. package/express/src/framework/http/router.ts +178 -0
  53. package/express/src/framework/http/security.ts +23 -0
  54. package/express/src/framework/http/static.ts +23 -0
  55. package/express/src/framework/http/validation.ts +18 -0
  56. package/express/src/framework/kernel.ts +52 -0
  57. package/express/src/framework/maker-cli/db/core.mjs +288 -0
  58. package/express/src/framework/maker-cli/db/index.mjs +204 -0
  59. package/express/src/framework/maker-cli/deploy/core.mjs +1047 -0
  60. package/express/src/framework/maker-cli/deploy/index.mjs +91 -0
  61. package/express/src/framework/maker-cli/index.mjs +53 -0
  62. package/express/src/framework/maker-cli/middleware/core.mjs +47 -0
  63. package/express/src/framework/maker-cli/middleware/index.mjs +17 -0
  64. package/express/src/framework/maker-cli/module/core.mjs +684 -0
  65. package/express/src/framework/maker-cli/module/index.mjs +140 -0
  66. package/express/src/framework/maker-cli/runtime/build-ui.mjs +16 -0
  67. package/express/src/framework/maker-cli/runtime/core.mjs +543 -0
  68. package/express/src/framework/maker-cli/runtime/index.mjs +104 -0
  69. package/express/src/framework/maker-cli/runtime/redis-commander-patch.cjs +20 -0
  70. package/express/src/framework/maker-cli/stubs/controller/openapi.ts.stub +47 -0
  71. package/express/src/framework/maker-cli/stubs/controller/openapi.with-model.ts.stub +48 -0
  72. package/express/src/framework/maker-cli/stubs/controller/plain.ts.stub +54 -0
  73. package/express/src/framework/maker-cli/stubs/controller/schema.plain.ts.stub +14 -0
  74. package/express/src/framework/maker-cli/stubs/controller/schema.ts.stub +33 -0
  75. package/express/src/framework/maker-cli/stubs/deploy/Dockerfile.bun.stub +52 -0
  76. package/express/src/framework/maker-cli/stubs/deploy/Dockerfile.pnpm.stub +55 -0
  77. package/express/src/framework/maker-cli/stubs/deploy/Dockerfile.stub +51 -0
  78. package/express/src/framework/maker-cli/stubs/deploy/Dockerfile.yarn.stub +55 -0
  79. package/express/src/framework/maker-cli/stubs/deploy/README.stub +59 -0
  80. package/express/src/framework/maker-cli/stubs/deploy/compose/mysql.server.stub +45 -0
  81. package/express/src/framework/maker-cli/stubs/deploy/compose/postgres.server.stub +45 -0
  82. package/express/src/framework/maker-cli/stubs/deploy/compose/sqlite.stub +45 -0
  83. package/express/src/framework/maker-cli/stubs/deploy/env/mysql.server.stub +68 -0
  84. package/express/src/framework/maker-cli/stubs/deploy/env/postgres.server.stub +68 -0
  85. package/express/src/framework/maker-cli/stubs/deploy/env/sqlite.stub +67 -0
  86. package/express/src/framework/maker-cli/stubs/deploy/scripts/auto-migrate.sh.stub +41 -0
  87. package/express/src/framework/maker-cli/stubs/deploy/server/README.stub +78 -0
  88. package/express/src/framework/maker-cli/stubs/deploy/server/compose/noredis.stub +120 -0
  89. package/express/src/framework/maker-cli/stubs/deploy/server/compose/redis.dev.stub +133 -0
  90. package/express/src/framework/maker-cli/stubs/deploy/server/compose/redis.stub +131 -0
  91. package/express/src/framework/maker-cli/stubs/deploy/server/env/local.example.stub +11 -0
  92. package/express/src/framework/maker-cli/stubs/deploy/server/env/noredis.stub +25 -0
  93. package/express/src/framework/maker-cli/stubs/deploy/server/env/redis.stub +25 -0
  94. package/express/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/README.stub +16 -0
  95. package/express/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/app.example.com.stub +13 -0
  96. package/express/src/framework/maker-cli/stubs/deploy/server/pgadmin/servers.stub +14 -0
  97. package/express/src/framework/maker-cli/stubs/deploy/server/redis/redis.conf.stub +7 -0
  98. package/express/src/framework/maker-cli/stubs/deploy/supervisor/noredis.stub +54 -0
  99. package/express/src/framework/maker-cli/stubs/deploy/supervisor/redis.stub +70 -0
  100. package/express/src/framework/maker-cli/stubs/deploy/workflow/local.json.stub +25 -0
  101. package/express/src/framework/maker-cli/stubs/deploy/workflow/remote.json.stub +24 -0
  102. package/express/src/framework/maker-cli/stubs/example/console.ts.stub +34 -0
  103. package/express/src/framework/maker-cli/stubs/example/controller.ts.stub +418 -0
  104. package/express/src/framework/maker-cli/stubs/example/job.ts.stub +75 -0
  105. package/express/src/framework/maker-cli/stubs/example/route.api.ts.stub +207 -0
  106. package/express/src/framework/maker-cli/stubs/example/route.plain.ts.stub +18 -0
  107. package/express/src/framework/maker-cli/stubs/example/schema.plain.ts.stub +42 -0
  108. package/express/src/framework/maker-cli/stubs/example/schema.ts.stub +42 -0
  109. package/express/src/framework/maker-cli/stubs/job/name.ts.stub +25 -0
  110. package/express/src/framework/maker-cli/stubs/middleware/name.ts.stub +14 -0
  111. package/express/src/framework/maker-cli/stubs/model/name.mysql.ts.stub +9 -0
  112. package/express/src/framework/maker-cli/stubs/model/name.postgresql.ts.stub +9 -0
  113. package/express/src/framework/maker-cli/stubs/model/name.sqlite.ts.stub +9 -0
  114. package/express/src/framework/maker-cli/stubs/notification/controller.ts.stub +77 -0
  115. package/express/src/framework/maker-cli/stubs/notification/job.ts.stub +13 -0
  116. package/express/src/framework/maker-cli/stubs/notification/route.api.ts.stub +50 -0
  117. package/express/src/framework/maker-cli/stubs/notification/route.plain.ts.stub +12 -0
  118. package/express/src/framework/maker-cli/stubs/notification/schema.plain.ts.stub +26 -0
  119. package/express/src/framework/maker-cli/stubs/notification/schema.ts.stub +26 -0
  120. package/express/src/framework/maker-cli/stubs/route/api.ts.stub +80 -0
  121. package/express/src/framework/maker-cli/stubs/route/plain.ts.stub +11 -0
  122. package/express/src/framework/maker-cli/stubs/schedule/name.ts.stub +36 -0
  123. package/express/src/framework/maker-cli/stubs/seeder/name.ts.stub +20 -0
  124. package/express/src/framework/maker-cli/stubs/test/unit.ts.stub +22 -0
  125. package/express/src/framework/maker-cli/utils/env-config.mjs +44 -0
  126. package/express/src/framework/maker-cli/utils/env-db.mjs +61 -0
  127. package/express/src/framework/maker-cli/utils/file-ops.mjs +30 -0
  128. package/express/src/framework/maker-cli/utils/flags.mjs +14 -0
  129. package/express/src/framework/maker-cli/utils/help.mjs +50 -0
  130. package/express/src/framework/maker-cli/utils/naming.mjs +13 -0
  131. package/express/src/framework/maker-cli/utils/process.mjs +52 -0
  132. package/express/src/framework/modules/discover.ts +54 -0
  133. package/express/src/framework/modules/routes.ts +21 -0
  134. package/express/src/framework/notification/index.ts +116 -0
  135. package/express/src/framework/queue/clear.ts +22 -0
  136. package/express/src/framework/queue/queue.ts +342 -0
  137. package/express/src/framework/queue/ui.ts +187 -0
  138. package/express/src/framework/queue/worker.ts +61 -0
  139. package/express/src/framework/realtime/broadcast.ts +46 -0
  140. package/express/src/framework/realtime/index.ts +2 -0
  141. package/express/src/framework/realtime/socket-cookie.ts +71 -0
  142. package/express/src/framework/realtime/socket.ts +119 -0
  143. package/express/src/framework/realtime/types.ts +6 -0
  144. package/express/src/framework/realtime/ui.ts +16 -0
  145. package/express/src/framework/redis/client.ts +151 -0
  146. package/express/src/framework/runtime/runtime.ts +23 -0
  147. package/express/src/framework/runtime/server-adapter.ts +34 -0
  148. package/express/src/framework/scheduler/lock.ts +116 -0
  149. package/express/src/framework/scheduler/run.ts +48 -0
  150. package/express/src/framework/scheduler/scheduler.ts +155 -0
  151. package/express/src/framework/server.ts +177 -0
  152. package/express/src/framework/session/session.ts +98 -0
  153. package/express/src/framework/storage/storage.ts +785 -0
  154. package/express/src/framework/support/cookie.ts +62 -0
  155. package/express/src/framework/support/jwt.ts +33 -0
  156. package/express/src/framework/support/lifecycle.ts +35 -0
  157. package/express/src/framework/support/logger.ts +148 -0
  158. package/express/src/framework/support/mail.ts +48 -0
  159. package/express/src/framework/support/password.ts +23 -0
  160. package/express/src/framework/support/upload.ts +160 -0
  161. package/express/src/framework/support/url.ts +41 -0
  162. package/express/src/middlewares/auth-middleware.ts +98 -0
  163. package/express/src/middlewares/role-middleware.ts +25 -0
  164. package/express/src/modules/auth/controllers/auth.controller.ts +358 -0
  165. package/express/src/modules/auth/controllers/auth.helpers.ts +104 -0
  166. package/express/src/modules/auth/controllers/auth.schema.ts +102 -0
  167. package/express/src/modules/auth/controllers/role.controller.ts +15 -0
  168. package/express/src/modules/auth/database/models/notifications.ts +24 -0
  169. package/express/src/modules/auth/database/models/role.ts +14 -0
  170. package/express/src/modules/auth/database/models/user.ts +46 -0
  171. package/express/src/modules/auth/database/seeders/role.ts +18 -0
  172. package/express/src/modules/auth/database/seeders/user.ts +35 -0
  173. package/express/src/modules/auth/jobs/forgetpass.ts +20 -0
  174. package/express/src/modules/auth/jobs/registeruser.ts +23 -0
  175. package/express/src/modules/auth/jobs/verifyemail.ts +18 -0
  176. package/express/src/modules/auth/routes/api.ts +150 -0
  177. package/express/src/modules/auth/routes/role.ts +33 -0
  178. package/express/src/resources/index.html +17 -0
  179. package/express/src/resources/src/App.vue +5 -0
  180. package/express/src/resources/src/assets/css/styles.css +14761 -0
  181. package/express/src/resources/src/assets/css/styles.css.map +1 -0
  182. package/express/src/resources/src/assets/fonts/public-sans/public-sans-latin-ext.woff2 +0 -0
  183. package/express/src/resources/src/assets/fonts/public-sans/public-sans-latin.woff2 +0 -0
  184. package/express/src/resources/src/assets/images/favicon/favicon.ico +0 -0
  185. package/express/src/resources/src/assets/images/logo.png +0 -0
  186. package/express/src/resources/src/assets/scss/custom.css +217 -0
  187. package/express/src/resources/src/assets/scss/custom.css.map +1 -0
  188. package/express/src/resources/src/assets/scss/custom.scss +1346 -0
  189. package/express/src/resources/src/components/Button.vue +32 -0
  190. package/express/src/resources/src/components/Checkbox.vue +29 -0
  191. package/express/src/resources/src/components/Datepicker.vue +106 -0
  192. package/express/src/resources/src/components/FeatureButton.vue +53 -0
  193. package/express/src/resources/src/components/FloatButton.vue +33 -0
  194. package/express/src/resources/src/components/Href.vue +32 -0
  195. package/express/src/resources/src/components/Input.vue +223 -0
  196. package/express/src/resources/src/components/InputGroup.vue +145 -0
  197. package/express/src/resources/src/components/InputPasswordToggle.vue +213 -0
  198. package/express/src/resources/src/components/Modal.vue +55 -0
  199. package/express/src/resources/src/components/Pagebar.vue +26 -0
  200. package/express/src/resources/src/components/Select.vue +384 -0
  201. package/express/src/resources/src/components/Spinner.vue +42 -0
  202. package/express/src/resources/src/components/Switch.vue +65 -0
  203. package/express/src/resources/src/components/TextArea.vue +117 -0
  204. package/express/src/resources/src/components/Toast.vue +56 -0
  205. package/express/src/resources/src/components/datatable/DataTableSkeleton.vue +98 -0
  206. package/express/src/resources/src/components/datatable/Pagination.vue +147 -0
  207. package/express/src/resources/src/components/datatable/SelectOpption.vue +64 -0
  208. package/express/src/resources/src/components/datatable/index.vue +199 -0
  209. package/express/src/resources/src/composables/useAuth.ts +52 -0
  210. package/express/src/resources/src/helpers/nformatter.ts +10 -0
  211. package/express/src/resources/src/helpers/utils.ts +75 -0
  212. package/express/src/resources/src/layouts/AuthLayout.vue +20 -0
  213. package/express/src/resources/src/layouts/Layout/Footer.vue +23 -0
  214. package/express/src/resources/src/layouts/Layout/Header.vue +105 -0
  215. package/express/src/resources/src/layouts/Layout/Sidebar.vue +137 -0
  216. package/express/src/resources/src/layouts/Layout/index.vue +87 -0
  217. package/express/src/resources/src/main.ts +26 -0
  218. package/express/src/resources/src/pages/auth/forgetPassword.vue +82 -0
  219. package/express/src/resources/src/pages/auth/login.vue +99 -0
  220. package/express/src/resources/src/pages/auth/register.vue +133 -0
  221. package/express/src/resources/src/pages/auth/resetPassword.vue +118 -0
  222. package/express/src/resources/src/pages/auth/verifyEmail.vue +68 -0
  223. package/express/src/resources/src/pages/dashboard/index.vue +66 -0
  224. package/express/src/resources/src/plugins/axios.ts +31 -0
  225. package/express/src/resources/src/plugins/browserDetect.ts +55 -0
  226. package/express/src/resources/src/plugins/dialog.ts +216 -0
  227. package/express/src/resources/src/plugins/gum.ts +367 -0
  228. package/express/src/resources/src/plugins/pulse.ts +147 -0
  229. package/express/src/resources/src/plugins/routeProgress.ts +87 -0
  230. package/express/src/resources/src/router/index.ts +85 -0
  231. package/express/src/resources/src/stores/admin-ui.ts +148 -0
  232. package/express/src/resources/src/stores/auth.ts +164 -0
  233. package/express/src/resources/tsconfig.json +19 -0
  234. package/express/src/resources/vite.config.ts +46 -0
  235. package/express/src/storage/app/private/.gitkeep +0 -0
  236. package/express/src/storage/app/public/.gitkeep +0 -0
  237. package/express/src/storage/app/tmp/generated/.gitkeep +0 -0
  238. package/express/src/storage/database/nexwire.sqlite +0 -0
  239. package/express/src/storage/logs/.gitkeep +0 -0
  240. package/express/src/storage/tmp/.gitkeep +0 -0
  241. package/express/src/storage/trash/modules/.gitkeep +0 -0
  242. package/express/src/types/global.d.ts +26 -0
  243. package/express/tsconfig.json +19 -0
  244. package/express/vitest.config.ts +23 -0
  245. package/hono/.dockerignore +14 -0
  246. package/hono/.env +44 -0
  247. package/hono/.env.example +42 -0
  248. package/hono/.vscode/settings.json +26 -0
  249. package/hono/LICENSE +21 -0
  250. package/hono/README.md +211 -0
  251. package/hono/biome.json +76 -0
  252. package/hono/drizzle.config.ts +25 -0
  253. package/hono/gitignore-stub +24 -0
  254. package/hono/package.json +99 -0
  255. package/hono/public/.gitkeep +0 -0
  256. package/hono/src/config/app.ts +41 -0
  257. package/hono/src/config/auth.ts +12 -0
  258. package/hono/src/config/cache.ts +16 -0
  259. package/hono/src/config/cookie.ts +15 -0
  260. package/hono/src/config/cors.ts +12 -0
  261. package/hono/src/config/database.ts +29 -0
  262. package/hono/src/config/index.ts +83 -0
  263. package/hono/src/config/jwt.ts +19 -0
  264. package/hono/src/config/logging.ts +13 -0
  265. package/hono/src/config/mail.ts +24 -0
  266. package/hono/src/config/openapi.ts +54 -0
  267. package/hono/src/config/queue.ts +30 -0
  268. package/hono/src/config/rateLimit.ts +17 -0
  269. package/hono/src/config/realtime.ts +15 -0
  270. package/hono/src/config/redis.ts +18 -0
  271. package/hono/src/config/security.ts +44 -0
  272. package/hono/src/config/session.ts +17 -0
  273. package/hono/src/config/storage.ts +22 -0
  274. package/hono/src/config/validate.ts +40 -0
  275. package/hono/src/database/migrations/sqlite/0000_init.sql +61 -0
  276. package/hono/src/database/migrations/sqlite/meta/0000_snapshot.json +412 -0
  277. package/hono/src/database/migrations/sqlite/meta/_journal.json +13 -0
  278. package/hono/src/database/schema.ts +3 -0
  279. package/hono/src/env.ts +76 -0
  280. package/hono/src/framework/cache/cache.ts +81 -0
  281. package/hono/src/framework/circuit-breaker/cb.ts +60 -0
  282. package/hono/src/framework/database/connection.ts +196 -0
  283. package/hono/src/framework/database/migrate-hooks.ts +87 -0
  284. package/hono/src/framework/database/paginate.ts +253 -0
  285. package/hono/src/framework/database/schema.ts +20 -0
  286. package/hono/src/framework/database/seed.ts +139 -0
  287. package/hono/src/framework/events/dispatcher.ts +49 -0
  288. package/hono/src/framework/facade.ts +29 -0
  289. package/hono/src/framework/http/app.ts +109 -0
  290. package/hono/src/framework/http/cors.ts +19 -0
  291. package/hono/src/framework/http/logger.ts +81 -0
  292. package/hono/src/framework/http/metrics.ts +22 -0
  293. package/hono/src/framework/http/openapi.ts +42 -0
  294. package/hono/src/framework/http/ratelimiter.ts +172 -0
  295. package/hono/src/framework/http/router.ts +76 -0
  296. package/hono/src/framework/http/security.ts +23 -0
  297. package/hono/src/framework/http/static.ts +70 -0
  298. package/hono/src/framework/http/validation.ts +21 -0
  299. package/hono/src/framework/kernel.ts +48 -0
  300. package/hono/src/framework/maker-cli/db/core.mjs +288 -0
  301. package/hono/src/framework/maker-cli/db/index.mjs +204 -0
  302. package/hono/src/framework/maker-cli/deploy/core.mjs +1038 -0
  303. package/hono/src/framework/maker-cli/deploy/index.mjs +91 -0
  304. package/hono/src/framework/maker-cli/index.mjs +53 -0
  305. package/hono/src/framework/maker-cli/middleware/core.mjs +47 -0
  306. package/hono/src/framework/maker-cli/middleware/index.mjs +12 -0
  307. package/hono/src/framework/maker-cli/module/core.mjs +684 -0
  308. package/hono/src/framework/maker-cli/module/index.mjs +140 -0
  309. package/hono/src/framework/maker-cli/runtime/build-ui.mjs +17 -0
  310. package/hono/src/framework/maker-cli/runtime/core.mjs +543 -0
  311. package/hono/src/framework/maker-cli/runtime/index.mjs +104 -0
  312. package/hono/src/framework/maker-cli/runtime/redis-commander-patch.cjs +20 -0
  313. package/hono/src/framework/maker-cli/stubs/controller/openapi.ts.stub +57 -0
  314. package/hono/src/framework/maker-cli/stubs/controller/openapi.with-model.ts.stub +58 -0
  315. package/hono/src/framework/maker-cli/stubs/controller/plain.ts.stub +59 -0
  316. package/hono/src/framework/maker-cli/stubs/controller/schema.plain.ts.stub +14 -0
  317. package/hono/src/framework/maker-cli/stubs/controller/schema.ts.stub +33 -0
  318. package/hono/src/framework/maker-cli/stubs/deploy/Dockerfile.bun.stub +52 -0
  319. package/hono/src/framework/maker-cli/stubs/deploy/Dockerfile.pnpm.stub +55 -0
  320. package/hono/src/framework/maker-cli/stubs/deploy/Dockerfile.stub +51 -0
  321. package/hono/src/framework/maker-cli/stubs/deploy/Dockerfile.yarn.stub +55 -0
  322. package/hono/src/framework/maker-cli/stubs/deploy/README.stub +59 -0
  323. package/hono/src/framework/maker-cli/stubs/deploy/compose/mysql.server.stub +45 -0
  324. package/hono/src/framework/maker-cli/stubs/deploy/compose/postgres.server.stub +45 -0
  325. package/hono/src/framework/maker-cli/stubs/deploy/compose/sqlite.stub +45 -0
  326. package/hono/src/framework/maker-cli/stubs/deploy/env/mysql.server.stub +68 -0
  327. package/hono/src/framework/maker-cli/stubs/deploy/env/postgres.server.stub +68 -0
  328. package/hono/src/framework/maker-cli/stubs/deploy/env/sqlite.stub +67 -0
  329. package/hono/src/framework/maker-cli/stubs/deploy/scripts/auto-migrate.sh.stub +41 -0
  330. package/hono/src/framework/maker-cli/stubs/deploy/server/README.stub +78 -0
  331. package/hono/src/framework/maker-cli/stubs/deploy/server/compose/noredis.stub +120 -0
  332. package/hono/src/framework/maker-cli/stubs/deploy/server/compose/redis.dev.stub +133 -0
  333. package/hono/src/framework/maker-cli/stubs/deploy/server/compose/redis.stub +131 -0
  334. package/hono/src/framework/maker-cli/stubs/deploy/server/env/local.example.stub +11 -0
  335. package/hono/src/framework/maker-cli/stubs/deploy/server/env/noredis.stub +25 -0
  336. package/hono/src/framework/maker-cli/stubs/deploy/server/env/redis.stub +25 -0
  337. package/hono/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/README.stub +16 -0
  338. package/hono/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/app.example.com.stub +13 -0
  339. package/hono/src/framework/maker-cli/stubs/deploy/server/pgadmin/servers.stub +14 -0
  340. package/hono/src/framework/maker-cli/stubs/deploy/server/redis/redis.conf.stub +7 -0
  341. package/hono/src/framework/maker-cli/stubs/deploy/supervisor/noredis.stub +54 -0
  342. package/hono/src/framework/maker-cli/stubs/deploy/supervisor/redis.stub +70 -0
  343. package/hono/src/framework/maker-cli/stubs/deploy/workflow/local.json.stub +25 -0
  344. package/hono/src/framework/maker-cli/stubs/deploy/workflow/remote.json.stub +24 -0
  345. package/hono/src/framework/maker-cli/stubs/example/console.ts.stub +34 -0
  346. package/hono/src/framework/maker-cli/stubs/example/controller.ts.stub +505 -0
  347. package/hono/src/framework/maker-cli/stubs/example/job.ts.stub +75 -0
  348. package/hono/src/framework/maker-cli/stubs/example/route.api.ts.stub +207 -0
  349. package/hono/src/framework/maker-cli/stubs/example/route.plain.ts.stub +18 -0
  350. package/hono/src/framework/maker-cli/stubs/example/schema.plain.ts.stub +42 -0
  351. package/hono/src/framework/maker-cli/stubs/example/schema.ts.stub +42 -0
  352. package/hono/src/framework/maker-cli/stubs/job/name.ts.stub +25 -0
  353. package/hono/src/framework/maker-cli/stubs/middleware/name.ts.stub +14 -0
  354. package/hono/src/framework/maker-cli/stubs/model/name.mysql.ts.stub +9 -0
  355. package/hono/src/framework/maker-cli/stubs/model/name.postgresql.ts.stub +9 -0
  356. package/hono/src/framework/maker-cli/stubs/model/name.sqlite.ts.stub +9 -0
  357. package/hono/src/framework/maker-cli/stubs/notification/controller.ts.stub +86 -0
  358. package/hono/src/framework/maker-cli/stubs/notification/job.ts.stub +13 -0
  359. package/hono/src/framework/maker-cli/stubs/notification/route.api.ts.stub +50 -0
  360. package/hono/src/framework/maker-cli/stubs/notification/route.plain.ts.stub +12 -0
  361. package/hono/src/framework/maker-cli/stubs/notification/schema.plain.ts.stub +26 -0
  362. package/hono/src/framework/maker-cli/stubs/notification/schema.ts.stub +26 -0
  363. package/hono/src/framework/maker-cli/stubs/route/api.ts.stub +80 -0
  364. package/hono/src/framework/maker-cli/stubs/route/plain.ts.stub +11 -0
  365. package/hono/src/framework/maker-cli/stubs/schedule/name.ts.stub +36 -0
  366. package/hono/src/framework/maker-cli/stubs/seeder/name.ts.stub +20 -0
  367. package/hono/src/framework/maker-cli/stubs/test/unit.ts.stub +22 -0
  368. package/hono/src/framework/maker-cli/utils/env-config.mjs +44 -0
  369. package/hono/src/framework/maker-cli/utils/env-db.mjs +61 -0
  370. package/hono/src/framework/maker-cli/utils/file-ops.mjs +30 -0
  371. package/hono/src/framework/maker-cli/utils/flags.mjs +14 -0
  372. package/hono/src/framework/maker-cli/utils/help.mjs +50 -0
  373. package/hono/src/framework/maker-cli/utils/naming.mjs +13 -0
  374. package/hono/src/framework/maker-cli/utils/process.mjs +52 -0
  375. package/hono/src/framework/modules/discover.ts +54 -0
  376. package/hono/src/framework/modules/routes.ts +24 -0
  377. package/hono/src/framework/notification/index.ts +116 -0
  378. package/hono/src/framework/queue/clear.ts +22 -0
  379. package/hono/src/framework/queue/queue.ts +342 -0
  380. package/hono/src/framework/queue/ui.ts +214 -0
  381. package/hono/src/framework/queue/worker.ts +61 -0
  382. package/hono/src/framework/realtime/broadcast.ts +46 -0
  383. package/hono/src/framework/realtime/index.ts +2 -0
  384. package/hono/src/framework/realtime/socket-cookie.ts +68 -0
  385. package/hono/src/framework/realtime/socket.ts +196 -0
  386. package/hono/src/framework/realtime/types.ts +6 -0
  387. package/hono/src/framework/realtime/ui.ts +16 -0
  388. package/hono/src/framework/redis/client.ts +151 -0
  389. package/hono/src/framework/runtime/runtime.ts +23 -0
  390. package/hono/src/framework/runtime/server-adapter.ts +94 -0
  391. package/hono/src/framework/scheduler/lock.ts +116 -0
  392. package/hono/src/framework/scheduler/run.ts +48 -0
  393. package/hono/src/framework/scheduler/scheduler.ts +155 -0
  394. package/hono/src/framework/server.ts +183 -0
  395. package/hono/src/framework/session/session.ts +116 -0
  396. package/hono/src/framework/storage/storage.ts +785 -0
  397. package/hono/src/framework/support/cookie.ts +99 -0
  398. package/hono/src/framework/support/jwt.ts +45 -0
  399. package/hono/src/framework/support/lifecycle.ts +35 -0
  400. package/hono/src/framework/support/logger.ts +148 -0
  401. package/hono/src/framework/support/mail.ts +48 -0
  402. package/hono/src/framework/support/password.ts +23 -0
  403. package/hono/src/framework/support/url.ts +41 -0
  404. package/hono/src/middlewares/auth-middleware.ts +98 -0
  405. package/hono/src/middlewares/role-middleware.ts +25 -0
  406. package/hono/src/modules/auth/controllers/auth.controller.ts +413 -0
  407. package/hono/src/modules/auth/controllers/auth.helpers.ts +128 -0
  408. package/hono/src/modules/auth/controllers/auth.schema.ts +102 -0
  409. package/hono/src/modules/auth/controllers/role.controller.ts +25 -0
  410. package/hono/src/modules/auth/database/models/notifications.ts +24 -0
  411. package/hono/src/modules/auth/database/models/role.ts +14 -0
  412. package/hono/src/modules/auth/database/models/user.ts +46 -0
  413. package/hono/src/modules/auth/database/seeders/role.ts +18 -0
  414. package/hono/src/modules/auth/database/seeders/user.ts +35 -0
  415. package/hono/src/modules/auth/jobs/forgetpass.ts +20 -0
  416. package/hono/src/modules/auth/jobs/registeruser.ts +23 -0
  417. package/hono/src/modules/auth/jobs/verifyemail.ts +18 -0
  418. package/hono/src/modules/auth/routes/api.ts +150 -0
  419. package/hono/src/modules/auth/routes/role.ts +33 -0
  420. package/hono/src/resources/index.html +17 -0
  421. package/hono/src/resources/src/App.vue +5 -0
  422. package/hono/src/resources/src/assets/css/styles.css +14913 -0
  423. package/hono/src/resources/src/assets/css/styles.css.map +1 -0
  424. package/hono/src/resources/src/assets/fonts/public-sans/public-sans-latin-ext.woff2 +0 -0
  425. package/hono/src/resources/src/assets/fonts/public-sans/public-sans-latin.woff2 +0 -0
  426. package/hono/src/resources/src/assets/images/favicon/favicon.ico +0 -0
  427. package/hono/src/resources/src/assets/images/logo.png +0 -0
  428. package/hono/src/resources/src/assets/scss/custom.css +217 -0
  429. package/hono/src/resources/src/assets/scss/custom.css.map +1 -0
  430. package/hono/src/resources/src/assets/scss/custom.scss +1346 -0
  431. package/hono/src/resources/src/components/Button.vue +32 -0
  432. package/hono/src/resources/src/components/Checkbox.vue +29 -0
  433. package/hono/src/resources/src/components/Datepicker.vue +106 -0
  434. package/hono/src/resources/src/components/FeatureButton.vue +53 -0
  435. package/hono/src/resources/src/components/FloatButton.vue +33 -0
  436. package/hono/src/resources/src/components/Href.vue +32 -0
  437. package/hono/src/resources/src/components/Input.vue +234 -0
  438. package/hono/src/resources/src/components/InputGroup.vue +149 -0
  439. package/hono/src/resources/src/components/InputPasswordToggle.vue +222 -0
  440. package/hono/src/resources/src/components/Modal.vue +55 -0
  441. package/hono/src/resources/src/components/Pagebar.vue +26 -0
  442. package/hono/src/resources/src/components/Select.vue +415 -0
  443. package/hono/src/resources/src/components/Spinner.vue +42 -0
  444. package/hono/src/resources/src/components/Switch.vue +65 -0
  445. package/hono/src/resources/src/components/TextArea.vue +121 -0
  446. package/hono/src/resources/src/components/Toast.vue +56 -0
  447. package/hono/src/resources/src/components/datatable/DataTableSkeleton.vue +98 -0
  448. package/hono/src/resources/src/components/datatable/Pagination.vue +147 -0
  449. package/hono/src/resources/src/components/datatable/SelectOpption.vue +64 -0
  450. package/hono/src/resources/src/components/datatable/index.vue +199 -0
  451. package/hono/src/resources/src/composables/useAuth.ts +52 -0
  452. package/hono/src/resources/src/helpers/nformatter.ts +10 -0
  453. package/hono/src/resources/src/helpers/utils.ts +75 -0
  454. package/hono/src/resources/src/layouts/AuthLayout.vue +20 -0
  455. package/hono/src/resources/src/layouts/Layout/Footer.vue +23 -0
  456. package/hono/src/resources/src/layouts/Layout/Header.vue +105 -0
  457. package/hono/src/resources/src/layouts/Layout/Sidebar.vue +137 -0
  458. package/hono/src/resources/src/layouts/Layout/index.vue +87 -0
  459. package/hono/src/resources/src/main.ts +26 -0
  460. package/hono/src/resources/src/pages/auth/forgetPassword.vue +82 -0
  461. package/hono/src/resources/src/pages/auth/login.vue +99 -0
  462. package/hono/src/resources/src/pages/auth/register.vue +133 -0
  463. package/hono/src/resources/src/pages/auth/resetPassword.vue +118 -0
  464. package/hono/src/resources/src/pages/auth/verifyEmail.vue +68 -0
  465. package/hono/src/resources/src/pages/dashboard/index.vue +66 -0
  466. package/hono/src/resources/src/plugins/axios.ts +31 -0
  467. package/hono/src/resources/src/plugins/browserDetect.ts +55 -0
  468. package/hono/src/resources/src/plugins/dialog.ts +216 -0
  469. package/hono/src/resources/src/plugins/gum.ts +367 -0
  470. package/hono/src/resources/src/plugins/pulse.ts +147 -0
  471. package/hono/src/resources/src/plugins/routeProgress.ts +87 -0
  472. package/hono/src/resources/src/router/index.ts +85 -0
  473. package/hono/src/resources/src/stores/admin-ui.ts +148 -0
  474. package/hono/src/resources/src/stores/auth.ts +164 -0
  475. package/hono/src/resources/tsconfig.json +19 -0
  476. package/hono/src/resources/vite.config.ts +46 -0
  477. package/hono/src/storage/app/private/.gitkeep +0 -0
  478. package/hono/src/storage/app/public/.gitkeep +0 -0
  479. package/hono/src/storage/app/tmp/generated/.gitkeep +0 -0
  480. package/hono/src/storage/database/nexwire.sqlite +0 -0
  481. package/hono/src/storage/logs/.gitkeep +0 -0
  482. package/hono/src/storage/tmp/.gitkeep +0 -0
  483. package/hono/src/storage/trash/modules/.gitkeep +0 -0
  484. package/hono/src/types/global.d.ts +26 -0
  485. package/hono/tsconfig.json +20 -0
  486. package/hono/vitest.config.ts +23 -0
  487. package/package.json +238 -0
  488. package/src/index.js +204 -0
package/README.md ADDED
@@ -0,0 +1,233 @@
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">Stop wiring the stack together. Ship the app.</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://github.com/niyamulahsan/nexwire/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
13
+ </p>
14
+
15
+ ---
16
+
17
+ Every serious TypeScript app needs the same ten things: an HTTP API, auth with refresh-token rotation, a database with migrations, background jobs, real-time sockets, cron, file uploads, email, security headers, and a frontend. Assembling them is a week of glue code — and the failures are the silent kind, where a job never runs or a socket never joins a room.
18
+
19
+ nexwire ships that stack **already connected**. Auth reads the database. Enqueueing a job is one call. Events broadcast to the right rooms. Uploads land on disk or in S3. `maker` supervises the API, worker, and cron, and Docker Compose puts the whole thing behind nginx with automatic SSL.
20
+
21
+ - **Runnable the second it exists** — the scaffold ships a pre-migrated, pre-seeded SQLite database, so `npm install && npm run maker dev` lands you on a login screen that already works. Sign in with `admin@example.com` / `Password@123`. No Docker, no Postgres, no services to configure.
22
+ - **Nothing to register** — `maker module:make blog` scaffolds the whole module (routes, controllers, models, seeders, jobs, tests) and the app auto-discovers it. No router file to edit, no registry to update.
23
+ - **One import for every subsystem** — `db`, `cache`, `queue`, `jwt`, `mail`, `storage`, `notify`, and `urls` all come from `@/framework/facade.js`. Drop Redis in dev and the in-memory fallback takes over without touching a single call site.
24
+ - **Infrastructure is optional** — Redis, mail, and S3 sit behind circuit breakers with real fallbacks, so nothing hard-fails when a service is absent or down.
25
+ - **Deploy to a VPS over SSH** — one-time `maker deploy:init`, then `maker deploy:workflow:remote` builds the image, provisions nginx, requests Let's Encrypt certificates, and supervises API, worker, and cron as long-running processes.
26
+
27
+ ## Quick Start
28
+
29
+ ### Hono (default)
30
+
31
+ ```bash
32
+ npm create nexwire@latest my-app
33
+ cd my-app
34
+ npm install
35
+ npm run maker dev
36
+ ```
37
+
38
+ ### Express
39
+
40
+ ```bash
41
+ npm create nexwire@latest my-app -- --engine=express
42
+ cd my-app
43
+ npm install
44
+ npm run maker dev
45
+ ```
46
+
47
+ Your API is live at `http://localhost:3000`, Scalar docs at `/api-docs`, and the Vue frontend at `http://localhost:5173`.
48
+
49
+ The scaffold already ships a pre-migrated, pre-seeded SQLite database, so there is no migration step before `maker dev`. If you point `DATABASE_URL` at MySQL or PostgreSQL, run `npm run maker db:migrate -- --seed` once to build and populate that database instead.
50
+
51
+ Requires **Node.js >= 22.12** or **Bun >= 1.3**.
52
+
53
+ ### Current directory
54
+
55
+ Scaffold directly into the current directory:
56
+
57
+ ```bash
58
+ npm create nexwire@latest .
59
+ npm create nexwire@latest . -- --engine=express
60
+ ```
61
+
62
+ Works with any package manager: `pnpm`, `yarn`, or `bun`.
63
+
64
+ ### Package Manager
65
+
66
+ All examples use `npm` as the default. nexwire works with any major package manager:
67
+
68
+ | Manager | Create project | Run commands |
69
+ | -------- | ----------------------------------- | --------------------- |
70
+ | **npm** | `npm create nexwire@latest my-app` | `npm run maker <cmd>` |
71
+ | **pnpm** | `pnpm create nexwire@latest my-app` | `pnpm maker <cmd>` |
72
+ | **yarn** | `yarn create nexwire@latest my-app` | `yarn maker <cmd>` |
73
+ | **bun** | `bun create nexwire@latest my-app` | `bun maker <cmd>` |
74
+ | **all** | `npm create nexwire@latest .` | current directory |
75
+
76
+ ### Runtime
77
+
78
+ nexwire runs on **Node.js** or **Bun** — pick whichever fits your deployment:
79
+
80
+ | Runtime | Minimum version | Notes |
81
+ | ----------- | --------------- | --------------------------------------------------------------------- |
82
+ | **Node.js** | `>= 22.12` | Default. Uses `node` in Dockerfile. |
83
+ | **Bun** | `>= 1.3` | Pass `--runtime=bun` to `deploy:init`. Uses `oven/bun` in Dockerfile. |
84
+
85
+ ## Demo
86
+
87
+ Real recordings from a freshly scaffolded project — no mockups, no staging data.
88
+
89
+ **Dev mode** — one command boots the API, Vue UI, Scalar docs, Bull Board queues, MailDev and Redis UI together:
90
+
91
+ <p align="center">
92
+ <img src="https://raw.githubusercontent.com/niyamulahsan/nexwire/main/packages/docs/public/screenshots/dev-mode.gif" alt="nexwire dev mode: API, UI, API docs, queue dashboard and mail UI booting in one command" width="100%">
93
+ </p>
94
+
95
+ **Real deploy** — the same project running on a live server, with HTTPS, process supervision and zero-downtime restarts:
96
+
97
+ <p align="center">
98
+ <img src="https://raw.githubusercontent.com/niyamulahsan/nexwire/main/packages/docs/public/screenshots/real-deploy.gif" alt="nexwire deployed to a real server with HTTPS and process supervision" width="100%">
99
+ </p>
100
+
101
+ ## Features
102
+
103
+ | Category | What you get |
104
+ | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
105
+ | **API** | Hono/Express HTTP server with Zod validation, OpenAPI/Scalar docs, CORS, rate limiting |
106
+ | **Database** | Drizzle ORM — SQLite by default, shipped pre-migrated and seeded; MySQL/PostgreSQL also supported, dialect auto-detected from `DATABASE_URL`. |
107
+ | **Auth** | JWT access + refresh token rotation, signed httpOnly cookies, role middleware |
108
+ | **Queue** | BullMQ background jobs with `shouldQueue` decorator and Bull Board dashboard |
109
+ | **Realtime** | Socket.IO with auto room joining (user, role, auth) and broadcast events |
110
+ | **Cache & Session** | Redis-backed with graceful fallback when Redis is disabled |
111
+ | **Scheduler** | Cron-based task scheduling with distributed Redis lock |
112
+ | **Storage** | Local disk or S3-compatible (AWS S3, R2, MinIO, DigitalOcean Spaces) |
113
+ | **Notifications** | Database-persisted notifications with broadcast + mail delivery |
114
+ | **Frontend** | Vue 3 SPA — Vite, Pinia, Vue Router, Bootstrap 5, real-time Pulse plugin |
115
+ | **Security** | CSP, HSTS, X-Frame headers — configured in one place, toggled per environment |
116
+ | **Reliability** | Circuit breakers for Redis, mail, and S3 with auto-fallback; startup config validation |
117
+ | **CLI** | `maker` command for code generation, migrations, runtime, and deploy |
118
+ | **Deploy** | Two-layer Docker Compose — nginx-proxy, auto SSL, supervisor |
119
+
120
+ ## Architecture
121
+
122
+ ```
123
+ src/
124
+ ├── env.ts # Zod-validated environment config
125
+ ├── database/ # Drizzle schema, migrations, seeders
126
+ ├── framework/ # Reusable engine (HTTP, auth, queue, cache, etc.)
127
+ ├── modules/ # Application modules (auto-discovered)
128
+ ├── middlewares/ # Auth & role guards
129
+ ├── resources/ # Vue 3 SPA frontend
130
+ └── storage/ # Uploaded files & logs
131
+ ```
132
+
133
+ ### Modules
134
+
135
+ Every feature is a self-contained module under `src/modules/<name>/`:
136
+
137
+ ```
138
+ src/modules/posts/
139
+ ├── console/ # CLI commands & scheduled tasks
140
+ ├── controllers/ # Request handlers + Zod schemas
141
+ ├── database/
142
+ │ ├── models/ # Drizzle table definitions
143
+ │ └── seeders/ # Test data generators
144
+ ├── jobs/ # BullMQ queue handlers
145
+ ├── routes/ # HTTP route definitions (auto-discovered)
146
+ └── __test__/ # Unit test
147
+ ```
148
+
149
+ Modules are **auto-discovered** — no manual registration. Create one with:
150
+
151
+ ```bash
152
+ npm run maker module:make blog
153
+ npm run maker module:make-controller blog post
154
+ npm run maker module:make-route blog post
155
+ npm run maker module:make-model blog post
156
+ ```
157
+
158
+ ### Framework Facade
159
+
160
+ Access all subsystems through a single import:
161
+
162
+ ```ts
163
+ import {
164
+ db,
165
+ cache,
166
+ session,
167
+ queue,
168
+ dispatchEvent,
169
+ notify,
170
+ storage,
171
+ jwt,
172
+ mail,
173
+ password,
174
+ urls,
175
+ logger,
176
+ } from "@/framework/facade.js";
177
+ ```
178
+
179
+ ## CLI Reference
180
+
181
+ | Command | Description |
182
+ | ------------------------------ | ---------------------------------------------- |
183
+ | `maker dev` | Start API server + frontend HMR + queue worker |
184
+ | `maker serve [--prod]` | API server (dev or production) |
185
+ | `maker queue:work` | BullMQ worker process |
186
+ | `maker schedule:work` | Cron scheduler |
187
+ | `maker db:migrate --seed` | Run migrations + seeders |
188
+ | `maker db:fresh` | Drop all tables, re-migrate, re-seed |
189
+ | `maker module:make <name>` | Scaffold a new module |
190
+ | `maker deploy:init` | Generate Docker deploy scaffolding |
191
+ | `maker deploy:workflow` | Local deploy (Docker Desktop) |
192
+ | `maker deploy:workflow:remote` | Remote deploy via SSH + rsync |
193
+
194
+ ## Deployment
195
+
196
+ nexwire includes a complete Docker deployment system out of the box.
197
+
198
+ ### Local (Docker Desktop)
199
+
200
+ ```bash
201
+ npm run maker deploy:init # Generate deploy files (one-time)
202
+ npm run maker deploy:workflow # Build and start everything
203
+ ```
204
+
205
+ ### Remote (VPS / Cloud)
206
+
207
+ ```bash
208
+ npm run maker deploy:init # Generate files
209
+ # Edit deploy/workflow.remote.json with your SSH details
210
+ npm run maker deploy:workflow:remote # Deploy to server
211
+ ```
212
+
213
+ The deploy system provisions:
214
+
215
+ - **Multi-stage Dockerfile** — builder (install + build) → runner (minimal production image)
216
+ - **Shared infrastructure** — nginx-proxy, MySQL/PostgreSQL, Redis, phpMyAdmin, pgAdmin
217
+ - **Auto SSL** — Let's Encrypt via nginx-proxy companion
218
+ - **Process supervisor** — API server, queue worker, cron scheduler, auto-migration
219
+ - **Two-layer architecture** — server infra runs once per host, app stack rebuilds per deploy
220
+
221
+ See the [deploy documentation](https://niyamulahsan.github.io/nexwire/deploy/overview) for full details.
222
+
223
+ ## Documentation
224
+
225
+ Complete documentation is available at **[Documentation](https://niyamulahsan.github.io/nexwire)**
226
+
227
+ ## Contributing
228
+
229
+ Contributions are welcome. Open an issue or pull request on [GitHub](https://github.com/niyamulahsan/nexwire).
230
+
231
+ ## License
232
+
233
+ nexwire is open-sourced software licensed under the [MIT license](LICENSE).
@@ -0,0 +1,14 @@
1
+ node_modules
2
+ dist
3
+ .git
4
+ .gitignore
5
+
6
+ npm-debug.log*
7
+ yarn-debug.log*
8
+ yarn-error.log*
9
+ pnpm-debug.log*
10
+
11
+ coverage
12
+ *.log
13
+ tmp
14
+ temp
package/express/.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
+ }
@@ -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.
@@ -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).
@@ -0,0 +1,66 @@
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": ["**/*.{js,mjs,cjs,ts,tsx,vue}"],
49
+ "javascript": {
50
+ "globals": ["exports", "location"]
51
+ }
52
+ }
53
+ ],
54
+ "assist": {
55
+ "actions": {
56
+ "source": {
57
+ "organizeImports": {
58
+ "level": "on",
59
+ "options": {
60
+ "groups": [":NODE:", ":PACKAGE:", ":ALIAS:", ":PATH:"]
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }