gemi 0.114.0 → 0.116.0
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/ai/index.js +2 -2
- package/dist/ai/index.js.map +1 -1
- package/dist/app/index.js +1 -1
- package/dist/bun/plugin.js +1 -1
- package/dist/bun/preload.js +1 -1
- package/dist/{chunk-75wk4jxd.js → chunk-15c2vgaf.js} +2 -2
- package/dist/{chunk-75wk4jxd.js.map → chunk-15c2vgaf.js.map} +1 -1
- package/dist/{chunk-56fgk5rq.js → chunk-1hr4xht1.js} +2 -2
- package/dist/{chunk-56fgk5rq.js.map → chunk-1hr4xht1.js.map} +1 -1
- package/dist/{chunk-8c2fs0n0.js → chunk-1myhm0g3.js} +3 -3
- package/dist/{chunk-8c2fs0n0.js.map → chunk-1myhm0g3.js.map} +1 -1
- package/dist/chunk-1q9kd20m.js +5 -0
- package/dist/{chunk-fakvf9wb.js.map → chunk-1q9kd20m.js.map} +1 -1
- package/dist/{chunk-37qk5dh8.js → chunk-1vzks22y.js} +2 -2
- package/dist/{chunk-37qk5dh8.js.map → chunk-1vzks22y.js.map} +1 -1
- package/dist/{chunk-8h7dh2h2.js → chunk-2tzm58j3.js} +2 -2
- package/dist/{chunk-8h7dh2h2.js.map → chunk-2tzm58j3.js.map} +1 -1
- package/dist/{chunk-x157wrgy.js → chunk-3hrj5rwm.js} +2 -2
- package/dist/{chunk-x157wrgy.js.map → chunk-3hrj5rwm.js.map} +1 -1
- package/dist/{chunk-wysm6qte.js → chunk-4088szy9.js} +2 -2
- package/dist/{chunk-wysm6qte.js.map → chunk-4088szy9.js.map} +1 -1
- package/dist/{chunk-m17ktssc.js → chunk-41da9628.js} +1 -1
- package/dist/chunk-49nyyjfe.js +5 -0
- package/dist/{chunk-jzp0fs6h.js.map → chunk-49nyyjfe.js.map} +3 -3
- package/dist/{chunk-cna105t6.js → chunk-56jky6vf.js} +2 -2
- package/dist/{chunk-cna105t6.js.map → chunk-56jky6vf.js.map} +1 -1
- package/dist/{chunk-h4pazcgg.js → chunk-6cx8ncd4.js} +2 -2
- package/dist/{chunk-h4pazcgg.js.map → chunk-6cx8ncd4.js.map} +1 -1
- package/dist/{chunk-7fwp7vwh.js → chunk-6d8rvr1v.js} +2 -2
- package/dist/{chunk-7fwp7vwh.js.map → chunk-6d8rvr1v.js.map} +1 -1
- package/dist/{chunk-h2r2rdhj.js → chunk-785b41h1.js} +2 -2
- package/dist/{chunk-h2r2rdhj.js.map → chunk-785b41h1.js.map} +1 -1
- package/dist/{chunk-7v8sgqen.js → chunk-79xg42e7.js} +2 -2
- package/dist/{chunk-7v8sgqen.js.map → chunk-79xg42e7.js.map} +1 -1
- package/dist/{chunk-8rt4wx8z.js → chunk-7vb4eey2.js} +2 -2
- package/dist/{chunk-8rt4wx8z.js.map → chunk-7vb4eey2.js.map} +1 -1
- package/dist/{chunk-ap5gek56.js → chunk-8rv62v14.js} +2 -2
- package/dist/{chunk-ap5gek56.js.map → chunk-8rv62v14.js.map} +1 -1
- package/dist/{chunk-1f9sqht5.js → chunk-98m15b9x.js} +2 -2
- package/dist/{chunk-1f9sqht5.js.map → chunk-98m15b9x.js.map} +1 -1
- package/dist/{chunk-d4m4amy4.js → chunk-9n1hx3mq.js} +2 -2
- package/dist/{chunk-d4m4amy4.js.map → chunk-9n1hx3mq.js.map} +1 -1
- package/dist/{chunk-erxv1jz7.js → chunk-aazmrxj9.js} +2 -2
- package/dist/{chunk-erxv1jz7.js.map → chunk-aazmrxj9.js.map} +1 -1
- package/dist/{chunk-pmywkp1w.js → chunk-aeh67ynz.js} +3 -3
- package/dist/{chunk-pmywkp1w.js.map → chunk-aeh67ynz.js.map} +1 -1
- package/dist/{chunk-hz6yzzbz.js → chunk-agyfv3f8.js} +1 -1
- package/dist/{chunk-tp3mzj4v.js → chunk-bra1a1fq.js} +2 -2
- package/dist/{chunk-tp3mzj4v.js.map → chunk-bra1a1fq.js.map} +1 -1
- package/dist/{chunk-583vxa2v.js → chunk-cbqazg9k.js} +2 -2
- package/dist/{chunk-583vxa2v.js.map → chunk-cbqazg9k.js.map} +1 -1
- package/dist/{chunk-m2yfvwrn.js → chunk-d2gfcf85.js} +2 -2
- package/dist/{chunk-m2yfvwrn.js.map → chunk-d2gfcf85.js.map} +1 -1
- package/dist/{chunk-4szjp84e.js → chunk-d9mar37g.js} +2 -2
- package/dist/{chunk-4szjp84e.js.map → chunk-d9mar37g.js.map} +1 -1
- package/dist/{chunk-a5sbgffr.js → chunk-e573yxpq.js} +1 -1
- package/dist/{chunk-gdmsn3f5.js → chunk-eqse2m6n.js} +2 -2
- package/dist/{chunk-gdmsn3f5.js.map → chunk-eqse2m6n.js.map} +1 -1
- package/dist/{chunk-jyrsd1dn.js → chunk-er3wf6ng.js} +2 -2
- package/dist/{chunk-jyrsd1dn.js.map → chunk-er3wf6ng.js.map} +1 -1
- package/dist/{chunk-2rphhsr7.js → chunk-fre6f4nk.js} +2 -2
- package/dist/{chunk-2rphhsr7.js.map → chunk-fre6f4nk.js.map} +1 -1
- package/dist/{chunk-1p0dazvk.js → chunk-fxgxf16k.js} +2 -2
- package/dist/{chunk-1p0dazvk.js.map → chunk-fxgxf16k.js.map} +1 -1
- package/dist/{chunk-ty4aj41k.js → chunk-gts5p6mw.js} +3 -3
- package/dist/{chunk-ty4aj41k.js.map → chunk-gts5p6mw.js.map} +1 -1
- package/dist/{chunk-rrqr1dwq.js → chunk-hdps9n52.js} +2 -2
- package/dist/{chunk-rrqr1dwq.js.map → chunk-hdps9n52.js.map} +1 -1
- package/dist/{chunk-jk97wv0q.js → chunk-jdhdrr2k.js} +2 -2
- package/dist/{chunk-jk97wv0q.js.map → chunk-jdhdrr2k.js.map} +1 -1
- package/dist/chunk-jmg2zsaf.js +5 -0
- package/dist/{chunk-fv9mr1t4.js.map → chunk-jmg2zsaf.js.map} +4 -4
- package/dist/{chunk-w2fpr99k.js → chunk-jmpw6bqz.js} +2 -2
- package/dist/{chunk-w2fpr99k.js.map → chunk-jmpw6bqz.js.map} +1 -1
- package/dist/{chunk-6h9j3f1x.js → chunk-kejwjerj.js} +2 -2
- package/dist/{chunk-6h9j3f1x.js.map → chunk-kejwjerj.js.map} +1 -1
- package/dist/{chunk-mqcy5vja.js → chunk-kqxdsv22.js} +2 -2
- package/dist/{chunk-mqcy5vja.js.map → chunk-kqxdsv22.js.map} +1 -1
- package/dist/{chunk-7rmjr8p7.js → chunk-ktr3k768.js} +2 -2
- package/dist/{chunk-7rmjr8p7.js.map → chunk-ktr3k768.js.map} +1 -1
- package/dist/{chunk-kcx468qv.js → chunk-m54s6jpr.js} +2 -2
- package/dist/{chunk-e6fp6dxx.js.map → chunk-m54s6jpr.js.map} +1 -1
- package/dist/{chunk-nek1gzz2.js → chunk-mazznq15.js} +3 -3
- package/dist/{chunk-nek1gzz2.js.map → chunk-mazznq15.js.map} +1 -1
- package/dist/{chunk-r4namj39.js → chunk-mqfzdfnz.js} +2 -2
- package/dist/{chunk-r4namj39.js.map → chunk-mqfzdfnz.js.map} +1 -1
- package/dist/chunk-ms9k0rx6.js +46 -0
- package/dist/{chunk-v9na3dny.js.map → chunk-ms9k0rx6.js.map} +5 -5
- package/dist/{chunk-hrvzchxd.js → chunk-mschc94q.js} +2 -2
- package/dist/{chunk-hrvzchxd.js.map → chunk-mschc94q.js.map} +1 -1
- package/dist/{chunk-329ggbcw.js → chunk-p91b8zcn.js} +2 -2
- package/dist/{chunk-329ggbcw.js.map → chunk-p91b8zcn.js.map} +1 -1
- package/dist/chunk-pn8v6fj2.js +14 -0
- package/dist/{chunk-0n9vs1ad.js.map → chunk-pn8v6fj2.js.map} +5 -5
- package/dist/{chunk-awp3n119.js → chunk-pyk3gzvc.js} +2 -2
- package/dist/{chunk-awp3n119.js.map → chunk-pyk3gzvc.js.map} +1 -1
- package/dist/{chunk-zns7xcz9.js → chunk-qjhw8nje.js} +1 -1
- package/dist/{chunk-5j76r5q8.js → chunk-qsrcdzan.js} +3 -3
- package/dist/{chunk-5j76r5q8.js.map → chunk-qsrcdzan.js.map} +1 -1
- package/dist/{chunk-xrh6k13s.js → chunk-sr942vb1.js} +2 -2
- package/dist/{chunk-xrh6k13s.js.map → chunk-sr942vb1.js.map} +1 -1
- package/dist/{chunk-yp5979we.js → chunk-t04f3akb.js} +2 -2
- package/dist/{chunk-yp5979we.js.map → chunk-t04f3akb.js.map} +1 -1
- package/dist/{chunk-j3nr4cg0.js → chunk-t4yh4nf9.js} +3 -3
- package/dist/{chunk-j3nr4cg0.js.map → chunk-t4yh4nf9.js.map} +1 -1
- package/dist/{chunk-8k8534kg.js → chunk-tn2bryy2.js} +2 -2
- package/dist/{chunk-8k8534kg.js.map → chunk-tn2bryy2.js.map} +1 -1
- package/dist/{chunk-q95k1ymq.js → chunk-tw5kwbx4.js} +2 -2
- package/dist/{chunk-q95k1ymq.js.map → chunk-tw5kwbx4.js.map} +1 -1
- package/dist/{chunk-kg1nbxvm.js → chunk-tzm3c7n6.js} +4 -4
- package/dist/{chunk-kg1nbxvm.js.map → chunk-tzm3c7n6.js.map} +1 -1
- package/dist/{chunk-zgn0p8qr.js → chunk-v1tfdgy1.js} +2 -2
- package/dist/{chunk-zgn0p8qr.js.map → chunk-v1tfdgy1.js.map} +1 -1
- package/dist/{chunk-e7axa0d5.js → chunk-vbdty91k.js} +3 -3
- package/dist/{chunk-e7axa0d5.js.map → chunk-vbdty91k.js.map} +1 -1
- package/dist/{chunk-e6fp6dxx.js → chunk-vw8849ys.js} +2 -2
- package/dist/{chunk-kcx468qv.js.map → chunk-vw8849ys.js.map} +1 -1
- package/dist/{chunk-y0wx6w80.js → chunk-vxm6yevm.js} +2 -2
- package/dist/{chunk-y0wx6w80.js.map → chunk-vxm6yevm.js.map} +1 -1
- package/dist/{chunk-kqb4s1r0.js → chunk-whtzggn6.js} +2 -2
- package/dist/{chunk-kqb4s1r0.js.map → chunk-whtzggn6.js.map} +1 -1
- package/dist/{chunk-3ma9m432.js → chunk-wyw6p3fg.js} +2 -2
- package/dist/{chunk-3ma9m432.js.map → chunk-wyw6p3fg.js.map} +1 -1
- package/dist/{chunk-gv91vjeb.js → chunk-x7cpth2f.js} +1 -1
- package/dist/{chunk-z32xfe8c.js → chunk-xt9tv99x.js} +2 -2
- package/dist/{chunk-z32xfe8c.js.map → chunk-xt9tv99x.js.map} +1 -1
- package/dist/{chunk-60nyk1w8.js → chunk-yf1njzd5.js} +2 -2
- package/dist/{chunk-60nyk1w8.js.map → chunk-yf1njzd5.js.map} +1 -1
- package/dist/{chunk-jv4g8grc.js → chunk-yhrye9cm.js} +2 -2
- package/dist/{chunk-jv4g8grc.js.map → chunk-yhrye9cm.js.map} +1 -1
- package/dist/{chunk-wwmdqhzy.js → chunk-zyt2w03d.js} +2 -2
- package/dist/{chunk-wwmdqhzy.js.map → chunk-zyt2w03d.js.map} +1 -1
- package/dist/chunks/{ThemeProvider-BgLyzzOL.js → ThemeProvider-BLI4zpLu.js} +8 -3
- package/dist/chunks/ThemeProvider-BLI4zpLu.js.map +1 -0
- package/dist/client/ClientRouter.d.ts +3 -5
- package/dist/client/ClientRouter.d.ts.map +1 -1
- package/dist/client/ClientRouterContext.d.ts.map +1 -1
- package/dist/client/Head.d.ts +1 -1
- package/dist/client/Head.d.ts.map +1 -1
- package/dist/client/ServerDataProvider.d.ts +2 -0
- package/dist/client/ServerDataProvider.d.ts.map +1 -1
- package/dist/client/createRoot.d.ts +2 -4
- package/dist/client/createRoot.d.ts.map +1 -1
- package/dist/client/htmlAttributes.d.ts +18 -0
- package/dist/client/htmlAttributes.d.ts.map +1 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +79 -6
- package/dist/client/index.js.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/console/run.js +2 -2
- package/dist/console/run.js.map +1 -1
- package/dist/container/index.js +2 -2
- package/dist/container/index.js.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/email/index.js +2 -2
- package/dist/email/index.js.map +1 -1
- package/dist/facades/Meta.d.ts +11 -1
- package/dist/facades/Meta.d.ts.map +1 -1
- package/dist/facades/Storage.d.ts +25 -1
- package/dist/facades/Storage.d.ts.map +1 -1
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/foundation/index.js +2 -2
- package/dist/foundation/index.js.map +1 -1
- package/dist/http/HttpRequest.d.ts +3 -0
- package/dist/http/HttpRequest.d.ts.map +1 -1
- package/dist/http/Metadata.d.ts +23 -0
- package/dist/http/Metadata.d.ts.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/http/requestContext.d.ts +3 -0
- package/dist/http/requestContext.d.ts.map +1 -1
- package/dist/i18n/dictionaryRuntime.js +2 -2
- package/dist/i18n/dictionaryRuntime.js.map +1 -1
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +2 -2
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +1 -1
- package/dist/orm/index.js +2 -2
- package/dist/orm/index.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/services/file-storage/drivers/AzureBlobDriver.d.ts +12 -1
- package/dist/services/file-storage/drivers/AzureBlobDriver.d.ts.map +1 -1
- package/dist/services/file-storage/drivers/FileStorageDriver.d.ts +32 -1
- package/dist/services/file-storage/drivers/FileStorageDriver.d.ts.map +1 -1
- package/dist/services/file-storage/drivers/FileSystemDriver.d.ts +22 -1
- package/dist/services/file-storage/drivers/FileSystemDriver.d.ts.map +1 -1
- package/dist/services/file-storage/drivers/S3Driver.d.ts +14 -1
- package/dist/services/file-storage/drivers/S3Driver.d.ts.map +1 -1
- package/dist/services/file-storage/drivers/types.d.ts +26 -0
- package/dist/services/file-storage/drivers/types.d.ts.map +1 -1
- package/dist/services/index.d.ts +3 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +9 -9
- package/dist/services/index.js.map +4 -4
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts +3 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
- package/dist/services/router/config.d.ts +19 -0
- package/dist/services/router/config.d.ts.map +1 -1
- package/dist/stats/route-table.js +1 -1
- package/dist/support/index.js +2 -2
- package/dist/support/index.js.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/vitest/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-0n9vs1ad.js +0 -14
- package/dist/chunk-fakvf9wb.js +0 -5
- package/dist/chunk-fv9mr1t4.js +0 -5
- package/dist/chunk-jzp0fs6h.js +0 -5
- package/dist/chunk-v9na3dny.js +0 -46
- package/dist/chunks/ThemeProvider-BgLyzzOL.js.map +0 -1
- /package/dist/{chunk-m17ktssc.js.map → chunk-41da9628.js.map} +0 -0
- /package/dist/{chunk-hz6yzzbz.js.map → chunk-agyfv3f8.js.map} +0 -0
- /package/dist/{chunk-a5sbgffr.js.map → chunk-e573yxpq.js.map} +0 -0
- /package/dist/{chunk-zns7xcz9.js.map → chunk-qjhw8nje.js.map} +0 -0
- /package/dist/{chunk-gv91vjeb.js.map → chunk-x7cpth2f.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{ri as a}from"./chunk-vw8849ys.js";var i=a((f)=>{function u(t){let r={};if(t=t.replace(/^\?/,""),t)for(let n of t.split("&")){let[e,s=null]=n.split("=");if(e=decodeURIComponent(e),s)s=decodeURIComponent(s);if(!(e in r))r[e]=s;else if(Array.isArray(r[e]))r[e].push(s);else r[e]=[r[e],s]}return r}f.parseQueryString=u});var U=a((d)=>{var y=i(),c=(t)=>{if(typeof t==="string")return c(new URL(t));let{hostname:r,pathname:n,port:e,protocol:s,search:o}=t,p;if(o)p=y.parseQueryString(o);return{hostname:r,port:e?parseInt(e):void 0,protocol:s,path:n,query:p}};d.parseUrl=c});
|
|
3
3
|
export{U as Z};
|
|
4
4
|
|
|
5
|
-
//# debugId=
|
|
5
|
+
//# debugId=EE33F1644F184E3664756E2164756E21
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
"'use strict';\n\nvar querystringParser = require('@smithy/querystring-parser');\n\nconst parseUrl = (url) => {\n if (typeof url === \"string\") {\n return parseUrl(new URL(url));\n }\n const { hostname, pathname, port, protocol, search } = url;\n let query;\n if (search) {\n query = querystringParser.parseQueryString(search);\n }\n return {\n hostname,\n port: port ? parseInt(port) : undefined,\n protocol,\n path: pathname,\n query,\n };\n};\n\nexports.parseUrl = parseUrl;\n"
|
|
7
7
|
],
|
|
8
8
|
"mappings": ";uDAEA,SAAS,CAAgB,CAAC,EAAa,CACnC,IAAM,EAAQ,CAAC,EAEf,GADA,EAAc,EAAY,QAAQ,MAAO,EAAE,EACvC,EACA,QAAW,KAAQ,EAAY,MAAM,GAAG,EAAG,CACvC,IAAK,EAAK,EAAQ,MAAQ,EAAK,MAAM,GAAG,EAExC,GADA,EAAM,mBAAmB,CAAG,EACxB,EACA,EAAQ,mBAAmB,CAAK,EAEpC,GAAI,EAAE,KAAO,GACT,EAAM,GAAO,EAEZ,QAAI,MAAM,QAAQ,EAAM,EAAI,EAC7B,EAAM,GAAK,KAAK,CAAK,EAGrB,OAAM,GAAO,CAAC,EAAM,GAAM,CAAK,EAI3C,OAAO,EAGH,mBAAmB,kBCxB3B,IAAI,MAEE,EAAW,CAAC,IAAQ,CACtB,GAAI,OAAO,IAAQ,SACf,OAAO,EAAS,IAAI,IAAI,CAAG,CAAC,EAEhC,IAAQ,WAAU,WAAU,OAAM,WAAU,UAAW,EACnD,EACJ,GAAI,EACA,EAAQ,EAAkB,iBAAiB,CAAM,EAErD,MAAO,CACH,WACA,KAAM,EAAO,SAAS,CAAI,EAAI,OAC9B,WACA,KAAM,EACN,OACJ,GAGI,WAAW",
|
|
9
|
-
"debugId": "
|
|
9
|
+
"debugId": "EE33F1644F184E3664756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{R as C,T as h,U as m}from"./chunk-
|
|
2
|
+
import{R as C,T as h,U as m}from"./chunk-6d8rvr1v.js";import{la as w,ma as q}from"./chunk-6chz1ktz.js";import"./chunk-frerzsxq.js";import"./chunk-yer1r3t3.js";import"./chunk-303mprnv.js";import"./chunk-p1aqq0ga.js";import{Ca as N}from"./chunk-4mfrgd5m.js";import"./chunk-5stgtwqw.js";import"./chunk-tw5kwbx4.js";import{Tg as _}from"./chunk-15c2vgaf.js";import{oi as y}from"./chunk-d9mar37g.js";import"./chunk-vw8849ys.js";import{join as $J}from"path";import{createServer as zJ}from"vite";import{join as l}from"path";import{IncomingMessage as d,ServerResponse as p}from"http";import{Socket as i}from"net";function v(J){return J.replace(/\x1b\[[0-9;]*m/g,"").replace(/\[[0-9;]*m/g,"").replace(/\n\s*\n/g,`
|
|
3
3
|
`).split(`
|
|
4
4
|
`).map((W)=>W.trim()).filter((W)=>W.length>0).join(`
|
|
5
5
|
`).trim()}function D(J){return`
|
|
@@ -55,4 +55,4 @@ window.$RefreshSig$ = () => (type) => type;
|
|
|
55
55
|
window.__vite_plugin_react_preamble_installed__ = true;
|
|
56
56
|
`;function t(J){let{pathname:W}=new URL(J.url),Z=($)=>new Response($,{headers:{"Content-Type":"application/javascript"}});if(W===S)return Z(s);if(W.startsWith("/render-error.js"))return Z("window.render_error = true");if(W.startsWith("/refresh.js"))return Z(a);return null}function k(J,W,Z){let $=l(process.cwd(),"app");return async(Q)=>{let{pathname:X}=new URL(Q.url),Y=(z)=>{if(console.error(z),Z.ssrFixStacktrace?.(z),O(z),y(X))return new Response(JSON.stringify({error:_("server_error",z?.message??String(z),500)}),{status:500,headers:{"Content-Type":"application/json"}});return globalThis.__gemiErrorPageServed=!0,new Response(D(H(z)),{status:500,headers:{"Content-Type":"text/html"}})},G=async(z)=>{let U=t(z);if(U)return U;try{let B=J.fetch.bind(J),K=await n(Z,z)??await B(z);if(K instanceof Response)return K;let j={},b={},M={},c=(L,A)=>`"${L}": () => import("${A}")`,F=[];for(let L of["404",...J.getFlatComponentTree.call(J)]){if(Bun.env.NODE_ENV==="test")break;let A=`${process.env.APP_DIR}`,x=await I(Z).import(`${A}/views/${L}.tsx`);j[L]=x.default,b[L]=x?.OpenGraph,M[L]=x,F.push(c(L,`/app/views/${L}.tsx`))}let u=`{${F.join(",")}}`;return await K({getStyles:async(L,A)=>await C($,Z,L,A?.layout),resolveIsland:(L)=>({src:`/${L}${N}`,preload:[]}),bootstrapModules:[S],viewImportMap:j,viewModules:M,ogMap:b,loaders:u,cssManifest:{}})}catch(B){return Y(B)}};return await W(Q,(z)=>J.withGlobalMiddleware(z,G,Y))}}function r(J){try{return Bun.listen({hostname:"0.0.0.0",port:J,socket:{data(){}}}).stop(!0),!0}catch(W){return W?.code!=="EADDRINUSE"}}function T(J,W=r){let Z=24678+(J-5173);if(Z>65471)Z=24678;for(let $=Z;$<Z+64;$++)if(W($))return $;throw Error(`Could not find a free port for Vite's HMR websocket: tried ${Z}-${Z+64-1}. Set one explicitly in gemi.config.ts as \`vite: { server: { ws: { port } } }\`.`)}import{createServer as e}from"http";var JJ=new Set(["vite-hmr","vite-ping"]);async function P(J){let W=e((Z,$)=>{$.writeHead(426,{"Content-Type":"text/plain"}),$.end("Upgrade Required")});return await new Promise((Z,$)=>{W.once("error",$),W.listen(J,"127.0.0.1",()=>{W.off("error",$),Z()})}),W}function f(J){if(!J||typeof J!=="object")return null;let Z=J.server?.address?.();if(Z&&typeof Z==="object"&&"port"in Z)return Number(Z.port)||null;return null}function R(J){if(J.headers.get("upgrade")?.toLowerCase()!=="websocket")return!1;return JJ.has(J.headers.get("sec-websocket-protocol")??"")}var WJ=(J)=>typeof J==="string"?J:new Uint8Array(J);async function g(J,W,Z){let $=new URL(J.url),Q=J.headers.get("sec-websocket-protocol")??"vite-hmr",X={host:J.headers.get("host")??$.host},Y=J.headers.get("origin");if(Y)X.origin=Y;let G=new WebSocket(`ws://127.0.0.1:${Z}${$.pathname}${$.search}`,{protocols:[Q],headers:X});G.binaryType="arraybuffer";let z={upstream:G,early:[]};if(G.onmessage=(K)=>{let j=WJ(K.data);if(z.browser)z.browser.send(j);else z.early.push(j)},G.onclose=(K)=>{z.browser?.close(ZJ(K.code),K.reason)},G.onerror=()=>{},!await new Promise((K)=>{G.addEventListener("open",()=>K(!0),{once:!0}),G.addEventListener("close",()=>K(!1),{once:!0})}))return new Response("Vite refused the HMR websocket",{status:403});if(!W.upgrade(J,{headers:{"Sec-WebSocket-Protocol":Q},data:z}))return G.close(),new Response("WebSocket upgrade failed",{status:400});return}function ZJ(J){if(J===1000||J>=1001&&J<=1003||J>=1007&&J<=1014)return J;if(J>=3000&&J<=4999)return J;return 1000}var E={open(J){let W=J.data;for(let Z of W.early)J.send(Z);if(W.early=[],W.browser=J,W.upstream.readyState!==WebSocket.OPEN)J.close(1000)},message(J,W){if(J.data.upstream.readyState===WebSocket.OPEN)J.data.upstream.send(W)},close(J){let{upstream:W}=J.data;if(W.readyState<=WebSocket.OPEN)W.close()}};var V=process.cwd(),GJ=$J(V,"app");if(!globalThis.__gemiErrorHooked)globalThis.__gemiErrorHooked=!0,process.on("unhandledRejection",(J)=>{console.error(J),O(J)}),process.on("uncaughtException",(J)=>{console.error(J),O(J)});async function SJ(J,W){let Z=Number(process.env.PORT)||5173,$=m(),Q=Boolean(globalThis.__gemiVite),X=globalThis.__gemiVite??=await zJ({configFile:!1,plugins:[q()],server:{middlewareMode:!0,port:Z,ws:{server:await P(T(Z))},allowedHosts:J.devAllowedHosts.call(J),watch:{ignored:(U)=>{let B=U.split(/[/\\]/).pop()??"";return B===".env"||B.startsWith(".env.")}}},appType:"custom",resolve:{dedupe:["react","react-dom"]},optimizeDeps:{include:["react","react-dom","react-dom/client"]},ssr:{external:[...w]}});process.env.ROOT_DIR=V,process.env.APP_DIR=GJ;let Y=k(J,W,X),G=f(X.config?.server?.ws),z=Bun.serve({port:Z,idleTimeout:$,fetch:(U,B)=>{if(G!==null&&R(U))return g(U,B,G);return Y(U)},websocket:E});if(Q)I(X).clearCache();if(Q)if(globalThis.__gemiErrorActive&&globalThis.__gemiErrorPageServed)globalThis.__gemiErrorActive=!1,globalThis.__gemiErrorPageServed=!1,X.ws.send({type:"full-reload"});else globalThis.__gemiErrorActive=!1,X.ws.send({type:"custom",event:"http-reload"});else h({port:z.port,rootDir:V});return z}export{H as viteErrorPayload,SJ as httpDev};
|
|
57
57
|
|
|
58
|
-
//# debugId=
|
|
58
|
+
//# debugId=12A501EA67C37B7E64756E2164756E21
|
|
@@ -9,6 +9,6 @@
|
|
|
9
9
|
"import { createServer, type Server as NodeServer } from \"node:http\";\n\nimport type { Server, ServerWebSocket, WebSocketHandler } from \"bun\";\n\n// Vite's HMR websocket, carried on the dev server's own port.\n//\n// In middleware mode Vite has no HTTP server of its own, so by default it\n// stands up a second one for the websocket, on a second port (see\n// `hmrPort.ts`), and tells the browser to connect to `<page host>:<that port>`.\n// A reverse proxy or tunnel (ngrok, a container port mapping, a phone on the\n// LAN through https) only carries the port the page came from, so HMR could\n// not connect there, and the client logged connection failures forever.\n//\n// Vite can attach its websocket to a server it is handed (`server.ws.server`)\n// instead, and then tells the browser to connect to the page's own origin. That\n// server has to be a Node `http.Server`; the dev server is `Bun.serve`. So:\n//\n// - the Node server Vite is handed listens on loopback only, on the port\n// `resolveHmrPort` picked, and answers nothing but websocket upgrades;\n// - `Bun.serve` accepts the browser's upgrade on the page's origin and relays\n// frames both ways to that loopback server.\n//\n// The relay forwards the browser's `Host` and `Origin` and the request's query\n// (the `token`), so Vite still runs its own host and token checks against what\n// the browser actually sent.\n\n/** The subprotocols Vite's client opens its sockets with. */\nconst VITE_PROTOCOLS = new Set([\"vite-hmr\", \"vite-ping\"]);\n\n/**\n * Start the loopback Node server Vite attaches its HMR websocket to.\n * Everything but an upgrade gets `426 Upgrade Required`, as Vite's own\n * websocket server answers.\n */\nexport async function listenHmrServer(port: number): Promise<NodeServer> {\n const server = createServer((_req, res) => {\n res.writeHead(426, { \"Content-Type\": \"text/plain\" });\n res.end(\"Upgrade Required\");\n });\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n return server;\n}\n\n/**\n * The loopback port to relay to, read from the config Vite actually resolved,\n * so an app that set its own `server.ws` in `gemi.config.ts` is relayed to\n * where Vite really is, or not relayed at all. `null` when Vite was not given\n * a server (its websocket is then on a port of its own, and the client goes\n * there directly) or when HMR is off.\n */\nexport function hmrRelayPort(wsConfig: unknown): number | null {\n if (!wsConfig || typeof wsConfig !== \"object\") return null;\n const server = (wsConfig as { server?: { address?: () => unknown } }).server;\n const address = server?.address?.();\n if (address && typeof address === \"object\" && \"port\" in address) {\n return Number((address as { port: number }).port) || null;\n }\n return null;\n}\n\n/** Whether a request is the Vite client opening its HMR (or ping) socket. */\nexport function isHmrUpgrade(req: Request): boolean {\n if (req.headers.get(\"upgrade\")?.toLowerCase() !== \"websocket\") return false;\n return VITE_PROTOCOLS.has(req.headers.get(\"sec-websocket-protocol\") ?? \"\");\n}\n\nexport type HmrRelayData = {\n /** The socket to Vite, already open when the browser's is accepted. */\n upstream: WebSocket;\n /** Frames Vite sent before the browser's socket opened (its `connected`). */\n early: (string | Uint8Array)[];\n browser?: ServerWebSocket<HmrRelayData>;\n};\n\ntype Frame = string | Uint8Array;\n\nconst frameOf = (data: unknown): Frame =>\n typeof data === \"string\" ? data : new Uint8Array(data as ArrayBuffer);\n\n/**\n * Open the socket to Vite first, and accept the browser's upgrade only once\n * Vite has accepted it. Returns `undefined` once Bun has taken the request\n * over, or a refusal.\n *\n * The order matters. Vite refuses a socket whose host is not in\n * `allowedHosts`, or a cross-origin one without its token. Had the browser's\n * socket been accepted first and closed when Vite refused, the client would\n * read that as \"server connection lost\", ping (which Vite always answers),\n * and reload the page, forever. Refused before it opens, the client logs one\n * \"failed to connect to websocket\" and the page keeps working.\n */\nexport async function upgradeHmr(\n req: Request,\n server: Server<HmrRelayData>,\n port: number,\n): Promise<Response | undefined> {\n const url = new URL(req.url);\n const protocol = req.headers.get(\"sec-websocket-protocol\") ?? \"vite-hmr\";\n // `Host` is what Vite's `allowedHosts` check reads; the URL's host is the\n // same value `Bun.serve` derived it from.\n const headers: Record<string, string> = {\n host: req.headers.get(\"host\") ?? url.host,\n };\n const origin = req.headers.get(\"origin\");\n if (origin) headers.origin = origin;\n\n const upstream = new WebSocket(\n `ws://127.0.0.1:${port}${url.pathname}${url.search}`,\n {\n protocols: [protocol],\n headers,\n } as any,\n );\n upstream.binaryType = \"arraybuffer\";\n const data: HmrRelayData = { upstream, early: [] };\n\n upstream.onmessage = (event) => {\n const frame = frameOf(event.data);\n if (data.browser) data.browser.send(frame);\n else data.early.push(frame);\n };\n upstream.onclose = (event) => {\n data.browser?.close(sendableCloseCode(event.code), event.reason);\n };\n upstream.onerror = () => {\n // A `close` follows; it ends the browser's socket if there is one.\n };\n\n const opened = await new Promise<boolean>((resolve) => {\n upstream.addEventListener(\"open\", () => resolve(true), { once: true });\n upstream.addEventListener(\"close\", () => resolve(false), { once: true });\n });\n if (!opened) {\n return new Response(\"Vite refused the HMR websocket\", { status: 403 });\n }\n\n const upgraded = server.upgrade(req, {\n // The browser fails a connection whose response does not echo the\n // subprotocol it asked for.\n headers: { \"Sec-WebSocket-Protocol\": protocol },\n data,\n });\n if (!upgraded) {\n upstream.close();\n return new Response(\"WebSocket upgrade failed\", { status: 400 });\n }\n return undefined;\n}\n\n// A close code that may be sent in a close frame. 1005, 1006 and 1015 are\n// reported locally and never sent.\nfunction sendableCloseCode(code: number): number {\n if (\n code === 1000 ||\n (code >= 1001 && code <= 1003) ||\n (code >= 1007 && code <= 1014)\n ) {\n return code;\n }\n if (code >= 3000 && code <= 4999) return code;\n return 1000;\n}\n\n/** `Bun.serve`'s `websocket` option: relays frames to and from Vite. */\nexport const hmrRelayHandler: WebSocketHandler<HmrRelayData> = {\n open(ws: ServerWebSocket<HmrRelayData>) {\n const data = ws.data;\n for (const frame of data.early) ws.send(frame);\n data.early = [];\n data.browser = ws;\n // Vite may have hung up while the upgrade was in flight.\n if (data.upstream.readyState !== WebSocket.OPEN) ws.close(1000);\n },\n message(ws: ServerWebSocket<HmrRelayData>, message) {\n if (ws.data.upstream.readyState === WebSocket.OPEN) {\n ws.data.upstream.send(message);\n }\n },\n close(ws: ServerWebSocket<HmrRelayData>) {\n const { upstream } = ws.data;\n if (upstream.readyState <= WebSocket.OPEN) upstream.close();\n },\n};\n"
|
|
10
10
|
],
|
|
11
11
|
"mappings": "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",
|
|
12
|
-
"debugId": "
|
|
12
|
+
"debugId": "12A501EA67C37B7E64756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Rg as F,Sg as t,Tg as l}from"./chunk-15c2vgaf.js";import{Wg as V}from"./chunk-49nyyjfe.js";import{bi as f0}from"./chunk-t4yh4nf9.js";import{ni as h}from"./chunk-1hr4xht1.js";import{ui as LH}from"./chunk-vw8849ys.js";class A0{static kind="controller";constructor(){}}class u0 extends A0{}function Q0(H){let Q=new Map;if(!H)return Q;for(let X of H.split(";")){let $=X.indexOf("=");if($===-1)continue;let Z=X.slice(0,$).trim();if(!Z)continue;Q.set(Z,X.slice($+1).trim())}return Q}function gH(H){return Q0(H.headers.get("cookie"))}function N(H){if(!/^\d+$/.test(H))return null;let Q=Number(H);return Number.isSafeInteger(Q)?Q:null}function J0(H){if(!H)return null;let Q=H.trim();if(!/^bytes=/i.test(Q))return null;let $=Q.slice(6).split(",").map((U)=>U.trim()).filter((U)=>U!=="");if($.length!==1)return null;let Z=$[0],G=Z.indexOf("-");if(G===-1)return null;let W=Z.slice(0,G),Y=Z.slice(G+1);if(W===""){let U=N(Y);if(U===null)return null;return{kind:"suffix",suffixLength:U}}let T=N(W);if(T===null)return null;if(Y==="")return{kind:"offset",start:T,end:null};let M=N(Y);if(M===null||M<T)return null;return{kind:"offset",start:T,end:M}}function L0(H,Q){if(!Number.isFinite(Q)||Q<=0)return null;let X,$;if(H.kind==="suffix"){if(H.suffixLength<=0)return null;X=Math.max(0,Q-H.suffixLength),$=Q-1}else{if(H.start>=Q)return null;if(X=H.start,$=H.end===null?Q-1:Math.min(H.end,Q-1),$<X)return null}return{start:X,end:$,length:$-X+1}}function kH(H){if(H.kind==="suffix")return`bytes=-${H.suffixLength}`;return H.end===null?`bytes=${H.start}-`:`bytes=${H.start}-${H.end}`}function bH(H){if(!H)return null;let Q=/^bytes\s+(\d+)-(\d+)\/(\d+)$/i.exec(H.trim());if(!Q)return null;let X=N(Q[1]),$=N(Q[2]),Z=N(Q[3]);if(X===null||$===null||Z===null||$<X)return null;return{start:X,end:$,total:Z}}function fH(H,Q,X){return`bytes ${H}-${Q}/${X}`}function R0(H){return`bytes */${H}`}class S extends F{errors={};constructor(H){super("Validation error");this.name="ValidationError",this.errors=H,this.payload={api:{status:400,data:{error:{kind:"validation_error",messages:H,status:400}},headers:{"Content-Type":"application/json"}},view:{status:400}}}}function o0(H){let[Q,X]=H.match(/\d+|\D+/g)??[];if(!Q||!X)return 0;let $=Number.parseInt(Q);switch(X){case"B":return $;case"KB":return $*1024;case"MB":return $*1024*1024;case"GB":return $*1024*1024*1024;case"TB":return $*1024*1024*1024*1024;default:return 0}}function n0(H){switch(H){case"image":return"image";case"png":return"image/png";case"jpg":return"image/jpeg";case"jpeg":return"image/jpeg";case"ttf":return"font/ttf";case"excel":return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";case"csv":return"text/csv";case"word":return"application/vnd.openxmlformats-officedocument.wordprocessingml.document";case"pdf":return"application/pdf";case"json":return"application/json";default:return H}}function C0(H){if(typeof H==="string"||Array.isArray(H))return H.length;return}function X0(H){return typeof H==="number"&&!Number.isNaN(H)}var i0=["required","string","boolean","number","email","password","min","max","gte","lte","file","fileType","fileSize","array","object","in"];class P extends Error{name="InvalidValidationRuleError"}function c(H,Q){let X=Q===void 0||Q.trim()===""?Number.NaN:Number(Q);if(Number.isNaN(X))throw new P(`Validation rule "${H}:${Q??""}" needs a number, e.g. "${H}:3"`);return X}function P0(H){let Q=H.indexOf(":"),X=Q===-1?H:H.slice(0,Q),$=Q===-1?void 0:H.slice(Q+1);switch(X){case"required":return(Z)=>{if(Z instanceof Blob)return Z.size>0;if(Z===null||Z===void 0)return!1;if(typeof Z==="string"||Array.isArray(Z))return Z.length>0;return!0};case"string":return(Z)=>typeof Z==="string";case"boolean":return(Z)=>typeof Z==="boolean";case"number":return(Z)=>X0(Z);case"password":return(Z)=>{return typeof Z==="string"&&/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/.test(Z)};case"min":{let Z=c(X,$);return(G)=>{let W=C0(G);return W!==void 0&&W>=Z}}case"max":{let Z=c(X,$);return(G)=>{let W=C0(G);return W!==void 0&&W<=Z}}case"gte":{let Z=c(X,$);return(G)=>X0(G)&&G>=Z}case"lte":{let Z=c(X,$);return(G)=>X0(G)&&G<=Z}case"email":return(Z)=>{return typeof Z==="string"&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(Z)};case"file":return(Z)=>{return Z instanceof Blob};case"fileType":{if(!$)throw new P('Validation rule "fileType" needs a type, e.g. "fileType:png" or "fileType:image"');let Z=n0($);return(G)=>G instanceof Blob&&G.type.startsWith(Z)}case"fileSize":{let Z=o0($??"");if(Z===0&&!/^0+(B|KB|MB|GB|TB)$/.test($??""))throw new P(`Validation rule "fileSize:${$??""}" needs a whole size in B, KB, MB, GB or TB, e.g. "fileSize:5MB"`);return(G)=>G instanceof Blob&&G.size<=Z}case"array":return(Z)=>Array.isArray(Z);case"object":return(Z)=>typeof Z==="object"&&Z!==null&&!Array.isArray(Z)&&!(Z instanceof Blob);case"in":{let Z=($??"").split(",").filter((G)=>G!=="");if(Z.length===0)throw new P('Validation rule "in" needs a comma-separated list, e.g. "in:draft,published"');return(G)=>typeof G==="string"&&Z.includes(G)}default:throw new P(`Unknown validation rule "${H}". Known rules: ${i0.join(", ")}`)}}function w(H){if(!H.definition)throw Error(`gemi/ai: the recursive schema "${H.name}" was used before its definition returned; \`self\` can be nested into the schema, but not parsed or emitted inside the callback`);return H.definition}var i=new WeakMap;function j0(H){return typeof H==="object"&&H!==null&&i.has(H)}function d(H){let Q=i.get(H);if(!Q)throw Error("gemi/ai: expected a schema built with `s`, got a foreign object");return Q}function t0(H){let Q={defs:{},cells:new Map},X=H;if(H.node.kind==="ref"){let Z=w(H.node.cell);X={...Z,...H.description?{description:H.description}:{},optional:H.optional,nullable:H.nullable||Z.nullable}}let $=g(X,Q);return Object.keys(Q.defs).length>0?{...$,$defs:Q.defs}:$}function g(H,Q){let X=(H.optional||H.nullable)&&H.node.kind!=="json",$=r0(s0(H.node,Q),X),Z=[H.description,l0(H.node)].filter(Boolean).join(" ");if(Z&&$.$ref!==void 0)$={anyOf:[$]};return Z?{description:Z,...$}:$}function l0(H){let Q=[];if(H.kind==="string"||H.kind==="enum"){let X=H.checks;if(X?.format)Q.push(`Format: ${X.format.name}.`);if(X?.minLength!==void 0)Q.push(`At least ${X.minLength} characters.`);if(X?.maxLength!==void 0)Q.push(`At most ${X.maxLength} characters.`)}else if(H.kind==="number"){let X=H.checks;if(X?.minimum!==void 0)Q.push(`Minimum ${X.minimum}.`);if(X?.exclusiveMinimum!==void 0)Q.push(`Greater than ${X.exclusiveMinimum}.`);if(X?.maximum!==void 0)Q.push(`Maximum ${X.maximum}.`);if(X?.exclusiveMaximum!==void 0)Q.push(`Less than ${X.exclusiveMaximum}.`)}else if(H.kind==="array"){let X=H.checks;if(X?.minItems!==void 0)Q.push(`At least ${X.minItems} items.`);if(X?.maxItems!==void 0)Q.push(`At most ${X.maxItems} items.`)}return Q.join(" ")}function s0(H,Q){switch(H.kind){case"string":return{type:"string"};case"number":return{type:H.checks?.integer?"integer":"number"};case"boolean":return{type:"boolean"};case"literal":return{type:typeof H.value,const:H.value};case"enum":return{type:"string",enum:H.values};case"array":return{type:"array",items:g(H.item,Q)};case"object":return{type:"object",properties:Object.fromEntries(Object.entries(H.shape).map(([X,$])=>[X,g($,Q)])),required:Object.keys(H.shape),additionalProperties:!1};case"union":return{anyOf:H.members.map((X)=>g(X,Q))};case"json":return{};case"ref":{let{cell:X}=H,$=Q.cells.get(X.name);if($&&$!==X)throw Error(`gemi/ai: two different recursive schemas are named "${X.name}" in one schema; give each s.recursive(...) its own name`);if(!$)Q.cells.set(X.name,X),Q.defs[X.name]={},Q.defs[X.name]=g(w(X),Q);return{$ref:`#/$defs/${X.name}`}}}}function r0(H,Q){if(!Q)return H;if(H.anyOf)return{...H,anyOf:[...H.anyOf,{type:"null"}]};if(H.enum||H.const!==void 0)return{anyOf:[H,{type:"null"}]};if(typeof H.type==="string")return{...H,type:[H.type,"null"]};return{anyOf:[H,{type:"null"}]}}function a0(H){if(H===null)return"null";if(Array.isArray(H))return"array";return typeof H}function e0(H,Q){if(typeof Q==="number"&&!Number.isFinite(Q))return String(Q);if(H.kind==="literal"||H.kind==="enum"){if(typeof Q==="string"||typeof Q==="number"||typeof Q==="boolean")return JSON.stringify(Q)}return a0(Q)}function O0(H){let Q=H.node,X=(()=>{switch(Q.kind){case"number":return Q.checks?.integer?"integer":"number";case"string":case"boolean":return Q.kind;case"literal":return JSON.stringify(Q.value);case"enum":return`one of ${Q.values.map(($)=>JSON.stringify($)).join(" | ")}`;case"array":return"array";case"object":return"object";case"union":return"one of the variants";case"json":return"a JSON value";case"ref":return O0({...w(Q.cell),optional:!1,nullable:!1})}})();return H.optional||H.nullable?`${X} or null`:X}function HH(H){let Q="";for(let X of H)Q+=typeof X==="number"?`[${X}]`:Q?`.${X}`:X;return Q}function QH(H){let Q=HH(H);return Q?`${Q}: `:""}function Z0(H){return`${QH(H.path)}${H.message}`}function u(H,Q){if(Q===null||Q===void 0)return H.optional||H.nullable?1:0;let X=H.node;switch(X.kind){case"string":return typeof Q==="string"?1:0;case"number":return typeof Q==="number"?1:0;case"boolean":return typeof Q==="boolean"?1:0;case"literal":return Q===X.value?10:0;case"enum":return typeof Q==="string"&&X.values.includes(Q)?10:0;case"array":return Array.isArray(Q)?1:0;case"object":{if(typeof Q!=="object"||Array.isArray(Q))return 0;let $=Q,Z=1;for(let[G,W]of Object.entries(X.shape))Z+=u(W,$[G]);return Z}case"union":return X.members.reduce(($,Z)=>Math.max($,u(Z,Q)),0);case"json":return 1;case"ref":return I0(X.cell,Q,()=>1,()=>u(w(X.cell),Q))}}function I0(H,Q,X,$){if(typeof Q!=="object"||Q===null)return $();if(H.active.has(Q))return X();H.active.add(Q);try{return $()}finally{H.active.delete(Q)}}function j(H,Q,X,$){if(H.optional&&(Q===null||Q===void 0))return{drop:!0,value:void 0};if(H.nullable&&Q===null)return{drop:!1,value:null};return{drop:!1,value:XH(H,Q,X,$)}}function XH(H,Q,X,$){let Z=H.node,G=()=>{let W=Q===void 0?"required":Z.kind==="literal"?"const":Z.kind==="enum"&&typeof Q==="string"?"enum":"type",Y=W==="const"?{allowedValue:Z.value}:W==="enum"?{allowedValues:Z.values}:{};$.push({path:X,code:W,message:`expected ${O0(H)}, got ${e0(Z,Q)}`,params:Y});return};switch(Z.kind){case"string":if(typeof Q!=="string")return G();return V0(Z.checks,Q,X,$),Q;case"number":if(typeof Q!=="number"||!Number.isFinite(Q))return G();if(Z.checks?.integer&&!Number.isInteger(Q))return G();return $H(Z.checks,Q,X,$),Q;case"boolean":return typeof Q==="boolean"?Q:G();case"literal":return Q===Z.value?Q:G();case"enum":if(typeof Q!=="string"||!Z.values.includes(Q))return G();return V0(Z.checks,Q,X,$),Q;case"array":{if(!Array.isArray(Q))return G();let W=Q.map((M,U)=>{let R=j(Z.item,M,[...X,U],$);return R.drop?void 0:R.value}),{minItems:Y,maxItems:T}=Z.checks??{};if(Y!==void 0&&Q.length<Y)$.push({path:X,code:"minItems",message:`expected at least ${Y} items, got ${Q.length}`,params:{limit:Y}});if(T!==void 0&&Q.length>T)$.push({path:X,code:"maxItems",message:`expected at most ${T} items, got ${Q.length}`,params:{limit:T}});return W}case"object":{if(typeof Q!=="object"||Q===null||Array.isArray(Q))return G();let W=Q,Y={};for(let[T,M]of Object.entries(Z.shape)){let U=j(M,W[T],[...X,T],$);if(!U.drop)Y[T]=U.value}if(Z.unknownKeys)for(let T of Object.keys(W)){if(Object.hasOwn(Z.shape,T)||W[T]===void 0)continue;if(Z.unknownKeys==="error"){$.push({path:[...X,T],code:"additionalProperties",message:"unknown key",params:{additionalProperty:T}});continue}b(W[T],[...X,T],$,new Set),Object.defineProperty(Y,T,{value:W[T],enumerable:!0,writable:!0,configurable:!0})}return Y}case"union":{let W;for(let Y of Z.members){let T=[],M=j(Y,Q,X,T);if(T.length===0)return M.drop?void 0:M.value;let U=u(Y,Q);if(!W||U>W.score)W={issues:T,score:U}}$.push({path:X,code:"anyOf",message:`no matching variant; closest: ${W.issues.map(Z0).join("; ")}`,params:{closest:W.issues}});return}case"json":if(Q===void 0)return G();return b(Q,X,$,new Set),Q;case"ref":return I0(Z.cell,Q,()=>{$.push({path:X,code:"type",message:"expected a finite tree, got a circular reference",params:{}});return},()=>j(w(Z.cell),Q,X,$).value)}}function ZH(H){let Q=0;for(let X of H)Q++;return Q}function V0(H,Q,X,$){if(!H)return;let{minLength:Z,maxLength:G,format:W}=H;if(Z!==void 0||G!==void 0){let Y=ZH(Q);if(Z!==void 0&&Y<Z)$.push({path:X,code:"minLength",message:`expected at least ${Z} characters, got ${Y}`,params:{limit:Z}});if(G!==void 0&&Y>G)$.push({path:X,code:"maxLength",message:`expected at most ${G} characters, got ${Y}`,params:{limit:G}})}if(W){let Y=!1;try{Y=W.test(Q)===!0}catch{}if(!Y)$.push({path:X,code:"format",message:`expected a string in format "${W.name}"`,params:{format:W.name}})}}function $H(H,Q,X,$){if(!H)return;let Z=(G,W,Y,T)=>{if(W===void 0||Y(W))return;$.push({path:X,code:G,message:`expected ${T} ${W}, got ${Q}`,params:{limit:W}})};Z("minimum",H.minimum,(G)=>Q>=G,"at least"),Z("exclusiveMinimum",H.exclusiveMinimum,(G)=>Q>G,"more than"),Z("maximum",H.maximum,(G)=>Q<=G,"at most"),Z("exclusiveMaximum",H.exclusiveMaximum,(G)=>Q<G,"less than")}function b(H,Q,X,$,Z=!0){let G=(Y)=>{X.push({path:Q,code:"type",message:`expected a JSON value, got ${Y}`,params:{}})};switch(typeof H){case"undefined":case"string":case"boolean":return;case"number":if(!Number.isFinite(H))G(String(H));return;case"bigint":return G("a bigint");case"function":return G("a function");case"symbol":return G("a symbol")}if(H===null)return;let W=H;if($.has(W))return G("a circular reference");$.add(W);try{let Y=Z?W.toJSON:void 0;if(typeof Y==="function"){let T;try{T=Y.call(W)}catch{return G("a toJSON that threw")}if(T===void 0)return G("a toJSON that returns undefined");return b(T,Q,X,$,!1)}if(Array.isArray(H))H.forEach((T,M)=>b(T,[...Q,M],X,$));else for(let[T,M]of Object.entries(W))b(M,[...Q,T],X,$)}finally{$.delete(W)}}function A(H){return o(H)}function o(H){let Q={toJSONSchema:()=>t0(H),parse(X){let $=[],Z=j(H,X,[],$);if($.length>0)throw Error($.map(Z0).join("; "));return Z.drop?void 0:Z.value},safeParse(X){let $=[],Z=j(H,X,[],$);if($.length>0)return{ok:!1,errors:$.map(Z0)};return{ok:!0,value:Z.drop?void 0:Z.value}},validate(X){let $=[],Z=j(H,X,[],$);if($.length>0)return{ok:!1,issues:$};return{ok:!0,value:Z.drop?void 0:Z.value}},describe:(X)=>o({...H,description:X}),optional:()=>o({...H,optional:!0}),nullable:()=>o({...H,nullable:!0,optional:!1})};return i.set(Q,H),Q}function L(H){return{node:H,optional:!1,nullable:!1}}var _0=["strip","error","passthrough"];class q0 extends Error{problems;constructor(H){super(`gemi/ai: s.fromJSONSchema cannot model this schema:
|
|
3
|
+
${H.map((Q)=>`- ${Q}`).join(`
|
|
4
|
+
`)}`);this.name="JSONSchemaError",this.problems=H}}var GH=new Set(["title","$schema","$id","$comment","examples","default","deprecated","readOnly","writeOnly"]),x={string:["minLength","maxLength","format"],number:["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],integer:["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],boolean:[],object:["properties","required","additionalProperties"],array:["items","minItems","maxItems"]};function m(H){return typeof H==="object"&&H!==null&&!Array.isArray(H)}function n(H,Q,X,$){let Z=(D,K=X)=>{$.push(K?`${K}: ${D}`:D);return},G=(D)=>X?`${X}.${D}`:D;if(!m(H))return Z("expected a schema object");let W=new Set(Q.ignoreKeywords??[]),Y=(D)=>GH.has(D)||D.startsWith("x-")||W.has(D),T=!1,M=H.type;if(Array.isArray(M)){let D=M.filter((K)=>K!=="null");if(D.length!==1)return Z(`type ${JSON.stringify(M)} is not supported; only one type, optionally with "null". Use anyOf for alternatives`,G("type"));T=D.length<M.length,M=D[0]}if(M!==void 0&&(typeof M!=="string"||!(M in x)))return Z(`type ${JSON.stringify(M)} is not supported; expected one of ${Object.keys(x).join(", ")}`,G("type"));let U=new Set(["type","description","enum","const","anyOf",...M?x[M]:[]]),R=!1;for(let D of Object.keys(H)){if(U.has(D)||Y(D))continue;R=!0;let K=Object.entries(x).find(([,z])=>z.includes(D));Z(K&&K[0]!==M?`"${D}" applies to type ${K[0]}, and this schema is ${M?`type ${M}`:"untyped"}`:`"${D}" is not supported by s.fromJSONSchema`,G(D))}if(R)return;if(H.description!==void 0&&typeof H.description!=="string")return Z("expected a string",G("description"));let p=H.description,C=(D)=>({node:D,optional:!1,nullable:T,...p?{description:p}:{}});if(H.anyOf!==void 0){if(M!==void 0||H.enum!==void 0||H.const!==void 0)return Z("anyOf cannot be combined with type, enum or const here",G("anyOf"));if(!Array.isArray(H.anyOf)||H.anyOf.length===0)return Z("expected a non-empty array",G("anyOf"));let D=[],K=!1;if(H.anyOf.forEach((z,B)=>{if(m(z)&&z.type==="null"&&Object.keys(z).length===1){T=!0;return}let J=n(z,Q,G(`anyOf[${B}]`),$);if(J)D.push(J);else K=!0}),K)return;if(D.length===0)return Z("anyOf has only null in it",G("anyOf"));if(D.length===1){let z=D[0];return{...z,nullable:z.nullable||T,...p?{description:p}:{}}}return C({kind:"union",members:D})}if(H.const!==void 0){let D=H.const;if(typeof D!=="string"&&typeof D!=="number"&&typeof D!=="boolean")return Z("only a string, number or boolean const is supported",G("const"));if(M!==void 0&&typeof D!==(M==="integer"?"number":M))return Z(`const ${JSON.stringify(D)} is not of type ${M}`,G("const"));return C({kind:"literal",value:D})}let q;if(M==="string"){if(q=WH(H,Q,G,$),q===null)return}if(H.enum!==void 0){if(!Array.isArray(H.enum)||H.enum.length===0)return Z("expected a non-empty array",G("enum"));let D=H.enum.filter((B)=>B!==null);if(D.length<H.enum.length)T=!0;let K=D.find((B)=>!(typeof B==="string"||typeof B==="number"||typeof B==="boolean")||M!==void 0&&typeof B!==(M==="integer"?"number":M));if(K!==void 0||D.length===0)return Z(M?`every value must be of type ${M}${D.length===0?", and there must be one":`; ${JSON.stringify(K)} is not`}`:"only strings, numbers and booleans are supported",G("enum"));if(D.every((B)=>typeof B==="string"))return C({kind:"enum",values:[...new Set(D)],...q?{checks:q}:{}});let z=[...new Set(D)];if(z.length===1)return C({kind:"literal",value:z[0]});return C({kind:"union",members:z.map((B)=>L({kind:"literal",value:B}))})}switch(M){case void 0:return Z("a schema needs a type, an enum, a const or an anyOf");case"string":return C({kind:"string",...q?{checks:q}:{}});case"number":case"integer":{let D=M==="integer"?{integer:!0}:{},K=!1;for(let z of x.number){let B=H[z];if(B===void 0)continue;if(typeof B!=="number"||!Number.isFinite(B)){Z("expected a number",G(z)),K=!0;continue}D[z]=B}if(K)return;return C({kind:"number",...Object.keys(D).length>0?{checks:D}:{}})}case"boolean":return C({kind:"boolean"});case"array":{if(!m(H.items))return Z('an array needs "items" to be one schema (tuples are not supported)',G("items"));let D={},K=!1;for(let B of["minItems","maxItems"]){let J=H[B];if(J===void 0)continue;if(typeof J!=="number"||!Number.isInteger(J)||J<0){Z("expected a non-negative integer",G(B)),K=!0;continue}D[B]=J}let z=n(H.items,Q,G("items"),$);if(!z||K)return;return C({kind:"array",item:z,...Object.keys(D).length>0?{checks:D}:{}})}case"object":{let D=H.properties??{};if(!m(D))return Z("expected an object",G("properties"));if(H.additionalProperties!==void 0&&H.additionalProperties!==!1)return Z("only false is supported; a record with arbitrary keys has no strict-mode form (use s.json())",G("additionalProperties"));let K=H.required??[];if(!Array.isArray(K)||!K.every((_)=>typeof _==="string"))return Z("expected an array of property names",G("required"));let z=K.filter((_)=>!Object.hasOwn(D,_));if(z.length>0)return Z(`lists properties the schema doesn't have: ${z.join(", ")}`,G("required"));let B={},J=!1;for(let[_,d0]of Object.entries(D)){let H0=n(d0,Q,G(`properties.${_}`),$);if(!H0){J=!0;continue}B[_]=K.includes(_)?H0:{...H0,optional:!0}}if(J)return;let e=Q.unknownKeys;return C({kind:"object",shape:B,...e==="error"||e==="passthrough"?{unknownKeys:e}:{}})}}return}function WH(H,Q,X,$){let Z={},G=!1;for(let W of["minLength","maxLength"]){let Y=H[W];if(Y===void 0)continue;if(typeof Y!=="number"||!Number.isInteger(Y)||Y<0){$.push(`${X(W)}: expected a non-negative integer`),G=!0;continue}Z[W]=Y}if(H.format!==void 0){let W=H.format,Y=typeof W==="string"?Q.formats?.[W]:void 0;if(typeof W!=="string")$.push(`${X("format")}: expected a string`),G=!0;else if(!Y||!Object.hasOwn(Q.formats,W))$.push(`${X("format")}: unknown format ${JSON.stringify(W)}; pass a check for it in the formats option`),G=!0;else Z.format={name:W,test:YH(Y)}}if(G)return null;return Object.keys(Z).length>0?Z:void 0}function YH(H){if(H===!0)return()=>!0;if(H instanceof RegExp)return(Q)=>{return H.lastIndex=0,H.test(Q)};return H}var mH={string:()=>A(L({kind:"string"})),number:()=>A(L({kind:"number"})),boolean:()=>A(L({kind:"boolean"})),literal:(H)=>A(L({kind:"literal",value:H})),enum:(H)=>A(L({kind:"enum",values:H})),object:(H)=>A(L({kind:"object",shape:Object.fromEntries(Object.entries(H).map(([Q,X])=>[Q,d(X)]))})),array:(H)=>A(L({kind:"array",item:d(H)})),union:(H)=>A(L({kind:"union",members:H.map(d)})),json:()=>A(L({kind:"json"})),recursive:MH,fromJSONSchema:(H,Q={})=>{let X=[];if(Q.unknownKeys!==void 0&&!_0.includes(Q.unknownKeys))throw Error(`gemi/ai: s.fromJSONSchema's unknownKeys option must be one of ${_0.map((Z)=>JSON.stringify(Z)).join(", ")}, got ${JSON.stringify(Q.unknownKeys)}`);let $=n(H,Q,"",X);if(!$||X.length>0)throw new q0(X.length>0?X:["unreadable schema"]);return A($)}};function dH(H){let Q=i.get(H);if(Q)return k(Q.node);return y(H.toJSONSchema())}function y(H){if(!(H.$ref!==void 0||H.type!==void 0||H.enum!==void 0||H.const!==void 0||H.anyOf!==void 0||H.properties!==void 0||H.items!==void 0))return!1;for(let X of Object.values(H.properties??{}))if(!y(X))return!1;if(H.items&&!y(H.items))return!1;for(let X of H.anyOf??[])if(!y(X))return!1;for(let X of Object.values(H.$defs??{}))if(!y(X))return!1;return!0}function k(H,Q=new Set){switch(H.kind){case"string":case"number":case"boolean":case"literal":case"enum":return!0;case"object":return Object.values(H.shape).every((X)=>k(X.node,Q));case"array":return k(H.item.node,Q);case"union":return H.members.every((X)=>k(X.node,Q));case"json":return!1;case"ref":if(Q.has(H.cell))return!0;return Q.add(H.cell),k(w(H.cell).node,Q)}}function $0(H,Q,X=new Set){let $=H.node;if($.kind==="union")return $.members.some((Z)=>$0(Z,Q,X));if($.kind!=="ref")return!1;if($.cell===Q)return!0;if(X.has($.cell)||!$.cell.definition)return!1;return X.add($.cell),$0($.cell.definition,Q,X)}var TH=/^[A-Za-z_][A-Za-z0-9_-]{0,63}$/;function MH(H,Q){if(typeof H!=="string"||!TH.test(H))throw Error(`gemi/ai: s.recursive needs a name of letters, digits, "_" and "-" (starting with a letter or "_", at most 64), got ${JSON.stringify(H)}`);let X={name:H,active:new Set},$=()=>L({kind:"ref",cell:X}),Z=d(Q(A($())));if(Z.optional)throw Error(`gemi/ai: the recursive schema "${H}" is optional() as a whole; mark the places that use it optional instead`);if($0(Z,X))throw Error(`gemi/ai: the recursive schema "${H}" refers to itself outside any object or array, so it describes no finite value; nest \`self\` in an s.object(...) field or an s.array(...)`);return X.definition=Z,A($())}function N0(H){if(typeof H!=="string")return null;let[Q]=H.split(";",1),X=Q.trim().toLowerCase();return X===""?null:X}function w0(H){if(H===null)return!1;if(H==="application/json")return!0;let Q=H.indexOf("/");return Q>0&&H.endsWith("+json")&&H.length>Q+1+5}var f=new WeakMap;function nH(H,Q,X,$){f.set(H,{clientAddress:Q,...X?{grant:Object.freeze({...X,scopes:Object.freeze([...X.scopes])})}:{},...$?{progress:$}:{}})}function E0(H){return f.get(H)?.progress}function S0(H){return f.get(H)?.grant}function x0(H){return f.has(H)}function iH(H){return f.get(H)?.clientAddress}var g0=new WeakMap;function lH(H,Q){g0.set(H,Q)}function y0(H){return g0.get(H)??null}var G0=new WeakMap;function sH(H,Q){let X=G0.get(H)??[];if(!X.includes(Q))G0.set(H,[...X,Q])}function rH(H){return G0.get(H)??[]}class E{data;constructor(H){this.data=H}get(H){return this.data[H]}has(H){return this.data[H]!==void 0}toJSON(){return this.data}}function k0(H){return typeof H==="object"&&H!==null&&!(H instanceof Blob)}function DH(H,Q){if(!Q.includes(".")||Object.hasOwn(H,Q))return[{path:[Q],value:H[Q]}];let X=[{path:[],value:H}];for(let $ of Q.split(".")){let Z=[];for(let{path:G,value:W}of X){if($==="*"){if(Array.isArray(W))W.forEach((Y,T)=>Z.push({path:[...G,T],value:Y}));else if(k0(W))for(let[Y,T]of Object.entries(W))Z.push({path:[...G,Y],value:T});continue}if(Array.isArray(W)&&/^\d+$/.test($)){Z.push({path:[...G,Number($)],value:W[Number($)]});continue}Z.push({path:[...G,$],value:k0(W)&&Object.hasOwn(W,$)?W[$]:void 0})}X=Z}return X}function b0(H){return H.join(".")}class UH{kind;rawRequest;headers;cookies;search;schema={};routePath;params;domain;constructor(H,Q,X,$){if(!H){let T=V.getStore().req;this.params=T.params,this.rawRequest=T.rawRequest,this.kind=T.kind,this.routePath=T.routePath,this.domain=T.domain??null}else this.params=Q,this.rawRequest=H,this.routePath=$,this.kind=X??"api",this.domain=y0(H);this.headers=this.rawRequest.headers;let Z=Q0(this.rawRequest.headers.get("Cookie")),G=new URL(this.rawRequest.url),W=new Map;for(let[T,M]of G.searchParams)if(W.has(T)){let U=W.get(T);if(Array.isArray(U))U.push(M),W.set(T,U);else W.set(T,[U,M])}else W.set(T,M);let Y=Object.fromEntries(W.entries());this.search=new E(Y),this.cookies=Z}locale(){return V.getStore().locale}ctx(){return V.getStore()}isModelOriginated(){return x0(this.rawRequest)}mcpGrant(){return S0(this.rawRequest)??null}reportProgress(H){let Q=E0(this.rawRequest);if(!Q)return!1;return Q(H),!0}get signal(){return this.rawRequest.signal}range(){return J0(this.rawRequest.headers.get("Range"))}refine(H){return{}}async parseBody(){let H=N0(this.rawRequest.headers.get("Content-Type"));if(w0(H))return new E(await this.parseJsonBody());if(H==="application/x-www-form-urlencoded"||H==="multipart/form-data"){let Q;try{Q=await this.rawRequest.formData()}catch($){if($ instanceof F)throw $;throw new F("The request body could not be read as a form.")}let X=new Map;for(let[$,Z]of Q.entries())if(X.has($)){let G=X.get($);if(Array.isArray(G))G.push(Z);else X.set($,[G,Z])}else X.set($,Z);return new E(Object.fromEntries(X.entries()))}return new E({})}async parseJsonBody(){if(!this.rawRequest.body)return{};let H;try{H=await this.rawRequest.text()}catch(X){if(X instanceof F)throw X;throw new F("The request body could not be read.")}if(H.trim()==="")return{};let Q;try{Q=JSON.parse(H)}catch{throw new F("The request body is not valid JSON.")}if(Q===null||typeof Q!=="object")throw new F("The request body must be a JSON object.");return Q}validateInput(H){if(j0(this.schema))return this.validateWithSchema(H);let Q=H.toJSON()??{},X={},$=Object.entries(this.schema).map(([Z,G])=>({key:Z,rules:Object.entries(G).map(([W,Y])=>({rule:W,message:Y,check:typeof Y==="function"?null:this.ruleFor(Z,W)}))}));for(let{key:Z,rules:G}of $)for(let{path:W,value:Y}of DH(Q,Z)){let T=this.checkField(Y,G);if(T.length>0){let M=X[b0(W)]??=[];for(let U of T)if(!M.includes(U))M.push(U)}}if(this.addRefinements(X,Q),Object.keys(X).length>0)throw new S(X);return H}checkField(H,Q){let X=Q.some(({rule:G})=>G==="required"),$=H===void 0||H===null||H==="",Z=[];for(let{rule:G,message:W,check:Y}of Q){let T=W,M=!1;if(typeof W==="function")T=W(H),M=typeof T>"u";else M=Y(H);if(M)continue;if($&&!X)continue;if(G==="required")return[String(T)];if(!Z.includes(String(T)))Z.push(String(T))}return Z}validateWithSchema(H){let Q=this.schema.validate(H.toJSON()),X={};if("issues"in Q)for(let Z of Q.issues){let G=b0(Z.path),W=X[G]??=[];if(!W.includes(Z.message))W.push(Z.message)}let $="value"in Q?new E(Q.value):H;if(this.addRefinements(X,$.toJSON()),Object.keys(X).length>0)throw new S(X);return $}addRefinements(H,Q){for(let[X,$]of Object.entries(this.refine(Q)??{})){let Z=H[X]??[];H[X]=Z.includes($)?Z:[...Z,$]}}ruleFor(H,Q){try{return P0(Q)}catch(X){if(X instanceof P)throw new P(`${this.constructor.name}.schema.${H}: ${X.message}`);throw X}}async input(){return this.validateInput(await this.parseBody())}async safeInput(){let H=await this.parseBody();try{return{isValid:!0,errors:{},input:this.validateInput(H)}}catch(Q){if(!(Q instanceof S))throw Q;return{isValid:!1,errors:Q.errors,input:H}}}}class KH extends F{error;constructor(H="Not authorized"){super(H);this.name="AuthorizationError",this.error=H,this.payload={api:{status:401,data:{error:l("authorization",this.error,401)}},view:{}}}}class W0 extends F{static apiStatus=403;error;constructor(H="Insufficient permissions"){super(H);this.name="InsufficientPermissionsError",this.error=H,this.payload={api:{status:W0.apiStatus,data:{error:l("permission",this.error,W0.apiStatus)}},view:{status:403}}}}class Y0 extends F{total;constructor(H){super("Range not satisfiable");this.total=H;this.name="RangeNotSatisfiableError",this.payload={api:{status:416,data:{error:t("range_not_satisfiable","Range not satisfiable",416)},headers:{"Content-Range":R0(H),"Accept-Ranges":"bytes","Cache-Control":"no-store"}},view:{}}}}class BH extends F{constructor(H="Not found"){super(H);this.name="NotFoundError",this.payload={api:{status:404,data:{error:t("not_found",H,404)},headers:{"Cache-Control":"no-store"}},view:{status:404}}}}class O extends F{fileName;constructor(H){super("File not found");this.fileName=H;this.name="FileNotFoundError",this.payload={api:{status:404,data:{error:t("not_found","Not found",404)},headers:{"Cache-Control":"no-store"}},view:{status:404}}}}class zH extends F{constructor(H={}){super("Authentication error");this.name="AuthenticationError";let Q=H.redirectTo??"/auth/sign-in";this.payload={api:{status:401,data:{error:l("authentication","Authentication error",401)}},viewData:{status:200,data:{},headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate"},directive:{kind:"Redirect",path:Q}},view:{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:Q}}}}}class v{static getFacadeAccessor(){throw Error(`Facade [${this.name}] does not implement getFacadeAccessor().`)}static getFacadeRoot(){return f0(this.getFacadeAccessor())}}function s(H){if(typeof H!=="string"||/^[\s/.]*$/.test(H))throw Error(`Refusing to delete by prefix ${JSON.stringify(H)}: it would match the whole store`)}class T0{async*objects(H,Q={}){throw Error(`${this.constructor.name} does not implement objects(). Override it to list objects in this backend.`)}async deletePrefix(H,Q={}){s(H);let X=[];for await(let $ of this.objects(H,Q))X.push($.name);for(let $ of X)Q.signal?.throwIfAborted(),await this.delete({name:$,bucket:Q.bucket});return X.length}async delete(H){throw Error(`${this.constructor.name} does not implement delete(). Override it to remove objects from this backend.`)}async read(H){let Q=typeof H==="string"?{name:H}:H,X=await this.fetch({name:Q.name,bucket:Q.bucket});if(!X.ok)throw new O(Q.name);let $=X.headers.get("Content-Type")??"application/octet-stream",Z=X.headers.get("ETag")??void 0,G=X.headers.get("Last-Modified"),W=G?new Date(G):void 0;if(Q.range){let M=await X.blob();return{body:M,start:0,end:M.size-1,total:M.size,partial:!1,type:$,etag:Z,lastModified:W,name:Q.name}}let Y=Number(X.headers.get("Content-Length")),T=Number.isFinite(Y)?Y:0;return{body:X.body,start:0,end:T-1,total:T,partial:!1,type:$,etag:Z,lastModified:W,name:Q.name}}async size(H){let Q=typeof H==="string"?H:H.name,X=typeof H==="string"?void 0:H.bucket,$=await this.fetch({name:Q,bucket:X});if(!$.ok)throw new O(Q);let Z=Number($.headers.get("Content-Length"));if(Number.isFinite(Z))return await $.body?.cancel(),Z;return(await $.blob()).size}}function v0(H,Q){if(!Q)return H;let X=H.getReader(),$=!1,Z,G=()=>{if($=!0,Z)Q.removeEventListener("abort",Z)};return new ReadableStream({start(W){if(Z=()=>{if($)return;G(),W.error(Q.reason),X.cancel(Q.reason).catch(()=>{})},Q.aborted)Z();else Q.addEventListener("abort",Z,{once:!0})},async pull(W){let Y;try{Y=await X.read()}catch(T){if($)return;G(),W.error(T);return}if($)return;if(Y.done){G(),W.close();return}W.enqueue(Y.value)},cancel(W){return G(),X.cancel(W)}},{highWaterMark:0})}import{readdir as M0,rmdir as FH,stat as AH,unlink as JH}from"fs/promises";import{isAbsolute as h0,relative as r,resolve as a,sep as I}from"path";class D0 extends T0{configured;constructor(H){super();this.configured=H}get folderPath(){return this.configured??`${h()}/storage`}async put(H,{signal:Q}={}){Q?.throwIfAborted();let X,$;if(H instanceof Blob)X=H,$=`${Bun.randomUUIDv7()}.${H.type.split("/")[1].split(";")[0]}`;else X=H.body,$=H.name;let Z=X instanceof Buffer?X:X instanceof Blob||X instanceof File?Buffer.from(await X.arrayBuffer()):"",G=`${this.folderPath}/${$}`;return Q?.throwIfAborted(),await Bun.write(G,Z),$}async fetch(H,{signal:Q}={}){Q?.throwIfAborted();let X=process.env.BUCKET_NAME,$;if(typeof H==="string")$=H;else X=H.bucket??X,$=H.name;if(!$)throw Error("Object name has to be specified");let Z=`${this.folderPath}/${$}`,G=Bun.file(Z),W=v0(Bun.file(Z).stream(),Q),Y=new Date(G.lastModified).toUTCString();return new Response(W,{headers:{"Content-Type":G.type,"Content-Length":String(G.size),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":Y}})}async read(H){let Q=typeof H==="string"?{name:H}:H,{name:X,range:$=null}=Q;if(!X)throw Error("Object name has to be specified");let Z=Bun.file(`${this.folderPath}/${X}`);if(!await Z.exists())throw new O(X);let G=Z.size,W=$?L0($,G):null;if($&&!W)throw new Y0(G);let Y=W?.start??0,T=W?W.end:G-1;return{body:W?Z.slice(Y,T+1):Z,start:Y,end:T,total:G,partial:Boolean(W),type:Z.type||"application/octet-stream",lastModified:new Date(Z.lastModified),name:X}}async size(H){let Q=typeof H==="string"?H:H.name,X=Bun.file(`${this.folderPath}/${Q}`);if(!await X.exists())throw new O(Q);return X.size}async delete(H){let Q=typeof H==="string"?H:H.name;if(!Q)throw Error("Object name has to be specified");let X=a(this.folderPath),$=a(X,Q),Z=r(X,$);if(!Z||Z===".."||Z.startsWith(`..${I}`)||h0(Z))throw Error(`Refusing to delete "${Q}": it is outside the storage folder`);try{await JH($)}catch(G){if(G?.code==="ENOENT")return;throw G}}resolvePrefix(H){let Q=a(this.folderPath),X=H.lastIndexOf("/"),$=X===-1?"":H.slice(0,X),Z=X===-1?H:H.slice(X+1),G=a(Q,$),W=r(Q,G);if(W===".."||W.startsWith(`..${I}`)||h0(W))throw Error(`Refusing to list "${H}": it is outside the storage folder`);let Y=W.split(I).join("/");return{root:Q,dir:G,match:Y?`${Y}/${Z}`:Z}}async*objects(H,{signal:Q}={}){Q?.throwIfAborted();let{root:X,dir:$,match:Z}=this.resolvePrefix(H),G=[],W=async(Y)=>{let T;try{T=await M0(Y,{withFileTypes:!0})}catch(M){if(M?.code==="ENOENT"||M?.code==="ENOTDIR")return;throw M}for(let M of T){let U=`${Y}${I}${M.name}`,R=r(X,U).split(I).join("/");if(M.isDirectory()){if(`${R}/`.startsWith(Z)||Z.startsWith(`${R}/`))await W(U)}else if(M.isFile()&&R.startsWith(Z))G.push(R)}};await W($),G.sort();for(let Y of G){Q?.throwIfAborted();let T;try{T=await AH(`${X}/${Y}`)}catch(M){if(M?.code==="ENOENT")continue;throw M}yield{name:Y,size:T.size,lastModified:T.mtime}}}async deletePrefix(H,Q={}){s(H);let{root:X,match:$}=this.resolvePrefix(H);s($);let Z=await super.deletePrefix(H,Q);if(Z>0)await this.pruneEmptyDirs(X,$);return Z}async pruneEmptyDirs(H,Q){let X=[],$=async(Z)=>{let G;try{G=await M0(Z,{withFileTypes:!0})}catch{return}for(let W of G){if(!W.isDirectory())continue;let Y=`${Z}${I}${W.name}`,T=r(H,Y).split(I).join("/");if(`${T}/`.startsWith(Q)||Q.startsWith(`${T}/`)){if(await $(Y),`${T}/`.startsWith(Q))X.push(Y)}}};await $(H);for(let Z of X)try{await FH(Z)}catch{}}async list(){return await M0(this.folderPath)}}function qQ(H){return H}function p0(){return{driver:new D0}}class U0{static token="filesystem";driver;constructor(H={}){this.driver=H.driver??p0().driver}}import{Buffer as RH}from"buffer";async function c0(H){try{return(await import("sharp")).default}catch(Q){throw Error(`${H} requires the 'sharp' package. Install it with \`bun add sharp\`.`,{cause:Q})}}class CH extends v{static getFacadeAccessor(){return U0}static async put(H,Q={}){return this.getFacadeRoot().driver.put(H,Q)}static async metadata(H){let Q=RH.from(await H.arrayBuffer()),X=await c0("Storage.metadata()");try{return await X(Q).metadata()}catch{return{}}}static async fetch(H,Q={}){return Q.signal?.throwIfAborted(),this.getFacadeRoot().driver.fetch(H,Q)}static async read(H,Q={}){let X=typeof H==="string"?{name:H}:{...H},$="range"in Q?Q.range??null:X.range!==void 0?X.range:V.getStore()?.rangeRequest??null;return this.getFacadeRoot().driver.read({...X,range:$})}static list(H){return this.getFacadeRoot().driver.list(H)}static objects(H,Q={}){return this.getFacadeRoot().driver.objects(H,Q)}static async deletePrefix(H,Q={}){return this.getFacadeRoot().driver.deletePrefix(H,Q)}static async delete(H){return this.getFacadeRoot().driver.delete(H)}}import{mkdir as K0,readdir as PH,access as VH}from"fs/promises";async function B0(H){try{return await VH(H),!0}catch{return!1}}class z0{config;static token="log";writer;isReady=!1;flushTimeout;fileSize=0;writerSize=0;isCreatingFile=!1;bootPromise=null;currentLogFilePath;get logsDirPath(){return`${h()}/storage/logs`}constructor(H){this.config=H}boot(){if(!this.bootPromise)this.bootPromise=this.createStorage().catch((H)=>{console.error("Log storage unavailable, file logging disabled",H)}).then(()=>{this.isReady=!0});return this.bootPromise}async createStorage(){let H=`${h()}/storage`;if(!await B0(H))await K0(H);if(!await B0(this.logsDirPath))await K0(this.logsDirPath);await this.newLogFile()}async newLogFile(){if(!await B0(this.logsDirPath))await K0(this.logsDirPath);if(this.isCreatingFile=!0,this.currentLogFilePath){this.writer.flush(),this.writer.end(),this.writer=null;let X=new File([await Bun.file(this.currentLogFilePath).arrayBuffer()],this.currentLogFilePath.split("/").pop(),{type:"text/plain"});this.config.onLogFileClosed(X),this.fileSize=0,this.writerSize=0}let Q=(await PH(this.logsDirPath)).sort().reverse()[0];if(Q){let X=Bun.file(`${this.logsDirPath}/${Q}`);if(X.size<this.config.maxFileSize)this.currentLogFilePath=`${this.logsDirPath}/${Q}`,this.writer=X.writer(),this.writer.write(await X.text()),this.writer.write(`
|
|
5
|
+
`),this.writer.flush(),this.fileSize=X.size}if(!this.writer){let X=`${new Date(Date.now()).toISOString()}.log`.replaceAll(":","-");this.currentLogFilePath=`${this.logsDirPath}/${X}`;let $=Bun.file(`${this.logsDirPath}/${X}`);this.writer=$.writer(),this.fileSize=0,this.writerSize=0}this.isCreatingFile=!1}async log(H,Q,X={}){if(!this.isReady)await this.boot();let $=V.getStore(),Z={};if($)Z={url:$.req.rawRequest.url,method:$.req.rawRequest.method,headers:$.req.rawRequest.headers,body:$.req.rawRequest.body};let G={timestamp:new Date(Date.now()).toISOString(),env:Bun.env.NODE_ENV,level:H,message:Q,metadata:{...Z,...X}},W="";try{W=JSON.stringify(G)}catch(Y){console.log("Error parsing log object",Y)}try{let Y=this.config.onLogCreated(G);if(Y instanceof Promise)Y.catch((T)=>console.error("Error in onLogCreated",T))}catch(Y){console.error("Error in onLogCreated",Y)}if(!this.writer)return;this.writerSize+=W.length,this.fileSize+=W.length;try{this.writer.write(W),this.writer.write(`
|
|
6
|
+
`),this.tryFlush()}catch(Y){console.error("Error writing log",Y)}}async tryFlush(){if(this.fileSize>this.config.maxFileSize){if(!this.isCreatingFile)await this.newLogFile()}if(this.writerSize>this.config.maxFileSize/2)await this.writer.flush(),this.writerSize=0,await this.newLogFile();else clearTimeout(this.flushTimeout),this.flushTimeout=setTimeout(async()=>{await this.writer.flush(),this.writerSize=0},100)}}class _H extends v{static getFacadeAccessor(){return z0}static debug(H,Q){this.getFacadeRoot().log("debug",H,Q)}static info(H,Q){this.getFacadeRoot().log("info",H,Q)}static notice(H,Q){this.getFacadeRoot().log("notice",H,Q)}static warning(H,Q){this.getFacadeRoot().log("warning",H,Q)}static error(H,Q){this.getFacadeRoot().log("error",H,Q)}static critical(H,Q){this.getFacadeRoot().log("critical",H,Q)}static alert(H,Q){this.getFacadeRoot().log("alert",H,Q)}static emergency(H,Q){this.getFacadeRoot().log("emergency",H,Q)}}class jH{config;static token="redis";instance=null;constructor(H={}){this.config=H}get client(){return this.instance??=new(OH())(this.config.url,this.config.options)}set client(H){this.instance=H}close(){let H=this.instance;this.instance=null,H?.close()}}function OH(){let H=globalThis.Bun?.RedisClient;if(typeof H!=="function")throw Error("Redis requires Bun's built-in Redis client, which this runtime does not provide. Run the app under Bun, or bind your own client for the 'redis' token.");return H}var F0=new TextEncoder;function m0(H){return`id: ${H.seq}
|
|
7
|
+
data: ${JSON.stringify(H.event)}
|
|
8
|
+
|
|
9
|
+
`}var IH=5000,qH=`: keepalive
|
|
10
|
+
|
|
11
|
+
`;function NH(H,Q=IH){let X=null,$=!1,Z=()=>{if($)return;if(X!==null)clearTimeout(X);X=setTimeout(()=>{if(X=null,$)return;try{H.enqueue(F0.encode(qH))}catch{G();return}Z()},Q)},G=()=>{if($=!0,X!==null)clearTimeout(X);X=null};return Z(),{touch:Z,stop:G}}function wH(){return{"Content-Type":"text/event-stream","Cache-Control":"no-store, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"}}function nQ(H,Q=200){let X=H[Symbol.asyncIterator](),$=-1,Z,G=new ReadableStream({start(W){Z=NH(W)},async pull(W){try{let Y=await X.next();if(Y.done){Z.stop(),W.close();return}$=Y.value.seq,W.enqueue(F0.encode(m0(Y.value))),Z.touch()}catch(Y){let T={type:"error",error:SH(Y)};Z.stop(),W.enqueue(F0.encode(m0({seq:$+1,event:T}))),W.close()}},cancel(W){Z.stop(),X.return?.(W)}});return new Response(G,{status:Q,headers:wH()})}var EH=new Set(["frame_cursor_evicted","live_run_not_found"]);function SH(H){let Q=H&&typeof H==="object"?H.code:void 0;if(H instanceof Error&&typeof Q==="string"&&EH.has(Q))return{code:"unknown",message:H.message,retryable:!1};return console.error("[gemi/ai] agent stream failed",H),{code:"unknown",message:"The run's stream failed.",retryable:!1}}
|
|
12
|
+
export{A0 as Xf,u0 as Yf,gH as Zf,N0 as _f,nH as $f,S0 as ag,iH as bg,J0 as cg,L0 as dg,kH as eg,bH as fg,fH as gg,R0 as hg,lH as ig,y0 as jg,sH as kg,rH as lg,S as mg,P as ng,q0 as og,mH as pg,dH as qg,UH as rg,KH as sg,W0 as tg,Y0 as ug,BH as vg,O as wg,zH as xg,v as yg,c0 as zg,s as Ag,T0 as Bg,v0 as Cg,D0 as Dg,qQ as Eg,p0 as Fg,U0 as Gg,CH as Hg,z0 as Ig,_H as Jg,jH as Kg,qH as Lg,NH as Mg,wH as Ng,nQ as Og};
|
|
13
|
+
|
|
14
|
+
//# debugId=A82A79578A9AE18164756E2164756E21
|