@forinda/kickjs-cli 5.4.1 → 5.4.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 (27) hide show
  1. package/dist/{builtins-BbJqgLmS.mjs → builtins-BqaW8JR2.mjs} +136 -136
  2. package/dist/{builtins-BCRm8cUp.mjs → builtins-C218lGrx.mjs} +76 -76
  3. package/dist/{builtins-BCRm8cUp.mjs.map → builtins-C218lGrx.mjs.map} +1 -1
  4. package/dist/cli.mjs +2 -2
  5. package/dist/{config-cyBKEKWL.mjs → config-CwM2Sr53.mjs} +3 -3
  6. package/dist/config-CwM2Sr53.mjs.map +1 -0
  7. package/dist/{config-q_jBP6Ln.mjs → config-na94NSly.mjs} +2 -2
  8. package/dist/{generator-extension-CsT2e6Fj.mjs → generator-extension-DjQVbh56.mjs} +3 -3
  9. package/dist/{generator-extension-CsT2e6Fj.mjs.map → generator-extension-DjQVbh56.mjs.map} +1 -1
  10. package/dist/index.d.mts +57 -1
  11. package/dist/index.d.mts.map +1 -1
  12. package/dist/index.mjs +2 -2
  13. package/dist/{plugin-D6nfJWY0.mjs → plugin-DO7jaMGo.mjs} +2 -2
  14. package/dist/{plugin-8R67gfJG.mjs → plugin-DWLsr4yd.mjs} +3 -3
  15. package/dist/{plugin-8R67gfJG.mjs.map → plugin-DWLsr4yd.mjs.map} +1 -1
  16. package/dist/{rolldown-runtime-B9Lxtctb.mjs → rolldown-runtime-BmqZXx3Z.mjs} +1 -1
  17. package/dist/{run-plugins-CYRt77yP.mjs → run-plugins-BtSj_FSc.mjs} +2 -2
  18. package/dist/typegen-B4_u3xBO.mjs +117 -0
  19. package/dist/typegen-B4_u3xBO.mjs.map +1 -0
  20. package/dist/typegen-BwZ1fbLq.mjs +116 -0
  21. package/dist/{types-dPuCyHXz.mjs → types-5Ihp5Jca.mjs} +2 -2
  22. package/dist/{types-dPuCyHXz.mjs.map → types-5Ihp5Jca.mjs.map} +1 -1
  23. package/package.json +3 -3
  24. package/dist/config-cyBKEKWL.mjs.map +0 -1
  25. package/dist/typegen-CgWQM1FH.mjs +0 -114
  26. package/dist/typegen-SyGEEyKv.mjs +0 -115
  27. package/dist/typegen-SyGEEyKv.mjs.map +0 -1
package/dist/index.d.mts CHANGED
@@ -518,6 +518,56 @@ interface AssetMapEntry {
518
518
  */
519
519
  keys?: 'auto' | 'strip' | 'with-extension';
520
520
  }
521
+ /**
522
+ * Database settings consumed by `kick db generate`, `kick db migrate`,
523
+ * and the M4.C composite-type detection gate. Mirrors the runtime
524
+ * `DbConfig` shape from `@forinda/kickjs-db` — duplicated here so
525
+ * adopters who only install `@forinda/kickjs-cli` can set the block
526
+ * without pulling `@forinda/kickjs-db` types into their kick.config.ts
527
+ * resolution. The CLI loads kick.config.ts through `loadKickConfig`,
528
+ * then `resolveDbConfig` re-reads this block from the same module and
529
+ * normalises defaults (`schemaPath` / `migrationsDir` / `dialect`).
530
+ *
531
+ * @example
532
+ * ```ts
533
+ * defineConfig({
534
+ * db: {
535
+ * schemaPath: 'src/db/schema.ts',
536
+ * migrationsDir: 'db/migrations',
537
+ * dialect: 'postgres',
538
+ * connectionString: process.env.DATABASE_URL,
539
+ * },
540
+ * })
541
+ * ```
542
+ */
543
+ interface KickDbConfigBlock {
544
+ /**
545
+ * Path to the schema module (`pgEnum` / `table` declarations).
546
+ * Defaults to `'src/db/schema.ts'`.
547
+ */
548
+ schemaPath?: string;
549
+ /**
550
+ * Where `kick db generate` writes migration directories. Defaults
551
+ * to `'db/migrations'`.
552
+ */
553
+ migrationsDir?: string;
554
+ /** SQL dialect. Defaults to `'postgres'`. */
555
+ dialect?: 'postgres' | 'sqlite' | 'mysql';
556
+ /**
557
+ * Postgres connection string for the built-in pgAdapter path. Read
558
+ * from the `DATABASE_URL` env var when omitted. Used by
559
+ * `kick db migrate*` and the M4.C composite-type gate at
560
+ * `kick db generate`.
561
+ */
562
+ connectionString?: string;
563
+ /**
564
+ * Escape hatch: a factory returning a fully-constructed
565
+ * MigrationAdapter (typed loosely here so the CLI types don't pull
566
+ * `@forinda/kickjs-db` into adopter projects that don't import it).
567
+ * Takes precedence over `connectionString` when both are set.
568
+ */
569
+ adapter?: () => unknown | Promise<unknown>;
570
+ }
521
571
  /** Typegen settings — controls .kickjs/types/* generation */
