@forinda/kickjs-cli 3.2.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -38,6 +38,33 @@ type RepoTypeConfig = BuiltinRepoType$1 | CustomRepoType;
38
38
  * entirely (the route entries will keep `body: unknown`).
39
39
  */
40
40
  type SchemaValidator = 'zod' | false;
41
+ /**
42
+ * One entry in the typed `assetMap` config record (`assets-plan.md`).
43
+ * Each entry names a source directory whose files become addressable
44
+ * via the `assets.<name>.*` typed accessor at runtime.
45
+ */
46
+ interface AssetMapEntry {
47
+ /**
48
+ * Source directory, relative to project root. Required. The directory
49
+ * must exist when `kick build` runs — `loadKickConfig` warns when an
50
+ * entry points at a missing directory but doesn't fail the load
51
+ * (the typegen + build steps surface the error in context instead).
52
+ */
53
+ src: string;
54
+ /**
55
+ * Destination directory inside `dist/`. Defaults to `dist/<name>/`
56
+ * where `<name>` is the assetMap key. Override when the consumer of
57
+ * the assets expects a non-standard layout (e.g. an existing
58
+ * downstream tool reads from `dist/templates/...`).
59
+ */
60
+ dest?: string;
61
+ /**
62
+ * Glob pattern for which files to include. Defaults to `**\/*` (all
63
+ * files). Files that don't match are NOT copied — `assetMap` is
64
+ * selective by design (unlike `copyDirs` which copies everything).
65
+ */
66
+ glob?: string;
67
+ }
41
68
  /** Typegen settings — controls .kickjs/types/* generation */
