@forinda/kickjs-cli 8.13.0 → 8.13.1

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 (39) hide show
  1. package/dist/{agent-docs-DD0hT2pE.mjs → agent-docs-BxuvlGy4.mjs} +3 -3
  2. package/dist/{agent-docs-DD0hT2pE.mjs.map → agent-docs-BxuvlGy4.mjs.map} +1 -1
  3. package/dist/{agent-docs-D0qgHBA8.mjs → agent-docs-Dq_azKfQ.mjs} +2 -2
  4. package/dist/{build-DEdLI54B.mjs → build-eFEdQsTj.mjs} +3 -3
  5. package/dist/{build-DEdLI54B.mjs.map → build-eFEdQsTj.mjs.map} +1 -1
  6. package/dist/{build-C1ZgYqj7.mjs → build-t8pGkT7W.mjs} +2 -2
  7. package/dist/{builtins-DZ-kQSyt.mjs → builtins-DCvidf69.mjs} +4 -4
  8. package/dist/{builtins-BWtf5CEP.mjs → builtins-ubUekPfw.mjs} +2 -2
  9. package/dist/cli.mjs +2 -2
  10. package/dist/{config-CQGH0FTE.mjs → config-BIlu1hs0.mjs} +2 -2
  11. package/dist/{config-CHRM7WLZ.mjs → config-D0zuz3Fx.mjs} +3 -3
  12. package/dist/{config-CHRM7WLZ.mjs.map → config-D0zuz3Fx.mjs.map} +1 -1
  13. package/dist/{doctor-D0uazKD7.mjs → doctor-BDlJqXWX.mjs} +4 -4
  14. package/dist/{doctor-D0uazKD7.mjs.map → doctor-BDlJqXWX.mjs.map} +1 -1
  15. package/dist/{fullstack-Cr5tath7.mjs → fullstack-BWdQFw3R.mjs} +4 -4
  16. package/dist/{fullstack-Cr5tath7.mjs.map → fullstack-BWdQFw3R.mjs.map} +1 -1
  17. package/dist/{fullstack-C8k03oM8.mjs → fullstack-C6hCr30Z.mjs} +3 -3
  18. package/dist/index.mjs +2 -2
  19. package/dist/{package-manager-mqxVziQ9.mjs → package-manager-CSsqVTZ-.mjs} +3 -3
  20. package/dist/{package-manager-mqxVziQ9.mjs.map → package-manager-CSsqVTZ-.mjs.map} +1 -1
  21. package/dist/{package-manager-B-BW1RBj.mjs → package-manager-D5grCG_d.mjs} +2 -2
  22. package/dist/{plugin-DSgKyJSD.mjs → plugin-BXckYw0A.mjs} +2 -2
  23. package/dist/{plugin-MPu_4sWN.mjs → plugin-CGlWHBFX.mjs} +2 -2
  24. package/dist/{project--T8NPgfc.mjs → project-BE7J8TpW.mjs} +5 -5
  25. package/dist/{project-w-OcvS26.mjs → project-B_yEOLE4.mjs} +6 -6
  26. package/dist/project-B_yEOLE4.mjs.map +1 -0
  27. package/dist/{project-root-BsIxM6Gj.mjs → project-root-B1zLyHn6.mjs} +2 -2
  28. package/dist/{project-root-C4lAZePJ.mjs → project-root-DYJU7ROd.mjs} +3 -3
  29. package/dist/{project-root-C4lAZePJ.mjs.map → project-root-DYJU7ROd.mjs.map} +1 -1
  30. package/dist/{rolldown-runtime-BVrPnwAV.mjs → rolldown-runtime-Bn82Wzut.mjs} +1 -1
  31. package/dist/{run-plugins-cqNounm7.mjs → run-plugins-B8vUgyD4.mjs} +4 -4
  32. package/dist/{run-plugins-cqNounm7.mjs.map → run-plugins-B8vUgyD4.mjs.map} +1 -1
  33. package/dist/{typegen-Ctafx65M.mjs → typegen-B3mw3F07.mjs} +5 -5
  34. package/dist/{typegen-Ctafx65M.mjs.map → typegen-B3mw3F07.mjs.map} +1 -1
  35. package/dist/{typegen-BfFiyGeh.mjs → typegen-CAni3mL3.mjs} +4 -4
  36. package/dist/{types-CH5itn9u.mjs → types-DJMtN7wo.mjs} +1 -1
  37. package/package.json +2 -2
  38. package/templates/feature-devtools/feature.json +1 -1
  39. package/dist/project-w-OcvS26.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v8.13.0