522
572
  interface TypegenConfig {
523
573
  /**
@@ -757,6 +807,12 @@ interface KickConfig {
757
807
  * ```
758
808
  */
759
809
  typegen?: TypegenConfig;
810
+ /**
811
+ * Database settings — schema path, migrations dir, dialect,
812
+ * connection string, optional adapter factory. Consumed by
813
+ * `kick db generate` / `kick db migrate*`. See {@link KickDbConfigBlock}.
814
+ */
815
+ db?: KickDbConfigBlock;
760
816
  /** Custom commands that extend the CLI */
761
817
  commands?: KickCommandDefinition[];
762
818
  /**
@@ -995,5 +1051,5 @@ declare function toKebabCase(name: string): string;
995
1051
  */
996
1052
  declare function pluralize(name: string): string;
997
1053
  //#endregion
998
- export { type DiscoveredGenerator, type DiscoveryResult, type GeneratorArg, type GeneratorContext, type GeneratorFile, type GeneratorFlag, type GeneratorSpec, type KickCliPlugin, type KickCliPluginContext, type KickCommandDefinition, type KickConfig, KickPluginConflictError, type TypegenContext, type TypegenPlugin, type TypegenPluginResult, buildGeneratorContext, defineCliPlugin, defineConfig, defineGenerator, generateAdapter, generateController, generateDto, generateGuard, generateMiddleware, generateModule, generateService, initProject, loadKickConfig, pluralize, toCamelCase, toKebabCase, toPascalCase };
1054
+ export { type DiscoveredGenerator, type DiscoveryResult, type GeneratorArg, type GeneratorContext, type GeneratorFile, type GeneratorFlag, type GeneratorSpec, type KickCliPlugin, type KickCliPluginContext, type KickCommandDefinition, type KickConfig, type KickDbConfigBlock, KickPluginConflictError, type TypegenContext, type TypegenPlugin, type TypegenPluginResult, buildGeneratorContext, defineCliPlugin, defineConfig, defineGenerator, generateAdapter, generateController, generateDto, generateGuard, generateMiddleware, generateModule, generateService, initProject, loadKickConfig, pluralize, toCamelCase, toKebabCase, toPascalCase };
999
1055
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/typegen/scanner.ts","../src/typegen/plugin.ts","../src/generator-extension/define.ts","../src/plugin/types.ts","../src/config.ts","../src/generators/templates/types.ts","../src/generators/module.ts","../src/generators/adapter.ts","../src/generators/middleware.ts","../src/generators/guard.ts","../src/generators/service.ts","../src/generators/controller.ts","../src/generators/dto.ts","../src/generators/project.ts","../src/generator-extension/discover.ts","../src/generator-extension/context.ts","../src/utils/naming.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/typegen/scanner.ts","../src/typegen/plugin.ts","../src/generator-extension/define.ts","../src/plugin/types.ts","../src/config.ts","../src/generators/templates/types.ts","../src/generators/module.ts","../src/generators/adapter.ts","../src/generators/middleware.ts","../src/generators/guard.ts","../src/generators/service.ts","../src/generators/controller.ts","../src/generators/dto.ts","../src/generators/project.ts","../src/generator-extension/discover.ts","../src/generator-extension/context.ts","../src/utils/naming.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v5.4.1
2
+ * @forinda/kickjs-cli v5.4.3
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -8,4 +8,4 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import{C as e,S as t,_ as n,a as r,b as i,d as a,f as o,i as s,l as c,m as l,p as u,r as d,u as f,w as p}from"./generator-extension-CsT2e6Fj.mjs";import{i as m,r as h}from"./config-cyBKEKWL.mjs";import{n as g,t as _}from"./types-dPuCyHXz.mjs";export{_ as KickPluginConflictError,d as buildGeneratorContext,g as defineCliPlugin,h as defineConfig,s as defineGenerator,l as generateAdapter,f as generateController,c as generateDto,o as generateGuard,u as generateMiddleware,n as generateModule,a as generateService,r as initProject,m as loadKickConfig,i as pluralize,t as toCamelCase,e as toKebabCase,p as toPascalCase};
11
+ import{C as e,S as t,_ as n,a as r,b as i,d as a,f as o,i as s,l as c,m as l,p as u,r as d,u as f,w as p}from"./generator-extension-DjQVbh56.mjs";import{i as m,r as h}from"./config-CwM2Sr53.mjs";import{n as g,t as _}from"./types-5Ihp5Jca.mjs";export{_ as KickPluginConflictError,d as buildGeneratorContext,g as defineCliPlugin,h as defineConfig,s as defineGenerator,l as generateAdapter,f as generateController,c as generateDto,o as generateGuard,u as generateMiddleware,n as generateModule,a as generateService,r as initProject,m as loadKickConfig,i as pluralize,t as toCamelCase,e as toKebabCase,p as toPascalCase};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v5.4.1
2
+ * @forinda/kickjs-cli v5.4.3
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -8,4 +8,4 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import{t as e}from"./rolldown-runtime-B9Lxtctb.mjs";function t(e){return e}var n=class extends Error{constructor(e,t,n){super(`Two plugins registered the same ${e} '${t}': ${n.join(`, `)}. Plugins must use unique ${e} names.`),this.name=`KickPluginConflictError`}};function r(e,t=[]){let r=new Map;for(let t of e){let e=(r.get(t.name)??0)+1;if(r.set(t.name,e),e===2)throw new n(`plugin`,t.name,[t.name,t.name])}let i=new Map,a=[];for(let t of e)for(let e of t.commands??[]){let r=i.get(e.name);if(r)throw new n(`command`,e.name,[r,t.name]);i.set(e.name,t.name),a.push(e)}let o=new Set(t.map(e=>e.name)),s=[...a.filter(e=>!o.has(e.name)),...t],c=new Map,l=[];for(let t of e)for(let e of t.typegens??[]){let r=c.get(e.id);if(r)throw new n(`typegen`,e.id,[r,t.name]);c.set(e.id,t.name),l.push(e)}let u=new Map,d=[];for(let t of e)for(let e of t.generators??[]){let r=u.get(e.name);if(r)throw new n(`generator`,e.name,[r,t.name]);u.set(e.name,t.name),d.push({source:t.name,spec:e})}return{commands:s,typegens:l,generators:d,register:async(t,n)=>{let r=n??{cwd:process.cwd(),config:null,log:()=>{}};for(let n of e)n.register&&await n.register(t,r)}}}var i=e({mergeCliPlugins:()=>r});export{r as n,t as r,i as t};
11
+ import{t as e}from"./rolldown-runtime-BmqZXx3Z.mjs";function t(e){return e}var n=class extends Error{constructor(e,t,n){super(`Two plugins registered the same ${e} '${t}': ${n.join(`, `)}. Plugins must use unique ${e} names.`),this.name=`KickPluginConflictError`}};function r(e,t=[]){let r=new Map;for(let t of e){let e=(r.get(t.name)??0)+1;if(r.set(t.name,e),e===2)throw new n(`plugin`,t.name,[t.name,t.name])}let i=new Map,a=[];for(let t of e)for(let e of t.commands??[]){let r=i.get(e.name);if(r)throw new n(`command`,e.name,[r,t.name]);i.set(e.name,t.name),a.push(e)}let o=new Set(t.map(e=>e.name)),s=[...a.filter(e=>!o.has(e.name)),...t],c=new Map,l=[];for(let t of e)for(let e of t.typegens??[]){let r=c.get(e.id);if(r)throw new n(`typegen`,e.id,[r,t.name]);c.set(e.id,t.name),l.push(e)}let u=new Map,d=[];for(let t of e)for(let e of t.generators??[]){let r=u.get(e.name);if(r)throw new n(`generator`,e.name,[r,t.name]);u.set(e.name,t.name),d.push({source:t.name,spec:e})}return{commands:s,typegens:l,generators:d,register:async(t,n)=>{let r=n??{cwd:process.cwd(),config:null,log:()=>{}};for(let n of e)n.register&&await n.register(t,r)}}}var i=e({mergeCliPlugins:()=>r});export{r as n,t as r,i as t};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v5.4.1
2
+ * @forinda/kickjs-cli v5.4.3
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-B9Lxtctb.mjs";import{t}from"./types-dPuCyHXz.mjs";function n(e,n=[]){let r=new Map;for(let n of e){let e=(r.get(n.name)??0)+1;if(r.set(n.name,e),e===2)throw new t(`plugin`,n.name,[n.name,n.name])}let i=new Map,a=[];for(let n of e)for(let e of n.commands??[]){let r=i.get(e.name);if(r)throw new t(`command`,e.name,[r,n.name]);i.set(e.name,n.name),a.push(e)}let o=new Set(n.map(e=>e.name)),s=[...a.filter(e=>!o.has(e.name)),...n],c=new Map,l=[];for(let n of e)for(let e of n.typegens??[]){let r=c.get(e.id);if(r)throw new t(`typegen`,e.id,[r,n.name]);c.set(e.id,n.name),l.push(e)}let u=new Map,d=[];for(let n of e)for(let e of n.generators??[]){let r=u.get(e.name);if(r)throw new t(`generator`,e.name,[r,n.name]);u.set(e.name,n.name),d.push({source:n.name,spec:e})}return{commands:s,typegens:l,generators:d,register:async(t,n)=>{let r=n??{cwd:process.cwd(),config:null,log:()=>{}};for(let n of e)n.register&&await n.register(t,r)}}}var r=e({mergeCliPlugins:()=>n});export{n,r as t};
12
- //# sourceMappingURL=plugin-8R67gfJG.mjs.map
11
+ import{t as e}from"./rolldown-runtime-BmqZXx3Z.mjs";import{t}from"./types-5Ihp5Jca.mjs";function n(e,n=[]){let r=new Map;for(let n of e){let e=(r.get(n.name)??0)+1;if(r.set(n.name,e),e===2)throw new t(`plugin`,n.name,[n.name,n.name])}let i=new Map,a=[];for(let n of e)for(let e of n.commands??[]){let r=i.get(e.name);if(r)throw new t(`command`,e.name,[r,n.name]);i.set(e.name,n.name),a.push(e)}let o=new Set(n.map(e=>e.name)),s=[...a.filter(e=>!o.has(e.name)),...n],c=new Map,l=[];for(let n of e)for(let e of n.typegens??[]){let r=c.get(e.id);if(r)throw new t(`typegen`,e.id,[r,n.name]);c.set(e.id,n.name),l.push(e)}let u=new Map,d=[];for(let n of e)for(let e of n.generators??[]){let r=u.get(e.name);if(r)throw new t(`generator`,e.name,[r,n.name]);u.set(e.name,n.name),d.push({source:n.name,spec:e})}return{commands:s,typegens:l,generators:d,register:async(t,n)=>{let r=n??{cwd:process.cwd(),config:null,log:()=>{}};for(let n of e)n.register&&await n.register(t,r)}}}var r=e({mergeCliPlugins:()=>n});export{n,r as t};
12
+ //# sourceMappingURL=plugin-DWLsr4yd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-8R67gfJG.mjs","names":[],"sources":["../src/plugin/merge.ts","../src/plugin/index.ts"],"sourcesContent":["// Plugin → unified registry merge.\n//\n// Resolution rules (per the v1 spec + dogfood pivot):\n// - duplicate plugin `name` across the input array → conflict error.\n// Catches the double-install case (built-in shipped twice, or\n// adopter requiring the same plugin twice).\n// - plugin commands appear first in the merged list, then adopter\n// commands; adopter `commands` of the same name override the\n// plugin entry (filter pass).\n// - duplicate command name across two plugins → conflict error\n// listing both plugin names. Adopter overriding a plugin is\n// allowed and not an error.\n// - duplicate typegen id across two plugins → same error. Typegens\n// have no adopter override path; only plugins contribute them.\n// - register() functions are collected in input order; the caller\n// invokes each one against the same Command program. They have no\n// id-level conflict surface — owners are responsible for picking\n// non-colliding command names inside their own register().\n// - plugin order = array order. No implicit precedence rules.\n\nimport type { Command } from 'commander'\n\nimport type { KickCommandDefinition } from '../config'\nimport type { TypegenPlugin } from '../typegen/plugin'\nimport type { GeneratorSpec } from '../generator-extension/define'\nimport type { DiscoveredGenerator } from '../generator-extension/discover'\nimport { KickPluginConflictError, type KickCliPlugin, type KickCliPluginContext } from './types'\n\nexport interface MergedPlugins {\n commands: KickCommandDefinition[]\n typegens: TypegenPlugin[]\n /** DiscoveredGenerator shape so this list slots into the existing\n * dispatch path next to package.json-discovered entries. `source`\n * carries the plugin name for error attribution. */\n generators: DiscoveredGenerator[]\n /**\n * Apply every plugin's register() in input order. ctx is optional so\n * tests + lightweight callers can invoke `register(program)` without\n * constructing a full context; it falls back to cwd=process.cwd(),\n * config=null, log=no-op.\n */\n register: (program: Command, ctx?: KickCliPluginContext) => Promise<void>\n}\n\nexport function mergeCliPlugins(\n plugins: readonly KickCliPlugin[],\n adopterCommands: readonly KickCommandDefinition[] = [],\n): MergedPlugins {\n // Plugin-name dedup — catches double-install.\n const seenPluginNames = new Map<string, number>()\n for (const p of plugins) {\n const count = (seenPluginNames.get(p.name) ?? 0) + 1\n seenPluginNames.set(p.name, count)\n if (count === 2) {\n throw new KickPluginConflictError('plugin', p.name, [p.name, p.name])\n }\n }\n\n const commandOwners = new Map<string, string>()\n const pluginCommands: KickCommandDefinition[] = []\n for (const p of plugins) {\n for (const cmd of p.commands ?? []) {\n const prior = commandOwners.get(cmd.name)\n if (prior) {\n throw new KickPluginConflictError('command', cmd.name, [prior, p.name])\n }\n commandOwners.set(cmd.name, p.name)\n pluginCommands.push(cmd)\n }\n }\n\n const adopterNames = new Set(adopterCommands.map((c) => c.name))\n const filteredPlugin = pluginCommands.filter((c) => !adopterNames.has(c.name))\n const commands = [...filteredPlugin, ...adopterCommands]\n\n const typegenOwners = new Map<string, string>()\n const typegens: TypegenPlugin[] = []\n for (const p of plugins) {\n for (const tg of p.typegens ?? []) {\n const prior = typegenOwners.get(tg.id)\n if (prior) {\n throw new KickPluginConflictError('typegen', tg.id, [prior, p.name])\n }\n typegenOwners.set(tg.id, p.name)\n typegens.push(tg)\n }\n }\n\n const generatorOwners = new Map<string, string>()\n const generators: DiscoveredGenerator[] = []\n for (const p of plugins) {\n for (const spec of p.generators ?? []) {\n const prior = generatorOwners.get(spec.name)\n if (prior) {\n throw new KickPluginConflictError('generator', spec.name, [prior, p.name])\n }\n generatorOwners.set(spec.name, p.name)\n generators.push({ source: p.name, spec: spec satisfies GeneratorSpec })\n }\n }\n\n const register = async (program: Command, ctx?: KickCliPluginContext): Promise<void> => {\n const resolved: KickCliPluginContext = ctx ?? {\n cwd: process.cwd(),\n config: null,\n log: () => {},\n }\n for (const p of plugins) {\n if (p.register) await p.register(program, resolved)\n }\n }\n\n return { commands, typegens, generators, register }\n}\n","// Barrel intentionally omits `./builtins` — that module top-level-imports\n// every register*Command, which pulls heavy modules (project scaffolders,\n// fs reads at import time) into the graph. Importers that need the\n// builtin list go through `./plugin/builtins` directly; tests + adopter\n// plugins consuming only the contract types import from here.\n\nexport type { KickCliPlugin } from './types'\nexport { defineCliPlugin, KickPluginConflictError } from './types'\nexport { mergeCliPlugins, type MergedPlugins } from './merge'\n"],"mappings":";;;;;;;;;;wFA4CA,SAAgB,EACd,EACA,EAAoD,EAAE,CACvC,CAEf,IAAM,EAAkB,IAAI,IAC5B,IAAK,IAAM,KAAK,EAAS,CACvB,IAAM,GAAS,EAAgB,IAAI,EAAE,KAAK,EAAI,GAAK,EAEnD,GADA,EAAgB,IAAI,EAAE,KAAM,EAAM,CAC9B,IAAU,EACZ,MAAM,IAAI,EAAwB,SAAU,EAAE,KAAM,CAAC,EAAE,KAAM,EAAE,KAAK,CAAC,CAIzE,IAAM,EAAgB,IAAI,IACpB,EAA0C,EAAE,CAClD,IAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAO,EAAE,UAAY,EAAE,CAAE,CAClC,IAAM,EAAQ,EAAc,IAAI,EAAI,KAAK,CACzC,GAAI,EACF,MAAM,IAAI,EAAwB,UAAW,EAAI,KAAM,CAAC,EAAO,EAAE,KAAK,CAAC,CAEzE,EAAc,IAAI,EAAI,KAAM,EAAE,KAAK,CACnC,EAAe,KAAK,EAAI,CAI5B,IAAM,EAAe,IAAI,IAAI,EAAgB,IAAK,GAAM,EAAE,KAAK,CAAC,CAE1D,EAAW,CAAC,GADK,EAAe,OAAQ,GAAM,CAAC,EAAa,IAAI,EAAE,KAAK,CAC1C,CAAE,GAAG,EAAgB,CAElD,EAAgB,IAAI,IACpB,EAA4B,EAAE,CACpC,IAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAM,EAAE,UAAY,EAAE,CAAE,CACjC,IAAM,EAAQ,EAAc,IAAI,EAAG,GAAG,CACtC,GAAI,EACF,MAAM,IAAI,EAAwB,UAAW,EAAG,GAAI,CAAC,EAAO,EAAE,KAAK,CAAC,CAEtE,EAAc,IAAI,EAAG,GAAI,EAAE,KAAK,CAChC,EAAS,KAAK,EAAG,CAIrB,IAAM,EAAkB,IAAI,IACtB,EAAoC,EAAE,CAC5C,IAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAQ,EAAE,YAAc,EAAE,CAAE,CACrC,IAAM,EAAQ,EAAgB,IAAI,EAAK,KAAK,CAC5C,GAAI,EACF,MAAM,IAAI,EAAwB,YAAa,EAAK,KAAM,CAAC,EAAO,EAAE,KAAK,CAAC,CAE5E,EAAgB,IAAI,EAAK,KAAM,EAAE,KAAK,CACtC,EAAW,KAAK,CAAE,OAAQ,EAAE,KAAY,OAA8B,CAAC,CAe3E,MAAO,CAAE,WAAU,WAAU,aAAY,eAXjB,EAAkB,IAA8C,CACtF,IAAM,EAAiC,GAAO,CAC5C,IAAK,QAAQ,KAAK,CAClB,OAAQ,KACR,QAAW,GACZ,CACD,IAAK,IAAM,KAAK,EACV,EAAE,UAAU,MAAM,EAAE,SAAS,EAAS,EAAS,EAIJ"}
1
+ {"version":3,"file":"plugin-DWLsr4yd.mjs","names":[],"sources":["../src/plugin/merge.ts","../src/plugin/index.ts"],"sourcesContent":["// Plugin → unified registry merge.\n//\n// Resolution rules (per the v1 spec + dogfood pivot):\n// - duplicate plugin `name` across the input array → conflict error.\n// Catches the double-install case (built-in shipped twice, or\n// adopter requiring the same plugin twice).\n// - plugin commands appear first in the merged list, then adopter\n// commands; adopter `commands` of the same name override the\n// plugin entry (filter pass).\n// - duplicate command name across two plugins → conflict error\n// listing both plugin names. Adopter overriding a plugin is\n// allowed and not an error.\n// - duplicate typegen id across two plugins → same error. Typegens\n// have no adopter override path; only plugins contribute them.\n// - register() functions are collected in input order; the caller\n// invokes each one against the same Command program. They have no\n// id-level conflict surface — owners are responsible for picking\n// non-colliding command names inside their own register().\n// - plugin order = array order. No implicit precedence rules.\n\nimport type { Command } from 'commander'\n\nimport type { KickCommandDefinition } from '../config'\nimport type { TypegenPlugin } from '../typegen/plugin'\nimport type { GeneratorSpec } from '../generator-extension/define'\nimport type { DiscoveredGenerator } from '../generator-extension/discover'\nimport { KickPluginConflictError, type KickCliPlugin, type KickCliPluginContext } from './types'\n\nexport interface MergedPlugins {\n commands: KickCommandDefinition[]\n typegens: TypegenPlugin[]\n /** DiscoveredGenerator shape so this list slots into the existing\n * dispatch path next to package.json-discovered entries. `source`\n * carries the plugin name for error attribution. */\n generators: DiscoveredGenerator[]\n /**\n * Apply every plugin's register() in input order. ctx is optional so\n * tests + lightweight callers can invoke `register(program)` without\n * constructing a full context; it falls back to cwd=process.cwd(),\n * config=null, log=no-op.\n */\n register: (program: Command, ctx?: KickCliPluginContext) => Promise<void>\n}\n\nexport function mergeCliPlugins(\n plugins: readonly KickCliPlugin[],\n adopterCommands: readonly KickCommandDefinition[] = [],\n): MergedPlugins {\n // Plugin-name dedup — catches double-install.\n const seenPluginNames = new Map<string, number>()\n for (const p of plugins) {\n const count = (seenPluginNames.get(p.name) ?? 0) + 1\n seenPluginNames.set(p.name, count)\n if (count === 2) {\n throw new KickPluginConflictError('plugin', p.name, [p.name, p.name])\n }\n }\n\n const commandOwners = new Map<string, string>()\n const pluginCommands: KickCommandDefinition[] = []\n for (const p of plugins) {\n for (const cmd of p.commands ?? []) {\n const prior = commandOwners.get(cmd.name)\n if (prior) {\n throw new KickPluginConflictError('command', cmd.name, [prior, p.name])\n }\n commandOwners.set(cmd.name, p.name)\n pluginCommands.push(cmd)\n }\n }\n\n const adopterNames = new Set(adopterCommands.map((c) => c.name))\n const filteredPlugin = pluginCommands.filter((c) => !adopterNames.has(c.name))\n const commands = [...filteredPlugin, ...adopterCommands]\n\n const typegenOwners = new Map<string, string>()\n const typegens: TypegenPlugin[] = []\n for (const p of plugins) {\n for (const tg of p.typegens ?? []) {\n const prior = typegenOwners.get(tg.id)\n if (prior) {\n throw new KickPluginConflictError('typegen', tg.id, [prior, p.name])\n }\n typegenOwners.set(tg.id, p.name)\n typegens.push(tg)\n }\n }\n\n const generatorOwners = new Map<string, string>()\n const generators: DiscoveredGenerator[] = []\n for (const p of plugins) {\n for (const spec of p.generators ?? []) {\n const prior = generatorOwners.get(spec.name)\n if (prior) {\n throw new KickPluginConflictError('generator', spec.name, [prior, p.name])\n }\n generatorOwners.set(spec.name, p.name)\n generators.push({ source: p.name, spec: spec satisfies GeneratorSpec })\n }\n }\n\n const register = async (program: Command, ctx?: KickCliPluginContext): Promise<void> => {\n const resolved: KickCliPluginContext = ctx ?? {\n cwd: process.cwd(),\n config: null,\n log: () => {},\n }\n for (const p of plugins) {\n if (p.register) await p.register(program, resolved)\n }\n }\n\n return { commands, typegens, generators, register }\n}\n","// Barrel intentionally omits `./builtins` — that module top-level-imports\n// every register*Command, which pulls heavy modules (project scaffolders,\n// fs reads at import time) into the graph. Importers that need the\n// builtin list go through `./plugin/builtins` directly; tests + adopter\n// plugins consuming only the contract types import from here.\n\nexport type { KickCliPlugin } from './types'\nexport { defineCliPlugin, KickPluginConflictError } from './types'\nexport { mergeCliPlugins, type MergedPlugins } from './merge'\n"],"mappings":";;;;;;;;;;wFA4CA,SAAgB,EACd,EACA,EAAoD,EAAE,CACvC,CAEf,IAAM,EAAkB,IAAI,IAC5B,IAAK,IAAM,KAAK,EAAS,CACvB,IAAM,GAAS,EAAgB,IAAI,EAAE,KAAK,EAAI,GAAK,EAEnD,GADA,EAAgB,IAAI,EAAE,KAAM,EAAM,CAC9B,IAAU,EACZ,MAAM,IAAI,EAAwB,SAAU,EAAE,KAAM,CAAC,EAAE,KAAM,EAAE,KAAK,CAAC,CAIzE,IAAM,EAAgB,IAAI,IACpB,EAA0C,EAAE,CAClD,IAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAO,EAAE,UAAY,EAAE,CAAE,CAClC,IAAM,EAAQ,EAAc,IAAI,EAAI,KAAK,CACzC,GAAI,EACF,MAAM,IAAI,EAAwB,UAAW,EAAI,KAAM,CAAC,EAAO,EAAE,KAAK,CAAC,CAEzE,EAAc,IAAI,EAAI,KAAM,EAAE,KAAK,CACnC,EAAe,KAAK,EAAI,CAI5B,IAAM,EAAe,IAAI,IAAI,EAAgB,IAAK,GAAM,EAAE,KAAK,CAAC,CAE1D,EAAW,CAAC,GADK,EAAe,OAAQ,GAAM,CAAC,EAAa,IAAI,EAAE,KAAK,CAC1C,CAAE,GAAG,EAAgB,CAElD,EAAgB,IAAI,IACpB,EAA4B,EAAE,CACpC,IAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAM,EAAE,UAAY,EAAE,CAAE,CACjC,IAAM,EAAQ,EAAc,IAAI,EAAG,GAAG,CACtC,GAAI,EACF,MAAM,IAAI,EAAwB,UAAW,EAAG,GAAI,CAAC,EAAO,EAAE,KAAK,CAAC,CAEtE,EAAc,IAAI,EAAG,GAAI,EAAE,KAAK,CAChC,EAAS,KAAK,EAAG,CAIrB,IAAM,EAAkB,IAAI,IACtB,EAAoC,EAAE,CAC5C,IAAK,IAAM,KAAK,EACd,IAAK,IAAM,KAAQ,EAAE,YAAc,EAAE,CAAE,CACrC,IAAM,EAAQ,EAAgB,IAAI,EAAK,KAAK,CAC5C,GAAI,EACF,MAAM,IAAI,EAAwB,YAAa,EAAK,KAAM,CAAC,EAAO,EAAE,KAAK,CAAC,CAE5E,EAAgB,IAAI,EAAK,KAAM,EAAE,KAAK,CACtC,EAAW,KAAK,CAAE,OAAQ,EAAE,KAAY,OAA8B,CAAC,CAe3E,MAAO,CAAE,WAAU,WAAU,aAAY,eAXjB,EAAkB,IAA8C,CACtF,IAAM,EAAiC,GAAO,CAC5C,IAAK,QAAQ,KAAK,CAClB,OAAQ,KACR,QAAW,GACZ,CACD,IAAK,IAAM,KAAK,EACV,EAAE,UAAU,MAAM,EAAE,SAAS,EAAS,EAAS,EAIJ"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v5.4.1
2
+ * @forinda/kickjs-cli v5.4.3
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @forinda/kickjs-cli v5.4.1
2
+ * @forinda/kickjs-cli v5.4.3
3
3
  *
4
4
  * Copyright (c) Felix Orinda
5
5
  *
@@ -8,4 +8,4 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import{n as e,t}from"./builtins-BCRm8cUp.mjs";export{e as applyDisableFilter,t as runAllPluginTypegens};
11
+ import{n as e,t}from"./builtins-C218lGrx.mjs";export{e as applyDisableFilter,t as runAllPluginTypegens};
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @forinda/kickjs-cli v5.4.3
3
+ *
4
+ * Copyright (c) Felix Orinda
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ import{t as e}from"./rolldown-runtime-BmqZXx3Z.mjs";import{basename as t,dirname as n,join as r,relative as i,resolve as a,sep as o}from"node:path";import{statSync as s}from"node:fs";import{mkdir as c,readFile as l,readdir as u,stat as d,unlink as f,writeFile as p}from"node:fs/promises";import{globSync as m}from"glob";import{groupAssetKeys as h}from"@forinda/kickjs";const g=[`Service`,`Controller`,`Repository`,`Injectable`,`Component`,`Module`],_=[`.ts`,`.tsx`,`.mts`,`.cts`],v=[`node_modules`,`.kickjs`,`dist`,`build`,`.test.`,`.spec.`,`.d.ts`],y=new RegExp(String.raw`@(${g.join(`|`)})\s*\([^)]*\)`+String.raw`(?:\s*@[A-Z]\w*(?:\s*\([^)]*\))?)*`+String.raw`\s*export\s+(default\s+)?(?:abstract\s+)?class\s+(\w+)`,`g`),b=new RegExp(String.raw`export\s+(default\s+)?(?:abstract\s+)?class\s+(\w+)`+String.raw`(?:\s+extends\s+\w+(?:<[^>]*>)?)?`+String.raw`\s+implements\s+[^{]*\bAppModule\b`,`g`),x=/(?:export\s+)?const\s+(\w+)\s*(?::\s*[^=]+)?=\s*createToken\s*(?:<[^>]*>)?\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/g,S=/createToken\s*(?:<[^>]*>)?\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/g,C=/@Inject\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/g,w=/\b(defineAdapter|definePlugin)\s*(?:<[^>]*>)?\s*\(/g,T=new RegExp(String.raw`export\s+(?:default\s+)?(?:abstract\s+)?class\s+(\w+)`+String.raw`(?:\s+extends\s+\w+(?:<[^>]*>)?)?`+String.raw`\s+implements\s+[^{]*\bAppAdapter\b`,`g`),E=/\bname\s*(?::\s*[^=]+)?=\s*['"`]([^'"`]+)['"`]/,D=/\bdefineAugmentation\s*\(\s*['"`]([^'"`]+)['"`]\s*(,\s*\{)?/g,O=new RegExp(String.raw`@(${[`Get`,`Post`,`Put`,`Delete`,`Patch`].join(`|`)})\s*\(`,`g`);function k(e,t){let n=1;for(let r=t+1;r<e.length;r++){let t=e[r];if(t===`(`)n++;else if(t===`)`&&(n--,n===0))return r}return-1}function A(e,t){let n=t;for(;n<e.length;){for(;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]!==`@`)break;let t=e.slice(n).match(/^@([A-Z]\w*)/);if(!t)break;for(n+=t[0].length;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]===`(`){let t=k(e,n);if(t<0)return null;n=t+1}}for(;n<e.length&&/\s/.test(e[n]);)n++;for(let t of[`public`,`private`,`protected`])if(e.slice(n,n+t.length)===t&&/\s/.test(e.charAt(n+t.length))){for(n+=t.length;n<e.length&&/\s/.test(e[n]);)n++;break}if(e.slice(n,n+5)===`async`&&/\s/.test(e.charAt(n+5)))for(n+=5;n<e.length&&/\s/.test(e[n]);)n++;let r=e.slice(n).match(/^([a-zA-Z_]\w*)\s*\(/);return r?{methodName:r[1],endPos:n+r[0].length}:null}function j(e){return(e.match(/:([a-zA-Z_]\w*)/g)??[]).map(e=>e.slice(1))}function M(e,t){let n=new RegExp(String.raw`\b${t}\s*:\s*([A-Za-z_$][\w$]*)`,`g`).exec(e);return n?n[1]:null}function N(e,t){let n=new RegExp(String.raw`import\s*(?:type\s+)?\{[^}]*\b${t}\b[^}]*\}\s*from\s*['"\`]([^'"\`]+)['"\`]`).exec(e);if(n)return n[1];let r=new RegExp(String.raw`import\s+(?:type\s+)?${t}\s+from\s*['"\`]([^'"\`]+)['"\`]`).exec(e);if(r)return r[1];let i=new RegExp(String.raw`import\s*\*\s*as\s+${t}\s+from\s*['"\`]([^'"\`]+)['"\`]`).exec(e);return i?i[1]:new RegExp(String.raw`(?:^|\n)\s*(?:export\s+)?const\s+${t}\b`).test(e)?``:null}function P(e,t){let n=/@ApiQueryParams\s*\(\s*([\s\S]*?)\s*\)\s*$/.exec(e);if(!n){let n=/@ApiQueryParams\s*\(([\s\S]*?)\)/.exec(e);return n?F(n[1].trim(),t):null}return F(n[1].trim(),t)}function F(e,t){if(e.startsWith(`{`))return L(e);let n=/^([A-Za-z_]\w*)/.exec(e);if(n){let e=n[1],r=new RegExp(String.raw`const\s+${e}\s*(?::\s*[^=]+)?=\s*(\{[\s\S]*?\n\})`,`m`).exec(t);if(r)return L(r[1])}return{filterable:[],sortable:[],searchable:[]}}function I(e,t){let n=new RegExp(String.raw`${t}\s*:\s*\[([\s\S]*?)\]`).exec(e);return n?Array.from(n[1].matchAll(/['"`]([^'"`]+)['"`]/g)).map(e=>e[1]):[]}function L(e){return{filterable:I(e,`filterable`),sortable:I(e,`sortable`),searchable:I(e,`searchable`)}}async function R(e,t){let n=t.extensions??_,a=t.exclude??v,o=[],s;try{s=await u(e,{withFileTypes:!0,encoding:`utf-8`})}catch{return o}for(let c of s){let s=r(e,c.name),l=i(t.cwd,s);a.some(e=>l.includes(e))||(c.isDirectory()?o.push(...await R(s,t)):c.isFile()&&n.some(e=>c.name.endsWith(e))&&o.push(s))}return o}function z(e,t){return i(t,e).split(o).join(`/`)}function ee(e,t,n){let r=[],i=z(t,n);y.lastIndex=0;let a;for(;(a=y.exec(e))!==null;){let[,e,n,o]=a;r.push({className:o,decorator:e,filePath:t,relativePath:i,isDefault:!!n})}b.lastIndex=0;let o;for(;(o=b.exec(e))!==null;){let[,e,n]=o;r.some(e=>e.className===n&&e.filePath===t)||r.push({className:n,decorator:`Module`,filePath:t,relativePath:i,isDefault:!!e})}return r}function te(e,t,n){let r=[],i=z(t,n),a=new Set;x.lastIndex=0;let o;for(;(o=x.exec(e))!==null;){let[e,n,s]=o;a.add(e),r.push({name:s,variable:n,filePath:t,relativePath:i})}for(S.lastIndex=0;(o=S.exec(e))!==null;)a.has(o[0])||r.push({name:o[1],variable:null,filePath:t,relativePath:i});return r}function ne(e,t,n,r){let i=[];if(r.length===0)return i;let a=z(t,n),o=[];for(let t of r){let n=new RegExp(String.raw`class\s+${t.className}\b`).exec(e);n?.index!==void 0&&o.push({cls:t,start:n.index})}o.sort((e,t)=>e.start-t.start);for(let n=0;n<o.length;n++){let{cls:r,start:s}=o[n],c=n+1<o.length?o[n+1].start:e.length,l=e.slice(s,c);O.lastIndex=0;let u;for(;(u=O.exec(l))!==null;){let n=u[1],o=u.index,s=O.lastIndex-1,c=k(l,s);if(c<0)continue;let d=l.slice(s+1,c),f=d.match(/^\s*['"`]([^'"`]*)['"`]/),p=f&&f[1].length>0?f[1]:`/`,m=A(l,c+1);if(!m)continue;let{methodName:h,endPos:g}=m;O.lastIndex=g;let _=P(l.slice(o,g),e),v=M(d,`body`),y=M(d,`query`),b=M(d,`params`);i.push({controller:r.className,method:h,httpMethod:n.toUpperCase(),path:p,pathParams:j(p),queryFilterable:_?.filterable??null,querySortable:_?.sortable??null,querySearchable:_?.searchable??null,bodySchema:v?{identifier:v,source:N(e,v)}:null,querySchema:y?{identifier:y,source:N(e,y)}:null,paramsSchema:b?{identifier:b,source:N(e,b)}:null,filePath:t,relativePath:a})}}return i}function re(e,t,n){let r=[],i=z(t,n);C.lastIndex=0;let a;for(;(a=C.exec(e))!==null;)r.push({name:a[1],filePath:t,relativePath:i});return r}function B(e,t){let n=1;for(let r=t+1;r<e.length;r++){let t=e[r];if(t===`{`)n++;else if(t===`}`&&(n--,n===0))return r}return-1}function ie(e,t,n){let r=[],i=z(t,n),a=new Set;w.lastIndex=0;let o;for(;(o=w.exec(e))!==null;){let n=o[1],s=w.lastIndex-1,c=k(e,s);if(c<0)continue;let l=e.slice(s+1,c),u=/\bname\s*:\s*['"`]([^'"`]+)['"`]/.exec(l);if(!u)continue;let d=u[1],f=`${n}::${d}::${t}`;a.has(f)||(a.add(f),r.push({kind:n===`definePlugin`?`plugin`:`adapter`,name:d,filePath:t,relativePath:i}))}T.lastIndex=0;let s;for(;(s=T.exec(e))!==null;){let n=s.index,o=e.indexOf(`{`,n);if(o<0)continue;let c=B(e,o);if(c<0)continue;let l=e.slice(o+1,c),u=E.exec(l);if(!u)continue;let d=u[1],f=`class::${d}::${t}`;a.has(f)||(a.add(f),r.push({kind:`adapter`,name:d,filePath:t,relativePath:i}))}return r}function ae(e,t,n){let r=[],i=z(t,n);D.lastIndex=0;let a;for(;(a=D.exec(e))!==null;){let n=a[1],o=null,s=null;if(a[2]){let t=e.indexOf(`{`,a.index+a[0].length-1);if(t>=0){let n=B(e,t);if(n>=0){let r=e.slice(t+1,n);o=V(r,`description`),s=V(r,`example`)}}}r.push({name:n,description:o,example:s,filePath:t,relativePath:i})}return r}function V(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\`])`,`g`).exec(e);if(!n)return null;let r=n[1],i=n.index+n[0].length,a=i,o=null;for(;a<e.length;){let t=e[a];if(t===`\\`){a+=2;continue}if(t===r){o=e.slice(i,a);break}a++}return o===null?null:o.replace(/\\(.)/g,(e,t)=>t===`n`?`
12
+ `:t===`t`?` `:t===`r`?`\r`:t)}const oe=[`src/config/index.ts`,`src/config/env.ts`,`src/config.ts`,`src/env.ts`];async function se(e,t){let n=t===`src/env.ts`?oe:[t];for(let t of n){let n=a(e,t),r;try{r=await l(n,`utf-8`)}catch{continue}if(/\bdefineEnv\s*\(/.test(r)&&/export\s+default\b/.test(r))return{filePath:n,relativePath:z(n,e)}}return null}function ce(e){let t=new Map;for(let n of e){let e=t.get(n.className)??[];e.push(n),t.set(n.className,e)}let n=[];for(let[e,r]of t)new Set(r.map(e=>e.filePath)).size>1&&n.push({className:e,classes:r});return n.sort((e,t)=>e.className.localeCompare(t.className)),n}async function H(e){let t=await R(a(e.root),e),n=[],r=[],i=[],o=[],s=[],c=[],u=new Map;for(let r of t){let t;try{t=await l(r,`utf-8`)}catch{continue}u.set(r,t),n.push(...ee(t,r,e.cwd)),i.push(...te(t,r,e.cwd)),o.push(...re(t,r,e.cwd)),s.push(...ie(t,r,e.cwd)),c.push(...ae(t,r,e.cwd))}for(let[t,i]of u){let a=n.filter(e=>e.filePath===t);r.push(...ne(i,t,e.cwd,a))}return n.sort((e,t)=>e.className===t.className?e.relativePath.localeCompare(t.relativePath):e.className.localeCompare(t.className)),i.sort((e,t)=>e.name.localeCompare(t.name)||e.relativePath.localeCompare(t.relativePath)),o.sort((e,t)=>e.name.localeCompare(t.name)||e.relativePath.localeCompare(t.relativePath)),r.sort((e,t)=>e.controller.localeCompare(t.controller)||e.method.localeCompare(t.method)),s.sort((e,t)=>e.name.localeCompare(t.name)||e.relativePath.localeCompare(t.relativePath)),c.sort((e,t)=>e.name.localeCompare(t.name)||e.relativePath.localeCompare(t.relativePath)),{classes:n,routes:r,tokens:i,injects:o,collisions:ce(n),env:await se(e.cwd,e.envFile??`src/env.ts`),pluginsAndAdapters:s,augmentations:c}}const U="/* eslint-disable */\n// AUTO-GENERATED by `kick typegen`. DO NOT EDIT.\n// Re-run with `kick typegen` or rely on `kick dev` to refresh.\n",W=new Set([`Service`,`Repository`,`Injectable`,`Component`]);var G=class extends Error{collisions;constructor(e){super(le(e)),this.name=`TokenCollisionError`,this.collisions=e}};function le(e){let t=[`kick typegen: token collision detected`];for(let n of e){t.push(``),t.push(` ${n.classes.length} classes named '${n.className}':`);for(let e of n.classes)t.push(` - ${e.relativePath}`)}return t.push(``),t.push(`Resolutions:`),t.push(` (a) Rename one of the classes`),t.push(` (b) Use createToken<T>('namespaced/Name') and import the token explicitly — see @forinda/kickjs`),t.push(` (c) Pass --allow-duplicates to namespace the registry keys automatically`),t.push(` (e.g. 'modules/users/UserService' instead of 'UserService')`),t.join(`
13
+ `)}function ue(e,t){let r=i(n(t),e).split(o).join(`/`);return r=r.replace(/\.(ts|tsx|mts|cts)$/i,``),r.startsWith(`.`)||(r=`./`+r),r}function de(e){let t=e.relativePath.replace(/^src\//,``).replace(/\.(ts|tsx|mts|cts)$/i,``).split(`/`);t.pop();let n=t.join(`/`);return n?`${n}/${e.className}`:e.className}function fe(e,t,n){let r=new Set,i=[];for(let a of e){if(!W.has(a.decorator))continue;let e=n.has(a.className)?de(a):a.className;if(r.has(e))continue;r.add(e);let o=ue(a.filePath,t),s=a.isDefault?`import('${o}').default`:`import('${o}').${a.className}`;i.push(` '${e}': ${s}`)}return`${U}
14
+ declare module '@forinda/kickjs' {
15
+ interface KickJsRegistry {
16
+ ${i.length?i.join(`
17
+ `):" // (no services discovered yet — run `kick g service <name>` to add one)"}
18
+ }
19
+ }
20
+
21
+ export {}
22
+ `}function K(e,t,n){return t.length===0?`${U}
23
+ // ${n}
24
+ export type ${e} = never
25
+ `:`${U}
26
+ export type ${e} =
27
+ ${[...new Set(t)].toSorted().map(e=>` | '${e}'`).join(`
28
+ `)}
29
+ `}function pe(e,t){return`${U}
30
+ export type { ServiceToken } from './services'
31
+ export type { ModuleToken } from './modules'
32
+
33
+ // The registry, routes, plugins, assets, and env augmentations are
34
+ // loaded as side-effects — importing this file (or having it on
35
+ // tsconfig include) is enough for \`container.resolve()\`,
36
+ // \`Ctx<KickRoutes.UserController['getUser']>\`,
37
+ // \`dependsOn: ['TenantAdapter']\`, \`assets.mails.welcome()\`, and
38
+ // \`@Value('PORT')\` to resolve.
39
+ import './registry'
40
+ import './kick__routes'
41
+ import './plugins'
42
+ import './augmentations'
43
+ ${t?`import './kick__assets'
44
+ `:``}${e?`import './kick__env'
45
+ `:``}`}function me(e){let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);return`${U}
46
+ declare module '@forinda/kickjs' {
47
+ /**
48
+ * Map of every plugin/adapter \`name\` discovered in the project. The
49
+ * value type is the kind tag (\`'plugin'\` or \`'adapter'\`); the
50
+ * \`keyof\` of this interface narrows \`dependsOn\` so misspelled deps
51
+ * become compile errors instead of boot-time \`MissingMountDepError\`.
52
+ */
53
+ interface KickJsPluginRegistry {
54
+ ${[...t.values()].toSorted((e,t)=>e.name.localeCompare(t.name)).map(e=>` '${e.name}': '${e.kind}'`).join(`
55
+ `)||" // (no plugins/adapters discovered yet — `defineAdapter`/`definePlugin` calls feed this)"}
56
+ }
57
+ }
58
+
59
+ export {}
60
+ `}function he(e){if(e.length===0)return`${U}
61
+ // No augmentations discovered.
62
+ //
63
+ // Plugins advertise augmentable interfaces via:
64
+ //
65
+ // import { defineAugmentation } from '@forinda/kickjs'
66
+ // defineAugmentation('FeatureFlags', {
67
+ // description: 'Feature flag shape consumed by FlagsPlugin',
68
+ // example: '{ beta: boolean; rolloutPercentage: number }',
69
+ // })
70
+ //
71
+ // See \`docs/guide/typegen.md#augmentations\` for the full pattern.
72
+ export {}
73
+ `;let t=new Map;for(let n of e)t.has(n.name)||t.set(n.name,n);let n=[];for(let e of[...t.values()].toSorted((e,t)=>e.name.localeCompare(t.name))){let t=[];if(e.description)for(let n of e.description.split(`
74
+ `))t.push(` * ${n}`);if(e.example){t.push(` * @example`," * ```ts");for(let n of e.example.split(`
75
+ `))t.push(` * ${n}`);t.push(" * ```")}t.push(` * @see ${e.relativePath}`),n.push([`/**`,...t,` */`,`export interface ${e.name}Augmentation {}`].join(`
76
+ `))}return`${U}
77
+ // Catalogue of augmentable interfaces in this project. The interfaces
78
+ // below are documentation only — augment the source-of-truth interfaces
79
+ // in your own \`d.ts\` files (the framework declares the actual types).
80
+
81
+ ${n.join(`
82
+
83
+ `)}
84
+ `}async function ge(e){let{classes:t,routes:i=[],tokens:a=[],injects:o=[],collisions:s=[],env:l=null,pluginsAndAdapters:u=[],augmentations:d=[],assets:f={entries:[],count:0},outDir:m,allowDuplicates:h=!1,schemaValidator:g=!1}=e;if(s.length>0&&!h)throw new G(s);await c(m,{recursive:!0});let _=r(m,`registry.d.ts`),v=r(m,`services.d.ts`),y=r(m,`modules.d.ts`),b=r(m,`plugins.d.ts`),x=r(m,`augmentations.d.ts`),S=r(m,`index.d.ts`),C=new Set(s.map(e=>e.className)),w=fe(t,_,C),T=t.filter(e=>W.has(e.decorator)).map(e=>C.has(e.className)?de(e):e.className),E=a.map(e=>e.name),D=o.map(e=>e.name),O=[...T,...E,...D],k=t.filter(e=>e.decorator===`Module`).map(e=>e.className),A=K(`ServiceToken`,O,"(no tokens discovered — declare with createToken<T>() or `kick g service <name>`)"),j=K(`ModuleToken`,k,"(no @Module classes discovered — `kick g module <name>` to add one)"),M=me(u),N=he(d),P=pe(l!==null,f.count>0);await p(_,w,`utf-8`),await p(v,A,`utf-8`),await p(y,j,`utf-8`),await p(b,M,`utf-8`),await p(x,N,`utf-8`),await p(S,P,`utf-8`);let F=[_,v,y,b,x,S];await p(r(n(m),`.gitignore`),`# Auto-generated by kick typegen
85
+ *
86
+ `,`utf-8`);let I=new Set(u.map(e=>e.name)).size,L=new Set(d.map(e=>e.name)).size;return{registryEntries:T.length,serviceTokens:new Set(O).size,moduleTokens:k.length,routeEntries:i.length,pluginEntries:I,augmentationEntries:L,assetEntries:f.count,envWritten:l!==null,written:F,resolvedCollisions:s.length}}const _e=/^(kick\/)?([a-z][\w-]*\/[A-Z]\w*)(\/.+)?(:[a-z][\w-]+(:[a-z][\w-]+)*)?$/;function ve(e){let t=[];for(let n of e){let e=n.name;e.startsWith(`kickjs.`)||_e.test(e)||t.push({token:e,variable:n.variable,filePath:n.relativePath,reason:"does not match `<scope>/<PascalKey>[/<suffix>][:<instance>]`",suggestion:ye(e)})}return t}function ye(e){if(/^[A-Z]\w*$/.test(e))return`'<scope>/${e}' (e.g. 'mycorp/${e}')`;if(e.includes(`.`))return`consider '<scope>/PascalKey' instead of dotted form`;let t=/^([a-z][\w-]*)\/([a-z]\w*)$/.exec(e);if(t){let[,e,n]=t;return`'${e}/${n.charAt(0).toUpperCase()}${n.slice(1)}'`}}function q(e,t){if(!e)return{entries:[],count:0};let n=new Map;for(let[r,i]of Object.entries(e)){if(!i||typeof i.src!=`string`)continue;let e=a(t,i.src);if(!Se(e))continue;let o=m(i.glob??`**/*`,{cwd:e,nodir:!0,dot:!1,posix:!0});o.sort();let{pairs:s}=h(r,o,{strategy:i.keys??`auto`});for(let{key:e}of s){let t=e.slice(r.length+1);n.set(e,{namespace:r,key:t})}}return{entries:[...n.values()],count:n.size}}function be(e){let t="/* eslint-disable */\n// AUTO-GENERATED by `kick typegen`. DO NOT EDIT.\n// Re-run with `kick typegen` or rely on `kick dev` to refresh.\n";if(e.entries.length===0)return`${t}
87
+ declare module '@forinda/kickjs' {
88
+ /**
89
+ * Map of every typed asset discovered in the project's assetMap.
90
+ * (No assetMap entries discovered yet — declare with
91
+ * \`assetMap: { name: { src: 'src/...' } }\` in kick.config.ts.)
92
+ */
93
+ interface KickAssets {}
94
+ }
95
+
96
+ export {}
97
+ `;let n={};for(let t of e.entries){let e=`${t.namespace}/${t.key}`.split(`/`),r=n;for(let t=0;t<e.length-1;t++){let n=e[t],i=r[n];if(i===J){let e={};r[n]=e,r=e}else i||(r[n]={}),r=r[n]}let i=e[e.length-1];typeof r[i]!=`object`&&(r[i]=J)}return`${t}
98
+ declare module '@forinda/kickjs' {
99
+ /**
100
+ * Map of every typed asset discovered in the project's assetMap.
101
+ * Each leaf is a \`() => string\` thunk that returns the resolved
102
+ * absolute path for the file in the current run mode (dev → src,
103
+ * prod → dist).
104
+ */
105
+ interface KickAssets {
106
+ ${Y(n,` `)}
107
+ }
108
+ }
109
+
110
+ export {}
111
+ `}const J=Symbol(`asset-leaf`);function Y(e,t){let n=Object.keys(e).toSorted(),r=[];for(let i of n){let n=e[i],a=xe(i)?i:JSON.stringify(i);n===J?r.push(`${t}${a}: () => string`):(r.push(`${t}${a}: {`),r.push(Y(n,`${t} `)),r.push(`${t}}`))}return r.join(`
112
+ `)}function xe(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(e)}function Se(e){try{return s(e).isDirectory()}catch{return!1}}var Ce=e({runTypegen:()=>Z,sweepStaleTypegen:()=>$,watchTypegen:()=>we});function X(e){let t=e.cwd??process.cwd();return{cwd:t,srcDir:a(t,e.srcDir??`src`),outDir:a(t,e.outDir??`.kickjs/types`),silent:e.silent??!1,allowDuplicates:e.allowDuplicates??!1,schemaValidator:e.schemaValidator??!1,envFile:e.envFile??`src/env.ts`}}async function Z(e={}){let{cwd:t,srcDir:n,outDir:r,silent:i,allowDuplicates:a,schemaValidator:o,envFile:s}=X(e),c=Date.now(),l=await H({root:n,cwd:t,envFile:s===!1?void 0:s}),u=q(e.assetMap,t),d=await ge({classes:l.classes,routes:l.routes,tokens:l.tokens,injects:l.injects,collisions:l.collisions,env:s===!1?null:l.env,pluginsAndAdapters:l.pluginsAndAdapters,augmentations:l.augmentations,assets:u,outDir:r,allowDuplicates:a,schemaValidator:o}),f=[];if(e.runPlugins!==!1)try{let{runAllPluginTypegens:e}=await import(`./run-plugins-BtSj_FSc.mjs`),{loadKickConfig:n}=await import(`./config-CwM2Sr53.mjs`).then(e=>e.n);f=await e({cwd:t,config:await n(t),silent:!0})}catch(e){if(!i){let t=e instanceof Error?e.message:String(e);console.warn(` kick typegen: plugin pipeline failed (${t}) — continuing`)}}e.runPlugins!==!1&&await $(r,d.written,f,i);let p=ve(l.tokens),m=Date.now()-c;if(!i){let e=r.replace(t+`/`,``),n=d.resolvedCollisions>0?`, ${d.resolvedCollisions} collisions namespaced`:``,i=d.envWritten?`, env typed`:``,a=d.pluginEntries>0?`, ${d.pluginEntries} plugins/adapters`:``,o=d.augmentationEntries>0?`, ${d.augmentationEntries} augmentations`:``,s=d.assetEntries>0?`, ${d.assetEntries} assets`:``;if(console.log(` kick typegen → ${d.serviceTokens} services, ${d.routeEntries} routes, ${d.moduleTokens} modules${a}${o}${s}${i}${n} → ${e} (${m}ms)`),p.length>0){console.warn(` kick typegen: ${p.length} token(s) don't match the §22.2 convention:`);for(let e of p){let t=e.variable?` [${e.variable}]`:``;console.warn(` '${e.token}' (${e.filePath})${t} — ${e.reason}`),e.suggestion&&console.warn(` → suggestion: ${e.suggestion}`)}}}return{scan:l,result:d,tokenWarnings:p}}async function we(e={}){let t=X(e),{srcDir:n,silent:r,cwd:i}=t,a={...t,allowDuplicates:!0,runPlugins:!1},o=process.env.KICKJS_WATCH_POLLING===`1`||process.env.KICKJS_WATCH_POLLING===`true`,[{runAllPluginTypegens:s},{loadKickConfig:c}]=await Promise.all([import(`./run-plugins-BtSj_FSc.mjs`),import(`./config-CwM2Sr53.mjs`).then(e=>e.n)]),l=await c(i),u=[],d=async()=>{try{u=(await Z({...a})).result.written}catch(e){if(r)return;if(e instanceof G)console.error(`
113
+ `+e.message+`
114
+ `);else{let t=e instanceof Error?e.message:String(e);console.error(` kick typegen failed: ${t}`)}}},f=async()=>{try{let e=await s({cwd:i,config:l,silent:!0});await $(t.outDir,u,e,!0)}catch{}};await d(),await f();let{watch:p}=await import(`node:fs`),m=null,h=e=>{e&&/\.(ts|tsx|mts|cts)$/.test(e)&&(e.includes(`.kickjs`)||e.endsWith(`.d.ts`)||(m&&clearTimeout(m),m=setTimeout(()=>{d().then(f)},100)))};if(o){r||console.log(` kick typegen: polling mode (KICKJS_WATCH_POLLING)`);let e=setInterval(()=>{Q({...a,silent:!0},!0)},2e3);return()=>clearInterval(e)}let g;try{g=p(n,{recursive:!0},(e,t)=>{h(t)})}catch(e){r||console.warn(` kick typegen: watch mode unavailable (${e?.message??e}). Falling back to polling.`);let t=setInterval(()=>{Q({...a,silent:!0},!0)},2e3);return()=>clearInterval(t)}return()=>{m&&clearTimeout(m),g.close()}}async function Q(e,t){try{await Z(e)}catch(e){if(t)return;if(e instanceof G)console.error(`
115
+ `+e.message+`
116
+ `);else{let t=e instanceof Error?e.message:String(e);console.error(` kick typegen failed: ${t}`)}}}async function $(e,n,r,i){let o=new Set;for(let e of n)o.add(t(e));for(let e of r)e.outFile&&o.add(t(e.outFile));let s;try{s=await u(e)}catch{return[]}let c=[];for(let t of s){if(o.has(t))continue;let n=a(e,t);try{if(!(await d(n)).isFile())continue;await f(n),c.push(t)}catch{}}return c.length>0&&!i&&console.log(` kick typegen: swept ${c.length} stale file(s): ${c.join(`, `)}`),c}export{q as a,H as c,we as i,$ as n,be as o,Ce as r,G as s,Z as t};
117
+ //# sourceMappingURL=typegen-B4_u3xBO.mjs.map