@forinda/kickjs-cli 5.11.0 → 5.11.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 (24) hide show
  1. package/dist/{agent-docs-BuCTT-9g.mjs → agent-docs-CXqrGZLl.mjs} +3 -3
  2. package/dist/{agent-docs-BuCTT-9g.mjs.map → agent-docs-CXqrGZLl.mjs.map} +1 -1
  3. package/dist/{builtins-DOQNq7JT.mjs → builtins-BL1BhYEv.mjs} +2 -2
  4. package/dist/cli.mjs +2 -2
  5. package/dist/{config-DW9HQc2u.mjs → config-Cf8GU8CG.mjs} +3 -3
  6. package/dist/{config-DW9HQc2u.mjs.map → config-Cf8GU8CG.mjs.map} +1 -1
  7. package/dist/{doctor-Cin9GYv9.mjs → doctor-Dl709LzL.mjs} +5 -5
  8. package/dist/{doctor-Cin9GYv9.mjs.map → doctor-Dl709LzL.mjs.map} +1 -1
  9. package/dist/index.mjs +2 -2
  10. package/dist/{plugin-CcuuVb2P.mjs → plugin-C4hfxiPw.mjs} +3 -3
  11. package/dist/{plugin-CcuuVb2P.mjs.map → plugin-C4hfxiPw.mjs.map} +1 -1
  12. package/dist/{project-docs-CjnHf0Wd.mjs → project-docs-CfB-KVN5.mjs} +2 -2
  13. package/dist/{project-docs-CjnHf0Wd.mjs.map → project-docs-CfB-KVN5.mjs.map} +1 -1
  14. package/dist/{project-root-SRoIXPwv.mjs → project-root-CDYKLnfG.mjs} +3 -3
  15. package/dist/{project-root-SRoIXPwv.mjs.map → project-root-CDYKLnfG.mjs.map} +1 -1
  16. package/dist/{rolldown-runtime-BOORVFz_.mjs → rolldown-runtime-CeWwRE8g.mjs} +1 -1
  17. package/dist/{run-plugins-fsoovaEF.mjs → run-plugins-M_WVt-7a.mjs} +5 -5
  18. package/dist/run-plugins-M_WVt-7a.mjs.map +1 -0
  19. package/dist/{typegen-CSLwAvgI.mjs → typegen-CezcLjMb.mjs} +5 -5
  20. package/dist/{typegen-CSLwAvgI.mjs.map → typegen-CezcLjMb.mjs.map} +1 -1
  21. package/dist/{types-BZ1L4hvm.mjs → types-DvYczI2m.mjs} +2 -2
  22. package/dist/{types-BZ1L4hvm.mjs.map → types-DvYczI2m.mjs.map} +1 -1
  23. package/package.json +3 -3
  24. package/dist/run-plugins-fsoovaEF.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v5.11.0
