@rudderjs/cli 4.12.0 → 4.14.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.
Files changed (80) hide show
  1. package/dist/commands/fresh.d.ts +18 -0
  2. package/dist/commands/fresh.d.ts.map +1 -0
  3. package/dist/commands/fresh.js +75 -0
  4. package/dist/commands/fresh.js.map +1 -0
  5. package/dist/commands/maintenance.d.ts +22 -0
  6. package/dist/commands/maintenance.d.ts.map +1 -0
  7. package/dist/commands/maintenance.js +67 -0
  8. package/dist/commands/maintenance.js.map +1 -0
  9. package/dist/commands/make/_shared.d.ts +7 -0
  10. package/dist/commands/make/_shared.d.ts.map +1 -1
  11. package/dist/commands/make/_shared.js +36 -0
  12. package/dist/commands/make/_shared.js.map +1 -1
  13. package/dist/commands/make/cast.d.ts +4 -0
  14. package/dist/commands/make/cast.d.ts.map +1 -0
  15. package/dist/commands/make/cast.js +37 -0
  16. package/dist/commands/make/cast.js.map +1 -0
  17. package/dist/commands/make/command.d.ts.map +1 -1
  18. package/dist/commands/make/command.js +1 -0
  19. package/dist/commands/make/command.js.map +1 -1
  20. package/dist/commands/make/controller.d.ts.map +1 -1
  21. package/dist/commands/make/controller.js +1 -0
  22. package/dist/commands/make/controller.js.map +1 -1
  23. package/dist/commands/make/event.d.ts.map +1 -1
  24. package/dist/commands/make/event.js +1 -0
  25. package/dist/commands/make/event.js.map +1 -1
  26. package/dist/commands/make/exception.d.ts +6 -0
  27. package/dist/commands/make/exception.d.ts.map +1 -0
  28. package/dist/commands/make/exception.js +53 -0
  29. package/dist/commands/make/exception.js.map +1 -0
  30. package/dist/commands/make/job.d.ts.map +1 -1
  31. package/dist/commands/make/job.js +1 -0
  32. package/dist/commands/make/job.js.map +1 -1
  33. package/dist/commands/make/listener.d.ts.map +1 -1
  34. package/dist/commands/make/listener.js +1 -0
  35. package/dist/commands/make/listener.js.map +1 -1
  36. package/dist/commands/make/mail.d.ts.map +1 -1
  37. package/dist/commands/make/mail.js +1 -0
  38. package/dist/commands/make/mail.js.map +1 -1
  39. package/dist/commands/make/middleware.d.ts.map +1 -1
  40. package/dist/commands/make/middleware.js +1 -0
  41. package/dist/commands/make/middleware.js.map +1 -1
  42. package/dist/commands/make/model.d.ts.map +1 -1
  43. package/dist/commands/make/model.js +1 -0
  44. package/dist/commands/make/model.js.map +1 -1
  45. package/dist/commands/make/notification.d.ts +4 -0
  46. package/dist/commands/make/notification.d.ts.map +1 -0
  47. package/dist/commands/make/notification.js +39 -0
  48. package/dist/commands/make/notification.js.map +1 -0
  49. package/dist/commands/make/observer.d.ts +4 -0
  50. package/dist/commands/make/observer.d.ts.map +1 -0
  51. package/dist/commands/make/observer.js +45 -0
  52. package/dist/commands/make/observer.js.map +1 -0
  53. package/dist/commands/make/policy.d.ts +4 -0
  54. package/dist/commands/make/policy.d.ts.map +1 -0
  55. package/dist/commands/make/policy.js +56 -0
  56. package/dist/commands/make/policy.js.map +1 -0
  57. package/dist/commands/make/provider.d.ts.map +1 -1
  58. package/dist/commands/make/provider.js +1 -0
  59. package/dist/commands/make/provider.js.map +1 -1
  60. package/dist/commands/make/request.d.ts.map +1 -1
  61. package/dist/commands/make/request.js +1 -0
  62. package/dist/commands/make/request.js.map +1 -1
  63. package/dist/commands/make/test-stubs.d.ts +24 -0
  64. package/dist/commands/make/test-stubs.d.ts.map +1 -0
  65. package/dist/commands/make/test-stubs.js +50 -0
  66. package/dist/commands/make/test-stubs.js.map +1 -0
  67. package/dist/commands/make/test.d.ts +2 -14
  68. package/dist/commands/make/test.d.ts.map +1 -1
  69. package/dist/commands/make/test.js +2 -41
  70. package/dist/commands/make/test.js.map +1 -1
  71. package/dist/commands/make.d.ts.map +1 -1
  72. package/dist/commands/make.js +10 -0
  73. package/dist/commands/make.js.map +1 -1
  74. package/dist/commands/optimize-clear.d.ts +28 -0
  75. package/dist/commands/optimize-clear.d.ts.map +1 -0
  76. package/dist/commands/optimize-clear.js +50 -0
  77. package/dist/commands/optimize-clear.js.map +1 -0
  78. package/dist/index.js +30 -2
  79. package/dist/index.js.map +1 -1
  80. package/package.json +5 -5
