@stacksjs/actions 0.70.83 → 0.70.85

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 (87) hide show
  1. package/dist/action.js +1 -1
  2. package/dist/actions.js +1 -1
  3. package/dist/add.js +1 -1
  4. package/dist/ai/request-model-access.js +1 -1
  5. package/dist/blog.js +1 -1
  6. package/dist/build/frontend-static.js +1 -1
  7. package/dist/build.js +1 -1
  8. package/dist/chunk-0c8sd1t6.js +2 -0
  9. package/dist/{chunk-hv8tkjw2.js → chunk-0g2nzhx9.js} +2 -2
  10. package/dist/chunk-0gadhvn7.js +3 -0
  11. package/dist/{chunk-9sx16wyz.js → chunk-0h27aa4r.js} +1 -1
  12. package/dist/{chunk-f8z1aft6.js → chunk-3peh8kqs.js} +1 -1
  13. package/dist/{chunk-73y0wp0s.js → chunk-62gdfav8.js} +2 -2
  14. package/dist/{chunk-d5mbs5zz.js → chunk-6bk53y02.js} +1 -1
  15. package/dist/{chunk-dxvgx0r7.js → chunk-78c5n3s2.js} +2 -2
  16. package/dist/{chunk-heh4x32p.js → chunk-c74qv38e.js} +2 -2
  17. package/dist/{chunk-rft5b6wr.js → chunk-e142dheq.js} +1 -1
  18. package/dist/{chunk-k7n6c9hm.js → chunk-ec4gky40.js} +1 -1
  19. package/dist/chunk-h3d81wrg.js +3 -0
  20. package/dist/{chunk-hr9ndn21.js → chunk-m3q0x4h0.js} +1 -1
  21. package/dist/{chunk-30cc35np.js → chunk-mqgbyhph.js} +1 -1
  22. package/dist/{chunk-t5j470r2.js → chunk-n5eqwhck.js} +2 -2
  23. package/dist/{chunk-8maaf0ze.js → chunk-nsvnqv8y.js} +2 -2
  24. package/dist/{chunk-w363nwy3.js → chunk-nty6mmx4.js} +1 -1
  25. package/dist/{chunk-h10aj7jf.js → chunk-tpb8jgsk.js} +2 -2
  26. package/dist/{chunk-wtnp31q5.js → chunk-tsbk5vne.js} +1 -1
  27. package/dist/{chunk-w4erevzw.js → chunk-y6e448he.js} +2 -2
  28. package/dist/commit.js +1 -1
  29. package/dist/deploy/index.js +2 -2
  30. package/dist/dev/api.js +1 -1
  31. package/dist/dev/dashboard-globals.js +1 -1
  32. package/dist/dev/dashboard-utils.js +1 -1
  33. package/dist/dev/dashboard.js +1 -1
  34. package/dist/dev/index.js +1 -1
  35. package/dist/dev/migrate-watcher.js +1 -1
  36. package/dist/dev/views.js +1 -1
  37. package/dist/discover-packages.js +1 -1
  38. package/dist/examples.js +1 -1
  39. package/dist/generate/component-meta.js +1 -1
  40. package/dist/generate/env-files.js +1 -1
  41. package/dist/generate/ide-helpers.js +1 -1
  42. package/dist/generate/index.js +1 -1
  43. package/dist/generate/lib-entries.js +1 -1
  44. package/dist/generate/vscode-custom-data.js +1 -1
  45. package/dist/helpers/component-meta.js +1 -1
  46. package/dist/helpers/index.js +1 -1
  47. package/dist/helpers/lib-entries.js +1 -1
  48. package/dist/helpers/package-json.js +1 -1
  49. package/dist/helpers/utils.js +1 -1
  50. package/dist/helpers/vscode-custom-data.js +1 -1
  51. package/dist/index.js +1 -1
  52. package/dist/lint/fix.js +1 -1
  53. package/dist/lint/index.js +1 -1
  54. package/dist/lint/lint.js +1 -1
  55. package/dist/make-command.js +44 -1
  56. package/dist/make-job.js +128 -1
  57. package/dist/make-policy.js +93 -1
  58. package/dist/make-resource.js +112 -1
  59. package/dist/make.js +1 -1
  60. package/dist/orm/base.js +1 -1
  61. package/dist/release.js +1 -1
  62. package/dist/run-action.js +1 -1
  63. package/dist/scaffold-crud.js +86 -1
  64. package/dist/setup/index.js +1 -1
  65. package/dist/setup/ssl.js +1 -1
  66. package/dist/stacks.js +1 -1
  67. package/dist/templates.js +1 -1
  68. package/dist/types.js +1 -1
  69. package/dist/upgrade/dependencies.js +1 -1
  70. package/dist/upgrade/framework-utils.js +1 -1
  71. package/dist/upgrade/framework.js +1 -1
  72. package/dist/upgrade/index.js +1 -1
  73. package/dist/upgrade/packages.js +1 -1
  74. package/dist/upgrade.js +1 -1
  75. package/package.json +17 -16
  76. package/dist/chunk-0wyxyqak.js +0 -3
  77. package/dist/chunk-8kvzjd10.js +0 -3
  78. package/dist/chunk-acyw294f.js +0 -130
  79. package/dist/chunk-ay41a7jn.js +0 -3
  80. package/dist/chunk-e87s6b8r.js +0 -46
  81. package/dist/chunk-g6k41p49.js +0 -1
  82. package/dist/chunk-gcjrdkq7.js +0 -95
  83. package/dist/chunk-h63c1v89.js +0 -3
  84. package/dist/chunk-n057zfgw.js +0 -114
  85. package/dist/chunk-v0hqskdk.js +0 -3
  86. package/dist/chunk-vv4nqhgg.js +0 -3
  87. package/dist/chunk-x0cnhg3z.js +0 -88
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import"./chunk-v0hqskdk.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
2
+ import"./chunk-h3d81wrg.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
3
  echo "Hello World from App Server 2!" > /tmp/test.txt
4
4
  chown ubuntu:ubuntu /tmp/test.txt
5
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"},cloud:{provider:"hetzner"},mode:"server",environments:{production:{type:"production",deployBranch:"main",region:"us-east-1",variables:{NODE_ENV:"production",LOG_LEVEL:"info"}},staging:{type:"staging",deployBranch:"stage",domainPrefix:"staging",region:"us-east-1",variables:{NODE_ENV:"staging",LOG_LEVEL:"debug"}},development:{type:"development",deployBranch:"dev",domainPrefix:"dev",region:"us-east-1",variables:{NODE_ENV:"development",LOG_LEVEL:"debug"}}},infrastructure:{compute:{instances:1,size:"small",disk:{size:20,type:"ssd",encrypted:!0},webServer:"rpx",proxy:{engine:"rpx",onDemandTls:!0,onDemandTlsEmail:"hello@stacksjs.com"}},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:".",path:"/",domain:m.APP_DOMAIN||"stacksjs.com",start:"bun --conditions development storage/framework/core/buddy/src/cli.ts serve",port:3000,preStart:["bun install","bun --conditions development storage/framework/core/buddy/src/cli.ts migrate"]},api:{root:".",start:"bun --conditions development storage/framework/core/actions/src/serve/api.ts",port:3008,preStart:["bun install"],env:{HOST:"127.0.0.1",APP_ENV:"production"}},docs:{deploy:"server",root:"dist/docs/.bunpress",path:"/docs",domain:m.APP_DOMAIN||"stacksjs.com",build:"bunx @stacksjs/bunpress build --dir ./docs --outdir ./dist/docs",pathRewriteStyle:"directory"},blog:{deploy:"server",root:"dist/blog",path:"/blog",domain:m.APP_DOMAIN||"stacksjs.com",build:`bun -e "const {buildBlog}=await import('./storage/framework/core/actions/src/blog'); await buildBlog({outDir:'./dist/blog', baseUrl: (process.env.APP_URL?(/^https?:/.test(process.env.APP_URL)?process.env.APP_URL:'https://'+process.env.APP_URL):'https://stacksjs.com')})"`,pathRewriteStyle:"directory"},wwwStacksjs:{domain:"www.stacksjs.com",redirect:"https://stacksjs.com"}}},w={},E=w;export{C as tsCloud,E as default};
@@ -1,7 +1,7 @@
1
1
  // @bun
