@stacksjs/actions 0.70.82 → 0.70.84
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/dev/dashboard.js +5 -5
- package/package.json +16 -16
package/dist/dev/dashboard.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Aa as
|
|
3
|
-
// rebuild with: cd ${
|
|
2
|
+
import{Aa as u,Ca as b,Da as n,za as m}from"../chunk-k7n6c9hm.js";import{qb as A}from"../chunk-v0hqskdk.js";import $ from"process";import{existsSync as j,readFileSync as o,writeFileSync as c}from"fs";import{bold as B,cyan as x,dim as Y,green as k}from"@stacksjs/cli";import{projectPath as T,storagePath as D}from"@stacksjs/path";var p=$.argv.indexOf("--verbose"),F=p!==-1&&$.argv[p+1]!=="false",s=Bun.nanoseconds(),i=console.log,e=console.warn,P=[];console.log=(...X)=>{P.push(X.map(String).join(" "))};console.warn=(...X)=>{P.push(X.map(String).join(" "))};var g=D("framework/defaults/views/dashboard"),EE=T("resources/views/dashboard"),h=Number($.env.PORT_ADMIN)||3002,V=await b(h),S=$.env.APP_URL||"",XE=S!==""&&S!=="localhost"&&!S.includes("localhost:"),y=XE?S.replace(/^https?:\/\//,""):null,C=y?`dashboard.${y}`:null,l=`${$.env.HOME}/.stacks/ssl`;function d(){console.log=i,console.warn=(...X)=>{let O=X.map(String).join(" ");if(O.includes("[STX] DOM API violation")||O.includes("unsafe expression"))return;e(...X)}}async function YE(){try{await import("@stacksjs/orm")}catch(E){if(F)console.warn("[dashboard] orm preload failed:",E?.message||E)}try{let{hoistDashboardGlobals:E}=await import("./dashboard-globals.js");await E({verbose:F})}catch(E){if(F)console.warn("[dashboard] globals preload failed:",E?.message||E)}let X;try{X=(await import("../chunk-hv8tkjw2.js")).serve}catch{X=(await import(T("pantry/bun-plugin-stx/dist/serve.js"))).serve}let O;try{let E=$.env.STX_SRC||`${$.env.HOME}/Code/Tools/stx/packages/stx/src/index.ts`;if(await Bun.file(E).exists())O=await import(E)}catch{}if(O&&F)console.log("[Dashboard] Using local stx checkout");if(!O)try{let E=T("pantry/@stacksjs/stx/dist/index.js");if(await Bun.file(E).exists())O=await import(E)}catch{}let{listConfigFiles:G,readConfig:K,updateConfigKey:Q}=await import(D("framework/defaults/resources/functions/dashboard/config-io.ts")),N={"/__deps/charts.js":D("framework/core/charts/dist/index.js")},U={...Object.fromEntries(Object.entries(N).map(([E,z])=>[E,async()=>{let W=Bun.file(z);if(!await W.exists())return new Response(`// dependency dist missing: ${z}
|
|
3
|
+
// rebuild with: cd ${z.replace(/\/dist\/[^/]+$/,"")} && bun build.ts`,{status:500,headers:{"content-type":"text/javascript; charset=utf-8"}});return new Response(W,{headers:{"content-type":"text/javascript; charset=utf-8","cache-control":"no-cache"}})}])),"/api/config/list":async()=>{try{return Response.json({ok:!0,files:G()})}catch(E){return Response.json({ok:!1,error:E?.message},{status:500})}},"/api/config/read":async(E)=>{try{let W=new URL(E.url).searchParams.get("name")||"";if(!/^[\w-]+$/.test(W))return Response.json({ok:!1,error:"Invalid config name"},{status:400});let Z=await K(W);if(!Z)return Response.json({ok:!1,error:"Not found"},{status:404});return Response.json({ok:!0,name:W,fields:Z.fields,values:Z.values})}catch(z){return Response.json({ok:!1,error:z?.message},{status:500})}},"/api/config/source":async(E)=>{try{let W=new URL(E.url).searchParams.get("name")||"";if(!/^[\w-]+$/.test(W))return Response.json({ok:!1,error:"Invalid config name"},{status:400});let Z=await K(W);if(!Z)return Response.json({ok:!1,error:"Not found"},{status:404});return new Response(Z.source,{headers:{"content-type":"text/plain; charset=utf-8"}})}catch(z){return Response.json({ok:!1,error:z?.message},{status:500})}},"/api/config/update":async(E)=>{if(E.method!=="POST")return Response.json({ok:!1,error:"Method not allowed"},{status:405});try{let z=await E.json(),W=z.file?.replace(/\.ts$/,"");if(!W||!/^[\w-]+$/.test(W))return Response.json({ok:!1,error:"Invalid file"},{status:400});let Z=[];if(Array.isArray(z.updates))for(let _ of z.updates){let I=_.key??_.path;if(typeof I==="string")Z.push({key:I,value:_.value})}else if(z.key)Z.push({key:z.key,value:z.value});if(Z.length===0)return Response.json({ok:!1,error:"No updates supplied"},{status:400});let R=[];for(let _ of Z)try{let I=await Q(W,_.key,H(_.value));R.push({key:_.key,ok:!0,newValue:I.newValue})}catch(I){R.push({key:_.key,ok:!1,error:I?.message})}let a=R.every((_)=>_.ok);return Response.json({ok:a,file:W,results:R})}catch(z){return Response.json({ok:!1,error:z?.message},{status:500})}}};function H(E){if(typeof E==="boolean"||typeof E==="number")return E;if(E==="true")return!0;if(E==="false")return!1;if(E===""||E==null)return"";if(typeof E==="string"&&/^-?\d+(?:\.\d+)?$/.test(E))return Number(E);return String(E)}let L=null;try{let E=await import("@stacksjs/router"),z=(await import(T("app/Routes.ts"))).default;await E.loadRoutes(z),L=E.route}catch(E){if(F)console.warn("[dashboard] Stacks router init failed:",E?.message||E)}X({patterns:[EE,g],port:V,componentsDir:D("framework/defaults/resources/components/Dashboard"),layoutsDir:g,partialsDir:g,quiet:!0,routes:U,onRequest:L?async(E)=>{let W=new URL(E.url).pathname;if(W.startsWith("/api/config/")||W.startsWith("/__deps/"))return null;if(W.startsWith("/api/"))return L.handleRequest(E);if(E.method.toUpperCase()!=="GET")return L.handleRequest(E);return null}:void 0,auth:!1,...O&&{stxModule:O}}).catch((E)=>{d(),console.error(`
|
|
4
4
|
Failed to start dashboard server: ${E?.message||E}
|
|
5
|
-
`)
|
|
6
|
-
`),await new Promise(()=>{});let Q=
|
|
5
|
+
`),$.exit(1)})}async function $E(){if(!C)return!1;if($.env.STACKS_PROXY_MANAGED)return!1;try{let{startProxies:X}=await import("@stacksjs/rpx");return await X({proxies:[{from:`localhost:${V}`,to:C,cleanUrls:!1}],https:{basePath:l,validityDays:825},regenerateUntrustedCerts:!1,verbose:F}),!0}catch(X){if(F)i(` ${Y(`Proxy: ${X}`)}`);return!1}}var zE=V+1;function J(X,O=200,G={}){return new Response(JSON.stringify(X),{status:O,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type",...G}})}function GE(){Bun.serve({port:zE,fetch:async(X)=>{if(X.method==="OPTIONS")return new Response(null,{headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"}});if(new URL(X.url).pathname==="/api/config/update"&&X.method==="POST")try{let{file:G,updates:K}=await X.json();if(!G||G.includes("..")||!G.match(/^[\w.-]+\.ts$/))return J({error:"Invalid file name"},400);let Q=T(`config/${G}`),N=o(Q,"utf-8");for(let{path:U,value:H}of K){let w=U.split(".").pop().replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),E=new RegExp(`(${w}\\s*:\\s*)(?:'[^']*'|"[^"]*"|\\d+(?:\\.\\d+)?|true|false)`);if(E.test(N)){let z=/^\d+(?:\.\d+)?$/.test(H),W=H==="true"||H==="false",Z=H.replace(/'/g,"\\'").replace(/\$/g,"$$$$"),R=z||W?H:`'${Z}'`;N=N.replace(E,`$1${R}`)}}return c(Q,N,"utf-8"),J({success:!0})}catch(G){return J({error:G.message},500)}return J({error:"Not found"},404)}})}GE();var[,t]=await Promise.all([YE(),m(T("app/Models"),D("framework/defaults/app/Models"))]);async function OE(){let X={library:!0,content:!0,commerce:!0,marketing:!0,analytics:!0,management:!0,utilities:!0,ci:!1,data:{dashboard:!0,activity:!0,users:!0,teams:!0,subscribers:!0,allModels:!0}};try{let O=await import(T("config/dashboard.ts")),G=O.default?.sections??{},K=G.data??{};return{library:G.library?.enabled??!0,content:G.content?.enabled??!0,commerce:G.commerce?.enabled??!0,marketing:G.marketing?.enabled??!0,analytics:G.analytics?.enabled??!0,management:G.management?.enabled??!0,utilities:G.utilities?.enabled??!0,ci:O.default?.ci?.enabled??!1,data:{dashboard:K.dashboard?.enabled??!0,activity:K.activity?.enabled??!0,users:K.users?.enabled??!0,teams:K.teams?.enabled??!0,subscribers:K.subscribers?.enabled??!0,allModels:K.allModels?.enabled??!0}}}catch{return X}}var WE=await OE(),KE=D("framework/defaults/views/dashboard/.discovered-models.json"),ZE={models:u(t),sections:WE};c(KE,JSON.stringify(ZE,null,2));var NE=await n(V);d();var HE=!1;$E().then((X)=>{HE=X}).catch((X)=>{if(F)console.warn("[Dashboard] Reverse proxy failed:",X)});var v=C?`https://${C}`:null,q=`http://localhost:${V}`,r=`http://localhost:${V}/`,_E=(Bun.nanoseconds()-s)/1e6;console.log();console.log(` ${B(x("stacks dashboard"))}`);console.log();if(v)console.log(` ${k("\u279C")} ${B("Local")}: ${x(v)}`),console.log(` ${Y("\u279C")} ${Y("Origin")}: ${Y(q)}`);else console.log(` ${k("\u279C")} ${B("Local")}: ${x(q)}`);console.log(` ${k("\u279C")} ${B("Window")}: ${Y("Stacks Dashboard")} ${Y("1400\xD7900")}`);console.log(` ${k("\u279C")} ${B("Models")}: ${Y(`${t.length} discovered`)}`);if(V!==h)console.log(` ${Y("\u279C")} ${Y(`Port ${h} in use, using ${V}`)}`);if(!NE)console.log(` ${Y("\u26A0")} ${Y("Dev server may not be ready yet")}`);console.log();console.log(` ${Y(`ready in ${_E.toFixed(0)} ms`)}`);if(F){if(console.log(),console.log(` ${Y("\u279C")} ${Y("Sidebar")}: ${Y(`${sidebarConfig.sections.length} sections, 240px`)}`),console.log(` ${Y("\u279C")} ${Y("URL")}: ${Y(r)}`),C)console.log(` ${Y("\u279C")} ${Y("SSL")}: ${Y(l)}`),console.log(` ${Y("\u279C")} ${Y("Proxy")}: ${Y(`localhost:${V} \u2192 ${C}`)}`);if(P.length>0){console.log();for(let X of P)console.log(` ${Y(X)}`)}}console.log();var M,f=$.env.HOME?`${$.env.HOME}/Code/Tools/craft/packages/typescript/src/index.ts`:void 0;if(f&&j(f))try{({createApp:M}=await import(f))}catch{}if(!M){let X=["craft-native","@craft-native/craft","@stacksjs/ts-craft"];for(let O of X)try{if({createApp:M}=await import(O),M)break}catch{}}if(M){let X=T("resources/assets/images/app-icon.png"),O=D("framework/defaults/resources/assets/images/app-icon.png"),G=await Bun.file(X).exists()?X:await Bun.file(O).exists()?O:void 0,K=(()=>{let N=$.env.CRAFT_BIN;if(N)return j(N)?N:void 0;let U=`${$.env.HOME}/Code/Tools/craft/craft`;if(j(U))return U;let H=`${$.env.HOME}/Code/Tools/craft/bin/craft`;if(j(H))return H;let L=`${$.env.HOME}/Code/Tools/craft/packages/zig/zig-out/bin/craft`;if(j(L))return L;let w=`${$.env.HOME}/Documents/Projects/craft/packages/zig/zig-out/bin/craft`;if(j(w))return w;return})();if(!K)M=void 0;if(!M)console.log(` ${Y("Native window unavailable. Set CRAFT_BIN to a craft binary, or open the URL above in a browser.")}
|
|
6
|
+
`),await new Promise(()=>{});let Q=M({url:r,quiet:!F,...K&&{craftPath:K},window:{title:"Stacks Dashboard",width:1400,height:900,titlebarHidden:!0,webSidebarMaterial:!0,webSidebarWidth:250,...G&&{icon:G}}});$.on("SIGINT",()=>{Q.close(),$.exit(0)}),$.on("SIGTERM",()=>{Q.close(),$.exit(0)});try{await Q.show(),$.exit(0)}catch{let N=v||q;console.log(` ${Y("Dashboard available at:")} ${x(N)}
|
|
7
7
|
`),await new Promise(()=>{})}}else console.log(` ${Y("Native window unavailable. Set CRAFT_BIN to a craft binary, or open the URL above in a browser.")}
|
|
8
|
-
`)
|
|
8
|
+
`),$.on("SIGINT",()=>$.exit(0)),$.on("SIGTERM",()=>$.exit(0)),await new Promise(()=>{});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/actions",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.70.
|
|
4
|
+
"version": "0.70.84",
|
|
5
5
|
"description": "The Stacks actions.",
|
|
6
6
|
"author": "Chris Breuer",
|
|
7
7
|
"contributors": [
|
|
@@ -68,23 +68,23 @@
|
|
|
68
68
|
"@stacksjs/ts-md": "^0.1.1"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
|
-
"@stacksjs/api": "0.70.
|
|
72
|
-
"@stacksjs/cli": "0.70.
|
|
73
|
-
"@stacksjs/config": "0.70.
|
|
74
|
-
"@stacksjs/database": "0.70.
|
|
71
|
+
"@stacksjs/api": "0.70.84",
|
|
72
|
+
"@stacksjs/cli": "0.70.84",
|
|
73
|
+
"@stacksjs/config": "0.70.84",
|
|
74
|
+
"@stacksjs/database": "0.70.84",
|
|
75
75
|
"@stacksjs/tlsx": "^0.13.2",
|
|
76
76
|
"better-dx": "^0.2.16",
|
|
77
|
-
"@stacksjs/dns": "0.70.
|
|
78
|
-
"@stacksjs/enums": "0.70.
|
|
79
|
-
"@stacksjs/env": "0.70.
|
|
80
|
-
"@stacksjs/error-handling": "0.70.
|
|
81
|
-
"@stacksjs/logging": "0.70.
|
|
82
|
-
"@stacksjs/path": "0.70.
|
|
83
|
-
"@stacksjs/security": "0.70.
|
|
84
|
-
"@stacksjs/storage": "0.70.
|
|
85
|
-
"@stacksjs/strings": "0.70.
|
|
86
|
-
"@stacksjs/utils": "0.70.
|
|
87
|
-
"@stacksjs/validation": "0.70.
|
|
77
|
+
"@stacksjs/dns": "0.70.84",
|
|
78
|
+
"@stacksjs/enums": "0.70.84",
|
|
79
|
+
"@stacksjs/env": "0.70.84",
|
|
80
|
+
"@stacksjs/error-handling": "0.70.84",
|
|
81
|
+
"@stacksjs/logging": "0.70.84",
|
|
82
|
+
"@stacksjs/path": "0.70.84",
|
|
83
|
+
"@stacksjs/security": "0.70.84",
|
|
84
|
+
"@stacksjs/storage": "0.70.84",
|
|
85
|
+
"@stacksjs/strings": "0.70.84",
|
|
86
|
+
"@stacksjs/utils": "0.70.84",
|
|
87
|
+
"@stacksjs/validation": "0.70.84"
|
|
88
88
|
},
|
|
89
89
|
"peerDependencies": {
|
|
90
90
|
"pickier": "^0.1.28"
|