@@ -0,0 +1,18 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * `rudder fresh` — one-command dev reset. A thin composite over commands that
4
+ * each work standalone:
5
+ *
6
+ * 1. `migrate:fresh [--seed]` — drop all tables, re-run migrations
7
+ * (seeding stays opt-in, matching Laravel's `migrate:fresh --seed`)
8
+ * 2. `cache:clear` — flush the application cache store, so nothing cached
9
+ * against the old data survives the wipe (best-effort: skipped when no
10
+ * cache store is installed)
11
+ * 3. framework filesystem caches (same set as `optimize:clear`)
12
+ *
13
+ * Skip-boot orchestrator: each step that needs the app boots its own child
14
+ * process, so `fresh` itself never holds connections to the database it is
15
+ * about to drop.
16
+ */
17
+ export declare function freshCommand(program: Command): void;
18
+ //# sourceMappingURL=fresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fresh.d.ts","sourceRoot":"","sources":["../../src/commands/fresh.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6BxC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkCnD"}
@@ -0,0 +1,75 @@
1
+ import { spawn } from 'node:child_process';
2
+ import chalk from 'chalk';
3
+ import { clearFrameworkCaches, reportClearResults } from './optimize-clear.js';
4
+ /** Detect PM from npm_config_user_agent (set by every modern PM). Falls back to pnpm. */
5
+ function detectPackageManager() {
6
+ const ua = process.env['npm_config_user_agent'] ?? '';
7
+ if (ua.startsWith('pnpm'))
8
+ return 'pnpm';
9
+ if (ua.startsWith('yarn'))
10
+ return 'yarn';
11
+ if (ua.startsWith('bun'))
12
+ return 'bun';
13
+ if (ua.startsWith('npm'))
14
+ return 'npm';
15
+ return 'pnpm';
16
+ }
17
+ /** Run `<pm> rudder <args>` inheriting stdio; resolves with the exit code. */
18
+ function runRudder(pm, args) {
19
+ return new Promise((resolve, reject) => {
20
+ const proc = spawn(pm, [...(pm === 'npm' ? ['exec'] : []), 'rudder', ...args], {
21
+ cwd: process.cwd(),
22
+ stdio: 'inherit',
23
+ shell: true, // Windows: pm executables are .cmd shims
24
+ });
25
+ proc.on('close', code => resolve(code ?? 1));
26
+ proc.on('error', reject);
27
+ });
28
+ }
29
+ /**
30
+ * `rudder fresh` — one-command dev reset. A thin composite over commands that
31
+ * each work standalone:
32
+ *
33
+ * 1. `migrate:fresh [--seed]` — drop all tables, re-run migrations
34
+ * (seeding stays opt-in, matching Laravel's `migrate:fresh --seed`)
35
+ * 2. `cache:clear` — flush the application cache store, so nothing cached
36
+ * against the old data survives the wipe (best-effort: skipped when no
37
+ * cache store is installed)
38
+ * 3. framework filesystem caches (same set as `optimize:clear`)
39
+ *
40
+ * Skip-boot orchestrator: each step that needs the app boots its own child
41
+ * process, so `fresh` itself never holds connections to the database it is
42
+ * about to drop.
43
+ */
44
+ export function freshCommand(program) {
45
+ program
46
+ .command('fresh')
47
+ .description('Reset the dev environment: drop + re-migrate the database, flush caches')
48
+ .option('--seed', 'Run the database seeder after migrating')
49
+ .action(async (opts) => {
50
+ const pm = detectPackageManager();
51
+ // 1. Database — abort on failure, nothing else is worth doing on a
52
+ // half-reset schema.
53
+ console.log(chalk.bold('\n Resetting database…'));
54
+ const migrateArgs = ['migrate:fresh', ...(opts.seed ? ['--seed'] : [])];
55
+ const migrateCode = await runRudder(pm, migrateArgs);
56
+ if (migrateCode !== 0) {
57
+ console.error(chalk.red(`\n ✗ migrate:fresh failed (exit ${migrateCode}) — aborting before touching caches.`));
58
+ process.exitCode = migrateCode;
59
+ return;
60
+ }
61
+ // 2. Application cache store — stale entries referencing dropped rows
62
+ // are the classic post-reset footgun. Best-effort: not every app has a
63
+ // cache store installed.
64
+ console.log(chalk.bold('\n Flushing cache store…'));
65
+ const cacheCode = await runRudder(pm, ['cache:clear']);
66
+ if (cacheCode !== 0) {
67
+ console.log(chalk.dim(' - cache:clear skipped (no cache store installed?)'));
68
+ }
69
+ // 3. Framework filesystem caches
70
+ console.log(chalk.bold('\n Clearing framework caches…'));
71
+ reportClearResults(clearFrameworkCaches(process.cwd()));
72
+ console.log(chalk.green('\n ✔ Fresh environment ready.\n'));
73
+ });
74
+ }
75
+ //# sourceMappingURL=fresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fresh.js","sourceRoot":"","sources":["../../src/commands/fresh.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * `rudder down` — put the app into maintenance mode. Writes the
4
+ * `storage/framework/down` flag file; the kernel maintenance middleware then
5
+ * 503s every request until `rudder up`. Laravel-parity options:
6
+ *
7
+ * --secret=<token> bypass token — visit any URL with `?secret=<token>`
8
+ * once to set a bypass cookie and browse normally
9
+ * --retry=<seconds> value for the `Retry-After` response header
10
+ * --message=<text> message shown in the 503 body
11
+ * --allow=<paths> comma-separated paths always let through (e.g. /health)
12
+ *
13
+ * Skip-boot: writing a file needs no app context (and the app may be down
14
+ * precisely because it can't boot).
15
+ */
16
+ export declare function downCommand(program: Command): void;
17
+ /**
18
+ * `rudder up` — bring the app out of maintenance mode (removes the flag file).
19
+ * Skip-boot, same reasoning as `down`.
20
+ */
21
+ export declare function upCommand(program: Command): void;
22
+ //# sourceMappingURL=maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../src/commands/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4BlD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAWhD"}
@@ -0,0 +1,67 @@
1
+ import chalk from 'chalk';
2
+ import { down, up } from '@rudderjs/core';
3
+ /**
4
+ * `rudder down` — put the app into maintenance mode. Writes the
5
+ * `storage/framework/down` flag file; the kernel maintenance middleware then
6
+ * 503s every request until `rudder up`. Laravel-parity options:
7
+ *
8
+ * --secret=<token> bypass token — visit any URL with `?secret=<token>`
9
+ * once to set a bypass cookie and browse normally
10
+ * --retry=<seconds> value for the `Retry-After` response header
11
+ * --message=<text> message shown in the 503 body
12
+ * --allow=<paths> comma-separated paths always let through (e.g. /health)
13
+ *
14
+ * Skip-boot: writing a file needs no app context (and the app may be down
15
+ * precisely because it can't boot).
16
+ */
17
+ export function downCommand(program) {
18
+ program
19
+ .command('down')
20
+ .description('Put the application into maintenance mode')
21
+ .option('--secret <token>', 'Bypass token — visit ?secret=<token> to set a bypass cookie')
22
+ .option('--retry <seconds>', 'Seconds for the Retry-After header')
23
+ .option('--message <text>', 'Message shown in the 503 response body')
24
+ .option('--allow <paths>', 'Comma-separated paths to allow through (e.g. /health,/status)')
25
+ .action((opts) => {
26
+ const data = { time: Date.now() };
27
+ if (opts.secret)
28
+ data.secret = opts.secret;
29
+ if (opts.message)
30
+ data.message = opts.message;
31
+ if (opts.retry) {
32
+ const retry = Number(opts.retry);
33
+ if (Number.isFinite(retry) && retry > 0)
34
+ data.retry = retry;
35
+ }
36
+ if (opts.allow) {
37
+ const allow = opts.allow.split(',').map(p => p.trim()).filter(Boolean);
38
+ if (allow.length)
39
+ data.allow = allow;
40
+ }
41
+ down(data, process.cwd());
42
+ console.log(chalk.yellow(' ⏸ Application is now in maintenance mode.'));
43
+ if (data.secret)
44
+ console.log(chalk.dim(` Bypass: visit any URL with ?secret=${data.secret}`));
45
+ if (data.allow)
46
+ console.log(chalk.dim(` Allowed: ${data.allow.join(', ')}`));
47
+ console.log(chalk.dim(' Bring it back up with `rudder up`.'));
48
+ });
49
+ }
50
+ /**
51
+ * `rudder up` — bring the app out of maintenance mode (removes the flag file).
52
+ * Skip-boot, same reasoning as `down`.
53
+ */
54
+ export function upCommand(program) {
55
+ program
56
+ .command('up')
57
+ .description('Bring the application out of maintenance mode')
58
+ .action(() => {
59
+ if (up(process.cwd())) {
60
+ console.log(chalk.green(' ▶ Application is now live.'));
61
+ }
62
+ else {
63
+ console.log(chalk.dim(' - Application was not in maintenance mode.'));
64
+ }
65
+ });
66
+ }
67
+ //# sourceMappingURL=maintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/commands/maintenance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAwB,MAAM,gBAAgB,CAAA;AAE/D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,kBAAkB,EAAE,6DAA6D,CAAC;SACzF,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,CAAC;SACjE,MAAM,CAAC,kBAAkB,EAAE,wCAAwC,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,+DAA+D,CAAC;SAC1F,MAAM,CAAC,CAAC,IAA2E,EAAE,EAAE;QACtF,MAAM,IAAI,GAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;QAClD,IAAI,IAAI,CAAC,MAAM;YAAG,IAAI,CAAC,MAAM,GAAI,IAAI,CAAC,MAAM,CAAA;QAC5C,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC7C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACtE,IAAI,KAAK,CAAC,MAAM;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACtC,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAEzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAA;QACzE,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACjG,IAAI,IAAI,CAAC,KAAK;YAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO;SACJ,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAA;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAA;QACxE,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -18,6 +18,13 @@ export interface MakeSpec {
18
18
  directory: string;
19
19
  /** Stub generator — receives the normalized class name and parsed CLI opts */
20
20
  stub: (className: string, opts: Record<string, unknown>) => string;
21
+ /**
22
+ * Enables `--with-test`: also write `tests/<ClassName>.test.ts` alongside
23
+ * the scaffolded file. `'feature'` boots the app via `AppTestCase` (HTTP —
24
+ * the right shape for controllers); `'unit'` is plain node:test with no
25
+ * boot. Omit to not offer the flag (e.g. `make:test` itself).
26
+ */
27
+ testKind?: 'feature' | 'unit';
21
28
  /** Optional extra flags this command exposes (rendered in --help). */
22
29
  extraOptions?: ExtraOption[];
23
30
  /** Optional hook printed after the success line. Receives all parsed opts. */
@@ -1 +1 @@
1
- {"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../../src/commands/make/_shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,KAAK,EAAQ,MAAM,CAAA;IACnB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,qDAAqD;IACrD,OAAO,EAAM,MAAM,CAAA;IACnB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,mEAAmE;IACnE,KAAK,EAAQ,MAAM,CAAA;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAM,MAAM,CAAA;IACnB,4EAA4E;IAC5E,SAAS,EAAI,MAAM,CAAA;IACnB,8EAA8E;IAC9E,IAAI,EAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAA;IACzE,sEAAsE;IACtE,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1G;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAkCnE"}
1
+ {"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../../src/commands/make/_shared.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,KAAK,EAAQ,MAAM,CAAA;IACnB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,qDAAqD;IACrD,OAAO,EAAM,MAAM,CAAA;IACnB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,mEAAmE;IACnE,KAAK,EAAQ,MAAM,CAAA;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAM,MAAM,CAAA;IACnB,4EAA4E;IAC5E,SAAS,EAAI,MAAM,CAAA;IACnB,8EAA8E;IAC9E,IAAI,EAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAA;IACzE;;;;;OAKG;IACH,QAAQ,CAAC,EAAI,SAAS,GAAG,MAAM,CAAA;IAC/B,sEAAsE;IACtE,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1G;AAoCD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CA4CnE"}
@@ -1,11 +1,44 @@
1
1
  import { writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
2
3
  import { resolve, dirname } from 'node:path';
3
4
  import chalk from 'chalk';
5
+ import { featureStub, unitStub } from './test-stubs.js';
6
+ /**
7
+ * Write the companion test file for `--with-test`. Same atomic `wx`/`--force`
8
+ * semantics as the main file, but an existing test never fails the command —
9
+ * the scaffolded file already landed, so just say why the test didn't.
10
+ */
11
+ async function writeCompanionTest(className, sourceRel, testKind, force) {
12
+ const relPath = `tests/${className}.test.ts`;
13
+ const outPath = resolve(process.cwd(), relPath);
14
+ const content = testKind === 'feature' ? featureStub(className, sourceRel) : unitStub(className, sourceRel);
15
+ await mkdir(dirname(outPath), { recursive: true });
16
+ try {
17
+ await writeFile(outPath, content, { flag: force ? 'w' : 'wx' });
18
+ }
19
+ catch (err) {
20
+ if (err.code === 'EEXIST') {
21
+ console.error(chalk.red(` ✗ Test already exists: ${relPath}`));
22
+ console.error(chalk.dim(' Use --force to overwrite.'));
23
+ return;
24
+ }
25
+ throw err;
26
+ }
27
+ console.log(chalk.green(' ✔ Test created:'), chalk.cyan(relPath));
28
+ // Feature tests assume the documented tests/TestCase.ts convention.
29
+ if (testKind === 'feature' && !existsSync(resolve(process.cwd(), 'tests', 'TestCase.ts'))) {
30
+ console.log(chalk.yellow(' ! tests/TestCase.ts is missing — see docs/guide/testing.md for the setup snippet.'));
31
+ }
32
+ }
4
33
  export function registerMake(program, spec) {
5
34
  let cmd = program
6
35
  .command(`${spec.command} <name>`)
7
36
  .description(spec.description)
8
37
  .option('-f, --force', 'Overwrite if file already exists');
38
+ if (spec.testKind) {
39
+ const shape = spec.testKind === 'feature' ? 'feature test (AppTestCase + HTTP)' : 'unit test (plain node:test)';
40
+ cmd = cmd.option('-t, --with-test', `Also create tests/<Name>.test.ts as a ${shape}`);
41
+ }
9
42
  for (const extra of spec.extraOptions ?? []) {
10
43
  cmd = cmd.option(extra.flags, extra.description);
11
44
  }
@@ -30,6 +63,9 @@ export function registerMake(program, spec) {
30
63
  throw err;
31
64
  }
32
65
  console.log(chalk.green(` ✔ ${spec.label}:`), chalk.cyan(relPath));
66
+ if (spec.testKind && opts['withTest']) {
67
+ await writeCompanionTest(className, relPath, spec.testKind, Boolean(opts['force']));
68
+ }
33
69
  await spec.afterCreate?.(className, relPath, opts);
34
70
  });
35
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../../src/commands/make/_shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAA;AA4BzB,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,IAAc;IAC3D,IAAI,GAAG,GAAG,OAAO;SACd,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,CAAC;SACjC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;SAC7B,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC,CAAA;IAE5D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QAC5C,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;IAClD,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAA6B,EAAE,EAAE;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAC1D,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;YACzB,CAAC,CAAC,IAAI,CAAA;QACR,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,CAAA;QACnD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAA;QAE/C,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,IAAI,CAAC;YACH,qEAAqE;YACrE,qEAAqE;YACrE,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAA;gBAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;gBACzD,OAAM;YACR,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QACnE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../../src/commands/make/_shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare function stub(className: string): string;
3
+ export declare function makeCast(program: Command): void;
4
+ //# sourceMappingURL=cast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cast.d.ts","sourceRoot":"","sources":["../../../src/commands/make/cast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsB9C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW/C"}
@@ -0,0 +1,37 @@
1
+ import { registerMake } from './_shared.js';
2
+ export function stub(className) {
3
+ return `import type { CastUsing } from '@rudderjs/orm'
4
+
5
+ /**
6
+ * Custom attribute cast. Use it on a model:
7
+ *
8
+ * static casts = { value: ${className} } as const satisfies Record<string, CastDefinition>
9
+ *
10
+ * get() transforms the raw DB value → application type (on read);
11
+ * set() transforms the application value → DB-storable type (on write).
12
+ * Both MUST be synchronous — a cast that returns a Promise stores '[object Promise]'.
13
+ */
14
+ export class ${className} implements CastUsing {
15
+ get(_key: string, value: unknown, _attributes: Record<string, unknown>): unknown {
16
+ return value
17
+ }
18
+
19
+ set(_key: string, value: unknown, _attributes: Record<string, unknown>): unknown {
20
+ return value
21
+ }
22
+ }
23
+ `;
24
+ }
25
+ export function makeCast(program) {
26
+ registerMake(program, {
27
+ command: 'make:cast',
28
+ description: 'Create a new custom attribute cast class',
29
+ label: 'Cast created',
30
+ // No suffix — Laravel parity (make:cast Json → Json), and casts read
31
+ // cleanly as nouns in `static casts = { col: Json }`.
32
+ directory: 'app/Casts',
33
+ testKind: 'unit',
34
+ stub,
35
+ });
36
+ }
37
+ //# sourceMappingURL=cast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cast.js","sourceRoot":"","sources":["../../../src/commands/make/cast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;;;+BAKsB,SAAS;;;;;;eAMzB,SAAS;;;;;;;;;CASvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,WAAW;QACxB,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAQ,cAAc;QAC3B,qEAAqE;QACrE,sDAAsD;QACtD,SAAS,EAAI,WAAW;QACxB,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/commands/make/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBzC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAWrD"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/commands/make/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBzC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAYrD"}
@@ -30,6 +30,7 @@ export function makeCommandCmd(program) {
30
30
  description: 'Create a new rudder command class',
31
31
  label: 'Command created',
32
32
  directory: 'app/Commands',
33
+ testKind: 'unit',
33
34
  stub,
34
35
  afterCreate: (className) => {
35
36
  console.log(chalk.dim(` Register it in routes/console.ts: rudder.register(${className})`));
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/make/command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,wFAAwF;IACxF,MAAM,KAAK,GAAG,IAAI;SACf,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACzD,WAAW,EAAE,CAAA;IAEhB,OAAO;;eAEM,IAAI;4BACS,KAAK;2CACU,IAAI;;;yBAGtB,IAAI;;;;;;;;;;CAU5B,CAAA;AACD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,cAAc;QAC3B,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAQ,iBAAiB;QAC9B,SAAS,EAAI,cAAc;QAC3B,IAAI;QACJ,WAAW,EAAE,CAAC,SAAS,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,SAAS,GAAG,CAAC,CAAC,CAAA;QAChG,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/make/command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,wFAAwF;IACxF,MAAM,KAAK,GAAG,IAAI;SACf,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACzD,WAAW,EAAE,CAAA;IAEhB,OAAO;;eAEM,IAAI;4BACS,KAAK;2CACU,IAAI;;;yBAGtB,IAAI;;;;;;;;;;CAU5B,CAAA;AACD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,cAAc;QAC3B,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAQ,iBAAiB;QAC9B,SAAS,EAAI,cAAc;QAC3B,QAAQ,EAAK,MAAM;QACnB,IAAI;QACJ,WAAW,EAAE,CAAC,SAAS,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,SAAS,GAAG,CAAC,CAAC,CAAA;QAChG,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/commands/make/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,WAAW,CAAA;AAEvE,wEAAwE;AACxE,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAY9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CActD;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAYzD;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUvD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOtD;AAcD,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKjH;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAcrD"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/commands/make/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,WAAW,CAAA;AAEvE,wEAAwE;AACxE,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAY9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CActD;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAYzD;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUvD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOtD;AAcD,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKjH;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAerD"}
@@ -98,6 +98,7 @@ export function makeController(program) {
98
98
  label: 'Controller created',
99
99
  suffix: 'Controller',
100
100
  directory: 'app/Http/Controllers',
101
+ testKind: 'feature',
101
102
  stub: (className, opts) => pickStub(className, opts).body,
102
103
  extraOptions: [
103
104
  { flags: '-r, --resource', description: 'Generate a full RESTful resource controller (7 verbs)' },
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/commands/make/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/commands/make/controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/commands/make/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQhD"}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/commands/make/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAShD"}
@@ -13,6 +13,7 @@ export function makeEvent(program) {
13
13
  description: 'Create a new event class',
14
14
  label: 'Event created',
15
15
  directory: 'app/Events',
16
+ testKind: 'unit',
16
17
  stub,
17
18
  });
18
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/commands/make/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO,gBAAgB,SAAS;;;;;CAKjC,CAAA;AACD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,YAAY;QACzB,WAAW,EAAE,0BAA0B;QACvC,KAAK,EAAQ,eAAe;QAC5B,SAAS,EAAI,YAAY;QACzB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/commands/make/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO,gBAAgB,SAAS;;;;;CAKjC,CAAA;AACD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,YAAY;QACzB,WAAW,EAAE,0BAA0B;QACvC,KAAK,EAAQ,eAAe;QAC5B,SAAS,EAAI,YAAY;QACzB,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Command } from 'commander';
2
+ /** Parse + validate the `--status` flag; defaults to 500. */
3
+ export declare function resolveStatus(opts: Record<string, unknown>): number;
4
+ export declare function stub(className: string, status: number): string;
5
+ export declare function makeException(program: Command): void;
6
+ //# sourceMappingURL=exception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exception.d.ts","sourceRoot":"","sources":["../../../src/commands/make/exception.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOnE;AAED,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA0B9D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAYpD"}
@@ -0,0 +1,53 @@
1
+ import { CliError } from '@rudderjs/console';
2
+ import { registerMake } from './_shared.js';
3
+ /** Parse + validate the `--status` flag; defaults to 500. */
4
+ export function resolveStatus(opts) {
5
+ if (opts['status'] === undefined)
6
+ return 500;
7
+ const status = Number(opts['status']);
8
+ if (!Number.isInteger(status) || status < 400 || status > 599) {
9
+ throw new CliError(`--status must be an HTTP error status between 400 and 599, got "${opts['status']}"`);
10
+ }
11
+ return status;
12
+ }
13
+ export function stub(className, status) {
14
+ return `/**
15
+ * ${className} — a typed domain exception.
16
+ *
17
+ * The \`httpStatus\` property opts into the framework's duck-typed rendering:
18
+ * thrown from a route, the response uses this status automatically (JSON for
19
+ * API requests, HTML for browser navigations) — no registration required.
20
+ *
21
+ * Need a custom response shape? Register a renderer in bootstrap/app.ts:
22
+ *
23
+ * .withExceptions((e) => {
24
+ * e.render(${className}, (err, req) =>
25
+ * Response.json({ message: err.message }, { status: err.httpStatus }),
26
+ * )
27
+ * })
28
+ */
29
+ export class ${className} extends Error {
30
+ /** Rendered with this HTTP status by the framework's exception pipeline. */
31
+ readonly httpStatus = ${status}
32
+
33
+ constructor(message: string) {
34
+ super(message)
35
+ this.name = '${className}'
36
+ }
37
+ }
38
+ `;
39
+ }
40
+ export function makeException(program) {
41
+ registerMake(program, {
42
+ command: 'make:exception',
43
+ description: 'Create a new exception class',
44
+ label: 'Exception created',
45
+ directory: 'app/Exceptions',
46
+ testKind: 'unit',
47
+ stub: (className, opts) => stub(className, resolveStatus(opts)),
48
+ extraOptions: [
49
+ { flags: '-s, --status <code>', description: 'HTTP status the exception renders with (4xx/5xx, default 500)' },
50
+ ],
51
+ });
52
+ }
53
+ //# sourceMappingURL=exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exception.js","sourceRoot":"","sources":["../../../src/commands/make/exception.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,IAA6B;IACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS;QAAE,OAAO,GAAG,CAAA;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAC9D,MAAM,IAAI,QAAQ,CAAC,mEAAmE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC1G,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,SAAiB,EAAE,MAAc;IACpD,OAAO;KACJ,SAAS;;;;;;;;;kBASI,SAAS;;;;;eAKZ,SAAS;;0BAEE,MAAM;;;;mBAIb,SAAS;;;CAG3B,CAAA;AACD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,gBAAgB;QAC7B,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EAAQ,mBAAmB;QAChC,SAAS,EAAI,gBAAgB;QAC7B,QAAQ,EAAK,MAAM;QACnB,IAAI,EAAS,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QACtE,YAAY,EAAE;YACZ,EAAE,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,+DAA+D,EAAE;SAC/G;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/commands/make/job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB9C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ9C"}
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/commands/make/job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB9C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS9C"}
@@ -22,6 +22,7 @@ export function makeJob(program) {
22
22
  description: 'Create a new queue job class',
23
23
  label: 'Job created',
24
24
  directory: 'app/Jobs',
25
+ testKind: 'unit',
25
26
  stub,
26
27
  });
27
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/commands/make/job.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;;;;;;;;CAYvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAgB;IACtC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,UAAU;QACvB,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EAAQ,aAAa;QAC1B,SAAS,EAAI,UAAU;QACvB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/commands/make/job.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;;;;;;;;CAYvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAgB;IACtC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,UAAU;QACvB,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EAAQ,aAAa;QAC1B,SAAS,EAAI,UAAU;QACvB,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/commands/make/listener.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS9C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQnD"}
1
+ {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/commands/make/listener.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS9C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASnD"}
@@ -15,6 +15,7 @@ export function makeListener(program) {
15
15
  description: 'Create a new event listener class',
16
16
  label: 'Listener created',
17
17
  directory: 'app/Listeners',
18
+ testKind: 'unit',
18
19
  stub,
19
20
  });
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/commands/make/listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;CAKvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,eAAe;QAC5B,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAQ,kBAAkB;QAC/B,SAAS,EAAI,eAAe;QAC5B,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/commands/make/listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;CAKvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,eAAe;QAC5B,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAQ,kBAAkB;QAC/B,SAAS,EAAI,eAAe;QAC5B,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/commands/make/mail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB9C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ/C"}
1
+ {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/commands/make/mail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB9C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS/C"}
@@ -22,6 +22,7 @@ export function makeMail(program) {
22
22
  description: 'Create a new mailable class',
23
23
  label: 'Mailable created',
24
24
  directory: 'app/Mail',
25
+ testKind: 'unit',
25
26
  stub,
26
27
  });
27
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../../src/commands/make/mail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;;;;;;;;CAYvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,WAAW;QACxB,WAAW,EAAE,6BAA6B;QAC1C,KAAK,EAAQ,kBAAkB;QAC/B,SAAS,EAAI,UAAU;QACvB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../../src/commands/make/mail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;eAEM,SAAS;;;;;;;;;;;;CAYvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,WAAW;QACxB,WAAW,EAAE,6BAA6B;QAC1C,KAAK,EAAQ,kBAAkB;QAC/B,SAAS,EAAI,UAAU;QACvB,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/commands/make/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAe9C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASrD"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/commands/make/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAe9C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUrD"}
@@ -22,6 +22,7 @@ export function makeMiddleware(program) {
22
22
  label: 'Middleware created',
23
23
  suffix: 'Middleware',
24
24
  directory: 'app/Http/Middleware',
25
+ testKind: 'unit',
25
26
  stub,
26
27
  });