2
- import{qb as H}from"./chunk-v0hqskdk.js";import{execSync as M,spawn as j}from"child_process";import Z from"fs";import E from"os";import $ from"path";import Y from"process";import{log as B}from"@stacksjs/cli";var q=Y.platform==="win32"?$.join(Y.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",X=$.join(E.homedir(),".stacks","ssl");function T(){return Y.stdin.isTTY===!0&&Y.stdout.isTTY===!0}function V(){return Y.env.SUDO_PASSWORD}function k(){return T()||!!V()}function F(z){try{let G=Z.readFileSync(q,"utf-8");return G.includes(`127.0.0.1 ${z}`)||G.includes(`::1 ${z}`)}catch{if(Y.platform!=="win32"){let G=V();if(G)try{let J=M(`echo '${G}' | sudo -S cat "${q}" 2>/dev/null`,{encoding:"utf-8"});return J.includes(`127.0.0.1 ${z}`)||J.includes(`::1 ${z}`)}catch{return!1}}return!1}}async function x(z,G){if(F(z)){if(G)B.info(`${z} already in hosts file`);return!0}let J=`
2
+ import{Lb as H}from"./chunk-h3d81wrg.js";import{execSync as M,spawn as j}from"child_process";import Z from"fs";import E from"os";import $ from"path";import Y from"process";import{log as B}from"@stacksjs/cli";var q=Y.platform==="win32"?$.join(Y.env.windir||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts",X=$.join(E.homedir(),".stacks","ssl");function T(){return Y.stdin.isTTY===!0&&Y.stdout.isTTY===!0}function V(){return Y.env.SUDO_PASSWORD}function k(){return T()||!!V()}function F(z){try{let G=Z.readFileSync(q,"utf-8");return G.includes(`127.0.0.1 ${z}`)||G.includes(`::1 ${z}`)}catch{if(Y.platform!=="win32"){let G=V();if(G)try{let J=M(`echo '${G}' | sudo -S cat "${q}" 2>/dev/null`,{encoding:"utf-8"});return J.includes(`127.0.0.1 ${z}`)||J.includes(`::1 ${z}`)}catch{return!1}}return!1}}async function x(z,G){if(F(z)){if(G)B.info(`${z} already in hosts file`);return!0}let J=`
3
3
  # Added by Stacks
4
4
  127.0.0.1 ${z}
5
5
  ::1 ${z}
6
6
  `;if(Y.platform==="win32")return B.warn("Please add this to your hosts file manually:"),B.warn(`127.0.0.1 ${z}`),B.warn(`::1 ${z}`),B.warn(`File location: ${q}`),!1;if(!k()){if(G)B.warn(`Cannot add ${z} to hosts file (non-interactive mode and no SUDO_PASSWORD set)`),B.info("Run `buddy setup:ssl` in a terminal or set SUDO_PASSWORD environment variable");return!1}let K=V();return new Promise((Q)=>{let N;if(K)N=j("sh",["-c",`echo '${K}' | sudo -S sh -c "echo '${J}' >> '${q}'"`],{stdio:["pipe","inherit","inherit"]});else N=j("sudo",["sh","-c",`echo '${J}' >> "${q}"`],{stdio:"inherit"});N.on("close",(U)=>{if(U===0){if(G)B.success(`Added ${z} to hosts file`);Q(!0)}else{if(G)B.error(`Failed to add ${z} to hosts file`),B.warn(`Manually add: 127.0.0.1 ${z}`);Q(!1)}}),N.on("error",()=>{B.error("Failed to run sudo command"),Q(!1)})})}function O(z){let G=$.join(X,`${z}.crt`),J=$.join(X,`${z}.key`),K=$.join(X,`${z}.ca.crt`);return Z.existsSync(G)&&Z.existsSync(J)&&Z.existsSync(K)}function y(z){if(Y.platform!=="darwin")return!0;let G=$.join(X,`${z}.crt`);if(!Z.existsSync(G))return!1;try{let J=M(`openssl x509 -noout -fingerprint -sha256 -in "${G}"`,{encoding:"utf-8"}),K=J.indexOf("="),Q=K>=0?J.slice(K+1).trim():"";if(!Q)return!1;return M("security find-certificate -a -Z -p | openssl x509 -noout -fingerprint -sha256 2>/dev/null || true",{encoding:"utf-8"}).includes(Q)}catch{return!1}}async function D(z,G){let J=$.join(X,`${z}.ca.crt`),K=$.join(X,`${z}.crt`);if(!Z.existsSync(J))return B.error(`CA certificate not found: ${J}`),!1;if(y(z)){if(G)B.info("Certificate is already trusted, skipping trust step");return!0}if(!k()){if(G)B.warn("Cannot trust certificate (non-interactive mode and no SUDO_PASSWORD set)"),B.info("Run `buddy setup:ssl` in a terminal or set SUDO_PASSWORD environment variable");return!1}let Q=V();if(Y.platform==="darwin")return new Promise((N)=>{let U=`security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain '${J}' && security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain '${K}'`,W;if(Q)W=j("sh",["-c",`echo '${Q}' | sudo -S sh -c "${U}"`],{stdio:["pipe","inherit","inherit"]});else W=j("sudo",["sh","-c",U],{stdio:"inherit"});W.on("close",(A)=>{if(A===0){try{M(`security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db "${K}" 2>/dev/null || true`)}catch{}N(!0)}else{if(G)B.warn("Could not trust certificate automatically"),B.info(` sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "${J}"`);N(!1)}}),W.on("error",()=>{B.error("Failed to run sudo command"),N(!1)})});else if(Y.platform==="linux")return new Promise((N)=>{let U=`mkdir -p /usr/local/share/ca-certificates/stacks && cp '${J}' /usr/local/share/ca-certificates/stacks/ && update-ca-certificates`,W;if(Q)W=j("sh",["-c",`echo '${Q}' | sudo -S sh -c "${U}"`],{stdio:["pipe","inherit","inherit"]});else W=j("sudo",["sh","-c",U],{stdio:"inherit"});W.on("close",(A)=>{if(A===0)B.success("Certificate trusted"),N(!0);else B.warn("Could not trust certificate automatically"),N(!1)}),W.on("error",()=>N(!1))});else if(Y.platform==="win32")return B.warn("Please manually trust the certificate in Windows:"),B.warn(` 1. Double-click: ${J}`),B.warn(' 2. Click "Install Certificate"'),B.warn(' 3. Select "Local Machine" and place in "Trusted Root Certification Authorities"'),!1;return!1}async function R(z,G){try{let J=await import("@stacksjs/tlsx"),{generateCertificate:K,createRootCA:Q}=J,N=J.httpsConfig;if(!Z.existsSync(X))Z.mkdirSync(X,{recursive:!0});let U={domain:z,hostCertCN:z,basePath:X,caCertPath:$.join(X,`${z}.ca.crt`),certPath:$.join(X,`${z}.crt`),keyPath:$.join(X,`${z}.key`),altNameIPs:["127.0.0.1","::1"],altNameURIs:["localhost",z],organizationName:"Stacks Development",countryName:"US",stateName:"California",localityName:"Playa Vista",commonName:z,validityDays:825,verbose:G||!1,subjectAltNames:[{type:2,value:z},{type:2,value:`*.${z.split(".").slice(1).join(".")}`},{type:2,value:"localhost"},{type:2,value:"*.localhost"}]};if(G)B.info("Generating Root CA certificate...");let W=await Q(U);if(G)B.info(`Generating host certificate for ${z}...`);let A=await K({...U,rootCA:{certificate:W.certificate,privateKey:W.privateKey}});if(Z.writeFileSync(U.caCertPath,W.certificate),Z.writeFileSync(U.certPath,A.certificate),Z.writeFileSync(U.keyPath,A.privateKey),G)B.success(`SSL certificates generated for ${z}`);return!0}catch(J){return B.error(`Failed to generate certificates: ${J}`),!1}}async function C(z={}){let G=z.domain||Y.env.APP_URL?.replace(/^https?:\/\//,"")||"stacks.localhost";if(G==="localhost"||G.startsWith("localhost:"))return B.info("Skipping SSL setup for localhost"),!0;let J=!0;if(!z.skipHosts){if(!await x(G,z.verbose)&&z.verbose)B.warn("Hosts file not updated - you may need to add the entry manually")}if(!O(G)){if(z.verbose)B.info("Generating SSL certificates...");if(!await R(G,z.verbose))return B.error("Failed to generate SSL certificates"),!1}if(!z.skipTrust&&!y(G)){if(!await D(G,z.verbose))B.warn("Certificate not trusted - you may see browser warnings"),J=!1}return J}function f(z){return F(z)&&O(z)}
7
- export{F as t,x as u,O as v,y as w,D as x,R as y,C as z,f as A};
7
+ export{F as Fa,x as Ga,O as Ha,y as Ia,D as Ja,R as Ka,C as La,f as Ma};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{eb as z}from"./chunk-wtnp31q5.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
2
+ import{Gb as z}from"./chunk-tsbk5vne.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
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
4
  `)}
5
- export{T as na,V as oa,X as pa,Y as qa,Q as ra};
5
+ export{T as Sa,V as Ta,X as Ua,Y as Va,Q as Wa};
@@ -280,4 +280,4 @@ export default new Command({
280
280
  console.log('Command executed')
281
281
  },
282
282
  })`};
283
- export{f as fa};
283
+ export{f as S};
@@ -1,7 +1,7 @@
1
1
  // @bun
2
- import{eb as z}from"./chunk-wtnp31q5.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`{
2
+ import{Gb as z}from"./chunk-tsbk5vne.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
3
  "version": 1.1,
4
4
  "tags": ${JSON.stringify(z.webComponents?.tags)}
5
5
  }
6
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 cb,R as db};
7
+ export{Q as Eb,R as Fb};
@@ -1,3 +1,3 @@
1
1
  // @bun
2
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 eb};
3
+ export{b as Gb};
@@ -1,7 +1,7 @@
1
1
  // @bun
2
- import{qb as U}from"./chunk-v0hqskdk.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,[";",`
2
+ import{Lb as U}from"./chunk-h3d81wrg.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
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
4
  `).map((A)=>A.replace(/^\s*\*\s?/,"")).join(`
