@forinda/kickjs-cli 8.2.1 → 8.2.3

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 (40) hide show
  1. package/dist/{agent-docs-Cs-bx3Wr.mjs → agent-docs-Ckay-1_c.mjs} +3 -3
  2. package/dist/{agent-docs-Cs-bx3Wr.mjs.map → agent-docs-Ckay-1_c.mjs.map} +1 -1
  3. package/dist/{agent-docs-Cg1BfuI_.mjs → agent-docs-ckWIFTVN.mjs} +2 -2
  4. package/dist/{build-DyH5wLZq.mjs → build-0-2XImDT.mjs} +2 -2
  5. package/dist/{build-DMzg5-6r.mjs → build-CVXO_yUd.mjs} +3 -3
  6. package/dist/{build-DMzg5-6r.mjs.map → build-CVXO_yUd.mjs.map} +1 -1
  7. package/dist/{builtins-DTFeT76Q.mjs → builtins-BFBP6hSP.mjs} +2 -2
  8. package/dist/{builtins-Dv9usHP3.mjs → builtins-DsF3W8nQ.mjs} +6 -11
  9. package/dist/cli.mjs +2 -2
  10. package/dist/{config-CE8SsnG0.mjs → config-CXqsXPQB.mjs} +2 -2
  11. package/dist/{config-WTXhS3be.mjs → config-DDHiaBAp.mjs} +3 -3
  12. package/dist/{config-WTXhS3be.mjs.map → config-DDHiaBAp.mjs.map} +1 -1
  13. package/dist/{doctor-DhQyzGyD.mjs → doctor-BoCM5VzN.mjs} +4 -4
  14. package/dist/{doctor-DhQyzGyD.mjs.map → doctor-BoCM5VzN.mjs.map} +1 -1
  15. package/dist/{fullstack-D-HuSPzB.mjs → fullstack-DGH8LtUr.mjs} +3 -3
  16. package/dist/{fullstack-CFYMm26U.mjs → fullstack-TNXwfWim.mjs} +4 -4
  17. package/dist/{fullstack-CFYMm26U.mjs.map → fullstack-TNXwfWim.mjs.map} +1 -1
  18. package/dist/index.mjs +2 -2
  19. package/dist/{plugin-CZJwXHjR.mjs → plugin-BIlCVqfL.mjs} +2 -2
  20. package/dist/{plugin-Bs2TSLYX.mjs → plugin-_dzDQrjh.mjs} +2 -2
  21. package/dist/{project-DxJ6T0sm.mjs → project-CbaOLcsd.mjs} +5 -5
  22. package/dist/{project-DxJ6T0sm.mjs.map → project-CbaOLcsd.mjs.map} +1 -1
  23. package/dist/{project-11IOsTqE.mjs → project-Dck92mbC.mjs} +4 -4
  24. package/dist/{project-docs-CDLUS3P2.mjs → project-docs-CjKscwGL.mjs} +1 -1
  25. package/dist/{project-docs-PnINpMhc.mjs → project-docs-pgIpkegR.mjs} +2 -2
  26. package/dist/{project-docs-PnINpMhc.mjs.map → project-docs-pgIpkegR.mjs.map} +1 -1
  27. package/dist/{project-root-BoSr02dG.mjs → project-root-DrOatPqt.mjs} +2 -2
  28. package/dist/{project-root-l3t98GPx.mjs → project-root-DxyENcsv.mjs} +3 -3
  29. package/dist/{project-root-l3t98GPx.mjs.map → project-root-DxyENcsv.mjs.map} +1 -1
  30. package/dist/{prompts-CKHXwz8Z.mjs → prompts-CmfXdpn5.mjs} +2 -2
  31. package/dist/{prompts-CKHXwz8Z.mjs.map → prompts-CmfXdpn5.mjs.map} +1 -1
  32. package/dist/{rolldown-runtime-DTQranEr.mjs → rolldown-runtime-DYoa8wui.mjs} +1 -1
  33. package/dist/{run-plugins-Vp78GcpX.mjs → run-plugins-RhPvviAu.mjs} +6 -11
  34. package/dist/run-plugins-RhPvviAu.mjs.map +1 -0
  35. package/dist/{typegen-CpvzYBmV.mjs → typegen-BWgxNmXV.mjs} +5 -5
  36. package/dist/{typegen-CpvzYBmV.mjs.map → typegen-BWgxNmXV.mjs.map} +1 -1
  37. package/dist/{typegen-mvLiT3Oz.mjs → typegen-CoIiSCqa.mjs} +4 -4
  38. package/dist/{types-ywMvRt4a.mjs → types-CDQ5ghz9.mjs} +1 -1
  39. package/package.json +9 -9
  40. package/dist/run-plugins-Vp78GcpX.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"project-root-l3t98GPx.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-DxyENcsv.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 v8.2.1
