@forinda/kickjs-cli 3.1.3 → 4.0.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/README.md +12 -89
- package/dist/cli.mjs +974 -49
- package/dist/index.d.mts +252 -9
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +182 -28
- package/dist/index.mjs.map +1 -1
- package/dist/{typegen-0X9tc3wa.mjs → typegen-vI1eqGLK.mjs} +446 -11
- package/dist/typegen-vI1eqGLK.mjs.map +1 -0
- package/package.json +9 -14
- package/dist/typegen-0X9tc3wa.mjs.map +0 -1
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.
|
|
@@ -309,6 +370,188 @@ interface InitProjectOptions {
|
|
|
309
370
|
/** Scaffold a new KickJS project */
|
|
310
371
|
declare function initProject(options: InitProjectOptions): Promise<void>;
|
|
311
372
|
//#endregion
|
|
373
|
+
//#region src/generator-extension/define.d.ts
|
|
374
|
+
/**
|
|
375
|
+
* Plugin generator API per architecture.md §21.2.3 — lets first-party
|
|
376
|
+
* AND third-party packages ship `kick g <name>` scaffolders the same
|
|
377
|
+
* way the framework's built-in generators do.
|
|
378
|
+
*
|
|
379
|
+
* Plugins declare a discovery file in their `package.json`:
|
|
380
|
+
*
|
|
381
|
+
* ```json
|
|
382
|
+
* {
|
|
383
|
+
* "name": "@my-org/kickjs-cqrs",
|
|
384
|
+
* "kickjs": { "generators": "./dist/generators.js" }
|
|
385
|
+
* }
|
|
386
|
+
* ```
|
|
387
|
+
*
|
|
388
|
+
* The discovery file exports a typed manifest:
|
|
389
|
+
*
|
|
390
|
+
* ```ts
|
|
391
|
+
* import { defineGenerator } from '@forinda/kickjs-cli'
|
|
392
|
+
*
|
|
393
|
+
* export default [
|
|
394
|
+
* defineGenerator({
|
|
395
|
+
* name: 'command',
|
|
396
|
+
* description: 'Generate a CQRS command + handler',
|
|
397
|
+
* args: [{ name: 'name', required: true }],
|
|
398
|
+
* files: (ctx) => [
|
|
399
|
+
* {
|
|
400
|
+
* path: `src/modules/${ctx.kebab}/commands/create-${ctx.kebab}.command.ts`,
|
|
401
|
+
* content: `// generated command for ${ctx.pascal}`,
|
|
402
|
+
* },
|
|
403
|
+
* ],
|
|
404
|
+
* }),
|
|
405
|
+
* ]
|
|
406
|
+
* ```
|
|
407
|
+
*
|
|
408
|
+
* `kick g command Order` then dispatches against the registered
|
|
409
|
+
* generator and writes the returned files relative to `cwd`.
|
|
410
|
+
*/
|
|
411
|
+
/**
|
|
412
|
+
* Resolved naming variants + project context handed to a generator's
|
|
413
|
+
* `files()` factory. Keys mirror `TemplateContext` so first-party
|
|
414
|
+
* generators that rely on the same shape can be migrated to plugin
|
|
415
|
+
* generators without rewriting their templates.
|
|
416
|
+
*/
|
|
417
|
+
interface GeneratorContext {
|
|
418
|
+
/** Raw name passed on the command line (`kick g resolver UserPost` → `'UserPost'`). */
|
|
419
|
+
name: string;
|
|
420
|
+
/** PascalCase form (`UserPost`). */
|
|
421
|
+
pascal: string;
|
|
422
|
+
/** kebab-case form (`user-post`). */
|
|
423
|
+
kebab: string;
|
|
424
|
+
/** camelCase form (`userPost`). */
|
|
425
|
+
camel: string;
|
|
426
|
+
/** snake_case form (`user_post`). */
|
|
427
|
+
snake: string;
|
|
428
|
+
/** Pluralized PascalCase (`UserPosts`) — present when the project enables `pluralize`. */
|
|
429
|
+
pluralPascal?: string;
|
|
430
|
+
/** Pluralized kebab-case (`user-posts`). */
|
|
431
|
+
pluralKebab?: string;
|
|
432
|
+
/** Pluralized camelCase (`userPosts`). */
|
|
433
|
+
pluralCamel?: string;
|
|
434
|
+
/** Modules directory from `kick.config.ts` (default `'src/modules'`). */
|
|
435
|
+
modulesDir: string;
|
|
436
|
+
/** Working directory for the generator — usually `process.cwd()`. */
|
|
437
|
+
cwd: string;
|
|
438
|
+
/** Positional arguments passed AFTER the name (e.g. `kick g command Order extra1 extra2` → `['extra1', 'extra2']`). */
|
|
439
|
+
args: string[];
|
|
440
|
+
/** Flag values from the command line — booleans for switches, strings for `--key value`. */
|
|
441
|
+
flags: Record<string, string | boolean>;
|
|
442
|
+
}
|
|
443
|
+
/** A single output file the generator wants written. */
|
|
444
|
+
interface GeneratorFile {
|
|
445
|
+
/**
|
|
446
|
+
* Output path. Relative paths resolve against `ctx.cwd`; absolute
|
|
447
|
+
* paths are used as-is. Parent directories are created automatically.
|
|
448
|
+
*/
|
|
449
|
+
path: string;
|
|
450
|
+
/** File contents written verbatim (UTF-8). */
|
|
451
|
+
content: string;
|
|
452
|
+
}
|
|
453
|
+
/** CLI argument descriptor surfaced in `kick g --list` help. */
|
|
454
|
+
interface GeneratorArg {
|
|
455
|
+
name: string;
|
|
456
|
+
required?: boolean;
|
|
457
|
+
description?: string;
|
|
458
|
+
}
|
|
459
|
+
/** CLI flag descriptor — boolean unless `takesValue: true`. */
|
|
460
|
+
interface GeneratorFlag {
|
|
461
|
+
name: string;
|
|
462
|
+
alias?: string;
|
|
463
|
+
description?: string;
|
|
464
|
+
takesValue?: boolean;
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Spec returned by {@link defineGenerator}. Plugin discovery files
|
|
468
|
+
* export `GeneratorSpec[]` as their default export.
|
|
469
|
+
*/
|
|
470
|
+
interface GeneratorSpec {
|
|
471
|
+
/**
|
|
472
|
+
* Dispatch name — `kick g <name>` looks for an exact match against
|
|
473
|
+
* this string after the built-in generators are checked.
|
|
474
|
+
*/
|
|
475
|
+
name: string;
|
|
476
|
+
/** Description shown in `kick g --list` and `--help`. */
|
|
477
|
+
description: string;
|
|
478
|
+
/** Optional argument descriptors — informational, surfaced in help output. */
|
|
479
|
+
args?: readonly GeneratorArg[];
|
|
480
|
+
/** Optional flag descriptors — informational, surfaced in help output. */
|
|
481
|
+
flags?: readonly GeneratorFlag[];
|
|
482
|
+
/** Build the output files for one invocation. May return a Promise. */
|
|
483
|
+
files(ctx: GeneratorContext): GeneratorFile[] | Promise<GeneratorFile[]>;
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Identity factory — returns the spec verbatim. Exists for type
|
|
487
|
+
* inference and forward-compatibility (future fields can be added with
|
|
488
|
+
* defaults).
|
|
489
|
+
*
|
|
490
|
+
* @example
|
|
491
|
+
* ```ts
|
|
492
|
+
* import { defineGenerator } from '@forinda/kickjs-cli'
|
|
493
|
+
*
|
|
494
|
+
* export default [
|
|
495
|
+
* defineGenerator({
|
|
496
|
+
* name: 'command',
|
|
497
|
+
* description: 'Generate a CQRS command + handler',
|
|
498
|
+
* files: (ctx) => [
|
|
499
|
+
* {
|
|
500
|
+
* path: `src/modules/${ctx.kebab}/commands/${ctx.kebab}.command.ts`,
|
|
501
|
+
* content: `// command for ${ctx.pascal}`,
|
|
502
|
+
* },
|
|
503
|
+
* ],
|
|
504
|
+
* }),
|
|
505
|
+
* ]
|
|
506
|
+
* ```
|
|
507
|
+
*/
|
|
508
|
+
declare function defineGenerator(spec: GeneratorSpec): GeneratorSpec;
|
|
509
|
+
//#endregion
|
|
510
|
+
//#region src/generator-extension/discover.d.ts
|
|
511
|
+
/**
|
|
512
|
+
* One row in the discovered registry. `source` is the npm package name
|
|
513
|
+
* the generator came from — surfaced in error messages so adopters can
|
|
514
|
+
* see which plugin owns a given generator.
|
|
515
|
+
*/
|
|
516
|
+
interface DiscoveredGenerator {
|
|
517
|
+
source: string;
|
|
518
|
+
spec: GeneratorSpec;
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Plugin discovery result, kept around even when no generators were
|
|
522
|
+
* registered so callers can distinguish "no plugins installed" from
|
|
523
|
+
* "no plugins matched the requested name."
|
|
524
|
+
*/
|
|
525
|
+
interface DiscoveryResult {
|
|
526
|
+
generators: DiscoveredGenerator[];
|
|
527
|
+
/** Packages whose `kickjs.generators` was loaded successfully. */
|
|
528
|
+
loaded: string[];
|
|
529
|
+
/**
|
|
530
|
+
* Packages we tried to load but failed — typically a missing entry
|
|
531
|
+
* file or a default export that wasn't an array of GeneratorSpec.
|
|
532
|
+
*/
|
|
533
|
+
failed: Array<{
|
|
534
|
+
source: string;
|
|
535
|
+
reason: string;
|
|
536
|
+
}>;
|
|
537
|
+
}
|
|
538
|
+
//#endregion
|
|
539
|
+
//#region src/generator-extension/context.d.ts
|
|
540
|
+
/**
|
|
541
|
+
* Build a {@link GeneratorContext} from the raw name + invocation
|
|
542
|
+
* arguments. Centralises the case-transformation logic so every plugin
|
|
543
|
+
* generator sees the same shape regardless of how the name was typed
|
|
544
|
+
* on the command line (`Post` vs `post` vs `user_post`).
|
|
545
|
+
*/
|
|
546
|
+
declare function buildGeneratorContext(input: {
|
|
547
|
+
name: string;
|
|
548
|
+
args?: string[];
|
|
549
|
+
flags?: Record<string, string | boolean>;
|
|
550
|
+
modulesDir?: string;
|
|
551
|
+
cwd?: string;
|
|
552
|
+
pluralize?: boolean;
|
|
553
|
+
}): GeneratorContext;
|
|
554
|
+
//#endregion
|
|
312
555
|
//#region src/utils/naming.d.ts
|
|
313
556
|
/** Convert a name to PascalCase */
|
|
314
557
|
declare function toPascalCase(name: string): string;
|
|
@@ -323,5 +566,5 @@ declare function toKebabCase(name: string): string;
|
|
|
323
566
|
*/
|
|
324
567
|
declare function pluralize(name: string): string;
|
|
325
568
|
//#endregion
|
|
326
|
-
export { type KickCommandDefinition, type KickConfig, defineConfig, generateAdapter, generateController, generateDto, generateGuard, generateMiddleware, generateModule, generateService, initProject, loadKickConfig, pluralize, toCamelCase, toKebabCase, toPascalCase };
|
|
569
|
+
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
570
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -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":";;;
|
|
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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"}
|