5
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
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 la,B as ma};
7
+ export{p as Qa,B as Ra};
package/dist/commit.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{Pa as a,Qa as b}from"./chunk-h63c1v89.js";import"./chunk-v0hqskdk.js";export{a as invoke,b as commit};
2
+ import"./chunk-h3d81wrg.js";import{NpmScript as i}from"@stacksjs/enums";import{log as t}from"@stacksjs/logging";import{projectPath as m}from"@stacksjs/path";import{runNpmScript as r}from"@stacksjs/utils";async function n(o){t.info("Committing..."),await r(i.Commit,{cwd:m(),...o}),t.success("Committed")}async function a(o){return await n(o)}export{n as invoke,a as commit};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{qb as Z}from"../chunk-v0hqskdk.js";import{existsSync as JJ,readFileSync as BJ,statSync as TJ}from"fs";import T from"process";import{runCommand as KJ,spinner as S}from"@stacksjs/cli";import{config as OJ}from"@stacksjs/config";import{path as X}from"@stacksjs/path";import{storage as RJ}from"@stacksjs/storage";import{ExitCode as EJ}from"@stacksjs/types";var $={debug:(...J)=>{if(T.argv.includes("--verbose")||T.argv.includes("-v"))console.log("\uD83D\uDD0D",...J)},success:(...J)=>console.log("\u2713",...J),error:(...J)=>console.error("\u2717",...J)},GJ="github.com/mail-os/mail",NJ=`${GJ}@0.1.0`,jJ="linux-x86_64",XJ=["mail","mail-x86_64-linux","mail-x86_64-linux-gnu"],V=T.argv.includes("--verbose")||T.argv.includes("-v");async function DJ(J,U,H=8){let{existsSync:Q,readdirSync:_,statSync:b}=await import("fs"),{join:G,basename:y}=await import("path"),c=new Set(U),k=[];if(!Q(J))return k;function N(QJ,UJ){if(UJ>H)return;for(let o of _(QJ)){if(o===".git"||o==="node_modules")continue;let r=G(QJ,o),n=b(r);if(n.isDirectory())N(r,UJ+1);else if(n.isFile()&&c.has(y(r)))k.push(r)}}return N(J,0),k}async function MJ(J){let{readFileSync:U}=await import("fs"),H=U(J).slice(0,4);return H[0]===127&&H[1]===69&&H[2]===76&&H[3]===70}async function IJ(){let{existsSync:J}=await import("fs"),U=`${T.env.HOME}/Code/Tools/pantry/packages/ts-pantry/bin/cli.ts`;if(J(U))return{command:"bun",args:[U]};let H=X.projectPath("pantry/.bin/pantry");if(J(H))return{command:H,args:[]};let Q=`${T.env.HOME}/.local/share/pantry/global/bin/pantry`;if(J(Q))return{command:Q,args:[]};return{command:"pantry",args:[]}}async function PJ(){let{execFileSync:J}=await import("child_process"),U=X.projectPath("pantry"),H=await IJ();J(H.command,[...H.args,"install",NJ,"--install-dir",U,"--platform",jJ,"--quiet"],{cwd:X.projectPath(),stdio:V?"inherit":"pipe",env:T.env})}async function fJ(){let{existsSync:J}=await import("fs"),{join:U}=await import("path"),H=[X.projectPath("pantry"),`${T.env.HOME}/.local/share/pantry`],Q=[...XJ.map((_)=>X.projectPath(`pantry/.bin/${_}`)),...XJ.map((_)=>U(`${T.env.HOME}/.local/share/pantry/global/bin`,_))];for(let _ of Q)if(J(_)&&await MJ(_))return _;for(let _ of H){let b=await DJ(_,XJ);for(let G of b)if(await MJ(G))return G}return null}var bJ={".html":"text/html",".css":"text/css",".js":"application/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject",".otf":"font/otf",".webp":"image/webp",".mp4":"video/mp4",".webm":"video/webm",".mp3":"audio/mpeg",".wav":"audio/wav",".pdf":"application/pdf",".xml":"application/xml",".txt":"text/plain"};function WJ(J){let U=J.lastIndexOf("."),H=U>=0?J.slice(U).toLowerCase():"";return bJ[H]||"application/octet-stream"}async function HJ(J,U,H="",Q=[".DS_Store"]){let{readdirSync:_,statSync:b}=await import("fs"),{join:G}=await import("path"),y=_(J);for(let c of y){if(Q.includes(c))continue;let k=G(J,c),N=H?`${H}/${c}`:c;if(b(k).isDirectory())await HJ(k,U,N,Q);else await U(k,N)}}async function a(J,U="s3 operation"){for(let Q=0;Q<=3;Q++)try{return await J()}catch(_){if(Q>=3)throw _;let b=Math.min(500*2**Q+Math.random()*200,5000);if(V)$.debug(` Retrying ${U} (attempt ${Q+2}/4) in ${Math.round(b)}ms...`);await new Promise((G)=>setTimeout(G,b))}throw Error(`${U} failed after 4 attempts`)}function wJ(J){if(!J)return[];return Array.isArray(J)?J:[J]}function AJ(J,U,H=""){if(U===null||U===void 0)return"";if(typeof U==="boolean")return`${H}<${J}>${U}</${J}>
2
+ import{Lb as Z}from"../chunk-h3d81wrg.js";import{existsSync as JJ,readFileSync as BJ,statSync as TJ}from"fs";import T from"process";import{runCommand as KJ,spinner as S}from"@stacksjs/cli";import{config as OJ}from"@stacksjs/config";import{path as X}from"@stacksjs/path";import{storage as RJ}from"@stacksjs/storage";import{ExitCode as EJ}from"@stacksjs/types";var $={debug:(...J)=>{if(T.argv.includes("--verbose")||T.argv.includes("-v"))console.log("\uD83D\uDD0D",...J)},success:(...J)=>console.log("\u2713",...J),error:(...J)=>console.error("\u2717",...J)},GJ="github.com/mail-os/mail",NJ=`${GJ}@0.1.0`,jJ="linux-x86_64",XJ=["mail","mail-x86_64-linux","mail-x86_64-linux-gnu"],V=T.argv.includes("--verbose")||T.argv.includes("-v");async function DJ(J,U,H=8){let{existsSync:Q,readdirSync:_,statSync:b}=await import("fs"),{join:G,basename:y}=await import("path"),c=new Set(U),k=[];if(!Q(J))return k;function N(QJ,UJ){if(UJ>H)return;for(let o of _(QJ)){if(o===".git"||o==="node_modules")continue;let r=G(QJ,o),n=b(r);if(n.isDirectory())N(r,UJ+1);else if(n.isFile()&&c.has(y(r)))k.push(r)}}return N(J,0),k}async function MJ(J){let{readFileSync:U}=await import("fs"),H=U(J).slice(0,4);return H[0]===127&&H[1]===69&&H[2]===76&&H[3]===70}async function IJ(){let{existsSync:J}=await import("fs"),U=`${T.env.HOME}/Code/Tools/pantry/packages/ts-pantry/bin/cli.ts`;if(J(U))return{command:"bun",args:[U]};let H=X.projectPath("pantry/.bin/pantry");if(J(H))return{command:H,args:[]};let Q=`${T.env.HOME}/.local/share/pantry/global/bin/pantry`;if(J(Q))return{command:Q,args:[]};return{command:"pantry",args:[]}}async function PJ(){let{execFileSync:J}=await import("child_process"),U=X.projectPath("pantry"),H=await IJ();J(H.command,[...H.args,"install",NJ,"--install-dir",U,"--platform",jJ,"--quiet"],{cwd:X.projectPath(),stdio:V?"inherit":"pipe",env:T.env})}async function fJ(){let{existsSync:J}=await import("fs"),{join:U}=await import("path"),H=[X.projectPath("pantry"),`${T.env.HOME}/.local/share/pantry`],Q=[...XJ.map((_)=>X.projectPath(`pantry/.bin/${_}`)),...XJ.map((_)=>U(`${T.env.HOME}/.local/share/pantry/global/bin`,_))];for(let _ of Q)if(J(_)&&await MJ(_))return _;for(let _ of H){let b=await DJ(_,XJ);for(let G of b)if(await MJ(G))return G}return null}var bJ={".html":"text/html",".css":"text/css",".js":"application/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject",".otf":"font/otf",".webp":"image/webp",".mp4":"video/mp4",".webm":"video/webm",".mp3":"audio/mpeg",".wav":"audio/wav",".pdf":"application/pdf",".xml":"application/xml",".txt":"text/plain"};function WJ(J){let U=J.lastIndexOf("."),H=U>=0?J.slice(U).toLowerCase():"";return bJ[H]||"application/octet-stream"}async function HJ(J,U,H="",Q=[".DS_Store"]){let{readdirSync:_,statSync:b}=await import("fs"),{join:G}=await import("path"),y=_(J);for(let c of y){if(Q.includes(c))continue;let k=G(J,c),N=H?`${H}/${c}`:c;if(b(k).isDirectory())await HJ(k,U,N,Q);else await U(k,N)}}async function a(J,U="s3 operation"){for(let Q=0;Q<=3;Q++)try{return await J()}catch(_){if(Q>=3)throw _;let b=Math.min(500*2**Q+Math.random()*200,5000);if(V)$.debug(` Retrying ${U} (attempt ${Q+2}/4) in ${Math.round(b)}ms...`);await new Promise((G)=>setTimeout(G,b))}throw Error(`${U} failed after 4 attempts`)}function wJ(J){if(!J)return[];return Array.isArray(J)?J:[J]}function AJ(J,U,H=""){if(U===null||U===void 0)return"";if(typeof U==="boolean")return`${H}<${J}>${U}</${J}>
3
3
  `;if(typeof U==="number"||typeof U==="string")return`${H}<${J}>${U}</${J}>
4
4
  `;if(Array.isArray(U))return U.map((Q)=>AJ(J,Q,H)).join("");if(typeof U==="object"){if(J.startsWith("@_")||J==="?xml")return"";let Q="";for(let[_,b]of Object.entries(U))if(!_.startsWith("@_")&&_!=="#text")Q+=AJ(_,b,`${H} `);if(U["#text"]!==void 0)return`${H}<${J}>${U["#text"]}</${J}>
5
5
  `;return`${H}<${J}>
@@ -8,7 +8,7 @@ ${Q}${H}</${J}>
8
8
  <DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
9
9
  ${Object.entries(J).filter(([U])=>!U.startsWith("@_")).map(([U,H])=>AJ(U,H," ")).join("")}</DistributionConfig>
10
10
  `}function _J(J){let U=[...new Set(J)].filter((Q)=>Number.isFinite(Q)&&Q>0).sort((Q,_)=>Q-_);if(U.length===0)return"true";return`if command -v firewall-cmd >/dev/null 2>&1; then firewall-cmd --permanent ${U.map((Q)=>`--add-port=${Q}/tcp`).join(" ")} && firewall-cmd --reload; fi`}async function CJ(J,U,H){if(!U)return;if(((await J.describeSecurityGroups({GroupIds:[U]}))?.SecurityGroups?.[0]?.IpPermissions||[]).some((G)=>{return G.IpProtocol==="tcp"&&Number(G.FromPort)<=H&&Number(G.ToPort)>=H&&wJ(G.IpRanges).some((y)=>y.CidrIp==="0.0.0.0/0")}))return;try{await J.authorizeSecurityGroupIngress({GroupId:U,IpPermissions:[{IpProtocol:"tcp",FromPort:H,ToPort:H,IpRanges:[{CidrIp:"0.0.0.0/0",Description:`Stacks API port ${H}`}]}]})}catch(G){if(!String(G?.message||"").includes("InvalidPermission.Duplicate"))throw G}}async function kJ(J,U,H){if(!U)return;let Q=await J.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${U}/config`,returnHeaders:!0}),_=Q.headers?.etag||Q.headers?.ETag||"",b=Q.body?.DistributionConfig||Q.DistributionConfig||Q.body;if(!_||!b?.Origins?.Items)return;let y=wJ(b.Origins.Items.Origin).find((c)=>String(c.Id||"").includes("-api"));if(!y?.CustomOriginConfig)return;if(Number(y.CustomOriginConfig.HTTPPort)===H)return;y.CustomOriginConfig.HTTPPort=H,await J.request({service:"cloudfront",region:"us-east-1",method:"PUT",path:`/2020-05-31/distribution/${U}/config`,body:hJ(b),headers:{"Content-Type":"application/xml","If-Match":_}})}var xJ=S("Building framework...");xJ.start();await KJ("bun run build",{cwd:X.frameworkPath("core"),quiet:!1});xJ.succeed("Framework built");var LJ=X.projectPath("docs"),SJ=X.projectPath("dist/docs/.bunpress");if(RJ.hasFiles(LJ)){let J=S("Building documentation with BunPress...");J.start();try{let{rm:U}=await import("fs/promises"),H=`${T.env.HOME}/Code/Tools/bunpress/packages/bunpress/bin/cli.ts`,Q=X.projectPath("node_modules/@stacksjs/bunpress/dist/bin/cli.js"),_=await Bun.file(H).exists(),b=await Bun.file(Q).exists(),G=_?`bun ${H} build --dir ${LJ} --outdir ${X.projectPath("dist/docs")}`:b?`bun ${Q} build --dir ${LJ} --outdir ${X.projectPath("dist/docs")}`:"bunx @stacksjs/bunpress@0.1.5 build --dir ./docs --outdir ./dist/docs";await U(SJ,{recursive:!0,force:!0}),await KJ(G,{cwd:X.projectPath(),quiet:!V}),J.succeed(`Documentation built with BunPress${_?" (local checkout)":""}`)}catch(U){if(J.stop(),console.log(`\u26A0 Documentation build skipped: ${U.message}`),V)$.debug("To build docs manually: cd ~/Code/Tools/bunpress && bun packages/bunpress/bin/cli.ts build --dir /path/to/docs --outdir /path/to/dist/docs")}}else if(V)$.debug("No docs directory found, skipping documentation build");var vJ=RJ.hasFiles(X.projectPath("dist/blog")),yJ=["CampmateScript-Regular.woff2","SequoiaSans-Regular.woff2","Switchback-Regular.woff2"].every((J)=>JJ(X.projectPath(`dist/blog/assets/fonts/nps/${J}`))),gJ=["topography.svg","park-ridge.svg"].every((J)=>JJ(X.projectPath(`dist/blog/assets/images/${J}`))),ZJ=X.projectPath("dist/blog/index.html"),i=JJ(ZJ)?BJ(ZJ,"utf8"):"",cJ=i.length>0&&!i.includes("woff2-variations"),mJ=i.includes("--on-primary")&&i.includes("--newsletter-bg"),dJ=i.includes("topography.svg")&&i.includes("park-ridge.svg"),pJ=!i.includes("stamp-trail")&&!i.includes("blog-sign-tree.svg"),uJ=X.frameworkPath("core/cms/src/build.ts"),sJ=X.projectPath("config/blog.ts"),lJ=JJ(ZJ)&&[uJ,sJ].filter((J)=>JJ(J)).every((J)=>TJ(ZJ).mtimeMs>=TJ(J).mtimeMs);if(!vJ||!yJ||!gJ||!cJ||!mJ||!dJ||!pJ||!lJ){let J=S("Building blog...");J.start();try{let U=(await import(X.projectPath("config/blog"))).default,{buildBlogSite:H}=await import(X.frameworkPath("core/cms/src/build"));await H({config:U,outDir:X.projectPath("dist/blog")}),J.succeed("Blog built successfully")}catch(U){if(J.stop(),console.log(`\u26A0 Blog build skipped: ${U.message}`),V)$.debug(`Blog build error: ${U.stack}`)}}else if(V)$.debug("Pre-built blog found at dist/blog, skipping build");if(V)$.debug("Skipping views build (vite-config not configured)");var aJ=await import(X.projectPath("config/cloud")),iJ=aJ?.tsCloud?.mode||"server";if(iJ==="serverless"){let J=S("Building server...");J.start(),await KJ("bun build.ts",{cwd:X.frameworkPath("server"),quiet:!V}),J.succeed("Server built");let U=S("Packaging for deployment...");U.start(),await KJ("bun zip.ts",{cwd:X.corePath("cloud"),quiet:!V}),U.succeed("Package ready")}else if(V)$.debug("Skipping server build and packaging (server mode)");if(!T.env.AWS_ACCESS_KEY_ID||!T.env.AWS_SECRET_ACCESS_KEY){let{existsSync:J,readFileSync:U}=await import("fs"),H=T.env.APP_ENV||T.env.NODE_ENV||"production",Q=[X.projectPath(`.env.${H}`),X.projectPath(".env")];for(let _ of Q)if(J(_)){let b=U(_,"utf-8");for(let G of b.split(`
11
- `)){let y=G.trim();if(y.startsWith("#")||!y.includes("="))continue;let c=y.indexOf("="),k=y.slice(0,c).trim(),N=y.slice(c+1).trim();if(N.startsWith('"')&&N.endsWith('"')||N.startsWith("'")&&N.endsWith("'"))N=N.slice(1,-1);if(k==="AWS_ACCESS_KEY_ID"&&N)T.env.AWS_ACCESS_KEY_ID=N;else if(k==="AWS_SECRET_ACCESS_KEY"&&N)T.env.AWS_SECRET_ACCESS_KEY=N;else if(k==="AWS_REGION"&&N&&!T.env.AWS_REGION)T.env.AWS_REGION=N;else if(k==="AWS_ACCOUNT_ID"&&N&&!T.env.AWS_ACCOUNT_ID)T.env.AWS_ACCOUNT_ID=N;else if(k.startsWith("MAIL_PASSWORD_")&&N&&!T.env[k])T.env[k]=N}if(V)$.debug(`Loaded AWS credentials from ${_}`);break}}try{let{deployStack:J,deployFrontend:U}=await import("../chunk-9sx16wyz.js"),H=T.env.APP_ENV||T.env.NODE_ENV||"production",Q=T.env.AWS_REGION||"us-east-1",_=await import(X.projectPath("config/cloud")),b=_?.tsCloud?.mode||"server",G=_?.tsCloud?.project?.name||_?.tsCloud?.project?.slug||"stacks";if(b==="serverless"){console.log(""),console.log("Serverless deployment mode detected"),console.log("Building and pushing container image..."),console.log("");let z=T.env.AWS_ACCOUNT_ID||await y(Q);if(!z||z.length<10)throw Error(`Invalid AWS Account ID: "${z||"(empty)"}"
11
+ `)){let y=G.trim();if(y.startsWith("#")||!y.includes("="))continue;let c=y.indexOf("="),k=y.slice(0,c).trim(),N=y.slice(c+1).trim();if(N.startsWith('"')&&N.endsWith('"')||N.startsWith("'")&&N.endsWith("'"))N=N.slice(1,-1);if(k==="AWS_ACCESS_KEY_ID"&&N)T.env.AWS_ACCESS_KEY_ID=N;else if(k==="AWS_SECRET_ACCESS_KEY"&&N)T.env.AWS_SECRET_ACCESS_KEY=N;else if(k==="AWS_REGION"&&N&&!T.env.AWS_REGION)T.env.AWS_REGION=N;else if(k==="AWS_ACCOUNT_ID"&&N&&!T.env.AWS_ACCOUNT_ID)T.env.AWS_ACCOUNT_ID=N;else if(k.startsWith("MAIL_PASSWORD_")&&N&&!T.env[k])T.env[k]=N}if(V)$.debug(`Loaded AWS credentials from ${_}`);break}}try{let{deployStack:J,deployFrontend:U}=await import("../chunk-0h27aa4r.js"),H=T.env.APP_ENV||T.env.NODE_ENV||"production",Q=T.env.AWS_REGION||"us-east-1",_=await import(X.projectPath("config/cloud")),b=_?.tsCloud?.mode||"server",G=_?.tsCloud?.project?.name||_?.tsCloud?.project?.slug||"stacks";if(b==="serverless"){console.log(""),console.log("Serverless deployment mode detected"),console.log("Building and pushing container image..."),console.log("");let z=T.env.AWS_ACCOUNT_ID||await y(Q);if(!z||z.length<10)throw Error(`Invalid AWS Account ID: "${z||"(empty)"}"
12
12
  Set AWS_ACCOUNT_ID in your .env file or ensure valid AWS credentials are configured.`);let q=`${z}.dkr.ecr.${Q}.amazonaws.com/${G}-${H}-api`,A=`${q}:latest`;if(V)$.debug(`ECR repository: ${q}`);if(V)$.debug("ECR credentials will be validated before push...");let W=S("Building Docker image...");W.start();try{let{exec:Y}=await import("child_process"),{promisify:F}=await import("util"),x=F(Y),E=`docker build --platform linux/amd64 -t ${A} -f Dockerfile .`,{stdout:M,stderr:O}=await x(E,{cwd:X.projectPath(),env:T.env,maxBuffer:10485760,timeout:900000});if(V&&M)$.debug(M);if(V&&O)$.debug(O);W.succeed(`Docker image built: ${A}`)}catch(Y){if(W.fail("Docker build failed"),V)$.debug(`Docker build error: ${Y.message}`);throw Y}let K=S("Checking ECR repository...");K.start();try{let{ECRClient:Y}=await import("@stacksjs/ts-cloud"),F=new Y(Q),x=`${G}-${H}-api`;try{await F.describeRepositories({repositoryNames:[x]}),K.succeed(`ECR repository exists: ${x}`)}catch(E){if(E.code==="RepositoryNotFoundException"||E.message?.includes("RepositoryNotFoundException"))K.text=`Creating ECR repository: ${x}...`,await F.createRepository({repositoryName:x,imageScanningConfiguration:{scanOnPush:!0},imageTagMutability:"MUTABLE"}),K.succeed(`ECR repository created: ${x}`);else throw E}}catch(Y){if(K.fail("ECR repository check failed"),V)$.debug(`ECR repository error: ${Y.message}`);throw Y}let w=S("Authenticating to ECR...");w.start();try{let{ECRClient:Y}=await import("@stacksjs/ts-cloud"),E=(await new Y(Q).getAuthorizationToken()).authorizationData?.[0];if(!E?.authorizationToken)throw Error("No authorization token received from ECR");let M=Buffer.from(E.authorizationToken,"base64").toString("utf-8"),O=M.indexOf(":");if(O===-1)throw Error("ECR authorization token has unexpected format (missing colon separator)");let L=M.slice(O+1),j=Bun.spawnSync(["docker","login","--username","AWS","--password-stdin",`${z}.dkr.ecr.${Q}.amazonaws.com`],{stdin:new TextEncoder().encode(L),stdout:"pipe",stderr:"pipe"});if(j.exitCode!==0){let P=new TextDecoder().decode(j.stderr);throw Error(`Docker login failed: ${P}`)}w.succeed("Authenticated to ECR")}catch(Y){if(w.fail("ECR authentication failed"),V)$.debug(`ECR auth error: ${Y.message}`);throw Y}console.log("");let I=S("Pushing image to ECR...");I.start();try{let{exec:Y}=await import("child_process"),{promisify:F}=await import("util"),x=F(Y),E=`docker push ${A}`;await x(E,{env:T.env}),I.succeed(`Image pushed: ${A}`)}catch(Y){if(I.fail("Docker push failed"),V)$.debug(`Push error: ${Y.message}`);throw Y}console.log(""),console.log("Container image ready in ECR. CloudFormation will use this image."),console.log("")}else console.log(""),console.log("Server deployment mode detected"),console.log("Deploying EC2 infrastructure via CloudFormation..."),console.log("");async function y(z){try{let{STSClient:q}=await import("@stacksjs/ts-cloud"),K=(await new q(z).getCallerIdentity()).Account||T.env.AWS_ACCOUNT_ID||"";if(V)$.debug(`Retrieved AWS Account ID: ${K||"(empty)"}`);return K}catch(q){if(V)$.debug(`Failed to get AWS Account ID: ${q.message}`);return T.env.AWS_ACCOUNT_ID||""}}try{let z=await import(X.projectPath("cloud/deploy-script"));if(typeof z.beforeDeploy==="function")await z.beforeDeploy({environment:H,region:Q})}catch(z){if(z.code==="ERR_MODULE_NOT_FOUND"||z.code==="MODULE_NOT_FOUND"){if(V)$.debug("No beforeDeploy hook found (cloud/deploy-script not found)")}else if(console.warn(`\u26A0 beforeDeploy hook failed: ${z.message}`),V)$.debug(`beforeDeploy error stack: ${z.stack}`)}await J({environment:H,region:Q,waitForCompletion:!0,verbose:V});try{let z=await import(X.projectPath("cloud/deploy-script"));if(typeof z.afterDeploy==="function"){let{CloudFormationClient:q}=await import("@stacksjs/ts-cloud"),A=new q(Q),W=`${G}-cloud`,K={};try{K=await A.getStackOutputs(W)}catch(w){if(V)$.debug(`Failed to get stack outputs: ${w instanceof Error?w.message:String(w)}`)}await z.afterDeploy({environment:H,region:Q,outputs:K})}}catch(z){if(z.code==="ERR_MODULE_NOT_FOUND"||z.code==="MODULE_NOT_FOUND"){if(V)$.debug("No afterDeploy hook found (cloud/deploy-script not found)")}else if(console.warn(`\u26A0 afterDeploy hook failed: ${z.message}`),V)$.debug(`afterDeploy error stack: ${z.stack}`)}let c=S("Running database migrations...");c.start();try{let{generateMigrations:z,runDatabaseMigration:q}=await import("@stacksjs/database");await z(),await q(),c.succeed("Database migrations completed")}catch(z){if(c.stop(),console.log(`\u26A0 Database migrations skipped: ${z.message}`),V)$.debug(`Migration error: ${z.stack}`)}let k=S("Ensuring framework tables (auth, notifications, RBAC)...");k.start();try{let{migrateAuthTables:z,migrateNotificationTables:q,migrateRbacTables:A}=await import("@stacksjs/database"),W=[],K=[["auth",z],["notification",q],["RBAC",A]];for(let[w,I]of K){let Y=await I({verbose:V});if(!Y.success)W.push(`${w}: ${Y.error}`)}if(W.length>0)k.stop(),console.log(`\u26A0 Some framework tables could not be migrated: ${W.join("; ")}`);else k.succeed("Framework tables ensured (auth, notifications, RBAC)")}catch(z){if(k.stop(),console.log(`\u26A0 Framework table migrations skipped: ${z.message}`),V)$.debug(`Framework table migration error: ${z.stack}`)}if(b==="server"){let z=S("Retrieving server instance details...");z.start();try{let{CloudFormationClient:W}=await import("@stacksjs/ts-cloud"),K=new W(Q),w=`${G}-cloud`,I=await K.getStackOutputs(w);z.succeed("Server instances deployed"),console.log(""),console.log("Server instances:");for(let[Y,F]of Object.entries(I)){if(Y.endsWith("PublicIp"))console.log(` ${Y}: ${F}`);if(Y.endsWith("InstanceId"))console.log(` ${Y}: ${F}`)}console.log("")}catch(W){if(z.stop(),console.log(`\u26A0 Could not retrieve server details: ${W.message}`),V)$.debug(`Output retrieval error: ${W.stack}`)}let q=S("Deploying API server to EC2...");q.start();try{let{S3Client:W,CloudFormationClient:K,AWSClient:w}=await import("@stacksjs/ts-cloud"),{readFileSync:I,existsSync:Y}=await import("fs"),{resolve:F}=await import("path"),x=new W(Q),E=new K(Q),M=new w,O=`${G}-cloud`,L=await E.getStackOutputs(O),j=L.FrontendBucketName,P=Number(OJ.ports?.api||3008),C;for(let[g,v]of Object.entries(L))if(g.endsWith("InstanceId")&&typeof v==="string"){C=v;break}let f;if(C){let{EC2Client:g}=await import("@stacksjs/ts-cloud"),v=new g(Q);f=(await v.describeInstances({Filters:[{Name:"instance-id",Values:[C]}]}))?.Reservations?.[0]?.Instances?.[0]?.SecurityGroups?.[0]?.GroupId,await CJ(v,f,P)}if(!C||!j){if(q.stop(),!C)console.log("\u26A0 No EC2 instance found in stack outputs, skipping server deploy");if(!j)console.log("\u26A0 No S3 bucket found for staging server artifacts")}else{let g=L.publicCloudFrontDistributionId||L.CloudFrontDistributionId;await kJ(M,g,P);let v=F(X.projectPath("node_modules/@stacksjs/ts-cloud/dist/index.js"));if(Y(v)){let R=I(v);if(await a(()=>x.putObject({bucket:j,key:"_deploy/ts-cloud-dist.js",body:R,contentType:"application/javascript"}),"upload ts-cloud dist"),V)$.debug(" Uploaded ts-cloud dist to S3")}let m=`import { Database } from "bun:sqlite";
13
13
  import { SESClient } from "./ts-cloud-dist.js";
14
14
 
package/dist/dev/api.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{qb as K}from"../chunk-v0hqskdk.js";import{existsSync as L}from"fs";import N from"process";import{parseOptions as Q}from"@stacksjs/cli";import{config as T,overridesReady as U}from"@stacksjs/config";import{path as V}from"@stacksjs/path";import{route as X}from"@stacksjs/router";import{generateAutoImportFiles as W,injectGlobalAutoImports as F}from"@stacksjs/server";var x=Q();await U;var $=Number(N.env.PORT_API)||T.ports?.api||3008,R=V.storagePath("framework/auto-imports/models.ts");if(!L(R))await W();await F();try{let z=V.appPath("Lib/typesense-dev.ts");if(L(z)){let B=await import(z);if(typeof B.ensureTypesenseRunning==="function")await B.ensureTypesenseRunning()}}catch(z){let{log:B}=await import("@stacksjs/cli");B.warn(`[api:dev] search engine bootstrap skipped: ${z.message}`)}try{let z=V.appPath("Listener.ts");if(L(z)){let B=await import(z);if(typeof B.handleEvents==="function")await B.handleEvents()}}catch(z){let{log:B}=await import("@stacksjs/cli");B.warn(`[api:dev] failed to bootstrap event listeners \u2014 dispatched events will be ignored: ${z.message}`)}try{let{startModelMigrationWatcher:z}=await import("./migrate-watcher.js");z()}catch(z){let{log:B}=await import("@stacksjs/cli");B.debug(`[api:dev] auto-migrate watcher not started: ${z.message}`)}function _(){let z=V.frameworkPath("defaults/app/Middleware/Cors.ts");if(L(z))return z;try{return`${Bun.resolveSync("@stacksjs/defaults/package.json",N.cwd()).replace(/package\.json$/,"")}app/Middleware/Cors.ts`}catch{return z}}var w=await import(_()),A=w.default;X.use(A.toRouterHandler());var E=/^[a-zA-Z0-9._-]{8,128}$/;X.use(async(z,B)=>{let Y=z?.headers?.get?.("x-request-id")||z?.headers?.get?.("X-Request-ID")||"",Z=typeof Y==="string"&&E.test(Y)?Y:crypto.randomUUID();z._requestId=Z,z._startNs=N.hrtime.bigint();let H=await B();if(H&&H.status===404&&(H.headers.get("content-type")||"").includes("json"))try{let J=await H.clone().json();if(J&&(J.message==="Not Found"||J.error==="Not Found")){let G=new URL(z.url),O={...J,path:G.pathname,method:z.method,request_id:Z},C=new Headers(H.headers);return C.set("X-Request-ID",Z),new Response(JSON.stringify(O),{status:404,headers:C})}}catch{}return H});await X.importRoutes();try{await X.serve({port:$,hostname:"127.0.0.1"}),console.log(`
2
+ import{Lb as K}from"../chunk-h3d81wrg.js";import{existsSync as L}from"fs";import N from"process";import{parseOptions as Q}from"@stacksjs/cli";import{config as T,overridesReady as U}from"@stacksjs/config";import{path as V}from"@stacksjs/path";import{route as X}from"@stacksjs/router";import{generateAutoImportFiles as W,injectGlobalAutoImports as F}from"@stacksjs/server";var x=Q();await U;var $=Number(N.env.PORT_API)||T.ports?.api||3008,R=V.storagePath("framework/auto-imports/models.ts");if(!L(R))await W();await F();try{let z=V.appPath("Lib/typesense-dev.ts");if(L(z)){let B=await import(z);if(typeof B.ensureTypesenseRunning==="function")await B.ensureTypesenseRunning()}}catch(z){let{log:B}=await import("@stacksjs/cli");B.warn(`[api:dev] search engine bootstrap skipped: ${z.message}`)}try{let z=V.appPath("Listener.ts");if(L(z)){let B=await import(z);if(typeof B.handleEvents==="function")await B.handleEvents()}}catch(z){let{log:B}=await import("@stacksjs/cli");B.warn(`[api:dev] failed to bootstrap event listeners \u2014 dispatched events will be ignored: ${z.message}`)}try{let{startModelMigrationWatcher:z}=await import("./migrate-watcher.js");z()}catch(z){let{log:B}=await import("@stacksjs/cli");B.debug(`[api:dev] auto-migrate watcher not started: ${z.message}`)}function _(){let z=V.frameworkPath("defaults/app/Middleware/Cors.ts");if(L(z))return z;try{return`${Bun.resolveSync("@stacksjs/defaults/package.json",N.cwd()).replace(/package\.json$/,"")}app/Middleware/Cors.ts`}catch{return z}}var w=await import(_()),A=w.default;X.use(A.toRouterHandler());var E=/^[a-zA-Z0-9._-]{8,128}$/;X.use(async(z,B)=>{let Y=z?.headers?.get?.("x-request-id")||z?.headers?.get?.("X-Request-ID")||"",Z=typeof Y==="string"&&E.test(Y)?Y:crypto.randomUUID();z._requestId=Z,z._startNs=N.hrtime.bigint();let H=await B();if(H&&H.status===404&&(H.headers.get("content-type")||"").includes("json"))try{let J=await H.clone().json();if(J&&(J.message==="Not Found"||J.error==="Not Found")){let G=new URL(z.url),O={...J,path:G.pathname,method:z.method,request_id:Z},C=new Headers(H.headers);return C.set("X-Request-ID",Z),new Response(JSON.stringify(O),{status:404,headers:C})}}catch{}return H});await X.importRoutes();try{await X.serve({port:$,hostname:"127.0.0.1"}),console.log(`
3
3
  \u279C API server ready: http://localhost:${$}
4
4
  `)}catch(z){if((z?.code||z?.errno)==="EADDRINUSE"||String(z?.message||"").includes("EADDRINUSE"))console.error(`
5
5
  [dev/api] Port ${$} is already in use. Kill the other process and re-run \`./buddy dev\`, or set PORT_API to another port.
@@ -1,3 +1,3 @@
1
1
  // @bun
2
- import"../chunk-v0hqskdk.js";import{existsSync as $,readdirSync as U,statSync as k}from"fs";import{join as V}from"path";import w from"process";import{projectPath as W,storagePath as D}from"@stacksjs/path";var H=[D("framework/defaults/resources/functions/dashboard"),W("resources/functions"),W("app/Helpers")];async function F(q={}){let B=globalThis,C=[],G=0;for(let J of H){if(!$(J))continue;let K;try{K=U(J)}catch{continue}for(let A of K){let z=V(J,A),M;try{M=k(z)}catch{continue}if(M.isDirectory()){let O;try{O=U(z)}catch{continue}for(let Q of O){if(!X(Q))continue;let Z=V(z,Q),T=await Y(Z,B,q.verbose);G+=T.added,C.push(...T.collisions)}continue}if(!X(A))continue;let N=await Y(z,B,q.verbose);G+=N.added,C.push(...N.collisions)}}if(q.verbose)w.stdout.write(`[dashboard] hoisted ${G} helper globals`+(C.length>0?` (skipped ${C.length} collisions: ${C.slice(0,5).join(", ")}\u2026)`:"")+`
2
+ import"../chunk-h3d81wrg.js";import{existsSync as $,readdirSync as U,statSync as k}from"fs";import{join as V}from"path";import w from"process";import{projectPath as W,storagePath as D}from"@stacksjs/path";var H=[D("framework/defaults/resources/functions/dashboard"),W("resources/functions"),W("app/Helpers")];async function F(q={}){let B=globalThis,C=[],G=0;for(let J of H){if(!$(J))continue;let K;try{K=U(J)}catch{continue}for(let A of K){let z=V(J,A),M;try{M=k(z)}catch{continue}if(M.isDirectory()){let O;try{O=U(z)}catch{continue}for(let Q of O){if(!X(Q))continue;let Z=V(z,Q),T=await Y(Z,B,q.verbose);G+=T.added,C.push(...T.collisions)}continue}if(!X(A))continue;let N=await Y(z,B,q.verbose);G+=N.added,C.push(...N.collisions)}}if(q.verbose)w.stdout.write(`[dashboard] hoisted ${G} helper globals`+(C.length>0?` (skipped ${C.length} collisions: ${C.slice(0,5).join(", ")}\u2026)`:"")+`
3
3
  `)}function X(q){if(!/\.(?:ts|tsx|js|mjs)$/.test(q))return!1;if(q.startsWith("_"))return!1;if(q.endsWith(".test.ts")||q.endsWith(".spec.ts"))return!1;if(q.endsWith(".d.ts"))return!1;return!0}async function Y(q,B,C){let G;try{G=await import(q)}catch{return{added:0,collisions:[]}}let J=[],K=0;for(let[A,z]of Object.entries(G)){if(A==="default"||A.startsWith("_"))continue;if(typeof z==="function"||z&&typeof z==="object"){if(B[A]===void 0)B[A]=z,K++;else if(B[A]!==z)J.push(A)}}return{added:K,collisions:J}}export{F as hoistDashboardGlobals};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{Aa as h,Ba as i,Ca as j,Da as k,Ea as l,Fa as m,ta as a,ua as b,va as c,wa as d,xa as e,ya as f,za as g}from"../chunk-k7n6c9hm.js";import"../chunk-v0hqskdk.js";export{k as waitForServer,f as scanModelsDir,d as modelNameToId,i as isPortAvailable,a as iconMap,e as getModelIcon,j as findAvailablePort,b as excludeModels,g as discoverModels,c as dedicatedPages,l as buildSidebarConfig,h as buildManifest,m as buildDashboardUrl};
2
+ import{$a as e,Xa as a,Ya as b,Za as c,_a as d,ab as f,bb as g,cb as h,db as i,eb as j,fb as k,gb as l,hb as m}from"../chunk-ec4gky40.js";import"../chunk-h3d81wrg.js";export{k as waitForServer,f as scanModelsDir,d as modelNameToId,i as isPortAvailable,a as iconMap,e as getModelIcon,j as findAvailablePort,b as excludeModels,g as discoverModels,c as dedicatedPages,l as buildSidebarConfig,h as buildManifest,m as buildDashboardUrl};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Aa as u,Ca as b,Da as n,za as m}from"../chunk-k7n6c9hm.js";import{qb as A}from"../chunk-v0hqskdk.js";import $ from"process";import{existsSync as j,readFileSync as o,writeFileSync as c}from"fs";import{bold as B,cyan as x,dim as Y,green as k}from"@stacksjs/cli";import{projectPath as T,storagePath as D}from"@stacksjs/path";var p=$.argv.indexOf("--verbose"),F=p!==-1&&$.argv[p+1]!=="false",s=Bun.nanoseconds(),i=console.log,e=console.warn,P=[];console.log=(...X)=>{P.push(X.map(String).join(" "))};console.warn=(...X)=>{P.push(X.map(String).join(" "))};var g=D("framework/defaults/views/dashboard"),EE=T("resources/views/dashboard"),h=Number($.env.PORT_ADMIN)||3002,V=await b(h),S=$.env.APP_URL||"",XE=S!==""&&S!=="localhost"&&!S.includes("localhost:"),y=XE?S.replace(/^https?:\/\//,""):null,C=y?`dashboard.${y}`:null,l=`${$.env.HOME}/.stacks/ssl`;function d(){console.log=i,console.warn=(...X)=>{let O=X.map(String).join(" ");if(O.includes("[STX] DOM API violation")||O.includes("unsafe expression"))return;e(...X)}}async function YE(){try{await import("@stacksjs/orm")}catch(E){if(F)console.warn("[dashboard] orm preload failed:",E?.message||E)}try{let{hoistDashboardGlobals:E}=await import("./dashboard-globals.js");await E({verbose:F})}catch(E){if(F)console.warn("[dashboard] globals preload failed:",E?.message||E)}let X;try{X=(await import("../chunk-hv8tkjw2.js")).serve}catch{X=(await import(T("pantry/bun-plugin-stx/dist/serve.js"))).serve}let O;try{let E=$.env.STX_SRC||`${$.env.HOME}/Code/Tools/stx/packages/stx/src/index.ts`;if(await Bun.file(E).exists())O=await import(E)}catch{}if(O&&F)console.log("[Dashboard] Using local stx checkout");if(!O)try{let E=T("pantry/@stacksjs/stx/dist/index.js");if(await Bun.file(E).exists())O=await import(E)}catch{}let{listConfigFiles:G,readConfig:K,updateConfigKey:Q}=await import(D("framework/defaults/resources/functions/dashboard/config-io.ts")),N={"/__deps/charts.js":D("framework/core/charts/dist/index.js")},U={...Object.fromEntries(Object.entries(N).map(([E,z])=>[E,async()=>{let W=Bun.file(z);if(!await W.exists())return new Response(`// dependency dist missing: ${z}
2
+ import{bb as m,cb as u,eb as b,fb as n}from"../chunk-ec4gky40.js";import{Lb as A}from"../chunk-h3d81wrg.js";import $ from"process";import{existsSync as j,readFileSync as o,writeFileSync as c}from"fs";import{bold as B,cyan as x,dim as Y,green as k}from"@stacksjs/cli";import{projectPath as T,storagePath as D}from"@stacksjs/path";var p=$.argv.indexOf("--verbose"),F=p!==-1&&$.argv[p+1]!=="false",s=Bun.nanoseconds(),i=console.log,e=console.warn,P=[];console.log=(...X)=>{P.push(X.map(String).join(" "))};console.warn=(...X)=>{P.push(X.map(String).join(" "))};var g=D("framework/defaults/views/dashboard"),EE=T("resources/views/dashboard"),h=Number($.env.PORT_ADMIN)||3002,V=await b(h),S=$.env.APP_URL||"",XE=S!==""&&S!=="localhost"&&!S.includes("localhost:"),y=XE?S.replace(/^https?:\/\//,""):null,C=y?`dashboard.${y}`:null,l=`${$.env.HOME}/.stacks/ssl`;function d(){console.log=i,console.warn=(...X)=>{let O=X.map(String).join(" ");if(O.includes("[STX] DOM API violation")||O.includes("unsafe expression"))return;e(...X)}}async function YE(){try{await import("@stacksjs/orm")}catch(E){if(F)console.warn("[dashboard] orm preload failed:",E?.message||E)}try{let{hoistDashboardGlobals:E}=await import("./dashboard-globals.js");await E({verbose:F})}catch(E){if(F)console.warn("[dashboard] globals preload failed:",E?.message||E)}let X;try{X=(await import("../chunk-0g2nzhx9.js")).serve}catch{X=(await import(T("pantry/bun-plugin-stx/dist/serve.js"))).serve}let O;try{let E=$.env.STX_SRC||`${$.env.HOME}/Code/Tools/stx/packages/stx/src/index.ts`;if(await Bun.file(E).exists())O=await import(E)}catch{}if(O&&F)console.log("[Dashboard] Using local stx checkout");if(!O)try{let E=T("pantry/@stacksjs/stx/dist/index.js");if(await Bun.file(E).exists())O=await import(E)}catch{}let{listConfigFiles:G,readConfig:K,updateConfigKey:Q}=await import(D("framework/defaults/resources/functions/dashboard/config-io.ts")),N={"/__deps/charts.js":D("framework/core/charts/dist/index.js")},U={...Object.fromEntries(Object.entries(N).map(([E,z])=>[E,async()=>{let W=Bun.file(z);if(!await W.exists())return new Response(`// dependency dist missing: ${z}
3
3
  // rebuild with: cd ${z.replace(/\/dist\/[^/]+$/,"")} && bun build.ts`,{status:500,headers:{"content-type":"text/javascript; charset=utf-8"}});return new Response(W,{headers:{"content-type":"text/javascript; charset=utf-8","cache-control":"no-cache"}})}])),"/api/config/list":async()=>{try{return Response.json({ok:!0,files:G()})}catch(E){return Response.json({ok:!1,error:E?.message},{status:500})}},"/api/config/read":async(E)=>{try{let W=new URL(E.url).searchParams.get("name")||"";if(!/^[\w-]+$/.test(W))return Response.json({ok:!1,error:"Invalid config name"},{status:400});let Z=await K(W);if(!Z)return Response.json({ok:!1,error:"Not found"},{status:404});return Response.json({ok:!0,name:W,fields:Z.fields,values:Z.values})}catch(z){return Response.json({ok:!1,error:z?.message},{status:500})}},"/api/config/source":async(E)=>{try{let W=new URL(E.url).searchParams.get("name")||"";if(!/^[\w-]+$/.test(W))return Response.json({ok:!1,error:"Invalid config name"},{status:400});let Z=await K(W);if(!Z)return Response.json({ok:!1,error:"Not found"},{status:404});return new Response(Z.source,{headers:{"content-type":"text/plain; charset=utf-8"}})}catch(z){return Response.json({ok:!1,error:z?.message},{status:500})}},"/api/config/update":async(E)=>{if(E.method!=="POST")return Response.json({ok:!1,error:"Method not allowed"},{status:405});try{let z=await E.json(),W=z.file?.replace(/\.ts$/,"");if(!W||!/^[\w-]+$/.test(W))return Response.json({ok:!1,error:"Invalid file"},{status:400});let Z=[];if(Array.isArray(z.updates))for(let _ of z.updates){let I=_.key??_.path;if(typeof I==="string")Z.push({key:I,value:_.value})}else if(z.key)Z.push({key:z.key,value:z.value});if(Z.length===0)return Response.json({ok:!1,error:"No updates supplied"},{status:400});let R=[];for(let _ of Z)try{let I=await Q(W,_.key,H(_.value));R.push({key:_.key,ok:!0,newValue:I.newValue})}catch(I){R.push({key:_.key,ok:!1,error:I?.message})}let a=R.every((_)=>_.ok);return Response.json({ok:a,file:W,results:R})}catch(z){return Response.json({ok:!1,error:z?.message},{status:500})}}};function H(E){if(typeof E==="boolean"||typeof E==="number")return E;if(E==="true")return!0;if(E==="false")return!1;if(E===""||E==null)return"";if(typeof E==="string"&&/^-?\d+(?:\.\d+)?$/.test(E))return Number(E);return String(E)}let L=null;try{let E=await import("@stacksjs/router"),z=(await import(T("app/Routes.ts"))).default;await E.loadRoutes(z),L=E.route}catch(E){if(F)console.warn("[dashboard] Stacks router init failed:",E?.message||E)}X({patterns:[EE,g],port:V,componentsDir:D("framework/defaults/resources/components/Dashboard"),layoutsDir:g,partialsDir:g,quiet:!0,routes:U,onRequest:L?async(E)=>{let W=new URL(E.url).pathname;if(W.startsWith("/api/config/")||W.startsWith("/__deps/"))return null;if(W.startsWith("/api/"))return L.handleRequest(E);if(E.method.toUpperCase()!=="GET")return L.handleRequest(E);return null}:void 0,auth:!1,...O&&{stxModule:O}}).catch((E)=>{d(),console.error(`
4
4
  Failed to start dashboard server: ${E?.message||E}
5
5
  `),$.exit(1)})}async function $E(){if(!C)return!1;if($.env.STACKS_PROXY_MANAGED)return!1;try{let{startProxies:X}=await import("@stacksjs/rpx");return await X({proxies:[{from:`localhost:${V}`,to:C,cleanUrls:!1}],https:{basePath:l,validityDays:825},regenerateUntrustedCerts:!1,verbose:F}),!0}catch(X){if(F)i(` ${Y(`Proxy: ${X}`)}`);return!1}}var zE=V+1;function J(X,O=200,G={}){return new Response(JSON.stringify(X),{status:O,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type",...G}})}function GE(){Bun.serve({port:zE,fetch:async(X)=>{if(X.method==="OPTIONS")return new Response(null,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"}});if(new URL(X.url).pathname==="/api/config/update"&&X.method==="POST")try{let{file:G,updates:K}=await X.json();if(!G||G.includes("..")||!G.match(/^[\w.-]+\.ts$/))return J({error:"Invalid file name"},400);let Q=T(`config/${G}`),N=o(Q,"utf-8");for(let{path:U,value:H}of K){let w=U.split(".").pop().replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),E=new RegExp(`(${w}\\s*:\\s*)(?:'[^']*'|"[^"]*"|\\d+(?:\\.\\d+)?|true|false)`);if(E.test(N)){let z=/^\d+(?:\.\d+)?$/.test(H),W=H==="true"||H==="false",Z=H.replace(/'/g,"\\'").replace(/\$/g,"$$$$"),R=z||W?H:`'${Z}'`;N=N.replace(E,`$1${R}`)}}return c(Q,N,"utf-8"),J({success:!0})}catch(G){return J({error:G.message},500)}return J({error:"Not found"},404)}})}GE();var[,t]=await Promise.all([YE(),m(T("app/Models"),D("framework/defaults/app/Models"))]);async function OE(){let X={library:!0,content:!0,commerce:!0,marketing:!0,analytics:!0,management:!0,utilities:!0,ci:!1,data:{dashboard:!0,activity:!0,users:!0,teams:!0,subscribers:!0,allModels:!0}};try{let O=await import(T("config/dashboard.ts")),G=O.default?.sections??{},K=G.data??{};return{library:G.library?.enabled??!0,content:G.content?.enabled??!0,commerce:G.commerce?.enabled??!0,marketing:G.marketing?.enabled??!0,analytics:G.analytics?.enabled??!0,management:G.management?.enabled??!0,utilities:G.utilities?.enabled??!0,ci:O.default?.ci?.enabled??!1,data:{dashboard:K.dashboard?.enabled??!0,activity:K.activity?.enabled??!0,users:K.users?.enabled??!0,teams:K.teams?.enabled??!0,subscribers:K.subscribers?.enabled??!0,allModels:K.allModels?.enabled??!0}}}catch{return X}}var WE=await OE(),KE=D("framework/defaults/views/dashboard/.discovered-models.json"),ZE={models:u(t),sections:WE};c(KE,JSON.stringify(ZE,null,2));var NE=await n(V);d();var HE=!1;$E().then((X)=>{HE=X}).catch((X)=>{if(F)console.warn("[Dashboard] Reverse proxy failed:",X)});var v=C?`https://${C}`:null,q=`http://localhost:${V}`,r=`http://localhost:${V}/`,_E=(Bun.nanoseconds()-s)/1e6;console.log();console.log(` ${B(x("stacks dashboard"))}`);console.log();if(v)console.log(` ${k("\u279C")} ${B("Local")}: ${x(v)}`),console.log(` ${Y("\u279C")} ${Y("Origin")}: ${Y(q)}`);else console.log(` ${k("\u279C")} ${B("Local")}: ${x(q)}`);console.log(` ${k("\u279C")} ${B("Window")}: ${Y("Stacks Dashboard")} ${Y("1400\xD7900")}`);console.log(` ${k("\u279C")} ${B("Models")}: ${Y(`${t.length} discovered`)}`);if(V!==h)console.log(` ${Y("\u279C")} ${Y(`Port ${h} in use, using ${V}`)}`);if(!NE)console.log(` ${Y("\u26A0")} ${Y("Dev server may not be ready yet")}`);console.log();console.log(` ${Y(`ready in ${_E.toFixed(0)} ms`)}`);if(F){if(console.log(),console.log(` ${Y("\u279C")} ${Y("Sidebar")}: ${Y(`${sidebarConfig.sections.length} sections, 240px`)}`),console.log(` ${Y("\u279C")} ${Y("URL")}: ${Y(r)}`),C)console.log(` ${Y("\u279C")} ${Y("SSL")}: ${Y(l)}`),console.log(` ${Y("\u279C")} ${Y("Proxy")}: ${Y(`localhost:${V} \u2192 ${C}`)}`);if(P.length>0){console.log();for(let X of P)console.log(` ${Y(X)}`)}}console.log();var M,f=$.env.HOME?`${$.env.HOME}/Code/Tools/craft/packages/typescript/src/index.ts`:void 0;if(f&&j(f))try{({createApp:M}=await import(f))}catch{}if(!M){let X=["craft-native","@craft-native/craft","@stacksjs/ts-craft"];for(let O of X)try{if({createApp:M}=await import(O),M)break}catch{}}if(M){let X=T("resources/assets/images/app-icon.png"),O=D("framework/defaults/resources/assets/images/app-icon.png"),G=await Bun.file(X).exists()?X:await Bun.file(O).exists()?O:void 0,K=(()=>{let N=$.env.CRAFT_BIN;if(N)return j(N)?N:void 0;let U=`${$.env.HOME}/Code/Tools/craft/craft`;if(j(U))return U;let H=`${$.env.HOME}/Code/Tools/craft/bin/craft`;if(j(H))return H;let L=`${$.env.HOME}/Code/Tools/craft/packages/zig/zig-out/bin/craft`;if(j(L))return L;let w=`${$.env.HOME}/Documents/Projects/craft/packages/zig/zig-out/bin/craft`;if(j(w))return w;return})();if(!K)M=void 0;if(!M)console.log(` ${Y("Native window unavailable. Set CRAFT_BIN to a craft binary, or open the URL above in a browser.")}
package/dist/dev/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{Ga as a,Ha as b,Ia as c,Ja as d,Ka as e,La as f,Ma as g,Na as h,Oa as i}from"../chunk-73y0wp0s.js";import"../chunk-s735m9mg.js";import"../chunk-8kvzjd10.js";import"../chunk-v0hqskdk.js";export{g as runSystemTrayDevServer,b as runFrontendDevServer,i as runDocsDevServer,a as runDevServer,h as runDesktopDevServer,f as runDashboardDevServer,e as runComponentsDevServer,c as runBackendDevServer,d as runApiDevServer};
2
+ import{ib as a,jb as b,kb as c,lb as d,mb as e,nb as f,ob as g,pb as h,qb as i}from"../chunk-62gdfav8.js";import"../chunk-s735m9mg.js";import"../chunk-0gadhvn7.js";import"../chunk-h3d81wrg.js";export{g as runSystemTrayDevServer,b as runFrontendDevServer,i as runDocsDevServer,a as runDevServer,h as runDesktopDevServer,f as runDashboardDevServer,e as runComponentsDevServer,c as runBackendDevServer,d as runApiDevServer};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{qb as R}from"../chunk-v0hqskdk.js";import{existsSync as T,watch as U}from"fs";import V from"process";import{log as E}from"@stacksjs/logging";import{path as N}from"@stacksjs/path";var F,J=!1,K=!1;function _(){if(["0","false","off"].includes(String(V.env.STACKS_DEV_AUTO_MIGRATE).toLowerCase()))return;let A=[N.userModelsPath(""),N.storagePath("framework/models")].filter((z)=>{try{return T(z)}catch{return!1}});if(A.length===0)return;let I=(z)=>{if(z&&!z.endsWith(".ts"))return;if(F)clearTimeout(F);F=setTimeout(()=>void O(),400)},G=0;for(let z of A)try{U(z,{recursive:!0},(B,H)=>I(H)),G+=1}catch(B){E.debug(`[dev] model watch failed for ${z}: ${B instanceof Error?B.message:String(B)}`)}if(G>0)E.debug("[dev] auto-migrate watcher active \u2014 model edits will sync the database")}async function O(){if(J){K=!0;return}J=!0;try{let{previewPendingMigrations:A,generateMigrations:I,runDatabaseMigration:G}=await import("@stacksjs/database"),z=await A();if(z.length===0)return;let B=z.filter((Q)=>Q.destructive);if(B.length>0){E.warn(`[dev] ${B.length} destructive schema change${B.length===1?"":"s"} detected \u2014 not auto-applied. Run \`buddy migrate\` to review and apply.`);return}E.info(`[dev] Syncing database to models (${z.length} change${z.length===1?"":"s"})...`);let H=await I();if(H.isErr){E.error("[dev] auto-migrate: generation failed",H.error);return}let L=await G();if(L.isErr){E.error("[dev] auto-migrate: apply failed",L.error);return}E.success("[dev] Database is in sync with your models.")}catch(A){E.warn(`[dev] auto-migrate skipped: ${A instanceof Error?A.message:String(A)}`)}finally{if(J=!1,K){if(K=!1,F)clearTimeout(F);F=setTimeout(()=>void O(),400)}}}export{_ as startModelMigrationWatcher};
2
+ import{Lb as R}from"../chunk-h3d81wrg.js";import{existsSync as T,watch as U}from"fs";import V from"process";import{log as E}from"@stacksjs/logging";import{path as N}from"@stacksjs/path";var F,J=!1,K=!1;function _(){if(["0","false","off"].includes(String(V.env.STACKS_DEV_AUTO_MIGRATE).toLowerCase()))return;let A=[N.userModelsPath(""),N.storagePath("framework/models")].filter((z)=>{try{return T(z)}catch{return!1}});if(A.length===0)return;let I=(z)=>{if(z&&!z.endsWith(".ts"))return;if(F)clearTimeout(F);F=setTimeout(()=>void O(),400)},G=0;for(let z of A)try{U(z,{recursive:!0},(B,H)=>I(H)),G+=1}catch(B){E.debug(`[dev] model watch failed for ${z}: ${B instanceof Error?B.message:String(B)}`)}if(G>0)E.debug("[dev] auto-migrate watcher active \u2014 model edits will sync the database")}async function O(){if(J){K=!0;return}J=!0;try{let{previewPendingMigrations:A,generateMigrations:I,runDatabaseMigration:G}=await import("@stacksjs/database"),z=await A();if(z.length===0)return;let B=z.filter((Q)=>Q.destructive);if(B.length>0){E.warn(`[dev] ${B.length} destructive schema change${B.length===1?"":"s"} detected \u2014 not auto-applied. Run \`buddy migrate\` to review and apply.`);return}E.info(`[dev] Syncing database to models (${z.length} change${z.length===1?"":"s"})...`);let H=await I();if(H.isErr){E.error("[dev] auto-migrate: generation failed",H.error);return}let L=await G();if(L.isErr){E.error("[dev] auto-migrate: apply failed",L.error);return}E.success("[dev] Database is in sync with your models.")}catch(A){E.warn(`[dev] auto-migrate skipped: ${A instanceof Error?A.message:String(A)}`)}finally{if(J=!1,K){if(K=!1,F)clearTimeout(F);F=setTimeout(()=>void O(),400)}}}export{_ as startModelMigrationWatcher};
package/dist/dev/views.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{qb as O}from"../chunk-v0hqskdk.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-hv8tkjw2.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{}}
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,2 +1,2 @@
1
1
  // @bun