27
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/commands/make/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;eAGM,SAAS;;;;;;;;;;CAUvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,iBAAiB;QAC9B,WAAW,EAAE,+BAA+B;QAC5C,KAAK,EAAQ,oBAAoB;QACjC,MAAM,EAAO,YAAY;QACzB,SAAS,EAAI,qBAAqB;QAClC,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/commands/make/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB;IACpC,OAAO;;;eAGM,SAAS;;;;;;;;;;CAUvB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,iBAAiB;QAC9B,WAAW,EAAE,+BAA+B;QAC5C,KAAK,EAAQ,oBAAoB;QACjC,MAAM,EAAO,YAAY;QACzB,SAAS,EAAI,qBAAqB;QAClC,QAAQ,EAAK,MAAM;QACnB,IAAI;KACL,CAAC,CAAA;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/commands/make/model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOrD;AAeD,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoBhD"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/commands/make/model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOrD;AAeD,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBhD"}
@@ -37,6 +37,7 @@ export function makeModel(program) {
37
37
  description: 'Create a new ORM model class',
38
38
  label: 'Model created',
39
39
  directory: 'app/Models',
40
+ testKind: 'unit',
40
41
  stub: (className) => stub(className, deriveTable(className)),
41
42
  extraOptions: [
42
43
  { flags: '-m, --migration', description: 'Also create a migration file for the model' },
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/commands/make/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB,EAAE,KAAa;IACnD,OAAO;;eAEM,SAAS;oBACJ,KAAK;;;;;;CAMxB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,0CAA0C;IAC1C,OAAO,CACL,SAAS;SACN,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACzD,WAAW,EAAE,GAAG,GAAG,CACvB,CAAA;AACH,CAAC;AAED,iEAAiE;AACjE,SAAS,gBAAgB,CAAC,aAAqB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE;YACtE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,YAAY;QACzB,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EAAQ,eAAe;QAC5B,SAAS,EAAI,YAAY;QACzB,IAAI,EAAS,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;QACnE,YAAY,EAAE;YACZ,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,4CAA4C,EAAE;SACxF;QACD,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;gBAAE,OAAM;YAC9B,MAAM,aAAa,GAAG,UAAU,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAA;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,aAAa,GAAG,CAAC,CAAC,CAAA;YAClE,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAA;YAClD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,IAAI,GAAG,CAAC,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/commands/make/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,UAAU,IAAI,CAAC,SAAiB,EAAE,KAAa;IACnD,OAAO;;eAEM,SAAS;oBACJ,KAAK;;;;;;CAMxB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,0CAA0C;IAC1C,OAAO,CACL,SAAS;SACN,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACzD,WAAW,EAAE,GAAG,GAAG,CACvB,CAAA;AACH,CAAC;AAED,iEAAiE;AACjE,SAAS,gBAAgB,CAAC,aAAqB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE;YACtE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,YAAY,CAAC,OAAO,EAAE;QACpB,OAAO,EAAM,YAAY;QACzB,WAAW,EAAE,8BAA8B;QAC3C,KAAK,EAAQ,eAAe;QAC5B,SAAS,EAAI,YAAY;QACzB,QAAQ,EAAK,MAAM;QACnB,IAAI,EAAS,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;QACnE,YAAY,EAAE;YACZ,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,4CAA4C,EAAE;SACxF;QACD,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;gBAAE,OAAM;YAC9B,MAAM,aAAa,GAAG,UAAU,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAA;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,aAAa,GAAG,CAAC,CAAC,CAAA;YAClE,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAA;YAClD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,IAAI,GAAG,CAAC,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from 'commander';
2
+ export declare function stub(className: string): string;
3
+ export declare function makeNotification(program: Command): void;
4
+ //# sourceMappingURL=notification.d.ts.map