@stacksjs/actions 0.70.23 → 0.70.26

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 (384) hide show
  1. package/dist/chunk-2gh7kgpc.js +3 -0
  2. package/dist/chunk-2kaj93p5.js +3 -0
  3. package/dist/chunk-2qchdrf9.js +3 -0
  4. package/dist/chunk-3086k7zk.js +184 -0
  5. package/dist/chunk-3beht8ja.js +130 -0
  6. package/dist/chunk-60qjz7zb.js +3 -0
  7. package/dist/chunk-67y94dzt.js +658 -0
  8. package/dist/chunk-6x1m5rkr.js +17 -0
  9. package/dist/chunk-7bpdkc40.js +714 -0
  10. package/dist/chunk-96b7fcmd.js +3 -0
  11. package/dist/chunk-aw6d8zr3.js +7 -0
  12. package/dist/chunk-c8qt2xst.js +3 -0
  13. package/dist/chunk-d4srk6ma.js +3 -0
  14. package/dist/chunk-e9tcbk71.js +1 -0
  15. package/dist/chunk-gt77jmb5.js +46 -0
  16. package/dist/chunk-h93n2j40.js +95 -0
  17. package/dist/chunk-jd1yzkq5.js +3 -0
  18. package/dist/chunk-kzhgexj4.js +3 -0
  19. package/dist/chunk-n1y0gpv6.js +3 -0
  20. package/dist/chunk-n2fd1d0m.js +3 -0
  21. package/dist/chunk-n2x7v39b.js +5 -0
  22. package/dist/chunk-rdajkt2s.js +88 -0
  23. package/dist/chunk-s735m9mg.js +1 -0
  24. package/dist/chunk-schcaf73.js +3 -0
  25. package/dist/chunk-tc935b45.js +93 -0
  26. package/dist/chunk-v0wnrnaa.js +7 -0
  27. package/dist/chunk-w418anbq.js +5 -0
  28. package/dist/chunk-wnrgcx3d.js +114 -0
  29. package/dist/chunk-wv5yb5wb.js +101 -0
  30. package/dist/chunk-x471rxrn.js +7 -0
  31. package/dist/chunk-xg9xscqz.js +1 -0
  32. package/dist/src/action.d.ts +60 -0
  33. package/dist/src/action.js +2 -0
  34. package/dist/src/actions.d.ts +2 -0
  35. package/dist/src/actions.js +2 -0
  36. package/dist/src/add.d.ts +6 -0
  37. package/dist/src/add.js +2 -0
  38. package/dist/src/ai/request-model-access.d.ts +1 -0
  39. package/dist/src/ai/request-model-access.js +2 -0
  40. package/dist/src/auth/client.d.ts +1 -0
  41. package/dist/src/auth/client.js +3 -0
  42. package/dist/src/auth/prune.d.ts +1 -0
  43. package/dist/src/auth/prune.js +2 -0
  44. package/dist/src/auth/setup.d.ts +1 -0
  45. package/dist/src/auth/setup.js +148 -0
  46. package/dist/src/auth/token.d.ts +1 -0
  47. package/dist/src/auth/token.js +2 -0
  48. package/dist/src/build/cli.d.ts +1 -0
  49. package/dist/src/build/cli.js +2 -0
  50. package/dist/src/build/component-libs.d.ts +1 -0
  51. package/dist/src/build/component-libs.js +2 -0
  52. package/dist/src/build/core.d.ts +1 -0
  53. package/dist/src/build/core.js +2 -0
  54. package/dist/src/build/desktop.d.ts +1 -0
  55. package/dist/src/build/desktop.js +2 -0
  56. package/dist/src/build/docs.d.ts +1 -0
  57. package/dist/src/build/docs.js +2 -0
  58. package/dist/src/build/server.d.ts +1 -0
  59. package/dist/src/build/server.js +2 -0
  60. package/dist/src/build/stacks.d.ts +1 -0
  61. package/dist/src/build/stacks.js +2 -0
  62. package/dist/src/build/views.d.ts +1 -0
  63. package/dist/src/build/views.js +2 -0
  64. package/dist/{build.d.ts → src/build.d.ts} +1 -2
  65. package/dist/src/build.js +2 -0
  66. package/dist/src/bump.d.ts +1 -0
  67. package/dist/src/bump.js +2 -0
  68. package/dist/src/cdn/invalidate-cache.d.ts +1 -0
  69. package/dist/src/cdn/invalidate-cache.js +1 -0
  70. package/dist/src/changelog.d.ts +1 -0
  71. package/dist/src/changelog.js +2 -0
  72. package/dist/src/check/ports.d.ts +1 -0
  73. package/dist/src/check/ports.js +2 -0
  74. package/dist/src/clean.d.ts +1 -0
  75. package/dist/src/clean.js +2 -0
  76. package/dist/{commit.d.ts → src/commit.d.ts} +1 -2
  77. package/dist/src/commit.js +2 -0
  78. package/dist/src/copy-types.d.ts +1 -0
  79. package/dist/src/copy-types.js +3 -0
  80. package/dist/src/database/seed.d.ts +1 -0
  81. package/dist/src/database/seed.js +2 -0
  82. package/dist/src/deploy/create-receipt-rule.d.ts +1 -0
  83. package/dist/src/deploy/create-receipt-rule.js +2 -0
  84. package/dist/src/deploy/index.d.ts +1 -0
  85. package/dist/src/deploy/index.js +307 -0
  86. package/dist/src/dev/api.d.ts +1 -0
  87. package/dist/src/dev/api.js +6 -0
  88. package/dist/src/dev/components.d.ts +1 -0
  89. package/dist/src/dev/components.js +2 -0
  90. package/dist/src/dev/dashboard-globals.d.ts +4 -0
  91. package/dist/src/dev/dashboard-globals.js +3 -0
  92. package/dist/src/dev/dashboard-utils.d.ts +126 -0
  93. package/dist/src/dev/dashboard-utils.js +2 -0
  94. package/dist/src/dev/dashboard.d.ts +12 -0
  95. package/dist/src/dev/dashboard.js +8 -0
  96. package/dist/src/dev/desktop.d.ts +1 -0
  97. package/dist/src/dev/desktop.js +2 -0
  98. package/dist/src/dev/docs.d.ts +1 -0
  99. package/dist/src/dev/docs.js +2 -0
  100. package/dist/src/dev/index.d.ts +10 -0
  101. package/dist/src/dev/index.js +2 -0
  102. package/dist/src/dev/system-tray.d.ts +1 -0
  103. package/dist/src/dev/system-tray.js +2 -0
  104. package/dist/src/dev/views.d.ts +1 -0
  105. package/dist/src/dev/views.js +2 -0
  106. package/dist/src/discover-packages.d.ts +18 -0
  107. package/dist/src/discover-packages.js +2 -0
  108. package/dist/src/domains/add.d.ts +1 -0
  109. package/dist/src/domains/add.js +2 -0
  110. package/dist/src/domains/purchase.d.ts +1 -0
  111. package/dist/src/domains/purchase.js +2 -0
  112. package/dist/src/domains/remove.d.ts +1 -0
  113. package/dist/src/domains/remove.js +2 -0
  114. package/dist/{examples.d.ts → src/examples.d.ts} +1 -2
  115. package/dist/src/examples.js +2 -0
  116. package/dist/src/find-projects.d.ts +1 -0
  117. package/dist/src/find-projects.js +2 -0
  118. package/dist/src/fresh.d.ts +1 -0
  119. package/dist/src/fresh.js +2 -0
  120. package/dist/src/generate/action-types.d.ts +1 -0
  121. package/dist/src/generate/action-types.js +8 -0
  122. package/dist/src/generate/component-meta.d.ts +1 -0
  123. package/dist/src/generate/component-meta.js +3 -0
  124. package/dist/src/generate/custom-cli-file.d.ts +1 -0
  125. package/dist/src/generate/custom-cli-file.js +4 -0
  126. package/dist/src/generate/env-files.d.ts +1 -0
  127. package/dist/src/generate/env-files.js +26 -0
  128. package/dist/src/generate/ide-helpers.d.ts +1 -0
  129. package/dist/src/generate/ide-helpers.js +3 -0
  130. package/dist/src/generate/index.d.ts +36 -0
  131. package/dist/src/generate/index.js +2 -0
  132. package/dist/src/generate/lib-entries.d.ts +1 -0
  133. package/dist/src/generate/lib-entries.js +3 -0
  134. package/dist/src/generate/pantry-file.d.ts +1 -0
  135. package/dist/src/generate/pantry-file.js +2 -0
  136. package/dist/src/generate/symlink-core.d.ts +1 -0
  137. package/dist/src/generate/symlink-core.js +2 -0
  138. package/dist/src/generate/types.d.ts +1 -0
  139. package/dist/src/generate/types.js +2 -0
  140. package/dist/src/generate/vscode-custom-data.d.ts +1 -0
  141. package/dist/src/generate/vscode-custom-data.js +3 -0
  142. package/dist/src/generate/web-types.d.ts +1 -0
  143. package/dist/src/generate/web-types.js +1 -0
  144. package/dist/src/helpers/component-meta.d.ts +26 -0
  145. package/dist/src/helpers/component-meta.js +2 -0
  146. package/dist/src/helpers/index.d.ts +4 -0
  147. package/dist/src/helpers/index.js +2 -0
  148. package/dist/{lib-entries.d.ts → src/helpers/lib-entries.d.ts} +9 -5
  149. package/dist/src/helpers/lib-entries.js +2 -0
  150. package/dist/src/helpers/package-json.d.ts +2 -0
  151. package/dist/src/helpers/package-json.js +43 -0
  152. package/dist/src/helpers/utils.d.ts +23 -0
  153. package/dist/src/helpers/utils.js +2 -0
  154. package/dist/{vscode-custom-data.d.ts → src/helpers/vscode-custom-data.d.ts} +1 -1
  155. package/dist/src/helpers/vscode-custom-data.js +2 -0
  156. package/dist/src/index.d.ts +42 -0
  157. package/dist/src/index.js +2 -0
  158. package/dist/src/key-generate.d.ts +1 -0
  159. package/dist/src/key-generate.js +2 -0
  160. package/dist/src/lint/fix.d.ts +1 -0
  161. package/dist/src/lint/fix.js +4 -0
  162. package/dist/src/lint/index.d.ts +1 -0
  163. package/dist/src/lint/index.js +3 -0
  164. package/dist/src/make-command.d.ts +10 -0
  165. package/dist/src/make-command.js +2 -0
  166. package/dist/src/make-job.d.ts +5 -0
  167. package/dist/src/make-job.js +2 -0
  168. package/dist/src/make-policy.d.ts +10 -0
  169. package/dist/src/make-policy.js +2 -0
  170. package/dist/src/make-resource.d.ts +10 -0
  171. package/dist/src/make-resource.js +2 -0
  172. package/dist/{make.d.ts → src/make.d.ts} +11 -9
  173. package/dist/src/make.js +2 -0
  174. package/dist/src/migrate/database.d.ts +1 -0
  175. package/dist/src/migrate/database.js +2 -0
  176. package/dist/src/migrate/fresh.d.ts +1 -0
  177. package/dist/src/migrate/fresh.js +2 -0
  178. package/dist/src/orm/base.d.ts +1 -0
  179. package/dist/src/orm/base.js +2 -0
  180. package/dist/src/orm/test.d.ts +1 -0
  181. package/dist/src/orm/test.js +1 -0
  182. package/dist/src/prepublish.d.ts +1 -0
  183. package/dist/src/prepublish.js +2 -0
  184. package/dist/src/queue/clear.d.ts +1 -0
  185. package/dist/src/queue/clear.js +2 -0
  186. package/dist/src/queue/failed.d.ts +1 -0
  187. package/dist/src/queue/failed.js +5 -0
  188. package/dist/src/queue/flush.d.ts +1 -0
  189. package/dist/src/queue/flush.js +3 -0
  190. package/dist/src/queue/inspect.d.ts +1 -0
  191. package/dist/src/queue/inspect.js +8 -0
  192. package/dist/src/queue/monitor.d.ts +1 -0
  193. package/dist/src/queue/monitor.js +7 -0
  194. package/dist/src/queue/retry.d.ts +1 -0
  195. package/dist/src/queue/retry.js +2 -0
  196. package/dist/src/queue/schedule-list.d.ts +1 -0
  197. package/dist/src/queue/schedule-list.js +5 -0
  198. package/dist/src/queue/schedule.d.ts +1 -0
  199. package/dist/src/queue/schedule.js +2 -0
  200. package/dist/src/queue/status.d.ts +1 -0
  201. package/dist/src/queue/status.js +5 -0
  202. package/dist/src/queue/table.d.ts +1 -0
  203. package/dist/src/queue/table.js +2 -0
  204. package/dist/src/queue/work.d.ts +1 -0
  205. package/dist/src/queue/work.js +2 -0
  206. package/dist/src/release.d.ts +1 -0
  207. package/dist/src/release.js +3 -0
  208. package/dist/src/route/list.d.ts +1 -0
  209. package/dist/src/route/list.js +3 -0
  210. package/dist/src/run-action.d.ts +2 -0
  211. package/dist/src/run-action.js +2 -0
  212. package/dist/src/saas/setup.d.ts +1 -0
  213. package/dist/src/saas/setup.js +2 -0
  214. package/dist/src/scaffold-crud.d.ts +25 -0
  215. package/dist/src/scaffold-crud.js +2 -0
  216. package/dist/src/schedule/run.d.ts +1 -0
  217. package/dist/src/schedule/run.js +2 -0
  218. package/dist/src/search/flush.d.ts +1 -0
  219. package/dist/src/search/flush.js +2 -0
  220. package/dist/src/search/import.d.ts +1 -0
  221. package/dist/src/search/import.js +2 -0
  222. package/dist/src/search/settings-list.d.ts +1 -0
  223. package/dist/src/search/settings-list.js +2 -0
  224. package/dist/src/search/settings.d.ts +1 -0
  225. package/dist/src/search/settings.js +2 -0
  226. package/dist/src/serve/api.d.ts +1 -0
  227. package/dist/src/serve/api.js +2 -0
  228. package/dist/src/setup/index.d.ts +1 -0
  229. package/dist/src/setup/index.js +2 -0
  230. package/dist/src/setup/ssl.d.ts +38 -0
  231. package/dist/src/setup/ssl.js +2 -0
  232. package/dist/src/stacks.d.ts +4 -0
  233. package/dist/src/stacks.js +2 -0
  234. package/dist/src/templates.d.ts +8 -0
  235. package/dist/src/templates.js +2 -0
  236. package/dist/src/test/feature.d.ts +1 -0
  237. package/dist/src/test/feature.js +2 -0
  238. package/dist/src/test/index.d.ts +1 -0
  239. package/dist/src/test/index.js +2 -0
  240. package/dist/src/test/ui.d.ts +1 -0
  241. package/dist/src/test/ui.js +2 -0
  242. package/dist/src/test/unit.d.ts +1 -0
  243. package/dist/src/test/unit.js +2 -0
  244. package/dist/src/typecheck.d.ts +1 -0
  245. package/dist/src/typecheck.js +2 -0
  246. package/dist/{types.d.ts → src/types.d.ts} +1 -2
  247. package/dist/src/types.js +2 -0
  248. package/dist/src/upgrade/binary.d.ts +1 -0
  249. package/dist/src/upgrade/binary.js +2 -0
  250. package/dist/src/upgrade/bun.d.ts +1 -0
  251. package/dist/src/upgrade/bun.js +1 -0
  252. package/dist/src/upgrade/dependencies.d.ts +1 -0
  253. package/dist/src/upgrade/dependencies.js +2 -0
  254. package/dist/src/upgrade/framework-utils.d.ts +102 -0
  255. package/dist/src/upgrade/framework-utils.js +2 -0
  256. package/dist/src/upgrade/framework.d.ts +1 -0
  257. package/dist/src/upgrade/framework.js +7 -0
  258. package/dist/src/upgrade/index.d.ts +1 -0
  259. package/dist/src/upgrade/index.js +2 -0
  260. package/dist/src/upgrade/shell.d.ts +1 -0
  261. package/dist/src/upgrade/shell.js +5 -0
  262. package/dist/src/upgrade.d.ts +7 -0
  263. package/dist/src/upgrade.js +2 -0
  264. package/package.json +39 -23
  265. package/dist/action-types.d.ts +0 -9
  266. package/dist/action.d.ts +0 -64
  267. package/dist/actions.d.ts +0 -2
  268. package/dist/add.d.ts +0 -5
  269. package/dist/add.js +0 -33
  270. package/dist/api.d.ts +0 -1
  271. package/dist/binary.d.ts +0 -2
  272. package/dist/build/component-libs.js +0 -9
  273. package/dist/build/core.js +0 -23
  274. package/dist/build/stacks.js +0 -8
  275. package/dist/build.js +0 -108
  276. package/dist/bump.d.ts +0 -2
  277. package/dist/bump.js +0 -17
  278. package/dist/changelog.d.ts +0 -2
  279. package/dist/changelog.js +0 -17
  280. package/dist/chunk-2dvnt46s.js +0 -7657
  281. package/dist/chunk-494jp8d5.js +0 -54
  282. package/dist/chunk-4axj3j8y.js +0 -34
  283. package/dist/chunk-56ar3gp7.js +0 -3823
  284. package/dist/chunk-76zhb40c.js +0 -92
  285. package/dist/chunk-7s5qcjkt.js +0 -105
  286. package/dist/chunk-9v6qtbez.js +0 -45
  287. package/dist/chunk-a13x0e43.js +0 -1180
  288. package/dist/chunk-a7k3cdby.js +0 -2266
  289. package/dist/chunk-b5g5w1hh.js +0 -1482
  290. package/dist/chunk-bf8bq8pc.js +0 -205
  291. package/dist/chunk-ccnf3w1b.js +0 -2228
  292. package/dist/chunk-dvkgakrr.js +0 -1283
  293. package/dist/chunk-frw3va9v.js +0 -69
  294. package/dist/chunk-hvfeg6n6.js +0 -179248
  295. package/dist/chunk-mdj7x1vs.js +0 -790
  296. package/dist/chunk-mdqphqep.js +0 -438
  297. package/dist/chunk-mmskr8ar.js +0 -212
  298. package/dist/chunk-nrr524a7.js +0 -658
  299. package/dist/chunk-p0c688mg.js +0 -729
  300. package/dist/chunk-pacq2bz6.js +0 -902
  301. package/dist/chunk-psa9yf21.js +0 -72
  302. package/dist/chunk-q81mf99q.js +0 -169
  303. package/dist/chunk-q9dmga3k.js +0 -11
  304. package/dist/chunk-qhh0v93n.js +0 -73
  305. package/dist/chunk-qkm8e752.js +0 -51
  306. package/dist/chunk-saqpg5nd.js +0 -118
  307. package/dist/chunk-t5em30ak.js +0 -379
  308. package/dist/chunk-veja9rez.js +0 -5764
  309. package/dist/chunk-w4bfpxhm.js +0 -311
  310. package/dist/chunk-w6fdq4hk.js +0 -14425
  311. package/dist/chunk-wkwtsvym.js +0 -477
  312. package/dist/chunk-xgsmf4cy.js +0 -410
  313. package/dist/chunk-ykb33tkv.js +0 -177
  314. package/dist/chunk-ze46550n.js +0 -0
  315. package/dist/chunk-zzerxbrm.js +0 -107
  316. package/dist/clean.js +0 -6
  317. package/dist/commit.js +0 -22
  318. package/dist/component-meta.d.ts +0 -15
  319. package/dist/components.d.ts +0 -3
  320. package/dist/copy-types.d.ts +0 -1
  321. package/dist/copy-types.js +0 -14
  322. package/dist/core.d.ts +0 -1
  323. package/dist/create-receipt-rule.d.ts +0 -4
  324. package/dist/database/seed.js +0 -30
  325. package/dist/database.d.ts +0 -2
  326. package/dist/deploy/index.js +0 -48
  327. package/dist/dev/components.js +0 -11
  328. package/dist/dev/docs.js +0 -7
  329. package/dist/dev/index.js +0 -58
  330. package/dist/env-files.d.ts +0 -9
  331. package/dist/examples.js +0 -46
  332. package/dist/feature.d.ts +0 -2
  333. package/dist/find-projects.d.ts +0 -1
  334. package/dist/fix.d.ts +0 -1
  335. package/dist/flush.d.ts +0 -2
  336. package/dist/fresh.d.ts +0 -1
  337. package/dist/fresh.js +0 -21
  338. package/dist/generate/component-meta.js +0 -17
  339. package/dist/generate/ide-helpers.js +0 -18
  340. package/dist/generate/index.js +0 -216
  341. package/dist/generate/lib-entries.js +0 -30
  342. package/dist/generate/vscode-custom-data.js +0 -17
  343. package/dist/helpers/component-meta.js +0 -204227
  344. package/dist/helpers/lib-entries.js +0 -122
  345. package/dist/helpers/package-json.js +0 -96
  346. package/dist/helpers/utils.js +0 -76
  347. package/dist/helpers/vscode-custom-data.js +0 -43
  348. package/dist/import.d.ts +0 -2
  349. package/dist/index.d.ts +0 -2
  350. package/dist/index.js +0 -172
  351. package/dist/key-generate.js +0 -15
  352. package/dist/lint/fix.js +0 -18
  353. package/dist/lint/index.js +0 -5
  354. package/dist/list.d.ts +0 -1
  355. package/dist/make.js +0 -349
  356. package/dist/package-json.d.ts +0 -92
  357. package/dist/pkgx-file.d.ts +0 -8
  358. package/dist/ports.d.ts +0 -2
  359. package/dist/prepublish.d.ts +0 -1
  360. package/dist/prepublish.js +0 -17
  361. package/dist/purchase.d.ts +0 -6
  362. package/dist/release.js +0 -49
  363. package/dist/remove.d.ts +0 -6
  364. package/dist/request-model-access.d.ts +0 -1
  365. package/dist/run.d.ts +0 -1
  366. package/dist/settings-list.d.ts +0 -2
  367. package/dist/settings.d.ts +0 -1
  368. package/dist/setup.d.ts +0 -1
  369. package/dist/shell.d.ts +0 -2
  370. package/dist/table.d.ts +0 -1
  371. package/dist/test/feature.js +0 -14
  372. package/dist/test/index.js +0 -14
  373. package/dist/test/ui.js +0 -6
  374. package/dist/test/unit.js +0 -14
  375. package/dist/typecheck.js +0 -6
  376. package/dist/types.js +0 -23
  377. package/dist/unit.d.ts +0 -2
  378. package/dist/upgrade/dependencies.js +0 -8
  379. package/dist/upgrade/index.js +0 -22
  380. package/dist/upgrade.d.ts +0 -5
  381. package/dist/upgrade.js +0 -50
  382. package/dist/utils.d.ts +0 -75
  383. package/dist/work.d.ts +0 -3
  384. /package/dist/{upgrade/framework.js → chunk-cdk2r2jd.js} +0 -0
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ var d=Object.defineProperty;var e=(a)=>a;function f(a,b){this[a]=e.bind(null,b)}var g=(a,b)=>{for(var c in b)d(a,c,{get:b[c],enumerable:!0,configurable:!0,set:f.bind(b,c)})};var h=import.meta.require;
3
+ export{g as fb,h as gb};
@@ -0,0 +1,7 @@
1
+ // @bun
2
+ import{gb as U}from"./chunk-96b7fcmd.js";import{frameworkPath as E,join as W,path as R,projectPath as L}from"@stacksjs/path";import{existsSync as T,globSync as j,mkdirSync as I,writeFileSync as F}from"@stacksjs/storage";import{readFileSync as v}from"fs";var $=null;async function P(){if($)return $;try{$=(await import("@stacksjs/ts-md")).parseMarkdown}catch{$=(q)=>q}return $}function M(q){if(!q)return"";return $?$(q):q}async function p(){await P();let q=j(["components/*.stx","components/**/*.stx","resources/components/**/*.stx","storage/framework/defaults/resources/components/**/*.stx"],{cwd:L(),absolute:!0}),G=E("component-meta");if(!T(G))I(G,{recursive:!0});for(let X of q){let Q=R.parse(X).name,H=B(X),z=W(G,`${Q}.json`);F(z,JSON.stringify(H,null,2))}}function B(q){let G=v(q,"utf8"),X=b(G),Q=x(G),H=X?D(X):[],z=X?f(X):[],Z=h(Q);return{props:H,events:z,slots:Z}}function b(q){let G=/<script\b[^>]*\bserver\b[^>]*>([\s\S]*?)<\/script>/i.exec(q);if(G?.[1])return G[1];return/<script\b[^>]*>([\s\S]*?)<\/script>/i.exec(q)?.[1]??null}function x(q){let G=/<template\b[^>]*>([\s\S]*?)<\/template>/i.exec(q);if(G?.[1])return G[1];return q.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,"")}function D(q){let G=w(q),X=S(q,G);if(!X)return[];let Q=k(X,G),H=g(q);return Q.map((z)=>{return{name:z.required?z.name:`${z.name}?`,description:M(z.description),type:z.type,default:H[z.name]??z.default??"unknown",required:z.required}})}function w(q){let G=new Map,X=/(?:export\s+)?interface\s+([A-Z][\w$]*)\s*(?:extends\s+[\w$,\s]+)?\s*\{/g,Q;while((Q=X.exec(q))!==null){let z=Q[1];if(!z)continue;let Z=Q.index+Q[0].length,Y=K(q,Z-1,"{","}");if(Y!==null)G.set(z,Y)}let H=/(?:export\s+)?type\s+([A-Z][\w$]*)\s*=\s*\{/g;while((Q=H.exec(q))!==null){let z=Q[1];if(!z)continue;let Z=Q.index+Q[0].length,Y=K(q,Z-1,"{","}");if(Y!==null)G.set(z,Y)}return G}function S(q,G){let Q=/defineProps\s*<\s*([\s\S]+?)\s*>\s*\(/.exec(q),H=Q?.[1]?.trim();if(!Q||!H)return null;if(H.startsWith("{")){let Z=q.indexOf("{",Q.index);return K(q,Z,"{","}")}let z=H.replace(/[<>(].*$/,"").split("&")[0]?.trim();if(!z)return null;return G.get(z)??null}function k(q,G){let X=[],Q=N(q,[";",`
3
+ `]),H="";for(let z of Q){let Z=z.trim();if(!Z)continue;let Y=/^\/\*\*([\s\S]*?)\*\/\s*([\s\S]*)$/.exec(Z);if(Y){H=(Y[1]??"").split(`
4
+ `).map((A)=>A.replace(/^\s*\*\s?/,"")).join(`
5
+ `).trim();let C=(Y[2]??"").trim();if(!C)continue;let J=V(C,H,G);if(J)X.push(J);H="";continue}if(Z.startsWith("//")){H=Z.replace(/^\/\/\s?/,"");continue}let _=V(Z,H,G);if(_)X.push(_);H=""}return X}function V(q,G,X){if(/^[a-zA-Z_$][\w$]*\s*\(/.test(q.trimStart()))return null;let Q=/^([a-zA-Z_$][\w$]*)\s*(\??)\s*:\s*([\s\S]+?)\s*[;,]?\s*$/.exec(q);if(!Q)return null;let H=Q[1],z=Q[2]??"",Z=Q[3];if(!H||!Z)return null;return{name:H,type:O(Z),required:z!=="?",description:G}}function g(q){let G={},X=/const\s*\{\s*([\s\S]*?)\s*\}\s*=\s*(?:withDefaults\s*\(\s*)?defineProps/g,Q;while((Q=X.exec(q))!==null)if(Q[1])y(Q[1],G);let H=q.indexOf("withDefaults(");if(H>=0){let z=q.indexOf("defineProps",H);if(z>0){let Z=q.indexOf(">",z),Y=q.indexOf(")",Z>=0?Z:z);if(Y>0){let _=q.indexOf(",",Y),C=_>=0?q.indexOf("{",_):-1;if(C>0){let J=K(q,C,"{","}");if(J)u(J,G)}}}}return G}function y(q,G){for(let X of N(q,[","])){let Q=/^\s*([a-zA-Z_$][\w$]*)\s*=\s*([\s\S]+?)\s*$/.exec(X),H=Q?.[1],z=Q?.[2];if(H&&z)G[H]=O(z)}}function u(q,G){for(let X of N(q,[","])){let Q=/^\s*([a-zA-Z_$][\w$]*)\s*:\s*([\s\S]+?)\s*$/.exec(X.trim()),H=Q?.[1],z=Q?.[2];if(H&&z)G[H]=O(z)}}function f(q){let G=/defineEmits\s*<\s*\{([\s\S]*?)\}\s*>\s*\(/.exec(q);if(!G?.[1])return[];let X=[];for(let Q of N(G[1],[";",`
6
+ `])){let H=Q.trim();if(!H)continue;let z=/^['"]?([\w-]+)['"]?\s*:\s*\[(.*?)\]\s*$/.exec(H);if(z){let Y=z[1];if(!Y)continue;X.push({name:Y,type:z[2]?.trim()||"void",description:""});continue}let Z=/^([a-zA-Z_$][\w$]*)\s*\(([\s\S]*?)\)\s*:\s*([\s\S]+)$/.exec(H);if(Z){let Y=Z[1];if(!Y)continue;X.push({name:Y,type:Z[2]?.trim()||"void",description:""})}}return X}function h(q){let G=[],X=new Set,Q=/<slot\b([^>]*)>/g,H;while((H=Q.exec(q))!==null){let z=H[1]??"",Y=/\bname\s*=\s*["']([^"']+)["']/.exec(z)?.[1]??"default";if(X.has(Y))continue;X.add(Y),G.push({name:Y,description:""})}return G}function K(q,G,X,Q){if(q[G]!==X)return null;let H=0,z=G,Z=null;while(z<q.length){let Y=q[z];if(Y===void 0)break;if(Z){if(Y==="\\"){z+=2;continue}if(Y===Z)Z=null;z++;continue}if(Y==='"'||Y==="'"||Y==="`"){Z=Y,z++;continue}if(Y===X)H++;else if(Y===Q){if(H--,H===0)return q.slice(G+1,z)}z++}return null}function N(q,G){let X=[],Q=new Set(G),H=0,z=null,Z=0;for(let Y=0;Y<q.length;Y++){let _=q[Y];if(_===void 0)break;if(z){if(_==="\\"){Y++;continue}if(_===z)z=null;continue}if(_==='"'||_==="'"||_==="`"){z=_;continue}if(_==="{"||_==="["||_==="("||_==="<")H++;else if(_==="}"||_==="]"||_===")"||_===">")H--;else if(H===0&&Q.has(_))X.push(q.slice(Z,Y)),Z=Y+1}return X.push(q.slice(Z)),X}function O(q){return q.replace(/\s+/g," ").trim()}
7
+ export{p as ga,B as ha};
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ import{projectPath as G,storagePath as J}from"@stacksjs/path";async function L(){let x={generated_at:new Date().toISOString(),packages:{}},E=new Set;try{let z=(await Bun.file(G("package.json")).json())?.stacks?.["dont-discover"];if(Array.isArray(z))for(let A of z)E.add(A)}catch{}let H=G("pantry"),I=["*/package.json","@*/*/package.json"];for(let q of I){let z=new Bun.Glob(q);for await(let A of z.scan({cwd:H,absolute:!0,onlyFiles:!0}))try{let B=await Bun.file(A).json(),C=B?.name;if(!C||!B.stacks||E.has(C))continue;x.packages[C]=B.stacks}catch{}}let F=J("framework/discovered-packages.json");try{let q=await Bun.file(F).json();if(JSON.stringify(q.packages??{})===JSON.stringify(x.packages))return q}catch{}return await Bun.write(F,JSON.stringify(x,null,2)),x}
3
+ export{L as ra};
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ class K{name;description;rate;tries;backoff;enabled;path;method;validations;requestFile;handle;model;constructor({name:w,description:y,validations:z,handle:A,rate:B,tries:C,backoff:D,enabled:G,path:H,method:I,requestFile:J,model:j}){if(this.name=w,this.description=y,this.validations=z,this.rate=B,this.tries=C,this.backoff=D,this.enabled=G,this.path=H,this.method=I,this.handle=A,this.requestFile=J,j&&typeof j==="object"&&"name"in j)this.model=j.name;else if(typeof j==="string")this.model=j}}
3
+ export{K as Xa};
@@ -0,0 +1 @@
1
+ // @bun
@@ -0,0 +1,46 @@
1
+ // @bun
2
+ import{log as B}from"@stacksjs/logging";import*as G from"@stacksjs/path";import{get as O,writeFile as H}from"@stacksjs/storage";async function V(y){let z=y.name;if(!z)return B.error("Command name is required"),!1;let q=S(z),A=Q(q,y),D=G.commandsPath(`${q}.ts`);try{if(await H(D,A),B.success(`Created command: ${D}`),y.register!==!1)await R(q,y.signature||I(z));return!0}catch(E){return B.error(`Failed to create command: ${E.message}`),!1}}function Q(y,z){let q=z.signature||I(y),A=z.description||`The ${q} command`;return`import type { CLI } from '@stacksjs/types'
3
+ import { log } from '@stacksjs/cli'
4
+
5
+ /**
6
+ * ${y} Command
7
+ *
8
+ * ${A}
9
+ */
10
+
11
+ interface ${y}Options {
12
+ verbose: boolean
13
+ // Add your command options here
14
+ }
15
+
16
+ export default function (cli: CLI) {
17
+ cli
18
+ .command('${q}', '${A}')
19
+ .option('--verbose', 'Enable verbose output', { default: false })
20
+ // Add more options here
21
+ // .option('-n, --name <name>', 'Your name')
22
+ .action(async (options: ${y}Options) => {
23
+ try {
24
+ if (options.verbose) {
25
+ log.info('Running ${q} command...')
26
+ }
27
+
28
+ log.info('No command logic implemented yet. Update this command action to add behavior.')
29
+
30
+ log.success('${q} completed successfully!')
31
+ }
32
+ catch (error) {
33
+ log.error('${q} failed:', error)
34
+ throw error
35
+ }
36
+ })
37
+
38
+ // Handle unknown subcommands
39
+ cli.on('${q}:*', () => {
40
+ log.error('Invalid command: %s\\nSee --help for a list of available commands.', cli.args.join(' '))
41
+ })
42
+ }
43
+ `}async function R(y,z){let q=G.appPath("Commands.ts");try{let A=await O(q),D=A.match(/export default \{([\s\S]*)\} satisfies/);if(D){let E=D[1]??"";if(E.includes(`'${z}'`)){B.info(`Command '${z}' already registered in Commands.ts`);return}let J=` '${z}': '${y}',
44
+ `,L=`${E.trimEnd()}
45
+ ${J}`;A=A.replace(/export default \{[\s\S]*\} satisfies/,`export default {${L}} satisfies`),await H(q,A),B.success(`Registered command '${z}' in Commands.ts`)}}catch(A){B.warn(`Could not register command in Commands.ts: ${A.message}`),B.info("You may need to manually add it to app/Commands.ts")}}function S(y){return y.replace(/[-_](.)/g,(z,q)=>q.toUpperCase()).replace(/^(.)/,(z,q)=>q.toUpperCase())}function I(y){return y.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").toLowerCase()}
46
+ export{V as y};
@@ -0,0 +1,95 @@
1
+ // @bun
2
+ import{gb as O}from"./chunk-96b7fcmd.js";import{log as B}from"@stacksjs/logging";import*as J from"@stacksjs/path";import{doesExist as Q,get as R,writeFile as L}from"@stacksjs/storage";async function X(q){let b=q.name;if(!b)return B.error("Policy name is required"),!1;let z=b.endsWith("Policy")?b:`${b}Policy`,v=q.model||z.replace("Policy",""),I=T(z,v),H=J.appPath(`Policies/${z}.ts`);try{let G=J.appPath("Policies");if(!Q(G)){let{mkdirSync:K}=await import("@stacksjs/storage");K(G,{recursive:!0})}if(await L(H,I),B.success(`Created policy: ${H}`),q.register!==!1)await U(v,z);return!0}catch(G){return B.error(`Failed to create policy: ${G.message}`),!1}}function T(q,b){return`import type _User from '../models/User'
3
+ import { BasePolicy } from '@stacksjs/auth'
4
+
5
+ type UserModel = _User
6
+
7
+ /**
8
+ * ${q}
9
+ *
10
+ * This policy controls authorization for ${b} model actions.
11
+ *
12
+ * Usage:
13
+ * 1. Register in app/Gates.ts:
14
+ * policies: { '${b}': '${q}' }
15
+ *
16
+ * 2. Use in your code:
17
+ * import { Gate } from '@stacksjs/auth'
18
+ * await Gate.authorize('view', user, ${b.toLowerCase()})
19
+ *
20
+ * 3. Or use the middleware:
21
+ * route.put('/${b.toLowerCase()}s/:${b.toLowerCase()}', 'Update${b}')
22
+ * .middleware('can:update,${b.toLowerCase()}')
23
+ */
24
+
25
+ // TODO: Import or define your ${b} type
26
+ interface ${b} {
27
+ id: number
28
+ user_id: number
29
+ // Add your model properties here
30
+ }
31
+
32
+ export default class ${q} extends BasePolicy<${b}> {
33
+ /**
34
+ * Run before any other checks.
35
+ * Return true to allow, false to deny, null to continue.
36
+ */
37
+ before(user: UserModel | null, ability: string): boolean | null {
38
+ // Example: Admins can do anything
39
+ // if (user?.role === 'admin') return true
40
+ return null
41
+ }
42
+
43
+ /**
44
+ * Determine if the user can view any ${b.toLowerCase()}s.
45
+ */
46
+ viewAny(user: UserModel | null): boolean {
47
+ return true
48
+ }
49
+
50
+ /**
51
+ * Determine if the user can view the ${b.toLowerCase()}.
52
+ */
53
+ view(user: UserModel | null, model: ${b}): boolean {
54
+ return true
55
+ }
56
+
57
+ /**
58
+ * Determine if the user can create ${b.toLowerCase()}s.
59
+ */
60
+ create(user: UserModel | null): boolean {
61
+ return user !== null
62
+ }
63
+
64
+ /**
65
+ * Determine if the user can update the ${b.toLowerCase()}.
66
+ */
67
+ update(user: UserModel | null, model: ${b}): boolean {
68
+ return user?.id === model.user_id
69
+ }
70
+
71
+ /**
72
+ * Determine if the user can delete the ${b.toLowerCase()}.
73
+ */
74
+ delete(user: UserModel | null, model: ${b}): boolean {
75
+ return user?.id === model.user_id
76
+ }
77
+
78
+ /**
79
+ * Determine if the user can restore the ${b.toLowerCase()}.
80
+ */
81
+ restore(user: UserModel | null, model: ${b}): boolean {
82
+ return user?.id === model.user_id
83
+ }
84
+
85
+ /**
86
+ * Determine if the user can permanently delete the ${b.toLowerCase()}.
87
+ */
88
+ forceDelete(user: UserModel | null, model: ${b}): boolean {
89
+ return user?.id === model.user_id
90
+ }
91
+ }
92
+ `}async function U(q,b){let z=J.appPath("Gates.ts");try{let v=await R(z),I=v.match(/export const policies[^{]*\{([^}]*)\}/);if(I){let H=I[1]??"";if(H.includes(`'${q}'`)){B.info(`Policy for '${q}' already registered in Gates.ts`);return}let G=` '${q}': '${b}',
93
+ `,K=`${H.trimEnd()}
94
+ ${G}`;v=v.replace(/export const policies[^{]*\{([^}]*)\}/,`export const policies: Record<string, string | { policy: string, model?: string }> = {${K}}`),await L(z,v),B.success(`Registered policy '${b}' for '${q}' in Gates.ts`)}}catch(v){B.warn(`Could not register policy in Gates.ts: ${v.message}`),B.info("You may need to manually add it to app/Gates.ts")}}
95
+ export{X as A};
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ import{installPackage as t}from"@stacksjs/cli";async function o(a){if(a?.table)await n();if(a?.calendar)await s()}async function r(a){return await o(a)}async function n(){await t("@stacksjs/table")}async function s(){await t("@stacksjs/calendar")}async function d(a){for(let i of a)await t(i)}
3
+ export{o as ab,r as bb,n as cb,s as db,d as eb};
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ var{Glob:U}=globalThis.Bun;var B={user:"person.fill",team:"person.2.fill",subscriber:"envelope.open.fill",subscriberemail:"envelope.fill",post:"doc.text.fill",page:"doc.fill",product:"cube.box.fill",productvariant:"cube.fill",productunit:"scalemass.fill",order:"list.clipboard.fill",orderitem:"list.bullet.clipboard.fill",customer:"person.crop.circle.fill",payment:"creditcard.fill",paymentmethod:"creditcard.and.123",paymentproduct:"creditcard.fill",paymenttransaction:"creditcard.fill",category:"tag.fill",tag:"tag",comment:"bubble.left.fill",author:"person.text.rectangle.fill",notification:"bell.fill",job:"briefcase.fill",log:"list.bullet.rectangle.portrait.fill",campaign:"megaphone.fill",review:"star.fill",coupon:"ticket.fill",giftcard:"giftcard.fill",cart:"cart.fill",cartitem:"cart.badge.plus",taxrate:"percent",transaction:"arrow.left.arrow.right.circle.fill",subscription:"repeat.circle.fill",emaillist:"envelope.badge.person.crop",socialpost:"bubble.left.and.bubble.right.fill",manufacturer:"building.2.fill",shippingmethod:"shippingbox.fill",shippingzone:"map.fill",shippingrate:"dollarsign.circle.fill",deliveryroute:"map.fill",driver:"car.fill",digitaldelivery:"arrow.down.doc.fill",licensekey:"key.fill",loyaltypoint:"star.circle.fill",loyaltyreward:"gift.fill",printdevice:"printer.fill",receipt:"doc.text.fill",waitlistproduct:"clock.fill",waitlistrestaurant:"clock.badge.checkmark.fill",websocket:"antenna.radiowaves.left.and.right",default:"tablecells.fill"},V=new Set(["activity","request","error","failedjob"]),z=new Set(["user","team","subscriber","post","page","product","order","customer","payment","coupon","category","tag","comment","author","notification","job","campaign","review","gift-card"]),Y={user:"data",team:"data",subscriber:"data",activity:"data",campaign:"marketing",emaillist:"marketing",socialpost:"marketing",subscriberemail:"marketing",comment:"content",tag:"content",paymentmethod:"commerce",paymentproduct:"commerce",paymenttransaction:"commerce",subscription:"commerce",deployment:"system",error:"system",failedjob:"system",job:"system",log:"system",notification:"system",release:"system",request:"system"};function E(j){return j.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"")}function G(j){return B[j.toLowerCase()]||B.default||"database"}function W(j,J,k){if(k)return k;let F=j.includes("/")?(j.split("/")[0]??"").toLowerCase():"";if(F==="commerce")return"commerce";if(F==="content")return"content";if(F==="realtime")return"system";return Y[J.replace(/-/g,"")]??"data"}async function H(j,J,k,F){try{let K=new U("**/*.ts");for await(let Q of K.scan({cwd:j})){if(Q.includes("README")||Q.includes(".d.ts"))continue;let X=Q.replace(/\.ts$/,"").split("/").pop()||"",$=X.toLowerCase();if(X&&!J.has($)&&!V.has($)){J.add($);let Z=E(X);k.push({name:X,icon:G(X),id:Z,category:W(Q,Z,F)})}}}catch{}}async function A(j,J){let k=[],F=new Set;return await Promise.all([H(j,F,k,"userland"),H(J,F,k)]),k.sort((K,Q)=>K.name.localeCompare(Q.name))}function S(j){return j.map((J)=>({id:J.id,name:J.name,icon:J.icon,hasDedicatedPage:z.has(J.id),category:J.category??"data"}))}async function _(j){try{return Bun.serve({port:j,fetch:()=>new Response}).stop(!0),!0}catch{return!1}}async function T(j,J=20){for(let k=0;k<J;k++){let F=j+k;if(await _(F))return F}return j}async function x(j,J=500){let k=Date.now();while(Date.now()-k<J){try{let F=await fetch(`http://localhost:${j}/`,{method:"HEAD"});if(F.ok||F.status===404)return!0}catch{}await new Promise((F)=>setTimeout(F,25))}return!1}function q(j,J,k,F){return J.filter((K)=>(K.category??"data")===k).filter((K)=>!z.has(K.id)&&!F.has(K.id)).map((K)=>({id:`model-${K.id}`,label:K.name,icon:K.icon,url:`${j}/models/${K.id}`}))}function L(j,J,k={}){let F={library:k.library??!0,content:k.content??!0,commerce:k.commerce??!0,marketing:k.marketing??!0,analytics:k.analytics??!0,management:k.management??!0,utilities:k.utilities??!0},K={dashboard:k.data?.dashboard??!0,activity:k.data?.activity??!0,users:k.data?.users??!0,teams:k.data?.teams??!0,subscribers:k.data?.subscribers??!0,allModels:k.data?.allModels??!0},Q=[];if(Q.push({id:"home",title:"Home",items:[{id:"home",label:"Dashboard",icon:"house.fill",url:`${j}/`},{id:"dependencies",label:"Dependencies",icon:"shippingbox.fill",url:`${j}/dependencies`},{id:"health",label:"Health",icon:"heart.text.square.fill",url:`${j}/health`}]}),F.library)Q.push({id:"library",title:"Library",items:[{id:"functions",label:"Functions",icon:"function",url:`${j}/functions`},{id:"packages",label:"Packages",icon:"shippingbox.fill",url:`${j}/packages`}]});if(F.content)Q.push({id:"content",title:"Content",items:[{id:"content-dashboard",label:"Dashboard",icon:"gauge.with.dots.needle.33percent",url:`${j}/content/dashboard`},{id:"files",label:"Files",icon:"folder.fill",url:`${j}/content/files`},{id:"pages",label:"Pages",icon:"doc.fill",url:`${j}/content/pages`},{id:"posts",label:"Posts",icon:"text.bubble.fill",url:`${j}/content/posts`},{id:"categories",label:"Categories",icon:"tag.fill",url:`${j}/content/categories`},{id:"tags",label:"Tags",icon:"tag",url:`${j}/content/tags`},{id:"comments",label:"Comments",icon:"bubble.left.fill",url:`${j}/content/comments`},{id:"authors",label:"Authors",icon:"person.text.rectangle.fill",url:`${j}/content/authors`},{id:"seo",label:"SEO",icon:"magnifyingglass",url:`${j}/content/seo`},...q(j,J,"content",new Set(["page","post","category","tag","comment","author"]))]});Q.push({id:"app",title:"App",items:[{id:"deployments",label:"Deployments",icon:"rocket.fill",url:`${j}/deployments`},{id:"requests",label:"Requests",icon:"arrow.left.arrow.right",url:`${j}/requests`},{id:"realtime",label:"Realtime",icon:"link",url:`${j}/realtime`},{id:"actions",label:"Actions",icon:"bolt.fill",url:`${j}/actions`},{id:"commands",label:"Commands",icon:"terminal.fill",url:`${j}/commands`},{id:"queue",label:"Queue",icon:"list.bullet.rectangle.fill",url:`${j}/queue`},{id:"jobs",label:"Jobs",icon:"briefcase.fill",url:`${j}/jobs`},{id:"inbox",label:"Inbox",icon:"tray.full.fill",url:`${j}/inbox`},{id:"queries",label:"Queries",icon:"magnifyingglass.circle.fill",url:`${j}/queries`},{id:"notifications",label:"Notifications",icon:"bell.fill",url:`${j}/notifications/dashboard`},...q(j,J,"system",new Set)]});let X=[];if(K.dashboard)X.push({id:"data-dashboard",label:"Dashboard",icon:"gauge.with.dots.needle.33percent",url:`${j}/data/dashboard`});if(K.activity)X.push({id:"activity",label:"Activity",icon:"waveform.path.ecg",url:`${j}/data/activity`});if(K.users)X.push({id:"users",label:"Users",icon:"person.crop.circle.fill",url:`${j}/data/users`});if(K.teams)X.push({id:"teams",label:"Teams",icon:"person.3.fill",url:`${j}/data/teams`});if(K.subscribers)X.push({id:"subscribers",label:"Subscribers",icon:"envelope.fill",url:`${j}/data/subscribers`});if(K.allModels)X.push({id:"data-models",label:"All Models",icon:"square.grid.2x2.fill",url:`${j}/models`});let $=J.filter((Z)=>Z.category==="userland"||Z.category==="data"||Z.category===void 0).filter((Z)=>!z.has(Z.id)).map((Z)=>({id:`model-${Z.id}`,label:Z.name,icon:Z.icon,url:`${j}/models/${Z.id}`}));if(Q.push({id:"data",title:"Data",items:[...X,...$]}),F.commerce)Q.push({id:"commerce",title:"Commerce",items:[{id:"commerce-dashboard",label:"Dashboard",icon:"gauge.with.dots.needle.33percent",url:`${j}/commerce/dashboard`},{id:"customers",label:"Customers",icon:"person.crop.circle.fill",url:`${j}/commerce/customers`},{id:"orders",label:"Orders",icon:"list.clipboard.fill",url:`${j}/commerce/orders`},{id:"products",label:"Products",icon:"cube.box.fill",url:`${j}/commerce/products`},{id:"coupons",label:"Coupons",icon:"ticket.fill",url:`${j}/commerce/coupons`},{id:"gift-cards",label:"Gift Cards",icon:"giftcard.fill",url:`${j}/commerce/gift-cards`},{id:"payments",label:"Payments",icon:"creditcard.fill",url:`${j}/commerce/payments`},{id:"delivery",label:"Delivery",icon:"truck.box.fill",url:`${j}/commerce/delivery`},{id:"taxes",label:"Taxes",icon:"percent",url:`${j}/commerce/taxes`},...q(j,J,"commerce",new Set(["customer","order","product","coupon","gift-card","payment","review","category"]))]});if(F.marketing)Q.push({id:"marketing",title:"Marketing",items:[{id:"lists",label:"Lists",icon:"list.bullet",url:`${j}/marketing/lists`},{id:"social-posts",label:"Social Posts",icon:"clock.fill",url:`${j}/marketing/social-posts`},{id:"campaigns",label:"Campaigns",icon:"megaphone.fill",url:`${j}/marketing/campaigns`},{id:"marketing-reviews",label:"Reviews",icon:"star.fill",url:`${j}/marketing/reviews`},...q(j,J,"marketing",new Set(["campaign"]))]});if(F.analytics)Q.push({id:"analytics",title:"Analytics",items:[{id:"analytics-web",label:"Web",icon:"globe",url:`${j}/analytics/web`},{id:"analytics-blog",label:"Blog",icon:"doc.text.fill",url:`${j}/analytics/blog`},{id:"analytics-commerce",label:"Commerce",icon:"cart.fill",url:`${j}/analytics/commerce/web`},{id:"analytics-marketing",label:"Marketing",icon:"megaphone.fill",url:`${j}/analytics/marketing`}]});if(F.management)Q.push({id:"management",title:"Management",items:[{id:"cloud",label:"Cloud",icon:"cloud.fill",url:`${j}/cloud`},{id:"servers",label:"Servers",icon:"server.rack",url:`${j}/servers`},{id:"serverless",label:"Serverless",icon:"bolt.horizontal.circle.fill",url:`${j}/serverless`},{id:"dns",label:"DNS",icon:"network",url:`${j}/dns`},{id:"mailboxes",label:"Mailboxes",icon:"tray.full.fill",url:`${j}/mailboxes`},{id:"logs",label:"Logs",icon:"list.bullet.rectangle.portrait.fill",url:`${j}/logs`}]});if(F.utilities)Q.push({id:"utilities",title:"Utilities",items:[{id:"buddy",label:"AI Buddy",icon:"bubble.left.and.bubble.right.fill",url:`${j}/buddy`},{id:"environment",label:"Environment",icon:"key.fill",url:`${j}/environment`},{id:"access-tokens",label:"Access Tokens",icon:"key.horizontal.fill",url:`${j}/access-tokens`},{id:"settings",label:"Settings",icon:"gear",url:`${j}/settings/billing`}]});return{sections:Q,minWidth:200,maxWidth:280}}function O(j){return`http://localhost:${j}/?native-sidebar=1`}
3
+ export{B as sa,V as ta,z as ua,E as va,G as wa,H as xa,A as ya,S as za,_ as Aa,T as Ba,x as Ca,L as Da,O as Ea};
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ import{fb as r,gb as M}from"./chunk-96b7fcmd.js";var o={};r(o,{runActions:()=>i,runAction:()=>n,hasAction:()=>y});import{existsSync as c}from"fs";import T from"process";import{buddyOptions as v,runCommand as s,runCommands as e}from"@stacksjs/cli";import{err as O}from"@stacksjs/error-handling";import{log as I}from"@stacksjs/logging";import*as H from"@stacksjs/path";async function a(z){let J=[];J.push(H.actionsPath(`src/${z}.ts`));try{let V=import.meta.resolve("@stacksjs/actions/package.json");if(V){let Y=new URL(V).pathname,K=Y.slice(0,Y.lastIndexOf("/"));J.push(`${K}/dist/src/${z}.js`),J.push(`${K}/src/${z}.ts`)}}catch{}for(let V of J)if(await Bun.file(V).exists())return V;return null}async function n(z,J){if(I.debug(`[action] Running: ${z}`),z==="dev/views")try{let Z=H.projectPath("pantry");if(!T.env.NODE_PATH?.includes(Z))T.env.NODE_PATH=T.env.NODE_PATH?`${Z}:${T.env.NODE_PATH}`:Z,M("module").Module._initPaths?.();let R=H.projectPath("serve.ts");if(await Bun.file(R).exists())await import(R);else{let N=Number(T.env.PORT)||3000,_=`http://127.0.0.1:${Number(T.env.PORT_API)||3008}`,D;try{({serve:D}=await import(H.projectPath("pantry/bun-plugin-stx/dist/serve.js")))}catch{({serve:D}=await import("./chunk-wv5yb5wb.js"))}let b;try{let G=H.projectPath("pantry/@stacksjs/stx/dist/index.js");if(await Bun.file(G).exists())b=await import(G)}catch{}let j="auth-token";try{let{config:G}=await import("@stacksjs/config");j=G?.auth?.defaultTokenName??j}catch{}let{AsyncLocalStorage:h}=await import("async_hooks"),w=new h;globalThis.requestContext={cookie(G){return w.getStore()?.cookies?.[G]??null},url(){return w.getStore()?.url??""}};let u=(G)=>{let Q={},U=G.headers.get("cookie")||"";if(!U)return Q;for(let B of U.split(";")){let E=B.trim(),$=E.indexOf("=");if($===-1)continue;let L=E.slice(0,$).trim(),x=E.slice($+1).trim();if(!L)continue;try{Q[L]=decodeURIComponent(x)}catch{Q[L]=x}}return Q},l=async(G)=>{let Q=new URL(G.url),U=`${_}${Q.pathname}${Q.search}`,B=new Headers(G.headers);B.delete("host"),B.delete("content-length"),B.set("x-forwarded-host",Q.host),B.set("x-forwarded-proto",Q.protocol.replace(":",""));let E=G.method==="GET"||G.method==="HEAD"?void 0:await G.arrayBuffer(),$=await fetch(U,{method:G.method,headers:B,body:E,redirect:"manual"}),L=new Headers($.headers);return L.delete("content-length"),L.delete("content-encoding"),new Response($.body,{status:$.status,statusText:$.statusText,headers:L})},P=async(G)=>{for(let Q of G)try{if(await Bun.file(H.projectPath(Q)).exists())return Q}catch{}return G[0]},d=await P(["resources/views/layouts","resources/layouts"]),p=await P(["resources/views/components","resources/components"]);await D({patterns:["resources/views","storage/framework/defaults/resources/views"],port:N,componentsDir:"storage/framework/defaults/resources/components",layoutsDir:d,partialsDir:p,fallbackPartialsDir:"resources/views",quiet:!0,...b&&{stxModule:b},auth:{cookieName:j,redirectTo:"/login"},onRequest:async(G)=>{if(new URL(G.url).pathname.startsWith("/api/"))return l(G);return w.enterWith({cookies:u(G),url:G.url}),null}})}return{ok:!0,value:{}}}catch(Z){return O(`Failed to start dev server: ${Z}`)}if(!(z.includes("/")||["dev","build","install","upgrade","migrate"].some((Z)=>z.startsWith(Z)))){let Z=new Bun.Glob("**/*.{ts,js}"),R={cwd:H.userActionsPath(),onlyFiles:!0,absolute:!0},F=[],N=H.userActionsPath();for await(let X of Z.scan(R)){if(X.replace(`${N}/`,"").replace(/\.(ts|js)$/,"")===z||X.endsWith(`${z}.ts`)||X.endsWith(`${z}.js`))return I.debug(`[action] Resolved: ${z} \u2192 ${X}`),await(await import(X)).default.handle(void 0);F.push(X)}for(let X of F)try{let _=await import(X);if(_.name===z)return I.debug(`[action] Resolved: ${z} \u2192 ${X}`),await _.handle()}catch(_){}}let Y=await a(z);if(!Y)return O(`Action '${z}' not found in storage/framework/core/actions/src or @stacksjs/actions`);I.debug(`[action] Resolved: ${z} \u2192 ${Y}`);let K=z.startsWith("dev/"),W=K?"--watch":"",k=K?"":v(J)||"",f=`bun ${W} ${Y} ${k}`.trimEnd(),C=H.projectPath("pantry"),A=T.env.NODE_PATH,m=A?`${C}:${A}`:C,S=J?.verbose||K&&!J?.quiet,q={cwd:J?.cwd||H.projectPath(),...J,stdout:S?"inherit":void 0,stderr:S?"inherit":void 0,env:{...J?.env,NODE_PATH:m}},g=await s(f,q);return I.debug(`[action] Completed: ${z}`),g}async function i(z,J){if(!z.length)return O("No actions were specified");for(let W of z)if(!y(W))return O(`The specified action "${W}" does not exist`);let V=v(J)||"",Y={cwd:J?.cwd||H.projectPath(),...J},K=z.map((W)=>`bun ${H.relativeActionsPath(`src/${W}.ts`)} ${V}`);return await e(K,Y)}function y(z){let J=[`${z}.ts`,`${z}`,`Dashboard/${z}.ts`,`Dashboard/${z}`,`Buddy/${z}.ts`,`Buddy/${z}`],V=[`src/${z}.ts`,`src/${z}`,`${z}.ts`,`${z}`];return[...J.map((K)=>H.userActionsPath(K)),...V.map((K)=>H.actionsPath(K))].some((K)=>c(K))}
3
+ export{n as Ya,i as Za,y as _a,o as $a};
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ var b={name:"hello-world",owner:"@stacksjs",repository:"stacksjs/stacks",license:"MIT",author:"Chris Breuer",contributors:["Chris Breuer <chris@stacksjs.com>"],defaultLanguage:"en",releaseable:!0,webComponents:{name:"hello-world-elements",description:"Your framework agnostic web component library description.",keywords:["custom-elements","web-components","library","framework-agnostic","typescript","javascript"],tags:[{name:["HelloWorld","AppHelloWorld"],description:"The Hello World custom element, built via this framework.",attributes:[{name:"greeting",description:"The greeting."}]}]},functions:{name:"hello-world-fx",description:"Your function library description.",keywords:["functions","composables","library","typescript","javascript"],shouldGenerateSourcemap:!1,files:["counter","dark"]}};
3
+ export{b as Wa};
@@ -0,0 +1,5 @@
1
+ // @bun
2
+ import"./chunk-96b7fcmd.js";var q={type:"aws",useLoadBalancer:!0,app:{name:"app-server-1",domain:"stacksjs.com",region:"us-east-1",type:"app",size:"t3.micro",diskSize:20,serverOS:"ubuntu-20-lts-x86_64",bunVersion:"1.1.26",database:"sqlite",databaseName:"stacks"},app2:{name:"app-server-2",domain:"stacksjs.com",instanceType:"t3.micro",userData:`#!/bin/bash
3
+ echo "Hello World from App Server 2!" > /tmp/test.txt
4
+ chown ubuntu:ubuntu /tmp/test.txt
5
+ `},web:{name:"web-server",domain:"ow3.org",region:"us-east-1",type:"web",size:"t3.micro",diskSize:20,serverOS:"ubuntu-20-lts-x86_64",bunVersion:"1.1.26"},cache:{name:"cache-server",domain:"stacksjs.com",region:"us-east-1",type:"cache",size:"t3.micro",diskSize:20,serverOS:"ubuntu-20-lts-x86_64",bunVersion:"1.1.26"}};import{env as m}from"@stacksjs/env";var C={project:{name:"stacks",slug:"stacks",region:"us-east-1"},mode:"server",environments:{production:{type:"production",region:"us-east-1",variables:{NODE_ENV:"production",LOG_LEVEL:"info"}},staging:{type:"staging",region:"us-east-1",variables:{NODE_ENV:"staging",LOG_LEVEL:"debug"}},development:{type:"development",region:"us-east-1",variables:{NODE_ENV:"development",LOG_LEVEL:"debug"}}},infrastructure:{compute:{instances:1,size:"small",disk:{size:20,type:"ssd",encrypted:!0}},servers:{app:q.app},containers:{api:{cpu:512,memory:1024,port:3000,healthCheck:"/health",desiredCount:2,autoScaling:{min:1,max:10,targetCpuUtilization:70,targetMemoryUtilization:80}}},loadBalancer:{enabled:!0,type:"application",healthCheck:{path:"/health",interval:30,healthyThreshold:2,unhealthyThreshold:5}},ssl:{enabled:!0,provider:"acm",domains:m.SSL_DOMAINS?.split(",")||["stacksjs.com","www.stacksjs.com"],redirectHttp:!0,letsEncrypt:{email:m.LETSENCRYPT_EMAIL||"admin@stacksjs.com",staging:!1,autoRenew:!0}},dns:{domain:m.APP_DOMAIN||"stacksjs.com",hostedZoneId:m.AWS_HOSTED_ZONE_ID||"Z01455702Q7952O6RCY37"},storage:{public:{public:!0,encryption:!0,versioning:!0,website:{indexDocument:"index.html",errorDocument:"index.html"}},private:{encryption:!0,versioning:!0},docs:{public:!0,encryption:!0,versioning:!0,path:"/docs",pathRewriteStyle:"flat",website:{indexDocument:"index.html",errorDocument:"404.html"}},blog:{public:!0,encryption:!0,versioning:!0,path:"/blog",website:{indexDocument:"index.html",errorDocument:"404.html"}},logs:{encryption:!0,versioning:!1},backups:{encryption:!0,versioning:!0},email:{public:!1,encryption:!0,versioning:!1}},functions:{},queues:{jobs:{visibilityTimeout:120,deadLetterQueue:!0,maxReceiveCount:3}},databases:{},cdn:{},monitoring:{}},sites:{main:{root:"/var/www/app",path:"/",domain:m.APP_DOMAIN||"stacksjs.com"}}},w={},E=w;export{C as tsCloud,E as default};
@@ -0,0 +1,88 @@
1
+ // @bun
2
+ import{D as x}from"./chunk-6x1m5rkr.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`)}
88
+ export{U as w,h as x};
@@ -0,0 +1 @@
1
+ // @bun
@@ -0,0 +1,3 @@
1
+ // @bun
2
+ import{Ua as z}from"./chunk-v0wnrnaa.js";import{Ya as U}from"./chunk-n1y0gpv6.js";import{gb as O}from"./chunk-96b7fcmd.js";import*as Q from"fs";import R from"process";import{runCommand as b}from"@stacksjs/cli";import{Action as Y,NpmScript as H}from"@stacksjs/enums";import{log as B}from"@stacksjs/logging";import{frameworkPath as I,projectPath as K,storagePath as D}from"@stacksjs/path";import{ExitCode as X}from"@stacksjs/types";import{runNpmScript as M}from"@stacksjs/utils";async function T(q){if(q?.types)await W(q);else if(q?.entries)await V(q);else if(q?.webTypes)await v(q);else if(q?.customData)await y();else if(q?.ideHelpers)await E(q);else if(q?.componentMeta)await N();else if(q?.coreSymlink)await x();else if(q?.openApiSpec)await S()}function u(q){return T(q)}async function V(q){let F=await U(Y.GenerateLibraryEntries,{...q,cwd:K()});if(F.isErr)B.error("There was an error generating your library entry points",F.error),R.exit(X.FatalError);B.success("Library entry points generated successfully")}async function v(q){let F=await M(H.GenerateWebTypes,q);if(F.isErr)B.error("There was an error generating the web-types.json file.",F.error),R.exit(X.FatalError);B.success("Successfully generated the web-types.json file")}async function y(){let q=await z();if(q.isErr)B.error("There was an error generating the custom-elements.json file.",q.error),R.exit(X.FatalError);await U(Y.LintFix,{verbose:!0,cwd:K()}),B.success("Successfully generated the custom-elements.json file")}async function E(q){let F=await M(H.GenerateIdeHelpers,q);if(F.isErr)B.error("There was an error generating IDE helpers.",F.error),R.exit(X.FatalError);await U(Y.LintFix,{verbose:!0,cwd:K()}),B.success("Successfully generated IDE helpers")}async function N(){let q=await z();if(q.isErr)B.error("There was an error generating your component meta information.",q.error),R.exit(X.FatalError);await U(Y.LintFix,{verbose:!0,cwd:K()}),B.success("Successfully generated component meta information")}async function W(q){let F=await M(H.GenerateTypes,{cwd:I(),...q});if(F.isErr)throw B.error("There was an error generating your types.",F.error),F.error instanceof Error?F.error:Error(String(F.error));B.success("Types were generated successfully")}async function c(q){try{let G=`${I()}/package.json`,J=Q.existsSync(G)?Q.readFileSync(G,"utf-8"):"";if(!(J?JSON.parse(J):{})?.scripts?.["generate:types"]){B.warn("[generate:types --watch] no `generate:types` script in framework package.json \u2014 type regeneration disabled. dev:api will keep running, but type definitions won't auto-refresh on model/config changes.");return}}catch{}let F=[K("app/Models"),D("framework/defaults/app/Models"),K("config"),K("database/migrations")];B.info(`[generate:types --watch] watching ${F.length} directories`);let Z=null,_=!1,L=()=>{if(Z)clearTimeout(Z);Z=setTimeout(async()=>{if(_)return;_=!0;try{B.info("[generate:types --watch] change detected, regenerating\u2026"),await W(q),B.success("[generate:types --watch] types up to date")}catch(G){B.error("[generate:types --watch] regeneration failed:",G)}finally{_=!1}},200)},$=[];for(let G of F)try{if(!Q.existsSync(G))continue;let J=Q.watch(G,{recursive:!0},()=>L());$.push(J)}catch(J){B.warn(`[generate:types --watch] cannot watch ${G}: ${J}`)}if($.length===0){B.warn("[generate:types --watch] no directories to watch \u2014 exiting");return}await new Promise((G)=>{R.once("SIGINT",()=>{B.info("[generate:types --watch] stopping");for(let J of $)try{J.close()}catch{}G()})})}function g(){B.success("Successfully generated `./pantry.yaml` based on your config")}async function l(){}async function x(){await b(`ln -s ${I()} ${K(".stacks")}`)}async function S(){let{generateOpenApi:q}=await import("@stacksjs/api");await q(),B.success("Successfully generated Open API Spec")}
3
+ export{T as Ha,u as Ia,V as Ja,v as Ka,y as La,E as Ma,N as Na,W as Oa,c as Pa,g as Qa,l as Ra,x as Sa,S as Ta};
@@ -0,0 +1,93 @@
1
+ // @bun
2
+ import{gb as L}from"./chunk-96b7fcmd.js";import C from"process";import{log as D}from"@stacksjs/cli";async function S(){try{return(await import("./chunk-n2x7v39b.js")).tsCloud||null}catch{return null}}async function N(){let G=await S();return{name:G?.project?.name||"stacks",region:G?.project?.region||"us-east-1"}}async function b(G){try{let{AWSClient:Q}=await import("@stacksjs/ts-cloud"),J=new Q,_=new URLSearchParams({Action:"GetCallerIdentity",Version:"2011-06-15"}),K=await J.request({service:"sts",region:G,method:"POST",path:"/",body:_.toString()}),j=String(K).match(/<Account>(\d+)<\/Account>/);if(j&&j[1])return j[1];return C.env.AWS_ACCOUNT_ID||""}catch(Q){return C.env.AWS_ACCOUNT_ID||""}}async function f(G){let{environment:Q}=G,J=await S();if(!J)throw Error("Cloud configuration not found. Ensure config/cloud.ts exports tsCloud.");let{InfrastructureGenerator:_}=await import("@stacksjs/ts-cloud"),j=new _({config:J,environment:Q}).generate().getBuilder().build();return JSON.stringify(j)}function v(G){let Q={green:"\x1B[32m",yellow:"\x1B[33m",red:"\x1B[31m",cyan:"\x1B[36m",gray:"\x1B[90m",reset:"\x1B[0m"};if(G.includes("COMPLETE")&&!G.includes("ROLLBACK"))return`${Q.green}${G}${Q.reset}`;if(G.includes("IN_PROGRESS"))return`${Q.yellow}${G}${Q.reset}`;if(G.includes("FAILED")||G.includes("ROLLBACK"))return`${Q.red}${G}${Q.reset}`;if(G.includes("DELETE"))return`${Q.gray}${G}${Q.reset}`;return G}async function p(G){let{region:Q,domain:J,sslDomains:_,hostedZoneId:K,albDnsName:j,stackName:Y}=G;console.log(""),console.log("Setting up SSL certificate...");try{let{Route53Client:$,ACMClient:w,AWSClient:F}=await import("@stacksjs/ts-cloud"),M=new $(Q),V=new w(Q),W=new F;console.log(` Requesting SSL certificate for ${J}...`);let P=await V.requestCertificate({DomainName:_[0]??J,SubjectAlternativeNames:_.length>1?_.slice(1):void 0,ValidationMethod:"DNS"});console.log(` Certificate ARN: ${P.CertificateArn}`),await new Promise((R)=>setTimeout(R,5000));let U=await V.describeCertificate({CertificateArn:P.CertificateArn});console.log(" Adding DNS validation records...");for(let R of U.DomainValidationOptions||[])if(R.ResourceRecord)await M.changeResourceRecordSets({HostedZoneId:K,ChangeBatch:{Changes:[{Action:"UPSERT",ResourceRecordSet:{Name:R.ResourceRecord.Name,Type:"CNAME",TTL:300,ResourceRecords:[{Value:R.ResourceRecord.Value}]}}]}});console.log("\u2713 Validation records added"),console.log(" Waiting for certificate validation (this may take 1-5 minutes)...");for(let R=0;R<30;R++){let Z=await V.describeCertificate({CertificateArn:P.CertificateArn});if(Z.Status==="ISSUED"){console.log("\u2713 Certificate issued!");let{AWSCloudFormationClient:A}=await import("@stacksjs/ts-cloud"),B=await new A(Q).listStackResources(Y),I=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="ApplicationLoadBalancer")?.PhysicalResourceId,X=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="ECSTargetGroup")?.PhysicalResourceId||B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="WebTargetGroup")?.PhysicalResourceId;if(I&&X){console.log(" Creating HTTPS listener...");let O=new URLSearchParams({Action:"CreateListener",LoadBalancerArn:I,Protocol:"HTTPS",Port:"443","Certificates.member.1.CertificateArn":P.CertificateArn,"DefaultActions.member.1.Type":"forward","DefaultActions.member.1.TargetGroupArn":X,Version:"2015-12-01"});await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:O.toString()}),console.log("\u2713 HTTPS listener created!"),console.log(" Configuring HTTP to HTTPS redirect...");let h=new URLSearchParams({Action:"DescribeListeners",LoadBalancerArn:I,Version:"2015-12-01"}),H=await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:h.toString()}),x=H?.DescribeListenersResponse?.DescribeListenersResult?.Listeners?.member||H?.DescribeListenersResult?.Listeners?.member,T=(Array.isArray(x)?x:x?[x]:[]).find((y)=>y.Port==="80"||y.Port===80);if(T){let y=new URLSearchParams({Action:"ModifyListener",ListenerArn:T.ListenerArn,"DefaultActions.member.1.Type":"redirect","DefaultActions.member.1.RedirectConfig.Protocol":"HTTPS","DefaultActions.member.1.RedirectConfig.Port":"443","DefaultActions.member.1.RedirectConfig.StatusCode":"HTTP_301",Version:"2015-12-01"});await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:y.toString()}),console.log("\u2713 HTTP to HTTPS redirect configured!")}}let z=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="CloudFrontDistribution")?.PhysicalResourceId;if(z){console.log(" Updating CloudFront distribution with SSL certificate...");let O=await W.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${z}/config`}),h=O._headers?.etag||O._headers?.ETag,H=O.DistributionConfig;if(H&&h){H.Aliases={Quantity:_.length,Items:_},H.ViewerCertificate={ACMCertificateArn:P.CertificateArn,SSLSupportMethod:"sni-only",MinimumProtocolVersion:"TLSv1.2_2021",CloudFrontDefaultCertificate:!1};let x=`<?xml version="1.0" encoding="UTF-8"?>
3
+ <DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
4
+ <CallerReference>${H.CallerReference}</CallerReference>
5
+ <Aliases>
6
+ <Quantity>${_.length}</Quantity>
7
+ <Items>
8
+ ${_.map((q)=>` <CNAME>${q}</CNAME>`).join(`
9
+ `)}
10
+ </Items>
11
+ </Aliases>
12
+ <DefaultRootObject>${H.DefaultRootObject||"index.html"}</DefaultRootObject>
13
+ <Origins>
14
+ <Quantity>${H.Origins?.Quantity||0}</Quantity>
15
+ <Items>
16
+ ${(H.Origins?.Items||[]).map((q)=>` <Origin>
17
+ <Id>${q.Id}</Id>
18
+ <DomainName>${q.DomainName}</DomainName>
19
+ ${q.OriginPath?`<OriginPath>${q.OriginPath}</OriginPath>`:"<OriginPath></OriginPath>"}
20
+ ${q.S3OriginConfig?`<S3OriginConfig><OriginAccessIdentity>${q.S3OriginConfig.OriginAccessIdentity||""}</OriginAccessIdentity></S3OriginConfig>`:""}
21
+ ${q.CustomOriginConfig?`<CustomOriginConfig>
22
+ <HTTPPort>${q.CustomOriginConfig.HTTPPort}</HTTPPort>
23
+ <HTTPSPort>${q.CustomOriginConfig.HTTPSPort}</HTTPSPort>
24
+ <OriginProtocolPolicy>${q.CustomOriginConfig.OriginProtocolPolicy}</OriginProtocolPolicy>
25
+ <OriginSslProtocols><Quantity>${q.CustomOriginConfig.OriginSslProtocols?.Quantity||1}</Quantity><Items>${(q.CustomOriginConfig.OriginSslProtocols?.Items||["TLSv1.2"]).map((T)=>`<SslProtocol>${T}</SslProtocol>`).join("")}</Items></OriginSslProtocols>
26
+ </CustomOriginConfig>`:""}
27
+ ${q.OriginAccessControlId?`<OriginAccessControlId>${q.OriginAccessControlId}</OriginAccessControlId>`:""}
28
+ <ConnectionAttempts>${q.ConnectionAttempts||3}</ConnectionAttempts>
29
+ <ConnectionTimeout>${q.ConnectionTimeout||10}</ConnectionTimeout>
30
+ </Origin>`).join(`
31
+ `)}
32
+ </Items>
33
+ </Origins>
34
+ <DefaultCacheBehavior>
35
+ <TargetOriginId>${H.DefaultCacheBehavior?.TargetOriginId}</TargetOriginId>
36
+ <ViewerProtocolPolicy>${H.DefaultCacheBehavior?.ViewerProtocolPolicy||"redirect-to-https"}</ViewerProtocolPolicy>
37
+ <AllowedMethods>
38
+ <Quantity>${H.DefaultCacheBehavior?.AllowedMethods?.Quantity||3}</Quantity>
39
+ <Items>${(H.DefaultCacheBehavior?.AllowedMethods?.Items||["GET","HEAD","OPTIONS"]).map((q)=>`<Method>${q}</Method>`).join("")}</Items>
40
+ <CachedMethods>
41
+ <Quantity>${H.DefaultCacheBehavior?.AllowedMethods?.CachedMethods?.Quantity||2}</Quantity>
42
+ <Items>${(H.DefaultCacheBehavior?.AllowedMethods?.CachedMethods?.Items||["GET","HEAD"]).map((q)=>`<Method>${q}</Method>`).join("")}</Items>
43
+ </CachedMethods>
44
+ </AllowedMethods>
45
+ <Compress>${H.DefaultCacheBehavior?.Compress!==!1}</Compress>
46
+ <CachePolicyId>${H.DefaultCacheBehavior?.CachePolicyId||"658327ea-f89d-4fab-a63d-7e88639e58f6"}</CachePolicyId>
47
+ ${H.DefaultCacheBehavior?.OriginRequestPolicyId?`<OriginRequestPolicyId>${H.DefaultCacheBehavior.OriginRequestPolicyId}</OriginRequestPolicyId>`:""}
48
+ </DefaultCacheBehavior>
49
+ <CacheBehaviors>
50
+ <Quantity>${H.CacheBehaviors?.Quantity||0}</Quantity>
51
+ ${H.CacheBehaviors?.Quantity>0?`<Items>
52
+ ${(H.CacheBehaviors?.Items||[]).map((q)=>` <CacheBehavior>
53
+ <PathPattern>${q.PathPattern}</PathPattern>
54
+ <TargetOriginId>${q.TargetOriginId}</TargetOriginId>
55
+ <ViewerProtocolPolicy>${q.ViewerProtocolPolicy}</ViewerProtocolPolicy>
56
+ <AllowedMethods>
57
+ <Quantity>${q.AllowedMethods?.Quantity||3}</Quantity>
58
+ <Items>${(q.AllowedMethods?.Items||["GET","HEAD","OPTIONS"]).map((T)=>`<Method>${T}</Method>`).join("")}</Items>
59
+ <CachedMethods>
60
+ <Quantity>${q.AllowedMethods?.CachedMethods?.Quantity||2}</Quantity>
61
+ <Items>${(q.AllowedMethods?.CachedMethods?.Items||["GET","HEAD"]).map((T)=>`<Method>${T}</Method>`).join("")}</Items>
62
+ </CachedMethods>
63
+ </AllowedMethods>
64
+ <Compress>${q.Compress!==!1}</Compress>
65
+ <CachePolicyId>${q.CachePolicyId}</CachePolicyId>
66
+ ${q.OriginRequestPolicyId?`<OriginRequestPolicyId>${q.OriginRequestPolicyId}</OriginRequestPolicyId>`:""}
67
+ </CacheBehavior>`).join(`
68
+ `)}
69
+ </Items>`:""}
70
+ </CacheBehaviors>
71
+ <CustomErrorResponses>
72
+ <Quantity>${H.CustomErrorResponses?.Quantity||0}</Quantity>
73
+ ${H.CustomErrorResponses?.Quantity>0?`<Items>
74
+ ${(H.CustomErrorResponses?.Items||[]).map((q)=>` <CustomErrorResponse>
75
+ <ErrorCode>${q.ErrorCode}</ErrorCode>
76
+ <ResponsePagePath>${q.ResponsePagePath}</ResponsePagePath>
77
+ <ResponseCode>${q.ResponseCode}</ResponseCode>
78
+ <ErrorCachingMinTTL>${q.ErrorCachingMinTTL}</ErrorCachingMinTTL>
79
+ </CustomErrorResponse>`).join(`
80
+ `)}
81
+ </Items>`:""}
82
+ </CustomErrorResponses>
83
+ <Comment>${H.Comment||""}</Comment>
84
+ <PriceClass>${H.PriceClass||"PriceClass_100"}</PriceClass>
85
+ <Enabled>${H.Enabled!==!1}</Enabled>
86
+ <ViewerCertificate>
87
+ <ACMCertificateArn>${P.CertificateArn}</ACMCertificateArn>
88
+ <SSLSupportMethod>sni-only</SSLSupportMethod>
89
+ <MinimumProtocolVersion>TLSv1.2_2021</MinimumProtocolVersion>
90
+ </ViewerCertificate>
91
+ <HttpVersion>${H.HttpVersion||"http2and3"}</HttpVersion>
92
+ <IsIPV6Enabled>${H.IsIPV6Enabled!==!1}</IsIPV6Enabled>
93
+ </DistributionConfig>`;await W.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${z}/config`,headers:{"Content-Type":"application/xml","If-Match":h},body:x}),console.log("\u2713 CloudFront distribution updated with SSL certificate!")}}console.log(""),console.log(`\u2713 SSL setup complete! https://${J} should be accessible shortly.`),console.log("");return}if(Z.Status==="FAILED"){console.log("\u2717 Certificate validation failed!");return}await new Promise((A)=>setTimeout(A,1e4))}console.log("\u26A0 Certificate validation timed out. Please check AWS Console.")}catch($){console.log(`\u2717 DNS/SSL setup failed: ${$.message}`),console.log(" You can manually set up DNS and SSL using ./buddy cloud:ssl")}}async function g(G){let{environment:Q,region:J,waitForCompletion:_=!0,verbose:K=!1}=G,Y=(await N()).name,$=`${Y}-cloud`;if(K)console.log(`Deploying ${$} to ${J}...`);try{let{AWSCloudFormationClient:w}=await import("@stacksjs/ts-cloud"),F=new w(J),M=await S(),V=M?.infrastructure?.compute?.mode||M?.mode||"server";if(K)console.log(`Generating CloudFormation template (${V} mode)...`);let W=await f({environment:Q,projectName:Y}),P=51200,U;if(Buffer.byteLength(W,"utf-8")>P){if(K)console.log(`Template exceeds inline limit (${Buffer.byteLength(W,"utf-8")} bytes), uploading to S3...`);let{S3Client:X,AWSClient:z}=await import("@stacksjs/ts-cloud"),O=new X(J),h=new z,H=`${Y}-cf-templates-${J}`;try{await h.request({service:"s3",region:J,method:"HEAD",path:`/${H}`,bucket:H})}catch{let q=J==="us-east-1"?"":`<CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>${J}</LocationConstraint></CreateBucketConfiguration>`;await h.request({service:"s3",region:J,method:"PUT",path:`/${H}`,bucket:H,body:q||void 0})}let x=`${$}/template-${Date.now()}.json`;if(await O.putObject({bucket:H,key:x,body:W,contentType:"application/json"}),U=`https://${H}.s3.${J}.amazonaws.com/${x}`,K)console.log(`Template uploaded to: ${U}`)}let R=U?{templateUrl:U}:{templateBody:W},Z=!1,A=!1;try{let X=(await F.describeStacks({stackName:$})).Stacks?.[0];if(X&&X.StackStatus){if(K)console.log(`Current status: ${v(X.StackStatus)}`);if(Z=!0,A=!0,X.StackStatus.endsWith("_IN_PROGRESS")){console.log(`Stack is busy (${X.StackStatus}). Waiting for current operation to finish...`);let z=X.StackStatus.startsWith("DELETE")?"stack-delete-complete":X.StackStatus.startsWith("CREATE")?"stack-create-complete":"stack-update-complete";try{await F.waitForStack($,z)}catch{}try{let O=(await F.describeStacks({stackName:$})).Stacks?.[0];if(!O||!O.StackStatus)Z=!1,A=!1;else{if(K)console.log(`Stack settled to: ${v(O.StackStatus)}`);X.StackStatus=O.StackStatus}}catch{Z=!1,A=!1}}if(X.StackStatus==="UPDATE_ROLLBACK_COMPLETE")console.log("Stack rolled back from a previous update. Re-deploying...");else if(X.StackStatus==="DELETE_COMPLETE")Z=!1,A=!1;else if(X.StackStatus==="ROLLBACK_COMPLETE"||X.StackStatus==="ROLLBACK_FAILED"||X.StackStatus==="CREATE_FAILED"){console.log(`Stack is in ${X.StackStatus} state. Deleting before recreating...`),await F.deleteStack($),await F.waitForStack($,"stack-delete-complete"),console.log("Cleaning up retained resources...");try{let{S3Client:z}=await import("@stacksjs/ts-cloud"),O=new z(J),h=await b(J),H=`${Y}-${Q}-assets-${h}`,x=`${Y}-${Q}-frontend-${h}`;if(K)console.log(` Checking bucket: ${H}`);try{await O.emptyAndDeleteBucket(H),console.log(`\u2713 Deleted retained bucket: ${H}`)}catch(q){if(!q.message?.includes("NoSuchBucket")&&!q.message?.includes("does not exist"))console.log(`\u26A0 Could not delete assets bucket: ${q.message}`);else if(K)console.log(" No retained assets bucket to clean up")}if(K)console.log(` Checking bucket: ${x}`);try{await O.emptyAndDeleteBucket(x),console.log(`\u2713 Deleted retained bucket: ${x}`)}catch(q){if(!q.message?.includes("NoSuchBucket")&&!q.message?.includes("does not exist"))console.log(`\u26A0 Could not delete frontend bucket: ${q.message}`);else if(K)console.log(" No retained frontend bucket to clean up")}}catch(z){console.log(`\u26A0 Cleanup error: ${z.message}`)}Z=!1,A=!1}}}catch{Z=!1}if(Z){console.log("Updating stack..."),console.log("");try{let X=U?{templateURL:U}:{templateBody:W};if(await F.updateStack({stackName:$,...X,capabilities:["CAPABILITY_IAM","CAPABILITY_NAMED_IAM"],tags:[{Key:"Environment",Value:Q},{Key:"Project",Value:Y},{Key:"ManagedBy",Value:"stacks"}]}),_)console.log(` ${"Resource".padEnd(35)} ${"Type".padEnd(30)} Status`),console.log(" "+"\u2500".repeat(85)),await F.waitForStack($,"stack-update-complete"),console.log("")}catch(X){if(X.message?.includes("No updates are to be performed"))console.log("\u2713 Stack is up to date (no changes)");else throw X}}else{console.log("Checking for retained resources...");try{let{S3Client:O}=await import("@stacksjs/ts-cloud"),h=new O(J),H=await b(J),x=`${Y}-${Q}-assets-${H}`,q=`${Y}-${Q}-frontend-${H}`;if(K)console.log(` Checking bucket: ${x}`);try{await h.emptyAndDeleteBucket(x),console.log(`\u2713 Cleaned up existing bucket: ${x}`)}catch(T){if(!T.message?.includes("NoSuchBucket")&&!T.message?.includes("does not exist"))console.log(`\u26A0 Could not delete assets bucket: ${T.message}`);else if(K)console.log(" No existing assets bucket to clean up")}if(K)console.log(` Checking bucket: ${q}`);try{await h.emptyAndDeleteBucket(q),console.log(`\u2713 Cleaned up existing bucket: ${q}`)}catch(T){if(!T.message?.includes("NoSuchBucket")&&!T.message?.includes("does not exist"))console.log(`\u26A0 Could not delete frontend bucket: ${T.message}`);else if(K)console.log(" No existing frontend bucket to clean up")}}catch(O){console.log(`\u26A0 Pre-deployment cleanup error: ${O.message}`)}console.log("Creating stack..."),console.log("");let X=U?{templateURL:U}:{templateBody:W},z=await F.createStack({stackName:$,...X,capabilities:["CAPABILITY_IAM","CAPABILITY_NAMED_IAM"],tags:[{Key:"Environment",Value:Q},{Key:"Project",Value:Y},{Key:"ManagedBy",Value:"stacks"}],onFailure:"ROLLBACK",timeoutInMinutes:30});if(K)console.log(`Stack ID: ${z}`);if(_)console.log(` ${"Resource".padEnd(35)} ${"Type".padEnd(30)} Status`),console.log(" "+"\u2500".repeat(85)),await F.waitForStack($,"stack-create-complete"),console.log("")}let E=M?.infrastructure?.dns?.domain||"stacksjs.com",B=M?.infrastructure?.ssl||{enabled:!0,domains:[]},I=B.domains||[E,`www.${E}`];try{let X=(await F.describeStacks({stackName:$})).Stacks?.[0];if(X&&X.StackStatus){let z={};for(let O of X.Outputs||[])if(O.OutputKey&&O.OutputValue)z[O.OutputKey]=O.OutputValue;if(console.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),console.log(""),console.log(" \u2713 Infrastructure deployed successfully"),console.log(""),console.log(` Stack: ${$}`),console.log(` Status: ${X.StackStatus}`),console.log(` Domain: https://${E}`),z.LoadBalancerDNS)console.log(` Load Balancer: ${z.LoadBalancerDNS}`);if(z.WebServerPublicIP)console.log(` Server IP: ${z.WebServerPublicIP}`);if(z.AssetsBucketName&&K)console.log(` Assets: ${z.AssetsBucketName}`);if(console.log(""),console.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),console.log(""),B.enabled&&M?.infrastructure?.dns?.hostedZoneId&&z.LoadBalancerDNS)await p({region:J,domain:E,sslDomains:I,hostedZoneId:M.infrastructure.dns.hostedZoneId,albDnsName:z.LoadBalancerDNS,stackName:$});else if(!B.certificateArn&&K)console.log(" Next steps:"),console.log(" 1. DNS records need to be updated to point to the ALB"),console.log(" 2. SSL certificate needs to be requested and attached"),console.log(` Run: ./buddy cloud:ssl to set up SSL for ${E}`),console.log("")}}catch{}}catch(w){throw console.error(`Stack deployment failed: ${w.message}`),w}}async function m(G){let{environment:Q,region:J,buildDir:_}=G,j=(await N()).name;D.info(`Deploying frontend from ${_} to ${Q} in ${J}...`);try{let{S3Client:Y,AWSCloudFormationClient:$}=await import("@stacksjs/ts-cloud"),w=new Y(J),F=new $(J),M=`${j}-cloud`,W=(await F.describeStacks({stackName:M})).Stacks?.[0]?.Outputs?.find((P)=>P.OutputKey==="AssetsBucketName")?.OutputValue;if(!W)throw Error("Assets bucket not found in stack outputs");D.info(`Syncing ${_} to s3://${W}/...`),await w.sync({source:_,bucket:W,delete:!0,cacheControl:"max-age=31536000"}),D.success("Frontend deployment completed!")}catch(Y){throw D.error(`Frontend deployment failed: ${Y.message}`),Y}}async function l(G){let{environment:Q,region:J}=G,j=`${(await N()).name}-cloud`,{AWSCloudFormationClient:Y}=await import("@stacksjs/ts-cloud"),$=new Y(J);try{let w=(await $.describeStacks({stackName:j})).Stacks?.[0];if(!w||!w.StackStatus)return{status:"NOT_FOUND",outputs:{}};let F={};for(let M of w.Outputs||[])if(M.OutputKey&&M.OutputValue)F[M.OutputKey]=M.OutputValue;return{status:w.StackStatus,outputs:F}}catch{return{status:"NOT_FOUND",outputs:{}}}}async function u(G){let{environment:Q,region:J,verbose:_}=G,K=await N(),Y=`${K.name}-cloud`;console.log(`Undeploying ${Y} from ${J}...`),console.log("");try{let{AWSCloudFormationClient:$,AWSClient:w}=await import("@stacksjs/ts-cloud"),F=new $(J),M=!1;try{let V=(await F.describeStacks({stackName:Y})).Stacks?.[0];if(V&&V.StackStatus){if(console.log(`Current status: ${v(V.StackStatus)}`),M=!0,V.StackStatus.endsWith("_IN_PROGRESS")){console.log(`Waiting for current operation (${V.StackStatus}) to finish...`);let W=V.StackStatus.startsWith("DELETE")?"stack-delete-complete":V.StackStatus.startsWith("CREATE")?"stack-create-complete":"stack-update-complete";try{await F.waitForStack(Y,W)}catch{}try{let P=(await F.describeStacks({stackName:Y})).Stacks?.[0];if(!P||!P.StackStatus||P.StackStatus==="DELETE_COMPLETE"){console.log("Stack was already deleted during the in-progress operation.");return}}catch{console.log("Stack was already deleted during the in-progress operation.");return}}if(V.StackStatus==="DELETE_COMPLETE")M=!1}}catch{M=!1}if(!M){console.log(`Stack ${Y} does not exist. Nothing to undeploy.`);return}if(_)console.log("Checking for resources to clean up before deletion...");try{let V=new w,{AWSCloudFormationClient:W}=await import("@stacksjs/ts-cloud"),Z=((await new W(J).listStackResources(Y)).StackResourceSummaries||[]).find((A)=>A.LogicalResourceId==="ApplicationLoadBalancer");if(Z?.PhysicalResourceId){let E={Action:"DescribeListeners",LoadBalancerArn:Z.PhysicalResourceId,Version:"2015-12-01"},B=await V.request({service:"elasticloadbalancing",region:J,method:"POST",path:"/",body:new URLSearchParams(E).toString()}),I=B?.DescribeListenersResult?.Listeners?.member||B?.DescribeListenersResponse?.DescribeListenersResult?.Listeners?.member,X=Array.isArray(I)?I:I?[I]:[],z=0;for(let O of X)if(O.Protocol==="HTTPS"){if(_)console.log(` Removing HTTPS listener on port ${O.Port}...`);let h={Action:"DeleteListener",ListenerArn:O.ListenerArn,Version:"2015-12-01"};await V.request({service:"elasticloadbalancing",region:J,method:"POST",path:"/",body:new URLSearchParams(h).toString()}),z++}if(z>0&&_)console.log(`\u2713 Cleaned up ${z} HTTPS listener(s)`),await new Promise((O)=>setTimeout(O,2000))}}catch(V){if(_)console.log(`Warning: ${V.message}`)}console.log("Deleting stack..."),console.log(""),await F.deleteStack(Y),console.log(` ${"Resource".padEnd(35)} ${"Type".padEnd(30)} Status`),console.log(" "+"\u2500".repeat(85)),await F.waitForStack(Y,"stack-delete-complete");try{let{S3Client:V}=await import("@stacksjs/ts-cloud"),W=new V(J),P=await b(J),U=`${K.name}-${Q}-assets-${P}`,R=`${K.name}-${Q}-frontend-${P}`;console.log("Cleaning up retained buckets...");try{await W.emptyAndDeleteBucket(U),console.log("\u2713 Assets bucket deleted successfully")}catch(Z){if(!Z.message?.includes("NoSuchBucket")&&!Z.message?.includes("does not exist"))console.log(`\u26A0 Could not delete assets bucket: ${Z.message}`);else console.log("\u2713 No retained assets bucket to clean up")}try{await W.emptyAndDeleteBucket(R),console.log("\u2713 Frontend bucket deleted successfully")}catch(Z){if(!Z.message?.includes("NoSuchBucket")&&!Z.message?.includes("does not exist"))console.log(`\u26A0 Could not delete frontend bucket: ${Z.message}`);else console.log("\u2713 No retained frontend bucket to clean up")}}catch(V){console.log(`\u26A0 Cleanup error: ${V.message}`)}console.log(""),console.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),console.log(""),console.log(" \u2713 Infrastructure removed successfully"),console.log(""),console.log(` Stack: ${Y}`),console.log(` Environment: ${Q}`),console.log(` Region: ${J}`),console.log(""),console.log("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),console.log("")}catch($){let w=String($.message||$);if(w.includes("does not exist")){console.log(""),console.log("\u2713 Stack already deleted or does not exist.");return}if($.code==="DELETE_FAILED"||w.includes("DELETE_FAILED")){console.log(""),console.log("Some resources could not be deleted automatically"),console.log("Identifying resources to retain...");let{AWSCloudFormationClient:F}=await import("@stacksjs/ts-cloud"),M=new F(J);try{let P=((await M.listStackResources(Y)).StackResourceSummaries||[]).filter((U)=>U.ResourceStatus==="DELETE_FAILED").map((U)=>U.LogicalResourceId);if(P.length>0){console.log(`Retaining ${P.length} resource(s):`),P.forEach((Z)=>console.log(` - ${Z}`)),console.log(""),console.log("Retrying deletion with retained resources..."),await M.deleteStack(Y,void 0,P);let{AWSCloudFormationClient:U}=await import("@stacksjs/ts-cloud");await new U(J).waitForStack(Y,"stack-delete-complete"),console.log(""),console.log("\u2713 Stack removed (with retained resources)"),console.log(""),console.log("Note: Some resources were retained and may need manual cleanup."),console.log("Run `./buddy cloud:cleanup` to clean up remaining resources.");return}}catch(V){if(String(V.message||V).includes("does not exist")){console.log(""),console.log("\u2713 Stack deleted successfully!");return}throw V}}throw console.error(`Stack deletion failed: ${$.message}`),$}}export{u as undeployStack,l as getDeploymentStatus,g as deployStack,m as deployFrontend};
@@ -0,0 +1,7 @@
1
+ // @bun
2
+ import{Wa as z}from"./chunk-n2fd1d0m.js";import{err as A,ok as B}from"@stacksjs/error-handling";import{log as q}from"@stacksjs/logging";import{customElementsDataPath as G}from"@stacksjs/path";import{writeTextFile as H}from"@stacksjs/storage";function J(){return`{
3
+ "version": 1.1,
4
+ "tags": ${JSON.stringify(z.webComponents?.tags)}
5
+ }
6
+ `}async function Q(){try{return q.info("Generating custom-elements.json..."),await H({path:G(),data:J()}),q.success("Generated custom-elements.json for IDEs."),B(void 0)}catch(v){return q.error("There was an error generating the custom-elements.json file.",v),A("There was an error generating the custom-elements.json file.")}}async function R(){q.info("Generating web-types.json..."),q.info("This feature is not yet implemented.")}
7
+ export{Q as Ua,R as Va};
@@ -0,0 +1,5 @@
1
+ // @bun
2
+ import{Wa as z}from"./chunk-n2fd1d0m.js";import A from"process";import{log as v}from"@stacksjs/logging";import{componentsPath as J,functionsPath as K,libraryEntryPath as N}from"@stacksjs/path";import{writeTextFile as O}from"@stacksjs/storage";import{kebabCase as M}from"@stacksjs/strings";import{ExitCode as B}from"@stacksjs/types";import{determineResetPreset as U}from"@stacksjs/utils";async function T(k){await V(k)}async function V(k){if(k==="web-components")await X();if(k==="functions")await Y()}async function X(k="web-components"){v.info("Ensuring Web Component Library Entry Point..."),await O({path:N(k),data:Q(k)}).catch((q)=>{v.error("There was an error generating the Web Component library entry point",q),A.exit(B.FatalError)}),v.success("Created Web Component Library Entry Point")}async function Y(k="functions"){v.info("Ensuring Function Library Entry Point..."),await O({path:N(k),data:Q(k)}).catch((q)=>{v.error("There was an error generating Function Library Entry Point",q),A.exit(B.FatalError)}),v.success("Created Functions Library Entry Point")}function Q(k){let q=[];if(k==="functions"){if(!z.functions?.files)v.error(Error("There are no functions defined to be built. Please check your config/library.ts file for potential adjustments")),A.exit(B.FatalError);for(let j of z.functions.files)if(Array.isArray(j))q.push(`export * as ${j[1]} from '${K(j[0])}'`);else q.push(`export * from '${K(j)}'`);return q.join(`\r
3
+ `)}q=U();let G=[...q,"import { defineCustomElement } from 'vue'"],H=[],I=[];if(!z.webComponents?.tags)v.error(Error("There are no components defined to be built. Please check your config/library.ts file for potential adjustments")),A.exit(B.FatalError);for(let j of z.webComponents.tags.map((S)=>S.name))if(Array.isArray(j))G.push(`import ${j[1]} from '${J(j[0])}.vue'`),H.push(`const ${j[1]}CustomElement = defineCustomElement(${j[1]})`),I.push(`customElements.define('${M(j[1])}', ${j[1]}CustomElement)`);else G.push(`import ${j} from '${J(j)}.vue'`),H.push(`const ${j}CustomElement = defineCustomElement(${j})`),I.push(`customElements.define('${M(j)}', ${j}CustomElement)`);return[...G,...H,...I].join(`\r
4
+ `)}
5
+ export{T as ba,V as ca,X as da,Y as ea,Q as fa};