@kyro-cms/core 0.13.8 → 0.13.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/{WebhookService-BJTCP3cU.d.cts → WebhookService-2ys-dFjb.d.cts} +1 -1
  2. package/dist/{WebhookService-Bqr_66lK.d.ts → WebhookService-Y-X6GgLL.d.ts} +1 -1
  3. package/dist/api-handler-graphql.cjs +1 -1
  4. package/dist/api-handler-graphql.js +1 -1
  5. package/dist/api-handler-trpc.cjs +1 -1
  6. package/dist/api-handler-trpc.js +1 -1
  7. package/dist/api-handler.cjs +1 -1
  8. package/dist/api-handler.js +1 -1
  9. package/dist/{base-C2DOe8wD.d.ts → base-BAApLdlP.d.ts} +1 -1
  10. package/dist/{base-DIpT2Vuz.d.cts → base-C6bzgEN1.d.cts} +1 -1
  11. package/dist/{chunk-ZE2X3FBU.js → chunk-25M5A427.js} +4 -4
  12. package/dist/chunk-3BDAH6FD.cjs +132 -0
  13. package/dist/{chunk-PPGZHOYR.cjs → chunk-77ZGCYHZ.cjs} +1 -1
  14. package/dist/{chunk-A7763NCF.cjs → chunk-JGJPGP4Q.cjs} +3 -3
  15. package/dist/chunk-LCTCEO34.js +5 -0
  16. package/dist/chunk-PYVZJIQ3.js +133 -0
  17. package/dist/{chunk-TVWHTVLI.js → chunk-U7UUABFL.js} +2 -2
  18. package/dist/chunk-V7E74PHS.cjs +4 -0
  19. package/dist/cli/index.cjs +21 -21
  20. package/dist/cli/index.js +21 -21
  21. package/dist/drizzle/index.cjs +1 -1
  22. package/dist/drizzle/index.d.cts +2 -2
  23. package/dist/drizzle/index.d.ts +2 -2
  24. package/dist/drizzle/index.js +1 -1
  25. package/dist/graphql/index.d.cts +2 -2
  26. package/dist/graphql/index.d.ts +2 -2
  27. package/dist/{index-xqpVL2Zq.d.ts → index-94nxUkEf.d.ts} +2 -2
  28. package/dist/{index-B_39z2jP.d.cts → index-CZctgiAx.d.cts} +2 -2
  29. package/dist/{index-C9uBoJtm.d.ts → index-DjhIVdL9.d.ts} +1 -1
  30. package/dist/{index-Ci7aUrmN.d.cts → index-GSRx0kyZ.d.cts} +1 -1
  31. package/dist/index.cjs +16 -16
  32. package/dist/index.d.cts +12 -23
  33. package/dist/index.d.ts +12 -23
  34. package/dist/index.js +22 -22
  35. package/dist/{local-TF5ZMHWW.js → local-32NFEZEC.js} +1 -1
  36. package/dist/local-RVYI6YX4.cjs +1 -0
  37. package/dist/mongodb/index.d.cts +3 -3
  38. package/dist/mongodb/index.d.ts +3 -3
  39. package/dist/rest/index.d.cts +3 -3
  40. package/dist/rest/index.d.ts +3 -3
  41. package/dist/templates/index.d.cts +1 -1
  42. package/dist/templates/index.d.ts +1 -1
  43. package/dist/trpc/index.d.cts +2 -2
  44. package/dist/trpc/index.d.ts +2 -2
  45. package/dist/{types-CdwfDpyW.d.cts → types-BQnOYvym.d.cts} +1 -13
  46. package/dist/{types-CKWnrUAh.d.ts → types-M2BhNVof.d.ts} +1 -13
  47. package/package.json +4 -7
  48. package/dist/chunk-GWUHIIPO.cjs +0 -132
  49. package/dist/chunk-MCK2QRAU.cjs +0 -4
  50. package/dist/chunk-SYE3OS5T.js +0 -5
  51. package/dist/chunk-TJ6N5ZPZ.js +0 -133
  52. package/dist/local-DKP43BWQ.cjs +0 -1
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var chunkJHFD3IAU_cjs=require('../chunk-JHFD3IAU.cjs'),commander=require('commander'),h=require('fs'),A=require('path'),url=require('url'),glob=require('glob'),child_process=require('child_process'),ye=require('prompts'),ne=require('crypto'),i=require('chalk'),T=require('ora');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var h__default=/*#__PURE__*/_interopDefault(h);var A__default=/*#__PURE__*/_interopDefault(A);var ye__default=/*#__PURE__*/_interopDefault(ye);var ne__default=/*#__PURE__*/_interopDefault(ne);var i__default=/*#__PURE__*/_interopDefault(i);var T__default=/*#__PURE__*/_interopDefault(T);function B(e){switch(e.type){case "text":case "email":case "password":case "textarea":case "color":case "code":case "markdown":case "date":case "richtext":case "json":return e.hasMany?"string[]":"string";case "number":return e.hasMany?"number[]":"number";case "checkbox":return "boolean";case "select":case "radio":if(e.options){let t=e.options.map(n=>`'${n.value}'`).join(" | ");return e.hasMany?`(${t})[]`:t}return e.hasMany?"string[]":"string";case "relationship":if(Array.isArray(e.relationTo)){if(e.relationTo.includes("*"))return e.hasMany?"any[]":"any";let t=e.relationTo.map(n=>`${P(n)} | string`).join(" | ");return e.hasMany?`(${t})[]`:`(${t})`}let o=e.relationTo||"unknown";return o==="*"?e.hasMany?"any[]":"any":e.hasMany?`(${P(o)} | string)[]`:`${P(o)} | string`;case "upload":return e.hasMany?"(Media | string)[]":"Media | string";case "array":return e.fields&&e.fields.length>0?`Array<{
2
+ 'use strict';var chunkJHFD3IAU_cjs=require('../chunk-JHFD3IAU.cjs'),commander=require('commander'),b=require('fs'),A=require('path'),url=require('url'),glob=require('glob'),child_process=require('child_process'),ye=require('prompts'),ne=require('crypto'),i=require('chalk'),T=require('ora');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var b__default=/*#__PURE__*/_interopDefault(b);var A__default=/*#__PURE__*/_interopDefault(A);var ye__default=/*#__PURE__*/_interopDefault(ye);var ne__default=/*#__PURE__*/_interopDefault(ne);var i__default=/*#__PURE__*/_interopDefault(i);var T__default=/*#__PURE__*/_interopDefault(T);function B(e){switch(e.type){case "text":case "email":case "password":case "textarea":case "color":case "code":case "markdown":case "date":case "richtext":case "json":return e.hasMany?"string[]":"string";case "number":return e.hasMany?"number[]":"number";case "checkbox":return "boolean";case "select":case "radio":if(e.options){let t=e.options.map(n=>`'${n.value}'`).join(" | ");return e.hasMany?`(${t})[]`:t}return e.hasMany?"string[]":"string";case "relationship":if(Array.isArray(e.relationTo)){if(e.relationTo.includes("*"))return e.hasMany?"any[]":"any";let t=e.relationTo.map(n=>`${P(n)} | string`).join(" | ");return e.hasMany?`(${t})[]`:`(${t})`}let o=e.relationTo||"unknown";return o==="*"?e.hasMany?"any[]":"any":e.hasMany?`(${P(o)} | string)[]`:`${P(o)} | string`;case "upload":return e.hasMany?"(Media | string)[]":"Media | string";case "array":return e.fields&&e.fields.length>0?`Array<{
3
3
  ${e.fields.filter(n=>n.name).map(n=>{let s=B(n);return ` ${n.name}${n.required?"":"?"}: ${s};`}).join(`
4
4
  `)}
5
5
  }>`:"Record<string, any>[]";case "group":return e.fields&&e.fields.length>0?`{
@@ -208,7 +208,7 @@ ${e.map(t=>{let n=P(t.slug);return ` ${z(t.slug)}: {
208
208
  `)}
209
209
  };
210
210
  }
211
- `,o}function X(){return new commander.Command("generate").description("Generate TypeScript types from collection configs").option("-c, --config <path>","Path to config file or directory","./src/kyro").option("-o, --output <path>","Output file path","./src/types/kyro.d.ts").option("-w, --watch","Watch for changes and regenerate").option("--url <url>","URL of a running Kyro CMS instance (enables remote mode)").option("--api-key <key>","API key for authentication (required with --url)").action(async o=>{if(o.url){o.url||(console.error("\u274C --url is required when using --api"),process.exit(1)),o.apiKey||(console.error("\u274C --api-key is required when using --api"),process.exit(1));let s=A.resolve(o.output);try{let r=await ue(o.url,o.apiKey),l=ge(r),d=A.join(s,"..");h.existsSync(d)||h.mkdirSync(d,{recursive:!0}),h.writeFileSync(s,l);}catch(r){console.error("\u274C Error:",r.message),process.exit(1);}return}let t=A.resolve(o.config),n=A.resolve(o.output);try{let s=await glob.glob(`${t}/**/*.{ts,js}`);s.length===0&&(console.error("\u274C No config files found at:",t),process.exit(1));let r=[];for(let p of s)try{let m=await import(p),C=Object.values(m).filter(y=>y&&y.slug&&y.fields);r.push(...C);}catch{console.warn(`\u26A0\uFE0F Could not parse: ${p}`);}r.length===0&&(console.error("\u274C No valid collection configs found"),process.exit(1));let l=Z(r),d=A.join(n,"..");if(h.existsSync(d)||h.mkdirSync(d,{recursive:!0}),h.writeFileSync(n,l),o.watch){let{watch:p}=await import('fs');p(t,{recursive:!0},async(m,C)=>{let y=[];for(let _ of s)try{let v=await import(_+`?t=${Date.now()}`),w=Object.values(v).filter(f=>f&&f.slug&&f.fields);y.push(...w);}catch{}let x=Z(y);h.writeFileSync(n,x);});}}catch(s){console.error("\u274C Error:",s.message),process.exit(1);}})}function he(e=3){return ne__default.default.randomBytes(e).toString("hex")}function be(){return ne__default.default.randomBytes(12).toString("base64").replace(/[^a-zA-Z0-9]/g,"").slice(0,16)}var ee=`
211
+ `,o}function X(){return new commander.Command("generate").description("Generate TypeScript types from collection configs").option("-c, --config <path>","Path to config file or directory","./src/kyro").option("-o, --output <path>","Output file path","./src/types/kyro.d.ts").option("-w, --watch","Watch for changes and regenerate").option("--url <url>","URL of a running Kyro CMS instance (enables remote mode)").option("--api-key <key>","API key for authentication (required with --url)").action(async o=>{if(o.url){o.url||(console.error("\u274C --url is required when using --api"),process.exit(1)),o.apiKey||(console.error("\u274C --api-key is required when using --api"),process.exit(1));let s=A.resolve(o.output);try{let r=await ue(o.url,o.apiKey),l=ge(r),m=A.join(s,"..");b.existsSync(m)||b.mkdirSync(m,{recursive:!0}),b.writeFileSync(s,l);}catch(r){console.error("\u274C Error:",r.message),process.exit(1);}return}let t=A.resolve(o.config),n=A.resolve(o.output);try{let s=await glob.glob(`${t}/**/*.{ts,js}`);s.length===0&&(console.error("\u274C No config files found at:",t),process.exit(1));let r=[];for(let d of s)try{let u=await import(d),y=Object.values(u).filter(p=>p&&p.slug&&p.fields);r.push(...y);}catch{console.warn(`\u26A0\uFE0F Could not parse: ${d}`);}r.length===0&&(console.error("\u274C No valid collection configs found"),process.exit(1));let l=Z(r),m=A.join(n,"..");if(b.existsSync(m)||b.mkdirSync(m,{recursive:!0}),b.writeFileSync(n,l),o.watch){let{watch:d}=await import('fs');d(t,{recursive:!0},async(u,y)=>{let p=[];for(let _ of s)try{let v=await import(_+`?t=${Date.now()}`),$=Object.values(v).filter(h=>h&&h.slug&&h.fields);p.push(...$);}catch{}let x=Z(p);b.writeFileSync(n,x);});}}catch(s){console.error("\u274C Error:",s.message),process.exit(1);}})}function he(e=3){return ne__default.default.randomBytes(e).toString("hex")}function be(){return ne__default.default.randomBytes(12).toString("base64").replace(/[^a-zA-Z0-9]/g,"").slice(0,16)}var ee=`
212
212
  [alias]
213
213
  "better-sqlite3" = "./cf-noop.js"
214
214
  "./redis-adapter.js" = "./cf-noop.js"
@@ -224,41 +224,41 @@ ${e.map(t=>{let n=P(t.slug);return ` ${z(t.slug)}: {
224
224
  "basic-ftp" = "./cf-noop.js"
225
225
  `,te=`// No-op stub for Node.js-only modules that cannot run in Cloudflare Workers.
226
226
  export default {};
227
- `;function we(e,o){let t=e.indexOf(o);if(t===-1)return "";let n=e.slice(t+o.length),s=n.search(/\n\s*(\[\[|\[)/);return n.slice(0,s===-1?void 0:s)}function q(e,o){let t=e.match(new RegExp(`^\\s*${o}\\s*=\\s*"([^"]*)"`,"m"));return t?t[1]:""}function U(e,o,t){let n=e,s=n.indexOf(o);for(;s!==-1;){let r=we(n,o);if(q(r,"binding")===t)return r;n=n.slice(s+o.length+r.length),s=n.indexOf(o);}return ""}function $e(e){let o=h__default.default.readFileSync(e,"utf8"),t={name:"",database:"",d1Id:"",hyperId:"",r2Bucket:""},n=o.match(/^name\s*=\s*"([^"]*)"/m);n&&(t.name=n[1]);let s=U(o,"[[d1_databases]]","DB");s&&(t.database="d1",t.d1Id=q(s,"database_id"));let r=U(o,"[[hyperdrive]]","HYPERDRIVE");r&&(t.database="postgres",t.hyperId=q(r,"id"));let l=U(o,"[[r2_buckets]]","STORAGE_BUCKET");return l&&(t.r2Bucket=q(l,"bucket_name")),t}function oe(){let e=new commander.Command("deploy").description("Deploy Kyro CMS");return e.command("cloudflare").description("Deploy to Cloudflare Workers with Assets").option("-d, --database <type>","Database type (d1|postgres)").option("-u, --database-url <url>","PostgreSQL connection string").option("-n, --name <name>","Cloudflare project name").option("-b, --r2-bucket <name>","R2 storage bucket name").option("-e, --email <email>","Initial Super Admin email").option("-p, --password <password>","Initial Super Admin password").option("-y, --non-interactive","Skip all prompts and use defaults").option("-q, --quiet","Run without prompts or spinners").option("-j, --json","Emit a final JSON line with deploy results (for programmatic consumers)").action(async o=>{console.log(`
227
+ `;function we(e,o){let t=e.indexOf(o);if(t===-1)return "";let n=e.slice(t+o.length),s=n.search(/\n\s*(\[\[|\[)/);return n.slice(0,s===-1?void 0:s)}function q(e,o){let t=e.match(new RegExp(`^\\s*${o}\\s*=\\s*"([^"]*)"`,"m"));return t?t[1]:""}function U(e,o,t){let n=e,s=n.indexOf(o);for(;s!==-1;){let r=we(n,o);if(q(r,"binding")===t)return r;n=n.slice(s+o.length+r.length),s=n.indexOf(o);}return ""}function $e(e){let o=b__default.default.readFileSync(e,"utf8"),t={name:"",database:"",d1Id:"",hyperId:"",r2Bucket:""},n=o.match(/^name\s*=\s*"([^"]*)"/m);n&&(t.name=n[1]);let s=U(o,"[[d1_databases]]","DB");s&&(t.database="d1",t.d1Id=q(s,"database_id"));let r=U(o,"[[hyperdrive]]","HYPERDRIVE");r&&(t.database="postgres",t.hyperId=q(r,"id"));let l=U(o,"[[r2_buckets]]","STORAGE_BUCKET");return l&&(t.r2Bucket=q(l,"bucket_name")),t}function oe(){let e=new commander.Command("deploy").description("Deploy Kyro CMS");return e.command("cloudflare").description("Deploy to Cloudflare Workers with Assets").option("-d, --database <type>","Database type (d1|postgres)").option("-u, --database-url <url>","PostgreSQL connection string").option("-n, --name <name>","Cloudflare project name").option("-b, --r2-bucket <name>","R2 storage bucket name").option("-e, --email <email>","Initial Super Admin email").option("-p, --password <password>","Initial Super Admin password").option("-y, --non-interactive","Skip all prompts and use defaults").option("-q, --quiet","Run without prompts or spinners").option("-j, --json","Emit a final JSON line with deploy results (for programmatic consumers)").action(async o=>{console.log(`
228
228
  ${i__default.default.cyan.bold("\u2726 Kyro CMS")} ${i__default.default.dim("\u2014 Cloudflare Deployment")}
229
- `);let t=he(),n=be(),{database:s,databaseUrl:r,name:l,r2Bucket:d,email:p,password:m,nonInteractive:C,quiet:y,json:x}=o;y&&(C=true);let _=`kyro-postgres-hd-${t}`,v=A__default.default.join(process.cwd(),"wrangler.toml"),w=h__default.default.existsSync(v)?$e(v):null,f=!!(w&&w.name);if(r&&!s&&(s="postgres"),f)console.log(`
230
- ${i__default.default.cyan("\u267B")} Existing wrangler.toml found \u2014 redeploying "${w.name}"
231
- `);else if(!C&&process.stdout.isTTY){let a=[];s||a.push({type:"select",name:"database",message:"Select database infrastructure:",choices:[{title:"Cloudflare D1 (Native Serverless SQLite, auto-provisioned)",value:"d1"},{title:"PostgreSQL (External DB via Cloudflare Hyperdrive)",value:"postgres"}],initial:0}),s==="postgres"&&!r&&a.push({type:"text",name:"databaseUrl",message:"PostgreSQL Connection URL:"}),l||a.push({type:"text",name:"name",message:"Cloudflare Project Name:",initial:`kyro-app-${t}`}),d||a.push({type:"text",name:"r2Bucket",message:"Cloudflare R2 Bucket Name:",initial:`kyro-media-${t}`}),p||a.push({type:"text",name:"email",message:"Initial Super Admin Email:",initial:"admin@kyro-cms.com"}),m||a.push({type:"text",name:"password",message:"Initial Super Admin Password (leave blank to auto-generate):"});let c=await ye__default.default(a);c.database&&(s=c.database),c.databaseUrl&&(r=c.databaseUrl),c.name&&(l=c.name),c.r2Bucket&&(d=c.r2Bucket),c.email&&(p=c.email),c.password&&(m=c.password);}let re=!!p,ie=!!m;l=l||(f?w.name:`kyro-app-${t}`),d=d||(f?w.r2Bucket:"")||`kyro-media-${t}`,p=p||"admin@kyro-cms.com",m=m||n,s=s||(f?w.database:"d1")||"d1",console.log(i__default.default.bgGray.black.bold(`
232
- Deployment Plan `)),console.log(` ${i__default.default.dim("\u251C\u2500")} Hosting : ${i__default.default.cyan("Cloudflare Workers with Assets")}`),console.log(` ${i__default.default.dim("\u251C\u2500")} Database : ${i__default.default.cyan(s==="d1"?"Cloudflare D1 (Native)":"PostgreSQL (Hyperdrive)")}`),console.log(` ${i__default.default.dim("\u251C\u2500")} Project : ${i__default.default.cyan(l)}`),console.log(` ${i__default.default.dim("\u251C\u2500")} R2 Bucket : ${i__default.default.cyan(d)}`),console.log(` ${i__default.default.dim("\u2514\u2500")} Admin : ${i__default.default.cyan(p)}
233
- `);let ae=h__default.default.existsSync(A__default.default.join(process.cwd(),"pnpm-lock.yaml"))?"pnpm":"npm",$="npx wrangler";try{child_process.execSync(`${$} whoami`,{stdio:"ignore"}),console.log(` ${i__default.default.green("\u2714")} Cloudflare Wrangler authenticated`);}catch{console.log(` ${i__default.default.red("\u2716")} Cloudflare Wrangler authentication required.`),console.log(` Run ${i__default.default.bold(`${$} login`)} or set the ${i__default.default.bold("CLOUDFLARE_API_TOKEN")} env var.`),process.exit(1);}let D="",O="",k=y?{isSilent:true}:{};if(f)D=w.d1Id,O=w.hyperId;else if(s==="postgres"){r||(console.log(` ${i__default.default.red("\u2716")} PostgreSQL mode requires a database URL.`),process.exit(1));let a=T__default.default({text:"Checking existing Hyperdrive resources...",...k}).start();try{let c=child_process.execSync(`${$} hyperdrive list --json`,{stdio:"pipe"}).toString(),u=JSON.parse(c.slice(c.indexOf("["))).find(K=>K.name===_);u&&(O=u.id||u.uuid),a.succeed("Hyperdrive check complete");}catch{a.fail("Failed to list Hyperdrive resources");}if(!O){let c=T__default.default({text:"Creating Hyperdrive...",...k}).start();try{let g=child_process.execSync(`${$} hyperdrive create "${_}" --connection-string="${r}" --json`,{stdio:"pipe"}).toString(),u=JSON.parse(g.slice(g.indexOf("{")));O=u.id||u.uuid,c.succeed("Hyperdrive created");}catch{c.fail("Failed to create Hyperdrive");}}console.log(` ${i__default.default.green("\u2714")} Hyperdrive resource ready (${_})`);}else {let a=`${l}-d1`,c=T__default.default({text:"Creating D1 database...",...k}).start();try{let u=child_process.execSync(`${$} d1 create "${a}"`,{stdio:"pipe"}).toString().match(/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/i);u&&(D=u[1]),c.succeed("D1 database created");}catch{try{let u=child_process.execSync(`${$} d1 list --json`,{stdio:"pipe"}).toString(),R=JSON.parse(u).find(I=>I.name===a);R&&(D=R.id||R.uuid),c.succeed("Existing D1 database found");}catch{c.fail("Failed to create/find D1 database");}}D||(console.log(` ${i__default.default.red("\u2716")} Failed to create/find D1 database '${a}'. (D1 database limit may be reached).`),process.exit(1));}if(f){let a=h__default.default.readFileSync(v,"utf8"),c=false;a.includes('main = "admin/dist/server/index.mjs"')||(/^main\s*=.*$/m.test(a)?(a=a.replace(/^main\s*=.*$/m,'main = "admin/dist/server/index.mjs"'),c=true):(a=`main = "admin/dist/server/index.mjs"
234
- `+a,c=true)),a.includes("[alias]")||(a+=ee,c=true),c&&h__default.default.writeFileSync(v,a,"utf8"),h__default.default.existsSync(A__default.default.join(process.cwd(),"cf-noop.js"))||h__default.default.writeFileSync(A__default.default.join(process.cwd(),"cf-noop.js"),te,"utf8");}else {let a=T__default.default({text:"Creating R2 bucket...",...k}).start();try{child_process.execSync(`${$} r2 bucket create "${d}"`,{stdio:"ignore"}),a.succeed("R2 bucket created");}catch{a.fail("Failed to create R2 bucket");}try{child_process.execSync(`echo "y" | ${$} r2 bucket dev-url enable "${d}"`,{stdio:"ignore"});}catch{}let c=T__default.default({text:"Generating wrangler.toml...",...k}).start(),g=`name = "${l}"
229
+ `);let t=he(),n=be(),{quiet:s,json:r}=o,{database:l,databaseUrl:m,name:d,r2Bucket:u,email:y,password:p,nonInteractive:x}=o;s&&(x=true);let _=`kyro-postgres-hd-${t}`,v=A__default.default.join(process.cwd(),"wrangler.toml"),$=b__default.default.existsSync(v)?$e(v):null,h=!!($&&$.name);if(m&&!l&&(l="postgres"),h)console.log(`
230
+ ${i__default.default.cyan("\u267B")} Existing wrangler.toml found \u2014 redeploying "${$.name}"
231
+ `);else if(!x&&process.stdout.isTTY){let a=[];l||a.push({type:"select",name:"database",message:"Select database infrastructure:",choices:[{title:"Cloudflare D1 (Native Serverless SQLite, auto-provisioned)",value:"d1"},{title:"PostgreSQL (External DB via Cloudflare Hyperdrive)",value:"postgres"}],initial:0}),l==="postgres"&&!m&&a.push({type:"text",name:"databaseUrl",message:"PostgreSQL Connection URL:"}),d||a.push({type:"text",name:"name",message:"Cloudflare Project Name:",initial:`kyro-app-${t}`}),u||a.push({type:"text",name:"r2Bucket",message:"Cloudflare R2 Bucket Name:",initial:`kyro-media-${t}`}),y||a.push({type:"text",name:"email",message:"Initial Super Admin Email:",initial:"admin@kyro-cms.com"}),p||a.push({type:"text",name:"password",message:"Initial Super Admin Password (leave blank to auto-generate):"});let c=await ye__default.default(a);c.database&&(l=c.database),c.databaseUrl&&(m=c.databaseUrl),c.name&&(d=c.name),c.r2Bucket&&(u=c.r2Bucket),c.email&&(y=c.email),c.password&&(p=c.password);}let re=!!y,ie=!!p;d=d||(h?$.name:`kyro-app-${t}`),u=u||(h?$.r2Bucket:"")||`kyro-media-${t}`,y=y||"admin@kyro-cms.com",p=p||n,l=l||(h?$.database:"d1")||"d1",console.log(i__default.default.bgGray.black.bold(`
232
+ Deployment Plan `)),console.log(` ${i__default.default.dim("\u251C\u2500")} Hosting : ${i__default.default.cyan("Cloudflare Workers with Assets")}`),console.log(` ${i__default.default.dim("\u251C\u2500")} Database : ${i__default.default.cyan(l==="d1"?"Cloudflare D1 (Native)":"PostgreSQL (Hyperdrive)")}`),console.log(` ${i__default.default.dim("\u251C\u2500")} Project : ${i__default.default.cyan(d)}`),console.log(` ${i__default.default.dim("\u251C\u2500")} R2 Bucket : ${i__default.default.cyan(u)}`),console.log(` ${i__default.default.dim("\u2514\u2500")} Admin : ${i__default.default.cyan(y)}
233
+ `);let ae=b__default.default.existsSync(A__default.default.join(process.cwd(),"pnpm-lock.yaml"))?"pnpm":"npm",S="npx wrangler";try{child_process.execSync(`${S} whoami`,{stdio:"ignore"}),console.log(` ${i__default.default.green("\u2714")} Cloudflare Wrangler authenticated`);}catch{console.log(` ${i__default.default.red("\u2716")} Cloudflare Wrangler authentication required.`),console.log(` Run ${i__default.default.bold(`${S} login`)} or set the ${i__default.default.bold("CLOUDFLARE_API_TOKEN")} env var.`),process.exit(1);}let D="",O="",k=s?{isSilent:true}:{};if(h)D=$.d1Id,O=$.hyperId;else if(l==="postgres"){m||(console.log(` ${i__default.default.red("\u2716")} PostgreSQL mode requires a database URL.`),process.exit(1));let a=T__default.default({text:"Checking existing Hyperdrive resources...",...k}).start();try{let c=child_process.execSync(`${S} hyperdrive list --json`,{stdio:"pipe"}).toString(),g=JSON.parse(c.slice(c.indexOf("["))).find(K=>K.name===_);g&&(O=g.id||g.uuid),a.succeed("Hyperdrive check complete");}catch{a.fail("Failed to list Hyperdrive resources");}if(!O){let c=T__default.default({text:"Creating Hyperdrive...",...k}).start();try{let f=child_process.execSync(`${S} hyperdrive create "${_}" --connection-string="${m}" --json`,{stdio:"pipe"}).toString(),g=JSON.parse(f.slice(f.indexOf("{")));O=g.id||g.uuid,c.succeed("Hyperdrive created");}catch{c.fail("Failed to create Hyperdrive");}}console.log(` ${i__default.default.green("\u2714")} Hyperdrive resource ready (${_})`);}else {let a=`${d}-d1`,c=T__default.default({text:"Creating D1 database...",...k}).start();try{let g=child_process.execSync(`${S} d1 create "${a}"`,{stdio:"pipe"}).toString().match(/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/i);g&&(D=g[1]),c.succeed("D1 database created");}catch{try{let g=child_process.execSync(`${S} d1 list --json`,{stdio:"pipe"}).toString(),R=JSON.parse(g).find(I=>I.name===a);R&&(D=R.id||R.uuid),c.succeed("Existing D1 database found");}catch{c.fail("Failed to create/find D1 database");}}D||(console.log(` ${i__default.default.red("\u2716")} Failed to create/find D1 database '${a}'. (D1 database limit may be reached).`),process.exit(1));}if(h){let a=b__default.default.readFileSync(v,"utf8"),c=false;a.includes('main = "admin/dist/server/index.mjs"')||(/^main\s*=.*$/m.test(a)?(a=a.replace(/^main\s*=.*$/m,'main = "admin/dist/server/index.mjs"'),c=true):(a=`main = "admin/dist/server/index.mjs"
234
+ `+a,c=true)),a.includes("[alias]")||(a+=ee,c=true),c&&b__default.default.writeFileSync(v,a,"utf8"),b__default.default.existsSync(A__default.default.join(process.cwd(),"cf-noop.js"))||b__default.default.writeFileSync(A__default.default.join(process.cwd(),"cf-noop.js"),te,"utf8");}else {let a=T__default.default({text:"Creating R2 bucket...",...k}).start();try{child_process.execSync(`${S} r2 bucket create "${u}"`,{stdio:"ignore"}),a.succeed("R2 bucket created");}catch{a.fail("Failed to create R2 bucket");}try{child_process.execSync(`echo "y" | ${S} r2 bucket dev-url enable "${u}"`,{stdio:"ignore"});}catch{}let c=T__default.default({text:"Generating wrangler.toml...",...k}).start(),f=`name = "${d}"
235
235
  compatibility_date = "2026-07-31"
236
236
  compatibility_flags = ["nodejs_compat"]
237
237
 
238
238
  [assets]
239
239
  directory = "admin/dist/client"
240
240
  binding = "ASSETS"
241
- `;s==="postgres"?g+=`
241
+ `;l==="postgres"?f+=`
242
242
  [[hyperdrive]]
243
243
  binding = "HYPERDRIVE"
244
244
  id = "${O}"
245
- `:g+=`
245
+ `:f+=`
246
246
  [[d1_databases]]
247
247
  binding = "DB"
248
- database_name = "${l}-d1"
248
+ database_name = "${d}-d1"
249
249
  database_id = "${D}"
250
- `,g+=`
250
+ `,f+=`
251
251
  [[r2_buckets]]
252
252
  binding = "STORAGE_BUCKET"
253
- bucket_name = "${d}"
254
- `,g+=ee,h__default.default.writeFileSync(A__default.default.join(process.cwd(),"wrangler.toml"),g,"utf8"),h__default.default.writeFileSync(A__default.default.join(process.cwd(),"cf-noop.js"),te,"utf8"),c.succeed("wrangler.toml generated");}if(!f&&s==="postgres"){try{child_process.execSync(`DATABASE_URL="${r}" npx drizzle-kit push --force`,{stdio:"ignore"});}catch{}console.log(` ${i__default.default.green("\u2714")} PostgreSQL schema pushed`);}let W=T__default.default({text:"Building Astro project...",...k}).start(),H="";try{H=child_process.execSync(`${ae} run build:pages 2>&1`,{stdio:"pipe",maxBuffer:64*1024*1024}).toString();let a=h__default.default.readFileSync(v,"utf8");a.includes('main = "admin/dist/server/index.mjs"')||h__default.default.writeFileSync(v,`main = "admin/dist/server/index.mjs"
253
+ bucket_name = "${u}"
254
+ `,f+=ee,b__default.default.writeFileSync(A__default.default.join(process.cwd(),"wrangler.toml"),f,"utf8"),b__default.default.writeFileSync(A__default.default.join(process.cwd(),"cf-noop.js"),te,"utf8"),c.succeed("wrangler.toml generated");}if(!h&&l==="postgres"){try{child_process.execSync(`DATABASE_URL="${m}" npx drizzle-kit push --force`,{stdio:"ignore"});}catch{}console.log(` ${i__default.default.green("\u2714")} PostgreSQL schema pushed`);}let W=T__default.default({text:"Building Astro project...",...k}).start(),H="";try{H=child_process.execSync(`${ae} run build:pages 2>&1`,{stdio:"pipe",maxBuffer:64*1024*1024}).toString();let a=b__default.default.readFileSync(v,"utf8");a.includes('main = "admin/dist/server/index.mjs"')||b__default.default.writeFileSync(v,`main = "admin/dist/server/index.mjs"
255
255
  `+a,"utf8"),W.succeed("Build complete");}catch(a){let c=a?.stdout?.toString?.()||H||"";W.fail("Build failed"),c&&process.stdout.write(c),console.log(`
256
- ${i__default.default.red("\u2716")} Build failed. Inspect output above.`),process.exit(1);}let G=T__default.default({text:"Deploying to Cloudflare Workers...",...k}).start();h__default.default.existsSync(A__default.default.join(process.cwd(),".wrangler"))&&h__default.default.rmSync(A__default.default.join(process.cwd(),".wrangler"),{recursive:true,force:true});let E="";try{let a=child_process.execSync(`${$} deploy`,{stdio:"pipe",maxBuffer:67108864}).toString();process.stdout.write(a);let c=a.match(/https:\/\/[a-zA-Z0-9._-]+\.workers\.dev/);c&&(E=c[0]),G.succeed("Deployment successful"),console.log(`
256
+ ${i__default.default.red("\u2716")} Build failed. Inspect output above.`),process.exit(1);}let G=T__default.default({text:"Deploying to Cloudflare Workers...",...k}).start();b__default.default.existsSync(A__default.default.join(process.cwd(),".wrangler"))&&b__default.default.rmSync(A__default.default.join(process.cwd(),".wrangler"),{recursive:true,force:true});let E="";try{let a=child_process.execSync(`${S} deploy`,{stdio:"pipe",maxBuffer:67108864}).toString();process.stdout.write(a);let c=a.match(/https:\/\/[a-zA-Z0-9._-]+\.workers\.dev/);c&&(E=c[0]),G.succeed("Deployment successful"),console.log(`
257
257
  ${i__default.default.green.bold("\u{1F389} Deployment Successful!")}
258
- `);let g=!f||re||ie,u=!1;if(g){let R=T__default.default({text:"Storing admin credentials as worker secrets...",...k}).start(),I=!0,Y=(ce,le)=>{try{child_process.execSync(`${$} secret put ${ce}`,{input:le,stdio:["pipe","ignore","pipe"]});}catch{I=!1;}};Y("KYRO_ADMIN_EMAIL",p),Y("KYRO_ADMIN_PASSWORD",m),I?(u=!0,R.succeed("Admin credentials stored as worker secrets")):R.warn("Could not store admin credentials \u2014 set KYRO_ADMIN_EMAIL / KYRO_ADMIN_PASSWORD manually");}let K=!f||u?m:null;f&&console.log(u?` ${i__default.default.dim("Redeployed")} ${i__default.default.cyan(l)} \u2014 admin credentials updated.`:` ${i__default.default.dim("Redeployed")} ${i__default.default.cyan(l)} \u2014 existing resources and admin credentials are unchanged.`),K&&(console.log(` ${i__default.default.bold("Super Admin Credentials")}`),console.log(` ${i__default.default.dim("\u251C\u2500")} ${i__default.default.bold("Email :")} ${i__default.default.cyan(p)}`),console.log(` ${i__default.default.dim("\u2514\u2500")} ${i__default.default.bold("Password:")} ${i__default.default.yellow.bold(m)}`)),E&&console.log(` ${i__default.default.dim("\u2514\u2500")} ${i__default.default.bold("Live URL:")} ${i__default.default.cyan(E)}`),f||console.log(`
258
+ `);let f=!h||re||ie,g=!1;if(f){let R=T__default.default({text:"Storing admin credentials as worker secrets...",...k}).start(),I=!0,Y=(ce,le)=>{try{child_process.execSync(`${S} secret put ${ce}`,{input:le,stdio:["pipe","ignore","pipe"]});}catch{I=!1;}};Y("KYRO_ADMIN_EMAIL",y),Y("KYRO_ADMIN_PASSWORD",p),I?(g=!0,R.succeed("Admin credentials stored as worker secrets")):R.warn("Could not store admin credentials \u2014 set KYRO_ADMIN_EMAIL / KYRO_ADMIN_PASSWORD manually");}let K=!h||g?p:null;h&&console.log(g?` ${i__default.default.dim("Redeployed")} ${i__default.default.cyan(d)} \u2014 admin credentials updated.`:` ${i__default.default.dim("Redeployed")} ${i__default.default.cyan(d)} \u2014 existing resources and admin credentials are unchanged.`),K&&(console.log(` ${i__default.default.bold("Super Admin Credentials")}`),console.log(` ${i__default.default.dim("\u251C\u2500")} ${i__default.default.bold("Email :")} ${i__default.default.cyan(y)}`),console.log(` ${i__default.default.dim("\u2514\u2500")} ${i__default.default.bold("Password:")} ${i__default.default.yellow.bold(p)}`)),E&&console.log(` ${i__default.default.dim("\u2514\u2500")} ${i__default.default.bold("Live URL:")} ${i__default.default.cyan(E)}`),h||console.log(`
259
259
  ${i__default.default.dim("\u26A0\uFE0F Save these credentials. Password won't be shown again.")}
260
- `),x&&process.stdout.write(JSON.stringify({ok:!0,liveUrl:E,adminEmail:p,adminPassword:K,redeploy:f,credentialsUpdated:u})+`
261
- `);}catch(a){let c=a?.stdout?.toString?.()||"",g=a?.stderr?.toString?.()||"";G.fail("Deployment failed"),c&&process.stdout.write(c),g&&process.stdout.write(g),console.log(`
260
+ `),r&&process.stdout.write(JSON.stringify({ok:!0,liveUrl:E,adminEmail:y,adminPassword:K,redeploy:h,credentialsUpdated:g})+`
261
+ `);}catch(a){let c=a?.stdout?.toString?.()||"",f=a?.stderr?.toString?.()||"";G.fail("Deployment failed"),c&&process.stdout.write(c),f&&process.stdout.write(f),console.log(`
262
262
  ${i__default.default.red.bold("\u2716 Deployment Failed!")}`),console.log(` ${i__default.default.dim("See the Wrangler error above.")}
263
- `),x&&process.stdout.write(JSON.stringify({ok:false,error:"Deployment failed"})+`
264
- `),process.exit(1);}}),e}var ke=url.fileURLToPath(chunkJHFD3IAU_cjs.b),Ae=A.dirname(ke),se="0.1.0";try{se=JSON.parse(h.readFileSync(A.join(Ae,"../../package.json"),"utf-8")).version;}catch{}var S=new commander.Command;S.name("kyro").description("Kyro CMS - Astro-native headless CMS").version(se);S.command("dev").description("Start Kyro CMS development server").option("-p, --port <port>","Port to run on","4321").option("-h, --host <host>","Host to bind to","localhost").action(async e=>{let{exec:o}=await import('child_process'),t=o(`astro dev --port ${e.port} --host ${e.host}`,{env:{...process.env,NODE_NO_WARNINGS:"1"}});t.stdout?.on("data",n=>process.stdout.write(n)),t.stderr?.on("data",n=>process.stderr.write(n)),process.on("SIGINT",()=>{t.kill("SIGINT"),process.exit(0);}),process.on("SIGTERM",()=>{t.kill("SIGTERM"),process.exit(0);});});S.command("start").description("Start Kyro CMS in production mode").option("-p, --port <port>","Port to run on",process.env.PORT||"4321").option("-h, --host <host>","Host to bind to",process.env.HOST||"0.0.0.0").action(async e=>{let{spawn:o}=await import('child_process'),{existsSync:t}=await import('fs'),n=A.join(process.cwd(),"admin"),r=[A.join(n,"dist","server","index.mjs"),A.join(n,"dist","server","entry.mjs"),A.join(process.cwd(),"dist","server","index.mjs"),A.join(process.cwd(),"dist","server","entry.mjs")].find(d=>t(d));console.log(`\u{1F680} Starting Kyro CMS on ${e.host}:${e.port}`);let l;r?(console.log(`\u2713 Serving via standalone entrypoint: ${r}`),l=o("node",[r],{env:{...process.env,HOST:e.host,PORT:e.port,NODE_ENV:"production"},stdio:"inherit"})):(console.warn(`\u26A0\uFE0F Standalone entrypoint not found, falling back to astro preview in ${n}`),l=o("node",["./node_modules/.bin/astro","preview","--port",e.port,"--host",e.host],{cwd:t(n)?n:process.cwd(),env:{...process.env,NODE_ENV:"production"},stdio:"inherit"})),l.on("exit",d=>process.exit(d??0)),process.on("SIGTERM",()=>l.kill("SIGTERM")),process.on("SIGINT",()=>l.kill("SIGINT"));});S.addCommand(X());S.addCommand(oe());var M=S.command("db").description("Database management commands");M.command("generate").description("Generate migrations from schema").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit generate",(o,t,n)=>{o&&(console.error("\u274C Generation failed:",o.message),process.exit(1));});});M.command("migrate").description("Run database migrations").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit migrate",(o,t,n)=>{o&&(console.error("\u274C Migration failed:",o.message),process.exit(1));});});M.command("push").description("Push schema to database (development)").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit push",(o,t,n)=>{o&&(console.error("\u274C Push failed:",o.message),process.exit(1));});});M.command("seed").description("Seed database with initial data").action(async()=>{let{exec:e}=await import('child_process');e("npx tsx src/database/drizzle/seed.ts",(o,t,n)=>{o&&(console.error("\u274C Seeding failed:",o.message),process.exit(1));});});M.command("studio").description("Open Drizzle Studio").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit studio",(o,t,n)=>{o&&(console.error("\u274C Studio failed:",o.message),process.exit(1));});});var Te=S.command("auth").description("Authentication management commands");Te.command("bootstrap").description("Create initial admin user").option("-e, --email <email>","Admin email",process.env.KYRO_ADMIN_EMAIL).option("-p, --password <password>","Admin password",process.env.KYRO_ADMIN_PASSWORD).option("-r, --role <role>","Admin role",process.env.KYRO_ADMIN_ROLE||"admin").action(async e=>{(!e.email||!e.password)&&(console.error("\u274C Email and password are required. Set KYRO_ADMIN_EMAIL and KYRO_ADMIN_PASSWORD env vars or use -e and -p options."),process.exit(1));try{let{bootstrapAdmin:o}=await import('../bootstrap-JYAUQ52D.cjs'),t=process.env.DATABASE_URL||"",n=t.toLowerCase().startsWith("postgres://")||t.toLowerCase().startsWith("postgresql://"),s=t.toLowerCase().startsWith("mongodb://")||t.toLowerCase().startsWith("mongodb+srv://"),r=!t||t.includes(".db")||t.includes("sqlite")||t.includes("file:"),l;if(n){let{PostgresAuthAdapter:p}=await import('../postgres-auth-adapter-HMXFUM5W.cjs'),{drizzle:m}=await import('drizzle-orm/postgres-js'),{default:C}=await import('postgres'),y=C(t,{max:1,onnotice:()=>{}}),x=m(y);l=new p({db:x});}else if(s){let{MongoDBAuthAdapter:p}=await import('../mongo-auth-adapter-22MV3TI3.cjs'),m=await import('mongodb'),C=m.MongoClient??m.default?.MongoClient,y=new C(t,{maxPoolSize:1,minPoolSize:0,serverSelectionTimeoutMS:5e3});await y.connect();let x=y.db();l=new p({db:x,client:y});}else {let{SQLiteAuthAdapter:p}=await import('../sqlite-adapter-HL53RLSN.cjs'),m=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";l=new p({path:m});}l.connect&&await l.connect();let d=await o({authAdapter:l,adminEmail:e.email,adminPassword:e.password,adminRole:e.role});l.disconnect&&await l.disconnect(),d.success||(console.error("\u274C Failed to create admin:",d.error),process.exit(1));}catch(o){console.error("\u274C Bootstrap failed:",o),process.exit(1);}});S.command("health").description("Check system health").action(async()=>{let e=process.env.DATABASE_URL||"",o=e.toLowerCase().startsWith("postgres://")||e.toLowerCase().startsWith("postgresql://"),t=e.toLowerCase().startsWith("mongodb://")||e.toLowerCase().startsWith("mongodb+srv://"),n=!e||e.includes(".db")||e.includes("sqlite")||e.includes("file:");if(o)try{let{default:s}=await import('postgres'),r=s(e,{max:1,onnotice:()=>{}});await r.unsafe("SELECT 1"),await r.end();}catch{}else if(t){let s;try{let r=await import('mongodb'),l=r.MongoClient??r.default?.MongoClient;s=new l(e,{maxPoolSize:1,minPoolSize:0,serverSelectionTimeoutMS:5e3}),await s.connect(),await s.db().admin().ping();}catch{}finally{if(s)try{await s.close();}catch{}}}else if(n)try{let s=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db",{existsSync:r}=await import('fs');r(s);}catch{}});S.parse();process.argv.slice(2).length||S.outputHelp();
263
+ `),r&&process.stdout.write(JSON.stringify({ok:false,error:"Deployment failed"})+`
264
+ `),process.exit(1);}}),e}var ke=url.fileURLToPath(chunkJHFD3IAU_cjs.b),Ae=A.dirname(ke),se="0.1.0";try{se=JSON.parse(b.readFileSync(A.join(Ae,"../../package.json"),"utf-8")).version;}catch{}var C=new commander.Command;C.name("kyro").description("Kyro CMS - Astro-native headless CMS").version(se);C.command("dev").description("Start Kyro CMS development server").option("-p, --port <port>","Port to run on","4321").option("-h, --host <host>","Host to bind to","localhost").action(async e=>{let{exec:o}=await import('child_process'),t=o(`astro dev --port ${e.port} --host ${e.host}`,{env:{...process.env,NODE_NO_WARNINGS:"1"}});t.stdout?.on("data",n=>process.stdout.write(n)),t.stderr?.on("data",n=>process.stderr.write(n)),process.on("SIGINT",()=>{t.kill("SIGINT"),process.exit(0);}),process.on("SIGTERM",()=>{t.kill("SIGTERM"),process.exit(0);});});C.command("start").description("Start Kyro CMS in production mode").option("-p, --port <port>","Port to run on",process.env.PORT||"4321").option("-h, --host <host>","Host to bind to",process.env.HOST||"0.0.0.0").action(async e=>{let{spawn:o}=await import('child_process'),{existsSync:t}=await import('fs'),n=A.join(process.cwd(),"admin"),r=[A.join(n,"dist","server","index.mjs"),A.join(n,"dist","server","entry.mjs"),A.join(process.cwd(),"dist","server","index.mjs"),A.join(process.cwd(),"dist","server","entry.mjs")].find(m=>t(m));console.log(`\u{1F680} Starting Kyro CMS on ${e.host}:${e.port}`);let l;r?(console.log(`\u2713 Serving via standalone entrypoint: ${r}`),l=o("node",[r],{env:{...process.env,HOST:e.host,PORT:e.port,NODE_ENV:"production"},stdio:"inherit"})):(console.warn(`\u26A0\uFE0F Standalone entrypoint not found, falling back to astro preview in ${n}`),l=o("node",["./node_modules/.bin/astro","preview","--port",e.port,"--host",e.host],{cwd:t(n)?n:process.cwd(),env:{...process.env,NODE_ENV:"production"},stdio:"inherit"})),l.on("exit",m=>process.exit(m??0)),process.on("SIGTERM",()=>l.kill("SIGTERM")),process.on("SIGINT",()=>l.kill("SIGINT"));});C.addCommand(X());C.addCommand(oe());var M=C.command("db").description("Database management commands");M.command("generate").description("Generate migrations from schema").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit generate",(o,t,n)=>{o&&(console.error("\u274C Generation failed:",o.message),process.exit(1));});});M.command("migrate").description("Run database migrations").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit migrate",(o,t,n)=>{o&&(console.error("\u274C Migration failed:",o.message),process.exit(1));});});M.command("push").description("Push schema to database (development)").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit push",(o,t,n)=>{o&&(console.error("\u274C Push failed:",o.message),process.exit(1));});});M.command("seed").description("Seed database with initial data").action(async()=>{let{exec:e}=await import('child_process');e("npx tsx src/database/drizzle/seed.ts",(o,t,n)=>{o&&(console.error("\u274C Seeding failed:",o.message),process.exit(1));});});M.command("studio").description("Open Drizzle Studio").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit studio",(o,t,n)=>{o&&(console.error("\u274C Studio failed:",o.message),process.exit(1));});});var Te=C.command("auth").description("Authentication management commands");Te.command("bootstrap").description("Create initial admin user").option("-e, --email <email>","Admin email",process.env.KYRO_ADMIN_EMAIL).option("-p, --password <password>","Admin password",process.env.KYRO_ADMIN_PASSWORD).option("-r, --role <role>","Admin role",process.env.KYRO_ADMIN_ROLE||"admin").action(async e=>{(!e.email||!e.password)&&(console.error("\u274C Email and password are required. Set KYRO_ADMIN_EMAIL and KYRO_ADMIN_PASSWORD env vars or use -e and -p options."),process.exit(1));try{let{bootstrapAdmin:o}=await import('../bootstrap-JYAUQ52D.cjs'),t=process.env.DATABASE_URL||"",n=t.toLowerCase().startsWith("postgres://")||t.toLowerCase().startsWith("postgresql://"),s=t.toLowerCase().startsWith("mongodb://")||t.toLowerCase().startsWith("mongodb+srv://"),r=!t||t.includes(".db")||t.includes("sqlite")||t.includes("file:"),l;if(n){let{PostgresAuthAdapter:d}=await import('../postgres-auth-adapter-HMXFUM5W.cjs'),{drizzle:u}=await import('drizzle-orm/postgres-js'),{default:y}=await import('postgres'),p=y(t,{max:1,onnotice:()=>{}}),x=u(p);l=new d({db:x});}else if(s){let{MongoDBAuthAdapter:d}=await import('../mongo-auth-adapter-22MV3TI3.cjs'),u=await import('mongodb'),y=u.MongoClient??u.default?.MongoClient,p=new y(t,{maxPoolSize:1,minPoolSize:0,serverSelectionTimeoutMS:5e3});await p.connect();let x=p.db();l=new d({db:x,client:p});}else {let{SQLiteAuthAdapter:d}=await import('../sqlite-adapter-HL53RLSN.cjs'),u=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";l=new d({path:u});}l.connect&&await l.connect();let m=await o({authAdapter:l,adminEmail:e.email,adminPassword:e.password,adminRole:e.role});l.disconnect&&await l.disconnect(),m.success||(console.error("\u274C Failed to create admin:",m.error),process.exit(1));}catch(o){console.error("\u274C Bootstrap failed:",o),process.exit(1);}});C.command("health").description("Check system health").action(async()=>{let e=process.env.DATABASE_URL||"",o=e.toLowerCase().startsWith("postgres://")||e.toLowerCase().startsWith("postgresql://"),t=e.toLowerCase().startsWith("mongodb://")||e.toLowerCase().startsWith("mongodb+srv://"),n=!e||e.includes(".db")||e.includes("sqlite")||e.includes("file:");if(o)try{let{default:s}=await import('postgres'),r=s(e,{max:1,onnotice:()=>{}});await r.unsafe("SELECT 1"),await r.end();}catch{}else if(t){let s;try{let r=await import('mongodb'),l=r.MongoClient??r.default?.MongoClient;s=new l(e,{maxPoolSize:1,minPoolSize:0,serverSelectionTimeoutMS:5e3}),await s.connect(),await s.db().admin().ping();}catch{}finally{if(s)try{await s.close();}catch{}}}else if(n)try{let s=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db",{existsSync:r}=await import('fs');r(s);}catch{}});C.parse();process.argv.slice(2).length||C.outputHelp();
package/dist/cli/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import'../chunk-RLW6AQF2.js';import {Command}from'commander';import h,{readFileSync,existsSync,mkdirSync,writeFileSync}from'fs';import A,{dirname,join,resolve}from'path';import {fileURLToPath}from'url';import {glob}from'glob';import {execSync}from'child_process';import he from'prompts';import te from'crypto';import i from'chalk';import T from'ora';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
+ import'../chunk-RLW6AQF2.js';import {Command}from'commander';import b,{readFileSync,existsSync,mkdirSync,writeFileSync}from'fs';import A,{dirname,join,resolve}from'path';import {fileURLToPath}from'url';import {glob}from'glob';import {execSync}from'child_process';import he from'prompts';import te from'crypto';import i from'chalk';import T from'ora';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
3
3
  function N(e){switch(e.type){case "text":case "email":case "password":case "textarea":case "color":case "code":case "markdown":case "date":case "richtext":case "json":return e.hasMany?"string[]":"string";case "number":return e.hasMany?"number[]":"number";case "checkbox":return "boolean";case "select":case "radio":if(e.options){let t=e.options.map(n=>`'${n.value}'`).join(" | ");return e.hasMany?`(${t})[]`:t}return e.hasMany?"string[]":"string";case "relationship":if(Array.isArray(e.relationTo)){if(e.relationTo.includes("*"))return e.hasMany?"any[]":"any";let t=e.relationTo.map(n=>`${P(n)} | string`).join(" | ");return e.hasMany?`(${t})[]`:`(${t})`}let o=e.relationTo||"unknown";return o==="*"?e.hasMany?"any[]":"any":e.hasMany?`(${P(o)} | string)[]`:`${P(o)} | string`;case "upload":return e.hasMany?"(Media | string)[]":"Media | string";case "array":return e.fields&&e.fields.length>0?`Array<{
4
4
  ${e.fields.filter(n=>n.name).map(n=>{let s=N(n);return ` ${n.name}${n.required?"":"?"}: ${s};`}).join(`
5
5
  `)}
@@ -209,7 +209,7 @@ ${e.map(t=>{let n=P(t.slug);return ` ${F(t.slug)}: {
209
209
  `)}
210
210
  };
211
211
  }
212
- `,o}function Z(){return new Command("generate").description("Generate TypeScript types from collection configs").option("-c, --config <path>","Path to config file or directory","./src/kyro").option("-o, --output <path>","Output file path","./src/types/kyro.d.ts").option("-w, --watch","Watch for changes and regenerate").option("--url <url>","URL of a running Kyro CMS instance (enables remote mode)").option("--api-key <key>","API key for authentication (required with --url)").action(async o=>{if(o.url){o.url||(console.error("\u274C --url is required when using --api"),process.exit(1)),o.apiKey||(console.error("\u274C --api-key is required when using --api"),process.exit(1));let s=resolve(o.output);try{let r=await ge(o.url,o.apiKey),l=fe(r),d=join(s,"..");existsSync(d)||mkdirSync(d,{recursive:!0}),writeFileSync(s,l);}catch(r){console.error("\u274C Error:",r.message),process.exit(1);}return}let t=resolve(o.config),n=resolve(o.output);try{let s=await glob(`${t}/**/*.{ts,js}`);s.length===0&&(console.error("\u274C No config files found at:",t),process.exit(1));let r=[];for(let p of s)try{let m=await import(p),C=Object.values(m).filter(y=>y&&y.slug&&y.fields);r.push(...C);}catch{console.warn(`\u26A0\uFE0F Could not parse: ${p}`);}r.length===0&&(console.error("\u274C No valid collection configs found"),process.exit(1));let l=V(r),d=join(n,"..");if(existsSync(d)||mkdirSync(d,{recursive:!0}),writeFileSync(n,l),o.watch){let{watch:p}=await import('fs');p(t,{recursive:!0},async(m,C)=>{let y=[];for(let _ of s)try{let v=await import(_+`?t=${Date.now()}`),w=Object.values(v).filter(f=>f&&f.slug&&f.fields);y.push(...w);}catch{}let x=V(y);writeFileSync(n,x);});}}catch(s){console.error("\u274C Error:",s.message),process.exit(1);}})}function be(e=3){return te.randomBytes(e).toString("hex")}function we(){return te.randomBytes(12).toString("base64").replace(/[^a-zA-Z0-9]/g,"").slice(0,16)}var X=`
212
+ `,o}function Z(){return new Command("generate").description("Generate TypeScript types from collection configs").option("-c, --config <path>","Path to config file or directory","./src/kyro").option("-o, --output <path>","Output file path","./src/types/kyro.d.ts").option("-w, --watch","Watch for changes and regenerate").option("--url <url>","URL of a running Kyro CMS instance (enables remote mode)").option("--api-key <key>","API key for authentication (required with --url)").action(async o=>{if(o.url){o.url||(console.error("\u274C --url is required when using --api"),process.exit(1)),o.apiKey||(console.error("\u274C --api-key is required when using --api"),process.exit(1));let s=resolve(o.output);try{let r=await ge(o.url,o.apiKey),l=fe(r),m=join(s,"..");existsSync(m)||mkdirSync(m,{recursive:!0}),writeFileSync(s,l);}catch(r){console.error("\u274C Error:",r.message),process.exit(1);}return}let t=resolve(o.config),n=resolve(o.output);try{let s=await glob(`${t}/**/*.{ts,js}`);s.length===0&&(console.error("\u274C No config files found at:",t),process.exit(1));let r=[];for(let d of s)try{let u=await import(d),y=Object.values(u).filter(p=>p&&p.slug&&p.fields);r.push(...y);}catch{console.warn(`\u26A0\uFE0F Could not parse: ${d}`);}r.length===0&&(console.error("\u274C No valid collection configs found"),process.exit(1));let l=V(r),m=join(n,"..");if(existsSync(m)||mkdirSync(m,{recursive:!0}),writeFileSync(n,l),o.watch){let{watch:d}=await import('fs');d(t,{recursive:!0},async(u,y)=>{let p=[];for(let _ of s)try{let v=await import(_+`?t=${Date.now()}`),$=Object.values(v).filter(h=>h&&h.slug&&h.fields);p.push(...$);}catch{}let x=V(p);writeFileSync(n,x);});}}catch(s){console.error("\u274C Error:",s.message),process.exit(1);}})}function be(e=3){return te.randomBytes(e).toString("hex")}function we(){return te.randomBytes(12).toString("base64").replace(/[^a-zA-Z0-9]/g,"").slice(0,16)}var X=`
213
213
  [alias]
214
214
  "better-sqlite3" = "./cf-noop.js"
215
215
  "./redis-adapter.js" = "./cf-noop.js"
@@ -225,41 +225,41 @@ ${e.map(t=>{let n=P(t.slug);return ` ${F(t.slug)}: {
225
225
  "basic-ftp" = "./cf-noop.js"
226
226
  `,ee=`// No-op stub for Node.js-only modules that cannot run in Cloudflare Workers.
227
227
  export default {};
228
- `;function $e(e,o){let t=e.indexOf(o);if(t===-1)return "";let n=e.slice(t+o.length),s=n.search(/\n\s*(\[\[|\[)/);return n.slice(0,s===-1?void 0:s)}function B(e,o){let t=e.match(new RegExp(`^\\s*${o}\\s*=\\s*"([^"]*)"`,"m"));return t?t[1]:""}function U(e,o,t){let n=e,s=n.indexOf(o);for(;s!==-1;){let r=$e(n,o);if(B(r,"binding")===t)return r;n=n.slice(s+o.length+r.length),s=n.indexOf(o);}return ""}function Se(e){let o=h.readFileSync(e,"utf8"),t={name:"",database:"",d1Id:"",hyperId:"",r2Bucket:""},n=o.match(/^name\s*=\s*"([^"]*)"/m);n&&(t.name=n[1]);let s=U(o,"[[d1_databases]]","DB");s&&(t.database="d1",t.d1Id=B(s,"database_id"));let r=U(o,"[[hyperdrive]]","HYPERDRIVE");r&&(t.database="postgres",t.hyperId=B(r,"id"));let l=U(o,"[[r2_buckets]]","STORAGE_BUCKET");return l&&(t.r2Bucket=B(l,"bucket_name")),t}function ne(){let e=new Command("deploy").description("Deploy Kyro CMS");return e.command("cloudflare").description("Deploy to Cloudflare Workers with Assets").option("-d, --database <type>","Database type (d1|postgres)").option("-u, --database-url <url>","PostgreSQL connection string").option("-n, --name <name>","Cloudflare project name").option("-b, --r2-bucket <name>","R2 storage bucket name").option("-e, --email <email>","Initial Super Admin email").option("-p, --password <password>","Initial Super Admin password").option("-y, --non-interactive","Skip all prompts and use defaults").option("-q, --quiet","Run without prompts or spinners").option("-j, --json","Emit a final JSON line with deploy results (for programmatic consumers)").action(async o=>{console.log(`
228
+ `;function $e(e,o){let t=e.indexOf(o);if(t===-1)return "";let n=e.slice(t+o.length),s=n.search(/\n\s*(\[\[|\[)/);return n.slice(0,s===-1?void 0:s)}function B(e,o){let t=e.match(new RegExp(`^\\s*${o}\\s*=\\s*"([^"]*)"`,"m"));return t?t[1]:""}function U(e,o,t){let n=e,s=n.indexOf(o);for(;s!==-1;){let r=$e(n,o);if(B(r,"binding")===t)return r;n=n.slice(s+o.length+r.length),s=n.indexOf(o);}return ""}function Se(e){let o=b.readFileSync(e,"utf8"),t={name:"",database:"",d1Id:"",hyperId:"",r2Bucket:""},n=o.match(/^name\s*=\s*"([^"]*)"/m);n&&(t.name=n[1]);let s=U(o,"[[d1_databases]]","DB");s&&(t.database="d1",t.d1Id=B(s,"database_id"));let r=U(o,"[[hyperdrive]]","HYPERDRIVE");r&&(t.database="postgres",t.hyperId=B(r,"id"));let l=U(o,"[[r2_buckets]]","STORAGE_BUCKET");return l&&(t.r2Bucket=B(l,"bucket_name")),t}function ne(){let e=new Command("deploy").description("Deploy Kyro CMS");return e.command("cloudflare").description("Deploy to Cloudflare Workers with Assets").option("-d, --database <type>","Database type (d1|postgres)").option("-u, --database-url <url>","PostgreSQL connection string").option("-n, --name <name>","Cloudflare project name").option("-b, --r2-bucket <name>","R2 storage bucket name").option("-e, --email <email>","Initial Super Admin email").option("-p, --password <password>","Initial Super Admin password").option("-y, --non-interactive","Skip all prompts and use defaults").option("-q, --quiet","Run without prompts or spinners").option("-j, --json","Emit a final JSON line with deploy results (for programmatic consumers)").action(async o=>{console.log(`
229
229
  ${i.cyan.bold("\u2726 Kyro CMS")} ${i.dim("\u2014 Cloudflare Deployment")}
230
- `);let t=be(),n=we(),{database:s,databaseUrl:r,name:l,r2Bucket:d,email:p,password:m,nonInteractive:C,quiet:y,json:x}=o;y&&(C=true);let _=`kyro-postgres-hd-${t}`,v=A.join(process.cwd(),"wrangler.toml"),w=h.existsSync(v)?Se(v):null,f=!!(w&&w.name);if(r&&!s&&(s="postgres"),f)console.log(`
231
- ${i.cyan("\u267B")} Existing wrangler.toml found \u2014 redeploying "${w.name}"
232
- `);else if(!C&&process.stdout.isTTY){let a=[];s||a.push({type:"select",name:"database",message:"Select database infrastructure:",choices:[{title:"Cloudflare D1 (Native Serverless SQLite, auto-provisioned)",value:"d1"},{title:"PostgreSQL (External DB via Cloudflare Hyperdrive)",value:"postgres"}],initial:0}),s==="postgres"&&!r&&a.push({type:"text",name:"databaseUrl",message:"PostgreSQL Connection URL:"}),l||a.push({type:"text",name:"name",message:"Cloudflare Project Name:",initial:`kyro-app-${t}`}),d||a.push({type:"text",name:"r2Bucket",message:"Cloudflare R2 Bucket Name:",initial:`kyro-media-${t}`}),p||a.push({type:"text",name:"email",message:"Initial Super Admin Email:",initial:"admin@kyro-cms.com"}),m||a.push({type:"text",name:"password",message:"Initial Super Admin Password (leave blank to auto-generate):"});let c=await he(a);c.database&&(s=c.database),c.databaseUrl&&(r=c.databaseUrl),c.name&&(l=c.name),c.r2Bucket&&(d=c.r2Bucket),c.email&&(p=c.email),c.password&&(m=c.password);}let se=!!p,re=!!m;l=l||(f?w.name:`kyro-app-${t}`),d=d||(f?w.r2Bucket:"")||`kyro-media-${t}`,p=p||"admin@kyro-cms.com",m=m||n,s=s||(f?w.database:"d1")||"d1",console.log(i.bgGray.black.bold(`
233
- Deployment Plan `)),console.log(` ${i.dim("\u251C\u2500")} Hosting : ${i.cyan("Cloudflare Workers with Assets")}`),console.log(` ${i.dim("\u251C\u2500")} Database : ${i.cyan(s==="d1"?"Cloudflare D1 (Native)":"PostgreSQL (Hyperdrive)")}`),console.log(` ${i.dim("\u251C\u2500")} Project : ${i.cyan(l)}`),console.log(` ${i.dim("\u251C\u2500")} R2 Bucket : ${i.cyan(d)}`),console.log(` ${i.dim("\u2514\u2500")} Admin : ${i.cyan(p)}
234
- `);let ie=h.existsSync(A.join(process.cwd(),"pnpm-lock.yaml"))?"pnpm":"npm",$="npx wrangler";try{execSync(`${$} whoami`,{stdio:"ignore"}),console.log(` ${i.green("\u2714")} Cloudflare Wrangler authenticated`);}catch{console.log(` ${i.red("\u2716")} Cloudflare Wrangler authentication required.`),console.log(` Run ${i.bold(`${$} login`)} or set the ${i.bold("CLOUDFLARE_API_TOKEN")} env var.`),process.exit(1);}let D="",O="",k=y?{isSilent:true}:{};if(f)D=w.d1Id,O=w.hyperId;else if(s==="postgres"){r||(console.log(` ${i.red("\u2716")} PostgreSQL mode requires a database URL.`),process.exit(1));let a=T({text:"Checking existing Hyperdrive resources...",...k}).start();try{let c=execSync(`${$} hyperdrive list --json`,{stdio:"pipe"}).toString(),u=JSON.parse(c.slice(c.indexOf("["))).find(K=>K.name===_);u&&(O=u.id||u.uuid),a.succeed("Hyperdrive check complete");}catch{a.fail("Failed to list Hyperdrive resources");}if(!O){let c=T({text:"Creating Hyperdrive...",...k}).start();try{let g=execSync(`${$} hyperdrive create "${_}" --connection-string="${r}" --json`,{stdio:"pipe"}).toString(),u=JSON.parse(g.slice(g.indexOf("{")));O=u.id||u.uuid,c.succeed("Hyperdrive created");}catch{c.fail("Failed to create Hyperdrive");}}console.log(` ${i.green("\u2714")} Hyperdrive resource ready (${_})`);}else {let a=`${l}-d1`,c=T({text:"Creating D1 database...",...k}).start();try{let u=execSync(`${$} d1 create "${a}"`,{stdio:"pipe"}).toString().match(/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/i);u&&(D=u[1]),c.succeed("D1 database created");}catch{try{let u=execSync(`${$} d1 list --json`,{stdio:"pipe"}).toString(),R=JSON.parse(u).find(I=>I.name===a);R&&(D=R.id||R.uuid),c.succeed("Existing D1 database found");}catch{c.fail("Failed to create/find D1 database");}}D||(console.log(` ${i.red("\u2716")} Failed to create/find D1 database '${a}'. (D1 database limit may be reached).`),process.exit(1));}if(f){let a=h.readFileSync(v,"utf8"),c=false;a.includes('main = "admin/dist/server/index.mjs"')||(/^main\s*=.*$/m.test(a)?(a=a.replace(/^main\s*=.*$/m,'main = "admin/dist/server/index.mjs"'),c=true):(a=`main = "admin/dist/server/index.mjs"
235
- `+a,c=true)),a.includes("[alias]")||(a+=X,c=true),c&&h.writeFileSync(v,a,"utf8"),h.existsSync(A.join(process.cwd(),"cf-noop.js"))||h.writeFileSync(A.join(process.cwd(),"cf-noop.js"),ee,"utf8");}else {let a=T({text:"Creating R2 bucket...",...k}).start();try{execSync(`${$} r2 bucket create "${d}"`,{stdio:"ignore"}),a.succeed("R2 bucket created");}catch{a.fail("Failed to create R2 bucket");}try{execSync(`echo "y" | ${$} r2 bucket dev-url enable "${d}"`,{stdio:"ignore"});}catch{}let c=T({text:"Generating wrangler.toml...",...k}).start(),g=`name = "${l}"
230
+ `);let t=be(),n=we(),{quiet:s,json:r}=o,{database:l,databaseUrl:m,name:d,r2Bucket:u,email:y,password:p,nonInteractive:x}=o;s&&(x=true);let _=`kyro-postgres-hd-${t}`,v=A.join(process.cwd(),"wrangler.toml"),$=b.existsSync(v)?Se(v):null,h=!!($&&$.name);if(m&&!l&&(l="postgres"),h)console.log(`
231
+ ${i.cyan("\u267B")} Existing wrangler.toml found \u2014 redeploying "${$.name}"
232
+ `);else if(!x&&process.stdout.isTTY){let a=[];l||a.push({type:"select",name:"database",message:"Select database infrastructure:",choices:[{title:"Cloudflare D1 (Native Serverless SQLite, auto-provisioned)",value:"d1"},{title:"PostgreSQL (External DB via Cloudflare Hyperdrive)",value:"postgres"}],initial:0}),l==="postgres"&&!m&&a.push({type:"text",name:"databaseUrl",message:"PostgreSQL Connection URL:"}),d||a.push({type:"text",name:"name",message:"Cloudflare Project Name:",initial:`kyro-app-${t}`}),u||a.push({type:"text",name:"r2Bucket",message:"Cloudflare R2 Bucket Name:",initial:`kyro-media-${t}`}),y||a.push({type:"text",name:"email",message:"Initial Super Admin Email:",initial:"admin@kyro-cms.com"}),p||a.push({type:"text",name:"password",message:"Initial Super Admin Password (leave blank to auto-generate):"});let c=await he(a);c.database&&(l=c.database),c.databaseUrl&&(m=c.databaseUrl),c.name&&(d=c.name),c.r2Bucket&&(u=c.r2Bucket),c.email&&(y=c.email),c.password&&(p=c.password);}let se=!!y,re=!!p;d=d||(h?$.name:`kyro-app-${t}`),u=u||(h?$.r2Bucket:"")||`kyro-media-${t}`,y=y||"admin@kyro-cms.com",p=p||n,l=l||(h?$.database:"d1")||"d1",console.log(i.bgGray.black.bold(`
233
+ Deployment Plan `)),console.log(` ${i.dim("\u251C\u2500")} Hosting : ${i.cyan("Cloudflare Workers with Assets")}`),console.log(` ${i.dim("\u251C\u2500")} Database : ${i.cyan(l==="d1"?"Cloudflare D1 (Native)":"PostgreSQL (Hyperdrive)")}`),console.log(` ${i.dim("\u251C\u2500")} Project : ${i.cyan(d)}`),console.log(` ${i.dim("\u251C\u2500")} R2 Bucket : ${i.cyan(u)}`),console.log(` ${i.dim("\u2514\u2500")} Admin : ${i.cyan(y)}
234
+ `);let ie=b.existsSync(A.join(process.cwd(),"pnpm-lock.yaml"))?"pnpm":"npm",S="npx wrangler";try{execSync(`${S} whoami`,{stdio:"ignore"}),console.log(` ${i.green("\u2714")} Cloudflare Wrangler authenticated`);}catch{console.log(` ${i.red("\u2716")} Cloudflare Wrangler authentication required.`),console.log(` Run ${i.bold(`${S} login`)} or set the ${i.bold("CLOUDFLARE_API_TOKEN")} env var.`),process.exit(1);}let D="",O="",k=s?{isSilent:true}:{};if(h)D=$.d1Id,O=$.hyperId;else if(l==="postgres"){m||(console.log(` ${i.red("\u2716")} PostgreSQL mode requires a database URL.`),process.exit(1));let a=T({text:"Checking existing Hyperdrive resources...",...k}).start();try{let c=execSync(`${S} hyperdrive list --json`,{stdio:"pipe"}).toString(),g=JSON.parse(c.slice(c.indexOf("["))).find(K=>K.name===_);g&&(O=g.id||g.uuid),a.succeed("Hyperdrive check complete");}catch{a.fail("Failed to list Hyperdrive resources");}if(!O){let c=T({text:"Creating Hyperdrive...",...k}).start();try{let f=execSync(`${S} hyperdrive create "${_}" --connection-string="${m}" --json`,{stdio:"pipe"}).toString(),g=JSON.parse(f.slice(f.indexOf("{")));O=g.id||g.uuid,c.succeed("Hyperdrive created");}catch{c.fail("Failed to create Hyperdrive");}}console.log(` ${i.green("\u2714")} Hyperdrive resource ready (${_})`);}else {let a=`${d}-d1`,c=T({text:"Creating D1 database...",...k}).start();try{let g=execSync(`${S} d1 create "${a}"`,{stdio:"pipe"}).toString().match(/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/i);g&&(D=g[1]),c.succeed("D1 database created");}catch{try{let g=execSync(`${S} d1 list --json`,{stdio:"pipe"}).toString(),R=JSON.parse(g).find(I=>I.name===a);R&&(D=R.id||R.uuid),c.succeed("Existing D1 database found");}catch{c.fail("Failed to create/find D1 database");}}D||(console.log(` ${i.red("\u2716")} Failed to create/find D1 database '${a}'. (D1 database limit may be reached).`),process.exit(1));}if(h){let a=b.readFileSync(v,"utf8"),c=false;a.includes('main = "admin/dist/server/index.mjs"')||(/^main\s*=.*$/m.test(a)?(a=a.replace(/^main\s*=.*$/m,'main = "admin/dist/server/index.mjs"'),c=true):(a=`main = "admin/dist/server/index.mjs"
235
+ `+a,c=true)),a.includes("[alias]")||(a+=X,c=true),c&&b.writeFileSync(v,a,"utf8"),b.existsSync(A.join(process.cwd(),"cf-noop.js"))||b.writeFileSync(A.join(process.cwd(),"cf-noop.js"),ee,"utf8");}else {let a=T({text:"Creating R2 bucket...",...k}).start();try{execSync(`${S} r2 bucket create "${u}"`,{stdio:"ignore"}),a.succeed("R2 bucket created");}catch{a.fail("Failed to create R2 bucket");}try{execSync(`echo "y" | ${S} r2 bucket dev-url enable "${u}"`,{stdio:"ignore"});}catch{}let c=T({text:"Generating wrangler.toml...",...k}).start(),f=`name = "${d}"
236
236
  compatibility_date = "2026-07-31"
237
237
  compatibility_flags = ["nodejs_compat"]
238
238
 
239
239
  [assets]
240
240
  directory = "admin/dist/client"
241
241
  binding = "ASSETS"
242
- `;s==="postgres"?g+=`
242
+ `;l==="postgres"?f+=`
243
243
  [[hyperdrive]]
244
244
  binding = "HYPERDRIVE"
245
245
  id = "${O}"
246
- `:g+=`
246
+ `:f+=`
247
247
  [[d1_databases]]
248
248
  binding = "DB"
249
- database_name = "${l}-d1"
249
+ database_name = "${d}-d1"
250
250
  database_id = "${D}"
251
- `,g+=`
251
+ `,f+=`
252
252
  [[r2_buckets]]
253
253
  binding = "STORAGE_BUCKET"
254
- bucket_name = "${d}"
255
- `,g+=X,h.writeFileSync(A.join(process.cwd(),"wrangler.toml"),g,"utf8"),h.writeFileSync(A.join(process.cwd(),"cf-noop.js"),ee,"utf8"),c.succeed("wrangler.toml generated");}if(!f&&s==="postgres"){try{execSync(`DATABASE_URL="${r}" npx drizzle-kit push --force`,{stdio:"ignore"});}catch{}console.log(` ${i.green("\u2714")} PostgreSQL schema pushed`);}let z=T({text:"Building Astro project...",...k}).start(),W="";try{W=execSync(`${ie} run build:pages 2>&1`,{stdio:"pipe",maxBuffer:64*1024*1024}).toString();let a=h.readFileSync(v,"utf8");a.includes('main = "admin/dist/server/index.mjs"')||h.writeFileSync(v,`main = "admin/dist/server/index.mjs"
254
+ bucket_name = "${u}"
255
+ `,f+=X,b.writeFileSync(A.join(process.cwd(),"wrangler.toml"),f,"utf8"),b.writeFileSync(A.join(process.cwd(),"cf-noop.js"),ee,"utf8"),c.succeed("wrangler.toml generated");}if(!h&&l==="postgres"){try{execSync(`DATABASE_URL="${m}" npx drizzle-kit push --force`,{stdio:"ignore"});}catch{}console.log(` ${i.green("\u2714")} PostgreSQL schema pushed`);}let z=T({text:"Building Astro project...",...k}).start(),W="";try{W=execSync(`${ie} run build:pages 2>&1`,{stdio:"pipe",maxBuffer:64*1024*1024}).toString();let a=b.readFileSync(v,"utf8");a.includes('main = "admin/dist/server/index.mjs"')||b.writeFileSync(v,`main = "admin/dist/server/index.mjs"
256
256
  `+a,"utf8"),z.succeed("Build complete");}catch(a){let c=a?.stdout?.toString?.()||W||"";z.fail("Build failed"),c&&process.stdout.write(c),console.log(`
257
- ${i.red("\u2716")} Build failed. Inspect output above.`),process.exit(1);}let H=T({text:"Deploying to Cloudflare Workers...",...k}).start();h.existsSync(A.join(process.cwd(),".wrangler"))&&h.rmSync(A.join(process.cwd(),".wrangler"),{recursive:true,force:true});let E="";try{let a=execSync(`${$} deploy`,{stdio:"pipe",maxBuffer:67108864}).toString();process.stdout.write(a);let c=a.match(/https:\/\/[a-zA-Z0-9._-]+\.workers\.dev/);c&&(E=c[0]),H.succeed("Deployment successful"),console.log(`
257
+ ${i.red("\u2716")} Build failed. Inspect output above.`),process.exit(1);}let H=T({text:"Deploying to Cloudflare Workers...",...k}).start();b.existsSync(A.join(process.cwd(),".wrangler"))&&b.rmSync(A.join(process.cwd(),".wrangler"),{recursive:true,force:true});let E="";try{let a=execSync(`${S} deploy`,{stdio:"pipe",maxBuffer:67108864}).toString();process.stdout.write(a);let c=a.match(/https:\/\/[a-zA-Z0-9._-]+\.workers\.dev/);c&&(E=c[0]),H.succeed("Deployment successful"),console.log(`
258
258
  ${i.green.bold("\u{1F389} Deployment Successful!")}
259
- `);let g=!f||se||re,u=!1;if(g){let R=T({text:"Storing admin credentials as worker secrets...",...k}).start(),I=!0,G=(ae,ce)=>{try{execSync(`${$} secret put ${ae}`,{input:ce,stdio:["pipe","ignore","pipe"]});}catch{I=!1;}};G("KYRO_ADMIN_EMAIL",p),G("KYRO_ADMIN_PASSWORD",m),I?(u=!0,R.succeed("Admin credentials stored as worker secrets")):R.warn("Could not store admin credentials \u2014 set KYRO_ADMIN_EMAIL / KYRO_ADMIN_PASSWORD manually");}let K=!f||u?m:null;f&&console.log(u?` ${i.dim("Redeployed")} ${i.cyan(l)} \u2014 admin credentials updated.`:` ${i.dim("Redeployed")} ${i.cyan(l)} \u2014 existing resources and admin credentials are unchanged.`),K&&(console.log(` ${i.bold("Super Admin Credentials")}`),console.log(` ${i.dim("\u251C\u2500")} ${i.bold("Email :")} ${i.cyan(p)}`),console.log(` ${i.dim("\u2514\u2500")} ${i.bold("Password:")} ${i.yellow.bold(m)}`)),E&&console.log(` ${i.dim("\u2514\u2500")} ${i.bold("Live URL:")} ${i.cyan(E)}`),f||console.log(`
259
+ `);let f=!h||se||re,g=!1;if(f){let R=T({text:"Storing admin credentials as worker secrets...",...k}).start(),I=!0,G=(ae,ce)=>{try{execSync(`${S} secret put ${ae}`,{input:ce,stdio:["pipe","ignore","pipe"]});}catch{I=!1;}};G("KYRO_ADMIN_EMAIL",y),G("KYRO_ADMIN_PASSWORD",p),I?(g=!0,R.succeed("Admin credentials stored as worker secrets")):R.warn("Could not store admin credentials \u2014 set KYRO_ADMIN_EMAIL / KYRO_ADMIN_PASSWORD manually");}let K=!h||g?p:null;h&&console.log(g?` ${i.dim("Redeployed")} ${i.cyan(d)} \u2014 admin credentials updated.`:` ${i.dim("Redeployed")} ${i.cyan(d)} \u2014 existing resources and admin credentials are unchanged.`),K&&(console.log(` ${i.bold("Super Admin Credentials")}`),console.log(` ${i.dim("\u251C\u2500")} ${i.bold("Email :")} ${i.cyan(y)}`),console.log(` ${i.dim("\u2514\u2500")} ${i.bold("Password:")} ${i.yellow.bold(p)}`)),E&&console.log(` ${i.dim("\u2514\u2500")} ${i.bold("Live URL:")} ${i.cyan(E)}`),h||console.log(`
260
260
  ${i.dim("\u26A0\uFE0F Save these credentials. Password won't be shown again.")}
261
- `),x&&process.stdout.write(JSON.stringify({ok:!0,liveUrl:E,adminEmail:p,adminPassword:K,redeploy:f,credentialsUpdated:u})+`
262
- `);}catch(a){let c=a?.stdout?.toString?.()||"",g=a?.stderr?.toString?.()||"";H.fail("Deployment failed"),c&&process.stdout.write(c),g&&process.stdout.write(g),console.log(`
261
+ `),r&&process.stdout.write(JSON.stringify({ok:!0,liveUrl:E,adminEmail:y,adminPassword:K,redeploy:h,credentialsUpdated:g})+`
262
+ `);}catch(a){let c=a?.stdout?.toString?.()||"",f=a?.stderr?.toString?.()||"";H.fail("Deployment failed"),c&&process.stdout.write(c),f&&process.stdout.write(f),console.log(`
263
263
  ${i.red.bold("\u2716 Deployment Failed!")}`),console.log(` ${i.dim("See the Wrangler error above.")}
264
- `),x&&process.stdout.write(JSON.stringify({ok:false,error:"Deployment failed"})+`
265
- `),process.exit(1);}}),e}var Ae=fileURLToPath(import.meta.url),Te=dirname(Ae),oe="0.1.0";try{oe=JSON.parse(readFileSync(join(Te,"../../package.json"),"utf-8")).version;}catch{}var S=new Command;S.name("kyro").description("Kyro CMS - Astro-native headless CMS").version(oe);S.command("dev").description("Start Kyro CMS development server").option("-p, --port <port>","Port to run on","4321").option("-h, --host <host>","Host to bind to","localhost").action(async e=>{let{exec:o}=await import('child_process'),t=o(`astro dev --port ${e.port} --host ${e.host}`,{env:{...process.env,NODE_NO_WARNINGS:"1"}});t.stdout?.on("data",n=>process.stdout.write(n)),t.stderr?.on("data",n=>process.stderr.write(n)),process.on("SIGINT",()=>{t.kill("SIGINT"),process.exit(0);}),process.on("SIGTERM",()=>{t.kill("SIGTERM"),process.exit(0);});});S.command("start").description("Start Kyro CMS in production mode").option("-p, --port <port>","Port to run on",process.env.PORT||"4321").option("-h, --host <host>","Host to bind to",process.env.HOST||"0.0.0.0").action(async e=>{let{spawn:o}=await import('child_process'),{existsSync:t}=await import('fs'),n=join(process.cwd(),"admin"),r=[join(n,"dist","server","index.mjs"),join(n,"dist","server","entry.mjs"),join(process.cwd(),"dist","server","index.mjs"),join(process.cwd(),"dist","server","entry.mjs")].find(d=>t(d));console.log(`\u{1F680} Starting Kyro CMS on ${e.host}:${e.port}`);let l;r?(console.log(`\u2713 Serving via standalone entrypoint: ${r}`),l=o("node",[r],{env:{...process.env,HOST:e.host,PORT:e.port,NODE_ENV:"production"},stdio:"inherit"})):(console.warn(`\u26A0\uFE0F Standalone entrypoint not found, falling back to astro preview in ${n}`),l=o("node",["./node_modules/.bin/astro","preview","--port",e.port,"--host",e.host],{cwd:t(n)?n:process.cwd(),env:{...process.env,NODE_ENV:"production"},stdio:"inherit"})),l.on("exit",d=>process.exit(d??0)),process.on("SIGTERM",()=>l.kill("SIGTERM")),process.on("SIGINT",()=>l.kill("SIGINT"));});S.addCommand(Z());S.addCommand(ne());var M=S.command("db").description("Database management commands");M.command("generate").description("Generate migrations from schema").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit generate",(o,t,n)=>{o&&(console.error("\u274C Generation failed:",o.message),process.exit(1));});});M.command("migrate").description("Run database migrations").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit migrate",(o,t,n)=>{o&&(console.error("\u274C Migration failed:",o.message),process.exit(1));});});M.command("push").description("Push schema to database (development)").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit push",(o,t,n)=>{o&&(console.error("\u274C Push failed:",o.message),process.exit(1));});});M.command("seed").description("Seed database with initial data").action(async()=>{let{exec:e}=await import('child_process');e("npx tsx src/database/drizzle/seed.ts",(o,t,n)=>{o&&(console.error("\u274C Seeding failed:",o.message),process.exit(1));});});M.command("studio").description("Open Drizzle Studio").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit studio",(o,t,n)=>{o&&(console.error("\u274C Studio failed:",o.message),process.exit(1));});});var Pe=S.command("auth").description("Authentication management commands");Pe.command("bootstrap").description("Create initial admin user").option("-e, --email <email>","Admin email",process.env.KYRO_ADMIN_EMAIL).option("-p, --password <password>","Admin password",process.env.KYRO_ADMIN_PASSWORD).option("-r, --role <role>","Admin role",process.env.KYRO_ADMIN_ROLE||"admin").action(async e=>{(!e.email||!e.password)&&(console.error("\u274C Email and password are required. Set KYRO_ADMIN_EMAIL and KYRO_ADMIN_PASSWORD env vars or use -e and -p options."),process.exit(1));try{let{bootstrapAdmin:o}=await import('../bootstrap-TTMLNQM3.js'),t=process.env.DATABASE_URL||"",n=t.toLowerCase().startsWith("postgres://")||t.toLowerCase().startsWith("postgresql://"),s=t.toLowerCase().startsWith("mongodb://")||t.toLowerCase().startsWith("mongodb+srv://"),r=!t||t.includes(".db")||t.includes("sqlite")||t.includes("file:"),l;if(n){let{PostgresAuthAdapter:p}=await import('../postgres-auth-adapter-7BCPXNBO.js'),{drizzle:m}=await import('drizzle-orm/postgres-js'),{default:C}=await import('postgres'),y=C(t,{max:1,onnotice:()=>{}}),x=m(y);l=new p({db:x});}else if(s){let{MongoDBAuthAdapter:p}=await import('../mongo-auth-adapter-66PWVRZW.js'),m=await import('mongodb'),C=m.MongoClient??m.default?.MongoClient,y=new C(t,{maxPoolSize:1,minPoolSize:0,serverSelectionTimeoutMS:5e3});await y.connect();let x=y.db();l=new p({db:x,client:y});}else {let{SQLiteAuthAdapter:p}=await import('../sqlite-adapter-TT6ZASDG.js'),m=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";l=new p({path:m});}l.connect&&await l.connect();let d=await o({authAdapter:l,adminEmail:e.email,adminPassword:e.password,adminRole:e.role});l.disconnect&&await l.disconnect(),d.success||(console.error("\u274C Failed to create admin:",d.error),process.exit(1));}catch(o){console.error("\u274C Bootstrap failed:",o),process.exit(1);}});S.command("health").description("Check system health").action(async()=>{let e=process.env.DATABASE_URL||"",o=e.toLowerCase().startsWith("postgres://")||e.toLowerCase().startsWith("postgresql://"),t=e.toLowerCase().startsWith("mongodb://")||e.toLowerCase().startsWith("mongodb+srv://"),n=!e||e.includes(".db")||e.includes("sqlite")||e.includes("file:");if(o)try{let{default:s}=await import('postgres'),r=s(e,{max:1,onnotice:()=>{}});await r.unsafe("SELECT 1"),await r.end();}catch{}else if(t){let s;try{let r=await import('mongodb'),l=r.MongoClient??r.default?.MongoClient;s=new l(e,{maxPoolSize:1,minPoolSize:0,serverSelectionTimeoutMS:5e3}),await s.connect(),await s.db().admin().ping();}catch{}finally{if(s)try{await s.close();}catch{}}}else if(n)try{let s=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db",{existsSync:r}=await import('fs');r(s);}catch{}});S.parse();process.argv.slice(2).length||S.outputHelp();
264
+ `),r&&process.stdout.write(JSON.stringify({ok:false,error:"Deployment failed"})+`
265
+ `),process.exit(1);}}),e}var Ae=fileURLToPath(import.meta.url),Te=dirname(Ae),oe="0.1.0";try{oe=JSON.parse(readFileSync(join(Te,"../../package.json"),"utf-8")).version;}catch{}var C=new Command;C.name("kyro").description("Kyro CMS - Astro-native headless CMS").version(oe);C.command("dev").description("Start Kyro CMS development server").option("-p, --port <port>","Port to run on","4321").option("-h, --host <host>","Host to bind to","localhost").action(async e=>{let{exec:o}=await import('child_process'),t=o(`astro dev --port ${e.port} --host ${e.host}`,{env:{...process.env,NODE_NO_WARNINGS:"1"}});t.stdout?.on("data",n=>process.stdout.write(n)),t.stderr?.on("data",n=>process.stderr.write(n)),process.on("SIGINT",()=>{t.kill("SIGINT"),process.exit(0);}),process.on("SIGTERM",()=>{t.kill("SIGTERM"),process.exit(0);});});C.command("start").description("Start Kyro CMS in production mode").option("-p, --port <port>","Port to run on",process.env.PORT||"4321").option("-h, --host <host>","Host to bind to",process.env.HOST||"0.0.0.0").action(async e=>{let{spawn:o}=await import('child_process'),{existsSync:t}=await import('fs'),n=join(process.cwd(),"admin"),r=[join(n,"dist","server","index.mjs"),join(n,"dist","server","entry.mjs"),join(process.cwd(),"dist","server","index.mjs"),join(process.cwd(),"dist","server","entry.mjs")].find(m=>t(m));console.log(`\u{1F680} Starting Kyro CMS on ${e.host}:${e.port}`);let l;r?(console.log(`\u2713 Serving via standalone entrypoint: ${r}`),l=o("node",[r],{env:{...process.env,HOST:e.host,PORT:e.port,NODE_ENV:"production"},stdio:"inherit"})):(console.warn(`\u26A0\uFE0F Standalone entrypoint not found, falling back to astro preview in ${n}`),l=o("node",["./node_modules/.bin/astro","preview","--port",e.port,"--host",e.host],{cwd:t(n)?n:process.cwd(),env:{...process.env,NODE_ENV:"production"},stdio:"inherit"})),l.on("exit",m=>process.exit(m??0)),process.on("SIGTERM",()=>l.kill("SIGTERM")),process.on("SIGINT",()=>l.kill("SIGINT"));});C.addCommand(Z());C.addCommand(ne());var M=C.command("db").description("Database management commands");M.command("generate").description("Generate migrations from schema").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit generate",(o,t,n)=>{o&&(console.error("\u274C Generation failed:",o.message),process.exit(1));});});M.command("migrate").description("Run database migrations").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit migrate",(o,t,n)=>{o&&(console.error("\u274C Migration failed:",o.message),process.exit(1));});});M.command("push").description("Push schema to database (development)").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit push",(o,t,n)=>{o&&(console.error("\u274C Push failed:",o.message),process.exit(1));});});M.command("seed").description("Seed database with initial data").action(async()=>{let{exec:e}=await import('child_process');e("npx tsx src/database/drizzle/seed.ts",(o,t,n)=>{o&&(console.error("\u274C Seeding failed:",o.message),process.exit(1));});});M.command("studio").description("Open Drizzle Studio").action(async()=>{let{exec:e}=await import('child_process');e("npx drizzle-kit studio",(o,t,n)=>{o&&(console.error("\u274C Studio failed:",o.message),process.exit(1));});});var Pe=C.command("auth").description("Authentication management commands");Pe.command("bootstrap").description("Create initial admin user").option("-e, --email <email>","Admin email",process.env.KYRO_ADMIN_EMAIL).option("-p, --password <password>","Admin password",process.env.KYRO_ADMIN_PASSWORD).option("-r, --role <role>","Admin role",process.env.KYRO_ADMIN_ROLE||"admin").action(async e=>{(!e.email||!e.password)&&(console.error("\u274C Email and password are required. Set KYRO_ADMIN_EMAIL and KYRO_ADMIN_PASSWORD env vars or use -e and -p options."),process.exit(1));try{let{bootstrapAdmin:o}=await import('../bootstrap-TTMLNQM3.js'),t=process.env.DATABASE_URL||"",n=t.toLowerCase().startsWith("postgres://")||t.toLowerCase().startsWith("postgresql://"),s=t.toLowerCase().startsWith("mongodb://")||t.toLowerCase().startsWith("mongodb+srv://"),r=!t||t.includes(".db")||t.includes("sqlite")||t.includes("file:"),l;if(n){let{PostgresAuthAdapter:d}=await import('../postgres-auth-adapter-7BCPXNBO.js'),{drizzle:u}=await import('drizzle-orm/postgres-js'),{default:y}=await import('postgres'),p=y(t,{max:1,onnotice:()=>{}}),x=u(p);l=new d({db:x});}else if(s){let{MongoDBAuthAdapter:d}=await import('../mongo-auth-adapter-66PWVRZW.js'),u=await import('mongodb'),y=u.MongoClient??u.default?.MongoClient,p=new y(t,{maxPoolSize:1,minPoolSize:0,serverSelectionTimeoutMS:5e3});await p.connect();let x=p.db();l=new d({db:x,client:p});}else {let{SQLiteAuthAdapter:d}=await import('../sqlite-adapter-TT6ZASDG.js'),u=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";l=new d({path:u});}l.connect&&await l.connect();let m=await o({authAdapter:l,adminEmail:e.email,adminPassword:e.password,adminRole:e.role});l.disconnect&&await l.disconnect(),m.success||(console.error("\u274C Failed to create admin:",m.error),process.exit(1));}catch(o){console.error("\u274C Bootstrap failed:",o),process.exit(1);}});C.command("health").description("Check system health").action(async()=>{let e=process.env.DATABASE_URL||"",o=e.toLowerCase().startsWith("postgres://")||e.toLowerCase().startsWith("postgresql://"),t=e.toLowerCase().startsWith("mongodb://")||e.toLowerCase().startsWith("mongodb+srv://"),n=!e||e.includes(".db")||e.includes("sqlite")||e.includes("file:");if(o)try{let{default:s}=await import('postgres'),r=s(e,{max:1,onnotice:()=>{}});await r.unsafe("SELECT 1"),await r.end();}catch{}else if(t){let s;try{let r=await import('mongodb'),l=r.MongoClient??r.default?.MongoClient;s=new l(e,{maxPoolSize:1,minPoolSize:0,serverSelectionTimeoutMS:5e3}),await s.connect(),await s.db().admin().ping();}catch{}finally{if(s)try{await s.close();}catch{}}}else if(n)try{let s=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db",{existsSync:r}=await import('fs');r(s);}catch{}});C.parse();process.argv.slice(2).length||C.outputHelp();
@@ -1 +1 @@
1
- 'use strict';var chunkGWUHIIPO_cjs=require('../chunk-GWUHIIPO.cjs'),chunkEG4SRTYS_cjs=require('../chunk-EG4SRTYS.cjs'),chunk3A5UO6OQ_cjs=require('../chunk-3A5UO6OQ.cjs');require('../chunk-23RSKVJP.cjs'),require('../chunk-YOJOVQIH.cjs'),require('../chunk-O4PPZOVI.cjs'),require('../chunk-JJY2F6NL.cjs'),require('../chunk-OXEJCIOA.cjs'),require('../chunk-KOSR7235.cjs'),require('../chunk-JHFD3IAU.cjs');Object.defineProperty(exports,"DrizzleAdapter",{enumerable:true,get:function(){return chunkGWUHIIPO_cjs.c}});Object.defineProperty(exports,"collectionToDrizzleSchema",{enumerable:true,get:function(){return chunkGWUHIIPO_cjs.b}});Object.defineProperty(exports,"createDrizzleAdapter",{enumerable:true,get:function(){return chunkGWUHIIPO_cjs.d}});Object.defineProperty(exports,"fieldToDrizzleType",{enumerable:true,get:function(){return chunkGWUHIIPO_cjs.a}});Object.defineProperty(exports,"createDatabase",{enumerable:true,get:function(){return chunkEG4SRTYS_cjs.b}});Object.defineProperty(exports,"runMigrations",{enumerable:true,get:function(){return chunkEG4SRTYS_cjs.c}});Object.defineProperty(exports,"seedDefaultRoles",{enumerable:true,get:function(){return chunkEG4SRTYS_cjs.d}});Object.defineProperty(exports,"PostgresAuthAdapter",{enumerable:true,get:function(){return chunk3A5UO6OQ_cjs.a}});
1
+ 'use strict';var chunk3BDAH6FD_cjs=require('../chunk-3BDAH6FD.cjs'),chunkEG4SRTYS_cjs=require('../chunk-EG4SRTYS.cjs'),chunk3A5UO6OQ_cjs=require('../chunk-3A5UO6OQ.cjs');require('../chunk-23RSKVJP.cjs'),require('../chunk-YOJOVQIH.cjs'),require('../chunk-O4PPZOVI.cjs'),require('../chunk-JJY2F6NL.cjs'),require('../chunk-OXEJCIOA.cjs'),require('../chunk-KOSR7235.cjs'),require('../chunk-JHFD3IAU.cjs');Object.defineProperty(exports,"DrizzleAdapter",{enumerable:true,get:function(){return chunk3BDAH6FD_cjs.c}});Object.defineProperty(exports,"collectionToDrizzleSchema",{enumerable:true,get:function(){return chunk3BDAH6FD_cjs.b}});Object.defineProperty(exports,"createDrizzleAdapter",{enumerable:true,get:function(){return chunk3BDAH6FD_cjs.d}});Object.defineProperty(exports,"fieldToDrizzleType",{enumerable:true,get:function(){return chunk3BDAH6FD_cjs.a}});Object.defineProperty(exports,"createDatabase",{enumerable:true,get:function(){return chunkEG4SRTYS_cjs.b}});Object.defineProperty(exports,"runMigrations",{enumerable:true,get:function(){return chunkEG4SRTYS_cjs.c}});Object.defineProperty(exports,"seedDefaultRoles",{enumerable:true,get:function(){return chunkEG4SRTYS_cjs.d}});Object.defineProperty(exports,"PostgresAuthAdapter",{enumerable:true,get:function(){return chunk3A5UO6OQ_cjs.a}});
@@ -1,5 +1,5 @@
1
- import { b as AbstractBaseAdapter, c as AuthAdapter, U as UserRole, d as AuthUser, S as Session, a as AuditLogFilter, A as AuditLog } from '../base-DIpT2Vuz.cjs';
2
- import { C as CollectionConfig, G as GlobalConfig, F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, U as UpdateArgs, D as DeleteArgs, e as FindOneArgs } from '../types-CdwfDpyW.cjs';
1
+ import { b as AbstractBaseAdapter, c as AuthAdapter, U as UserRole, d as AuthUser, S as Session, a as AuditLogFilter, A as AuditLog } from '../base-C6bzgEN1.cjs';
2
+ import { C as CollectionConfig, G as GlobalConfig, F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, U as UpdateArgs, D as DeleteArgs, e as FindOneArgs } from '../types-BQnOYvym.cjs';
3
3
  import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
4
4
  import { F as Field } from '../types-C3QFX0l6.cjs';
5
5
 
@@ -1,5 +1,5 @@
1
- import { b as AbstractBaseAdapter, c as AuthAdapter, U as UserRole, d as AuthUser, S as Session, a as AuditLogFilter, A as AuditLog } from '../base-C2DOe8wD.js';
2
- import { C as CollectionConfig, G as GlobalConfig, F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, U as UpdateArgs, D as DeleteArgs, e as FindOneArgs } from '../types-CKWnrUAh.js';
1
+ import { b as AbstractBaseAdapter, c as AuthAdapter, U as UserRole, d as AuthUser, S as Session, a as AuditLogFilter, A as AuditLog } from '../base-BAApLdlP.js';
2
+ import { C as CollectionConfig, G as GlobalConfig, F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, U as UpdateArgs, D as DeleteArgs, e as FindOneArgs } from '../types-M2BhNVof.js';
3
3
  import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
4
4
  import { F as Field } from '../types-C3QFX0l6.js';
5
5
 
@@ -1 +1 @@
1
- export{c as DrizzleAdapter,b as collectionToDrizzleSchema,d as createDrizzleAdapter,a as fieldToDrizzleType}from'../chunk-TJ6N5ZPZ.js';export{b as createDatabase,c as runMigrations,d as seedDefaultRoles}from'../chunk-JXJTFBHG.js';export{a as PostgresAuthAdapter}from'../chunk-IIPSXKNV.js';import'../chunk-7EY3GXRA.js';import'../chunk-WLSVS3NC.js';import'../chunk-YNSKDTFG.js';import'../chunk-VLFM66BZ.js';import'../chunk-NGNXOXI5.js';import'../chunk-O4RKZQYQ.js';import'../chunk-RLW6AQF2.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
1
+ export{c as DrizzleAdapter,b as collectionToDrizzleSchema,d as createDrizzleAdapter,a as fieldToDrizzleType}from'../chunk-PYVZJIQ3.js';export{b as createDatabase,c as runMigrations,d as seedDefaultRoles}from'../chunk-JXJTFBHG.js';export{a as PostgresAuthAdapter}from'../chunk-IIPSXKNV.js';import'../chunk-7EY3GXRA.js';import'../chunk-WLSVS3NC.js';import'../chunk-YNSKDTFG.js';import'../chunk-VLFM66BZ.js';import'../chunk-NGNXOXI5.js';import'../chunk-O4RKZQYQ.js';import'../chunk-RLW6AQF2.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
@@ -1,7 +1,7 @@
1
1
  import { GraphQLSchema } from 'graphql';
2
2
  export { printSchema } from 'graphql';
3
- import { B as BaseAdapter, i as User, R as Request } from '../types-CdwfDpyW.cjs';
4
- import { R as Registry } from '../index-Ci7aUrmN.cjs';
3
+ import { B as BaseAdapter, i as User, R as Request } from '../types-BQnOYvym.cjs';
4
+ import { R as Registry } from '../index-GSRx0kyZ.cjs';
5
5
  import '../types-C3QFX0l6.cjs';
6
6
  import 'zod';
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { GraphQLSchema } from 'graphql';
2
2
  export { printSchema } from 'graphql';
3
- import { B as BaseAdapter, i as User, R as Request } from '../types-CKWnrUAh.js';
4
- import { R as Registry } from '../index-C9uBoJtm.js';
3
+ import { B as BaseAdapter, i as User, R as Request } from '../types-M2BhNVof.js';
4
+ import { R as Registry } from '../index-DjhIVdL9.js';
5
5
  import '../types-C3QFX0l6.js';
6
6
  import 'zod';
7
7
 
@@ -1,5 +1,5 @@
1
- import { b as AbstractBaseAdapter, c as AuthAdapter, U as UserRole, d as AuthUser, S as Session, a as AuditLogFilter, A as AuditLog } from './base-C2DOe8wD.js';
2
- import { F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, U as UpdateArgs, D as DeleteArgs, e as FindOneArgs, f as FindVersionsArgs, V as VersionRecord, g as CreateVersionArgs } from './types-CKWnrUAh.js';
1
+ import { b as AbstractBaseAdapter, c as AuthAdapter, U as UserRole, d as AuthUser, S as Session, a as AuditLogFilter, A as AuditLog } from './base-BAApLdlP.js';
2
+ import { F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, U as UpdateArgs, D as DeleteArgs, e as FindOneArgs, f as FindVersionsArgs, V as VersionRecord, g as CreateVersionArgs } from './types-M2BhNVof.js';
3
3
 
4
4
  type DatabaseType = 'postgres' | 'sqlite' | 'mongodb';
5
5
  interface DatabaseConnectionOptions {
@@ -1,5 +1,5 @@
1
- import { b as AbstractBaseAdapter, c as AuthAdapter, U as UserRole, d as AuthUser, S as Session, a as AuditLogFilter, A as AuditLog } from './base-DIpT2Vuz.cjs';
2
- import { F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, U as UpdateArgs, D as DeleteArgs, e as FindOneArgs, f as FindVersionsArgs, V as VersionRecord, g as CreateVersionArgs } from './types-CdwfDpyW.cjs';
1
+ import { b as AbstractBaseAdapter, c as AuthAdapter, U as UserRole, d as AuthUser, S as Session, a as AuditLogFilter, A as AuditLog } from './base-C6bzgEN1.cjs';
2
+ import { F as FindArgs, b as FindResult, c as FindByIDArgs, d as CreateArgs, U as UpdateArgs, D as DeleteArgs, e as FindOneArgs, f as FindVersionsArgs, V as VersionRecord, g as CreateVersionArgs } from './types-BQnOYvym.cjs';
3
3
 
4
4
  type DatabaseType = 'postgres' | 'sqlite' | 'mongodb';
5
5
  interface DatabaseConnectionOptions {
@@ -1,4 +1,4 @@
1
- import { S as StorageConfig, a as StorageProvider, C as CollectionConfig, G as GlobalConfig, K as KyroPlugin } from './types-CKWnrUAh.js';
1
+ import { S as StorageConfig, a as StorageProvider, C as CollectionConfig, G as GlobalConfig, K as KyroPlugin } from './types-M2BhNVof.js';
2
2
  import { F as Field } from './types-C3QFX0l6.js';
3
3
  import { ZodTypeAny } from 'zod';
4
4
 
@@ -1,4 +1,4 @@
1
- import { S as StorageConfig, a as StorageProvider, C as CollectionConfig, G as GlobalConfig, K as KyroPlugin } from './types-CdwfDpyW.cjs';
1
+ import { S as StorageConfig, a as StorageProvider, C as CollectionConfig, G as GlobalConfig, K as KyroPlugin } from './types-BQnOYvym.cjs';
2
2
  import { F as Field } from './types-C3QFX0l6.cjs';
3
3
  import { ZodTypeAny } from 'zod';
4
4