@stacksjs/actions 0.70.87 → 0.70.90

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 (159) hide show
  1. package/dist/action.js +78 -2
  2. package/dist/actions.js +2 -2
  3. package/dist/add.js +20 -2
  4. package/dist/ai/request-model-access.js +10 -2
  5. package/dist/auth/client.js +44 -3
  6. package/dist/auth/prune.js +35 -2
  7. package/dist/auth/setup.js +152 -36
  8. package/dist/auth/token.js +10 -2
  9. package/dist/blog-admin.d.ts +55 -0
  10. package/dist/blog-admin.js +156 -0
  11. package/dist/blog.d.ts +11 -0
  12. package/dist/blog.js +306 -56
  13. package/dist/build/cli.js +6 -2
  14. package/dist/build/component-libs.js +7 -2
  15. package/dist/build/core.js +55 -2
  16. package/dist/build/desktop.js +5 -2
  17. package/dist/build/docs.js +5 -2
  18. package/dist/build/frontend-static.js +123 -8
  19. package/dist/build/server.js +6 -2
  20. package/dist/build/stacks.js +8 -2
  21. package/dist/build/views.js +11 -2
  22. package/dist/build.js +64 -2
  23. package/dist/bump.js +162 -7
  24. package/dist/cdn/invalidate-cache.js +0 -1
  25. package/dist/changelog.js +27 -3
  26. package/dist/check/ports.js +16 -2
  27. package/dist/clean.js +4 -2
  28. package/dist/commit.js +12 -2
  29. package/dist/copy-types.js +10 -3
  30. package/dist/database/seed.js +26 -2
  31. package/dist/deploy/create-receipt-rule.js +36 -2
  32. package/dist/deploy/index.js +1318 -44
  33. package/dist/dev/api.js +94 -6
  34. package/dist/dev/components.js +7 -2
  35. package/dist/dev/dashboard-globals.js +89 -3
  36. package/dist/dev/dashboard-utils.js +380 -2
  37. package/dist/dev/dashboard.js +435 -8
  38. package/dist/dev/desktop.js +5 -2
  39. package/dist/dev/docs.js +24 -2
  40. package/dist/dev/index.js +29 -2
  41. package/dist/dev/migrate-watcher.js +74 -2
  42. package/dist/dev/system-tray.js +5 -2
  43. package/dist/dev/views.js +147 -2
  44. package/dist/discover-packages.js +32 -2
  45. package/dist/domains/add.js +61 -2
  46. package/dist/domains/purchase.js +66 -2
  47. package/dist/domains/remove.js +24 -2
  48. package/dist/examples.js +34 -2
  49. package/dist/find-projects.js +16 -2
  50. package/dist/fresh.js +17 -2
  51. package/dist/generate/action-types.js +9 -4
  52. package/dist/generate/component-meta.js +9 -3
  53. package/dist/generate/custom-cli-file.js +20 -3
  54. package/dist/generate/env-files.js +46 -6
  55. package/dist/generate/ide-helpers.js +8 -3
  56. package/dist/generate/index.js +158 -2
  57. package/dist/generate/lib-entries.js +16 -3
  58. package/dist/generate/pantry-file.js +46 -2
  59. package/dist/generate/symlink-core.js +2 -2
  60. package/dist/generate/types.js +3 -2
  61. package/dist/generate/vscode-custom-data.js +9 -3
  62. package/dist/generate/web-types.js +0 -1
  63. package/dist/helpers/component-meta.js +295 -2
  64. package/dist/helpers/index.js +1 -2
  65. package/dist/helpers/lib-entries.js +73 -2
  66. package/dist/helpers/package-json.js +45 -14
  67. package/dist/helpers/utils.js +105 -2
  68. package/dist/helpers/vscode-custom-data.js +30 -2
  69. package/dist/index.d.ts +13 -0
  70. package/dist/index.js +50 -2
  71. package/dist/key-generate.js +24 -2
  72. package/dist/lint/fix.js +4 -3
  73. package/dist/lint/index.js +4 -3
  74. package/dist/lint/lint.js +34 -2
  75. package/dist/make-command.js +64 -14
  76. package/dist/make-job.js +41 -16
  77. package/dist/make-policy.js +74 -26
  78. package/dist/make-resource.js +50 -21
  79. package/dist/make.js +328 -2
  80. package/dist/migrate/database.js +16 -2
  81. package/dist/migrate/fresh.js +31 -2
  82. package/dist/orm/base.js +0 -2
  83. package/dist/orm/test.js +0 -1
  84. package/dist/prepublish.js +16 -2
  85. package/dist/queue/clear.js +42 -2
  86. package/dist/queue/dlq-purge.js +28 -2
  87. package/dist/queue/dlq-retry.js +35 -2
  88. package/dist/queue/dlq.js +55 -5
  89. package/dist/queue/failed.js +69 -5
  90. package/dist/queue/flush.js +49 -3
  91. package/dist/queue/inspect.js +154 -8
  92. package/dist/queue/list.js +69 -5
  93. package/dist/queue/monitor.js +94 -6
  94. package/dist/queue/pause.js +28 -2
  95. package/dist/queue/quarantine.js +42 -3
  96. package/dist/queue/resume.js +27 -2
  97. package/dist/queue/retry.js +41 -2
  98. package/dist/queue/schedule-list.js +33 -5
  99. package/dist/queue/schedule.js +12 -2
  100. package/dist/queue/status.js +68 -5
  101. package/dist/queue/table.js +10 -2
  102. package/dist/queue/unquarantine.js +27 -2
  103. package/dist/queue/work.js +57 -2
  104. package/dist/release.js +21 -3
  105. package/dist/route/list.js +78 -3
  106. package/dist/run-action.js +1 -2
  107. package/dist/saas/setup.js +9 -2
  108. package/dist/scaffold-crud.js +164 -40
  109. package/dist/schedule/run.js +7 -2
  110. package/dist/search/flush.js +10 -2
  111. package/dist/search/import.js +10 -2
  112. package/dist/search/settings-list.js +10 -2
  113. package/dist/search/settings.js +9 -2
  114. package/dist/serve/api.js +35 -2
  115. package/dist/setup/index.js +1 -2
  116. package/dist/setup/ssl.js +271 -2
  117. package/dist/stacks.js +265 -2
  118. package/dist/templates.js +301 -2
  119. package/dist/test/feature.js +11 -2
  120. package/dist/test/index.js +11 -2
  121. package/dist/test/ui.js +4 -2
  122. package/dist/test/unit.js +11 -2
  123. package/dist/typecheck.js +4 -2
  124. package/dist/types.js +16 -2
  125. package/dist/upgrade/binary.js +29 -2
  126. package/dist/upgrade/bun.js +0 -1
  127. package/dist/upgrade/dependencies.js +0 -2
  128. package/dist/upgrade/framework-utils.js +193 -2
  129. package/dist/upgrade/framework.js +310 -7
  130. package/dist/upgrade/index.js +17 -2
  131. package/dist/upgrade/packages.js +99 -12
  132. package/dist/upgrade/shell.js +40 -4
  133. package/dist/upgrade.js +38 -2
  134. package/package.json +16 -16
  135. package/dist/chunk-0c8sd1t6.js +0 -2
  136. package/dist/chunk-0g2nzhx9.js +0 -240
  137. package/dist/chunk-0gadhvn7.js +0 -3
  138. package/dist/chunk-0h27aa4r.js +0 -93
  139. package/dist/chunk-3peh8kqs.js +0 -851
  140. package/dist/chunk-62gdfav8.js +0 -3
  141. package/dist/chunk-6bk53y02.js +0 -3
  142. package/dist/chunk-78c5n3s2.js +0 -3
  143. package/dist/chunk-c74qv38e.js +0 -17
  144. package/dist/chunk-cdk2r2jd.js +0 -1
  145. package/dist/chunk-dbz9dp2h.js +0 -3
  146. package/dist/chunk-e142dheq.js +0 -3
  147. package/dist/chunk-ec4gky40.js +0 -3
  148. package/dist/chunk-h3d81wrg.js +0 -3
  149. package/dist/chunk-m3q0x4h0.js +0 -688
  150. package/dist/chunk-mqgbyhph.js +0 -5
  151. package/dist/chunk-n24m8prb.js +0 -3
  152. package/dist/chunk-n5eqwhck.js +0 -7
  153. package/dist/chunk-nsvnqv8y.js +0 -5
  154. package/dist/chunk-nty6mmx4.js +0 -283
  155. package/dist/chunk-s735m9mg.js +0 -1
  156. package/dist/chunk-tpb8jgsk.js +0 -7
  157. package/dist/chunk-tsbk5vne.js +0 -3
  158. package/dist/chunk-xg9xscqz.js +0 -1
  159. package/dist/chunk-y6e448he.js +0 -7