2
+ * @forinda/kickjs-cli v8.2.3
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -9,4 +9,4 @@
9
9
  * @license MIT
10
10
  */
11
11
  import*as e from"@clack/prompts";import t from"picocolors";const n={GET:t.green,POST:t.cyan,PUT:t.yellow,PATCH:t.magenta,DELETE:t.red};function r(e){return(n[e]??t.dim)(e.padEnd(7))}function i(e){let n=`[${e}]`.padEnd(10);switch(e){case`CRITICAL`:return t.red(n);case`WARNING`:return t.yellow(n);case`INFO`:return t.blue(t.dim(n));default:return n}}t.green(`✓`),t.red(`✖`),t.yellow(`⚠`),t.blue(`ℹ`);function a(n){e.intro(t.bgCyan(t.black(` ${n} `)))}function o(t){e.outro(t)}function s(t){e.isCancel(t)&&(e.cancel(`Operation cancelled.`),process.exit(0))}async function c(t){let n=await e.text(t);return s(n),n}async function l(t){let n=await e.select(t);return s(n),n}async function u(t){let n=await e.multiselect(t);return s(n),n}async function d(t){let n=await e.confirm(t);return s(n),n}function f(){return e.spinner()}const p=e.log;export{o as a,c,i as d,u as i,r as l,a as n,l as o,p as r,f as s,d as t,t as u};