42
69
  interface TypegenConfig {
43
70
  /**
@@ -150,14 +177,6 @@ interface KickConfig {
150
177
  * packageManager: 'pnpm'
151
178
  */
152
179
  packageManager?: PackageManager;
153
- /** @deprecated Use `modules.dir` instead */
154
- modulesDir?: string;
155
- /** @deprecated Use `modules.repo` instead */
156
- defaultRepo?: RepoTypeConfig;
157
- /** @deprecated Use `modules.schemaDir` instead */
158
- schemaDir?: string;
159
- /** @deprecated Use `modules.pluralize` instead */
160
- pluralize?: boolean;
161
180
  /**
162
181
  * Directories to copy to dist/ after build.
163
182
  * Useful for EJS templates, email templates, static assets, etc.
@@ -175,6 +194,48 @@ interface KickConfig {
175
194
  src: string;
176
195
  dest?: string;
177
196
  }>;
197
+ /**
198
+ * Build output settings. The asset manager + `kick build`'s copy
199
+ * steps honour these — adopters who use Vite's `build.outDir =
200
+ * 'out'` (or any non-default) should mirror the value here so
201
+ * `assets.x.y()` paths line up with where Vite actually wrote.
202
+ *
203
+ * @example
204
+ * ```ts
205
+ * build: { outDir: 'out' }
206
+ * ```
207
+ */
208
+ build?: {
209
+ /**
210
+ * Output directory, relative to project root. Defaults to
211
+ * `'dist'`. The asset manager emits its manifest + copies
212
+ * assetMap entries into this directory (under a per-namespace
213
+ * subdirectory by default; override per-entry via `dest`).
214
+ */
215
+ outDir?: string;
216
+ };
217
+ /**
218
+ * Typed, addressable assets — see `assets-plan.md`. Each entry maps
219
+ * a logical namespace name to a source directory. The build pipeline
220
+ * auto-derives the necessary copy step + emits a manifest at
221
+ * `dist/.kickjs-assets.json`; the runtime exposes
222
+ * `import { assets } from '@forinda/kickjs'` so adopters can resolve
223
+ * paths without dev/prod branching.
224
+ *
225
+ * `copyDirs` is unchanged — `assetMap` is a separate, opt-in surface.
226
+ * Adopters who want raw directory copies keep using `copyDirs`; those
227
+ * who want typed addressable assets add `assetMap` entries.
228
+ *
229
+ * @example
230
+ * ```ts
231
+ * assetMap: {
232
+ * mails: { src: 'src/templates/mails' },
233
+ * reports: { src: 'src/templates/reports', glob: '**\/*.{ejs,html}' },
234
+ * schemas: { src: 'src/schemas', glob: '**\/*.json' },
235
+ * }
236
+ * ```
237
+ */
238
+ assetMap?: Record<string, AssetMapEntry>;
178
239
  /**
179
240
  * Typegen settings — controls `.kickjs/types/*` generation including
180
241
  * the schema validator used for body type extraction.
@@ -237,6 +298,17 @@ interface GenerateAdapterOptions {
237
298
  name: string;
238
299
  outDir: string;
239
300
  }
301
+ /**
302
+ * Scaffold a `defineAdapter()` factory under `src/adapters/<name>.adapter.ts`.
303
+ *
304
+ * v4 dropped the `class implements AppAdapter` pattern in favour of the
305
+ * `defineAdapter()` factory (architecture.md §21.3.4). The generated
306
+ * template uses the new factory shape so adopters get a working
307
+ * adapter with all four lifecycle hooks (beforeMount, beforeStart,
308
+ * afterStart, shutdown), a typed config object with defaults, and the
309
+ * factory's call / `.scoped()` / `.async()` surfaces — without
310
+ * writing a single class.
311
+ */
240
312
  declare function generateAdapter(options: GenerateAdapterOptions): Promise<string[]>;
241
313
  //#endregion
242
314
  //#region src/generators/middleware.d.ts
@@ -309,6 +381,188 @@ interface InitProjectOptions {
309
381
  /** Scaffold a new KickJS project */
310
382
  declare function initProject(options: InitProjectOptions): Promise<void>;
311
383
  //#endregion
384
+ //#region src/generator-extension/define.d.ts
385
+ /**
386
+ * Plugin generator API per architecture.md §21.2.3 — lets first-party
387
+ * AND third-party packages ship `kick g <name>` scaffolders the same
388
+ * way the framework's built-in generators do.
389
+ *
390
+ * Plugins declare a discovery file in their `package.json`:
391
+ *
392
+ * ```json
393
+ * {
394
+ * "name": "@my-org/kickjs-cqrs",
395
+ * "kickjs": { "generators": "./dist/generators.js" }
396
+ * }
397
+ * ```
398
+ *
399
+ * The discovery file exports a typed manifest:
400
+ *
401
+ * ```ts
402
+ * import { defineGenerator } from '@forinda/kickjs-cli'
403
+ *
404
+ * export default [
405
+ * defineGenerator({
406
+ * name: 'command',
407
+ * description: 'Generate a CQRS command + handler',
408
+ * args: [{ name: 'name', required: true }],
409
+ * files: (ctx) => [
410
+ * {
411
+ * path: `src/modules/${ctx.kebab}/commands/create-${ctx.kebab}.command.ts`,
412
+ * content: `// generated command for ${ctx.pascal}`,
413
+ * },
414
+ * ],
415
+ * }),
416
+ * ]
417
+ * ```
418
+ *
419
+ * `kick g command Order` then dispatches against the registered
420
+ * generator and writes the returned files relative to `cwd`.
421
+ */
422
+ /**
423
+ * Resolved naming variants + project context handed to a generator's
424
+ * `files()` factory. Keys mirror `TemplateContext` so first-party
425
+ * generators that rely on the same shape can be migrated to plugin
426
+ * generators without rewriting their templates.
427
+ */
428
+ interface GeneratorContext {
429
+ /** Raw name passed on the command line (`kick g resolver UserPost` → `'UserPost'`). */
430
+ name: string;
431
+ /** PascalCase form (`UserPost`). */
432
+ pascal: string;
433
+ /** kebab-case form (`user-post`). */
434
+ kebab: string;
435
+ /** camelCase form (`userPost`). */
436
+ camel: string;
437
+ /** snake_case form (`user_post`). */
438
+ snake: string;
439
+ /** Pluralized PascalCase (`UserPosts`) — present when the project enables `pluralize`. */
440
+ pluralPascal?: string;
441
+ /** Pluralized kebab-case (`user-posts`). */
442
+ pluralKebab?: string;
443
+ /** Pluralized camelCase (`userPosts`). */
444
+ pluralCamel?: string;
445
+ /** Modules directory from `kick.config.ts` (default `'src/modules'`). */
446
+ modulesDir: string;
447
+ /** Working directory for the generator — usually `process.cwd()`. */
448
+ cwd: string;
449
+ /** Positional arguments passed AFTER the name (e.g. `kick g command Order extra1 extra2` → `['extra1', 'extra2']`). */
450
+ args: string[];
451
+ /** Flag values from the command line — booleans for switches, strings for `--key value`. */
452
+ flags: Record<string, string | boolean>;
453
+ }
454
+ /** A single output file the generator wants written. */
455
+ interface GeneratorFile {
456
+ /**
457
+ * Output path. Relative paths resolve against `ctx.cwd`; absolute
458
+ * paths are used as-is. Parent directories are created automatically.
459
+ */
460
+ path: string;
461
+ /** File contents written verbatim (UTF-8). */
462
+ content: string;
463
+ }
464
+ /** CLI argument descriptor surfaced in `kick g --list` help. */
465
+ interface GeneratorArg {
466
+ name: string;
467
+ required?: boolean;
468
+ description?: string;
469
+ }
470
+ /** CLI flag descriptor — boolean unless `takesValue: true`. */
471
+ interface GeneratorFlag {
472
+ name: string;
473
+ alias?: string;
474
+ description?: string;
475
+ takesValue?: boolean;
476
+ }
477
+ /**
478
+ * Spec returned by {@link defineGenerator}. Plugin discovery files
479
+ * export `GeneratorSpec[]` as their default export.
480
+ */
481
+ interface GeneratorSpec {
482
+ /**
483
+ * Dispatch name — `kick g <name>` looks for an exact match against
484
+ * this string after the built-in generators are checked.
485
+ */
486
+ name: string;
487
+ /** Description shown in `kick g --list` and `--help`. */
488
+ description: string;
489
+ /** Optional argument descriptors — informational, surfaced in help output. */
490
+ args?: readonly GeneratorArg[];
491
+ /** Optional flag descriptors — informational, surfaced in help output. */
492
+ flags?: readonly GeneratorFlag[];
493
+ /** Build the output files for one invocation. May return a Promise. */
494
+ files(ctx: GeneratorContext): GeneratorFile[] | Promise<GeneratorFile[]>;
495
+ }
496
+ /**
497
+ * Identity factory — returns the spec verbatim. Exists for type
498
+ * inference and forward-compatibility (future fields can be added with
499
+ * defaults).
500
+ *
501
+ * @example
502
+ * ```ts
503
+ * import { defineGenerator } from '@forinda/kickjs-cli'
504
+ *
505
+ * export default [
506
+ * defineGenerator({
507
+ * name: 'command',
508
+ * description: 'Generate a CQRS command + handler',
509
+ * files: (ctx) => [
510
+ * {
511
+ * path: `src/modules/${ctx.kebab}/commands/${ctx.kebab}.command.ts`,
512
+ * content: `// command for ${ctx.pascal}`,
513
+ * },
514
+ * ],
515
+ * }),
516
+ * ]
517
+ * ```
518
+ */
519
+ declare function defineGenerator(spec: GeneratorSpec): GeneratorSpec;
520
+ //#endregion
521
+ //#region src/generator-extension/discover.d.ts
522
+ /**
523
+ * One row in the discovered registry. `source` is the npm package name
524
+ * the generator came from — surfaced in error messages so adopters can
525
+ * see which plugin owns a given generator.
526
+ */
527
+ interface DiscoveredGenerator {
528
+ source: string;
529
+ spec: GeneratorSpec;
530
+ }
531
+ /**
532
+ * Plugin discovery result, kept around even when no generators were
533
+ * registered so callers can distinguish "no plugins installed" from
534
+ * "no plugins matched the requested name."
535
+ */
536
+ interface DiscoveryResult {
537
+ generators: DiscoveredGenerator[];
538
+ /** Packages whose `kickjs.generators` was loaded successfully. */
539
+ loaded: string[];
540
+ /**
541
+ * Packages we tried to load but failed — typically a missing entry
542
+ * file or a default export that wasn't an array of GeneratorSpec.
543
+ */
544
+ failed: Array<{
545
+ source: string;
546
+ reason: string;
547
+ }>;
548
+ }
549
+ //#endregion
550
+ //#region src/generator-extension/context.d.ts
551
+ /**
552
+ * Build a {@link GeneratorContext} from the raw name + invocation
553
+ * arguments. Centralises the case-transformation logic so every plugin
554
+ * generator sees the same shape regardless of how the name was typed
555
+ * on the command line (`Post` vs `post` vs `user_post`).
556
+ */
557
+ declare function buildGeneratorContext(input: {
558
+ name: string;
559
+ args?: string[];
560
+ flags?: Record<string, string | boolean>;
561
+ modulesDir?: string;
562
+ cwd?: string;
563
+ pluralize?: boolean;
564
+ }): GeneratorContext;
565
+ //#endregion
312
566
  //#region src/utils/naming.d.ts
313
567
  /** Convert a name to PascalCase */
314
568
  declare function toPascalCase(name: string): string;
@@ -323,5 +577,5 @@ declare function toKebabCase(name: string): string;
323
577
  */
324
578
  declare function pluralize(name: string): string;
325
579
  //#endregion
326
- export { type KickCommandDefinition, type KickConfig, defineConfig, generateAdapter, generateController, generateDto, generateGuard, generateMiddleware, generateModule, generateService, initProject, loadKickConfig, pluralize, toCamelCase, toKebabCase, toPascalCase };
580
+ export { type DiscoveredGenerator, type DiscoveryResult, type GeneratorArg, type GeneratorContext, type GeneratorFile, type GeneratorFlag, type GeneratorSpec, type KickCommandDefinition, type KickConfig, buildGeneratorContext, defineConfig, defineGenerator, generateAdapter, generateController, generateDto, generateGuard, generateMiddleware, generateModule, generateService, initProject, loadKickConfig, pluralize, toCamelCase, toKebabCase, toPascalCase };
327
581
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/config.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/utils/naming.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/config.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/define.ts","../src/generator-extension/discover.ts","../src/generator-extension/context.ts","../src/utils/naming.ts"],"mappings":"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"}