2
+ * @forinda/kickjs-cli v8.13.1
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import{t as e}from"./rolldown-runtime-BVrPnwAV.mjs";import{_ as t,a as n,c as r,d as i,f as a,g as o,h as s,i as c,l,m as u,n as d,o as f,p,s as m,t as h,u as g}from"./package-manager-mqxVziQ9.mjs";import{A as _,C as v,D as y,E as b,F as x,M as S,N as ee,O as te,P as C,S as ne,T as re,_ as ie,a as ae,b as oe,c as se,f as ce,g as le,h as ue,i as de,j as fe,k as pe,l as me,m as he,p as ge,r as _e,u as ve,v as ye,w as be,x as xe,y as Se}from"./doctor-D0uazKD7.mjs";import{a as Ce,c as w,d as we,f as Te,h as Ee,l as T,m as De,o as Oe,p as ke,s as E,u as Ae}from"./config-CHRM7WLZ.mjs";import{d as je,f as Me,o as Ne,r as Pe,s as Fe,t as Ie,u as Le}from"./project-w-OcvS26.mjs";import{t as D}from"./project-root-C4lAZePJ.mjs";import{n as O,t as Re}from"./types-CH5itn9u.mjs";import{t as ze}from"./build-DEdLI54B.mjs";import{n as Be}from"./agent-docs-DD0hT2pE.mjs";import{C as Ve,S as He,_ as Ue,a as We,b as Ge,c as Ke,d as qe,f as Je,g as Ye,h as Xe,i as Ze,l as Qe,m as $e,o as et,p as tt,r as nt,s as rt,t as it,u as at,v as ot,w as st,x as k,y as ct}from"./typegen-Ctafx65M.mjs";import{createRequire as lt}from"node:module";import A,{basename as ut,dirname as j,join as M,relative as N,resolve as P,sep as F}from"node:path";import{cpSync as dt,existsSync as I,mkdirSync as ft,readFileSync as L,readdirSync as R,rmSync as pt,statSync as mt,writeFileSync as z}from"node:fs";import{copyFile as ht,mkdir as gt,readFile as B,readdir as _t,rm as vt,stat as yt,writeFile as bt}from"node:fs/promises";import{fork as xt,spawn as St,spawnSync as Ct}from"node:child_process";import{createHash as wt}from"node:crypto";import{fileURLToPath as Tt,pathToFileURL as V}from"node:url";import{parseSync as Et}from"oxc-parser";import{arch as Dt,platform as Ot,release as kt}from"node:os";const At=[{value:`swagger`,label:`Swagger`,hint:`OpenAPI docs`},{value:`ws`,label:`WebSocket`,hint:`rooms, heartbeat`},{value:`queue`,label:`Queue`,hint:`BullMQ/RabbitMQ/Kafka`},{value:`devtools`,label:`DevTools`,hint:`debug dashboard`},{value:`storage`,label:`Storage`,hint:`disk, S3 / R2 / MinIO`}];function jt(e){e.command(`new [name]`).alias(`init`).description(`Create a new KickJS project (use "." for current directory)`).option(`-d, --directory <dir>`,`Target directory (defaults to project name)`).option(`--pm <manager>`,`Package manager: pnpm | npm | yarn | bun`).option(`--git`,`Initialize git repository`).option(`--no-git`,`Skip git initialization`).option(`--install`,`Install dependencies after scaffolding`).option(`--no-install`,`Skip dependency installation`).option(`-f, --force`,`Remove existing files without prompting`).option(`-t, --template <type>`,`Project template: rest | minimal | fullstack | inertia`).option(`--runtime <engine>`,`HTTP runtime: express | fastify | h3`).option(`-r, --repo <type>`,`Repository name (inmemory, or any DB name e.g. postgres)`).option(`-s, --schema <lib>`,`Schema library for env / DTOs: zod | valibot | yup (default: zod)`).option(`--frontend <kind>`,`Fullstack web/ scaffold: 'kick' (wired React app) or 'vite' (create-vite, unwired)`).option(`--vite-template <name>`,`create-vite TypeScript template for --frontend vite (default 'react-ts')`).option(`--packages <packages>`,`Comma-separated packages to include (e.g. swagger,ws,queue,devtools)`).option(`--deploy <targets>`,`Comma-separated deploy targets to write files for: netlify, vercel, docker (later: kick g deploy)`).option(`-y, --yes`,`Pick safe defaults for every prompt (template=minimal, repo=inmemory, no extras, git+install on)`).option(`--non-interactive`,`alias for --yes`).action(async(e,t)=>{n(`KickJS — Create a new project`);let a=[];try{a=t.deploy?Me(t.deploy):[]}catch(e){f.error(e.message),r(`Aborted.`),process.exitCode=1;return}let o=!!(t.yes||t.nonInteractive);e||=o?`my-api`:await i({message:`Project name`,placeholder:`my-api`,defaultValue:`my-api`});let s;if(e===`.`?(s=P(`.`),e=ut(s)):s=P(t.directory||e),I(s)){let n=R(s);if(n.length>0){if(t.force)f.warn(`Clearing existing files in ${s}`);else if(o){f.warn(`Directory "${e}" is not empty. Pass --force to clear it.`),r(`Aborted.`);return}else{f.warn(`Directory "${e}" is not empty:`);let t=n.slice(0,5);for(let e of t)f.message(` - ${e}`);if(n.length>5&&f.message(` ... and ${n.length-5} more`),!await c({message:p.red(`Remove all existing files and proceed?`),initialValue:!1})){r(`Aborted.`);return}}for(let e of n)pt(P(s,e),{recursive:!0,force:!0})}}let u=t.template;u||=o?`minimal`:await l({message:`Project template`,options:[{value:`rest`,label:`REST API`,hint:`Express + Swagger`},{value:`minimal`,label:`Minimal`,hint:`bare Express`},{value:`fullstack`,label:`Fullstack`,hint:`server + Vite React web, typed client`},{value:`inertia`,label:`Inertia`,hint:`server-driven React pages, one app, SSR`}]});let h=t.runtime;h||=o?`express`:await l({message:`HTTP runtime`,options:[{value:`express`,label:`Express`,hint:`default, zero-config`},{value:`fastify`,label:`Fastify`,hint:`fastify + @fastify/middie`},{value:`h3`,label:`h3`,hint:`Nitro / Nuxt engine`}]});let g=t.pm;g||=o?await d(void 0):await l({message:`Package manager`,options:[{value:`pnpm`,label:`pnpm`},{value:`npm`,label:`npm`},{value:`yarn`,label:`yarn`},{value:`bun`,label:`bun`}]});let _=t.repo;_||=o?`inmemory`:await i({message:`Repository name`,placeholder:`inmemory (or a DB name, e.g. postgres)`,defaultValue:`inmemory`}),Ee(_);let v=t.schema;u===`inertia`&&(v&&v!==`zod`&&f.warn(`The inertia template uses zod — ignoring --schema ${v}.`),v=`zod`),v||=o?`zod`:await l({message:`Schema library (env + DTO validation)`,options:[{value:`zod`,label:`Zod`,hint:`default — broad ecosystem`},{value:`valibot`,label:`Valibot`,hint:`smaller bundle`},{value:`yup`,label:`Yup`,hint:`classic API`}]}),[`zod`,`valibot`,`yup`].includes(v)||(f.warn(`Unknown --schema "${v}", falling back to zod.`),v=`zod`);let y;if(t.packages!==void 0){let e=t.packages.trim().toLowerCase();y=e===``||e===`none`||e===`false`?[]:t.packages.split(`,`).map(e=>e.trim()).filter(Boolean)}else y=o?[]:await m({message:`Select packages to include`,options:[...At],required:!1});let b;b=t.git===void 0?o?!0:await c({message:`Initialize git repository?`,initialValue:!0}):t.git;let x;if(x=t.install===void 0?o?!0:await c({message:`Install dependencies?`,initialValue:!0}):t.install,t.frontend!==void 0&&t.frontend!==`kick`&&t.frontend!==`vite`){f.error(`Unknown --frontend '${String(t.frontend)}'. Use 'kick' (wired React app) or 'vite' (create-vite).`),r(`Aborted.`);return}let{VITE_TEMPLATES:S,DEFAULT_VITE_TEMPLATE:ee}=await import(`./fullstack-Cr5tath7.mjs`);if(t.viteTemplate!==void 0&&!S.some(e=>e.value===t.viteTemplate)){f.error(`Unknown --vite-template '${String(t.viteTemplate)}'. TypeScript templates only: ${S.map(e=>e.value).join(`, `)}.`),r(`Aborted.`);return}let te=t.frontend===`vite`?`vite`:`kick`,C=t.viteTemplate??ee;if(u===`fullstack`&&!t.frontend&&!o&&(te=await l({message:`Frontend for web/`,options:[{value:`kick`,label:`KickJS React app`,hint:`typed client, /api proxy, route types — wired`},{value:`vite`,label:`Delegate to create-vite`,hint:`pick any framework; wiring is manual (guide printed after)`}]})),te===`vite`&&!t.viteTemplate&&!o&&(C=await l({message:`create-vite template`,options:S.map(e=>({value:e.value,label:e.label})),initialValue:ee})),u===`fullstack`){let{initFullstackProject:t}=await import(`./fullstack-Cr5tath7.mjs`);await t({name:e,directory:s,packageManager:g,initGit:b,installDeps:x,schemaLib:v,runtime:h,packages:y,frontend:te,viteTemplate:C,deploy:a}),r(`Done! Next steps: ${p.cyan(`cd ${e} && ${g}${g===`pnpm`?` dev`:` run dev:server`}`)}`)}else await Ie({name:e,directory:s,packageManager:g,initGit:b,installDeps:x,template:u,defaultRepo:_,packages:y,schemaLib:v,runtime:h,deploy:a}),r(`Done! Next steps: ${p.cyan(`cd ${e} && ${ke(g,`dev`)}`)}`)})}function Mt(e,t=[]){let n=/* @__PURE__ */ new Map;for(let t of e){let e=(n.get(t.name)??0)+1;if(n.set(t.name,e),e===2)throw new Re(`plugin`,t.name,[t.name,t.name])}let r=/* @__PURE__ */ new Map,i=[];for(let t of e)for(let e of t.commands??[]){let n=r.get(e.name);if(n)throw new Re(`command`,e.name,[n,t.name]);r.set(e.name,t.name),i.push(e)}let a=new Set(t.map(e=>e.name)),o=[...i.filter(e=>!a.has(e.name)),...t],s=/* @__PURE__ */ new Map,c=[];for(let t of e)for(let e of t.typegens??[]){let n=s.get(e.id);if(n)throw new Re(`typegen`,e.id,[n,t.name]);s.set(e.id,t.name),c.push(e)}let l=/* @__PURE__ */ new Map,u=[];for(let t of e)for(let e of t.generators??[]){let n=l.get(e.name);if(n)throw new Re(`generator`,e.name,[n,t.name]);l.set(e.name,t.name),u.push({source:t.name,spec:e})}return{commands:o,typegens:c,generators:u,register:async(t,n)=>{let r;if(n)r={generators:u,...n};else{let{findProjectRoot:e}=await import(`./project-root-C4lAZePJ.mjs`).then(e=>e.n),t=process.cwd();r={cwd:t,projectRoot:e(t),config:null,log:()=>{},generators:u}}for(let n of e)n.register&&await n.register(t,r)}}}async function Nt(e){let{name:n,outDir:r}=e,i=C(n),a=x(n),o=[],s=M(r,`${i}.plugin.ts`);return await t(s,`import {
11
+ import{t as e}from"./rolldown-runtime-Bn82Wzut.mjs";import{_ as t,a as n,c as r,d as i,f as a,g as o,h as s,i as c,l,m as u,n as d,o as f,p,s as m,t as h,u as g}from"./package-manager-CSsqVTZ-.mjs";import{A as _,C as v,D as y,E as b,F as x,M as S,N as ee,O as te,P as C,S as ne,T as re,_ as ie,a as ae,b as oe,c as se,f as ce,g as le,h as ue,i as de,j as fe,k as pe,l as me,m as he,p as ge,r as _e,u as ve,v as ye,w as be,x as xe,y as Se}from"./doctor-BDlJqXWX.mjs";import{a as Ce,c as w,d as we,f as Te,h as Ee,l as T,m as De,o as Oe,p as ke,s as E,u as Ae}from"./config-D0zuz3Fx.mjs";import{d as je,f as Me,o as Ne,r as Pe,s as Fe,t as Ie,u as Le}from"./project-B_yEOLE4.mjs";import{t as D}from"./project-root-DYJU7ROd.mjs";import{n as O,t as Re}from"./types-DJMtN7wo.mjs";import{t as ze}from"./build-eFEdQsTj.mjs";import{n as Be}from"./agent-docs-BxuvlGy4.mjs";import{C as Ve,S as He,_ as Ue,a as We,b as Ge,c as Ke,d as qe,f as Je,g as Ye,h as Xe,i as Ze,l as Qe,m as $e,o as et,p as tt,r as nt,s as rt,t as it,u as at,v as ot,w as st,x as k,y as ct}from"./typegen-B3mw3F07.mjs";import{createRequire as lt}from"node:module";import A,{basename as ut,dirname as j,join as M,relative as N,resolve as P,sep as F}from"node:path";import{cpSync as dt,existsSync as I,mkdirSync as ft,readFileSync as L,readdirSync as R,rmSync as pt,statSync as mt,writeFileSync as z}from"node:fs";import{copyFile as ht,mkdir as gt,readFile as B,readdir as _t,rm as vt,stat as yt,writeFile as bt}from"node:fs/promises";import{fork as xt,spawn as St,spawnSync as Ct}from"node:child_process";import{createHash as wt}from"node:crypto";import{fileURLToPath as Tt,pathToFileURL as V}from"node:url";import{parseSync as Et}from"oxc-parser";import{arch as Dt,platform as Ot,release as kt}from"node:os";const At=[{value:`swagger`,label:`Swagger`,hint:`OpenAPI docs`},{value:`ws`,label:`WebSocket`,hint:`rooms, heartbeat`},{value:`queue`,label:`Queue`,hint:`BullMQ/RabbitMQ/Kafka`},{value:`devtools`,label:`DevTools`,hint:`debug dashboard`},{value:`storage`,label:`Storage`,hint:`disk, S3 / R2 / MinIO`}];function jt(e){e.command(`new [name]`).alias(`init`).description(`Create a new KickJS project (use "." for current directory)`).option(`-d, --directory <dir>`,`Target directory (defaults to project name)`).option(`--pm <manager>`,`Package manager: pnpm | npm | yarn | bun`).option(`--git`,`Initialize git repository`).option(`--no-git`,`Skip git initialization`).option(`--install`,`Install dependencies after scaffolding`).option(`--no-install`,`Skip dependency installation`).option(`-f, --force`,`Remove existing files without prompting`).option(`-t, --template <type>`,`Project template: rest | minimal | fullstack | inertia`).option(`--runtime <engine>`,`HTTP runtime: express | fastify | h3`).option(`-r, --repo <type>`,`Repository name (inmemory, or any DB name e.g. postgres)`).option(`-s, --schema <lib>`,`Schema library for env / DTOs: zod | valibot | yup (default: zod)`).option(`--frontend <kind>`,`Fullstack web/ scaffold: 'kick' (wired React app) or 'vite' (create-vite, unwired)`).option(`--vite-template <name>`,`create-vite TypeScript template for --frontend vite (default 'react-ts')`).option(`--packages <packages>`,`Comma-separated packages to include (e.g. swagger,ws,queue,devtools)`).option(`--deploy <targets>`,`Comma-separated deploy targets to write files for: netlify, vercel, docker (later: kick g deploy)`).option(`-y, --yes`,`Pick safe defaults for every prompt (template=minimal, repo=inmemory, no extras, git+install on)`).option(`--non-interactive`,`alias for --yes`).action(async(e,t)=>{n(`KickJS — Create a new project`);let a=[];try{a=t.deploy?Me(t.deploy):[]}catch(e){f.error(e.message),r(`Aborted.`),process.exitCode=1;return}let o=!!(t.yes||t.nonInteractive);e||=o?`my-api`:await i({message:`Project name`,placeholder:`my-api`,defaultValue:`my-api`});let s;if(e===`.`?(s=P(`.`),e=ut(s)):s=P(t.directory||e),I(s)){let n=R(s);if(n.length>0){if(t.force)f.warn(`Clearing existing files in ${s}`);else if(o){f.warn(`Directory "${e}" is not empty. Pass --force to clear it.`),r(`Aborted.`);return}else{f.warn(`Directory "${e}" is not empty:`);let t=n.slice(0,5);for(let e of t)f.message(` - ${e}`);if(n.length>5&&f.message(` ... and ${n.length-5} more`),!await c({message:p.red(`Remove all existing files and proceed?`),initialValue:!1})){r(`Aborted.`);return}}for(let e of n)pt(P(s,e),{recursive:!0,force:!0})}}let u=t.template;u||=o?`minimal`:await l({message:`Project template`,options:[{value:`rest`,label:`REST API`,hint:`Express + Swagger`},{value:`minimal`,label:`Minimal`,hint:`bare Express`},{value:`fullstack`,label:`Fullstack`,hint:`server + Vite React web, typed client`},{value:`inertia`,label:`Inertia`,hint:`server-driven React pages, one app, SSR`}]});let h=t.runtime;h||=o?`express`:await l({message:`HTTP runtime`,options:[{value:`express`,label:`Express`,hint:`default, zero-config`},{value:`fastify`,label:`Fastify`,hint:`fastify + @fastify/middie`},{value:`h3`,label:`h3`,hint:`Nitro / Nuxt engine`}]});let g=t.pm;g||=o?await d(void 0):await l({message:`Package manager`,options:[{value:`pnpm`,label:`pnpm`},{value:`npm`,label:`npm`},{value:`yarn`,label:`yarn`},{value:`bun`,label:`bun`}]});let _=t.repo;_||=o?`inmemory`:await i({message:`Repository name`,placeholder:`inmemory (or a DB name, e.g. postgres)`,defaultValue:`inmemory`}),Ee(_);let v=t.schema;u===`inertia`&&(v&&v!==`zod`&&f.warn(`The inertia template uses zod — ignoring --schema ${v}.`),v=`zod`),v||=o?`zod`:await l({message:`Schema library (env + DTO validation)`,options:[{value:`zod`,label:`Zod`,hint:`default — broad ecosystem`},{value:`valibot`,label:`Valibot`,hint:`smaller bundle`},{value:`yup`,label:`Yup`,hint:`classic API`}]}),[`zod`,`valibot`,`yup`].includes(v)||(f.warn(`Unknown --schema "${v}", falling back to zod.`),v=`zod`);let y;if(t.packages!==void 0){let e=t.packages.trim().toLowerCase();y=e===``||e===`none`||e===`false`?[]:t.packages.split(`,`).map(e=>e.trim()).filter(Boolean)}else y=o?[]:await m({message:`Select packages to include`,options:[...At],required:!1});let b;b=t.git===void 0?o?!0:await c({message:`Initialize git repository?`,initialValue:!0}):t.git;let x;if(x=t.install===void 0?o?!0:await c({message:`Install dependencies?`,initialValue:!0}):t.install,t.frontend!==void 0&&t.frontend!==`kick`&&t.frontend!==`vite`){f.error(`Unknown --frontend '${String(t.frontend)}'. Use 'kick' (wired React app) or 'vite' (create-vite).`),r(`Aborted.`);return}let{VITE_TEMPLATES:S,DEFAULT_VITE_TEMPLATE:ee}=await import(`./fullstack-BWdQFw3R.mjs`);if(t.viteTemplate!==void 0&&!S.some(e=>e.value===t.viteTemplate)){f.error(`Unknown --vite-template '${String(t.viteTemplate)}'. TypeScript templates only: ${S.map(e=>e.value).join(`, `)}.`),r(`Aborted.`);return}let te=t.frontend===`vite`?`vite`:`kick`,C=t.viteTemplate??ee;if(u===`fullstack`&&!t.frontend&&!o&&(te=await l({message:`Frontend for web/`,options:[{value:`kick`,label:`KickJS React app`,hint:`typed client, /api proxy, route types — wired`},{value:`vite`,label:`Delegate to create-vite`,hint:`pick any framework; wiring is manual (guide printed after)`}]})),te===`vite`&&!t.viteTemplate&&!o&&(C=await l({message:`create-vite template`,options:S.map(e=>({value:e.value,label:e.label})),initialValue:ee})),u===`fullstack`){let{initFullstackProject:t}=await import(`./fullstack-BWdQFw3R.mjs`);await t({name:e,directory:s,packageManager:g,initGit:b,installDeps:x,schemaLib:v,runtime:h,packages:y,frontend:te,viteTemplate:C,deploy:a}),r(`Done! Next steps: ${p.cyan(`cd ${e} && ${g}${g===`pnpm`?` dev`:` run dev:server`}`)}`)}else await Ie({name:e,directory:s,packageManager:g,initGit:b,installDeps:x,template:u,defaultRepo:_,packages:y,schemaLib:v,runtime:h,deploy:a}),r(`Done! Next steps: ${p.cyan(`cd ${e} && ${ke(g,`dev`)}`)}`)})}function Mt(e,t=[]){let n=/* @__PURE__ */ new Map;for(let t of e){let e=(n.get(t.name)??0)+1;if(n.set(t.name,e),e===2)throw new Re(`plugin`,t.name,[t.name,t.name])}let r=/* @__PURE__ */ new Map,i=[];for(let t of e)for(let e of t.commands??[]){let n=r.get(e.name);if(n)throw new Re(`command`,e.name,[n,t.name]);r.set(e.name,t.name),i.push(e)}let a=new Set(t.map(e=>e.name)),o=[...i.filter(e=>!a.has(e.name)),...t],s=/* @__PURE__ */ new Map,c=[];for(let t of e)for(let e of t.typegens??[]){let n=s.get(e.id);if(n)throw new Re(`typegen`,e.id,[n,t.name]);s.set(e.id,t.name),c.push(e)}let l=/* @__PURE__ */ new Map,u=[];for(let t of e)for(let e of t.generators??[]){let n=l.get(e.name);if(n)throw new Re(`generator`,e.name,[n,t.name]);l.set(e.name,t.name),u.push({source:t.name,spec:e})}return{commands:o,typegens:c,generators:u,register:async(t,n)=>{let r;if(n)r={generators:u,...n};else{let{findProjectRoot:e}=await import(`./project-root-DYJU7ROd.mjs`).then(e=>e.n),t=process.cwd();r={cwd:t,projectRoot:e(t),config:null,log:()=>{},generators:u}}for(let n of e)n.register&&await n.register(t,r)}}}async function Nt(e){let{name:n,outDir:r}=e,i=C(n),a=x(n),o=[],s=M(r,`${i}.plugin.ts`);return await t(s,`import {
12
12
  definePlugin,
13
13
  type AppAdapter,
14
14
  type AppModuleEntry,
@@ -671,7 +671,7 @@ server.on('exit', () => {
671
671
  Cancelled.
672
672
  `);return}await vt(d,{recursive:!0,force:!0}),console.log(` Deleted: ${d}`);let f=M(r,`index.ts`);if(await s(f)){let e=await B(f,`utf-8`),n=e,r=RegExp(`^import\\s*\\{\\s*${_(l)}Module\\s*\\}\\s*from\\s*['"][^'"]*${_(u)}(?:/[^'"]*)?['"].*\\n?`,`gm`);e=e.replace(r,``),e=_r(e,l),e=e.replace(/\n{3,}/g,`
673
673
 
674
- `),e!==n&&(await t(f,e),console.log(` Unregistered: ${l}Module from ${f}`))}console.log(`\n Module '${u}' removed.\n`)}function yr(e){e.command(`remove`).alias(`rm`).description(`Remove generated code`).command(`module <names...>`).description(`Remove one or more modules (e.g. kick rm module user task)`).option(`--modules-dir <dir>`,`Modules directory`).option(`--pluralize`,`The module folder is pluralized (users/ for user)`).option(`--no-pluralize`,`The module folder is the name as typed (the default)`).option(`-f, --force`,`Skip confirmation prompt`).action(async(e,t)=>{let n=await E(process.cwd()),r=w(n),i=t.modulesDir??r.dir??`src/modules`,a=T(t.pluralize,r);for(let n of e)await vr({name:n,modulesDir:P(i),force:t.force,pluralize:a})})}function br(e){if(e!==void 0){if(e===`false`||e===`off`||e===`none`)return!1;if(e===`zod`)return`zod`;if(e===`kickjs-schema`||e===`schema`)return`kickjs-schema`;console.warn(` kick typegen: unknown --schema-validator '${e}' (supported: 'zod', 'kickjs-schema', 'false'). Falling back to project config.`)}}function xr(e){if(e!==void 0)return e===`false`||e===`off`||e===`none`?!1:e}function Sr(e){e.command(`typegen`).description(`Generate type-safe DI registry and module types into .kickjs/types/`).option(`-w, --watch`,`Watch source files and regenerate on change`).option(`-s, --src <dir>`,`Source directory to scan`,`src`).option(`-o, --out <dir>`,`Output directory`,`.kickjs/types`).option(`--silent`,`Suppress output`).option(`--allow-duplicates`,`Auto-namespace duplicate class names instead of failing (use with caution)`).option(`--schema-validator <name>`,`Schema validator for body/query/params typing (currently 'zod' or 'false')`).option(`--env-file <path>`,`Path to env schema file for KickEnv typing (default 'src/env.ts'; pass 'false' to disable)`).option(`--check`,`CI gate: exit non-zero if any generated file in .kickjs/types/ is out of date (routes, env, db, assets, adopter plugins) instead of writing it`).option(`--fix`,`Patch module import.meta.glob() calls to cover decorated classes that aren't loaded by any glob (orphans)`).option(`--list`,"List every registered typegen plugin id (use to populate `typegen.disable`)").option(`--no-cache`,`Disable the persistent scan cache; re-read + re-extract every file from cold`).action(async e=>{let t=D(process.cwd()),n=await E(t);if(e.list){let{mergeCliPlugins:e}=await import(`./plugin-DSgKyJSD.mjs`),{builtinCliPlugins:t}=await import(`./builtins-BWtf5CEP.mjs`),r=e([...t,...n?.plugins??[]],n?.commands??[]),i=new Set(n?.typegen?.disable??[]);if(r.typegens.length===0){console.log(` No typegen plugins registered.`);return}let a=Math.max(...r.typegens.map(e=>e.id.length));console.log(`
674
+ `),e!==n&&(await t(f,e),console.log(` Unregistered: ${l}Module from ${f}`))}console.log(`\n Module '${u}' removed.\n`)}function yr(e){e.command(`remove`).alias(`rm`).description(`Remove generated code`).command(`module <names...>`).description(`Remove one or more modules (e.g. kick rm module user task)`).option(`--modules-dir <dir>`,`Modules directory`).option(`--pluralize`,`The module folder is pluralized (users/ for user)`).option(`--no-pluralize`,`The module folder is the name as typed (the default)`).option(`-f, --force`,`Skip confirmation prompt`).action(async(e,t)=>{let n=await E(process.cwd()),r=w(n),i=t.modulesDir??r.dir??`src/modules`,a=T(t.pluralize,r);for(let n of e)await vr({name:n,modulesDir:P(i),force:t.force,pluralize:a})})}function br(e){if(e!==void 0){if(e===`false`||e===`off`||e===`none`)return!1;if(e===`zod`)return`zod`;if(e===`kickjs-schema`||e===`schema`)return`kickjs-schema`;console.warn(` kick typegen: unknown --schema-validator '${e}' (supported: 'zod', 'kickjs-schema', 'false'). Falling back to project config.`)}}function xr(e){if(e!==void 0)return e===`false`||e===`off`||e===`none`?!1:e}function Sr(e){e.command(`typegen`).description(`Generate type-safe DI registry and module types into .kickjs/types/`).option(`-w, --watch`,`Watch source files and regenerate on change`).option(`-s, --src <dir>`,`Source directory to scan`,`src`).option(`-o, --out <dir>`,`Output directory`,`.kickjs/types`).option(`--silent`,`Suppress output`).option(`--allow-duplicates`,`Auto-namespace duplicate class names instead of failing (use with caution)`).option(`--schema-validator <name>`,`Schema validator for body/query/params typing (currently 'zod' or 'false')`).option(`--env-file <path>`,`Path to env schema file for KickEnv typing (default 'src/env.ts'; pass 'false' to disable)`).option(`--check`,`CI gate: exit non-zero if any generated file in .kickjs/types/ is out of date (routes, env, db, assets, adopter plugins) instead of writing it`).option(`--fix`,`Patch module import.meta.glob() calls to cover decorated classes that aren't loaded by any glob (orphans)`).option(`--list`,"List every registered typegen plugin id (use to populate `typegen.disable`)").option(`--no-cache`,`Disable the persistent scan cache; re-read + re-extract every file from cold`).action(async e=>{let t=D(process.cwd()),n=await E(t);if(e.list){let{mergeCliPlugins:e}=await import(`./plugin-BXckYw0A.mjs`),{builtinCliPlugins:t}=await import(`./builtins-ubUekPfw.mjs`),r=e([...t,...n?.plugins??[]],n?.commands??[]),i=new Set(n?.typegen?.disable??[]);if(r.typegens.length===0){console.log(` No typegen plugins registered.`);return}let a=Math.max(...r.typegens.map(e=>e.id.length));console.log(`
675
675
  Registered typegen plugins:
676
676
  `);for(let e of r.typegens){let t=i.has(e.id)?` (disabled)`:``,n=`${e.id.replace(/\//g,`__`)}${e.outExtension??`.d.ts`}`;console.log(` ${e.id.padEnd(a+2)}→ .kickjs/types/${n}${t}`),console.log(` ${` `.repeat(a+2)} watches: ${e.inputs.join(`, `)||`(none)`}`)}console.log(`
677
677
  Disable one in kick.config.ts:
@@ -865,4 +865,4 @@ declare global {
865
865
  export {}
866
866
  `}const la=()=>({id:`kick/env`,outExtension:`.ts`,inputs:[`src/env.ts`,`src/**/env.ts`,`src/**/*.env.ts`],async generate(e){let t=da(e);if(t===!1)return null;let n=await e.getScanResult({root:ua(e),cwd:e.cwd,envFile:t});if(!n.env)return null;let r=e.config?.typegen?.schemaValidator??`zod`,i=A.resolve(e.cwd,`.kickjs/types/kick__env.ts`);return ca(n.env,i,r)}});function ua(e){return A.resolve(e.cwd,e.config?.typegen?.srcDir??`src`)}function da(e){return e.config?.typegen?.envFile}function fa(e){return A.resolve(e.cwd,e.config?.typegen?.srcDir??`src`)}function pa(e){let t=e.config?.typegen?.envFile;if(t!==!1)return t}function $(e){return{root:fa(e),cwd:e.cwd,envFile:pa(e)}}const ma=()=>({id:`kick/registry`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e)),n=A.resolve(e.cwd,`.kickjs/types/kick__registry.d.ts`),r=new Set(t.collisions.map(e=>e.className));return Je(t.classes,n,r)}}),ha=()=>({id:`kick/services`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e)),n=new Set(t.collisions.map(e=>e.className)),r=Qe(t.classes,t.tokens,t.injects,n);return $e(`ServiceToken`,r,"(no tokens discovered — declare with createToken<T>() or `kick g service <name>`)")}}),ga=()=>({id:`kick/modules`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return $e(`ModuleToken`,Ke(t.classes),"(no @Module classes discovered — `kick g module <name>` to add one)")}}),_a=()=>({id:`kick/plugins`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return qe(t.pluginsAndAdapters)}}),va=()=>({id:`kick/context`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return t.contextKeys.length===0?null:at(t.contextKeys)}}),ya=()=>({id:`kick/route-flags`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return tt(t.routeFlags)}}),ba={express:{subpath:`@forinda/kickjs/express`,typeName:`ExpressRuntimeTypes`},fastify:{subpath:`@forinda/kickjs/fastify`,typeName:`FastifyRuntimeTypes`},h3:{subpath:`@forinda/kickjs/h3`,typeName:`H3RuntimeTypes`}},xa=[O({name:`kick/init`,register:jt}),O({name:`kick/generate`,register:dn}),O({name:`kick/run`,register:kn}),O({name:`kick/info`,register:Pn}),O({name:`kick/inspect`,register:Un}),O({name:`kick/add`,register:Ne}),O({name:`kick/list`,register:Fe}),O({name:`kick/explain`,register:Qn}),O({name:`kick/mcp`,register:lr}),O({name:`kick/tinker`,register:pr}),O({name:`kick/remove`,register:yr}),O({name:`kick/typegen`,register:Sr}),O({name:`kick/check`,register:Vr}),O({name:`kick/doctor`,register:_e}),O({name:`kick/env-command`,register:Jr}),O({name:`kick/codemod`,register:Xr}),O({name:`kick/deploy`,register:_i}),O({name:`kick/registry`,typegens:[ma()]}),O({name:`kick/services`,typegens:[ha()]}),O({name:`kick/modules`,typegens:[ga()]}),O({name:`kick/plugins`,typegens:[_a()]}),O({name:`kick/context`,typegens:[va()]}),O({name:`kick/route-flags`,typegens:[ya()]}),O({name:`kick/assets`,typegens:[vi()]}),O({name:`kick/routes`,typegens:[Oi()]}),O({name:`kick/client`,typegens:[sa()]}),O({name:`kick/env`,typegens:[la()]}),O({name:`kick/runtime`,typegens:[{id:`kick/runtime`,outExtension:`.ts`,inputs:[`kick.config.ts`,`kick.config.js`,`kick.config.mjs`,`kick.config.json`],async generate(e){let t=e.config?.runtime??`express`;if(t!==`express`&&t!==`fastify`&&t!==`h3`)return null;let{subpath:n,typeName:r}=ba[t];return[`// Runtime escape-hatch types for the '${t}' engine (kick.config runtime).`,`declare module '@forinda/kickjs' {`,` interface KickRuntimeRegister {`,` runtime: import('${n}').${r}`,` }`,`}`,``,`export {}`,``].join(`
867
867
  `)}}]})];export{gn as applyDisableFilter,_n as n,Mt as r,K as runAllPluginTypegens,xa as t};
868
- //# sourceMappingURL=run-plugins-cqNounm7.mjs.map
868
+ //# sourceMappingURL=run-plugins-B8vUgyD4.mjs.map