@forinda/kickjs-cli 8.2.3 → 8.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agent-docs-Ckay-1_c.mjs → agent-docs-C6ZYsFJV.mjs} +3 -3
- package/dist/{agent-docs-Ckay-1_c.mjs.map → agent-docs-C6ZYsFJV.mjs.map} +1 -1
- package/dist/{agent-docs-ckWIFTVN.mjs → agent-docs-GCMhcDHy.mjs} +2 -2
- package/dist/{build-0-2XImDT.mjs → build-DTs2SHKS.mjs} +2 -2
- package/dist/{build-CVXO_yUd.mjs → build-hdxD_kEK.mjs} +3 -3
- package/dist/{build-CVXO_yUd.mjs.map → build-hdxD_kEK.mjs.map} +1 -1
- package/dist/{builtins-BFBP6hSP.mjs → builtins-BZGJgOyW.mjs} +2 -2
- package/dist/{builtins-DsF3W8nQ.mjs → builtins-Ci7vBC42.mjs} +8 -8
- package/dist/cli.mjs +2 -2
- package/dist/{config-CXqsXPQB.mjs → config-Bsokk8bV.mjs} +2 -2
- package/dist/{config-DDHiaBAp.mjs → config-Dgap2WmJ.mjs} +3 -3
- package/dist/{config-DDHiaBAp.mjs.map → config-Dgap2WmJ.mjs.map} +1 -1
- package/dist/{doctor-BoCM5VzN.mjs → doctor-Crq8eZsF.mjs} +4 -4
- package/dist/{doctor-BoCM5VzN.mjs.map → doctor-Crq8eZsF.mjs.map} +1 -1
- package/dist/{fullstack-DGH8LtUr.mjs → fullstack-C7Q-BJcj.mjs} +11 -15
- package/dist/{fullstack-TNXwfWim.mjs → fullstack-onQslndx.mjs} +12 -16
- package/dist/fullstack-onQslndx.mjs.map +1 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/{plugin-BIlCVqfL.mjs → plugin-BYqbu6uO.mjs} +2 -2
- package/dist/{plugin-_dzDQrjh.mjs → plugin-BuSzbyf2.mjs} +2 -2
- package/dist/project-4kpuS1ud.mjs +434 -0
- package/dist/{project-CbaOLcsd.mjs → project-BnXVCMd6.mjs} +32 -25
- package/dist/project-BnXVCMd6.mjs.map +1 -0
- package/dist/{project-docs-pgIpkegR.mjs → project-docs-CDr1HNPD.mjs} +2 -2
- package/dist/{project-docs-pgIpkegR.mjs.map → project-docs-CDr1HNPD.mjs.map} +1 -1
- package/dist/{project-docs-CjKscwGL.mjs → project-docs-Dn60gTjG.mjs} +1 -1
- package/dist/{project-root-DxyENcsv.mjs → project-root-B1lyUoe8.mjs} +3 -3
- package/dist/{project-root-DxyENcsv.mjs.map → project-root-B1lyUoe8.mjs.map} +1 -1
- package/dist/{project-root-DrOatPqt.mjs → project-root-B5MNmlIn.mjs} +2 -2
- package/dist/{prompts-CmfXdpn5.mjs → prompts-8ssKQ4Kn.mjs} +2 -2
- package/dist/{prompts-CmfXdpn5.mjs.map → prompts-8ssKQ4Kn.mjs.map} +1 -1
- package/dist/{rolldown-runtime-DYoa8wui.mjs → rolldown-runtime-DtbiLYsN.mjs} +1 -1
- package/dist/{run-plugins-RhPvviAu.mjs → run-plugins-CxuPMW4H.mjs} +7 -7
- package/dist/{run-plugins-RhPvviAu.mjs.map → run-plugins-CxuPMW4H.mjs.map} +1 -1
- package/dist/{typegen-BWgxNmXV.mjs → typegen-Ca46MGcE.mjs} +5 -5
- package/dist/{typegen-BWgxNmXV.mjs.map → typegen-Ca46MGcE.mjs.map} +1 -1
- package/dist/{typegen-CoIiSCqa.mjs → typegen-ClJqftm9.mjs} +4 -4
- package/dist/{types-CDQ5ghz9.mjs → types-CJlHwJb4.mjs} +1 -1
- package/package.json +3 -3
- package/dist/fullstack-TNXwfWim.mjs.map +0 -1
- package/dist/project-CbaOLcsd.mjs.map +0 -1
- package/dist/project-Dck92mbC.mjs +0 -427
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @forinda/kickjs-cli v8.2.
|
|
2
|
+
* @forinda/kickjs-cli v8.2.4
|
|
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-
|
|
11
|
+
import{t as e}from"./rolldown-runtime-DtbiLYsN.mjs";import{c as t,l as n,s as r}from"./project-docs-CDr1HNPD.mjs";import{a as i,c as a,d as o,i as s,l as c,n as l,o as u,r as d,s as f,t as p,u as m}from"./prompts-8ssKQ4Kn.mjs";import{A as h,C as g,D as _,E as v,M as y,N as b,O as ee,P as x,S as te,T as ne,_ as re,a as ie,b as ae,c as oe,f as se,g as ce,h as le,i as ue,j as de,k as fe,l as pe,m as me,p as he,r as ge,u as _e,v as ve,w as ye,x as be,y as xe}from"./doctor-Crq8eZsF.mjs";import{c as Se,f as Ce,r as we,s as Te,t as Ee,u as De}from"./project-BnXVCMd6.mjs";import{a as Oe,c as ke,i as Ae,l as je,o as S,s as C,u as Me}from"./config-Dgap2WmJ.mjs";import{t as w}from"./project-root-B1lyUoe8.mjs";import{n as T,t as E}from"./types-CJlHwJb4.mjs";import{t as Ne}from"./build-hdxD_kEK.mjs";import{n as Pe}from"./agent-docs-C6ZYsFJV.mjs";import{C as Fe,S as D,T as Ie,_ as Le,a as Re,b as ze,c as Be,d as Ve,f as He,g as Ue,h as We,i as Ge,l as Ke,m as qe,o as Je,p as Ye,r as Xe,s as Ze,t as O,u as Qe,v as $e,w as et,x as tt,y as nt}from"./typegen-Ca46MGcE.mjs";import{createRequire as rt}from"node:module";import k,{basename as it,dirname as A,join as j,relative as at,resolve as M,sep as ot}from"node:path";import{cpSync as st,existsSync as N,mkdirSync as ct,readFileSync as P,readdirSync as lt,rmSync as ut,writeFileSync as dt}from"node:fs";import{copyFile as ft,mkdir as pt,readFile as F,readdir as mt,rm as ht,stat as gt,writeFile as I}from"node:fs/promises";import{fork as _t,spawn as vt,spawnSync as yt}from"node:child_process";import{fileURLToPath as bt,pathToFileURL as L}from"node:url";import{parseSync as xt}from"oxc-parser";import{arch as St,platform as Ct,release as wt}from"node:os";import{createHash as Tt}from"node:crypto";const Et=[{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`}];function Dt(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`).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(`--packages <packages>`,`Comma-separated packages to include (e.g. swagger,ws,queue,devtools)`).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)=>{l(`KickJS — Create a new project`);let n=!!(t.yes||t.nonInteractive);e||=n?`my-api`:await a({message:`Project name`,placeholder:`my-api`,defaultValue:`my-api`});let r;if(e===`.`?(r=M(`.`),e=it(r)):r=M(t.directory||e),N(r)){let a=lt(r);if(a.length>0){if(t.force)d.warn(`Clearing existing files in ${r}`);else if(n){d.warn(`Directory "${e}" is not empty. Pass --force to clear it.`),i(`Aborted.`);return}else{d.warn(`Directory "${e}" is not empty:`);let t=a.slice(0,5);for(let e of t)d.message(` - ${e}`);if(a.length>5&&d.message(` ... and ${a.length-5} more`),!await p({message:m.red(`Remove all existing files and proceed?`),initialValue:!1})){i(`Aborted.`);return}}for(let e of a)ut(M(r,e),{recursive:!0,force:!0})}}let o=t.template;o||=n?`minimal`:await u({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`}]});let c=t.runtime;c||=n?`express`:await u({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 f=t.pm;f||=n?await De(void 0):await u({message:`Package manager`,options:[{value:`pnpm`,label:`pnpm`},{value:`npm`,label:`npm`},{value:`yarn`,label:`yarn`},{value:`bun`,label:`bun`}]});let h=t.repo;h||=n?`inmemory`:await a({message:`Repository name`,placeholder:`inmemory (or a DB name, e.g. postgres)`,defaultValue:`inmemory`}),Me(h);let g=t.schema;g||=n?`zod`:await u({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(g)||(d.warn(`Unknown --schema "${g}", falling back to zod.`),g=`zod`);let _;if(t.packages!==void 0){let e=t.packages.trim().toLowerCase();_=e===``||e===`none`||e===`false`?[]:t.packages.split(`,`).map(e=>e.trim()).filter(Boolean)}else _=n?[]:await s({message:`Select packages to include`,options:[...Et],required:!1});let v;v=t.git===void 0?n?!0:await p({message:`Initialize git repository?`,initialValue:!0}):t.git;let y;if(y=t.install===void 0?n?!0:await p({message:`Install dependencies?`,initialValue:!0}):t.install,o===`fullstack`){let{initFullstackProject:t}=await import(`./fullstack-onQslndx.mjs`);await t({name:e,directory:r,packageManager:f,initGit:v,installDeps:y,schemaLib:g,runtime:c}),i(`Done! Next steps: ${m.cyan(`cd ${e} && ${f}${f===`pnpm`?` dev`:` run dev:server`}`)}`);return}await Ee({name:e,directory:r,packageManager:f,initGit:v,installDeps:y,template:o,defaultRepo:h,packages:_,schemaLib:g,runtime:c}),i(`Done! Next steps: ${m.cyan(`cd ${e} && ${f} dev`)}`)})}function R(e,t=[]){let n=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 E(`plugin`,t.name,[t.name,t.name])}let r=new Map,i=[];for(let t of e)for(let e of t.commands??[]){let n=r.get(e.name);if(n)throw new E(`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=new Map,c=[];for(let t of e)for(let e of t.typegens??[]){let n=s.get(e.id);if(n)throw new E(`typegen`,e.id,[n,t.name]);s.set(e.id,t.name),c.push(e)}let l=new Map,u=[];for(let t of e)for(let e of t.generators??[]){let n=l.get(e.name);if(n)throw new E(`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-B1lyUoe8.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 Ot(e){let{name:t,outDir:r}=e,i=b(t),a=x(t),o=[],s=j(r,`${i}.plugin.ts`);return await n(s,`import {
|
|
12
12
|
definePlugin,
|
|
13
13
|
type AppAdapter,
|
|
14
14
|
type AppModuleEntry,
|
|
@@ -361,12 +361,12 @@ describe('${s}', () => {
|
|
|
361
361
|
`)}),e.command(`build:assets`).description(`Rebuild the .kickjs-assets.json manifest under the configured outDir (no JS rebuild)`).action(async()=>{let e=await S(process.cwd());if(!e?.assetMap||Object.keys(e.assetMap).length===0){console.log(` No assetMap entries — nothing to build.`);return}console.log(`
|
|
362
362
|
Building asset map...`);try{await Ne(e,{cwd:process.cwd()}),console.log(`
|
|
363
363
|
Asset build complete.
|
|
364
|
-
`)}catch(e){console.error(` ✗ ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}),e.command(`start`).description(`Start production server`).option(`-e, --entry <file>`,`Entry file`,`dist/index.js`).option(`-p, --port <port>`,`Port number`).action(e=>{let t={NODE_ENV:`production`};e.port&&(t.PORT=String(e.port)),
|
|
364
|
+
`)}catch(e){console.error(` ✗ ${e instanceof Error?e.message:String(e)}`),process.exit(1)}}),e.command(`start`).description(`Start production server`).option(`-e, --entry <file>`,`Entry file`,`dist/index.js`).option(`-p, --port <port>`,`Port number`).action(e=>{let t={NODE_ENV:`production`};e.port&&(t.PORT=String(e.port)),Ce(e.entry,t)}),e.command(`typecheck`).description(`Type-check the project with its own tsgo/tsc`).option(`--cwd <dir>`,`Directory to type-check`,`.`).option(`--no-typegen`,`Skip refreshing .kickjs/types first`).action(async e=>{let t=M(process.cwd(),e.cwd??`.`);e.typegen!==!1&&await _n(t);let n=dn(t);if(!n){console.error(`
|
|
365
365
|
No type-checker found. Install one in this project:
|
|
366
366
|
pnpm add -D typescript (tsc)
|
|
367
367
|
pnpm add -D @typescript/native-preview (tsgo, faster)
|
|
368
368
|
`),process.exit(1);return}let r=yt(n.cmd,n.args,{stdio:`inherit`,shell:n.shell,cwd:t});process.exit(r.status??1)}),e.command(`dev:debug`).description(`Start dev server with Node.js inspector attached`).option(`-e, --entry <file>`,`Entry file`,`src/index.ts`).option(`-p, --port <port>`,`Port number`).option(`--inspect-port <port>`,`Inspector port`,`9229`).option(`--inspect-host <host>`,`Inspector bind address (use 0.0.0.0 to reach it from outside a container)`,`127.0.0.1`).action(async e=>{let t=Number(e.inspectPort??`9229`),n=e.inspectHost??`127.0.0.1`;[`127.0.0.1`,`localhost`,`::1`].includes(n)||console.warn(` WARNING: the debugger is bound to ${n}, not loopback. Anyone who can\n reach port ${t} can run code in this process. Use it on a trusted\n network only, and prefer publishing the port from your container instead.`);let r;try{r=await hn(t,n)}catch(e){console.error(`\n Could not open the inspector on ${t}: ${e.message??e}\n Another process may already hold it — try --inspect-port <port>.`),process.exit(1);return}console.log(` Debugger: ${r}`);try{await gn(e.entry,e.port)}catch(e){console.error(`
|
|
369
|
-
Dev server (debug) failed:`,e.message??e),process.exit(1)}})}function yn(){try{let e=A(bt(import.meta.url));return JSON.parse(P(j(e,`..`,`package.json`),`utf-8`)).version??`unknown`}catch{return`unknown`}}const bn=new Set(Object.values(
|
|
369
|
+
Dev server (debug) failed:`,e.message??e),process.exit(1)}})}function yn(){try{let e=A(bt(import.meta.url));return JSON.parse(P(j(e,`..`,`package.json`),`utf-8`)).version??`unknown`}catch{return`unknown`}}const bn=new Set(Object.values(we).filter(e=>e.deprecated).map(e=>e.pkg));function xn(e){let t=j(e,`package.json`);if(!N(t))return[];let n;try{n=JSON.parse(P(t,`utf-8`))}catch{return[]}let r={...n.dependencies,...n.devDependencies};return Object.keys(r).filter(e=>e===`@forinda/kickjs`||e.startsWith(`@forinda/kickjs-`)).toSorted().map(t=>{let n=null,i=j(e,`node_modules`,...t.split(`/`),`package.json`);if(N(i))try{n=JSON.parse(P(i,`utf-8`)).version??null}catch{}return{name:t,installed:n,declared:r[t]??null,deprecated:bn.has(t)}})}function Sn(e){let t=e;for(;;){if(N(j(t,`package.json`)))return t;let e=A(t);if(e===t)return null;t=e}}function Cn(e){e.command(`info`).description(`Print system and framework info`).action(()=>{let e=[``,` KickJS CLI v${yn()}`,``,` System:`,` OS: ${Ct()} ${wt()} (${St()})`,` Node: ${process.version}`],t=Sn(process.cwd()),n=t?xn(t):[];if(!t)e.push(``,` Packages: (not inside a project — no package.json found)`);else if(n.length===0)e.push(``,` Packages: (no @forinda/kickjs* dependencies in ${t})`);else{e.push(``,` Packages:`);let t=Math.max(...n.map(e=>e.name.length));for(let r of n){let n=r.installed??`${r.declared??`?`} (declared — not installed)`,i=r.deprecated?" [DEPRECATED — see `kick add --list --all`]":``;e.push(` ${r.name.padEnd(t+2)} ${n}${i}`)}}e.push(``),console.log(e.join(`
|
|
370
370
|
`))})}const{bold:G,dim:K,green:wn,red:q,yellow:Tn,blue:En}=m;function Dn(e){let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60),i=e%60,a=[];return t&&a.push(`${t}d`),n&&a.push(`${n}h`),r&&a.push(`${r}m`),a.push(`${i}s`),a.join(` `)}async function On(e){let t=await fetch(e,{signal:AbortSignal.timeout(5e3)});if(!t.ok)throw Error(`${t.status} ${t.statusText}`);return t.json()}async function J(e,t){try{return await On(`${e}${t}`)}catch{return null}}async function kn(e){let[t,n,r,i,a]=await Promise.all([J(e,`/health`),J(e,`/metrics`),J(e,`/routes`),J(e,`/container`),J(e,`/ws`)]);return{health:t,metrics:n,routes:r,container:i,ws:a}}function An(e,t){let{health:n,metrics:r,routes:i,container:a,ws:o}=t,s=K(`─`.repeat(60));if(console.log(),console.log(G(` KickJS Inspector`)+K(` → ${e}`)),console.log(s),n){let e=n.status===`healthy`?wn(`● healthy`):q(`● `+n.status);console.log(` ${G(`Health:`)} ${e}`)}else console.log(` ${G(`Health:`)} ${q(`● unreachable`)}`);if(r){let e=((r.errorRate??0)*100).toFixed(1),t=r.errorRate>.1?q:r.errorRate>0?Tn:wn;console.log(` ${G(`Uptime:`)} ${Dn(r.uptimeSeconds)}`),console.log(` ${G(`Requests:`)} ${r.requests}`),console.log(` ${G(`Errors:`)} ${r.serverErrors} server, ${r.clientErrors??0} client ${K(`(`)}${t(e+`%`)}${K(`)`)}`)}if(a&&console.log(` ${G(`DI:`)} ${a.count} bindings`),o&&o.enabled&&console.log(` ${G(`WS:`)} ${o.connections??0} connections, ${o.namespaces??0} namespaces`),i?.routes?.length){console.log(),console.log(G(` Routes`)),console.log(s),console.log(` ${K(`METHOD`)} ${K(`PATH`.padEnd(36))} ${K(`CONTROLLER`)}`);for(let e of i.routes){let t=e.path.length>36?e.path.slice(0,33)+`...`:e.path.padEnd(36);console.log(` ${c(e.method)} ${t} ${En(e.controller)}.${K(e.handler)}`)}}console.log(s),console.log()}function jn(e){e.command(`inspect [url]`).description(`Connect to a running KickJS app and display debug info`).option(`-p, --port <port>`,`Override port`).option(`-w, --watch`,`Poll every 5 seconds`).option(`-j, --json`,`Output raw JSON`).action(async(e,t)=>{let n=e??`http://localhost:3000`;if(t.port)try{let e=new URL(n);e.port=t.port,n=e.origin}catch{n=`http://localhost:${t.port}`}let r=`${n.replace(/\/$/,``)}/_debug`,i=async()=>{try{let e=await kn(r);t.json?console.log(JSON.stringify(e,null,2)):An(n,e)}catch(e){t.json?console.log(JSON.stringify({error:String(e)})):(console.error(q(` ✖ Could not connect to ${n}`)),console.error(K(` ${e instanceof Error?e.message:String(e)}`))),t.watch||(process.exitCode=1)}};if(t.watch){let e=async()=>{process.stdout.write(`\x1B[2J\x1B[H`),await i()};await e(),setInterval(e,5e3)}else await i()})}function Y(e,t){let n=e.toLowerCase();return t.every(e=>n.includes(e.toLowerCase()))}function X(e,t){let n=e.toLowerCase();return t.some(e=>n.includes(e.toLowerCase()))}const Mn=[{match(e,t){let n=Y(e,[`config`,`get`])&&X(e,[`undefined`,`null`]),r=e.includes(`@Value`)&&X(e,[`undefined`,`is not defined`]);return!n&&!r?null:X(e,[`vitest`,`createTestApp`,`__tests__`,`.test.`,`.spec.`])?{confidence:85,diagnosis:{id:`env-schema-not-registered-in-test`,title:`ConfigService.get() returns undefined inside a test`,explanation:`The env schema is registered by a module-load side effect in
|
|
371
371
|
src/config/index.ts, and src/index.ts imports it before bootstrap().
|
|
372
372
|
Tests never load src/index.ts — \`createTestApp\` builds the app
|
|
@@ -676,7 +676,7 @@ server.on('exit', () => {
|
|
|
676
676
|
Cancelled.
|
|
677
677
|
`);return}await ht(l,{recursive:!0,force:!0}),console.log(` Deleted: ${l}`);let u=j(n,`index.ts`);if(await r(u)){let e=await F(u,`utf-8`),t=e,n=RegExp(`^import\\s*\\{\\s*${fe(s)}Module\\s*\\}\\s*from\\s*['"][^'"]*${fe(c)}(?:/[^'"]*)?['"].*\\n?`,`gm`);e=e.replace(n,``),e=ir(e,s),e=e.replace(/\n{3,}/g,`
|
|
678
678
|
|
|
679
|
-
`),e!==t&&(await I(u,e,`utf-8`),console.log(` Unregistered: ${s}Module from ${u}`))}console.log(`\n Module '${c}' removed.\n`)}function or(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(`--no-pluralize`,`Use singular module name`).option(`-f, --force`,`Skip confirmation prompt`).action(async(e,t)=>{let n=await S(process.cwd()),r=C(n),i=t.modulesDir??r.dir??`src/modules`,a=t.pluralize===!1?!1:r.pluralize??!0;for(let n of e)await ar({name:n,modulesDir:M(i),force:t.force,pluralize:a})})}function sr(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 cr(e){if(e!==void 0)return e===`false`||e===`off`||e===`none`?!1:e}function lr(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=w(process.cwd()),n=await S(t);if(e.list){let{mergeCliPlugins:e}=await import(`./plugin-
|
|
679
|
+
`),e!==t&&(await I(u,e,`utf-8`),console.log(` Unregistered: ${s}Module from ${u}`))}console.log(`\n Module '${c}' removed.\n`)}function or(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(`--no-pluralize`,`Use singular module name`).option(`-f, --force`,`Skip confirmation prompt`).action(async(e,t)=>{let n=await S(process.cwd()),r=C(n),i=t.modulesDir??r.dir??`src/modules`,a=t.pluralize===!1?!1:r.pluralize??!0;for(let n of e)await ar({name:n,modulesDir:M(i),force:t.force,pluralize:a})})}function sr(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 cr(e){if(e!==void 0)return e===`false`||e===`off`||e===`none`?!1:e}function lr(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=w(process.cwd()),n=await S(t);if(e.list){let{mergeCliPlugins:e}=await import(`./plugin-BYqbu6uO.mjs`),{builtinCliPlugins:t}=await import(`./builtins-BZGJgOyW.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(`
|
|
680
680
|
Registered typegen plugins:
|
|
681
681
|
`);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(`
|
|
682
682
|
Disable one in kick.config.ts:
|
|
@@ -831,6 +831,6 @@ declare global {
|
|
|
831
831
|
}
|
|
832
832
|
|
|
833
833
|
export {}
|
|
834
|
-
`}const Si=()=>({id:`kick/env`,outExtension:`.ts`,inputs:[`src/env.ts`,`src/**/env.ts`,`src/**/*.env.ts`],async generate(e){let t=wi(e);if(t===!1)return null;let n=await e.getScanResult({root:Ci(e),cwd:e.cwd,envFile:t});if(!n.env)return null;let r=e.config?.typegen?.schemaValidator??`zod`,i=k.resolve(e.cwd,`.kickjs/types/kick__env.ts`);return xi(n.env,i,r)}});function Ci(e){return k.resolve(e.cwd,e.config?.typegen?.srcDir??`src`)}function wi(e){return e.config?.typegen?.envFile}function Ti(e){return k.resolve(e.cwd,e.config?.typegen?.srcDir??`src`)}function Ei(e){let t=e.config?.typegen?.envFile;if(t!==!1)return t}function $(e){return{root:Ti(e),cwd:e.cwd,envFile:Ei(e)}}const Di=()=>({id:`kick/registry`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e)),n=k.resolve(e.cwd,`.kickjs/types/kick__registry.d.ts`),r=new Set(t.collisions.map(e=>e.className));return Ye(t.classes,n,r)}}),Oi=()=>({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=Ke(t.classes,t.tokens,t.injects,n);return We(`ServiceToken`,r,"(no tokens discovered — declare with createToken<T>() or `kick g service <name>`)")}}),ki=()=>({id:`kick/modules`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return We(`ModuleToken`,Be(t.classes),"(no @Module classes discovered — `kick g module <name>` to add one)")}}),Ai=()=>({id:`kick/plugins`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return He(t.pluginsAndAdapters)}}),ji=()=>({id:`kick/augmentations`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return Qe(t.augmentations)}}),Mi=()=>({id:`kick/context`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return t.contextKeys.length===0?null:Ve(t.contextKeys)}}),Ni=()=>({id:`kick/route-flags`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return qe(t.routeFlags)}}),Pi={fastify:{subpath:`@forinda/kickjs/fastify`,typeName:`FastifyRuntimeTypes`},h3:{subpath:`@forinda/kickjs/h3`,typeName:`H3RuntimeTypes`}},Fi=[T({name:`kick/init`,register:Dt}),T({name:`kick/generate`,register:rn}),T({name:`kick/run`,register:vn}),T({name:`kick/info`,register:Cn}),T({name:`kick/inspect`,register:jn}),T({name:`kick/add`,register:
|
|
834
|
+
`}const Si=()=>({id:`kick/env`,outExtension:`.ts`,inputs:[`src/env.ts`,`src/**/env.ts`,`src/**/*.env.ts`],async generate(e){let t=wi(e);if(t===!1)return null;let n=await e.getScanResult({root:Ci(e),cwd:e.cwd,envFile:t});if(!n.env)return null;let r=e.config?.typegen?.schemaValidator??`zod`,i=k.resolve(e.cwd,`.kickjs/types/kick__env.ts`);return xi(n.env,i,r)}});function Ci(e){return k.resolve(e.cwd,e.config?.typegen?.srcDir??`src`)}function wi(e){return e.config?.typegen?.envFile}function Ti(e){return k.resolve(e.cwd,e.config?.typegen?.srcDir??`src`)}function Ei(e){let t=e.config?.typegen?.envFile;if(t!==!1)return t}function $(e){return{root:Ti(e),cwd:e.cwd,envFile:Ei(e)}}const Di=()=>({id:`kick/registry`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e)),n=k.resolve(e.cwd,`.kickjs/types/kick__registry.d.ts`),r=new Set(t.collisions.map(e=>e.className));return Ye(t.classes,n,r)}}),Oi=()=>({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=Ke(t.classes,t.tokens,t.injects,n);return We(`ServiceToken`,r,"(no tokens discovered — declare with createToken<T>() or `kick g service <name>`)")}}),ki=()=>({id:`kick/modules`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return We(`ModuleToken`,Be(t.classes),"(no @Module classes discovered — `kick g module <name>` to add one)")}}),Ai=()=>({id:`kick/plugins`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return He(t.pluginsAndAdapters)}}),ji=()=>({id:`kick/augmentations`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return Qe(t.augmentations)}}),Mi=()=>({id:`kick/context`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return t.contextKeys.length===0?null:Ve(t.contextKeys)}}),Ni=()=>({id:`kick/route-flags`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return qe(t.routeFlags)}}),Pi={fastify:{subpath:`@forinda/kickjs/fastify`,typeName:`FastifyRuntimeTypes`},h3:{subpath:`@forinda/kickjs/h3`,typeName:`H3RuntimeTypes`}},Fi=[T({name:`kick/init`,register:Dt}),T({name:`kick/generate`,register:rn}),T({name:`kick/run`,register:vn}),T({name:`kick/info`,register:Cn}),T({name:`kick/inspect`,register:jn}),T({name:`kick/add`,register:Te}),T({name:`kick/list`,register:Se}),T({name:`kick/explain`,register:Bn}),T({name:`kick/mcp`,register:Xn}),T({name:`kick/tinker`,register:er}),T({name:`kick/remove`,register:or}),T({name:`kick/typegen`,register:lr}),T({name:`kick/check`,register:Or}),T({name:`kick/doctor`,register:ge}),T({name:`kick/codemod`,register:Ar}),T({name:`kick/registry`,typegens:[Di()]}),T({name:`kick/services`,typegens:[Oi()]}),T({name:`kick/modules`,typegens:[ki()]}),T({name:`kick/plugins`,typegens:[Ai()]}),T({name:`kick/augmentations`,typegens:[ji()]}),T({name:`kick/context`,typegens:[Mi()]}),T({name:`kick/route-flags`,typegens:[Ni()]}),T({name:`kick/assets`,typegens:[jr()]}),T({name:`kick/routes`,typegens:[Vr()]}),T({name:`kick/client`,typegens:[bi()]}),T({name:`kick/env`,typegens:[Si()]}),T({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;if(t!==`fastify`&&t!==`h3`)return null;let{subpath:n,typeName:r}=Pi[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(`
|
|
835
835
|
`)}}]})];export{ln as applyDisableFilter,un as n,R as r,W as runAllPluginTypegens,Fi as t};
|
|
836
|
-
//# sourceMappingURL=run-plugins-
|
|
836
|
+
//# sourceMappingURL=run-plugins-CxuPMW4H.mjs.map
|