2
- import{sa as a}from"./chunk-ay41a7jn.js";import"./chunk-v0hqskdk.js";export{a as discoverPackages};
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};
package/dist/examples.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import"./chunk-v0hqskdk.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};
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,3 +1,3 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{la as d}from"../chunk-w4erevzw.js";import"../chunk-v0hqskdk.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.");
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,5 +1,5 @@
1
1
  // @bun
2
- import"../chunk-v0hqskdk.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=`
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=`
3
3
  // This file is auto-generated by Stacks. Do not edit this file manually.
4
4
  // If you want to change the environment variables, please edit the .env file.
5
5
  //
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{cb as q,db as x}from"../chunk-h10aj7jf.js";import"../chunk-wtnp31q5.js";import"../chunk-v0hqskdk.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.");
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,2 +1,2 @@
1
1
  // @bun
2
- import{$a as k,Ra as a,Sa as b,Ta as c,Ua as d,Va as e,Wa as f,Xa as g,Ya as h,Za as i,_a as j,ab as l,bb as m}from"../chunk-dxvgx0r7.js";import"../chunk-h10aj7jf.js";import"../chunk-wtnp31q5.js";import"../chunk-s735m9mg.js";import"../chunk-8kvzjd10.js";import"../chunk-v0hqskdk.js";export{i as watchTypes,a as invoke,d as generateWebTypes,e as generateVsCodeCustomData,h as generateTypes,k as generateSeeder,j as generatePantryConfig,m as generateOpenApiSpec,c as generateLibEntries,f as generateIdeHelpers,l as generateCoreSymlink,g as generateComponentMeta,b as generate};
2
+ import{Ab as j,Bb as k,Cb as l,Db as m,rb as a,sb as b,tb as c,ub as d,vb as e,wb as f,xb as g,yb as h,zb as i}from"../chunk-78c5n3s2.js";import"../chunk-tpb8jgsk.js";import"../chunk-tsbk5vne.js";import"../chunk-s735m9mg.js";import"../chunk-0gadhvn7.js";import"../chunk-h3d81wrg.js";export{i as watchTypes,a as invoke,d as generateWebTypes,e as generateVsCodeCustomData,h as generateTypes,k as generateSeeder,j as generatePantryConfig,m as generateOpenApiSpec,c as generateLibEntries,f as generateIdeHelpers,l as generateCoreSymlink,g as generateComponentMeta,b as generate};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{na as i}from"../chunk-8maaf0ze.js";import"../chunk-wtnp31q5.js";import"../chunk-v0hqskdk.js";import{library as o}from"@stacksjs/config";import{log as n}from"@stacksjs/logging";import{hasComponents as e,hasFunctions as t}from"@stacksjs/storage";async function r(){if(n.info("Generating library entry points..."),o.releaseable&&e())await i("web-components");else n.info("No components found. Skipping building component entry points.");if(o.releaseable&&t())await i("functions");else n.info("No functions found. Skipping building function entry point.")}await r();export{r as generateLibEntries};
3
+ import{Sa as i}from"../chunk-nsvnqv8y.js";import"../chunk-tsbk5vne.js";import"../chunk-h3d81wrg.js";import{library as o}from"@stacksjs/config";import{log as n}from"@stacksjs/logging";import{hasComponents as e,hasFunctions as t}from"@stacksjs/storage";async function r(){if(n.info("Generating library entry points..."),o.releaseable&&e())await i("web-components");else n.info("No components found. Skipping building component entry points.");if(o.releaseable&&t())await i("functions");else n.info("No functions found. Skipping building function entry point.")}await r();export{r as generateLibEntries};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{cb as x}from"../chunk-h10aj7jf.js";import"../chunk-wtnp31q5.js";import"../chunk-v0hqskdk.js";import{log as q}from"@stacksjs/logging";import{hasComponents as z}from"@stacksjs/storage";q.info("Generating VS Code custom data...");if(z())await x();else q.info("No components found. Skipping VS Code custom data generation.");q.success("Generated VS Code custom data.");
3
+ import{Eb as x}from"../chunk-tpb8jgsk.js";import"../chunk-tsbk5vne.js";import"../chunk-h3d81wrg.js";import{log as q}from"@stacksjs/logging";import{hasComponents as z}from"@stacksjs/storage";q.info("Generating VS Code custom data...");if(z())await x();else q.info("No components found. Skipping VS Code custom data generation.");q.success("Generated VS Code custom data.");
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{la as a,ma as b}from"../chunk-w4erevzw.js";import"../chunk-v0hqskdk.js";export{b as parseStxComponentMeta,a as generateComponentMeta};
2
+ import{Qa as a,Ra as b}from"../chunk-y6e448he.js";import"../chunk-h3d81wrg.js";export{b as parseStxComponentMeta,a as generateComponentMeta};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import"../chunk-s735m9mg.js";import{gb as a,hb as b,ib as c}from"../chunk-8kvzjd10.js";import"../chunk-v0hqskdk.js";export{b as runActions,a as runAction,c as hasAction};
2
+ import"../chunk-s735m9mg.js";import{Ib as a,Jb as b,Kb as c}from"../chunk-0gadhvn7.js";import"../chunk-h3d81wrg.js";export{b as runActions,a as runAction,c as hasAction};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{na as a,oa as b,pa as c,qa as d,ra as e}from"../chunk-8maaf0ze.js";import"../chunk-wtnp31q5.js";import"../chunk-v0hqskdk.js";export{a as generateLibEntry,e as generateEntryPointData,c as createWebComponentLibraryEntryPoint,b as createLibraryEntryPoint,d as createFunctionLibraryEntryPoint};
2
+ import{Sa as a,Ta as b,Ua as c,Va as d,Wa as e}from"../chunk-nsvnqv8y.js";import"../chunk-tsbk5vne.js";import"../chunk-h3d81wrg.js";export{a as generateLibEntry,e as generateEntryPointData,c as createWebComponentLibraryEntryPoint,b as createLibraryEntryPoint,d as createFunctionLibraryEntryPoint};
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{eb as q}from"../chunk-wtnp31q5.js";import"../chunk-v0hqskdk.js";import{log as G}from"@stacksjs/logging";import{packageJsonPath as I}from"@stacksjs/path";import{writeTextFile as K}from"@stacksjs/storage";async function R(v){let B,C,z,D,E,A;if(v==="web-components")B=q.webComponents?.name,C=q.webComponents?.description,z="components",D=q.webComponents?.keywords,E="web-components";else if(v==="functions")B=q.functions?.name,C=q.functions?.description,z="functions",D=q.functions?.keywords,E="functions";try{if(await K({path:I(v),data:`{
2
+ import{Gb as q}from"../chunk-tsbk5vne.js";import"../chunk-h3d81wrg.js";import{log as G}from"@stacksjs/logging";import{packageJsonPath as I}from"@stacksjs/path";import{writeTextFile as K}from"@stacksjs/storage";async function R(v){let B,C,z,D,E,A;if(v==="web-components")B=q.webComponents?.name,C=q.webComponents?.description,z="components",D=q.webComponents?.keywords,E="web-components";else if(v==="functions")B=q.functions?.name,C=q.functions?.description,z="functions",D=q.functions?.keywords,E="functions";try{if(await K({path:I(v),data:`{
3
3
  "name": "${B}",
4
4
  "type": "module",
5
5
  "version": "",
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{gb as a,hb as b,ib as c}from"../chunk-8kvzjd10.js";import"../chunk-v0hqskdk.js";export{b as runActions,a as runAction,c as hasAction};
2
+ import{Ib as a,Jb as b,Kb as c}from"../chunk-0gadhvn7.js";import"../chunk-h3d81wrg.js";export{b as runActions,a as runAction,c as hasAction};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{cb as a,db as b}from"../chunk-h10aj7jf.js";import"../chunk-wtnp31q5.js";import"../chunk-v0hqskdk.js";export{b as generateWebTypes,a as generateVsCodeCustomData};
2
+ import{Eb as a,Fb as b}from"../chunk-tpb8jgsk.js";import"../chunk-tsbk5vne.js";import"../chunk-h3d81wrg.js";export{b as generateWebTypes,a as generateVsCodeCustomData};
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import"./chunk-g6k41p49.js";import{q as na,r as oa,s as pa}from"./chunk-0wyxyqak.js";import"./chunk-cdk2r2jd.js";import{A as N,t as G,u as H,v as I,w as J,x as K,y as L,z as M}from"./chunk-t5j470r2.js";import{B as la,C as ma}from"./chunk-x0cnhg3z.js";import{D as sa}from"./chunk-gcjrdkq7.js";import{E as ta}from"./chunk-n057zfgw.js";import{$ as fa,F as O,G as P,I as Q,J as R,K as S,M as T,N as U,O as V,Q as W,R as X,S as Y,T as Z,U as _,V as $,W as aa,X as ba,Y as ca,Z as da,_ as ea,aa as ga,ba as ha,ca as ia,da as ja,ea as ka}from"./chunk-heh4x32p.js";import"./chunk-w363nwy3.js";import{ga as D,ha as E,ia as F}from"./chunk-rft5b6wr.js";import{ja as ra}from"./chunk-e87s6b8r.js";import{ka as qa}from"./chunk-acyw294f.js";import{sa as C}from"./chunk-ay41a7jn.js";import{Ga as t,Ha as u,Ia as v,Ja as w,Ka as x,La as y,Ma as z,Na as A,Oa as B}from"./chunk-73y0wp0s.js";import{Qa as s}from"./chunk-h63c1v89.js";import{$a as p,Ra as f,Sa as g,Ta as h,Ua as i,Va as j,Wa as k,Xa as l,Ya as m,Za as n,_a as o,ab as q,bb as r}from"./chunk-dxvgx0r7.js";import"./chunk-h10aj7jf.js";import"./chunk-wtnp31q5.js";import"./chunk-s735m9mg.js";import{fb as a}from"./chunk-d5mbs5zz.js";import{gb as b,hb as c,ib as d}from"./chunk-8kvzjd10.js";import{lb as e}from"./chunk-vv4nqhgg.js";import"./chunk-v0hqskdk.js";export{n as watchTypes,oa as uninstallStack,K as trustCertificate,I as sslCertificatesExist,M as setupSSL,O as setDryRun,ma as scaffoldCrud,z as runSystemTrayDevServer,Q as runMake,u as runFrontendDevServer,B as runDocsDevServer,t as runDevServer,A as runDesktopDevServer,y as runDashboardDevServer,x as runComponentsDevServer,s as runCommit,v as runBackendDevServer,w as runApiDevServer,e as runAdd,c as runActions,b as runAction,la as parseFields,ea as makeStack,ta as makeResource,ha as makeQueueTable,sa as makePolicy,_ as makePage,X as makeNotification,Z as makeMail,ca as makeLanguage,qa as makeJob,aa as makeFunction,U as makeDatabase,S as makeComponent,ra as makeCommand,ia as makeCertificate,R as makeAction,pa as listStacks,D as lintProject,E as lintFix,N as isSSLSetupComplete,P as isDryRunActive,G as isDomainInHosts,J as isCertificateTrusted,f as invoke,na as installStack,d as hasAction,i as generateWebTypes,j as generateVsCodeCustomData,m as generateTypes,p as generateSeeder,o as generatePantryConfig,r as generateOpenApiSpec,h as generateLibEntries,k as generateIdeHelpers,q as generateCoreSymlink,l as generateComponentMeta,L as generateCertificates,g as generate,F as formatProject,C as discoverPackages,$ as createPage,fa as createNotification,ja as createModel,ga as createMigration,ka as createMiddleware,Y as createMail,da as createLanguage,ba as createFunction,W as createFactory,V as createDatabase,T as createComponent,H as addDomainToHosts,a as Action};
2
+ import{$ as Q,Aa as pa,Ba as qa,Ca as ra,Da as sa,Ea as ta,T as I,U as J,V as K,W as L,X as M,Y as N,Z as O,_ as P,aa as R,ba as S,ca as T,da as U,ea as V,fa as W,ga as X,ha as Y,ia as Z,ja as _,ka as $,la as aa,ma as ba,na as ca,oa as da,pa as ea,qa as fa,ra as ga,sa as ha,ta as ia,ua as ja,va as ka,wa as la,xa as ma,ya as na,za as oa}from"./chunk-0c8sd1t6.js";import"./chunk-cdk2r2jd.js";import{Fa as A,Ga as B,Ha as C,Ia as D,Ja as E,Ka as F,La as G,Ma as H}from"./chunk-n5eqwhck.js";import{ib as r,jb as s,kb as t,lb as u,mb as v,nb as w,ob as x,pb as y,qb as z}from"./chunk-62gdfav8.js";import{Ab as n,Bb as o,Cb as p,Db as q,rb as e,sb as f,tb as g,ub as h,vb as i,wb as j,xb as k,yb as l,zb as m}from"./chunk-78c5n3s2.js";import"./chunk-tpb8jgsk.js";import"./chunk-tsbk5vne.js";import"./chunk-s735m9mg.js";import{Hb as a}from"./chunk-6bk53y02.js";import{Ib as b,Jb as c,Kb as d}from"./chunk-0gadhvn7.js";import"./chunk-h3d81wrg.js";export{m as watchTypes,oa as uninstallStack,E as trustCertificate,C as sslCertificatesExist,G as setupSSL,ja as setDryRun,ma as scaffoldCrud,x as runSystemTrayDevServer,ia as runMake,s as runFrontendDevServer,z as runDocsDevServer,r as runDevServer,y as runDesktopDevServer,w as runDashboardDevServer,v as runComponentsDevServer,J as runCommit,t as runBackendDevServer,u as runApiDevServer,I as runAdd,c as runActions,b as runAction,la as parseFields,ha as makeStack,ta as makeResource,ga as makeQueueTable,sa as makePolicy,fa as makePage,ea as makeNotification,da as makeMail,ca as makeLanguage,qa as makeJob,ba as makeFunction,aa as makeDatabase,$ as makeComponent,ra as makeCommand,_ as makeCertificate,Z as makeAction,pa as listStacks,M as lintProject,L as lintFix,H as isSSLSetupComplete,Y as isDryRunActive,A as isDomainInHosts,D as isCertificateTrusted,e as invoke,na as installStack,d as hasAction,h as generateWebTypes,i as generateVsCodeCustomData,l as generateTypes,o as generateSeeder,n as generatePantryConfig,q as generateOpenApiSpec,g as generateLibEntries,j as generateIdeHelpers,p as generateCoreSymlink,k as generateComponentMeta,F as generateCertificates,f as generate,K as formatProject,ka as discoverPackages,X as createPage,W as createNotification,U as createModel,T as createMigration,S as createMiddleware,V as createMail,R as createLanguage,Q as createFunction,P as createFactory,O as createDatabase,N as createComponent,B as addDomainToHosts,a as Action};
package/dist/lint/fix.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{ha as b}from"../chunk-rft5b6wr.js";import"../chunk-v0hqskdk.js";import g from"process";var{ok:j}=await b();g.exit(j?0:1);
3
+ import{Oa as b}from"../chunk-e142dheq.js";import"../chunk-h3d81wrg.js";import g from"process";var{ok:j}=await b();g.exit(j?0:1);
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{ga as f}from"../chunk-rft5b6wr.js";import"../chunk-v0hqskdk.js";import g from"process";var{ok:q}=await f();g.exit(q?0:1);
3
+ import{Na as f}from"../chunk-e142dheq.js";import"../chunk-h3d81wrg.js";import g from"process";var{ok:q}=await f();g.exit(q?0:1);
package/dist/lint/lint.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{ga as a,ha as b,ia as c}from"../chunk-rft5b6wr.js";import"../chunk-v0hqskdk.js";export{a as lintProject,b as lintFix,c as formatProject};
2
+ import{Na as a,Oa as b,Pa as c}from"../chunk-e142dheq.js";import"../chunk-h3d81wrg.js";export{a as lintProject,b as lintFix,c as formatProject};
@@ -1,2 +1,45 @@
1
1
  // @bun
2
- import{ja as a}from"./chunk-e87s6b8r.js";import"./chunk-v0hqskdk.js";export{a as makeCommand};
2
+ import"./chunk-h3d81wrg.js";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()}export{V as makeCommand};