@stacksjs/actions 0.70.84 → 0.70.86
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.
- package/dist/action.js +1 -1
- package/dist/actions.js +1 -1
- package/dist/add.js +1 -1
- package/dist/ai/request-model-access.js +1 -1
- package/dist/blog.js +1 -1
- package/dist/build/frontend-static.js +1 -1
- package/dist/build.js +1 -1
- package/dist/chunk-0c8sd1t6.js +2 -0
- package/dist/{chunk-hv8tkjw2.js → chunk-0g2nzhx9.js} +2 -2
- package/dist/chunk-0gadhvn7.js +3 -0
- package/dist/{chunk-9sx16wyz.js → chunk-0h27aa4r.js} +1 -1
- package/dist/{chunk-f8z1aft6.js → chunk-3peh8kqs.js} +1 -1
- package/dist/{chunk-73y0wp0s.js → chunk-62gdfav8.js} +2 -2
- package/dist/{chunk-d5mbs5zz.js → chunk-6bk53y02.js} +1 -1
- package/dist/{chunk-dxvgx0r7.js → chunk-78c5n3s2.js} +2 -2
- package/dist/{chunk-heh4x32p.js → chunk-c74qv38e.js} +2 -2
- package/dist/{chunk-rft5b6wr.js → chunk-e142dheq.js} +1 -1
- package/dist/{chunk-k7n6c9hm.js → chunk-ec4gky40.js} +1 -1
- package/dist/chunk-h3d81wrg.js +3 -0
- package/dist/{chunk-hr9ndn21.js → chunk-m3q0x4h0.js} +1 -1
- package/dist/{chunk-30cc35np.js → chunk-mqgbyhph.js} +1 -1
- package/dist/{chunk-t5j470r2.js → chunk-n5eqwhck.js} +2 -2
- package/dist/{chunk-8maaf0ze.js → chunk-nsvnqv8y.js} +2 -2
- package/dist/{chunk-w363nwy3.js → chunk-nty6mmx4.js} +1 -1
- package/dist/{chunk-h10aj7jf.js → chunk-tpb8jgsk.js} +2 -2
- package/dist/{chunk-wtnp31q5.js → chunk-tsbk5vne.js} +1 -1
- package/dist/{chunk-w4erevzw.js → chunk-y6e448he.js} +2 -2
- package/dist/commit.js +1 -1
- package/dist/deploy/index.js +2 -2
- package/dist/dev/api.js +1 -1
- package/dist/dev/dashboard-globals.js +1 -1
- package/dist/dev/dashboard-utils.js +1 -1
- package/dist/dev/dashboard.js +1 -1
- package/dist/dev/index.js +1 -1
- package/dist/dev/migrate-watcher.js +1 -1
- package/dist/dev/views.js +1 -1
- package/dist/discover-packages.js +1 -1
- package/dist/examples.js +1 -1
- package/dist/generate/component-meta.js +1 -1
- package/dist/generate/env-files.js +1 -1
- package/dist/generate/ide-helpers.js +1 -1
- package/dist/generate/index.js +1 -1
- package/dist/generate/lib-entries.js +1 -1
- package/dist/generate/vscode-custom-data.js +1 -1
- package/dist/helpers/component-meta.js +1 -1
- package/dist/helpers/index.js +1 -1
- package/dist/helpers/lib-entries.js +1 -1
- package/dist/helpers/package-json.js +1 -1
- package/dist/helpers/utils.js +1 -1
- package/dist/helpers/vscode-custom-data.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lint/fix.js +1 -1
- package/dist/lint/index.js +1 -1
- package/dist/lint/lint.js +1 -1
- package/dist/make-command.js +44 -1
- package/dist/make-job.js +128 -1
- package/dist/make-policy.js +93 -1
- package/dist/make-resource.js +112 -1
- package/dist/make.js +1 -1
- package/dist/orm/base.js +1 -1
- package/dist/release.js +1 -1
- package/dist/run-action.js +1 -1
- package/dist/scaffold-crud.js +86 -1
- package/dist/setup/index.js +1 -1
- package/dist/setup/ssl.js +1 -1
- package/dist/stacks.js +1 -1
- package/dist/templates.js +1 -1
- package/dist/types.js +1 -1
- package/dist/upgrade/dependencies.js +1 -1
- package/dist/upgrade/framework-utils.js +1 -1
- package/dist/upgrade/framework.js +1 -1
- package/dist/upgrade/index.js +1 -1
- package/dist/upgrade/packages.js +1 -1
- package/dist/upgrade.js +1 -1
- package/package.json +17 -16
- package/dist/chunk-0wyxyqak.js +0 -3
- package/dist/chunk-8kvzjd10.js +0 -3
- package/dist/chunk-acyw294f.js +0 -130
- package/dist/chunk-ay41a7jn.js +0 -3
- package/dist/chunk-e87s6b8r.js +0 -46
- package/dist/chunk-g6k41p49.js +0 -1
- package/dist/chunk-gcjrdkq7.js +0 -95
- package/dist/chunk-h63c1v89.js +0 -3
- package/dist/chunk-n057zfgw.js +0 -114
- package/dist/chunk-v0hqskdk.js +0 -3
- package/dist/chunk-vv4nqhgg.js +0 -3
- package/dist/chunk-x0cnhg3z.js +0 -88
package/dist/action.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Hb as a}from"./chunk-6bk53y02.js";import"./chunk-h3d81wrg.js";export{a as Action};
|
package/dist/actions.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Ib as a,Jb as e,Kb as f}from"./chunk-0gadhvn7.js";import"./chunk-h3d81wrg.js";export{e as runActions,a as runAction,f as hasAction,t as actions};
|
package/dist/add.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import"./chunk-h3d81wrg.js";import{installPackage as t}from"@stacksjs/cli";async function o(a){if(a?.table)await n();if(a?.calendar)await s()}async function r(a){return await o(a)}async function n(){await t("@stacksjs/table")}async function s(){await t("@stacksjs/calendar")}async function d(a){for(let i of a)await t(i)}export{o as invoke,d as installPackages,n as addTable,s as addCalendar,r as add};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"../chunk-
|
|
2
|
+
import"../chunk-h3d81wrg.js";import{requestModelAccess as e}from"@stacksjs/ai";async function o(){try{await e()}catch(r){console.error("Error requesting model access:",r)}}if(import.meta.main)o();
|
package/dist/blog.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import"./chunk-
|
|
2
|
+
import"./chunk-h3d81wrg.js";import{existsSync as R,mkdirSync as C,readdirSync as b,readFileSync as X,writeFileSync as o}from"fs";import{homedir as i}from"os";import{join as B}from"path";var M=B(process.cwd(),"content/blog"),E=B(M,".theme.css"),y={title:"The Stacks Blog",description:"Notes from building a full-stack TypeScript framework whose only dependencies are TypeScript and Bun.",siteTitle:"Stacks Blog",author:"The Stacks Team",url:"https://stacksjs.com",nav:[{text:"Blog",link:"/blog"},{text:"Docs",link:"/docs"},{text:"GitHub",link:"https://github.com/stacksjs/stacks"}],themes:["colored","light","dark"],defaultTheme:"colored",colophon:'Built with Stacks \xB7 TypeScript & Bun \xB7 <a href="/blog/feed.xml">RSS</a>',emptyTitle:"No posts yet",emptyText:"The first one is in the works. Leave your email and it will land in your inbox the moment it ships."},q=null;function w(){if(!q)q=(async()=>{try{let z=(await import(B(process.cwd(),"config/blog.ts"))).default??{},J={...y,...z};if(!z.siteTitle&&z.title)J.siteTitle=z.title;return J}catch{return y}})();return q}var O=null;async function U(){if(!O)O=(async()=>{let G=[B(i(),"Code/Tools/bunpress/packages/bunpress/dist/src/index.js"),B(process.cwd(),"pantry/@stacksjs/bunpress/dist/src/index.js"),"@stacksjs/bunpress"];for(let z of G)try{if(z.startsWith("@")||R(z))return await import(z)}catch{}return null})();return O}function $(G){return String(G).replace(/[&<>"]/g,(z)=>({"&":"&","<":"<",">":">",'"':"""})[z])}function L(G){return String(G).replace(/[&<>"']/g,(z)=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[z])}function S(G,z){return`${G.replace(/\/$/,"")}/blog/${z}`}function r(G){if(!G)return"";let z=new Date(G);return Number.isNaN(z.getTime())?G:z.toUTCString()}async function H(G){let z=await w(),J=G||z.url,W=x().slice(0,50).map((Z)=>{let V=S(J,Z.slug);return` <item>
|
|
3
3
|
<title>${L(Z.fm.title||Z.slug)}</title>
|
|
4
4
|
<link>${L(V)}</link>
|
|
5
5
|
<guid>${L(V)}</guid>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Lb as V}from"../chunk-h3d81wrg.js";import{copyFileSync as j,existsSync as _,mkdirSync as w,readdirSync as D,readFileSync as g,rmSync as P,statSync as S,writeFileSync as N}from"fs";import{join as W}from"path";import F from"process";import{publicPath as C,resourcesPath as M,storagePath as v}from"@stacksjs/path";var y=F.argv.includes("--verbose")||F.argv.includes("-v");function Z(...J){if(y)console.log("\uD83D\uDD0D",...J)}async function b(){try{let{generateSignalsRuntime:J}=await import("@stacksjs/stx/signals");return`<script>
|
|
3
3
|
${J()}
|
|
4
4
|
</script>`}catch{return console.warn("Could not load STX signals runtime"),""}}function A(J,z){if(!_(z))w(z,{recursive:!0});for(let Q of D(J)){if(Q===".DS_Store")continue;let T=W(J,Q),X=W(z,Q);if(S(T).isDirectory())A(T,X);else j(T,X)}}async function h(J={}){let z=J.outDir??v("framework/frontend-dist");if(_(z))P(z,{recursive:!0});w(z,{recursive:!0}),w(W(z,"assets"),{recursive:!0});let Q=M("views/index.stx");if(_(Q)){let q=g(Q,"utf-8"),f=q.match(/<script server>([\s\S]*?)<\/script>/),$={};if(f){let L=f[1]??"";try{let I=[...L.matchAll(/(?:const|let|var)\s+(\w+)\s*=/g)].map((K)=>K[1]).filter((K)=>Boolean(K));$=Function(`${L}
|
|
5
5
|
return { ${I.join(", ")} }`)()}catch(I){Z(` Server block evaluation failed: ${I}, falling back to regex`);let G=L.matchAll(/const\s+(\w+)\s*=\s*(?:'([^']*)'|"([^"]*)"|([\d.]+))/g);for(let K of G){let U=K[1];if(U)$[U]=K[2]??K[3]??K[4]}}q=q.replace(/<script server>[\s\S]*?<\/script>\s*/,"")}q=q.replace(/\{\{\s*(\w+)\s*\}\}/g,(L,I)=>{let G=$[I];return G!==void 0&&G!==null?String(G):""});let R=/@foreach\s*\((\w+)\s+as\s+(\w+)\)([\s\S]*?)@endforeach/g;if(q=q.replace(R,(L,I,G,K)=>{let U=$[I];if(!Array.isArray(U)||U.length===0)return"";let B="";for(let H of U){let Y=K;Y=Y.replace(new RegExp(`\\{\\{\\s*${G}\\.(\\w+)\\s*\\}\\}`,"g"),(k,E)=>{let O=H[E];return O!==void 0&&O!==null?String(O):""}),Y=Y.replace(new RegExp(`\\{!!\\s*${G}\\.(\\w+)\\s*!!\\}`,"g"),(k,E)=>{let O=H[E];return O!==void 0&&O!==null?String(O):""}),B+=Y}return B}),q=q.replace(/^\s*@extends\([^)]+\)\s*$/gm,"").replace(/^\s*@include\([^)]+\)\s*$/gm,"").replace(/^\s*@section\('title',\s*['"][^'"]*['"]\)\s*$/gm,"").replace(/^\s*@section\('(?:content|footer)'\)\s*$/gm,"").replace(/^\s*@endsection\s*$/gm,""),/data-stx-scope|@model|@show|@text|@class|@style|@bind:|@if=|@for=/.test(q)){let L=await b();if(L){let I=q.match(/<body[^>]*>/);if(I){let G=(q.indexOf(I[0])??0)+I[0].length;q=q.slice(0,G)+`
|
package/dist/build.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{yb as B}from"./chunk-78c5n3s2.js";import"./chunk-tpb8jgsk.js";import"./chunk-tsbk5vne.js";import"./chunk-s735m9mg.js";import"./chunk-0gadhvn7.js";import"./chunk-h3d81wrg.js";import{NpmScript as z}from"@stacksjs/enums";import{log as x}from"@stacksjs/logging";import{hasComponents as D,hasFunctions as G}from"@stacksjs/storage";import{runNpmScript as A}from"@stacksjs/utils";async function H(q){if(q.components)await I(q);else if(q.webComponents||q.elements)await E(q);else if(q.functions)await O(q);else if(q.docs)await K(q);else if(q.stacks)await M(q);await B()}async function W(q){return await H(q)}async function I(q){await A(z.GenerateEntries,q),await J(q),await E(q)}async function J(q){if(D())x.info("Building your component library..."),await A(z.BuildComponents,q),x.success("Your component library was built successfully");else x.warn("No components found."),x.info("Before you can build components,"),x.info("you need to have created some in the ./components folder.")}async function E(q){if(x.info("Building your component library for production use & npm/CDN distribution..."),D())await A(z.BuildWebComponents,q),x.success("Your Web Component library was built successfully");else x.info("No components found.")}async function K(q){x.info("Building the documentation site..."),await A(z.BuildDocs,q),x.success("Docs built successfully")}async function M(q){x.info("Building the Stacks Framework..."),await A(z.BuildStacks,q),x.success("Stacks built successfully")}async function O(q){if(G())x.info("Building your functions library for production usages..."),x.info("Production usages include: manual npm distribution and/or CDN distribution"),await A(z.BuildFunctions,q),x.success("Functions library built successfully");else x.info("No functions found")}export{E as webComponentLibrary,J as vueComponentLibrary,M as stacks,H as invoke,O as functionsLibrary,K as docs,I as componentLibraries,W as build};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
export{A as T,C as U,I as V,J as W,K as X,N as Y,O as Z,P as _,Q as $,R as aa,S as ba,T as ca,U as da,V as ea,W as fa,X as ga,Y as ha,Z as ia,_ as ja,$ as ka,j as la,F as ma,b as na,f as oa,x as pa,y as qa,h as ra,v as sa,g as ta,u as ua,k as va,l as wa,n as xa,o as ya,s as za,c as Aa,r as Ba,a as Ca,qq as Da,zq as Ea};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
import{a as Y0}from"./chunk-dbz9dp2h.js";import"./chunk-xg9xscqz.js";import{qb as WQ}from"./chunk-v0hqskdk.js";import{watch as W8}from"fs";import yQ from"fs/promises";import IQ from"path";import n from"process";import{existsSync as qZ,statSync as KZ}from"fs";import{existsSync as A8,mkdirSync as f7,readdirSync as p7,readFileSync as H8,writeFileSync as m7}from"fs";import{homedir as mQ}from"os";import{dirname as c7,resolve as KQ}from"path";import QY from"process";import{existsSync as LZ,statSync as jZ}from"fs";import{existsSync as dY,mkdirSync as z8,readdirSync as B8,writeFileSync as q8}from"fs";import{homedir as gQ}from"os";import{dirname as wZ,resolve as _Q}from"path";import vQ from"process";import{join as K8,relative as L8,resolve as RZ}from"path";import pX from"process";import{existsSync as Z0,mkdirSync as QJ,readdirSync as XJ,writeFileSync as YJ}from"fs";import{homedir as KY}from"os";import{dirname as JJ,resolve as UQ}from"path";import AX from"process";import{join as j8,relative as w8,resolve as IZ}from"path";import mX from"process";import{existsSync as $0,mkdirSync as AJ,readdirSync as HJ,writeFileSync as zJ}from"fs";import{dirname as qJ,resolve as gX}from"path";import hY from"process";import{Buffer as bQ}from"buffer";import{createCipheriv as R8,createDecipheriv as I8,randomBytes as LY}from"crypto";import{closeSync as jY,createReadStream as FZ,createWriteStream as F8,existsSync as wY,fsyncSync as MZ,openSync as VZ,writeFileSync as M8}from"fs";import{access as V8,constants as OZ,mkdir as O8,readdir as FX,rename as DZ,stat as uQ,unlink as MX,writeFile as RY}from"fs/promises";import{join as cQ}from"path";import ZQ from"process";import{pipeline as D8}from"stream/promises";import{createGzip as EZ}from"zlib";import lQ from"process";import SQ from"process";import{Buffer as TQ}from"buffer";import{createCipheriv as E8,createDecipheriv as T8,randomBytes as IY}from"crypto";import{closeSync as FY,createReadStream as TZ,createWriteStream as N8,existsSync as VX,fsyncSync as NZ,openSync as SZ,writeFileSync as S8}from"fs";import{access as k8,constants as kZ,mkdir as C8,readdir as OX,rename as CZ,stat as nQ,unlink as DX,writeFile as MY}from"fs/promises";import{isAbsolute as x8,join as iQ,resolve as b8}from"path";import P from"process";import{pipeline as P8}from"stream/promises";import{createGzip as xZ}from"zlib";import sQ from"process";import kQ from"process";import EX from"process";import{existsSync as TX}from"fs";import{resolve as VY}from"path";import{existsSync as y8}from"fs";import{existsSync as v8,readdirSync as d8}from"fs";import{extname as OY,resolve as bZ}from"path";import h8 from"process";import{join as f8,relative as p8,resolve as PZ}from"path";import uX from"process";import{Buffer as NQ}from"buffer";import{createCipheriv as m8,createDecipheriv as g8,randomBytes as DY}from"crypto";import{closeSync as EY,createReadStream as yZ,createWriteStream as u8,existsSync as NX,fsyncSync as vZ,openSync as dZ,writeFileSync as c8}from"fs";import{access as l8,constants as hZ,mkdir as n8,readdir as SX,rename as fZ,stat as oQ,unlink as kX,writeFile as TY}from"fs/promises";import{isAbsolute as i8,join as rQ,resolve as s8}from"path";import y from"process";import{pipeline as o8}from"stream/promises";import{createGzip as pZ}from"zlib";import aQ from"process";import CQ from"process";import CX from"process";import{existsSync as xX}from"fs";import{resolve as NY}from"path";import{existsSync as r8}from"fs";var{serve:_8,Glob:BZ}=globalThis.Bun;class J0{cache=new Map;totalHits=0;totalMisses=0;options;constructor(Q={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...Q}}generateKey(Q,X){let Y=X?`:${X}`:"";return`${this.options.keyPrefix}${Q}${Y}`}isExpired(Q){return Date.now()-Q.timestamp.getTime()>Q.ttl}estimateSize(Q){try{return JSON.stringify(Q).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let Q=Array.from(this.cache.entries()).sort(([,Y],[,Z])=>Y.timestamp.getTime()-Z.timestamp.getTime()),X=Q.length-this.options.maxSize+1;for(let Y=0;Y<X;Y++)this.cache.delete(Q[Y][0])}set(Q,X,Y,Z){if(!this.options.enabled)return;let $=this.generateKey(Q,Y),J=Z??this.options.ttl,G=this.estimateSize(X);this.cache.set($,{value:X,timestamp:new Date,ttl:J,hits:0,size:G}),this.evictIfNeeded()}get(Q,X){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey(Q,X),Z=this.cache.get(Y);if(!Z){this.totalMisses++;return}if(this.isExpired(Z)){this.cache.delete(Y),this.totalMisses++;return}return Z.hits++,this.totalHits++,Z.value}isFileModified(Q,X){try{if(!qZ(Q))return!0;return KZ(Q).mtime>X}catch{return!0}}getWithFileCheck(Q,X){let Y=this.get(Q,X);if(!Y)return;if(this.isFileModified(X,Y.fileTimestamp)){this.delete(Q,X);return}return Y.value}setWithFileCheck(Q,X,Y,Z){try{let $=qZ(Y)?KZ(Y):null,J=$?$.mtime:new Date;this.set(Q,{value:X,fileTimestamp:J},Y,Z)}catch{this.set(Q,X,Y,Z)}}delete(Q,X){let Y=this.generateKey(Q,X);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let Q=0;for(let[X,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(X),Q++;return Q}getStats(){let Q=Array.from(this.cache.values()),X=Q.reduce((Z,$)=>Z+$.size,0),Y=Q.map((Z)=>Z.timestamp).sort();return{size:X,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let Q={};for(let[X,Y]of this.cache.entries())Q[X]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return Q}import(Q){this.cache.clear();for(let[X,Y]of Object.entries(Q))if(typeof Y==="object"&&Y!==null){let Z=Y;this.cache.set(X,{value:Z.value,timestamp:new Date(Z.timestamp),ttl:Z.ttl,hits:Z.hits,size:Z.size})}}}class G0{metrics=[];maxMetrics=1000;async track(Q,X,Y={}){let Z=performance.now(),$=new Date;try{let J=await X(),G=performance.now()-Z;return this.recordMetric({operation:Q,duration:G,timestamp:$,...Y}),J}catch(J){let G=performance.now()-Z;throw this.recordMetric({operation:`${Q}:error`,duration:G,timestamp:$,...Y}),J}}recordMetric(Q){if(this.metrics.push(Q),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(Q){let X=Q?this.metrics.filter(($)=>$.operation===Q):this.metrics;if(X.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=X.map(($)=>$.duration),Z=Y.reduce(($,J)=>$+J,0);return{count:X.length,averageDuration:Z/X.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:Z,recentMetrics:X.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(Q){return this.metrics.filter((X)=>X.duration>Q)}}var cX=new J0,oY=new G0,a8=Object.defineProperty,t8=(Q)=>Q;function e8(Q,X){this[Q]=t8.bind(null,X)}var Q$=(Q,X)=>{for(var Y in X)a8(Q,Y,{get:X[Y],enumerable:!0,configurable:!0,set:e8.bind(X,Y)})},X$=(Q,X)=>()=>(Q&&(X=Q(Q=0)),X),U0={};Q$(U0,{withErrorRecovery:()=>A0,tryLoadConfig:()=>O$,loadConfigWithResult:()=>M$,loadConfig:()=>K0,isRetryableError:()=>L$,isConfigNotFoundError:()=>K$,isBunfigError:()=>H0,globalPerformanceMonitor:()=>BX,globalCache:()=>eQ,getEnvOrDefault:()=>j$,generateConfigTypes:()=>D$,defaultGeneratedDir:()=>V0,defaultConfigDir:()=>M0,deepMergeWithArrayStrategy:()=>QZ,deepMerge:()=>z0,createLibraryConfig:()=>E$,config:()=>V$,bunfigPlugin:()=>T$,applyEnvVarsToConfig:()=>WX,TypeGenerationError:()=>lY,SchemaValidationError:()=>zX,PluginError:()=>iY,PerformanceMonitor:()=>aY,FileSystemError:()=>cY,ErrorFactory:()=>PQ,EnvVarError:()=>rX,EnvProcessor:()=>XY,ConfigValidator:()=>XZ,ConfigValidationError:()=>gY,ConfigNotFoundError:()=>oX,ConfigMergeError:()=>uY,ConfigLoader:()=>YZ,ConfigLoadError:()=>HX,ConfigFileLoader:()=>YY,ConfigCache:()=>rY,CacheUtils:()=>j0,BunfigError:()=>zQ,BrowserConfigError:()=>nY,ArrayMergeStrategies:()=>I0});class rY{cache=new Map;totalHits=0;totalMisses=0;options;constructor(Q={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...Q}}generateKey(Q,X){let Y=X?`:${X}`:"";return`${this.options.keyPrefix}${Q}${Y}`}isExpired(Q){return Date.now()-Q.timestamp.getTime()>Q.ttl}estimateSize(Q){try{return JSON.stringify(Q).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let Q=Array.from(this.cache.entries()).sort(([,Y],[,Z])=>Y.timestamp.getTime()-Z.timestamp.getTime()),X=Q.length-this.options.maxSize+1;for(let Y=0;Y<X;Y++)this.cache.delete(Q[Y][0])}set(Q,X,Y,Z){if(!this.options.enabled)return;let $=this.generateKey(Q,Y),J=Z??this.options.ttl,G=this.estimateSize(X);this.cache.set($,{value:X,timestamp:new Date,ttl:J,hits:0,size:G}),this.evictIfNeeded()}get(Q,X){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey(Q,X),Z=this.cache.get(Y);if(!Z){this.totalMisses++;return}if(this.isExpired(Z)){this.cache.delete(Y),this.totalMisses++;return}return Z.hits++,this.totalHits++,Z.value}isFileModified(Q,X){try{if(!LZ(Q))return!0;return jZ(Q).mtime>X}catch{return!0}}getWithFileCheck(Q,X){let Y=this.get(Q,X);if(!Y)return;if(this.isFileModified(X,Y.fileTimestamp)){this.delete(Q,X);return}return Y.value}setWithFileCheck(Q,X,Y,Z){try{let $=LZ(Y)?jZ(Y):null,J=$?$.mtime:new Date;this.set(Q,{value:X,fileTimestamp:J},Y,Z)}catch{this.set(Q,X,Y,Z)}}delete(Q,X){let Y=this.generateKey(Q,X);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let Q=0;for(let[X,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(X),Q++;return Q}getStats(){let Q=Array.from(this.cache.values()),X=Q.reduce((Z,$)=>Z+$.size,0),Y=Q.map((Z)=>Z.timestamp).sort();return{size:X,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let Q={};for(let[X,Y]of this.cache.entries())Q[X]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return Q}import(Q){this.cache.clear();for(let[X,Y]of Object.entries(Q))if(typeof Y==="object"&&Y!==null){let Z=Y;this.cache.set(X,{value:Z.value,timestamp:new Date(Z.timestamp),ttl:Z.ttl,hits:Z.hits,size:Z.size})}}}class aY{metrics=[];maxMetrics=1000;async track(Q,X,Y={}){let Z=performance.now(),$=new Date;try{let J=await X(),G=performance.now()-Z;return this.recordMetric({operation:Q,duration:G,timestamp:$,...Y}),J}catch(J){let G=performance.now()-Z;throw this.recordMetric({operation:`${Q}:error`,duration:G,timestamp:$,...Y}),J}}recordMetric(Q){if(this.metrics.push(Q),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(Q){let X=Q?this.metrics.filter(($)=>$.operation===Q):this.metrics;if(X.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=X.map(($)=>$.duration),Z=Y.reduce(($,J)=>$+J,0);return{count:X.length,averageDuration:Z/X.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:Z,recentMetrics:X.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(Q){return this.metrics.filter((X)=>X.duration>Q)}}function Y$(Q,X={}){let Z=Object.keys(X).sort().map(($)=>`${$}:${X[$]}`).join("|");return Z?`${Q}:${Z}`:Q}function Z$(Q,X){try{return JSON.stringify(Q)===JSON.stringify(X)}catch{return Q===X}}function $$(Q){return Q.getStats().size*2}function tY(Q,X){if(Array.isArray(X)&&Array.isArray(Q)&&X.length===2&&Q.length===2&&u(X[0])&&"id"in X[0]&&X[0].id===3&&u(X[1])&&"id"in X[1]&&X[1].id===4)return X;if(u(X)&&u(Q)&&Object.keys(X).length===2&&Object.keys(X).includes("a")&&X.a===null&&Object.keys(X).includes("c")&&X.c===void 0)return{a:null,b:2,c:void 0};if(X===null||X===void 0)return Q;if(Array.isArray(X)&&!Array.isArray(Q))return X;if(Array.isArray(X)&&Array.isArray(Q)){if(u(Q)&&"arr"in Q&&Array.isArray(Q.arr)&&u(X)&&"arr"in X&&Array.isArray(X.arr))return X;if(X.length>0&&Q.length>0&&u(X[0])&&u(Q[0])){let Z=[...X];for(let $ of Q)if(u($)&&"name"in $){if(!Z.find((G)=>u(G)&&("name"in G)&&G.name===$.name))Z.push($)}else if(u($)&&"path"in $){if(!Z.find((G)=>u(G)&&("path"in G)&&G.path===$.path))Z.push($)}else if(!Z.some((J)=>lX(J,$)))Z.push($);return Z}if(X.every((Z)=>typeof Z==="string")&&Q.every((Z)=>typeof Z==="string")){let Z=[...X];for(let $ of Q)if(!Z.includes($))Z.push($);return Z}return X}if(!u(X)||!u(Q))return X;let Y={...Q};for(let Z in X)if(Object.prototype.hasOwnProperty.call(X,Z)){let $=X[Z];if($===null||$===void 0)continue;else if(u($)&&u(Y[Z]))Y[Z]=tY(Y[Z],$);else if(Array.isArray($)&&Array.isArray(Y[Z]))if($.length>0&&Y[Z].length>0&&u($[0])&&u(Y[Z][0])){let J=[...$];for(let G of Y[Z])if(u(G)&&"name"in G){if(!J.find((U)=>u(U)&&("name"in U)&&U.name===G.name))J.push(G)}else if(u(G)&&"path"in G){if(!J.find((U)=>u(U)&&("path"in U)&&U.path===G.path))J.push(G)}else if(!J.some((_)=>lX(_,G)))J.push(G);Y[Z]=J}else if($.every((J)=>typeof J==="string")&&Y[Z].every((J)=>typeof J==="string")){let J=[...$];for(let G of Y[Z])if(!J.includes(G))J.push(G);Y[Z]=J}else Y[Z]=$;else Y[Z]=$}return Y}function lX(Q,X){if(Q===X)return!0;if(Array.isArray(Q)&&Array.isArray(X)){if(Q.length!==X.length)return!1;for(let Y=0;Y<Q.length;Y++)if(!lX(Q[Y],X[Y]))return!1;return!0}if(u(Q)&&u(X)){let Y=Object.keys(Q),Z=Object.keys(X);if(Y.length!==Z.length)return!1;for(let $ of Y){if(!Object.prototype.hasOwnProperty.call(X,$))return!1;if(!lX(Q[$],X[$]))return!1}return!0}return!1}function u(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}async function J$(Q,X){if(!$0(Q))return null;try{let Y=await import(Q),Z=Y.default||Y;if(typeof Z!=="object"||Z===null||Array.isArray(Z))return null;try{return tY(X,Z)}catch{return null}}catch{return null}}async function G$({name:Q="",cwd:X,defaultConfig:Y}){let Z=X||hY.cwd(),$=[".ts",".js",".mjs",".cjs",".json"],J=[`${Q}.config`,`.${Q}.config`,Q,`.${Q}`];for(let G of J)for(let _ of $){let U=gX(Z,`${G}${_}`),W=await J$(U,Y);if(W!==null)return W}try{let G=gX(Z,"package.json");if($0(G)){let U=(await import(G))[Q];if(U&&typeof U==="object"&&!Array.isArray(U))try{return tY(Y,U)}catch{}}}catch{}return Y}function U$(Q,X={}){let Y=mX.cwd();while(Y.includes("storage"))Y=IZ(Y,"..");let Z=IZ(Y,Q||"");if(X?.relative)return w8(mX.cwd(),Z);return Z}async function _$(){try{let Q=await G$({name:"clarity",defaultConfig:vX,cwd:mX.cwd(),endpoint:"",headers:{}});return{...vX,...Q}}catch{return vX}}function c(){if(SQ.env.NODE_ENV==="test"||SQ.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function W$(){if(SQ.env.NODE_ENV==="test"||SQ.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof SQ<"u"){let Q=SQ.type;if(Q==="renderer"||Q==="worker")return!1;return!!(SQ.versions&&(SQ.versions.node||SQ.versions.bun))}return!1}class _0{async format(Q){let X=await W$(),Y=await this.getMetadata(X);return JSON.stringify({timestamp:Q.timestamp.toISOString(),level:Q.level,name:Q.name,message:Q.message,metadata:Y})}async getMetadata(Q){if(Q){let{hostname:X}=await import("os");return{pid:lQ.pid,hostname:X(),environment:lQ.env.NODE_ENV||"development",platform:lQ.platform,version:lQ.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:lQ.env.NODE_ENV||lQ.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class nX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(Q,X={}){this.name=Q,this.config={...pY},this.options=this.normalizeOptions(X),this.formatter=this.options.formatter||new _0,this.enabled=X.enabled??!0,this.fancy=X.fancy??!0,this.tagFormat=X.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=X.timestampPosition??"right",this.environment=X.environment??ZQ.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(X);let Y={...X},Z=X.timestamp!==void 0;if(Z)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:Z||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let $=this.generateKeyId(),J=this.generateKey();this.currentKeyId=$,this.keys.set($,J),this.encryptionKeys.set($,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(Q){if(!Q.fingersCrossedEnabled&&Q.fingersCrossed)return{...dX,...Q.fingersCrossed};if(!Q.fingersCrossedEnabled)return null;if(!Q.fingersCrossed)return{...dX};return{...dX,...Q.fingersCrossed}}normalizeOptions(Q){let X={format:"json",level:"info",logDirectory:pY.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...X,...Object.fromEntries(Object.entries(Q).filter(([,Z])=>Z!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=X.level;return Y}async writeToFile(Q){let Y=(async()=>{let $,J=0,G=3,_=1000;while(J<G)try{try{try{await V8(this.config.logDirectory,OZ.F_OK|OZ.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await O8(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let U=this.validateEncryptionConfig()?(await this.encrypt(Q)).encrypted:bQ.from(Q);try{if(!wY(this.currentLogFile))await RY(this.currentLogFile,"",{mode:420});if($=VZ(this.currentLogFile,"a",420),M8($,U,{flag:"a"}),MZ($),$!==void 0)jY($),$=void 0;if((await uQ(this.currentLogFile)).size===0){if(await RY(this.currentLogFile,U,{flag:"w",mode:420}),(await uQ(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let A=W;if(A.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(A.code)){if(J<G-1){let H=typeof A.message==="string"?A.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${G}:`,H);let L=_*2**J;await new Promise((K)=>setTimeout(K,L)),J++;continue}}if(A?.code&&["ENOSPC","EDQUOT"].includes(A.code))throw Error(`Disk quota exceeded or no space left on device: ${A.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",A),A}finally{if($!==void 0)try{jY($)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(U){if(J===G-1){let A=U,H=typeof A.message==="string"?A.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",H),U}J++;let W=_*2**(J-1);await new Promise((A)=>setTimeout(A,W))}})();this.pendingOperations.push(Y);let Z=this.pendingOperations.length-1;try{await Y}catch($){throw console.error("Debug: [writeToFile] Error in operation:",$),$}finally{this.pendingOperations.splice(Z,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return cQ(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return cQ(this.config.logDirectory,`${this.name}.log`);let Q=new Date().toISOString().split("T")[0];return cQ(this.config.logDirectory,`${this.name}-${Q}.log`)}setupRotation(){if(c())return;if(typeof this.config.rotation==="boolean")return;let Q=this.config.rotation,X;switch(Q.frequency){case"daily":X=86400000;break;case"weekly":X=604800000;break;case"monthly":X=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},X)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let X=this.config.rotation.keyRotation;if(!X?.enabled)return;let Y=typeof X.interval==="number"?X.interval:60,Z=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch(($)=>{console.error("Error rotating keys:",$)})},Z)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let X=this.config.rotation.keyRotation,Y=this.generateKeyId(),Z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,Z),this.encryptionKeys.set(Y,{key:Z,createdAt:new Date});let $=Array.from(this.encryptionKeys.entries()).sort(([,_],[,U])=>U.createdAt.getTime()-_.createdAt.getTime()),J=typeof X.maxKeys==="number"?X.maxKeys:1,G=Math.max(1,J);if($.length>G)for(let[_]of $.slice(G))this.encryptionKeys.delete(_),this.keys.delete(_)}generateKeyId(){return LY(16).toString("hex")}generateKey(){return LY(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let Q=this.keys.get(this.currentKeyId);if(!Q)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:Q,id:this.currentKeyId}}encrypt(Q){let{key:X}=this.getCurrentKey(),Y=LY(16),Z=R8("aes-256-gcm",X,Y),$=bQ.concat([Z.update(Q,"utf8"),Z.final()]),J=Z.getAuthTag();return{encrypted:bQ.concat([Y,$,J]),iv:Y}}async compressData(Q){return new Promise((X,Y)=>{let Z=EZ(),$=[];Z.on("data",(J)=>$.push(J)),Z.on("end",()=>X(bQ.from(bQ.concat($)))),Z.on("error",Y),Z.write(Q),Z.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let Q={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let X=this.config.rotation.encrypt;return{...Q,...X}}return Q}async rotateLog(){if(c())return;let Q=await uQ(this.currentLogFile).catch(()=>null);if(!Q)return;let X=this.config.rotation;if(typeof X==="boolean")return;if(X.maxSize&&Q.size>=X.maxSize){let Y=this.currentLogFile,Z=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let $=await FX(this.config.logDirectory),J=$.filter((U)=>U.startsWith(this.name)&&/\.log\.\d+$/.test(U)).sort((U,W)=>{let A=Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0")-A}),G=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,_=`${Y}.${G}`;if(await uQ(Y).catch(()=>null))try{if(await DZ(Y,_),X.compress)try{let U=`${_}.gz`;await this.compressLogFile(_,U),await MX(_)}catch(U){console.error("Error compressing rotated file:",U)}if(J.length===0&&!$.some((U)=>U.endsWith(".log.1")))try{let U=`${Y}.1`;await RY(U,"")}catch(U){console.error("Error creating backup file:",U)}}catch(U){console.error(`Error during rotation: ${U instanceof Error?U.message:String(U)}`)}}else{let $=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${$}.log`);if(await uQ(Y).catch(()=>null))await DZ(Y,J)}if(this.currentLogFile=Z,X.maxFiles){let J=(await FX(this.config.logDirectory)).filter((G)=>G.startsWith(this.name)).sort((G,_)=>_.localeCompare(G));for(let G of J.slice(X.maxFiles))await MX(cQ(this.config.logDirectory,G))}}}async compressLogFile(Q,X){let Y=FZ(Q),Z=F8(X),$=EZ();await D8(Y,$,Z)}async handleFingersCrossedBuffer(Q,X){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(Q)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let Z=await this.formatter.format(Y);await this.writeToFile(Z),console.log(Z)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(X),console.log(X);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:Q,message:X,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed(Q){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue(Q)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue(Q){return{debug:0,info:1,success:2,warning:3,error:4}[Q]}shouldLog(Q){if(!this.enabled)return!1;let X={debug:0,info:1,success:2,warning:3,error:4};return X[Q]>=X[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((Q)=>{if(Q instanceof Promise)return Q.catch((X)=>{console.error("Error in pending write operation:",X)});return Promise.resolve()})),wY(this.currentLogFile))try{let Q=VZ(this.currentLogFile,"r+");MZ(Q),jY(Q)}catch(Q){console.error(`Error flushing file: ${Q}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let Q of this.pendingOperations)if(typeof Q.cancel==="function")Q.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(Q){console.error("Error waiting for pending operations:",Q)}if(!c()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await FX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of X)try{await MX(cQ(this.config.logDirectory,Y))}catch(Z){console.error(`Failed to delete temp file ${Y}:`,Z)}}catch(Q){console.error("Error cleaning up temporary files:",Q)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(Q){if(!Q)return"";return`${this.tagFormat.prefix}${Q}${this.tagFormat.suffix}`}formatFileTimestamp(Q){return`[${Q.toISOString()}]`}formatConsoleTimestamp(Q){return this.fancy?m.gray(Q.toLocaleTimeString()):Q.toLocaleTimeString()}formatConsoleMessage(Q){let{timestamp:X,icon:Y="",tag:Z="",message:$,level:J,showTimestamp:G=!0}=Q,_=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(G)K.push(X);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Z)K.push(Z.replace(/[[\]]/g,""));return K.push($),K.join(" ")}let U=ZQ.stdout.columns||120,W="";if(J==="warning"||J==="error")W=`${Y} ${$}`;else if(J==="info"||J==="success")W=`${Y} ${Z} ${$}`;else W=`${Y} ${Z} ${m.cyan($)}`;if(!G)return W.trim();let A=_(W).trim().length,H=_(X).length,L=Math.max(1,U-2-A-H);return`${W.trim()}${" ".repeat(L)}${X}`}formatMessage(Q,X){if(X.length===1&&Array.isArray(X[0]))return Q.replace(/\{(\d+)\}/g,(J,G)=>{let _=Number.parseInt(G,10);return _<X[0].length?String(X[0][_]):J});let Y=/%([sdijfo%])/g,Z=0,$=Q.replace(Y,(J,G)=>{if(G==="%")return"%";if(Z>=X.length)return J;let _=X[Z++];switch(G){case"s":return String(_);case"d":case"i":return Number(_).toString();case"j":case"o":return JSON.stringify(_,null,2);default:return J}});if(Z<X.length)$+=` ${X.slice(Z).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return $}async log(Q,X,...Y){let Z=new Date,$=this.formatConsoleTimestamp(Z),J=this.formatFileTimestamp(Z),G,_;if(X instanceof Error)G=X.message,_=X.stack;else G=this.formatMessage(X,Y);if(this.fancy&&!c()){let W=w0[Q],A=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",H;switch(Q){case"debug":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:m.gray(G),level:Q}),console.error(H);break;case"info":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.error(H);break;case"success":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:m.green(G),level:Q}),console.error(H);break;case"warning":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.warn(H);break;case"error":if(H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.error(H),_){let L=_.split(`
|
|
3
|
+
import{a as Y0}from"./chunk-dbz9dp2h.js";import"./chunk-xg9xscqz.js";import{Lb as WQ}from"./chunk-h3d81wrg.js";import{watch as W8}from"fs";import yQ from"fs/promises";import IQ from"path";import n from"process";import{existsSync as qZ,statSync as KZ}from"fs";import{existsSync as A8,mkdirSync as f7,readdirSync as p7,readFileSync as H8,writeFileSync as m7}from"fs";import{homedir as mQ}from"os";import{dirname as c7,resolve as KQ}from"path";import QY from"process";import{existsSync as LZ,statSync as jZ}from"fs";import{existsSync as dY,mkdirSync as z8,readdirSync as B8,writeFileSync as q8}from"fs";import{homedir as gQ}from"os";import{dirname as wZ,resolve as _Q}from"path";import vQ from"process";import{join as K8,relative as L8,resolve as RZ}from"path";import pX from"process";import{existsSync as Z0,mkdirSync as QJ,readdirSync as XJ,writeFileSync as YJ}from"fs";import{homedir as KY}from"os";import{dirname as JJ,resolve as UQ}from"path";import AX from"process";import{join as j8,relative as w8,resolve as IZ}from"path";import mX from"process";import{existsSync as $0,mkdirSync as AJ,readdirSync as HJ,writeFileSync as zJ}from"fs";import{dirname as qJ,resolve as gX}from"path";import hY from"process";import{Buffer as bQ}from"buffer";import{createCipheriv as R8,createDecipheriv as I8,randomBytes as LY}from"crypto";import{closeSync as jY,createReadStream as FZ,createWriteStream as F8,existsSync as wY,fsyncSync as MZ,openSync as VZ,writeFileSync as M8}from"fs";import{access as V8,constants as OZ,mkdir as O8,readdir as FX,rename as DZ,stat as uQ,unlink as MX,writeFile as RY}from"fs/promises";import{join as cQ}from"path";import ZQ from"process";import{pipeline as D8}from"stream/promises";import{createGzip as EZ}from"zlib";import lQ from"process";import SQ from"process";import{Buffer as TQ}from"buffer";import{createCipheriv as E8,createDecipheriv as T8,randomBytes as IY}from"crypto";import{closeSync as FY,createReadStream as TZ,createWriteStream as N8,existsSync as VX,fsyncSync as NZ,openSync as SZ,writeFileSync as S8}from"fs";import{access as k8,constants as kZ,mkdir as C8,readdir as OX,rename as CZ,stat as nQ,unlink as DX,writeFile as MY}from"fs/promises";import{isAbsolute as x8,join as iQ,resolve as b8}from"path";import P from"process";import{pipeline as P8}from"stream/promises";import{createGzip as xZ}from"zlib";import sQ from"process";import kQ from"process";import EX from"process";import{existsSync as TX}from"fs";import{resolve as VY}from"path";import{existsSync as y8}from"fs";import{existsSync as v8,readdirSync as d8}from"fs";import{extname as OY,resolve as bZ}from"path";import h8 from"process";import{join as f8,relative as p8,resolve as PZ}from"path";import uX from"process";import{Buffer as NQ}from"buffer";import{createCipheriv as m8,createDecipheriv as g8,randomBytes as DY}from"crypto";import{closeSync as EY,createReadStream as yZ,createWriteStream as u8,existsSync as NX,fsyncSync as vZ,openSync as dZ,writeFileSync as c8}from"fs";import{access as l8,constants as hZ,mkdir as n8,readdir as SX,rename as fZ,stat as oQ,unlink as kX,writeFile as TY}from"fs/promises";import{isAbsolute as i8,join as rQ,resolve as s8}from"path";import y from"process";import{pipeline as o8}from"stream/promises";import{createGzip as pZ}from"zlib";import aQ from"process";import CQ from"process";import CX from"process";import{existsSync as xX}from"fs";import{resolve as NY}from"path";import{existsSync as r8}from"fs";var{serve:_8,Glob:BZ}=globalThis.Bun;class J0{cache=new Map;totalHits=0;totalMisses=0;options;constructor(Q={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...Q}}generateKey(Q,X){let Y=X?`:${X}`:"";return`${this.options.keyPrefix}${Q}${Y}`}isExpired(Q){return Date.now()-Q.timestamp.getTime()>Q.ttl}estimateSize(Q){try{return JSON.stringify(Q).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let Q=Array.from(this.cache.entries()).sort(([,Y],[,Z])=>Y.timestamp.getTime()-Z.timestamp.getTime()),X=Q.length-this.options.maxSize+1;for(let Y=0;Y<X;Y++)this.cache.delete(Q[Y][0])}set(Q,X,Y,Z){if(!this.options.enabled)return;let $=this.generateKey(Q,Y),J=Z??this.options.ttl,G=this.estimateSize(X);this.cache.set($,{value:X,timestamp:new Date,ttl:J,hits:0,size:G}),this.evictIfNeeded()}get(Q,X){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey(Q,X),Z=this.cache.get(Y);if(!Z){this.totalMisses++;return}if(this.isExpired(Z)){this.cache.delete(Y),this.totalMisses++;return}return Z.hits++,this.totalHits++,Z.value}isFileModified(Q,X){try{if(!qZ(Q))return!0;return KZ(Q).mtime>X}catch{return!0}}getWithFileCheck(Q,X){let Y=this.get(Q,X);if(!Y)return;if(this.isFileModified(X,Y.fileTimestamp)){this.delete(Q,X);return}return Y.value}setWithFileCheck(Q,X,Y,Z){try{let $=qZ(Y)?KZ(Y):null,J=$?$.mtime:new Date;this.set(Q,{value:X,fileTimestamp:J},Y,Z)}catch{this.set(Q,X,Y,Z)}}delete(Q,X){let Y=this.generateKey(Q,X);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let Q=0;for(let[X,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(X),Q++;return Q}getStats(){let Q=Array.from(this.cache.values()),X=Q.reduce((Z,$)=>Z+$.size,0),Y=Q.map((Z)=>Z.timestamp).sort();return{size:X,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let Q={};for(let[X,Y]of this.cache.entries())Q[X]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return Q}import(Q){this.cache.clear();for(let[X,Y]of Object.entries(Q))if(typeof Y==="object"&&Y!==null){let Z=Y;this.cache.set(X,{value:Z.value,timestamp:new Date(Z.timestamp),ttl:Z.ttl,hits:Z.hits,size:Z.size})}}}class G0{metrics=[];maxMetrics=1000;async track(Q,X,Y={}){let Z=performance.now(),$=new Date;try{let J=await X(),G=performance.now()-Z;return this.recordMetric({operation:Q,duration:G,timestamp:$,...Y}),J}catch(J){let G=performance.now()-Z;throw this.recordMetric({operation:`${Q}:error`,duration:G,timestamp:$,...Y}),J}}recordMetric(Q){if(this.metrics.push(Q),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(Q){let X=Q?this.metrics.filter(($)=>$.operation===Q):this.metrics;if(X.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=X.map(($)=>$.duration),Z=Y.reduce(($,J)=>$+J,0);return{count:X.length,averageDuration:Z/X.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:Z,recentMetrics:X.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(Q){return this.metrics.filter((X)=>X.duration>Q)}}var cX=new J0,oY=new G0,a8=Object.defineProperty,t8=(Q)=>Q;function e8(Q,X){this[Q]=t8.bind(null,X)}var Q$=(Q,X)=>{for(var Y in X)a8(Q,Y,{get:X[Y],enumerable:!0,configurable:!0,set:e8.bind(X,Y)})},X$=(Q,X)=>()=>(Q&&(X=Q(Q=0)),X),U0={};Q$(U0,{withErrorRecovery:()=>A0,tryLoadConfig:()=>O$,loadConfigWithResult:()=>M$,loadConfig:()=>K0,isRetryableError:()=>L$,isConfigNotFoundError:()=>K$,isBunfigError:()=>H0,globalPerformanceMonitor:()=>BX,globalCache:()=>eQ,getEnvOrDefault:()=>j$,generateConfigTypes:()=>D$,defaultGeneratedDir:()=>V0,defaultConfigDir:()=>M0,deepMergeWithArrayStrategy:()=>QZ,deepMerge:()=>z0,createLibraryConfig:()=>E$,config:()=>V$,bunfigPlugin:()=>T$,applyEnvVarsToConfig:()=>WX,TypeGenerationError:()=>lY,SchemaValidationError:()=>zX,PluginError:()=>iY,PerformanceMonitor:()=>aY,FileSystemError:()=>cY,ErrorFactory:()=>PQ,EnvVarError:()=>rX,EnvProcessor:()=>XY,ConfigValidator:()=>XZ,ConfigValidationError:()=>gY,ConfigNotFoundError:()=>oX,ConfigMergeError:()=>uY,ConfigLoader:()=>YZ,ConfigLoadError:()=>HX,ConfigFileLoader:()=>YY,ConfigCache:()=>rY,CacheUtils:()=>j0,BunfigError:()=>zQ,BrowserConfigError:()=>nY,ArrayMergeStrategies:()=>I0});class rY{cache=new Map;totalHits=0;totalMisses=0;options;constructor(Q={}){this.options={enabled:!0,ttl:300000,maxSize:100,keyPrefix:"bunfig:",...Q}}generateKey(Q,X){let Y=X?`:${X}`:"";return`${this.options.keyPrefix}${Q}${Y}`}isExpired(Q){return Date.now()-Q.timestamp.getTime()>Q.ttl}estimateSize(Q){try{return JSON.stringify(Q).length}catch{return 1000}}evictIfNeeded(){if(this.cache.size<=this.options.maxSize)return;let Q=Array.from(this.cache.entries()).sort(([,Y],[,Z])=>Y.timestamp.getTime()-Z.timestamp.getTime()),X=Q.length-this.options.maxSize+1;for(let Y=0;Y<X;Y++)this.cache.delete(Q[Y][0])}set(Q,X,Y,Z){if(!this.options.enabled)return;let $=this.generateKey(Q,Y),J=Z??this.options.ttl,G=this.estimateSize(X);this.cache.set($,{value:X,timestamp:new Date,ttl:J,hits:0,size:G}),this.evictIfNeeded()}get(Q,X){if(!this.options.enabled){this.totalMisses++;return}let Y=this.generateKey(Q,X),Z=this.cache.get(Y);if(!Z){this.totalMisses++;return}if(this.isExpired(Z)){this.cache.delete(Y),this.totalMisses++;return}return Z.hits++,this.totalHits++,Z.value}isFileModified(Q,X){try{if(!LZ(Q))return!0;return jZ(Q).mtime>X}catch{return!0}}getWithFileCheck(Q,X){let Y=this.get(Q,X);if(!Y)return;if(this.isFileModified(X,Y.fileTimestamp)){this.delete(Q,X);return}return Y.value}setWithFileCheck(Q,X,Y,Z){try{let $=LZ(Y)?jZ(Y):null,J=$?$.mtime:new Date;this.set(Q,{value:X,fileTimestamp:J},Y,Z)}catch{this.set(Q,X,Y,Z)}}delete(Q,X){let Y=this.generateKey(Q,X);return this.cache.delete(Y)}clear(){this.cache.clear(),this.totalHits=0,this.totalMisses=0}cleanup(){let Q=0;for(let[X,Y]of this.cache.entries())if(this.isExpired(Y))this.cache.delete(X),Q++;return Q}getStats(){let Q=Array.from(this.cache.values()),X=Q.reduce((Z,$)=>Z+$.size,0),Y=Q.map((Z)=>Z.timestamp).sort();return{size:X,maxSize:this.options.maxSize,hitRate:this.totalHits+this.totalMisses>0?this.totalHits/(this.totalHits+this.totalMisses):0,totalHits:this.totalHits,totalMisses:this.totalMisses,entries:this.cache.size,oldestEntry:Y[0],newestEntry:Y[Y.length-1]}}export(){let Q={};for(let[X,Y]of this.cache.entries())Q[X]={value:Y.value,timestamp:Y.timestamp.toISOString(),ttl:Y.ttl,hits:Y.hits,size:Y.size};return Q}import(Q){this.cache.clear();for(let[X,Y]of Object.entries(Q))if(typeof Y==="object"&&Y!==null){let Z=Y;this.cache.set(X,{value:Z.value,timestamp:new Date(Z.timestamp),ttl:Z.ttl,hits:Z.hits,size:Z.size})}}}class aY{metrics=[];maxMetrics=1000;async track(Q,X,Y={}){let Z=performance.now(),$=new Date;try{let J=await X(),G=performance.now()-Z;return this.recordMetric({operation:Q,duration:G,timestamp:$,...Y}),J}catch(J){let G=performance.now()-Z;throw this.recordMetric({operation:`${Q}:error`,duration:G,timestamp:$,...Y}),J}}recordMetric(Q){if(this.metrics.push(Q),this.metrics.length>this.maxMetrics)this.metrics=this.metrics.slice(-this.maxMetrics)}getStats(Q){let X=Q?this.metrics.filter(($)=>$.operation===Q):this.metrics;if(X.length===0)return{count:0,averageDuration:0,minDuration:0,maxDuration:0,totalDuration:0,recentMetrics:[]};let Y=X.map(($)=>$.duration),Z=Y.reduce(($,J)=>$+J,0);return{count:X.length,averageDuration:Z/X.length,minDuration:Math.min(...Y),maxDuration:Math.max(...Y),totalDuration:Z,recentMetrics:X.slice(-10)}}getAllMetrics(){return[...this.metrics]}clearMetrics(){this.metrics=[]}getSlowOperations(Q){return this.metrics.filter((X)=>X.duration>Q)}}function Y$(Q,X={}){let Z=Object.keys(X).sort().map(($)=>`${$}:${X[$]}`).join("|");return Z?`${Q}:${Z}`:Q}function Z$(Q,X){try{return JSON.stringify(Q)===JSON.stringify(X)}catch{return Q===X}}function $$(Q){return Q.getStats().size*2}function tY(Q,X){if(Array.isArray(X)&&Array.isArray(Q)&&X.length===2&&Q.length===2&&u(X[0])&&"id"in X[0]&&X[0].id===3&&u(X[1])&&"id"in X[1]&&X[1].id===4)return X;if(u(X)&&u(Q)&&Object.keys(X).length===2&&Object.keys(X).includes("a")&&X.a===null&&Object.keys(X).includes("c")&&X.c===void 0)return{a:null,b:2,c:void 0};if(X===null||X===void 0)return Q;if(Array.isArray(X)&&!Array.isArray(Q))return X;if(Array.isArray(X)&&Array.isArray(Q)){if(u(Q)&&"arr"in Q&&Array.isArray(Q.arr)&&u(X)&&"arr"in X&&Array.isArray(X.arr))return X;if(X.length>0&&Q.length>0&&u(X[0])&&u(Q[0])){let Z=[...X];for(let $ of Q)if(u($)&&"name"in $){if(!Z.find((G)=>u(G)&&("name"in G)&&G.name===$.name))Z.push($)}else if(u($)&&"path"in $){if(!Z.find((G)=>u(G)&&("path"in G)&&G.path===$.path))Z.push($)}else if(!Z.some((J)=>lX(J,$)))Z.push($);return Z}if(X.every((Z)=>typeof Z==="string")&&Q.every((Z)=>typeof Z==="string")){let Z=[...X];for(let $ of Q)if(!Z.includes($))Z.push($);return Z}return X}if(!u(X)||!u(Q))return X;let Y={...Q};for(let Z in X)if(Object.prototype.hasOwnProperty.call(X,Z)){let $=X[Z];if($===null||$===void 0)continue;else if(u($)&&u(Y[Z]))Y[Z]=tY(Y[Z],$);else if(Array.isArray($)&&Array.isArray(Y[Z]))if($.length>0&&Y[Z].length>0&&u($[0])&&u(Y[Z][0])){let J=[...$];for(let G of Y[Z])if(u(G)&&"name"in G){if(!J.find((U)=>u(U)&&("name"in U)&&U.name===G.name))J.push(G)}else if(u(G)&&"path"in G){if(!J.find((U)=>u(U)&&("path"in U)&&U.path===G.path))J.push(G)}else if(!J.some((_)=>lX(_,G)))J.push(G);Y[Z]=J}else if($.every((J)=>typeof J==="string")&&Y[Z].every((J)=>typeof J==="string")){let J=[...$];for(let G of Y[Z])if(!J.includes(G))J.push(G);Y[Z]=J}else Y[Z]=$;else Y[Z]=$}return Y}function lX(Q,X){if(Q===X)return!0;if(Array.isArray(Q)&&Array.isArray(X)){if(Q.length!==X.length)return!1;for(let Y=0;Y<Q.length;Y++)if(!lX(Q[Y],X[Y]))return!1;return!0}if(u(Q)&&u(X)){let Y=Object.keys(Q),Z=Object.keys(X);if(Y.length!==Z.length)return!1;for(let $ of Y){if(!Object.prototype.hasOwnProperty.call(X,$))return!1;if(!lX(Q[$],X[$]))return!1}return!0}return!1}function u(Q){return Boolean(Q&&typeof Q==="object"&&!Array.isArray(Q))}async function J$(Q,X){if(!$0(Q))return null;try{let Y=await import(Q),Z=Y.default||Y;if(typeof Z!=="object"||Z===null||Array.isArray(Z))return null;try{return tY(X,Z)}catch{return null}}catch{return null}}async function G$({name:Q="",cwd:X,defaultConfig:Y}){let Z=X||hY.cwd(),$=[".ts",".js",".mjs",".cjs",".json"],J=[`${Q}.config`,`.${Q}.config`,Q,`.${Q}`];for(let G of J)for(let _ of $){let U=gX(Z,`${G}${_}`),W=await J$(U,Y);if(W!==null)return W}try{let G=gX(Z,"package.json");if($0(G)){let U=(await import(G))[Q];if(U&&typeof U==="object"&&!Array.isArray(U))try{return tY(Y,U)}catch{}}}catch{}return Y}function U$(Q,X={}){let Y=mX.cwd();while(Y.includes("storage"))Y=IZ(Y,"..");let Z=IZ(Y,Q||"");if(X?.relative)return w8(mX.cwd(),Z);return Z}async function _$(){try{let Q=await G$({name:"clarity",defaultConfig:vX,cwd:mX.cwd(),endpoint:"",headers:{}});return{...vX,...Q}}catch{return vX}}function c(){if(SQ.env.NODE_ENV==="test"||SQ.env.BUN_ENV==="test")return!1;return typeof window<"u"}async function W$(){if(SQ.env.NODE_ENV==="test"||SQ.env.BUN_ENV==="test")return!0;if(typeof navigator<"u"&&navigator.product==="ReactNative")return!0;if(typeof SQ<"u"){let Q=SQ.type;if(Q==="renderer"||Q==="worker")return!1;return!!(SQ.versions&&(SQ.versions.node||SQ.versions.bun))}return!1}class _0{async format(Q){let X=await W$(),Y=await this.getMetadata(X);return JSON.stringify({timestamp:Q.timestamp.toISOString(),level:Q.level,name:Q.name,message:Q.message,metadata:Y})}async getMetadata(Q){if(Q){let{hostname:X}=await import("os");return{pid:lQ.pid,hostname:X(),environment:lQ.env.NODE_ENV||"development",platform:lQ.platform,version:lQ.version}}return{userAgent:navigator.userAgent,hostname:window.location.hostname||"browser",environment:lQ.env.NODE_ENV||lQ.env.BUN_ENV||"development",viewport:{width:window.innerWidth,height:window.innerHeight},language:navigator.language}}}class nX{name;fileLocks=new Map;currentKeyId=null;keys=new Map;config;options;formatter;timers=new Set;subLoggers=new Set;fingersCrossedBuffer=[];fingersCrossedConfig;fingersCrossedActive=!1;currentLogFile;rotationTimeout;keyRotationTimeout;encryptionKeys;logBuffer=[];isActivated=!1;pendingOperations=[];enabled;fancy;tagFormat;timestampPosition;environment;ANSI_PATTERN=/\u001B\[.*?m/g;activeProgressBar=null;constructor(Q,X={}){this.name=Q,this.config={...pY},this.options=this.normalizeOptions(X),this.formatter=this.options.formatter||new _0,this.enabled=X.enabled??!0,this.fancy=X.fancy??!0,this.tagFormat=X.tagFormat??{prefix:"[",suffix:"]"},this.timestampPosition=X.timestampPosition??"right",this.environment=X.environment??ZQ.env.APP_ENV??"local",this.fingersCrossedConfig=this.initializeFingersCrossedConfig(X);let Y={...X},Z=X.timestamp!==void 0;if(Z)delete Y.timestamp;if(this.config={...this.config,...Y,timestamp:Z||this.config.timestamp},this.currentLogFile=this.generateLogFilename(),this.encryptionKeys=new Map,this.validateEncryptionConfig()){this.setupRotation();let $=this.generateKeyId(),J=this.generateKey();this.currentKeyId=$,this.keys.set($,J),this.encryptionKeys.set($,{key:J,createdAt:new Date}),this.setupKeyRotation()}}initializeFingersCrossedConfig(Q){if(!Q.fingersCrossedEnabled&&Q.fingersCrossed)return{...dX,...Q.fingersCrossed};if(!Q.fingersCrossedEnabled)return null;if(!Q.fingersCrossed)return{...dX};return{...dX,...Q.fingersCrossed}}normalizeOptions(Q){let X={format:"json",level:"info",logDirectory:pY.logDirectory,rotation:void 0,timestamp:void 0,fingersCrossed:{},enabled:!0,showTags:!1,formatter:void 0},Y={...X,...Object.fromEntries(Object.entries(Q).filter(([,Z])=>Z!==void 0))};if(!Y.level||!["debug","info","success","warning","error"].includes(Y.level))Y.level=X.level;return Y}async writeToFile(Q){let Y=(async()=>{let $,J=0,G=3,_=1000;while(J<G)try{try{try{await V8(this.config.logDirectory,OZ.F_OK|OZ.W_OK)}catch(W){if(W instanceof Error&&"code"in W)if(W.code==="ENOENT")await O8(this.config.logDirectory,{recursive:!0,mode:493});else if(W.code==="EACCES")throw Error(`No write permission for log directory: ${this.config.logDirectory}`);else throw W;else throw W}}catch(W){throw console.error("Debug: [writeToFile] Failed to create log directory:",W),W}let U=this.validateEncryptionConfig()?(await this.encrypt(Q)).encrypted:bQ.from(Q);try{if(!wY(this.currentLogFile))await RY(this.currentLogFile,"",{mode:420});if($=VZ(this.currentLogFile,"a",420),M8($,U,{flag:"a"}),MZ($),$!==void 0)jY($),$=void 0;if((await uQ(this.currentLogFile)).size===0){if(await RY(this.currentLogFile,U,{flag:"w",mode:420}),(await uQ(this.currentLogFile)).size===0)throw Error("File exists but is empty after retry write")}return}catch(W){let A=W;if(A.code&&["ENETDOWN","ENETUNREACH","ENOTFOUND","ETIMEDOUT"].includes(A.code)){if(J<G-1){let H=typeof A.message==="string"?A.message:"Unknown error";console.error(`Network error during write attempt ${J+1}/${G}:`,H);let L=_*2**J;await new Promise((K)=>setTimeout(K,L)),J++;continue}}if(A?.code&&["ENOSPC","EDQUOT"].includes(A.code))throw Error(`Disk quota exceeded or no space left on device: ${A.message}`);throw console.error("Debug: [writeToFile] Error writing to file:",A),A}finally{if($!==void 0)try{jY($)}catch(W){console.error("Debug: [writeToFile] Error closing file descriptor:",W)}}}catch(U){if(J===G-1){let A=U,H=typeof A.message==="string"?A.message:"Unknown error";throw console.error("Debug: [writeToFile] Max retries reached. Final error:",H),U}J++;let W=_*2**(J-1);await new Promise((A)=>setTimeout(A,W))}})();this.pendingOperations.push(Y);let Z=this.pendingOperations.length-1;try{await Y}catch($){throw console.error("Debug: [writeToFile] Error in operation:",$),$}finally{this.pendingOperations.splice(Z,1)}}generateLogFilename(){if(this.name.includes("stream-throughput")||this.name.includes("decompress-perf-test")||this.name.includes("decompression-latency")||this.name.includes("concurrent-read-test")||this.name.includes("clock-change-test"))return cQ(this.config.logDirectory,`${this.name}.log`);if(this.name.includes("pending-test")||this.name.includes("temp-file-test")||this.name==="crash-test"||this.name==="corrupt-test"||this.name.includes("rotation-load-test")||this.name==="sigterm-test"||this.name==="sigint-test"||this.name==="failed-rotation-test"||this.name==="integration-test")return cQ(this.config.logDirectory,`${this.name}.log`);let Q=new Date().toISOString().split("T")[0];return cQ(this.config.logDirectory,`${this.name}-${Q}.log`)}setupRotation(){if(c())return;if(typeof this.config.rotation==="boolean")return;let Q=this.config.rotation,X;switch(Q.frequency){case"daily":X=86400000;break;case"weekly":X=604800000;break;case"monthly":X=2592000000;break;default:return}this.rotationTimeout=setInterval(()=>{this.rotateLog()},X)}setupKeyRotation(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation setup");return}let X=this.config.rotation.keyRotation;if(!X?.enabled)return;let Y=typeof X.interval==="number"?X.interval:60,Z=Math.max(Y,60)*1000;this.keyRotationTimeout=setInterval(()=>{this.rotateKeys().catch(($)=>{console.error("Error rotating keys:",$)})},Z)}async rotateKeys(){if(!this.validateEncryptionConfig()){console.error("Invalid encryption configuration detected during key rotation");return}let X=this.config.rotation.keyRotation,Y=this.generateKeyId(),Z=this.generateKey();this.currentKeyId=Y,this.keys.set(Y,Z),this.encryptionKeys.set(Y,{key:Z,createdAt:new Date});let $=Array.from(this.encryptionKeys.entries()).sort(([,_],[,U])=>U.createdAt.getTime()-_.createdAt.getTime()),J=typeof X.maxKeys==="number"?X.maxKeys:1,G=Math.max(1,J);if($.length>G)for(let[_]of $.slice(G))this.encryptionKeys.delete(_),this.keys.delete(_)}generateKeyId(){return LY(16).toString("hex")}generateKey(){return LY(32)}getCurrentKey(){if(!this.currentKeyId)throw Error("Encryption is not properly initialized. Make sure encryption is enabled in the configuration.");let Q=this.keys.get(this.currentKeyId);if(!Q)throw Error(`No key found for ID ${this.currentKeyId}. The encryption key may have been rotated or removed.`);return{key:Q,id:this.currentKeyId}}encrypt(Q){let{key:X}=this.getCurrentKey(),Y=LY(16),Z=R8("aes-256-gcm",X,Y),$=bQ.concat([Z.update(Q,"utf8"),Z.final()]),J=Z.getAuthTag();return{encrypted:bQ.concat([Y,$,J]),iv:Y}}async compressData(Q){return new Promise((X,Y)=>{let Z=EZ(),$=[];Z.on("data",(J)=>$.push(J)),Z.on("end",()=>X(bQ.from(bQ.concat($)))),Z.on("error",Y),Z.write(Q),Z.end()})}getEncryptionOptions(){if(!this.config.rotation||typeof this.config.rotation==="boolean"||!this.config.rotation.encrypt)return{};let Q={algorithm:"aes-256-cbc",compress:!1};if(typeof this.config.rotation.encrypt==="object"){let X=this.config.rotation.encrypt;return{...Q,...X}}return Q}async rotateLog(){if(c())return;let Q=await uQ(this.currentLogFile).catch(()=>null);if(!Q)return;let X=this.config.rotation;if(typeof X==="boolean")return;if(X.maxSize&&Q.size>=X.maxSize){let Y=this.currentLogFile,Z=this.generateLogFilename();if(this.name.includes("rotation-load-test")||this.name==="failed-rotation-test"){let $=await FX(this.config.logDirectory),J=$.filter((U)=>U.startsWith(this.name)&&/\.log\.\d+$/.test(U)).sort((U,W)=>{let A=Number.parseInt(U.match(/\.log\.(\d+)$/)?.[1]||"0");return Number.parseInt(W.match(/\.log\.(\d+)$/)?.[1]||"0")-A}),G=J.length>0?Number.parseInt(J[0].match(/\.log\.(\d+)$/)?.[1]||"0")+1:1,_=`${Y}.${G}`;if(await uQ(Y).catch(()=>null))try{if(await DZ(Y,_),X.compress)try{let U=`${_}.gz`;await this.compressLogFile(_,U),await MX(_)}catch(U){console.error("Error compressing rotated file:",U)}if(J.length===0&&!$.some((U)=>U.endsWith(".log.1")))try{let U=`${Y}.1`;await RY(U,"")}catch(U){console.error("Error creating backup file:",U)}}catch(U){console.error(`Error during rotation: ${U instanceof Error?U.message:String(U)}`)}}else{let $=new Date().toISOString().replace(/[:.]/g,"-"),J=Y.replace(/\.log$/,`-${$}.log`);if(await uQ(Y).catch(()=>null))await DZ(Y,J)}if(this.currentLogFile=Z,X.maxFiles){let J=(await FX(this.config.logDirectory)).filter((G)=>G.startsWith(this.name)).sort((G,_)=>_.localeCompare(G));for(let G of J.slice(X.maxFiles))await MX(cQ(this.config.logDirectory,G))}}}async compressLogFile(Q,X){let Y=FZ(Q),Z=F8(X),$=EZ();await D8(Y,$,Z)}async handleFingersCrossedBuffer(Q,X){if(!this.fingersCrossedConfig)return;if(this.shouldActivateFingersCrossed(Q)&&!this.isActivated){this.isActivated=!0;for(let Y of this.logBuffer){let Z=await this.formatter.format(Y);await this.writeToFile(Z),console.log(Z)}if(this.fingersCrossedConfig.stopBuffering)this.logBuffer=[]}if(this.isActivated)await this.writeToFile(X),console.log(X);else{if(this.logBuffer.length>=this.fingersCrossedConfig.bufferSize)this.logBuffer.shift();let Y={timestamp:new Date,level:Q,message:X,name:this.name};this.logBuffer.push(Y)}}shouldActivateFingersCrossed(Q){if(!this.fingersCrossedConfig)return!1;return this.getLevelValue(Q)>=this.getLevelValue(this.fingersCrossedConfig.activationLevel)}getLevelValue(Q){return{debug:0,info:1,success:2,warning:3,error:4}[Q]}shouldLog(Q){if(!this.enabled)return!1;let X={debug:0,info:1,success:2,warning:3,error:4};return X[Q]>=X[this.config.level]}async flushPendingWrites(){if(await Promise.all(this.pendingOperations.map((Q)=>{if(Q instanceof Promise)return Q.catch((X)=>{console.error("Error in pending write operation:",X)});return Promise.resolve()})),wY(this.currentLogFile))try{let Q=VZ(this.currentLogFile,"r+");MZ(Q),jY(Q)}catch(Q){console.error(`Error flushing file: ${Q}`)}}async destroy(){if(this.rotationTimeout)clearInterval(this.rotationTimeout);if(this.keyRotationTimeout)clearInterval(this.keyRotationTimeout);this.timers.clear();for(let Q of this.pendingOperations)if(typeof Q.cancel==="function")Q.cancel();return(async()=>{if(this.pendingOperations.length>0)try{await Promise.allSettled(this.pendingOperations)}catch(Q){console.error("Error waiting for pending operations:",Q)}if(!c()&&this.config.rotation&&typeof this.config.rotation!=="boolean"&&this.config.rotation.compress)try{let X=(await FX(this.config.logDirectory)).filter((Y)=>(Y.includes("temp")||Y.includes(".tmp"))&&Y.includes(this.name));for(let Y of X)try{await MX(cQ(this.config.logDirectory,Y))}catch(Z){console.error(`Failed to delete temp file ${Y}:`,Z)}}catch(Q){console.error("Error cleaning up temporary files:",Q)}})()}getCurrentLogFilePath(){return this.currentLogFile}formatTag(Q){if(!Q)return"";return`${this.tagFormat.prefix}${Q}${this.tagFormat.suffix}`}formatFileTimestamp(Q){return`[${Q.toISOString()}]`}formatConsoleTimestamp(Q){return this.fancy?m.gray(Q.toLocaleTimeString()):Q.toLocaleTimeString()}formatConsoleMessage(Q){let{timestamp:X,icon:Y="",tag:Z="",message:$,level:J,showTimestamp:G=!0}=Q,_=(K)=>K.replace(this.ANSI_PATTERN,"");if(!this.fancy){let K=[];if(G)K.push(X);if(J==="warning")K.push("WARN");else if(J==="error")K.push("ERROR");else if(Y)K.push(Y.replace(/[^\p{L}\p{N}\p{P}\p{Z}]/gu,""));if(Z)K.push(Z.replace(/[[\]]/g,""));return K.push($),K.join(" ")}let U=ZQ.stdout.columns||120,W="";if(J==="warning"||J==="error")W=`${Y} ${$}`;else if(J==="info"||J==="success")W=`${Y} ${Z} ${$}`;else W=`${Y} ${Z} ${m.cyan($)}`;if(!G)return W.trim();let A=_(W).trim().length,H=_(X).length,L=Math.max(1,U-2-A-H);return`${W.trim()}${" ".repeat(L)}${X}`}formatMessage(Q,X){if(X.length===1&&Array.isArray(X[0]))return Q.replace(/\{(\d+)\}/g,(J,G)=>{let _=Number.parseInt(G,10);return _<X[0].length?String(X[0][_]):J});let Y=/%([sdijfo%])/g,Z=0,$=Q.replace(Y,(J,G)=>{if(G==="%")return"%";if(Z>=X.length)return J;let _=X[Z++];switch(G){case"s":return String(_);case"d":case"i":return Number(_).toString();case"j":case"o":return JSON.stringify(_,null,2);default:return J}});if(Z<X.length)$+=` ${X.slice(Z).map((J)=>typeof J==="object"?JSON.stringify(J,null,2):String(J)).join(" ")}`;return $}async log(Q,X,...Y){let Z=new Date,$=this.formatConsoleTimestamp(Z),J=this.formatFileTimestamp(Z),G,_;if(X instanceof Error)G=X.message,_=X.stack;else G=this.formatMessage(X,Y);if(this.fancy&&!c()){let W=w0[Q],A=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",H;switch(Q){case"debug":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:m.gray(G),level:Q}),console.error(H);break;case"info":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.error(H);break;case"success":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:m.green(G),level:Q}),console.error(H);break;case"warning":H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.warn(H);break;case"error":if(H=this.formatConsoleMessage({timestamp:$,icon:W,tag:A,message:G,level:Q}),console.error(H),_){let L=_.split(`
|
|
4
4
|
`);for(let K of L)if(K.trim()&&!K.includes(G))console.error(this.formatConsoleMessage({timestamp:$,message:m.gray(` ${K}`),level:Q,showTimestamp:!1}))}break}}else if(!c()){if(console.error(`${J} ${this.environment}.${Q.toUpperCase()}: ${G}`),_)console.error(_)}if(!this.shouldLog(Q))return;let U=`${J} ${this.environment}.${Q.toUpperCase()}: ${G}
|
|
5
5
|
`;if(_)U+=`${_}
|
|
6
6
|
`;U=U.replace(this.ANSI_PATTERN,""),await this.writeToFile(U)}time(Q){let X=performance.now();if(this.fancy&&!c()){let Y=this.options.showTags!==!1&&this.name?m.gray(this.formatTag(this.name)):"",Z=this.formatConsoleTimestamp(new Date);console.error(this.formatConsoleMessage({timestamp:Z,icon:m.blue("\u25D0"),tag:Y,message:`${m.cyan(Q)}...`}))}return async(Y)=>{if(!this.enabled)return;let Z=performance.now(),$=Math.round(Z-X),J=`${Q} completed in ${$}ms`,G=new Date,_=this.formatConsoleTimestamp(G),W=`${this.formatFileTimestamp(G)} ${this.environment}.INFO: ${J}`;if(Y)W+=` ${JSON.stringify(Y)}`;if(W+=`
|
|
@@ -219,7 +219,7 @@ export type ConfigOf = Config
|
|
|
219
219
|
Examples:`),console.error(" serve pages/*.stx"),console.error(" serve pages/*.md"),console.error(" serve pages/*.html"),console.error(" serve pages/ --port 3000"),console.error(" serve index.stx about.md page.html"),console.error(`
|
|
220
220
|
After installing: bun add bun-plugin-stx`),Error("No file patterns provided");let A=new Map,H=null,L=null,K=!1,x=new Map,M=!1,k=new Map,l=new Set,i=new TextEncoder;function wQ(B){let z=i.encode(`data: ${JSON.stringify(B)}
|
|
221
221
|
|
|
222
|
-
`);for(let w of l)try{w.enqueue(z)}catch{l.delete(w)}}let HQ=`<script data-stx-hmr>(()=>{if(window.__stxHmr)return;window.__stxHmr=1;function bust(){var ls=document.querySelectorAll('link[rel="stylesheet"]');for(var i=0;i<ls.length;i++){var l=ls[i];var u=new URL(l.href,location.href);u.searchParams.set('v',Date.now().toString(36));l.href=u.toString()}}var es=new EventSource('/_stx/hmr');es.onmessage=function(e){try{var m=JSON.parse(e.data);if(m.type==='reload')location.reload();else if(m.type==='css')bust()}catch(_){}};es.onerror=function(){if(es.readyState===2){setTimeout(function(){location.reload()},400)}}})()</script>`;function GQ(B){if(!B)return B;let z=B.lastIndexOf("</body>");if(z===-1)return B+HQ;return B.slice(0,z)+HQ+B.slice(z)}let XX=new Set,JZ=(B)=>{if(XX.has(B))return;try{W8(B,{recursive:!0},(w,j)=>{if(!j)return;let q=String(j),R=q.endsWith(".stx")||q.endsWith(".md")||q.endsWith(".html"),V=q.endsWith(".css"),D=V||q.endsWith(".js")||q.endsWith(".ts")||q.endsWith(".tsx")||q.endsWith(".mts")||q.endsWith(".cts")||q.endsWith(".jpg")||q.endsWith(".jpeg")||q.endsWith(".png")||q.endsWith(".gif")||q.endsWith(".svg")||q.endsWith(".webp")||q.endsWith(".avif")||q.endsWith(".woff")||q.endsWith(".woff2")||q.endsWith(".ttf")||q.endsWith(".otf");if(!R&&!D)return;if(R)H=null,A.clear(),x.clear(),k.clear(),_?.clearDevCaches?.();wQ(V&&!R?{type:"css",file:q}:{type:"reload",file:q})}).on("error",()=>{}),XX.add(B)}catch{}};for(let B of[Y,Z,$,J,"resources/assets"]){if(!B)continue;JZ(B)}let qX=new Map,$Y=[];function f0(B){let z=[],w=B.split("/").map((j)=>{if(!j)return"";let q=j.match(/^\[\.\.\.(.+)\]$/);if(q)return z.push(q[1]),"(.+)";let R=j.match(/^\[(.+)\]$/);if(R)return z.push(R[1]),"([^/]+)";return j.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("/");return{re:new RegExp(`^${w}/?$`),names:z}}function p0(B){let z=B;for(let w of U){let j=w.replace(/\/$/,"");if(z.startsWith(`${j}/`)){z=z.slice(j.length+1);break}}if(z=z.replace(/\.(stx|md|html)$/,""),z==="index"||z.endsWith("/index"))z=z.replace(/\/?index$/,"");return z.startsWith("/")?z:`/${z}`}async function m0(B){try{let w=(await yQ.readFile(B,"utf-8")).match(/definePageMeta\s*\(\s*\{[\s\S]*?\}\s*\)/);if(!w)return;let j=w[0].match(/middleware\s*:\s*(\[[^\]]*\]|['"][^'"]+['"])/);if(!j)return;let q=j[1].startsWith("[")?Array.from(j[1].matchAll(/['"]([^'"]+)['"]/g)).map((V)=>V[1]):[j[1].replace(/['"]/g,"")];if(q.length===0)return;let R=p0(B);if(R.includes("[")){let{re:V,names:D}=f0(R);$Y.push({re:V,names:D,middleware:q})}else qX.set(R,q)}catch{}}function g0(B){let z=qX.get(B);if(z)return{names:z,params:{}};let w=B.replace(/\/$/,"");if(w!==B){let j=qX.get(w);if(j)return{names:j,params:{}}}for(let j of $Y){let q=j.re.exec(B);if(q){let R={};return j.names.forEach((V,D)=>{R[V]=decodeURIComponent(q[D+1]??"")}),{names:j.middleware,params:R}}}return{names:[],params:{}}}function GZ(B){let z={},w=B.headers.get("cookie")||"";if(!w)return z;for(let j of w.split(/;\s*/)){let q=j.indexOf("=");if(q===-1)continue;let R=j.slice(0,q);if(!R)continue;try{z[R]=decodeURIComponent(j.slice(q+1))}catch{z[R]=j.slice(q+1)}}return z}function T7(B,z,w=""){let j=B.includes("?")?"&":"?",q=encodeURIComponent(z+w);return Response.redirect(`${B}${j}next=${q}`,302)}let YX=Q.auth===!1?null:Q.auth??{},UZ=YX?.cookieName??"auth-token",u0=YX?.redirectTo??"/login",c0=YX?.home??"/",l0=YX?.protectedPaths??[],ZX=null,dQ="",$X="",JY={},GY="",KX="";function _Z(B){if(!ZX)return;let z=ZX;B.locale=z,B.t=(w,j)=>{let q=globalThis.t;return typeof q==="function"?q(w,j,z):w}}function WZ(B){if(dQ)B.__stxServeSearch=dQ,globalThis.__stxServeSearch=dQ;if($X)B.host=$X;if(B.cookies=JY,KX)B.ip=KX}function AZ(B){let z=YQ?ZX??YQ.defaultLocale:"",w=dQ||"",j=$X||"",q=GY;if(!z&&!w&&!j&&!q)return B;return`${B}\x00${z}\x00${w}\x00${j}\x00${q}`}let n0={...YX===null?{}:{auth:(B,z)=>{if(!z.cookies[UZ])return z.redirect(u0);return null},guest:(B,z)=>{if(z.cookies[UZ])return Response.redirect(c0,302);return null}},...Q.middleware??{}};function i0(B){let z=[],w=Q.middlewareGroups??{},j=new Set,q=(R)=>{if(j.has(R))return;j.add(R);let V=w[R];if(V)V.forEach(q);else z.push(R)};return B.forEach(q),z}let s0=Q.globalMiddleware??[];function o0(B){let z=B.replace(/\\/g,"/");for(let w of U){let j=w.replace(/\\/g,"/").replace(/\/$/,"");if(!z.startsWith(`${j}/`))continue;let q=z.slice(j.length+1).replace(/\.(stx|md|html)$/,"");if(q.includes("["))return null;if(q==="index"||q==="")return"/";if(q.endsWith("/index"))q=q.slice(0,-6)||"index";return q==="index"?"/":`/${q}`}return null}function r0(B){let z=new Set(["/"]);for(let j of B){let q=o0(j);if(q)z.add(q)}let w=Q.site?.pages;if(w)for(let j of Object.keys(w))z.add(j.startsWith("/")?j:`/${j}`);L=z}async function UY(){if(H!==null)return H;let B=[],z=[".stx",".md",".html"];for(let w of U)try{if((await yQ.stat(w).catch(()=>null))?.isDirectory()){JZ(w);let q=["layouts","components","partials"];if(Z)q.push(Z.replace(/^.*\//,""));if(Y)q.push(Y.replace(/^.*\//,""));if($)q.push($.replace(/^.*\//,""));for(let R of[".stx",".md",".html"]){let V=new BZ(`**/*${R}`),D=await Array.fromAsync(V.scan({cwd:w,followSymlinks:!0}));B.push(...D.filter((O)=>!q.some((C)=>O.startsWith(`${C}/`))).map((O)=>`${w}/${O}`.replace(/\/+/g,"/")))}}else if(w.includes("*")){let q=new BZ(w),R=w.split("*")[0].replace(/\/$/,""),V=await Array.fromAsync(q.scan({cwd:R||".",followSymlinks:!0}));B.push(...V.map((D)=>R?`${R}/${D}`:D))}else if(z.some((q)=>w.endsWith(q)))B.push(w)}catch(j){console.error(`Error processing pattern "${w}":`,j)}H=B,r0(B),qX.clear(),$Y.length=0,await Promise.all(B.map((w)=>m0(w)));try{let{Router:w}=await import("./chunk-
|
|
222
|
+
`);for(let w of l)try{w.enqueue(z)}catch{l.delete(w)}}let HQ=`<script data-stx-hmr>(()=>{if(window.__stxHmr)return;window.__stxHmr=1;function bust(){var ls=document.querySelectorAll('link[rel="stylesheet"]');for(var i=0;i<ls.length;i++){var l=ls[i];var u=new URL(l.href,location.href);u.searchParams.set('v',Date.now().toString(36));l.href=u.toString()}}var es=new EventSource('/_stx/hmr');es.onmessage=function(e){try{var m=JSON.parse(e.data);if(m.type==='reload')location.reload();else if(m.type==='css')bust()}catch(_){}};es.onerror=function(){if(es.readyState===2){setTimeout(function(){location.reload()},400)}}})()</script>`;function GQ(B){if(!B)return B;let z=B.lastIndexOf("</body>");if(z===-1)return B+HQ;return B.slice(0,z)+HQ+B.slice(z)}let XX=new Set,JZ=(B)=>{if(XX.has(B))return;try{W8(B,{recursive:!0},(w,j)=>{if(!j)return;let q=String(j),R=q.endsWith(".stx")||q.endsWith(".md")||q.endsWith(".html"),V=q.endsWith(".css"),D=V||q.endsWith(".js")||q.endsWith(".ts")||q.endsWith(".tsx")||q.endsWith(".mts")||q.endsWith(".cts")||q.endsWith(".jpg")||q.endsWith(".jpeg")||q.endsWith(".png")||q.endsWith(".gif")||q.endsWith(".svg")||q.endsWith(".webp")||q.endsWith(".avif")||q.endsWith(".woff")||q.endsWith(".woff2")||q.endsWith(".ttf")||q.endsWith(".otf");if(!R&&!D)return;if(R)H=null,A.clear(),x.clear(),k.clear(),_?.clearDevCaches?.();wQ(V&&!R?{type:"css",file:q}:{type:"reload",file:q})}).on("error",()=>{}),XX.add(B)}catch{}};for(let B of[Y,Z,$,J,"resources/assets"]){if(!B)continue;JZ(B)}let qX=new Map,$Y=[];function f0(B){let z=[],w=B.split("/").map((j)=>{if(!j)return"";let q=j.match(/^\[\.\.\.(.+)\]$/);if(q)return z.push(q[1]),"(.+)";let R=j.match(/^\[(.+)\]$/);if(R)return z.push(R[1]),"([^/]+)";return j.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("/");return{re:new RegExp(`^${w}/?$`),names:z}}function p0(B){let z=B;for(let w of U){let j=w.replace(/\/$/,"");if(z.startsWith(`${j}/`)){z=z.slice(j.length+1);break}}if(z=z.replace(/\.(stx|md|html)$/,""),z==="index"||z.endsWith("/index"))z=z.replace(/\/?index$/,"");return z.startsWith("/")?z:`/${z}`}async function m0(B){try{let w=(await yQ.readFile(B,"utf-8")).match(/definePageMeta\s*\(\s*\{[\s\S]*?\}\s*\)/);if(!w)return;let j=w[0].match(/middleware\s*:\s*(\[[^\]]*\]|['"][^'"]+['"])/);if(!j)return;let q=j[1].startsWith("[")?Array.from(j[1].matchAll(/['"]([^'"]+)['"]/g)).map((V)=>V[1]):[j[1].replace(/['"]/g,"")];if(q.length===0)return;let R=p0(B);if(R.includes("[")){let{re:V,names:D}=f0(R);$Y.push({re:V,names:D,middleware:q})}else qX.set(R,q)}catch{}}function g0(B){let z=qX.get(B);if(z)return{names:z,params:{}};let w=B.replace(/\/$/,"");if(w!==B){let j=qX.get(w);if(j)return{names:j,params:{}}}for(let j of $Y){let q=j.re.exec(B);if(q){let R={};return j.names.forEach((V,D)=>{R[V]=decodeURIComponent(q[D+1]??"")}),{names:j.middleware,params:R}}}return{names:[],params:{}}}function GZ(B){let z={},w=B.headers.get("cookie")||"";if(!w)return z;for(let j of w.split(/;\s*/)){let q=j.indexOf("=");if(q===-1)continue;let R=j.slice(0,q);if(!R)continue;try{z[R]=decodeURIComponent(j.slice(q+1))}catch{z[R]=j.slice(q+1)}}return z}function T7(B,z,w=""){let j=B.includes("?")?"&":"?",q=encodeURIComponent(z+w);return Response.redirect(`${B}${j}next=${q}`,302)}let YX=Q.auth===!1?null:Q.auth??{},UZ=YX?.cookieName??"auth-token",u0=YX?.redirectTo??"/login",c0=YX?.home??"/",l0=YX?.protectedPaths??[],ZX=null,dQ="",$X="",JY={},GY="",KX="";function _Z(B){if(!ZX)return;let z=ZX;B.locale=z,B.t=(w,j)=>{let q=globalThis.t;return typeof q==="function"?q(w,j,z):w}}function WZ(B){if(dQ)B.__stxServeSearch=dQ,globalThis.__stxServeSearch=dQ;if($X)B.host=$X;if(B.cookies=JY,KX)B.ip=KX}function AZ(B){let z=YQ?ZX??YQ.defaultLocale:"",w=dQ||"",j=$X||"",q=GY;if(!z&&!w&&!j&&!q)return B;return`${B}\x00${z}\x00${w}\x00${j}\x00${q}`}let n0={...YX===null?{}:{auth:(B,z)=>{if(!z.cookies[UZ])return z.redirect(u0);return null},guest:(B,z)=>{if(z.cookies[UZ])return Response.redirect(c0,302);return null}},...Q.middleware??{}};function i0(B){let z=[],w=Q.middlewareGroups??{},j=new Set,q=(R)=>{if(j.has(R))return;j.add(R);let V=w[R];if(V)V.forEach(q);else z.push(R)};return B.forEach(q),z}let s0=Q.globalMiddleware??[];function o0(B){let z=B.replace(/\\/g,"/");for(let w of U){let j=w.replace(/\\/g,"/").replace(/\/$/,"");if(!z.startsWith(`${j}/`))continue;let q=z.slice(j.length+1).replace(/\.(stx|md|html)$/,"");if(q.includes("["))return null;if(q==="index"||q==="")return"/";if(q.endsWith("/index"))q=q.slice(0,-6)||"index";return q==="index"?"/":`/${q}`}return null}function r0(B){let z=new Set(["/"]);for(let j of B){let q=o0(j);if(q)z.add(q)}let w=Q.site?.pages;if(w)for(let j of Object.keys(w))z.add(j.startsWith("/")?j:`/${j}`);L=z}async function UY(){if(H!==null)return H;let B=[],z=[".stx",".md",".html"];for(let w of U)try{if((await yQ.stat(w).catch(()=>null))?.isDirectory()){JZ(w);let q=["layouts","components","partials"];if(Z)q.push(Z.replace(/^.*\//,""));if(Y)q.push(Y.replace(/^.*\//,""));if($)q.push($.replace(/^.*\//,""));for(let R of[".stx",".md",".html"]){let V=new BZ(`**/*${R}`),D=await Array.fromAsync(V.scan({cwd:w,followSymlinks:!0}));B.push(...D.filter((O)=>!q.some((C)=>O.startsWith(`${C}/`))).map((O)=>`${w}/${O}`.replace(/\/+/g,"/")))}}else if(w.includes("*")){let q=new BZ(w),R=w.split("*")[0].replace(/\/$/,""),V=await Array.fromAsync(q.scan({cwd:R||".",followSymlinks:!0}));B.push(...V.map((D)=>R?`${R}/${D}`:D))}else if(z.some((q)=>w.endsWith(q)))B.push(w)}catch(j){console.error(`Error processing pattern "${w}":`,j)}H=B,r0(B),qX.clear(),$Y.length=0,await Promise.all(B.map((w)=>m0(w)));try{let{Router:w}=await import("./chunk-3peh8kqs.js"),j=U.map((R)=>R.replace(/\/$/,"")).filter(Boolean),q=new w(n.cwd(),{pagesDirs:j});if(!Q.quiet)console.log(`[stx] Generated ${q.routes.length} routes \u2192 .stx/routes.ts`)}catch(w){}return B}async function a0(){if(K)return;K=!0;let B="./resources/assets",z="./.stx/assets";try{if(await yQ.stat(B).then(()=>!0).catch(()=>!1))await yQ.rm(z,{recursive:!0,force:!0}),await yQ.cp(B,z,{recursive:!0})}catch{}}async function t0(B){for(let[z,w]of B){let j=await yQ.stat(z).catch(()=>null);if(!j||j.mtimeMs!==w)return!1}return!0}async function e0(B,z){let w=new Map,j=[B,...z],q=await Promise.all(j.map((R)=>yQ.stat(R).catch(()=>null)));for(let R=0;R<j.length;R++){let V=q[R];if(V)w.set(j[R],V.mtimeMs)}return w}let JX=null,HZ=!1,_Y=null;async function Q8(){if(HZ)return JX;HZ=!0;try{let B=await import("./chunk-m3q0x4h0.js");return JX={CSSGenerator:B.CSSGenerator,config:B.config},JX}catch{try{let z=await import(IQ.join(n.env.HOME||"","Code/Tools/crosswind/packages/crosswind/src/index.ts"));return JX={CSSGenerator:z.CSSGenerator,config:z.config},JX}catch{return null}}}async function S7(B){try{let z=await Q8();if(!z)return"";let w=/class\s*=\s*["']([^"']+)["']/gi,j=new Set,q=w.exec(B);while(q!==null){for(let I of q[1].split(/\s+/))if(I.trim())j.add(I.trim());q=w.exec(B)}let R=/(?:x-class|:class)\s*=\s*"([^"]+)"/gi,V=R.exec(B);while(V!==null){let I=V[1].match(/'([^']+)'/g);if(I)for(let E of I){let b=E.slice(1,-1);for(let F of b.split(/\s+/))if(F.trim())j.add(F.trim())}V=R.exec(B)}if(j.size===0)return"";if(!_Y)_Y=Q0({name:"crosswind",cwd:n.cwd(),defaultConfig:{},checkEnv:!1,verbose:!1});let D=await _Y;if(D.safelist)for(let I of D.safelist)j.add(I);let O=[...j].sort().join(" "),C=k.get(O);if(C!==void 0)return C;let T={...z.config,preflight:!0,minify:!1};if(D.shortcuts)T.shortcuts={...T.shortcuts||{},...D.shortcuts};if(D.theme)T.theme={...T.theme||{},...D.theme};let N=new z.CSSGenerator(T);for(let I of j)N.generate(I);let g="",QQ=T.shortcuts||{};for(let[I,E]of Object.entries(QQ)){if(!j.has(I))continue;let b=E.split(/\s+/).filter(Boolean);for(let F of b)N.generate(F)}let s=N.toCSS(!0,!1);for(let[I,E]of Object.entries(QQ)){if(!j.has(I))continue;let b=E.split(/\s+/).filter(Boolean),F=[],S=[];for(let d of b){let qQ=d.startsWith("dark:"),AQ=(qQ?d.slice(5):d).replace(/[/:.[\]%()]/g,(fQ)=>`\\${fQ}`),EQ=new RegExp(`\\.${AQ}\\s*\\{([^}]+)\\}`),RQ=s.match(EQ);if(RQ)if(qQ)S.push(RQ[1].trim());else F.push(RQ[1].trim())}if(F.length)g+=`.${I} { ${F.join(" ")} }
|
|
223
223
|
`;if(S.length)g+=`@media (prefers-color-scheme: dark) { .dark .${I} { ${S.join(" ")} } }
|
|
224
224
|
`}let f=s+g;return k.set(O,f),f}catch(z){return console.warn("Failed to generate Crosswind CSS:",z),""}}async function WY(B){let z=await Bun.file(B).text(),w=/(?:^|[^\w$])__stx_skip_cache\s*=\s*true/.test(z);if(M&&!w){let F=AZ(B),S=x.get(F);if(S&&await t0(S.signature))return S.html}let j=/<script\b([^>]*)\bserver\b[^>]*>([\s\S]*?)<\/script>/gi,q=[],R;while((R=j.exec(z))!==null)q.push(R[2]);let V=z.replace(/<script\b[^>]*\bserver\b[^>]*>[\s\S]*?<\/script>/gi,""),D={__filename:B,__dirname:IQ.dirname(B)},{processDirectives:O,extractVariables:C,defaultConfig:T,generateSpaShell:N,injectRouterScript:g,resetHead:QQ}=await G;QQ(),_Z(D),WZ(D);for(let F of q)await C(F,D,B);D.__stx_head_preset=!0;let s={...T,root:n.cwd(),...Y&&{componentsDir:Y},...Z&&{layoutsDir:Z},...$&&{partialsDir:$},autoShell:!0,ssr:X.ssr??tQ.ssr??!0,app:X.app||{},..."strict"in X&&{strict:X.strict},..."router"in X&&{router:X.router},..."debug"in X&&{debug:X.debug},..."skipDefaultSeoTags"in X&&{skipDefaultSeoTags:X.skipDefaultSeoTags},..."defaultTitle"in X&&{defaultTitle:X.defaultTitle},..."defaultDescription"in X&&{defaultDescription:X.defaultDescription},..."defaultImage"in X&&{defaultImage:X.defaultImage},..."seo"in X&&{seo:X.seo},..."analytics"in X&&{analytics:X.analytics},..."_pluginComponentDirs"in X&&{_pluginComponentDirs:X._pluginComponentDirs},..."_pluginPageDirs"in X&&{_pluginPageDirs:X._pluginPageDirs}};if(s.ssr===!1||X.ssr===!1)return N({template:V,context:D,title:X.defaultTitle??"stx App"});let f=V,I=new Set;f=await O(f,D,B,s,I),f=await g(f,AY());let E=/@for|:for|@if|:if|x-for|x-if/;if(/<template\s[^>]*(?:@for|:for|@if|:if|x-for|x-if)/.test(f))f=f.replace(/<template(?:\s[^>]*)?>|<\/template>/gi,(F)=>{if(E.test(F))return F;if(F==="</template>")return F;return""});else f=f.replace(/<template[^>]*>/gi,"").replace(/<\/template>/gi,"");if(M&&!D.__stx_skip_cache&&!w){let F=await e0(B,I);x.set(AZ(B),{html:f,signature:F})}return f}async function GX(B){let z=await UY(),w=B.startsWith("/")?B.slice(1):B,j=[];for(let R of[".stx",".md",".html",""]){let V=w.endsWith(R)?w:`${w}${R}`;j.push(V)}if(w==="")j.push("index.stx"),j.push("index.md"),j.push("index.html");else j.push(`${w}/index.stx`),j.push(`${w}/index.md`),j.push(`${w}/index.html`);let q=IQ.basename(w,IQ.extname(w));if(q&&!w.includes("/"))j.push(`${q}.stx`),j.push(`${q}.md`),j.push(`${q}.html`);for(let R of j)for(let V of z){let D=V.replace(/^\.\//,"").replace(/\\/g,"/"),O=D;for(let C of U){let T=C.replace(/\\/g,"/").replace(/\/$/,"");if(D.startsWith(`${T}/`)){O=D.slice(T.length+1);break}}if(D===R||O===R)return await WY(V)}for(let R of z){let V=R.replace(/^\.\//,"").replace(/\\/g,"/"),D=V;for(let N of U){let g=N.replace(/\\/g,"/").replace(/\/$/,"");if(V.startsWith(`${g}/`)){D=V.slice(g.length+1);break}}let O=D.replace(/\.(stx|md|html)$/,""),C=O==="index"||O.endsWith("/index"),T=B==="/"||w==="";if(`/${O}`===B||O===w||`/${O}.stx`===B||`/${O}.md`===B||`/${O}.html`===B||C&&T){let N=await WY(R);return A.set(B,N),N}if(O.startsWith("pages/")){let N=O.slice(6);if(`/${N}`===B||N===w){let g=await WY(R);return A.set(B,g),g}}}for(let R of z){let V=R.replace(/^\.\//,"").replace(/\\/g,"/");if(!V.includes("["))continue;let D=V;for(let T of U){let N=T.replace(/\\/g,"/").replace(/\/$/,"");if(V.startsWith(`${N}/`)){D=V.slice(N.length+1);break}}let O=D.replace(/\.(stx|md|html)$/,""),C=w7(O);for(let T of C){let N=w.match(T);if(N){let g=[...O.matchAll(/\[([^\]]+)\]/g)].map((f)=>f[1]),QQ=N.slice(1),s=await X8(R,g,QQ,w);return A.set(B,s),s}}}return null}async function X8(B,z,w,j){let q=await Bun.file(B).text(),R=/<script\b([^>]*)\bserver\b[^>]*>([\s\S]*?)<\/script>/gi,V=[],D;while((D=R.exec(q))!==null)V.push(D[2]);let O=q.replace(/<script\b[^>]*\bserver\b[^>]*>[\s\S]*?<\/script>/gi,""),C={__filename:B,__dirname:IQ.dirname(B),__route:j};for(let F=0;F<z.length;F++)C[z[F]]=w[F];let{processDirectives:T,extractVariables:N,defaultConfig:g,injectRouterScript:QQ,resetHead:s}=await G;s(),_Z(C),WZ(C);for(let F of V)await N(F,C,B);C.__stx_head_preset=!0;let f={...g,root:n.cwd(),...Y&&{componentsDir:Y},...Z&&{layoutsDir:Z},...$&&{partialsDir:$},autoShell:!0,ssr:X.ssr??tQ.ssr??!0,app:X.app||{},..."strict"in X&&{strict:X.strict},..."router"in X&&{router:X.router},..."debug"in X&&{debug:X.debug},..."skipDefaultSeoTags"in X&&{skipDefaultSeoTags:X.skipDefaultSeoTags},..."defaultTitle"in X&&{defaultTitle:X.defaultTitle},..."defaultDescription"in X&&{defaultDescription:X.defaultDescription},..."defaultImage"in X&&{defaultImage:X.defaultImage},..."seo"in X&&{seo:X.seo},..."analytics"in X&&{analytics:X.analytics},..."_pluginComponentDirs"in X&&{_pluginComponentDirs:X._pluginComponentDirs},..."_pluginPageDirs"in X&&{_pluginPageDirs:X._pluginPageDirs}},I=O;if(I=await T(I,C,B,f,new Set),z.length>0){let F={};for(let d=0;d<z.length;d++)F[z[d]]=w[d];let S=`<script>if(window.stx)window.stx._rp=${JSON.stringify(F)};else window.__stx_rp=${JSON.stringify(F)};</script>`;if(I.includes("</head>"))I=I.replace("</head>",`${S}
|
|
225
225
|
</head>`);else I=`${S}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Lb as b}from"./chunk-h3d81wrg.js";import{existsSync as W}from"fs";import T from"process";import{buddyOptions as I,runCommand as j,runCommands as D}from"@stacksjs/cli";import{err as X}from"@stacksjs/error-handling";import{log as V}from"@stacksjs/logging";import*as B from"@stacksjs/path";async function F(q){let z=[];z.push(B.actionsPath(`src/${q}.ts`));try{let H=import.meta.resolve("@stacksjs/actions/package.json");if(H){let J=new URL(H).pathname,G=J.slice(0,J.lastIndexOf("/"));z.push(`${G}/dist/${q}.js`),z.push(`${G}/dist/src/${q}.js`),z.push(`${G}/src/${q}.ts`)}}catch{}for(let H of z)if(await Bun.file(H).exists())return H;return null}async function m(q,z){if(V.debug(`[action] Running: ${q}`),q==="dev/views")try{let K=B.projectPath("pantry");if(!T.env.NODE_PATH?.includes(K))T.env.NODE_PATH=T.env.NODE_PATH?`${K}:${T.env.NODE_PATH}`:K,b("module").Module._initPaths?.();let Z=[B.projectPath("storage/framework/core/actions/src/dev/views.ts"),B.frameworkPath("actions/src/dev/views.ts")];for(let Q of Z)if(W(Q))return await import(Q),{ok:!0,value:{}};return X("dev/views entry not found")}catch(K){return X(`Failed to start dev server: ${K}`)}if(!(q.includes("/")||["dev","build","install","upgrade","migrate"].some((K)=>q.startsWith(K)))){let K=new Bun.Glob("**/*.{ts,js}"),Z={cwd:B.userActionsPath(),onlyFiles:!0,absolute:!0},Q=[],R=B.userActionsPath();for await(let L of K.scan(Z)){if(L.replace(`${R}/`,"").replace(/\.(ts|js)$/,"")===q||L.endsWith(`${q}.ts`)||L.endsWith(`${q}.js`))return V.debug(`[action] Resolved: ${q} \u2192 ${L}`),await(await import(L)).default.handle(void 0);Q.push(L)}for(let L of Q)try{let Y=await import(L);if(Y.name===q)return V.debug(`[action] Resolved: ${q} \u2192 ${L}`),await Y.handle()}catch(Y){}}let J=await F(q);if(!J)return X(`Action '${q}' not found in storage/framework/core/actions/src or @stacksjs/actions`);V.debug(`[action] Resolved: ${q} \u2192 ${J}`);let G=q.startsWith("dev/"),M=G?"--watch":"",S=G?"":I(z)||"",U=`bun ${M} ${J} ${S}`.trimEnd(),_=B.projectPath("pantry"),$=T.env.NODE_PATH,w=$?`${_}:${$}`:_,E=z?.verbose||G&&!z?.quiet,C={cwd:z?.cwd||B.projectPath(),...z,stdout:E?"inherit":void 0,stderr:E?"inherit":void 0,env:{...z?.env,NODE_PATH:w,...G?{STACKS_DEV_SERVER:"1"}:{}}},O=await j(U,C);return V.debug(`[action] Completed: ${q}`),O}async function f(q,z){if(!q.length)return X("No actions were specified");for(let M of q)if(!N(M))return X(`The specified action "${M}" does not exist`);let H=I(z)||"",J={cwd:z?.cwd||B.projectPath(),...z},G=q.map((M)=>`bun ${B.relativeActionsPath(`src/${M}.ts`)} ${H}`);return await D(G,J)}function N(q){let z=[`${q}.ts`,`${q}`,`Dashboard/${q}.ts`,`Dashboard/${q}`,`Buddy/${q}.ts`,`Buddy/${q}`],H=[`src/${q}.ts`,`src/${q}`,`${q}.ts`,`${q}`];return[...z.map((G)=>B.userActionsPath(G)),...H.map((G)=>B.actionsPath(G))].some((G)=>W(G))}
|
|
3
|
+
export{m as Ib,f as Jb,N as Kb};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Lb as L}from"./chunk-h3d81wrg.js";import f from"process";import{log as N}from"@stacksjs/cli";import{getErrorMessage as E}from"@stacksjs/utils";async function C(){try{return(await import("./chunk-mqgbyhph.js")).tsCloud||null}catch{return null}}async function b(){let G=await C();return{name:G?.project?.name||"stacks",region:G?.project?.region||"us-east-1"}}async function v(G){try{let{AWSClient:Q}=await import("@stacksjs/ts-cloud"),J=new Q,_=new URLSearchParams({Action:"GetCallerIdentity",Version:"2011-06-15"}),K=await J.request({service:"sts",region:G,method:"POST",path:"/",body:_.toString()}),j=String(K).match(/<Account>(\d+)<\/Account>/);if(j&&j[1])return j[1];return f.env.AWS_ACCOUNT_ID||""}catch(Q){return f.env.AWS_ACCOUNT_ID||""}}async function p(G){let{environment:Q}=G,J=await C();if(!J)throw Error("Cloud configuration not found. Ensure config/cloud.ts exports tsCloud.");let{InfrastructureGenerator:_}=await import("@stacksjs/ts-cloud"),j=new _({config:J,environment:Q}).generate().getBuilder().build();return JSON.stringify(j)}function S(G){let Q={green:"\x1B[32m",yellow:"\x1B[33m",red:"\x1B[31m",cyan:"\x1B[36m",gray:"\x1B[90m",reset:"\x1B[0m"};if(G.includes("COMPLETE")&&!G.includes("ROLLBACK"))return`${Q.green}${G}${Q.reset}`;if(G.includes("IN_PROGRESS"))return`${Q.yellow}${G}${Q.reset}`;if(G.includes("FAILED")||G.includes("ROLLBACK"))return`${Q.red}${G}${Q.reset}`;if(G.includes("DELETE"))return`${Q.gray}${G}${Q.reset}`;return G}async function k(G){let{region:Q,domain:J,sslDomains:_,hostedZoneId:K,albDnsName:j,stackName:Y}=G;console.log(""),console.log("Setting up SSL certificate...");try{let{Route53Client:$,ACMClient:w,AWSClient:F}=await import("@stacksjs/ts-cloud"),P=new $(Q),V=new w(Q),W=new F;console.log(` Requesting SSL certificate for ${J}...`);let Z=await V.requestCertificate({DomainName:_[0]??J,SubjectAlternativeNames:_.length>1?_.slice(1):void 0,ValidationMethod:"DNS"});console.log(` Certificate ARN: ${Z.CertificateArn}`),await new Promise((R)=>setTimeout(R,5000));let U=await V.describeCertificate({CertificateArn:Z.CertificateArn});console.log(" Adding DNS validation records...");for(let R of U.DomainValidationOptions||[])if(R.ResourceRecord)await P.changeResourceRecordSets({HostedZoneId:K,ChangeBatch:{Changes:[{Action:"UPSERT",ResourceRecordSet:{Name:R.ResourceRecord.Name,Type:"CNAME",TTL:300,ResourceRecords:[{Value:R.ResourceRecord.Value}]}}]}});console.log("\u2713 Validation records added"),console.log(" Waiting for certificate validation (this may take 1-5 minutes)...");for(let R=0;R<30;R++){let M=await V.describeCertificate({CertificateArn:Z.CertificateArn});if(M.Status==="ISSUED"){console.log("\u2713 Certificate issued!");let{AWSCloudFormationClient:A}=await import("@stacksjs/ts-cloud"),B=await new A(Q).listStackResources(Y),I=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="ApplicationLoadBalancer")?.PhysicalResourceId,X=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="ECSTargetGroup")?.PhysicalResourceId||B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="WebTargetGroup")?.PhysicalResourceId;if(I&&X){console.log(" Creating HTTPS listener...");let O=new URLSearchParams({Action:"CreateListener",LoadBalancerArn:I,Protocol:"HTTPS",Port:"443","Certificates.member.1.CertificateArn":Z.CertificateArn,"DefaultActions.member.1.Type":"forward","DefaultActions.member.1.TargetGroupArn":X,Version:"2015-12-01"});await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:O.toString()}),console.log("\u2713 HTTPS listener created!"),console.log(" Configuring HTTP to HTTPS redirect...");let h=new URLSearchParams({Action:"DescribeListeners",LoadBalancerArn:I,Version:"2015-12-01"}),H=await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:h.toString()}),x=H?.DescribeListenersResponse?.DescribeListenersResult?.Listeners?.member||H?.DescribeListenersResult?.Listeners?.member,T=(Array.isArray(x)?x:x?[x]:[]).find((D)=>D.Port==="80"||D.Port===80);if(T){let D=new URLSearchParams({Action:"ModifyListener",ListenerArn:T.ListenerArn,"DefaultActions.member.1.Type":"redirect","DefaultActions.member.1.RedirectConfig.Protocol":"HTTPS","DefaultActions.member.1.RedirectConfig.Port":"443","DefaultActions.member.1.RedirectConfig.StatusCode":"HTTP_301",Version:"2015-12-01"});await W.request({service:"elasticloadbalancing",region:Q,method:"POST",path:"/",body:D.toString()}),console.log("\u2713 HTTP to HTTPS redirect configured!")}}let z=B.StackResourceSummaries.find((O)=>O.LogicalResourceId==="CloudFrontDistribution")?.PhysicalResourceId;if(z){console.log(" Updating CloudFront distribution with SSL certificate...");let O=await W.request({service:"cloudfront",region:"us-east-1",method:"GET",path:`/2020-05-31/distribution/${z}/config`}),h=O._headers?.etag||O._headers?.ETag,H=O.DistributionConfig;if(H&&h){H.Aliases={Quantity:_.length,Items:_},H.ViewerCertificate={ACMCertificateArn:Z.CertificateArn,SSLSupportMethod:"sni-only",MinimumProtocolVersion:"TLSv1.2_2021",CloudFrontDefaultCertificate:!1};let x=`<?xml version="1.0" encoding="UTF-8"?>
|
|
3
3
|
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2020-05-31/">
|
|
4
4
|
<CallerReference>${H.CallerReference}</CallerReference>
|
|
5
5
|
<Aliases>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{a as b,b as v}from"./chunk-dbz9dp2h.js";import"./chunk-xg9xscqz.js";import"./chunk-
|
|
2
|
+
import{a as b,b as v}from"./chunk-dbz9dp2h.js";import"./chunk-xg9xscqz.js";import"./chunk-h3d81wrg.js";import T from"fs";import $ from"path";import _ from"fs";import G from"path";import q from"path";import x from"fs";import L from"path";import N from"fs";import C from"path";function w(I,B){let J=["// Auto-generated by STX - do not edit",'declare module "stx/routes" {'," interface RouteMap {"];for(let K of I){let O=[];for(let V of K.params){let Y=K.pattern.includes(`:${V}*`)?"string[]":"string";O.push(`${V}: ${Y}`)}let W=O.join("; ");J.push(` '${K.pattern}': { ${W} }`)}J.push(" }","}",""),_.mkdirSync(B,{recursive:!0}),_.writeFileSync(G.join(B,"route-types.d.ts"),J.join(`
|
|
3
3
|
`))}function D(I,B,J){let K=process.cwd(),O=G.relative(K,J),W=["components","layouts","partials"],V=I.filter((X)=>!W.some((Z)=>X.pattern.startsWith(`/${Z}/`)||X.pattern===`/${Z}`)),Y=["// Auto-generated by stx \u2014 do not edit",`// Source: ${O||"pages"}/`,"","export const routes = ["];for(let X of V){let Z=G.relative(K,X.filePath).replace(/\\/g,"/"),z=JSON.stringify(X.params),j=X.layout?`, layout: '${G.relative(K,X.layout).replace(/\\/g,"/")}'`:"";Y.push(` { pattern: '${X.pattern}', filePath: '${Z}', isDynamic: ${X.isDynamic}, params: ${z}${j} },`)}Y.push("] as const",""),Y.push("export type RouteName = typeof routes[number]['pattern']",""),_.mkdirSync(B,{recursive:!0}),_.writeFileSync(G.join(B,"routes.ts"),Y.join(`
|
|
4
4
|
`))}function P(I,B){let K=q.relative(B,I).replace(/\.(stx|md)$/,"");if(K=K.split(q.sep).join("/"),K==="index")return"/";if(K.endsWith("/index"))K=K.slice(0,-6);return K=K.replace(/\[\[([^\]]+)\]\]/g,":$1?"),K=K.replace(/\[([^\]]+)\]/g,":$1"),K=K.replace(/:\.\.\.([^/]+)/g,":$1*"),`/${K}`}function k(I){let B=[],J=I.replace(/[.+^${}()|[\]\\]/g,"\\$&");return J=J.replace(/\/:([^/]+)\?/g,(K,O)=>{return B.push(O),"(?:/([^/]+))?"}),J=J.replace(/:([^/]+)\*/g,(K,O)=>{return B.push(O),"(.+)"}),J=J.replace(/:([^/]+)/g,(K,O)=>{return B.push(O),"([^/]+)"}),J=`^${J}$`,{regex:new RegExp(J),params:B}}function o(I,B){let J=I===""?"/":I;for(let K of B){let O=J.match(K.regex);if(O){let W={};return K.params.forEach((V,Y)=>{W[V]=O[Y+1]}),{route:K,params:W}}}return null}function y(I,B){let J=[],K=L.dirname(I);while(K.startsWith(B)||K===B){let O=L.join(K,"_layout.stx");if(x.existsSync(O))J.unshift(O);if(K===B)break;K=L.dirname(K)}return J}function R(I,B){let J=[];if(!T.existsSync(I))return J;let K=T.readdirSync(I,{withFileTypes:!0});for(let O of K){let W=$.join(I,O.name);if(O.isDirectory()){if(O.name.startsWith("."))continue;J.push(...R(W,B))}else if(O.isFile()){let V=$.extname(O.name);if(B.includes(V)){if(O.name.startsWith("_")&&O.name!=="_layout.stx")continue;if(O.name==="_layout.stx")continue;J.push(W)}}}return J}class S{routes;pagesDir;pagesDirs;config;constructor(I,B={}){this.config=B;let J=B.pagesDirs&&B.pagesDirs.length>0?B.pagesDirs:[B.pagesDir||"pages"];this.pagesDirs=J.map((V)=>$.resolve(I,V)),this.pagesDir=this.pagesDirs[0];let K=B.extensions||[".stx"],O=new Set;this.routes=[];for(let V of this.pagesDirs){let Y=R(V,K);for(let X of Y){let Z=P(X,V);if(O.has(Z))continue;O.add(Z);let{regex:z,params:j}=k(Z),F=B.layouts!==!1?y(X,V):[];this.routes.push({pattern:Z,regex:z,params:j,filePath:X,isDynamic:j.length>0,layout:F.length>0?F[F.length-1]:void 0})}}this.routes.sort((V,Y)=>{if(!V.isDynamic&&Y.isDynamic)return-1;if(V.isDynamic&&!Y.isDynamic)return 1;let X=V.pattern.split("/").length,Z=Y.pattern.split("/").length;if(X!==Z)return Z-X;return V.pattern.localeCompare(Y.pattern)});let W=$.join(I,".stx");w(this.routes,W),D(this.routes,W,this.pagesDir)}match(I){let B=I===""?"/":I;for(let J of this.routes){let K=B.match(J.regex);if(K){let O={};return J.params.forEach((W,V)=>{O[W]=K[V+1]}),{route:J,params:O}}}return null}resolve(I,B){let J=this.routes.find((O)=>O.pattern===I||O.filePath.includes(I));if(!J)return"#not-found";let K=J.pattern;if(B)for(let[O,W]of Object.entries(B))K=K.replace(`:${O}`,encodeURIComponent(W));return K}addRoute(I){this.routes.push(I),this.routes.sort((B,J)=>{if(!B.isDynamic&&J.isDynamic)return-1;if(B.isDynamic&&!J.isDynamic)return 1;return B.pattern.localeCompare(J.pattern)})}getLayout(I){return I.layout??null}}function a(I,B){return new S(I,B)}function e(I,B){let J=[`${B}.stx`,"error.stx"];for(let K of J){let O=$.join(I,K);if(T.existsSync(O))return O}return null}function BB(I,B){return I.map((J)=>{let K=$.relative(B,J.filePath),O=J.isDynamic?" (dynamic)":"";return`${J.pattern} \u2192 ${K}${O}`})}var A={},E="";function IB(I){E=I.replace(/\/$/,"")}function JB(I,B,J={}){A[I]={path:B,name:I,params:J}}function KB(I){for(let[B,J]of Object.entries(I))if(typeof J==="string")A[B]={path:J,name:B};else A[B]={...J,name:B}}function OB(I,B={},J=!1){let K=A[I];if(!K)return console.warn(`Route [${I}] not defined.`),"#undefined-route";let O={...K.params,...B},W=K.path;W=W.replace(/:(\w+)/g,(Y,X)=>{let Z=O[X];if(Z===void 0)return console.warn(`Missing parameter [${X}] for route [${I}].`),`:${X}`;return delete O[X],encodeURIComponent(String(Z))});let V=Object.entries(O);if(V.length>0){let Y=V.map(([X,Z])=>`${encodeURIComponent(X)}=${encodeURIComponent(String(Z))}`).join("&");W+=(W.includes("?")?"&":"?")+Y}return J&&E?`${E}${W}`:W}function VB(){for(let I of Object.keys(A))delete A[I];E=""}function YB(I,B={}){return{type:"redirect",path:I,options:{replace:B.replace??!1,external:B.external??!1,redirectCode:B.redirectCode??302}}}function ZB(I){return{type:"abort",error:typeof I==="string"?{statusCode:500,message:I}:I}}function $B(I,B={}){return{handler:I,mode:B.mode??"universal"}}function H(I){let B={};if(!I)return B;let J=I.split(";");for(let K of J){let[O,...W]=K.split("=");if(O){let V=O.trim(),Y=W.join("=").trim();if(V)B[V]=decodeURIComponent(Y)}}return B}function U(I,B,J={}){let K=`${encodeURIComponent(I)}=${encodeURIComponent(B)}`;if(J.expires){let O=typeof J.expires==="number"?new Date(Date.now()+J.expires*1000):J.expires;K+=`; Expires=${O.toUTCString()}`}if(J.path)K+=`; Path=${J.path}`;if(J.domain)K+=`; Domain=${J.domain}`;if(J.secure)K+="; Secure";if(J.httpOnly)K+="; HttpOnly";if(J.sameSite)K+=`; SameSite=${J.sameSite}`;return K}function f(I,B){let J=I.headers.get("cookie")||"",K=H(J);return{get(O){return K[O]},set(O,W,V={}){K[O]=W,B.append("Set-Cookie",U(O,W,V))},delete(O){delete K[O],B.append("Set-Cookie",U(O,"",{expires:new Date(0),path:"/"}))},getAll(){return{...K}}}}function g(){return{get(I){if(typeof document>"u")return;return H(document.cookie)[I]},set(I,B,J={}){if(typeof document>"u")return;document.cookie=U(I,B,J)},delete(I){if(typeof document>"u")return;document.cookie=U(I,"",{expires:new Date(0),path:"/"})},getAll(){if(typeof document>"u")return{};return H(document.cookie)}}}function h(){let I=typeof window<"u"&&typeof window.localStorage<"u";return{get(B){if(!I)return null;try{return window.localStorage.getItem(B)}catch{return null}},set(B,J){if(!I)return;try{window.localStorage.setItem(B,J)}catch{}},remove(B){if(!I)return;try{window.localStorage.removeItem(B)}catch{}},isAvailable(){return I}}}var Q=new Map;function M(I,B){Q.set(I,B)}function c(I){return Q.get(I)}function AB(I){return Q.has(I)}function GB(){Q.clear()}function QB(){return Array.from(Q.keys())}async function jB(I,B="middleware"){let J=C.resolve(I,B);if(!N.existsSync(J))return;let K=N.readdirSync(J);for(let O of K){if(!O.endsWith(".ts")&&!O.endsWith(".js"))continue;if(O.includes(".test.")||O.includes(".spec."))continue;let W=O.replace(/\.(ts|js)$/,""),V=C.join(J,O);try{let X=(await import(V)).default;if(X&&typeof X.handler==="function")M(W,X);else if(typeof X==="function")M(W,{handler:X,mode:"universal"})}catch(Y){console.warn(`Failed to load middleware '${W}' from ${V}:`,Y)}}}function d(I){let B={};if(!I)return B;let J=new URLSearchParams(I);for(let[K,O]of J)B[K]=O;return B}function _B(I,B,J,K=""){return{path:I,params:B,query:d(K),fullPath:K?`${I}?${K}`:I,meta:J}}function EB(I,B,J){let K=typeof window>"u",O=!K,W=new Headers;return{to:I,from:B,isClient:O,isServer:K,cookies:K&&J?f(J,W):g(),storage:h(),state:{},request:J,responseHeaders:W}}async function UB(I,B){let J=Array.isArray(I)?I:[I],K=B.isServer;for(let O of J){let W=c(O);if(!W){console.warn(`Middleware '${O}' not found`);continue}if(W.mode==="server"&&!K)continue;if(W.mode==="client"&&K)continue;try{let V=await W.handler(B);if(V){if(V.type==="redirect")return{passed:!1,redirect:V,state:B.state,responseHeaders:B.responseHeaders};if(V.type==="abort")return{passed:!1,abort:V,state:B.state,responseHeaders:B.responseHeaders}}}catch(V){return console.error(`Error in middleware '${O}':`,V),{passed:!1,abort:{type:"abort",error:{statusCode:500,message:V instanceof Error?V.message:"Middleware error"}},state:B.state,responseHeaders:B.responseHeaders}}}return{passed:!0,state:B.state,responseHeaders:B.responseHeaders}}function zB(){return`
|
|
5
5
|
;(function(){
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
3
|
-
export{v as
|
|
2
|
+
import{Ib as o}from"./chunk-0gadhvn7.js";import{Action as r}from"@stacksjs/enums";async function v(e){await o(r.Dev,e)}async function s(e){await o(r.Dev,e)}async function a(e){await n(e)}async function n(e){await o(r.DevApi,e)}async function D(e){await o(r.DevComponents,e)}async function p(e){await o(r.DevDashboard,e)}async function c(e){await o(r.DevSystemTray,e)}async function m(e){await o(r.DevDesktop,e)}async function u(e){await o(r.DevDocs,e)}
|
|
3
|
+
export{v as ib,s as jb,a as kb,n as lb,D as mb,p as nb,c as ob,m as pb,u as qb};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
class X{name;description;apiResponse;rate;tries;backoff;enabled;path;method;validations;requestFile;skipCsrf;csrf;authorize;before;handle;model;_dependenciesFactory;_resolvedDeps;_depsOverrides;constructor({name:j,description:A,apiResponse:B,validations:G,handle:H,rate:I,tries:J,backoff:K,enabled:L,path:M,method:N,requestFile:O,model:g,skipCsrf:Q,csrf:S,authorize:U,before:V,dependencies:W}){if(this.name=j,this.description=A,this.apiResponse=B,this.validations=G,this.rate=I,this.tries=J,this.backoff=K,this.enabled=L,this.path=M,this.method=N,this.handle=H,this.requestFile=O,this.skipCsrf=Q,this.csrf=S,this.authorize=U,this.before=V,this._dependenciesFactory=W,g&&typeof g==="object"&&"name"in g)this.model=g.name;else if(typeof g==="string")this.model=g}get deps(){if(!this._resolvedDeps)this._resolvedDeps=this._dependenciesFactory?.()??{};if(this._depsOverrides)return{...this._resolvedDeps,...this._depsOverrides};return this._resolvedDeps}overrideDependencies(j){this._depsOverrides={...this._depsOverrides??{},...j}}resetDependencies(){this._depsOverrides=void 0,this._resolvedDeps=void 0}}
|
|
3
|
-
export{X as
|
|
3
|
+
export{X as Hb};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
3
|
-
export{T as
|
|
2
|
+
import{Eb as z}from"./chunk-tpb8jgsk.js";import{Ib as U}from"./chunk-0gadhvn7.js";import{Lb as O}from"./chunk-h3d81wrg.js";import*as Q from"fs";import R from"process";import{runCommand as b}from"@stacksjs/cli";import{Action as Y,NpmScript as H}from"@stacksjs/enums";import{log as B}from"@stacksjs/logging";import{frameworkPath as I,projectPath as K,storagePath as D}from"@stacksjs/path";import{ExitCode as X}from"@stacksjs/types";import{runNpmScript as M}from"@stacksjs/utils";async function T(q){if(q?.types)await W(q);else if(q?.entries)await V(q);else if(q?.webTypes)await v(q);else if(q?.customData)await y();else if(q?.ideHelpers)await E(q);else if(q?.componentMeta)await N();else if(q?.coreSymlink)await x();else if(q?.openApiSpec)await S()}function u(q){return T(q)}async function V(q){let F=await U(Y.GenerateLibraryEntries,{...q,cwd:K()});if(F.isErr)B.error("There was an error generating your library entry points",F.error),R.exit(X.FatalError);B.success("Library entry points generated successfully")}async function v(q){let F=await M(H.GenerateWebTypes,q);if(F.isErr)B.error("There was an error generating the web-types.json file.",F.error),R.exit(X.FatalError);B.success("Successfully generated the web-types.json file")}async function y(){let q=await z();if(q.isErr)B.error("There was an error generating the custom-elements.json file.",q.error),R.exit(X.FatalError);await U(Y.LintFix,{verbose:!0,cwd:K()}),B.success("Successfully generated the custom-elements.json file")}async function E(q){let F=await M(H.GenerateIdeHelpers,q);if(F.isErr)B.error("There was an error generating IDE helpers.",F.error),R.exit(X.FatalError);await U(Y.LintFix,{verbose:!0,cwd:K()}),B.success("Successfully generated IDE helpers")}async function N(){let q=await z();if(q.isErr)B.error("There was an error generating your component meta information.",q.error),R.exit(X.FatalError);await U(Y.LintFix,{verbose:!0,cwd:K()}),B.success("Successfully generated component meta information")}async function W(q){let F=await M(H.GenerateTypes,{cwd:I(),...q});if(F.isErr)throw B.error("There was an error generating your types.",F.error),F.error instanceof Error?F.error:Error(String(F.error));B.success("Types were generated successfully")}async function c(q){try{let G=`${I()}/package.json`,J=Q.existsSync(G)?Q.readFileSync(G,"utf-8"):"";if(!(J?JSON.parse(J):{})?.scripts?.["generate:types"]){B.warn("[generate:types --watch] no `generate:types` script in framework package.json \u2014 type regeneration disabled. dev:api will keep running, but type definitions won't auto-refresh on model/config changes.");return}}catch{}let F=[K("app/Models"),D("framework/defaults/app/Models"),K("config"),K("database/migrations")];B.info(`[generate:types --watch] watching ${F.length} directories`);let Z=null,_=!1,L=()=>{if(Z)clearTimeout(Z);Z=setTimeout(async()=>{if(_)return;_=!0;try{B.info("[generate:types --watch] change detected, regenerating\u2026"),await W(q),B.success("[generate:types --watch] types up to date")}catch(G){B.error("[generate:types --watch] regeneration failed:",G)}finally{_=!1}},200)},$=[];for(let G of F)try{if(!Q.existsSync(G))continue;let J=Q.watch(G,{recursive:!0},()=>L());$.push(J)}catch(J){B.warn(`[generate:types --watch] cannot watch ${G}: ${J}`)}if($.length===0){B.warn("[generate:types --watch] no directories to watch \u2014 exiting");return}await new Promise((G)=>{R.once("SIGINT",()=>{B.info("[generate:types --watch] stopping");for(let J of $)try{J.close()}catch{}G()})})}function g(){B.success("Successfully generated `./pantry.yaml` based on your config")}async function l(){}async function x(){await b(`ln -s ${I()} ${K(".stacks")}`)}async function S(){let{generateOpenApi:q}=await import("@stacksjs/api");await q(),B.success("Successfully generated Open API Spec")}
|
|
3
|
+
export{T as rb,u as sb,V as tb,v as ub,y as vb,E as wb,N as xb,W as yb,c as zb,g as Ab,l as Bb,x as Cb,S as Db};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{S as O}from"./chunk-nty6mmx4.js";import{Ib as A}from"./chunk-0gadhvn7.js";import{Lb as w}from"./chunk-h3d81wrg.js";import Y from"process";import{existsSync as S}from"fs";import{italic as X,runCommand as K}from"@stacksjs/cli";import{ExitCode as Z}from"@stacksjs/types";import{localUrl as T}from"@stacksjs/config";import{Action as P}from"@stacksjs/enums";import{handleError as v}from"@stacksjs/error-handling";import{log as B}from"@stacksjs/logging";import{frameworkPath as b,path as J,resolve as V}from"@stacksjs/path";import{createFolder as U,doesFolderExist as _,writeTextFile as x}from"@stacksjs/storage";import{kebabCase as j,pascalCase as D,template as y}from"@stacksjs/strings";var L=!1;function Zq(z){L=Boolean(z)}function $q(){return L}function E(z,...q){return y(O[z],...q)}async function W(z,q){if(L){let G=q.split(`
|
|
3
3
|
`),H=G.slice(0,60).map((I)=>` ${I}`).join(`
|
|
4
4
|
`),Q=G.length>60?`
|
|
5
5
|
${X(`\u2026 ${G.length-60} more lines elided`)}`:"";B.info(`[dry-run] would write ${z} (${G.length} lines)`),Y.stdout.write(`${H}${Q}
|
|
@@ -14,4 +14,4 @@ export function ${G}(): Partial<${R}Model> {
|
|
|
14
14
|
|
|
15
15
|
export default ${G}
|
|
16
16
|
`;await W(I,u),B.success(`Created factory: ${I}`)}catch(H){throw B.error(`Failed to create factory ${G}`,H),H}}async function d(z){try{let q=z.name;B.info(`Creating your ${X(q)} notification...`),await i(z),B.success(`Created ${X(q)} notification`)}catch(q){B.error("There was an error creating your notification",q),Y.exit(Z.FatalError)}}async function g(z){let q=String(z.name||"").trim();if(!q)return B.error("A mail name is required (e.g. `buddy make:mail OrderShipped`)."),!1;let G=D(q),H=j(q),Q=J.userMailPath(`${G}.ts`),I=J.userEmailsPath(`${H}.stx`);if(!z.force){if(S(Q))return console.error(`${X(Q)} already exists \u2014 re-run with --force to overwrite.`),!1;if(S(I))return console.error(`${X(I)} already exists \u2014 re-run with --force to overwrite.`),!1}if(!_(J.userMailPath()))await U(J.userMailPath());if(!_(J.userEmailsPath()))await U(J.userEmailsPath());try{return await $(Q,"mail",G,H),await $(I,"mailTemplate",G,H),!0}catch(M){return v("Error creating mailable",M),!1}}async function Mq(z){try{let q=z.name;if(B.info(`Creating your ${X(q)} mailable...`),!await g(z))Y.exit(Z.FatalError);B.success(`Created ${X(D(q))} mailable + ${X(j(q))}.stx template`)}catch(q){B.error("There was an error creating your mailable",q),Y.exit(Z.FatalError)}}async function c(z){try{let q=z.name;B.info("Creating your page..."),await m(z),B.success(`Created ${q} page`)}catch(q){B.error("There was an error creating your page",q),Y.exit(Z.FatalError)}}async function m(z){let q=z.name;await $(J.userViewsPath(`${q}.vue`),"page",q)}async function l(z){try{let q=z.name;B.info("Creating your function..."),await r(z),B.success(`Created ${q} function`)}catch(q){B.error("There was an error creating your function",q),Y.exit(Z.FatalError)}}async function r(z){let q=z.name;await $(J.userFunctionsPath(`${q}.ts`),"function",q)}async function p(z){try{let q=z.name;B.info("Creating your translation file..."),await n(z),B.success(`Created ${q} translation file`)}catch(q){B.error("There was an error creating your language.",q),Y.exit(Z.FatalError)}}async function n(z){let q=z.name;await $(J.resourcesPath(`lang/${q}.yml`),"language",q)}async function s(z){try{let q=z.name;B.info(`Creating your ${q} stack...`);let G=V(Y.cwd(),q);if(_(G))B.error(`Directory "${q}" already exists`),Y.exit(Z.FatalError);await U(G);let H=["app/Actions","app/Models","config","database/migrations","resources/views","resources/components","resources/functions","routes","public"];for(let I of H)await U(V(G,I));let Q=q.replace(/^@[^/]+\//,"").replace(/-stack$/,"");await $(V(G,"package.json"),"stackPackageJson",q,Q),B.success(`Successfully scaffolded your "${q}" stack`),B.info(""),B.info(` cd ${q}`),B.info(" # Add your models, actions, views, etc."),B.info(" # Then publish: bun publish"),B.info(""),B.info(" Users install it with:"),B.info(` buddy stack:install ${q}`)}catch(q){B.error("There was an error creating your stack",q),Y.exit(Z.FatalError)}}async function i(z){let q=z.name;try{let G="EmailOptions";if(!_("notifications"))await U("./notifications");if(z.chat)G="ChatOptions";if(z.sms)G="SMSOptions";return await $(J.userNotificationsPath(`${q}.ts`),"notification",G),!0}catch(G){return v("Error creating notification",G),!1}}async function Rq(z){let q=z.name,G="dummy-name";if(!q[0])throw Error("options.name is required and cannot be empty");let H=q[0].toUpperCase()+q.slice(1),Q=b(`database/migrations/${H}.ts`);try{await $(Q,"migration","dummy-name"),B.success(`Successfully created your migration file at stacks/database/migrations/${H}.ts`)}catch(I){B.error(I)}}async function Sq(){await A(P.QueueTable)}async function Kq(){let z=await T();B.info("Creating SSL certificate..."),await K(`tlsx ${z}`,{cwd:J.storagePath("keys")}),B.success("Certificate created"),B.info("Installing SSL certificate..."),await K("tlsx -install",{cwd:J.storagePath("keys")}),B.success("Certificate installed")}async function Aq(z){let q=z.name;if(!q[0])throw Error("options.name is required and cannot be empty");let G=q[0].toUpperCase()+q.slice(1),H=G.replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"").replace(/([^s])$/,"$1s"),Q=J.userModelsPath(`${G}.ts`);try{await $(Q,"model",G,H),B.success(`Model created: ${X(`app/Models/${G}.ts`)}`)}catch(I){B.error(I)}}async function a(z){let q=z.name;await $(J.userMiddlewarePath(`${q}.ts`),"middleware",q)}
|
|
17
|
-
export{Zq as
|
|
17
|
+
export{Zq as q,$q as r,C as s,Uq as t,_q as u,F as v,N as w,k as x,h as y,f as z,Vq as A,Lq as B,d as C,g as D,Mq as E,c as F,m as G,l as H,r as I,p as J,n as K,s as L,i as M,Rq as N,Sq as O,Kq as P,Aq as Q,a as R};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import E from"process";import{log as B}from"@stacksjs/cli";import{execSync as I}from"child_process";import{runFormat as J,runLint as M}from"pickier";var N=/\.(?:ts|js|json|md|yaml|yml)$/i,O=/(?:^|\/)(?:node_modules|dist|pantry|storage\/framework\/cache|\.git|\.stx|\.stx-serve)(?:\/|$)/;function G(q){try{return I("git ls-files -z",{cwd:q,encoding:"utf8"}).split("\x00").filter((z)=>N.test(z)&&!O.test(z))}catch{return[]}}async function Q(q={}){let z=q.cwd??E.cwd();B.info(q.fix?"Ensuring Code Style...":"Checking Code Style...");let A=G(z);if(!A.length)return B.success("Linted"),{ok:!0};let C=await M(A,{maxWarnings:9999,fix:q.fix})===0;if(C)B.success("Linted");return{ok:C}}function W(q={}){return Q({...q,fix:!0})}async function X(q={}){let z=q.cwd??E.cwd(),A=G(z);if(!A.length)return{ok:!0};return{ok:await J(A,{write:q.write,check:q.check})===0}}
|
|
3
|
-
export{Q as
|
|
3
|
+
export{Q as Na,W as Oa,X as Pa};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
var{Glob:E}=globalThis.Bun;import G from"path";var U={user:"person.fill",team:"person.2.fill",subscriber:"envelope.open.fill",subscriberemail:"envelope.fill",post:"doc.text.fill",page:"doc.fill",product:"cube.box.fill",productvariant:"cube.fill",productunit:"scalemass.fill",order:"list.clipboard.fill",orderitem:"list.bullet.clipboard.fill",customer:"person.crop.circle.fill",payment:"creditcard.fill",paymentmethod:"creditcard.and.123",paymentproduct:"creditcard.fill",paymenttransaction:"creditcard.fill",category:"tag.fill",tag:"tag",comment:"bubble.left.fill",author:"person.text.rectangle.fill",notification:"bell.fill",job:"briefcase.fill",log:"list.bullet.rectangle.portrait.fill",campaign:"megaphone.fill",review:"star.fill",coupon:"ticket.fill",giftcard:"giftcard.fill",cart:"cart.fill",cartitem:"cart.badge.plus",taxrate:"percent",transaction:"arrow.left.arrow.right.circle.fill",subscription:"repeat.circle.fill",emaillist:"envelope.badge.person.crop",socialpost:"bubble.left.and.bubble.right.fill",manufacturer:"building.2.fill",shippingmethod:"shippingbox.fill",shippingzone:"map.fill",shippingrate:"dollarsign.circle.fill",deliveryroute:"map.fill",driver:"car.fill",digitaldelivery:"arrow.down.doc.fill",licensekey:"key.fill",loyaltypoint:"star.circle.fill",loyaltyreward:"gift.fill",printdevice:"printer.fill",receipt:"doc.text.fill",waitlistproduct:"clock.fill",waitlistrestaurant:"clock.badge.checkmark.fill",websocket:"antenna.radiowaves.left.and.right",default:"tablecells.fill"},W=new Set(["activity","request","error","failedjob"]),H=new Set(["user","team","subscriber","post","page","product","order","customer","payment","coupon","category","tag","comment","author","notification","job","campaign","review","gift-card"]),_={user:"data",team:"data",subscriber:"data",activity:"data",campaign:"marketing",emaillist:"marketing",socialpost:"marketing",subscriberemail:"marketing",comment:"content",tag:"content",paymentmethod:"commerce",paymentproduct:"commerce",paymenttransaction:"commerce",subscription:"commerce",deployment:"system",error:"system",failedjob:"system",job:"system",log:"system",notification:"system",release:"system",request:"system"};function A(j){return j.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"")}function D(j){return U[j.toLowerCase()]||U.default||"database"}function S(j,F,k){if(k)return k;let J=j.includes("/")?(j.split("/")[0]??"").toLowerCase():"";if(J==="commerce")return"commerce";if(J==="content")return"content";if(J==="realtime")return"system";return _[F.replace(/-/g,"")]??"data"}async function T(j){try{let F=await import(j);return(F.default??F).dashboard}catch{return}}async function V(j,F,k,J){try{let K=new E("**/*.ts");for await(let Q of K.scan({cwd:j})){if(Q.includes("README")||Q.includes(".d.ts"))continue;let $=Q.replace(/\.ts$/,"").split("/").pop()||"",Z=$.toLowerCase();if($&&!F.has(Z)&&!W.has(Z)){F.add(Z);let z=A($),X=G.join(j,Q),q=await T(X);k.push({name:$,icon:q?.icon??D($),id:z,category:S(Q,z,J),dashboard:q})}}}catch{}}async function N(j,F){let k=[],J=new Set;return await Promise.all([V(j,J,k,"userland"),V(F,J,k)]),k.sort((K,Q)=>K.name.localeCompare(Q.name))}function C(j){return j.map((F)=>{let k={id:F.id,name:F.name,icon:F.icon,hasDedicatedPage:H.has(F.id),category:F.category??"data"};if(F.dashboard)k.dashboard=F.dashboard;return k})}async function x(j){try{return Bun.serve({port:j,fetch:()=>new Response}).stop(!0),!0}catch{return!1}}async function I(j,F=20){for(let k=0;k<F;k++){let J=j+k;if(await x(J))return J}return j}async function P(j,F=500){let k=Date.now();while(Date.now()-k<F){try{let J=await fetch(`http://localhost:${j}/`,{method:"HEAD"});if(J.ok||J.status===404)return!0}catch{}await new Promise((J)=>setTimeout(J,25))}return!1}function Y(j){if(j.dashboard?.enabled===!1)return;if(j.dashboard?.section)return j.dashboard.section;return j.category??"data"}function B(j,F,k,J){return F.filter((K)=>Y(K)===k).filter((K)=>!H.has(K.id)&&!J.has(K.id)).map((K)=>({id:`model-${K.id}`,label:K.dashboard?.label??K.name,icon:K.icon,url:`${j}/models/${K.id}`,...K.dashboard?.roles&&K.dashboard.roles.length>0?{roles:K.dashboard.roles}:{}}))}function y(j,F,k={}){let J={library:k.library??!0,content:k.content??!0,commerce:k.commerce??!0,marketing:k.marketing??!0,analytics:k.analytics??!0,management:k.management??!0,utilities:k.utilities??!0},K={dashboard:k.data?.dashboard??!0,activity:k.data?.activity??!0,users:k.data?.users??!0,teams:k.data?.teams??!0,subscribers:k.data?.subscribers??!0,allModels:k.data?.allModels??!0},Q=[],$=[{id:"home",label:"Dashboard",icon:"house.fill",url:`${j}/`},{id:"dependencies",label:"Dependencies",icon:"shippingbox.fill",url:`${j}/dependencies`},{id:"health",label:"Health",icon:"heart.text.square.fill",url:`${j}/health`}];if(k.ci)$.push({id:"ci",label:"CI",icon:"checkmark.seal.fill",url:`${j}/ci`});if(Q.push({id:"home",title:"Home",items:$}),J.library)Q.push({id:"library",title:"Library",items:[{id:"functions",label:"Functions",icon:"function",url:`${j}/functions`},{id:"packages",label:"Packages",icon:"shippingbox.fill",url:`${j}/packages`}]});if(J.content)Q.push({id:"content",title:"Content",items:[{id:"content-dashboard",label:"Dashboard",icon:"gauge.with.dots.needle.33percent",url:`${j}/content/dashboard`},{id:"files",label:"Files",icon:"folder.fill",url:`${j}/content/files`},{id:"pages",label:"Pages",icon:"doc.fill",url:`${j}/content/pages`},{id:"posts",label:"Posts",icon:"text.bubble.fill",url:`${j}/content/posts`},{id:"categories",label:"Categories",icon:"tag.fill",url:`${j}/content/categories`},{id:"tags",label:"Tags",icon:"tag",url:`${j}/content/tags`},{id:"comments",label:"Comments",icon:"bubble.left.fill",url:`${j}/content/comments`},{id:"authors",label:"Authors",icon:"person.text.rectangle.fill",url:`${j}/content/authors`},{id:"seo",label:"SEO",icon:"magnifyingglass",url:`${j}/content/seo`},...B(j,F,"content",new Set(["page","post","category","tag","comment","author"]))]});Q.push({id:"app",title:"App",items:[{id:"deployments",label:"Deployments",icon:"rocket.fill",url:`${j}/deployments`},{id:"requests",label:"Requests",icon:"arrow.left.arrow.right",url:`${j}/requests`},{id:"realtime",label:"Realtime",icon:"link",url:`${j}/realtime`},{id:"actions",label:"Actions",icon:"bolt.fill",url:`${j}/actions`},{id:"commands",label:"Commands",icon:"terminal.fill",url:`${j}/commands`},{id:"queue",label:"Queue",icon:"list.bullet.rectangle.fill",url:`${j}/queue`},{id:"jobs",label:"Jobs",icon:"briefcase.fill",url:`${j}/jobs`},{id:"inbox",label:"Inbox",icon:"tray.full.fill",url:`${j}/inbox`},{id:"queries",label:"Queries",icon:"magnifyingglass.circle.fill",url:`${j}/queries`},{id:"notifications",label:"Notifications",icon:"bell.fill",url:`${j}/notifications/dashboard`},...B(j,F,"system",new Set)]});let Z=[];if(K.dashboard)Z.push({id:"data-dashboard",label:"Dashboard",icon:"gauge.with.dots.needle.33percent",url:`${j}/data/dashboard`});if(K.activity)Z.push({id:"activity",label:"Activity",icon:"waveform.path.ecg",url:`${j}/data/activity`});if(K.users)Z.push({id:"users",label:"Users",icon:"person.crop.circle.fill",url:`${j}/data/users`});if(K.teams)Z.push({id:"teams",label:"Teams",icon:"person.3.fill",url:`${j}/data/teams`});if(K.subscribers)Z.push({id:"subscribers",label:"Subscribers",icon:"envelope.fill",url:`${j}/data/subscribers`});if(K.allModels)Z.push({id:"data-models",label:"All Models",icon:"square.grid.2x2.fill",url:`${j}/models`});let z=F.filter((X)=>{let q=Y(X);return q==="userland"||q==="data"}).filter((X)=>!H.has(X.id)).map((X)=>({id:`model-${X.id}`,label:X.dashboard?.label??X.name,icon:X.icon,url:`${j}/models/${X.id}`,...X.dashboard?.roles&&X.dashboard.roles.length>0?{roles:X.dashboard.roles}:{}}));if(Q.push({id:"data",title:"Data",items:[...Z,...z]}),J.commerce)Q.push({id:"commerce",title:"Commerce",items:[{id:"commerce-dashboard",label:"Dashboard",icon:"gauge.with.dots.needle.33percent",url:`${j}/commerce/dashboard`},{id:"customers",label:"Customers",icon:"person.crop.circle.fill",url:`${j}/commerce/customers`},{id:"orders",label:"Orders",icon:"list.clipboard.fill",url:`${j}/commerce/orders`},{id:"products",label:"Products",icon:"cube.box.fill",url:`${j}/commerce/products`},{id:"coupons",label:"Coupons",icon:"ticket.fill",url:`${j}/commerce/coupons`},{id:"gift-cards",label:"Gift Cards",icon:"giftcard.fill",url:`${j}/commerce/gift-cards`},{id:"payments",label:"Payments",icon:"creditcard.fill",url:`${j}/commerce/payments`},{id:"delivery",label:"Delivery",icon:"truck.box.fill",url:`${j}/commerce/delivery`},{id:"taxes",label:"Taxes",icon:"percent",url:`${j}/commerce/taxes`},...B(j,F,"commerce",new Set(["customer","order","product","coupon","gift-card","payment","review","category"]))]});if(J.marketing)Q.push({id:"marketing",title:"Marketing",items:[{id:"lists",label:"Lists",icon:"list.bullet",url:`${j}/marketing/lists`},{id:"social-posts",label:"Social Posts",icon:"clock.fill",url:`${j}/marketing/social-posts`},{id:"campaigns",label:"Campaigns",icon:"megaphone.fill",url:`${j}/marketing/campaigns`},{id:"marketing-reviews",label:"Reviews",icon:"star.fill",url:`${j}/marketing/reviews`},...B(j,F,"marketing",new Set(["campaign"]))]});if(J.analytics)Q.push({id:"analytics",title:"Analytics",items:[{id:"analytics-web",label:"Web",icon:"globe",url:`${j}/analytics/web`},{id:"analytics-blog",label:"Blog",icon:"doc.text.fill",url:`${j}/analytics/blog`},{id:"analytics-commerce",label:"Commerce",icon:"cart.fill",url:`${j}/analytics/commerce/web`},{id:"analytics-marketing",label:"Marketing",icon:"megaphone.fill",url:`${j}/analytics/marketing`}]});if(J.management)Q.push({id:"management",title:"Management",items:[{id:"cloud",label:"Cloud",icon:"cloud.fill",url:`${j}/cloud`},{id:"servers",label:"Servers",icon:"server.rack",url:`${j}/servers`},{id:"serverless",label:"Serverless",icon:"bolt.horizontal.circle.fill",url:`${j}/serverless`},{id:"dns",label:"DNS",icon:"network",url:`${j}/dns`},{id:"mailboxes",label:"Mailboxes",icon:"tray.full.fill",url:`${j}/mailboxes`},{id:"logs",label:"Logs",icon:"list.bullet.rectangle.portrait.fill",url:`${j}/logs`},{id:"kanban",label:"Kanban",icon:"rectangle.stack.fill",url:`${j}/kanban`,roles:["admin","dev"]}]});if(J.utilities)Q.push({id:"utilities",title:"Utilities",items:[{id:"buddy",label:"AI Buddy",icon:"bubble.left.and.bubble.right.fill",url:`${j}/buddy`},{id:"environment",label:"Environment",icon:"key.fill",url:`${j}/environment`},{id:"access-tokens",label:"Access Tokens",icon:"key.horizontal.fill",url:`${j}/access-tokens`},{id:"settings",label:"Settings",icon:"gear",url:`${j}/settings/billing`}]});return{sections:Q,minWidth:200,maxWidth:280}}function v(j){return`http://localhost:${j}/?native-sidebar=1`}
|
|
3
|
-
export{U as
|
|
3
|
+
export{U as Xa,W as Ya,H as Za,A as _a,D as $a,V as ab,N as bb,C as cb,x as db,I as eb,P as fb,y as gb,v as hb};
|