12
- //# sourceMappingURL=prompts-CKHXwz8Z.mjs.map
12
+ //# sourceMappingURL=prompts-CmfXdpn5.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts-CKHXwz8Z.mjs","names":["colors"],"sources":["../src/utils/colors.ts","../src/utils/prompts.ts"],"sourcesContent":["import pc from 'picocolors'\n\nexport { pc as colors }\n\nconst METHOD_COLOR_MAP: Record<string, (s: string) => string> = {\n GET: pc.green,\n POST: pc.cyan,\n PUT: pc.yellow,\n PATCH: pc.magenta,\n DELETE: pc.red,\n}\n\n/** Color an HTTP method string for terminal display */\nexport function httpMethodColor(method: string): string {\n const fn = METHOD_COLOR_MAP[method] ?? pc.dim\n return fn(method.padEnd(7))\n}\n\n/** Color a severity tag for terminal display (padded to 10 chars) */\nexport function severityColor(severity: string): string {\n const tag = `[${severity}]`.padEnd(10)\n switch (severity) {\n case 'CRITICAL':\n return pc.red(tag)\n case 'WARNING':\n return pc.yellow(tag)\n case 'INFO':\n return pc.blue(pc.dim(tag))\n default:\n return tag\n }\n}\n","import * as clack from '@clack/prompts'\nimport { colors } from './colors'\n\nexport const symbols = {\n success: colors.green('✓'),\n error: colors.red('✖'),\n warning: colors.yellow('⚠'),\n info: colors.blue('ℹ'),\n}\n\n/** Show branded intro banner */\nexport function intro(title: string): void {\n clack.intro(colors.bgCyan(colors.black(` ${title} `)))\n}\n\n/** Show closing message */\nexport function outro(message: string): void {\n clack.outro(message)\n}\n\n/** Handle cancellation — print message and exit */\nfunction handleCancel(value: unknown): void {\n if (clack.isCancel(value)) {\n clack.cancel('Operation cancelled.')\n process.exit(0)\n }\n}\n\n/** Text input prompt */\nexport async function text(opts: {\n message: string\n placeholder?: string\n defaultValue?: string\n validate?: (value: string) => string | void\n}): Promise<string> {\n const value = await clack.text(opts as any)\n handleCancel(value)\n return value as string\n}\n\n/** Single select prompt */\nexport async function select<T>(opts: {\n message: string\n options: { value: T; label: string; hint?: string }[]\n initialValue?: T\n}): Promise<T> {\n const value = await clack.select(opts as any)\n handleCancel(value)\n return value as T\n}\n\n/** Multi-select prompt with checkboxes */\nexport async function multiSelect<T>(opts: {\n message: string\n options: { value: T; label: string; hint?: string }[]\n required?: boolean\n initialValues?: T[]\n}): Promise<T[]> {\n const value = await clack.multiselect(opts as any)\n handleCancel(value)\n return value as T[]\n}\n\n/** Yes/no confirmation prompt */\nexport async function confirm(opts: {\n message: string\n active?: string\n inactive?: string\n initialValue?: boolean\n}): Promise<boolean> {\n const value = await clack.confirm(opts)\n handleCancel(value)\n return value as boolean\n}\n\n/** Create a spinner for progress indication */\nexport function spinner() {\n return clack.spinner()\n}\n\n/** Log utilities for styled messages inside clack flow */\nexport const log = clack.log\n"],"mappings":";;;;;;;;;;2DAIA,MAAM,EAA0D,CAC9D,IAAK,EAAG,MACR,KAAM,EAAG,KACT,IAAK,EAAG,OACR,MAAO,EAAG,QACV,OAAQ,EAAG,GACb,EAGA,SAAgB,EAAgB,EAAwB,CAEtD,OADW,EAAiB,IAAW,EAAG,IAAA,CAChC,EAAO,OAAO,CAAC,CAAC,CAC5B,CAGA,SAAgB,EAAc,EAA0B,CACtD,IAAM,EAAM,IAAI,EAAS,GAAG,OAAO,EAAE,EACrC,OAAQ,EAAR,CACE,IAAK,WACH,OAAO,EAAG,IAAI,CAAG,EACnB,IAAK,UACH,OAAO,EAAG,OAAO,CAAG,EACtB,IAAK,OACH,OAAO,EAAG,KAAK,EAAG,IAAI,CAAG,CAAC,EAC5B,QACE,OAAO,CACX,CACF,CC3BWA,EAAO,MAAM,GAAG,EAClBA,EAAO,IAAI,GAAG,EACZA,EAAO,OAAO,GAAG,EACpBA,EAAO,KAAK,GAAG,EAIvB,SAAgB,EAAM,EAAqB,CACzC,EAAM,MAAMA,EAAO,OAAOA,EAAO,MAAM,IAAI,EAAM,EAAE,CAAC,CAAC,CACvD,CAGA,SAAgB,EAAM,EAAuB,CAC3C,EAAM,MAAM,CAAO,CACrB,CAGA,SAAS,EAAa,EAAsB,CACtC,EAAM,SAAS,CAAK,IACtB,EAAM,OAAO,sBAAsB,EACnC,QAAQ,KAAK,CAAC,EAElB,CAGA,eAAsB,EAAK,EAKP,CAClB,IAAM,EAAQ,MAAM,EAAM,KAAK,CAAW,EAE1C,OADA,EAAa,CAAK,EACX,CACT,CAGA,eAAsB,EAAU,EAIjB,CACb,IAAM,EAAQ,MAAM,EAAM,OAAO,CAAW,EAE5C,OADA,EAAa,CAAK,EACX,CACT,CAGA,eAAsB,EAAe,EAKpB,CACf,IAAM,EAAQ,MAAM,EAAM,YAAY,CAAW,EAEjD,OADA,EAAa,CAAK,EACX,CACT,CAGA,eAAsB,EAAQ,EAKT,CACnB,IAAM,EAAQ,MAAM,EAAM,QAAQ,CAAI,EAEtC,OADA,EAAa,CAAK,EACX,CACT,CAGA,SAAgB,GAAU,CACxB,OAAO,EAAM,QAAQ,CACvB,CAGA,MAAa,EAAM,EAAM"}
1
+ {"version":3,"file":"prompts-CmfXdpn5.mjs","names":["colors"],"sources":["../src/utils/colors.ts","../src/utils/prompts.ts"],"sourcesContent":["import pc from 'picocolors'\n\nexport { pc as colors }\n\nconst METHOD_COLOR_MAP: Record<string, (s: string) => string> = {\n GET: pc.green,\n POST: pc.cyan,\n PUT: pc.yellow,\n PATCH: pc.magenta,\n DELETE: pc.red,\n}\n\n/** Color an HTTP method string for terminal display */\nexport function httpMethodColor(method: string): string {\n const fn = METHOD_COLOR_MAP[method] ?? pc.dim\n return fn(method.padEnd(7))\n}\n\n/** Color a severity tag for terminal display (padded to 10 chars) */\nexport function severityColor(severity: string): string {\n const tag = `[${severity}]`.padEnd(10)\n switch (severity) {\n case 'CRITICAL':\n return pc.red(tag)\n case 'WARNING':\n return pc.yellow(tag)\n case 'INFO':\n return pc.blue(pc.dim(tag))\n default:\n return tag\n }\n}\n","import * as clack from '@clack/prompts'\nimport { colors } from './colors'\n\nexport const symbols = {\n success: colors.green('✓'),\n error: colors.red('✖'),\n warning: colors.yellow('⚠'),\n info: colors.blue('ℹ'),\n}\n\n/** Show branded intro banner */\nexport function intro(title: string): void {\n clack.intro(colors.bgCyan(colors.black(` ${title} `)))\n}\n\n/** Show closing message */\nexport function outro(message: string): void {\n clack.outro(message)\n}\n\n/** Handle cancellation — print message and exit */\nfunction handleCancel(value: unknown): void {\n if (clack.isCancel(value)) {\n clack.cancel('Operation cancelled.')\n process.exit(0)\n }\n}\n\n/** Text input prompt */\nexport async function text(opts: {\n message: string\n placeholder?: string\n defaultValue?: string\n validate?: (value: string) => string | void\n}): Promise<string> {\n const value = await clack.text(opts as any)\n handleCancel(value)\n return value as string\n}\n\n/** Single select prompt */\nexport async function select<T>(opts: {\n message: string\n options: { value: T; label: string; hint?: string }[]\n initialValue?: T\n}): Promise<T> {\n const value = await clack.select(opts as any)\n handleCancel(value)\n return value as T\n}\n\n/** Multi-select prompt with checkboxes */\nexport async function multiSelect<T>(opts: {\n message: string\n options: { value: T; label: string; hint?: string }[]\n required?: boolean\n initialValues?: T[]\n}): Promise<T[]> {\n const value = await clack.multiselect(opts as any)\n handleCancel(value)\n return value as T[]\n}\n\n/** Yes/no confirmation prompt */\nexport async function confirm(opts: {\n message: string\n active?: string\n inactive?: string\n initialValue?: boolean\n}): Promise<boolean> {\n const value = await clack.confirm(opts)\n handleCancel(value)\n return value as boolean\n}\n\n/** Create a spinner for progress indication */\nexport function spinner() {\n return clack.spinner()\n}\n\n/** Log utilities for styled messages inside clack flow */\nexport const log = clack.log\n"],"mappings":";;;;;;;;;;2DAIA,MAAM,EAA0D,CAC9D,IAAK,EAAG,MACR,KAAM,EAAG,KACT,IAAK,EAAG,OACR,MAAO,EAAG,QACV,OAAQ,EAAG,GACb,EAGA,SAAgB,EAAgB,EAAwB,CAEtD,OADW,EAAiB,IAAW,EAAG,IAAA,CAChC,EAAO,OAAO,CAAC,CAAC,CAC5B,CAGA,SAAgB,EAAc,EAA0B,CACtD,IAAM,EAAM,IAAI,EAAS,GAAG,OAAO,EAAE,EACrC,OAAQ,EAAR,CACE,IAAK,WACH,OAAO,EAAG,IAAI,CAAG,EACnB,IAAK,UACH,OAAO,EAAG,OAAO,CAAG,EACtB,IAAK,OACH,OAAO,EAAG,KAAK,EAAG,IAAI,CAAG,CAAC,EAC5B,QACE,OAAO,CACX,CACF,CC3BWA,EAAO,MAAM,GAAG,EAClBA,EAAO,IAAI,GAAG,EACZA,EAAO,OAAO,GAAG,EACpBA,EAAO,KAAK,GAAG,EAIvB,SAAgB,EAAM,EAAqB,CACzC,EAAM,MAAMA,EAAO,OAAOA,EAAO,MAAM,IAAI,EAAM,EAAE,CAAC,CAAC,CACvD,CAGA,SAAgB,EAAM,EAAuB,CAC3C,EAAM,MAAM,CAAO,CACrB,CAGA,SAAS,EAAa,EAAsB,CACtC,EAAM,SAAS,CAAK,IACtB,EAAM,OAAO,sBAAsB,EACnC,QAAQ,KAAK,CAAC,EAElB,CAGA,eAAsB,EAAK,EAKP,CAClB,IAAM,EAAQ,MAAM,EAAM,KAAK,CAAW,EAE1C,OADA,EAAa,CAAK,EACX,CACT,CAGA,eAAsB,EAAU,EAIjB,CACb,IAAM,EAAQ,MAAM,EAAM,OAAO,CAAW,EAE5C,OADA,EAAa,CAAK,EACX,CACT,CAGA,eAAsB,EAAe,EAKpB,CACf,IAAM,EAAQ,MAAM,EAAM,YAAY,CAAW,EAEjD,OADA,EAAa,CAAK,EACX,CACT,CAGA,eAAsB,EAAQ,EAKT,CACnB,IAAM,EAAQ,MAAM,EAAM,QAAQ,CAAI,EAEtC,OADA,EAAa,CAAK,EACX,CACT,CAGA,SAAgB,GAAU,CACxB,OAAO,EAAM,QAAQ,CACvB,CAGA,MAAa,EAAM,EAAM"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v8.2.1
2
+ * @forinda/kickjs-cli v8.2.3
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v8.2.1
2
+ * @forinda/kickjs-cli v8.2.3
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-DTQranEr.mjs";import{c as t,l as n,s as r}from"./project-docs-PnINpMhc.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-CKHXwz8Z.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-DhQyzGyD.mjs";import{a as Se,c as Ce,o as we,r as Te,t as Ee,u as De}from"./project-DxJ6T0sm.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-WTXhS3be.mjs";import{t as w}from"./project-root-l3t98GPx.mjs";import{n as T,t as E}from"./types-ywMvRt4a.mjs";import{t as Ne}from"./build-DMzg5-6r.mjs";import{n as Pe}from"./agent-docs-Cs-bx3Wr.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-CpvzYBmV.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 Ce(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-CFYMm26U.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-l3t98GPx.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 {
11
+ import{t as e}from"./rolldown-runtime-DYoa8wui.mjs";import{c as t,l as n,s as r}from"./project-docs-pgIpkegR.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-CmfXdpn5.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-BoCM5VzN.mjs";import{a as Se,c as Ce,o as we,r as Te,t as Ee,u as De}from"./project-CbaOLcsd.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-DDHiaBAp.mjs";import{t as w}from"./project-root-DxyENcsv.mjs";import{n as T,t as E}from"./types-CDQ5ghz9.mjs";import{t as Ne}from"./build-CVXO_yUd.mjs";import{n as Pe}from"./agent-docs-Ckay-1_c.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-BWgxNmXV.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 Ce(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-TNXwfWim.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-DxyENcsv.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,
@@ -597,14 +597,9 @@ Pass a message as a positional arg, --message flag, or pipe via stdin:
597
597
  pnpm test 2>&1 | kick explain
598
598
  `),process.exit(1));let r=Gn(),i=Nn(n,r);if(t.json&&i){process.stdout.write(JSON.stringify({matched:!0,...i},null,2)+`
599
599
  `);return}if(i){Kn(n,i.diagnosis,i.confidence);return}t.ai||(t.json&&(process.stdout.write(JSON.stringify({matched:!1},null,2)+`
600
- `),process.exit(2)),qn(n,!1),process.exit(2));let a=await Pn({input:n,model:t.model,cwd:r.cwd});t.json&&(process.stdout.write(JSON.stringify(Vn(a),null,2)+`
600
+ `),process.exit(2)),qn(n),process.exit(2));let a=await Pn({input:n,model:t.model,cwd:r.cwd});t.json&&(process.stdout.write(JSON.stringify(Vn(a),null,2)+`
601
601
  `),process.exit(a.kind===`ok`?0:2)),Hn(n,a),process.exit(a.kind===`ok`?0:2)})}function Vn(e){return e.kind===`ok`?{matched:!0,source:`ai`,diagnosis:e.diagnosis}:e.kind===`unavailable`?{matched:!1,aiUnavailable:!0,reason:e.reason}:{matched:!1,aiError:!0,error:e.message}}function Hn(e,t){if(t.kind===`ok`){Kn(e,t.diagnosis,-1,!0);return}if(t.kind===`unavailable`){process.stdout.write(`\n Explaining: ${Jn(e.trim(),200)}\n\n`),process.stdout.write(` AI fallback unavailable: ${t.reason}\n\n`),process.stdout.write(`${Z(t.suggestion,` `)}\n\n`);return}process.stdout.write(`\n Explaining: ${Jn(e.trim(),200)}\n\n`),process.stdout.write(` AI fallback error: ${t.message}\n\n`)}async function Un(e,t){return e&&e.trim().length>0?e:t&&t.trim().length>0?t:process.stdin.isTTY?``:Wn()}function Wn(){return new Promise((e,t)=>{let n=``;process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{n+=e}),process.stdin.on(`end`,()=>e(n)),process.stdin.on(`error`,t)})}function Gn(){let e=process.cwd();return{cwd:e,hasFile:t=>N(M(e,t))}}function Kn(e,t,n,r=!1){let i=Jn(e.trim(),200),a=r?`AI-generated — verify before applying`:Yn(n);process.stdout.write(`\n Explaining: ${i}\n`),process.stdout.write(`\n Match: ${t.id} (${a})\n`),process.stdout.write(` Title: ${t.title}\n`),process.stdout.write(`\n Diagnosis:\n${Z(t.explanation,` `)}\n`),process.stdout.write(`\n Fix:\n${Z(t.fix,` `)}\n`),t.codeBefore&&process.stdout.write(`\n Before:\n${Z(t.codeBefore,` `)}\n`),t.codeAfter&&process.stdout.write(`\n After:\n${Z(t.codeAfter,` `)}\n`),t.docs&&process.stdout.write(`\n Docs: ${t.docs}\n`),process.stdout.write(`
602
- `)}function qn(e,t){let n=Jn(e.trim(),200);process.stdout.write(`\n Explaining: ${n}\n\n`),t?process.stdout.write(` No known-issue matched, and --ai fallback is not yet wired.
603
- When @forinda/kickjs-ai ships its provider implementations,
604
- this command will call the configured LLM with the error +
605
- project context and return a structured fix.
606
-
607
- `):process.stdout.write(` No known-issue matched. Things you can try:
602
+ `)}function qn(e){let t=Jn(e.trim(),200);process.stdout.write(`\n Explaining: ${t}\n\n`),process.stdout.write(` No known-issue matched. Things you can try:
608
603
 
609
604
  1. Check the framework docs for the error keywords:
610
605
  https://kickjs.app/
@@ -681,7 +676,7 @@ server.on('exit', () => {
681
676
  Cancelled.
682
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,`
683
678
 
684
- `),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-CZJwXHjR.mjs`),{builtinCliPlugins:t}=await import(`./builtins-DTFeT76Q.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(`
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-BIlCVqfL.mjs`),{builtinCliPlugins:t}=await import(`./builtins-BFBP6hSP.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(`
685
680
  Registered typegen plugins:
686
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(`
687
682
  Disable one in kick.config.ts:
@@ -838,4 +833,4 @@ declare global {
838
833
  export {}
839
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:Se}),T({name:`kick/list`,register:we}),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(`
840
835
  `)}}]})];export{ln as applyDisableFilter,un as n,R as r,W as runAllPluginTypegens,Fi as t};
841
- //# sourceMappingURL=run-plugins-Vp78GcpX.mjs.map
836
+ //# sourceMappingURL=run-plugins-RhPvviAu.mjs.map