@stacksjs/actions 0.70.87 → 0.70.88

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 (284) hide show
  1. package/package.json +16 -16
  2. package/dist/action.d.ts +0 -149
  3. package/dist/action.js +0 -2
  4. package/dist/actions.d.ts +0 -2
  5. package/dist/actions.js +0 -2
  6. package/dist/add.d.ts +0 -6
  7. package/dist/add.js +0 -2
  8. package/dist/ai/request-model-access.d.ts +0 -1
  9. package/dist/ai/request-model-access.js +0 -2
  10. package/dist/auth/client.d.ts +0 -1
  11. package/dist/auth/client.js +0 -3
  12. package/dist/auth/prune.d.ts +0 -1
  13. package/dist/auth/prune.js +0 -2
  14. package/dist/auth/setup.d.ts +0 -1
  15. package/dist/auth/setup.js +0 -206
  16. package/dist/auth/token.d.ts +0 -1
  17. package/dist/auth/token.js +0 -2
  18. package/dist/blog.d.ts +0 -19
  19. package/dist/blog.js +0 -148
  20. package/dist/build/cli.d.ts +0 -1
  21. package/dist/build/cli.js +0 -2
  22. package/dist/build/component-libs.d.ts +0 -1
  23. package/dist/build/component-libs.js +0 -2
  24. package/dist/build/core.d.ts +0 -1
  25. package/dist/build/core.js +0 -2
  26. package/dist/build/desktop.d.ts +0 -1
  27. package/dist/build/desktop.js +0 -2
  28. package/dist/build/docs.d.ts +0 -1
  29. package/dist/build/docs.js +0 -2
  30. package/dist/build/frontend-static.d.ts +0 -16
  31. package/dist/build/frontend-static.js +0 -9
  32. package/dist/build/server.d.ts +0 -1
  33. package/dist/build/server.js +0 -2
  34. package/dist/build/stacks.d.ts +0 -1
  35. package/dist/build/stacks.js +0 -2
  36. package/dist/build/views.d.ts +0 -1
  37. package/dist/build/views.js +0 -2
  38. package/dist/build.d.ts +0 -9
  39. package/dist/build.js +0 -2
  40. package/dist/bump.d.ts +0 -1
  41. package/dist/bump.js +0 -8
  42. package/dist/cdn/invalidate-cache.d.ts +0 -1
  43. package/dist/cdn/invalidate-cache.js +0 -1
  44. package/dist/changelog.d.ts +0 -9
  45. package/dist/changelog.js +0 -3
  46. package/dist/check/ports.d.ts +0 -1
  47. package/dist/check/ports.js +0 -2
  48. package/dist/chunk-0c8sd1t6.js +0 -2
  49. package/dist/chunk-0g2nzhx9.js +0 -240
  50. package/dist/chunk-0gadhvn7.js +0 -3
  51. package/dist/chunk-0h27aa4r.js +0 -93
  52. package/dist/chunk-3peh8kqs.js +0 -851
  53. package/dist/chunk-62gdfav8.js +0 -3
  54. package/dist/chunk-6bk53y02.js +0 -3
  55. package/dist/chunk-78c5n3s2.js +0 -3
  56. package/dist/chunk-c74qv38e.js +0 -17
  57. package/dist/chunk-cdk2r2jd.js +0 -1
  58. package/dist/chunk-dbz9dp2h.js +0 -3
  59. package/dist/chunk-e142dheq.js +0 -3
  60. package/dist/chunk-ec4gky40.js +0 -3
  61. package/dist/chunk-h3d81wrg.js +0 -3
  62. package/dist/chunk-m3q0x4h0.js +0 -688
  63. package/dist/chunk-mqgbyhph.js +0 -5
  64. package/dist/chunk-n24m8prb.js +0 -3
  65. package/dist/chunk-n5eqwhck.js +0 -7
  66. package/dist/chunk-nsvnqv8y.js +0 -5
  67. package/dist/chunk-nty6mmx4.js +0 -283
  68. package/dist/chunk-s735m9mg.js +0 -1
  69. package/dist/chunk-tpb8jgsk.js +0 -7
  70. package/dist/chunk-tsbk5vne.js +0 -3
  71. package/dist/chunk-xg9xscqz.js +0 -1
  72. package/dist/chunk-y6e448he.js +0 -7
  73. package/dist/clean.d.ts +0 -1
  74. package/dist/clean.js +0 -2
  75. package/dist/commit.d.ts +0 -3
  76. package/dist/commit.js +0 -2
  77. package/dist/copy-types.d.ts +0 -1
  78. package/dist/copy-types.js +0 -3
  79. package/dist/database/seed.d.ts +0 -1
  80. package/dist/database/seed.js +0 -2
  81. package/dist/deploy/create-receipt-rule.d.ts +0 -1
  82. package/dist/deploy/create-receipt-rule.js +0 -2
  83. package/dist/deploy/index.d.ts +0 -1
  84. package/dist/deploy/index.js +0 -300
  85. package/dist/dev/api.d.ts +0 -1
  86. package/dist/dev/api.js +0 -6
  87. package/dist/dev/components.d.ts +0 -1
  88. package/dist/dev/components.js +0 -2
  89. package/dist/dev/dashboard-globals.d.ts +0 -4
  90. package/dist/dev/dashboard-globals.js +0 -3
  91. package/dist/dev/dashboard-utils.d.ts +0 -150
  92. package/dist/dev/dashboard-utils.js +0 -2
  93. package/dist/dev/dashboard.d.ts +0 -22
  94. package/dist/dev/dashboard.js +0 -8
  95. package/dist/dev/desktop.d.ts +0 -1
  96. package/dist/dev/desktop.js +0 -2
  97. package/dist/dev/docs.d.ts +0 -1
  98. package/dist/dev/docs.js +0 -2
  99. package/dist/dev/index.d.ts +0 -10
  100. package/dist/dev/index.js +0 -2
  101. package/dist/dev/migrate-watcher.d.ts +0 -1
  102. package/dist/dev/migrate-watcher.js +0 -2
  103. package/dist/dev/system-tray.d.ts +0 -1
  104. package/dist/dev/system-tray.js +0 -2
  105. package/dist/dev/views.d.ts +0 -1
  106. package/dist/dev/views.js +0 -2
  107. package/dist/discover-packages.d.ts +0 -18
  108. package/dist/discover-packages.js +0 -2
  109. package/dist/domains/add.d.ts +0 -1
  110. package/dist/domains/add.js +0 -2
  111. package/dist/domains/purchase.d.ts +0 -1
  112. package/dist/domains/purchase.js +0 -2
  113. package/dist/domains/remove.d.ts +0 -1
  114. package/dist/domains/remove.js +0 -2
  115. package/dist/examples.d.ts +0 -5
  116. package/dist/examples.js +0 -2
  117. package/dist/find-projects.d.ts +0 -1
  118. package/dist/find-projects.js +0 -2
  119. package/dist/fresh.d.ts +0 -1
  120. package/dist/fresh.js +0 -2
  121. package/dist/generate/action-types.d.ts +0 -1
  122. package/dist/generate/action-types.js +0 -8
  123. package/dist/generate/component-meta.d.ts +0 -1
  124. package/dist/generate/component-meta.js +0 -3
  125. package/dist/generate/custom-cli-file.d.ts +0 -1
  126. package/dist/generate/custom-cli-file.js +0 -4
  127. package/dist/generate/env-files.d.ts +0 -1
  128. package/dist/generate/env-files.js +0 -26
  129. package/dist/generate/ide-helpers.d.ts +0 -1
  130. package/dist/generate/ide-helpers.js +0 -3
  131. package/dist/generate/index.d.ts +0 -36
  132. package/dist/generate/index.js +0 -2
  133. package/dist/generate/lib-entries.d.ts +0 -1
  134. package/dist/generate/lib-entries.js +0 -3
  135. package/dist/generate/pantry-file.d.ts +0 -1
  136. package/dist/generate/pantry-file.js +0 -2
  137. package/dist/generate/symlink-core.d.ts +0 -1
  138. package/dist/generate/symlink-core.js +0 -2
  139. package/dist/generate/types.d.ts +0 -1
  140. package/dist/generate/types.js +0 -2
  141. package/dist/generate/vscode-custom-data.d.ts +0 -1
  142. package/dist/generate/vscode-custom-data.js +0 -3
  143. package/dist/generate/web-types.d.ts +0 -1
  144. package/dist/generate/web-types.js +0 -1
  145. package/dist/helpers/component-meta.d.ts +0 -26
  146. package/dist/helpers/component-meta.js +0 -2
  147. package/dist/helpers/index.d.ts +0 -4
  148. package/dist/helpers/index.js +0 -2
  149. package/dist/helpers/lib-entries.d.ts +0 -12
  150. package/dist/helpers/lib-entries.js +0 -2
  151. package/dist/helpers/package-json.d.ts +0 -2
  152. package/dist/helpers/package-json.js +0 -43
  153. package/dist/helpers/utils.d.ts +0 -23
  154. package/dist/helpers/utils.js +0 -2
  155. package/dist/helpers/vscode-custom-data.d.ts +0 -3
  156. package/dist/helpers/vscode-custom-data.js +0 -2
  157. package/dist/index.d.ts +0 -49
  158. package/dist/index.js +0 -2
  159. package/dist/key-generate.d.ts +0 -1
  160. package/dist/key-generate.js +0 -2
  161. package/dist/lint/fix.d.ts +0 -1
  162. package/dist/lint/fix.js +0 -3
  163. package/dist/lint/index.d.ts +0 -1
  164. package/dist/lint/index.js +0 -3
  165. package/dist/lint/lint.d.ts +0 -14
  166. package/dist/lint/lint.js +0 -2
  167. package/dist/make-command.d.ts +0 -10
  168. package/dist/make-command.js +0 -45
  169. package/dist/make-job.d.ts +0 -5
  170. package/dist/make-job.js +0 -129
  171. package/dist/make-policy.d.ts +0 -10
  172. package/dist/make-policy.js +0 -94
  173. package/dist/make-resource.d.ts +0 -10
  174. package/dist/make-resource.js +0 -113
  175. package/dist/make.d.ts +0 -52
  176. package/dist/make.js +0 -2
  177. package/dist/migrate/database.d.ts +0 -1
  178. package/dist/migrate/database.js +0 -2
  179. package/dist/migrate/fresh.d.ts +0 -1
  180. package/dist/migrate/fresh.js +0 -2
  181. package/dist/orm/base.d.ts +0 -1
  182. package/dist/orm/base.js +0 -2
  183. package/dist/orm/test.d.ts +0 -1
  184. package/dist/orm/test.js +0 -1
  185. package/dist/prepublish.d.ts +0 -1
  186. package/dist/prepublish.js +0 -2
  187. package/dist/queue/clear.d.ts +0 -1
  188. package/dist/queue/clear.js +0 -2
  189. package/dist/queue/dlq-purge.d.ts +0 -1
  190. package/dist/queue/dlq-purge.js +0 -2
  191. package/dist/queue/dlq-retry.d.ts +0 -1
  192. package/dist/queue/dlq-retry.js +0 -2
  193. package/dist/queue/dlq.d.ts +0 -1
  194. package/dist/queue/dlq.js +0 -5
  195. package/dist/queue/failed.d.ts +0 -1
  196. package/dist/queue/failed.js +0 -5
  197. package/dist/queue/flush.d.ts +0 -1
  198. package/dist/queue/flush.js +0 -3
  199. package/dist/queue/inspect.d.ts +0 -1
  200. package/dist/queue/inspect.js +0 -8
  201. package/dist/queue/list.d.ts +0 -1
  202. package/dist/queue/list.js +0 -5
  203. package/dist/queue/monitor.d.ts +0 -1
  204. package/dist/queue/monitor.js +0 -7
  205. package/dist/queue/pause.d.ts +0 -1
  206. package/dist/queue/pause.js +0 -2
  207. package/dist/queue/quarantine.d.ts +0 -1
  208. package/dist/queue/quarantine.js +0 -3
  209. package/dist/queue/resume.d.ts +0 -1
  210. package/dist/queue/resume.js +0 -2
  211. package/dist/queue/retry.d.ts +0 -1
  212. package/dist/queue/retry.js +0 -2
  213. package/dist/queue/schedule-list.d.ts +0 -1
  214. package/dist/queue/schedule-list.js +0 -5
  215. package/dist/queue/schedule.d.ts +0 -1
  216. package/dist/queue/schedule.js +0 -2
  217. package/dist/queue/status.d.ts +0 -1
  218. package/dist/queue/status.js +0 -5
  219. package/dist/queue/table.d.ts +0 -1
  220. package/dist/queue/table.js +0 -2
  221. package/dist/queue/unquarantine.d.ts +0 -1
  222. package/dist/queue/unquarantine.js +0 -2
  223. package/dist/queue/work.d.ts +0 -1
  224. package/dist/queue/work.js +0 -2
  225. package/dist/release.d.ts +0 -1
  226. package/dist/release.js +0 -3
  227. package/dist/route/list.d.ts +0 -1
  228. package/dist/route/list.js +0 -3
  229. package/dist/run-action.d.ts +0 -2
  230. package/dist/run-action.js +0 -2
  231. package/dist/saas/setup.d.ts +0 -1
  232. package/dist/saas/setup.js +0 -2
  233. package/dist/scaffold-crud.d.ts +0 -25
  234. package/dist/scaffold-crud.js +0 -87
  235. package/dist/schedule/run.d.ts +0 -1
  236. package/dist/schedule/run.js +0 -2
  237. package/dist/search/flush.d.ts +0 -1
  238. package/dist/search/flush.js +0 -2
  239. package/dist/search/import.d.ts +0 -1
  240. package/dist/search/import.js +0 -2
  241. package/dist/search/settings-list.d.ts +0 -1
  242. package/dist/search/settings-list.js +0 -2
  243. package/dist/search/settings.d.ts +0 -1
  244. package/dist/search/settings.js +0 -2
  245. package/dist/serve/api.d.ts +0 -1
  246. package/dist/serve/api.js +0 -2
  247. package/dist/setup/index.d.ts +0 -1
  248. package/dist/setup/index.js +0 -2
  249. package/dist/setup/ssl.d.ts +0 -38
  250. package/dist/setup/ssl.js +0 -2
  251. package/dist/stacks.d.ts +0 -4
  252. package/dist/stacks.js +0 -2
  253. package/dist/templates.d.ts +0 -28
  254. package/dist/templates.js +0 -2
  255. package/dist/test/feature.d.ts +0 -1
  256. package/dist/test/feature.js +0 -2
  257. package/dist/test/index.d.ts +0 -1
  258. package/dist/test/index.js +0 -2
  259. package/dist/test/ui.d.ts +0 -1
  260. package/dist/test/ui.js +0 -2
  261. package/dist/test/unit.d.ts +0 -1
  262. package/dist/test/unit.js +0 -2
  263. package/dist/typecheck.d.ts +0 -1
  264. package/dist/typecheck.js +0 -2
  265. package/dist/types.d.ts +0 -3
  266. package/dist/types.js +0 -2
  267. package/dist/upgrade/binary.d.ts +0 -1
  268. package/dist/upgrade/binary.js +0 -2
  269. package/dist/upgrade/bun.d.ts +0 -1
  270. package/dist/upgrade/bun.js +0 -1
  271. package/dist/upgrade/dependencies.d.ts +0 -1
  272. package/dist/upgrade/dependencies.js +0 -2
  273. package/dist/upgrade/framework-utils.d.ts +0 -150
  274. package/dist/upgrade/framework-utils.js +0 -2
  275. package/dist/upgrade/framework.d.ts +0 -1
  276. package/dist/upgrade/framework.js +0 -7
  277. package/dist/upgrade/index.d.ts +0 -1
  278. package/dist/upgrade/index.js +0 -2
  279. package/dist/upgrade/packages.d.ts +0 -14
  280. package/dist/upgrade/packages.js +0 -12
  281. package/dist/upgrade/shell.d.ts +0 -1
  282. package/dist/upgrade/shell.js +0 -5
  283. package/dist/upgrade.d.ts +0 -7
  284. package/dist/upgrade.js +0 -2