package/dist/dev/views.js CHANGED
@@ -1,2 +1,147 @@
1
- // @bun
2
- import{Lb as O}from"../chunk-h3d81wrg.js";import{AsyncLocalStorage as k}from"async_hooks";import{existsSync as D}from"fs";import{config as T,overridesReady as P}from"@stacksjs/config";import{projectPath as Z}from"@stacksjs/path";var L=new k;function _(){return L.getStore()??globalThis.__stxServeContext}globalThis.requestContext={cookie(z){return _()?.cookies?.[z]??null},url(){return _()?.url??""},locale(){return _()?.locale??"de"}};var A=Z("serve.ts");try{if(await Bun.file(A).exists())await import(A);else await V()}catch{await V()}function g(z){let H={},J=z.headers.get("cookie")||"";if(!J)return H;for(let M of J.split(";")){let X=M.trim(),U=X.indexOf("=");if(U===-1)continue;let N=X.slice(0,U).trim(),$=X.slice(U+1).trim();if(!N)continue;try{H[N]=decodeURIComponent($)}catch{H[N]=$}}return H}async function V(){await P;let{injectGlobalAutoImports:z,isApiBoundRequest:H,proxyToBackend:J}=await import("@stacksjs/server"),{applyRequestLocale:M}=await import("@stacksjs/i18n");await z();let{serve:X}=await import("../chunk-0g2nzhx9.js"),{site:U,i18n:N}=await f(),$="resources/views",E="storage/framework/defaults/resources/views",w=await I(["resources/views/layouts","resources/layouts"])??"resources/views/layouts",B="storage/framework/defaults/resources/layouts",b=await I(["resources/views/components","resources/components"])??"resources/views/components",R=Number(process.env.PORT)||3000,y=Number(process.env.PORT_API)||3008,m=Number(process.env.PORT_DOCS)||T.ports?.docs||3006,C=`http://127.0.0.1:${y}`,v=`http://127.0.0.1:${m}`,j=T?.auth?.defaultTokenName??"auth-token";await X({patterns:[$,E],port:R,componentsDir:"storage/framework/defaults/resources/components",layoutsDir:w,partialsDir:b,fallbackLayoutsDir:B,fallbackPartialsDir:E,quiet:!0,...N&&{i18n:N},...U?.url&&{site:U},auth:{cookieName:j,redirectTo:"/login"},onRequest:async(K)=>{let Y=new URL(K.url),{maintenanceGate:x}=await import("@stacksjs/server"),F=await x(K);if(F)return F;if(D(Z("resources/views/blog.stx"))){let{renderBlogFeed:W}=await import("../blog.js"),Q=await W(K);if(Q)return Q}else{let{renderBlog:W}=await import("../blog.js"),Q=await W(K);if(Q)return Q}if(Y.pathname==="/docs"||Y.pathname.startsWith("/docs/"))return J(K,v,"/docs");if(H(K,Y.pathname))return J(K,C);if(N&&K.method==="GET"){let W=Y.pathname.match(/^\/locale\/([a-z]{2}(?:-[a-z]{2})?)\/?$/i);if(W){let{createLocaleSwitchResponse:Q}=await import("@stacksjs/i18n");return Q(K,W[1],N)}}let S=await M(K),G={cookies:g(K),url:K.url,locale:S};return globalThis.__stxServeSearch=Y.search,globalThis.__stxServeContext=G,L.enterWith(G),null}})}async function I(z){for(let H of z)if(D(Z(H)))return H;return null}function h(z){let H=z.i18n.locales,J=z.i18n.defaultLocale??H[0];return{locales:H,defaultLocale:J,labels:z.i18n.labels??Object.fromEntries(H.map((M)=>[M,M.toUpperCase()])),translations:{},pickerSelector:z.i18n.pickerSelector??"#lang-picker"}}async function p(z){try{let{resolveI18n:H}=await import("@stacksjs/stx");if(typeof H==="function"){let J=H(z,Z());if(J)return J}}catch{}return h(z)}async function f(){let z=Z("site.config.ts");if(!D(z))return{};try{let J=(await import(z)).default;if(!J)return{};if(!J.i18n)return{site:J};let M=await p(J);return{site:J,i18n:M}}catch{}return{}}
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { existsSync } from "node:fs";
3
+ import { config, overridesReady } from "@stacksjs/config";
4
+ import { projectPath } from "@stacksjs/path";
5
+ const requestStore = new AsyncLocalStorage;
6
+ function currentRequestContext() {
7
+ return requestStore.getStore() ?? globalThis.__stxServeContext;
8
+ }
9
+ globalThis.requestContext = {
10
+ cookie(name) {
11
+ return currentRequestContext()?.cookies?.[name] ?? null;
12
+ },
13
+ url() {
14
+ return currentRequestContext()?.url ?? "";
15
+ },
16
+ locale() {
17
+ return currentRequestContext()?.locale ?? "de";
18
+ }
19
+ };
20
+ const projectServe = projectPath("serve.ts");
21
+ try {
22
+ if (await Bun.file(projectServe).exists())
23
+ await import(projectServe);
24
+ else
25
+ await startDefaultServer();
26
+ } catch {
27
+ await startDefaultServer();
28
+ }
29
+ function parseCookies(req) {
30
+ const out = {}, header = req.headers.get("cookie") || "";
31
+ if (!header)
32
+ return out;
33
+ for (const part of header.split(";")) {
34
+ const trimmed = part.trim(), eq = trimmed.indexOf("=");
35
+ if (eq === -1)
36
+ continue;
37
+ const k = trimmed.slice(0, eq).trim(), v = trimmed.slice(eq + 1).trim();
38
+ if (!k)
39
+ continue;
40
+ try {
41
+ out[k] = decodeURIComponent(v);
42
+ } catch {
43
+ out[k] = v;
44
+ }
45
+ }
46
+ return out;
47
+ }
48
+ async function startDefaultServer() {
49
+ await overridesReady;
50
+ const { injectGlobalAutoImports, isApiBoundRequest, proxyToBackend } = await import("@stacksjs/server"), { applyRequestLocale } = await import("@stacksjs/i18n");
51
+ await injectGlobalAutoImports();
52
+ const { serve } = await import("bun-plugin-stx/serve"), { site: siteConfig, i18n: i18nConfig } = await loadStxSiteConfig(), userViewsPath = "resources/views", defaultViewsPath = "storage/framework/defaults/resources/views", userLayoutsPath = await firstExistingPath([
53
+ "resources/views/layouts",
54
+ "resources/layouts"
55
+ ]) ?? "resources/views/layouts", defaultLayoutsPath = "storage/framework/defaults/resources/layouts", userComponentsPath = await firstExistingPath([
56
+ "resources/views/components",
57
+ "resources/components"
58
+ ]) ?? "resources/views/components", preferredPort = Number(process.env.PORT) || 3000, apiPort = Number(process.env.PORT_API) || 3008, docsPort = Number(process.env.PORT_DOCS) || config.ports?.docs || 3006, apiBase = `http://127.0.0.1:${apiPort}`, docsBase = `http://127.0.0.1:${docsPort}`, authCookie = config?.auth?.defaultTokenName ?? "auth-token";
59
+ await serve({
60
+ patterns: [userViewsPath, defaultViewsPath],
61
+ port: preferredPort,
62
+ componentsDir: "storage/framework/defaults/resources/components",
63
+ layoutsDir: userLayoutsPath,
64
+ partialsDir: userComponentsPath,
65
+ fallbackLayoutsDir: defaultLayoutsPath,
66
+ fallbackPartialsDir: defaultViewsPath,
67
+ quiet: !0,
68
+ ...i18nConfig && { i18n: i18nConfig },
69
+ ...siteConfig?.url && { site: siteConfig },
70
+ auth: {
71
+ cookieName: authCookie,
72
+ redirectTo: "/login"
73
+ },
74
+ onRequest: async (req) => {
75
+ const url = new URL(req.url), { maintenanceGate } = await import("@stacksjs/server"), gated = await maintenanceGate(req);
76
+ if (gated)
77
+ return gated;
78
+ if (existsSync(projectPath("resources/views/blog.stx"))) {
79
+ const { renderBlogFeed } = await import("../blog"), feed = await renderBlogFeed(req);
80
+ if (feed)
81
+ return feed;
82
+ } else {
83
+ const { renderBlog } = await import("../blog"), blogResponse = await renderBlog(req);
84
+ if (blogResponse)
85
+ return blogResponse;
86
+ }
87
+ if (url.pathname === "/docs" || url.pathname.startsWith("/docs/"))
88
+ return proxyToBackend(req, docsBase, "/docs");
89
+ if (isApiBoundRequest(req, url.pathname))
90
+ return proxyToBackend(req, apiBase);
91
+ if (i18nConfig && req.method === "GET") {
92
+ const localeSwitch = url.pathname.match(/^\/locale\/([a-z]{2}(?:-[a-z]{2})?)\/?$/i);
93
+ if (localeSwitch) {
94
+ const { createLocaleSwitchResponse } = await import("@stacksjs/i18n");
95
+ return createLocaleSwitchResponse(req, localeSwitch[1], i18nConfig);
96
+ }
97
+ }
98
+ const locale = await applyRequestLocale(req), ctx = { cookies: parseCookies(req), url: req.url, locale };
99
+ globalThis.__stxServeSearch = url.search;
100
+ globalThis.__stxServeContext = ctx;
101
+ requestStore.enterWith(ctx);
102
+ return null;
103
+ }
104
+ });
105
+ }
106
+ async function firstExistingPath(candidates) {
107
+ for (const candidate of candidates)
108
+ if (existsSync(projectPath(candidate)))
109
+ return candidate;
110
+ return null;
111
+ }
112
+ function fallbackI18nFromSite(site) {
113
+ const locales = site.i18n.locales, defaultLocale = site.i18n.defaultLocale ?? locales[0];
114
+ return {
115
+ locales,
116
+ defaultLocale,
117
+ labels: site.i18n.labels ?? Object.fromEntries(locales.map((c) => [c, c.toUpperCase()])),
118
+ translations: {},
119
+ pickerSelector: site.i18n.pickerSelector ?? "#lang-picker"
120
+ };
121
+ }
122
+ async function resolveSiteI18n(site) {
123
+ try {
124
+ const { resolveI18n } = await import("@stacksjs/stx");
125
+ if (typeof resolveI18n === "function") {
126
+ const i18n = resolveI18n(site, projectPath());
127
+ if (i18n)
128
+ return i18n;
129
+ }
130
+ } catch {}
131
+ return fallbackI18nFromSite(site);
132
+ }
133
+ async function loadStxSiteConfig() {
134
+ const sitePath = projectPath("site.config.ts");
135
+ if (!existsSync(sitePath))
136
+ return {};
137
+ try {
138
+ const site = (await import(sitePath)).default;
139
+ if (!site)
140
+ return {};
141
+ if (!site.i18n)
142
+ return { site };
143
+ const i18n = await resolveSiteI18n(site);
144
+ return { site, i18n };
145
+ } catch {}
146
+ return {};
147
+ }
@@ -1,2 +1,32 @@
1
- // @bun
2
- import"./chunk-h3d81wrg.js";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}export{L as discoverPackages};
1
+ import { projectPath, storagePath } from "@stacksjs/path";
2
+ export async function discoverPackages() {
3
+ const manifest = {
4
+ generated_at: new Date().toISOString(),
5
+ packages: {}
6
+ }, dontDiscover = new Set;
7
+ try {
8
+ const list = (await Bun.file(projectPath("package.json")).json())?.stacks?.["dont-discover"];
9
+ if (Array.isArray(list))
10
+ for (const name of list)
11
+ dontDiscover.add(name);
12
+ } catch {}
13
+ const pantryDir = projectPath("pantry"), patterns = ["*/package.json", "@*/*/package.json"];
14
+ for (const pattern of patterns) {
15
+ const glob = new Bun.Glob(pattern);
16
+ for await (const file of glob.scan({ cwd: pantryDir, absolute: !0, onlyFiles: !0 }))
17
+ try {
18
+ const pkg = await Bun.file(file).json(), name = pkg?.name;
19
+ if (!name || !pkg.stacks || dontDiscover.has(name))
20
+ continue;
21
+ manifest.packages[name] = pkg.stacks;
22
+ } catch {}
23
+ }
24
+ const manifestPath = storagePath("framework/discovered-packages.json");
25
+ try {
26
+ const current = await Bun.file(manifestPath).json();
27
+ if (JSON.stringify(current.packages ?? {}) === JSON.stringify(manifest.packages))
28
+ return current;
29
+ } catch {}
30
+ await Bun.write(manifestPath, JSON.stringify(manifest, null, 2));
31
+ return manifest;
32
+ }
@@ -1,2 +1,61 @@
1
- // @bun
2
- import A from"process";import{italic as J,log as q,parseOptions as T,runCommand as U}from"@stacksjs/cli";import{createHostedZone as V,getHostedZoneNameservers as W,updateNameservers as X}from"@stacksjs/dns";import{loadEnv as Y}from"@stacksjs/env";import{handleError as L}from"@stacksjs/error-handling";import{projectConfigPath as _}from"@stacksjs/path";import{whois as $}from"@stacksjs/whois";Y({path:[".env",".env.production"],overload:!0});var M=T();function b(G){if(!G)return;return G.replace(/^https?:\/\//,"").replace(/\/$/,"")}var F=b(M.domain??A.env.APP_URL);if(!F)q.error("There was no Domain or App URL provided. Please provide a domain using the --domain flag or add a url to your app config."),A.exit(1);var K=await V(F);if(K.isErr)L(K.error),A.exit(1);var I=await W(F);if(!I||I.length===0)L(`No nameservers found for domain: ${F}. Please ensure the Hosted Zone exists in Route53.`),A.exit(1);await X(I);var Q=(await $(F,!0)).parsedData.Registrar;if(Q.includes("Amazon")){if(M.deploy)await U("buddy deploy");else q.info(""),q.info("You can now continue your deployment process by re-running:"),q.info(""),q.info(` \u27A1\uFE0F ${J("buddy deploy")}`),q.info("");A.exit(0)}q.info("");q.info("\u2139\uFE0F Please note, before continuing your deployment process,");q.info(` update your ${Q} nameservers to the following:`);var y=["1\uFE0F\u20E3","2\uFE0F\u20E3","3\uFE0F\u20E3","4\uFE0F\u20E3"];q.info("");I.forEach((G,R)=>{q.info(` ${y[R]} Nameserver: ${G}`)});q.info("");q.info(J(`stored in ${_("dns.ts")}`));q.info("");q.info("Once the nameservers have been updated, re-run the following command:");q.info("");q.info(` \u27A1\uFE0F ${J("buddy deploy")}`);q.info("");
1
+ import process from "node:process";
2
+ import { italic, log, parseOptions, runCommand } from "@stacksjs/cli";
3
+ import { createHostedZone, getHostedZoneNameservers, updateNameservers } from "@stacksjs/dns";
4
+ import { loadEnv } from "@stacksjs/env";
5
+ import { handleError } from "@stacksjs/error-handling";
6
+ import { projectConfigPath } from "@stacksjs/path";
7
+ import { whois } from "@stacksjs/whois";
8
+ loadEnv({
9
+ path: [".env", ".env.production"],
10
+ overload: !0
11
+ });
12
+ const options = parseOptions();
13
+ function normalizeDomain(url) {
14
+ if (!url)
15
+ return;
16
+ return url.replace(/^https?:\/\//, "").replace(/\/$/, "");
17
+ }
18
+ const domain = normalizeDomain(options.domain ?? process.env.APP_URL);
19
+ if (!domain) {
20
+ log.error("There was no Domain or App URL provided. Please provide a domain using the --domain flag or add a url to your app config.");
21
+ process.exit(1);
22
+ }
23
+ const result = await createHostedZone(domain);
24
+ if (result.isErr) {
25
+ handleError(result.error);
26
+ process.exit(1);
27
+ }
28
+ const nameServers = await getHostedZoneNameservers(domain);
29
+ if (!nameServers || nameServers.length === 0) {
30
+ handleError(`No nameservers found for domain: ${domain}. Please ensure the Hosted Zone exists in Route53.`);
31
+ process.exit(1);
32
+ }
33
+ await updateNameservers(nameServers);
34
+ const registrar = (await whois(domain, !0)).parsedData.Registrar;
35
+ if (registrar.includes("Amazon")) {
36
+ if (options.deploy)
37
+ await runCommand("buddy deploy");
38
+ else {
39
+ log.info("");
40
+ log.info("You can now continue your deployment process by re-running:");
41
+ log.info("");
42
+ log.info(` \u27A1\uFE0F ${italic("buddy deploy")}`);
43
+ log.info("");
44
+ }
45
+ process.exit(0);
46
+ }
47
+ log.info("");
48
+ log.info("\u2139\uFE0F Please note, before continuing your deployment process,");
49
+ log.info(` update your ${registrar} nameservers to the following:`);
50
+ const emojis = ["1\uFE0F\u20E3", "2\uFE0F\u20E3", "3\uFE0F\u20E3", "4\uFE0F\u20E3"];
51
+ log.info("");
52
+ nameServers.forEach((nameserver, index) => {
53
+ log.info(` ${emojis[index]} Nameserver: ${nameserver}`);
54
+ });
55
+ log.info("");
56
+ log.info(italic(`stored in ${projectConfigPath("dns.ts")}`));
57
+ log.info("");
58
+ log.info("Once the nameservers have been updated, re-run the following command:");
59
+ log.info("");
60
+ log.info(` \u27A1\uFE0F ${italic("buddy deploy")}`);
61
+ log.info("");
@@ -1,2 +1,66 @@
1
- // @bun
2
- import a from"process";import{log as n,parseOptions as o}from"@stacksjs/cli";import{purchaseDomain as m}from"@stacksjs/cloud";import{config as d}from"@stacksjs/config";import{handleError as r}from"@stacksjs/error-handling";import{ExitCode as i}from"@stacksjs/types";var t=d.dns.contactInfo;if(!t)r("You must provide contact info in your config file."),a.exit(i.FatalError);var c={domain:"",years:1,privacy:!0,autoRenew:!0,registrantFirstName:t.firstName,registrantLastName:t.lastName,registrantOrganization:t.organizationName,registrantAddressLine1:t.addressLine1,registrantAddressLine2:t.addressLine2,registrantCity:t.city,registrantState:t.state,registrantCountry:t.countryCode,registrantZip:t.zip,registrantPhone:t.phoneNumber,registrantEmail:t.email,adminFirstName:t.admin?.firstName||t.firstName,adminLastName:t.admin?.lastName||t.lastName,adminOrganization:t.admin?.organizationName||t.organizationName,adminAddressLine1:t.admin?.addressLine1||t.addressLine1,adminAddressLine2:t.admin?.addressLine2||t.addressLine2,adminCity:t.admin?.city||t.city,adminState:t.admin?.state||t.state,adminCountry:t.admin?.countryCode||t.countryCode,adminZip:t.admin?.zip||t.zip,adminPhone:t.admin?.phoneNumber||t.phoneNumber,adminEmail:t.admin?.email||t.email,techFirstName:t.tech?.firstName||t.firstName,techLastName:t.tech?.lastName||t.lastName,techOrganization:t.tech?.organizationName||t.organizationName,techAddressLine1:t.tech?.addressLine1||t.addressLine1,techAddressLine2:t.tech?.addressLine2||t.addressLine2,techCity:t.tech?.city||t.city,techState:t.tech?.state||t.state,techCountry:t.tech?.countryCode||t.countryCode,techZip:t.tech?.zip||t.zip,techPhone:t.tech?.phoneNumber||t.phoneNumber,techEmail:t.tech?.email||t.email,privacyAdmin:t.privacyAdmin||t.privacy||!0,privacyTech:t.privacyTech||t.privacy||!0,privacyRegistrant:t.privacyRegistrant||t.privacy||!0,contactType:"PERSON",verbose:!1},s={...c,...o()};if(!s.domain)r("You must provide a domain name to purchase."),a.exit(i.FatalError);var e=m(s.domain,s);if(e.isErr)r(e.error),a.exit(i.FatalError);n.info("Domain purchased successfully.");a.exit(i.Success);
1
+ import process from "node:process";
2
+ import { log, parseOptions } from "@stacksjs/cli";
3
+ import { purchaseDomain } from "@stacksjs/cloud";
4
+ import { config } from "@stacksjs/config";
5
+ import { handleError } from "@stacksjs/error-handling";
6
+ import { ExitCode } from "@stacksjs/types";
7
+ const c = config.dns.contactInfo;
8
+ if (!c) {
9
+ handleError("You must provide contact info in your config file.");
10
+ process.exit(ExitCode.FatalError);
11
+ }
12
+ const defaultOptions = {
13
+ domain: "",
14
+ years: 1,
15
+ privacy: !0,
16
+ autoRenew: !0,
17
+ registrantFirstName: c.firstName,
18
+ registrantLastName: c.lastName,
19
+ registrantOrganization: c.organizationName,
20
+ registrantAddressLine1: c.addressLine1,
21
+ registrantAddressLine2: c.addressLine2,
22
+ registrantCity: c.city,
23
+ registrantState: c.state,
24
+ registrantCountry: c.countryCode,
25
+ registrantZip: c.zip,
26
+ registrantPhone: c.phoneNumber,
27
+ registrantEmail: c.email,
28
+ adminFirstName: c.admin?.firstName || c.firstName,
29
+ adminLastName: c.admin?.lastName || c.lastName,
30
+ adminOrganization: c.admin?.organizationName || c.organizationName,
31
+ adminAddressLine1: c.admin?.addressLine1 || c.addressLine1,
32
+ adminAddressLine2: c.admin?.addressLine2 || c.addressLine2,
33
+ adminCity: c.admin?.city || c.city,
34
+ adminState: c.admin?.state || c.state,
35
+ adminCountry: c.admin?.countryCode || c.countryCode,
36
+ adminZip: c.admin?.zip || c.zip,
37
+ adminPhone: c.admin?.phoneNumber || c.phoneNumber,
38
+ adminEmail: c.admin?.email || c.email,
39
+ techFirstName: c.tech?.firstName || c.firstName,
40
+ techLastName: c.tech?.lastName || c.lastName,
41
+ techOrganization: c.tech?.organizationName || c.organizationName,
42
+ techAddressLine1: c.tech?.addressLine1 || c.addressLine1,
43
+ techAddressLine2: c.tech?.addressLine2 || c.addressLine2,
44
+ techCity: c.tech?.city || c.city,
45
+ techState: c.tech?.state || c.state,
46
+ techCountry: c.tech?.countryCode || c.countryCode,
47
+ techZip: c.tech?.zip || c.zip,
48
+ techPhone: c.tech?.phoneNumber || c.phoneNumber,
49
+ techEmail: c.tech?.email || c.email,
50
+ privacyAdmin: c.privacyAdmin || c.privacy || !0,
51
+ privacyTech: c.privacyTech || c.privacy || !0,
52
+ privacyRegistrant: c.privacyRegistrant || c.privacy || !0,
53
+ contactType: "PERSON",
54
+ verbose: !1
55
+ }, options = { ...defaultOptions, ...parseOptions() };
56
+ if (!options.domain) {
57
+ handleError("You must provide a domain name to purchase.");
58
+ process.exit(ExitCode.FatalError);
59
+ }
60
+ const result = purchaseDomain(options.domain, options);
61
+ if (result.isErr) {
62
+ handleError(result.error);
63
+ process.exit(ExitCode.FatalError);
64
+ }
65
+ log.info("Domain purchased successfully.");
66
+ process.exit(ExitCode.Success);
@@ -1,2 +1,24 @@
1
- // @bun
2
- import y from"process";import{parseOptions as A}from"@stacksjs/cli";import{app as q}from"@stacksjs/config";import{deleteHostedZoneRecords as B}from"@stacksjs/dns";import{handleError as z}from"@stacksjs/error-handling";import{log as C}from"@stacksjs/logging";var v=A(),b={domain:v.domain,verbose:v.verbose};if(!b.domain)if(q.url)b.domain=q.url;else z("there was no domain provided when"),y.exit(1);if(b.verbose)C.info(`Removing domain: ${b.domain}`);var x=await B(b.domain);if(x.isErr)z(x.error),y.exit(1);
1
+ import process from "node:process";
2
+ import { parseOptions } from "@stacksjs/cli";
3
+ import { app } from "@stacksjs/config";
4
+ import { deleteHostedZoneRecords } from "@stacksjs/dns";
5
+ import { handleError } from "@stacksjs/error-handling";
6
+ import { log } from "@stacksjs/logging";
7
+ const parsedOptions = parseOptions(), options = {
8
+ domain: parsedOptions.domain,
9
+ verbose: parsedOptions.verbose
10
+ };
11
+ if (!options.domain)
12
+ if (app.url)
13
+ options.domain = app.url;
14
+ else {
15
+ handleError("there was no domain provided when");
16
+ process.exit(1);
17
+ }
18
+ if (options.verbose)
19
+ log.info(`Removing domain: ${options.domain}`);
20
+ const result = await deleteHostedZoneRecords(options.domain);
21
+ if (result.isErr) {
22
+ handleError(result.error);
23
+ process.exit(1);
24
+ }
package/dist/examples.js CHANGED
@@ -1,2 +1,34 @@
1
- // @bun
2
- import"./chunk-h3d81wrg.js";import D from"process";import{NpmScript as z}from"@stacksjs/enums";import{log as q}from"@stacksjs/logging";import{hasComponents as A}from"@stacksjs/storage";import{ExitCode as F}from"@stacksjs/types";import{runNpmScript as B}from"@stacksjs/utils";async function G(f){if(f.components||f.vue)await H(f);else if(f.webComponents||f.elements)await I(f);else q.error("An unsupported option was used. Please try again, check the documentation & report the issue, if needed.")}async function Q(f){return await G(f)}async function H(f){if(A())await B(z.ExampleVue,f),q.success("Your component library was built successfully");else q.info("No components found.")}async function I(f){if(A())q.info("Building your Web Component library..."),await B(z.BuildWebComponents,f),q.success("Your Web Component library was built successfully");else q.info("No components found."),D.exit(F.FatalError)}export{I as webComponentExample,G as invoke,Q as examples,H as componentExample};
1
+ import process from "node:process";
2
+ import { NpmScript } from "@stacksjs/enums";
3
+ import { log } from "@stacksjs/logging";
4
+ import { hasComponents } from "@stacksjs/storage";
5
+ import { ExitCode } from "@stacksjs/types";
6
+ import { runNpmScript } from "@stacksjs/utils";
7
+ export async function invoke(options) {
8
+ if (options.components || options.vue)
9
+ await componentExample(options);
10
+ else if (options.webComponents || options.elements)
11
+ await webComponentExample(options);
12
+ else
13
+ log.error("An unsupported option was used. Please try again, check the documentation & report the issue, if needed.");
14
+ }
15
+ export async function examples(options) {
16
+ return await invoke(options);
17
+ }
18
+ export async function componentExample(options) {
19
+ if (hasComponents()) {
20
+ await runNpmScript(NpmScript.ExampleVue, options);
21
+ log.success("Your component library was built successfully");
22
+ } else
23
+ log.info("No components found.");
24
+ }
25
+ export async function webComponentExample(options) {
26
+ if (hasComponents()) {
27
+ log.info("Building your Web Component library...");
28
+ await runNpmScript(NpmScript.BuildWebComponents, options);
29
+ log.success("Your Web Component library was built successfully");
30
+ } else {
31
+ log.info("No components found.");
32
+ process.exit(ExitCode.FatalError);
33
+ }
34
+ }
@@ -1,2 +1,16 @@
1
- // @bun
2
- import c from"process";import{parseOptions as e}from"@stacksjs/cli";import{log as r}from"@stacksjs/logging";import{ExitCode as i}from"@stacksjs/types";import{findStacksProjects as n}from"@stacksjs/utils";try{let o=e(),t=await n(void 0,o);if(t.length>0)r.info("Found Projects:"),t.forEach((s)=>console.log(` - ${s}`)),c.exit(i.Success);r.info("No Stacks Projects found.")}catch(o){r.error("Error searching for Stacks projects:",o)}
1
+ import process from "node:process";
2
+ import { parseOptions } from "@stacksjs/cli";
3
+ import { log } from "@stacksjs/logging";
4
+ import { ExitCode } from "@stacksjs/types";
5
+ import { findStacksProjects } from "@stacksjs/utils";
6
+ try {
7
+ const options = parseOptions(), projects = await findStacksProjects(void 0, options);
8
+ if (projects.length > 0) {
9
+ log.info("Found Projects:");
10
+ projects.forEach((project) => console.log(` - ${project}`));
11
+ process.exit(ExitCode.Success);
12
+ }
13
+ log.info("No Stacks Projects found.");
14
+ } catch (error) {
15
+ log.error("Error searching for Stacks projects:", error);
16
+ }
package/dist/fresh.js CHANGED
@@ -1,2 +1,17 @@
1
- // @bun
2
- import t from"process";import{runCommand as i}from"@stacksjs/cli";import{handleError as m}from"@stacksjs/error-handling";import{log as o}from"@stacksjs/logging";import{projectPath as e}from"@stacksjs/path";import{ExitCode as n}from"@stacksjs/types";import{cleanProject as a}from"@stacksjs/utils";o.info("Cleaning project...");await a();o.info("Installing dependencies...");var r=await i("bun install",{cwd:e()});if(r.isErr)m(r.error),t.exit(n.FatalError);
1
+ import process from "node:process";
2
+ import { runCommand } from "@stacksjs/cli";
3
+ import { handleError } from "@stacksjs/error-handling";
4
+ import { log } from "@stacksjs/logging";
5
+ import { projectPath } from "@stacksjs/path";
6
+ import { ExitCode } from "@stacksjs/types";
7
+ import { cleanProject } from "@stacksjs/utils";
8
+ log.info("Cleaning project...");
9
+ await cleanProject();
10
+ log.info("Installing dependencies...");
11
+ const result = await runCommand("bun install", {
12
+ cwd: projectPath()
13
+ });
14
+ if (result.isErr) {
15
+ handleError(result.error);
16
+ process.exit(ExitCode.FatalError);
17
+ }
@@ -1,8 +1,13 @@
1
- // @bun
2
- import{readdir as e}from"fs/promises";import{log as a}from"@stacksjs/logging";import{path as i}from"@stacksjs/path";import{storage as s}from"@stacksjs/storage";a.info("Generating action types...");var o="Actions",r=await e(i.appPath(o),{recursive:!0}),n=`// This file is auto-generated by Stacks. Do not edit this file manually.
1
+ import { readdir } from "node:fs/promises";
2
+ import { log } from "@stacksjs/logging";
3
+ import { path as p } from "@stacksjs/path";
4
+ import { storage } from "@stacksjs/storage";
5
+ log.info("Generating action types...");
6
+ const domain = "Actions", files = await readdir(p.appPath(domain), { recursive: !0 }), validActions = `// This file is auto-generated by Stacks. Do not edit this file manually.
3
7
  // If you wish to rename an action, please do so by editing the file name.
4
8
  //
5
9
  // For more information, please visit: https://stacksjs.com/docs
6
10
 
7
- export type ActionPath = ${r.filter((t)=>t.endsWith(".ts")).map((t)=>`'${o}/${t.replace(".ts","")}'`).join(" | ")}
8
- `;await s.writeFile(i.frameworkPath("types/actions.d.ts"),n);
11
+ export type ActionPath = ${files.filter((file) => file.endsWith(".ts")).map((value) => `'${domain}/${value.replace(".ts", "")}'`).join(" | ")}
12
+ `;
13
+ await storage.writeFile(p.frameworkPath("types/actions.d.ts"), validActions);
@@ -1,3 +1,9 @@
1
- #!/usr/bin/env bun
2
- // @bun
3
- import{Qa as d}from"../chunk-y6e448he.js";import"../chunk-h3d81wrg.js";import{log as b}from"@stacksjs/logging";import{hasComponents as f}from"@stacksjs/storage";b.info("Generating component meta...");if(f())d();else b.info("No components found. Skipping component meta generation.");b.success("Generated component meta.");
1
+ import { log } from "@stacksjs/logging";
2
+ import { hasComponents } from "@stacksjs/storage";
3
+ import { generateComponentMeta } from "../helpers/component-meta";
4
+ log.info("Generating component meta...");
5
+ if (hasComponents())
6
+ generateComponentMeta();
7
+ else
8
+ log.info("No components found. Skipping component meta generation.");
9
+ log.success("Generated component meta.");
@@ -1,4 +1,21 @@
1
- // @bun
2
- import o from"process";import{cli as t}from"@stacksjs/config";import{log as r}from"@stacksjs/logging";import{projectPath as m}from"@stacksjs/path";import{writeTextFile as a}from"@stacksjs/storage";import{ExitCode as e}from"@stacksjs/types";r.info("Ensuring Component Library Entry Point...");if(!t.command)r.error("No command defined in the CLI configuration"),o.exit(e.FatalError);await a({path:m(t.command),data:`#!/usr/bin/env bun
1
+ import process from "node:process";
2
+ import { cli } from "@stacksjs/config";
3
+ import { log } from "@stacksjs/logging";
4
+ import { projectPath } from "@stacksjs/path";
5
+ import { writeTextFile } from "@stacksjs/storage";
6
+ import { ExitCode } from "@stacksjs/types";
7
+ log.info("Ensuring Component Library Entry Point...");
8
+ if (!cli.command) {
9
+ log.error("No command defined in the CLI configuration");
10
+ process.exit(ExitCode.FatalError);
11
+ }
12
+ await writeTextFile({
13
+ path: projectPath(cli.command),
14
+ data: `#!/usr/bin/env bun
3
15
  import('./storage/framework/core/buddy/src/custom-cli')
4
- `}).catch((i)=>{r.error("There was an error generating your custom CLI file.",i),o.exit(e.FatalError)});r.success("Generated custom CLI file");
16
+ `
17
+ }).catch((err) => {
18
+ log.error("There was an error generating your custom CLI file.", err);
19
+ process.exit(ExitCode.FatalError);
20
+ });
21
+ log.success("Generated custom CLI file");
@@ -1,5 +1,10 @@
1
- // @bun
2
- import"../chunk-h3d81wrg.js";import{env as I,envEnum as R}from"@stacksjs/env";import{log as T}from"@stacksjs/logging";import{path as P}from"@stacksjs/path";import{storage as D}from"@stacksjs/storage";var O=["APP_NAME","APP_ENV","APP_KEY","APP_URL","APP_DOMAIN","APP_MAINTENANCE","APP_MAINTENANCE_SECRET","APP_COMING_SOON","APP_COMING_SOON_SECRET","APP_ROOT","DEBUG","PORT","PORT_BACKEND","PORT_ADMIN","PORT_LIBRARY","PORT_DESKTOP","PORT_EMAIL","PORT_DOCS","PORT_INSPECT","PORT_API","PORT_SYSTEM_TRAY","API_PREFIX","DOCS_PREFIX","DB_CONNECTION","DB_HOST","DB_PORT","DB_DATABASE","DB_DATABASE_PATH","DB_USERNAME","DB_PASSWORD","DB_PREFIX","DB_SCHEMA","DB_QUERY_LOGGING_ENABLED","DB_QUERY_LOGGING_SLOW_THRESHOLD","DB_QUERY_LOGGING_RETENTION_DAYS","DB_QUERY_LOGGING_PRUNE_FREQUENCY","DB_QUERY_LOGGING_ANALYSIS_ENABLED","DB_QUERY_LOGGING_ANALYZE_ALL","DB_QUERY_LOGGING_EXPLAIN_PLAN","DB_QUERY_LOGGING_SUGGESTIONS","DB_MIGRATE_CONFIRM","DB_MIGRATE_FRESH","DATABASE_URL","AWS_ACCOUNT_ID","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_DEFAULT_REGION","AWS_DEFAULT_PASSWORD","AWS_REGION","AWS_HOSTED_ZONE_ID","AWS_S3_BUCKET","AWS_S3_PREFIX","AWS_SES_REGION","MAIL_MAILER","MAIL_HOST","MAIL_PORT","MAIL_USERNAME","MAIL_PASSWORD","MAIL_ENCRYPTION","MAIL_FROM_NAME","MAIL_FROM_ADDRESS","MAIL_DOMAIN","MAIL_DRIVER","MAIL_SERVER_MODE","MAIL_SERVER_PATH","SEARCH_ENGINE_DRIVER","MEILISEARCH_HOST","MEILISEARCH_KEY","STRIPE_SECRET_KEY","STRIPE_PUBLISHABLE_KEY","FRONTEND_APP_ENV","FRONTEND_APP_URL","REALTIME_MODE","BROADCAST_DRIVER","BROADCAST_HOST","BROADCAST_PORT","BROADCAST_SCHEME","BROADCAST_APP_ID","BROADCAST_APP_KEY","BROADCAST_APP_SECRET","BROADCAST_CORS_ORIGIN","BROADCAST_DEBUG","BROADCAST_REDIS_ENABLED","BROADCAST_REDIS_PREFIX","BROADCAST_RATE_LIMIT_ENABLED","BROADCAST_METRICS_ENABLED","REDIS_HOST","REDIS_PORT","REDIS_PASSWORD","PUSHER_APP_ID","PUSHER_APP_KEY","PUSHER_APP_SECRET","PUSHER_APP_CLUSTER","PUSHER_APP_USE_TLS","SSL_DOMAINS","LETSENCRYPT_EMAIL","CONNECT_INSTANCE_ALIAS","PHONE_NOTIFY_EMAIL","PHONE_FORWARD_NUMBER","STORAGE_DRIVER","STORAGE_ROOT","STORAGE_PUBLIC_URL","QUEUE_DRIVER","AUTH_USERNAME_FIELD","AUTH_PASSWORD_FIELD","AUTH_TOKEN_EXPIRY","AUTH_TOKEN_ROTATION","AUTH_PASSWORD_RESET_EXPIRE","AUTH_PASSWORD_RESET_THROTTLE"];T.info("Generating type env files...");var N=`
1
+ import { env as e, envEnum } from "@stacksjs/env";
2
+ import { log } from "@stacksjs/logging";
3
+ import { path as p } from "@stacksjs/path";
4
+ import { storage } from "@stacksjs/storage";
5
+ import { envKeys } from "../../../../env";
6
+ log.info("Generating type env files...");
7
+ const envTypes = `
3
8
  // This file is auto-generated by Stacks. Do not edit this file manually.
4
9
  // If you want to change the environment variables, please edit the .env file.
5
10
  //
@@ -7,20 +12,55 @@ import"../chunk-h3d81wrg.js";import{env as I,envEnum as R}from"@stacksjs/env";im
7
12
 
8
13
  declare module 'bun' {
9
14
  namespace env {
10
- ${O.map((E)=>{let A=typeof I[E],_=I[E];if(!_)if(R[E])A=R[E]?.map((S)=>`'${S}'`).join(" | "),_=R[E]?.[0];else switch(A){case"number":_="0";break;case"boolean":_=!1;break;default:_=""}if(A="string",typeof _==="string"){if(_.toLowerCase()==="true"||_.toLowerCase()==="false")A="boolean";else if(!Number.isNaN(Number.parseFloat(_))&&Number.isFinite(Number(_)))A="number";else if(R[E])A=R[E].map((S)=>`'${S}'`).join(" | ")}else if(typeof _==="number")A="number";else if(typeof _==="boolean")A="boolean";return`const ${E}: ${A}`}).join(`
15
+ ${envKeys.map((key) => {
16
+ let type = typeof e[key], value = e[key];
17
+ if (!value)
18
+ if (envEnum[key]) {
19
+ type = envEnum[key]?.map((item) => `'${item}'`).join(" | ");
20
+ value = envEnum[key]?.[0];
21
+ } else
22
+ switch (type) {
23
+ case "number":
24
+ value = "0";
25
+ break;
26
+ case "boolean":
27
+ value = !1;
28
+ break;
29
+ default:
30
+ value = "";
31
+ }
32
+ type = "string";
33
+ if (typeof value === "string") {
34
+ if (value.toLowerCase() === "true" || value.toLowerCase() === "false")
35
+ type = "boolean";
36
+ else if (!Number.isNaN(Number.parseFloat(value)) && Number.isFinite(Number(value)))
37
+ type = "number";
38
+ else if (envEnum[key])
39
+ type = envEnum[key].map((item) => `'${item}'`).join(" | ");
40
+ } else if (typeof value === "number")
41
+ type = "number";
42
+ else if (typeof value === "boolean")
43
+ type = "boolean";
44
+ return `const ${key}: ${type}`;
45
+ }).join(`
11
46
  `)}
12
47
  }
13
48
  }
14
- `;await D.writeFile(P.frameworkPath("types/env.d.ts"),N);T.info(" - ./storage/framework/env.ts");var L=`
49
+ `;
50
+ await storage.writeFile(p.frameworkPath("types/env.d.ts"), envTypes);
51
+ log.info(" - ./storage/framework/env.ts");
52
+ const env = `
15
53
  // This file is auto-generated by Stacks. Do not edit this file manually.
16
54
  // If you want to change the environment variables, please edit the .env file.
17
55
  //
18
56
  // For more information, please visit: https://stacksjs.com/docs
19
57
 
20
58
  export const envKeys = [
21
- ${O.map((E)=>`'${E}'`).join(`,
59
+ ${envKeys.map((key) => `'${key}'`).join(`,
22
60
  `)}
23
61
  ] as const
24
62
 
25
63
  export type EnvKey = typeof envKeys[number]
26
- `;await D.writeFile(P.frameworkPath("env.ts"),L);T.info(" - ./storage/framework/env.d.ts");
64
+ `;
65
+ await storage.writeFile(p.frameworkPath("env.ts"), env);
66
+ log.info(" - ./storage/framework/env.d.ts");
@@ -1,3 +1,8 @@
1
- #!/usr/bin/env bun
2
- // @bun
3
- import{Eb as q,Fb as x}from"../chunk-tpb8jgsk.js";import"../chunk-tsbk5vne.js";import"../chunk-h3d81wrg.js";import{log as z}from"@stacksjs/logging";import{hasComponents as A}from"@stacksjs/storage";if(A())await x(),await q();else z.info("No components found. Skipping IDE helper generation.");
1
+ import { log } from "@stacksjs/logging";
2
+ import { hasComponents } from "@stacksjs/storage";
3
+ import { generateVsCodeCustomData, generateWebTypes } from "../helpers/vscode-custom-data";
4
+ if (hasComponents()) {
5
+ await generateWebTypes();
6
+ await generateVsCodeCustomData();
7
+ } else
8
+ log.info("No components found. Skipping IDE helper generation.");