@stacksjs/actions 0.75.5 → 0.75.7

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/blog.js CHANGED
@@ -1,4 +1,4 @@
1
- import{existsSync,mkdirSync,readdirSync,readFileSync,writeFileSync}from"node:fs";import{homedir}from"node:os";import{join}from"node:path";const CONTENT_DIR=join(process.cwd(),"content/blog"),THEME_FILE=join(CONTENT_DIR,".theme.css");function blogDefaults(){const appName=(process.env.APP_NAME||"").trim(),appUrl=(process.env.APP_URL||"").trim().replace(/\/+$/,""),title=appName?`${appName} Blog`:"Blog";return{title,description:"",siteTitle:title,author:appName,url:appUrl&&!/^https?:\/\//.test(appUrl)?`https://${appUrl}`:appUrl,nav:[{text:"Home",link:"/"},{text:"Blog",link:"/blog"}],themes:["colored","light","dark"],defaultTheme:"colored",colophon:'<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."}}let sitePromise=null;function site(){if(!sitePromise)sitePromise=(async()=>{try{const cfg=(await import(join(process.cwd(),"config/blog.ts"))).default??{},merged={...blogDefaults(),...cfg};if(!cfg.siteTitle&&cfg.title)merged.siteTitle=cfg.title;return merged}catch{return blogDefaults()}})();return sitePromise}let bunpressPromise=null;async function loadBunPress(){if(!bunpressPromise)bunpressPromise=(async()=>{const candidates=[join(homedir(),"Code/Tools/bunpress/packages/bunpress/dist/src/index.js"),join(process.cwd(),"pantry/@stacksjs/bunpress/dist/src/index.js")].filter((entry)=>existsSync(entry));try{candidates.push(Bun.resolveSync("@stacksjs/bunpress",import.meta.dir))}catch{}for(const entry of new Set(candidates))try{return await import(entry)}catch(cause){const detail=cause instanceof Error?cause.message:String(cause);throw Error(`[blog] Failed to import BunPress from ${entry}: ${detail}`,{cause})}return null})();return bunpressPromise}function escapeHtml(s){return String(s).replace(/[&<>"]/g,(c)=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[c])}function escapeXml(s){return String(s).replace(/[&<>"']/g,(c)=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&apos;"})[c])}export function usableOrigin(value){if(!value)return"";try{const url=new URL(/^https?:\/\//.test(value)?value:`https://${value}`);if(url.protocol!=="http:"&&url.protocol!=="https:")return"";if(!url.hostname.includes(".")||!/^[a-z0-9.-]+$/i.test(url.hostname))return"";return url.origin}catch{return""}}function postUrl(baseUrl,slug){return`${baseUrl.replace(/\/$/,"")}/blog/${slug}`}function rssDate(date){if(!date)return"";const parsed=new Date(date);return Number.isNaN(parsed.getTime())?date:parsed.toUTCString()}async function fallbackFeedXml(baseUrl){const cfg=await site(),origin=usableOrigin(baseUrl)||usableOrigin(cfg.url)||cfg.url,items=listPosts().slice(0,50).map((p)=>{const url=postUrl(origin,p.slug);return` <item>
1
+ import{existsSync,mkdirSync,readdirSync,readFileSync,writeFileSync}from"node:fs";import{homedir}from"node:os";import{join}from"node:path";import{articleCss,articleScript,renderPostHtml}from"@stacksjs/cms/article";const CONTENT_DIR=join(process.cwd(),"content/blog"),THEME_FILE=join(CONTENT_DIR,".theme.css");function blogDefaults(){const appName=(process.env.APP_NAME||"").trim(),appUrl=(process.env.APP_URL||"").trim().replace(/\/+$/,""),title=appName?`${appName} Blog`:"Blog";return{title,description:"",siteTitle:title,author:appName,url:appUrl&&!/^https?:\/\//.test(appUrl)?`https://${appUrl}`:appUrl,nav:[{text:"Home",link:"/"},{text:"Blog",link:"/blog"}],themes:["colored","light","dark"],defaultTheme:"colored",colophon:'<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."}}let sitePromise=null;function site(){if(!sitePromise)sitePromise=(async()=>{try{const cfg=(await import(join(process.cwd(),"config/blog.ts"))).default??{},merged={...blogDefaults(),...cfg};if(!cfg.siteTitle&&cfg.title)merged.siteTitle=cfg.title;return merged}catch{return blogDefaults()}})();return sitePromise}let bunpressPromise=null;async function loadBunPress(){if(!bunpressPromise)bunpressPromise=(async()=>{const candidates=[join(homedir(),"Code/Tools/bunpress/packages/bunpress/dist/src/index.js"),join(process.cwd(),"pantry/@stacksjs/bunpress/dist/src/index.js")].filter((entry)=>existsSync(entry));try{candidates.push(Bun.resolveSync("@stacksjs/bunpress",import.meta.dir))}catch{}for(const entry of new Set(candidates))try{return await import(entry)}catch(cause){const detail=cause instanceof Error?cause.message:String(cause);throw Error(`[blog] Failed to import BunPress from ${entry}: ${detail}`,{cause})}return null})();return bunpressPromise}function escapeHtml(s){return String(s).replace(/[&<>"]/g,(c)=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[c])}function escapeXml(s){return String(s).replace(/[&<>"']/g,(c)=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&apos;"})[c])}export function usableOrigin(value){if(!value)return"";try{const url=new URL(/^https?:\/\//.test(value)?value:`https://${value}`);if(url.protocol!=="http:"&&url.protocol!=="https:")return"";if(!url.hostname.includes(".")||!/^[a-z0-9.-]+$/i.test(url.hostname))return"";return url.origin}catch{return""}}function postUrl(baseUrl,slug){return`${baseUrl.replace(/\/$/,"")}/blog/${slug}`}function rssDate(date){if(!date)return"";const parsed=new Date(date);return Number.isNaN(parsed.getTime())?date:parsed.toUTCString()}async function fallbackFeedXml(baseUrl){const cfg=await site(),origin=usableOrigin(baseUrl)||usableOrigin(cfg.url)||cfg.url,items=listPosts().slice(0,50).map((p)=>{const url=postUrl(origin,p.slug);return` <item>
2
2
  <title>${escapeXml(p.fm.title||p.slug)}</title>
3
3
  <link>${escapeXml(url)}</link>
4
4
  <guid>${escapeXml(url)}</guid>
@@ -68,13 +68,14 @@ ${[`${origin}/blog`,...listPosts().map((p)=>postUrl(origin,p.slug))].map((url)=>
68
68
  ${toggle}`}async function blogFooter(){return`<footer class="blog-foot">
69
69
  <p class="colophon">${(await site()).colophon}</p>
70
70
  </footer>`}async function blogConfig(bp,fm){const cfg=await site(),themeCss=existsSync(THEME_FILE)?readFileSync(THEME_FILE,"utf-8"):"",baseCss=bp.defaultConfig.markdown?.css||"";return{...bp.defaultConfig,title:fm.title||cfg.title,description:fm.description||cfg.description,docsDir:CONTENT_DIR,theme:"bun",markdown:{...bp.defaultConfig.markdown,css:`${baseCss}
71
+ ${articleCss()}
71
72
  ${themeCss}`},themeConfig:{siteTitle:cfg.siteTitle,nav:cfg.nav}}}function listPosts(){if(!existsSync(CONTENT_DIR))return[];return readdirSync(CONTENT_DIR).filter((f)=>f.endsWith(".md")).map((f)=>{const{data}=parseFrontmatter(readFileSync(join(CONTENT_DIR,f),"utf-8"));return{slug:f.replace(/\.md$/,""),fm:data}}).filter((p)=>!!p.fm.title&&!!p.fm.date&&p.fm.draft!=="true").sort((a,b)=>{const fa=a.fm.featured==="true"?1:0,fb=b.fm.featured==="true"?1:0;if(fa!==fb)return fb-fa;return(b.fm.date||"").localeCompare(a.fm.date||"")})}async function notFoundHtml(bp){const body=`
72
73
  <a class="blog-back" href="/blog">\u2190 All posts</a>
73
74
  <div class="blog-404">
74
75
  <p class="blog-kicker">404</p>
75
76
  <h1>Nothing here</h1>
76
77
  <p>This post doesn't exist (or it moved). Head back to <a href="/blog">all posts</a>.</p>
77
- </div>`;return bp.wrapInLayout(await blogChrome()+body+await blogFooter(),await blogConfig(bp,{title:"Not found"}),"/blog","page")}async function postHtml(bp,slug,origin){const cfg=await site(),file=join(CONTENT_DIR,`${slug}.md`);if(!existsSync(file))return null;const raw=readFileSync(file,"utf-8"),{html,frontmatter:fm}=await bp.markdownToHtml(raw,CONTENT_DIR);if(!fm.title||!fm.date||fm.draft===!0||fm.draft==="true")return null;const author=fm.author||cfg.author,initial=escapeHtml(author.charAt(0).toUpperCase()),header=`
78
+ </div>`;return bp.wrapInLayout(await blogChrome()+body+await blogFooter(),await blogConfig(bp,{title:"Not found"}),"/blog","page")}async function postHtml(bp,slug,origin){const cfg=await site(),file=join(CONTENT_DIR,`${slug}.md`);if(!existsSync(file))return null;const raw=readFileSync(file,"utf-8"),rendered=await bp.markdownToHtml(raw,CONTENT_DIR),fm=rendered.frontmatter,html=renderPostHtml(rendered.html);if(!fm.title||!fm.date||fm.draft===!0||fm.draft==="true")return null;const author=fm.author||cfg.author,initial=escapeHtml(author.charAt(0).toUpperCase()),header=`
78
79
  <a class="blog-back" href="/blog">\u2190 All posts</a>
79
80
  <div class="blog-post-head">
80
81
  <p class="blog-post-meta">
@@ -94,7 +95,7 @@ ${themeCss}`},themeConfig:{siteTitle:cfg.siteTitle,nav:cfg.nav}}}function listPo
94
95
  </div>`,others=listPosts().filter((p)=>p.slug!==slug).slice(0,3),more=others.length?`<nav class="blog-more">
95
96
  <h2>More from the blog</h2>
96
97
  <ul>${others.map((p)=>`<li><a href="/blog/${escapeHtml(p.slug)}">${escapeHtml(p.fm.title||p.slug)}</a></li>`).join("")}</ul>
97
- </nav>`:"";return bp.wrapInLayout(await blogChrome()+header+html+authorCard+share+more+await blogFooter(),await blogConfig(bp,fm),`/blog/${slug}`,"page")}async function indexHtml(bp){const cfg=await site(),posts=listPosts(),[lead,...rest]=posts,leadHtml=lead?`<a class="blog-feature" href="/blog/${escapeHtml(lead.slug)}">
98
+ </nav>`:"";return bp.wrapInLayout(await blogChrome()+header+html+authorCard+share+more+await blogFooter()+articleScript(),await blogConfig(bp,fm),`/blog/${slug}`,"page")}async function indexHtml(bp){const cfg=await site(),posts=listPosts(),[lead,...rest]=posts,leadHtml=lead?`<a class="blog-feature" href="/blog/${escapeHtml(lead.slug)}">
98
99
  <p class="blog-feature-meta">${lead.fm.featured==="true"?'<span class="chip">Featured</span>':""}<time>${escapeHtml(formatDate(lead.fm.date))}</time></p>
99
100
  <h2>${escapeHtml(lead.fm.title||lead.slug)}</h2>
100
101
  <p class="blog-feature-excerpt">${escapeHtml((lead.fm.description||"").slice(0,200))}</p>
@@ -1,4 +1,4 @@
1
- import{createHash}from"node:crypto";import{chmodSync,copyFileSync,existsSync,mkdirSync,readFileSync,rmSync,writeFileSync}from"node:fs";import{join}from"node:path";import process from"node:process";import{log}from"@stacksjs/cli";import{corePath,projectPath,storagePath}from"@stacksjs/path";import{assertDesktopReleaseChannel,hasUserlandDesktopLauncher,resolveCraftExecutable,resolveDesktopLauncher}from"@stacksjs/desktop-build";import{runBuildStep}from"./run-build-step";const outputDir=storagePath("framework/desktop-dist"),launcherName=process.platform==="win32"?"stacks-desktop.exe":"stacks-desktop",runtimeName=process.platform==="win32"?"craft-runtime.exe":"craft-runtime",appUrl=process.env.DESKTOP_URL||process.env.APP_URL,releaseChannel=process.env.DESKTOP_RELEASE_CHANNEL==="stable"?"stable":"experimental",support=assertDesktopReleaseChannel(releaseChannel),ownsLauncher=hasUserlandDesktopLauncher(projectPath());if(!appUrl&&!ownsLauncher)throw Error("Desktop builds require APP_URL or DESKTOP_URL so the native app knows which Stacks application to open. An app that opens something local instead can supply its own app/Desktop/launcher.ts.");const url=appUrl?new URL(/^https?:\/\//.test(appUrl)?appUrl:`https://${appUrl}`):null,craftBinary=resolveCraftExecutable();if(readFileSync(craftBinary).subarray(0,2).toString()==="#!")throw Error(`CRAFT_BIN points at a script, not a native binary: ${craftBinary}. Point it at the compiled Craft executable (packages/zig/zig-out/bin/craft).`);if(existsSync(outputDir))rmSync(outputDir,{recursive:!0});mkdirSync(outputDir,{recursive:!0});const desktopSource=corePath("desktop");if(existsSync(join(desktopSource,"package.json"))&&existsSync(join(desktopSource,"src")))await runBuildStep("bun run build",{cwd:desktopSource,describe:"The desktop package build"});const minify=process.env.DESKTOP_MINIFY!=="false",launcherEntry=resolveDesktopLauncher(projectPath());await runBuildStep(["bun","build","--compile",...minify?["--minify"]:[],launcherEntry,"--outfile",join(outputDir,launcherName)],{cwd:projectPath(),describe:"Compiling the desktop launcher"});copyFileSync(craftBinary,join(outputDir,runtimeName));if(process.platform!=="win32"){chmodSync(join(outputDir,launcherName),493);chmodSync(join(outputDir,runtimeName),493)}writeFileSync(join(outputDir,"desktop.json"),`${JSON.stringify({url:url?url.toString().replace(/\/$/,""):"",title:process.env.APP_NAME||"Stacks",width:1400,height:900,darkMode:!1,systemTray:!0,hideDockIcon:!1,releaseChannel,platform:process.platform,architecture:process.arch,launcher:ownsLauncher?"userland":"framework"},null,2)}
1
+ import{createHash}from"node:crypto";import{chmodSync,copyFileSync,existsSync,mkdirSync,readFileSync,rmSync,writeFileSync}from"node:fs";import{join}from"node:path";import process from"node:process";import{log}from"@stacksjs/cli";import{corePath,projectPath,storagePath}from"@stacksjs/path";import{assertDesktopReleaseChannel,desktopLauncherCompileArgs,hasUserlandDesktopLauncher,resolveCraftExecutable,resolveDesktopLauncher}from"@stacksjs/desktop-build";import{runBuildStep}from"./run-build-step";const outputDir=storagePath("framework/desktop-dist"),launcherName=process.platform==="win32"?"stacks-desktop.exe":"stacks-desktop",runtimeName=process.platform==="win32"?"craft-runtime.exe":"craft-runtime",appUrl=process.env.DESKTOP_URL||process.env.APP_URL,releaseChannel=process.env.DESKTOP_RELEASE_CHANNEL==="stable"?"stable":"experimental",support=assertDesktopReleaseChannel(releaseChannel),ownsLauncher=hasUserlandDesktopLauncher(projectPath());if(!appUrl&&!ownsLauncher)throw Error("Desktop builds require APP_URL or DESKTOP_URL so the native app knows which Stacks application to open. An app that opens something local instead can supply its own app/Desktop/launcher.ts.");const url=appUrl?new URL(/^https?:\/\//.test(appUrl)?appUrl:`https://${appUrl}`):null,craftBinary=resolveCraftExecutable();if(readFileSync(craftBinary).subarray(0,2).toString()==="#!")throw Error(`CRAFT_BIN points at a script, not a native binary: ${craftBinary}. Point it at the compiled Craft executable (packages/zig/zig-out/bin/craft).`);if(existsSync(outputDir))rmSync(outputDir,{recursive:!0});mkdirSync(outputDir,{recursive:!0});const desktopSource=corePath("desktop");if(existsSync(join(desktopSource,"package.json"))&&existsSync(join(desktopSource,"src")))await runBuildStep("bun run build",{cwd:desktopSource,describe:"The desktop package build"});const minify=process.env.DESKTOP_MINIFY!=="false",launcherEntry=resolveDesktopLauncher(projectPath());await runBuildStep(["bun",...desktopLauncherCompileArgs({entry:launcherEntry,outfile:join(outputDir,launcherName),minify})],{cwd:projectPath(),describe:"Compiling the desktop launcher"});copyFileSync(craftBinary,join(outputDir,runtimeName));if(process.platform!=="win32"){chmodSync(join(outputDir,launcherName),493);chmodSync(join(outputDir,runtimeName),493)}writeFileSync(join(outputDir,"desktop.json"),`${JSON.stringify({url:url?url.toString().replace(/\/$/,""):"",title:process.env.APP_NAME||"Stacks",width:1400,height:900,darkMode:!1,systemTray:!0,hideDockIcon:!1,releaseChannel,platform:process.platform,architecture:process.arch,launcher:ownsLauncher?"userland":"framework"},null,2)}
2
2
  `);const gitResult=Bun.spawnSync(["git","rev-parse","HEAD"],{cwd:projectPath()});if(gitResult.exitCode!==0)throw Error("Desktop builds require an exact Git source revision");const sourceRevision=gitResult.stdout.toString().trim(),remoteResult=Bun.spawnSync(["git","remote","get-url","origin"],{cwd:projectPath()}),sourceRepository=remoteResult.exitCode===0?remoteResult.stdout.toString().trim().replace(/\.git$/,""):"unknown",artifacts=[launcherName,runtimeName,"desktop.json"].map((name)=>{const contents=readFileSync(join(outputDir,name));return{name,bytes:contents.byteLength,sha256:createHash("sha256").update(contents).digest("hex")}});writeFileSync(join(outputDir,"provenance.json"),`${JSON.stringify({schemaVersion:"1.0.0",sourceRepository,sourceRevision,builtWith:{bun:Bun.version,craftSha256:artifacts.find((artifact)=>artifact.name===runtimeName)?.sha256},target:{platform:process.platform,architecture:process.arch,status:support.status,osVersions:support.osVersions},releaseChannel,artifacts},null,2)}
3
3
  `);writeFileSync(join(outputDir,"checksums.sha256"),`${artifacts.map((artifact)=>`${artifact.sha256} ${artifact.name}`).join(`
4
4
  `)}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/actions",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.75.5",
5
+ "version": "0.75.7",
6
6
  "description": "The Stacks actions.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -60,52 +60,52 @@
60
60
  "prepublishOnly": "bun run build"
61
61
  },
62
62
  "dependencies": {
63
- "@stacksjs/action-runner": "0.75.5",
64
- "@stacksjs/ai": "0.75.5",
65
- "@stacksjs/analytics": "0.75.5",
66
- "@stacksjs/api": "0.75.5",
67
- "@stacksjs/auth": "0.75.5",
68
- "@stacksjs/build": "0.75.5",
63
+ "@stacksjs/action-runner": "0.75.7",
64
+ "@stacksjs/ai": "0.75.7",
65
+ "@stacksjs/analytics": "0.75.7",
66
+ "@stacksjs/api": "0.75.7",
67
+ "@stacksjs/auth": "0.75.7",
68
+ "@stacksjs/build": "0.75.7",
69
69
  "@stacksjs/bumpx": "^0.2.6",
70
70
  "@stacksjs/bunpress": "^0.2.8",
71
- "@stacksjs/cli": "0.75.5",
72
- "@stacksjs/cloud": "0.75.5",
73
- "@stacksjs/cms": "0.75.5",
71
+ "@stacksjs/cli": "0.75.7",
72
+ "@stacksjs/cloud": "0.75.7",
73
+ "@stacksjs/cms": "0.75.7",
74
74
  "@stacksjs/components": "^0.2.307",
75
- "@stacksjs/config": "0.75.5",
76
- "@stacksjs/database": "0.75.5",
77
- "@stacksjs/desktop-build": "0.75.5",
78
- "@stacksjs/dns": "0.75.5",
79
- "@stacksjs/enums": "0.75.5",
80
- "@stacksjs/env": "0.75.5",
81
- "@stacksjs/error-handling": "0.75.5",
75
+ "@stacksjs/config": "0.75.7",
76
+ "@stacksjs/database": "0.75.7",
77
+ "@stacksjs/desktop-build": "0.75.7",
78
+ "@stacksjs/dns": "0.75.7",
79
+ "@stacksjs/enums": "0.75.7",
80
+ "@stacksjs/env": "0.75.7",
81
+ "@stacksjs/error-handling": "0.75.7",
82
82
  "@stacksjs/gitit": "^0.2.5",
83
- "@stacksjs/i18n": "0.75.5",
84
- "@stacksjs/image": "0.75.5",
85
- "@stacksjs/logging": "0.75.5",
83
+ "@stacksjs/i18n": "0.75.7",
84
+ "@stacksjs/image": "0.75.7",
85
+ "@stacksjs/logging": "0.75.7",
86
86
  "@stacksjs/logsmith": "^0.2.3",
87
- "@stacksjs/orm": "0.75.5",
88
- "@stacksjs/path": "0.75.5",
89
- "@stacksjs/payments": "0.75.5",
90
- "@stacksjs/queue": "0.75.5",
91
- "@stacksjs/registry": "0.75.5",
92
- "@stacksjs/router": "0.75.5",
87
+ "@stacksjs/orm": "0.75.7",
88
+ "@stacksjs/path": "0.75.7",
89
+ "@stacksjs/payments": "0.75.7",
90
+ "@stacksjs/queue": "0.75.7",
91
+ "@stacksjs/registry": "0.75.7",
92
+ "@stacksjs/router": "0.75.7",
93
93
  "@stacksjs/rpx": "^0.11.54",
94
- "@stacksjs/scheduler": "0.75.5",
95
- "@stacksjs/search-engine": "0.75.5",
96
- "@stacksjs/security": "0.75.5",
97
- "@stacksjs/server": "0.75.5",
98
- "@stacksjs/sites": "0.75.5",
99
- "@stacksjs/storage": "0.75.5",
100
- "@stacksjs/strings": "0.75.5",
94
+ "@stacksjs/scheduler": "0.75.7",
95
+ "@stacksjs/search-engine": "0.75.7",
96
+ "@stacksjs/security": "0.75.7",
97
+ "@stacksjs/server": "0.75.7",
98
+ "@stacksjs/sites": "0.75.7",
99
+ "@stacksjs/storage": "0.75.7",
100
+ "@stacksjs/strings": "0.75.7",
101
101
  "@stacksjs/stx": "^0.2.307",
102
102
  "@stacksjs/tlsx": "^0.13.19",
103
103
  "@stacksjs/ts-cloud": "^0.16.11",
104
104
  "@stacksjs/ts-md": "^0.1.1",
105
- "@stacksjs/tunnel": "0.75.5",
106
- "@stacksjs/types": "0.75.5",
107
- "@stacksjs/utils": "0.75.5",
108
- "@stacksjs/whois": "0.75.5",
105
+ "@stacksjs/tunnel": "0.75.7",
106
+ "@stacksjs/types": "0.75.7",
107
+ "@stacksjs/utils": "0.75.7",
108
+ "@stacksjs/whois": "0.75.7",
109
109
  "bun-plugin-stx": "^0.2.307"
110
110
  },
111
111
  "peerDependencies": {
@@ -121,7 +121,7 @@
121
121
  }
122
122
  },
123
123
  "devDependencies": {
124
- "@stacksjs/validation": "0.75.5",
124
+ "@stacksjs/validation": "0.75.7",
125
125
  "better-dx": "^0.2.24"
126
126
  }
127
127
  }