@@ -1,7 +0,0 @@
1
- // @bun
2
- import D from"process";import{log as O}from"@stacksjs/logging";import{Job as P,FailedJob as Q}from"@stacksjs/orm";import{getActiveJobCount as V,isWorkerRunning as X}from"@stacksjs/queue";var U=_(),G=U.queue,Y=Number(U.interval)||2000,H=!0;D.on("SIGINT",()=>{H=!1,console.log(`
3
-
4
- Monitoring stopped.`),D.exit(0)});D.on("SIGTERM",()=>{H=!1,D.exit(0)});async function Z(){let x=G?await P.where("queue",G).get():await P.all(),z=G?await Q.where("queue",G).get():await Q.all(),B=Math.floor(Date.now()/1000),E=0,L=0,M=0;for(let K of x)if(K.reserved_at)L++;else if(K.available_at&&Number(K.available_at)>B)M++;else E++;return{pending:E,processing:L,delayed:M,failed:z.length,total:x.length,workerRunning:X(),activeJobs:V()}}async function T(){let x=await Z(),z=new Date().toLocaleTimeString();if(console.clear(),console.log("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),console.log("\u2502 Queue Monitor \u2502"),console.log("\u2502 Press Ctrl+C to exit \u2502"),console.log("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"),console.log(`\u2502 Last Updated: ${z.padEnd(48)} \u2502`),console.log(`\u2502 Queue Filter: ${(G||"All Queues").padEnd(48)} \u2502`),console.log("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"),console.log("\u2502 \u2502"),console.log(`\u2502 Pending Jobs: ${String(x.pending).padStart(8)} \u2502`),console.log(`\u2502 Processing Jobs: ${String(x.processing).padStart(8)} \u2502`),console.log(`\u2502 Delayed Jobs: ${String(x.delayed).padStart(8)} \u2502`),console.log(`\u2502 Failed Jobs: ${String(x.failed).padStart(8)} \u2502`),console.log("\u2502 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2502"),console.log(`\u2502 Total Jobs: ${String(x.total).padStart(8)} \u2502`),console.log("\u2502 \u2502"),console.log("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"),console.log("\u2502 Worker Status \u2502"),console.log("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"),console.log(`\u2502 Worker Running: ${(x.workerRunning?"Yes":"No").padEnd(8)} \u2502`),console.log(`\u2502 Active Jobs: ${String(x.activeJobs).padStart(8)} \u2502`),console.log("\u2502 \u2502"),console.log("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"),x.failed>0)console.log(`
5
- \u26A0\uFE0F Warning: ${x.failed} failed job(s) - run 'buddy queue:failed' for details`);if(!x.workerRunning&&x.pending>0)console.log(`
6
- \u26A0\uFE0F Warning: Worker not running but ${x.pending} job(s) pending - run 'buddy queue:work'`)}try{O.info(`Starting queue monitor...
7
- `),await T();while(H)if(await new Promise((x)=>setTimeout(x,Y)),H)await T()}catch(x){O.error("Monitor error:",x),D.exit(1)}function _(){let x={};return D.argv.forEach((z)=>{if(z.startsWith("--")){let[B,E]=z.slice(2).split("=");if(B&&E)x[B]=E;else if(B)x[B]="true"}}),x}
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import r from"process";import{log as s}from"@stacksjs/logging";import{pauseQueue as n}from"@stacksjs/queue";var o=f(),t=o.queue;if(!t)s.error("Usage: buddy queue:pause --queue=<name> [--for=300]"),r.exit(1);var c=o.for?Number.parseInt(o.for,10):300;try{await n(t,c),s.success(`Paused queue '${t}' for ${c}s`),r.exit(0)}catch(e){s.error("Failed to pause queue",e),r.exit(1)}function f(){let e={};return r.argv.forEach((u)=>{if(u.startsWith("--")){let[i,a]=u.slice(2).split("=");if(i&&a)e[i]=a}}),e}
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import B from"process";import{log as F}from"@stacksjs/logging";import{listQuarantined as L,quarantineJob as M}from"@stacksjs/queue";var G=O();try{if(G.add){let x=G.add;await M(x),F.success(`Quarantined ${x}`),B.exit(0)}let z=await L();if(z.length===0)console.log("\u2713 No jobs currently quarantined"),B.exit(0);console.log("\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),console.log("\u2502 ID \u2502 Job Name \u2502 Payload Hash \u2502 Failures \u2502 Quarantined At \u2502"),console.log("\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524");for(let x of z){let C=String(x.id).padEnd(3),E=(x.job_name||"?").substring(0,32).padEnd(32),H=(x.payload_hash||"?").substring(0,16).padEnd(16),I=String(x.failure_count??0).padEnd(8),K=(x.quarantined_at||"N/A").substring(0,24).padEnd(24);console.log(`\u2502 ${C} \u2502 ${E} \u2502 ${H} \u2502 ${I} \u2502 ${K} \u2502`)}console.log("\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"),console.log(`
3
- ${z.length} quarantined entrie(s). Use \`queue:unquarantine <JobName>\` to lift.`),B.exit(0)}catch(z){F.error("Failed to handle queue:quarantine",z),B.exit(1)}function O(){let z={};return B.argv.forEach((x)=>{if(x.startsWith("--")){let[C,E]=x.slice(2).split("=");if(C&&E)z[C]=E}}),z}
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import r from"process";import{log as s}from"@stacksjs/logging";import{resumeQueue as c}from"@stacksjs/queue";var n=a(),t=n.queue;if(!t)s.error("Usage: buddy queue:resume --queue=<name>"),r.exit(1);try{await c(t),s.success(`Resumed queue '${t}'`),r.exit(0)}catch(e){s.error("Failed to resume queue",e),r.exit(1)}function a(){let e={};return r.argv.forEach((u)=>{if(u.startsWith("--")){let[o,i]=u.slice(2).split("=");if(o&&i)e[o]=i}}),e}
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import i from"process";import{log as r}from"@stacksjs/logging";import{executeFailedJobs as n,retryFailedJob as d}from"@stacksjs/queue";var l=f(),a=l.id,u=l.all==="true";try{if(u)r.info("Retrying all failed jobs..."),await n(),r.success("All failed jobs have been queued for retry");else if(a){let e=Number.parseInt(a,10);if(Number.isNaN(e))r.error("Invalid job ID provided"),i.exit(1);r.info(`Retrying failed job ${e}...`),await d(e),r.success(`Failed job ${e} has been queued for retry`)}else r.warn("Please provide a job ID or use --all to retry all failed jobs"),r.info("Usage: buddy queue:retry <id> or buddy queue:retry --all"),i.exit(1);i.exit(0)}catch(e){r.error("Failed to retry job(s)",e),i.exit(1)}function f(){let e={};return i.argv.forEach((t)=>{if(t.startsWith("--")){let[o,s]=t.slice(2).split("=");if(o&&s)e[o]=s;else if(o)e[o]="true"}}),e}
@@ -1 +0,0 @@
1
- export {};
@@ -1,5 +0,0 @@
1
- // @bun
2
- import n from"process";import{log as s}from"@stacksjs/logging";import{discoverJobs as d,getScheduledJobs as i}from"@stacksjs/queue";try{s.info(`Discovering scheduled jobs...
3
- `),await d();let o=i();if(o.length===0)s.info("No scheduled jobs found."),s.info('Tip: Add a "rate" or "schedule" property to your job configuration.'),n.exit(0);console.log("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),console.log("\u2502 Job Name \u2502 Schedule \u2502 Queue \u2502 Tries \u2502"),console.log("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524");for(let e of o){let l=e.name.substring(0,48).padEnd(48),r=(e.config.rate||e.config.schedule||"N/A").substring(0,21).padEnd(21),t=(e.config.queue||"default").substring(0,9).padEnd(9),c=String(e.config.tries||3).padStart(7);console.log(`\u2502 ${l} \u2502 ${r} \u2502 ${t} \u2502${c} \u2502`)}console.log("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"),console.log(`
4
- Total: ${o.length} scheduled job(s)`),console.log(`
5
- Schedule Formats:`),console.log(' \u2022 Cron: "* * * * *" (minute hour day month dayOfWeek)'),console.log(" \u2022 Presets: @hourly, @daily, @weekly, @monthly"),console.log(" \u2022 Every: Every.Minute, Every.Hour, Every.Day"),n.exit(0)}catch(o){s.error("Failed to list scheduled jobs:",o),n.exit(1)}
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import e from"process";import{log as r}from"@stacksjs/logging";import{startScheduler as o}from"@stacksjs/queue";r.info("Starting job scheduler...");try{await o(),r.success("Scheduler is running. Press Ctrl+C to stop."),await new Promise(()=>{})}catch(t){r.error("Failed to start scheduler:",t),e.exit(1)}
@@ -1 +0,0 @@
1
- export {};
@@ -1,5 +0,0 @@
1
- // @bun
2
- import H from"process";import{log as V}from"@stacksjs/logging";import{Job as W,FailedJob as X}from"@stacksjs/orm";var h=A(),K=h.queue;try{V.info(`Fetching queue status...
3
- `);let C=K?await W.where("queue",K).get():await W.all(),G=K?await X.where("queue",K).get():await X.all(),B=new Map;for(let x of C){let z=x.queue||"default";if(!B.has(z))B.set(z,{pending:0,processing:0,delayed:0});let I=B.get(z),L=Math.floor(Date.now()/1000);if(x.reserved_at)I.processing++;else if(x.available_at&&Number(x.available_at)>L)I.delayed++;else I.pending++}let E=new Map;for(let x of G){let z=x.queue||"default";E.set(z,(E.get(z)||0)+1)}console.log("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"),console.log("\u2502 Queue \u2502 Pending \u2502 Processing \u2502 Delayed \u2502 Failed \u2502"),console.log("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524");let M=new Set([...B.keys(),...E.keys()]);if(M.size===0)console.log("\u2502 No queues found \u2502");else for(let x of M){let z=B.get(x)||{pending:0,processing:0,delayed:0},I=E.get(x)||0,L=x.substring(0,48).padEnd(48),Y=String(z.pending).padStart(8),Z=String(z.processing).padStart(10),_=String(z.delayed).padStart(8),$=String(I).padStart(6);console.log(`\u2502 ${L} \u2502${Y} \u2502${Z} \u2502${_} \u2502${$} \u2502`)}console.log("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518");let O=Array.from(B.values()).reduce((x,z)=>x+z.pending,0),R=Array.from(B.values()).reduce((x,z)=>x+z.processing,0),T=Array.from(B.values()).reduce((x,z)=>x+z.delayed,0),U=Array.from(E.values()).reduce((x,z)=>x+z,0);console.log(`
4
- Summary:`),console.log(` Pending: ${O}`),console.log(` Processing: ${R}`),console.log(` Delayed: ${T}`),console.log(` Failed: ${U}`),console.log(` Total: ${O+R+T+U}`),H.exit(0)}catch(C){let G=C instanceof Error?C.message:String(C);if(/no such table:\s*(?:jobs|failed_jobs)\b/i.test(G))H.stdout.write(`Queue tables are not set up yet.
5
- `),H.stdout.write("Run `buddy queue:table` to create the migrations, then `buddy migrate` to apply them.\n"),H.exit(0);V.error("Failed to get queue status",C),H.exit(1)}function A(){let C={};return H.argv.forEach((G)=>{if(G.startsWith("--")){let[B,E]=G.slice(2).split("=");if(B&&E)C[B]=E}}),C}
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import q from"process";import{createJobsMigration as v}from"@stacksjs/database";import{log as w}from"@stacksjs/logging";var m=await v();if(m?.isErr)console.error(m.error),w.error("generateMigrations failed",m.error),q.exit(1);q.exit(0);
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import t from"process";import{log as e}from"@stacksjs/logging";import{unquarantineJob as s}from"@stacksjs/queue";var c=u(),o=c.name;if(!o)e.error("Usage: buddy queue:unquarantine --name=<JobName>"),t.exit(1);try{await s(o),e.success(`Lifted quarantine for ${o}`),t.exit(0)}catch(r){e.error("Failed to unquarantine",r),t.exit(1)}function u(){let r={};return t.argv.forEach((i)=>{if(i.startsWith("--")){let[n,a]=i.slice(2).split("=");if(n&&a)r[n]=a}}),r}
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import m from"process";import{log as x}from"@stacksjs/logging";import{startProcessor as Y,stopProcessor as Z}from"@stacksjs/queue";m.on("unhandledRejection",(b)=>{x.error(`Unhandled Rejection in queue worker: ${b}`)});m.on("uncaughtException",(b)=>{x.error(`Uncaught Exception in queue worker: ${b.message}`)});var F=Number(m.env.STACKS_QUEUE_SHUTDOWN_GRACE_MS)||1e4,J=!1;async function Q(b){if(J)return;J=!0,x.info(`[queue] Worker received ${b}, draining in-flight jobs (max ${F/1000}s)\u2026`),setTimeout(()=>{x.warn("[queue] Drain window exceeded \u2014 forcing worker exit."),m.exit(1)},F+2000).unref();try{await Z({graceMs:F})}catch(z){x.error("[queue] Error while draining worker on shutdown:",z)}m.exit(0)}m.on("SIGTERM",()=>{Q("SIGTERM")});m.on("SIGINT",()=>{Q("SIGINT")});var V=K(),$=V.queue,X=Number(V.concurrency)||1;x.info(`Starting queue worker with ${X} concurrent worker(s)...`);var L=await Y($,{concurrency:X});if(L.isErr)x.error("Failed to start queue worker:",L.error),m.exit(1);x.success("Queue worker started successfully!");await new Promise(()=>{});function K(){let b={};return m.argv.forEach((z)=>{if(z.startsWith("--")){let[B,I]=z.slice(2).split("=");if(B&&I)b[B]=I;else if(B)b[B]="true"}}),b}
package/dist/release.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/dist/release.js DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env bun
2
- // @bun
3
- import"./chunk-0c8sd1t6.js";import"./chunk-cdk2r2jd.js";import"./chunk-n5eqwhck.js";import"./chunk-62gdfav8.js";import"./chunk-78c5n3s2.js";import"./chunk-tpb8jgsk.js";import"./chunk-tsbk5vne.js";import"./chunk-s735m9mg.js";import"./chunk-6bk53y02.js";import{Jb as C}from"./chunk-0gadhvn7.js";import"./chunk-h3d81wrg.js";import{parseOptions as G}from"@stacksjs/cli";import{app as H}from"@stacksjs/config";import{Action as q}from"@stacksjs/enums";import{log as E}from"@stacksjs/logging";import{projectPath as I}from"@stacksjs/path";var J=G()??{},z={};for(let[B,F]of Object.entries(J)){if(B==="--"||B==="_")continue;z[B]=F}var K=z.dryRun===!0||z.dryRun==="true",L=K?[q.GenerateLibraryEntries,q.Bump]:[q.GenerateLibraryEntries,q.LintFix,q.Bump],x=await C(L,{cwd:I(),...z});if(x&&x.isErr)E.error(`Release failed: ${x.error?.message??String(x.error)}`),process.exit(1);E.success(`Successfully released ${H.name}`);
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import m from"process";import{italic as l,log as c}from"@stacksjs/cli";import{route as g}from"@stacksjs/router";var f=["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"];function p(r){if(typeof r==="string")return r;if(typeof r==="function")return r.name?`[fn ${r.name}]`:"[fn]";return"[handler]"}function o(r,t){if(r.length>=t)return r;return r+" ".repeat(t-r.length)}function i(r){m.stdout.write(`${r}
3
- `)}async function w(){try{await g.importRoutes()}catch(e){return{isErr:!0,error:e}}let r=g.routes??[];if(r.length===0)return i(l("No routes registered.")),{};let t=r.map((e)=>({method:String(e.method||"GET").toUpperCase(),uri:String(e.path||e.uri||""),handler:p(e.handler??e.action??""),name:String(e.name||""),middleware:Array.isArray(e.middleware)?e.middleware.join(","):String(e.middleware||"")}));t.sort((e,h)=>{let s=f.indexOf(e.method),a=f.indexOf(h.method);if(s!==a)return(s===-1?99:s)-(a===-1?99:a);return e.uri.localeCompare(h.uri)});let n={method:Math.max(6,...t.map((e)=>e.method.length)),uri:Math.max(3,...t.map((e)=>e.uri.length)),handler:Math.max(7,...t.map((e)=>e.handler.length)),name:Math.max(4,...t.map((e)=>e.name.length))},d=[o("METHOD",n.method),o("URI",n.uri),o("HANDLER",n.handler),o("NAME",n.name),"MIDDLEWARE"].join(" ");i(""),i(d),i("-".repeat(d.length));for(let e of t)i([o(e.method,n.method),o(e.uri,n.uri),o(e.handler,n.handler),o(e.name||"-",n.name),e.middleware||"-"].join(" "));return i(""),i(l(`${t.length} route${t.length===1?"":"s"} registered.`)),{}}var u=await w();if(u?.isErr)console.error(u.error),c.error("Route lists failed",u.error),m.exit(1);m.exit(0);
@@ -1,2 +0,0 @@
1
- // Minimal export for runAction to optimize import performance
2
- export { runAction } from './helpers/utils';
@@ -1,2 +0,0 @@
1
- // @bun
2
- import"./chunk-h3d81wrg.js";export{i as runAction};
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import o from"process";import{log as e}from"@stacksjs/logging";import{createStripeProduct as t}from"@stacksjs/payments";var r=await t();if(r?.isErr)console.error(r.error),e.error("generateMigrations failed",r.error),o.exit(1);
@@ -1,25 +0,0 @@
1
- import type { MakeOptions } from '@stacksjs/types';
2
- export declare function parseFields(input: string | undefined): CrudField[];
3
- /**
4
- * Generate a complete CRUD stack for a resource:
5
- * - app/Models/<Model>.ts (defineModel definition)
6
- * - database/migrations/<ts>-create-<table>-table.ts
7
- * - app/Actions/<Model>{Index,Show,Store,Update,Destroy}Action.ts
8
- *
9
- * Honors `--dry-run` via the shared `isDryRunActive()` flag, so users
10
- * can preview every file before committing to disk.
11
- *
12
- * @example
13
- * buddy scaffold:crud Post --fields=title:string,body:text,published:boolean
14
- */
15
- export declare function scaffoldCrud(name: string, options: MakeOptions & { fields?: string }): Promise<void>;
16
- /**
17
- * Field declaration for CRUD scaffolding. Examples:
18
- *
19
- * --fields=title,body
20
- * --fields=title:string,body:text,published:boolean,views:number
21
- */
22
- export declare interface CrudField {
23
- name: string
24
- type: 'string' | 'text' | 'number' | 'boolean' | 'date' | 'json'
25
- }
@@ -1,87 +0,0 @@
1
- // @bun
2
- import{r as x}from"./chunk-c74qv38e.js";import"./chunk-nty6mmx4.js";import"./chunk-s735m9mg.js";import"./chunk-0gadhvn7.js";import"./chunk-h3d81wrg.js";import{italic as I}from"@stacksjs/cli";import{log as W}from"@stacksjs/logging";import{path as Z}from"@stacksjs/path";import{writeTextFile as L}from"@stacksjs/storage";var P={str:"string",string:"string",varchar:"string",text:"text",longtext:"text",int:"number",integer:"number",number:"number",num:"number",bool:"boolean",boolean:"boolean",date:"date",datetime:"date",json:"json"};function U(G){if(!G)return[];let H=G.split(",").map((q)=>q.trim()).filter(Boolean),J=[];for(let q of H){let[K,O="string"]=q.split(":"),Q=K?.trim();if(!Q)continue;let B=P[O.trim().toLowerCase()]??"string";J.push({name:Q,type:B})}return J}function V(G){if(!G)return G;let H=G.toLowerCase();if(H.endsWith("s")||H.endsWith("x")||H.endsWith("z")||H.endsWith("ch")||H.endsWith("sh"))return`${G}es`;if(H.endsWith("y")&&!/[aeiou]y$/.test(H))return`${G.slice(0,-1)}ies`;return`${G}s`}function v(G){return G.replace(/(^|[-_\s])(\w)/g,(H,J,q)=>String(q).toUpperCase())}function X(G){return G.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()}function Y(G){if(G.length===0)return" title: { type: 'string', fillable: true, validation: { rule: schema.string().required() } },";return G.map((H)=>{let J=H.type,q=J==="number"?"schema.number()":J==="boolean"?"schema.boolean()":J==="date"?"schema.date()":J==="json"?"schema.object({})":"schema.string()",K=J==="number"?"number":J==="boolean"?"boolean":J==="date"?"date":J==="json"?"json":"string";return` ${H.name}: { type: '${K}', fillable: true, validation: { rule: ${q} } },`}).join(`
3
- `)}function _(G){if(G.length===0)return" .addColumn('title', 'varchar(255)', col => col.notNull())";return G.map((H)=>{switch(H.type){case"number":return` .addColumn('${H.name}', 'integer')`;case"boolean":return` .addColumn('${H.name}', 'boolean', col => col.defaultTo(false))`;case"text":return` .addColumn('${H.name}', 'text')`;case"date":return` .addColumn('${H.name}', 'timestamp')`;case"json":return` .addColumn('${H.name}', 'text')`;default:return` .addColumn('${H.name}', 'varchar(255)')`}}).join(`
4
- `)}function D(G,H,J){let q=v(G);switch(H){case"Index":return`import { Action } from '@stacksjs/actions'
5
- import ${q} from '~/app/Models/${q}'
6
-
7
- export default new Action({
8
- name: '${q}IndexAction',
9
- description: 'List ${V(q)}',
10
-
11
- async handle() {
12
- return await ${q}.all()
13
- },
14
- })`;case"Show":return`import { Action } from '@stacksjs/actions'
15
- import ${q} from '~/app/Models/${q}'
16
-
17
- export default new Action({
18
- name: '${q}ShowAction',
19
- description: 'Show a single ${q}',
20
-
21
- async handle(request) {
22
- const id = Number(request.get('id'))
23
- return await ${q}.findOrFail(id)
24
- },
25
- })`;case"Store":{let K=(J.length>0?J:[{name:"title",type:"string"}]).map((O)=>`'${O.name}'`).join(", ");return`import { Action } from '@stacksjs/actions'
26
- import ${q} from '~/app/Models/${q}'
27
-
28
- export default new Action({
29
- name: '${q}StoreAction',
30
- description: 'Create a new ${q}',
31
-
32
- async handle(request) {
33
- const data = request.only([${K}])
34
- return await ${q}.create(data)
35
- },
36
- })`}case"Update":{let K=(J.length>0?J:[{name:"title",type:"string"}]).map((O)=>`'${O.name}'`).join(", ");return`import { Action } from '@stacksjs/actions'
37
- import ${q} from '~/app/Models/${q}'
38
-
39
- export default new Action({
40
- name: '${q}UpdateAction',
41
- description: 'Update an existing ${q}',
42
-
43
- async handle(request) {
44
- const id = Number(request.get('id'))
45
- const data = request.only([${K}])
46
- return await ${q}.update(id, data)
47
- },
48
- })`}case"Destroy":return`import { Action } from '@stacksjs/actions'
49
- import ${q} from '~/app/Models/${q}'
50
-
51
- export default new Action({
52
- name: '${q}DestroyAction',
53
- description: 'Delete a ${q}',
54
-
55
- async handle(request) {
56
- const id = Number(request.get('id'))
57
- const deleted = await ${q}.delete(id)
58
- return { deleted }
59
- },
60
- })`}}function E(G,H){return`import { defineModel } from '@stacksjs/orm'
61
- import { schema } from '@stacksjs/validation'
62
-
63
- export default defineModel({
64
- name: '${v(G)}',
65
- table: '${V(X(G))}',
66
- attributes: {
67
- ${Y(H)}
68
- },
69
- traits: { useTimestamps: true, useUuid: false },
70
- } as const)
71
- `}function N(G,H){return`import type { Database } from '@stacksjs/database'
72
- import { sql } from '@stacksjs/database'
73
-
74
- export async function up(db: Database<any>) {
75
- await db.schema
76
- .createTable('${V(X(G))}')
77
- .addColumn('id', 'serial', col => col.primaryKey())
78
- ${_(H)}
79
- .addColumn('created_at', 'timestamp', col => col.notNull().defaultTo(sql.raw('CURRENT_TIMESTAMP')))
80
- .addColumn('updated_at', 'timestamp')
81
- .execute()
82
- }
83
- `}async function $(G,H){if(x()){let J=H.split(`
84
- `);W.info(`[dry-run] would write ${G} (${J.length} lines)`),process.stdout.write(`${J.slice(0,60).map((q)=>` ${q}`).join(`
85
- `)}
86
-
87
- `);return}await L({path:G,data:H})}async function h(G,H){let J=v(G);if(!J)throw Error("scaffold:crud requires a non-empty resource name");let q=U(H.fields);W.info(`Scaffolding CRUD for ${I(J)} (${q.length||"no"} fields)`),await $(Z.userModelsPath(`${J}.ts`),E(J,q));let O=`${Date.now().toString()}-create-${V(X(G))}-table.ts`;await $(Z.userMigrationsPath(O),N(G,q));for(let Q of["Index","Show","Store","Update","Destroy"])await $(Z.userActionsPath(`${J}${Q}Action.ts`),D(G,Q,q));W.success(`CRUD scaffold complete: model + migration + 5 actions for ${J}`),W.info(`Next: register \`route.resource('${V(X(G))}', '${J}')\` in routes/api.ts`)}export{h as scaffoldCrud,U as parseFields};
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{log as o}from"@stacksjs/logging";import{runScheduler as e}from"@stacksjs/scheduler";var r=await e();if(r?.isErr)console.error(r.error),o.error("Schedule run failed",r.error);
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import r from"process";import{parseOptions as e}from"@stacksjs/cli";import{log as s}from"@stacksjs/logging";import{flushModelDocuments as i}from"@stacksjs/search-engine";var t=e(),n=t.model,o=await i(n);if(o?.isErr)console.error(o.error),s.error("Flushing search engine failed",o.error);r.exit(0);
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import r from"process";import{parseOptions as t}from"@stacksjs/cli";import{log as e}from"@stacksjs/logging";import{importModelDocuments as i}from"@stacksjs/search-engine";var s=t(),m=s.model,o=await i(m);if(o?.isErr)console.error(o.error),e.error("Import to search engine failed",o.error);r.exit(0);
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import o from"process";import{parseOptions as t}from"@stacksjs/cli";import{log as i}from"@stacksjs/logging";import{listIndexSettings as s}from"@stacksjs/search-engine";var e=t(),n=e.model,r=await s(n);if(r?.isErr)console.error(r.error),i.error("Listing index settings failed",r.error);o.exit(0);
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import o from"process";import{log as e}from"@stacksjs/logging";import{updateIndexSettings as t}from"@stacksjs/search-engine";var r=await t();if(r?.isErr)console.error(r.error),e.error("generateMigrations failed",r.error);o.exit(0);
@@ -1 +0,0 @@
1
- export {};
package/dist/serve/api.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{existsSync as O}from"fs";import{dirname as Q,join as R}from"path";import b from"process";import{config as T}from"@stacksjs/config";import{log as B}from"@stacksjs/logging";import{frameworkPath as U}from"@stacksjs/path";import{route as C}from"@stacksjs/router";function V(z){let A=U(`defaults/${z}`);if(O(A))return A;try{let N=Bun.resolveSync("@stacksjs/defaults/package.json",b.cwd());return R(Q(N),z)}catch{return A}}var W=b.env.APP_ENV==="production"||b.env.NODE_ENV==="production",E=Number(b.env.PORT)||T.ports?.api||3008,H=b.env.HOST||(W?"0.0.0.0":"127.0.0.1");B.info("[Stacks API] Starting server...");B.info(`[Stacks API] Environment: ${b.env.APP_ENV||"development"}`);var X=await import(V("app/Middleware/Cors.ts")),Y=X.default;C.use(Y.toRouterHandler());await C.importRoutes();var Z=["production","staging","development"].includes((b.env.APP_ENV||"").toLowerCase()),_=await C.serve({port:E,hostname:H,reusePort:Z});b.on("SIGTERM",()=>{let z=Number(b.env.SHUTDOWN_GRACE_MS)||15000;setTimeout(()=>b.exit(0),z).unref(),Promise.resolve(_?.stop()).then(()=>b.exit(0))});B.info(`[Stacks API] Server running at http://${H}:${E}`);
@@ -1 +0,0 @@
1
- export * from './ssl';
@@ -1,2 +0,0 @@
1
- // @bun
2
- import"../chunk-cdk2r2jd.js";import{Fa as a,Ga as b,Ha as c,Ia as d,Ja as e,Ka as f,La as g,Ma as h}from"../chunk-n5eqwhck.js";import"../chunk-h3d81wrg.js";export{e as trustCertificate,c as sslCertificatesExist,g as setupSSL,h as isSSLSetupComplete,a as isDomainInHosts,d as isCertificateTrusted,f as generateCertificates,b as addDomainToHosts};
@@ -1,38 +0,0 @@
1
- import type { CliOptions } from '@stacksjs/types';
2
- /**
3
- * Check if a domain is in the hosts file
4
- */
5
- export declare function isDomainInHosts(domain: string): boolean;
6
- /**
7
- * Add a domain to the hosts file (requires sudo on Unix)
8
- */
9
- export declare function addDomainToHosts(domain: string, verbose?: boolean): Promise<boolean>;
10
- /**
11
- * Check if SSL certificates exist for a domain
12
- */
13
- export declare function sslCertificatesExist(domain: string): boolean;
14
- /**
15
- * Check if a certificate is trusted (macOS only for now)
16
- */
17
- export declare function isCertificateTrusted(domain: string): boolean;
18
- /**
19
- * Trust a certificate on macOS
20
- */
21
- export declare function trustCertificate(domain: string, verbose?: boolean): Promise<boolean>;
22
- /**
23
- * Generate SSL certificates for a domain using rpx
24
- */
25
- export declare function generateCertificates(domain: string, verbose?: boolean): Promise<boolean>;
26
- /**
27
- * Complete SSL setup for development
28
- */
29
- export declare function setupSSL(options?: SSLSetupOptions): Promise<boolean>;
30
- /**
31
- * Check if SSL setup is complete for a domain
32
- */
33
- export declare function isSSLSetupComplete(domain: string): boolean;
34
- export declare interface SSLSetupOptions extends CliOptions {
35
- domain?: string
36
- skipHosts?: boolean
37
- skipTrust?: boolean
38
- }
package/dist/setup/ssl.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Fa as a,Ga as b,Ha as c,Ia as d,Ja as e,Ka as f,La as g,Ma as h}from"../chunk-n5eqwhck.js";import"../chunk-h3d81wrg.js";export{e as trustCertificate,c as sslCertificatesExist,g as setupSSL,h as isSSLSetupComplete,a as isDomainInHosts,d as isCertificateTrusted,f as generateCertificates,b as addDomainToHosts};
package/dist/stacks.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import type { StackInstallOptions, StackListEntry, StackManifestEntry, StackUninstallOptions } from '@stacksjs/types';
2
- export declare function installStack(options: StackInstallOptions): Promise<StackManifestEntry | null>;
3
- export declare function uninstallStack(options: StackUninstallOptions): Promise<boolean>;
4
- export declare function listStacks(): Promise<StackListEntry[]>;
package/dist/stacks.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- import"./chunk-h3d81wrg.js";import{log as H}from"@stacksjs/logging";import{dirname as T,join as Z,projectPath as A,relative as m,stacksBackupPath as u,stacksLockPath as b}from"@stacksjs/path";import{copyFile as K,createFolder as R,deleteFile as g,deleteEmptyFolders as d,doesFolderExist as P,fs as J}from"@stacksjs/storage";var F=["app","config","database","resources","routes","public","locales"];async function L(){let z=b();try{if(J.existsSync(z)){let q=await Bun.file(z).text();return JSON.parse(q)}}catch{}return{version:1,generatedAt:new Date().toISOString(),stacks:{}}}async function D(z){let q=b(),W=T(q);if(!J.existsSync(W))await R(W);z.generatedAt=new Date().toISOString(),await Bun.write(q,JSON.stringify(z,null,2))}function y(z){let q=A("pantry"),W=Z(q,z);if(J.existsSync(Z(W,"package.json")))return W;let X=Z(q,"@stacksjs",z);if(J.existsSync(Z(X,"package.json")))return X;if(z.startsWith("@")){let Q=Z(q,z);if(J.existsSync(Z(Q,"package.json")))return Q}let M=["*/package.json","@*/*/package.json"];for(let Q of M){let Y=new Bun.Glob(Q);for(let $ of Y.scanSync({cwd:q,absolute:!0,onlyFiles:!0}))try{if(JSON.parse(J.readFileSync($,"utf-8"))?.stacks?.name===z)return T($)}catch{}}return null}function C(z,q){let W=[];if(!J.existsSync(z))return W;let X=J.readdirSync(z,{withFileTypes:!0});for(let M of X){let Q=Z(z,M.name);if(M.isDirectory())W.push(...C(Q,q));else W.push(m(q,Q))}return W}async function n(z){let{name:q,force:W=!1,dryRun:X=!1,verbose:M=!1}=z,Q=W?"overwrite":z.conflict??"skip";H.info(`Installing stack "${q}"...`);let Y=y(q);if(!Y)return H.error(`Stack "${q}" not found in pantry. Install it first with: bun add <package-name>`),null;let $,G;try{let V=await Bun.file(Z(Y,"package.json")).text();if($=JSON.parse(V),G=$.stacks,!G?.name)return H.error(`Package at "${Y}" does not have a valid "stacks" field in package.json`),null}catch(V){return H.error(`Failed to read stack package.json: ${V}`),null}let O=await L(),U=$.name||q;if(O.stacks[U]&&!W)return H.warn(`Stack "${G.name}" is already installed. Use --force to reinstall.`),O.stacks[U];let B=G.directories??F,w=[];for(let V of B){let E=Z(Y,V);if(J.existsSync(E)){let _=C(E,Y);w.push(..._)}}if(w.length===0)return H.warn(`Stack "${G.name}" has no files to install`),null;if(M)H.info(`Found ${w.length} file(s) to install`);let x=[],I=[];for(let V of w){let E=Z(Y,V),_=A(V);if(X){if(J.existsSync(_))if(H.info(`[dry-run] Would ${Q}: ${V}`),Q==="skip")I.push(V);else x.push(V);else H.info(`[dry-run] Would copy: ${V}`),x.push(V);continue}if(J.existsSync(_))switch(Q){case"skip":if(M)H.warn(`Skipping (file exists): ${V}`);I.push(V);continue;case"backup":{let f=u(G.name),v=Z(f,V),j=T(v);if(!J.existsSync(j))await R(j);if(K(_,v),M)H.info(`Backed up: ${V}`);break}case"overwrite":if(M)H.warn(`Overwriting: ${V}`);break}let S=T(_);if(!J.existsSync(S))await R(S);if(K(E,_),x.push(V),M)H.info(`Copied: ${V}`)}if(X)return H.info(`[dry-run] Would install ${x.length} file(s), skip ${I.length} file(s)`),null;let N={packageName:U,name:G.name,version:$.version||"0.0.0",installedAt:new Date().toISOString(),files:x,skipped:I,conflictStrategy:Q};return O.stacks[U]=N,await D(O),H.success(`Installed stack "${G.name}" (${x.length} file(s) copied, ${I.length} skipped)`),N}async function c(z){let{name:q,force:W=!1,verbose:X=!1}=z;H.info(`Uninstalling stack "${q}"...`);let M=await L(),Q=null,Y=null;for(let[O,U]of Object.entries(M.stacks))if(U.name===q||O===q){Q=O,Y=U;break}if(!Y||!Q)return H.error(`Stack "${q}" is not installed`),!1;let $=0;for(let O of Y.files){let U=A(O);if(!J.existsSync(U)){if(X)H.info(`Already removed: ${O}`);continue}if(!W){let B=y(q);if(B){let w=Z(B,O);if(J.existsSync(w)){let x=await Bun.file(w).text(),I=await Bun.file(U).text();if(x!==I){H.warn(`Skipping modified file: ${O} (use --force to remove)`);continue}}}}if(await g(U),$++,X)H.info(`Removed: ${O}`)}let G=u(Y.name);if(J.existsSync(G)&&P(G)){let O=C(G,G);for(let U of O){let B=Z(G,U),w=A(U),x=T(w);if(!J.existsSync(x))await R(x);if(K(B,w),X)H.info(`Restored from backup: ${U}`)}J.rmSync(G,{recursive:!0,force:!0})}for(let O of F){let U=A(O);if(J.existsSync(U))await d(U)}return delete M.stacks[Q],await D(M),H.success(`Uninstalled stack "${Y.name}" (${$} file(s) removed)`),!0}async function i(){let z=[],q=await L(),W=A("pantry");if(J.existsSync(W)){let X=["*/package.json","@*/*/package.json"];for(let M of X){let Q=new Bun.Glob(M);for(let Y of Q.scanSync({cwd:W,absolute:!0,onlyFiles:!0}))try{let $=J.readFileSync(Y,"utf-8"),G=JSON.parse($);if(!G?.stacks?.name)continue;let O=G.name,U=!!q.stacks[O],B=q.stacks[O];z.push({name:G.stacks.name,packageName:O,version:G.version||"0.0.0",description:G.stacks.description,installed:U,installedAt:B?.installedAt,fileCount:B?.files.length})}catch{}}}for(let[X,M]of Object.entries(q.stacks))if(!z.some((Q)=>Q.packageName===X))z.push({name:M.name,packageName:X,version:M.version,installed:!0,installedAt:M.installedAt,fileCount:M.files.length});return z}export{c as uninstallStack,i as listStacks,n as installStack};
@@ -1,28 +0,0 @@
1
- /**
2
- * Code generation templates for the make command
3
- *
4
- * These templates use the {0}, {1}, etc. format for template substitution
5
- * which works with the @stacksjs/strings template function
6
- */
7
- export declare const CODE_TEMPLATES: {
8
- action: string;
9
- actionWithValidation: string;
10
- actionWithAuth: string;
11
- actionWithBoth: string;
12
- component: string;
13
- page: string;
14
- function: string;
15
- language: string;
16
- notification: string;
17
- mail: string;
18
- mailTemplate: string;
19
- middleware: string;
20
- model: string;
21
- migration: string;
22
- stackPackageJson: string;
23
- job: string;
24
- event: string;
25
- listener: string;
26
- command: string
27
- };
28
- export type TemplateKey = keyof typeof CODE_TEMPLATES;
package/dist/templates.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{S as a}from"./chunk-nty6mmx4.js";import"./chunk-h3d81wrg.js";export{a as CODE_TEMPLATES};
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import q from"process";import{log as u}from"@stacksjs/cli";import{projectPath as w}from"@stacksjs/path";var y=Bun.spawn(["sh","-c","bun test ./tests/feature/**"],{cwd:w(),stdio:["inherit","inherit","inherit"]}),f=await y.exited;if(f!==0)u.error("Tests failed"),q.exit(f??1);
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import f from"process";import{log as m}from"@stacksjs/cli";import{projectPath as q}from"@stacksjs/path";var v=Bun.spawn(["sh","-c","bun test --timeout 30000 ./tests/feature/** ./tests/integration/** ./tests/unit/**"],{cwd:q(),stdio:["inherit","inherit","inherit"]}),b=await v.exited;if(b!==0)m.error("Tests failed"),f.exit(b??1);
package/dist/test/ui.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/dist/test/ui.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{runCommand as r}from"@stacksjs/cli";import{NpmScript as m}from"@stacksjs/enums";import{frameworkPath as o}from"@stacksjs/path";await r(m.TestUi,{verbose:!0,cwd:o()});
@@ -1 +0,0 @@
1
- export {};
package/dist/test/unit.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- import q from"process";import{log as u}from"@stacksjs/cli";import{projectPath as w}from"@stacksjs/path";var y=Bun.spawn(["sh","-c","bun test ./tests/unit/**"],{cwd:w(),stdio:["inherit","inherit","inherit"]}),f=await y.exited;if(f!==0)u.error("Tests failed"),q.exit(f??1);
@@ -1 +0,0 @@
1
- export {};
package/dist/typecheck.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{runCommands as m}from"@stacksjs/cli";import{NpmScript as r}from"@stacksjs/enums";import{projectPath as o}from"@stacksjs/path";await m([r.TestTypes],{cwd:o()});
package/dist/types.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { TypesOptions } from '@stacksjs/types';
2
- export declare function invoke(options?: TypesOptions): Promise<void>;
3
- export declare function types(options: TypesOptions): Promise<void>;
package/dist/types.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- import"./chunk-h3d81wrg.js";import t from"process";import{NpmScript as e}from"@stacksjs/enums";import{log as s}from"@stacksjs/logging";import{ExitCode as i}from"@stacksjs/types";import{runNpmScript as p}from"@stacksjs/utils";async function m(r){let o=await p(e.TypesFix,r);if(o.isErr)s.error("There was an error fixing your types.",o.error),t.exit(i.FatalError);s.success("Types are set")}async function u(r){return await m(r)}export{u as types,m as invoke};
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import A from"process";import{runCommand as J}from"@stacksjs/cli";import{log as q}from"@stacksjs/logging";import{path as z}from"@stacksjs/path";import{ExitCode as B}from"@stacksjs/types";import{fs as F,storage as K}from"@stacksjs/storage";var v=z.buddyPath("dist/stacks"),G=z.homeDir(".stacks/bin/stacks"),L=z.homeDir(".stacks/bin/");q.info("Upgrading `stacks`...");var H=await J("bun compile.ts",{cwd:z.buddyPath()});if(H.isErr)q.error("There was an error compiling the binary",H.error),A.exit(B.FatalError);if(await K.exists(v))try{q.info("Updating Binary..."),q.info(`Source: ${v}`),q.info(`Destination: ${G}`),await F.ensureDir(L),await F.move(v,G,{overwrite:!0}),q.success("Binary Latest Version Is Used")}catch(I){q.error(I),A.exit(B.FatalError)}else q.error(`Binary source not found: ${v}`),A.exit(B.FatalError);
@@ -1 +0,0 @@
1
-
@@ -1 +0,0 @@
1
- // @bun
@@ -1 +0,0 @@
1
-
@@ -1,2 +0,0 @@
1
- // @bun
2
- import"../chunk-h3d81wrg.js";var c=void 0;export{c as default};