2
+ * @forinda/kickjs-cli v5.11.1
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -8,5 +8,5 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import{t as e}from"./rolldown-runtime-BOORVFz_.mjs";import{dirname as t,parse as n,resolve as r}from"node:path";import{existsSync as i}from"node:fs";var a=e({findProjectRoot:()=>s});const o=[`kick.config.ts`,`kick.config.js`,`kick.config.mjs`,`kick.config.json`];function s(e=process.cwd()){let a=r(e),{root:s}=n(a),c=null,l=a;for(;;){for(let e of o)if(i(r(l,e)))return l;if(c===null&&i(r(l,`package.json`))&&(c=l),l===s)break;let e=t(l);if(e===l)break;l=e}return c??a}export{a as n,s as t};
12
- //# sourceMappingURL=project-root-SRoIXPwv.mjs.map
11
+ import{t as e}from"./rolldown-runtime-CeWwRE8g.mjs";import{dirname as t,parse as n,resolve as r}from"node:path";import{existsSync as i}from"node:fs";var a=e({findProjectRoot:()=>s});const o=[`kick.config.ts`,`kick.config.js`,`kick.config.mjs`,`kick.config.json`];function s(e=process.cwd()){let a=r(e),{root:s}=n(a),c=null,l=a;for(;;){for(let e of o)if(i(r(l,e)))return l;if(c===null&&i(r(l,`package.json`))&&(c=l),l===s)break;let e=t(l);if(e===l)break;l=e}return c??a}export{a as n,s as t};
12
+ //# sourceMappingURL=project-root-CDYKLnfG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-root-SRoIXPwv.mjs","names":[],"sources":["../src/utils/project-root.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { dirname, parse, resolve } from 'node:path'\n\nconst CONFIG_FILENAMES = ['kick.config.ts', 'kick.config.js', 'kick.config.mjs', 'kick.config.json']\n\n/**\n * Walk up from `startDir` looking for the project root. A directory\n * counts as the root when it contains any of:\n * - `kick.config.{ts,js,mjs,json}` (strongest signal)\n * - `package.json` (fallback when no config file exists yet)\n *\n * Returns the absolute path of the first matching directory, or\n * `startDir` itself when nothing was found (no surprises — callers\n * that didn't find a config still get a reasonable cwd).\n *\n * `kick.config.*` wins over `package.json` when both appear at\n * different levels, so adopters running `kick typegen` from `src/`\n * land on the project root that owns the config, not on the nearest\n * workspace package boundary in a monorepo.\n */\nexport function findProjectRoot(startDir: string = process.cwd()): string {\n const start = resolve(startDir)\n const { root: fsRoot } = parse(start)\n\n let firstPackageJson: string | null = null\n let cursor = start\n while (true) {\n for (const name of CONFIG_FILENAMES) {\n if (existsSync(resolve(cursor, name))) return cursor\n }\n if (firstPackageJson === null && existsSync(resolve(cursor, 'package.json'))) {\n firstPackageJson = cursor\n }\n if (cursor === fsRoot) break\n const parent = dirname(cursor)\n if (parent === cursor) break\n cursor = parent\n }\n\n return firstPackageJson ?? start\n}\n"],"mappings":";;;;;;;;;;sLAGA,MAAM,EAAmB,CAAC,iBAAkB,iBAAkB,kBAAmB,kBAAkB,EAiBnG,SAAgB,EAAgB,EAAmB,QAAQ,IAAI,EAAW,CACxE,IAAM,EAAQ,EAAQ,CAAQ,EACxB,CAAE,KAAM,GAAW,EAAM,CAAK,EAEhC,EAAkC,KAClC,EAAS,EACb,OAAa,CACX,IAAK,IAAM,KAAQ,EACjB,GAAI,EAAW,EAAQ,EAAQ,CAAI,CAAC,EAAG,OAAO,EAKhD,GAHI,IAAqB,MAAQ,EAAW,EAAQ,EAAQ,cAAc,CAAC,IACzE,EAAmB,GAEjB,IAAW,EAAQ,MACvB,IAAM,EAAS,EAAQ,CAAM,EAC7B,GAAI,IAAW,EAAQ,MACvB,EAAS,CACX,CAEA,OAAO,GAAoB,CAC7B"}
1
+ {"version":3,"file":"project-root-CDYKLnfG.mjs","names":[],"sources":["../src/utils/project-root.ts"],"sourcesContent":["import { existsSync } from 'node:fs'\nimport { dirname, parse, resolve } from 'node:path'\n\nconst CONFIG_FILENAMES = ['kick.config.ts', 'kick.config.js', 'kick.config.mjs', 'kick.config.json']\n\n/**\n * Walk up from `startDir` looking for the project root. A directory\n * counts as the root when it contains any of:\n * - `kick.config.{ts,js,mjs,json}` (strongest signal)\n * - `package.json` (fallback when no config file exists yet)\n *\n * Returns the absolute path of the first matching directory, or\n * `startDir` itself when nothing was found (no surprises — callers\n * that didn't find a config still get a reasonable cwd).\n *\n * `kick.config.*` wins over `package.json` when both appear at\n * different levels, so adopters running `kick typegen` from `src/`\n * land on the project root that owns the config, not on the nearest\n * workspace package boundary in a monorepo.\n */\nexport function findProjectRoot(startDir: string = process.cwd()): string {\n const start = resolve(startDir)\n const { root: fsRoot } = parse(start)\n\n let firstPackageJson: string | null = null\n let cursor = start\n while (true) {\n for (const name of CONFIG_FILENAMES) {\n if (existsSync(resolve(cursor, name))) return cursor\n }\n if (firstPackageJson === null && existsSync(resolve(cursor, 'package.json'))) {\n firstPackageJson = cursor\n }\n if (cursor === fsRoot) break\n const parent = dirname(cursor)\n if (parent === cursor) break\n cursor = parent\n }\n\n return firstPackageJson ?? start\n}\n"],"mappings":";;;;;;;;;;sLAGA,MAAM,EAAmB,CAAC,iBAAkB,iBAAkB,kBAAmB,kBAAkB,EAiBnG,SAAgB,EAAgB,EAAmB,QAAQ,IAAI,EAAW,CACxE,IAAM,EAAQ,EAAQ,CAAQ,EACxB,CAAE,KAAM,GAAW,EAAM,CAAK,EAEhC,EAAkC,KAClC,EAAS,EACb,OAAa,CACX,IAAK,IAAM,KAAQ,EACjB,GAAI,EAAW,EAAQ,EAAQ,CAAI,CAAC,EAAG,OAAO,EAKhD,GAHI,IAAqB,MAAQ,EAAW,EAAQ,EAAQ,cAAc,CAAC,IACzE,EAAmB,GAEjB,IAAW,EAAQ,MACvB,IAAM,EAAS,EAAQ,CAAM,EAC7B,GAAI,IAAW,EAAQ,MACvB,EAAS,CACX,CAEA,OAAO,GAAoB,CAC7B"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v5.11.0
2
+ * @forinda/kickjs-cli v5.11.1
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v5.11.0
2
+ * @forinda/kickjs-cli v5.11.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{_ as e,b as t,c as n,d as r,f as i,g as a,h as o,l as s,m as c,p as l,s as u,u as d,v as f,y as p}from"./project-docs-CjnHf0Wd.mjs";import{C as m,S as h,T as g,_,a as v,b as y,c as b,d as ee,f as te,g as ne,h as re,i as ie,l as ae,m as oe,p as se,r as ce,u as le,v as ue,w as x,x as de,y as fe}from"./doctor-Cin9GYv9.mjs";import{a as S,i as C,o as pe,t as me}from"./config-DW9HQc2u.mjs";import{t as he}from"./project-root-SRoIXPwv.mjs";import{n as w}from"./types-BZ1L4hvm.mjs";import{n as ge}from"./agent-docs-BuCTT-9g.mjs";import{n as _e}from"./plugin-CcuuVb2P.mjs";import{a as ve,c as ye,d as be,f as xe,h as Se,i as Ce,l as we,m as Te,o as Ee,p as De,r as Oe,s as ke,t as T,u as Ae}from"./typegen-CSLwAvgI.mjs";import E,{basename as je,dirname as D,isAbsolute as Me,join as O,relative as k,resolve as A,sep as Ne}from"node:path";import{cpSync as Pe,existsSync as j,mkdirSync as M,readFileSync as N,readdirSync as Fe,rmSync as Ie,statSync as Le,writeFileSync as Re}from"node:fs";import{copyFile as ze,mkdir as Be,readFile as P,readdir as Ve,rm as He,stat as Ue,writeFile as F}from"node:fs/promises";import{execSync as We,fork as Ge,spawn as Ke,spawnSync as qe}from"node:child_process";import{pathToFileURL as I}from"node:url";import{glob as Je}from"glob";import{groupAssetKeys as Ye}from"@forinda/kickjs";import{arch as Xe,platform as Ze,release as Qe}from"node:os";import{detectCompositeReferences as $e,generate as et,migrateDown as tt,migrateLatest as nt,migrateRollback as rt,migrateStatus as it,migrateUp as at,renderSchemaSource as ot,resolveDbConfig as st}from"@forinda/kickjs-db";const ct={kickjs:{pkg:`@forinda/kickjs`,peers:[`express`],description:`Unified framework: DI, decorators, routing, middleware`,core:!0},vite:{pkg:`@forinda/kickjs-vite`,peers:[`vite`],description:`Vite plugin: dev server, HMR, module discovery`,dev:!0,core:!0},cli:{pkg:`@forinda/kickjs-cli`,peers:[],description:`CLI tool and code generators`,dev:!0,core:!0},swagger:{pkg:`@forinda/kickjs-swagger`,peers:[],description:`OpenAPI spec + Swagger UI + ReDoc`},db:{pkg:`@forinda/kickjs-db`,peers:[],description:`kick/db core — schema DSL, migrations, KickDbClient, customType`},"db-pg":{pkg:`@forinda/kickjs-db-pg`,peers:[`pg`],description:`kick/db PostgreSQL dialect + adapter (pgDialect, pgAdapter)`},drizzle:{pkg:`@forinda/kickjs-drizzle`,peers:[`drizzle-orm`],description:`Drizzle ORM adapter + query builder`},prisma:{pkg:`@forinda/kickjs-prisma`,peers:[`@prisma/client`],description:`Prisma adapter + query builder`},ws:{pkg:`@forinda/kickjs-ws`,peers:[`socket.io`],description:`WebSocket with @WsController decorators`},devtools:{pkg:`@forinda/kickjs-devtools`,peers:[],description:`Development dashboard — routes, DI, metrics, health`,dev:!0},queue:{pkg:`@forinda/kickjs-queue`,peers:[],description:`Queue adapter (BullMQ/RabbitMQ/Kafka)`},"queue:bullmq":{pkg:`@forinda/kickjs-queue`,peers:[`bullmq`,`ioredis`],description:`Queue with BullMQ + Redis`},"queue:rabbitmq":{pkg:`@forinda/kickjs-queue`,peers:[`amqplib`],description:`Queue with RabbitMQ`},"queue:kafka":{pkg:`@forinda/kickjs-queue`,peers:[`kafkajs`],description:`Queue with Kafka`},"queue:redis-pubsub":{pkg:`@forinda/kickjs-queue`,peers:[`ioredis`],description:`Lightweight pub/sub via Redis (no persistence)`},mcp:{pkg:`@forinda/kickjs-mcp`,peers:[`@modelcontextprotocol/sdk`],description:`Model Context Protocol server — expose @Controller endpoints as AI tools`},testing:{pkg:`@forinda/kickjs-testing`,peers:[],description:`Test utilities and TestModule builder`,dev:!0}};function L(e,t=process.cwd()){let n=t;for(;;){if(j(A(n,e)))return n;let t=D(n);if(t===n)return null;n=t}}function lt(){return L(`pnpm-lock.yaml`)?`pnpm`:L(`yarn.lock`)?`yarn`:L(`bun.lockb`)||L(`bun.lock`)?`bun`:L(`package-lock.json`)?`npm`:null}function ut(){let e=process.cwd();for(;e;){let t=A(e,`package.json`);if(j(t))try{let e=JSON.parse(N(t,`utf-8`)).packageManager;if(typeof e==`string`){let t=e.split(`@`)[0];if(me.includes(t))return t}}catch{}let n=D(e);if(n===e)return null;e=n}return null}async function dt(e){if(e&&me.includes(e))return{pm:e,source:`flag`};let t=await C(process.cwd());if(t?.packageManager&&me.includes(t.packageManager))return{pm:t.packageManager,source:`config`};let n=ut();if(n)return{pm:n,source:`package.json`};let r=lt();return r?{pm:r,source:`lockfile`}:{pm:`npm`,source:`default`}}async function ft(e){let{pm:t}=await dt(e);return t}function pt(e=!1){let t=Object.entries(ct),n=Math.max(...t.map(([e])=>e.length)),r=t.filter(([,e])=>e.core),i=t.filter(([,e])=>!e.core),a=([e,t])=>{let r=e.padEnd(n+2),i=t.peers.length?` (+ ${t.peers.join(`, `)})`:``;return` ${r} ${t.description}${i}`};console.log(`
11
+ import{_ as e,b as t,c as n,d as r,f as i,g as a,h as o,l as s,m as c,p as l,s as u,u as d,v as f,y as p}from"./project-docs-CfB-KVN5.mjs";import{C as m,S as h,T as g,_,a as v,b as y,c as b,d as ee,f as te,g as ne,h as re,i as ie,l as ae,m as oe,p as se,r as ce,u as le,v as ue,w as x,x as de,y as fe}from"./doctor-Dl709LzL.mjs";import{a as S,i as C,o as pe,t as me}from"./config-Cf8GU8CG.mjs";import{t as he}from"./project-root-CDYKLnfG.mjs";import{n as w}from"./types-DvYczI2m.mjs";import{n as ge}from"./agent-docs-CXqrGZLl.mjs";import{n as _e}from"./plugin-C4hfxiPw.mjs";import{a as ve,c as ye,d as be,f as xe,h as Se,i as Ce,l as we,m as Te,o as Ee,p as De,r as Oe,s as ke,t as T,u as Ae}from"./typegen-CezcLjMb.mjs";import E,{basename as je,dirname as D,isAbsolute as Me,join as O,relative as k,resolve as A,sep as Ne}from"node:path";import{cpSync as Pe,existsSync as j,mkdirSync as M,readFileSync as N,readdirSync as Fe,rmSync as Ie,statSync as Le,writeFileSync as Re}from"node:fs";import{copyFile as ze,mkdir as Be,readFile as P,readdir as Ve,rm as He,stat as Ue,writeFile as F}from"node:fs/promises";import{execSync as We,fork as Ge,spawn as Ke,spawnSync as qe}from"node:child_process";import{pathToFileURL as I}from"node:url";import{glob as Je}from"glob";import{groupAssetKeys as Ye}from"@forinda/kickjs";import{arch as Xe,platform as Ze,release as Qe}from"node:os";import{detectCompositeReferences as $e,generate as et,migrateDown as tt,migrateLatest as nt,migrateRollback as rt,migrateStatus as it,migrateUp as at,renderSchemaSource as ot,resolveDbConfig as st}from"@forinda/kickjs-db";const ct={kickjs:{pkg:`@forinda/kickjs`,peers:[`express`],description:`Unified framework: DI, decorators, routing, middleware`,core:!0},vite:{pkg:`@forinda/kickjs-vite`,peers:[`vite`],description:`Vite plugin: dev server, HMR, module discovery`,dev:!0,core:!0},cli:{pkg:`@forinda/kickjs-cli`,peers:[],description:`CLI tool and code generators`,dev:!0,core:!0},swagger:{pkg:`@forinda/kickjs-swagger`,peers:[],description:`OpenAPI spec + Swagger UI + ReDoc`},db:{pkg:`@forinda/kickjs-db`,peers:[],description:`kick/db core — schema DSL, migrations, KickDbClient, customType`},"db-pg":{pkg:`@forinda/kickjs-db-pg`,peers:[`pg`],description:`kick/db PostgreSQL dialect + adapter (pgDialect, pgAdapter)`},drizzle:{pkg:`@forinda/kickjs-drizzle`,peers:[`drizzle-orm`],description:`Drizzle ORM adapter + query builder`},prisma:{pkg:`@forinda/kickjs-prisma`,peers:[`@prisma/client`],description:`Prisma adapter + query builder`},ws:{pkg:`@forinda/kickjs-ws`,peers:[`socket.io`],description:`WebSocket with @WsController decorators`},devtools:{pkg:`@forinda/kickjs-devtools`,peers:[],description:`Development dashboard — routes, DI, metrics, health`,dev:!0},queue:{pkg:`@forinda/kickjs-queue`,peers:[],description:`Queue adapter (BullMQ/RabbitMQ/Kafka)`},"queue:bullmq":{pkg:`@forinda/kickjs-queue`,peers:[`bullmq`,`ioredis`],description:`Queue with BullMQ + Redis`},"queue:rabbitmq":{pkg:`@forinda/kickjs-queue`,peers:[`amqplib`],description:`Queue with RabbitMQ`},"queue:kafka":{pkg:`@forinda/kickjs-queue`,peers:[`kafkajs`],description:`Queue with Kafka`},"queue:redis-pubsub":{pkg:`@forinda/kickjs-queue`,peers:[`ioredis`],description:`Lightweight pub/sub via Redis (no persistence)`},mcp:{pkg:`@forinda/kickjs-mcp`,peers:[`@modelcontextprotocol/sdk`],description:`Model Context Protocol server — expose @Controller endpoints as AI tools`},testing:{pkg:`@forinda/kickjs-testing`,peers:[],description:`Test utilities and TestModule builder`,dev:!0}};function L(e,t=process.cwd()){let n=t;for(;;){if(j(A(n,e)))return n;let t=D(n);if(t===n)return null;n=t}}function lt(){return L(`pnpm-lock.yaml`)?`pnpm`:L(`yarn.lock`)?`yarn`:L(`bun.lockb`)||L(`bun.lock`)?`bun`:L(`package-lock.json`)?`npm`:null}function ut(){let e=process.cwd();for(;e;){let t=A(e,`package.json`);if(j(t))try{let e=JSON.parse(N(t,`utf-8`)).packageManager;if(typeof e==`string`){let t=e.split(`@`)[0];if(me.includes(t))return t}}catch{}let n=D(e);if(n===e)return null;e=n}return null}async function dt(e){if(e&&me.includes(e))return{pm:e,source:`flag`};let t=await C(process.cwd());if(t?.packageManager&&me.includes(t.packageManager))return{pm:t.packageManager,source:`config`};let n=ut();if(n)return{pm:n,source:`package.json`};let r=lt();return r?{pm:r,source:`lockfile`}:{pm:`npm`,source:`default`}}async function ft(e){let{pm:t}=await dt(e);return t}function pt(e=!1){let t=Object.entries(ct),n=Math.max(...t.map(([e])=>e.length)),r=t.filter(([,e])=>e.core),i=t.filter(([,e])=>!e.core),a=([e,t])=>{let r=e.padEnd(n+2),i=t.peers.length?` (+ ${t.peers.join(`, `)})`:``;return` ${r} ${t.description}${i}`};console.log(`
12
12
  Core packages (always installed by \`kick new\`):
13
13
  `);for(let e of r)console.log(a(e));if(e){console.log(`
14
14
  Optional packages (add as needed):
@@ -695,7 +695,7 @@ describe('${s}', () => {
695
695
  `,l=``;if(j(o)&&(l=await P(o,`utf8`)),l===c){a.push({id:n.id,status:`unchanged`,outFile:o});continue}if(e.check)throw Error(`kick typegen --check: drift detected for ${n.id} (${o})`);await F(o,c,`utf8`),a.push({id:n.id,status:`written`,outFile:o})}return a}function sn(e){let t=(e.extensions??[]).slice().toSorted().join(`,`),n=(e.exclude??[]).slice().toSorted().join(`,`);return[`root=${e.root}`,`cwd=${e.cwd}`,`extensions=${t}`,`exclude=${n}`,`envFile=${e.envFile??``}`].join(`|`)}function cn(e,t){let n=new Set(t),r=[],i=[],a=new Set;for(let t of e)n.has(t.id)?(i.push(t),a.add(t.id)):r.push(t);return{enabled:r,skipped:i,unknown:[...n].filter(e=>!a.has(e))}}async function U(e){let{enabled:t,skipped:n,unknown:r}=cn(_e([...Hr,...e.config?.plugins??[]],e.config?.commands??[]).typegens,e.config?.typegen?.disable??[]);if(!e.silent&&n.length>0)for(let e of n)console.log(` ${e.id}: disabled (typegen.disable)`);if(!e.silent&&r.length>0&&console.warn(` kick typegen: disable list references unknown id(s): ${r.map(e=>`'${e}'`).join(`, `)}. Run \`kick typegen --list\` to see registered ids.`),t.length===0)return[];try{let n=await on({cwd:e.cwd,config:e.config??{},plugins:t,check:e.check});if(!e.silent)for(let e of n)console.log(` ${e.id}: ${e.status}`);return n}catch(t){if(!e.silent){let e=t instanceof Error?t.message:String(t);console.warn(` kick typegen plugins: skipped (${e})`)}return[]}}async function ln(e,t){let{cwd:n,silent:r=!1}=t,i=t.distDir??e?.build?.outDir??`dist`,a=e?.assetMap;if(!a||Object.keys(a).length===0)return null;let o=r?()=>{}:console.log,s=A(n,i);M(s,{recursive:!0});let c=[],l={};for(let[e,t]of Object.entries(a)){let r=await un(e,t,n,s);c.push(r.entrySummary),Object.assign(l,r.manifestSlice),o(` ✓ ${e}: ${r.entrySummary.filesCopied} file(s) → ${r.entrySummary.dest}`)}let u={version:1,entries:l},d=O(s,`.kickjs-assets.json`);return Re(d,JSON.stringify(u,null,2)+`
696
696
  `,`utf-8`),o(` ✓ wrote manifest → ${k(n,d)} (${Object.keys(l).length} entries)`),{manifestPath:d,entries:c,manifest:u}}async function un(e,t,n,r){let i=A(n,t.src),a=t.dest?A(n,t.dest):O(r,e);if(fn(a,n))return console.warn(` ⚠ assetMap.${e}.dest ('${t.dest}') resolves outside the project root — skipping copy`),{entrySummary:{namespace:e,src:t.src,dest:k(n,a),filesCopied:0},manifestSlice:{}};if(!j(i)||!pn(i))return{entrySummary:{namespace:e,src:t.src,dest:k(n,a),filesCopied:0},manifestSlice:{}};let o=await Je(t.glob??`**/*`,{cwd:i,nodir:!0,dot:!1,posix:!0});M(a,{recursive:!0});let s={},{pairs:c,collisionGroupsResolved:l}=Ye(e,[...o].toSorted(),{strategy:t.keys??`auto`});for(let{rel:e,key:t}of c){let n=O(i,e),o=O(a,e);M(D(o),{recursive:!0}),Pe(n,o),s[t]=dn(r,o)}return l>0&&console.log(` ℹ assetMap.${e}: auto-resolved ${l} basename collision(s) by keeping extensions (set 'keys: "strip"' to opt back into legacy last-write-wins behaviour, or 'keys: "with-extension"' to keep all keys verbose).`),{entrySummary:{namespace:e,src:t.src,dest:k(n,a),filesCopied:o.length},manifestSlice:s}}function dn(e,t){return k(e,t).split(/[\\/]/).filter(Boolean).join(`/`)}function fn(e,t){let n=k(t,e);return n===``?!1:n.startsWith(`..`)||Me(n)}function pn(e){try{return Le(e).isDirectory()}catch{return!1}}function mn(e){if(typeof e==`boolean`)return e;let t=process.env.KICKJS_WATCH_POLLING;return t===`1`||t===`true`}async function hn(e,t,n={}){t&&(process.env.PORT=t);let r=mn(n.polling),i=process.cwd(),a=await C(i),o=a?.typegen?.schemaValidator??`zod`,s=a?.typegen?.envFile;try{await T({cwd:i,allowDuplicates:!0,schemaValidator:o,envFile:s,srcDir:a?.typegen?.srcDir,outDir:a?.typegen?.outDir,assetMap:a?.assetMap,runPlugins:!1})}catch(e){console.warn(` kick typegen: skipped (${e?.message??e})`)}let c=A(i,a?.typegen?.outDir??`.kickjs/types`);try{await Ce(c,await U({cwd:i,config:a}),!1)}catch(e){console.warn(` kick typegen: plugin pass skipped (${e?.message??e})`)}let{createRequire:l}=await import(`node:module`),{createServer:u}=await import(I(l(A(`package.json`)).resolve(`vite`)).href),d=await u({configFile:A(`vite.config.ts`),server:{port:t?parseInt(t,10):void 0,...r?{watch:{usePolling:!0,interval:100}}:{}}}),f=a?.assetMap?Object.values(a.assetMap).map(e=>e?.src).filter(e=>typeof e==`string`&&e.length>0).map(e=>A(i,e)):[],p=e=>f.some(t=>e===t||e.startsWith(`${t}/`)),m=null,h=e=>{if(e.includes(`.kickjs`)||e.endsWith(`.d.ts`))return;let t=/\.(ts|tsx|mts|cts)$/.test(e),n=p(e);!t&&!n||(m&&clearTimeout(m),m=setTimeout(()=>{T({cwd:i,silent:!0,allowDuplicates:!0,schemaValidator:o,envFile:s,srcDir:a?.typegen?.srcDir,outDir:a?.typegen?.outDir,assetMap:a?.assetMap,runPlugins:!1}).catch(()=>{}),U({cwd:i,config:a,silent:!0}).then(e=>Ce(c,e,!0)).catch(()=>{})},100))};d.watcher.on(`add`,h),d.watcher.on(`unlink`,h),d.watcher.on(`change`,h),f.length>0&&d.watcher.add(f),await d.listen(),d.printUrls(),console.log(`
697
697
  KickJS dev server running (Vite + @forinda/kickjs-vite)
698
- `);let g=async()=>{m&&clearTimeout(m),await d.close(),process.exit(0)};process.on(`SIGINT`,g),process.on(`SIGTERM`,g)}function gn(e){e.command(`dev`).description(`Start development server with Vite HMR (zero-downtime reload)`).option(`-e, --entry <file>`,`Entry file`,`src/index.ts`).option(`-p, --port <port>`,`Port number`).option(`--polling`,`Force chokidar to poll for file changes (Docker / WSL / NFS / older kernels)`).action(async e=>{try{await hn(e.entry,e.port,{polling:e.polling})}catch(e){e.code===`ERR_MODULE_NOT_FOUND`&&e.message?.includes(`vite`)?console.error(`
698
+ `);let g=!1,_=async()=>{if(!g){g=!0,m&&clearTimeout(m);try{await globalThis.__kickjs_app_shutdown?.()}catch(e){console.error(` app shutdown hook failed: ${e?.message??e}`)}await d.close(),process.exit(0)}};process.on(`SIGINT`,_),process.on(`SIGTERM`,_),process.on(`SIGBREAK`,_)}function gn(e){e.command(`dev`).description(`Start development server with Vite HMR (zero-downtime reload)`).option(`-e, --entry <file>`,`Entry file`,`src/index.ts`).option(`-p, --port <port>`,`Port number`).option(`--polling`,`Force chokidar to poll for file changes (Docker / WSL / NFS / older kernels)`).action(async e=>{try{await hn(e.entry,e.port,{polling:e.polling})}catch(e){e.code===`ERR_MODULE_NOT_FOUND`&&e.message?.includes(`vite`)?console.error(`
699
699
  Error: vite is not installed.
700
700
  Run: pnpm add -D vite unplugin-swc
701
701
  `):console.error(`
@@ -893,7 +893,7 @@ server.on('exit', () => {
893
893
  Cancelled.
894
894
  `);return}await He(l,{recursive:!0,force:!0}),console.log(` Deleted: ${l}`);let d=O(n,`index.ts`);if(await f(d)){let e=await P(d,`utf-8`),t=e,n=RegExp(`^import\\s*\\{\\s*${y(s)}Module\\s*\\}\\s*from\\s*['"][^'"]*${y(c)}(?:/[^'"]*)?['"].*\\n?`,`gm`);e=e.replace(n,``),e=Qn(e,s),e=e.replace(/\n{3,}/g,`
895
895
 
896
- `),e!==t&&(await F(d,e,`utf-8`),console.log(` Unregistered: ${s}Module from ${d}`))}console.log(`\n Module '${c}' removed.\n`)}function er(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=S(await C(process.cwd())),r=t.modulesDir??n.dir??`src/modules`,i=t.pluralize===!1?!1:n.pluralize??!0;for(let n of e)await $n({name:n,modulesDir:A(r),force:t.force,pluralize:i})})}function tr(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 nr(e){if(e!==void 0)return e===`false`||e===`off`||e===`none`?!1:e}function rr(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: fail on plugin-typegen drift instead of writing`).option(`--list`,"List every registered typegen plugin id (use to populate `typegen.disable`)").action(async e=>{let t=he(process.cwd()),n=await C(t);if(e.list){let{mergeCliPlugins:e}=await import(`./plugin-CcuuVb2P.mjs`).then(e=>e.t),{builtinCliPlugins:t}=await import(`./builtins-DOQNq7JT.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(`
896
+ `),e!==t&&(await F(d,e,`utf-8`),console.log(` Unregistered: ${s}Module from ${d}`))}console.log(`\n Module '${c}' removed.\n`)}function er(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=S(await C(process.cwd())),r=t.modulesDir??n.dir??`src/modules`,i=t.pluralize===!1?!1:n.pluralize??!0;for(let n of e)await $n({name:n,modulesDir:A(r),force:t.force,pluralize:i})})}function tr(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 nr(e){if(e!==void 0)return e===`false`||e===`off`||e===`none`?!1:e}function rr(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: fail on plugin-typegen drift instead of writing`).option(`--list`,"List every registered typegen plugin id (use to populate `typegen.disable`)").action(async e=>{let t=he(process.cwd()),n=await C(t);if(e.list){let{mergeCliPlugins:e}=await import(`./plugin-C4hfxiPw.mjs`).then(e=>e.t),{builtinCliPlugins:t}=await import(`./builtins-BL1BhYEv.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(`
897
897
  Registered typegen plugins:
898
898
  `);for(let e of r.typegens){let t=i.has(e.id)?` (disabled)`:``;console.log(` ${e.id.padEnd(a+2)}inputs: ${e.inputs.join(`, `)||`(none)`}${t}`)}console.log();return}let r=tr(e.schemaValidator)??n?.typegen?.schemaValidator??`zod`,i=nr(e.envFile)??n?.typegen?.envFile,a={cwd:t,srcDir:e.src??n?.typegen?.srcDir,outDir:e.out??n?.typegen?.outDir,silent:e.silent,allowDuplicates:e.allowDuplicates,schemaValidator:r,envFile:i,assetMap:n?.assetMap,runPlugins:!1};try{if(e.watch){let t=await Oe(a);e.silent||console.log(` kick typegen: watching for changes (Ctrl-C to exit)`);let n=()=>{t(),process.exit(0)};process.on(`SIGINT`,n),process.on(`SIGTERM`,n),await new Promise(()=>{})}else{await T(a);let r=await U({cwd:t,config:n??null,silent:e.silent,check:e.check});e.check&&r.some(e=>e.status===`written`)&&process.exit(1),e.check||await Ce(A(t,e.out??n?.typegen?.outDir??`.kickjs/types`),r,e.silent??!1)}}catch(e){e instanceof ke?console.error(`
899
899
  `+e.message+`
@@ -973,4 +973,4 @@ declare global {
973
973
 
974
974
  export {}
975
975
  `}const Lr=()=>({id:`kick/env`,outExtension:`.ts`,inputs:[`src/env.ts`,`src/**/env.ts`,`src/**/*.env.ts`],async generate(e){let t=zr(e);if(t===!1)return null;let n=await e.getScanResult({root:Rr(e),cwd:e.cwd,envFile:t});if(!n.env)return null;let r=e.config?.typegen?.schemaValidator??`zod`,i=E.resolve(e.cwd,`.kickjs/types/kick__env.ts`);return Ir(n.env,i,r)}});function Rr(e){return E.resolve(e.cwd,e.config?.typegen?.srcDir??`src`)}function zr(e){return e.config?.typegen?.envFile}function Br(e){return E.resolve(e.cwd,e.config?.typegen?.srcDir??`src`)}function Vr(e){let t=e.config?.typegen?.envFile;if(t!==!1)return t}function $(e){return{root:Br(e),cwd:e.cwd,envFile:Vr(e)}}const Hr=[w({name:`kick/init`,register:_t}),w({name:`kick/generate`,register:nn}),w({name:`kick/run`,register:gn}),w({name:`kick/info`,register:_n}),w({name:`kick/inspect`,register:Tn}),w({name:`kick/add`,register:ht}),w({name:`kick/list`,register:mt}),w({name:`kick/explain`,register:Fn}),w({name:`kick/mcp`,register:Wn}),w({name:`kick/tinker`,register:Jn}),w({name:`kick/remove`,register:er}),w({name:`kick/typegen`,register:rr}),w({name:`kick/check`,register:hr}),w({name:`kick/doctor`,register:ce}),w({name:`kick/db`,register:vr,typegens:[Sr()]}),w({name:`kick/codemod`,register:br}),w({name:`kick/registry`,typegens:[{id:`kick/registry`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e)),n=E.resolve(e.cwd,`.kickjs/types/kick__registry.d.ts`),r=new Set(t.collisions.map(e=>e.className));return De(t.classes,n,r)}}]}),w({name:`kick/services`,typegens:[{id:`kick/services`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e)),n=new Set(t.collisions.map(e=>e.className));return Te(`ServiceToken`,we(t.classes,t.tokens,t.injects,n),"(no tokens discovered — declare with createToken<T>() or `kick g service <name>`)")}}]}),w({name:`kick/modules`,typegens:[{id:`kick/modules`,inputs:[`src/**/*.ts`],async generate(e){return Te(`ModuleToken`,ye((await e.getScanResult($(e))).classes),"(no @Module classes discovered — `kick g module <name>` to add one)")}}]}),w({name:`kick/plugins`,typegens:[{id:`kick/plugins`,inputs:[`src/**/*.ts`],async generate(e){return xe((await e.getScanResult($(e))).pluginsAndAdapters)}}]}),w({name:`kick/augmentations`,typegens:[{id:`kick/augmentations`,inputs:[`src/**/*.ts`],async generate(e){return Ae((await e.getScanResult($(e))).augmentations)}}]}),w({name:`kick/context`,typegens:[{id:`kick/context`,inputs:[`src/**/*.ts`],async generate(e){let t=await e.getScanResult($(e));return t.contextKeys.length===0?null:be(t.contextKeys)}}]}),w({name:`kick/assets`,typegens:[Tr()]}),w({name:`kick/routes`,typegens:[Nr()]}),w({name:`kick/env`,typegens:[Lr()]})];export{cn as applyDisableFilter,U as runAllPluginTypegens,Hr as t};
976
- //# sourceMappingURL=run-plugins-fsoovaEF.mjs.map
976
+ //# sourceMappingURL=run-plugins-M_WVt-7a.mjs.map